Senior Member
Join Date: Apr 2019
Location: Iran
|
08-08-2019
, 13:13
code optimization
|
#1
|
Hi,
All i need is, a high level scripter check this plugin and tell me if it has code problems or it can be done in a better way , thanks.
PHP Code:
/*********************************** Includes ************************************/
#include <amxmodx> #include <cstrike> #include <engine> #include <fakemeta_util> #include <fun> #include <hamsandwich> #include <zombieplague>
#if AMXX_VERSION_NUM < 183 #include <colorchat> #define Red print_team_red #endif /*********************************** Defines ************************************/
//pickup weapon #define NormalAmmo pev_iuser1 #define IceAmmo pev_iuser2 #define ExplodeAmmo pev_iuser3 #define FireAmmo pev_iuser4
// drop weapons #define PRIMARY_WEAPONS_BIT_SUM ((1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90))
/*********************************** Weapon/Arrow/Models/Sounds/Sprites ************************************/
new const P_MODEL[]= "models/bow/p_Shina_by_Oxigen.mdl" new const V_MODEL[]= "models/bow/v_Shina_by_Oxigen.mdl" new const W_MODEL[]= "models/bow/w_Shina_by_Oxigen.mdl" new const ARROW_MODEL[]= "models/bow/arrow.mdl"
new const ARROW_SHOOT[]= "bow_shoot.wav" new const ARROW_SWITCH[]= "bow_switch.wav"
new const BURN_CLASSNAME[]= "flame" new const BURN_MODEL[]= "sprites/bow/flame_burn01.spr"
/*********************************** Cvars ************************************/
new BOW_ONE_ROUND , BASE_SPEED , BOUNS_SPEED , BURN_LIFE , BURN_PERIOD , BURN_DAMAGE , NORMAL_DAMAGE , SPEED_LOW_ICE , SLOW_ICE_TIME , EXPLODE_DAMAGE , EXPLODE_HITRADIUS , NORMAL_AMMO , FIRE_AMMO , ICE_AMMO , EXPLODE_AMMO , NEXT_SHOT_TIME
/*********************************** Global Variables ************************************/
new g_exp_sprid
new Float:g_start_time[33], Float:g_finish_time[33]
new Float:g_Burn[33]
new g_slowed[33], g_pressed[33], Float:g_old_speed[33] //Global Variables related to weapon ammo new g_ammo[33], g_normal_ammo[33], g_fire_ammo[33], g_ice_ammo[33], g_explode_ammo[33]
// Player variables new g_HasBow[33] // whether player has bow
new g_bow_mode[33], g_dmg_mode[33]
new g_MaxPlayers
// Render effects debug new g_FrozenRenderingFx[33] new Float:g_FrozenRenderingColor[33][3] new g_FrozenRenderingRender[33] new Float:g_FrozenRenderingAmount[33]
// Message ID's new g_MsgDamage, g_msgBarTime
// ITEM new g_itemid
/*********************************** Bools ************************************/
new bool:bow_hit[33] // check if bow hit then allow switching new bool:draw_wpn[33]
/*********************************** Enums ************************************/
// Weapon animation sequences enum { anim_bang, anim_idle, anim_shot1, anim_shot2, anim_reload, anim_draw }
// bow modes enum { NORMAL_MODE = 1, FIRE_MODE = 4, ICE_MODE = 3, EXPLODE_MODE = 2 }
enum { dmg_fire = 1 }
/*********************************** Precaching Models/Sounds/Sprites ************************************/
public plugin_precache() { // Models precache_model(P_MODEL) precache_model(V_MODEL) precache_model(W_MODEL) precache_model(ARROW_MODEL) precache_model(BURN_MODEL) // Sounds precache_sound(ARROW_SHOOT) precache_sound(ARROW_SWITCH) //precache_sound(GRENADE_DRAW) precache_sound("weapons/357_cock1.wav")
g_exp_sprid = engfunc(EngFunc_PrecacheModel, "sprites/zerogxplode.spr") }
/*********************************** Registering Plugin ************************************/
public plugin_init() { register_plugin("[ZP][Extra Item] Bow", "1.4", "LearninG") //Events register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1") register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0"); //Cvars BOW_ONE_ROUND = register_cvar("zp_bow_one_round" , "1") BASE_SPEED = register_cvar("zp_arrow_base_speed" , "650") BOUNS_SPEED = register_cvar("zp_arrow_bouns_speed" , "950") BURN_LIFE = register_cvar("zp_burn_life" , "5.0") BURN_PERIOD = register_cvar("zp_burn_period" , "1.0") BURN_DAMAGE = register_cvar("zp_burn_damage" , "100") NORMAL_DAMAGE = register_cvar("zp_normal_damage" , "100") SPEED_LOW_ICE = register_cvar("zp_speed_low_ice" , "0.3") SLOW_ICE_TIME = register_cvar("zp_slow_ice_time" , "3.0") EXPLODE_DAMAGE = register_cvar("zp_explode_damage" , "1700") EXPLODE_HITRADIUS = register_cvar("zp_explode_hitradius" , "400") NORMAL_AMMO = register_cvar("zp_normal_ammo" , "500") FIRE_AMMO = register_cvar("zp_fire_ammo" , "10") ICE_AMMO = register_cvar("zp_ice_ammo" , "10") EXPLODE_AMMO = register_cvar("zp_explode_ammo" , "3") NEXT_SHOT_TIME = register_cvar("zp_arrow_next_shot_time" , "0.97") // Forwards RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_scout", "fw_bow_PrimaryAttack") RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "fw_bow_SecondaryAttack") RegisterHam(Ham_Weapon_Reload, "weapon_scout", "fw_bow_Reload") RegisterHam(Ham_Item_Deploy, "weapon_scout", "fw_bow_Deploy_Post", 1) register_think(BURN_CLASSNAME, "BurnThink") register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_clcmd("drop","dropcmd") register_touch("bow", "player", "bow_Touched") // Messages g_MsgDamage = get_user_msgid("Damage") g_msgBarTime = get_user_msgid("BarTime")
g_itemid = zp_register_extra_item("Magical Bow",50, ZP_TEAM_HUMAN)
g_MaxPlayers = get_maxplayers()
} /*********************************** Public Functions ************************************/
public plugin_cfg() { static cfgdir[64] get_localinfo("amxx_configsdir", cfgdir, 63) // Execute custom config file server_cmd("exec %s/bowsettings.cfg", cfgdir) server_exec() }
public zp_user_infected_pre(id, infector, nemesis) { if (g_HasBow[id]) { dropcmd(id) } return PLUGIN_CONTINUE }
public bow_Touched( ent, id ){ if(1<=id<=32) { if(allowed_toucher(id)) { // Pick up weapon give_bow(id) g_normal_ammo[id] = pev(ent, NormalAmmo) g_ice_ammo[id] = pev(ent, IceAmmo) g_explode_ammo[id] = pev(ent, ExplodeAmmo) g_fire_ammo[id] = pev(ent, FireAmmo) remove_entity(ent) // remove entity after giving player the bow and setting up ammos update_ammo(id) } } }
public zp_extra_item_selected(player, itemid) { if (g_HasBow[player]) { client_print_color(player,print_chat, "^4[ZP]^1 You already have a Bow!") return ZP_PLUGIN_HANDLED } else if (itemid == g_itemid && is_user_alive(player)) { client_print_color(player, print_chat, "^4[ZP]^1 You bought Bow! [Attack 2 for change mods]") give_bow(player) } return PLUGIN_CONTINUE }
public Event_NewRound() { //check if any changes happened on cfg file. plugin_cfg() static players[32], num, id get_players(players, num) for (new i = 0; i < num; i++) { id = players[i] set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25) g_Burn[id]=0.0 g_slowed[id] = false remove_bow() if (get_pcvar_num(BOW_ONE_ROUND)==1) { if (g_HasBow[id] && user_has_weapon(id, CSW_SCOUT)) { fm_strip_user_gun(id, CSW_SCOUT) g_HasBow[id] = false } } } } public dropcmd(id) { if(g_HasBow[id] && get_user_weapon(id) == CSW_SCOUT) { new Float:Aim[3],Float:origin[3] VelocityByAim(id, 64, Aim) entity_get_vector(id,EV_VEC_origin,origin) origin[0] += Aim[0] origin[1] += Aim[1] new bow = create_entity("info_target") entity_set_string(bow,EV_SZ_classname,"bow") entity_set_model(bow,W_MODEL) entity_set_size(bow,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0}) entity_set_int(bow,EV_INT_solid,1) set_pev( bow, NormalAmmo, g_normal_ammo[id]) set_pev( bow, IceAmmo, g_ice_ammo[id]) set_pev( bow, ExplodeAmmo, g_explode_ammo[id]) set_pev( bow, FireAmmo, g_fire_ammo[id]) entity_set_int(bow,EV_INT_movetype,6) entity_set_vector(bow,EV_VEC_origin,origin) g_HasBow[id] = false remowegun(id) return PLUGIN_HANDLED } return PLUGIN_CONTINUE }
// remove gun and save all guns public remowegun(id) { new wpnList[32] new number get_user_weapons(id,wpnList,number) for (new i = 0;i < number ;i++) { if (wpnList[i] == CSW_SCOUT) { fm_strip_user_gun(id, wpnList[i]) } } }
// Client connected public client_putinserver(id) { // Reset all g_HasBow[id] = false g_finish_time[id] = 0.0 }
// Current weapon player is holding public Event_CurrentWeapon(id) { if (is_user_bot(id)) return
if (!g_HasBow[id]) return
if(!is_user_connected(id)) return // Read weapon ID new weaponID = read_data(2) if (weaponID == CSW_SCOUT) { if (g_HasBow[id]) { if(!draw_wpn[id]) { //playanim(id, anim_draw) UTIL_PlayWeaponAnimation(id, anim_draw) update_ammo(id) //emit_sound(id, CHAN_WEAPON, GRENADE_DRAW, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) // View model entity_set_string(id, EV_SZ_viewmodel, V_MODEL) // Player model entity_set_string(id, EV_SZ_weaponmodel, P_MODEL) draw_wpn[id] = true } } else { // View model entity_set_string(id, EV_SZ_viewmodel, "models/v_scout.mdl") // Player model entity_set_string(id, EV_SZ_weaponmodel, "models/p_scout.mdl") } } else { draw_wpn[id] = false } }
public remove_bow() { new nextitem = find_ent_by_class(-1, "bow") while ((nextitem = find_ent_by_class(-1, "bow")) != 0) { remove_entity(nextitem) } return PLUGIN_CONTINUE }
// Player killed public fw_PlayerKilled(victim, attacker, shouldgib) { if (g_HasBow[victim]) { dropcmd(victim) // Reset all set_user_rendering(victim, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
// Remove screen's bar message_begin(MSG_ONE, g_msgBarTime, _, victim) write_byte(0) // time write_byte(0) // unknown message_end() remowegun(victim) } }
public give_bow(id) { give_weapon(id) g_bow_mode[id] = NORMAL_MODE g_normal_ammo[id] = get_pcvar_num(NORMAL_AMMO) g_fire_ammo[id] = get_pcvar_num(FIRE_AMMO) g_ice_ammo[id] = get_pcvar_num(ICE_AMMO) g_explode_ammo[id] = get_pcvar_num(EXPLODE_AMMO) }
//give weapon public give_weapon(id){ g_HasBow[id] = true
give_item(id, "weapon_scout") engclient_cmd(id, "weapon_scout") engclient_cmd(id, "weapon_scout") entity_set_string(id, EV_SZ_viewmodel, V_MODEL) entity_set_string(id, EV_SZ_weaponmodel, P_MODEL) update_ammo(id) }
public fw_bow_PrimaryAttack(Weapon) { new Player = get_pdata_cbase(Weapon, 41, 4) if (g_HasBow[Player]) return HAM_SUPERCEDE
return HAM_IGNORED }
public fw_bow_SecondaryAttack(Weapon) { new Player = get_pdata_cbase(Weapon, 41, 4) if (g_HasBow[Player]) return HAM_SUPERCEDE
return HAM_IGNORED }
public fw_bow_Reload(Weapon) { new Player = get_pdata_cbase(Weapon, 41, 4) if (g_HasBow[Player]) return HAM_SUPERCEDE
return HAM_IGNORED }
public fw_bow_Deploy_Post(Weapon) { new Player = get_pdata_cbase(Weapon, 41, 4) update_ammo(Player) }
// Command start public fw_CmdStart(id, UC_Handle, Seed) { if(!g_HasBow[id] || !is_user_alive(id)) return FMRES_IGNORED
static CurButton, OldButton CurButton = get_uc(UC_Handle, UC_Buttons) OldButton = (pev(id, pev_oldbuttons) & IN_ATTACK) if(get_gametime() - g_finish_time[id] > get_pcvar_float(NEXT_SHOT_TIME)) { // Attack1 button pressed if(CurButton & IN_ATTACK && !OldButton) { if(get_user_weapon(id) != CSW_SCOUT) return FMRES_IGNORED
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id])) return FMRES_IGNORED
g_start_time[id] = get_gametime()
//A bar appears in his screen message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id) write_byte(2) // time write_byte(0) // unknown message_end()
g_pressed[id] = true }
if(CurButton & IN_ATTACK && OldButton) { if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id])) return FMRES_IGNORED
if(!g_pressed[id]) return FMRES_IGNORED if(get_user_weapon(id) != CSW_SCOUT) { g_finish_time[id] = get_gametime() FireArrow(id)
// Remove screen's bar message_begin(MSG_ONE, g_msgBarTime, _, id) write_byte(0) // time write_byte(0) // unknown message_end()
g_pressed[id] = false } }
if(!(CurButton & IN_ATTACK) && OldButton) { if(get_user_weapon(id) != CSW_SCOUT) return FMRES_IGNORED
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id])) return FMRES_IGNORED
if(!g_pressed[id]) return FMRES_IGNORED
g_finish_time[id] = get_gametime() FireArrow(id)
// Remove screen's bar message_begin(MSG_ONE, g_msgBarTime, _, id) write_byte(0) // time write_byte(0) // unknown message_end()
g_pressed[id] = false } }
if((CurButton & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) { if(get_user_weapon(id) != CSW_SCOUT) return FMRES_IGNORED
if(bow_hit[id]) return FMRES_IGNORED
if(!g_pressed[id]) { if(!is_user_alive(id)) return FMRES_IGNORED
switch(g_bow_mode[id]) { case 1: { g_bow_mode[id]= 4 emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) client_print(id,print_center,"Fire Mode") update_ammo(id) } case 2: { g_bow_mode[id]= 1 emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) client_print(id,print_center,"Normal Mode") update_ammo(id) } case 3: { g_bow_mode[id]= 2 emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) client_print(id,print_center,"Explode Mode") update_ammo(id) } case 4: { g_bow_mode[id]= 3 emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) client_print(id,print_center,"Ice Mode") update_ammo(id) } } } } return FMRES_IGNORED }
//block anim standard wpn public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if (!is_user_alive(id)) return FMRES_IGNORED
// Block default sounds if (get_user_weapon(id) == CSW_SCOUT && g_HasBow[id]) { set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001 ); }
return FMRES_HANDLED }
// Fire gremade public FireArrow(id) { // Set animation UTIL_PlayWeaponAnimation(id, anim_shot1)
bow_hit[id] = true
// Get origin. angle and velocity new velocity[33] new Float:fAngle[3], Float:fVelocity[3] pev(id, pev_v_angle, fAngle) // Create ent new arrow = create_entity("info_target") // Not grenade if (!arrow) return PLUGIN_HANDLED
// Classname entity_set_string(arrow, EV_SZ_classname, "bow_arrow") // Model entity_set_model(arrow, ARROW_MODEL)
if(g_bow_mode[id] == NORMAL_MODE) { set_rendering(arrow, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 70) g_normal_ammo[id]-- } else if(g_bow_mode[id] == FIRE_MODE) { set_rendering(arrow, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 70) g_fire_ammo[id]-- } else if(g_bow_mode[id] == ICE_MODE) { set_rendering(arrow, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 70) g_ice_ammo[id]-- } else if(g_bow_mode[id] == EXPLODE_MODE) { set_rendering(arrow, kRenderFxGlowShell, 150, 105, 0, kRenderNormal, 70) g_explode_ammo[id]-- }
update_ammo(id)
new Float:vOrigin[3],Float:vUp[3] pev(id, pev_origin, vOrigin) global_get(glb_v_up, vUp) new up = 17 vOrigin[0] = vOrigin[0] + vUp[0] * up vOrigin[1] = vOrigin[1] + vUp[1] * up vOrigin[2] = vOrigin[2] + vUp[2] * up // Origin entity_set_origin(arrow, vOrigin) // Angles entity_set_vector(arrow, EV_VEC_angles, fAngle) // Size new Float:MinBox[3] = {-1.0, -1.0, -1.0} new Float:MaxBox[3] = {1.0, 1.0, 1.0} entity_set_vector(arrow, EV_VEC_mins, MinBox) entity_set_vector(arrow, EV_VEC_maxs, MaxBox) // Interaction entity_set_int(arrow, EV_INT_solid, SOLID_SLIDEBOX) // Movetype entity_set_int(arrow, EV_INT_movetype, MOVETYPE_TOSS) // Owner entity_set_edict(arrow, EV_ENT_owner, id) // Velocity new Float: holdtime[33] new Float: mnoji[33]
holdtime[id] = g_finish_time[id] - g_start_time[id]
if(holdtime[id] < 1.0) holdtime[id] = 1.0 if(holdtime[id] > 3.0) holdtime[id] = 3.0
mnoji[id] = get_pcvar_num(BASE_SPEED) + holdtime[id] * get_pcvar_num(BOUNS_SPEED) velocity[id] = floatround(mnoji[id],floatround_round) VelocityByAim(id, velocity[id], fVelocity) entity_set_vector(arrow, EV_VEC_velocity, fVelocity) // Launch sound emit_sound(id, CHAN_WEAPON, ARROW_SHOOT, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_CONTINUE }
// We hit something!!! public pfn_touch(ptr, ptd) { // If ent is valid if (pev_valid(ptr)) { // Get classnames static classname[32], classnameptd[32] pev(ptr, pev_classname, classname, 31) // Our ent if(equal(classname, "bow_arrow")) { // Get it's origin new Float:Origin[3] pev(ptr, pev_origin, Origin)
new owner = pev(ptr, pev_owner)
bow_hit[owner] = false
if(g_bow_mode[owner] == EXPLODE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner)) { // Explosion engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_exp_sprid) write_byte(40) write_byte(30) write_byte(0) message_end()
check_radius_damage(ptr, owner) }
if(is_user_alive(ptd)) { if(cs_get_user_team(ptd) != cs_get_user_team(owner)) { g_old_speed[ptd] = get_user_maxspeed(ptd)
if(g_bow_mode[owner] == NORMAL_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner)) { ExecuteHamB(Ham_TakeDamage, ptd, ptr, owner, get_pcvar_float(NORMAL_DAMAGE), DMG_BULLET) } else if(g_bow_mode[owner] == FIRE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner)) { if (!g_Burn[ptd]) { g_dmg_mode[ptd] = dmg_fire CreateBurn(ptd, owner) } } else if(g_bow_mode[owner] == ICE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner)) { if (!g_slowed[ptd]) {
g_FrozenRenderingFx[ptd] = pev(ptd, pev_renderfx) pev(ptd, pev_rendercolor, g_FrozenRenderingColor[ptd]) g_FrozenRenderingRender[ptd] = pev(ptd, pev_rendermode) pev(ptd, pev_renderamt, g_FrozenRenderingAmount[ptd])
set_user_rendering(ptd, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25) set_user_maxspeed(ptd, get_user_maxspeed(ptd) * get_pcvar_float(SPEED_LOW_ICE)) g_slowed[ptd] = true set_task(get_pcvar_float(SLOW_ICE_TIME), "make_speed", ptd, _, _, "a", 1) message_begin(MSG_ONE_UNRELIABLE, g_MsgDamage, _, ptd) write_byte(0) // damage save write_byte(0) // damage take write_long(DMG_DROWN) // damage type - DMG_FREEZE write_coord(0) // x write_coord(0) // y write_coord(0) // z message_end() } } } } // We hit breakable if(pev_valid(ptd)) { pev(ptd, pev_classname, classnameptd, 31) if (equali(classnameptd, "func_breakable")) { // Destroy it //force_use(ptr,ptd) } } set_pev(ptr, pev_flags, FL_KILLME) } } }
public CreateBurn(id, attacker) { if(g_Burn[id]) return
if(g_dmg_mode[id] == dmg_fire) { new ent=CreateAnimationSprite(attacker, BURN_CLASSNAME, BURN_MODEL, 1.0, 10.0) set_pev(ent, pev_solid, SOLID_NOT) set_pev(ent, pev_movetype, MOVETYPE_FOLLOW) set_pev(ent, pev_aiment, id) set_pev(ent, pev_fuser2, get_gametime()+get_pcvar_float(BURN_LIFE)) g_Burn[id]=get_gametime()+get_pcvar_float(BURN_PERIOD) } }
public BurnThink(ent) { if(!pev_valid(ent)) return static Float:life, aim_ent pev(ent,pev_fuser2, life) aim_ent=pev(ent, pev_aiment)
if(g_dmg_mode[aim_ent] == dmg_fire) { if(get_gametime()>life||!is_user_alive(aim_ent) ||!zp_get_user_zombie(aim_ent)) { g_Burn[aim_ent]=0.0 fm_remove_entity(ent) return } if(get_gametime()>g_Burn[aim_ent]) { ExecuteHamB(Ham_TakeDamage, aim_ent , ent ,pev(ent, pev_owner), get_pcvar_float(BURN_DAMAGE), DMG_BURN) g_Burn[aim_ent]=get_gametime()+get_pcvar_float(BURN_PERIOD) } } }
public make_speed(id) { if(is_user_alive(id) && g_slowed[id]) { g_slowed[id] = false set_user_maxspeed(id, g_old_speed[id]) fm_set_rendering_float(id, g_FrozenRenderingFx[id], g_FrozenRenderingColor[id], g_FrozenRenderingRender[id], g_FrozenRenderingAmount[id]) } }
public check_radius_damage(ent, attacker) { for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_alive(i)) continue if(cs_get_user_team(attacker) == cs_get_user_team(i)) continue if(entity_range(ent, i) > get_pcvar_num(EXPLODE_HITRADIUS)) continue Do_TakeDamage(ent, i, attacker, can_see_fm(ent, i)) } }
public Do_TakeDamage(Ent, Victim, Attacker, can_see) { static Float:Damage, Float:CurrentDis CurrentDis = entity_range(Ent, Victim) Damage = get_pcvar_num(EXPLODE_DAMAGE) - ((CurrentDis / get_pcvar_num(EXPLODE_HITRADIUS)) * get_pcvar_num(EXPLODE_DAMAGE)) if(Damage > 0) { static WeaponEnt WeaponEnt = fm_get_user_weapon_entity(Attacker, CSW_HEGRENADE) if(!pev_valid(WeaponEnt)) WeaponEnt = 0
if(!can_see) Damage /= 2 ExecuteHamB(Ham_TakeDamage, Victim, WeaponEnt, Attacker, Damage, DMG_BULLET) } }
public update_ammo(id) { if(!is_user_alive(id)) return if(!g_HasBow[id]) return if(g_bow_mode[id] == NORMAL_MODE) { g_ammo[id] = g_normal_ammo[id] } else if(g_bow_mode[id] == FIRE_MODE) { g_ammo[id] = g_fire_ammo[id] } else if(g_bow_mode[id] == ICE_MODE) { g_ammo[id] = g_ice_ammo[id] } else if(g_bow_mode[id] == EXPLODE_MODE) { g_ammo[id] = g_explode_ammo[id] } static weapon_ent; weapon_ent = fm_find_ent_by_owner(-1, "weapon_scout", id) if(pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent, 1) cs_set_user_bpammo(id, CSW_SCOUT, g_ammo[id]) engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id) write_byte(1) write_byte(CSW_SCOUT) write_byte(-1) message_end()
set_task(0.1, "hud_debug", id) }
public hud_debug(id) { engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id) write_byte(1) write_byte(CSW_SCOUT) write_byte(-1) message_end() }
public can_see_fm(entindex1, entindex2) { if (!entindex1 || !entindex2) return false
if (pev_valid(entindex1) && pev_valid(entindex1)) { new flags = pev(entindex1, pev_flags) if (flags & EF_NODRAW || flags & FL_NOTARGET) { return 0 }
new Float:lookerOrig[3] new Float:targetBaseOrig[3] new Float:targetOrig[3] new Float:temp[3]
pev(entindex1, pev_origin, lookerOrig) pev(entindex1, pev_view_ofs, temp) lookerOrig[0] += temp[0] lookerOrig[1] += temp[1] lookerOrig[2] += temp[2]
pev(entindex2, pev_origin, targetBaseOrig) pev(entindex2, pev_view_ofs, temp) targetOrig[0] = targetBaseOrig [0] + temp[0] targetOrig[1] = targetBaseOrig [1] + temp[1] targetOrig[2] = targetBaseOrig [2] + temp[2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the had of seen player if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater)) { return 0 } else { new Float:flFraction get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return 1 } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the body of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return 1 } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] - 17.0 engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the legs of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return 1 } } } } } return 0 }
/*********************************** Stocks ************************************/
// Allowed toucher stock allowed_toucher(player) { if (g_HasBow[player] || zp_get_user_zombie(player) || zp_get_user_nemesis(player) || zp_get_user_survivor(player)) return false return true }
stock CreateAnimationSprite(owner, const classname[], const model[], Float:scale, Float:framerate) { new ent=fm_create_entity("env_sprite")
set_pev(ent, pev_framerate, framerate) set_pev(ent, pev_model, model)
dllfunc(DLLFunc_Spawn, ent)
set_pev(ent, pev_classname, classname) set_pev(ent, pev_owner, owner)
fm_entity_set_model(ent, model) fm_set_rendering(ent, kRenderFxNoDissipation, 255, 255, 255, kRenderGlow, 255)
set_pev(ent, pev_framerate, framerate) set_pev(ent, pev_scale, scale)
return ent }
stock fm_set_rendering_float(entity, fx = kRenderFxNone, Float:color[3], render = kRenderNormal, Float:amount = 16.0) { set_pev(entity, pev_renderfx, fx) set_pev(entity, pev_rendercolor, color) set_pev(entity, pev_rendermode, render) set_pev(entity, pev_renderamt, amount) }
stock drop(id) { new weapons[32], num get_user_weapons(id, weapons, num) for (new i = 0; i < num; i++) { if (PRIMARY_WEAPONS_BIT_SUM & (1<<weapons[i])) { static wname[32] get_weaponname(weapons[i], wname, sizeof wname - 1) engclient_cmd(id, "drop", wname) } } }
//play anim stock UTIL_PlayWeaponAnimation(const Player, const Sequence) { set_pev(Player, pev_weaponanim, Sequence); message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player); write_byte(Sequence); write_byte(pev(Player, pev_body)); message_end(); }
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ fbidis\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ ltrpar\\ lang1065\\ f0\\ fs16 \n\\ par } */
Last edited by LearninG; 08-08-2019 at 13:15.
|
|