Русское сообщество по скриптингу

[ZP] Parachute  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

[ZP] Parachute

Сообщение MayroN » 29 июл 2019, 18:16

За основу был взят плагин с Оленей Вы должны зарегистрироваться, чтобы видеть ссылки.
Я там поставил использование только для Человека и для Выжившего.

Но вот беда,я нигде ненашол как можно исправить тот нюанс,когда в момент использования Парашута,тебя заражает Зомби, и ты постоянно ходишь Зомбарем с открывшемся парашутом до конца следующего раунда
Такая же ситуацыя из Немезидой

Надеюсь на помощь Вашу
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
 
#define _PLUGIN         "[ZP] Parachute"
#define _VERSION             "1.0"
#define _AUTHOR           "H.RED.ZONE"
 
#define PARACHUTE_MODEL "models/zp_parachute_2/zp_parachute_2.mdl"
 
#define MAX_PLAYERS    32
 
#define MarkUserHasParachute(%0)   g_bitHasParachute |= (1<<(%0&31))
#define ClearUserHasParachute(%0)   g_bitHasParachute &= ~(1<<(%0&31))
#define HasUserParachute(%0)      g_bitHasParachute & (1<<(%0&31))
 
new g_bitHasParachute 
 
new g_iUserParachute[MAX_PLAYERS+1]
 
new 
Float:g_flEntityFrame[MAX_PLAYERS+1]
 
new 
parachutes_num[33] = 0
 
new g_iModelIndex
new g_pCvarFallSpeed
 
new const PARACHUTE_CLASS[] = "parachute"
 
enum {
   
deploy,
   
idle,
   
detach
}
 
public 
plugin_init() {
   
register_plugin(_PLUGIN_VERSION_AUTHOR)
 
   
g_pCvarFallSpeed register_cvar("parachute_fallspeed""30")
 
   
register_forwardFM_CmdStart"fw_Start" )
    
   
RegisterHam(Ham_Spawn"player""Ham_CBasePlayer_Spawn_Post"1)
   
RegisterHam(Ham_Killed"player""Ham_CBasePlayer_Killed_Post"1)
}
 
public 
plugin_precache() {
   
g_iModelIndex precache_model(PARACHUTE_MODEL)
}
 
public 
client_putinserver(id) {
   if( 
HasUserParachute(id) ) {
      new 
iEnt g_iUserParachute[id]
      if( 
iEnt ) {
         
RemoveUserParachute(idiEnt)
      }
      
ClearUserHasParachute(id)
   }
        
parachutes_num[id] = 0
}
 
public 
client_disconnect(id) {
   if( 
HasUserParachute(id) ) {
      new 
iEnt g_iUserParachute[id]
      if( 
iEnt ) {
         
RemoveUserParachute(idiEnt)
      }
      
ClearUserHasParachute(id)
   }
        
parachutes_num[id] = 0
}
 
public 
Ham_CBasePlayer_Killed_Postid ) {
   if( 
HasUserParachute(id) ) {
      new 
iEnt g_iUserParachute[id]
      if( 
iEnt ) {
         
RemoveUserParachute(idiEnt)
      }
      
ClearUserHasParachute(id)
   }
}
 
public 
Ham_CBasePlayer_Spawn_Post(id) {
   if( 
is_user_alive(id) ) {
      if( 
HasUserParachute(id) ) {
         new 
iEnt g_iUserParachute[id]
         if( 
iEnt ) {
            
RemoveUserParachute(idiEnt)
         }
      }
      
MarkUserHasParachute(id)
   }
}
 
RemoveUserParachute(idiEnt) {
   
engfunc(EngFunc_RemoveEntityiEnt)
   
g_iUserParachute[id] = 0
}
 
CreateParachute(id) {
   static 
iszInfoTarget
   
if( !iszInfoTarget ) {
      
iszInfoTarget engfunc(EngFunc_AllocString"info_target")
   }
 
   new 
iEnt engfunc(EngFunc_CreateNamedEntityiszInfoTarget)
   if( 
iEnt 0) {
      static 
iszClass 0
      
if( !iszClass ) {
         
iszClass engfunc(EngFunc_AllocStringPARACHUTE_CLASS)
      }
      
set_pev_string(iEntpev_classnameiszClass)
      
set_pev(iEntpev_aimentid)
      
set_pev(iEntpev_ownerid)
      
set_pev(iEntpev_movetypeMOVETYPE_FOLLOW)
 
      static 
iszModel 0
      
if( !iszModel ) {
         
iszModel engfunc(EngFunc_AllocStringPARACHUTE_MODEL)
      }
      
set_pev_string(iEntpev_modeliszModel)
      
set_pev(iEntpev_modelindexg_iModelIndex)
 
      
set_pev(iEntpev_sequencedeploy)
      
set_pev(iEntpev_gaitsequence1)
      
set_pev(iEntpev_frame0.0)
      
g_flEntityFrame[id] = 0.0
      g_iUserParachute
[id] = iEnt
      MarkUserHasParachute
(id)
      new 
Float:fVecOrigin[3]
      
pev(idpev_originfVecOrigin)
       
      return 
iEnt
   
}
   return 
0
}
 
