Waffe nach Tod als CreatePickup

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

  • public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float: Tod_X, Float: Tod_Y, Float: Tod_Z, waffe;
    GetPlayerPos(playerid, Tod_X, Tod_Y, Tod_Z);
    waffe = GetPlayerWeapon(playerid);
    CreatePickup(GetWeaponPickup(waffe), 1, Tod_X, Tod_Y, Tod_Z, GetPlayerVirtualWorld(playerid));
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du musst aber dann noch zu der Abfrage von hav0K das Pickup loeschen und dem Spieler die Waffe geben. Versuch aber mal bitte ob nicht doch der Pickup Type 2 den Trick tut. Wenn nicht, dann musst Du wohl oder uebel die Pickups in einem Array speichern und sagen was fuer ein Inhalt sich in dem Pickup befindet (welche Waffe). Anders kannst Du nicht rausfinden, was fuer eine Art von Pickup der Spieler gerade aufgehoben hat bzw. aufheben will.

  • wie hast du es gefixt ich baue es mir grade auch ^^

    Ich habe am Code eigentlich nicht geändert:


    new Float: Tod_X, Float: Tod_Y, Float: Tod_Z, waffe; GetPlayerPos(playerid, Tod_X, Tod_Y, Tod_Z); waffe = GetPlayerWeapon(playerid); CreatePickup(GetWeaponPickup(waffe), 1, Tod_X, Tod_Y, Tod_Z, GetPlayerVirtualWorld(playerid));

    Du musst aber dann noch zu der Abfrage von hav0K das Pickup loeschen und dem Spieler die Waffe geben. Versuch aber mal bitte ob nicht doch der Pickup Type 2 den Trick tut. Wenn nicht, dann musst Du wohl oder uebel die Pickups in einem Array speichern und sagen was fuer ein Inhalt sich in dem Pickup befindet (welche Waffe). Anders kannst Du nicht rausfinden, was fuer eine Art von Pickup der Spieler gerade aufgehoben hat bzw. aufheben will.

    Mir stellt sich die Frage, die Waffe wird ja mit einer gewissen Schusszahl liegengelassen durch den tod, wie gebe ich die Schusszahl an den Spieler, welcher die Waffe aufhebt und soll ich lieber eine [MAX_PLAYERS] variable machen für das CreatePickup oder eine für alle Spieler?



    EDIT:::


    Ich habe die WaffenID mit einem SetPVarInt gespeichert und mit GetPVarInt ausgegeben - funktioniert auch.
    Mit den Schuss bin ich noch nicht weiter.


    Habe eine Variable für alle erstellt new WaffedurchTod;

    Mit freundlichen Grüßen,
    Dachdecker

    Einmal editiert, zuletzt von Dachdecker ()

  • Ich wuerde das so machen: In OnPlayerDeath noch neben der Waffen ID die Munition des Spielers abspeichern. Dann erstellst Du Dir ein globales Array meinetwegen wie folgt:



    #define MAX_WEAPON_PICKUPS 300


    enum t_WeaponPickups
    {
    WeaponPickupID,
    WeaponPickupWeaponID,
    WeaponPickupAmmo
    };


    new WeaponPickups[MAX_WEAPON_PICKUPS][t_WeaponPickups];


    Jetzt iterierst Du in OnPlayerDeath durch das Array WeaponPickups und wenn ein Eintrag mit "WeaponPickupID == 0" gefunden wurdest, kannst Du in diesen Index die ID des erstellten Pickups schreiben, die Waffe und die Ammo. Danach die Schleife direkt unterbrechen, damit nicht das mehrmals ausgefuehrt wird - sondern nur, wenn WeaponPickupID == 0 ist bei einem Slot.


    Bei OnPlayerPickUpPickup iterierst Du ebenfalls durch Dein WeaponPickups Array und wenn er die "pickupid == WeaponPickupID" hat, dann liest Du aus dem Index die Weapon ID und die Ammo aus und gibst dem Spieler mit GivePlayerWeapon die Waffe. Aber loesch das Pickup und setze die Indexe auf 0 zurueck, damit der Platz frei wird fuer ein neues Pickup in OnPlayerDeath. Sonst laeuft das Array ja voll und irgendwann gibts nach 300 Pickups keine mehr weil das Array voll ist.

  • Okei, 2 Fragen: Wie unterbreche ich eine schleife und wie komme ich an die Ammo der Waffe?

    Mit freundlichen Grüßen,
    Dachdecker

  • Mit break; brichst Du nur die Schleife ab und der Code ausserhalb der Schleife wird fortgefuehrt. Mit return; brichst Du die Schleife und die Funktion, in der die Schleife laeuft ab. Ammo: [wiki]GetPlayerAmmo[/wiki]


  • public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float: Tod_X, Float: Tod_Y, Float: Tod_Z, waffe,ammo;
    GetPlayerPos(playerid, Tod_X, Tod_Y, Tod_Z);
    waffe = GetPlayerWeapon(playerid);
    SetPVarInt(playerid, "waffenid",waffe);
    ammo = GetPlayerAmmo(playerid);
    SetPVarInt(playerid, "ammmo", ammo);
    WaffendurchTot = CreatePickup(GetWeaponPickup(waffe), 1, Tod_X, Tod_Y, Tod_Z, GetPlayerVirtualWorld(playerid));
    return 1;
    }


    if( GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DUCK )
    {
    DestroyPickup(WaffendurchTot);
    new waffe = GetPVarInt(playerid,"waffenid"),
    ammo = GetPVarInt(playerid,"ammmo");
    GivePlayerWeapon(playerid, waffe, ammo);
    }

    Mit freundlichen Grüßen,
    Dachdecker