AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Solved Problem zombie banshee (https://forums.alliedmods.net/showthread.php?t=337935)

JUSTINR 05-27-2022 10:51

Problem zombie banshee
 
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 }
*/



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

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