Raised This Month: $32 Target: $400
 8% 

Solved Problem zombie banshee


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
JUSTINR
Member
Join Date: May 2022
Old 05-27-2022 , 10:51   Problem zombie banshee
Reply With Quote #1

Hello Allied Modders ,

I put this class in my server,but dont working ability ... When you press F nothing happens..
Can u help me ?

I use base zpa.

HTML Code:
#include < amxmodx >
#include < engine >
#include < fakemeta >
#include < hamsandwich >
#include < zombie_plague_advance >
#include < zombiexp >


#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"
new const zclass_model[] = "hell_witch"
new const zclass_clawmodel[] = "v_knife_witch_zombi.mdl"
const zclass_health = 8000
const zclass_speed = 280
const Float:zclass_gravity = 0.7
const Float:zclass_knockback = 1.0
const hclass_level = 19 // level required to use

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 = zpxp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback, hclass_level)	

	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 zp_user_infected_post(_plr) {
	_MarkPlayerZombie(_plr)
	
	if(zp_get_user_zombie_class(_plr) == gClass_BansheeID) {
		if(!zp_get_user_nemesis(_plr)) {
			_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 zp_user_humanized_post(plr, survivor) {
	_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 }
*/

Last edited by JUSTINR; 05-28-2022 at 20:24. Reason: Fixed
JUSTINR is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 21:08.


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