Waffen fallen lassen(beim Tot), werfen, aufheben

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
  • Hey Guys,


    Habe mal folgende Idee gehabt:


    Wenn ein Player stirbt wird abgefragt welche Waffe er hat, und je nach dem wird dann die Objekt ID "created" aber am Fuß sozusagen, also bei x, y, z-1.5 oder so.


    Nur ist dieser Weg 1. bestimmt falsch:


    public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(GetPlayerWeapon(playerid) == 9)
    {
    CreateObject(Waffe 1 und so^^)
    }
    if(GetPlayerWeapon(playerid) == 10)
    {
    CreateObject(Waffe 2 und so^^)
    }
    if(GetPlayerWeapon(playerid) == 11)
    {
    .
    .
    .
    return 1;
    }



    2. Will ich irgendwie ne Var machen.


    Also das es so dann ist:
    Sobald eine neue Waffe "created" wird wenn ein Player stirbt, soll die Var +1 gehen.
    Aber mit "Var[1]" sozusagen ausgestattet werden.
    Aber das kriege ich nicht hin.


    Denn ich will 1. dass man nachher einfach irgendwie z.b. beim Restart alle Waffen mit Var[ALL_WEAPS] oder so weg machen kann.
    Und 2. Dass man damit abfragen kann, ob ein Player in der Nähe dieser Waffe ist, um den Text anzuzeigen und bei OnPlayerKeyStateChange abzufragen ob er in der Nähe ist.


    Um eine Waffe ggf. Aufzusammeln.
    Das mit dem Droppen, also seine Momentane Waffe weg werfen, wäre auch so eine Sache^^


    Aber das kommt dann später^^


    Würde mich über Hilfe sehr stark freuen!


    MfG
    GermanCy

  • such mal hier nach gdrop es ist eine include die sowas ermöglicht

  • Danke, habe es schon "umgeändert".
    Also keine drehenden Pickups, sondern Waffen die auf dem Boden liegen.


    Nur wie mache ich das jetzt, dass der die aufnimmt bzw. etwas passiert, wenn er in der nähe ist ?


    Denn bei Objekten geht OnPlayerPickupPickup mit sicherheit nicht mehr ^^


    Irgendwie die Position abfragen, und auch die der Waffen ?


    Ich habe keine Ahnung, sorry^^


    MfG
    GermanCy

  • Danke, super.


    Nur die Abfrage, kann ich die irgendwie so machen:


    Sobald ich in der Nähe einer liegenden Waffe bin, kommt nen Textdraw (mache ich)
    Aber nur nen Public der das abfragt ?
    Was dann passieren soll mache ich.
    Aber dazu sollte noch was passiert, wenn er nichtmehr in der Nähe ist.
    evtl. mit nem Timer, aber das mache ich dann.
    Also mit nem Timer, der dann checkt ob man in der Nähe ist.


    Und dann diese Abfrage noch für OnPlayerKeyStateChange ohne Timer^^


    Wäre WIRKLICH super!


    MfG
    GermanCy

  • Sieht richtig aus, nur ob das mit gundata so stimmt :o ?


    Und das selbe dann bei OnPlayerKeyStateChange wenn das mit gundata stimmt.


    Dann melde ich mich nochmal.

  • Jo, bloß gibt es ein Problem:


    Ich habe den hier:
    public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float:pPosX, Float:pPosY, Float:pPosZ;
    GetPlayerPos(playerid, pPosX, pPosY, pPosZ);
    //for(new i_slot = 0, gun, ammo; i_slot != 12; i_slot++)
    //{
    //GetPlayerWeaponData(playerid, i_slot, gun, ammo);
    //}
    new gun = GetPlayerWeapon(playerid);
    new ammo = GetPlayerAmmo(playerid);
    if(gun != 0 && ammo != 0)
    {
    CreateDroppedGun(gun, ammo, pPosX+random(2)-random(2), pPosY+random(2)-random(2), pPosZ);
    }
    //}
    return 1;
    }
    stock CreateDroppedGun(GunID, GunAmmo, Float:gPosX, Float:gPosY, Float:gPosZ)
    {
    new f = MAX_OBJ+1;
    for(new a = 0; a < MAX_OBJ; a++)
    {
    if(dGunData[a][ObjPos][0] == 0.0)
    {
    f = a;
    break;
    }
    }
    if(f > MAX_OBJ) return;
    dGunData[f][ObjData][0] = GunID;
    dGunData[f][ObjData][1] = GunAmmo;
    dGunData[f][ObjPos][0] = gPosX;
    dGunData[f][ObjPos][1] = gPosY;
    dGunData[f][ObjPos][2] = gPosZ;
    dGunData[f][ObjID] = CreateObject(GunObjects[GunID], dGunData[f][ObjPos][0], dGunData[f][ObjPos][1], dGunData[f][ObjPos][2]-1, 93.7, 120.0, random(360));
    return;
    }


    So, und wenn ich das mache.
    liegt die Waffe da.


    Wenn ich dann /dgun und dann /pgun mache, also picken, dann hebt er sie sozusagen auf.


    Doch wenn ich dann nur /pgun mache, nach dem Tod dann gehts nicht.
    Nur wenn ich /dgun (/dropgun) mache und dann /pgun.


    Habe schon geschaut, beim Spawn oder Death wird nichts ausgeführt, was diese Daten verändern könnte.


    pGun:
    f(strcmp(cmdtext, "/pickupgun", true) == 0
    || strcmp(cmdtext, "/pgun", true) == 0)
    {
    if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 1;
    new f = MAX_OBJ+1;
    for(new a = 0; a < MAX_OBJ; a++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, dGunData[a][ObjPos][0], dGunData[a][ObjPos][1], dGunData[a][ObjPos][2]))
    {
    f = a;
    break;
    }
    }
    if(f > MAX_OBJ) return SendClientMessage(playerid, 0x33AA3300, "You are not near the weapon which you can pick up!");
    DestroyObject(dGunData[f][ObjID]);
    GivePlayerWeapon(playerid, dGunData[f][ObjData][0], dGunData[f][ObjData][1]);
    dGunData[f][ObjPos][0] = 0.0;
    dGunData[f][ObjPos][1] = 0.0;
    dGunData[f][ObjPos][2] = 0.0;
    dGunData[f][ObjID] = -1;
    //dGunData[f][ObjData][0] = 0;
    dGunData[f][ObjData][1] = 0;
    new buffer[50];
    format(buffer, sizeof(buffer), "You picked up %s", GunNames[dGunData[f][ObjData][0]]);
    SendClientMessage(playerid, 0x33AA3300, buffer);
    return 1;
    }


    MfG
    GermanCy

    Einmal editiert, zuletzt von [COD5]GermanCy ()