Твоей цели можно достичь 3 путями: 1) Используя плагин Fast Reload Weapon от wS. Я не знаю, как он работает, но ссылку кину. Попробуй разобраться.
http://world-source.ru/forum/118-3182-1
2) Можно каждые 0.5 секунды выдавать полную обойму игроку. Тема есть на выдачу патронов:
http://world-source.ru/forum/102-3390-1
Или такой плагин разбери
http://world-source.ru/forum/118-2946-1
3) Можно удалять оружие у игрока и выдавать новое (возможно, что по такому принципу действует Fast Reload Weapon):
Код
new index = GetPlayerWeaponSlot(client,1); // Получаем индекс оружия в 1 слоте (Primary) new String:weapon[64]; GetClientWeapon(client, weapon, sizeof(weapon)); //Получаем название оружия, чтобы потом его выдать if (IsValidEntity(index)) // Если это рабочий индекс, то { RemovePlayerItem(client,index); // Удаляем } GivePlayerItem(client, weapon); // Выдаем ему новое оружие
Сообщение отредактировал BarD - Четверг, 03.04.2014, 17:43:00
HookEvent("weapon_reload", weapon_reload); public weapon_reload(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid"));//Получаем айди игрока, который перезарядился new String:weapon[64]; GetClientWeapon(client, weapon, sizeof(weapon)); //Получаем название оружия в руках FakeClientCommand(client, "use weapon_knife"); //Переключаем его на нож FakeClientCommand(client, "use %s", weapon); //Переключаем обратно, тем самым сбрасывая перезарядку }
Есть еще вариант, блокировать команду на сервере, т.е. игрок пердает команду серверу, что он перезарежается, но сервер будет блокировтаь ее, я так думаю, просто не тестил, но работал с похожим, когда надо было забловировать стрельбу...
Код
public OnClientPutInServer(client) { SDKHook(client, SDKHook_PreThink, Hook_PreThinkPost); } public Hook_PreThinkPost(client) { if (client && IsClientConnected (client) && IsClientInGame (client) && IsPlayerAlive (client)) { new buttons = GetClientButtons(client); if((buttons & IN_RELOAD)) { buttons &= ~IN_RELOAD; SetEntProp(client, Prop_Data, "m_nButtons", buttons); } } }
Но эт оесли игрок будет жать перзарядку, а если автоперзярядка п оокнчанию патронов, то я в одном своем плагине следил такмером, за тем когда количество птароном в рожке станет 0 и делал код, в данном случае надо подумать исходя из того что требуется и что будет приемлемо допустить
Можно сделать так: HookEvent("weapon_reload", weapon_reload); public weapon_reload(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid"));//Получаем айди игрока, который перезарядился new String:weapon[64]; GetClientWeapon(client, weapon, sizeof(weapon)); //Получаем название оружия в руках FakeClientCommand(client, "use weapon_knife"); //Переключаем его на нож FakeClientCommand(client, "use %s", weapon); //Переключаем обратно, тем самым сбрасывая перезарядку }
А можно как-то отловить перезарядку оружия, которая производится без участия игрока? То есть когда игрок выпустил всю обойму и начинается перезарядка оружия. weapon_reload отлавливает сам факт нажатия кнопки перезарядки, но через него нельзя отловить автоматическую перезарядку.