In welcher Reihenfolge werden die publics beim Connecten eines Spielers aufgerufen?
OnPlayerConnect -> OnPlayerRequestClass -> (OnPlayerRequestSpawn) -> OnPlayerSpawn
In welcher Reihenfolge werden die publics beim Connecten eines Spielers aufgerufen?
OnPlayerConnect -> OnPlayerRequestClass -> (OnPlayerRequestSpawn) -> OnPlayerSpawn
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(_:clickedid != INVALID_TEXT_DRAW)
{
if(clickedid == LoginString[12])//Login
{
new query[255];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, MAX_PLAYER_NAME);
mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", sendername);
mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
}
if(clickedid == Bankmenu[10])//Kontostand
{
new bank = PlayerInfo[playerid][pAccount];
new s[128];
format(s,sizeof(s),"Du hast %d$ auf dein Bankkonto",bank);
ShowPlayerDialog(playerid,Kontostand,DIALOG_STYLE_MSGBOX,"Kontostand",s,"","Verlassen");
}
if(clickedid == Bankmenu[11])//Einzahlen
{
new bank = PlayerInfo[playerid][pAccount];
new s[128];
format(s,sizeof(s),"Kontostand: %d$\nWie viel möchtest du auf dein Konto einzahlen?",bank);
ShowPlayerDialog(playerid,Einzahlen,DIALOG_STYLE_INPUT,"Einzahlen",s,"Einzahlen","Zurück");
}
if(clickedid == Bankmenu[12])//Auszahlen
{
new bank = PlayerInfo[playerid][pAccount];
new s[128];
format(s, sizeof(s), "Kontostand: %d$\nWie viel möchstes du von deinem Konto abheben?", bank);
ShowPlayerDialog(playerid,Auszahlen, DIALOG_STYLE_INPUT,"Abheben", s, "Abheben", "Zurück");
}
if(clickedid == Bankmenu[13])//Ueberweisen
{
if(PlayerInfo[playerid][pLevel] < 3)
{
SendClientMessage(playerid, COLOR_GRAD1, "Das kann man erst ab Level 3!");
TextDrawHideForPlayer(playerid, Bankmenu[0]);
TextDrawHideForPlayer(playerid, Bankmenu[1]);
TextDrawHideForPlayer(playerid, Bankmenu[2]);
TextDrawHideForPlayer(playerid, Bankmenu[3]);
TextDrawHideForPlayer(playerid, Bankmenu[4]);
TextDrawHideForPlayer(playerid, Bankmenu[5]);
TextDrawHideForPlayer(playerid, Bankmenu[6]);
TextDrawHideForPlayer(playerid, Bankmenu[7]);
TextDrawHideForPlayer(playerid, Bankmenu[8]);
TextDrawHideForPlayer(playerid, Bankmenu[9]);
TextDrawHideForPlayer(playerid, Bankmenu[10]);
TextDrawHideForPlayer(playerid, Bankmenu[11]);
TextDrawHideForPlayer(playerid, Bankmenu[12]);
TextDrawHideForPlayer(playerid, Bankmenu[13]);
return 1;
}
new bank = PlayerInfo[playerid][pAccount];
new s[128];
format(s, sizeof(s), "Kontostand: %d$\nGebe bitte die ID des Users an, an den du Überweisen willst.", bank);
ShowPlayerDialog(playerid,Uberweisen, DIALOG_STYLE_INPUT, "Bank Überweisung", s, "Weiter", "Zurück");
}
CancelSelectTextDraw(playerid);
TextDrawHideForPlayer(playerid, Bankmenu[0]);
TextDrawHideForPlayer(playerid, Bankmenu[1]);
TextDrawHideForPlayer(playerid, Bankmenu[2]);
TextDrawHideForPlayer(playerid, Bankmenu[3]);
TextDrawHideForPlayer(playerid, Bankmenu[4]);
TextDrawHideForPlayer(playerid, Bankmenu[5]);
TextDrawHideForPlayer(playerid, Bankmenu[6]);
TextDrawHideForPlayer(playerid, Bankmenu[7]);
TextDrawHideForPlayer(playerid, Bankmenu[8]);
TextDrawHideForPlayer(playerid, Bankmenu[9]);
TextDrawHideForPlayer(playerid, Bankmenu[10]);
TextDrawHideForPlayer(playerid, Bankmenu[11]);
TextDrawHideForPlayer(playerid, Bankmenu[12]);
TextDrawHideForPlayer(playerid, Bankmenu[13]);
TextDrawHideForPlayer(playerid, LoginString[9]);
PlayerTextDrawHide(playerid, ABC[playerid]);
TextDrawHideForPlayer(playerid, LoginString[12]);
TextDrawHideForPlayer(playerid, LoginString[11]);
}
else
{
//ESC gedrückt:
TextDrawHideForPlayer(playerid, Bankmenu[0]);
TextDrawHideForPlayer(playerid, Bankmenu[1]);
TextDrawHideForPlayer(playerid, Bankmenu[2]);
TextDrawHideForPlayer(playerid, Bankmenu[3]);
TextDrawHideForPlayer(playerid, Bankmenu[4]);
TextDrawHideForPlayer(playerid, Bankmenu[5]);
TextDrawHideForPlayer(playerid, Bankmenu[6]);
TextDrawHideForPlayer(playerid, Bankmenu[7]);
TextDrawHideForPlayer(playerid, Bankmenu[8]);
TextDrawHideForPlayer(playerid, Bankmenu[9]);
TextDrawHideForPlayer(playerid, Bankmenu[10]);
TextDrawHideForPlayer(playerid, Bankmenu[11]);
TextDrawHideForPlayer(playerid, Bankmenu[12]);
TextDrawHideForPlayer(playerid, Bankmenu[13]);
TextDrawHideForPlayer(playerid, LoginString[9]);
PlayerTextDrawHide(playerid, ABC[playerid]);
TextDrawHideForPlayer(playerid, LoginString[12]);
TextDrawHideForPlayer(playerid, LoginString[11]);
}
return 1;
}
Alles anzeigen
In dem else-Teil den ich dir ab Zeile 80 eingefügt habe werden die Textdraws entfernt, wenn der Spieler ESC gedrückt hat.
Wie sieht denn dein Code aus, an dem du etwas ändern willst?
Mir wird leider immer noch der gleiche Wert angezeigt.
Was soll dort eigentlich angezeigt werden? Die Distanz zum nächsten Sanitäter, oder der nächste Sanitäter?
Woher weiß ich ob er es gecancelled hat?
Wenn bei http://wiki.sa-mp.com/wiki/OnPlayerClickTextDraw die clickedid INVALID_TEXT_DRAW ist.
Wenn du einen Namen eingibst, der bereits online ist, dann passiert gar nichts und 0 wird returnt, wenn der Spieler selbst den Namen hat, oder -1 wenn ihn ein anderer Spieler hat, bzw der Name ungültig ist.
http://wiki.sa-mp.com/wiki/SetPlayerName
Du hast versucht die "playerid" zu speichern.
Versuche es so:
ocmd:tban(playerid,params[])
{
if(SpielerInfo[playerid][Adminlevel] < 2)return SendClientMessage(playerid,ROT,"Du darfst diesen Befehl nicht verwenden.");
new pID, zeit, grund[128];
if(sscanf(params,"uis",pID,zeit,grund))return SendClientMessage(playerid,ROT,"Benutze: /tban [Spieler] [Zeit] [Grund]");
if(IsPlayerConnected(pID))
{
if(zeit > 0 && zeit < 1000)
{
new string[145];
format(string,sizeof(string),"%s hat %s für %i Minute/n vom Server gebannt. [Grund: %s]",GetName(playerid),GetName(pID),zeit,grund);
SendClientMessageToAll(ROT,string);
new wert;
wert = gettime() + (60*zeit);
SpielerInfo[pID][Timeban] = wert;
SpielerSpeichern(pID);
Kick(pID);
Adminlog(string);
return 1;
}
SendClientMessage(playerid,ROT,"Du musst eine gültige Zeit angeben.");
return 1;
}
SendClientMessage(playerid,ROT,"Dieser Spieler ist nicht Online.");
return 1;
}
Alles anzeigen
Wenn das auch nicht geht, dann poste, wie du prüfst, ob der Spieler gebannt ist.
Das ist die Anzahl der unterschiedlichen Modelle, nicht die Anzahl der Fahrzeuge. Also die Anzahl an unterschiedlichen Modelids (erster Parameter).
Du erstellst alle Fahrzeuge an der gleichen Position, das ist doch nicht gewollt, oder?
Versuche es so:
AddStaticVehicle(520, 2109.1763, 1503.0453, 32.2887, 82.2873, 0, 1);
AddStaticVehicle(522, 2114.1763, 1503.0453, 32.2887, 82.2873, 0, 1);
AddStaticVehicle(525, 2109.1763, 1508.0453, 32.2887, 82.2873, 0, 1);
AddStaticVehicle(525, 2109.1763, 1498.0453, 32.2887, 82.2873, 0, 1);
AddStaticVehicle(520, 2104.1763, 1503.0453, 32.2887, 82.2873, 0, 1);
Dann sind sie alle um den Punkt 2109.1763, 1503.0453, 32.2887 verteilt. Ich weiß nicht wo das ist, gegebenenfalls stehen die Fahrzeuge in einem Haus oder fallen durch den Boden.
Versuche es, falls es nicht geht, mal mit den Koordinaten von einem Flughafen (hin gehen -> /save -> Eigene Dokuments -> GTA SA User Files -> savedpositions.txt);
Normalerweise sollte es aber alle 5 Fahrzeuge erstellen.
Mir ist grade aufgefallen, dass du den Index mit der vehicleid vertauscht hast.
Versuche es so:
ocmd:carlock(playerid, params[])
{
new Float:Pos[3], vid;
new engine, lights, alarm, doors, bonnet, boot, objective;
for(new i=0; i < sizeof(VehicleInfo); i++)
{
vid = VehicleInfo[i][v_XID];
if(!IsValidVehicle(vid))continue;
if(VehicleInfo[i][v_Besitzer] != PlayerInfo[playerid][p_ID]) continue;
GetVehiclePos(vid, Pos[0], Pos[1], Pos[2]);
GetVehicleParamsEx(vid, engine, lights, alarm, doors, bonnet, boot, objective);
if(!IsPlayerInRangeOfPoint(playerid, 3, Pos[0], Pos[1], Pos[2])) continue;
if(VehicleInfo[i][v_Schloss] == true)
{
SetVehicleParamsEx(vid, engine, lights, alarm, 0, bonnet, boot, objective);
GameTextForPlayer(playerid, "~r~Aufgeschlossen", 3000, 4);
VehicleInfo[i][v_Schloss] = false;
}
else
{
SetVehicleParamsEx(vid, engine, lights, alarm, 1, bonnet, boot, objective);
GameTextForPlayer(playerid, "~g~Zugeschlossen", 3000, 4);
VehicleInfo[i][v_Schloss] = true;
}
return 1;
}
return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht in der nähe deines Privatfahrzeug.");
}
Alles anzeigen
Du musst auch die Schleife entfernen und die ID ansprechen, die eingegeben wurde:
CMD:eremove(playerid,params[])
{
new i;
if(sscanf(params, "u", i)) return SendClientMessage(playerid,WHITE, "{FF1717}ERROR:{FFFFFF} /eremove [ID/Name]");
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) return SendClientMessage(playerid, WHITE, "Error: Spieler nicht online.");
SendClientMessage(i,WHITE,"{FF1717}[EVENT]: Wrong answer!");
PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
for(new j=0; j < 13; j++)GivePlayerWeapon(i,PlayerInfo[i][weapons][j], PlayerInfo[i][ammo][j]);
// 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]);
GivePlayerWeapon(i,PlayerInfo[i][weapons], PlayerInfo[i][ammo]);
SetPlayerSkin(playerid, PlayerInfo[playerid][p_Playerskin]);
inEvent[i] = false;
return 1;
}
Alles anzeigen
Versuche vor das cache_get_field_content_int ein "bool:" zu setzen, das nennt sich casten.
Nein, per direkte Tastatureingabe ist das nicht möglich.
Du darfst nicht 0,1,... im Array nutzen, sondern musst die Definitionen aus dem enum nehmen.
Ja, das kannst du dann mit sscanf zum Beispiel machen, wenn es in einem Befehl ist.
Das kannst du ja von einem anderen Befehl den du hast einfach übernehmen.