Mein Script sagt mir das die Zeile zu lang ist wie kann ich sie sinnvoll trennen?
format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i',Banned='%i',Bangrund='%i',Banadmin='%s',Fraktion='%i',Rang='%i',FPunkte='%i' WHERE Name='%s'", GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], SpielerInfo[playerid][pBanned], SpielerInfo[playerid][pBangrund], SpielerInfo[playerid][pBanadmin], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pRang], SpielerInfo[playerid][pFscheinPunkte], NamePlayer(playerid));
mysql_tquery(mysqlHandle, query);
[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
-
-
Einfach zwischen den Parametern, da ist es kein Problem:
format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i',Banned='%i',Bangrund='%i',Banadmin='%s',Fraktion='%i',Rang='%i',FPunkte='%i' WHERE Name='%s'",
GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], SpielerInfo[playerid][pBanned],
SpielerInfo[playerid][pBangrund], SpielerInfo[playerid][pBanadmin], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pRang], SpielerInfo[playerid][pFscheinPunkte], NamePlayer(playerid));
mysql_tquery(mysqlHandle, query); -
Jeffry:
ocmd:punkte(playerid,params[])
{
if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
new pID,reason[64],string[144],punkte;
if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /punkte [ID][Anzahl][Grund]");
format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte eingetragen! Grund: %s",NamePlayer(playerid),punkte,reason);
SendClientMessage(pID,BLUTROT,string);
format(string,144,"Du hast %s %d Strafpunkte eingetragen! Grund: %s",NamePlayer(pID),punkte,reason);
SendClientMessage(playerid,BABYBLAU,string);
format(string,144,"(( HQ: %s hat %s %d Strafpunkte eingetragen! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
for(new i;i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
SendClientMessage(i,BLAU,string);//244
}
SpielerInfo[pID][pFscheinPunkte]+=punkte;
SpielerSpeichern(pID);
return 1;
}ocmd:clearpunkte(playerid,params[])
{
if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
if(SpielerInfo[playerid][pRang] < 5)return SendClientMessage(playerid,ROT,"Du bist nicht Rank 5!");
new pID,reason[64],string[144],punkte;
if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /clearpunkte [ID][Anzahl][Grund]");
format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte gelöscht! Grund: %s",NamePlayer(playerid),punkte,reason);
SendClientMessage(pID,BLUTROT,string);
format(string,144,"Du hast %s %d Strafpunkte gelöscht! Grund: %s",NamePlayer(pID),punkte,reason);
SendClientMessage(playerid,BABYBLAU,string);
format(string,144,"(( HQ: %s hat %s %d Strafpunkte gelöscht! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
for(new i;i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
SendClientMessage(i,BLAU,string);//259
}
SpielerInfo[pID][pFscheinPunkte]-=punkte;
SpielerSpeichern(pID);
return 1;
}Er zeigt mir die Ganze zeit an das ich die Parameter falsch eintrage (Ingame).
Das heißt die Meldung "Tippe: /punkte [id][anzahl][grund]".
Hast du ne lösung= -
Du nutzt den stock von sscanf?
"uis[64]"
Zu
"dds" -
ocmd:getip(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,4))return SendClientMessage(playerid,-1,"Du hast kein Admin Level 4");
{
new pID,string[128];
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,-1,"Spieler ist nicht Online");
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,-1,"Tippe : /getip [playerid]");
{
new playersip[16], query[50];
GetPlayerIp(pID,playersip,sizeof(playersip));
format(string,sizeof(string),"Die IP vom Spieler %s ist %s",NamePlayer(pID),playersip);
SendClientMessage(playerid,-1,string);
format(query, sizeof(query), "UPDATE accounts SET IP = '%d'",playersip);
mysql_tquery(mysqlHandle, query, "", "");
}
}
return 1;
}SpielerInfo[playerid][pIP] um es aufzurufen.
stock SpielerSpeichern(playerid)
{
new query[256];
if(SpielerInfo[playerid][pEingeloggt] == false) return 1;
mysql_escape_string(NamePlayer(playerid), NamePlayer(playerid));
format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i',Banned='%i',Bangrund='%i',Banadmin='%s',Fraktion='%i',Rang='%i',FPunkte='%i',pPerso='%i' WHERE Name='%s'",
GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], SpielerInfo[playerid][pBanned],
SpielerInfo[playerid][pBangrund], SpielerInfo[playerid][pBanadmin], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pRang], SpielerInfo[playerid][pFscheinPunkte], SpielerInfo[playerid][pPerso], NamePlayer(playerid));
mysql_tquery(mysqlHandle, query);
printf("Acc gespeichert (%s)",NamePlayer(playerid));
return 1;
}SpielerInfo[playerid][pIP] = cache_get_field_content_int(0, "IP", mysqlHandle);
Ich hab keine Errorcodes.
Er will das nicht in die Datenbank eintragen
In der Datenbank steht immer 0. -
@FerienFreak: Du musst die IP als String speichern und auch wieder laden.
-
-
-
Eddy: Lass mal den Query printen und poste das Ergebnis hier.
Habe mal alle Query printen lassen, und da kommt folgendes bei raus:Spoiler anzeigen [10:59:26] Number of vehicle models: 0
[10:59:47] Incoming connection: 127.0.0.1:52255
[10:59:47] [join] Eddy_Mind has joined the server (0:127.0.0.1)
[10:59:47] SELECT COUNT(*) AS `count` FROM `Accounts` WHERE `pName` = 'Eddy_Mind'
[10:59:50] INSERT INTO `Accounts` (`pName`, `pPasswort`, `pAlter`, `pGeburtsdatum`, `pGeschlecht`, `pAdminlevel`, `pBanned`, `pBargeld`, `pKontoguthaben`, `pLastLogin`, `pRegDatum`, `pVersuche`, `pLeben`) VALUES ('Eddy_Mind','test','0','0','0','0','0','0','0','2014.12.23 - 10:59:50','2014.12.23 - 10:59:50','0','100.0')
[10:59:53] UPDATE `Accounts` SET `pAlter` = '784724393', `pAdminlevel` = '0', `pGeburtsdatum` ='0',`pGeschlecht` ='1', `pBanned` = '0', `pBargeld` = '0', `pKontoguthaben` = '0', `pLastLogin` = '2014.12.23 - 10:59:53', `pLeben` = '0.0' WHERE `pName` = 'Eddy_Mind'
[11:00:03] UPDATE `Accounts` SET `pAlter` = '784724393', `pAdminlevel` = '5', `pGeburtsdatum` ='0',`pGeschlecht` ='1', `pBanned` = '0', `pBargeld` = '0', `pKontoguthaben` = '0', `pLastLogin` = '2014.12.23 - 11:00:3', `pLeben` = '0.0' WHERE `pName` = 'Eddy_Mind'
[11:00:05] [part] Eddy_Mind has left the server (0:1) -
Hast du die Änderungen am Code gemacht? Wenn ja, poste bitte den Code so wie er jetzt ist. Es reicht, wenn du den Teil vom Registrierungsdialog postest.
-
Wenn ich das so mache, wie du das in dem anderen Thema hattest, dann macht er genau das selbe wie jetzt auch ich weiß echt nicht mehr weiter!!
Das Script nochmal: http://pastebin.com/P5qFZRV0
-
Es laggt immernoch ...
public StatsUpdateTimer()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
ocmd_update(i,"");
}
return 1;
}//ONPLAYERSPAWN
SetTimer("StatsUpdateTimer",3500,true);ocmd:update(playerid,params[])
{
if(GetPVarInt(playerid,"Eingeloggt") == 1)//Textdraw41 = Killstreak , Textdraw42 = Score, 43= Rank, 44=Klasse , 45=Kills, 46=Tode
{
new KillstreakTextdraw[144],ScoreTextdraw[144],KillsTextdraw[144],TodeTextdraw[144],GetRankTextdraw[144], GetKlasseTextdraw[144];
SpielerInfo[playerid][pKillStreak] = 0;
format(KillstreakTextdraw, sizeof(KillstreakTextdraw), "Killstreak: %i", SpielerInfo[playerid][pKillStreak]);
PlayerTextDrawSetString(playerid,Textdraw41[playerid],KillstreakTextdraw);
format(TodeTextdraw, sizeof(TodeTextdraw), "Tode: %i", SpielerInfo[playerid][pTode]);
PlayerTextDrawSetString(playerid,Textdraw46[playerid],TodeTextdraw);
format(GetRankTextdraw, sizeof(GetRankTextdraw), "Rank: %s", GetRank(playerid));
PlayerTextDrawSetString(playerid,Textdraw43[playerid],GetRankTextdraw);
format(KillsTextdraw, sizeof(KillsTextdraw), "Kills: %i", SpielerInfo[playerid][pKills]);
PlayerTextDrawSetString(playerid,Textdraw45[playerid],KillsTextdraw);
format(ScoreTextdraw, sizeof(ScoreTextdraw), "Score: %i", SpielerInfo[playerid][pScore]);
PlayerTextDrawSetString(playerid,Textdraw42[playerid],ScoreTextdraw);
format(GetKlasseTextdraw, sizeof(GetKlasseTextdraw), "Klasse: %s", GetKlasse(playerid));
PlayerTextDrawSetString(playerid,Textdraw44[playerid],GetKlasseTextdraw);
StatusBoxTextdrawsLoad(playerid);
}
else if(mysql_CheckNoAccount(playerid) == 1)
{
new KillstreakTextdraw[144],ScoreTextdraw[144],KillsTextdraw[144],TodeTextdraw[144],GetRankTextdraw[144], GetKlasseTextdraw[144];
SpielerInfo[playerid][pKillStreak] = 0;
format(KillstreakTextdraw, sizeof(KillstreakTextdraw), "Killstreak: %i", NoSpielerInfo[playerid][pNoKillStreak]);
PlayerTextDrawSetString(playerid,Textdraw41[playerid],KillstreakTextdraw);
format(TodeTextdraw, sizeof(TodeTextdraw), "Tode: %i", NoSpielerInfo[playerid][pNoTode]);
PlayerTextDrawSetString(playerid,Textdraw46[playerid],TodeTextdraw);
format(GetRankTextdraw, sizeof(GetRankTextdraw), "Rank: %s", GetRank(playerid));
PlayerTextDrawSetString(playerid,Textdraw43[playerid],GetRankTextdraw);
format(KillsTextdraw, sizeof(KillsTextdraw), "Kills: %i", NoSpielerInfo[playerid][pNoKills]);
PlayerTextDrawSetString(playerid,Textdraw45[playerid],KillsTextdraw);
format(ScoreTextdraw, sizeof(ScoreTextdraw), "Score: %i", NoSpielerInfo[playerid][pNoScore]);
PlayerTextDrawSetString(playerid,Textdraw42[playerid],ScoreTextdraw);
format(GetKlasseTextdraw, sizeof(GetKlasseTextdraw), "Klasse: %s", GetKlasse(playerid));
PlayerTextDrawSetString(playerid,Textdraw44[playerid],GetKlasseTextdraw);
StatusBoxTextdrawsLoad(playerid);
}
return 1;
}
//Und die Kills werden nicnt angezeigt, und ich muss doch MAX_PLAYERS abfragen? Dass jeder Spieler der online ist doch aktuliesert wird oder nicht? Oder braucht man dass nicht? -
Mach es mal folgendermaßen:
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i)) ocmd_update(i,"");
}Und pass, wenn nicht schon gemacht, die Konstante MAX_PLAYERS auf die tatsächliche maximale Slotanzahl Deines Servers an:
#undef MAX_PLAYERS
#define MAX_PLAYERS 200 //200 natürlich anpassen@[GeD]Max:
-
-
if(IsPlayerConnected(playerid, i))
Ehm, IsPlayerConnected hat nur ein Parameter, nicht zwei -
Ja, habe den Fehler von mir bereits nach meiner Antwort korrigiert. Schau in den letzten Post von mir, da ist der korrekte Code.
-
Das Script nochmal:
Mach doch die Änderungen mal. Und poste dann nicht das ganze Script, sondern nur den Dialog und die Speicherfunktion, das reicht. -
hallo ich habe ein Problem bzw 2 Probleme 1 wird mir der Checkpoint bei /tfind nicht gesetzt ( ich will den toten Spieler suchen )
und das 2 es werden die kordinaten wo der Spieler gestorben ist nicht gespeichert ?savePlayer(playerid)
{
sInfo[playerid][eingeloggt] = 1;
new query[256];
format(query,sizeof(query),"UPDATE user SET level='%i',skin='%i',money='%i',geschlecht='%i',alevel='%i',slevel='%i',fraktion='%i',rang='%i',leader='%i',coleader='%i',spawnchange='%i',perso='%i',palter='%i',pjob='%i',ptot='%i',kGeld='%i',tx='%f',ty='%f',tz='%f' WHERE id='%i'",
GetPlayerScore(playerid),GetPlayerSkin(playerid),GetPlayerMoney(playerid),sInfo[playerid][geschlecht],sInfo[playerid][alevel],sInfo[playerid][slevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][leader],sInfo[playerid][coleader],sInfo[playerid][spawnchange],sInfo[playerid][perso],sInfo[playerid][palter],sInfo[playerid][pjob],sInfo[playerid][PTot],sInfo[playerid][kGeld],sInfo[playerid][dx],sInfo[playerid][dy],sInfo[playerid][dz],sInfo[playerid][db_id]);
mysql_function_query(dbhandle,query,false,"","");
return 1;
}stock SaveAllPlayers()
{
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(!IsPlayerConnected(playerid)) continue;
new query[256];
format(query,sizeof(query),"UPDATE user SET level='%i',skin='%i',money='%i',geschlecht='%i',alevel='%i',slevel='%i',fraktion='%i',rang='%i',leader='%i',coleader='%i',spawnchange='%i',perso='%i',palter='%i',pjob='%i',ptot='%i',kGeld='%i',tx='%f',ty='%f',tz='%f' WHERE id='%i'",
GetPlayerScore(playerid),GetPlayerSkin(playerid),GetPlayerMoney(playerid),sInfo[playerid][geschlecht],sInfo[playerid][alevel],sInfo[playerid][slevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][leader],sInfo[playerid][coleader],sInfo,sInfo[playerid][spawnchange],sInfo[playerid][perso],sInfo[playerid][palter],sInfo[playerid][pjob],sInfo[playerid][PTot],sInfo[playerid][kGeld],sInfo[playerid][dx],sInfo[playerid][dy],sInfo[playerid][dz],sInfo[playerid][db_id]);
mysql_function_query(dbhandle,query,false,"","");
}
return 1;
}public OnPlayerDeath(playerid, killerid, reason)
{
sInfo[playerid][PTot] = 1;
new Float:ptx,Float:pty,Float:ptz,string[80];
sInfo[playerid][dx] = ptx;
sInfo[playerid][dy] = pty;
sInfo[playerid][dz] = ptz;
GetPlayerPos(playerid, ptx,pty,ptz);
TotenKopf[playerid] = CreatePickup(1254,1,ptx,pty,ptz);
format(string,sizeof(string),"Leichen Name\nvon %s",getPlayerName(playerid));
TotenName[playerid] = Create3DTextLabel(string,GRAU,ptx,pty,ptz,10,GetPlayerVirtualWorld(playerid),0);
format(string, sizeof(string),"Der Spieler %s ID %i ist soeben gestorben!",getPlayerName(playerid),playerid);
SendOndutyMedicMessage(GELB,string);
if(sInfo[playerid][kGeld] > 0)
{
if(isPlayerInFrakt(killerid,15))
{
GivePlayerMoney(killerid, sInfo[playerid][kGeld]);
GameTextForPlayer(playerid,"~r~Du warst ein auftrag der Hitmans",2000,0);
GameTextForPlayer(killerid,"~r~Auftrag Erledigt",2000,0);
format(string,sizeof(string),"Der Spieler %s hat den auftrag erledigt und %s gekillt.",getPlayerName(killerid),getPlayerName(playerid));
SendHitmanMessage(BRAUN,string);
format(string,sizeof(string),"Er erhät nun das ausgesetzte Kopfgeld in Höhe von %i$.",sInfo[playerid][kGeld]);
SendHitmanMessage(BRAUN,string);
sInfo[playerid][kGeld] = 0;
}
}
return 1;
}ocmd:tfind(playerid,params[])
{
new pID,Float:x,Float:y,Float:z;
if(!isPlayerInFrakt(playerid,3)) return SendClientMessage(playerid,ROT,"Du bist Kein Meidc");
if(sInfo[playerid][mduty] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht als Medic Onduty");
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,ROT,"Benutze: {D6D6D6}/tfind [ID]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Ein Spieler mit dieser ID ist nicht online!");
if(sInfo[pID][PTot] == 0) return SendClientMessage(playerid,ROT,"Der gesuchte Spieler ist nicht Tot!");
sInfo[pID][dx] = x;
sInfo[pID][dy] = y;
sInfo[pID][dz] = z;
SetPlayerCheckpoint(playerid, x,y,z, 3.5);
printf("Der Spieler %s hat nach dem Toten Spieler %s gesucht)",getPlayerName(playerid),getPlayerName(pID));
return 1;
} -
Problem 1:
sInfo[pID][dx] = x;
sInfo[pID][dy] = y;
sInfo[pID][dz] = z;zu:
x = sInfo[pID][dx];
y = sInfo[pID][dy];
z = sInfo[pID][dz];Problem 2:
new query[256];
zu:
new query[512];PS: Für solche riesen-Codes lieber einen neuen Thread auf machen, das ist (schon von der Größe her) keine "kleine" Frage mehr.
-
Hab's gemacht aber der checkpoint wird immernoch beim fleischberg gesetzt obwohl ich in sf gestorben bin