Du kompilierst auf deinem Nitrado Server ? Kein Wunder das es nicht funktioniert.
Erkundige dich eventuell mal wie man ein Script kompiliert.
Beiträge von Goldkiller
-
-
Du musst dich täuschen. Du bist nicht der erste der sowas behauptet, aber letztendlich selber den Fehler verursachst.
Für den Fall du hast das Pawno Paket mehrmal installiert, sei dir sicher du benutzt auch den richtigen "Include" Ordner mit der aktuellen Streamer Version. -
Der Streamer hat nicht die identische Version wie die Include zum Plugin ( streamer.inc ) , mit der du das Script kompiliert hast.
Steht dort aber auch in der Warnung. -
SpielerInfo[playerid][Gestorben] += 1;
SpielerInfo[killerid][Verbrechen] += 1;
Einer der Beiden Zeilen ist Fehlerhaft für den Fall du begehst Selbstmord.Die Position etc unter OnPlayerDeath zu setzen halte ich auch für falsch. Du bist doch Tod und wirst erst wieder gespawnt,sobald OnPlayerSpawn aufgerufen wird. Solltest dort die Position setzen. Um das richtig zu machen bei OnPlayerSpawn,solltest eine Variable korrekt setzen.
Zitatif(SpielerInfo[playerid][Krankenversicherung] == 0)// <-- ?!
{}
else if(SpielerInfo[playerid][Krankenversicherung] == 0) //<-- ?!
{}
-
Super Sache!
Bin eher zufällig über den wiki.sa-mp.com auf die Seite gestoßen. -
format(query, 128, "SELECT `md5('Password')` FROM `Accounts` WHERE `Name` = '%s'", Name);
Das würde wenn überhaupt den String Password mit md5 verschlüsseln.format(query, 128, "SELECT md5(`Password`) FROM `Accounts` WHERE `Name` = '%s'", Name);
So würde es funktionieren. Allerdings müsstest du inputtext dann noch mit md5 verschlüsseln:Zitatif(!strcmp(inputtext, mysql_ReturnPasswort(SpielerName), true)) // <-- inputtext ist nicht mit md5 verschlüsselt,der Rückgabewert von mysql_ResurnPassword allerdings schon
Wieso lässt du nicht einfach MySQL für dich prüfen,ob das korrekte Passwort eingegeben wurde ?
stock mysql_isUserPassword(Name[],Password[])
{
new query[130], rows;
mysql_real_escape_string(Name, Name);
format(query, sizeof(query) , "SELECT * FROM `Accounts` WHERE `Name` = '%s' AND `Password` = md5('%s') LIMIT 1;", Name,Password);
mysql_query(query);
mysql_store_result();
rows = mysql_num_rows();
mysql_free_result();
return rows ;
}
Damit könntest es direkt abfragen. Wenn mysql_isUserPassword 0 ist,ist es das falsche Passwort. -
Was du da ändern sollst ? So ziemlich alles. Scripte nicht einfach drauf los, überleg dir vorher was du erreichen willst.
-
Kein Wunder.
for(new i=0; i<MAX_PLAYERS; i++)
{
if(BizBsn[i][pBesetzt] == 0)
{
Rein von der Variablenbezeichnung BizBsn halte ich die playerid / i als Index für unwahrscheinlich.
TankeBSN = Create3DTextLabel(stringbsn, WHITE,1005.4361,-940.8749,41.7509,40.0, 0, 0);
SetTimerEx("Bsn0",1,5000,"d");
Du erstellst immer den 3DText neu. Soll das so sein ?
Der Timer hat ein Interval von 1ms ( !!! ) und wiederholt sich. Das Gleiche gilt für den Anderen Zweig .forward Bsn0(playerid);
public Bsn0(playerid)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(BizBsn[i][pBesetzt] == 0)
{
new stringbsn[128];
format(stringbsn,sizeof(stringbsn),"Eigentum des Staates!\nProdukte auf Lager:%d\n /fill um zu tanken!",BenzinBsn);
Update3DTextLabelText(TankeBSN, WHITE, stringbsn);
}
}
}
Hier das Gleiche "Rein von der Variablenbezeichnung BizBsn halte ich die playerid / i als Index für unwahrscheinlich." . Wozu übergibst du überhaupt die playerid ? Du nutzt sie sowieso nie.Was also falsch ist.
Du rufst im ersten Teil die Funktionen bsn<X> für jedes BizBsn indem du einen Timer mit dem Interval 1ms erstellst und diesen sich wiederholen lässt. In der Funktion bsn<X> wird allerdings wieder jedes BizBsn verarbeitet. Du machst es also doppelt. Auch nutzt du nur 1 Variable um die 3DTexte von allen BizBsn festzuhalten ? Das kann gar nicht funktionieren. Du wirst immer nur das zuletzt erstellte 3DText bearbeiten können,da du dort nur die ID kennst. -
So kann der Query aber eh nicht funktionieren.
Die Bezeichnung des Feldes kannst du nicht mit ' ' angeben.Entweder ` `oder gar nicht. Der Fehler war ( wie Mellnik ja korrigiert hat ) die spezifizierte Array Größe im Funktionskopf. Gibst du dort etwas an,muss es immer exakt dieser größe entsprechen. -
dini_Get gibt dir einen String/Array zurück. Du willst bestimmt keinen String auslesen sondern nur einen einzigen Wert,da wäre dini_GetInt angebracht.
-
Wenn die identisch sind,wie soll es da noch Unterschiede geben ? Wozu sollte es auch welche geben ?
Es gibt sowas wie Rückwärtskompatibilität. Da kann man jetzt auch nicht sagen, "wir entfernen d und lassen nur noch i zu". Alle alten Scripte würden nicht mehr funktionieren die mit d laufen ( ohne sie neu zu kompilieren bzw abzuändern ) .Wo ist denn sowieso das Problem wenn es d und i gibt? Manche haben sich nun mal an d ( decimal ) gewöhnt und Andere an i ( integer ).Im Endeffekt sieht es vom Prinzip her sowieso so aus:
if( c == 'd' || c == 'i' ) { .. } -
d und i sind als Platzhalter identisch.
-
Das ... kannst dir vorstellen wie und weiter so.
new Ueberweiser[MAX_PLAYERS] ={ INVALID_PLAYER_ID,...};
Alle mit INVALID_PLAYER_ID initialisieren.
new Ueberweiser[MAX_PLAYERS] = INVALID_PLAYER_ID;
Nur bei index 0 wird mit INVALID_PLAYER_ID initialisiert. Letzteres ist natürlich Blödsinn. Wenn schon,dann wirklich alle. Nur index 0 lohnt sich absolut nicht. -
Nein. Ließ den Beitrag nochmal.
Die Array-Größe hat nichts mit dem Wert hinter einem Index zu tun.new Ueberweiser[MAX_PLAYERS] ={ INVALID_PLAYER_ID,...};
Das ist aber nicht einfach so möglich. Du musst vermutlich das Script weiter anpassen, aber wozu ?
Wenn der Autor es mit -1 macht und es funktioniert,wieso ändern ? -
new Ueberweiser[MAX_PLAYERS] ={-1,...};
Initialisiert die Variable komplett mit -1.
Würdest du folgendes machen:
new Ueberweiser[MAX_PLAYERS] ;
Initialisiert du alle mit 0. Der Wert 0 ist aber ein gültiger Spieler ( playerid 0 ) . Wahrscheinlich will der Autor mit -1 darstellen,dass es zZt keinen Überweiser gibt. Schlauer wäre allerdings INVALID_PLAYER_ID zu nutzen anstatt -1. Ist einfach vom Begriff her klarer und die meisten Funktionen erkennen den Wert hinter INVALID_PLAYER_ID direkt als ungültig. -
Wofür ist denn das gut :
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
print("\n------------------------------------------");
print(" EventSystem by Narushi erfolgreich geladen!");
print("------------------------------------------\n");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
#else
#endif
Achtung,Falle ;).Hab mir den Code nicht weiter im Detail angeschaut. War mir zu unübersichtlich :/.
-
Denn BBCode musst du definitiv noch fixen.
Zitat„ich bin nicht Tion und @SSL“ - wahr
Ist nicht wahr. Du bist doch Tion.[table=2]
[*] Aussage
[*] In Text[*] p && !q
[*] poderund nicht q[*]q && !p
[*] qoderund nicht p[*] p && !q r
[*] p und nicht q oder r
[/table]ZitatSo, dass war mein kurzes Tutorial - Geswyped in etwa 25 Minuten.
Die Dauer in der du den Text geschrieben hast ist nicht wirklich relevant oder ein Qualitätsmerkmal. -
Er hat doch nie von einem inoffiziellem Multiplayer für GTA IV gesprochen.
http://www.gtaforums.com/index.php?showforum=251
http://www.gtaforums.com/index.php?showforum=65 -
So ist es ja auch richtig ;).
Zitat//if(strcmp(text,"repair",true)==0)
Würde aber auch funktionieren. -
Was du dort gemacht hast MrMoney funktioniert nicht:
if(strfind("/accept repair","repair",true) != -1)
Das ist totaler Quatsch.
Ist doch klar,dass er das Wort "repair" immer in "/accept repair" finden wird. Genau genommen findet er es an Position 8.