Wenn man sein Namen änder will über: SetPlayerName(... muss man Abfragen ob der eingegebene Name schon existiert oder funktioniert das automatisch?
Beiträge von malE
-
-
Funktioniert leider immer noch nur beim ersten Fahrzeug.
-
Genau das ist mir auch aufgefallen als ich eben in die Konsole geschaut habe.
Ich habe es aber so gemachtCmysql_format(handle, query, sizeof(query), "UPDATE vehicles SET x='%f', y='%f', z='%f', r='%f', health='%f' WHERE id='%d'", VehicleInfo[i][v_X], VehicleInfo[i][v_Y], VehicleInfo[i][v_Z], VehicleInfo[i][v_R], health, VehicleInfo[i][v_ID]);
--
Gehört zwar nicht zur Speicherung etc.@Jeffry
Man kann nur sein erstes Fahrzeug auf- und zuschließen.
Beispiel: 1st Infernus, 2nd Sultan, 3th NRG-500.
Man steht am Infernus und gibt /carlock ein funktioniert es.
Steht man aber an einem anderen Privatfahrzeug welches nicht das 1st Fahrzeug ist funktioniert es nicht.C
Alles anzeigenocmd:carlock(playerid, params[]) { new Float:Pos[3]; new engine, lights, alarm, doors, bonnet, boot, objective; for(new i=0; i < MAX_VEHICLES; i++) { if(!IsValidVehicle(i))continue; GetVehiclePos(i, Pos[0], Pos[1], Pos[2]); GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective); if(!IsPlayerInRangeOfPoint(playerid, 3, Pos[0], Pos[1], Pos[2]))return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht in der nähe deines Privatfahrzeug."); if(VehicleInfo[i][v_Besitzer] != PlayerInfo[playerid][p_ID])continue; if(VehicleInfo[i][v_Schloss] == true){ SetVehicleParamsEx(i, engine, lights, alarm, 0, bonnet, boot, objective); GameTextForPlayer(playerid, "~r~Aufgeschlossen", 3000, 4); VehicleInfo[i][v_Schloss] = false; return 1; } else{ SetVehicleParamsEx(i, engine, lights, alarm, 1, bonnet, boot, objective); GameTextForPlayer(playerid, "~g~Zugeschlossen", 3000, 4); VehicleInfo[i][v_Schloss] = true; return 1; } } return 1; }
-
Der Command-Prozessor heißt ZCMD.
http://forum.sa-mp.com/showthread.php?t=91354 -
Ok alles klar, ich gebe dir trotzdem eine Version als Befehl.
Befehl:
Unter den IncludesC
Alles anzeigenCMD:nametag(playerid, params[]) { for(new i=0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i))continue; if(IsPlayerAdmin(i))continue; if(NametagStatus == true) { ShowPlayerNameTagForPlayer(i, i, 0); NametagStatus = false; SendClientMessageToAll(COLOR_RED, "Die Nametags wurden soeben ausgeblendet."); } else { ShowPlayerNameTagForPlayer(i, i, 1); NametagStatus = true; SendClientMessageToAll(COLOR_RED, "Die Nametags sind wieder eingeblendet."); } } }
--
C
Alles anzeigenCMD:ejoin(playerid,params[]) { new name[MAX_PLAYER_NAME], string[100]; GetPlayerName(playerid, name, sizeof(name)); if(inEvent[playerid] != false)return SendClientMessage(playerid, WHITE, "{FF1717}ERROR:{FFFFFF} You're already in the event. Use {FF1717}/eleave{FFFFFF} to leave it."); if(!IsPlayerAdmin(playerid)) { for(new i=0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || IsPlayerAdmin(i))continue; ShowPlayerNameTagForPlayer(playerid, i, 0), SendClientMessageToAll(COLOR_RED, "Die Nametags wurden soeben ausgeblendet. ( Admin sind aber sichtbar )"); } } new Float:HP, Float:Pos[4], Float:Armour; GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]); GetPlayerFacingAngle(playerid, Pos[3]); GetPlayerHealth(playerid, HP); GetPlayerArmour(playerid, Armour); for(new i=0; i <= 12; i++)GetPlayerWeaponData(playerid, i, PlayerInfo[playerid][weapons][i], PlayerInfo[playerid][ammo][i]); PlayerInfo[playerid][p_Health] = HP; PlayerInfo[playerid][p_Armour] = Armour; PlayerInfo[playerid][p_X] = Pos[0]; PlayerInfo[playerid][p_Y] = Pos[1]; PlayerInfo[playerid][p_Z] = Pos[2]; PlayerInfo[playerid][p_A] = Pos[3]; PlayerInfo[playerid][p_Interior] = GetPlayerInterior(playerid); PlayerInfo[playerid][p_VirtualWorld] = GetPlayerVirtualWorld(playerid); if(zaehler >= sizeof(RandomSpawns)) zaehler = 0; SetPlayerPos(playerid, RandomSpawns[zaehler][0], RandomSpawns[zaehler][1], RandomSpawns[zaehler][2]); format(string, sizeof(string), "{FF1717}[EVENT]:{FFFFFF}{%06x} %s{FFFFFF} joined the Event - {FF1717}/ejoin", GetPlayerColor(playerid) >>> 8,name); SendClientMessageToAll(0xC4C4C4FF, string); zaehler++; inEvent[playerid] = true; return 1; }
C
Alles anzeigenCMD:eleave(playerid,params[]) { new name[MAX_PLAYER_NAME], string[100]; GetPlayerName(playerid, name, sizeof(name)); if(inEvent[playerid] != true)return SendClientMessage(playerid, WHITE, "{FF1717}ERROR:{FFFFFF} You're not in an event. Use {FF1717}/ejoin{FFFFFF} to join one."); format(string, sizeof(string), "{FF1717}[EVENT]:{FFFFFF}{%06x} %s{FFFFFF} has left the Event - {FF1717}/eleave", GetPlayerColor(playerid) >>> 8,name); SendClientMessageToAll(0xC4C4C4FF, string); inEvent[playerid] = false; // Setzt den Spieler die zuvor gespeicherten Variablen zurück. SetPlayerPos(playerid, PlayerInfo[playerid][p_X], PlayerInfo[playerid][p_Y], PlayerInfo[playerid][p_Z]); SetPlayerFacingAngle(playerid, PlayerInfo[playerid][p_A]); SetPlayerInterior(playerid, PlayerInfo[playerid][p_Interior]); SetPlayerVirtualWorld(playerid, PlayerInfo[playerid][p_VirtualWorld]); SetPlayerHealth(playerid, PlayerInfo[playerid][p_Health]); SetPlayerArmour(playerid, PlayerInfo[playerid][p_Armour]); GivePlayerWeapon(playerid,PlayerInfo[playerid][weapons], PlayerInfo[playerid][ammo]); for(new i=0; i < MAX_PLAYERS; i++)if(!IsPlayerConnected(i) || IsPlayerAdmin(i))continue; ShowPlayerNameTagForPlayer(playerid, i, 1), SendClientMessageToAll(COLOR_RED, "Die Nametags werden wieder eingeblendet."); return 1; }
-
Sollen die Nametags per Befehl versteckt werden oder sollen sie direkt zum Serverstart verschwinden?
-
Wie lade ich eine Boolean Variable aus der MySQL Datenbank?
Mit cache_get_field_content_int(... bekomme ich immer tag mismatch. Wird es mit cache_get_field_content(... funktionieren? -
-
Es wird nur ein Fahrzeug gespeichert also der Infernus, der Sultan wird nicht gespeichert.
-
-
Eigentlich soll geprüft werden ob das Fahrzeug dem Spieler gehört.
Die Variablen werden mit der cache-id der Datenbank definiert.
-
Mein Fehler! Normalerweise muss es so aussehen.
if(VehicleInfo[i][v_Besitzer] != PlayerInfo[playerid][p_ID])continue;Weil in der Variable VehicleInfo[i][v_ID] wird die cache-id gespeichert.
-
-
Vielen dank Jeffry!
Dann wollen wir mal zurück zum eigentlichen
-
Ja würde es.
-
@[LnD]JustMe.77 meinst du ein Callback der vor einem Befehl Aufgerufen wird?
Beispiel: Du gibst ein Befehl ein, Callback wird aufgerufen ( evtl. Abfragen ausgeführt im Callback ), dann wird Befehl zu Ende ausgeführt.
Dieses Callback gibt es aber nur beim Command-Prozessor: ocmd, sobald ich weiß.
Habe ich aber auch nur durch Jeffry kennengelernt. -
Du musst die zuvor gespeicherten Spieler-Variablen den Spieler wiedergeben.
C
Alles anzeigenCMD:eleave(playerid,params[]) { new name[MAX_PLAYER_NAME], string[100]; GetPlayerName(playerid, name, sizeof(name)); if(inEvent[playerid] != true)return SendClientMessage(playerid, WHITE, "{FF1717}ERROR:{FFFFFF} You're not in an event. Use {FF1717}/ejoin{FFFFFF} to join one."); format(string, sizeof(string), "{FF1717}[EVENT]:{FFFFFF}{%06x} %s{FFFFFF} has left the Event - {FF1717}/eleave", GetPlayerColor(playerid) >>> 8,name); SendClientMessageToAll(0xC4C4C4FF, string); inEvent[playerid] = false; // Setzt den Spieler die zuvor gespeicherten Variablen zurück. SetPlayerPos(playerid, PlayerInfo[playerid][p_X], PlayerInfo[playerid][p_Y], PlayerInfo[playerid][p_Z]); SetPlayerFacingAngle(playerid, PlayerInfo[playerid][p_A]); SetPlayerInterior(playerid, PlayerInfo[playerid][p_Interior]); SetPlayerVirtualWorld(playerid, PlayerInfo[playerid][p_VirtualWorld]); SetPlayerHealth(playerid, PlayerInfo[playerid][p_Health]); SetPlayerArmour(playerid, PlayerInfo[playerid][p_Armour]); return 1; } CMD:erem(playerid,params[]) { for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue; if(IsPlayerInRangeOfPoint(i, 5, 1869.0564,-2499.7913,5048.4761)) { //SetPlayerPos(i, 1857.0629,-2477.5789,5048.4761); SendClientMessage(i,WHITE,"{FF1717}Wrong answer!"); PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0); // Setzt den Spieler die zuvor gespeicherten Variablen zurück. SetPlayerPos(i, PlayerInfo[i][p_X], PlayerInfo[i][p_Y], PlayerInfo[i][p_Z]); SetPlayerFacingAngle(i, PlayerInfo[i][p_A]); SetPlayerInterior(i, PlayerInfo[i][p_Interior]); SetPlayerVirtualWorld(i, PlayerInfo[i][p_VirtualWorld]); SetPlayerHealth(i, PlayerInfo[i][p_Health]); SetPlayerArmour(i, PlayerInfo[i][p_Armour]); } } return 1; }
-
Müsste so funktionieren.
Unter den VariablenC
Alles anzeigenenum Enum_Player { Float:p_Health, Float:p_Armour, Float:p_X, Float:p_Y, Float:p_Z, Float:p_A, p_Interior, p_VirtualWorld } new PlayerInfo[MAX_PLAYERS][Enum_Player];
OnPlayerConnectC
Alles anzeigenpublic OnPlayerConnect(playerid) { PlayerInfo[playerid][p_Health] = 0.0; PlayerInfo[playerid][p_Armour] = 0.0; PlayerInfo[playerid][p_X] = 0.0; PlayerInfo[playerid][p_Y] = 0.0; PlayerInfo[playerid][p_Z] = 0.0; PlayerInfo[playerid][p_A] = 0.0; PlayerInfo[playerid][p_Interior] = 0; PlayerInfo[playerid][p_VirtualWorld] = 0; return 1; }
Dein Befehl
C
Alles anzeigenCMD:ejoin(playerid,params[]) { new name[MAX_PLAYER_NAME], string[100]; GetPlayerName(playerid, name, sizeof(name)); if(inEvent[playerid] != false)return SendClientMessage(playerid, COLOR_GREY, "Error: Du bist schon in einem Event."); // Übersetzen new Float:HP, Float:Pos[4], Float:Armour; GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]); GetPlayerFacingAngle(playerid, Pos[3]); GetPlayerHealth(playerid, HP); GetPlayerArmour(playerid, Armour); PlayerInfo[playerid][p_Health] = HP; PlayerInfo[playerid][p_Armour] = Armour; PlayerInfo[playerid][p_X] = Pos[0]; PlayerInfo[playerid][p_Y] = Pos[1]; PlayerInfo[playerid][p_Z] = Pos[2]; PlayerInfo[playerid][p_A] = Pos[3]; PlayerInfo[playerid][p_Interior] = GetPlayerInterior(playerid); PlayerInfo[playerid][p_VirtualWorld] = GetPlayerVirtualWorld(playerid); if(zaehler >= sizeof(RandomSpawns)) zaehler = 0; SetPlayerPos(playerid, RandomSpawns[zaehler][0], RandomSpawns[zaehler][1], RandomSpawns[zaehler][2]); format(string, sizeof(string), "{FF1717}[EVENT]:{FFFFFF}{%06x} %s{FFFFFF} joined the Event - {FF1717}/ejoin", GetPlayerColor(playerid) >>> 8,name); SendClientMessageToAll(0xC4C4C4FF, string); zaehler++; inEvent[playerid] = true; return 1; }
Wenn das Event vorbei ist, musst du dann nur noch die Variablen auf den Spieler überschreiben.
Also mit SetPlayerPos(... und so weiter.// Edit
Habe etwas im Befehl geändert, musst du bei bedarf noch bei dir umändern. -
Meinst du mit zurücksetzen, alle Variablen auf 0 bzw leer.
Oder den Spielern den Werten der Variablen wiedergeben? -
Habe nun einige Callbacks Schritt für Schritt ausgeklammert, aber es hat sich leider nichts getan.
-
@Jeffry darf ich dir eine PN mit dem Script (1300 Zeilen) schicken, damit du es dir mal selbst anschauen kannst ? -