public 
fw_Start(id) {
   if( ~
HasUserParachute(id) || !is_user_alive(id) ) {
      return
   }
 
   if (
zp_get_user_nemesis(id) && !parachutes_num[id])
      return;
    
   if (
zp_get_user_zombie(id) && !parachutes_num[id])
      return;
 
   new 
Float:flFrame
   
new iEnt g_iUserParachute[id]
 
   if(
iEnt && pev(idpev_flags) & FL_ONGROUND) {
 
      if( 
pev(iEntpev_sequence) != detach ) {
         
set_pev(iEntpev_sequence2)
         
set_pev(iEntpev_gaitsequence1)
         
set_pev(iEntpev_frame0.0)
         
g_flEntityFrame[id] = 0.0
         set_pev
(iEntpev_animtime0.0)
         
set_pev(iEntpev_framerate0.0)
         return
      }
 
      
pev(iEntpev_frameflFrame)
      if( 
flFrame 252.0 ) {
         
RemoveUserParachute(idiEnt)
         return
      }
 
      
flFrame += 2.0
 
      g_flEntityFrame
[id] = flFrame
      set_pev
(iEntpev_frameflFrame)
 
      return
   }
 
   if( 
pev(idpev_button) & IN_USE ) {
      new 
Float:fVecVelocity[3], Float:fVelocity_z
      pev
(idpev_velocityfVecVelocity)
      
fVelocity_z fVecVelocity[2]
 
      if( 
fVelocity_z 0.0 ) {
         if(
iEnt <= 0) {
            
iEnt CreateParachute(id)
         }
 
         
fVelocity_z floatmin(fVelocity_z 15.0, -get_pcvar_float(g_pCvarFallSpeed))
         
fVecVelocity[2] = fVelocity_z
         set_pev
(idpev_velocityfVecVelocity)
 
         if( 
pev(iEntpev_sequence) == deploy ) {
            
flFrame g_flEntityFrame[id]++
 
            if( 
flFrame 100.0 ) {
               
set_pev(iEntpev_animtime0.0)
               
set_pev(iEntpev_framerate0.4)
               
set_pev(iEntpev_sequence1)
               
set_pev(iEntpev_gaitsequence1)
               
set_pev(iEntpev_frame0.0)
               
g_flEntityFrame[id] = 0.0
            
}
            else {
               
set_pev(iEntpev_frameflFrame)
            }
         }
      }
      else if(
iEnt 0) {
         
RemoveUserParachute(idiEnt)
      }
   }
   else if( 
iEnt && pev(idpev_oldbuttons) & IN_USE ) {
      
RemoveUserParachute(idiEnt)
   }
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: [ZP] Parachute

Сообщение MayroN » 30 июл 2019, 00:54

Решено:
Добавил так и всё выйшло
Код: Выделить всё
public zp_user_infected_post( id, infector )
{
    if( HasUserParachute(id) ) {
        new iEnt = g_iUserParachute[id]
        if( iEnt ) {
            RemoveUserParachute(id, iEnt)
        }
        ClearUserHasParachute(id)
    }
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: [ZP] Parachute

Сообщение MayroN » 03 авг 2019, 01:58

Не решено:
Опять нашол ещё один Баг. :-|
После превращения Антидотом ( Противоядием ) из Зомби в Человека - Парашют полностью отключаеться.
И вроде что-то помню,где-то уже слышал об этом,что было в какой-то версии исправлено - но не нашел.
У Вас эсть варианты?
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: [ZP] Parachute

Сообщение Leonidddd » 03 авг 2019, 17:35

MayroN, надеюсь в инклудах zp мода есть отлов момента использования антидота(если нету, то можно создать собственный нэтив/форвард функцию для этого) и выдавать парашют.

UPD: не дочитал все, проще некуда сейчас..
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: [ZP] Parachute

Сообщение JustProOnline » 10 авг 2019, 03:14

В некоторых местах код не очень) можешь за место битов использовать обычные проверки из zp мода
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: [ZP] Parachute  [Решено]

Сообщение артист666 » 11 авг 2019, 18:22

Так вроде проще:
Код: Выделить всё
public zp_user_humanized_post(id, survivor) Ham_CBasePlayer_Spawn_Post(id)
public zp_user_infected_post(id, infector, nemesis) Ham_CBasePlayer_Killed_Post( id )
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: [ZP] Parachute

Сообщение MayroN » 11 авг 2019, 23:17

Ухх..Спасибо Вам.
Я то думал,когда же Вы здесь появитесь )))
Это как раз то,что нужно было.
И проще и возврат по Антидоту Работает.
Теперь точно Решено
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 12