Geld Verlieren beim Sterben..

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
  • Hallo wie kann ich das machen das ich beim Sterben geld Verliere aus einer zufälligen Geldmänge vom gesamt betrag und davon die differenz ?
    Und wie mach ich das dann so das das geld dann in eine Art Pickup Gespeichert wird


    und der der dann das Pickup aufnimmt der bekommt dann die gespeicherte menge ?


    den anfang hätte ich ja schon .. nur ich brach den wert Speichern..


    Würde der anfang so gehen ?



    // Bei OnPlayerDeath
    New Float:gx,Float:gy,Float:gz;
    GetPlayerPos(playerid,gx,gy,gz);
    new geldbarren = CreatePickup(id,gx,gy,gz);
    //nun wie speicher ich jetzt den geldwert in den erstellten Pickup?
    //Vllt So?
    new money = GetPlayerMoney(playerid);
    new moneyar = money - random(money);
    new endbetrag = GivePlayerMoney(playerid, -moneyar);
    // Nun häng ich.



    Wenns falsch ist kp Befass mich grad damit

  • Da wären wir bei dem Problem wie Speicher ich die Menge in dem Pickup,


    Dan wenn viele sterben ja unterschiedliche Geldbarren entstehen sollen nicht das jeder das gleiche bekommt..


    weist was ich mein?

  • ich hab noch nie mit for schleifen gearbeitet..
    Kannst du mir ein Beispiel Geben ? hät ich vllt beim erstellen oben ?


    new geldbarren[MAX_PLAYERS];


    nemen sollen und dann
    geldbarren[playerid] = CreatePickup?


    Hilf mir mal..
    Lieb schau :)

  • Wie du hast noch nie mit einer for Schleife gearbeitet? :D Na ich bin mir nicht ganz sicher .
    Jedenfalls das ist schon so Richtig
    und Dann unter OnplayerEnterCheckpointdingeskirchen
    Halt den geldbarren[playerid] destroyen das Pickup , das muss du mit GetPlayerPos abfragen.
    Und dann dem Spieler das Geld geben . Ich denke du brauchst keine For Schleife (das war nur so mein Erster Gedanke , kann mich aber auch Irren) .
    Sorry bin gerade etwas unkonzentriert ;)

  • hmm problem wäre doch dann das dann jeder andere das geld bekommt..
    soll ja nicht sein
    Der Spieler stirb und das Geld wird in dem Picup gesavt
    Sodas wenn ein anderer das pickup aufnimmt nur den gespeicherten wert bekommt..

  • Ich möchte dir halt nicht den ganzen Code vorschreiben , damit du auch selber etwas machst ;)
    Ja hier
    new moneyar = money - random(money); Mit MAX_PLAYERS arbeiten ;)


    Ich lern aber so am besten jeder lernt und versteht dinge anders..


    aber das scheinen nicht viele zu wissen
    Ich lern anhand eines Vorgegebenen beispiels


    /edit also ich habs mal so gemacht funktioniert das auch ?



    // oben bei den news


    new Money[MAX_PLAYERS]:
    new Float:PPos[MAX_PLAYERS][3];


    // die Callbacks


    public OnPlayerDeath(playerid, killerid, reason)
    {
    Money[playerid] = GetPlayerMoney(playerid);
    CreatePickup(1212,23,PPos[playerid][0]+2.0,PPos[playerid][1]+2.0,PPos[playerid][2]+2.0,0);
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == 1212)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerMoney(i) <= 0 || GetPlayerMoney(i) >= 0) {
    GivePlayerMoney(playerid,Money[playerid]);
    DestroyPickup(pickupid);
    }
    }
    }
    return 1;
    }

    Einmal editiert, zuletzt von Shikuto () aus folgendem Grund: Was versucht geht das s0`?

  • Übersetz dein Script doch mal "ins Deutsche"


    Code
    public OnPlayerDeath(playerid, killerid, reason)
    {
    // --> Sobald ein Spieler stirbt
     Money[playerid] = GetPlayerMoney(playerid);
    // --> Setze Variable "Money[playerid]" auf den Wert GetPlayerMoney(playerid)
     CreatePickup(1212,23,PPos[playerid][0]+2.0,PPos[playerid][1]+2.0,PPos[playerid][2]+2.0,0);
    // --> Erstelle irgendein PickUp, was für die Frage nicht relevant ist
     return 1;
    }


    Demnach veränderst du am Spielergeld absolut garnichts, du setzt lediglich eine Variable, die das momentane Geld eines Spielers speichert.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Das hab ich ja jett so ... aber wenn ich reilauf passiert nix :(



    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == 1212)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerMoney(i) <= 0 || GetPlayerMoney(i) >= 0) {
    GivePlayerMoney(playerid,Money[playerid]);
    DestroyPickup(pickupid);
    }
    }
    }
    return 1;
    }



    //edit das Pickup bleibt da ich bekomm das geld nicht und es wird nichtmal zerstört

  • Wofür dieser If-Clause?

    Code
    if(GetPlayerMoney(i) <= 0 || GetPlayerMoney(i) >= 0) {


    Wenn der Spieler weniger, gleich oder mehr "0" hat.. Also in jedem Fall, die Abfrage ergibt keinen Sinn.
    Wofür die While-Schleife?


    Was du tust ist folgendes:

    Code
    for (new i = 0; i < MAX_PLAYERS; i ++) {
    // Für jeden Spieler von ID 0 bis MAXIMUM
    GivePlayerMoney(playerid, Money[playerid]);
    // Gib dem Spieler, der in das PickUp läuft, so viel Geld, wie du in der Variable gespeichert hast.
    }


    Im Debug würde das quasi so aussehen:


    Spieler ID 2 läuft ins Pickup.
    Spieler ID 0 bekommt so viel Geld wie in Money[2] steht.
    Spieler ID 1 bekommt so viel Geld wie in Money[2] steht.
    Spieler ID 2 bekommt so viel Geld wie in Money[2] steht.
    ...
    Spieler 371 bekommt so viel Geld wie in Money[2] steht.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Man Sagte mir ich soll mit for schleifen arbeiten aber hab mich noch nie damit befasst :(


    erstellen tut ers ja aber es passiert 0 wenn ich reinlauf oder so...



    //edit
    So Gelöst das Geld wird gedroppt aus einem zufallswert vom gesamt wert....


    Frage: Wie kann ich jetzt dann ausgeben


    beim aufsammeln du hast Wert in der variable also Money[playerid] aufgesammelt..


    Die Calls soweit;



    // Todescallback


    public OnPlayerDeath(playerid, killerid, reason)
    {
    new kohle = GetPlayerMoney(playerid);
    new koge = random(kohle);
    new kh = koge;
    Money[playerid] = kh;
    GivePlayerMoney(playerid,-kh);
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    barre = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    return 1;
    }


    // Aufsammlung


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == barre)
    {
    GivePlayerMoney(playerid,Money[playerid]);
    DestroyPickup(barre);
    }
    }


    Einmal editiert, zuletzt von Shikuto () aus folgendem Grund: gelöst

  • Sorry, wenn ich jetzt etwas sarkastisch klinge, ich hab schon ein wenig getrunken, aber:
    Meinst du nicht auch, dass du dir dringend die Grundlagen von PAWN durchlesen solltest?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Sorry, wenn ich jetzt etwas sarkastisch klinge, ich hab schon ein wenig getrunken, aber:
    Meinst du nicht auch, dass du dir dringend die Grundlagen von PAWN durchlesen solltest?



    NEIN ... Nur weil du der meinung bist das ich das so angeblich raffe ?
    Jeder mensch lernt anders ...


    Der eine durchs Lesen
    der Andere Anhand von Vorgaben Beispielen etc


    //edit
    Ich weis das dieses Thema schon als erledigt ist aber deswegen ein neues eröffnen ist doch sinnlos
    Folgendes Problem


    Ich habs jetzt soweit hinbekommen das er zufällig eine anzahl an Geldscheinen dropt..


    Die werte werden auch gespeichert


    Nur beim aufsammeln sagt der mir einen anderen wert:


    Hier mal die 2 Callbacks finde irgendwie den Fehler nicht:



    // Ganz oben die Variablen


    new barre1;
    new barre2;
    new barre3;
    new barre4;
    new barre5;
    new Money[MAX_PLAYERS];
    new Money1[MAX_PLAYERS];
    new Money2[MAX_PLAYERS];
    new Money3[MAX_PLAYERS];
    new Money4[MAX_PLAYERS];



    //OnPlayer Death
    public OnPlayerDeath(playerid, killerid, reason)
    {
    new drop = random(5);
    if(drop == 0)
    {
    new kh1 = random(30);
    Money[playerid] = kh1;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    barre1 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    GivePlayerMoney(playerid, -kh1);
    new verloren[80];
    format(verloren,sizeof(verloren),"%d $ Verloren", Money[playerid]);
    GameTextForPlayer(playerid, verloren, 5000, 3);
    }
    else if(drop == 1)
    {
    new kd1 = random(35);
    new kd2 = random(35);
    Money[playerid] = kd1;
    Money1[playerid] = kd2;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    barre1 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre2 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    GivePlayerMoney(playerid, -kd1);
    GivePlayerMoney(playerid, -kd2);
    new kd = kd1 + kd2;
    new verloren[80];
    format(verloren,sizeof(verloren),"%d $ Verloren", kd);
    GameTextForPlayer(playerid, verloren, 5000, 3);
    }
    else if(drop == 2)
    {
    new kg1 = random(40);
    new kg2 = random(40);
    new kg3 = random(40);
    Money[playerid] = kg1;
    Money1[playerid] = kg2;
    Money2[playerid] = kg2;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    barre1 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre2 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre3 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    GivePlayerMoney(playerid, -kg1);
    GivePlayerMoney(playerid, -kg2);
    GivePlayerMoney(playerid, -kg3);
    new kg = kg1 + kg2 + kg3;
    new verloren[80];
    format(verloren,sizeof(verloren),"%d $ Verloren", kg);
    GameTextForPlayer(playerid, verloren, 5000, 3);
    }
    else if(drop == 3)
    {
    new kf1 = random(45);
    new kf2 = random(45);
    new kf3 = random(45);
    new kf4 = random(45);
    Money[playerid] = kf1;
    Money1[playerid] = kf2;
    Money2[playerid] = kf3;
    Money3[playerid] = kf4;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    barre1 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre2 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre3 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre4 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    GivePlayerMoney(playerid, -kf1);
    GivePlayerMoney(playerid, -kf2);
    GivePlayerMoney(playerid, -kf3);
    GivePlayerMoney(playerid, -kf4);
    new kf = kf1 + kf2 + kf3 + kf4;
    new verloren[80];
    format(verloren,sizeof(verloren),"%d $ Verloren", kf);
    GameTextForPlayer(playerid, verloren, 5000, 3);
    }
    else if(drop == 4)
    {
    new kc1 = random(50);
    new kc2 = random(50);
    new kc3 = random(50);
    new kc4 = random(50);
    new kc5 = random(50);
    Money[playerid] = kc1;
    Money1[playerid] = kc2;
    Money2[playerid] = kc3;
    Money3[playerid] = kc4;
    Money4[playerid] = kc5;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    barre1 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre2 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre3 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre4 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    barre5 = CreatePickup(1212, 23, x+2.0, y+2.0, z, 0);
    GivePlayerMoney(playerid, -kc1);
    GivePlayerMoney(playerid, -kc2);
    GivePlayerMoney(playerid, -kc3);
    GivePlayerMoney(playerid, -kc4);
    GivePlayerMoney(playerid, -kc5);
    new kc = kc1 + kc2 + kc3 + kc4 + kc5;
    new verloren[80];
    format(verloren,sizeof(verloren),"%d $ Verloren", kc);
    GameTextForPlayer(playerid, verloren, 5000, 3);
    }
    return 1;
    }


    // OnPlayerPickupPickUp
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == barre1)
    {
    new wtf[80];
    format(wtf, sizeof(wtf), "Du hast %d $ Gefunden",Money[playerid]);
    GameTextForPlayer(playerid, wtf, 5000, 3);
    GivePlayerMoney(playerid,Money[playerid]);
    DestroyPickup(barre1);
    }
    else if(pickupid == barre2)
    {
    new wtf2[80];
    format(wtf2, sizeof(wtf2), "Du hast %d $ Gefunden",Money1[playerid]);
    GameTextForPlayer(playerid, wtf2, 5000, 3);
    GivePlayerMoney(playerid,Money1[playerid]);
    DestroyPickup(barre2);
    }
    else if(pickupid == barre3)
    {
    new wtf3[80];
    format(wtf3, sizeof(wtf3), "Du hast %d $ Gefunden",Money2[playerid]);
    GameTextForPlayer(playerid, wtf3, 5000, 3);
    GivePlayerMoney(playerid,Money2[playerid]);
    DestroyPickup(barre3);
    }
    else if(pickupid == barre4)
    {
    new wtf4[80];
    format(wtf4, sizeof(wtf4), "Du hast %d $ Gefunden",Money3[playerid]);
    GameTextForPlayer(playerid, wtf4, 5000, 3);
    GivePlayerMoney(playerid,Money3[playerid]);
    DestroyPickup(barre4);
    }
    else if(pickupid == barre5)
    {
    new wtf5[80];
    format(wtf5, sizeof(wtf5), "Du hast %d $ Gefunden",Money4[playerid]);
    GameTextForPlayer(playerid, wtf5, 5000, 3);
    GivePlayerMoney(playerid,Money4[playerid]);
    DestroyPickup(barre5);
    }

    }


    Frage: Wo Versteckt sich der Fehler ?
    Oder wie Kann ich es besser schreiben ?


    //edit
    Eben ausprobiert ich sterbe .. Verlier nur einen Geldbündel .. der den wert 95 $ Beträgt obwohl laut code ein Bündel gedropt werden soll wenn
    drop == 0 ist
    speicher dann den wert also kh1 = zufällige zahl bis 30 in Money[playerid]


    Wieso Speichert er 95 $ ?

    2 Mal editiert, zuletzt von Shikuto () aus folgendem Grund: Neu Verfasst