Русское сообщество по скриптингу

Warehouse of useful code

Статьи или фрагменты кода для новичков и уже опытных скриптеров по Metamod.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по Metamod.

Warehouse of useful code

Сообщение Depresie » 06 май 2016, 20:33

Subject. I will begin.

Functions of receiving private data for Вы должны зарегистрироваться, чтобы видеть ссылки.:

Код: Выделить всё
const int XO_CBASEPLAYERWEAPON = 4;
const int XO_CBASEPLAYER = 5;

template <typename t>
inline t UTIL_GetPData(edict_t *pthis, int offset, int extraoffset = XO_CBASEPLAYER) {
#ifdef _WIN32
    return *((*)pthis->pvPrivateData + offset);
#else
    return *((*)pthis->pvPrivateData + offset + extraoffset);
#endif
}

inline edict_t *UTIL_GetPCBase(edict_t *pthis, int offset, int extraoffset = XO_CBASEPLAYER) {
#ifdef _WIN32
    void *pvPrivateData = *((void **)(uint32_t *)pthis->pvPrivateData + offset);
#else
    void *pvPrivateData = *((void **)(uint32_t *)pthis->pvPrivateData + offset + extraoffset);
#endif

    if (pvPrivateData != NULL) {
        char *pvData = (char *)pvPrivateData + getVirtualOffset(pev);

        if (pvData != NULL) {
            entvars_t *pEnt = *(entvars_t **)pvData;

            return pEnt == NULL ? NULL : pEnt->pContainingEntity;
        }
    }

    return NULL;
}

For example, get the player index in the event primary or secondary attack:

Код: Выделить всё
const int m_pPlayer = 41;

VIRTUAL_CALLBACK(void) SecondaryAttack_Handler(void *pEnt VIRTUAL_ARG) {
    VIRTUAL_CALL<void>(g_vhSecondaryAttack.getAddress(), pEnt);

    edict_t *pWeap = UTIL_PrivateToEdict(pEnt);
    edict_t *pPlayer = UTIL_GetPCBase(pWeap, m_pPlayer, XO_CBASEPLAYERWEAPON);
}
Аватара пользователя
Depresie
 
Сообщения: 14
Зарегистрирован: 24 фев 2016, 13:24
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5