Das ist zwar nicht wirklich der Zusammenhang, aber die Variable wird verwendet, string21, sprich die Warnung kann hier eigentlich nicht kommen, bzw ihre Ursache haben.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Habe da mal ein kleines problem mit BlueG's MySQL Plugin (R39-2)
Die mysql_log.txt sagt mir folgendes:
SQL[13:34:16] [ERROR] cache_get_row_int - invalid datatype [13:34:16] [WARNING] CMySQLResult::GetRowData - invalid row ('1') or field index ('2') [13:34:16] [ERROR] cache_get_row_int - invalid datatype [13:34:16] [WARNING] CMySQLResult::GetRowData - invalid row ('1') or field index ('3') [13:34:16] [ERROR] cache_get_row_int - invalid datatype [13:34:16] [WARNING] CMySQLResult::GetRowData - invalid row ('2') or field index ('2') [13:34:16] [ERROR] cache_get_row_int - invalid datatype [13:34:16] [WARNING] CMySQLResult::GetRowData - invalid row ('2') or field index ('3') [13:34:16] [ERROR] cache_get_row_int - invalid datatypeCode:
new query[256];
format(query, sizeof(query),"SELECT * FROM s_toptimes WHERE formap = '%s' ORDER BY timestamp LIMIT 5",RACE:(Map));
mysql_tquery(mysqlHandle, query, "OnTopTimesLoaded");PUBLIC: OnTopTimesLoaded() then
new rows, fields;
cache_get_data(rows, fields);
if(rows) then
new ttTime[3];
TextDrawSetFormat(TD_ttNames[0], "1. %s", GetUsernameFromDatabase(cache_get_row_int(0,2,mysqlHandle)));
ConvertTimestamp(cache_get_row_int(0,3,mysqlHandle),ttTime[0],ttTime[1],ttTime[2]);
TextDrawSetFormat(TD_ttTimes[0], "%d:%02d:%03d",ttTime[0],ttTime[1],ttTime[2]);if(rows > 1) then
TextDrawSetFormat(TD_ttNames[1], "2. %s", GetUsernameFromDatabase(cache_get_row_int(1,2,mysqlHandle)));
ConvertTimestamp(cache_get_row_int(1,3,mysqlHandle),ttTime[0],ttTime[1],ttTime[2]);
TextDrawSetFormat(TD_ttTimes[1], "%d:%02d:%03d",ttTime[0],ttTime[1],ttTime[2]);
end
if(rows > 2) then
TextDrawSetFormat(TD_ttNames[2], "3. %s", GetUsernameFromDatabase(cache_get_row_int(2,2,mysqlHandle)));
ConvertTimestamp(cache_get_row_int(2,3,mysqlHandle),ttTime[0],ttTime[1],ttTime[2]);
TextDrawSetFormat(TD_ttTimes[2], "%d:%02d:%03d",ttTime[0],ttTime[1],ttTime[2]);
end
if(rows > 3) then
TextDrawSetFormat(TD_ttNames[3], "4. %s", GetUsernameFromDatabase(cache_get_row_int(3,2)));
ConvertTimestamp(cache_get_row_int(3,3,mysqlHandle),ttTime[0],ttTime[1],ttTime[2]);
TextDrawSetFormat(TD_ttTimes[3], "%d:%02d:%03d",ttTime[0],ttTime[1],ttTime[2]);
end
if(rows > 4) then
TextDrawSetFormat(TD_ttNames[4], "5. %s", GetUsernameFromDatabase(cache_get_row_int(4,2)));
ConvertTimestamp(cache_get_row_int(4,3,mysqlHandle),ttTime[0],ttTime[1],ttTime[2]);
TextDrawSetFormat(TD_ttTimes[4], "%d:%02d:%03d",ttTime[0],ttTime[1],ttTime[2]);
end
end
endstock GetUsernameFromDatabase(userid) then
new uName[32];
format(uName, sizeof(uName), "Guenther");
new query[257];
format(query, sizeof(query),"SELECT * FROM sw_accounts WHERE userid = '%d'",userid);
mysql_query(mysqlHandle, query, true);
new rows,fields;
cache_get_data(rows, fields);
if(rows) then
new temp[32];
cache_get_row(0,1,temp,mysqlHandle,sizeof(temp));
SendFormatToAll(-1, "Username: %s", temp);
end
return uName;
endTabellen:


Ich sehe da keinen fehler
Wenn mir irgentjemand sagen könnte was ich falsch gemacht habe, fände ich das echt super
(Fragt nicht warum ich then und end benutze.. bin einfach nur faul)
-
Okay Funktioniert. Nur sieht das mit dem Payday jetzt so aus.

Und zu meiner 2ten Frage.
Ich habe nun das /ajail so eingefügt
if(strcmp(cmd, "/ajail", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /ajail [Spieler ID / Name] [Zeit in Minuten] [Grund]");
return 1;
}
new playa;
new money, tmp2[256];
playa = ReturnUser(tmp);
tmp2 = strtok(cmdtext, idx);
money = strval(tmp2);
if(!strlen(cmdtext[strlen(tmp)+strlen(tmp2)+2]))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /ajail [Spieler ID / Name] [Zeit in Minuten] [Grund]");
return 1;
}
if(playa == playerid)
{
SendClientMessage(playerid, COLOR_GRAD1, "Du kannst nicht dich selber einsperren!");
return 1;
}
if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playa][pAdmin])
{
SendClientMessage(playerid, COLOR_GRAD1, "Du kannst keinen höherrangigen Admin einsperren!");
return 1;
}
if (PlayerInfo[playerid][pAdmin] >= 1)
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* Du hast %s eingesperrt. Grund: %s", giveplayer,cmdtext[strlen(tmp)+strlen(tmp2)+2]);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
format(string, sizeof(string), "* Du wurdest von Admin %s in das Admin-Jail gesperrt. Grund: %s", sendername,cmdtext[strlen(tmp)+strlen(tmp2)+2]);
SendClientMessage(playa, COLOR_LIGHTRED, string);
ResetPlayerWeapons(playa);
WantedPoints[playa] = 0;
PlayerInfo[playa][pJailed] = 1;
PlayerInfo[playa][pJailTime] = money*60;
SetPlayerInterior(playa, 3);
SetPlayerPos(playa, 197.8290,161.8141,1003.0300);
format(string, sizeof(string), "Du wurdest für %d Minuten eingesperrt.[Zu unrecht ? Melde dich im Teamspeak3]", money);
SendClientMessage(playa, COLOR_LIGHTBLUE, string);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, " Du darfst diesen Befehl nicht benutzen!");
}
}
return 1;
}Nur zeigt er nicht nur den Grund an sondern alles vorher auch.
so siehts dann aus

-
cache_get_data(rows, fields);
Schreib mal darunter:printf("rows: %d | fields: %d",rows,fields);
Nur sieht das mit dem Payday jetzt so aus.
Zeig uns mal wie du dir das anzeigen lässt
Und zu dem Command...why no using sscanf?!
if(strcmp(cmd, "/ajail", true) == 0)
{
if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, COLOR_GRAD1, " Du darfst diesen Befehl nicht benutzen!");
tmp = strtok(cmdtext, idx);
if(!tmp[0]) return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /ajail [Spieler ID / Name] [Zeit in Minuten] [Grund]");
new playa, money, grund[64];
if(sscanf(tmp,"uds[64]",playa,money,grund)) return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /ajail [Spieler ID / Name] [Zeit in Minuten] [Grund]");
if(playa == playerid) return SendClientMessage(playerid, COLOR_GRAD1, "Du kannst nicht dich selber einsperren!");
if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playa][pAdmin]) return SendClientMessage(playerid, COLOR_GRAD1, "Du kannst keinen höherrangigen Admin einsperren!");
if(!IsPlayerConnected(playa)) return SendClientMessage(playerid, COLOR_GRAD1, "Ein Spieler mit dieser ID ist nicht online!");
GetPlayerName(playa, giveplayer, sizeof(giveplayer)),GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* Du hast %s eingesperrt. Grund: %s", giveplayer,grund);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
format(string, sizeof(string), "* Du wurdest von Admin %s in das Admin-Jail gesperrt. Grund: %s", sendername,grund);
SendClientMessage(playa, COLOR_LIGHTRED, string);
ResetPlayerWeapons(playa),WantedPoints[playa] = 0;
PlayerInfo[playa][pJailed] = 1;
PlayerInfo[playa][pJailTime] = money*60;
SetPlayerInterior(playa, 3);
SetPlayerPos(playa, 197.8290,161.8141,1003.0300);
format(string, sizeof(string), "Du wurdest für %d Minuten eingesperrt.[Zu unrecht ? Melde dich im Teamspeak3]", money);
return SendClientMessage(playa, COLOR_LIGHTBLUE, string);
}mfg.

-
printf("rows: %d | fields: %d",rows,fields);
Schreib mal darunter:printf("rows: %d | fields: %d",rows,fields);
-
Spoiler anzeigen if(strcmp(cmd, "/ajail", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /ajail [Spieler ID / Name] [Zeit in Minuten] [Grund]");
return 1;
}
new playa;
new money, tmp2[256];
playa = ReturnUser(tmp);
tmp2 = strtok(cmdtext, idx);
money = strval(tmp2);
if(!strlen(cmdtext[strlen(cmd)+strlen(tmp)+strlen(tmp2)+2]))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /ajail [Spieler ID / Name] [Zeit in Minuten] [Grund]");
return 1;
}
if(playa == playerid)
{
SendClientMessage(playerid, COLOR_GRAD1, "Du kannst nicht dich selber einsperren!");
return 1;
}
if(PlayerInfo[playerid][pAdmin] < PlayerInfo[playa][pAdmin])
{
SendClientMessage(playerid, COLOR_GRAD1, "Du kannst keinen höherrangigen Admin einsperren!");
return 1;
}
if (PlayerInfo[playerid][pAdmin] >= 1)
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* Du hast %s eingesperrt. Grund: %s", giveplayer,cmdtext[strlen(cmd)+strlen(tmp)+strlen(tmp2)+2]);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
format(string, sizeof(string), "* Du wurdest von Admin %s in das Admin-Jail gesperrt. Grund: %s", sendername,cmdtext[strlen(cmd)+strlen(tmp)+strlen(tmp2)+3]);
SendClientMessage(playa, COLOR_LIGHTRED, string);
ResetPlayerWeapons(playa);
WantedPoints[playa] = 0;
PlayerInfo[playa][pJailed] = 1;
PlayerInfo[playa][pJailTime] = money*60;
SetPlayerInterior(playa, 3);
SetPlayerPos(playa, 197.8290,161.8141,1003.0300);
format(string, sizeof(string), "Du wurdest für %d Minuten eingesperrt.[Zu unrecht ? Melde dich im Teamspeak3]", money);
SendClientMessage(playa, COLOR_LIGHTBLUE, string);
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, " Du darfst diesen Befehl nicht benutzen!");
}
}
return 1;
}Ich hatte übersehen, dass du den Befehl auch schon mit strtok splittest. So sollte es gehen.
Zwecks des PayDays: Du musst den anzuzeigenden Text mit einem "format" formatieren.
Ich darf nochmal daran erinnern, dass dieser Thread für kleine Scripting Fragen ist, und nicht zum debuggen von MySQL Codes oder sonstigen langen Codes. Dafür kann man einen eigenen Thread machen, das wahrt die Übersichtlichkeit des Forums und vor allem des Threads.
-
Der Ajail funktioniert nun.
Und zu dem Payday so sieht es aus.
Copyright = TextDrawCreate(27.000000, 424.000000, "PayDay in : %d/60");
TextDrawAlignment(Copyright,0);
TextDrawBackgroundColor(Copyright,0x000000FF);
TextDrawFont(Copyright, 3);
TextDrawLetterSize(Copyright, 0.340000, 1.600000);
//TextDrawColor(Copyright, 0xEB0000FF);
TextDrawSetOutline(Copyright, 1);
TextDrawSetProportional(Copyright, 1);
TextDrawShowForAll(Copyright); -
Ja, wie gesagt, du musst es formatieren:
new strx[32];
format(strx, sizeof(strx), "PayDay in: %d/60", ZEIT_WANN_PAYDAY);
TextDrawSetString(Copyright, strx);ZEIT_WANN_PAYDAY eben mit der Variable ersetzen, die du hast um runterzuzählen wann PayDay ist.
Logischerweise musst du das auch in einen Timer packen, damit es aktualisiert wird. -
is nich richtig ?
new string21[64];
format(string,sizeof(string21),"Payday: %d/60",PlayerInfo[playerid][pPlayMinutes]/*ersetzten mit deiner PayDay Variable*/);
PlayerTextDrawSetString(playerid,Copyright,string21); -
Du musst die Textdraw-Variable "Copyright" (warum auch immer die so heißt) als Array anlegen, da ja jeder sein eigenes TextDraw hat.
Sprich so:
new PlayerText:Copyright[MAX_PLAYERS];Und alle Zugriffe auf "Copyright" zu "Copyright[playerid] ändern.
Ansonsten passt es eigentlich, da sollten keine Fehler auftreten.
-
Also ich komme gerade nich so ganz klar

