|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
|
Интервал между использованием longjump
|
|
| Jay-izi | Дата: Суббота, 03.05.2008, 00:51:10 | Сообщение # 1 |
 Сержант
Группа: Скриптеры
Сообщений: 21
Статус: Не в сети
| Здравствуйте. Хотелось бы попросить помощи. Я ещё кипетильник в скриптинге так что сам не могу разобраться . Я написал плагин для biohazard Zombie Mod - http://forums.alliedmods.net/showpost.php?p=617598&postcount=871 Думаю все поймут что он делает. Я хотел добавить в него интервал после использования longjump в x секунд. ( Longjump будет блокирован от использования на x секунд ) x секунд конечно же будут определяться cvar'ом. Я кое что написал , но интервал там кончено не работает и я не знаю как сделать так чтобы он работал. Вот : Code #include <amxmodx> #include <fakemeta_util>
#tryinclude <biohazard>
#if !defined _biohazard_included #assert Biohazard functions file required! #endif
new zomb_leap, zomb_time, zomb_interval new bool:blocked[35]
public plugin_init() { register_plugin("Bio LongJump/Leap", "0.21", "Jay-izi/Radiance") if (!is_biomod_active()) pause("ad") zomb_leap = register_cvar("bh_zombie_leap","1") zomb_time = register_cvar("bh_zombie_leap_time","15.0") zomb_interval = register_cvar("bh_zombie_leap_interval","10.0") register_forward(FM_PlayerPreThink, "fwPlayerPreThink") }
public client_connect(id) { blocked[id]=false return PLUGIN_CONTINUE }
public client_disconnect(id) { blocked[id]=false return PLUGIN_CONTINUE }
public event_infect2(id) { if (is_user_alive(id) && is_user_firstzombie(id)) { if (get_pcvar_num(zomb_leap)) { new Float:leap_float=get_pcvar_float(zomb_time) set_task(leap_float,"leap_begin",id) new num = get_pcvar_num(zomb_time) set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 14.0) show_hudmessage(id, "%d seconds before you have leap",num) } } }
public leap_begin(id) { if (!is_user_alive(id)) return PLUGIN_HANDLED
if (is_user_firstzombie(id)) { set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 5.0) show_hudmessage(id, "You now have leap") fm_set_user_longjump(id, true, true) } return PLUGIN_CONTINUE }
public leap_unblock(id) { blocked[id]=false return PLUGIN_CONTINUE }
public fwPlayerPreThink(id) { new Float:leap_interval_float=get_pcvar_float(zomb_interval) if (is_user_alive(id) && is_user_firstzombie(id) || (pev(id, pev_button) & IN_DUCK )) { blocked[id]=true set_task(leap_interval_float, "leap_unblock", id) } }
Никогда не бойся делать то, что ты не умеешь! Помни, "Титаник" был построен профессионалами, а ковчег - любителем. Руки должны быть прямыми, а извилины кривыми, но никак не наоборот!
Сообщение отредактировал Jay-izi - Суббота, 03.05.2008, 10:52:38 |
| |
|
|
| VEN | Дата: Суббота, 03.05.2008, 16:12:37 | Сообщение # 2 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Добро пожаловать на сайт русскоязычного AMX Mod X сообщества. Более правильное детектирование использования longjump - это, например, метод, проверки типа анимации - значение gaitsequence pev при этом будет равным 5 (однако, некоторые steam пользователи утверждают, что 6).
|
| |
|
|
| Jay-izi | Дата: Суббота, 03.05.2008, 17:32:26 | Сообщение # 3 |
 Сержант
Группа: Скриптеры
Сообщений: 21
Статус: Не в сети
| И как это можно осуществить? У меня 0 идей .
Никогда не бойся делать то, что ты не умеешь! Помни, "Титаник" был построен профессионалами, а ковчег - любителем. Руки должны быть прямыми, а извилины кривыми, но никак не наоборот!
|
| |
|
|
| VEN | Дата: Суббота, 03.05.2008, 20:23:25 | Сообщение # 4 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| В fwPlayerPreThink() выполняешь проверку if (pev(id, pev_gaitsequence) == 5) // значит, игрок в положении longjump'a. Дальше уже действуешь по своему отработанному сценарию.
|
| |
|
|
| Jay-izi | Дата: Суббота, 03.05.2008, 22:28:38 | Сообщение # 5 |
 Сержант
Группа: Скриптеры
Сообщений: 21
Статус: Не в сети
| Теперь получается так что когда я нажимаю на клавиши ctrl + space ( вызываю longjump ) он делает longjump а слудующий блокирует как это и было задумано , но при этом если повторить нажатия несколько раз то после первого нажатия на кнопки после x секунд ( стоит 10 ) появляется longjump и за ним столько longjump сколько раз я нажал на ctrl + space в состоянии блока. Тоже самое будет если я это сделаю в начале раунда. Вот скриншот : http://i001.radikal.ru/0805/82/644b436544d6.jpg Вот код : Code #include <amxmodx> #include <fakemeta_util>
#tryinclude <biohazard>
#if !defined _biohazard_included #assert Biohazard functions file required! #endif
new zomb_leap, zomb_time, zomb_interval new bool:blocked[35]
public plugin_init() { register_plugin("Bio LongJump/Leap", "0.21", "Jay-izi/Radiance") if (!is_biomod_active()) pause("ad") zomb_leap = register_cvar("bh_zombie_leap","1") zomb_time = register_cvar("bh_zombie_leap_time","15.0") zomb_interval = register_cvar("bh_zombie_leap_interval","10.0") register_forward(FM_PlayerPreThink, "fwPlayerPreThink") }
public client_connect(id) { blocked[id]=false return PLUGIN_CONTINUE }
public client_disconnect(id) { blocked[id]=false return PLUGIN_CONTINUE }
public event_infect2(id) { if (is_user_alive(id) && is_user_firstzombie(id)) { if (get_pcvar_num(zomb_leap)) { new Float:leap_float=get_pcvar_float(zomb_time) set_task(leap_float,"leap_begin",id) new num = get_pcvar_num(zomb_time) set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 14.0) show_hudmessage(id, "%d seconds before you have leap",num) } } }
public leap_begin(id) { if (!is_user_alive(id)) return PLUGIN_HANDLED
if (is_user_firstzombie(id)) { set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 5.0) show_hudmessage(id, "You now have leap") fm_set_user_longjump(id, true, true) } return PLUGIN_CONTINUE }
public leap_unblock(id) { blocked[id]=false fm_set_user_longjump(id, true, true) return PLUGIN_CONTINUE }
public fwPlayerPreThink(id) { new Float:leap_interval_float=get_pcvar_float(zomb_interval) if (is_user_alive(id) && is_user_firstzombie(id)) { if (pev(id, pev_gaitsequence) == 5) { blocked[id]=true fm_set_user_longjump(id, false, false) set_task(leap_interval_float, "leap_unblock", id) } } } PS Я думаю что fm_set_user_longjump(id, false, false) можно убрать и как то сделать так чтобы bool:blocked работал а не просто был пустым местом но как это сделать я тоже не знаю 
Никогда не бойся делать то, что ты не умеешь! Помни, "Титаник" был построен профессионалами, а ковчег - любителем. Руки должны быть прямыми, а извилины кривыми, но никак не наоборот!
|
| |
|
|
| VEN | Дата: Понедельник, 05.05.2008, 19:15:07 | Сообщение # 6 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Абсолютно не надо быть "семи пядей во лбу", чтобы понять, что нет смысла блокировать lj, если он уже заблокирован. Не правда ли, это вполне логично?Code if (!blocked[id] && pev(id, pev_gaitsequence) == 5)
|
| |
|
|
| Jay-izi | Дата: Вторник, 13.05.2008, 22:17:49 | Сообщение # 7 |
 Сержант
Группа: Скриптеры
Сообщений: 21
Статус: Не в сети
| Вот глупый ! Как я сам то не додумался. Спасибо за помощь, возникнут проблемы я ещё задам вопрос.  Добавлено (2008-05-13, 10:17 Pm) --------------------------------------------- Вот ещё 1 вопрос : Получается так что если ты уже определён быть зомби то ты можешь до того как превратишься в него нажать кнопки использования longjump ( ctrl+ space) и через 10 секунд он появится. Тобишь когда угодно нажимаешь и через 10 сек при условии что longjump не был заблокирован уже он появляется. Хотелось бы сделать так чтобы в начале раунда до того как ты превратишься в зомби ( это время определяется cvar'ом из biohazard.amxx "bh_starttime" с помощью g_gamestart ) + моё время bh_zombie_leap_time после которого будет дан longjump - fwPlayerPreThink просто было бы отключено , иначе происходит то что я описал ниже , а так же когда раунд заканчивается fwPlayerPreThink опять блокируется и Longjump в новом раунде не выдаётся даже если 10 сек прошло из прошлого раунда. Например у меня стоит начало игры через 25.0 секунд ( вместе с freezetime 5 сек ) и Roundtime 2 минуты значит игра начинается в 1:40 + ещё время моё время bh_zombie_leap_time - 15 значит fwPlayerPreThink должен работать через 40 секунд после начала раунда. Я многое перепробовал но у меня не получилось. Может кто то сможет мне помочь? Вот код : Code #include <amxmodx> #include <fakemeta_util>
#tryinclude <biohazard>
#if !defined _biohazard_included #assert Biohazard functions file required! #endif
new zomb_leap, zomb_time, zomb_interval new bool:blocked[35]
public plugin_init() { register_plugin("Bio LongJump/Leap", "0.21", "Jay-izi/Radiance") if (!is_biomod_active()) pause("ad") zomb_leap = register_cvar("bh_zombie_leap","1") zomb_time = register_cvar("bh_zombie_leap_time","15.0") zomb_interval = register_cvar("bh_zombie_leap_interval","10.0") register_forward(FM_PlayerPreThink, "fwPlayerPreThink") }
public client_connect(id) { blocked[id] = false return PLUGIN_CONTINUE }
public client_disconnect(id) { blocked[id] = false return PLUGIN_CONTINUE }
public event_infect2(id) { if (is_user_alive(id) && is_user_firstzombie(id)) { if (get_pcvar_num(zomb_leap)) { new Float:leap_float=get_pcvar_float(zomb_time) set_task(leap_float,"leap_begin",id) new num = get_pcvar_num(zomb_time) set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 14.0) show_hudmessage(id, "%d seconds before you have leap",num) } } }
public leap_begin(id) { if (!is_user_alive(id)) return PLUGIN_HANDLED
if (is_user_firstzombie(id)) { set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 5.0) show_hudmessage(id, "You now have leap") fm_set_user_longjump(id, true, true) } return PLUGIN_CONTINUE }
public leap_unblock(id) { blocked[id] = false fm_set_user_longjump(id, true, true) return PLUGIN_CONTINUE }
public fwPlayerPreThink(id) { new Float:leap_interval_float=get_pcvar_float(zomb_interval) if (is_user_alive(id) && is_user_firstzombie(id)) { if (!blocked[id] && pev(id, pev_gaitsequence) == 5) { blocked[id]=true fm_set_user_longjump(id, false, false) set_task(leap_interval_float, "leap_unblock", id) } } return PLUGIN_CONTINUE }
Никогда не бойся делать то, что ты не умеешь! Помни, "Титаник" был построен профессионалами, а ковчег - любителем. Руки должны быть прямыми, а извилины кривыми, но никак не наоборот!
|
| |
|
|
| DaTa | Дата: Среда, 14.05.2008, 02:20:27 | Сообщение # 8 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| скажи, что твой плагин должен делать вообще?
|
| |
|
|
| Jay-izi | Дата: Четверг, 15.05.2008, 21:50:59 | Сообщение # 9 |
 Сержант
