Beiträge von Jeffry

    Lädst du bei OnPlayerConnect den Wert von "Skin" aus deiner Datenbank/Spielerdatei in die Variable "sSpieler[playerid][Skin]", wie ich es gesagt habe?
    Wenn ja, poste den Code wie du das machst. Wenn nein, mache das und vergesse nicht die Spalte in der Datenbank anzulegen.


    Du kannst (wenn du das mit dem Standard-Wert nicht verstehst) auch einfach
    sSpieler[playerid][Skin] = -1;
    bei OnPlayerConnect hinschreiben, und erst danach, wenn du geprüft hast ob der Spieler registriert ist (=Splate in der Datenbank vorhanden / Datei existiert) den Skin-Stat laden.

    @cocacolafreak99: Aus den letzten 50 hat das jeder auf Anhieb verstanden, außerdem hat er das Benötigte bereits vor deinem Post gepostet, daher verstehe ich nicht warum du das noch kommentieren musst. Sei's drum, passt ja jetzt.



    if(sSpieler[playerid][Skin] != -1)
    {
    SetPlayerSkin(playerid, sSpieler[playerid][Skin]);
    }


    So muss es sein, da die Variable bei dir "sSpieler" heißt, und nicht "SpielerInfo".

    Und du willst jetzt die premiumzeit speichern, korrekt?
    Wenn ja, dann:


    format(query,sizeof(query),"UPDATE user SET level='%i',Money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',Payday='%i',PaydayTime='%i',rollerschein='%i',autoschein='%i',premiumSys='%i' WHERE id='%i'",sInfo[playerid][level],
    GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][Payday],sInfo[playerid][PaydayTime],sInfo[playerid][rollerschein],sInfo[playerid][autoschein],sInfo[playerid][premiumSys],sInfo[playerid][db_id]);


    zu:
    format(query,sizeof(query),"UPDATE user SET level='%i',Money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',Payday='%i',PaydayTime='%i',rollerschein='%i',autoschein='%i',premiumSys='%i',premiumzeit='%i' WHERE id='%i'",sInfo[playerid][level],
    GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][Payday],sInfo[playerid][PaydayTime],sInfo[playerid][rollerschein],sInfo[playerid][autoschein],sInfo[playerid][premiumSys],sInfo[playerid][premiumzeit],sInfo[playerid][db_id]);


    Das Laden hast du ja bereits.


    Hast du in deiner Datenbank auch eine Spalte die "premiumzeit" heißt? Wenn nein, dann füge diese Spalte noch in der Struktur deiner Tabelle hinzu.

    Du speicherst die Premium Zeit doch schon, und lädst sie auch schon, was willst du denn dann speichern?
    sInfo[playerid][premiumzeit] = cache_get_field_content_int(0, "premiumzeit", dbhandle);


    Falls du einen neuen Stat laden willst, musst du es nach dem gleichen Prinzip machen.
    sInfo[playerid][neuerstat] = cache_get_field_content_int(0, "neuerstat", dbhandle);


    Das speichern musst du dann natürlich noch machen. Einfach wie hier, die Werte ändern.

    Poste doch bitte mal den Code mit dem du den Spieler einloggst. Ich kann deine Variable nicht erraten.


    Nochmal wiederhole ich mich nicht.


    Wenn du Hilfe willst, dann musst du auch mitspielen. In habe keine Glaskugel zu Hause in der ich deine Variablen sehen kann.


    Also poste bitte den Code mit dem du den Spieler einloggst.


    Oder suche nach
    [SpielerDaten]
    und poste diese Zeile, die du findest.

    Um die Rotation eines Objektes mit MoveObject zu verändern MUSS die Position des Objektes, also X Y Z verändert werden. Du kannst zum Beispiel den Z Wert des Objektes minimal (zum Beispiel 0.1) ändern, und dann das Objekt gaaanz langsam bewegen lassen, mit 0.01 zum Beispiel. Dann sollte es klappen.


    Falls nicht poste bitte wie du die Objekte erstellst, und wie du die MoveObject jetzt hast.

    Dort musst du eine Spalte erstellen, in der du den Wert der Variable speicherst, den du speichern willst.
    Du hast ja sicher schon ein Login und eine Speicher System. Da kannst du dir einen Stat als Beispiel nehmen, zum Beispiel die Kills oder sowas.


    Falls du nicht weiter kommst, kannst du auch mal dein Login und Speicher System posten, dann können wir dir helfen.

    Willkommen in der Scripting Base!


    Einen Timer mit einer Sekunde erstellst du so:
    OnGameModeInit:
    SetTimer("SekundenTimer", 1000, true);


    forward SekundenTimer();
    public SekundenTimer()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    //Hier dann die Spielervariable um eins kleiner machen. z.B.
    //i = playerid
    //Je nach dem was du machen willst.
    sInfo[i][premiumzeit]--;
    }
    }
    return 1;
    }



    Zum Speichern/Laden: Hast du denn schon ein System mit dem du Statistiken lädst und speicherst? Wenn ja, dann füge da einfach einen Premium-Stat hinzu.

    SpielerInfo[playerid][Skin] zu deiner Stats-Variable umändern, sollte klar sein, sonst geht's natürlich nicht.


    :rolleyes:


    Die Variable muss so heißen wie du auch alle deine anderen Stats genannt hast. Skin musst du dann noch in dem dazugehörigen enum einfügen.
    Falls du keine Ahnung was von was ich da spreche, poste bitte den Code, mit dem du die Statistiken des Spielers lädst.

    Hilft wohl nichts anderes al den Code zu debuggen:
    //Nochmal ein Auszug aus OnDialogRespnose
    case DLG_AH_IMPORTCAR:
    {
    printf("response = %d", response);
    if(response)
    {
    new veh=GetPVarInt(playerid,"ImportVeh"),lk=GetPVarInt(playerid,"Lieferkosten");
    printf("veh = %d | lk = %d | Dealercarsordered = %d | MAX_DEALERORDERS = %d", veh, lk, Dealercarsordered, MAX_DEALERORDERS);
    if(Dealercarsordered < MAX_DEALERORDERS)
    {
    new i=pInfo[playerid][pAH];
    printf("i = %d | playerid = %d | CDid[i] = %d", i, playerid, CDid[i]);
    if(CDid[i] == -1)
    {
    printf("zBank = %d | DealerVehPrice = %d", DealerVehPrice[veh-400]+lk);
    if(AHInfo[i][zBank] >= DealerVehPrice[veh-400]+lk)
    {
    printf("Bestellt.");
    AHInfo[i][zBank] -= DealerVehPrice[veh-400]+lk;
    SaveCarDealer(i);
    Dealercarsordered += 1;
    SendClientMessage(playerid,COLOR_WHITE,"Du hast das Fahrzeug bestellt. Warte nun bis es von einem Trucker geliefert wird.");
    SetTimerEx("ImportVehicle",720000,0,"dd",i,lk);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Du hast nicht genug Geld auf der Autohauskasse, um dieses Fahrzeug zu bestellen!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Du hast bereits ein Fahrzeug bestellt!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Der Importhändler hat gerade zu viel zu tun. Versuche es Später erneut!");
    }
    }
    else
    {
    SetPVarInt(playerid,"ImportVeh",-1); SetPVarInt(playerid,"Lieferkosten",0);
    }
    }


    Füge das so ein und poste dann was im Server Log steht.
    Wenn du damit etwas anfangen kannst, kannst du den Fehler vielleicht auch schon selbst beheben.

    new Float:a, Float:x, Float:y, Float:z;
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
    else GetPlayerFacingAngle(playerid, a);
    GetPlayerPos(playerid, x, y, z);
    x += (1.0 * -floatcos(a, degrees)); //1.0 = Abstand zur Seite (wenn du die andere Seite willst, mach das "-" weg, bei beiden vor dem "float...".
    y += (1.0 * -floatsin(a, degrees));

    Warum überhaupt? Never change a running system. :thumbup:



    Poste bitte mal den Code. Möglicherweise hast du den nicht (korrekt) aktualisiert.

    okay.. aber jetzt wird der Spielern icht mehr gekickt..


    ocmd:kick(playerid,params[])
    {
    if(SpielerInfo[playerid][Alevel] >= 1)
    {
    new pID,string[144],aname[MAX_PLAYER_NAME],SpielerName[MAX_PLAYER_NAME],grund[128];
    GetPlayerName(pID,SpielerName,sizeof(SpielerName));
    GetPlayerName(playerid,aname,sizeof(aname));
    if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /Kick [ID/Name] [Grund]");
    format(string,sizeof(string),"[INFO]{FFFFFF} %s %s hat %s gekickt. Grund: %s",GetPlayerAdminRankName(playerid),aname,SpielerName,grund);
    SendClientMessageToAll(Rot,string);
    SetTimerEx("Kicken",100,0,"i",pID);
    }
    return 1;
    }



    Du kannst auch diese Include verwenden, dann musst du nicht bei jedem Kick/Ban den Timer selbst setzen: [ INCLUDE ] Kick/Ban Fix

    Was genau muss ich eig im Dialog machen? Ich find das alles sehr verwirrend.^^


    Willst du die DMs in der Reihenfolge so wie sie sind (1,2,3,...) bleiben?
    Wenn ja, dann muss ich noch eine Funktion hinzufügen, um ein vorhandenes Item zu aktualisieren, ohne es nach unten zu verschieben, da das so noch nicht geht.


    Ansonsten könntest du das Item suchen, entfernen und neu hinzufügen, dann steht es eben ganz unten.
    Sag Bescheid wie du es haben willst, dann mache ich dir das kurz, bzw. füge es dem Tutorial hinzu.



    EDIT:
    Falls du die Reihenfolge gleich haben willst:

    Spoiler anzeigen
    stock UpdateItemInDialog(dialogid, olditem[], newitem[])
    {
    //Wir suchen das item.
    new l_pos = strfind(g_dInfo[dialogid], olditem);

    //Wurde das item nicht gefunden, dann wird auch nichts gemacht.
    if(l_pos == -1) return 0;

    //Ansonsten wird es entfernt.
    strdel(g_dInfo[dialogid], l_pos, l_pos+strlen(olditem)+1);

    Spoiler anzeigen
    //Und das neue item wird eingefügt, zuvor geben wir dem item noch einen Zeilenumbruch mit.
    strcat(newitem, "\n", 256);
    strins(g_dInfo[dialogid], newitem, l_pos);

    //Wir beenden die Funktion mit der Anweisung, den Dialog für alle Spieler zu aktualisieren.
    return UpdateDialogForAll(dialogid);
    }

    Ich konnte es noch nicht testen, das müsstest du machen.


    Den Dialog musst du bei OnGameModeInit erstellen, und zwar so:
    AddItemToDialog(dialogid_von_DE, "[0] DM1 [Sniper, Desert Eagle, Shotgun]");
    AddItemToDialog(dialogid_von_DE, "[0] DM2 [Desert Eagle, Combat Shotgun]");
    //usw...
    //ebenso beim Englischen.
    Ich nehme an das [0] ist die Anzahl der Spieler.


    Dialog anzeigen wie im Beispiel.


    Item aktualisieren:
    format(tmpstr, 128, GetItemFromDialog(dialogid, DM_ID_HIER));
    //dann das neue Item formatieren, also mit switch-case über die DM_ID neu setzen
    //Beispiel:
    format(newstr, 128, "[%d] DM2 [Desert Eagle, Combat Shotgun]", Spieler_In_dem_DM);
    //Dann updaten:
    UpdateItemInDialog(dialogid_von_DE, tmpstr, newstr);


    //Dann das gleichen nochmal für Englisch machen.



    Versuche dich mal daran, falls Fragen auftauchen kannst du gerne Fragen. Wenn du die Funktion getestet hast (ansonsten mache ich es am Wochenende selbst), kann ich die auch oben hinzufügen.

    Habe es nicht hin bekommen ;/


    OnPlayerConnect:
    Aus der Datenbank den Wert der Spalte "skin" laden und in die Variable SpielerInfo[playerid][Skin] speichern.


    OnPlayerRequestClass:
    if(SpielerInfo[playerid][Skin] != -1)
    {
    SetSpawnInfo(playerid, playerid, SpielerInfo[playerid][Skin], 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
    SpawnPlayer(playerid);
    }


    OnPlayerSpawn:
    if(SpielerInfo[playerid][Skin] != -1)
    {
    SetPlayerSkin(playerid, SpielerInfo[playerid][Skin]);
    }


    OnPlayerRequestSpawn:
    SpielerInfo[playerid][Skin] = GetPlayerSkin(playerid);



    Einstellungen die du machen musst:
    In der Datenbank eine Spalte "skin" anlegen, mit dem default Wert -1.
    SpielerInfo[playerid][Skin] zu deiner Stats-Variable umändern, sollte klar sein, sonst geht's natürlich nicht.


    Somit sollte alles klar sein.