Nichts für ungut, aber nutze einen CMD-Prozessor wie ocmd,zcmd,ycmd,rcmd...
Und mach dir das Leben einfach & performant
kannst du mir das nicht um schreiben auf ocmd oder soo ?
Nichts für ungut, aber nutze einen CMD-Prozessor wie ocmd,zcmd,ycmd,rcmd...
Und mach dir das Leben einfach & performant
kannst du mir das nicht um schreiben auf ocmd oder soo ?
Musst doch irgentwo die strtok funktion haben da diese kein bestandteil von samp ist.
meinst du das ??
stock strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[256];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Ersetze mal idx1 mit idx dann sollte es klappen. Denn oben im Befehl wird idx erstellt aber weiter unten idx1.
immer noch das gleiche....
ich mache /contract 12 20000 also contract id preis
dann kommt im log 12 | 12
Und was genau tippst du ein?
Denn wenn du 12 eingibst, ehh dann ist das vollkommen korrekt...
Setze mal nach dem Preis = strval(tmp) ein printf("Preis: %d | %s",Preis,tmp); und guck mal in der server log oder konsole nach was dort geprintet wird.
Setze mal nach dem Preis = strval(tmp) ein printf("Preis: %d | %s",Preis,tmp); und guck mal in der server log oder konsole nach was dort geprintet wird.
[17:10:44] Preis: 12 | 12
[17:11:03] Preis: 12 | 12
GetPlayerName kann auch keinen Wert haben woher auch wenn der Spieler nicht Ingame ist. Nachdem ich den Code etwas ausgebessert habe sollte es nun funktionieren. Beachte die Kommentare die ich in einigen Zeilen gesetzt habe. Ausserdem rate ich zu einem command processor ala zcmd oder ocmd mit sscanf da dir das einiges an Arbeit abnimmt und sogar noch schneller als die ganze Sache mit den strcmp ist
if(strcmp(cmd, "/contract", true) == 0){ new playermoney; new tmp[256]; new Preis, idx; // Wenn der Spieler in der Fraktion 18 ist brauchen wir auch nicht Prüfen was er eingegeben hat da er es sowieso nicht darf. if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!"); tmp = strtok(cmdtext, idx1); if(!strlen(tmp)) { SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]"); return 1; } giveplayerid = ReturnUser(tmp); // Wir prüfen hier schon ob der Spieler der selbe ist der den Command eingegeben hat dergleiche ist wie der Zielspieler // Unabhängig davon ob der Spieler der den Command eingegeben hat mehr oder weniger als 10k bzw 100k eingegeben hat. if(giveplayerid == playerid) return SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!"); tmp = strtok(cmdtext, idx1); if(!strlen(tmp)) { SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]"); return 1; } Preis = strval(tmp); if(Preis < 10000 || Preis > 100000) return SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!"); if (IsPlayerConnected(giveplayerid)) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername2, sizeof(sendername2)); playermoney = PlayerMoney[playerid]; // Hat der Spieler genug Geld ? Hier brauchen wir nicht prüfen ob der Preis > 0 ist da es oben bereits limitiert wurde auf minimal 10k und maximal 100k if (playermoney >= Preis) { PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis); PlayerInfo[giveplayerid][pKopfgeld]+=Preis; format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis); SendFamilyMessage(18, COLOR_YELLOW, string); format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis); SCM(playerid, COLOR_LIGHTBLUE, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); } else { SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag."); } } else { format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid); SCM(playerid, COLOR_GRAD1, string); } return 1;}
Ohh gott, stimmt ja
immer noch €10.000 oder mehr als €100.000! egall was ich eintippe
Erstmal räumen wir mal auf:
Codeformat(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid); SCM(playerid, COLOR_GRAD1, string);
durch
Codenew spielername[MAX_PLAYER_NAME]; GetPlayerName(giveplayerid, spielername, sizeof(spielername)); format(string, sizeof(string), "%s ist kein Aktiver Spieler.", spielername); SCM(playerid, COLOR_GRAD1, string);
ersetzen.
Pn mich lieber dass kann glaub ich dauern
Das steht jetzt 65355 ist kein Aktiver Spieler
Alles anzeigen| | = oder
&& und
Du willst sicherlich abfragen, ob der Preis über 10.000$ ist UND unter 100.000$, oder?
Richtiger Code, wenn ich mich nicht Irre:
Das steht jetzt 65355 ist kein Aktiver Spieler
hallo wenn ich /contract mache kommt immer Nicht weniger als €10.000 oder mehr als €100.000! aber ich verstehe nicht warum....
if(strcmp(cmd, "/contract", true) == 0)
{
/*new playermoney;
new tmp[256];
new Preis, idx;*/
if(IsPlayerConnectedEx(playerid))
{
tmp = strtok(cmdtext, idx1);
if(!strlen(tmp))
{
SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
return 1;
}
giveplayerid = ReturnUser(tmp);
tmp = strtok(cmdtext, idx1);
if(!strlen(tmp))
{
SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
return 1;
}
if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
Preis = strval(tmp);
if(Preis < 10000 || Preis > 100000) { SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!"); return 1; }
if (IsPlayerConnectedEx(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
if(giveplayerid == playerid) { SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!"); return 1; }
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername2, sizeof(sendername2));
playermoney = PlayerMoney[playerid];
if (Preis > 0 && playermoney >= Preis)
{
PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis);
PlayerInfo[giveplayerid][pKopfgeld]+=Preis;
format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis);
SendFamilyMessage(18, COLOR_YELLOW, string);
format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis);
SCM(playerid, COLOR_LIGHTBLUE, string);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
}
else
{
SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag.");
}
}
}
else
{
format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
SCM(playerid, COLOR_GRAD1, string);
}
}
return 1;
}
Das ist alles was im Log steht?
[21:07:22] [ERROR] CMySQLQuery::Create - no query and orm object specified[21:08:14]
[ERROR] CMySQLQuery::Create - no query and orm object specified und das aber nur 2 mal
Poste mal deinen aktuellen MySQL Log.
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
[21:04:05] [ERROR] CMySQLQuery::Execute[QueryMeldung()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Du musst dann mysql_format benutzen.^^
mysql_format(sqlHandle,miniquery, sizeof(miniquery), "%s `RangName0` = '%e', `RangName1` = '%e', `RangName2` = '%e',`RangName3` = '%e',`RangName4` = '%e', `RangName5` = '%e', `RangName6` = '%e', `LongName` = '%e', `SmallName` = '%e', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'",miniquery,FrakInfo[fID][fRangName0],FrakInfo[fID][fRangName1],FrakInfo[fID][fRangName2],FrakInfo[fID][fRangName3],FrakInfo[fID][fRangName4],FrakInfo[fID][fRangName5],FrakInfo[fID][fRangName6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID);
Speichert immer nocht nicht
@Jeffry
Hier auch mal mit Escaped Strings von der Query aus.
stock SaveFraktion(fID) { new query[800], miniquery[600], string[150]; new count = GetTickCount(); format(miniquery, sizeof(miniquery), "UPDATE `frakinfo` SET `Geld` = '%d', `Drogen` = '%d', `Mats` = '%d', `Gehalt0` = '%d', `Gehalt1` = '%d', `Gehalt2` = '%d', `Gehalt3` = '%d', `Gehalt4` = '%d', `Gehalt5` = '%d',`Gehalt6` = '%d',", FrakInfo[fID][fGeld], FrakInfo[fID][fDrogen], FrakInfo[fID][fMaterials], FrakInfo[fID][fGehalt0], FrakInfo[fID][fGehalt1], FrakInfo[fID][fGehalt2], FrakInfo[fID][fGehalt3], FrakInfo[fID][fGehalt4], FrakInfo[fID][fGehalt5], FrakInfo[fID][fGehalt6]); mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", ""); format(miniquery, sizeof(miniquery), "%s `RangName0` = '%e', `RangName1` = '%e', `RangName2` = '%e',`RangName3` = '%e',`RangName4` = '%e', `RangName5` = '%e', `RangName6` = '%e', `LongName` = '%e', `SmallName` = '%e', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'", miniquery,FrakInfo[fID][fRangName0],FrakInfo[fID][fRangName1],FrakInfo[fID][fRangName2],FrakInfo[fID][fRangName3],FrakInfo[fID][fRangName4],FrakInfo[fID][fRangName5],FrakInfo[fID][fRangName6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID); mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", ""); format(string, sizeof(string), "[MySQL] Die Fraktionsinformationen von Fraktions ID %d wurde mit einer Geschwindigkeit von %d Millisekunden gespeichert!", fID, GetTickCount() - count); SendMySQLMessage(string); UpdateFraktionsSchild(fID); return 1; }
wie gesagt ich kann es nocht ht testen gebe euch aber feedback wenn ich zuhause bin und es testen kann
So, wenn ich nichts übersehen habe.
Sorry für die Einrückung.. : /
[pwn]stock SaveFraktion(fID){new query[800], miniquery[600], string[150];new count = GetTickCount();new Rang[7][50];mysql_real_escape_string(FrakInfo[fID][fRangName0], Rang[0], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName1], Rang[1], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName2], Rang[2], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName3], Rang[3], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName4], Rang[4], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName5], Rang[5], sqlHandle, 126);mysql_real_escape_string(FrakInfo[fID][fRangName6], Rang[6], sqlHandle, 126);format(miniquery, sizeof(miniquery), "UPDATE `frakinfo` SET `Geld` = '%d', `Drogen` = '%d', `Mats` = '%d', `Gehalt0` = '%d', `Gehalt1` = '%d', `Gehalt2` = '%d', `Gehalt3` = '%d', `Gehalt4` = '%d', `Gehalt5` = '%d',`Gehalt6` = '%d',",FrakInfo[fID][fGeld], FrakInfo[fID][fDrogen], FrakInfo[fID][fMaterials], FrakInfo[fID][fGehalt0], FrakInfo[fID][fGehalt1], FrakInfo[fID][fGehalt2], FrakInfo[fID][fGehalt3], FrakInfo[fID][fGehalt4], FrakInfo[fID][fGehalt5], FrakInfo[fID][fGehalt6]);format(miniquery, sizeof(miniquery), "%s `RangName0` = '%s', `RangName1` = '%s', `RangName2` = '%s',`RangName3` = '%s',`RangName4` = '%s', `RangName5` = '%s', `RangName6` = '%s', `LongName` = '%s', `SmallName` = '%s', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'",miniquery, Rang[0], Rang[1], Rang[2], Rang[3], Rang[4], Rang[5], Rang[6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID);mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", "");format(string, sizeof(string), "[MySQL] Die Fraktionsinformationen von Fraktions ID %d wurde mit einer Geschwindigkeit von %d Millisekunden gespeichert!", fID, GetTickCount() - count);SendMySQLMessage(string);UpdateFraktionsSchild(fID);return 1;}[
danke versuche es später wenn ich zu hause bin gebe euch dann ein feed back ob es geht
Bei deiner ersten Miniquery, hast du am Ende ein Komma was da nicht sein Sollte. Des weiteren werden dann ALLE Datensätze gleich gesetzt da du keinen eindeutigen Eintrag einen Wert geben willst.
Du nutzt auch die MySQL R31+ anscheinend. Dann brauchst du deine Rangnamen nicht selbst Escapen sonder kannst in der Query %e anstatt %s nehmen, dann Escaped er die selbst.
wie meinst du das mit der minquery und daten sätze da ich bei mysql neu bin
also bei rangnamen"%s" zu rangname"%e"Machen?
Du solltest die zwei Strings "miniquery" und "miniquery2" auch zusammenfügen und als einen Query absenden , im ganzen betrachtet ist es ja schließlich auch nur einer.
Aktuell hast du nur 2 Strings die du jeweils separat als Query versuchst auszuführen. Der erste funktioniert, der zweite nicht.
So könntest du die Strings zusammenfügen:
format(string,sizeof(string),"Ich bin der Anfang");format(string,sizeof(string),"%s und ich das Ende",string);// string = Ich bin der Anfang und ich das Ende
meinst du das soo??
stock SaveFraktion(fID)
{
new query[800], miniquery[600], string[150];
new count = GetTickCount();
new Rang[7][50];
mysql_real_escape_string(FrakInfo[fID][fRangName0], Rang[0], sqlHandle, 126);
mysql_real_escape_string(FrakInfo[fID][fRangName1], Rang[1], sqlHandle, 126);
mysql_real_escape_string(FrakInfo[fID][fRangName2], Rang[2], sqlHandle, 126);
mysql_real_escape_string(FrakInfo[fID][fRangName3], Rang[3], sqlHandle, 126);
mysql_real_escape_string(FrakInfo[fID][fRangName4], Rang[4], sqlHandle, 126);
mysql_real_escape_string(FrakInfo[fID][fRangName5], Rang[5], sqlHandle, 126);
mysql_real_escape_string(FrakInfo[fID][fRangName6], Rang[6], sqlHandle, 126);
format(miniquery, sizeof(miniquery), "UPDATE `frakinfo` SET `Geld` = '%d', `Drogen` = '%d', `Mats` = '%d', `Gehalt0` = '%d', `Gehalt1` = '%d', `Gehalt2` = '%d', `Gehalt3` = '%d', `Gehalt4` = '%d', `Gehalt5` = '%d',`Gehalt6` = '%d',",
FrakInfo[fID][fGeld], FrakInfo[fID][fDrogen], FrakInfo[fID][fMaterials], FrakInfo[fID][fGehalt0], FrakInfo[fID][fGehalt1], FrakInfo[fID][fGehalt2], FrakInfo[fID][fGehalt3], FrakInfo[fID][fGehalt4], FrakInfo[fID][fGehalt5], FrakInfo[fID][fGehalt6]);
mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", "");
format(miniquery, sizeof(miniquery), "`RangName0` = '%s', `RangName1` = '%s', `RangName2` = '%s',`RangName3` = '%s',`RangName4` = '%s', `RangName5` = '%s', `RangName6` = '%s', `LongName` = '%s', `SmallName` = '%s', `MitgliederLimit` = '%d', `Status` = '%d', `BewerbungsStatus` = '%d', `PayDayPunkte` = '%d' WHERE fID = '%d'",
Rang[0], Rang[1], Rang[2], Rang[3], Rang[4], Rang[5], Rang[6], FrakInfo[fID][fLongName], FrakInfo[fID][fSmallName], FrakInfo[fID][fMitgliederLimit], FrakInfo[fID][fStatus], FrakInfo[fID][fBewerbungsStatus], FrakInfo[fID][fPayDayPunkte], fID);
mysql_function_query(sqlHandle, miniquery, false, "QueryMeldung", "");
format(string, sizeof(string), "[MySQL] Die Fraktionsinformationen von Fraktions ID %d wurde mit einer Geschwindigkeit von %d Millisekunden gespeichert!", fID, GetTickCount() - count);
SendMySQLMessage(string);
UpdateFraktionsSchild(fID);
return 1;
}