Zombie class conversion

Unpaid Requests, Public Plugins
Post Reply
Rain1153
Senior Member
Senior Member
India
Posts: 278
Joined: 6 years ago
Contact:

Zombie class conversion

#1

Post by Rain1153 » 5 years ago

LOL

User avatar
SexY DeviL CJ
Mod Tester
Mod Tester
Posts: 73
Joined: 6 years ago
Contact:

#2

Post by SexY DeviL CJ » 5 years ago

Rain1153 wrote: 5 years ago https://forums.alliedmods.net/showthread.php?t=169354


Can anybody convert this?
Soon i'll convert it
......Devil Was Here......

Rain1153
Senior Member
Senior Member
India
Posts: 278
Joined: 6 years ago
Contact:

#3

Post by Rain1153 » 5 years ago

Can u teach me how to not be lazy? 😂😂
LOL

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#4

Post by Night Fury » 5 years ago

Try:
  1. #include < zombie_escape >
  2. #include <ze_zombie_class>
  3. #include < engine >
  4. #include < fakemeta >
  5.  
  6. #define _PLUGIN     "[ZP] Zombie Class: Banshee Zombie"
  7. #define _VERSION                  "1.0"
  8. #define _AUTHOR                "H.RED.ZONE"
  9.  
  10. #define _MarkPlayerConnected(%0)  _bitPlayer[Connected] |= (1 << (%0 & 31))
  11. #define _ClearPlayerConnected(%0) _bitPlayer[Connected] &= ~(1 << (%0 & 31))
  12. #define _IsPlayerConnected(%0)    _bitPlayer[Connected] & (1 << (%0 & 31))
  13.  
  14. #define _MarkPlayerAlive(%0)  _bitPlayer[Alive] |= (1 << (%0 & 31))
  15. #define _ClearPlayerAlive(%0) _bitPlayer[Alive] &= ~(1 << (%0 & 31))
  16. #define _IsPlayerAlive(%0)    _bitPlayer[Alive] & (1 << (%0 & 31))
  17.  
  18. #define _MarkPlayerZombie(%0)  _bitPlayer[Zombie] |= (1 << (%0 & 31))
  19. #define _ClearPlayerZombie(%0) _bitPlayer[Zombie] &= ~(1 << (%0 & 31))
  20. #define _IsPlayerZombie(%0)    _bitPlayer[Zombie] & (1 << (%0 & 31))
  21.  
  22. #define _MarkPlayerBanshee(%0)  _bitPlayer[Banshee] |= (1 << (%0 & 31))
  23. #define _ClearPlayerBanshee(%0) _bitPlayer[Banshee] &= ~(1 << (%0 & 31))
  24. #define _IsPlayerBanshee(%0)    _bitPlayer[Banshee] & (1 << (%0 & 31))
  25.  
  26. #define _MarkPlayerHasBats(%0)  _bitPlayer[HasBats] |= (1 << (%0 & 31))
  27. #define _ClearPlayerHasBats(%0) _bitPlayer[HasBats] &= ~(1 << (%0 & 31))
  28. #define _IsPlayerHasBats(%0)    _bitPlayer[HasBats] & (1 << (%0 & 31))
  29.  
  30. #define _MarkPlayerInTrouble(%0)  _bitPlayer[InTrouble] |= (1 << (%0 & 31))
  31. #define _ClearPlayerInTrouble(%0) _bitPlayer[InTrouble] &= ~(1 << (%0 & 31))
  32. #define _IsPlayerInTrouble(%0)    _bitPlayer[InTrouble] & (1 << (%0 & 31))
  33.  
  34. #define fm_get_entity_flags(%1)    pev(%1, pev_flags)
  35.  
  36. enum _Bits {
  37.     HasBats,
  38.     InTrouble,
  39.     Alive,
  40.     Connected,
  41.     Zombie,
  42.     Banshee
  43. }
  44.  
  45. new _bitPlayer[_Bits]
  46.  
  47. new const zclass_name[] = "Banshee Zombie"
  48. new const zclass_info[] = "Press F"
  49. const zclass_health = 2000
  50. const zclass_speed = 280
  51. const zclass_gravity = 770
  52.  
  53. new const _BAT_ModEL[] = "models/zombie_plague/bat_witch.mdl"
  54. new const _ENT_ClaSS[] = "bat_witch"
  55.  
  56. enum (+= 110) {
  57.     TASK_BAT_FLY,
  58.     TASK_HOOK_HUMAN,
  59.     TASK_THROW_BAT,
  60.     TASK_COOLDOWN
  61. }
  62.  
  63. enum _Cvar {
  64.     _Cooldown,
  65.     _RemoveBet_Time,
  66.     _Hook_speed
  67. }
  68.  
  69. new pCvar [_Cvar]
  70.  
  71. new gClass_BansheeID
  72. new gExplosion_Spr
  73. new gEntity
  74.  
  75. new g_Bat_Mode[33]
  76. new g_Target[33]
  77.  
  78. public plugin_init() {
  79.     register_plugin(_PLUGIN, _VERSION, _AUTHOR)
  80.    
  81.     register_impulse(100, "_THrow_Bats")
  82.     register_touch(_ENT_ClaSS, "*", "_FW_Touch")
  83.     register_event("HLTV", "_Event_NewRound", "1=0", "2=0")
  84.    
  85.     RegisterHam(Ham_Killed, "player", "_FW_Player_Killed", 1)
  86.     RegisterHam(Ham_Spawn, "player", "_FW_Player_Spawn", 1 );
  87.     RegisterHam(Ham_Touch, "player", "_FW_Player_Touch", 0)
  88.    
  89.     pCvar[_Cooldown] = register_cvar("zp_banshee_cooldown","30.0")
  90.     pCvar[_RemoveBet_Time] = register_cvar("zp_banshee_time_removebat","10.0")
  91.     pCvar[_Hook_speed] = register_cvar("zp_banshee_hook_speed","320.0")
  92. }
  93.  
  94. public plugin_precache() {
  95.     gClass_BansheeID = ze_register_zombie_class(zclass_name, zclass_info, zclass_health, zclass_speed, zclass_gravity) 
  96.  
  97.     gExplosion_Spr = precache_model("sprites/zerogxplode.spr")
  98.     precache_model(_BAT_ModEL)
  99. }
  100.  
  101. public client_connect(plr) {
  102.     _MarkPlayerConnected(plr)
  103. }
  104.  
  105. public client_disconnected(plr) {
  106.     _ClearPlayerConnected(plr)
  107. }
  108.  
  109. public _FW_Player_Spawn(plr) {
  110.     if(_IsPlayerConnected(plr)) {
  111.         _MarkPlayerAlive(plr)
  112.     }
  113. }
  114.  
  115. public ze_user_infected(_plr) {
  116.     _MarkPlayerZombie(_plr)
  117.    
  118.     if(ze_get_current_zombie_class(_plr) == gClass_BansheeID) {
  119.         _MarkPlayerHasBats(_plr)
  120.         _MarkPlayerBanshee(_plr)
  121.     }
  122.    
  123.     if(_IsPlayerInTrouble(_plr)) {
  124.         if(task_exists(TASK_BAT_FLY)) {
  125.             remove_task(TASK_BAT_FLY)
  126.         }
  127.         if(task_exists(TASK_HOOK_HUMAN)) {
  128.             remove_task(TASK_HOOK_HUMAN)
  129.         }
  130.        
  131.         if(is_valid_ent(gEntity)) {
  132.             remove_entity(gEntity)
  133.         }
  134.     }
  135. }
  136.  
  137. public ze_user_humanized(plr) {
  138.     _ClearPlayerZombie(plr)
  139.     _ClearPlayerBanshee(plr)
  140. }
  141.  
  142. public _FW_Player_Killed(victim, attacker, shouldgib) {
  143.     if (_IsPlayerConnected(victim)) {
  144.         _ClearPlayerAlive(victim)
  145.         _ClearPlayerBanshee(victim)
  146.        
  147.         if(_IsPlayerBanshee(victim)) {
  148.             if(_IsPlayerZombie(victim)) {
  149.                 entity_set_int(victim, EV_INT_sequence, random_num(128, 137))
  150.             }
  151.         }
  152.         _ClearPlayerZombie(victim)
  153.     }
  154. }
  155.  
  156. public _Event_NewRound(id) {
  157.     _bitPlayer[HasBats] = 0
  158.    
  159.     if(task_exists(TASK_BAT_FLY)) {
  160.         remove_task(TASK_BAT_FLY)
  161.     }
  162.     if(task_exists(TASK_HOOK_HUMAN)) {
  163.         remove_task(TASK_HOOK_HUMAN)
  164.     }
  165.     if(task_exists(id+TASK_THROW_BAT)) {
  166.         remove_task(id+TASK_THROW_BAT)
  167.     }
  168.     if(task_exists(id+TASK_COOLDOWN)) {
  169.         remove_task(id+TASK_COOLDOWN)
  170.     }
  171.        
  172.     remove_entity(gEntity) 
  173.     _bitPlayer[InTrouble] = 0
  174. }
  175.  
  176. public _THrow_Bats(plr) {
  177.     if(fm_get_entity_flags(plr) & FL_ONGROUND)
  178.         return
  179.    
  180.     if(_IsPlayerAlive(plr) && _IsPlayerZombie(plr) && _IsPlayerBanshee(plr)) {
  181.         if(_IsPlayerHasBats(plr)) {
  182.             new _Body
  183.                 ,_Target
  184.             get_user_aiming(plr, _Target, _Body, 99999)
  185.            
  186.             if(_Target && is_valid_ent(_Target)) {
  187.                 g_Bat_Mode[plr] = 1
  188.                 g_Target[plr] = _Target
  189.                 _MarkPlayerInTrouble(_Target)
  190.                
  191.                 _Create_Bets(plr)
  192.                
  193.                 static bat_array[2]
  194.                
  195.                 bat_array[0] = gEntity
  196.                 bat_array[1] = g_Target[plr]
  197.                
  198.                 set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b")
  199.                 set_task(get_pcvar_float(pCvar[_RemoveBet_Time]), "_Remove_Bats", _Target+TASK_THROW_BAT)
  200.             } else {
  201.                 g_Bat_Mode[plr] = 2
  202.                
  203.                 _Create_Bets(plr)
  204.                
  205.                 new Float:Velocity1[3]
  206.                 VelocityByAim(plr, 700, Velocity1)
  207.                
  208.                 entity_set_vector(gEntity, EV_VEC_velocity, Velocity1)
  209.             }
  210.             set_task(get_pcvar_float(pCvar[_Cooldown]), "_Remove_Cooldown", plr+TASK_COOLDOWN)
  211.         }
  212.     }
  213. }
  214.  
  215. public _Set_BatFly(bat_array[], taskid) {
  216.     static _Target
  217.     _Target = bat_array[1]
  218.    
  219.     new owner
  220.    
  221.     if(is_valid_ent(gEntity))
  222.         owner = entity_get_edict(gEntity,EV_ENT_owner)
  223.                            
  224.     if(_IsPlayerAlive(owner))
  225.     {
  226.         _Set_Hook(_Target, gEntity)
  227.     } else {
  228.         if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY)
  229.         if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN)
  230.        
  231.         remove_entity(gEntity) 
  232.     }
  233. }
  234.  
  235. public _SetGrab_player(graber, grabed) {
  236.     new array2[2]
  237.     array2[0] = graber
  238.     array2[1] = grabed
  239.    
  240.     set_task(0.1, "_SetGrab_player2", TASK_HOOK_HUMAN, array2, sizeof(array2), "b")
  241. }
  242.  
  243. public _SetGrab_player2(array2[], taskid) {
  244.     static id
  245.     static target
  246.    
  247.     id = array2[0]
  248.     target = array2[1]
  249.    
  250.     _Set_Hook(id, target)
  251.     entity_set_int(gEntity, EV_INT_solid, SOLID_NOT)
  252. }
  253.  
  254. public _Set_Hook(hooker, hooked) {
  255.     static Float:originF[3]
  256.    
  257.     new Float:fl_Velocity[3];
  258.     new Float:vicOrigin[3]
  259.     new Float:distance = get_distance_f(originF, vicOrigin);
  260.    
  261.     entity_get_vector(hooker , EV_VEC_origin , originF );
  262.     entity_get_vector(hooked , EV_VEC_origin , vicOrigin );
  263.  
  264.     if (distance > 1.0) {
  265.         new Float:fl_Time = distance / get_pcvar_float(pCvar[_Hook_speed])
  266.  
  267.         fl_Velocity[0] = (originF[0] - vicOrigin[0]) / fl_Time
  268.         fl_Velocity[1] = (originF[1] - vicOrigin[1]) / fl_Time
  269.         fl_Velocity[2] = (originF[2] - vicOrigin[2]) / fl_Time
  270.     } else {
  271.         fl_Velocity[0] = 0.0
  272.         fl_Velocity[1] = 0.0
  273.         fl_Velocity[2] = 0.0
  274.     }
  275.  
  276.     entity_set_vector(hooked, EV_VEC_velocity, fl_Velocity);
  277. }
  278.  
  279. public _Create_Bets(owner) {
  280.     gEntity = create_entity("info_target")
  281.    
  282.     new Float:Origin[3], Float:Angle[3]
  283.    
  284.     entity_get_vector(owner, EV_VEC_v_angle, Angle)
  285.     entity_get_vector(owner, EV_VEC_origin, Origin)
  286.     entity_set_origin(gEntity, Origin)
  287.    
  288.     entity_set_string(gEntity,EV_SZ_classname, _ENT_ClaSS);
  289.     entity_set_model(gEntity, _BAT_ModEL)
  290.     entity_set_int(gEntity,EV_INT_solid, 2)
  291.     entity_set_int(gEntity, EV_INT_movetype, 5)
  292.    
  293.     entity_set_vector(gEntity, EV_VEC_angles, Angle)
  294.    
  295.     entity_set_byte(gEntity,EV_BYTE_controller1,125);
  296.     entity_set_byte(gEntity,EV_BYTE_controller2,125);
  297.     entity_set_byte(gEntity,EV_BYTE_controller3,125);
  298.     entity_set_byte(gEntity,EV_BYTE_controller4,125);
  299.    
  300.     new Float:maxs[3] = {10.0,10.0,15.0}
  301.     new Float:mins[3] = {-10.0,-10.0,-15.0}
  302.     entity_set_size(gEntity,mins,maxs)
  303.    
  304.     entity_set_edict(gEntity, EV_ENT_owner, owner)
  305.    
  306.     entity_set_float(gEntity,EV_FL_animtime,2.0)
  307.     entity_set_float(gEntity,EV_FL_framerate,1.0)
  308.     entity_set_int(gEntity,EV_INT_sequence, 0) 
  309. }
  310.  
  311. public _FW_Touch(ent, touched) {
  312.     new owner = entity_get_edict(gEntity,EV_ENT_owner)
  313.     new id = g_Target[owner]
  314.        
  315.     if(g_Bat_Mode[owner] == 1 && ~_IsPlayerInTrouble(id) && ~_IsPlayerZombie(id)) {
  316.        
  317.         _MarkPlayerInTrouble(id)
  318.         _SetGrab_player(owner, id)
  319.     } else if(g_Bat_Mode[owner] == 2 && ~_IsPlayerInTrouble(touched)) {
  320.         if(_IsPlayerAlive(touched) && ~_IsPlayerZombie(touched)) {
  321.             _SetGrab_player(owner, touched)
  322.             _MarkPlayerInTrouble(touched)
  323.            
  324.             static bat_array[2]
  325.             bat_array[0] = ent
  326.             bat_array[1] = touched
  327.        
  328.             set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b")
  329.         } else {
  330.             new Float:Origin[3]
  331.             entity_get_vector(ent, EV_VEC_origin, Origin)
  332.  
  333.             message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
  334.             write_byte(3)
  335.             engfunc(EngFunc_WriteCoord, Origin[0])
  336.             engfunc(EngFunc_WriteCoord, Origin[1])
  337.             engfunc(EngFunc_WriteCoord, Origin[2])
  338.             write_short(gExplosion_Spr)
  339.             write_byte(25)
  340.             write_byte(30)
  341.             write_byte(0)
  342.             message_end()
  343.            
  344.             remove_entity(ent) 
  345.         }
  346.     }
  347. }
  348.  
  349. public _FW_Player_Touch(ptr, ptd) {
  350.     if(!is_valid_ent(ptr) || !is_valid_ent(ptd))
  351.         return FMRES_IGNORED
  352.        
  353.     if(~_IsPlayerAlive(ptr) || ~_IsPlayerAlive(ptd) || ~_IsPlayerZombie(ptr) || _IsPlayerZombie(ptd))
  354.         return FMRES_IGNORED
  355.        
  356.     if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) {
  357.         remove_task(TASK_BAT_FLY)
  358.         remove_task(TASK_HOOK_HUMAN)
  359.         remove_task(TASK_THROW_BAT)
  360.        
  361.         remove_entity(gEntity)
  362.         _ClearPlayerInTrouble(ptd)
  363.     } else if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) {
  364.         remove_task(TASK_BAT_FLY)
  365.         remove_task(TASK_HOOK_HUMAN)
  366.         remove_task(TASK_THROW_BAT)
  367.        
  368.         remove_entity(gEntity)
  369.         _ClearPlayerInTrouble(ptd)
  370.     }
  371.     return FMRES_HANDLED
  372. }
  373.  
  374. public remove_bat(taskid) {
  375.     new id = taskid - TASK_THROW_BAT
  376.    
  377.     if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY)
  378.     if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN)
  379.     if(task_exists(id+TASK_THROW_BAT)) remove_task(id+TASK_THROW_BAT)
  380.        
  381.     if(is_valid_ent(gEntity)) {
  382.         remove_entity(gEntity)
  383.     }
  384.        
  385.     _ClearPlayerInTrouble(id)
  386. }
  387.  
  388. public remove_cooldown(taskid) {
  389.     new id = taskid - TASK_COOLDOWN
  390.    
  391.     if(_IsPlayerAlive(id) && _IsPlayerZombie(id) && _IsPlayerBanshee(id)) {
  392.         client_print(id, print_chat,"Now you can Drop Bat. Press (F)")
  393.         _MarkPlayerHasBats(id)
  394.     }
  395. }
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

