Добрый вечер. Суть такова: мне нужно каким-то чудом "эмулировать" подбирание оружия у игрока. Сейчас я просто регистрирую ham на touch, проверяю все условия и делаю drop_to_floor(<индекс энтити оружия>). И оно-то вроде работает, но если, например, брать оружие грабом, или если игрок стоит на самом краю, то это не лучший вариант: граб постоянно перемещает его к прицелу, а в ham'е его обратно дропают на землю; а если человек на краю - то оружие и вовсе tp на пол (то есть еще ниже, чем игрок).
Я попытался найти какой-нибудь ham, чтобы сделать подбор оружия игроку через ExecuteHamB, но ничего толкового не нашел. Можно, конечно, немного скостылить и просто выдавать игроку оружие (через fakemeta или что еще), но тогда по идее патроны в обойме тоже будут ставится по новому (ну а даже если делать кучу функций на получение патрон у энтити, то код будет ну уж слишком большим). И-так, суть вопроса: как мне при касании сразу выдавать оружие игроку, при этом сохраняя кол-во патронов в обойме?
За код ничего писать не нужно - я пока просто играюсь и смотрю на результат "а что если". Но вот небольшое пояснение:
iWeaponsId - массив, где будут хранится weapon-индексы всех оружий у игрока.
bHaveWeapon - флаг (я знаю, что в коде он интовый), который указывает на то есть у игрока уже это оружие или нет.
iBitWeapons - битсумма, которая хранит в себе битовую сумму оружий игрока (трудно объяснить)
iWpnID - переменная, которая хранит в себе weapon-индекс энтити
fGameTime - get_entvar(iEntity, var_iuser3) > 0.2 - я отлавливаю момент выкидывания оружия и устанавливаю ему в var_iuser3 время (чтобы игрок не подбирал его моментально обратно)
Вроде все. Надеюсь на любую помощь! Хотя бы статейку!!!
Я попытался найти какой-нибудь ham, чтобы сделать подбор оружия игроку через ExecuteHamB, но ничего толкового не нашел. Можно, конечно, немного скостылить и просто выдавать игроку оружие (через fakemeta или что еще), но тогда по идее патроны в обойме тоже будут ставится по новому (ну а даже если делать кучу функций на получение патрон у энтити, то код будет ну уж слишком большим). И-так, суть вопроса: как мне при касании сразу выдавать оружие игроку, при этом сохраняя кол-во патронов в обойме?
Код:
new iWeaponsId[32], iNum;
get_user_weapons(iTouched, iWeaponsId, iNum);
static bHaveWeapon;
bHaveWeapon = false;
new iBitWeapons = pev(iTouched, pev_weapons);
new iWpnID = rg_get_weaponbox_id(iEntity);
if((iBitWeapons & (1<<CSW_GLOCK18|1<<CSW_USP|1<<CSW_P228|1<<CSW_DEAGLE|1<<CSW_ELITE|1<<CSW_FIVESEVEN) && (1<<iWpnID) & (1<<CSW_GLOCK18|1<<CSW_USP|1<<CSW_P228|1<<CSW_DEAGLE|1<<CSW_ELITE|1<<CSW_FIVESEVEN)) ||
(iBitWeapons & (1<<CSW_M3|1<<CSW_XM1014|1<<CSW_MAC10|1<<CSW_TMP|1<<CSW_MP5NAVY|1<<CSW_UMP45|1<<CSW_P90|1<<CSW_GALIL|1<<CSW_FAMAS|1<<CSW_AK47|1<<CSW_M4A1|1<<CSW_SCOUT|1<<CSW_SG552|1<<CSW_AUG|1<<CSW_AWP|1<<CSW_G3SG1|1<<CSW_SG550|1<<CSW_M249) &&
(1<<iWpnID) & (1<<CSW_M3|1<<CSW_XM1014|1<<CSW_MAC10|1<<CSW_TMP|1<<CSW_MP5NAVY|1<<CSW_UMP45|1<<CSW_P90|1<<CSW_GALIL|1<<CSW_FAMAS|1<<CSW_AK47|1<<CSW_M4A1|1<<CSW_SCOUT|1<<CSW_SG552|1<<CSW_AUG|1<<CSW_AWP|1<<CSW_G3SG1|1<<CSW_SG550|1<<CSW_M249))) bHaveWeapon = true;
static Float: fGameTime;
fGameTime = get_gametime();
if(!bHaveWeapon && !(pev(iEntity, pev_flags) & FL_ONGROUND) && fGameTime - get_entvar(iEntity, var_iuser3) > 0.2) drop_to_floor(iEntity);
iWeaponsId - массив, где будут хранится weapon-индексы всех оружий у игрока.
bHaveWeapon - флаг (я знаю, что в коде он интовый), который указывает на то есть у игрока уже это оружие или нет.
iBitWeapons - битсумма, которая хранит в себе битовую сумму оружий игрока (трудно объяснить)
iWpnID - переменная, которая хранит в себе weapon-индекс энтити
fGameTime - get_entvar(iEntity, var_iuser3) > 0.2 - я отлавливаю момент выкидывания оружия и устанавливаю ему в var_iuser3 время (чтобы игрок не подбирал его моментально обратно)
Вроде все. Надеюсь на любую помощь! Хотя бы статейку!!!