Hast du auch die richtigen Includes drin?
Ab R33 geht das nämlich so.
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_log
Beiträge von Jeffry
-
-
Könnte gehen wenn du ihm 0 Ammo gibst.
GiveWeapon(playerid,23,0);Ansonsten gib ihm 1 Ammo und entferne es wieder hiermit:
http://forum.sa-mp.de/gta-mult…eschnipsel-56#post1949049 -
Füge unter OnGameModeInit den Log Modus ein.
mysql_log(LOG_ALL);Was wird geprintet?
-
Echt. Du fragst in deiner Version alevel ab, da hast du die Zuweisung im sscanf (also vor dem switch). Ich habe es so gelassen wie er es hatte, also muss die Zuweisung der Spieler Variable vor das switch, da diese Variable abgefragt wird:
Spieler[pID][pAdminlevel]
Sonst fragst du den alten Wert ab.EDIT: Syno: Gar nicht gesehen, natürlich.
-
Die Zuweisung war bei ihm doch schon nach der Abfrage, was hast du da denn dann ausgebessert?
Die Zuweisung muss VOR die Abfrage (switch). -
Jeffry: Bin ich blind, oder ist die Zuweisung bei ihm nicht auf nach der Abfrage?
Das hab ich doch gesagt.
Die Zuweisung war bei ihm nach der Abfrage. Ich hab es gleich ausgebessert. -
ocmd:setadmin(playerid,params[])
{
new pID,alevel,string[144],adminrank[16];
if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,0xFFFFFF,"Info: /makeadmin [Spieler ID] [Level]");
if(alevel > 5 ) return SendClientMessage(playerid,0xFF3C3CFF,"Achtung!: Das maximale Adminlevel beträgt 5.");
Spieler[pID][pAdminlevel] = alevel;
switch(Spieler[pID][pAdminlevel])
{
case 0:{adminrank="Spieler";}
case 1:{adminrank="Supporter";}
case 2:{adminrank="Moderator";}
case 3:{adminrank="Administrator";}
case 4:{adminrank="Management";}
case 5:{adminrank="Projektleiter";}
}
format(string,sizeof(string),"{FF1111}Admin Info: {E5E5E5}Der Spieler {23A7F5}%s {E5E5E5}wurde von {23A7F5}%s {E5E5E5}zum {23A7F5}%s {E5E5E5}Befördert!",Spielername(pID),Spielername(playerid),adminrank);
SendClientMessageToAll(0xE5E5E5FF,string);
SavePlayerData(pID);
return 1;
}Zuweisung nach Abfrage.
Übrigens ist 144 das Maximum für SendClientMessage. -
new Float:cPos[10][3]; //10 CPs
new File:rFile = fopen("Checkpoints.txt", io_read), i, string[128];
if(rFile)
{
while(fread(rFile, string))
{
new idx;
cPos[i][0] = floatstr(strtok(string, idx));
cPos[i][1] = floatstr(strtok(string, idx));
cPos[i][2] = floatstr(strtok(string, idx));
i++;
}
}
fclose(rFile); -
Geht nicht. Brauchst ein Callback. Funktionen können nicht mit Timern direkt aufgerufen werden.
-
Jo, das.
Füge mal oben unter die Includes das ein:#pragma dynamic 100000
Falls es nicht weg geht, ändere die Zahl zu was Größerem.
Dann sollte es eigentlich gehen. -
Hast du CreateClan auch noch so debuggt wie vorhin?
Kommt das
print("create 1");
?
Wenn nein, mach das wieder dazu.Wie hast du es zuvor behoben?
Bekommst du diese stack-header Meldung im Compiler?
-
Jeffry: Danke, jetzt geht es soweit, aber nach dem letzten schritt, also 1/3 kommt nochmal der Standard Login Dialog und nach dem wird man Gekickt.
Was ist der Standard - Login Dialog? Unter welchem Callback lässt du den anzeigen?
Zur Not könntest du vor ShowPlayerDialog von dem Standard - Dialog Abfragen, ob Login_Status[playerid] auch -1 ist.Cal44:
Veruch mal:
new cmd[6];
Es gibt einen sogenannten 0-Terminator, der belegt die letzte Zelle.Eddy: (Post Unten) Kommt vor!
-
Dann musst du die print's zum debuggen noch mal rein machen, ich sehe da auf Anhieb nichts. Bis zu welcher Zeile kommt er?
-
Wie gesagt, es muss vor der ersten Verwendung definiert werden.
-----------
Eddy:
1.)
Login_Status[playerid]++;
das musst du aus den case's raus nehmen, es steht ja schon vor dem switch.2.)
Bei case 3 in deinem LoadPlayerDataSequence lädst du den Skin gar nicht, daher bleibt er bei 0. -
Ich kann es ganz normal kompilieren. Da musst du was falsch eingefügt haben.
//Edit: Hast's hinbekommen.Wegen den anderen Fehlern:
Du musst die Funktion vor der ersten Benutzung definieren, wegen dem "Tag" (Float:) vor der Funktion. Also entweder du packst die Funktion in eine Include und dann die Include oben hin schreiben, oder du definierst den stock direkt unter den Includes, eben bevor du die Funktion im Code verwendest. -
Wenn ich den stock namen bekomm krieg ich einen haufen warnings/errors.
Wenn du was?Wegen dem x2, doofes Copy & Paste. Da hatte sich noch eine 2 eingeschlichen.
So natürlich:
stock PlayerNearPlayer(p1,p2,Float:dist)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(p2,x,y,z);
return IsPlayerInRangeOfPoint(p1, dist, x, y, z);
} -
So sieht's aus.
Entweder mit sscanf (*hust*), oder strtok:COMMAND:createclan(playerid,params[])
{
new name[32],tag[32],rank[6][32],string[144], idx;
name = strtok(params, idx);
tag = strtok(params, idx);
rank[0] = strtok(params, idx);
rank[1] = strtok(params, idx);
rank[2] = strtok(params, idx);
rank[3] = strtok(params, idx);
rank[4] = strtok(params, idx);
rank[5] = strtok(params, idx);
if(!strlen(rank[5])return SendClientMessage(playerid,COLOR_RED,"Benutze: /createclan [Clan-Name] [Clan-Tag] [Rank-Name1] [Rank-Name2] [Rank-Name3] [Rank-Name4] [Rank-Name5] [Rank-Name6]");
if(PlayerInfo[playerid][pGeld] < 100000)return SendClientMessage(playerid,COLOR_RED,"Du brauchst $100.000");
for(new i=0;i<6;i++)
{
if(strlen(name) > 32 || strlen(tag) > 8 || strlen(rank[i]) > 32)return SendClientMessage(playerid,-1,"Der Clan-Name sowie die Rank-Name können 32 Zeichen enthalten! Der Clan-Tag allerdings nur 8!");
}
CreateClan(name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]);
format(string,144,"Du hast ein Clan names '%s' [Tag: %s] erstellt! Viel Glück!",name,tag);
SendClientMessage(playerid,COLOR_YELLOW,string);
printf("Name: %s | Tag: %s | Rank0: %s | Rank1: %s | Rank2: %s | Rank3: %s | Rank4: %s | Rank5: %s | Rank6: %s",name,tag,rank[0],rank[1],rank[2],rank[3],rank[4],rank[5]);
SaveClans();
return 1;
}stock CreateClan(name[32],Tag[32],CRank1[32],CRank2[32],CRank3[32],CRank4[32],CRank5[32],CRank6[32])
Irgendwo ganz unten im Code:
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}new offset = index;
new result[32];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
} -
Hab ich doch, mehr ist das nicht.
Aber gut, ich kanns dir auch kurz ganz machen, wenn du mir den Befehl gibst, wie du ihn grade hast. -
1.)
//if(!GetDistanceBetweenPlayers(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");
Nimm meins:
stock PlayerNearPlayer(p1,p2,Float:dist)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(p2,x,y,z);
return IsPlayerInRangeOfPoint(p1, dist, x, y, z);
}
if(!PlayerNearPlayer(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");2.)
stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[]) -
Klar kannste das splitten.
http://wiki.sa-mp.com/wiki/StrtokNehmen wir an params heißt deine Parameter-Variable vom Cmd-Prozessor:
new idx, tmp[20], tmp1[20], ... usw hier.
tmp = strtok(params, idx);
tmp1 = strtok(params, idx);
...usw.