AMX MOD X
Понедельник, 15.06.2026, 11:36:22



Приветствую Вас Гость | RSS
[ Главная ] [ Интервал между использованием longjump - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Интервал между использованием longjump
Jay-iziДата: Суббота, 03.05.2008, 00:51:10 | Сообщение # 1
Сержант
Группа: Скриптеры
Сообщений: 21
Репутация: 1
Статус: Не в сети
Здравствуйте. Хотелось бы попросить помощи. Я ещё кипетильник в скриптинге так что сам не могу разобраться ;) .
Я написал плагин для 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
Репутация: 45
Статус: Не в сети
Добро пожаловать на сайт русскоязычного AMX Mod X сообщества.

Более правильное детектирование использования longjump - это, например, метод, проверки типа анимации - значение gaitsequence pev при этом будет равным 5 (однако, некоторые steam пользователи утверждают, что 6).

 
Jay-iziДата: Суббота, 03.05.2008, 17:32:26 | Сообщение # 3
Сержант
Группа: Скриптеры
Сообщений: 21
Репутация: 1
Статус: Не в сети
И как это можно осуществить?
У меня 0 идей .


Никогда не бойся делать то, что ты не умеешь! Помни, "Титаник" был построен профессионалами, а ковчег - любителем.
Руки должны быть прямыми, а извилины кривыми, но никак не наоборот!
 
VENДата: Суббота, 03.05.2008, 20:23:25 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
В fwPlayerPreThink() выполняешь проверку if (pev(id, pev_gaitsequence) == 5) // значит, игрок в положении longjump'a. Дальше уже действуешь по своему отработанному сценарию.
 
Jay-iziДата: Суббота, 03.05.2008, 22:28:38 | Сообщение # 5
Сержант
Группа: Скриптеры
Сообщений: 21
Репутация: 1
Статус: Не в сети
Теперь получается так что когда я нажимаю на клавиши 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
Репутация: 45
Статус: Не в сети
Абсолютно не надо быть "семи пядей во лбу", чтобы понять, что нет смысла блокировать lj, если он уже заблокирован.
Не правда ли, это вполне логично?
Code
if (!blocked[id] && pev(id, pev_gaitsequence) == 5)
 
Jay-iziДата: Вторник, 13.05.2008, 22:17:49 | Сообщение # 7
Сержант
Группа: Скриптеры
Сообщений: 21
Репутация: 1
Статус: Не в сети
Вот глупый :D ! Как я сам то не додумался. ^_^
Спасибо за помощь, возникнут проблемы я ещё задам вопрос. :D

Добавлено (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
Репутация: 16
Статус: Не в сети
скажи, что твой плагин должен делать вообще?
 
Jay-iziДата: Четверг, 15.05.2008, 21:50:59 | Сообщение # 9
Сержант
Группа: Скриптеры
Сообщений: 21
Репутация: 1
Статус: Не в сети
После начала игры (у меня стоит bh_starttime 25) + после моего времени bh_zombie_leap_time 15 только тогда должна выполняться функция fwPlayerPreThink(id)
А вообще он выдаёт Longjump только первому зомби после начала игры + bh_zombie_leap_time . И как только это время пройдёт даётся зомби longjump. А я просто хотел его усовершенствовать.

Добавлено (2008-05-15, 9:50 Pm)
---------------------------------------------
Кажется я понял как это сделать :D
Но возникла тут же другая проблема...... Если перед самым концом раунда ты сделаешь 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 Кто нибудь может удолить его и оптимизировать так как там скорей всего есть много ненужного что можно сделать намного проще?


Никогда не бойся делать то, что ты не умеешь! Помни, "Титаник" был построен профессионалами, а ковчег - любителем.
Руки должны быть прямыми, а извилины кривыми, но никак не наоборот!
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026