Иконка ресурса

Vip drop take block 1.5

Нет прав для скачивания
Сообщения
273
Реакции
424
Помог
5 раз(а)
Sonyx, Я к нему ещё не привык в основном на C++ пишу. А так поправлю.
13 Дек 2018
Sonyx, Не получится без engine
Код:
register_touch("weaponbox", "player", "fwdTouchWeaponBox");
 
Сообщения
1,697
Реакции
1,510
Помог
25 раз(а)
bionext, хам используй. Ибо в энжин модуле там цикл по всем хукам, а не просто хук.
 
Сообщения
2,750
Реакции
3,013
Помог
61 раз(а)
Код:
register_touch("weaponbox", "player"...
Вообще, игрок поднять оружие может только когда оно FL_ONGROUND, но вариант с таймаутом мне больше нравится. Быть может, чтобы лишний раз флаги не дергать (достаточно залогировать) - было бы уместно распределить порядок проверок и внести на лежащее на земле.
 
Сообщения
1,275
Реакции
2,257
Помог
57 раз(а)
Код:
	/*
	* Description:      The player is touching a CBasePlayerItem, do I give it to him?
	* Return type:      BOOL
	* Params:           (const index, const item)
	*/
	RG_CSGameRules_CanHavePlayerItem
В коде RG_CSGameRules_CanHavePlayerItem хукается в Pre. Оно случаем не будет "метить" лежащее на земле оружие, к которому будет прикасаться игрок, при том, что он не может это самое оружие поднять? Я просто не в курсе, когда этот хук относительно "соседей по цепочке" вызывается (не кидайте какахами).

Автор тестил, и ему виднее. Но если я прав, то надо на Post с проверкой результата заменить, или на RG_CBasePlayer_AddPlayerItem
 
Последнее редактирование:
Сообщения
273
Реакции
424
Помог
5 раз(а)
BlackSignature, wopox1337, Оружие добавляемое игроку из меню плагина или при покупке добавляется игроку через GiveNamedItem->DispatchSpawn-> DispatchTouch, для того чтобы пометить оружие как вип нам нужен хук в котором присутствует и edict игрока и edict оружия, DispatchTouch подошел бы если бы не являлся внутренним вызовом в dll который через register_touch мы не отловим, но вот в CBasePlayerItem::DefaultTouch который идёт для всего оружия по умолчанию существует проверка anHavePlayerItem в котором присутствует и edict игрока и edict оружия( то что надо) где мы и помечаем оружие соответствующим флагом, а потом оно просто переписывается между игроками и weponboxами. Проверку на флаг мы осуществляем в момент Touch weaponbox в функции pre, и если он есть то блочим его. Вот как-то так, при наличии исходников провести такой анализ не сложно. Честно говоря я с начала сам сомневался, что удастся обойтись внешним плагином не дорабатывая чужой код:smile3:
14 Дек 2018
Код:
register_touch("weaponbox", "player"...
Вообще, игрок поднять оружие может только когда оно FL_ONGROUND, но вариант с таймаутом мне больше нравится. Быть может, чтобы лишний раз флаги не дергать (достаточно залогировать) - было бы уместно распределить порядок проверок и внести на лежащее на земле.
Согласен, но если мы так сделаем, то не отловим момент когда вип стоя вплотную к игроку скинет ему оружие.
14 Дек 2018
Код:
    /*
    * Description:      The player is touching a CBasePlayerItem, do I give it to him?
    * Return type:      BOOL
    * Params:           (const index, const item)
    */
    RG_CSGameRules_CanHavePlayerItem
В коде RG_CSGameRules_CanHavePlayerItem хукается в Pre. Оно случаем не будет "метить" лежащее на земле оружие, к которому будет прикасаться игрок, при том, что он не может это самое оружие поднять? Я просто не в курсе, когда этот хук относительно "соседей по цепочке" вызывается (не кидайте какахами).

Автор тестил, и ему виднее. Но если я прав, то надо на Post с проверкой результата заменить, или на RG_CBasePlayer_AddPlayerItem
CanHavePlayerItem вызывается только из CBasePlayerItem::DefaultTouch который вызывается через непосредственный контакт игрока с оружием(но на земле оно никогда не бывает, только в weponbox), либо через DispatchTouch который вызывается из GiveNamedItem, а вот GiveNamedItem вызывается из Touch weaponbox только при добавлении гранат и то помечен как баг:smile3:
Код:
if (playerGrenades < maxGrenades && grenadeName)
                    {
                        // CRITICAL BUG: since gives a new entity using GiveNamedItem,
                        // but the entity is packaged in a weaponbox still exists and will never used or removed. It's leak!
                        // How reproduced: Drop your grenade on the ground, check output of command `entity_dump`,
                        // there we will see only get one grenade. Next step - pick it up, do check again `entity_dump`,
                        // but this time we'll see them x2.

                        bEmitSound = true;
                        pPlayer->GiveNamedItem(grenadeName);

                        // unlink this weapon from the box
                        pItem = m_rgpPlayerItems[i]->m_pNext;
                        m_rgpPlayerItems[i] = pItem;
                        continue;
                    }
14 Дек 2018
Впрочем сейчас я разрабатываю обновление с сообщениями и спрайтами.
 
Сообщения
2,750
Реакции
3,013
Помог
61 раз(а)
момент когда вип стоя вплотную к игроку скинет ему оружие.
Кинет и не поймает.
Оружие можно поднять ТОЛЬКО когда лежит на земле. В полете оно не подымется, более того, тач вызывается даже когда сам игрок своей оружие выкидывает.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
wopox1337, Сорри забыл:smile3:
Код:
void CWeaponBox::__MAKE_VHOOK(Touch)(CBaseEntity *pOther)
{
    if (!(pev->flags & FL_ONGROUND))
    {
        return;
    }
 
Сообщения
1,275
Реакции
2,257
Помог
57 раз(а)
bionext, Можно было просто написать русским языком, что RG_CSGameRules_CanHavePlayerItem вызывается только при выдаче, а RG_CBasePlayer_AddPlayerItem ещё и при пикапе с земли. Мне бы вполне хватило и этого. При таком поведении, да, текущий вариант использовать логичнее. :)
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
BlackSignature, Это я для себя на память расписал:smile3:
 
Сообщения
83
Реакции
42
Помог
1 раз(а)
Было бы не плохо ещё сделать подсветку оружия которое нельзя поднять. Если это возможно.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
tenseus, скоро апгрейд там спрайт VIP будет.
 
Сообщения
1,536
Реакции
2,324
Помог
39 раз(а)
Было бы интереснее увидеть реализацию, когда такое выпавшее оружие скрывается из виду для тех, кто не может его поднять. И остаётся видно тем, кто может.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
Tranquillity, addtofullpack на amxx напряжно для сервера будет.
15 Дек 2018
Tranquillity, хотя надо сделать оба варианта, пускай народ сам выбирает что хочет.
 
Сообщения
32
Реакции
3
Предупреждения
100
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
bionext, #define VIP_MODEL "models/vip.mdl" // Модель метка Vip оружия
А тут нужно каждое вип оружие пробивать? и в какой последовательности?
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
nevzorov77, это путь к модели которая будет висеть над вип оружием, модель находится в архиве с плагином, копируется в папку cstrike\models. Вип оружием считается всё купленное или полученное из меню, вип игроком, оружие.
 
Последнее редактирование:
Сообщения
32
Реакции
3
Предупреждения
100
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу