make this class to VIP , not using default players
Bunche of zombie classes
-
- Member
- Posts: 32
- Joined: 6 years ago
- Location: Россия,Крым
- Contact:
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
- #include <zombie_escape>
- #include <ze_zombie_class>
- #include <ze_vip>
- #include < engine >
- #define _PLUGIN "[ZP] Zombie Class: Banshee Zombie"
- #define _VERSION "1.0"
- #define _AUTHOR "H.RED.ZONE"
- #define VIP_FLAGS VIP_A
- #define _MarkPlayerConnected(%0) _bitPlayer[Connected] |= (1 << (%0 & 31))
- #define _ClearPlayerConnected(%0) _bitPlayer[Connected] &= ~(1 << (%0 & 31))
- #define _IsPlayerConnected(%0) _bitPlayer[Connected] & (1 << (%0 & 31))
- #define _MarkPlayerAlive(%0) _bitPlayer[Alive] |= (1 << (%0 & 31))
- #define _ClearPlayerAlive(%0) _bitPlayer[Alive] &= ~(1 << (%0 & 31))
- #define _IsPlayerAlive(%0) _bitPlayer[Alive] & (1 << (%0 & 31))
- #define _MarkPlayerZombie(%0) _bitPlayer[Zombie] |= (1 << (%0 & 31))
- #define _ClearPlayerZombie(%0) _bitPlayer[Zombie] &= ~(1 << (%0 & 31))
- #define _IsPlayerZombie(%0) _bitPlayer[Zombie] & (1 << (%0 & 31))
- #define _MarkPlayerBanshee(%0) _bitPlayer[Banshee] |= (1 << (%0 & 31))
- #define _ClearPlayerBanshee(%0) _bitPlayer[Banshee] &= ~(1 << (%0 & 31))
- #define _IsPlayerBanshee(%0) _bitPlayer[Banshee] & (1 << (%0 & 31))
- #define _MarkPlayerHasBats(%0) _bitPlayer[HasBats] |= (1 << (%0 & 31))
- #define _ClearPlayerHasBats(%0) _bitPlayer[HasBats] &= ~(1 << (%0 & 31))
- #define _IsPlayerHasBats(%0) _bitPlayer[HasBats] & (1 << (%0 & 31))
- #define _MarkPlayerInTrouble(%0) _bitPlayer[InTrouble] |= (1 << (%0 & 31))
- #define _ClearPlayerInTrouble(%0) _bitPlayer[InTrouble] &= ~(1 << (%0 & 31))
- #define _IsPlayerInTrouble(%0) _bitPlayer[InTrouble] & (1 << (%0 & 31))
- #define fm_get_entity_flags(%1) pev(%1, pev_flags)
- enum _Bits {
- HasBats,
- InTrouble,
- Alive,
- Connected,
- Zombie,
- Banshee
- }
- new _bitPlayer[_Bits]
- new const zclass_name[] = "Banshee Zombie"
- new const zclass_info[] = "Press F"
- const zclass_health = 2000
- const zclass_speed = 280
- const zclass_gravity = 870
- new const _BAT_ModEL[] = "models/zombie_plague/bat_witch.mdl"
- new const _ENT_ClaSS[] = "bat_witch"
- enum (+= 110) {
- TASK_BAT_FLY,
- TASK_HOOK_HUMAN,
- TASK_THROW_BAT,
- TASK_COOLDOWN
- }
- enum _Cvar {
- _Cooldown,
- _RemoveBet_Time,
- _Hook_speed
- }
- new pCvar [_Cvar]
- new gClass_BansheeID
- new gExplosion_Spr
- new gEntity
- new g_Bat_Mode[33]
- new g_Target[33]
- public plugin_init() {
- register_plugin(_PLUGIN, _VERSION, _AUTHOR)
- register_impulse(100, "_THrow_Bats")
- register_touch(_ENT_ClaSS, "*", "_FW_Touch")
- register_event("HLTV", "_Event_NewRound", "1=0", "2=0")
- RegisterHam(Ham_Killed, "player", "_FW_Player_Killed", 1)
- RegisterHam(Ham_Spawn, "player", "_FW_Player_Spawn", 1 );
- RegisterHam(Ham_Touch, "player", "_FW_Player_Touch", 0)
- pCvar[_Cooldown] = register_cvar("zp_banshee_cooldown","30.0")
- pCvar[_RemoveBet_Time] = register_cvar("zp_banshee_time_removebat","10.0")
- pCvar[_Hook_speed] = register_cvar("zp_banshee_hook_speed","320.0")
- }
- public plugin_precache() {
- gClass_BansheeID = ze_register_zombie_class(zclass_name, zclass_info, zclass_health, zclass_speed, zclass_gravity)
- gExplosion_Spr = precache_model("sprites/zerogxplode.spr")
- precache_model(_BAT_ModEL)
- }
- public client_connect(plr) {
- _MarkPlayerConnected(plr)
- }
- public client_disconnected(plr) {
- _ClearPlayerConnected(plr)
- }
- public _FW_Player_Spawn(plr) {
- if(_IsPlayerConnected(plr)) {
- _MarkPlayerAlive(plr)
- }
- }
- public ze_select_zombie_class_pre(id, classid)
- {
- if (classid != gClass_BansheeID)
- return ZE_CLASS_AVAILABLE
- if (~(ze_get_vip_flags(id) & VIP_FLAGS))
- return ZE_CLASS_UNAVAILABLE
- ze_add_zombie_class_menu_text("\rVIP")
- return ZE_CLASS_AVAILABLE
- }
- public ze_select_zombie_class_post(id, classid)
- {
- if (classid != gClass_BansheeID)
- return
- ze_set_next_zombie_class(id, gClass_BansheeID)
- }
- public ze_user_infected(_plr) {
- _MarkPlayerZombie(_plr)
- if(ze_get_current_zombie_class(_plr) == gClass_BansheeID) {
- _MarkPlayerHasBats(_plr)
- _MarkPlayerBanshee(_plr)
- }
- if(_IsPlayerInTrouble(_plr)) {
- if(task_exists(TASK_BAT_FLY)) {
- remove_task(TASK_BAT_FLY)
- }
- if(task_exists(TASK_HOOK_HUMAN)) {
- remove_task(TASK_HOOK_HUMAN)
- }
- if(is_valid_ent(gEntity)) {
- remove_entity(gEntity)
- }
- }
- }
- public ze_user_humanized(plr) {
- _ClearPlayerZombie(plr)
- _ClearPlayerBanshee(plr)
- }
- public _FW_Player_Killed(victim, attacker, shouldgib) {
- if (_IsPlayerConnected(victim)) {
- _ClearPlayerAlive(victim)
- _ClearPlayerBanshee(victim)
- if(_IsPlayerBanshee(victim)) {
- if(_IsPlayerZombie(victim)) {
- entity_set_int(victim, EV_INT_sequence, random_num(128, 137))
- }
- }
- _ClearPlayerZombie(victim)
- }
- }
- public _Event_NewRound(id) {
- _bitPlayer[HasBats] = 0
- if(task_exists(TASK_BAT_FLY)) {
- remove_task(TASK_BAT_FLY)
- }
- if(task_exists(TASK_HOOK_HUMAN)) {
- remove_task(TASK_HOOK_HUMAN)
- }
- if(task_exists(id+TASK_THROW_BAT)) {
- remove_task(id+TASK_THROW_BAT)
- }
- if(task_exists(id+TASK_COOLDOWN)) {
- remove_task(id+TASK_COOLDOWN)
- }
- remove_entity(gEntity)
- _bitPlayer[InTrouble] = 0
- }
- public _THrow_Bats(plr) {
- if(fm_get_entity_flags(plr) & FL_ONGROUND)
- return
- if(_IsPlayerAlive(plr) && _IsPlayerZombie(plr) && _IsPlayerBanshee(plr)) {
- if(_IsPlayerHasBats(plr)) {
- new _Body
- ,_Target
- get_user_aiming(plr, _Target, _Body, 99999)
- if(_Target && is_valid_ent(_Target)) {
- g_Bat_Mode[plr] = 1
- g_Target[plr] = _Target
- _MarkPlayerInTrouble(_Target)
- _Create_Bets(plr)
- static bat_array[2]
- bat_array[0] = gEntity
- bat_array[1] = g_Target[plr]
- set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b")
- set_task(get_pcvar_float(pCvar[_RemoveBet_Time]), "_Remove_Bats", _Target+TASK_THROW_BAT)
- } else {
- g_Bat_Mode[plr] = 2
- _Create_Bets(plr)
- new Float:Velocity1[3]
- VelocityByAim(plr, 700, Velocity1)
- entity_set_vector(gEntity, EV_VEC_velocity, Velocity1)
- }
- set_task(get_pcvar_float(pCvar[_Cooldown]), "_Remove_Cooldown", plr+TASK_COOLDOWN)
- }
- }
- }
- public _Set_BatFly(bat_array[], taskid) {
- static _Target
- _Target = bat_array[1]
- new owner
- if(is_valid_ent(gEntity))
- owner = entity_get_edict(gEntity,EV_ENT_owner)
- if(_IsPlayerAlive(owner))
- {
- _Set_Hook(_Target, gEntity)
- } else {
- if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY)
- if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN)
- remove_entity(gEntity)
- }
- }
- public _SetGrab_player(graber, grabed) {
- new array2[2]
- array2[0] = graber
- array2[1] = grabed
- set_task(0.1, "_SetGrab_player2", TASK_HOOK_HUMAN, array2, sizeof(array2), "b")
- }
- public _SetGrab_player2(array2[], taskid) {
- static id
- static target
- id = array2[0]
- target = array2[1]
- _Set_Hook(id, target)
- entity_set_int(gEntity, EV_INT_solid, SOLID_NOT)
- }
- public _Set_Hook(hooker, hooked) {
- static Float:originF[3]
- new Float:fl_Velocity[3];
- new Float:vicOrigin[3]
- new Float:distance = get_distance_f(originF, vicOrigin);
- entity_get_vector(hooker , EV_VEC_origin , originF );
- entity_get_vector(hooked , EV_VEC_origin , vicOrigin );
- if (distance > 1.0) {
- new Float:fl_Time = distance / get_pcvar_float(pCvar[_Hook_speed])
- fl_Velocity[0] = (originF[0] - vicOrigin[0]) / fl_Time
- fl_Velocity[1] = (originF[1] - vicOrigin[1]) / fl_Time
- fl_Velocity[2] = (originF[2] - vicOrigin[2]) / fl_Time
- } else {
- fl_Velocity[0] = 0.0
- fl_Velocity[1] = 0.0
- fl_Velocity[2] = 0.0
- }
- entity_set_vector(hooked, EV_VEC_velocity, fl_Velocity);
- }
- public _Create_Bets(owner) {
- gEntity = create_entity("info_target")
- new Float:Origin[3], Float:Angle[3]
- entity_get_vector(owner, EV_VEC_v_angle, Angle)
- entity_get_vector(owner, EV_VEC_origin, Origin)
- entity_set_origin(gEntity, Origin)
- entity_set_string(gEntity,EV_SZ_classname, _ENT_ClaSS);
- entity_set_model(gEntity, _BAT_ModEL)
- entity_set_int(gEntity,EV_INT_solid, 2)
- entity_set_int(gEntity, EV_INT_movetype, 5)
- entity_set_vector(gEntity, EV_VEC_angles, Angle)
- entity_set_byte(gEntity,EV_BYTE_controller1,125);
- entity_set_byte(gEntity,EV_BYTE_controller2,125);
- entity_set_byte(gEntity,EV_BYTE_controller3,125);
- entity_set_byte(gEntity,EV_BYTE_controller4,125);
- new Float:maxs[3] = {10.0,10.0,15.0}
- new Float:mins[3] = {-10.0,-10.0,-15.0}
- entity_set_size(gEntity,mins,maxs)
- entity_set_edict(gEntity, EV_ENT_owner, owner)
- entity_set_float(gEntity,EV_FL_animtime,2.0)
- entity_set_float(gEntity,EV_FL_framerate,1.0)
- entity_set_int(gEntity,EV_INT_sequence, 0)
- }
- public _FW_Touch(ent, touched) {
- new owner = entity_get_edict(gEntity,EV_ENT_owner)
- new id = g_Target[owner]
- if(g_Bat_Mode[owner] == 1 && ~_IsPlayerInTrouble(id) && ~_IsPlayerZombie(id)) {
- _MarkPlayerInTrouble(id)
- _SetGrab_player(owner, id)
- } else if(g_Bat_Mode[owner] == 2 && ~_IsPlayerInTrouble(touched)) {
- if(_IsPlayerAlive(touched) && ~_IsPlayerZombie(touched)) {
- _SetGrab_player(owner, touched)
- _MarkPlayerInTrouble(touched)
- static bat_array[2]
- bat_array[0] = ent
- bat_array[1] = touched
- set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b")
- } else {
- new Float:Origin[3]
- entity_get_vector(ent, EV_VEC_origin, Origin)
- message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
- write_byte(3)
- engfunc(EngFunc_WriteCoord, Origin[0])
- engfunc(EngFunc_WriteCoord, Origin[1])
- engfunc(EngFunc_WriteCoord, Origin[2])
- write_short(gExplosion_Spr)
- write_byte(25)
- write_byte(30)
- write_byte(0)
- message_end()
- remove_entity(ent)
- }
- }
- }
- public _FW_Player_Touch(ptr, ptd) {
- if(!is_valid_ent(ptr) || !is_valid_ent(ptd))
- return FMRES_IGNORED
- if(~_IsPlayerAlive(ptr) || ~_IsPlayerAlive(ptd) || ~_IsPlayerZombie(ptr) || _IsPlayerZombie(ptd))
- return FMRES_IGNORED
- if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) {
- remove_task(TASK_BAT_FLY)
- remove_task(TASK_HOOK_HUMAN)
- remove_task(TASK_THROW_BAT)
- remove_entity(gEntity)
- _ClearPlayerInTrouble(ptd)
- } else if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) {
- remove_task(TASK_BAT_FLY)
- remove_task(TASK_HOOK_HUMAN)
- remove_task(TASK_THROW_BAT)
- remove_entity(gEntity)
- _ClearPlayerInTrouble(ptd)
- }
- return FMRES_HANDLED
- }
- public remove_bat(taskid) {
- new id = taskid - TASK_THROW_BAT
- if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY)
- if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN)
- if(task_exists(id+TASK_THROW_BAT)) remove_task(id+TASK_THROW_BAT)
- if(is_valid_ent(gEntity)) {
- remove_entity(gEntity)
- }
- _ClearPlayerInTrouble(id)
- }
- public remove_cooldown(taskid) {
- new id = taskid - TASK_COOLDOWN
- if(_IsPlayerAlive(id) && _IsPlayerZombie(id) && _IsPlayerBanshee(id)) {
- client_print(id, print_chat,"Now you can Drop Bat. Press (F)")
- _MarkPlayerHasBats(id)
- }
- }
- /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
- *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang10266\\ f0\\ fs16 \n\\ par }
- */
-
- Member
- Posts: 32
- Joined: 6 years ago
- Location: Россия,Крым
- Contact:
now this zombie class is used even if it is not selected, and even if you do not VIPJack GamePlay wrote: ↑5 years ago
#include <zombie_escape> #include <ze_zombie_class> #include <ze_vip> #include < engine > #define _PLUGIN "[ZP] Zombie Class: Banshee Zombie" #define _VERSION "1.0" #define _AUTHOR "H.RED.ZONE" #define VIP_FLAGS VIP_A #define _MarkPlayerConnected(%0) _bitPlayer[Connected] |= (1 << (%0 & 31)) #define _ClearPlayerConnected(%0) _bitPlayer[Connected] &= ~(1 << (%0 & 31)) #define _IsPlayerConnected(%0) _bitPlayer[Connected] & (1 << (%0 & 31)) #define _MarkPlayerAlive(%0) _bitPlayer[Alive] |= (1 << (%0 & 31)) #define _ClearPlayerAlive(%0) _bitPlayer[Alive] &= ~(1 << (%0 & 31)) #define _IsPlayerAlive(%0) _bitPlayer[Alive] & (1 << (%0 & 31)) #define _MarkPlayerZombie(%0) _bitPlayer[Zombie] |= (1 << (%0 & 31)) #define _ClearPlayerZombie(%0) _bitPlayer[Zombie] &= ~(1 << (%0 & 31)) #define _IsPlayerZombie(%0) _bitPlayer[Zombie] & (1 << (%0 & 31)) #define _MarkPlayerBanshee(%0) _bitPlayer[Banshee] |= (1 << (%0 & 31)) #define _ClearPlayerBanshee(%0) _bitPlayer[Banshee] &= ~(1 << (%0 & 31)) #define _IsPlayerBanshee(%0) _bitPlayer[Banshee] & (1 << (%0 & 31)) #define _MarkPlayerHasBats(%0) _bitPlayer[HasBats] |= (1 << (%0 & 31)) #define _ClearPlayerHasBats(%0) _bitPlayer[HasBats] &= ~(1 << (%0 & 31)) #define _IsPlayerHasBats(%0) _bitPlayer[HasBats] & (1 << (%0 & 31)) #define _MarkPlayerInTrouble(%0) _bitPlayer[InTrouble] |= (1 << (%0 & 31)) #define _ClearPlayerInTrouble(%0) _bitPlayer[InTrouble] &= ~(1 << (%0 & 31)) #define _IsPlayerInTrouble(%0) _bitPlayer[InTrouble] & (1 << (%0 & 31)) #define fm_get_entity_flags(%1) pev(%1, pev_flags) enum _Bits { HasBats, InTrouble, Alive, Connected, Zombie, Banshee } new _bitPlayer[_Bits] new const zclass_name[] = "Banshee Zombie" new const zclass_info[] = "Press F" const zclass_health = 2000 const zclass_speed = 280 const zclass_gravity = 870 new const _BAT_ModEL[] = "models/zombie_plague/bat_witch.mdl" new const _ENT_ClaSS[] = "bat_witch" enum (+= 110) { TASK_BAT_FLY, TASK_HOOK_HUMAN, TASK_THROW_BAT, TASK_COOLDOWN } enum _Cvar { _Cooldown, _RemoveBet_Time, _Hook_speed } new pCvar [_Cvar] new gClass_BansheeID new gExplosion_Spr new gEntity new g_Bat_Mode[33] new g_Target[33] public plugin_init() { register_plugin(_PLUGIN, _VERSION, _AUTHOR) register_impulse(100, "_THrow_Bats") register_touch(_ENT_ClaSS, "*", "_FW_Touch") register_event("HLTV", "_Event_NewRound", "1=0", "2=0") RegisterHam(Ham_Killed, "player", "_FW_Player_Killed", 1) RegisterHam(Ham_Spawn, "player", "_FW_Player_Spawn", 1 ); RegisterHam(Ham_Touch, "player", "_FW_Player_Touch", 0) pCvar[_Cooldown] = register_cvar("zp_banshee_cooldown","30.0") pCvar[_RemoveBet_Time] = register_cvar("zp_banshee_time_removebat","10.0") pCvar[_Hook_speed] = register_cvar("zp_banshee_hook_speed","320.0") } public plugin_precache() { gClass_BansheeID = ze_register_zombie_class(zclass_name, zclass_info, zclass_health, zclass_speed, zclass_gravity) gExplosion_Spr = precache_model("sprites/zerogxplode.spr") precache_model(_BAT_ModEL) } public client_connect(plr) { _MarkPlayerConnected(plr) } public client_disconnected(plr) { _ClearPlayerConnected(plr) } public _FW_Player_Spawn(plr) { if(_IsPlayerConnected(plr)) { _MarkPlayerAlive(plr) } } public ze_select_zombie_class_pre(id, classid) { if (classid != gClass_BansheeID) return ZE_CLASS_AVAILABLE if (~(ze_get_vip_flags(id) & VIP_FLAGS)) return ZE_CLASS_UNAVAILABLE ze_add_zombie_class_menu_text("\rVIP") return ZE_CLASS_AVAILABLE } public ze_select_zombie_class_post(id, classid) { if (classid != gClass_BansheeID) return ze_set_next_zombie_class(id, gClass_BansheeID) } public ze_user_infected(_plr) { _MarkPlayerZombie(_plr) if(ze_get_current_zombie_class(_plr) == gClass_BansheeID) { _MarkPlayerHasBats(_plr) _MarkPlayerBanshee(_plr) } if(_IsPlayerInTrouble(_plr)) { if(task_exists(TASK_BAT_FLY)) { remove_task(TASK_BAT_FLY) } if(task_exists(TASK_HOOK_HUMAN)) { remove_task(TASK_HOOK_HUMAN) } if(is_valid_ent(gEntity)) { remove_entity(gEntity) } } } public ze_user_humanized(plr) { _ClearPlayerZombie(plr) _ClearPlayerBanshee(plr) } public _FW_Player_Killed(victim, attacker, shouldgib) { if (_IsPlayerConnected(victim)) { _ClearPlayerAlive(victim) _ClearPlayerBanshee(victim) if(_IsPlayerBanshee(victim)) { if(_IsPlayerZombie(victim)) { entity_set_int(victim, EV_INT_sequence, random_num(128, 137)) } } _ClearPlayerZombie(victim) } } public _Event_NewRound(id) { _bitPlayer[HasBats] = 0 if(task_exists(TASK_BAT_FLY)) { remove_task(TASK_BAT_FLY) } if(task_exists(TASK_HOOK_HUMAN)) { remove_task(TASK_HOOK_HUMAN) } if(task_exists(id+TASK_THROW_BAT)) { remove_task(id+TASK_THROW_BAT) } if(task_exists(id+TASK_COOLDOWN)) { remove_task(id+TASK_COOLDOWN) } remove_entity(gEntity) _bitPlayer[InTrouble] = 0 } public _THrow_Bats(plr) { if(fm_get_entity_flags(plr) & FL_ONGROUND) return if(_IsPlayerAlive(plr) && _IsPlayerZombie(plr) && _IsPlayerBanshee(plr)) { if(_IsPlayerHasBats(plr)) { new _Body ,_Target get_user_aiming(plr, _Target, _Body, 99999) if(_Target && is_valid_ent(_Target)) { g_Bat_Mode[plr] = 1 g_Target[plr] = _Target _MarkPlayerInTrouble(_Target) _Create_Bets(plr) static bat_array[2] bat_array[0] = gEntity bat_array[1] = g_Target[plr] set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b") set_task(get_pcvar_float(pCvar[_RemoveBet_Time]), "_Remove_Bats", _Target+TASK_THROW_BAT) } else { g_Bat_Mode[plr] = 2 _Create_Bets(plr) new Float:Velocity1[3] VelocityByAim(plr, 700, Velocity1) entity_set_vector(gEntity, EV_VEC_velocity, Velocity1) } set_task(get_pcvar_float(pCvar[_Cooldown]), "_Remove_Cooldown", plr+TASK_COOLDOWN) } } } public _Set_BatFly(bat_array[], taskid) { static _Target _Target = bat_array[1] new owner if(is_valid_ent(gEntity)) owner = entity_get_edict(gEntity,EV_ENT_owner) if(_IsPlayerAlive(owner)) { _Set_Hook(_Target, gEntity) } else { if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY) if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN) remove_entity(gEntity) } } public _SetGrab_player(graber, grabed) { new array2[2] array2[0] = graber array2[1] = grabed set_task(0.1, "_SetGrab_player2", TASK_HOOK_HUMAN, array2, sizeof(array2), "b") } public _SetGrab_player2(array2[], taskid) { static id static target id = array2[0] target = array2[1] _Set_Hook(id, target) entity_set_int(gEntity, EV_INT_solid, SOLID_NOT) } public _Set_Hook(hooker, hooked) { static Float:originF[3] new Float:fl_Velocity[3]; new Float:vicOrigin[3] new Float:distance = get_distance_f(originF, vicOrigin); entity_get_vector(hooker , EV_VEC_origin , originF ); entity_get_vector(hooked , EV_VEC_origin , vicOrigin ); if (distance > 1.0) { new Float:fl_Time = distance / get_pcvar_float(pCvar[_Hook_speed]) fl_Velocity[0] = (originF[0] - vicOrigin[0]) / fl_Time fl_Velocity[1] = (originF[1] - vicOrigin[1]) / fl_Time fl_Velocity[2] = (originF[2] - vicOrigin[2]) / fl_Time } else { fl_Velocity[0] = 0.0 fl_Velocity[1] = 0.0 fl_Velocity[2] = 0.0 } entity_set_vector(hooked, EV_VEC_velocity, fl_Velocity); } public _Create_Bets(owner) { gEntity = create_entity("info_target") new Float:Origin[3], Float:Angle[3] entity_get_vector(owner, EV_VEC_v_angle, Angle) entity_get_vector(owner, EV_VEC_origin, Origin) entity_set_origin(gEntity, Origin) entity_set_string(gEntity,EV_SZ_classname, _ENT_ClaSS); entity_set_model(gEntity, _BAT_ModEL) entity_set_int(gEntity,EV_INT_solid, 2) entity_set_int(gEntity, EV_INT_movetype, 5) entity_set_vector(gEntity, EV_VEC_angles, Angle) entity_set_byte(gEntity,EV_BYTE_controller1,125); entity_set_byte(gEntity,EV_BYTE_controller2,125); entity_set_byte(gEntity,EV_BYTE_controller3,125); entity_set_byte(gEntity,EV_BYTE_controller4,125); new Float:maxs[3] = {10.0,10.0,15.0} new Float:mins[3] = {-10.0,-10.0,-15.0} entity_set_size(gEntity,mins,maxs) entity_set_edict(gEntity, EV_ENT_owner, owner) entity_set_float(gEntity,EV_FL_animtime,2.0) entity_set_float(gEntity,EV_FL_framerate,1.0) entity_set_int(gEntity,EV_INT_sequence, 0) } public _FW_Touch(ent, touched) { new owner = entity_get_edict(gEntity,EV_ENT_owner) new id = g_Target[owner] if(g_Bat_Mode[owner] == 1 && ~_IsPlayerInTrouble(id) && ~_IsPlayerZombie(id)) { _MarkPlayerInTrouble(id) _SetGrab_player(owner, id) } else if(g_Bat_Mode[owner] == 2 && ~_IsPlayerInTrouble(touched)) { if(_IsPlayerAlive(touched) && ~_IsPlayerZombie(touched)) { _SetGrab_player(owner, touched) _MarkPlayerInTrouble(touched) static bat_array[2] bat_array[0] = ent bat_array[1] = touched set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b") } else { new Float:Origin[3] entity_get_vector(ent, EV_VEC_origin, Origin) message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(3) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(gExplosion_Spr) write_byte(25) write_byte(30) write_byte(0) message_end() remove_entity(ent) } } } public _FW_Player_Touch(ptr, ptd) { if(!is_valid_ent(ptr) || !is_valid_ent(ptd)) return FMRES_IGNORED if(~_IsPlayerAlive(ptr) || ~_IsPlayerAlive(ptd) || ~_IsPlayerZombie(ptr) || _IsPlayerZombie(ptd)) return FMRES_IGNORED if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) { remove_task(TASK_BAT_FLY) remove_task(TASK_HOOK_HUMAN) remove_task(TASK_THROW_BAT) remove_entity(gEntity) _ClearPlayerInTrouble(ptd) } else if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) { remove_task(TASK_BAT_FLY) remove_task(TASK_HOOK_HUMAN) remove_task(TASK_THROW_BAT) remove_entity(gEntity) _ClearPlayerInTrouble(ptd) } return FMRES_HANDLED } public remove_bat(taskid) { new id = taskid - TASK_THROW_BAT if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY) if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN) if(task_exists(id+TASK_THROW_BAT)) remove_task(id+TASK_THROW_BAT) if(is_valid_ent(gEntity)) { remove_entity(gEntity) } _ClearPlayerInTrouble(id) } public remove_cooldown(taskid) { new id = taskid - TASK_COOLDOWN if(_IsPlayerAlive(id) && _IsPlayerZombie(id) && _IsPlayerBanshee(id)) { client_print(id, print_chat,"Now you can Drop Bat. Press (F)") _MarkPlayerHasBats(id) } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang10266\\ f0\\ fs16 \n\\ par } */
Jack GamePlay wrote: ↑5 years ago
#include <zombie_escape> #include <ze_zombie_class> #include <ze_vip> #include < engine > #define _PLUGIN "[ZP] Zombie Class: Banshee Zombie" #define _VERSION "1.0" #define _AUTHOR "H.RED.ZONE" #define VIP_FLAGS VIP_A #define _MarkPlayerConnected(%0) _bitPlayer[Connected] |= (1 << (%0 & 31)) #define _ClearPlayerConnected(%0) _bitPlayer[Connected] &= ~(1 << (%0 & 31)) #define _IsPlayerConnected(%0) _bitPlayer[Connected] & (1 << (%0 & 31)) #define _MarkPlayerAlive(%0) _bitPlayer[Alive] |= (1 << (%0 & 31)) #define _ClearPlayerAlive(%0) _bitPlayer[Alive] &= ~(1 << (%0 & 31)) #define _IsPlayerAlive(%0) _bitPlayer[Alive] & (1 << (%0 & 31)) #define _MarkPlayerZombie(%0) _bitPlayer[Zombie] |= (1 << (%0 & 31)) #define _ClearPlayerZombie(%0) _bitPlayer[Zombie] &= ~(1 << (%0 & 31)) #define _IsPlayerZombie(%0) _bitPlayer[Zombie] & (1 << (%0 & 31)) #define _MarkPlayerBanshee(%0) _bitPlayer[Banshee] |= (1 << (%0 & 31)) #define _ClearPlayerBanshee(%0) _bitPlayer[Banshee] &= ~(1 << (%0 & 31)) #define _IsPlayerBanshee(%0) _bitPlayer[Banshee] & (1 << (%0 & 31)) #define _MarkPlayerHasBats(%0) _bitPlayer[HasBats] |= (1 << (%0 & 31)) #define _ClearPlayerHasBats(%0) _bitPlayer[HasBats] &= ~(1 << (%0 & 31)) #define _IsPlayerHasBats(%0) _bitPlayer[HasBats] & (1 << (%0 & 31)) #define _MarkPlayerInTrouble(%0) _bitPlayer[InTrouble] |= (1 << (%0 & 31)) #define _ClearPlayerInTrouble(%0) _bitPlayer[InTrouble] &= ~(1 << (%0 & 31)) #define _IsPlayerInTrouble(%0) _bitPlayer[InTrouble] & (1 << (%0 & 31)) #define fm_get_entity_flags(%1) pev(%1, pev_flags) enum _Bits { HasBats, InTrouble, Alive, Connected, Zombie, Banshee } new _bitPlayer[_Bits] new const zclass_name[] = "Banshee Zombie" new const zclass_info[] = "Press F" const zclass_health = 2000 const zclass_speed = 280 const zclass_gravity = 870 new const _BAT_ModEL[] = "models/zombie_plague/bat_witch.mdl" new const _ENT_ClaSS[] = "bat_witch" enum (+= 110) { TASK_BAT_FLY, TASK_HOOK_HUMAN, TASK_THROW_BAT, TASK_COOLDOWN } enum _Cvar { _Cooldown, _RemoveBet_Time, _Hook_speed } new pCvar [_Cvar] new gClass_BansheeID new gExplosion_Spr new gEntity new g_Bat_Mode[33] new g_Target[33] public plugin_init() { register_plugin(_PLUGIN, _VERSION, _AUTHOR) register_impulse(100, "_THrow_Bats") register_touch(_ENT_ClaSS, "*", "_FW_Touch") register_event("HLTV", "_Event_NewRound", "1=0", "2=0") RegisterHam(Ham_Killed, "player", "_FW_Player_Killed", 1) RegisterHam(Ham_Spawn, "player", "_FW_Player_Spawn", 1 ); RegisterHam(Ham_Touch, "player", "_FW_Player_Touch", 0) pCvar[_Cooldown] = register_cvar("zp_banshee_cooldown","30.0") pCvar[_RemoveBet_Time] = register_cvar("zp_banshee_time_removebat","10.0") pCvar[_Hook_speed] = register_cvar("zp_banshee_hook_speed","320.0") } public plugin_precache() { gClass_BansheeID = ze_register_zombie_class(zclass_name, zclass_info, zclass_health, zclass_speed, zclass_gravity) gExplosion_Spr = precache_model("sprites/zerogxplode.spr") precache_model(_BAT_ModEL) } public client_connect(plr) { _MarkPlayerConnected(plr) } public client_disconnected(plr) { _ClearPlayerConnected(plr) } public _FW_Player_Spawn(plr) { if(_IsPlayerConnected(plr)) { _MarkPlayerAlive(plr) } } public ze_select_zombie_class_pre(id, classid) { if (classid != gClass_BansheeID) return ZE_CLASS_AVAILABLE if (~(ze_get_vip_flags(id) & VIP_FLAGS)) return ZE_CLASS_UNAVAILABLE ze_add_zombie_class_menu_text("\rVIP") return ZE_CLASS_AVAILABLE } public ze_select_zombie_class_post(id, classid) { if (classid != gClass_BansheeID) return ze_set_next_zombie_class(id, gClass_BansheeID) } public ze_user_infected(_plr) { _MarkPlayerZombie(_plr) if(ze_get_current_zombie_class(_plr) == gClass_BansheeID) { _MarkPlayerHasBats(_plr) _MarkPlayerBanshee(_plr) } if(_IsPlayerInTrouble(_plr)) { if(task_exists(TASK_BAT_FLY)) { remove_task(TASK_BAT_FLY) } if(task_exists(TASK_HOOK_HUMAN)) { remove_task(TASK_HOOK_HUMAN) } if(is_valid_ent(gEntity)) { remove_entity(gEntity) } } } public ze_user_humanized(plr) { _ClearPlayerZombie(plr) _ClearPlayerBanshee(plr) } public _FW_Player_Killed(victim, attacker, shouldgib) { if (_IsPlayerConnected(victim)) { _ClearPlayerAlive(victim) _ClearPlayerBanshee(victim) if(_IsPlayerBanshee(victim)) { if(_IsPlayerZombie(victim)) { entity_set_int(victim, EV_INT_sequence, random_num(128, 137)) } } _ClearPlayerZombie(victim) } } public _Event_NewRound(id) { _bitPlayer[HasBats] = 0 if(task_exists(TASK_BAT_FLY)) { remove_task(TASK_BAT_FLY) } if(task_exists(TASK_HOOK_HUMAN)) { remove_task(TASK_HOOK_HUMAN) } if(task_exists(id+TASK_THROW_BAT)) { remove_task(id+TASK_THROW_BAT) } if(task_exists(id+TASK_COOLDOWN)) { remove_task(id+TASK_COOLDOWN) } remove_entity(gEntity) _bitPlayer[InTrouble] = 0 } public _THrow_Bats(plr) { if(fm_get_entity_flags(plr) & FL_ONGROUND) return if(_IsPlayerAlive(plr) && _IsPlayerZombie(plr) && _IsPlayerBanshee(plr)) { if(_IsPlayerHasBats(plr)) { new _Body ,_Target get_user_aiming(plr, _Target, _Body, 99999) if(_Target && is_valid_ent(_Target)) { g_Bat_Mode[plr] = 1 g_Target[plr] = _Target _MarkPlayerInTrouble(_Target) _Create_Bets(plr) static bat_array[2] bat_array[0] = gEntity bat_array[1] = g_Target[plr] set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b") set_task(get_pcvar_float(pCvar[_RemoveBet_Time]), "_Remove_Bats", _Target+TASK_THROW_BAT) } else { g_Bat_Mode[plr] = 2 _Create_Bets(plr) new Float:Velocity1[3] VelocityByAim(plr, 700, Velocity1) entity_set_vector(gEntity, EV_VEC_velocity, Velocity1) } set_task(get_pcvar_float(pCvar[_Cooldown]), "_Remove_Cooldown", plr+TASK_COOLDOWN) } } } public _Set_BatFly(bat_array[], taskid) { static _Target _Target = bat_array[1] new owner if(is_valid_ent(gEntity)) owner = entity_get_edict(gEntity,EV_ENT_owner) if(_IsPlayerAlive(owner)) { _Set_Hook(_Target, gEntity) } else { if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY) if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN) remove_entity(gEntity) } } public _SetGrab_player(graber, grabed) { new array2[2] array2[0] = graber array2[1] = grabed set_task(0.1, "_SetGrab_player2", TASK_HOOK_HUMAN, array2, sizeof(array2), "b") } public _SetGrab_player2(array2[], taskid) { static id static target id = array2[0] target = array2[1] _Set_Hook(id, target) entity_set_int(gEntity, EV_INT_solid, SOLID_NOT) } public _Set_Hook(hooker, hooked) { static Float:originF[3] new Float:fl_Velocity[3]; new Float:vicOrigin[3] new Float:distance = get_distance_f(originF, vicOrigin); entity_get_vector(hooker , EV_VEC_origin , originF ); entity_get_vector(hooked , EV_VEC_origin , vicOrigin ); if (distance > 1.0) { new Float:fl_Time = distance / get_pcvar_float(pCvar[_Hook_speed]) fl_Velocity[0] = (originF[0] - vicOrigin[0]) / fl_Time fl_Velocity[1] = (originF[1] - vicOrigin[1]) / fl_Time fl_Velocity[2] = (originF[2] - vicOrigin[2]) / fl_Time } else { fl_Velocity[0] = 0.0 fl_Velocity[1] = 0.0 fl_Velocity[2] = 0.0 } entity_set_vector(hooked, EV_VEC_velocity, fl_Velocity); } public _Create_Bets(owner) { gEntity = create_entity("info_target") new Float:Origin[3], Float:Angle[3] entity_get_vector(owner, EV_VEC_v_angle, Angle) entity_get_vector(owner, EV_VEC_origin, Origin) entity_set_origin(gEntity, Origin) entity_set_string(gEntity,EV_SZ_classname, _ENT_ClaSS); entity_set_model(gEntity, _BAT_ModEL) entity_set_int(gEntity,EV_INT_solid, 2) entity_set_int(gEntity, EV_INT_movetype, 5) entity_set_vector(gEntity, EV_VEC_angles, Angle) entity_set_byte(gEntity,EV_BYTE_controller1,125); entity_set_byte(gEntity,EV_BYTE_controller2,125); entity_set_byte(gEntity,EV_BYTE_controller3,125); entity_set_byte(gEntity,EV_BYTE_controller4,125); new Float:maxs[3] = {10.0,10.0,15.0} new Float:mins[3] = {-10.0,-10.0,-15.0} entity_set_size(gEntity,mins,maxs) entity_set_edict(gEntity, EV_ENT_owner, owner) entity_set_float(gEntity,EV_FL_animtime,2.0) entity_set_float(gEntity,EV_FL_framerate,1.0) entity_set_int(gEntity,EV_INT_sequence, 0) } public _FW_Touch(ent, touched) { new owner = entity_get_edict(gEntity,EV_ENT_owner) new id = g_Target[owner] if(g_Bat_Mode[owner] == 1 && ~_IsPlayerInTrouble(id) && ~_IsPlayerZombie(id)) { _MarkPlayerInTrouble(id) _SetGrab_player(owner, id) } else if(g_Bat_Mode[owner] == 2 && ~_IsPlayerInTrouble(touched)) { if(_IsPlayerAlive(touched) && ~_IsPlayerZombie(touched)) { _SetGrab_player(owner, touched) _MarkPlayerInTrouble(touched) static bat_array[2] bat_array[0] = ent bat_array[1] = touched set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b") } else { new Float:Origin[3] entity_get_vector(ent, EV_VEC_origin, Origin) message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(3) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(gExplosion_Spr) write_byte(25) write_byte(30) write_byte(0) message_end() remove_entity(ent) } } } public _FW_Player_Touch(ptr, ptd) { if(!is_valid_ent(ptr) || !is_valid_ent(ptd)) return FMRES_IGNORED if(~_IsPlayerAlive(ptr) || ~_IsPlayerAlive(ptd) || ~_IsPlayerZombie(ptr) || _IsPlayerZombie(ptd)) return FMRES_IGNORED if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) { remove_task(TASK_BAT_FLY) remove_task(TASK_HOOK_HUMAN) remove_task(TASK_THROW_BAT) remove_entity(gEntity) _ClearPlayerInTrouble(ptd) } else if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) { remove_task(TASK_BAT_FLY) remove_task(TASK_HOOK_HUMAN) remove_task(TASK_THROW_BAT) remove_entity(gEntity) _ClearPlayerInTrouble(ptd) } return FMRES_HANDLED } public remove_bat(taskid) { new id = taskid - TASK_THROW_BAT if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY) if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN) if(task_exists(id+TASK_THROW_BAT)) remove_task(id+TASK_THROW_BAT) if(is_valid_ent(gEntity)) { remove_entity(gEntity) } _ClearPlayerInTrouble(id) } public remove_cooldown(taskid) { new id = taskid - TASK_COOLDOWN if(_IsPlayerAlive(id) && _IsPlayerZombie(id) && _IsPlayerBanshee(id)) { client_print(id, print_chat,"Now you can Drop Bat. Press (F)") _MarkPlayerHasBats(id) } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang10266\\ f0\\ fs16 \n\\ par } */
- error 010: invalid function or declaration
- // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v1.8.3\scripting\include\engine_const.inc(88) : error 010: invalid function or declaration
- // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v1.8.3\scripting\zc_class_banshee.sma(172) : error 017: undefined symbol "EV_INT_sequence"
- // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v1.8.3\scripting\zc_class_banshee.sma(172) : error 001: expected token: ";", but found ")"
- // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v1.8.3\scripting\zc_class_banshee.sma(172) : error 029: invalid expression, assumed zero
- // D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v1.8.3\scripting\zc_class_banshee.sma(172) : fatal error 107: too many error messages on one line
- //
- // Compilation aborted.
- // 6 Errors.
- // Could not locate output file D:\Games\Funny\Rehlds_publish_3.4.0.641_artifacts\old\Addons\Compiler v1.8.3\scripting\compiled\zc_class_banshee.amx (compile failed).
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015
IP : 81.169.153.129:27015
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
Use fixed compiler.
i using the latest one !
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015
IP : 81.169.153.129:27015
this class is bugged i installed it but when i click 5. Banshee Zombie nothing appear from chat and the class never work.
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
There is no banshee zombie class here.
This is not one class but 5 classes.
Read the topic again.
If you have errors, post all errors you face.
so what's this ?Jack GamePlay wrote: ↑5 years agoTryRain1153 wrote: ↑5 years ago https://forums.alliedmods.net/showthread.php?t=169354
Another suggestion jack
#include <zombie_escape> #include <ze_zombie_class> #include < engine > #define _PLUGIN "[ZP] Zombie Class: Banshee Zombie" #define _VERSION "1.0" #define _AUTHOR "H.RED.ZONE" #define _MarkPlayerConnected(%0) _bitPlayer[Connected] |= (1 << (%0 & 31)) #define _ClearPlayerConnected(%0) _bitPlayer[Connected] &= ~(1 << (%0 & 31)) #define _IsPlayerConnected(%0) _bitPlayer[Connected] & (1 << (%0 & 31)) #define _MarkPlayerAlive(%0) _bitPlayer[Alive] |= (1 << (%0 & 31)) #define _ClearPlayerAlive(%0) _bitPlayer[Alive] &= ~(1 << (%0 & 31)) #define _IsPlayerAlive(%0) _bitPlayer[Alive] & (1 << (%0 & 31)) #define _MarkPlayerZombie(%0) _bitPlayer[Zombie] |= (1 << (%0 & 31)) #define _ClearPlayerZombie(%0) _bitPlayer[Zombie] &= ~(1 << (%0 & 31)) #define _IsPlayerZombie(%0) _bitPlayer[Zombie] & (1 << (%0 & 31)) #define _MarkPlayerBanshee(%0) _bitPlayer[Banshee] |= (1 << (%0 & 31)) #define _ClearPlayerBanshee(%0) _bitPlayer[Banshee] &= ~(1 << (%0 & 31)) #define _IsPlayerBanshee(%0) _bitPlayer[Banshee] & (1 << (%0 & 31)) #define _MarkPlayerHasBats(%0) _bitPlayer[HasBats] |= (1 << (%0 & 31)) #define _ClearPlayerHasBats(%0) _bitPlayer[HasBats] &= ~(1 << (%0 & 31)) #define _IsPlayerHasBats(%0) _bitPlayer[HasBats] & (1 << (%0 & 31)) #define _MarkPlayerInTrouble(%0) _bitPlayer[InTrouble] |= (1 << (%0 & 31)) #define _ClearPlayerInTrouble(%0) _bitPlayer[InTrouble] &= ~(1 << (%0 & 31)) #define _IsPlayerInTrouble(%0) _bitPlayer[InTrouble] & (1 << (%0 & 31)) #define fm_get_entity_flags(%1) pev(%1, pev_flags) enum _Bits { HasBats, InTrouble, Alive, Connected, Zombie, Banshee } new _bitPlayer[_Bits] new const zclass_name[] = "Banshee Zombie" new const zclass_info[] = "Press F" const zclass_health = 2000 const zclass_speed = 280 const zclass_gravity = 870 new const _BAT_ModEL[] = "models/zombie_plague/bat_witch.mdl" new const _ENT_ClaSS[] = "bat_witch" enum (+= 110) { TASK_BAT_FLY, TASK_HOOK_HUMAN, TASK_THROW_BAT, TASK_COOLDOWN } enum _Cvar { _Cooldown, _RemoveBet_Time, _Hook_speed } new pCvar [_Cvar] new gClass_BansheeID new gExplosion_Spr new gEntity new g_Bat_Mode[33] new g_Target[33] public plugin_init() { register_plugin(_PLUGIN, _VERSION, _AUTHOR) register_impulse(100, "_THrow_Bats") register_touch(_ENT_ClaSS, "*", "_FW_Touch") register_event("HLTV", "_Event_NewRound", "1=0", "2=0") RegisterHam(Ham_Killed, "player", "_FW_Player_Killed", 1) RegisterHam(Ham_Spawn, "player", "_FW_Player_Spawn", 1 ); RegisterHam(Ham_Touch, "player", "_FW_Player_Touch", 0) pCvar[_Cooldown] = register_cvar("zp_banshee_cooldown","30.0") pCvar[_RemoveBet_Time] = register_cvar("zp_banshee_time_removebat","10.0") pCvar[_Hook_speed] = register_cvar("zp_banshee_hook_speed","320.0") } public plugin_precache() { gClass_BansheeID = ze_register_zombie_class(zclass_name, zclass_info, zclass_health, zclass_speed, zclass_gravity) gExplosion_Spr = precache_model("sprites/zerogxplode.spr") precache_model(_BAT_ModEL) } public client_connect(plr) { _MarkPlayerConnected(plr) } public client_disconnected(plr) { _ClearPlayerConnected(plr) } public _FW_Player_Spawn(plr) { if(_IsPlayerConnected(plr)) { _MarkPlayerAlive(plr) } } public ze_user_infected(_plr) { _MarkPlayerZombie(_plr) if(ze_get_current_zombie_class(_plr) == gClass_BansheeID) { _MarkPlayerHasBats(_plr) _MarkPlayerBanshee(_plr) } if(_IsPlayerInTrouble(_plr)) { if(task_exists(TASK_BAT_FLY)) { remove_task(TASK_BAT_FLY) } if(task_exists(TASK_HOOK_HUMAN)) { remove_task(TASK_HOOK_HUMAN) } if(is_valid_ent(gEntity)) { remove_entity(gEntity) } } } public ze_user_humanized(plr) { _ClearPlayerZombie(plr) _ClearPlayerBanshee(plr) } public _FW_Player_Killed(victim, attacker, shouldgib) { if (_IsPlayerConnected(victim)) { _ClearPlayerAlive(victim) _ClearPlayerBanshee(victim) if(_IsPlayerBanshee(victim)) { if(_IsPlayerZombie(victim)) { entity_set_int(victim, EV_INT_sequence, random_num(128, 137)) } } _ClearPlayerZombie(victim) } } public _Event_NewRound(id) { _bitPlayer[HasBats] = 0 if(task_exists(TASK_BAT_FLY)) { remove_task(TASK_BAT_FLY) } if(task_exists(TASK_HOOK_HUMAN)) { remove_task(TASK_HOOK_HUMAN) } if(task_exists(id+TASK_THROW_BAT)) { remove_task(id+TASK_THROW_BAT) } if(task_exists(id+TASK_COOLDOWN)) { remove_task(id+TASK_COOLDOWN) } remove_entity(gEntity) _bitPlayer[InTrouble] = 0 } public _THrow_Bats(plr) { if(fm_get_entity_flags(plr) & FL_ONGROUND) return if(_IsPlayerAlive(plr) && _IsPlayerZombie(plr) && _IsPlayerBanshee(plr)) { if(_IsPlayerHasBats(plr)) { new _Body ,_Target get_user_aiming(plr, _Target, _Body, 99999) if(_Target && is_valid_ent(_Target)) { g_Bat_Mode[plr] = 1 g_Target[plr] = _Target _MarkPlayerInTrouble(_Target) _Create_Bets(plr) static bat_array[2] bat_array[0] = gEntity bat_array[1] = g_Target[plr] set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b") set_task(get_pcvar_float(pCvar[_RemoveBet_Time]), "_Remove_Bats", _Target+TASK_THROW_BAT) } else { g_Bat_Mode[plr] = 2 _Create_Bets(plr) new Float:Velocity1[3] VelocityByAim(plr, 700, Velocity1) entity_set_vector(gEntity, EV_VEC_velocity, Velocity1) } set_task(get_pcvar_float(pCvar[_Cooldown]), "_Remove_Cooldown", plr+TASK_COOLDOWN) } } } public _Set_BatFly(bat_array[], taskid) { static _Target _Target = bat_array[1] new owner if(is_valid_ent(gEntity)) owner = entity_get_edict(gEntity,EV_ENT_owner) if(_IsPlayerAlive(owner)) { _Set_Hook(_Target, gEntity) } else { if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY) if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN) remove_entity(gEntity) } } public _SetGrab_player(graber, grabed) { new array2[2] array2[0] = graber array2[1] = grabed set_task(0.1, "_SetGrab_player2", TASK_HOOK_HUMAN, array2, sizeof(array2), "b") } public _SetGrab_player2(array2[], taskid) { static id static target id = array2[0] target = array2[1] _Set_Hook(id, target) entity_set_int(gEntity, EV_INT_solid, SOLID_NOT) } public _Set_Hook(hooker, hooked) { static Float:originF[3] new Float:fl_Velocity[3]; new Float:vicOrigin[3] new Float:distance = get_distance_f(originF, vicOrigin); entity_get_vector(hooker , EV_VEC_origin , originF ); entity_get_vector(hooked , EV_VEC_origin , vicOrigin ); if (distance > 1.0) { new Float:fl_Time = distance / get_pcvar_float(pCvar[_Hook_speed]) fl_Velocity[0] = (originF[0] - vicOrigin[0]) / fl_Time fl_Velocity[1] = (originF[1] - vicOrigin[1]) / fl_Time fl_Velocity[2] = (originF[2] - vicOrigin[2]) / fl_Time } else { fl_Velocity[0] = 0.0 fl_Velocity[1] = 0.0 fl_Velocity[2] = 0.0 } entity_set_vector(hooked, EV_VEC_velocity, fl_Velocity); } public _Create_Bets(owner) { gEntity = create_entity("info_target") new Float:Origin[3], Float:Angle[3] entity_get_vector(owner, EV_VEC_v_angle, Angle) entity_get_vector(owner, EV_VEC_origin, Origin) entity_set_origin(gEntity, Origin) entity_set_string(gEntity,EV_SZ_classname, _ENT_ClaSS); entity_set_model(gEntity, _BAT_ModEL) entity_set_int(gEntity,EV_INT_solid, 2) entity_set_int(gEntity, EV_INT_movetype, 5) entity_set_vector(gEntity, EV_VEC_angles, Angle) entity_set_byte(gEntity,EV_BYTE_controller1,125); entity_set_byte(gEntity,EV_BYTE_controller2,125); entity_set_byte(gEntity,EV_BYTE_controller3,125); entity_set_byte(gEntity,EV_BYTE_controller4,125); new Float:maxs[3] = {10.0,10.0,15.0} new Float:mins[3] = {-10.0,-10.0,-15.0} entity_set_size(gEntity,mins,maxs) entity_set_edict(gEntity, EV_ENT_owner, owner) entity_set_float(gEntity,EV_FL_animtime,2.0) entity_set_float(gEntity,EV_FL_framerate,1.0) entity_set_int(gEntity,EV_INT_sequence, 0) } public _FW_Touch(ent, touched) { new owner = entity_get_edict(gEntity,EV_ENT_owner) new id = g_Target[owner] if(g_Bat_Mode[owner] == 1 && ~_IsPlayerInTrouble(id) && ~_IsPlayerZombie(id)) { _MarkPlayerInTrouble(id) _SetGrab_player(owner, id) } else if(g_Bat_Mode[owner] == 2 && ~_IsPlayerInTrouble(touched)) { if(_IsPlayerAlive(touched) && ~_IsPlayerZombie(touched)) { _SetGrab_player(owner, touched) _MarkPlayerInTrouble(touched) static bat_array[2] bat_array[0] = ent bat_array[1] = touched set_task(0.1, "_Set_BatFly", TASK_BAT_FLY, bat_array, sizeof(bat_array), "b") } else { new Float:Origin[3] entity_get_vector(ent, EV_VEC_origin, Origin) message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(3) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(gExplosion_Spr) write_byte(25) write_byte(30) write_byte(0) message_end() remove_entity(ent) } } } public _FW_Player_Touch(ptr, ptd) { if(!is_valid_ent(ptr) || !is_valid_ent(ptd)) return FMRES_IGNORED if(~_IsPlayerAlive(ptr) || ~_IsPlayerAlive(ptd) || ~_IsPlayerZombie(ptr) || _IsPlayerZombie(ptd)) return FMRES_IGNORED if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) { remove_task(TASK_BAT_FLY) remove_task(TASK_HOOK_HUMAN) remove_task(TASK_THROW_BAT) remove_entity(gEntity) _ClearPlayerInTrouble(ptd) } else if(_IsPlayerInTrouble(ptd) && g_Bat_Mode[ptr] == 1) { remove_task(TASK_BAT_FLY) remove_task(TASK_HOOK_HUMAN) remove_task(TASK_THROW_BAT) remove_entity(gEntity) _ClearPlayerInTrouble(ptd) } return FMRES_HANDLED } public remove_bat(taskid) { new id = taskid - TASK_THROW_BAT if(task_exists(TASK_BAT_FLY)) remove_task(TASK_BAT_FLY) if(task_exists(TASK_HOOK_HUMAN)) remove_task(TASK_HOOK_HUMAN) if(task_exists(id+TASK_THROW_BAT)) remove_task(id+TASK_THROW_BAT) if(is_valid_ent(gEntity)) { remove_entity(gEntity) } _ClearPlayerInTrouble(id) } public remove_cooldown(taskid) { new id = taskid - TASK_COOLDOWN if(_IsPlayerAlive(id) && _IsPlayerZombie(id) && _IsPlayerBanshee(id)) { client_print(id, print_chat,"Now you can Drop Bat. Press (F)") _MarkPlayerHasBats(id) } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang10266\\ f0\\ fs16 \n\\ par } */
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
Any errors?
There's no erros on compiler it compiles fine but the banshee zombie class won't work when i click on 6. Banshee Zombie VIP no thing happen.
- crasy00skull
- Member
- Posts: 1
- Joined: 5 years ago
- Contact:
zombie_classes.inc:
Code:
Code:
Code: Select all
#include <ze_zombie_classes_const>
/*****************************************/
/************ FORWARDS **************/
/*****************************************/
/**
* Called when determining whether a class should be available to a player.
*
* Possible return values are:
* - ZE_CLASS_AVAILABLE (show in menu, allow selection)
* - ZE_CLASS_UNAVAILABLE (show in menu, don't allow selection)
* - ZE_CLASS_DONT_SHOW (don't show in menu, don't allow selection)
*
* @param id Player index.
* @param classid Internal zombie class ID.
*/
forward ze_select_zombie_class_pre(id, classid)
/**
* Called right after a player selects a class from the menu.
*
* @param id Player index.
* @param classid Internal zombie class ID.
*/
forward ze_select_zombie_class_post(id, classid)
/*****************************************/
/************** NATIVES ******************/
/*****************************************/
/**
* Returns a player's current zombie class ID.
*
* @param id Player index.
* @return Internal zombie class ID, or ZE_WRONG_ZOMBIE_CLASS if not yet chosen.
*/
native ze_get_current_zombie_class(id)
/**
* Returns a player's next zombie class ID (for the next infection).
*
* @param id Player index.
* @return Internal zombie class ID, or ZE_WRONG_ZOMBIE_CLASS if not yet chosen.
*/
native ze_get_next_zombie_class(id)
/**
* Sets a player's next zombie class ID (for the next infection).
*
* @param id Player index.
* @param classid A valid zombie class ID.
* @return True on success, false otherwise.
*/
native ze_set_next_zombie_class(id, classid)
/**
* Returns the default maximum health for a specific zombie class.
*
* Note: does not take into account any kind of HP multipliers.
*
* @param id Player index.
* @param classid A valid zombie class ID.
* @return Maximum amount of health points, -1 on error.
*/
native ze_get_zombie_class_health(id, classid)
/**
* Registers a custom class which will be added to the zombie classes menu of ZP.
*
* Note: The returned zombie class ID can be later used to identify
* the class when calling the zp_get_user_zombie_class() natives.
*
* @param name Caption to display on the menu.
* @param description Brief description of the class.
* @param health Class health.
* @param speed Class maxspeed (can be a multiplier).
* @param gravity Class gravity multiplier.
* @return An internal zombie class ID, or ZE_WRONG_ZOMBIE_CLASS on failure.
*/
native ze_register_zombie_class(const name[], const description[], health, speed, gravity)
/**
* Returns a zombie class' ID.
*
* @param name Class name to look for.
* @return Internal zombie class ID, or ZE_WRONG_ZOMBIE_CLASS if not found.
*/
native ze_get_zombie_class_id(const real_name[])
/**
* Returns a zombie class' name.
*
* @param classid A valid zombie class ID.
* @param name The buffer to store the string in.
* @param len Character size of the output buffer.
* @return True on success, false otherwise.
*/
native ze_get_zombie_class_name(classid, name[], len)
/**
* Returns a zombie class' description.
*
* @param classid A valid zombie class ID.
* @param description The buffer to store the string in.
* @param len Character size of the output buffer.
* @return True on success, false otherwise.
*/
native ze_get_zombie_class_desc(classid, description[], len)
/**
* Returns number of registered zombie classes.
*
* @return Zombie class count.
*/
native ze_get_zombie_class_number()
/**
* Shows menu with available zombie classes to a player.
*
* @param id Player index.
*/
native ze_open_zombie_classes_menu(id)
/**
* Appends text to a class being displayed on the zombie classes menu.
* Use this on the class select pre forward.
*
* @param text Additional text to display.
*/
native ze_add_zombie_class_menu_text(const text[])
-
- Member
- Posts: 25
- Joined: 3 years ago
- Contact:
Hey escapers, I have a problem with compiling the "banshee" code, it shows "could not locate ouput file c:\hp\users\desktop\scripting\compiled\ze_banshee.amxx" compiled failed.
What should I do ? Help me
Thank You
What should I do ? Help me
Thank You
him is mean,you can updated zombie class if you want make Zombie for VIP (access) ...
Zombie Leech - [VIP Only]
-
- Member
- Posts: 25
- Joined: 3 years ago
- Contact:
I am getting error in this code of banshee zombie class for zombie escape server may be I am doing it wrong please help
THANK YOU
THANK YOU
- Attachments
-
- ze_banshee.sma
- (12.09 KiB) Downloaded 342 times
- ze_banshee.sma
- (12.09 KiB) Downloaded 342 times
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
What's the error exactly?DeVil_Raghav wrote: ↑3 years ago I am getting error in this code of banshee zombie class for zombie escape server may be I am doing it wrong please help
THANK YOU
Paste it here so we can help.
-
- Member
- Posts: 25
- Joined: 3 years ago
- Contact:
The Error is =Mohamed Alaa wrote: ↑3 years agoWhat's the error exactly?DeVil_Raghav wrote: ↑3 years ago I am getting error in this code of banshee zombie class for zombie escape server may be I am doing it wrong please help
THANK YOU
Paste it here so we can help.
//C:\Users\error\hp\Downloads\compiler\scripting\ze_banshee.sma<2> : fatal error 100: cannot read from file: "ze_zombie_class"
//
//compilaton aborted
//1 Error.
//could no locate the ouput file C:\Users\hp\Downloads\compiler\scripting\compiled\ze_banshee.amx <compile failed>.
//
//compilation time : 2.92 sec
-
- Member
- Posts: 25
- Joined: 3 years ago
- Contact:
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
Sign in
Who is online
Users browsing this forum: No registered users and 0 guests