skillsystem

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
  • Guten Tag


    Ich habe ein Drogensystem gescriptet, welches 100% klappt. Nun fehlt nur noch das Skillsystem dafür. Ich brauche so ein Skillsystem auch für andere Jobs, deswegen wollte ich mal fragen wie das geht. also Skill 10 sollte das höchste sein. man sollte beim verkaufen von Drogen immer ein paar Skillpunkte bekommen, was ich selber hinbekomme. Es soll von skill zu skill schwerer werden, damit meine ich zum bespiel, das man mit Skill 1 50exp. braucht um skill 2 zu werden. mit skill 2 jedoch 100 um 3 zu werden. und mit skill 3 dann 150 oder 200.. .


    das bekomme ich aber net wirklich hin, und bitte um eure hilfe.


    enum Sinfo
    {
    Drogenskill,
    Dskillpunkte
    }
    new Spieler[MAX_PLAYERS][Sinfo];


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGIS)
    {
    if(response == 1)
    {
    new Spielerdatei[64],str[256];
    new SpielerName[MAX_PLAYER_NAME];
    Spieler[playerid][Drogenskill] = 1;
    Spieler[playerid][Dskillpunkte] = 0;
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini",SpielerName);
    dini_IntSet(Spielerdatei,"Drogenskill",Spieler[playerid][Drogenskill]);
    dini_IntSet(Spielerdatei,"Dskillpunkte",Spieler[playerid][Dskillpunkte]);
    Anmelden(playerid);
    }
    else
    {
    SendClientMessage(playerid,0xFF0000FF,"Du musst dich schon registrieren um hier zu Spielen!");
    Kick(playerid);
    }
    }
    return 1;
    }


    public Anmelden(playerid)
    {
    new Spielerdatei[256];
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini",SpielerName);
    Spieler[playerid][Drogenskill] = dini_Int(Spielerdatei,"Drogenskill");
    Spieler[playerid][Dskillpunkte] = dini_Int(Spielerdatei,"Dskillpunkte");
    return 1;
    }


    public Update(playerid)
    {
    new Spielerdatei[256];
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini",SpielerName);
    dini_IntSet(Spielerdatei,"Drogenskill",Spieler[playerid][Drogenskill]);
    dini_IntSet(Spielerdatei,"Dskillpunkte",Spieler[playerid][Dskillpunkte]);
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    Update(playerid);
    return 1;
    }

  • Du hast ja sicher nen Command bei dem man die zu verkaufende Menge angiebt.


    Dann kannste ja einfach in diesem Command die Skillpunkte erhöhen.




    new punkte = random(3) +1;
    Spieler[playerid][Dskillpunkte] = Spieler[playerid][Dskillpunkte] + punkte;


    Er erhält also in diesem Falle einen bis vier Skillpunkte pro Menge. Du kannst natürlich auch die verkaufte Menge in Relation zu den Punkten setzten.


    So nun zum neuen Skill




    const maxskills = 3;
    new wannskill[maxskills][2] =
    {
    {2,50},
    {3,100},
    {4,200}
    };


    Im Command :



    for(new i = 0;i<maxskills;i++)
    {
    if(Spieler[playerid][Dskillpunkte] >= wannskill[i][1])
    {
    Spieler[palyerid][Drogenskill] = wannskill[i][0];
    }
    }

  • also einiges klappt einiges nicht. ich habs nun erstmal testweise so gemacht:


    const maxskills = 9;
    new wanndskill[maxskills][2] =
    {
    {2,50},
    {3,100},
    {4,200},
    {5,400},
    {6,600},
    {7,800},
    {8,1000},
    {9,1250},
    {10,1500}
    };


    dcmd_accept(playerid,params[])
    {
    new s[256];
    if(sscanf(params, "s", s))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Benutzung: /accept [SACHE]");
    }
    else
    {
    if(!strcmp(s,"drugs",true))
    {
    new str1[125],str2[125],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    Spieler[playerid][Drogen] = Spieler[playerid][Drogen]+danzahl[playerid];
    GivePlayerMoney(playerid,-dpreis[playerid]);
    format(str1,sizeof(str1),"Du erhälts %dg Drogen für $%d!", danzahl[playerid], dpreis[playerid]);
    SendClientMessage(playerid,0x00DD00FF,str1);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(dID[i] == playerid)
    {
    Spieler[i][Drogen] = Spieler[i][Drogen]-danzahl[playerid];
    GivePlayerMoney(i,dpreis[playerid]);
    format(str2,sizeof(str2),"%s erhält %dg Drogen, du erhälts $%d!",name, danzahl[playerid], dpreis[playerid]);
    SendClientMessage(i,0x00DD00FF,str2);
    danzahl[playerid] = 0;
    dpreis[playerid] = 0;
    dID[i] = -1;
    Spieler[i][Dskillpunkte] = Spieler[i][Dskillpunkte]+5;
    for(new j = 0;j<maxskills;j++)
    {
    if(Spieler[i][Dskillpunkte] >= wanndskill[j][1])
    {
    Spieler[i][Drogenskill] = wanndskill[j][0];
    Spieler[i][Dskillpunkte] = 0;
    }
    }
    Update(i);
    }
    }
    Update(playerid);
    }
    }
    return 1;
    }


    wenn man skill 1 ist und 50 skillpunkte hat, kommt man skill 2 und hat wieder 0 punkte. wenn man nun wieder 50exp. hat und skill 2 ist, wird der skill nicht erhöht aber die skillpunkte wieder auf 0 gesetzt.

  • Sorry hab ich net ganz zu Ende gedacht:


    Das hier hollte funktioneren.


    Jetzt überprüft er auch ob der Skill zu dem die in der SChleife gehörenden Werte niedriger ist als der eigene Skill wodurch nur der nächst höhere angesprochen wird.


    if(Spieler[i][Dskillpunkte] >= wanndskill[j][1] && Spieler[i][Drogenskill] < wanndskill[j][0])



    Sollte so eigentlich funktioneren wenn ich mich nicht irre. Aber ... ja... bin mir sicher, dass es funktioniert.