Wie sieht der Code jetzt aus?
Beiträge von Jeffry
-
-
Also kann ich dies nicht nutzen ja ?
Nein.
Zudem muss beachtet werden, dass Actoren nicht richtig synchronisiert werden, wenn sie bewegt werden. Ganz am Anfang ging dies noch, wurde dann aber ziemlich limitiert.Nutze NPCs für solche Vorhaben.
-
Füge nach dem print(huan) das ein:
findings=true; -
new query;
zu:
new query[256];format(huan,sizeof(huan),"[MULTIACCOUNT] Der Spieler %s betreibt Multiaccounting! IP: %s (Übereinstimmung mit %s)", PlayerName(playerid), GetIP(playerid), name);
zu:
format(huan,sizeof(huan),"[MULTIACCOUNT] Der Spieler %s betreibt Multiaccounting! IP: %s (Übereinstimmung mit %s (ID: %d))", PlayerName(playerid), GetIP(playerid), name, id); -
Würdest du die entsprechenden Zeilen im Code markieren?
-
Das erste muss also eine Spielereingabe sein!
Anstatt des Passwortes muss die E-Mail eingegeben werden.
Das anlegen des Kontos darfst du aber erst nach Eingabe des korrekten Codes machen.
^
Das Passwort wird also erst nach korrekter Eingabe des Codes eingegeben. Dann wird auch der INSERT gemacht.Auf eine korrekte Mail kannst du hiermit prüfen:
http://forum.sa-mp.com/showthread.php?t=247893 -
Dann solltest du es dringendst lernen.
Es bringt ja nichts, wenn dir dein Server von jemand anderem geschrieben wird.Der Code sollte so aussehen:
new huan[145];
for(new i=0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(!IsPlayerConnected(i))continue;
if(IsPlayerNPC(i))continue;
if(strcmp(GetIP(playerid), GetIP(i), true))continue; // Wenn ip_address noch nicht auf dem Server gefunden wurde!
//ip_address stimmt mit bereits verbundener IP überein
format(huan,sizeof(huan),"[MULTIACCOUNT] %s(%d) (IP: %s) wurde vom System erkannt! Multiaccount mit der ID %d (Name: %s, IP: %s)", PlayerName(playerid), playerid, GetIP(playerid), i, PlayerName(i), GetIP(i));
SendClientMessageToAdmins(huan, GELB);
print(huan);
}
//Check für offline accounts
format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", PlayerName(playerid), GetIP(playerid));
mysql_query(query);
mysql_store_result();
new rows = mysql_num_rows(), id, name[MAX_PLAYER_NAME];
for(new i=0; i<rows; i++)
{
mysql_retrieve_row();
mysql_fetch_field_row(huan,"id"); id = strval(huan);
mysql_fetch_field_row(name,"name");
format(huan,sizeof(huan),"[MULTIACCOUNT] Der Spieler %s betreibt Multiaccounting! IP: %s (Übereinstimmung mit %s)", PlayerName(playerid), GetIP(playerid), name);
SendClientMessageToAdmins(huan, GELB);
print(huan);
}
mysql_free_result(); -
Den Text für SendMail musst du noch mit format formatieren, damit der Code drin steht.
new str[256];
format(str, sizeof(str), "Vielen Danke für deine Registrierung, um deinen Account zu aktivieren, gib bitte nachfolgenden Code ein : %d", PlayerInfo[playerid][pRegCode]);
SendMail( "account@script-devilz.to", "account@script-devilz.to", "Script Devilz Account Validierung", "Bitte verifiziere deinen Account", str );In die Datenbank musst du den Wert nicht mal speichern, weil der Code ja direkt danach geprüft wird.
Das anlegen des Kontos darfst du aber erst nach Eingabe des korrekten Codes machen:
mysql_format(handle, query, sizeof(query), "INSERT INTO spieler_accounts (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext); -
-
wie setze ich den Code in den E-Mail Text?
Per format, wie gewohnt.
Aber wohin mit dem anderen Zeugs
Nach SendMail zeigst du dem Spieler den Dialog zum Eingeben des Codes an.
-
Natürlich sollst du das Query nicht einfach nur in den Code einfügen, das macht ja keinen Sinn.
format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", GetName(playerid), GetIP(playerid));
mysql_query(query);
mysql_store_result();
new rows = mysql_num_rows();
//...Result hier auslesen.Beispiel hier:
http://wiki.sa-mp.com/wiki/MySQL#mysql_retrieve_rowDas solltest du aber auch bereits in deinem Code an anderen Stellen so oder ähnlich haben, du lässt ja die Stats auch laden.
-
Den Code per Random genieren.
PlayerInfo[playerid][pRegCode] = random(900000) + 100000;Das per Query speichern, wie normal auch
UPDATE spieler SET pregcode = '%d' WHERE name = '%s';Und dann im Dialog eingeben lassen und prüfen
SELECT * FROM spieler WHERE pregcode = '%d' AND name = '%s'; -
Das ersetzt dann alles was zu
//Check für offline accounts
gehört. -
-
so wie füge ich ein wen er ihn Checkpoint dann reinfährt das er 10 Sekunden gefreezt wird und die Nachricht bekommt: Das Fahrzeug wird nun entladen.
Starte bei OnPlayerEnterCheckpoint (Position prüfen / Checkpoint ID falls mit Streamer) einen Timer (SetTimerEx) und zeige die Nachricht entsprechend an.
so aber 1 Kubikmeter bringt 1.000$ 0.1 Kubikmeter sollten 100$ wert sein.
gehalt = kubikmeter[playerid] * 100;
-
Wenn du mal 10000 registrierte User hast, dann schmiert dir bei diesem Code der Server ab, ob steht für einige Zeit, da du dann beim Connect des Users mindestens 30000 Queries absendest. Selbst wenn jedes Query nur 10ms braucht um zu antworten (was sehr gut wäre), würde der Server 300 Sekunden lang stehen (5 Minuten).
Danach fliegen wahrscheinlich alle User vom Server wegen Timeout oder ähnlichem.Selbst bei 300 registrierten Usern wären es schon mindestens 10 Sekunden Stillstand.
Du kannst das ganze mit einem einzigen Query abfragen, anstatt jeden Spieler in der Datenbank zu prüfen.
So bekommst du alle Konten mit der gleichen IP zurück, das neuste als erstes. -
Schwer zu sagen, was hier der Fehler sein könnte.
Hast du es mal auf einem leeren Gamemode versucht?
Sprich, du lädst dir den SA-MP Server nochmal komplett neu runter und fügst in einen leeren Gamemode bei OnPlayerConnect nur das Query ein. Wird das dann aufgerufen? -
...ehh wo hast n die Include her?

Scheint wohl das hier zu sein:
http://wiki.gta-online.lt/A_actors.incDem Copyright nach ist das was ziemlich altes. Gab oder hätte es vielleicht mal geben sollen.
Das hat aber nichts mit den derzeitigen Actoren zu tun. @[IRP]Rob_Clare
-
Hast du in OnAccountLoaded mal einen print direkt an die erste Zeile vor den Kommentar gestellt?
Wird der aufgerufen und geprintet?Falls nicht, entferne mal das LIMIT 1 aus dem Query. Ändert das was?
-
Das ist nicht möglich, dafür musst du einen NPC verwenden.