if(sscanf(params,"us",playerid,grund))
Du willst doch nicht die Spielerid die du eingibst in der Variable playerid speichern...sondern?
(PS: Ich gebe dir keine direkte Lösung, da du ja darum gebeten hast.)
mfg.
if(sscanf(params,"us",playerid,grund))
Du willst doch nicht die Spielerid die du eingibst in der Variable playerid speichern...sondern?
(PS: Ich gebe dir keine direkte Lösung, da du ja darum gebeten hast.)
mfg.
Bei meinem MySQL-Clienten funktioniert das.
Es wäre hilfreich, wenn du auch den Query postest, der diesen Error hervorruft
Danke es geht nun, aber weili ch jetzt noch einen Timer machen will, kommt nun ein Error:
ocmd:kick(playerid,params[])
{
if(SpielerInfo[playerid][Alevel] >= 1)
{
new pID,string[256],aname[MAX_PLAYER_NAME],SpielerName[MAX_PLAYER_NAME],grund[256];
GetPlayerName(pID,SpielerName,sizeof(SpielerName));
GetPlayerName(playerid,aname,sizeof(aname));
if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /Kick [ID/Name] [Grund]");
format(string,sizeof(string),"[INFO]{FFFFFF} %s %s hat %s gekickt. Grund: %s",GetPlayerAdminRankName(playerid),aname,SpielerName,grund);
SendClientMessageToAll(Rot,string);
Kick(pID) = SetTimerEx("Kicken",100,0, "i", playerid);//Fehler: must be lvalue (non-constant)
}
return 1;
}
Kick(pID) = SetTimerEx("Kicken",100,0, "i", playerid);//Fehler: must be lvalue (non-constant)
Das geht ja auch nicht, du kannst der Funktion Kick(pID) doch keinen Wert zuweisen
Willst du ihn in 100ms Kicken?
Dann muss das so aussehen:
SetTimerEx("Kicken",100,0,"i",pID);
//Und dann bei Kicken
forward Kicken(i);
public Kicken(i) return Kick(i);
mfg.
SetTimerEx("Kicken",100,0,"i",pID);
Geht leider immer noch nicht.. gleicher error:
ocmd:kick(playerid,params[])
{
if(SpielerInfo[playerid][Alevel] >= 1)
{
new pID,string[256],aname[MAX_PLAYER_NAME],SpielerName[MAX_PLAYER_NAME],grund[256];
GetPlayerName(pID,SpielerName,sizeof(SpielerName));
GetPlayerName(playerid,aname,sizeof(aname));
if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /Kick [ID/Name] [Grund]");
format(string,sizeof(string),"[INFO]{FFFFFF} %s %s hat %s gekickt. Grund: %s",GetPlayerAdminRankName(playerid),aname,SpielerName,grund);
SendClientMessageToAll(Rot,string);
Kicken(pID) = SetTimerEx("Kicken",100,0,"i",pID);
}
return 1;
}
Kicken(pID) =
Einfach das löschen
okay.. aber jetzt wird der Spielern icht mehr gekickt..
ocmd:kick(playerid,params[])
{
if(SpielerInfo[playerid][Alevel] >= 1)
{
new pID,string[144],aname[MAX_PLAYER_NAME],SpielerName[MAX_PLAYER_NAME],grund[128];
GetPlayerName(pID,SpielerName,sizeof(SpielerName));
GetPlayerName(playerid,aname,sizeof(aname));
if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /Kick [ID/Name] [Grund]");
format(string,sizeof(string),"[INFO]{FFFFFF} %s %s hat %s gekickt. Grund: %s",GetPlayerAdminRankName(playerid),aname,SpielerName,grund);
SendClientMessageToAll(Rot,string);
SetTimerEx("Kicken",100,0,"i",pID);
}
return 1;
}
Du kannst auch diese Include verwenden, dann musst du nicht bei jedem Kick/Ban den Timer selbst setzen: [ INCLUDE ] Kick/Ban Fix
Hallo ich hane mal eine kleine Frage wenn ich ein aduty Befehl machen will muss ich die eine globale variable machen also
new adminduty [MAX_PLAYERS
oder hier
enum playerInfo{
eingeloggt,
level,
db_id,
alevel,
slevel,
Skin,
fraktion,
rang,
spawnchange
}
Das bleibt dir überlassen. Wie du es lieber hast. Beides ist möglich.
Was wäre vom ding her einfacher bzw besser ?
Bei der ersten Variante hast du ein paar Buchstaben weniger zu schreiben. Alles andere ist völlig identisch.
Es ist absolut egal wie du es machst. Weder von den Ressourcen noch von sonst irgendwas unterscheiden sich die beiden Methoden.
Moin,
ich bin es wieder :3, undzwar: Ich habe vor kurzen ein Privatautosystem per MYSQL gemacht, und wie mache ich dass jetzt das man nur 1 Privatauto haben darf?
Du musst in der Datenbank mit SELECT abfragen, ob bereits ein Fahrzeug mit dem Name des Spielers erstellt worden ist.
Beispiel:
format(query, 128, "SELECT * FROM deinetabelle WHERE name = '%s'", SpielerName(playerid));
Wenn dann eine Zeile zurückgegeben wird (also der cache nicht leer ist), hat der Spieler bereits ein Fahrzeug.
okay, und ich möchte es so machen dass wenn man Level 5 ist dass man ein Auto + habe nkann , wie geht dass jetzt?
okay, und ich möchte es so machen dass wenn man Level 5 ist dass man ein Auto + habe nkann , wie geht dass jetzt?
Dann musst du abfragen ob weniger als zwei Zeilen vorhanden sind:
new rows = cache..//selbst mit deinen Werten ausfüllen
if(rows == 1 && SpielerInfo[playerid][Level] != 5)
{
//hat bereits eins
}
else if(rows == 2 && SpielerInfo[playerid][Level] == 5)
{
//hat bereits eins
}
else
{
//darf eins erstellen
}
Hallo, ich habe mir einen kleinen givegun Befehl geschrieben, kann aber jetzt gut 1 Woche lange nicht Testen, weil ich an keinen Computer mit SAMP komme und wollte fragen ob das so funktionieren würde!
Errors bekomme ich keine!
ocmd:givegun(playerid,params[])
{
if(PlayerInfo[playerid][pAdmin] >= 3)
{
new gname[50],pID,munni,str[30],gweapon;
if(sscanf(params,"dsd",pID,gname,munni))return SCM(playerid,frot,"[FEHLER]: /givegun [PlayerID][Name][Munition]");
if(strcmp(gname,"messer",false)){format(str,sizeof(str),"messer"); gweapon = 4;}
else if(strcmp(gname,"ketten",false)){format(str,sizeof(str),"Kettensäge"); gweapon = 9;}
else if(strcmp(gname,"granate",false)){format(str,sizeof(str),"Granate"); gweapon = 16;}
else if(strcmp(gname,"molotov",false)){format(str,sizeof(str),"Molotov Coktail"); gweapon = 18;}
else if(strcmp(gname,"pistole",false)){format(str,sizeof(str),"pistole"); gweapon = 22;}
else if(strcmp(gname,"deagle",false)){format(str,sizeof(str),"Desert Eagle"); gweapon = 24;}
else if(strcmp(gname,"schrot",false)){format(str,sizeof(str),"Schrotflinte"); gweapon = 25;}
else if(strcmp(gname,"doppelteschrot",false)){format(str,sizeof(str),"Doppelte Schrotflinte"); gweapon = 27;}
else if(strcmp(gname,"uzi",false)){format(str,sizeof(str),"UZI"); gweapon = 28;}
else if(strcmp(gname,"mp5",false)){format(str,sizeof(str),"MP5"); gweapon = 29;}
else if(strcmp(gname,"AK",false)){format(str,sizeof(str),"AK-47"); gweapon = 30;}
else if(strcmp(gname,"M4",false)){format(str,sizeof(str),"M4"); gweapon = 31;}
else if(strcmp(gname,"Sniper",false)){format(str,sizeof(str),"Scharfschützengewehr"); gweapon = 34;}
else if(strcmp(gname,"rpg",false)){format(str,sizeof(str),"RPG"); gweapon = 35;}
else if(strcmp(gname,"flammenwerfer",false)){format(str,sizeof(str),"MP5"); gweapon = 37;}
else if(strcmp(gname,"minigun",false)){format(str,sizeof(str),"Minigun"); gweapon = 38;}
SCM(playerid,mgrün,"[ADMIN]: Du hast dem Spieler %s die Waffe %s mit %d Munition gegeben!",GPlayerName(pID),str,munni);
SCM(pID,mgrün,"[ADMIN]: Du hast vom Admin %s die Waffe %s mit %d Munition bekommen!",GPlayerName(playerid),str,munni);
GivePlayerWeapon(pID,gweapon,munni);
return 1;
}
return 1;
}
Hallo leute,
warum geht mein Ban befehl nicht ? BITTE KEINE DIREKTE ANTWORTEN BZW WAS GENAU DARAN FALSCH IST! Bitte erst so ein Tipp geben
ocmd:ban(playerid,params[])
{
if(SpielerInfo[playerid][Alevel] >= 1)
{
new pID,string[256],aname[MAX_PLAYER_NAME],SpielerName[MAX_PLAYER_NAME],grund[256];
GetPlayerName(pID,SpielerName,sizeof(SpielerName));
GetPlayerName(playerid,aname,sizeof(aname));
if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /Kick [ID/Name] [Grund]");
format(string,sizeof(string),"[INFO]{FFFFFF} %s %s hat {FF9D00}%s {FFFFFF}verbannt. Grund: {FF9D00}%s",GetPlayerAdminRankName(playerid),aname,SpielerName,grund);
SendClientMessageToAll(Rot,string);
Ban(pID);
SpielerInfo[playerid][Banned] = 1;
}
return 1;
}