Rain1153
Senior Member
Senior Member
India
Posts: 278
Joined: 6 years ago
Contact:

#5

Post by Rain1153 » 5 years ago

nah it doesnt release any bats and the button doesnt work
LOL

karan
Mod Tester
Mod Tester
India
Posts: 122
Joined: 6 years ago
Location: India
Contact:

#6

Post by karan » 5 years ago

yeah plz fix it asap :)
Image

DeVil_Raghav
Member
Member
India
Posts: 25
Joined: 3 years ago
Contact:

#7

Post by DeVil_Raghav » 3 years ago

can you make this for zombie escape sv :)

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#8

Post by Night Fury » 3 years ago

DeVil_Raghav wrote: 3 years ago can you make this for zombie escape sv :)
What do you mean?
It's already for the mod.
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

SobekPogrywamy
Member
Member
Poland
Posts: 24
Joined: 3 years ago
Contact:

#9

Post by SobekPogrywamy » 3 years ago

Night Fury wrote: 5 years ago Try:
  1. #include < zombie_escape >
  2. #include <ze_zombie_class>
  3. #include < engine >
  4. #include < fakemeta >
  5.  
  6. #define _PLUGIN     "[ZP] Zombie Class: Banshee Zombie"
  7. #define _VERSION                  "1.0"
  8. #define _AUTHOR                "H.RED.ZONE"
  9.  
  10. #define _MarkPlayerConnected(%0)  _bitPlayer[Connected] |= (1 << (%0 & 31))
  11. #define _ClearPlayerConnected(%0) _bitPlayer[Connected] &= ~(1 << (%0 & 31))
  12. #define _IsPlayerConnected(%0)    _bitPlayer[Connected] & (1 << (%0 & 31))
  13.  
  14. #define _MarkPlayerAlive(%0)  _bitPlayer[Alive] |= (1 << (%0 & 31))
  15. #define _ClearPlayerAlive(%0) _bitPlayer[Alive] &= ~(1 << (%0 & 31))
  16. #define _IsPlayerAlive(%0)    _bitPlayer[Alive] & (1 << (%0 & 31))
  17.  
  18. #define _MarkPlayerZombie(%0)  _bitPlayer[Zombie] |= (1 << (%0 & 31))
  19. #define _ClearPlayerZombie(%0) _bitPlayer[Zombie] &= ~(1 << (%0 & 31))
  20. #define _IsPlayerZombie(%0)    _bitPlayer[Zombie] & (1 << (%0 & 31))
  21.  
  22. #define _MarkPlayerBanshee(%0)  _bitPlayer[Banshee] |= (1 << (%0 & 31))
  23. #define _ClearPlayerBanshee(%0) _bitPlayer[Banshee] &= ~(1 << (%0 & 31))
  24. #define _IsPlayerBanshee(%0)    _bitPlayer[Banshee] & (1 << (%0 & 31))
  25.  
  26. #define _MarkPlayerHasBats(%0)  _bitPlayer[HasBats] |= (1 << (%0 & 31))
  27. #define _ClearPlayerHasBats(%0) _bitPlayer[HasBats] &= ~(1 << (%0 & 31))
  28. #define _IsPlayerHasBats(%0)    _bitPlayer[HasBats] & (1 << (%0 & 31))
  29.  
  30. #define _MarkPlayerInTrouble(%0)  _bitPlayer[InTrouble] |= (1 << (%0 & 31))
  31. #define _ClearPlayerInTrouble(%0) _bitPlayer[InTrouble] &= ~(1 << (%0 & 31))
  32. #define _IsPlayerInTrouble(%0)    _bitPlayer[InTrouble] & (1 << (%0 & 31))
  33.  
  34. #define fm_get_entity_flags(%1)    pev(%1, pev_flags)
  35.  
  36. enum _Bits {
  37.     HasBats,
  38.     InTrouble,
  39.     Alive,
  40.     Connected,
  41.     Zombie,
  42.     Banshee
  43. }
  44.  
  45. new _bitPlayer[_Bits]
  46.  
  47. new const zclass_name[] = "Banshee Zombie"
  48. new const zclass_info[] = "Press F"
  49. const zclass_health = 2000
  50. const zclass_speed = 280
  51. const zclass_gravity = 770
  52.  
  53. new const _BAT_ModEL[] = "models/zombie_plague/bat_witch.mdl"
  54. new const _ENT_ClaSS[] = "bat_witch"
  55.  
  56. enum (+= 110) {
  57.     TASK_BAT_FLY,
  58.     TASK_HOOK_HUMAN,
  59.     TASK_THROW_BAT,
  60.     TASK_COOLDOWN
  61. }
  62.  
  63. enum _Cvar {
  64.     _Cooldown,
  65.     _RemoveBet_Time,
  66.     _Hook_speed
  67. }
  68.  
  69. new pCvar [_Cvar]
  70.  
  71. new gClass_BansheeID
  72. new gExplosion_Spr
  73. new gEntity
  74.  
  75. new g_Bat_Mode[33]
  76. new g_Target[33]
  77.  
  78. public plugin_init() {
  79.     register_plugin(_PLUGIN, _VERSION, _AUTHOR)
  80.    
  81.     register_impulse(100, "_THrow_Bats")
  82.     register_touch(_ENT_ClaSS, "*", "_FW_Touch")
  83.     register_event("HLTV", "_Event_NewRound", "1=0", "2=0")
  84.    
  85.     RegisterHam(Ham_Killed, "player", "_FW_Player_Killed", 1)
  86.     RegisterHam(Ham_Spawn, "player", "_FW_Player_Spawn", 1 );
  87.     RegisterHam(Ham_Touch, "player", "_FW_Player_Touch", 0)
  88.    
  89.     pCvar[_Cooldown] = register_cvar("zp_banshee_cooldown","30.0")
  90.     pCvar[_RemoveBet_Time] = register_cvar("zp_banshee_time_removebat","10.0")
  91.     pCvar[_Hook_speed] = register_cvar("zp_banshee_hook_speed","320.0")
  92. }
  93.  
  94. public plugin_precache() {
  95.     gClass_BansheeID = ze_register_zombie_class(zclass_name, zclass_info, zclass_health, zclass_speed, zclass_gravity) 
  96.  
  97.     gExplosion_Spr = precache_model("sprites/zerogxplode.spr")
  98.     precache_model(_BAT_ModEL)
  99. }
  100.  
  101. public client_connect(plr) {
  102.     _MarkPlayerConnected(plr)
  103. }
  104.  
  105. public client_disconnected(plr) {
  106.     _ClearPlayerConnected(plr)
  107. }
  108.  
  109. public _FW_Player_Spawn(plr) {
  110.     if(_IsPlayerConnected(plr)) {
  111.         _MarkPlayerAlive(plr)
  112.     }
  113. }
  114.  
  115. public ze_user_infected(_plr) {
  116.     _MarkPlayerZombie(_plr)
  117.    
  118.     if(ze_get_current_zombie_class(_plr) == gClass_BansheeID) {
  119.         _MarkPlayerHasBats(_plr)
  120.         _MarkPlayerBanshee(_plr)
  121.     }
  122.    
  123.     if(_IsPlayerInTrouble(_plr)) {
  124.         if(task_exists(TASK_BAT_FLY)) {
  125.             remove_task(TASK_BAT_FLY)
  126.         }
  127.         if(task_exists(TASK_HOOK_HUMAN)) {
  128.             remove_task(TASK_HOOK_HUMAN)
  129.         }
  130.        
  131.         if(is_valid_ent(gEntity)) {
  132.             remove_entity(gEntity)
  133.         }
  134.     }
  135. }
  136.  
  137. public ze_user_humanized(plr) {
  138.     _ClearPlayerZombie(plr)
  139.     _ClearPlayerBanshee(plr)
  140. }
  141.  
  142. public _FW_Player_Killed(victim, attacker, shouldgib) {
  143.     if (_IsPlayerConnected(victim)) {
  144.         _ClearPlayerAlive(victim)
  145.         _ClearPlayerBanshee(victim)
  146.        
  147.         if(_IsPlayerBanshee(victim)) {
  148.             if(_IsPlayerZombie(victim)) {
  149.                 entity_set_int(victim, EV_INT_sequence, random_num(128, 137))
  150.             }
  151.         }
  152.         _ClearPlayerZombie(victim)
  153.     }
  154. }
  155.  
  156. public _Event_NewRound(id) {
  157.     _bitPlayer[HasBats] = 0
  158.    
  159.     if(task_exists(TASK_BAT_FLY)) {
  160.         remove_task(TASK_BAT_FLY)
  161.     }
  162.     if(task_exists(TASK_HOOK_HUMAN)) {
  163.         remove_task(TASK_HOOK_HUMAN)
  164.     }
  165.     if(task_exists(id+TASK_THROW_BAT)) {
  166.         remove_task(id+TASK_THROW_BAT)
  167.     }
  168.     if(task_exists(id+TASK_COOLDOWN)) {
  169.         remove_task(id+TASK_COOLDOWN)
  170.     }
  171.        
  172.     remove_entity(gEntity) 
  173.     _bitPlayer[InTrouble] = 0
  174. }
  175.  
  176. public _THrow_Bats(plr) {
  177.     if(fm_get_entity_flags(plr) & FL_ONGROUND)
  178.         return
  179.    
  180.     if(_IsPlayerAlive(plr) && _IsPlayerZombie(plr) && _IsPlayerBanshee(plr)) {
  181.         if(_IsPlayerHasBats(plr)) {
  182.             new _Body
  183.                 ,_Target
  184.             get_user_aiming(plr, _Target, _Body, 99999)
  185.            
  186.             if(_Target && is_valid_ent(_Target)) {
  187.                 g_Bat_Mode[plr] = 1
  188.                 g_Target[plr] = _Target
  189.                 _MarkPlayerInTrouble(_Target)
  190.                
  191.                 _Create_Bets(plr)
  192.                
  193.                 static bat_array[2]
  194.                
  195.                 bat_array[0] = gEntity
  196.                 bat_array[1] = g_Target[plr]
  197.                
  198.                 set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b")
  199.                 set_task(get_pcvar_float(pCvar[_RemoveBet_Time]), "_Remove_Bats", _Target+TASK_THROW_BAT)
  200.             } else {
  201.                 g_Bat_Mode[plr] = 2
  202.                
  203.                 _Create_Bets(plr)
  204.                
  205.                 new Float:Velocity1[3]
  206.                 VelocityByAim(plr, 700, Velocity1)
  207.                
  208.                 entity_set_vector(gEntity, EV_VEC_velocity, Velocity1)
  209.             }
  210.             set_task(get_pcvar_float(pCvar[_Cooldown]), "_Remove_Cooldown", plr+TASK_COOLDOWN)
  211.         }
  212.     }
  213. }
  214.  
  215. public _Set_BatFly(bat_array[], taskid) {
  216.     static _Target
  217.     _Target = bat_array[1]
  218.    
  219.     new owner
  220.    
  221.     if(is_valid_ent(gEntity))
  222.         owner = entity_get_edict(gEntity,EV_ENT_owner)
  223.                            
  224.     if(_IsPlayerAlive(owner))
  225.     {
  226.         _Set_Hook(_Target, gEntity)
  227.     } else {
  228.         if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY)
  229.         if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN)
  230.        
  231.         remove_entity(gEntity) 
  232.     }
  233. }
  234.  
  235. public _SetGrab_player(graber, grabed) {
  236.     new array2[2]
  237.     array2[0] = graber
  238.     array2[1] = grabed
  239.    
  240.     set_task(0.1, "_SetGrab_player2", TASK_HOOK_HUMAN, array2, sizeof(array2), "b")
  241. }
  242.  
  243. public _SetGrab_player2(array2[], taskid) {
  244.     static id
  245.     static target
  246.    
  247.     id = array2[0]
  248.     target = array2[1]
  249.    
  250.     _Set_Hook(id, target)
  251.     entity_set_int(gEntity, EV_INT_solid, SOLID_NOT)
  252. }
  253.  
  254. public _Set_Hook(hooker, hooked) {
  255.     static Float:originF[3]
  256.    
  257.     new Float:fl_Velocity[3];
  258.     new Float:vicOrigin[3]
  259.     new Float:distance = get_distance_f(originF, vicOrigin);
  260.    
  261.     entity_get_vector(hooker , EV_VEC_origin , originF );
  262.     entity_get_vector(hooked , EV_VEC_origin , vicOrigin );
  263.  
  264.     if (distance > 1.0) {
  265.         new Float:fl_Time = distance / get_pcvar_float(pCvar[_Hook_speed])
  266.  
  267.         fl_Velocity[0] = (originF[0] - vicOrigin[0]) / fl_Time
  268.         fl_Velocity[1] = (originF[1] - vicOrigin[1]) / fl_Time
  269.         fl_Velocity[2] = (originF[2] - vicOrigin[2]) / fl_Time
  270.     } else {
  271.         fl_Velocity[0] = 0.0
  272.         fl_Velocity[1] = 0.0
  273.         fl_Velocity[2] = 0.0
  274.     }
  275.  
  276.     entity_set_vector(hooked, EV_VEC_velocity, fl_Velocity);
  277. }
  278.  
  279. public _Create_Bets(owner) {
  280.     gEntity = create_entity("info_target")
  281.    
  282.     new Float:Origin[3], Float:Angle[3]
  283.    
  284.     entity_get_vector(owner, EV_VEC_v_angle, Angle)
  285.     entity_get_vector(owner, EV_VEC_origin, Origin)
  286.     entity_set_origin(gEntity, Origin)
  287.    
  288.     entity_set_string(gEntity,EV_SZ_classname, _ENT_ClaSS);
  289.     entity_set_model(gEntity, _BAT_ModEL)
  290.     entity_set_int(gEntity,EV_INT_solid, 2)
  291.     entity_set_int(gEntity, EV_INT_movetype, 5)
  292.    
  293.     entity_set_vector(gEntity, EV_VEC_angles, Angle)
  294.    
  295.     entity_set_byte(gEntity,EV_BYTE_controller1,125);
  296.     entity_set_byte(gEntity,EV_BYTE_controller2,125);
  297.     entity_set_byte(gEntity,EV_BYTE_controller3,125);
  298.     entity_set_byte(gEntity,EV_BYTE_controller4,125);
  299.    
  300.     new Float:maxs[3] = {10.0,10.0,15.0}
  301.     new Float:mins[3] = {-10.0,-10.0,-15.0}
  302.     entity_set_size(gEntity,mins,maxs)
  303.    
  304.     entity_set_edict(gEntity, EV_ENT_owner, owner)
  305.    
  306.     entity_set_float(gEntity,EV_FL_animtime,2.0)
  307.     entity_set_float(gEntity,EV_FL_framerate,1.0)
  308.     entity_set_int(gEntity,EV_INT_sequence, 0) 
  309. }
  310.  
  311. public _FW_Touch(ent, touched) {
  312.     new owner = entity_get_edict(gEntity,EV_ENT_owner)
  313.     new id = g_Target[owner]
  314.        
  315.     if(g_Bat_Mode[owner] == 1 && ~_IsPlayerInTrouble(id) && ~_IsPlayerZombie(id)) {
  316.        
  317.         _MarkPlayerInTrouble(id)
  318.         _SetGrab_player(owner, id)
  319.     } else if(g_Bat_Mode[owner] == 2 && ~_IsPlayerInTrouble(touched)) {
  320.         if(_IsPlayerAlive(touched) && ~_IsPlayerZombie(touched)) {
  321.             _SetGrab_player(owner, touched)
  322.             _MarkPlayerInTrouble(touched)
  323.            
  324.             static bat_array[2]
  325.             bat_array[0] = ent
  326.             bat_array[1] = touched
  327.        
  328.             set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b")
  329.         } else {
  330.             new Float:Origin[3]
  331.             entity_get_vector(ent, EV_VEC_origin, Origin)
  332.  
  333.             message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
  334.             write_byte(3)
  335.             engfunc(EngFunc_WriteCoord, Origin[0])
  336.             engfunc(EngFunc_WriteCoord, Origin[1])
  337.             engfunc(EngFunc_WriteCoord, Origin[2])
  338.             write_short(gExplosion_Spr)
  339.             write_byte(25)
  340.             write_byte(30)
  341.             write_byte(0)
  342.             message_end()
  343.            
  344.             remove_entity(ent) 
  345.         }
  346.     }
  347. }
  348.  
  349. public _FW_Player_Touch(ptr, ptd) {
  350.     if(!is_valid_ent(ptr) || !is_valid_ent(ptd))
  351.         return FMRES_IGNORED
  352.        
  353.     if(~_IsPlayerAlive(ptr) || ~_IsPlayerAlive(ptd) || ~_IsPlayerZombie(ptr) || _IsPlayerZombie(ptd))
  354.         return FMRES_IGNORED
  355.        
  356.     if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) {
  357.         remove_task(TASK_BAT_FLY)
  358.         remove_task(TASK_HOOK_HUMAN)
  359.         remove_task(TASK_THROW_BAT)
  360.        
  361.         remove_entity(gEntity)
  362.         _ClearPlayerInTrouble(ptd)
  363.     } else if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) {
  364.         remove_task(TASK_BAT_FLY)
  365.         remove_task(TASK_HOOK_HUMAN)
  366.         remove_task(TASK_THROW_BAT)
  367.        
  368.         remove_entity(gEntity)
  369.         _ClearPlayerInTrouble(ptd)
  370.     }
  371.     return FMRES_HANDLED
  372. }
  373.  
  374. public remove_bat(taskid) {
  375.     new id = taskid - TASK_THROW_BAT
  376.    
  377.     if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY)
  378.     if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN)
  379.     if(task_exists(id+TASK_THROW_BAT)) remove_task(id+TASK_THROW_BAT)
  380.        
  381.     if(is_valid_ent(gEntity)) {
  382.         remove_entity(gEntity)
  383.     }
  384.        
  385.     _ClearPlayerInTrouble(id)
  386. }
  387.  
  388. public remove_cooldown(taskid) {
  389.     new id = taskid - TASK_COOLDOWN
  390.    
  391.     if(_IsPlayerAlive(id) && _IsPlayerZombie(id) && _IsPlayerBanshee(id)) {
  392.         client_print(id, print_chat,"Now you can Drop Bat. Press (F)")
  393.         _MarkPlayerHasBats(id)
  394.     }
  395. }


bats no release and im see "
[Zombie Escape] This option is for zombies only."

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 3 guests