Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Отобрать Глок и USP

, Отобрать оружие в начале раунда
magiczoltrix
сообщение 21.10.2014, 14:43
Сообщение #1
Стаж: 12 лет

Сообщений: 234
Благодарностей: 22
Полезность: 0

Нужно отобрать в начале раунда Глок и USP пистолеты
Команда strip_user_weapons(id) отбирает всё оружие, но мне такое не надо.
Нужно проверить какой пистолет в руках (Глок или USP) и его отобрать.
Если другой пистолет - то отбирать не надо, только стандартные.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя KaJIbIBaH
сообщение 21.10.2014, 17:15
Сообщение #2


Стаж: 19 лет

Сообщений: 151
Благодарностей: 142
Полезность: 929

Как вариант:
Скрытый текст
Код:

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta_util>

public plugin_init()
{
register_plugin("Remove Standart Pistol", "0.1", "ropblHbl4")
RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
}

public player_spawn(id)
{
fm_strip_user_gun(id, CSW_GLOCK18)
fm_strip_user_gun(id, CSW_USP)

return PLUGIN_HANDLED
}


Но, по-моему, можно как-то заблокировать выдачу оружия (обсуждалось в теме про awp_india).
Если тебе не срочно нужна эта функция - лучше, поищи эту тему.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   + Цитировать сообщение
magiczoltrix
сообщение 21.10.2014, 17:18
Сообщение #3
Стаж: 12 лет

Сообщений: 234
Благодарностей: 22
Полезность: 0

Спасибо друг. Это то что надо!

А про способ заблокировать выдачу.... вообще первый раз слышу... как это??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя KaJIbIBaH
сообщение 21.10.2014, 17:37
Сообщение #4


Стаж: 19 лет

Сообщений: 151
Благодарностей: 142
Полезность: 929

Пожалуйста.
Я думал об этой теме, но там как раз то, чего ты просил не предлагать.
Ладно, юзай пока этот.
Если предложат лучше - перейдёшь.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Stimul1
сообщение 21.10.2014, 21:29
Сообщение #5


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

Код:
fm_strip_user_gun(id, CSW_GLOCK18)
fm_strip_user_gun(id, CSW_USP)

return PLUGIN_HANDLED

===>
Код:
if(get_user_weapon(id) == CSW_GLOCK)
fm_strip_user_gun(id, CSW_GLOCK18);

else if(get_user_weapon(id) == CSW_USP)
fm_strip_user_gun(id, CSW_USP);


В функциях хама нужно возвращать его значения:
Код:
#define HAM_IGNORED		1	/**< Calls target function, returns normal value */
#define HAM_HANDLED 2 /**< Tells the module you did something, still calls target function and returns normal value */
#define HAM_OVERRIDE 3 /**< Still calls the target function, but returns whatever is set with SetHamReturn*() */
#define HAM_SUPERCEDE 4 /**< Block the target call, and use your return value (if applicable) (Set with SetHamReturn*()) */

Но в данном случае, можно ничего не возвращать, компилятор сам это сделает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
magiczoltrix
сообщение 22.10.2014, 14:58
Сообщение #6
Стаж: 12 лет

Сообщений: 234
Благодарностей: 22
Полезность: 0

Не ясно почему, но функции
Код:
if(get_user_weapon(id) == CSW_GLOCK)
fm_strip_user_gun(id, CSW_GLOCK18);

else if(get_user_weapon(id) == CSW_USP)
fm_strip_user_gun(id, CSW_USP);

глючат и не всегда отбирают оружие....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 22.10.2014, 15:12
Сообщение #7


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(magiczoltrix @ 22.10.2014, 16:58) *
Не ясно почему, но функции
Код:
if(get_user_weapon(id) == CSW_GLOCK)
fm_strip_user_gun(id, CSW_GLOCK18);

else if(get_user_weapon(id) == CSW_USP)
fm_strip_user_gun(id, CSW_USP);

глючат и не всегда отбирают оружие....

потому что оружие может быть не в руках
в руках например нож может быть, а оружие в инвентаре
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
magiczoltrix
сообщение 22.10.2014, 15:40
Сообщение #8
Стаж: 12 лет

Сообщений: 234
Благодарностей: 22
Полезность: 0

Цитата(Legenda @ 22.10.2014, 18:12) *
потому что оружие может быть не в руках
в руках например нож может быть, а оружие в инвентаре


