Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

get_user_aiming dla enta


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 NiczegoWinien

    Wszechpomocny

  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:334
  • Lokalizacja:No Disc
Offline

Napisano 04.10.2019 06:24

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

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 04.10.2019 06:41

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

Wpisz get_user_aiming i masz implementację tej funkcji. Teraz wystarczy przepisać ją po prostu do pluginu.
  • +
  • -
  • 0

#3 NiczegoWinien

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:334
  • Lokalizacja:No Disc
Offline

Napisano 04.10.2019 15:25


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?


  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 04.10.2019 16:37

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_*)


  • +
  • -
  • 1




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych