AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Solved [ZP] Parachute (https://forums.alliedmods.net/showthread.php?t=317774)

MayroN 07-29-2019 11:56

[ZP] Parachute
 
The [ZP] Parachute plugin was taken as a basis
I only use it for humans and survivors.

But the trouble is that I have not found how you can fix this nuance, when at the time of using the parachute you infect zombies, and you are constantly walking zombies with an open parachute until the end of the next round
The same situation with Nemesis

Hope for your help

PHP Code:

#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)
   }




All times are GMT -4. The time now is 17:23.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.