Beiträge von JustMe.77

    Hi, habe ein kleines Problem beim hooken von Functions, könnt ihr da eventuell weiterhelfen, @Kaliber oder @Jeffry ? (Die anderen natürlich auch)


    Habe versucht CreateVehicle zu hooken, es schaut aktuell so aus:



    stock CreateVehicleEx(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0)
    {
    if(CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren))
    {
    new veh = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay, addsiren);
    SetVehicleHealth(veh, MAX_VEHICLEHEALTH);
    return 1;
    }
    return 0;
    }



    #if defined _ALS_CreateVehicle
    #undef CreateVehicle
    #else
    #define _ALS_CreateVehicle
    #endif

    #define CreateVehicle CreateVehicleEx


    Das Problem:


    Spawne ich ein Fahrzeug, so wird 2 mal CreateVehicle aufgerufen (einmal die originale Funktion und dann meine abgeänderte Version)
    Wo liegt das Problem? Habe doch ein return 1; bei meiner Funktion hinzugefügt, normalerweise müsste er dort ja aufhören..

    Edit:


    Habe noch eine Frage:


    Ich muss die Spieler ID und den Namen auch außerhalb der Funktionen benutzen, wie soll ich das am besten machen?
    Benötige da einmal ein kleines Beispiel, aber bitte ohne PVars, die möchte ich vermeiden :)


    Beispiel:



    CMD:startspec(playerid,params[])
    {
    new target;
    if(sscanf(params,"u",target))
    return SendClientMessage(playerid, -1,"Use: /spectest {FF0000}<ID/Name>");



    if(!IsPlayerConnected(target)) return
    SendClientMessage(playerid, -1, "The player is not connected");



    if(textdrawscreated[playerid] == 0)
    {
    CreateSpectateTextDraws(playerid);
    textdrawscreated[playerid] = 1;
    }



    ShowSpectateTextDraws(playerid);
    SelectTextDraw(playerid, 0x00FF00FF);
    updatetargetinfo[playerid] = SetTimerEx("GetTargetSpecData", 500, 1, "i", playerid);
    SendClientMessage(playerid, -1, "Started spectating");
    return 1;
    }

    Das mit dem Heal / Armour hatte ich schon, egal :P


    Das scheint sich irgendwie nicht zu aktuallisieren bzw. es zeigt immer On Foot an, woran liegt's ?


    Aktuelle Code




    forward GetTargetSpecData(playerid, target);
    public GetTargetSpecData(playerid, target)
    {



    new str[128], Float:pHealth, Float:pArmour, Float:vehiclehealth, model;

    new veh = GetPlayerVehicleID(target);
    GetVehicleHealth(veh, vehiclehealth);
    GetPlayerHealth(target, pHealth);
    GetPlayerArmour(target, pArmour);




    format(str, sizeof(str),"%s (%d)", GetName(target), target);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][4], str);



    format(str, sizeof(str),"%.1f", pHealth);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][6], str);



    format(str, sizeof(str),"%.1f", pArmour);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][7], str);




    if(400 <= model <= 611)
    {
    GetVehicleHealth(veh, vehiclehealth);
    format(str, sizeof(str),"%s (%d)", VehicleNames[model - 400], vehiclehealth);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], str);
    print("in vehicle");
    }
    else
    {
    print("on foot");
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], " On foot");
    }




    format(str, sizeof(str),"%s (%d)", GetWeaponNameEx(GetPlayerWeapon(target)), GetPlayerAmmo(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][11], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][13], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target)); //REPLACE WITH YOUR FPS FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][14], str);



    format(str, sizeof(str),"%0.2f", GetPlayerPacketLoss(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][15], str);



    return 1;
    }


    Habe mal prints gesetzt, es wird nur on foot aufgerufen. Muss ich das ganze per OnPlayerEnterVehicle lösen oder geht's auch anders?

    Das Problem mit der Health / Armour Anzeige ist nun behoben, danke.


    Wie genau soll ich denn Abfragen ob die Vehicle ID valid ist, @XeroX ?


    Bei meinem Car Befehl mache ich folgendes um das Problem zu umgehen:



    if(model < 400 || model > 611) return SendClientMessage(playerid, COLOR_RED, "ERROR: Fahrzeug ID nur von 400-611 verfügbar..");


    So geht's aber bei meinen TextDraws nicht, muss das irgendwie anders schreiben :/

    Yo, hab mal 2 kleine Fragen:


    Ich frage Informationen von Spieler ab, doch es treten folgende Probleme auf:



    forward GetTargetSpecData(playerid, target);
    public GetTargetSpecData(playerid, target)
    {



    new str[128], Float:pHealth, Float:pArmour, Float:vehiclehealth, model;
    // new veh = GetPlayerVehicleID(target);



    format(str, sizeof(str),"%s (%d)", GetName(target), target);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][4], str);



    format(str, sizeof(str),"%.1f", GetPlayerHealth(target, pHealth));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][6], str);



    format(str, sizeof(str),"%.1f", GetPlayerArmour(target, pArmour));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][7], str);



    // format(str, sizeof(str),"%s (%d)", VehicleNames[model - 400], GetVehicleHealth(veh, vehiclehealth));
    // PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], str);



    format(str, sizeof(str),"%s (%d)", GetWeaponNameEx(GetPlayerWeapon(target)), GetPlayerAmmo(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][11], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][13], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target)); //REPLACE WITH YOUR FPS FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][14], str);



    format(str, sizeof(str),"%0.2f", GetPlayerPacketLoss(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][15], str);




    }


    1) Armour und Health gibt immer 0.0 zurück, obwohl ich beispielsweise 100 HP habe.
    2) Ich krieg folgende Error wenn ich den Teil von VehicleNames auskommentiere:


    [05:11:32] [debug] Run time error 4: "Array index out of bounds"
    [05:11:32] [debug] Accessing element at negative index -400
    [05:11:32] [debug] AMX backtrace:
    [05:11:32] [debug] #0 000077e8 in public GetTargetSpecData (playerid=0, target=0) at C:\Users\David\Desktop\BattleArena\filterscripts\spectate.pwn:88


    Wenn ich mein Fahrzeug mit der Funktion erstelle, funktioniert das problemlos..

    Hi, du musst folgende Plugins / Include updaten:


    • sscanf
    • MapAndreas
    • Streamer


    Lad alle hier unten verlinkten Includes / Plugins runter:


    sscanf Downloadlink
    MapAndreas Downloadlink (Updated Version)

    Streamer Downloadlink



    • Entpack die Dateien und verschieb alle Plugins in den Plugins Ordner
    • Kopiere alle Includes in den pawno/include/.. Ordner hinein
    • Öffne dein Gamemode und compile es
    • Öffne deine server.cfg und trag alle Plugins unter Plugins ein
    • Restarte dein Server :)