Du meinst das so?
format(string,sizeof(string), GVRN(playerid,spalte));
SD[pID][pVerwalter][3] = verwid;
Hier dann auch spalte rein oder die 3 lassen?
Du meinst das so?
format(string,sizeof(string), GVRN(playerid,spalte));
SD[pID][pVerwalter][3] = verwid;
Hier dann auch spalte rein oder die 3 lassen?
Ich komm irgendwie net weiter.
format(string,sizeof(string), GVRN(playerid)[4];
So hab ichs versucht aber compiler wirft erros
Edit:
Hab GVRN malfolgendermaßen gemacht. Meintest du das so @Jeffry?
stock GetVerwalterRangName(playerid)
{
new string[50];
switch(SpielerDaten[playerid][pVerwalter][3])
{
case 0: string = "Spieler";
case 1: string = "Helferverwalter";
case 2: string = "Firmenverwalter";
case 3: string = "Bizverwalter";
case 4: string = "Fraktionsverwalter";
case 5: string = "Parteiverwalt";
case 6: string = "Hausverwalter";
case 7: string = "Charakterbeauftragter";
case 8: string = "Eventmanager";
}
return string;
}
Ich glaub das format wie ich oben schrieb war falsch.
Ich habe es so gemacht wie ich mir dachte dass es richtig ist.
Bitte helf mir aufn Sprung.
Der Befehl sieht folgendermaßen aus.
ocmd:makeverwalter(playerid, params[])
{
//if(SD[playerid][pEingeloggt] == 0)return SCM(playerid, GRAU, "Du bist nicht eingeloggt!");
new pID, verwid, spalte, string[128];
if(!iPAA(playerid,5))
{
if(sscanf(params, "uii", pID, spalte, verwid))return makeadmin;
//if(adminid < 2)return SCM(playerid, GRAU, "Du kannst nur ab Rang 2 vergeben.");
if(IPN(pID))return 1;
//if(IsPlayerNPC(pID))return 1;
//if(!Eingeloggt[pID])return SCM(playerid, GRAU, "Dieser Spieler ist nicht eingeloggt!");
//if(SD[pID][pIntro] < 1)return SCM(playerid, GRAU, "Der Spieler ist noch im Tutorial.");
if(verwid == 0)
{
for(new verwalter; verwalter < 4; verwalter ++)
format(string,sizeof(string), GVRN(playerid));
SD[pID][pVerwalter] = verwid;
format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
SCM(playerid, BLAU, string);
format(string,sizeof(string), GVRN(playerid));
SD[pID][pVerwalter] = verwid;
format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GVRN(pID));
SCM(pID, BLAU, string);
format(string,sizeof(string), GVRN(playerid));
SD[pID][pVerwalter] = verwid;
format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GVRN(pID));
SAM(BLAU, string);
SD[pID][pVerwalter] = 0;
SUS(pID);
return 1;
}
if(verwid < 1 || verwid > 7)return adminrangnichtexistent;
format(string,sizeof(string), GVRN(pID));
SD[pID][pVerwalter][1] = verwid;
format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GVRN(pID));
SCM(playerid, BLAU, string);
format(string, sizeof(string), "%s %s hat dir den Teamrang %s gegeben",GVRN(playerid),SD[playerid][pName],GVRN(pID));
SCM(pID, BLAU, string);
format(string,sizeof(string), GVRN(pID));
SD[pID][pVerwalter] = verwid;
format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, SD[pID][pName], GVRN(pID));
SAM(BLAU,string);
SUS(pID);
return 1;
}
else {SCM(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl.");}
return 1;
}
Aktuell geht zwar der Befehl aber er schreibt in 2 Spalten
Habs versucht, wirftkeine Fehlermeldungen. Aber jetzt meckert der Compiler wegen
public OnUserRegister(playerid)
{
SpielerDaten[playerid][p_id] = cache_insert_id();
SpielerDaten[playerid][pEingeloggt] = true;
SCM(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
SaveUserStats(playerid);
return 1;
}
public OnUserLogin(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
}
else
{
cache_get_value_name_int(0, "ID", SpielerDaten[playerid][p_id]);
cache_get_value_name_int(0, "Level", SpielerDaten[playerid][pLevel]);
cache_get_value_name_int(0, "Geld", SpielerDaten[playerid][pGeld]);
cache_get_value_name_int(0, "Skin", SpielerDaten[playerid][pSkin]);
cache_get_value_name_int(0, "Admin", SpielerDaten[playerid][pAdmin]);
cache_get_value_name_int(0, "Verwalter1", SpielerDaten[playerid][pVerwalter1]);
cache_get_value_name_int(0, "Verwalter2", SpielerDaten[playerid][pVerwalter2]);
cache_get_value_name_int(0, "Verwalter3", SpielerDaten[playerid][pVerwalter3]);
cache_get_value_name_int(0, "Verwalter4", SpielerDaten[playerid][pVerwalter4]);
SpielerDaten[playerid][pEingeloggt] = true;
SCM(playerid, 0x00FF00FF, "[Konto] Erfolgreich eingeloggt.");
GivePlayerMoney(playerid, SpielerDaten[playerid][pGeld]);
}
return 1;
}
Bei den pverwalter sagt er undefined
stock SaveUserStats(playerid)
{
if(!SpielerDaten[playerid][pEingeloggt]) return 1;
new query[1024];
mysql_format(handle, query, sizeof(query), "UPDATE accounts SET Level = '%d', Geld = '%d', Skin = '%d', Admin = '%d',",
SpielerDaten[playerid][pLevel],SpielerDaten[playerid][pGeld],GetPlayerSkin(playerid),SpielerDaten[playerid][pAdmin]);
mysql_format(handle,query,sizeof(query),"%s Verwalter1 = '%d', Verwalter2 = '%d', Verwalter3 = '%d', Verwalter4 = '%d' WHERE id = '%d'",
query,SpielerDaten[playerid][pVerwalter1],SpielerDaten[playerid][pVerwalter2],SpielerDaten[playerid][pVerwalter3],SpielerDaten[playerid][pVerwalter4],SpielerDaten[playerid][p_id]);
mysql_pquery(handle, query);
return 1;
}
Bei den pverwalter sagt er hier auch undefined
Also if(sscanf(params, "ui", pID, spalte,adminid))return makeadmin; nur was müsste ich dann bei ui dazuschreiben?
for Schleife so? for(new verwalter; verwalter < 4 players ++) so?
format(string,sizeof(string), GVRN(playerid)[Spalte]); so?
Also die Spalten Veralter 1 bis Verwalter 4 lassen?
SD[pID][pVerwalter][spalte] = verwid; für jede der 4 Spaten?
Um zu prüfen, ob er diesen Rang bereits hat, mache eine Schleife durch alle 4 Spalten und gebe eine Nachricht aus, falls du die verwid bereits in einer der Spalte findest.
Außerdem muss deine "GVRN" auch die Spalte mit als Parameter beinhalten, sonst weiß der Code ja nicht, welche Spalte du auslesen willst.
Wie mach ich so ne Schleife?
Wie meinst das mit GetVerwalterRangName(GVRN)?
Da hast du Recht @Jeffry. Dieses Thema könte man in dem extra Thread mitbehandeln.
Irgendwie, damit man den Rang vergeben kann aber in jeder Spalte. Wobei er pro Spakte nur 1 mal vorkommen sollte.
Woher soll er es denn wissen? Wenn 0 drin steht, oder was sagt dem Befehl, dass er in 1,2,3 oder 4 schreiben soll?Außerdem, beim Entziehen, wie soll er da wissen, welchen Rang er entziehen soll?
Genau da wei ich nicht mehr weiter, wie ich das machen soll.
Momentan kann ich den Befehl auch nutzen wenn ich keinen Teamrang habe. Was aber natürlich nicht so sein sollte.
mein isPlayerAnAdmin (iPAA):
stock isPlayerAnAdmin(playerid,rang)
{
if(SpielerDaten[playerid][pAdmin] < rang)return 1;
return 0;
}
Hallo, hab dan kleines Problem.
Ich hatte es schonmal dieses Problem, dan dachte ich es ist gelöst, nur kann man sich den Rang setzten wen man kein Teammitgleid ist, wenn der Code folgendermapen ist. Was ist das inkorrekt?
ocmd:makeadmin(playerid, params[])
{
//if(SD[playerid][pEingeloggt] == 0)return SCM(playerid, GRAU, "Du bist nicht eingeloggt!");
new pID, adminid, string[128];
if(!iPAA(playerid,5))
{
if(sscanf(params, "ui", pID, adminid))return makeadmin;
//if(adminid < 2)return SCM(playerid, GRAU, "Du kannst nur ab Rang 2 vergeben.");
if(IPN(pID))return 1;
//if(IsPlayerNPC(pID))return 1;
//if(!Eingeloggt[pID])return SCM(playerid, GRAU, "Dieser Spieler ist nicht eingeloggt!");
//if(SD[pID][pIntro] < 1)return SCM(playerid, GRAU, "Der Spieler ist noch im Tutorial.");
if(adminid == 0)
{
format(string,sizeof(string), GARN(playerid));
SD[pID][pAdmin] = adminid;
format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
SCM(playerid, BLAU, string);
format(string,sizeof(string), GARN(playerid));
SD[pID][pAdmin] = adminid;
format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GARN(pID));
SCM(pID, BLAU, string);
format(string,sizeof(string), GARN(playerid));
SD[pID][pAdmin] = adminid;
format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GARN(pID));
SAM(BLAU, string);
SD[pID][pAdmin] = 0;
SUS(pID);
return 1;
}
if(adminid < 1 || adminid > 7)return adminrangnichtexistent;
format(string,sizeof(string), GARN(pID));
SD[pID][pAdmin] = adminid;
format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GARN(pID));
SCM(playerid, BLAU, string);
format(string, sizeof(string), "%s %s hat dir den Teamrang %s gegeben",GARN(playerid),SD[playerid][pName],GARN(pID));
SCM(pID, BLAU, string);
format(string,sizeof(string), GARN(pID));
SD[pID][pAdmin] = adminid;
format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, SD[pID][pName], GARN(pID));
SAM(BLAU,string);
SUS(pID);
return 1;
}
else {SCM(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl.");}
return 1;
}
Bis zu auto increment hab ichs jetzt mal. Die Spalt hab ich ID genannt. Wo find ich diesen foreign Key? Sorry, ich kenn mich mit MySQL och nicht so gut aus.
MySQL 41-4
iPAA = isPlayerAnAdmin
stock isPlayerAnAdmin(playerid,rang)
{
if(SpielerDaten[playerid][pAdmin] < rang)return 1;
return 0;
}
Wie meinst du das mit extra Tabelle?
Hm, ich hät ja gerne, dass ein Spieler bis zu 4 verschiedene Verwalterränge gleichzeitig haben kann.
Abgesehn davon viel mri grade auf, so wie der Befehl gechrieben ist, kann man sich den Verwalterrang settzen wen man Rang 0 ist. Wie kan ch das am besten umgehen?
if(iPAA(playerid,5)) funktioniert nicht.
Hallo!
Dem Rat von @Jeffry zufolge erstelle ich hier n extra Thema, da mein Anliegen wohl etwas schwieiriger ist.
Ich habe in meinem Script Verwalterränge, welche zb. Hausverwalter, Bizverwalter etc. sind. Dies sind zusätzliche Teamränge, damit zb. nicht jeder Admin Hausverwalter ist. Ein Teamler kann bis zu 4 Verwalterränge gleichzeitig haben.
Das sind meine DB Spalten:
Verwalter1
Verwalter2
Verwalter3
Verwalter4
Wie mache ich am besten den /makeverwalter Befehl, dass wenn ich schreibe /makeverwalter Spielerid Verwalterrang der Verwalterrang 6 zb nicht in 2 verschiedenen Spalten ist? Wie mache ich es, dass der Befehl weiß in welche Spalte er schreiben soll?
Hiermein /makeverwalter
ocmd:makeverwalter(playerid, params[])
{
//if(SD[playerid][pEingeloggt] == 0)return SCM(playerid, GRAU, "Du bist nicht eingeloggt!");
new pID, verwid, string[128];
if(!iPAA(playerid,5))
{
if(sscanf(params, "ui", pID, verwid))return makeadmin;
//if(adminid < 2)return SCM(playerid, GRAU, "Du kannst nur ab Rang 2 vergeben.");
if(IPN(pID))return 1;
//if(IsPlayerNPC(pID))return 1;
//if(!Eingeloggt[pID])return SCM(playerid, GRAU, "Dieser Spieler ist nicht eingeloggt!");
//if(SD[pID][pIntro] < 1)return SCM(playerid, GRAU, "Der Spieler ist noch im Tutorial.");
if(verwid == 0)
{
format(string,sizeof(string), GVRN(playerid));
SD[pID][pVerwalter1] = verwid;
format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
SCM(playerid, BLAU, string);
format(string,sizeof(string), GVRN(playerid));
SD[pID][pVerwalter1] = verwid;
format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GVRN(pID));
SCM(pID, BLAU, string);
format(string,sizeof(string), GVRN(playerid));
SD[pID][pVerwalter1] = verwid;
format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GVRN(pID));
SAM(BLAU, string);
SD[pID][pVerwalter1] = 0;
SUS(pID);
return 1;
}
if(verwid < 1 || verwid > 7)return adminrangnichtexistent;
format(string,sizeof(string), GVRN(pID));
SD[pID][pVerwalter1] = verwid;
format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GVRN(pID));
SCM(playerid, BLAU, string);
format(string, sizeof(string), "%s %s hat dir den Teamrang %s gegeben",GVRN(playerid),SD[playerid][pName],GVRN(pID));
SCM(pID, BLAU, string);
format(string,sizeof(string), GVRN(pID));
SD[pID][pVerwalter1] = verwid;
format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, SD[pID][pName], GVRN(pID));
SAM(BLAU,string);
SUS(pID);
return 1;
}
else {SCM(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl.");}
return 1;
}
MfG
Die defines sind ganz oben
Edit:
Ich versuch grade maps in ein include zu geben und einzufügen.
new FAHRSCHULE[56], FAHRSCHULEINT[68];stock LoadObjects() { //FAHRSCHULE! FAHRSCHULE[0] = CreateDynamicObject(19437, 998.3748, -1296.3133, 15.9863, 90.0000, 90.0000, 0.0000); //wall077 SetDynamicObjectMaterial(FAHRSCHULE[0], 0, 10765, "airportgnd_sfse", "white", 0xFFFFFFFF);
Der Code ist natürlich viel länger
Unter OnGamemodeInit hab ich dann LoadObjects();
Es wird jedoch nichts eingefügt. Woran kann das liegen?
Edit: Beide Probleme haben sich gelöst, ich hab die falsche .pwn Datei geladen, daher ging nix.
Muss ich eine Reihenfolge beachten? publics, ocmd Befehle, stocks, oder anders rum?
Crashdetect sagt nix.
OnPlayerClickMap zb funktioniert auch nicht.