Группа: Скриптеры
Сообщений: 21
Статус: Не в сети
| После начала игры (у меня стоит bh_starttime 25) + после моего времени bh_zombie_leap_time 15 только тогда должна выполняться функция fwPlayerPreThink(id) А вообще он выдаёт Longjump только первому зомби после начала игры + bh_zombie_leap_time . И как только это время пройдёт даётся зомби longjump. А я просто хотел его усовершенствовать.Добавлено (2008-05-15, 9:50 Pm) --------------------------------------------- Кажется я понял как это сделать Но возникла тут же другая проблема...... Если перед самым концом раунда ты сделаешь Leap и он у тебя заблокируется то получится так что он ( через 10 сек по дефолту ) разблокируется в новом раунде и ты сможешь бегать с ним до опупения пока тебя не убьют так как ты уже не зомби а человек. Код : Code #include <amxmodx> #include <fakemeta_util>
#tryinclude <biohazard>
#if !defined _biohazard_included #assert Biohazard functions file required! #endif
#define TASKID_STARTROUND 153 #define TASKID_NEWROUND 641
new zomb_leap, zomb_time, zomb_interval, zomb_gamestart, bool:g_gamestarted, bool:blocked[35]
public plugin_init() { register_plugin("Bio LongJump/Leap", "0.21", "Jay-izi/Radiance") if (!is_biomod_active()) pause("ad") zomb_leap = register_cvar("bh_zombie_leap","1") zomb_time = register_cvar("bh_zombie_leap_time","15.0") zomb_interval = register_cvar("bh_zombie_leap_interval","10.0") zomb_gamestart = register_cvar("bh_gamestart", "25.0") register_event("HLTV", "event_newround", "a", "1=0", "2=0") register_logevent("logevent_round_end", 2, "1=Round_End") register_forward(FM_PlayerPreThink, "fwPlayerPreThink") }
public client_connect(id) { blocked[id] = false return PLUGIN_CONTINUE }
public client_disconnect(id) { blocked[id] = false return PLUGIN_CONTINUE }
public event_infect2(id) { if (is_user_alive(id) && is_user_firstzombie(id)) { if (get_pcvar_num(zomb_leap)) { new Float:leap_float=get_pcvar_float(zomb_time) set_task(0.1,"leapblocked",id) set_task(leap_float,"leap_begin",id) new num = get_pcvar_num(zomb_time) set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 14.0) show_hudmessage(id, "%d seconds before you have leap",num) } } }
public leap_begin(id) { if (is_user_alive(id) && is_user_firstzombie(id)) { set_hudmessage(243, 235, 12, -1.0, 0.40, 0, 6.0, 5.0) show_hudmessage(id, "You now have leap") fm_set_user_longjump(id, true, true) g_gamestarted = true } return PLUGIN_CONTINUE }
public fwPlayerPreThink(id) { if(!g_gamestarted) { client_print(id, print_chat, "[BIO] Deactivated.") return PLUGIN_HANDLED_MAIN }
if (is_user_alive(id)) { if (!blocked[id] && pev(id, pev_gaitsequence) == 5) { new Float:leap_interval_float=get_pcvar_float(zomb_interval) blocked[id]=true fm_set_user_longjump(id, false, false) set_task(leap_interval_float, "leap_unblock", id) } } return PLUGIN_CONTINUE }
public leap_unblock(id) { blocked[id] = false fm_set_user_longjump(id, true, true) return PLUGIN_CONTINUE }
public logevent_round_end() { set_task(0.1,"leapblocked") }
public event_newround() { set_task(7.0,"leapblocked") set_task((get_pcvar_float(zomb_gamestart)), "task_startround", TASKID_STARTROUND) }
public task_startround() { set_task(0.1,"leapblocked") }
public leapblocked(id) { g_gamestarted = false blocked[id] = false fm_set_user_longjump(id, false, false) } PS Кто нибудь может удолить его и оптимизировать так как там скорей всего есть много ненужного что можно сделать намного проще?
Никогда не бойся делать то, что ты не умеешь! Помни, "Титаник" был построен профессионалами, а ковчег - любителем. Руки должны быть прямыми, а извилины кривыми, но никак не наоборот!
|
| |
|
|
 | AMX Mod X Russian Community © 2006-2026  |  |
|
| |