Bitte Löschen....
Ist bei sowas eigendlich ne blöde Regel. Der wurde vom Urheber Released..... -.-
Bitte Löschen....
Ist bei sowas eigendlich ne blöde Regel. Der wurde vom Urheber Released..... -.-
Es ist für Anfänger verständlich und man kann es ja dann nach und nach optimieren, wenn man sich ein wenig mehr mit MySQL auseinander gesetzt hat.
PawnLike: Sag mir ein besseres, wenn das so schlecht sein soll!
Mach es so
stock mysql_GetInta(Tablae[], Field[], Where[], Is[]) { new query[128]; mysql_real_escape_string(Table, Table); mysql_real_escape_string(Field, Field); mysql_real_escape_string(Where, Where); mysql_real_escape_string(Is, Is); format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is); mysql_query(query); mysql_store_result(); new sqlint = mysql_fetch_int(); mysql_free_result(); return sqlint;mysql_reload }
Aber dann ließt er die Felder doch nur wieder unter 1 Bedingung aus?!?
Es hat geklappt, bi auf diesen blöden Warning
Edit:
Also das Warning kommt von meinem CarInfo am Anfang. Dann muss ich mir wohl was anderes überlegen.
Alles anzeigenSowas?
stock mysql_GetInt(Table[], Field[], Where[], Is[], Where2[], Is2[])
{
new query[128];
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Is, Is);
mysql_real_escape_string(Where2, Where2);
mysql_real_escape_string(Is2, Is2);
format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s' AND `%s` = '%s'", Field, Table, Where, Is, Where2, Is2);
mysql_query(query);
mysql_store_result();
new sqlint = mysql_fetch_int();
mysql_free_result();
return sqlint;
}
Ja Danke. Ich habe mit den MySQL Befehlen selbst noch nicht viel gemacht.
Neues Problem:
Ist zwar nur ein Warning aber ich möchte es weg haben:
Die Zeilen dazu sehen so aus:
new car = 1;
CarInfo[playerid][car][cTyp] = mysql_GetInt2("cars","typ","ownerid",SpielerInfo[playerid][paccID],"usercar","1");
Hallo,
ich habe mein User- und MySQLsystem nach dem von maddin gemacht. Nun möchte ich einen String aus einer Tabelle auslesen, in der zwei spalten einen bestimmten Wert haben sollen. Wie mach ich das? Mein stock zum Auslesen sieht so aus:
stock mysql_GetInt(Table[], Field[], Where[], Is[])
{
new query[128];
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Is, Is);
format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
mysql_query(query);
mysql_store_result();
new sqlint = mysql_fetch_int();
mysql_free_result();
return sqlint;
}
Danke im Vorraus für die Hilfe
Wenn du einen String vergleichen möchtest, nutze strcmp
Problem gelöst Danke
Hallo,
Ich habe mal wieder 2 kleine Warnings und weiß nicht wie ich sie weg bekommen soll:
D:\Samp Server\gamemodes\Own.pwn(1794) : warning 211: possibly unintended assignment
D:\Samp Server\gamemodes\Own.pwn(1809) : warning 211: possibly unintended assignment
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
2 Warnings.
Die STellen dazu habe ich kommentiert:
ocmd:fkasse(playerid,params[])
{
if(SpielerInfo[playerid][pLeader] >= 1)
{
if(SpielerInfo[playerid][pLeader] >= 5)
{
new act[128],betrag,fkasse[128];
if(sscanf(params,"si",act,betrag))return SendClientMessage(playerid,COLOR_WHITE,"INFO: Verwende /fkasse [einzahlen/auszahlen] [Betrag]");
if(SpielerInfo[playerid][pLeader] == 5)
{
if(act = "einzahlen") //Warning 1
{
if(GetPlayerMoney(playerid) >= betrag)
{
new fkassealt,fkasseneu;
GivePlayerMoney(playerid,- betrag);
fkassealt = FrakInfo[Hitmen][fKasse];
fkasseneu = fkassealt + betrag;
FrakInfo[Hitmen][fKasse] = fkasseneu;
}
else
{
SendClientMessage(playerid,COLOR_YELLOW,"So viel Geld hast du nicht!");
}
}
else if(act = "auszahlen")//Warning 2
{
SendClientMessage(playerid,RED,"auszahlen");
}
format(fkasse,sizeof(fkasse),"Fraktionskasse: %i $",FrakInfo[Hitmen][fKasse]);
}
Ich hätte die gerne weg, damit alles reibungslos läuft. Danke im Vorraus für die Hilfe.
Anstatt if else versuchst du es mal mit else if
Dann kommen die selben Fehler.
Edit: Noch 3 mal compiliert keine Fehler mehr xD
Danke für die Hilfe
Hallo,
ich habe mir einen eigenen /aduty Befehl gebaut, doch ich bekomme immer diese errors:
D:\Samp Server\gamemodes\Own.pwn(1033) : error 029: invalid expression, assumed zero
D:\Samp Server\gamemodes\Own.pwn(1033 -- 1035) : error 001: expected token: "}", but found ";"
D:\Samp Server\gamemodes\Own.pwn(1028) : error 017: undefined symbol "rang"
D:\Samp Server\gamemodes\Own.pwn(1028 -- 1039) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Alles anzeigen
Hier die Codes ich habe die Zeilen 1033 - 1035 kommentiert:
ocmd:aduty(playerid,params[])
{
if(SpielerInfo[playerid][pAdmin] >= 1)
{
new aontext[128],aofftext[128],afehler[128],sname[128],rang[128];
if(SpielerInfo[playerid][pAdmin] == 1)
{
format(rang,sizeof(rang),"Supporter");
}
if else(SpielerInfo[playerid][pAdmin] >= 2) //fehler
{ //
format(rang,sizeof(rang),"Administrator"); //
} //bis hier
else
{
format(rang,sizeof(rang),"Team-Mitglied");
}
GetPlayerName(playerid,sname,sizeof(sname));
format(aontext,sizeof(aontext),"%s hat sich als %s angemeldet.",sname,rang);
format(aofftext,sizeof(aofftext),"%s hat sich alls %s abgemeldet.",sname,rang);
if(GetPVarInt(playerid,"Aduty") == 0)
{
SetPVarInt(playerid,"Aduty",1);
SetPlayerColor(playerid,COLOR_RED);
for(new i=0; i<GetMaxPlayers(); i++)
{
SendClientMessage(i,COLOR_RED,aontext);
}
}
if else(GetPVarInt(playerid,"Aduty") == 1)
{
SetPVarInt(playerid,"Aduty",0);
SetPlayerColor(playerid,COLOR_WHITE);
for(new i=0; i<GetMaxPlayers(); i++)
{
SendClientMessage(i,COLOR_RED,aofftext);
}
}
else
{
print("Fehler bei /aduty");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Dazu bist du nicht befugt!");
}
return 1;
}
Danke im Vorraus für die Hilfe.
new FLOAT:X,FLOAT:Y,FLOAT:Z;
zu
new Float:X,Float:Y,Float:Z;
Und so einfach ist das behoben.....
Danke
Hallo,
ich habe beim compilen meines /pay befehls immer diese Warnings:
D:\Samp Server\gamemodes\Own.pwn(952) : warning 213: tag mismatch
D:\Samp Server\gamemodes\Own.pwn(952) : warning 213: tag mismatch
D:\Samp Server\gamemodes\Own.pwn(952) : warning 213: tag mismatch
D:\Samp Server\gamemodes\Own.pwn(953) : warning 213: tag mismatch
D:\Samp Server\gamemodes\Own.pwn(953) : warning 213: tag mismatch
D:\Samp Server\gamemodes\Own.pwn(953) : warning 213: tag mismatch
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
6 Warnings.
Alles anzeigen
Meistens sind die Warnings nicht schlimm und der Befehl funktioniert auch, aber ich hätte sie gerne trotzdem weg.
Der Befehl:
ocmd:pay(playerid,params[])
{
new pID,pIDname[128],betrag,geldpalt,geldpneu,geldpIDalt,geldpIDneu,stext[128],etext[128],atext[128],sname[128];
if(sscanf(params, "ui", pID, betrag))return SendClientMessage(playerid,COLOR_WHITE,"INFO: Verwende /pay [ID] [Betrag]");
{
new FLOAT:X,FLOAT:Y,FLOAT:Z;
GetPlayerPos(playerid,X,Y,Z);
if(IsPlayerInRangeOfPoint(pID,7.0,X,Y,Z))
{
if(GetPlayerMoney(playerid) >= betrag)
{
geldpalt = GetPlayerMoney(playerid);
geldpIDalt = GetPlayerMoney(pID);
GetPlayerName(playerid,sname,sizeof(sname));
GetPlayerName(pID,pIDname,sizeof(pIDname));
format(stext,sizeof(stext),"Du nimmst %i $ aus deine Tasche und gibst sie %s",betrag,pIDname);
format(etext,sizeof(etext),"%s nimmt gibt dir %i $",sname,betrag);
format(atext,sizeof(atext),"%s nimmt Geld aus seiner Tasche und gibt es %s",sname,pIDname);
SendClientMessage(playerid,COLOR_WHITE,stext);
SendClientMessage(pID,COLOR_LIGHTBLUE,etext);
GivePlayerMoney(playerid,-betrag);
GivePlayerMoney(pID,betrag);
geldpneu = geldpalt - betrag;
geldpIDneu = geldpIDalt + betrag;
SpielerInfo[playerid][pGeld] = geldpneu;
SpielerInfo[pID][pGeld] = geldpIDneu;
}
else
{
SendClientMessage(playerid,COLOR_YELLOW,"So viel Geld hast du nicht!");
}
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"Der Spieler ist zu weit entfernt!");
}
}
return 1;
}
Immer diese kleinen Fehler
Danke für die Hilfe.
Hallo,
ich habe ein Problem mit meinem Bank Dialog:
case DIALOG_BANKEIN:
{
new Kontoalt = SpielerInfo[playerid][pKonto];
if(inputtext >= GetPlayerMoney(playerid) +1)
{
SendClientMessage(playerid,COLOR_YELLOW,"So viel Geld hast du nicht/Der Wert ist ungültig.");
}
else
{
new stext[128];
GivePlayerMoney(playerid,- inputtext);
SpielerInfo[playerid][pKonto] = Kontoalt + inputtext;
SendClientMessage(playerid,COLOR_WHITE,"Die Überweisung war erfolgreich.");
format(stext,sizeof(stext),"Dein neuer Kontostand beträgt: %i",SpielerInfo[playerid][pKonto]);
SendClientMessage(playerid,COLOR_WHITE,stext);
}
}
Wenn ich das ganze compiliere kommen folgende errors:
D:\Samp Server\gamemodes\Own.pwn(1002) : error 033: array must be indexed (variable "inputtext")
D:\Samp Server\gamemodes\Own.pwn(1009) : error 035: argument type mismatch (argument 2)
D:\Samp Server\gamemodes\Own.pwn(1010) : error 033: array must be indexed (variable "inputtext")
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
3 Errors.
Der Dialog von dem die Antwort kommen soll wird so erstellt:
ShowPlayerDialog(playerid,DIALOG_BANKEIN,DIALOG_STYLE_INPUT,"Einzahlen","Bitte gib den Betrag ein den du auf dein Konto einzahlen möchtest:","Absenden","");
Ich bitte um Hilfe und danke im Vorraus dafür.
Also müsste ich einfach SetTimerEx benutzen und den Timer beim logout beenden? Probier ich gleich mal aus.
/edit: Ok funktioniert alles. Danke für die Hilfe von euch.
Hallo,
Ich habe ein Problem mit meinem PayDay. Und zwar bekommt immer nur der erste Spieler der auf dem Server connectet den PayDay.
Beim Login wird der Timer gestartet:
SetTimer("PayDay",60000,true);
Das Public sieht so aus:
public PayDay(playerid)
{
//Respektpunkte-Level Defines
new respektneed1 = 8;
new PayDayl = SpielerInfo[playerid][pPayDay];
new PayDaynew, paydayh[256],payday1[256],payday2[256],payday3[256],payday4[256],payday5[256],payday6[256];
format(paydayh,sizeof(paydayh),"|===================| PayDay |===================|");
format(payday1,sizeof(payday1),"| Lohn: %i $ Steuer:%i $ ",SpielerInfo[playerid][pLohn],SpielerInfo[playerid][pSteuern]);
format(payday2,sizeof(payday2),"| ");
format(payday3,sizeof(payday3),"| ");
format(payday4,sizeof(payday4),"| Das PayDaysystem ist noch in Bearbeitung! ");
format(payday5,sizeof(payday5),"| ");
format(payday6,sizeof(payday6),"|==============================================|");
if(PayDayl == 59)
{
new Respektalt = SpielerInfo[playerid][pRespekt];
new Respektneu = Respektalt +1;
PayDaynew = 0;
SendClientMessage(playerid,COLOR_YELLOW,paydayh);
SendClientMessage(playerid,COLOR_YELLOW,payday1);
SendClientMessage(playerid,COLOR_YELLOW,payday2);
SendClientMessage(playerid,COLOR_YELLOW,payday3);
SendClientMessage(playerid,COLOR_YELLOW,payday4);
SendClientMessage(playerid,COLOR_YELLOW,payday5);
SendClientMessage(playerid,COLOR_YELLOW,payday6);
GivePlayerMoney(playerid,SpielerInfo[playerid][pLohn]);
GivePlayerMoney(playerid,- SpielerInfo[playerid][pSteuern]);
if(Respektneu == SpielerInfo[playerid][pLevel] * respektneed1)
{
SpielerInfo[playerid][pLevel] = SpielerInfo[playerid][pLevel] +1;
SetPlayerScore(playerid,SpielerInfo[playerid][pLevel]);
new ltext[256];
format(ltext,sizeof(ltext),"Du bist zum Level %i aufgestiegen.",SpielerInfo[playerid][pLevel]);
SendClientMessage(playerid,COLOR_GREEN,ltext);
SpielerInfo[playerid][pRespekt] = 0;
}
else
{
SpielerInfo[playerid][pRespekt] = Respektneu;
}
}
else
{
PayDaynew = PayDayl +1;
}
SpielerInfo[playerid][pPayDay] = PayDaynew;
SpielerInfo[playerid][pLohn] = 0;
return 1;
}
Jetz habe ich gelesen man sollte SetTimerEx verwenden, doch da weiß ich nicht was ich am ende nach dem repeating setzten soll.
Ich bitte um Hilfe. Danke im Vorraus.
Ist das erst seit dem du den Streamer installiert hast oder schon vorher gewesen?
Unter OnPlayerCommandText:
new string[128];
format(string,sizeof(string)," Der Befehl %s exisitiert nicht!",cmdtext);
return SendClientMessage(playerid,ROT,string);
das einfügen
Und so schnell ist das Problem gelöst. Danke!!!
Hallo,
ich habe eine Frage. Und zwar habe ich bis jetzt nur Befehle mit ocmd in einen neuen Gamemode reingeschrieben, und wenn ich jetzt auf dem Server zum beispiel /hgsdo eingebe(den Befehl gibt es natürlich nicht) dann passiert einfach nichts. Wie kann ich das nun machen, dass bei Befehlen die es nicht gibt ein bestimmter Text ausgeworfen wird? Ich habe bis jetzt nichts gefunden bzw. weiß auch nicht ganz mit welchen Begriffen ich das suchen soll.
Danke im Vorraus für die Hilfe.
Wenn ich mir das so vorstelle, und einer mit diesem System 200 User hat und etwa 80 Einträge, was dann passieren würde
mysql_SetInt("accounts", "Team", SpielerInfo[playerid][pTeam], "Name", SpielerInfo[playerid][pName]); // 80mal x 200mal (280x einen Query abrufen, und das nicht unbedingt einmal)
Ich glaube man sollte die Finger davon lassen wenn man ein größeren Server plant.
Was würdest du außer dass man das immer mit der UserID der Datenbank auslesen sollte anders machen? Ich wüsste nicht wie.
Also statt
mysql_SetInt("accounts", "Team", SpielerInfo[playerid][pTeam], "Name", SpielerInfo[playerid][pName]); // 80mal x 200mal (280x einen Query abrufen, und das nicht unbedingt einmal)#
mysql_SetInt("accounts", "Team", SpielerInfo[playerid][pTeam], "id", SpielerInfo[playerid][pID]); // 80mal x 200mal (280x einen Query abrufen, und das nicht unbedingt einmal)
Wenn man die Daten nur abspeichert/ausließt, wenn der Spieler den Server verlässt/betritt ist das doch gar nicht viel. Und wenn die Datenbank auf dem gleichen Server läuft ist das in 5ms getan.