Ist es nicht möglich, einen smoothen Zeitübergang zu machen wie im singleplayer?! Der Unterschied zwischen 6 und 7 Uhr zB ist enorm.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Mit,
https://wiki.sa-mp.com/wiki/SetPlayerTime
,kannst du auch die Minuten angeben. Wenn du jede Minute die zeit setzt, sollte es Smoother aussehen.
-
Dann muss ich für denen Player einen Timer setzen oder?
Wie ressourcenhungrig ist eigentlich so ein Timer? ich brüchte ja 100Stk bei 100 Spielern. Bei SetWorldTime brauche ich nur einen (da geht die minute ja nicht?)
-
Neuer Fehler..
Code
Alles anzeigenocmd:leader(playerid) { new data[128],fName,lName[MAX_PLAYER_NAME],showList[1200],frak; mysql_query("SELECT `Name`, `Leader` FROM `accounts` WHERE `Leader` > 0"); mysql_store_result(); while(mysql_fetch_row_format(data)){ strins(data, "|", strlen(data)); printf("data: %s", data); new oldi=0, count=0; for(new i=0; i<strlen(data); i++) { if(data[i]=='|') { count++; new tmpstring[sizeof(data)]; tmpstring=data; strdel(tmpstring, i, strlen(tmpstring)); strdel(tmpstring, 0, oldi+1); switch(count) { case 1: format(lName, sizeof(lName), "%s", tmpstring); case 2: fName = strval(tmpstring); } oldi=i; } } printf("sName: %s | fName: %d | return: %s", lName, fName, GetFraktion(frak)); format(showList,sizeof(showList),"{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",GetFraktion(fName),SpielerInfo[playerid][sName],((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online"))); } mysql_free_result(); ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen",""); return 1; } stock GetFraktion(frak) { new fName[37]="Unbekannt"; switch(frak) { case 1:{fName="San Andreas Government Department";} case 2:{fName="San Andreas Police Department";} case 3:{fName="Central Defensive Marshallas Service";} case 4:{fName="San Andreas Feuerwehr";} case 5:{fName="San Andreas Rettungsdienst";} case 6:{fName="Federal Bureau of Investigation";} case 7:{fName="San Andreas Ordnungsamt";} case 8:{fName="Interglobal Television";} case 9:{fName="Grove Street Families";} case 10:{fName="Rolling High Ballas";} case 11:{fName="Los Santos Vagos";} case 12:{fName="Los Aztecas";} case 13:{fName="San Fierro Rifa";} case 14:{fName="Triaden";} case 15:{fName="Yakuza";} case 16:{fName="Camorra";} case 17:{fName="Italian Mafia";} case 18:{fName="Russian Mafia";} case 19:{fName="International Contract Agency";} } return fName; }
-
Hallo,
ich habe ein Problem, dass zerstörte deklarierte Vehicles ersetzt werden durch neu erstellte. Dies ist dann ein Problem, wenn man irgendwo Vehicleid abfragen hat...
Uns ist das die Tage aufgefallen und da von uns keiner Erfahrungen damit gemacht hat frage ich mal hier
Die Ursache ist mir nicht ganz klar, ich hoffe man kann mich aufklären warum das so ist und was ich dagegen machen kann.
Mache ich das so, dann tritt dieser "Bug" auf, vertausche ich aber die 2 Zeilen, sodass ich erst das Fahrzeug erstelle und anschließend es lösche klappt es (wahrscheinlich würde es dann wieder Bugs geben mit neu erstellen Fahrzeugen danach).
CodeDestroyVehicle(Biz6Vehicle[i]); ErsetztesVehicle[playerid] = CreateVehicle(FVVehTypes1[i][FVT1Model], //...
Steige ich mit dieser Variante in das neue Fahrzeug, kommt er trotzdem durch diesen Code.
-
Dann muss ich für denen Player einen Timer setzen oder?
Wie ressourcenhungrig ist eigentlich so ein Timer? ich brüchte ja 100Stk bei 100 Spielern. Bei SetWorldTime brauche ich nur einen (da geht die minute ja nicht?)
Nicht ganz du machst einen Globalen Timer und gehst dann mit einer for schleife durch alle Spieler die gerade auf den Server sind, somit sparst du andere Timer.
und wenn du jetzt den Timer einmal alle Minute updatest sollte das doch gehen oder? Sowie den Spielern beim Connect die Uhrzeit einmal setzen, die du einfach in einer globalen Variable speicherst und beim Timer Aufruf setzt.
Hallo,
ich habe ein Problem, dass zerstörte deklarierte Vehicles ersetzt werden durch neu erstellte. Dies ist dann ein Problem, wenn man irgendwo Vehicleid abfragen hat...
Uns ist das die Tage aufgefallen und da von uns keiner Erfahrungen damit gemacht hat frage ich mal hier
Die Ursache ist mir nicht ganz klar, ich hoffe man kann mich aufklären warum das so ist und was ich dagegen machen kann.
Mache ich das so, dann tritt dieser "Bug" auf, vertausche ich aber die 2 Zeilen, sodass ich erst das Fahrzeug erstelle und anschließend es lösche klappt es (wahrscheinlich würde es dann wieder Bugs geben mit neu erstellen Fahrzeugen danach).
CodeDestroyVehicle(Biz6Vehicle[i]); ErsetztesVehicle[playerid] = CreateVehicle(FVVehTypes1[i][FVT1Model], //...
Steige ich mit dieser Variante in das neue Fahrzeug, kommt er trotzdem durch diesen Code.
Sry wegen dem langen Zitieren aber Foren und ich ka. wie man das kürzt
Also, nach dem DestroyVehicle(BizVehicle[i]);
fügst du noch das hinzu:
CodeDestroyVehicle(Biz6Vehicle[i]); Biz6Vehicle[i] = INVALID_VEHICLE_ID; ErsetztesVehicle[playerid] = CreateVehicle(FVVehTypes1[i][FVT1Model],//
Grund, du hast ja bestimmt Biz6Vehicle[I] = CreateVeh... erstellt somit behält er die Vehicle id auch wenn du sie Destroyst, denn DestroyVehicle cleart nicht dein Biz6Vehicle[i], somit musst du danach der Variable eine Invalid id geben oder -1 setzen ist eig. egal
Somit sollte es dann gehen eig.
-
Neuer Fehler..
Code
Alles anzeigenocmd:leader(playerid) { new data[128],fName,lName[MAX_PLAYER_NAME],showList[1200],frak; mysql_query("SELECT `Name`, `Leader` FROM `accounts` WHERE `Leader` > 0"); mysql_store_result(); while(mysql_fetch_row_format(data)){ strins(data, "|", strlen(data)); printf("data: %s", data); new oldi=0, count=0; for(new i=0; i<strlen(data); i++) { if(data[i]=='|') { count++; new tmpstring[sizeof(data)]; tmpstring=data; strdel(tmpstring, i, strlen(tmpstring)); strdel(tmpstring, 0, oldi+1); switch(count) { case 1: format(lName, sizeof(lName), "%s", tmpstring); case 2: fName = strval(tmpstring); } oldi=i; } } printf("sName: %s | fName: %d | return: %s", lName, fName, GetFraktion(frak)); format(showList,sizeof(showList),"{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",GetFraktion(fName),SpielerInfo[playerid][sName],((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online"))); } mysql_free_result(); ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen",""); return 1; } stock GetFraktion(frak) { new fName[37]="Unbekannt"; switch(frak) { case 1:{fName="San Andreas Government Department";} case 2:{fName="San Andreas Police Department";} case 3:{fName="Central Defensive Marshallas Service";} case 4:{fName="San Andreas Feuerwehr";} case 5:{fName="San Andreas Rettungsdienst";} case 6:{fName="Federal Bureau of Investigation";} case 7:{fName="San Andreas Ordnungsamt";} case 8:{fName="Interglobal Television";} case 9:{fName="Grove Street Families";} case 10:{fName="Rolling High Ballas";} case 11:{fName="Los Santos Vagos";} case 12:{fName="Los Aztecas";} case 13:{fName="San Fierro Rifa";} case 14:{fName="Triaden";} case 15:{fName="Yakuza";} case 16:{fName="Camorra";} case 17:{fName="Italian Mafia";} case 18:{fName="Russian Mafia";} case 19:{fName="International Contract Agency";} } return fName; }
Kaliber wo bist du mein guter?
-
würde gerne einen timer mit einfügen das Mann für paar Sekunden gefreezt wird und ein Text erscheint Map wird geladen und nach denn paar Sekunden Mann wieder entfreezt wird
Codeelse if (IsPlayerInRangeOfPoint(playerid,4.0,2807.8452,-1174.0934,1025.5703))// Atzen Exit { if(PlayerInfo[playerid][pLeader] == 17 || PlayerInfo[playerid][pMember] == 17 || IsACop(playerid)) { SetPlayerPos(playerid,1642.9802,2322.6882,10.8203); SetPlayerFacingAngle(playerid,82.9910); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); } }
-
würde gerne einen timer mit einfügen das Mann für paar Sekunden gefreezt wird und ein Text erscheint Map wird geladen und nach denn paar Sekunden Mann wieder entfreezt wird
Das könntest du mit einem TimerEx und nem GameText lösen, sieht bsp. so aus:
Code
Alles anzeigenelse if (IsPlayerInRangeOfPoint(playerid,4.0,2807.8452,-1174.0934,1025.5703))// Atzen Exit { if(PlayerInfo[playerid][pLeader] == 17 || PlayerInfo[playerid][pMember] == 17 || IsACop(playerid)) { SetPlayerPos(playerid,1642.9802,2322.6882,10.8203); SetPlayerFacingAngle(playerid,82.9910); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); TogglePlayerControllable(playerid, false); GameTextForPlayer(playerid, "~w~Map wird geladen..", 3000, 3); SetTimerEx("unFreeze", 3000, false, "i", playerid); } } forward unFreeze(playerid); public unFreeze(playerid) { TogglePlayerControllable(playerid, true); return 1; }
-
Dort solltest du das GameTextForPlayer noch über den Timer setzen, sonst wird der Text erst angezeigt wenn man unfreezed ist
-
-
GameTextForPlayer noch über den Timer setzen
Das passiert wenn man sowas mal eben auf die schnelle im Editor macht^^
-
Zitat
if(Spieler[playerid][pAdmin] < 1 Spieler[playerid][pOverWatch] > 0) return SendClientMessage(playerid, COLOR_WHITE, ERROR_ADMIN);
Hey,
Ich möchte das OverWatsch und Admin den befehl ausführen könn aber das geht leider nicht jemand ne ahnung?
-
-
Danke,
Kurze Frage gibt es gegen AirBreak was habe gegen Flyhack (Außerhalb des Fahrzeuges) und gegen (Speedhack im Fahrzeug) schon was dagegen entwickelt gibt es etwas gegen AirBreak?
-
etwas gegen AirBreak
Ja, ähnlich wie beim Flyhack, kannst du einfach die Position speichern von dem Spieler.
Legt er in einer gewissen Zeit (nur X, Y) Koordinate betrachten eine große Strecke zurück -> Airbreak.
(SetPlayerPos muss natürlich berücksichtigt werden, als Ausnahme bzw Aktualisierung der Position).
Ein gutes Anti-Cheat zu entwickeln ist so mit das Anspruchsvollste, was man in GTA schreiben kann xD -
Ja, ähnlich wie beim Flyhack, kannst du einfach die Position speichern von dem Spieler.
Legt er in einer gewissen Zeit (nur X, Y) Koordinate betrachten eine große Strecke zurück -> Airbreak.
(SetPlayerPos muss natürlich berücksichtigt werden, als Ausnahme bzw Aktualisierung der Position).
Ein gutes Anti-Cheat zu entwickeln ist so mit das Anspruchsvollste, was man in GTA schreiben kann xDWenn ich mich recht entsinne, kann man ergänzend die Player/Vehicle Velocity betrachten, da diese beim AirBreak nicht / gering? verändert wird. Kann aber sein, dass das mittlerweile auch manipuliert wird...
-
da diese beim AirBreak nicht / gering? verändert wird
Da hast du recht, die ist auf 0.
Wobei man da nur bei der Vehicle-Velocity sicher sein kann. Die Player-Velocity spackt rum xD
-
Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Unnötig -.- (). -
Guten Abend,
Code
Alles anzeigenocmd:oparken(playerid, params[]) { new Geld; new vehicleid = GetVehicleTrailer(GetPlayerVehicleID(playerid)); if(Spieler[playerid][pFraktion] != 5)return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION); if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 525)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist in keinem Abschlepper"); if(sscanf(params, "d", Geld))return SendClientMessage(playerid, COLOR_WHITE, "{3592D7}* Benutze {00CC00}/oparken [Kaution]"); if(vehicleid == INVALID_VEHICLE_ID)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du hast kein Fahrzeug am Hacken."); if(IsPlayerInRangeOfPoint(playerid, 10.0, 1764.8523, -1124.7183, 24.0859)) { for(new slot = 0;slot<MAX_PLAYER_VEHICLES;slot++) { for(new i=0;i<GetMaxPlayers();i++) { if(IsValidVehicle(PlayerCar[i][slot][CarId])) { if(vehicleid == PlayerCar[i][slot][CarId]) { new VehicleID, string[128]; VehicleID = GetPlayerVehicleID(playerid); new occupiedCarID = GetVehicleTrailer(VehicleID); PlayerCar[i][slot][vehAbgeschleppt] = 1; format(PlayerCar[i][slot][vehAbgeschlepptVon], MAX_PLAYER_NAME, "%s", GetName(playerid)); PlayerCar[i][slot][vehKaution] = Geld; DestroyVehicleEx(occupiedCarID); format(string, sizeof(string), "{F3FF02}Du hast den %s erfolgreich abgeschleppt und erhältst am nächsten Payday 3000$. Kaution: %d$", CarName[PlayerCar[playerid][slot][CarModel]-400], Geld); SendClientMessage(playerid, COLOR_WHITE, string); Spieler[playerid][pPayCheck] += 3000; Kasse[Oamt] = Geld; return 1; } } } } } return 1; }
Kurze frage warum wird vehAbgeschleppt und vehAbgeschleppt nicht für das Jenige Fahrzeug nicht gespeichert?
Habe schon geprüft aber wird iwie nicht übernommen in der Datenbank.
-
Habe schon geprüft aber wird iwie nicht übernommen in der Datenbank.
Was hast du denn geprüft?
Hast du print-Debugging betrieben?
Wird denn alles gesetzt?Wie sieht das Query aus, was sagt der MySQL-Log?
Oh man oh man oh man, meeeehr Infos 🙈