Ich versuche es so zu ändern wie du sagst doch dann kommen 15 errors.
Also was ich zurzeit habe is.
new PlayerText:Copyright[MAX_PLAYERS];
Das steht bei onplayercennect
TextDrawShowForPlayer(playerid,Copyright);
Das bei OnplayerSpawn
TextDrawShowForPlayer(playerid,Copyright);
Copyright = TextDrawCreate(27.000000, 424.000000, "PayDay in : %d/60");
TextDrawAlignment(Copyright,0);
TextDrawBackgroundColor(Copyright,0x000000FF);
TextDrawFont(Copyright, 3);
TextDrawLetterSize(Copyright, 0.340000, 1.600000);
//TextDrawColor(Copyright, 0xEB0000FF);
TextDrawSetOutline(Copyright, 1);
TextDrawSetProportional(Copyright, 1);
TextDrawShowForAll(Copyright);new string21[64];
format(string,sizeof(string21),"Payday: %d/60",PlayerInfo[playerid][pPlayMinutes]/*ersetzten mit deiner PayDay Variable*/);
PlayerTextDrawSetString(playerid,Copyright,string21); -
Warum folgender Error:
for(new h = 0; h < sizeof(buscars); h++){//gg
if(GetPlayerVehicleID(playerid) == buscars[h]){
KillTimer (respawnL);
}}syntax error in the expression, or invalid function call
-
Hallo, irgendwie geht mein Ban befehl nicht.
Das ist der Befehl:
Spoiler anzeigen
if(strcmp(cmd, "/ban", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /ban [playerid] [grund]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if (PlayerInfo[playerid][pAdmin] >= 1)
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /ban [playerid] [grund]");
return 1;
}
if(PlayerInfo[giveplayerid][pAdmin] > PlayerInfo[playerid][pAdmin] > PlayerInfo[playerid][pSupporter])
{
SendClientMessage(playerid, COLOR_GRAD2, "Du kannst diesen Spieler nicht bannen, da er ein höheres Adminlevel hat als du!");
return 1;
}
new year, month,day;
getdate(year, month, day);
KickTimer(giveplayerid);
format(string, sizeof(string), "AdmCmd: %s wurde von %s gebannt, Grund: %s (%d-%d-%d)", giveplayerid, sendername, (result),month,day,year);
BanLog(string);
format(string, sizeof(string), "AdmCmd: %s wurde von %s gebannt, Grund: %s", giveplayerid, sendername, (result));
SendClientMessageToAll(COLOR_LIGHTRED, string);
format(string, sizeof(string), "AdmCmd: Du wurdest von %s gebannt, Grund: %s", sendername, (result));
SendClientMessage(giveplayerid,COLOR_LIGHTRED, string);
PlayerInfo[giveplayerid][pGesperrt] = 1;
return 1;
}
}//not connected
}
else
{
format(string, sizeof(string), " %d ist kein aktiver Spieler.", giveplayerid);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
}
return 1;
}
Wenn er sich einloggt soll er gekickt werden :
Bei OnPlayerLogin:
if(PlayerInfo[playerid][pGesperrt] == 1)
{
format(string2,sizeof(string2)," %s versucht mit seinem gebannten Account online zu kommen und wurde gekickt!",playername2);
ABroadCast(COLOR_LIGHTRED,string2,1);
SendClientMessage(playerid,COLOR_ROT," Du bist hier gebannt. Schau im Forum für mehr Informationen");
Kick(playerid);
return 1;
}Aber ich kann mich trotzdem wieder einloggen.
Warum das ?
-
IntelCore.I7:
Du sollte alle "Copyright" mit "Copyright[playerid]" ersetzen. Alleine in dem Code den du gepostet hast sehe ich noch mindestens 10 nicht umgeänderte.Corvus: Wie hast du buscars und respawnL deklariert?
Ich darf nochmal daran erinnern, dass dieser Thread für kleine Scripting Fragen ist, und nicht zum debuggen von MySQL Codes oder sonstigen langen Codes. Dafür kann man einen eigenen Thread machen, das wahrt die Übersichtlichkeit des Forums und vor allem des Threads.
Außerdem solltest du zeigen, wie du "PlayerInfo[playerid][pGesperrt]" aus der Datei/Datenbank lädst. In einem eigenen Thread bitte. -
Alles anzeigen
Dein Fehler ist recht simpel. Die Nachricht wird bei dir in der Schleife ausgegeben, die alle Spieler durchgeht.
1 Spieler -> 1 Schleifendurchlauf
X Spieler -> X SchleifendurchläufeSchreib es so:
dcmd_a(playerid,params[])
{
if(sSpieler[playerid][Adminlevel] < 1) return SendClientMessage(playerid,Weiß,"Du bist kein Admin!");
new text[256];
new spielername[MAX_PLAYER_NAME];
GetPlayerName(playerid,spielername,sizeof(spielername));
if(sscanf(params,"s",text))return SendClientMessage(playerid,Weiß,"Info: /a (text)");
format(text,sizeof(text),"Adminchat %s: %s",spielername,text);
SendAdminMessage(Weiß,text);
return 1;
}.. und jetzt bitte nochmal die Funktion SendAdmiMessage, wenn es nicht funktionieren sollte.
Einrücken musst du selber, geht über meinen Browser nicht.//ADMINNACHRICHTEN
stock SendAdminMessage(farbe,string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(sSpieler[i][Adminlevel] >= 1)
{
SendClientMessage(i, farbe, string);
}
}
}Muss daran auch was geändert werden?
-
Nein, die Funktion SendAdminMessage sieht perfekt aus. Schau mal ob das so funktioniert

-
Da bekomm ich errors
ich hab alles so wie oben -
-
Unter welchem Callback steht der Code, der dir die Fehler bringt? Poste bitte den Code und das Callback.
-
Da bekomm ich errors
ich hab alles so wie oben
Dann schick uns mal die Fehler sowie die Zeilen dazu

