[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Spieler.pwn(3) : fatal error 100: cannot read from file: "Dini"




    Wie ist der Error oben bitte um Hilfe! unten ist die pawn datei.





    //(c) Edited by Kaliber
    #include <a_samp>
    #include <Dini>
    #include <MD5>


    #define rot 0xB70000FF
    #define green 0x00F500FF
    #define grau 0x8C8C8CFF
    #define orange 0xFF9F00FF
    #define SCM SendClientMessage
    #define SetPos(%0,%1,%2,%3) \
    SetPlayerPos(%0,%1,%2,%3),SetPlayerCameraPos(%0,%1,%2,%3),SetPlayerCameraLookAt(%0,%1,%2,%3)


    new name[MAX_PLAYERS][MAX_PLAYER_NAME];


    stock Register(playerid,key[]) {
    new Spieler[64];format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",name[playerid]),dini_Create(Spieler),dini_Set(Spieler,"Passwort",key);
    return SCM(playerid,-1,"{FFA600}** {FFFFFF}Du hast dich {6CB400}Erfolgreich registriert{FFFFFF}. {0090FE}Viel Spaß!");
    }
    stock Login(playerid,key[]) {
    new Spieler[64];format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",name[playerid]);
    if(!strcmp(key,dini_Get(Spieler,"Passwort"),true)) return SCM(playerid,-1,"{FFA600}** {FFFFFF}Du hast dich {6CB400}Erfolgreich eingeloggt{FFFFFF}. {0090FE}Viel Spaß!");
    return SCM(playerid,rot,"Du hast ein falsches Passwort eingegeben."),SCM(playerid,rot,"Du wurdest vom Server gekickt!"),Kick(playerid);
    }


    public OnFilterScriptInit() return print("\n======================================"),print(" Filterscript by Neco "),print("======================================\n");


    public OnGameModeInit() return SetGameModeText("Blank Script"),AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);


    public OnPlayerRequestClass(playerid, classid) return SetPos(playerid, 1958.3783, 1343.1572, 15.3746);


    public OnPlayerConnect(playerid) {
    new Spieler[64];GetPlayerName(playerid,name[playerid],MAX_PLAYER_NAME),format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",name[playerid]);
    if(dini_Exists(Spieler)) {
    SCM(playerid,grau,"Deine Account-Daten werden gesucht."),SCM(playerid,green,"Willkommen zurück auf {0091FF}Ultimate {00FFDC}Deathmatch. {B9FF00}Wir wünschen dir viel Spaß & viel Erfolg!");
    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT,"Login","{FFFFFF}Dein Account wurde erfolgreich gefunden. Gebe\n nun bitte dein Passwort ein.\n {0091FF}Ultimate {00FFDC}Deathmatch {FFFFFF}wünscht dir viel Spaß!","Login","Abbrechen");
    }
    return SCM(playerid,green,"Herzlich Willkommen auf {0090FE}Ultimate {00FFDC}Deathmatch. {FFFFFF}Viel Spaß!"),ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registrierung auf Ultimate Deathmatch","Bitte registrieren Sie sich, um sich einen Account anzulegen.\nGeben Sie ihr Passwort ein. Viel Spaß auf {0090FE}Ultimate {00FFDC}Deathmatch.","Registrieren","Abbrechen");
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    switch(dialogid) {
    case 0: {
    if(!response) return SCM(playerid,rot,"Du hast den Login Vorgang abgebrochen"),SCM(playerid,rot,"Du wurdest vom Server gekickt!"),Kick(playerid);
    return Login(playerid,MD5_Hash(inputtext));
    }
    case 1: {
    if(!response) return SCM(playerid,rot,"Du hast den Registrierungs Vorgang abgebrochen"),SCM(playerid,rot,"Du wurdest vom Server gekickt!"),Kick(playerid);
    if(!inputtext[0]) return SCM(playerid,orange,"Bitte gebe dein gewünschtes Passwort ein."),ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registrieren","Bitte registrieren Sie sich, um sich einen Account anzulegen.\nGeben Sie ihr Passwort ein. Viel Spaß auf Ultimate Deathmatch.","Registrieren","Abbrechen");
    return Register(playerid,MD5_Hash(inputtext));
    }
    }
    return 1;
    }

  • Servus,
    kurze Frage, ich lasse zwei ProTimer so laufen:


    SetProTimer("Test", 920, true);
    SetProTimer("Test", 920, true);


    (( Nur ein Beispiel ))


    Wäre es besser, wenn ich den zweiten auf 950 setze, damit die sich nicht überschneiden können? Oder anders, können die sich überschneiden?

  • Wäre es besser, wenn ich den zweiten auf 950 setze, damit die sich nicht überschneiden können? Oder anders, können die sich überschneiden?


    Was für eine Frage..natürlich können die sich überschneiden :rolleyes:


    setz den einen auf 921 und den anderen auf 923 das ist besser ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Mal eine kleine Frage:
    Ich mache gerade eine Funktion, in der man im Auto (beim Fahren) KEY_FIRE braucht.
    if(newkeys == KEY_FIRE) //...


    Jedoch funktioniert diese Funktion dann immer nur, wenn ich vom Gas gehe: (Ich gebe Gas -> Drücke -> Nichts passiert).
    Kann ich irgendwie machen, dass ich KEY_FIRE immer drücken kann, dass dann auch die Funktion ausgeführt wird? Oder
    geht das nicht?

  • Kann ich einen Timer bzw. ein System erstellen, das darauf wartet bis alle Daten geladen wurden? Also Maps, Auto, Spieler etc.?? Falls ja wie würde sowas aussehen?

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • bis alle Daten geladen wurden? Also Maps, Auto, Spieler etc.


    Das muss doch alles Sagen oder? Ich möchte das er erstmal alles Ladet, finde ich einfach besser wenn alles Geladen hat bevor der Spieler sich einloggen kann.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Asoo^^
    du könntest beim anfang von ongamemodeinit ne variable setzen und am ende von ongamemodeinit diese wieder wegnehmen, weil dann müsste alles geladen sein.
    Falls sich jmd einloggen will fragst einfach ab ob die vari noch aktiv ist.
    Söllte eigendlich so gehen.


    //e
    Das setzt aber vorraus das alles, was du laden möchtest unter ongamemodeinit ist.


  • Das muss doch alles Sagen oder? Ich möchte das er erstmal alles Ladet, finde ich einfach besser wenn alles Geladen hat bevor der Spieler sich einloggen kann.



    Der Punkt ist hier das du die ganzen Daten Temporär erstmal ablegst, der Nachteil ist sollte der Server crashen muss eine größere Datenmenge gespeichert werden es kann dadurch
    dazu kommen das Daten nicht gespeichert werden könnten und diese somit verloren gehen.


    Das umzusetzen ist dank Plugin kein Problem, jedoch solltest du erstmal differzieren ob die Daten welche du laden lassen möchtest statisch ablegen möchtest oder du später darauf zurück greifen und diese verändern. Jedoch gehe ich davon aus das du die zweite Variante bevorzugst.


    Zum einen erstmal zum ablegen von statischen Daten. Falls dein Skript auf MySQL bassieren sollte und du die neueren Versionen von dem MySQL Plugin von maddinat0r verwenden solltest (r30+)
    hast du die Möglichkeit, die ausgelesenen Daten im Memory abzulegen um somit auf den cache später zurück zu greifen. Das kann man mit diesen Funktionen handhaben.


    native Cache:cache_save(connectionHandle = 1);
    native cache_delete(Cache:cache_id, connectionHandle = 1);
    native cache_set_active(Cache:cache_id, connectionHandle = 1);


    Beispiele findest du auch hier
    http://wiki.sa-mp.com/wiki/MySQL/R33#cache_save


    Kommen wir nun zur zweiten Variante, welche ich bereits auch schon verwendet habe bei meinem Ingamemapeditor.
    Das ist mit dem Memory access plugin und der zusätzlichen list.inc sehr gut umsetzbar da du damit dynamische Arrays erstellen kannst und das ganze strukturieren.


    http://gta-sa-mp.de/forum/3-sa…393-memory-access-plugin/



    Hier mal ein Beispiel um eine Datenstruktur zu erstellen und um dort werte zu speichern:

    MEM::struct obj_mem_struct {
    obj_mem_objectid,
    obj_mem_materialindex,
    obj_mem_modelid,
    obj_mem_txdname[20],
    obj_mem_texturename[20],
    obj_mem_materialcolor,
    };


    new static LIST_init<streamer_material>;



    native __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0) = SetDynamicObjectMaterial;
    stock static _SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0, bool:set=false) {
    if(set)return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
    new obj_insert[_insert];
    obj_insert[insert_objectid] = objectid;
    obj_insert[insert_materialindex] = materialindex;
    new ListIt:data = LIST_find_arr(streamer_material, obj_insert),object_buffer[obj_mem_struct];
    if(data)LIST::erase(streamer_material,data);
    object_buffer[obj_mem_objectid] = objectid;
    object_buffer[obj_mem_materialindex] = materialindex;
    object_buffer[obj_mem_modelid] = modelid;
    strcat(object_buffer[obj_mem_txdname],txdname,20);
    strcat(object_buffer[obj_mem_texturename],texturename,20);
    object_buffer[obj_mem_materialcolor] = materialcolor;
    LIST::push_back_arr(streamer_material, object_buffer);
    return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
    }
    #if defined _ALS_SetDynamicObjectMaterial
    #undef SetDynamicObjectMaterial
    #else
    #define _ALS_SetDynamicObjectMaterial
    #endif
    #define SetDynamicObjectMaterial _SetDynamicObjectMaterial

  • Habe ein Problem benutze das MYSQL R7 von BlueG nun habe ich aber ein Filterscript gefunden was auf R34 läuft.


    Nun wollte ich Fragen


    Wie kann ich die Funktionen wie
    cache_get_row_float


    cache_get_row_int


    und cache_insert_id


    für das R7 verwendbar machen?.

  • Mal eine Allgemeine Frage..
    Warum kann man sowas nicht machen?



    new index;
    if(sscanf(params,"i",index)) return 0;
    new string[index]; // !! Error !!


    /*
    C:\das\isch\en\pfaht\xyz.pwn(-1) : error 008: must be a constant expression; assumed zero
    C:\das\isch\en\pfaht\xyz.pwn(-1) : error 009: invalid array size (negative, zero or out of bounds)
    C:\das\isch\en\pfaht\xyz.pwn(-1) : error 036: empty statement
    C:\das\isch\en\pfaht\xyz.pwn(-1) : fatal error 107: too many error messages on one line
    */


    Gibt es da eine Möglichkeit sowas zu machen? Denn das wäre mir gerade sehr nützlich :P

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen