HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- (edict_s) Как достать Edict игрока ? (https://hlfx.ru/forum/showthread.php?threadid=3861)
Отправлено Andrei 26-03-2013 в 22:06:
(edict_s) Как достать Edict игрока ?
Здравствуйте. Мне нужен эдикт игрока,как его достать?
C++ Source Code:
1 | void UpdateClientData_Post(const struct edict_s *ent, int sendweapons, struct clientdata_s *cd) |
3 | edict_t* pEntity = const_cast< edict_t * >( ent ); |
5 | UTIL_ColorChat(0, " %d ", pEntity ); |
7 | cd->m_flNextAttack = gpGlobals->time + 0.001; |
9 | RETURN_META(MRES_IGNORED); |
Отправлено XaeroX 27-03-2013 в 03:51:
Цитата:
Andrei писал:
const struct edict_s *ent
А это что?__________________
Отправлено pRoxxx 27-03-2013 в 09:28:
Цитата:
XaeroX писал:
А это что?
Судя по этому
C++ Source Code:
UTIL_ColorChat(0, " %d ", pEntity ); |
Ему надо не Эдикт, а айди.
Отправлено XaeroX 27-03-2013 в 10:16:
pRoxxx
Он же написал, что ему нужен эдикт.
Когда понадобится айди - он так и напишет. Чего мы гадать будем?
__________________
Отправлено Andrei 27-03-2013 в 14:19:
pRoxxx,да вы правы. Извините.
Отправлено Дядя Миша 27-03-2013 в 16:11:
Цитата:
pRoxxx писал:
Судя по этому
C++ Source Code:
UTIL_ColorChat(0, " %d ", pEntity );
Ему надо не Эдикт, а айди.
Судя вот по этому, тут нужен не ID, а IQ.
Отправлено XaeroX 27-03-2013 в 16:37:
Как вариант - IDDQD.
__________________
Отправлено Andrei 27-03-2013 в 17:35:
Я не понимаю,объясните пожалуйста.
Мне просто нужно проверить тут значение v.iuser2
Я сохроняю режим в своем оружии в него и хочу в UpdatePostClient проверять,если он равен двум,я заблокирую UpdatePostClient
Отправлено Дядя Миша 27-03-2013 в 18:10:
Цитата:
Andrei писал:
Мне просто нужно проверить тут значение v.iuser2
Что мешает?
Отправлено Andrei 27-03-2013 в 18:19:
Ноль всегда возвращает.
C++ Source Code:
1 | void UpdateClientData_Post(const struct edict_s *ent, int sendweapons, struct clientdata_s *cd) |
3 | edict_t* pEntity = const_cast< edict_t * >( ent ); |
5 | UTIL_ColorChat(0, "%d", pEntity->v.iuser2); |
7 | cd->m_flNextAttack = gpGlobals->time + 0.001; |
9 | RETURN_META(MRES_IGNORED); |
Отправлено Дядя Миша 27-03-2013 в 18:38:
А покажи место, где ты пишешь в него ID.
Отправлено Andrei 27-03-2013 в 19:14:
Когда получаю оружие:
C++ Source Code:
1 | void CBaseWeapon::AddToPlayer( void *pPrivate1, void *pPrivate2 ) |
3 | edict_t* pWeapon = PrivateToEdict(pPrivate1); |
4 | edict_t* pEdict = PrivateToEdict(pPrivate2); |
6 | if(!IsValidPev(pWeapon) || !IsValidPev(pEdict)) |
8 | RETURN_META(MRES_IGNORED); |
11 | pWeapon->v.iuser2 = 25; |
13 | RETURN_META(MRES_IGNORED); |
Отправлено Дядя Миша 27-03-2013 в 19:19:
Так ты в оружие сохраняешь это число. А потом ищешь его у игрока?
Отправлено Andrei 27-03-2013 в 19:26:
Да,именно так. Я знаю,что это не верно. Поэтому мне по сути нужен эдикт,с которого я получу Entity оружия.
edict_t *pEntity = get_pdata_cbase(pPlayer, m_pActiveItem, XO_MONSTER);
UTIL_ColorChat(0, "%d", pEntity->v.iuser2);
Это работает в любой функции.
C++ Source Code:
1 | edict_t *get_pdata_cbase( edict_t *pEntity, int iOffset, int _linuxdiff = 5 ) |
13 | void *ptr = *((void **)((int *)pEntity->pvPrivateData + iOffset)); |
15 | return PrivateToEdict(ptr); |
В UpdateClientData какая-то проблема с этим эдиктом.
Может я не совсем верно доношу до вас мысль,но я думаю вы понимаете,что я хочу. Надеюсь на вашу помощь,дабы понять и не делать впреть таких глупых ошибок
Отправлено Дядя Миша 27-03-2013 в 20:41:
Нее, актив итем даст только текущую пушку в руках.
Перебирай массив m_rgpPlayerItems.