Beiträge von Jeffry

    Der Befehl hat aber nichts mit dem Speichern in eine Datei zu tun.


    Es muss so aussehen, beim Speichern:
    new playersip[16];
    GetPlayerIp(pID,playersip,sizeof(playersip));
    dini_Set(Pfad_der_Spielerdatei, "IP", playerisip);


    Pfad_der_Spielerdatei logischerweise mit dem korrekten Pfad ersetzen.



    EDIT:
    Simon2202: War auch nicht auf dich bezogen. ;)

    Verlässt du den Server bevor du in der Datenbank nachschaust?
    Wenn nein, mach das mal.


    Wenn du es direkt speichern willst, dann füge bei REGISTER2 noch das hier vor dem return ein:
    savePlayer(playerid);

    Allerdings fährt die Kamera jetzt erst links ans Auto (gerade) und dann fährt sie vor das Auto.


    Ich weiß nicht genau wie du es haben willst, aber so entspricht es in etwa deinem Bild:
    new Float:x, Float:y, Float:z, Float:a;
    GetVehicleZAngle(vehicleid, a);
    GetPlayerPos(playerid, x, y, z);
    x += (5.0 * -floatcos(a, degrees));
    y += (5.0 * -floatsin(a, degrees));
    new Float:pos2x, Float:pos2y;
    pos2x = x + (7.0 * floatsin(-a, degrees));
    pos2y = y + (7.0 * floatcos(-a, degrees));


    GetPlayerPos(playerid, x, y, z);
    InterpolateCameraPos(playerid, x, y, z+1, pos2x, pos2y, z, 3000, CAMERA_MOVE);
    InterpolateCameraLookAt(playerid, pos2x, pos2y, z+1, x + (3.0 * floatsin(-a, degrees)), y + (3.0 * floatcos(-a, degrees)), z, 3000, CAMERA_MOVE);


    Von der Sicht des Autos aus nach vorne, dann dreht sie und schaut das Licht an, von etwas seitlich.

    Und zwar wollte ich mal fragen wie man das abstellen kann das die Filterscript Dialoge überschrieben werden mit den Gamemode Dialoge?


    Ich glaub auch nicht dass es dafür eine Möglichkeit gibt, aber könnte mich auch irren.


    Es gibt eine Möglichkeit:


    Als Include (oder ganz oben) in jedem Code:
    new gPlayerDialog[MAX_PLAYERS] = {-1,...};


    stock ex_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
    {
    CallRemoteFunction("RemoveDialog", "d", playerid);
    gPlayerDialog[playerid] = dialogid;
    return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
    }


    #if defined _HOOK_ShowPlayerDialog
    #undef ShowPlayerDialog
    #else
    #define _HOOK_ShowPlayerDialog
    #endif
    #define ShowPlayerDialog ex_ShowPlayerDialog


    forward RemoveDialog(playerid);
    public RemoveDialog(playerid)
    {
    gPlayerDialog[playerid] = -1;
    return 1;
    }


    OnDialogResponse:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(gPlayerDialog[playerid] == -1) return 1;
    gPlayerDialog[playerid] = -1;


    //Hier geht's los mit deinen if(dialogid...) Verzweigungen
    if(dialogid == DIALOG_1)
    {
    //...
    }
    return 1;
    }

    Das hat aber nichts mit dem /wetter Befehl zu tun.
    Du musst zu deinen /gotols /gotosf /gotolv Befehlen diesen Funktionsaufruf hinzufügen, sonst wird das Wetter nicht geändert.


    SetWetter();


    Oder du machst noch eine Funktion die das nur für den einen Spieler prüft, weil so machst du es ja immer für alle.

    So reicht es völlig:
    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>3)
    {
    //Registrierungsfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s') ",name,passwort);
    mysql_function_query(dbhandle,query,false,"OnPlayerRegister","d",playerid);//kann ich das auch beim DIALOG_REGISTER2 ausführen ?
    TogglePlayerControllable(playerid,0);
    sInfo[playerid][regstep] = 1;
    ShowPlayerDialog(playerid,DIALOG_REGISTER2,DIALOG_SYTLE_LIST,"Wähle dein Geschlecht","Männlich\nWeiblich","Auswählen","");
    return 1;
    }
    else
    {
    //Kleiner als 4 Zeichen
    SendClientMessage(playerid,ROT,"Dein Passwort muss mindestens 4 Zeichen lang sein.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Gib bitte dein gewünschtes Passwort an:","Okay","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }


    if(dialogid==DIALOG_REGISTER2)
    {
    sInfo[playerid][geschlecht] = listitem+1; // 1 = männlich 2 = weiblich
    sInfo[playerid][regstep] = 0;
    sInfo[playerid][tutpart] = 1;
    SetTimerEx("TutTimer",2000,false,"i",playerid);
    return 1;
    }


    Du brauchst keinen INSERT bei dem REGISTER2, sondern du speicherst das Geschlecht einfach bei deinem SpielerSpeichern.

    Dann liegt es an deinem SetWetter. Debugge das mal so:
    public SetWetter(){
    new Float:xx, Float:yy, Float:zz;
    for(new i=0; i< GetMaxPlayers(); i++){
    if(IsPlayerConnected(i)){
    GetPlayerPos(i, xx, yy, zz);
    if((xx > -992.5172 && xx < 4000.0000) && (yy < 528.0000 && yy > -4000.0000)) SetPlayerWeather(i, Weather[0]), printf("Setze Wetter für %d zu %d in LS", i, Weather[0]);//LS
    if((xx > -4000.0000 && xx< -992.5172) && (yy < 4000.0000 && yy > -4000.0000)) SetPlayerWeather(i, Weather[1]), printf("Setze Wetter für %d zu %d in SF", i, Weather[1]);//SF
    if((xx > -992.5172 && xx< 4000.0000) && (yy < 4000.0000 && yy > 528.0000)) SetPlayerWeather(i, Weather[2]), printf("Setze Wetter für %d zu %d in LV", i, Weather[2]);//LV
    }
    }
    return 1;
    }


    Was wird geprintet?

    Debugge es bitte mal, zum sehen, ob es an sscanf liegt, oder an der SetWetter Funktion:
    ocmd:wetter(playerid,params[]){
    if(!isAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    if(adminduty[playerid] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht Aduty!");
    new wid,wo[3];
    if(sscanf(params,"s[3]i",wo,wid)) return SendClientMessage(playerid,-1,"Benutze: /wetter [LS/SF/LV] [WetterID]");
    if(strcmp(wo,"LS",true) == 0) Weather[0] = wid;
    if(strcmp(wo,"SF",true) == 0) Weather[1] = wid;
    if(strcmp(wo,"LV",true) == 0) Weather[2] = wid;
    printf("wo=%s | W0=%d | W1=%d | W2=%d", wo, Weather[0], Weather[1], Weather[2]);
    SendClientMessage(playerid,-1,"Wetter erfolgreich geändert.");
    return SetWetter();
    }


    Was wird geprintet?

    Dann schreib es so:
    ocmd:wetter(playerid,params[]){
    if(!isAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    if(adminduty[playerid] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht Aduty!");
    new wid,wo[3];
    if(sscanf(params,"s[3]i",wo,wid)) return SendClientMessage(playerid,-1,"Benutze: /wetter [LS/SF/LV] [WetterID]");
    if(strcmp(wo,"LS",true) == 0) Weather[0] = wid;
    if(strcmp(wo,"SF",true) == 0) Weather[1] = wid;
    if(strcmp(wo,"LV",true) == 0) Weather[2] = wid;
    SendClientMessage(playerid,-1,"Wetter erfolgreich geändert.");
    return SetWetter();
    }

    Das darf nicht in's enum:


    enum tore{
    bool:CNNGate,
    bool:TERRORGate,
    bool:HITMANGate,
    bool:Marvinstor,
    bool:Prasitor,
    bool:Specing,
    bool:AC_JOB1,
    bool:AC_JOB2,
    bool:AC_JOB3,
    bool:AC_JOB4,
    bool:AC_JOB5,
    bool:Army1Gate,
    bool:Army2Gate,
    }


    new O_TORL;
    new O_TORR;


    So.


    Ich tippe darauf, dass TorStatus auch kein "bool" ist.

    Wenn du das Plugin verwendest muss es so sein:
    if(sscanf(params,"s[3]i",wo,wid)) return SendClientMessage(playerid,-1,"Benutze: /wetter [LS/SF/LV] [WetterID]");

    Sorry, bin gestern Abend nicht mehr dazu gekommen mir das nochmal genau anzuschauen. Jetzt ist es so, dass hier so viel unterschiedlicher Code steht, da fehlt jeder Zusammenhang, vor allem weil du ja auch einiges geändert hast.


    Kannst du bitte den Code der zu dem Tuning gehört, und das was dafür relevant ist, nochmals posten, so wie es jetzt ist, und den Log dazu, falls du einen hast?
    Dann schau ich mir das heute Abend nochmal genau an.

    Was wird geprintet, wenn du es so einfügst?
    public Geldupdate(playerid)
    {
    printf("Geldupdate für %d -> $%0.2f", playerid, SInfo[playerid][pGeld]);
    format(str,sizeof(str),"~g~SA$ %.2f",SInfo[playerid][pGeld]);
    printf("str = %s", str);
    TextDrawSetString(Gelddraw[playerid], str);
    return 1;
    }


    Nutzt du das Textdraw oder die Geldvariable noch woanders, oder passiert der Fehler immer nur an dieser Stelle?

    SetPlayerCameraLookAt fehlt da, deshalb klappt es nicht, grade kurz probiert.


    forward UBSicht(playerid);
    public UBSicht(playerid)
    {
    new Float:usX, Float:usY, Float:usZ;
    GetPosVorSpieler(playerid, -5.0, usX, usY, usZ);
    SetPlayerCameraPos(playerid, usX, usY, usZ+3);
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPlayerCameraLookAt(playerid, x, y, z+3);
    return 1;
    }


    SetTimerEx("UBSicht", 25, true, "i", 16);