Zombie class conversion
Posted: 31 Jul 2018, 03:26
Zombie Escape Mod for Counter-Strike 1.6
https://escapers-zone.net/
Soon i'll convert itRain1153 wrote: ↑5 years ago https://forums.alliedmods.net/showthread.php?t=169354
Can anybody convert this?
What do you mean?
Night Fury wrote: ↑5 years ago Try:
#include < zombie_escape > #include <ze_zombie_class> #include < engine > #include < fakemeta > #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 = 770 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) } }