Beiträge von 8D

    Wie wärs,
    wenn du einfach n ganzen FFS machst, mit sachen kassen, bank usw.
    Somit haben Non GFler auch ne Bank und Gangkassen.


    Aber für fortgeschrittene sind Gangkassen eig. kein problem.


    mfg Kavkus

    Könnte ich machen, aber eigentlich wollte ich für neulinge wie mich diese Idee nur aufzeigen und nicht extrem stark ausbauen sondern an der basis festhalten, aber mal schauen.


    @[DotD]Dog ja geht bestimmt um einiges einfacher ^^ aber mir gehts gesagt immer ums produkt und dass ich verstehe was da eigentlich passiert,damit ich schnell meine Fehler finden kann =)


    Danke für das Rating.

    So demnächst folgt noch (1 - 2 Tage)


    - Online-Banking, d.h Geld aus der Kasse auf ein Bankkonto eines Spielers überweisen.


    - Spendenkonto, d.h Spieler können für die Fraktion spenden auf ein Spendenkonto.


    - Admins sehen den Betrag aller Kassen


    - Kassen-Commands nur an der Bank / Base-ATM

    Du kannst das Tutorial ja auch auf No-Gf anpassen und einfach deine Leader / Member Bedingungen anpassen.


    Wie gesagt, ich bin noch recht neu am scripten und hab es halt in eine extra Datei gepackt.




    1.) Gehalt


    Suche nach: enum pInfo


    Füge darunter ein:


    pGehalt,


    Bei OnPlayerConnect()


    suche nach: PlayerInfo[playerid][pCarLic] = 0; oder ähnlichem.


    Füge darunter ein: PlayerInfo[playerid][pGehalt] = 0;


    Bei public ShowStats(playerid,targetid)


    suche nach: new bigfish = PlayerInfo[targetid][pBiggestFish]; oder ähnlichem.


    Füge darunter ein: new gehalt2 = PlayerInfo[targetid][pGehalt];


    suche nach: format(coordsstring, sizeof(coordsstring), "Drogen:[%d] Materialien:[%d] Team:[%s] Krankheit:[%s] Organisation:[%s] Rank:[%s]",drugs,mats,ttext,dtext,ftext,rtext);


    und ersetze es mit: format(coordsstring, sizeof(coordsstring), "Drogen:[%d] Materialien:[%d] Team:[%s] Gehalt:[$%d] Krankheit:[%s] Organisation:[%s] Rank:[%s]",drugs,mats,ttext,gehalt2,dtext,ftext,rtext);


    Bei public PayDay()


    suche nach: if(PlayerInfo[i][pPayDay] >= 5)
    {


    Füge darunter ein: if(PlayerInfo[i][pMember] == 1 || PlayerInfo[i][pLeader]== 1)
    {
    if(PlayerInfo[i][pGehalt] <= kasse1)
    {
    GivePlayerMoney(i,PlayerInfo[i][pGehalt]);
    kasse1= kasse1-PlayerInfo[i][pGehalt];
    }
    else
    {
    SendClientMessage(i,COLOR_GRAD2,"In der Gangkasse ist nicht mehr genügend Geld, beschwere dich bei deinem Leader!");
    }
    }


    Bei public OnPlayerRegister(playerid, password[])


    suche nach: format(var, 32, "Pos_z=%.1f\n",PlayerInfo[playerid][pPos_z]);fwrite(hFile, var); oder ähnlichem.


    Füge darunter ein: format(var, 32, "Gehalt=%d\n",PlayerInfo[playerid][pGehalt]);fwrite(hFile, var);



    Bei public OnPlayerUpdate(playerid)


    suche nach: format(var, 32, "Pos_z=%.1f\n",PlayerInfo[playerid][pPos_z]);fwrite(hFile, var); oder ähnlichem.


    Füge darunter ein: format(var, 32, "Gehalt=%d\n",PlayerInfo[playerid][pGehalt]);fwrite(hFile, var);


    Bei public OnPlayerLogin(playerid,password[])


    suche nach: if( strcmp( key , "Pos_z" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pPos_z] = floatstr( val ); } oder ähnlichem.


    Füge darunter ein: if( strcmp( key , "Gehalt" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pGehalt] = strval( val ); }



    Bei OnPlayerCommandText



    Füge ein: if(strcmp(cmd, "/gehalt", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new playa;
    new gehalt;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Verwendung: /gehalt [spielerid] [geld]");
    return 1;
    }
    playa = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    gehalt = strval(tmp);
    if(PlayerInfo[playerid][pLeader] == 1)
    {
    if(IsPlayerConnected(playa))
    {
    if(PlayerInfo[playa][pMember] == 1 || PlayerInfo[playa][pLeader] == 1)
    {
    PlayerInfo[playa][pGehalt] = gehalt;
    SendClientMessage(playerid, COLOR_GRAD2,"Du hast das Gehalt des Spieler erfolgreich bearbeitet.");


    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Dieser Spieler ist nicht in deiner Fraktion.");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Dieser Spieler ist nicht online!");
    }


    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du bist kein Leader einer Fraktion!");
    }
    }
    return 1;
    }

    Das wollte ich eigentlich ausführen:


    Wenn ich das bei OnPlayerConnect und OnPlayerDisConnect einfüge, wird die Datei ja gelesen und gespeichert sobald irgendein Spieler online bzw. offline geht, da es ja global ist.


    Nun sagen wir mal es sind 5 Spieler auf dem Server.


    Spieler1 zahlt 4000$ Dollar in die Gangkasse ein, dies wird dann scriptintern gespeichert in der kasse1-Variabel.


    Nun kommt Spieler6 online: die .ini datei wird neu gelesen und der alte Wert für kasse1 ohne die neuen 4000$ übernommen.
    Vielleicht habe ich einen Denkfehler, aber auf Grund dieser Sache finde ich es besser, dass solange der Server online ist alles script intern in der kasse1-Variabel gespeichert wird und beim Offline / Online setzen des Server gespeichert bzw. gelesen wird.


    Gleich kommt noch der /gehalt Befehl.

    Einen schönen guten Abend liebe Community.


    Das Ziel dieses Threads ist es, dass ihr eine funktionierende Gangkasse in eurem Script habt.


    Viele kennen die Gangkasse aus dem XGF-Script, aber mir ist zu Ohren gekommen, dass diese nicht funktioniert.
    Daher habe ich auf Wunsch von djksmurat mich heute Abend hingesetzt und versucht eine Gangkasse zu scripten.


    Und es hat geklappt!


    Ich scripte jetzt aktiv erst seit 3 Wochen und dies ist mein erstes Tutorial, weswegen ich weiß, dass es eventuell sauberere Lösungen gibt. Aber eigentlich geht es ja um das Produkt.


    Inhalt: (A - Basis)


    1. Änderungen am Script!


    2. Wie geht es weiter?


    1. Änderungen am Script!


    Die nachfolgende Detailierung macht euch klar wie und was ihr an eurem Script editieren müsst.


    1.1) Eine globale Variabel:


    Fügt oben in eurem script eine neue Variabel ein.


    new kasse1; //kasse1 ist die globale Variabel



    1.2) Das Abspeichern der globalen Variabel in eine Datei


    Sucht nach : OnGameModeExit()


    Erklärung: Beim Server-Restart oder beim Server-Close werden die Fraktionskassen in eine Datei im Ordner "scriptfiles" gespeichert.


    Fügt darunter ein:


    new File: Kassen = fopen("Kassen.ini", io_write);
    if (Kassen)
    {
    new var[32];
    format(var, 32, "Kasse1=%d\n",kasse1);fwrite(Kassen, var);
    }


    - Kassen ist die File-Id.
    - Kassen.ini ist die Datei in der die Kassen gespeichert werden.
    - kasse1 ist die globale Variable s.o.
    - fopen bedeutet, dass die Datei geöffnet wird. Sollte keine Datei vorhanden sein, wird eine automatisch erstellt.



    1.3) Das Einlesen der globalen Variabel in eine Datei


    Sucht nach: OnGameModeInit()


    Erklärung: Beim Start des Servers, sollen die Fraktionskassen natürlich geladen werden.


    Fügt darunter ein:


    new File: Kassen = fopen("Kassen.ini", io_read);
    if(Kassen)
    {


    new key[ 256 ] , val[ 256 ];
    new Data[ 256 ];
    while ( fread( Kassen , Data , sizeof( Data ) ) )
    {
    key = ini_GetKey( Data );
    if( strcmp( key , "Kasse1" , true ) == 0 ) { val = ini_GetValue( Data ); kasse1= strval( val ); }
    }
    fclose(Kassen);
    }


    Wichtig hier ist, dass die Variabeln "Kassen.ini", "Kassen", "Kasse1" und "kasse1" wie bei OnGameModeExit() gleich sind.


    1.4) Die Commands.


    Damit man die Kassen auch verwenden kann brauchen wir auch Commands.


    Sucht nach: public OnPlayerCommandText(playerid, cmdtext[])


    und fügt unter:


    new giveplayerid, moneys, idx;
    cmd = strtok(cmdtext, idx);


    folgendes ein:


    if(strcmp(cmd, "/einzahlen", true) == 0)
    {
    new einzahlgeld;
    tmp = strtok(cmdtext, idx);
    einzahlgeld = strval(tmp);


    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pLeader] == 1)
    {
    if(GetPlayerMoney(playerid) >= einzahlgeld)
    {
    kasse1= kasse1+ einzahlgeld;
    GivePlayerMoney(playerid,-einzahlgeld);
    SendClientMessage(playerid, COLOR_GRAD2,"Du hast Geld in die Fraktionskasse eingezahlt.");
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du hast nicht genügend Geld!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du bist kein Leader einer Fraktion!");
    }
    }
    return 1;
    }
    if(strcmp(cmd, "/abheben", true) == 0)
    {
    new auszahlgeld;
    tmp = strtok(cmdtext, idx);
    auszahlgeld = strval(tmp);
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pLeader] == 1)
    {
    if(kasse1 >= auszahlgeld)
    {
    kasse1 = kasse1- auszahlgeld;
    GivePlayerMoney(playerid,auszahlgeld);
    SendClientMessage(playerid, COLOR_GRAD2,"Du hast Geld aus der Fraktionskasse genommen.");
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"In der Fraktionskasse ist nicht mehr genügend Geld!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du bist kein Leader einer Fraktion!");
    }
    }
    return 1;
    }
    if(strcmp(cmd, "/seekasse", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pLeader] == 1)
    {
    format(string, 256, "Kasse1: $%d",kasse1);
    SendClientMessage(playerid, COLOR_GRAD2, string);
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du bist kein Leader einer Fraktion!");
    }


    }
    return 1;
    }


    Natürlich könnte man jetzt einen Ort festlegen wo man diese Befehle nur ausführen kann, aber dazu mehr in Version 1.1


    - PlayerInfo[playerid][pLeader] == 1 bedeutet, dass nur Leader (hier Leader der 1.Fraktion) die Befehle ausführen können.



    2.) Wie geht es weiter?


    Falls euch nicht klar sein sollte wie ihr jetzt eine zweite Gangkasse einfügt: Noch einmal im Schnelldurchlauf:


    Oben:


    new kasse2;


    bei OnGameModeExit()


    new File: Kassen = fopen("Kassen.ini", io_write);
    if (Kassen)
    {
    new var[32];
    format(var, 32, "Kasse2=%d\n",kasse2);fwrite(Kassen, var);
    }


    bei OnGameModeInit()


    new File: Kassen = fopen("Kassen.ini", io_read);
    if(Kassen)
    {


    new key[ 256 ] , val[ 256 ];
    new Data[ 256 ];
    while ( fread( Kassen , Data , sizeof( Data ) ) )
    {
    key = ini_GetKey( Data );
    if( strcmp( key , "Kasse2" , true ) == 0 ) { val = ini_GetValue( Data ); kasse2= strval( val ); }
    }
    fclose(Kassen);
    }



    Bei OnPlayerCommandText


    if(strcmp(cmd, "/einzahlen", true) == 0)
    {
    new einzahlgeld;
    tmp = strtok(cmdtext, idx);
    einzahlgeld = strval(tmp);


    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pLeader] == 2)
    {
    if(GetPlayerMoney(playerid) >= einzahlgeld)
    {
    kasse2= kasse2+ einzahlgeld;
    GivePlayerMoney(playerid,-einzahlgeld);
    SendClientMessage(playerid, COLOR_GRAD2,"Du hast Geld in die Fraktionskasse eingezahlt.");
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du hast nicht genügend Geld!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du bist kein Leader einer Fraktion!");
    }
    }
    return 1;
    }
    if(strcmp(cmd, "/abheben", true) == 0)
    {
    new auszahlgeld;
    tmp = strtok(cmdtext, idx);
    auszahlgeld = strval(tmp);
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pLeader] == 2)
    {
    if(kasse2 >= auszahlgeld)
    {
    kasse2 = kasse2- auszahlgeld;
    GivePlayerMoney(playerid,auszahlgeld);
    SendClientMessage(playerid, COLOR_GRAD2,"Du hast Geld aus der Fraktionskasse genommen.");
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"In der Fraktionskasse ist nicht mehr genügend Geld!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du bist kein Leader einer Fraktion!");
    }
    }
    return 1;
    }
    if(strcmp(cmd, "/seekasse", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pLeader] == 2)
    {
    format(string, 256, "Kasse2: $%d",kasse2);
    SendClientMessage(playerid, COLOR_GRAD2, string);
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD2,"Du bist kein Leader einer Fraktion!");
    }


    }
    return 1;
    }


    Man muss eigentlich immer nur die 1 durch die nächste Zahl ersetzen und bei [pLeader] halt die Fraktions-ID.



    Inhalt(B - Features)


    1. Gehalt



    So das wars erstmal von mir.


    Über Rating und Kritik würde ich mich freuen.




    Features demnächst:


    - Befehle nur an der Base / Bank
    - Admin können alle Fraktionskassen einsehen.



    Für eure Fragen stehe ich zur Verfügung.


    8D.

    du kannst auch per command die teile spawnen und nachher wieder zerstören X(



    if(strcmp(cmd, "/createhealth", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:X,Float:Y,Float:Z;
    GetPlayerPosition(playerid,X,Y,Z)
    pickup = CreatePickup(1240,1,X,Y,Z)
    }
    }



    und dann bei OnPlayerPickupPickup


    folgt... xD

    Es gab doch eh mal nen Bug, wo man AddStaticVehicle einer Variable zuweißt oder?


    Aber da glaube ich waren nur die Türen locked :P

    new car1 = CreateVehicle(432,278.9016,1950.7509,17.6532,88.9054,0,0,150000); // Hunter
    new car2 = CreateVehicle(432,282.3510,1987.1381,17.6535,87.2516,0,0,150000); // Hunter
    SetVehicleVirtualWorld(car1, 6);
    SetVehicleVirtualWorld(car2, 6);


    probier mal so.

    Könntest du mal einen Auszug des Scripts an der Stelle posten? oder mir die Stelle per icq schicken? 493101898

    Bekommt man kein Geld oder keine Anzeige zu sehen?


    mit RemovePlayerFromVehicle(playerid) steigt man ab.