Dann benutzt du nicht die aktuellste Server Version (0.3.7).
Beiträge von Goldkiller
-
-
Zitat
z.B. mehrmals diese admin nachricht bekomme nach dem login
Du solltest gPM_OnLogin ja auch nicht mehrmals aufrufen. Es sollte genau 1x pro Spieler sein. Denn diese Nachricht kommt nur, wenn du gPM_OnLogin für einen Spieler aufrufst. Bekommst du die Nachricht wirklich mehrfach, dann stimmt da bei deinem Aufruf etwas nicht :\.Habe das Skript noch etwas angepasst. Du kannst es mal mit folgendem Download probieren ( Forenthema passe ich die Tage an
gPM 1.3.2Falls es nicht besser ist, benötige ich genauere Informationen.
-
Callbacks gibt es für SQLite nicht.
Ob mit oder ohne enum, am Ende sind beides Variablen. Das scheint dir nicht ganz klar zu sein
Eine einfache Erklärung was enums überhaubpt machen findest du im Wiki.
Eine ausführlichere Anleitung zu enums findest du hier. -
Zitat
Wer hat dich auf die Idee gebracht mir einen Multiaccount unterzujubeln, ich glaub du hast einen an der Macke, erst kommst du auf die Idee mich als Unfreundlich zu betiteln und jetzt die dreiste Unterstellung eines Multaccount. Bei dir hat es nen gewaltigen Aussetzer im Kopf gegeben mein Freund !
Habe ich dir den Multiaccount jetzt untergejubelt oder unterstelltHier hast du dein tschudige für die freche Unterstellung :(.
Entsperrt wirst du trotzdem nicht, trotz deiner netten Worte und der Beweise, bei dir handele es sich nicht um Loomar.1) Du (Scene-Sector) benutzt den gleichen Skype Account wie Loomar (loomar.loomar)
2) Du (Scene-Sector) und Loomar haben die gleiche Stamm-IP (Den Proxy jetzt mal außen vor gelassen )
3) Bonus: Du (Scene-Sector) und Loomar haben komischer weise am gleichen Tag Geburtstag (24. November 1987)
¯\_(ツ)_/¯PS. Du brauchst dich nicht für deine Unterstellungen zu entschuldigen,dass ich 1) einen an der Macke habe, 2) nen gewaltigen Aussetzer im Kopf hatte, 3) ein wenig Urlaub benötige.
-
Habe das Filterscript aktualisiert. Mit der 1.3.1 sollte es jetzt möglich sein, die Information bzgl neue Nachrichten erst nach dem Login zu versenden.
http://forum.sa-mp.de/gta-mult…altung-1-3-1/#post2121329 -
Download: gPM 1.3.1
ZitatChangelog:
* 1.3.1 :
* - gPM_OnLogin hinzugefügt
* - Umständliches Verfahren zum authentifizieren des Benutzers entferntDie Authentifizierung des Benutzers sollte jetzt einfacher funktionieren:
// Funktionsaufruf um einen Benutzer für ein Postfach zu authentifizieren:
CallRemoteFunction( "gPM_OnLogin" , "d" , playerid );
Dadurch wurde gPM_UserCall entfernt.Installation:
- gPM_FS.AMX in den filterscripts Ordner einfügen
- gPM_FS in die filterscript - Zeile eurer server.cfg eintragen
- gPM.s3db aus dem Archiv ( scriptfiles/ ) in euren scriptfiles/ Ordner einfügen. Es entählt die Tabellen und Spalten die notwendig für das Script sind. Die Tabellen werden nämlich nicht automatisch angelegt. ( Wichtig )
- Es gibt bereits einen Eintrag in der User-Tabelle für den Admin. Eine Eingangsnotiz für jeden Spieler wird von diesem Admin versendet.
- Um die Postfächer mit einem Userprofil zu verknüpfen,muss die Funktion gPM_OnLogin per CallRemoteFunction aufgerufen werden:
CallRemoteFunction( "gPM_OnLogin" , "d" , playerid );
Am besten wird dieser Funktionaufruf durchgeführt, nachdem sich ein Spieler bei euch einloggt.
Prinzipiell kann dieser Aufruf aber überall durchgeführt werden. Dieser gibt gPM das Zeichen, dass das Postfach
für den Benutzer freigeschaltet wird.
Diese Funktion MUSS aufgerufen werden, sonst klappt das Öffnen des Postfaches mit /gpm nicht. - Mit dem Befehl /gpm öffnet ihr Ingame das Menu.
ACHTUNG:
* gPM: Du wurdest mit dem Usernamen '<Dein Name>' nicht zertifiziert!
- Kommt dieser Hinweis, wurde Punkt (5) nicht beachtet.
-
public gPM_UserCall(playerid) {
// --- Nichts Ändern
new
status;
if( playerid == INVALID_PLAYER_ID ) return 1;// --- Ab hier Änderungen erwünscht
/*
Hier die Abfrage an euer Script anpassen und an die Variable status
den Wert übergeben, ob der Spieler eingeloggt ist.Mögliche Adminscripte.
status = IsPlayerFlag(playerid,PLAYER_FLAG_LOGGEDIN);
status = PlayerInfo[playerid][Eingeloggt];
status = LoggedIn[playerid];
status
*/
// giveplayerid = ReturnUser(tmp); Hast doch schon die playerid
// status = GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); Hast doch schon die playerid
// status = format(string,sizeof(string),"/Accounts/%s.ini",giveplayer); Sinn ?
// status = fremove(string); Sinn ?
//status = PlayerInfo[playerid][pReg] = 1; Sinn ?
// status = gPlayerLogged[playerid] = 1; Sinn ?
status = gPlayerLogged[playerid]; // Das hier reicht, sofern gPlayerLogged[playerid] = 1 heißt, dass der Spieler eingeloggt ist
return status;
} -
Das du das selbst schreiben willst ist natürlich völlig okay, ich zeige dir aber trotzdem mal ein Filterscript von mir dazu:
http://forum.sa-mp.de/gta-mult…pm-nachrichtenverwaltung/
Ist definitiv umfangreicher als das, was du hier (vor) hast :-0.ZitatUnd wie kann ich machen /write [Spieler-Name(großkleinschreibung beachten] machen und per Dialog schreibe? Und er den Namen erst Kontrolliert bevor er den Dialog erscheinen lässt?
In dem du :
1) Beim Ausführen des Befehles (/write) ein SELECT auf den angegeben Namen machst und bei Fertigstellung ein Callback aufrust (zB OnUserSearch)
2) Im Callback des o.g. SELECTs prüfst ob es 1 Ergebnis gibt
2.1) Falls es 1 Ergebnis gibt, dann den Dialog anzeigen lässt. --> OnDialogResponse dann die Texteingabe verarbeiten
2.2) Benutzer existiert nicht, Dialog nicht anzeigen bzw Fehlermeldung -
Da du so unfreundlich bist, wird das Thema geschlossen. Es ist jetzt das 3 mal, dass du so unfreundlich gegenüber Usern bist die dir helfen.
-
Wenn du deinen Fehler nicht posten möchtest, dann solltest du erst gar nicht nach Hilfe fragen. So funktioniert das hier nicht im Forum
ZitatPHP$result = $sql->query("SELECT md5, plaintext FROM hash WHERE md5 = '.$md5.'")or die($sql->error); // Backticks ` für die Spalte md5 wären nicht schlecht if($sql->num_rows == 0) { // anstatt $sql muss dort schon mal $result hin. die ("Zu dem angegebenen Hash '$md5' wurde kein Eintrag gefunden!"); }
Da hast du eine Fehlerbeschreibung als Kommentar.Zitat
Das title Tag gehört außerdem in den head, nicht den body.Sollte es noch immer nicht klappen,poste den Fehler.
//Edit:
Was du dort machst, gibt es im Internet haufenweise. Nennt sich Rainbow Table.//Edit:
Siehe Hard_Base -
Die Funktionen sind kaum bis gar nicht einsatzbereit.
Ergänzend zu dem von Jeffry:
- Bei Floats möchtest du sicherlich nur einen Punkt (.) erlauben und nicht 20.
- Zahlen können ein Vorzeichen haben (+ oder -)
- Texte (Strings) decken nur deutsche Buchstaben ab und da nicht mal alle (ß, Satzzeichen, etc).
Um jetzt nur mal die gängigsten Fälle abzudecken.Zumindest hast du dir Tests geschrieben um die Funktionen zu prüfen. Das sind aber zu wenig Testfälle um die gängisten Szenarien abzudecken. Bischen kreativer muss man da schon bei seinen Tests sein.
-
Ich zeig das jetzt mal nur an 1. Beispiel:
for(new i=0; i<sizeof(lspdCars); i++)
{
if(!IsVehicleStreamedIn(i, playerid))continue; // 1. ist i falsch, denn es wäre lspdCars[i] für die vehicleid und 2. ist die Abfrage mMn überflüssig. Wozu musst du wissen,ob das Fahrzeug für den Spieler in Streaming-Distanz ist? (Hacking vllt?)
if(vehicleid != lspdCars[i])continue;
if(sInfo[playerid][fraktion] == 1)continue; // Falls fraktion == 1 prüft, ob der Spieler beim LSPD (?) ist und lspdCars fahren darf. Variante 1: break Variante 2: return - jeweils anstatt continue
// freezePlayer(playerid,1); Je nachdem ob du break oder return benutzt, kannst du hier die Aktionen ausführen falls der Spieler NICHT mit dem Fahrzeug fahren darf.
// freezePlayer(playerid,0); " " "
SendClientMessage(playerid,-1,"Du bist nicht dazu befugt in das LSPD Fahrzeug einzusteigen"); // Falls Variante 1
}
for(new i=0; i<sizeof(fbiCars); i++) // armyCars,samdCars,towingCars usw
{
// [..]
}
// Jetzt NACH allen *Cars
SendClientMessage(playerid,-1,"Du bist nicht dazu befugt in dieses Fahrzeug einzusteigen"); // Falls Variante 2
Ob du jetzt Variante 1 oder 2 benutzt, hängt davon ab was du später noch mit OnPlayerEnterVehicle vor hast. So wie es aktuell ist, würde ich Variante 1 (break) benutzen. -
Zitat
forward CheckNummer(playerid,nummer);
public CheckNummer(playerid,nummer)
{
new rows,fields;
cache_get_data(rows,fields);
if(!rows) // <-- wenn kein Eintrag in der DB die Nummer enthält, generierst du eine Neue Nr.
{
CreateHandyNumber(playerid);
}
else // Gibt es die Nummer bereits, speicherst du sie.
{
SpielerInfo[playerid][pHandyNummer] = nummer;
SaveAccount(playerid);
}
return 1;
}
Die Bedingungen bzw die Folgerung darauf ist falsch.
So müsste es sein:
Gibt es 0 rows -> Speichern
Gibt es 0 != rows -> Belegt und somit neue Nummer generieren lassen (CreateHandyNumber) -
Hast dir so viel Mühe bei dem Titel des Themas gegeben und dann trotzdem noch die falsche Sektion erwischt :/.
-
Zitat
Hallo.. und zwar wenn ein Cop einen gesuchten Tötet soll eine Nachricht kommen die kommt aber nicht
Wie kommst du (Fabian_DeSanta) darauf, dass aus
if(IsACop(killerid))
folgendes werden soll:
if(IsACop(playerid))
?
Gleiches gilt für die weiteren Änderungen von dir (playerid anstatt killerid bei pMember/pLeader). Das ist nicht richtig und passt nicht zu der Logik die dahinter stecken soll.Du (xXBastianXx) solltest es einfach mal debuggen.
Zum Beispiel so. Nochmal probieren und sich selbst mal die Ausgaben angucken. Falls du damit nicht weiter kommst,kannst du die Ausgabe ja hier nochmal posten. Auf den ersten Blick ist nämlich nichts am Code selber falsch. -
Dein Problem hat sich zwar erledigt, du hast trotzdem noch einen Fehler drin:
stock getFreeHausID()
{
for(new i=0; i<sizeof(hInfo); i++)
{
if(hInfo[i][h_id]==0)return i; // Was ist bei i=0 ?
}
return 0; // <-
}
Das ist so keine gute Idee.
Mal angenommen du hättest folgendes:
hInfo[0][h_id] = 0;
Dann klappt alles wunderbar. Der Wert bei i wäre in der Schleife 0 und durch return i bekommst du als Antwort 0.
Wären jetzt aber für alle Indizes der Wert bei h_id != 0, dann würdest du innerhalb der Schleife zu keinem Ergebnis kommen. Nach der Schleife folgt aber ein return 0, was dir vormacht, der Index 0 wäre frei und gleichzeitig nicht frei.
Du benutzt den Index 0 für "Der Index ist frei" in der Schleife, "Kein Index mehr frei" außerhalb der Schleife. Beides darf es aber nicht sein.
Anstatt return 0 solltest du sowas wie return INVALID_HOUSE_INDEX o.Ä. benutzen. Müsstest dann aber auch nach der Nutzung von getFreeHausID darauf prüfen. -
Frisch registriert und dann direkt so n Werbung. Benutzt doch wenigstens den Musiksammelthread.
-
Das ist a) kein Tutorial und b) die falsche Sektion :/.
-
In PAWN (von mir aus auch SA:MP) sind die meisten daran gewöhnt, dass eine Funktion wahr zurück gibt wenn es keine Probleme gab (Ist zumindest bei sehr vielen Funktionen der Fall, spontan fällt mir nur strcmp und strfind ein wo es nicht so ist). Bei KindOfVehicle klappt das nicht, was sicherlich viele dazu bringen wird, gleich 2x hinzusehen:
Zitat//return 1 = Fahrzeug existiert nicht!
if(KindOfVehicle(veh) )return SendClientMessage(playerid,-1,"Cooles Fahrzeug, oder eben nicht da return 1");Daher würde ich es auf 0 schieben, sollte das Fahrzeug nicht existieren.
-
Zitat
SA-MP 0.3.7 RC4-2 Optional server update
- The siren state was not updated internally before OnVehicleSirenStateChange was called.
- Parameter checks on CreateVehicle/AddStaticVehicleEx in case scripts that use these functions were not recompiled prior to upgrading to 0.3.7.
- The ls_beachside.pwn filterscript was updated to remove the building night lights. This was needed to remove the occulsion boxes inside the interior.
Quelle: SA-MP 0.3.7 RC4