Согласен.
А как сделать чтобы указанное оружие отбиралось всегда?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 22.10.2014, 15:45
Сообщение #9


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

http://amxxmodx.ru/fakemeta/fakemeta_utili...p_user_gun.html
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
magiczoltrix
сообщение 22.10.2014, 16:22
Сообщение #10
Стаж: 12 лет

Сообщений: 234
Благодарностей: 22
Полезность: 0

Цитата(Legenda @ 22.10.2014, 18:45) *


Там используется эта же функция fm_strip_user_gun
и нет оговорок в руках это оружие или не в руках, оно всегда должно отбираться
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 22.10.2014, 17:17
Сообщение #11


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(magiczoltrix @ 22.10.2014, 18:22) *
Там используется эта же функция fm_strip_user_gun
и нет оговорок в руках это оружие или не в руках, оно всегда должно отбираться

ты же сам написал

if(get_user_weapon(id) == CSW_GLOCK)

это что по твоему?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Stimul1
сообщение 22.10.2014, 17:22
Сообщение #12


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

Код:
if(get_user_weapon(id) == CSW_GLOCK)
fm_strip_user_gun(id, CSW_GLOCK18);

else if(get_user_weapon(id) == CSW_USP)
fm_strip_user_gun(id, CSW_USP);
===>Код:
if(user_has_weapon(id, CSW_GLOCK))
fm_strip_user_gun(id, CSW_GLOCK18);

else if(user_has_weapon(id, CSW_USP))
fm_strip_user_gun(id, CSW_USP);

Что-то я вообще.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 22.10.2014, 21:01
Сообщение #13


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Stimul1,
Вроде у хама есть форвард, который вызывается при присоединении чего-то к игроку. Там то ли название энтити, то ли уже айди самого оружия можно получить. AttachToPlayer, вроде. Ну, и заблочить это действие. Но я могу ошибаться.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 22.10.2014, 21:19
Сообщение #14
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(AndrewZ @ 22.10.2014, 23:01) *
Stimul1,
Вроде у хама есть форвард, который вызывается при присоединении чего-то к игроку. Там то ли название энтити, то ли уже айди самого оружия можно получить. AttachToPlayer, вроде. Ну, и заблочить это действие. Но я могу ошибаться.


Ну хоть кто-то догадался, вернее пошел в правильном направлении =) Ham_Touch надо юзать и в нём же удалять энтитю.

Ток перед удалением энтити и суперсайдом, поверку не забудьте if (pev(weapon_ent, pev_spawnflags) & FL_KILLME) и на коннект предварительно надо проверить.

Отредактировал: SISA, - 22.10.2014, 21:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя KaJIbIBaH
сообщение 23.10.2014, 17:27
Сообщение #15


Стаж: 19 лет

Сообщений: 151
Благодарностей: 142
Полезность: 929

Тогда попробуйте такую штуку:
Скрытый текст
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

new HamHook:g_fwTouchPist[2]

public plugin_init()
{
register_plugin("Remove Standart Pistol", "0.2", "ropblHbl4")

RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Pre", 0)
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
g_fwTouchPist[0] = RegisterHam(Ham_Touch, "weapon_glock18", "fw_PlayerTouchPistol")
g_fwTouchPist[1] = RegisterHam(Ham_Touch, "weapon_usp", "fw_PlayerTouchPistol")
}

public fw_PlayerSpawn_Pre(id)
{
EnableHamForward(g_fwTouchPist[0])
EnableHamForward(g_fwTouchPist[1])
}

public fw_PlayerSpawn_Post(id)
{
DisableHamForward(g_fwTouchPist[0])
DisableHamForward(g_fwTouchPist[1])
}

public fw_PlayerTouchPistol(weapon_ent, id)
{
if( !is_user_connected(id) )
return HAM_SUPERCEDE

if( pev(weapon_ent, pev_spawnflags) & FL_KILLME )
remove_entity(weapon_ent)

return HAM_SUPERCEDE
}


По сравнению с версией, которая выше,
+ не появляется оранжевый прямоугольник с изображением пистолета (т.е. теперь нет ощущение, что тебя обманули - выдали пистолет, а его нет).
- скорее всего будет баг: если одновременно [кто-то родится (spawn)] и [ты попытаешься купить/подобрать glock/usp] - у тебя, по идее, не получится купить/поднять. Поэкспериментируйте, кому не лень.

Отредактировал: KaJIbIBaH, - 23.10.2014, 17:27
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: