Was ist denn jetzt noch das Problem? Geht es immer noch nicht?
Kannst du nochmal den aktuellen Code posten, falls es nicht geht? Und einen aktuellen Log dazu.
Beiträge von Jeffry
-
-
Ich wollte fragen , ob man einen Spieler löschen kann also einen Account über der Datenbank mit einen MySQL befehl. Und wenn ja , welchen?
-
Dann zeig doch mal wie du die Schranken aus der Datenbank lädst.
-
Dann kannst du das aber nicht über playerid steuern.
ocmd:buyzollticket(playerid,params[])
{
new string[145];
/*
ZLV1L/auf CreateObject(968, 1648.6, -42.1, 36.4, 0, 0, 31.5);
ZLV1L/zu CreateObject(968, 1648.5996, -42.09961, 36.4, 0, 268.25, 22.998);
*/
if(IsPlayerInRangeOfPoint(playerid,5.0, 1648.6, -42.1, 36.4)) //Links in Fahrtrichtung nach LV
{
format(string,sizeof(string),"Möchtest du ein Zollticket im Preis von %i Euro kaufen?",zInfo[playerid][z_preis]);
ShowPlayerDialog(playerid,DIALOG_ZOLL_LS_LV,DIALOG_STYLE_MSGBOX,"Zoll - Ticket",string,"Ja","Nein, Abbruch");
}
else if(IsPlayerInRangeOfPoint(playerid,5.0, 1656.6, -35.6, 36.5)) //Rechts in Fahrtrichtung nach LS
{
format(string,sizeof(string),"Möchtest du ein Zollticket im Preis von %i Euro kaufen?",zInfo[playerid][z_preis]);
ShowPlayerDialog(playerid,DIALOG_ZOLL_LV_LS,DIALOG_STYLE_MSGBOX,"Zoll - Ticket",string,"Ja","Nein, Abbruch");
}
return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist bei keiner Zollstation.");
}Beim Dialog:
LS_LV:
GivePlayerMoney(playerid,-zInfo[0][z_preis]);LV_LS:
GivePlayerMoney(playerid,-zInfo[1][z_preis]);Beim Befehl mit dem du den Preis änderst:
if(IsPlayerInRangeOfPoint(playerid,5.0, 1648.6, -42.1, 36.4)) //Links in Fahrtrichtung nach LV
{
zInfo[0][z_preis] = WERT_DER_EINGEGEBEN_WIRD;
}
else if(IsPlayerInRangeOfPoint(playerid,5.0, 1656.6, -35.6, 36.5)) //Rechts in Fahrtrichtung nach LS
{
zInfo[1][z_preis] = WERT_DER_EINGEGEBEN_WIRD;
} -
zInfo[i][z_rang] = GetPlayerAdminName(i);
zu:
format(zInfo[i][z_rang],32,GetPlayerAdminName(i));Im enum:
z_rang,zu:
z_rang[32], -
Das sollst du nicht machen.
Poste mal deine GetPlayerAdminName Funktion. -
zInfo[i][z_name] = GetPlayerName(i);
zu:
GetPlayerName(i, zInfo[i][z_name], MAX_PLAYER_NAME);Im enum:
z_rang,
zu:
z_rang[32],
oder eben 32 zu dem, wie die Größe des Arrays in GetPlayerAdminName ist, welches du zurückgibst. -
Da du ja gemeint hast, dass es fest gesetzt werden soll, würde es so aussehen:
ocmd:buyzollticket(playerid,params[])
{
new string[145];
/*
ZLV1L/auf CreateObject(968, 1648.6, -42.1, 36.4, 0, 0, 31.5);
ZLV1L/zu CreateObject(968, 1648.5996, -42.09961, 36.4, 0, 268.25, 22.998);
*/
if(IsPlayerInRangeOfPoint(playerid,5.0, 1648.6, -42.1, 36.4)) //Links in Fahrtrichtung nach LV
{
zInfo[playerid][z_preis] = 250;
format(string,sizeof(string),"Möchtest du ein Zollticket im Preis von %i Euro kaufen?",zInfo[playerid][z_preis]);
ShowPlayerDialog(playerid,DIALOG_ZOLL_LS_LV,DIALOG_STYLE_MSGBOX,"Zoll - Ticket",string,"Ja","Nein, Abbruch");
}
else if(IsPlayerInRangeOfPoint(playerid,5.0, 1656.6, -35.6, 36.5)) //Rechts in Fahrtrichtung nach LS
{
zInfo[playerid][z_preis] = 500;
format(string,sizeof(string),"Möchtest du ein Zollticket im Preis von %i Euro kaufen?",zInfo[playerid][z_preis]);
ShowPlayerDialog(playerid,DIALOG_ZOLL_LV_LS,DIALOG_STYLE_MSGBOX,"Zoll - Ticket",string,"Ja","Nein, Abbruch");
}
return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist bei keiner Zollstation.");
} -
Schildpos[i][SchildObject2] = Create3DTextLabel("70\nKm/h", 0xFF002DFF, x, y, z-0.4,250.0,0,0);
Außerdem muss SchildObject2 im enum so aussehen:
Text3D:SchildObject2, -
GivePlayerMoney in den Parametern von format wird dir nicht den richtigen Wert zurückgeben, sprich das Geld wird falsch in der Datenbank stehen.
Außerdem macht man allgemein keine sonstigen Wertzuweisungen in Parametern.Außerdem muss Level als Integer (%d) übergeben werden, und nicht als String.
So wäre es richtig:
SpielerInfo[playerid][pLevel] = 1;
SpielerInfo[playerid][pMaxRP] = 12;
GivePlayerMoney(playerid,15000);
SpielerInfo[playerid][pBank] = 10000;
format(querys, sizeof(querys), "UPDATE `accounts` SET `Level` = '%d', `MaxRP` = '%d', `VerheiratetMit` = '%s', `Geld` = '%d', `Bank` = '%d' WHERE Name = '%s'",
SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pMaxRP],"Suchend",15000,SpielerInfo[playerid][pBank],SpielerName(playerid)); -
Poste mal wie du deine Schranken lädst, dann schaue ich es mir morgen Abend mal an.
EDIT:
Fortführung hier: Zollstation (Koordinaten) == Schranke 1 oder Schranke 2 -
GetPlayerName(i, pip, sizeof(pip));
zu:
GetPlayerIp(i, pip, sizeof(pip));Den Name kannst du dann rausfinden, wenn du die IP geprüft hast, bevor du die Nachricht ausgibst.
if(success) //If the password was correct
{
for(new i=0; i<MAX_PLAYERS; i++) //Loop through all players
{
new pip[16];
GetPlayerIp(i, pip, sizeof(pip));
if(IsPlayerConnected(i) && !strcmp(ip, pip, true)) //If a player's IP is the IP that failed the login
{
new name[MAX_PLAYER_NAME];
GetPlayerName(i, name, MAX_PLAYER_NAME);
printf("%s (%s) hat sich erfolgreich ins Rcon eingeloggt",name,ip);
format(stringrcon, sizeof(stringrcon), "%s hat sich ins RCON eingeloggt",name);
ABroadCast(COLOR_RED,stringrcon,1);
}
}
} -
Du musst es über die IP machen, nicht über den Name. Wie es im Beispiel ist.
Der Name wird nicht in dem Callback mitgegeben, die IP schon. Das liegt daran, dass man sich auch über eine externe Konsole einloggen kann, und da hat man ja keinen Name.Einen RCON LOGIN Befehl gibt es schon:
/rcon LoginDer ist standardmäßig in jedem Server.
-
Schau mal hier, Beispiel ist dabei:
http://wiki.sa-mp.com/wiki/OnRconLoginAttempt -
Zwecks des keinen Passworts:
if(!strcmp(key,dini_Get(Spieler,"Passwort"),false))
Zu
if(strlen(key) > 0 && !strcmp(key,dini_Get(Spieler,"Passwort"),false))Löst das dann auch schon das andere Problem?
-
Kein Problem, deswegen sind wir ja hier.
Jetzt müsste ich nur wissen, wie du die Dialoge an den unterschiedlichen Positionen anzeigst.Nämlich je nach dem wie du das machst, musst du auch das Geld anziehen.
Ich nehme mal an, du zeigst unterschiedliche Dialoge an:
if(dialogid == DIALOG_ZOLL_LV)
{
//...
GivePlayerMoney(playerid, -300);
}
if(dialogid == DIALOG_ZOLL_LS)
{
//...
GivePlayerMoney(playerid, -500);
}Ist dir das soweit genug?
Wenn nicht, kein Problem, dann poste nochmal den Code den du bis dahin hast, mit den zwei Schranken. -
Das kannst du ja im jeweiligen Dialog der dann angezeigt wird regeln, oder du fragst eben beim Geld abziehen auch die Position nochmal ab.
-
Das musst du dann mit else if machen.
ocmd:buyzollticket(playerid,params[])
{
new string[128];
if(IsPlayerInRangeOfPoint(playerid,5,1648.6, -42.1, 36.4)) //Links in Fahrtrichtung nach LV
{
format(string,sizeof(string),"Möchtest du ein Zollticket im Preis von %i Euro kaufen?",zInfo[playerid][z_preis]);
ShowPlayerDialog(playerid,DIALOG_ZOLL_LV,DIALOG_STYLE_MSGBOX,"Zoll - Ticket",string,"Ja","Nein, Abbruch");
}
else if(IsPlayerInRangeOfPoint(playerid,5, /*andere Position*/))
{}
return 1;
} -
Dass du die Schranke nur an der speziellen Position öffnen kannst, oder was genau meinst du?
Ein schon vorhandener Code und eine genauere Erklärung wären gut, damit ich dir da helfen kann.
-
mysql_tquery wird vom R7 nicht unterstützt.
Lade dir hier die aktuelle R39-2 herunter: https://github.com/pBlueG/SA-MP-MySQL/releasesNutze am besten die mysql_static.so, falls du Probleme beim Laden des Plugins hast.
EDIT:
Silbermond: Das liegt am falschen Plugin. Und mach mal die tausenden Zitate weg.
EDIT2:
Danke!