←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

get_user_aiming dla enta

  • +
  • -
NiczegoWinien - zdjęcie NiczegoWinien 04.10.2019

Witam. Czy istnieje właśnie cos takiego tylko w wersji dla enta? Chodzi mi tylko aby pobrał id gracza bądź enta.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 04.10.2019

https://github.com/a...odx/amxmodx.cpp

Wpisz get_user_aiming i masz implementację tej funkcji. Teraz wystarczy przepisać ją po prostu do pluginu.
Odpowiedz

  • +
  • -
NiczegoWinien - zdjęcie NiczegoWinien 04.10.2019


get_user_aiming

 

Nie rozumiem do konca:

To:

static cell AMX_NATIVE_CALL get_user_aiming(AMX *amx, cell *params) /* 4 param */
{
    int index = params[1];

    if (index < 1 || index > gpGlobals->maxClients)
    {
        LogError(amx, AMX_ERR_NATIVE, "Invalid player id %d", index);
        return 0;
    }

    CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
    cell *cpId = get_amxaddr(amx, params[2]);
    cell *cpBody = get_amxaddr(amx, params[3]);

    REAL pfloat = 0.0f;

    if (pPlayer->ingame)
    {
        edict_t* edict = pPlayer->pEdict;

        Vector v_forward;
        Vector v_src = edict->v.origin + edict->v.view_ofs;

        ANGLEVECTORS(edict->v.v_angle, v_forward, NULL, NULL);
        TraceResult trEnd;
        Vector v_dest = v_src + v_forward * static_cast<float>(params[4]);
        TRACE_LINE(v_src, v_dest, 0, edict, &trEnd);

        *cpId = FNullEnt(trEnd.pHit) ? 0 : ENTINDEX(trEnd.pHit);
        *cpBody = trEnd.iHitgroup;

        if (trEnd.flFraction < 1.0)
        {
            pfloat = (trEnd.vecEndPos - v_src).Length();
        }
    } else {
        *cpId = 0;
        *cpBody = 0;
    }

    return amx_ftoc(pfloat);
}

 

Mam wpisac do pluginu?

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 04.10.2019

nie, bo tamto jest napisane w C

 

analogicznie zrób. Jak widzisz linie:

 Vector v_src = edict->v.origin + edict->v.view_ofs;

To pobierasz origin entity i view_ofs (patrz stałe pev_*)

Odpowiedz