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

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

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

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

2 страниц V   1 2

Модуль Hamsanwich ( ЧАСТЬ 2) :)

, Блокирование игровых событий
Empower
сообщение 19.2.2009, 16:46
Сообщение #1
Стаж: 17 лет

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

Читайте эту тему только если вы освоили Модуль Hamsandwich ( Часть 1) :), иначе врядли сможете понять что здесь к чему...

Возьмем рассмотрим любой зомби мод, как вы думаете так там сделали, что когда зомби режет челевека то он не умирает, и даже не теряет здоровье, веть в коде кс прописано именно так... Наверно, вы уже догадались, по название темы, что это делается с помощью Hamsandwich. Дело в том, что этот модуль может не только отслеживать игровые события но и блокировать их, заменять их вашими.. Щяс а вам покажу как это делать:

Сделаем небольшой плагин. Суть плагина: с этим плагином когда стреляют в админа у него не снимается хп...( проще сказть god для админа)
Код
#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
    register_plugin("Admin GOD","1.0","Empower");
    
    RegisterHam(Ham_TakeDamage, "player", "block_hp");
}

public block_hp(jertva, orujie, killer, uron)
{
          // ЗДЕСЬ БУДЕМ ПИСАТЬ КОД ДАЛЬШЕ
}
Мы зарегистрировали событие - урон это Ham_TakeDamage, думаю все тонкости такого дела вы уже знаете с Модуль Hamsandwich ( Часть 1) :).Так что дальше:



Код
#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
    register_plugin("Admin GOD","1.0","Empower");
    
    RegisterHam(Ham_TakeDamage, "player", "block_hp");
}

public block_hp(jertva, orujie, killer, uron)
{
    if(is_user_admin(jertva)) // если жертва админ
        return HAM_SUPERCEDE; // заблокировать событие урона

    return HAM_IGNORED; // в другом случае сделать все нормально как в кс
}

Вот и все! так то просто. Надо запомните всего то 2 процедурки:

return HAM_SUPERCEDE - Полностью блокирует событие, здесь ето урон.

return HAM_IGNORED - Продолжить выполнение события в нормально режиме (как сделали в кс разработчики).

Приятного использование!!! good.gif
Если вам помогло - кликните на спасибки!!

Отредактировал: Empower, - 17.3.2009, 21:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 25 раз
   Цитировать сообщение
Fedcomp
сообщение 19.2.2009, 16:56
Сообщение #2
Стаж: 17 лет

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

Как ты все просто и подробно объясняешь :)
Напиши полный список ловушек hamsandswitch
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GUNNER
сообщение 19.2.2009, 18:27
Сообщение #3


Стаж: 19 лет

Сообщений: 522
Благодарностей: 201
Полезность: 635

А можно ли применять событие Ham_TakeDamage к определенному объекту (entity) или же это применимо только к игрокам?
Допустим игрок стреляет по определенному объекту. Будет ли в таком случае срабатывать функция block_hp если все записать как в приведенном плагине?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 19.2.2009, 18:55
Сообщение #4
Стаж: 17 лет

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

Цитата
Напиши полный список ловушек hamsandswitch

он есть здесь Модуль Hamsandwich ( Часть 1) :) там самые основные. Написать все? хотя врядли ты теми другими(не основными) хоть раз возпользуешся:) И еще говори не ловушки, а события или ивенты ато мне тя трудновато понять =)

Цитата
А можно ли применять событие Ham_TakeDamage к определенному объекту (entity) или же это применимо только к игрокам?
Допустим игрок стреляет по определенному объекту. Будет ли в таком случае срабатывать функция block_hp если все записать как в приведенном плагине?

конешно можна... но токо к func_breakable(они могут принимать урон)... или к зделаным другими плагинами обектов например: func_rope, lasermine и т д... просто пока я не обяснил ентити про них писать не буду ибо народ не поймёт, может запутатса :)
В плагине вместо player напиши нужный тебе тип ентити.. и убери проверку на админку все заработает...

Цитата
Как ты все просто и подробно объясняешь

Приятно слишать :)


УРРААААААААА СПАСИБА АДМИНАМ МНЕ СНЯЛИ ПРЕДУПРЕЖДЕНИЯ !!!!!!!!!!!!!!!!!!!!!!!!!!!

