Beiträge von Jeffry
-
-
Ja, dann musst du aber danach auch den randium Wert der Spielervariable wieder zuweisen, damit der neue Wert mitgenommen wird.
-
Nein, dafür legst du eine Spielervariable an, wie zum Beispiel bei den Kills, und die zählst du dann hoch, und weißt sie der randium Variable zu.
-
Anstatt es zu löschen mache es zu:
dann wird dir der erste Checkpoint immer angezeigt (oder du schreibst die 0 direkt dort hin, wo im Array randium steht).
Dann kannst du über eine Spieler-Variable zum Beispiel steuern, welcher "randium" Wert gespeichert ist, und so den entsprechenden Checkpoint anzeigen lassen.
-
Versuche es so:
C
Alles anzeigenFunction OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { if(!ispassenger) { for(new i=0; i<MAX_PLAYERS; i++) { if(!IsPlayerConnected(i)) continue; if(GetPVarInt(i, "MullCarID") == vehicleid) { if(i == playerid) { if(PlayerInfo[playerid][pJob] == 17) { if(MullDuty[playerid] == 0) { SendClientMessage(playerid,COLOR_YELLOW,"Du bist nicht im Dienst also auch nicht dein Fahrzeug"); TogglePlayerControllable(playerid,false); TogglePlayerControllable(playerid,true); } } else { SendClientMessage(playerid,COLOR_GREY,"Dieses Fahrzeug gehört den Job {FFFF00}Müllmann"); TogglePlayerControllable(playerid,false); TogglePlayerControllable(playerid,true); } } else { SendClientMessage(playerid,COLOR_GREY,"Dieses Fahrzeug gehört nicht dir."); TogglePlayerControllable(playerid,false); TogglePlayerControllable(playerid,true); } } } } return 1; }
Denke daran, die PVar auf 0 zu setzen, wenn du das Müllauto löschst. -
C
Alles anzeigenocmd:car(playerid,params[]) { new var[30]; if(sscanf(params,"s",var)) return SCM(playerid,frot,"[FEHLER]:{FFFFFF} /car (lock/park)"); if(!strcmp(var,"park",true)) { if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,frot,"[FEHLER]:{FFFFFF} Du sitzt in keinem Auto"); new vID = GetPlayerVehicleID(playerid); if(!IsPlayerOwnerOfCar(playerid,vID))return SCM(plyerid,frot,"[FEHLER]:{FFFFFF} Das Auto gehört nicht dir!"); for(new i=0; i<sizeof(pCar[]); i++) { if(pCar[playerid][i][pc_vID] == vID) { new Float:pos_x,Float:pos_y,Float:pos_z,Float:pos_r; GetVehiclePos(vID,pos_x,pos_y,pos_z); GetVehicleZAngle(vID,pos_r); pCar[playerid][i][s_x] = pos_x; pCar[playerid][i][s_y] = pos_y; pCar[playerid][i][s_z] = pos_z; pCar[playerid][i][s_r] = pos_r; return 1; } } return 1; } if(!strcmp(var,"lock",true)) { new Float:distance; for(new i = 0; i<sizeof(pCar[]); i++) { distance = GetPlayerDistanceFromPoint(playerid,pCar[playerid][i][s_x],pCar[playerid][i][s_y],pCar[playerid][i][s_z]); if(distance <= 5) { if(lockstat[pCar[playerid][i][pc_vID] == 0) { lockstat[pCar[playerid][i][pc_vID]] = 1; } else { lockstat[pCar[playerid][i][pc_vID]] = 0; } return 1; } } return SendClientMessage(playerid, 0xFF0000FF, "Error: Keines deiner Fahrzeuge ist in der Nähe."); } return 1: }@OT: Größtenteils wird der MTA Editor verwendet, alternativ der SA-MP Map Editor.
-
-
http://wiki.sa-mp.com/wiki/Creating_Commands#Basic_Commands
Falls der Befehl mehr machen soll, als Nachrichten ausgeben, dann erkläre was er machen soll.
-
Nutze die mysql_static.so, die hat diese Library bereits eingebaut.
-
C
Alles anzeigenocmd:wanteds(playerid, params[]) { new string[512], pname[MAX_PLAYER_NAME]; if(IstSpielerInFraktion(playerid, 1))return SendClientMessage(playerid, FARBE_ROT, "Du bist kein Staatsbeamter!"); for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i))continue; if(!GetPlayerWantedLevel(i)) continue; GetPlayerName(i, pname, MAX_PLAYER_NAME); format(string, sizeof(string), "%s%s (%d)\n", string, pname, GetPlayerWantedLevel(i)); } if(!strlen(string)) return SendClientMessage(playerid, FARBE_ROT, "Es hat kein Spieler ein Wanted Level."); ShowPlayerDialog(playerid, DIALOG_WANTEDS, DIALOG_STYLE_MSGBOX, "Wanteds", str, "Ok", ""); return 1; } -
Es ist zwar theoretisch machbar, aber ob das so klappt wie im Singleplayer ist fragwürdig.
Du müsstest für die Pfeile entsprechende Textdraws erstellen, diese Textdraws lässt du dann mit einem Timer der mindestens alle 50ms aufgerufen wird (damit es flüssig läuft) jeweils etwas weiter drüben erstellen als zuvor.
Dann musst du über die vergangene Zeit abfragen, an welchem Pfeil du momentan bist und ob der Pfeil im Kreis ist, und zwar dann, wenn über OnPlayerUpdate mit GetPlayerKeys der richtige Key getriggert wird. -
-
Du musst die Breite des Textdraws über die Anzahl der Pixel der Zeichen bestimmen.
Hier habe ich das mal genau erklärt:
Textdraw Box & String Frage -
Wie du was anwenden sollst?
Versuche mal, den Code so weit zu schreiben, wie du kommst und poste dann was du bis dahin hast. -
Du fragst ab, ob der Spieler an der Position ist (Befehl oder Timer), wenn er es ist, dann startest du mit SetTimerEx einen 3 Sekunden Timer. Ist dieser Timer vorbei, dann fragst du erneut ab, ob der Spieler an der Position steht, wenn ja, dann gibst du ihm das Geld.
http://wiki.sa-mp.com/wiki/SetTimerExAlternativ kannst du es mit einem Checkpoint lösen und den Timer auch beim Verlassen des Checkpoints beenden.
-
Sorry für die späte Antwort, bin nicht früher dazu gekommen mir das anzuschauen.
Woran kann sowas liegen?
Das Problem, bzw. beide Probleme kann ich nicht nachvollziehen, aber versuche es mal so:
C
Alles anzeigenif(playertextid == skin_Auswahl_links[playerid]) //links { new fID = pInfo[playerid][fraktion] = GetPVarInt(playerid,"skinpos") - 1; if(pos < 0) pos = sizeSkinChange[fID] - 1; SetPVarInt(playerid,"skinpos",pos); SetPlayerSkin(playerid,skinChange[fID][pos]); SetPVarInt(playerid,"SkinNew",skinChange[fID][pos]); return 1; } if(playertextid == skin_Auswahl_rechts[playerid]) //rechts { new fID = pInfo[playerid][fraktion], pos = GetPVarInt(playerid,"skinpos") + 1; if(pos >= sizeSkinChange[fID]) pos = 0; SetPVarInt(playerid,"skinpos",pos); SetPlayerSkin(playerid,skinChange[fID][pos]); SetPVarInt(playerid,"SkinNew",skinChange[fID][pos]); return 1; } -
Du bekommst diese db_id mit dieser Funktion: http://wiki.sa-mp.com/wiki/MySQL/R33#cache_insert_id
Beispiel mit INSERT INTO Query ist dabei, dann kannst du es genau so machen. -
Meinst du die Sprites?
Dann kannst du einen Sprite-Viewer nehmen, zum Beispiel:
http://forum.sa-mp.com/showthread.php?t=566805 -
gehört das MAX_PLAYER_NAME weg (zumindest bei meiner Mysql Version und das ist die neueste von BlueG
Welche Version nutzt du denn? In der neusten Version funktioniert das nämlich so, auch laut Doku: http://wiki.sa-mp.com/wiki/MySQL/R33#cache_get_field_content
wahrscheinlich unabsichtlich, hinten noch die Rotation abgefragt, wodurch ein Error kommt.
Oh ja, das war ein Copy-Paste Fehler, und da ich ohne das ohne Compiler geschrieben habe, ist es nicht aufgefallen. Ist verbessert.
Schreibe das Löschen besser so:
C
Alles anzeigenstock DeletePlayerCars(playerid) { for(new i=0; i<sizeof(pCar[]); i++) { if(pCar[playerid][i][vID] != 0) { DestroyVehicle(pCar[playerid][i][vID]); pCar[playerid][i][vID] = 0; } } return 1; }wenn sich ein Spieler das Auto neu kauft, wie speichere ich das dann wenn er sich ausloggt ab, da wurde ja noch keine ID für das Auto aus der Datenbank geladen?
Mit einem INSERT INTO Query.
Wie finde ich heraus ob es das erste, oder das zweite Auto des spielers ist, für meinen /car park Befehl?
Das kannst du auch mit der Schleife machen.
-
Das sieht nach einer Version ab R33 aus. Am besten du versuchst gleich mal die neuste, also die R39-3.