Motorsäge + Object

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 Abend Breadfish,


    gibt es eine Möglichkeit abzufragen, ob einem Streamer Object mit einer Motorsäge "schaden" zugeführt wird?
    Hab schon was probiert:
    Wenn ich mit der Deagel auf den Baum schieße bekomm ich die Nachricht,
    wenn ich mit der Motorsäge dran schieße passiert nichts.
    public OnPlayerShootDynamicObject(playerid, weaponid, objectid, Float:x, Float:y, Float:z)
    {
    printf("Weaponid=%i",weaponid);
    for(new i;i<MAX_BÄUME;i++)
    {
    if(objectid==BaumInfo[i][BaumObj])
    {
    SendClientMessage(playerid,0xFFFFFFF,"Hited");
    }else{
    SendClientMessage(playerid,0xFFFFFFF,"Test");
    }
    }
    return 1;
    }


    Danke im Vorraus
    Helti

  • Hast du eventuell vergessen lagcomp auf 1 zusetzen in der Servercfg sonst wird das callback OnPlayerWeaponShot nicht aufgerufen oder in diesem Fall nur für Spielerobjekte
    OnPlayerShootDynamicObject


    //edit


    Mir ist aufgefallen das dies bei waffen, welche nicht schießen nicht aufgerufen wird daher müsstest du über OnPlayerKeyStateChange gehen und abfragen ob sich vor dir das objekt befindet


    //edit 2


    Wenn du es jedoch wirklich gescheit machen möchtest so erstellst du um jeden baum noch extra eine kleine runde Zone, somit kannst du abprüfen ob der Spieler mit der Säge auf den Baum zugeht und über
    OnPlayerEnterDynamicArea bekommst du die zonen id nun kannst du das objekt noch auslesen via Streamer_GetIntData(type, {Text3D,_}:id, data).



    So sparst du dir eine schleife die durch alle objekte geht und das dazugehörige array => geringerer Memoryverbrauch und geringere Serverbelastung




    public OnGameModeInit()
    {
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    AttachDynamicAreaToObject(CreateDynamicCircle(2041.47510, 1332.99463, 2.0), CreateDynamicObject(661, 2041.47510, 1332.99463, 9.53156, 0.00000, 0.00000, 0.00000));
    AttachDynamicAreaToObject(CreateDynamicCircle(2041.47510, 1342.99463, 2.0), CreateDynamicObject(661, 2041.47510, 1342.99463, 9.53156, 0.00000, 0.00000, 0.00000));
    return 1;
    }



    public OnPlayerUpdate(playerid)
    {
    new key[2];
    GetPlayerKeys(playerid,key[0],key[1],key[1]);
    if(key[0] & KEY_FIRE && GetPlayerWeapon(playerid) == 9){
    new Float:Pos[5];
    GetPlayerCameraPos(playerid, Pos[0], Pos[1], Pos[4]);
    GetPlayerCameraFrontVector(playerid, Pos[2], Pos[3], Pos[4]);
    if(IsPointInAnyDynamicArea((Pos[0] + floatmul(Pos[2],1.5)), (Pos[1] + floatmul(Pos[3], 1.5)), 0.0))
    SendClientMessage(playerid,-1,"Hit Baum");
    }
    return 1;
    }


    Helti