Отредактировал: Empower, - 19.2.2009, 19:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 5 раз
   + Цитировать сообщение
Fedcomp
сообщение 19.2.2009, 19:04
Сообщение #5
Стаж: 17 лет

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

поржал, написал небольшой плагинчик когда игрок бросает оружие ему проигрывается звук "Ой мне же плохо!!!" :biggrin:

Отредактировал: Fedcomp, - 19.2.2009, 19:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 19.2.2009, 19:26
Сообщение #6
Стаж: 17 лет

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

Цитата(Fedcomp @ 19.2.2009, 19:04) *
поржал, написал небольшой плагинчик когда игрок бросает оружие ему проигрывается звук "Ой мне же плохо!!!" :biggrin:

)))))))) запиши звук "Асталависта бейби"(голосом терминатора) и поставь на Userkill :)

Отредактировал: Empower, - 19.2.2009, 19:33
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Fedcomp
сообщение 19.2.2009, 19:41
Сообщение #7
Стаж: 17 лет

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

Было бы интересно если ты бы написал статью про работу с языками, а то я как то "плаваю"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Empower
сообщение 19.2.2009, 19:52
Сообщение #8
Стаж: 17 лет

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

Цитата
Было бы интересно если ты бы написал статью про работу с языками, а то я как то "плаваю"

Если ты о register_dictionary файлы тхт с языками что хранятса в папке data??? Если да то там нету ничего сложного очень елементарно.. Завтра напишу :)

Отредактировал: Empower, - 19.2.2009, 19:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Fedcomp
сообщение 19.2.2009, 20:32
Сообщение #9
Стаж: 17 лет

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

да я пробовал у меня почему то вечно ml:notfound
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 21.2.2009, 1:13
Сообщение #10
Стаж: 17 лет

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

Цитата(Empower @ 19.2.2009, 19:52) *
Если ты о register_dictionary файлы тхт с языками что хранятса в папке data??? Если да то там нету ничего сложного очень елементарно.. Завтра напишу :)


несмог написать чёт не заходило на сайт ети 2 дня
сегодне зделаю, ток щя пойду посплю :)

Отредактировал: Empower, - 21.2.2009, 1:15
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GUNNER
сообщение 22.2.2009, 1:00
Сообщение #11


Стаж: 19 лет

Сообщений: 522
Благодарностей: 201
Полезность: 635

Цитата(Empower @ 19.2.2009, 20:55) *
конешно можна... но токо к func_breakable(они могут принимать урон)... или к зделаным другими плагинами обектов например: func_rope, lasermine и т д... просто пока я не обяснил ентити про них писать не буду ибо народ не поймёт, может запутатса :)
В плагине вместо player напиши нужный тебе тип ентити.. и убери проверку на админку все заработает...

Попытался реализовать все это для лазерных мин(сделать так чтобы игроки одной команды не могли разрушать мины своей команды)
Добавил в код плагина lasermine следующее(вариант для биохазарда):
Код
public plugin_init()
{
...
g_LTF = register_cvar("bio_ltm_tf", "0"); //Могут ли люди разрушать поставленные мины
...
RegisterHam(Ham_TakeDamage, "g_EntMine", "block_teamattack");
}
...
public block_teamattack(lasermine, weapon, attacker, damage)
{
    if(!is_user_zombie(attacker) && (get_pcvar_num(g_LTF)==0))
    return HAM_SUPERCEDE;
return HAM_IGNORED;
}

Но не работает, люди все также могут разрушать мины... В чем тут ошибка?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 22.2.2009, 10:51
Сообщение #12
Стаж: 17 лет

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

Код
Но не работает, люди все также могут разрушать мины... В чем тут ошибка?


ВОТ ОШИБКА: RegisterHam(Ham_TakeDamage, "g_EntMine", "block_teamattack");

НАДО: RegisterHam(Ham_TakeDamage, g_EntMine, "block_teamattack");



Ибо g_EntMine ето переменная они пишутса без скобок,
а кроме етой ошибки код куль good.gif


Отредактировал: Empower, - 22.2.2009, 10:58
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Fedcomp
сообщение 22.2.2009, 11:40
Сообщение #13
Стаж: 17 лет

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

Ну вот я говорили раздел незачем сделали ...
это я так к слову ..
Empower, лучше скажи если на карте уже зашита энтитя и я знаю её имя какие к ней ловушки я могу применять а то я не особо понял
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 22.2.2009, 13:21
Сообщение #14
Стаж: 17 лет

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

Цитата
Ну вот я говорили раздел незачем сделали ...

не нравитса - не заходи

Цитата
Empower, лучше скажи если на карте уже зашита энтитя и я знаю её имя какие к ней ловушки я могу применять а то я не особо понял

HAMSANDWICH больше разчитан на работоту с игроками чем с ентити
токо 2 более или мения нужных ИВЕНТА для ентити чтоб применит мона
Код
Ham_TakeDamage - урон
Ham_Touch - вызываетса когда етитя касается к другой ентити или к игроку...

еще описал работу с оружиямы ето тоже в ЧАСТИ ПЕРВОЙ

Все остальные ИВЕНТЫ для ентити в fakemeta.... когдато напишу о них...

Отредактировал: Empower, - 22.2.2009, 17:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя GUNNER
сообщение 22.2.2009, 22:31
Сообщение #15


Стаж: 19 лет

Сообщений: 522
Благодарностей: 201
Полезность: 635

Цитата(Empower @ 22.2.2009, 12:51) *
Код
Но не работает, люди все также могут разрушать мины... В чем тут ошибка?


ВОТ ОШИБКА: RegisterHam(Ham_TakeDamage, "g_EntMine", "block_teamattack");

НАДО: RegisterHam(Ham_TakeDamage, g_EntMine, "block_teamattack");



Ибо g_EntMine ето переменная они пишутса без скобок,
а кроме етой ошибки код куль good.gif

Написал без кавычек - выдает в этой строке ошибку при компиляции:
Код
//// lasermine_023tf.sma
// D:\serv2\cstrike\addons\amxmodx\scripting\lasermine_023tf.sma(237) : error 03
5: argument type mismatch (argument 2)
// D:\serv2\cstrike\addons\amxmodx\scripting\lasermine_023tf.sma(284) : warning
217: loose indentation
//
// 1 Error.
// Could not locate output file compiled\lasermine_023tf.amx (compile failed).
//
// Compilation Time: 0,45 sec
// ----------------------------------------
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 22.2.2009, 22:41
Сообщение #16
Стаж: 17 лет

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

Цитата(GUNNER @ 22.2.2009, 22:31) *
Написал без кавычек - выдает в этой строке ошибку при компиляции:
Код
//// lasermine_023tf.sma
// D:\serv2\cstrike\addons\amxmodx\scripting\lasermine_023tf.sma(237) : error 03
5: argument type mismatch (argument 2)
// D:\serv2\cstrike\addons\amxmodx\scripting\lasermine_023tf.sma(284) : warning
217: loose indentation
//
// 1 Error.
// Could not locate output file compiled\lasermine_023tf.amx (compile failed).
//
// Compilation Time: 0,45 sec
// ----------------------------------------

хз наверно у тя нетакои лазермине плагин как у мну................. попробуй вместо g_Ent "lasermine" "info_target" "func_breakable" или ненаю как там в твоем плагине она называетса...

Отредактировал: Empower, - 22.2.2009, 22:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя GUNNER
сообщение 22.2.2009, 23:06
Сообщение #17


Стаж: 19 лет

Сообщений: 522
Благодарностей: 201
Полезность: 635

Поставил "func_breakable" - заработало, спасибо :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 17.3.2009, 21:47
Сообщение #18
Стаж: 17 лет

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

Цитата(Fedcomp @ 19.2.2009, 16:56) *
Как ты все просто и подробно объясняешь :)
Напиши полный список ловушек hamsandswitch

Список событий Hamsandwich
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Gfx
сообщение 26.3.2010, 8:37
Сообщение #19


Стаж: 17 лет

Сообщений: 72
Благодарностей: 8
Полезность: 90

у меня такой вопрос, я вставил в исходник лазера только
Код
RegisterHam(Ham_TakeDamage, "lasermine", "block_teamattack");

будет ли лазер ломаться от товарищей по команде?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя loginanton
сообщение 28.5.2010, 16:27
Сообщение #20


Стаж: 16 лет

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

Подскажите пожалуйста, где можно почитать справку по этому модулю. Конкретно хочу как то обрабатывать ранение только от оружия, т.е. исключить ранения от падения и т.п.

Отредактировал: loginanton, - 28.5.2010, 16:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: