Nach Gmx ist die ini resetet...

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
  • Hi,


    Ich habe mir gestern abend mal Weaponsaver gemacht, der bei Reconnect oder kill oder sonst iwie so was, ne dini anlegt und in die dann Weapon ID´s und Munition speichert. Danach sollte man bei Connect wieder die Waffen haben.
    das geht eigendlich auch gut wenn ich normal mit /q off gehe oder einfach sterbe.
    Nunja bei einem GMX wird die ini iwie resetet und es löscht all die Daten, man hat also keine Waffen und daraus zu schließen keine Munition mehr.
    Ich weiß jez nicht genau welchen abschnitt ihr braucht, um mir zu helfen. Aber sagt einfach mal was ihr braucht um das Problem evnt. zu lösen.


    PS: Ich bin relativ neu im Script bereich, kann einige standarts aber noch nicht sehr arg viel^^


    Naja danke schonmal im Vorraus
    MfG Martin08 :thumbup:

    Wenn ich dir geholfen haben sollte, würde ich mich extremst freuen, wenn du dir kurz Zeit nehmen würdest und mir helfen könntest:


    Unterstütze mich bitte hier und vote für mich:


    Ihr müsst nur oben links auf Vote klicken und bestätigen! Vielen Dank dafür

  • GMX heißt den gamemode beenden und ihn neustarten und du musst deinen script sagen im falle der GM beendet wird das er ebenfalss skin waffen whatever speichern soll.
    Dies erreichst du mit einer einfach schleife. die ausgeführt wird sobald du den Gamemode beendest.
    bsp.:
    public OnGameModeExit()
    {
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    new save[40];
    format(save, sizeof(save), "%s.ini", i);


    if(dini_Exists(save))
    {
    dini_IntSet(save, "Skin", GetPlayerSkin(i));// hier wird der skin von jedem spieler der sich zum zeitpunkt des GMX auf dem Server befindet gesavt.
    }
    }

    müsste funktionieren musst natürlich nur statt des Skins die Waffe(n) saven.
    hoffe ich konnte dir helfen mfg SenZe

  • Warum so kompliziert wenns auch leicht geht.


    forward waffensave(playerid);


    public waffensave(playerid);
    {
    Speicher Funktion
    }


    Dann bei onplayerupdate zb.
    waffensave(playerid);


    Bei OnGameModeExit:
    waffensave(playerid);


    halt überalldort hin wo du es willst das es gespeichert wird.
    Mfg Amstaff

  • Was daran so schlimm?
    Man erstellt lieber nen neues Callback so kann man sichergehen das man keine Klammer fehler macht
    wenn man in jedem Callback eine If abfrage macht.
    Verstehst du meine Logik?

  • ja nur das du ein fehler hast oben ^^ egal ob du es will oder nicht eine du must eine schleife machen bei ongamemodexit die dann alle spieler abfragt somit ist meine methode zeitsparender und genau so effektiv und sicher für ihn bevorzugter

  • Danke erstmal für die Hilfe, aber ich bekomm das so iwie nich hin.


    Ich zeig euch ma wie ich das gemacht hab:


    also
    Im OnPlayerDisconnect:
    public OnPlayerDisconnect(playerid)
    {
    GetPlayerWeaponData(playerid,0,PlayerPos[playerid][Weapon1],PlayerPos[playerid][Ammo1]);
    GetPlayerWeaponData(playerid,1,PlayerPos[playerid][Weapon2],PlayerPos[playerid][Ammo2]);
    GetPlayerWeaponData(playerid,2,PlayerPos[playerid][Weapon3],PlayerPos[playerid][Ammo3]);
    GetPlayerWeaponData(playerid,3,PlayerPos[playerid][Weapon4],PlayerPos[playerid][Ammo4]);
    GetPlayerWeaponData(playerid,4,PlayerPos[playerid][Weapon5],PlayerPos[playerid][Ammo5]);
    GetPlayerWeaponData(playerid,5,PlayerPos[playerid][Weapon6],PlayerPos[playerid][Ammo6]);
    GetPlayerWeaponData(playerid,6,PlayerPos[playerid][Weapon7],PlayerPos[playerid][Ammo7]);
    GetPlayerWeaponData(playerid,7,PlayerPos[playerid][Weapon8],PlayerPos[playerid][Ammo8]);
    GetPlayerWeaponData(playerid,8,PlayerPos[playerid][Weapon9],PlayerPos[playerid][Ammo9]);
    GetPlayerWeaponData(playerid,9,PlayerPos[playerid][Weapon10],PlayerPos[playerid][Ammo10]);
    GetPlayerWeaponData(playerid,10,PlayerPos[playerid][Weapon11],PlayerPos[playerid][Ammo11]);
    GetPlayerWeaponData(playerid,11,PlayerPos[playerid][Weapon12],PlayerPos[playerid][Ammo12]);
    GetPlayerWeaponData(playerid,12,PlayerPos[playerid][Weapon13],PlayerPos[playerid][Ammo13]);
    SaveDisconnect(playerid);
    return 1;
    }


    Für den SaveDisconnect habe ich:
    public SaveDisconnect(playerid)
    {
    new string[256];
    new Player[MAX_PLAYER_NAME];
    //==============================
    GetPlayerName(playerid,Player,sizeof(Player));
    format(string,sizeof(string),"/Users/%s.ini",Player);
    dini_IntSet(string,"Slot 1",PlayerPos[playerid][Weapon1]);
    dini_IntSet(string,"Ammu 1",PlayerPos[playerid][Ammo1]);
    dini_IntSet(string,"Slot 2",PlayerPos[playerid][Weapon2]);
    dini_IntSet(string,"Ammu 2",PlayerPos[playerid][Ammo2]);
    dini_IntSet(string,"Slot 3",PlayerPos[playerid][Weapon3]);
    dini_IntSet(string,"Ammu 3",PlayerPos[playerid][Ammo3]);
    dini_IntSet(string,"Slot 4",PlayerPos[playerid][Weapon4]);
    dini_IntSet(string,"Ammu 4",PlayerPos[playerid][Ammo4]);
    dini_IntSet(string,"Slot 5",PlayerPos[playerid][Weapon5]);
    dini_IntSet(string,"Ammu 5",PlayerPos[playerid][Ammo5]);
    dini_IntSet(string,"Slot 6",PlayerPos[playerid][Weapon6]);
    dini_IntSet(string,"Ammu 6",PlayerPos[playerid][Ammo6]);
    dini_IntSet(string,"Slot 7",PlayerPos[playerid][Weapon7]);
    dini_IntSet(string,"Ammu 7",PlayerPos[playerid][Ammo7]);
    dini_IntSet(string,"Slot 8",PlayerPos[playerid][Weapon8]);
    dini_IntSet(string,"Ammu 8",PlayerPos[playerid][Ammo8]);
    dini_IntSet(string,"Slot 9",PlayerPos[playerid][Weapon9]);
    dini_IntSet(string,"Ammu 9",PlayerPos[playerid][Ammo9]);
    dini_IntSet(string,"Slot 10",PlayerPos[playerid][Weapon10]);
    dini_IntSet(string,"Ammu 10",PlayerPos[playerid][Ammo10]);
    dini_IntSet(string,"Slot 11",PlayerPos[playerid][Weapon11]);
    dini_IntSet(string,"Ammu 11",PlayerPos[playerid][Ammo11]);
    dini_IntSet(string,"Slot 12",PlayerPos[playerid][Weapon12]);
    dini_IntSet(string,"Ammu 12",PlayerPos[playerid][Ammo12]);
    dini_IntSet(string,"Slot 13",PlayerPos[playerid][Weapon13]);
    dini_IntSet(string,"Ammu 13",PlayerPos[playerid][Ammo13]);
    return 1;
    }


    Beim Connecten:
    public OnPlayerConnect(playerid)
    {
    LoadforSaveDisconnect(playerid);
    return 1;
    }


    Und hier der LoadforSaveDisconnect:
    public LoadforSaveDisconnect(playerid)
    {
    new string[256];
    new Player[MAX_PLAYER_NAME];
    //==============================
    GetPlayerName(playerid,Player,sizeof(Player));
    format(string,sizeof(string),"/Users/%s.ini",Player);
    if(dini_Exists(string))
    {
    PlayerPos[playerid][Weapon1] = dini_Int(string,"Slot1");
    PlayerPos[playerid][Ammo1] = dini_Int(string,"Ammu 1");
    PlayerPos[playerid][Weapon2] = dini_Int(string,"Slot 2");
    PlayerPos[playerid][Ammo2] = dini_Int(string,"Ammu 2");
    PlayerPos[playerid][Weapon3] = dini_Int(string,"Slot 3");
    PlayerPos[playerid][Ammo3] = dini_Int(string,"Ammu 3");
    PlayerPos[playerid][Weapon4] = dini_Int(string,"Slot 4");
    PlayerPos[playerid][Ammo4] = dini_Int(string,"Ammu 4");
    PlayerPos[playerid][Weapon5] = dini_Int(string,"Slot 5");
    PlayerPos[playerid][Ammo5] = dini_Int(string,"Ammu 5");
    PlayerPos[playerid][Weapon6] = dini_Int(string,"Slot 6");
    PlayerPos[playerid][Ammo6] = dini_Int(string,"Ammu 6");
    PlayerPos[playerid][Weapon7] = dini_Int(string,"Slot 7");
    PlayerPos[playerid][Ammo7] = dini_Int(string,"Ammu 7");
    PlayerPos[playerid][Weapon8] = dini_Int(string,"Slot 8");
    PlayerPos[playerid][Ammo8] = dini_Int(string,"Ammu 8");
    PlayerPos[playerid][Weapon9] = dini_Int(string,"Slot 9");
    PlayerPos[playerid][Ammo9] = dini_Int(string,"Ammu 9");
    PlayerPos[playerid][Weapon10] = dini_Int(string,"Slot 10");
    PlayerPos[playerid][Ammo10] = dini_Int(string,"Ammu 10");
    PlayerPos[playerid][Weapon11] = dini_Int(string,"Slot 11");
    PlayerPos[playerid][Ammo11] = dini_Int(string,"Ammu 11");
    PlayerPos[playerid][Weapon12] = dini_Int(string,"Slot 12");
    PlayerPos[playerid][Ammo12] = dini_Int(string,"Ammu 12");
    PlayerPos[playerid][Weapon13] = dini_Int(string,"Slot 13");
    PlayerPos[playerid][Ammo13] = dini_Int(string,"Ammu 13");
    }
    else
    {
    dini_Create(string);
    dini_IntSet(string,"Slot 1",(0));
    dini_IntSet(string,"Ammu 1",(0));
    dini_IntSet(string,"Slot 2",(0));
    dini_IntSet(string,"Ammu 2",(0));
    dini_IntSet(string,"Slot 3",(0));
    dini_IntSet(string,"Ammu 3",(0));
    dini_IntSet(string,"Slot 4",(0));
    dini_IntSet(string,"Ammu 4",(0));
    dini_IntSet(string,"Slot 5",(0));
    dini_IntSet(string,"Ammu 5",(0));
    dini_IntSet(string,"Slot 6",(0));
    dini_IntSet(string,"Ammu 6",(0));
    dini_IntSet(string,"Slot 7",(0));
    dini_IntSet(string,"Ammu 7",(0));
    dini_IntSet(string,"Slot 8",(0));
    dini_IntSet(string,"Ammu 8",(0));
    dini_IntSet(string,"Slot 9",(0));
    dini_IntSet(string,"Ammu 9",(0));
    dini_IntSet(string,"Slot 10",(0));
    dini_IntSet(string,"Ammu 10",(0));
    dini_IntSet(string,"Slot 11",(0));
    dini_IntSet(string,"Ammu 11",(0));
    dini_IntSet(string,"Slot 12",(0));
    dini_IntSet(string,"Ammu 12",(0));
    dini_IntSet(string,"Slot 13",(0));
    dini_IntSet(string,"Ammu 13",(0));
    }
    return 1;
    }


    Dann beim OnPlayerSpawn:
    public OnPlayerSpawn(playerid)
    {
    Spawn(playerid);
    return 1;
    }


    Und für den Spawn:
    public Spawn(playerid)
    {
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon1],PlayerPos[playerid][Ammo1]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon2],PlayerPos[playerid][Ammo2]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon3],PlayerPos[playerid][Ammo3]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon4],PlayerPos[playerid][Ammo4]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon5],PlayerPos[playerid][Ammo5]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon6],PlayerPos[playerid][Ammo6]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon7],PlayerPos[playerid][Ammo7]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon8],PlayerPos[playerid][Ammo8]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon9],PlayerPos[playerid][Ammo9]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon10],PlayerPos[playerid][Ammo10]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon11],PlayerPos[playerid][Ammo11]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon12],PlayerPos[playerid][Ammo12]);
    GivePlayerWeapon(playerid,PlayerPos[playerid][Weapon13],PlayerPos[playerid][Ammo13]);
    return 1;
    }


    Also für die etwas erfahreren hier müsste ich das denke ich mal ziemlich umständlich gemacht haben^^.
    Aber ich wollte es zu anfang so machen das ich das auch kapiere.
    Hab soviele publics (oder wie man da auch immer nennt) drin, weil ich da noch n Savespawner, skin und kampfstyle saver drin is.


    Naja ich hoff das irgentjemand die Zeit findet, ein passendes GMX savedings zu machen.
    Vielen dank an den der sich das vll mal angeschaut hat und ne lösung findet. :thumbup:

    Wenn ich dir geholfen haben sollte, würde ich mich extremst freuen, wenn du dir kurz Zeit nehmen würdest und mir helfen könntest:


    Unterstütze mich bitte hier und vote für mich:


    Ihr müsst nur oben links auf Vote klicken und bestätigen! Vielen Dank dafür

    Einmal editiert, zuletzt von Martin08 ()

  • hm hast das perobir was ich dir als erstes gpeostet habe das müsste eigendlich funzen ^^
    und da machst einfach mir in die schleife rein SaveDisconnect(i); noch mal zur erklärung der schleifen hier : ^^
    for(new i=0; i < MAX_PLAYERS; i++)//das for zeigt dem script das ist eine schleife, Argument 1 (new i=0;)du machst ne neue variable i die glei 0 ist
    //Argument 2(i < MAX_PLAYERS;) hier legst du fest bis wohin der Wert i wiederholt wird (halt bis MAX_PLAYERS alle spieler auf dem Server)
    //Argument 3(i++) hier sagst du das i immer eins mehr wird
    {//schleifen beginn
    SaveDisconnect(i);// i = die festgelegte schleife heißt das SaveDisconnect für alle auf dem Server ausgeführt wird
    }//schleifen ende


    die schleifen muss halt wie oben schon gepostet unter OnGameModeExit() ;
    mfg SenZe


    hoffe das löst dein Problem =)