Rune Blade and Thanatos
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
Rune Blade and Thanatos
Hello,
can someone covert those guns to our zombie mod?
can someone covert those guns to our zombie mod?
- Attachments
-
- [CSO]RUNE BLADE.rar
- (1.29 MiB) Downloaded 319 times
- [CSO]RUNE BLADE.rar
- (1.29 MiB) Downloaded 319 times
-
- CSOTHANATOS-9V2.zip
- (987.97 KiB) Downloaded 315 times
- CSOTHANATOS-9V2.zip
- (987.97 KiB) Downloaded 315 times
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
RuneBlade:
Thanatos:
- #include <zombie_escape>
- #include <engine>
- #include <fakemeta_util>
- #include <cstrike>
- #include <xs>
- #define PLUGIN "[CSO] RUNE BLADE"
- #define VERSION "1.0"
- #define AUTHOR "TK N CASH"
- #define ADMIN_ACCESS ADMIN_KICK
- // Draw Time
- #define DRAW_TIME 1.5
- // Next Attack Time
- #define NEXTATTACK_MISS 1.45
- #define NEXTATTACK_HIT 1.45
- // Next Attack Time
- #define NEXTATTACK_MISS1 1.45
- #define NEXTATTACK_HIT1 1.45
- // Attack Distance
- #define ATTACKDIS_SLASH 75.0
- #define ATTACKDIS_CHARGE 120.0
- // Attack Damage
- #define DAMAGE_SLASH 500.0
- #define DAMAGE_UNCHARGED 1000.0
- #define DAMAGE_CHARGE 2500.0
- // Charge Mode
- #define CHARGE_STARTTIME 0.75
- #define CHARGE_ATTACKTIME 0.75
- #define CHARGE_TIME 3.0
- #define CHARGE_NEXTATTACK 2.0
- #define CHARGE_EXPRADIUS 350
- #define CHARGE_ATTACK_KNOCKPOWER 100.0
- // Task
- #define TASK_CHARGE_STARTING 75675
- #define TASK_CHARGING 464334
- // Weapon info
- #define ITEM_NAME "RuneBlade"
- #define ITEM_COST 50
- #define ITEM_LIMIT 0
- // Models
- new const v_model[] = "models/v_runeblade.mdl"
- new const p_model[] = "models/p_runeblade.mdl"
- // Sprite
- new const exp_spr[] = "sprites/runeblade_ef.spr"
- new const exp_spr2[] = "sprites/runeblade_ef02.spr"
- new const weapon_sound[9][] =
- {
- "runeblade/draw.wav",
- "runeblade/miss.wav",
- "runeblade/miss.wav",
- "runeblade/hitwall.wav",
- "runeblade/hit.wav",
- "runeblade/hit.wav",
- "runeblade/charge_idle.wav",
- "runeblade/charge_finish1.wav",
- "runeblade/charge_hit.wav"
- }
- enum
- {
- B9_DRAW = 0,
- B9_SLASH1,
- B9_SLASH2,
- B9_HITWALL,
- B9_HIT1,
- B9_HIT2,
- B9_CHARGE_START,
- B9_CHARGE_FINISH,
- B9_CHARGE_ATTACK
- }
- new g_bot, g_exp_sprid, g_exp_sprid2
- new g_had_balrog9[33], g_attack_mode[33], g_charging[33], g_charged[33], g_chargeattack[33]
- new g_iItemID
- enum
- {
- MODE_NORMAL = 1,
- MODE_CHARGE
- }
- enum
- {
- KNIFE_ANIM_IDLE = 0,
- KNIFE_ANIM_SLASH1,
- KNIFE_ANIM_SLASH2,
- KNIFE_ANIM_DRAW,
- KNIFE_ANIM_STAB_HIT,
- KNIFE_ANIM_STAB_MISS,
- KNIFE_ANIM_MIDSLASH1,
- KNIFE_ANIM_MIDSLASH2
- }
- enum
- {
- BALROG9_ANIM_IDLE = 0,
- BALROG9_ANIM_SLASH1 = 1,
- BALROG9_ANIM_SLASH2 = 1,
- BALROG9_ANIM_SLASH3 = 1,
- BALROG9_ANIM_SLASH4 = 1,
- BALROG9_ANIM_SLASH5 = 1,
- BALROG9_ANIM_DRAW = 2,
- BALROG9_ANIM_CHARGE_START,
- BALROG9_ANIM_CHARGE_FINISH,
- BALROG9_ANIM_CHARGE_IDLE1,
- BALROG9_ANIM_CHARGE_IDLE2,
- BALROG9_ANIM_CHARGE_ATTACK1,
- BALROG9_ANIM_CHARGE_ATTACK2
- }
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- g_iItemID = ze_register_item(ITEM_NAME, ITEM_COST, ITEM_LIMIT)
- register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
- register_forward(FM_EmitSound, "fw_EmitSound")
- register_forward(FM_CmdStart, "fw_CmdStart")
- register_forward(FM_TraceLine, "fw_TraceLine")
- register_forward(FM_TraceHull, "fw_TraceHull")
- RegisterHam(Ham_CS_Weapon_SendWeaponAnim, "weapon_knife", "fw_Knife_SendAnim", 1)
- RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
- RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Post", 1)
- RegisterHam(Ham_Spawn, "player", "remove_balrog9", 1);
- register_clcmd ( "admin_get_runeblade", "get_balrog9", ADMIN_ACCESS );
- register_clcmd( "weapon_runeblade" , "Hook_WeaponList" );
- }
- public plugin_natives ( )
- {
- register_native ( "get_rune", "get_balrog9", 1 );
- register_native ( "remove_rune", "remove_balrog9", 1 );
- }
- public plugin_precache()
- {
- engfunc(EngFunc_PrecacheModel, v_model)
- engfunc(EngFunc_PrecacheModel, p_model)
- for(new i = 0; i < sizeof(weapon_sound); i++)
- engfunc(EngFunc_PrecacheSound, weapon_sound[i])
- g_exp_sprid = engfunc(EngFunc_PrecacheModel, exp_spr)
- g_exp_sprid2 = engfunc(EngFunc_PrecacheModel, exp_spr2)
- precache_generic("sprites/640hud81.spr")
- precache_generic("sprites/weapon_runeblade.txt")
- }
- public Hook_WeaponList( id )
- {
- engclient_cmd( id, "weapon_knife" )
- return PLUGIN_HANDLED;
- }
- public ze_select_item_pre(id, iItemid, bIgnoreCost)
- {
- if (iItemid != g_iItemID)
- return ZE_ITEM_AVAILABLE
- if (ze_is_user_zombie(id))
- return ZE_ITEM_DONT_SHOW
- return ZE_ITEM_AVAILABLE
- }
- public ze_select_item_post(id, iItemid, bIgnoreCost)
- {
- if (iItemid != g_iItemID)
- return
- get_balrog9(id)
- }
- public get_balrog9(id)
- {
- g_had_balrog9[id] = 1
- g_attack_mode[id] = 0
- g_charged[id] = 0
- g_charging[id] = 0
- g_chargeattack[id] = 0
- Set_Sprite( id, "weapon_runeblade" )
- if(get_user_weapon(id) == CSW_KNIFE)
- {
- Event_CurWeapon(id)
- set_weapon_anim(id, BALROG9_ANIM_DRAW)
- }
- }
- public remove_balrog9(id)
- {
- g_had_balrog9[id] = 0
- g_attack_mode[id] = 0
- g_charged[id] = 0
- g_charging[id] = 0
- g_chargeattack[id] = 0
- Set_Sprite( id, "weapon_knife" )
- remove_task(id+TASK_CHARGE_STARTING)
- remove_task(id+TASK_CHARGING)
- }
- public client_putinserver(id)
- {
- if(is_user_bot(id) && !g_bot)
- {
- g_bot = 1
- set_task(0.1, "Do_RegisterHamBot", id)
- }
- }
- public Do_RegisterHamBot(id)
- {
- RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
- RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Post", 1)
- }
- public Event_CurWeapon(id)
- {
- if(!is_user_alive(id))
- return 1
- if(get_user_weapon(id) != CSW_KNIFE)
- return 1
- if(!g_had_balrog9[id])
- return 1
- set_pev(id, pev_viewmodel2, v_model)
- set_pev(id, pev_weaponmodel2, p_model)
- return 0
- }
- public fw_Knife_SendAnim(ent, anim, skip_local)
- {
- if(!pev_valid(ent))
- return HAM_IGNORED
- new id
- id = get_pdata_cbase(ent, 41 , 4)
- if(!g_had_balrog9[id])
- return HAM_IGNORED
- static Float:PunchAngles[3]
- if(anim == KNIFE_ANIM_DRAW)
- {
- Set_Sprite( id, "weapon_runeblade" )
- set_weapons_timeidle(id, DRAW_TIME)
- set_player_nextattack(id, DRAW_TIME)
- set_weapon_anim(id, BALROG9_ANIM_DRAW)
- Remove_OldStuff(id)
- } else if(anim == KNIFE_ANIM_MIDSLASH1) {
- set_pev(id, pev_punchangle, PunchAngles)
- set_weapon_anim(id, BALROG9_ANIM_SLASH1)
- Remove_OldStuff(id)
- } else if(anim == KNIFE_ANIM_MIDSLASH2) {
- set_pev(id, pev_punchangle, PunchAngles)
- set_weapon_anim(id, BALROG9_ANIM_SLASH2)
- Remove_OldStuff(id)
- } else if(anim == KNIFE_ANIM_STAB_HIT) {
- set_pev(id, pev_punchangle, PunchAngles)
- if(g_chargeattack[id] == 2)
- {
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK2)
- set_task(0.18,"Effect_ChargedAttack",id)
- } else
- {
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK1)
- SetHamParamFloat(3, DAMAGE_UNCHARGED)
- }
- } else if(anim == KNIFE_ANIM_STAB_MISS) {
- if(g_chargeattack[id] == 2)
- {
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK2)
- set_task(0.18,"Effect_ChargedAttack",id)
- } else
- {
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK1)
- SetHamParamFloat(3, DAMAGE_UNCHARGED)
- }
- }
- return HAM_IGNORED
- }
- public Remove_OldStuff(id)
- {
- g_charging[id] = 0
- g_charged[id] = 0
- g_chargeattack[id] = 0
- remove_task(id+TASK_CHARGE_STARTING)
- remove_task(id+TASK_CHARGING)
- }
- public Effect_ChargedAttack(id)
- {
- static Float:Origin[3]
- get_position(id, 36.0, 0.0, 0.0, Origin)
- emit_sound(id, CHAN_WEAPON, weapon_sound[B9_CHARGE_ATTACK], 1.0, ATTN_NORM, 0, PITCH_NORM)
- // Exp
- message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
- write_byte(TE_EXPLOSION)
- engfunc(EngFunc_WriteCoord, Origin[0])
- engfunc(EngFunc_WriteCoord, Origin[1])
- engfunc(EngFunc_WriteCoord, Origin[2])
- write_short(g_exp_sprid) // sprite index
- write_byte(8) // scale in 0.1's
- write_byte(24) // framerate
- write_byte(4) // flags
- message_end()
- message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
- write_byte(TE_EXPLOSION)
- engfunc(EngFunc_WriteCoord, Origin[0])
- engfunc(EngFunc_WriteCoord, Origin[1])
- engfunc(EngFunc_WriteCoord, Origin[2])
- write_short(g_exp_sprid2) // sprite index
- write_byte(7) // scale in 0.1's
- write_byte(30) // framerate
- write_byte(4) // flags
- message_end()
- // Check Attack Damage
- //HamRadiusDamage(id, fm_get_user_weapon_entity(id, CSW_KNIFE), , , DMG_BURN)
- for(new i = 0; i < get_maxplayers(); i++)
- {
- if(!is_user_alive(i))
- continue
- if(id == i)
- continue
- if(cs_get_user_team(i) == cs_get_user_team(id))
- continue
- if(entity_range(i, id) > float(CHARGE_EXPRADIUS))
- continue
- ExecuteHamB(Ham_TakeDamage, i, fm_get_user_weapon_entity(id, CSW_KNIFE), id, DAMAGE_CHARGE, DMG_BLAST)
- }
- }
- stock HamRadiusDamage(id, ent, Float:radius, Float:damage, bits, iVictim)
- {
- static target, Float:origin[3]
- target = -1
- pev(ent, pev_origin, origin)
- while((target = find_ent_in_sphere(target, origin, radius) ))
- {
- static Float:o[3]
- pev(target, pev_origin, o)
- xs_vec_sub(origin, o, o)
- // Recheck if the entity is in radius
- if (xs_vec_len(o) > radius)
- continue
- if(is_user_alive(target))
- {
- if(id == target)
- continue
- if(cs_get_user_team(id) == cs_get_user_team(target))
- continue
- }
- Ham_ExecDamageB(target, ent, id, damage * (xs_vec_len(o) / radius), HIT_GENERIC, bits)
- }
- }
- stock Ham_ExecDamageB(victim, inflictor, attacker, Float:damage, hitgroup, bits)
- {
- static const Float:hitgroup_multi[] =
- {
- 1.0, // HIT_GENERIC
- 4.0, // HIT_HEAD
- 1.0, // HIT_CHEST
- 1.25, // HIT_STOMACH
- 1.0, // HIT_LEFTARM
- 1.0, // HIT_RIGHTARM
- 0.75, // HIT_LEFTLEG
- 0.75, // HIT_RIGHTLEG
- 0.0 // HIT_SHIELD
- }
- set_pdata_int(victim, 75, hitgroup, 5)
- ExecuteHamB(Ham_TakeDamage, victim, inflictor, attacker, damage * hitgroup_multi[hitgroup], bits)
- }
- public fw_TraceAttack(ent, attacker, Float:Damage, Float:Dir[3], ptr, DamageType, iVictim)
- {
- if(!is_user_alive(attacker))
- return HAM_IGNORED
- if(get_user_weapon(attacker) != CSW_KNIFE || !g_had_balrog9[attacker])
- return HAM_IGNORED
- if(g_attack_mode[attacker] == MODE_NORMAL) SetHamParamFloat(3, DAMAGE_SLASH)
- if(g_attack_mode[attacker] == MODE_CHARGE) SetHamParamFloat(3, DAMAGE_CHARGE)
- return HAM_HANDLED
- }
- public fw_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], ptr, DamageType)
- {
- if(!is_user_alive(attacker))
- return HAM_IGNORED
- if(get_user_weapon(attacker) != CSW_KNIFE || !g_had_balrog9[attacker])
- return HAM_IGNORED
- if(g_attack_mode[attacker] == MODE_CHARGE)
- {
- if(g_chargeattack[attacker] == 2) // Do KnockBack Here
- {
- static Float:Origin[3]
- pev(attacker, pev_origin, Origin)
- hook_ent2(ent, Origin, CHARGE_ATTACK_KNOCKPOWER, 2)
- }
- }
- return HAM_HANDLED
- }
- public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
- {
- if(!is_user_connected(id))
- return FMRES_IGNORED
- if(get_user_weapon(id) != CSW_KNIFE || !g_had_balrog9[id])
- return FMRES_IGNORED
- if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
- {
- if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
- {
- set_weapons_timeidle(id, NEXTATTACK_MISS)
- set_player_nextattack(id, NEXTATTACK_MISS)
- if(g_attack_mode[id] == MODE_CHARGE)
- {
- if(g_chargeattack[id] == 2)
- emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch)
- else
- emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch)
- } else emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch)
- return FMRES_SUPERCEDE
- }
- if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't') // hit
- {
- if (sample[17] == 'w') // wall
- {
- set_weapons_timeidle(id, NEXTATTACK_HIT)
- set_player_nextattack(id, NEXTATTACK_HIT)
- if(g_attack_mode[id] == MODE_CHARGE)
- {
- if(g_chargeattack[id] == 2)
- emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch)
- else
- emit_sound(id, channel, weapon_sound[B9_HITWALL], volume, attn, flags, pitch)
- } else emit_sound(id, channel, weapon_sound[B9_HITWALL], volume, attn, flags, pitch)
- return FMRES_SUPERCEDE
- } else {
- set_weapons_timeidle(id, NEXTATTACK_HIT)
- set_player_nextattack(id, NEXTATTACK_HIT)
- if(g_attack_mode[id] == MODE_CHARGE)
- {
- if(g_chargeattack[id] == 2)
- emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch)
- else
- emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch)
- } else emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch)
- return FMRES_SUPERCEDE
- }
- }
- if(sample[14] == 's' && sample[15] == 't' && sample[16] == 'a') // stab
- {
- if(g_chargeattack[id] == 2)
- emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch)
- else
- emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch)
- return FMRES_SUPERCEDE
- }
- }
- return FMRES_IGNORED
- }
- public sound1(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
- {
- emit_sound(id, channel, weapon_sound[B9_CHARGE_ATTACK], volume, attn, flags, pitch)
- }
- public fw_CmdStart(id, uc_handle, seed)
- {
- if (!is_user_alive(id))
- return
- if(get_user_weapon(id) != CSW_KNIFE)
- return
- if(!g_had_balrog9[id])
- return
- static ent
- ent = find_ent_by_owner(-1, "weapon_knife", id)
- if(!pev_valid(ent))
- return
- static CurButton, OldButton
- CurButton = get_uc(uc_handle, UC_Buttons)
- OldButton = (pev(id, pev_oldbuttons) & IN_ATTACK2)
- if(CurButton & IN_ATTACK)
- {
- if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0)
- return
- g_attack_mode[id] = MODE_NORMAL
- set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK2)
- } else {
- if(CurButton & IN_ATTACK2)
- {
- set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK2)
- set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK)
- if(OldButton) // Holding This Button
- {
- if(g_charging[id] == 2)
- {
- if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0)
- return
- if(g_charged[id])
- {
- set_weapons_timeidle(id, 99999.0)
- set_player_nextattack(id, 99999.0)
- if(pev(id, pev_weaponanim) != BALROG9_ANIM_CHARGE_IDLE2)
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE2)
- } else {
- set_weapons_timeidle(id, 99999.5)
- set_player_nextattack(id, 9999.5)
- if(pev(id, pev_weaponanim) != BALROG9_ANIM_CHARGE_IDLE1)
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE1)
- }
- }
- }
- if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0)
- return
- remove_task(id+TASK_CHARGE_STARTING)
- remove_task(id+TASK_CHARGING)
- g_attack_mode[id] = MODE_CHARGE
- g_charging[id] = 1
- g_charged[id] = 0
- g_chargeattack[id] = 1
- set_weapons_timeidle(id, CHARGE_STARTTIME + 0.25)
- set_player_nextattack(id, CHARGE_STARTTIME + 0.25)
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_START)
- set_task(CHARGE_STARTTIME, "Do_HoldCharge", id+TASK_CHARGE_STARTING)
- set_task(CHARGE_TIME, "Do_SetCharge", id+TASK_CHARGING)
- } else {
- if(OldButton) // After Press this Button (no Hold)
- {
- if(g_charging[id] == 2)
- {
- if(g_chargeattack[id])
- {
- ExecuteHamB(Ham_Weapon_SecondaryAttack, ent)
- set_weapons_timeidle(id, CHARGE_NEXTATTACK)
- set_player_nextattack(id, CHARGE_NEXTATTACK)
- g_charging[id] = 0
- g_charged[id] = 0
- g_chargeattack[id] = 0
- remove_task(id+TASK_CHARGE_STARTING)
- remove_task(id+TASK_CHARGING)
- }
- }
- }
- }
- }
- }
- public Do_SetCharge(id)
- {
- id -= TASK_CHARGING
- if(!is_user_alive(id))
- return
- if(get_user_weapon(id) != CSW_KNIFE)
- return
- if(!g_had_balrog9[id])
- return
- g_charging[id] = 2
- g_charged[id] = 1
- g_chargeattack[id] = 2
- set_weapons_timeidle(id, 0.25)
- set_player_nextattack(id, 0.25)
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_FINISH)
- }
- public Do_HoldCharge(id)
- {
- id -= TASK_CHARGE_STARTING
- if(!is_user_alive(id))
- return
- if(get_user_weapon(id) != CSW_KNIFE)
- return
- if(!g_had_balrog9[id])
- return
- if(!(pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2))
- {
- static ent
- ent = find_ent_by_owner(-1, "weapon_knife", id)
- if(!pev_valid(ent))
- return
- ExecuteHamB(Ham_Weapon_SecondaryAttack, ent)
- set_weapons_timeidle(id, CHARGE_NEXTATTACK)
- set_player_nextattack(id, CHARGE_NEXTATTACK)
- g_charging[id] = 0
- g_charged[id] = 0
- g_chargeattack[id] = 0
- remove_task(id+TASK_CHARGE_STARTING)
- remove_task(id+TASK_CHARGING)
- return
- }
- g_charging[id] = 2
- g_chargeattack[id] = 1
- g_charged[id] = 0
- set_weapons_timeidle(id, CHARGE_TIME + 0.25)
- set_player_nextattack(id, CHARGE_TIME + 0.25)
- set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE1)
- }
- public fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle)
- {
- if (!is_user_alive(id))
- return FMRES_IGNORED
- if (get_user_weapon(id) != CSW_KNIFE)
- return FMRES_IGNORED
- if(!g_had_balrog9[id])
- return FMRES_IGNORED
- static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
- pev(id, pev_origin, fOrigin)
- pev(id, pev_view_ofs, view_ofs)
- xs_vec_add(fOrigin, view_ofs, vecStart)
- pev(id, pev_v_angle, v_angle)
- engfunc(EngFunc_MakeVectors, v_angle)
- get_global_vector(GL_v_forward, v_forward)
- if(g_attack_mode[id] == MODE_NORMAL)
- xs_vec_mul_scalar(v_forward, ATTACKDIS_SLASH, v_forward)
- else if(g_attack_mode[id] == MODE_CHARGE)
- xs_vec_mul_scalar(v_forward, ATTACKDIS_CHARGE, v_forward)
- xs_vec_add(vecStart, v_forward, vecEnd)
- engfunc(EngFunc_TraceLine, vecStart, vecEnd, ignored_monster, id, handle)
- return FMRES_SUPERCEDE
- }
- public fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle)
- {
- if (!is_user_alive(id))
- return FMRES_IGNORED
- if (get_user_weapon(id) != CSW_KNIFE)
- return FMRES_IGNORED
- if(!g_had_balrog9[id])
- return FMRES_IGNORED
- static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
- pev(id, pev_origin, fOrigin)
- pev(id, pev_view_ofs, view_ofs)
- xs_vec_add(fOrigin, view_ofs, vecStart)
- pev(id, pev_v_angle, v_angle)
- engfunc(EngFunc_MakeVectors, v_angle)
- get_global_vector(GL_v_forward, v_forward)
- if(g_attack_mode[id] == MODE_NORMAL)
- xs_vec_mul_scalar(v_forward, ATTACKDIS_SLASH, v_forward)
- else if(g_attack_mode[id] == MODE_CHARGE)
- xs_vec_mul_scalar(v_forward, ATTACKDIS_CHARGE, v_forward)
- xs_vec_add(vecStart, v_forward, vecEnd)
- engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle)
- return FMRES_SUPERCEDE
- }
- stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
- {
- new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
- pev(ent, pev_origin, vOrigin)
- pev(ent, pev_view_ofs,vUp) //for player
- xs_vec_add(vOrigin,vUp,vOrigin)
- pev(ent, pev_v_angle, vAngle) // if normal entity ,use pev_angles
- angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
- angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
- angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
- vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
- vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
- vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
- }
- stock set_weapons_timeidle(id, Float:TimeIdle)
- {
- if(!is_user_alive(id))
- return
- new entwpn = fm_get_user_weapon_entity(id, CSW_KNIFE)
- if (pev_valid(entwpn))
- {
- set_pdata_float(entwpn, 46, TimeIdle, 4)
- set_pdata_float(entwpn, 47, TimeIdle, 4)
- set_pdata_float(entwpn, 48, TimeIdle + 1.0, 4)
- }
- }
- stock set_player_nextattack(id, Float:nexttime)
- {
- if(!is_user_alive(id))
- return
- const m_flNextAttack = 83
- set_pdata_float(id, m_flNextAttack, nexttime, 5)
- }
- stock set_weapon_anim(id, anim)
- {
- if(!is_user_alive(id))
- return
- set_pev(id, pev_weaponanim, anim)
- message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
- write_byte(anim)
- write_byte(0)
- message_end()
- }
- stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, type)
- {
- static Float:fl_Velocity[3]
- static Float:EntOrigin[3]
- pev(ent, pev_origin, EntOrigin)
- static Float:distance_f
- distance_f = get_distance_f(EntOrigin, VicOrigin)
- new Float:fl_Time = distance_f / speed
- VicOrigin[2] -= 36.0
- if(type == 1)
- {
- fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5
- fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5
- fl_Velocity[2] = ((VicOrigin[2] - EntOrigin[2]) / fl_Time) * 1.5
- } else if(type == 2) {
- fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5
- fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5
- fl_Velocity[2] = ((EntOrigin[2] - VicOrigin[2]) / fl_Time) * 1.5
- }
- entity_set_vector(ent, EV_VEC_velocity, fl_Velocity)
- }
- Set_Sprite( iPlayer, const Weapon[ ] )
- {
- if( ! pev_valid( iPlayer ) )
- return;
- message_begin( MSG_ONE , get_user_msgid( "WeaponList" ) , _, iPlayer )
- write_string( Weapon )
- write_byte( -1 )
- write_byte( -1)
- write_byte( -1 )
- write_byte( -1 )
- write_byte( 2 )
- write_byte( 1 )
- write_byte( 29 )
- write_byte( 0 )
- message_end( )
- }
- #include <zombie_escape>
- #include <engine>
- #include <fakemeta_util>
- #include <cstrike>
- #define PLUGIN "[CSO] Melee Item: Thanatos-9"
- #define VERSION "2.0.beta" // Not Code Skull-Axe!
- #define AUTHOR "Dev!l" //Original Author Code
- #define THANATOS9_RANGE_SLASH 110.0
- #define THANATOS9_RANGE_STAB 80.0
- #define THANATOS9_NEXTATTACK_SLASH 2.0
- #define THANATOS9_NEXTATTACK_STAB 1.0
- #define THANATOS9_DAMAGE_SLASH 500.0
- #define THANATOS9_DAMAGE_STAB 100.0
- #define THANATOS9_CHANGEA 5.0
- #define THANATOS9_CHANGEB 3.5
- #define THANATOS9_SHOOT_START 1.0
- #define THANATOS9_SHOOT_END 1.0
- #define DRAW_TIMEA 1.0
- #define DRAW_TIMEB 1.0
- const OFFSET_WEAPONOWNER = 41
- const OFFSET_LINUX_WEAPONS = 4
- const m_flNextAttack = 83
- #define CSW_THANATOS9 CSW_KNIFE
- #define weapon_thanatos9 "weapon_knife"
- new v_model[] = "models/cso/v_thanatos9.mdl"
- new p_modela[] = "models/cso/p_thanatos9a.mdl"
- new p_modelb[] = "models/cso/p_thanatos9b.mdl"
- new const hit_wall[] = "weapons/balrog9_wall.wav"
- new const hit_sound[] = "weapons/skullaxe_hit.wav"
- new const thanatos9_sound[][] =
- {
- "weapons/thanatos9_drawa.wav",
- "weapons/thanatos9_shoota1.wav",
- "weapons/thanatos9_shoota2.wav",
- "weapons/thanatos9_shootb_end.wav",
- "weapons/thanatos9_shootb_loop.wav",
- "weapons/thanatos9_changea_1.wav",
- "weapons/thanatos9_changea_2.wav",
- "weapons/thanatos9_changea_3.wav",
- "weapons/thanatos9_changea_4.wav",
- "weapons/thanatos9_changeb_1.wav",
- "weapons/thanatos9_changeb_2.wav"
- }
- enum
- {
- THANATOS9_ANIM_DRAWA = 0,
- THANATOS9_ANIM_SHOOTB_LOOP,
- THANATOS9_ANIM_SHOOTB_START,
- THANATOS9_ANIM_SHOOTB_END,
- THANATOS9_ANIM_IDLEB,
- THANATOS9_ANIM_IDLEA,
- THANATOS9_ANIM_DRAWB,
- THANATOS9_ANIM_SHOOTA1,
- THANATOS9_ANIM_SHOOTA2,
- THANATOS9_ANIM_CHANGEA,
- THANATOS9_ANIM_CHANGEB
- }
- enum
- {
- MODE_SLASH = 1,
- MODE_CHANGEA,
- MODE_CHANGEB,
- MODE_STAB,
- MODE_STAB_ACTION
- }
- enum
- {
- HIT_NOTHING = 0,
- HIT_ENEMY,
- HIT_WALL
- }
- #define TASK_SLASHING 215842
- new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_p228", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
- "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
- "weapon_ak47", "weapon_knife", "weapon_p90" }
- new m_iBlood[2]
- new g_has_thanatos9[33], g_item
- new g_MaxPlayers, g_mode[33]
- new Float:g_thanatos_swing_range = 1.8,Float:g_thanatos_stab_range = 0.8
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
- register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
- RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1)
- RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
- RegisterHam(Ham_Weapon_WeaponIdle, "weapon_knife", "fw_thanatosidleanim", 1)
- register_forward(FM_EmitSound, "fw_EmitSound")
- register_forward(FM_CmdStart, "fw_CmdStart")
- register_forward(FM_TraceLine, "fw_TraceLine")
- register_forward(FM_TraceHull, "fw_TraceHull")
- RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
- for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
- if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
- g_MaxPlayers = get_maxplayers()
- g_item = ze_register_item("Thanatos-9", 40, 0)
- }
- public plugin_precache()
- {
- precache_model(v_model)
- precache_model(p_modela)
- precache_model(p_modelb)
- precache_sound(hit_wall)
- precache_sound(hit_sound)
- for(new i = 0; i < sizeof thanatos9_sound; i++)
- precache_sound(thanatos9_sound[i])
- m_iBlood[0] = precache_model("sprites/blood.spr")
- m_iBlood[1] = precache_model("sprites/bloodspray.spr")
- }
- public ze_select_item_pre(id, iItemid, bIgnoreCost)
- {
- if (iItemid != g_item)
- return ZE_ITEM_AVAILABLE
- if (ze_is_user_zombie(id))
- return ZE_ITEM_DONT_SHOW
- return ZE_ITEM_AVAILABLE
- }
- public ze_select_item_post(id, iItemid, bIgnoreCost)
- {
- if (iItemid != g_item)
- return
- get_thanatos9(id)
- }
- public client_connect(id) remove_thanatos9(id)
- public client_disconnected(id) remove_thanatos9(id)
- public Player_Spawn(id) remove_thanatos9(id)
- public fw_PlayerKilled(id) remove_thanatos9(id)
- public ze_user_infected(id) remove_thanatos9(id)
- public ze_user_humanized(id) remove_thanatos9(id)
- public get_thanatos9(id)
- {
- g_has_thanatos9[id] = 1
- g_mode[id] = MODE_SLASH
- if(get_user_weapon(id) == CSW_KNIFE)
- {
- set_pev(id, pev_viewmodel2, v_model)
- set_weapon_anim(id, THANATOS9_ANIM_DRAWA)
- set_weapons_timeidle(id, CSW_THANATOS9, DRAW_TIMEA)
- set_player_nextattack(id, DRAW_TIMEA)
- static ent; ent = fm_get_user_weapon_entity(id, CSW_THANATOS9)
- set_pdata_float(ent, 47, 9999.0, OFFSET_LINUX_WEAPONS)
- } else {
- engclient_cmd(id, weapon_thanatos9)
- }
- }
- public remove_thanatos9(id)
- {
- g_has_thanatos9[id] = 0
- g_mode[id] = 0
- if(g_mode[id] == MODE_STAB_ACTION)
- {
- g_mode[id] = MODE_STAB
- shoot_b_end(id)
- }
- }
- public fw_Item_Deploy_Post(weapon_ent)
- {
- static owner
- owner = fm_cs_get_weapon_ent_owner(weapon_ent)
- if(g_has_thanatos9[owner])
- {
- set_weapons_timeidle(owner, CSW_THANATOS9, 1.7)
- // set_player_nextattack(owner, 1.7)
- }
- }
- public Event_CurWeapon(id)
- {
- if(!is_user_alive(id))
- return 1
- if(get_user_weapon(id) != CSW_THANATOS9)
- return 1
- if(!g_has_thanatos9[id])
- return 1
- set_pev(id, pev_viewmodel2, v_model)
- if(g_has_thanatos9[id])
- {
- if(g_mode[id] == MODE_SLASH)
- {
- set_pev(id, pev_weaponmodel2, p_modela)
- set_weapon_anim(id, THANATOS9_ANIM_DRAWA)
- set_weapons_timeidle(id, CSW_THANATOS9, DRAW_TIMEA)
- set_player_nextattack(id, DRAW_TIMEA)
- } else if(g_mode[id] == MODE_STAB)
- {
- set_pev(id, pev_weaponmodel2, p_modelb)
- set_weapon_anim(id, THANATOS9_ANIM_DRAWB)
- set_weapons_timeidle(id, CSW_THANATOS9, DRAW_TIMEB)
- set_player_nextattack(id, DRAW_TIMEB)
- } else if(g_mode[id] == MODE_STAB_ACTION)
- {
- set_pev(id, pev_weaponmodel2, p_modela)
- set_weapon_anim(id, THANATOS9_ANIM_DRAWA)
- set_weapons_timeidle(id, CSW_THANATOS9, DRAW_TIMEA)
- set_player_nextattack(id, DRAW_TIMEA)
- g_mode[id] = MODE_STAB
- shoot_b_end(id)
- }
- }
- return 0
- }
- public Event_NewRound()
- {
- for(new i = 0; i < g_MaxPlayers; i++)
- remove_thanatos9(i)
- }
- stock fm_cs_get_weapon_ent_owner(ent)
- {
- return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
- }
- public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
- {
- if(!is_user_connected(id))
- return FMRES_IGNORED
- if(get_user_weapon(id) != CSW_THANATOS9 || !g_has_thanatos9[id])
- return FMRES_IGNORED
- if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
- {
- if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
- {
- if(g_mode[id] == MODE_SLASH)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, 1.2)
- set_player_nextattack(id, 1.2)
- emit_sound(id, CHAN_WEAPON, thanatos9_sound[random_num(2,3)], 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- return FMRES_SUPERCEDE
- }
- if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't') // hit
- {
- if (sample[17] == 'w') // wall
- {
- if(g_mode[id] == MODE_SLASH)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, 1.2)
- set_player_nextattack(id, 1.2)
- emit_sound(id, CHAN_WEAPON, hit_wall, 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- return FMRES_SUPERCEDE
- }
- else
- {
- if(g_mode[id] == MODE_SLASH)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, 1.2)
- set_player_nextattack(id, 1.2)
- emit_sound(id, CHAN_WEAPON, hit_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- return FMRES_SUPERCEDE
- }
- }
- if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a') // stab
- {
- if(g_mode[id] == MODE_SLASH)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, 1.2)
- set_player_nextattack(id, 1.2)
- emit_sound(id, CHAN_WEAPON, hit_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- return FMRES_SUPERCEDE;
- }
- }
- return FMRES_IGNORED
- }
- public fw_thanatosidleanim(Weapon)
- {
- new id = get_pdata_cbase(Weapon, 41, 4)
- if(!is_user_alive(id) || ze_is_user_zombie(id) || !g_has_thanatos9[id] || get_user_weapon(id) != CSW_THANATOS9)
- return HAM_IGNORED;
- if(g_mode[id] == MODE_SLASH && get_pdata_float(Weapon, 48, 4) <= 0.25)
- {
- set_weapon_anim(id, THANATOS9_ANIM_IDLEA)
- set_pdata_float(Weapon, 48, 20.0, 4)
- return HAM_SUPERCEDE;
- }
- if(g_mode[id] == MODE_STAB && get_pdata_float(Weapon, 48, 4) <= 0.25)
- {
- set_weapon_anim(id, THANATOS9_ANIM_IDLEB)
- set_pdata_float(Weapon, 48, 20.0, 4)
- return HAM_SUPERCEDE;
- }
- return HAM_IGNORED;
- }
- public fw_CmdStart(id, uc_handle, seed)
- {
- if (!is_user_alive(id))
- return
- if(get_user_weapon(id) != CSW_THANATOS9)
- return
- if(!g_has_thanatos9[id])
- return
- static ent
- ent = find_ent_by_owner(-1, weapon_thanatos9, id)
- if(!pev_valid(ent))
- return
- if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0)
- return
- static CurButton
- CurButton = get_uc(uc_handle, UC_Buttons)
- if(CurButton & IN_ATTACK)
- {
- if(get_pdata_float(id, 83, 5) > 0.0)
- return
- set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK)
- if(g_mode[id] == MODE_SLASH)
- {
- g_mode[id] = MODE_SLASH
- set_weapons_timeidle(id, CSW_THANATOS9, THANATOS9_NEXTATTACK_SLASH)
- set_player_nextattack(id, THANATOS9_NEXTATTACK_SLASH)
- set_weapon_anim(id, random_num(THANATOS9_ANIM_SHOOTA1, THANATOS9_ANIM_SHOOTA2))
- set_task(1.2, "Do_Slashing", id+TASK_SLASHING)
- }
- else if(g_mode[id] == MODE_STAB)
- {
- g_mode[id] = MODE_STAB
- shoot_b_start(id)
- set_weapons_timeidle(id, CSW_THANATOS9, 0.1)
- set_player_nextattack(id, THANATOS9_NEXTATTACK_STAB)
- }
- } else if (CurButton & IN_ATTACK2) {
- if(get_pdata_float(ent, 47, OFFSET_LINUX_WEAPONS) > 0.0)
- return
- if(g_mode[id] == MODE_SLASH)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, 0.1)
- set_player_nextattack(id, 0.1)
- g_mode[id] = MODE_CHANGEA
- set_task(0.1, "change_modea", id)
- }
- else if(g_mode[id] == MODE_STAB)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, 0.1)
- set_player_nextattack(id, 0.1)
- g_mode[id] = MODE_CHANGEB
- set_task(0.1, "change_modeb", id)
- }
- }
- }
- public Do_Slashing(id)
- {
- id -= TASK_SLASHING
- if(!is_user_alive(id))
- return
- if(get_user_weapon(id) != CSW_THANATOS9 || !g_has_thanatos9[id])
- return
- static Ent
- Ent = find_ent_by_owner(-1, weapon_thanatos9, id)
- new Float:origin[3]
- pev(Ent, pev_origin, origin)
- new a = FM_NULLENT
- while((a = find_ent_in_sphere(a, origin, 80.0)) != 0)
- {
- if (id == a)
- continue
- if (ze_is_user_zombie(id))
- return
- if(pev(a, pev_takedamage) != DAMAGE_NO)
- {
- ExecuteHamB(Ham_TakeDamage, a, id, id, 400.0, DMG_BULLET)
- }
- }
- if(!Check_Attack(id, 1))
- {
- emit_sound(id, CHAN_WEAPON, thanatos9_sound[random_num(2,3)], 1.0, ATTN_NORM, 0, PITCH_NORM)
- } else {
- emit_sound(id, CHAN_WEAPON, hit_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- }
- public change_modea(id)
- {
- if(g_mode[id] == MODE_CHANGEA)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, THANATOS9_CHANGEA)
- set_player_nextattack(id, THANATOS9_CHANGEA)
- set_weapon_anim(id, THANATOS9_ANIM_CHANGEA)
- set_pev(id, pev_weaponmodel2, p_modelb)
- g_mode[id] = MODE_SLASH
- set_task(THANATOS9_CHANGEA, "mode_b", id)
- }
- }
- public mode_b(id)
- {
- g_mode[id] = MODE_STAB
- }
- public change_modeb(id)
- {
- if(g_mode[id] == MODE_CHANGEB)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, THANATOS9_CHANGEB)
- set_player_nextattack(id, THANATOS9_CHANGEB)
- set_weapon_anim(id, THANATOS9_ANIM_CHANGEB)
- set_pev(id, pev_weaponmodel2, p_modela)
- g_mode[id] = MODE_SLASH
- }
- }
- public shoot_b_start(id)
- {
- if(g_mode[id] == MODE_STAB)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, THANATOS9_SHOOT_START)
- set_player_nextattack(id, THANATOS9_SHOOT_START)
- set_weapon_anim(id, THANATOS9_ANIM_SHOOTB_START)
- g_mode[id] = MODE_STAB_ACTION
- set_task(THANATOS9_SHOOT_START, "shoot_b_loop", id)
- }
- }
- public shoot_b_loop(id)
- {
- if(g_mode[id] == MODE_STAB_ACTION)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, 6.0)
- set_player_nextattack(id, 0.0)
- set_weapon_anim(id, THANATOS9_ANIM_SHOOTB_LOOP)
- action_thanatos(id)
- emit_sound(id, CHAN_WEAPON, thanatos9_sound[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
- g_mode[id] = MODE_STAB_ACTION
- }
- }
- public shoot_b_end(id)
- {
- if(g_mode[id] == MODE_STAB)
- {
- remove_task(id)
- emit_sound(id, CHAN_WEAPON, "common/null.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
- g_mode[id] = MODE_STAB
- set_task(0.1, "shoot_b_end_finish", id)
- }
- }
- public shoot_b_end_finish(id)
- {
- if(g_mode[id] == MODE_STAB)
- {
- set_weapons_timeidle(id, CSW_THANATOS9, THANATOS9_SHOOT_END)
- set_player_nextattack(id, THANATOS9_SHOOT_END)
- set_weapon_anim(id, THANATOS9_ANIM_SHOOTB_END)
- g_mode[id] = MODE_CHANGEB
- set_task(THANATOS9_SHOOT_END, "change_modeb", id)
- }
- }
- public action_thanatos(id)
- {
- static Ent
- Ent = find_ent_by_owner(-1, weapon_thanatos9, id)
- Damage_thanatos(Ent)
- set_task(0.1, "action_thanatos", id)
- }
- public Damage_thanatos(Ent)
- {
- static id; id = pev(Ent, pev_owner)
- new Float:origin[3]
- pev(Ent, pev_origin, origin)
- new a = FM_NULLENT
- while((a = find_ent_in_sphere(a, origin, 80.0)) != 0)
- {
- if (id == a)
- continue
- if (ze_is_user_zombie(id))
- return
- if(pev(a, pev_takedamage) != DAMAGE_NO)
- {
- ExecuteHamB(Ham_TakeDamage, a, id, id, 400.0, DMG_BULLET)
- }
- }
- set_task(0.1, "damage_thanatos9", id)
- }
- public damage_thanatos9(id)
- {
- static Float:Max_Distance
- if(g_mode[id] == MODE_STAB_ACTION)
- {
- Max_Distance = THANATOS9_RANGE_STAB
- }
- static Float:VicOrigin[3], Float:MyOrigin[3]
- pev(id, pev_origin, MyOrigin)
- static Have_Victim; Have_Victim = 0
- static ent
- ent = find_ent_by_owner(-1, weapon_thanatos9, id)
- if(!pev_valid(ent))
- return 0
- for(new i = 0; i < get_maxplayers(); i++)
- {
- if(!is_user_alive(i))
- continue
- if(id == i)
- continue
- if(entity_range(id, i) > Max_Distance)
- continue
- pev(i, pev_origin, VicOrigin)
- if(!is_in_viewcone(id, VicOrigin, 1))
- continue
- if(is_wall_between_points(MyOrigin, VicOrigin, id))
- continue
- if(!Have_Victim) Have_Victim = 1
- if(g_mode[id] == MODE_STAB_ACTION)
- {
- do_attack(id, i, ent, THANATOS9_DAMAGE_STAB)
- }
- }
- stop_damage(id)
- if(Have_Victim)
- {
- return 1
- }
- else
- {
- return 0
- }
- return 0
- }
- public stop_damage(id)
- {
- set_task(6.0, "shoot_b_end", id)
- g_mode[id] = MODE_STAB
- }
- public Check_Attack(id, First_Check)
- {
- static Float:Max_Distance
- if(g_mode[id] == MODE_SLASH)
- {
- Max_Distance = THANATOS9_RANGE_SLASH
- }
- static Float:VicOrigin[3], Float:MyOrigin[3]
- pev(id, pev_origin, MyOrigin)
- static Have_Victim; Have_Victim = 0
- static ent
- ent = find_ent_by_owner(-1, weapon_thanatos9, id)
- if(!pev_valid(ent))
- return 0
- for(new i = 0; i < get_maxplayers(); i++)
- {
- if(!is_user_alive(i))
- continue
- if(id == i)
- continue
- if(entity_range(id, i) > Max_Distance)
- continue
- pev(i, pev_origin, VicOrigin)
- if(!is_in_viewcone(id, VicOrigin, 1))
- continue
- if(is_wall_between_points(MyOrigin, VicOrigin, id))
- continue
- if(!Have_Victim) Have_Victim = 1
- if(g_mode[id] == MODE_SLASH)
- {
- do_attack(id, i, ent, THANATOS9_DAMAGE_SLASH)
- if(!First_Check && cs_get_user_team(id) != cs_get_user_team(i))
- {
- // do_attack(id, i, ent, THANATOS9_DAMAGE_SLASH)
- }
- }
- }
- if(Have_Victim)
- {
- return 1
- }
- else
- {
- return 0
- }
- return 0
- }
- public fw_TraceLine(Float:fStart[3], Float:fEnd[3], conditions, id, ptr){
- return vTrace(id, ptr,fStart,fEnd,conditions)
- }
- public fw_Tracehull(Float:fStart[3], Float:fEnd[3], conditions, hull, id, ptr){
- return vTrace(id, ptr,fStart,fEnd,conditions,true,hull)
- }
- vTrace(id, ptr,Float:fStart[3],Float:fEnd[3],iNoMonsters,bool:hull = false,iHull = 0)
- {
- if(is_user_alive(id) && get_user_weapon(id) == CSW_THANATOS9 && g_has_thanatos9[id]){
- new Float:scalar
- if(g_mode[id] == MODE_SLASH) scalar = g_thanatos_swing_range
- else if(g_mode[id] == MODE_STAB_ACTION) scalar = g_thanatos_stab_range
- else scalar = 0.0
- xs_vec_sub(fEnd,fStart,fEnd)
- xs_vec_mul_scalar(fEnd,scalar,fEnd);
- xs_vec_add(fEnd,fStart,fEnd);
- hull ? engfunc(EngFunc_TraceHull,fStart,fEnd,iNoMonsters,iHull,id,ptr) : engfunc(EngFunc_TraceLine,fStart,fEnd,iNoMonsters, id,ptr)
- }
- return FMRES_IGNORED;
- }
- public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], TraceHandle, DamageBit, ptr)
- {
- if(!is_user_alive(Attacker))
- return HAM_IGNORED
- if(get_user_weapon(Attacker) != CSW_THANATOS9)
- return HAM_IGNORED
- if(!g_has_thanatos9[Attacker])
- return HAM_IGNORED
- return HAM_IGNORED
- }
- do_attack(Attacker, Victim, Inflictor, Float:fDamage)
- {
- fake_player_trace_attack(Attacker, Victim, fDamage)
- fake_take_damage(Attacker, Victim, fDamage, Inflictor)
- }
- fake_player_trace_attack(iAttacker, iVictim, &Float:fDamage)
- {
- // get fDirection
- new Float:fAngles[3], Float:fDirection[3]
- pev(iAttacker, pev_angles, fAngles)
- angle_vector(fAngles, ANGLEVECTOR_FORWARD, fDirection)
- // get fStart
- new Float:fStart[3], Float:fViewOfs[3]
- pev(iAttacker, pev_origin, fStart)
- pev(iAttacker, pev_view_ofs, fViewOfs)
- xs_vec_add(fViewOfs, fStart, fStart)
- // get aimOrigin
- new iAimOrigin[3], Float:fAimOrigin[3]
- get_user_origin(iAttacker, iAimOrigin, 3)
- IVecFVec(iAimOrigin, fAimOrigin)
- // TraceLine from fStart to AimOrigin
- new ptr = create_tr2()
- engfunc(EngFunc_TraceLine, fStart, fAimOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr)
- new pHit = get_tr2(ptr, TR_pHit)
- new iHitgroup = get_tr2(ptr, TR_iHitgroup)
- new Float:fEndPos[3]
- get_tr2(ptr, TR_vecEndPos, fEndPos)
- // get target & body at aiming
- new iTarget, iBody
- get_user_aiming(iAttacker, iTarget, iBody)
- // if aiming find target is iVictim then update iHitgroup
- if (iTarget == iVictim)
- {
- iHitgroup = iBody
- }
- // if ptr find target not is iVictim
- else if (pHit != iVictim)
- {
- // get AimOrigin in iVictim
- new Float:fVicOrigin[3], Float:fVicViewOfs[3], Float:fAimInVictim[3]
- pev(iVictim, pev_origin, fVicOrigin)
- pev(iVictim, pev_view_ofs, fVicViewOfs)
- xs_vec_add(fVicViewOfs, fVicOrigin, fAimInVictim)
- fAimInVictim[2] = fStart[2]
- fAimInVictim[2] += get_distance_f(fStart, fAimInVictim) * floattan( fAngles[0] * 2.0, degrees )
- // check aim in size of iVictim
- new iAngleToVictim = get_angle_to_target(iAttacker, fVicOrigin)
- iAngleToVictim = abs(iAngleToVictim)
- new Float:fDis = 2.0 * get_distance_f(fStart, fAimInVictim) * floatsin( float(iAngleToVictim) * 0.5, degrees )
- new Float:fVicSize[3]
- pev(iVictim, pev_size , fVicSize)
- if ( fDis <= fVicSize[0] * 0.5 )
- {
- // TraceLine from fStart to aimOrigin in iVictim
- new ptr2 = create_tr2()
- engfunc(EngFunc_TraceLine, fStart, fAimInVictim, DONT_IGNORE_MONSTERS, iAttacker, ptr2)
- new pHit2 = get_tr2(ptr2, TR_pHit)
- new iHitgroup2 = get_tr2(ptr2, TR_iHitgroup)
- // if ptr2 find target is iVictim
- if ( pHit2 == iVictim && (iHitgroup2 != HIT_HEAD || fDis <= fVicSize[0] * 0.25) )
- {
- pHit = iVictim
- iHitgroup = iHitgroup2
- get_tr2(ptr2, TR_vecEndPos, fEndPos)
- }
- free_tr2(ptr2)
- }
- // if pHit still not is iVictim then set default HitGroup
- if (pHit != iVictim)
- {
- // set default iHitgroup
- iHitgroup = HIT_GENERIC
- new ptr3 = create_tr2()
- engfunc(EngFunc_TraceLine, fStart, fVicOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr3)
- get_tr2(ptr3, TR_vecEndPos, fEndPos)
- // free ptr3
- free_tr2(ptr3)
- }
- }
- // set new Hit & Hitgroup & EndPos
- set_tr2(ptr, TR_pHit, iVictim)
- set_tr2(ptr, TR_iHitgroup, iHitgroup)
- set_tr2(ptr, TR_vecEndPos, fEndPos)
- // hitgroup multi fDamage
- new Float:fMultifDamage
- switch(iHitgroup)
- {
- case HIT_HEAD: fMultifDamage = 2.5
- case HIT_STOMACH: fMultifDamage = 1.25
- case HIT_LEFTLEG: fMultifDamage = 0.75
- case HIT_RIGHTLEG: fMultifDamage = 0.75
- default: fMultifDamage = 1.0
- }
- fDamage *= fMultifDamage
- // ExecuteHam
- fake_trake_attack(iAttacker, iVictim, fDamage, fDirection, ptr)
- // free ptr
- free_tr2(ptr)
- }
- stock fake_trake_attack(iAttacker, iVictim, Float:fDamage, Float:fDirection[3], iTraceHandle, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
- {
- ExecuteHamB(Ham_TraceAttack, iVictim, iAttacker, fDamage, fDirection, iTraceHandle, iDamageBit)
- }
- stock fake_take_damage(iAttacker, iVictim, Float:fDamage, iInflictor = 0, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
- {
- iInflictor = (!iInflictor) ? iAttacker : iInflictor
- ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit)
- }
- stock set_weapon_anim(id, anim)
- {
- if(!is_user_alive(id))
- return
- set_pev(id, pev_weaponanim, anim)
- message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
- write_byte(anim)
- write_byte(0)
- message_end()
- }
- stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
- {
- if(!is_user_alive(id))
- return
- static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
- if(!pev_valid(entwpn))
- return
- set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS)
- set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS)
- set_pdata_float(entwpn, 48, TimeIdle + 0.5, OFFSET_LINUX_WEAPONS)
- }
- stock set_player_nextattack(id, Float:nexttime)
- {
- if(!is_user_alive(id))
- return
- set_pdata_float(id, m_flNextAttack, nexttime, 5)
- }
- stock Get_MissileWeaponHitGroup( iEnt )
- {
- new Float:flStart[ 3 ], Float:flEnd[ 3 ];
- pev( iEnt, pev_origin, flStart );
- pev( iEnt, pev_velocity, flEnd );
- xs_vec_add( flStart, flEnd, flEnd );
- new ptr = create_tr2();
- engfunc( EngFunc_TraceLine, flStart, flEnd, 0, iEnt, ptr );
- new iHitGroup, Owner, nOhead, head
- Owner = pev(iEnt, pev_owner)
- nOhead = get_tr2( ptr, TR_iHitgroup )
- head = set_tr2( ptr, TR_iHitgroup, HIT_HEAD )
- iHitGroup = is_user_alive(Owner) ? head : nOhead
- free_tr2( ptr );
- return iHitGroup;
- }
- stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
- {
- new Float:fOrigin[3], iAimOrigin[3], Float:fAimOrigin[3], Float:fV1[3]
- pev(id, pev_origin, fOrigin)
- get_user_origin(id, iAimOrigin, 3) // end position from eyes
- IVecFVec(iAimOrigin, fAimOrigin)
- xs_vec_sub(fAimOrigin, fOrigin, fV1)
- new Float:fV2[3]
- xs_vec_sub(fTarget, fOrigin, fV2)
- new iResult = get_angle_between_vectors(fV1, fV2)
- if (TargetSize > 0.0)
- {
- new Float:fTan = TargetSize / get_distance_f(fOrigin, fTarget)
- new fAngleToTargetSize = floatround( floatatan(fTan, degrees) )
- iResult -= (iResult > 0) ? fAngleToTargetSize : -fAngleToTargetSize
- }
- return iResult
- }
- stock get_angle_between_vectors(const Float:fV1[3], const Float:fV2[3])
- {
- new Float:fA1[3], Float:fA2[3]
- engfunc(EngFunc_VecToAngles, fV1, fA1)
- engfunc(EngFunc_VecToAngles, fV2, fA2)
- new iResult = floatround(fA1[1] - fA2[1])
- iResult = iResult % 360
- iResult = (iResult > 180) ? (iResult - 360) : iResult
- return iResult
- }
- stock is_wall_between_points(Float:start[3], Float:end[3], ignore_ent)
- {
- static ptr
- ptr = create_tr2()
- engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, ignore_ent, ptr)
- static Float:EndPos[3]
- get_tr2(ptr, TR_vecEndPos, EndPos)
- free_tr2(ptr)
- return floatround(get_distance_f(end, EndPos))
- }
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
Thanks jack, its working, but when I have Rune Blade and zombie kills me, I am a zombie with a Rune Blade. Can you fix this and make this Rune Blade only for vips?
Here fixed infected humans have rune blade. Also made it for VIPs only.
Make sure to enable
You can change the flag from
Version 1.3 of zombie escape required so this works, compile with latest compiler posted in releases:
Make sure to enable
ze_items_vip.amxx
in plugins-zombie_escape.ini
and VIP plugin must be installed.You can change the flag from
ze_extraitems.ini
or change from here: ze_set_item_vip(g_iItemID, "VIP_A")
Version 1.3 of zombie escape required so this works, compile with latest compiler posted in releases:
Code: Select all
#include <zombie_escape> #include <engine> #include <fakemeta_util> #include <cstrike> #include <xs> #define PLUGIN "[CSO] RUNE BLADE" #define VERSION "1.0" #define AUTHOR "TK N CASH" #define ADMIN_ACCESS ADMIN_KICK // Draw Time #define DRAW_TIME 1.5 // Next Attack Time #define NEXTATTACK_MISS 1.45 #define NEXTATTACK_HIT 1.45 // Next Attack Time #define NEXTATTACK_MISS1 1.45 #define NEXTATTACK_HIT1 1.45 // Attack Distance #define ATTACKDIS_SLASH 75.0 #define ATTACKDIS_CHARGE 120.0 // Attack Damage #define DAMAGE_SLASH 500.0 #define DAMAGE_UNCHARGED 1000.0 #define DAMAGE_CHARGE 2500.0 // Charge Mode #define CHARGE_STARTTIME 0.75 #define CHARGE_ATTACKTIME 0.75 #define CHARGE_TIME 3.0 #define CHARGE_NEXTATTACK 2.0 #define CHARGE_EXPRADIUS 350 #define CHARGE_ATTACK_KNOCKPOWER 100.0 // Task #define TASK_CHARGE_STARTING 75675 #define TASK_CHARGING 464334 // Weapon info #define ITEM_NAME "RuneBlade" #define ITEM_COST 50 #define ITEM_LIMIT 0 // Models new const v_model[] = "models/v_runeblade.mdl" new const p_model[] = "models/p_runeblade.mdl" // Sprite new const exp_spr[] = "sprites/runeblade_ef.spr" new const exp_spr2[] = "sprites/runeblade_ef02.spr" new const weapon_sound[9][] = { "runeblade/draw.wav", "runeblade/miss.wav", "runeblade/miss.wav", "runeblade/hitwall.wav", "runeblade/hit.wav", "runeblade/hit.wav", "runeblade/charge_idle.wav", "runeblade/charge_finish1.wav", "runeblade/charge_hit.wav" } enum { B9_DRAW = 0, B9_SLASH1, B9_SLASH2, B9_HITWALL, B9_HIT1, B9_HIT2, B9_CHARGE_START, B9_CHARGE_FINISH, B9_CHARGE_ATTACK } new g_bot, g_exp_sprid, g_exp_sprid2 new g_had_balrog9[33], g_attack_mode[33], g_charging[33], g_charged[33], g_chargeattack[33] new g_iItemID enum { MODE_NORMAL = 1, MODE_CHARGE } enum { KNIFE_ANIM_IDLE = 0, KNIFE_ANIM_SLASH1, KNIFE_ANIM_SLASH2, KNIFE_ANIM_DRAW, KNIFE_ANIM_STAB_HIT, KNIFE_ANIM_STAB_MISS, KNIFE_ANIM_MIDSLASH1, KNIFE_ANIM_MIDSLASH2 } enum { BALROG9_ANIM_IDLE = 0, BALROG9_ANIM_SLASH1 = 1, BALROG9_ANIM_SLASH2 = 1, BALROG9_ANIM_SLASH3 = 1, BALROG9_ANIM_SLASH4 = 1, BALROG9_ANIM_SLASH5 = 1, BALROG9_ANIM_DRAW = 2, BALROG9_ANIM_CHARGE_START, BALROG9_ANIM_CHARGE_FINISH, BALROG9_ANIM_CHARGE_IDLE1, BALROG9_ANIM_CHARGE_IDLE2, BALROG9_ANIM_CHARGE_ATTACK1, BALROG9_ANIM_CHARGE_ATTACK2 } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) g_iItemID = ze_register_item(ITEM_NAME, ITEM_COST, ITEM_LIMIT) ze_set_item_vip(g_iItemID, "VIP_A") // Powers of ZE v1.3 (Jacks idea) register_event("CurWeapon", "Event_CurWeapon", "be", "1=1") register_forward(FM_EmitSound, "fw_EmitSound") register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_TraceLine, "fw_TraceLine") register_forward(FM_TraceHull, "fw_TraceHull") RegisterHam(Ham_CS_Weapon_SendWeaponAnim, "weapon_knife", "fw_Knife_SendAnim", 1) RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Post", 1) RegisterHam(Ham_Spawn, "player", "remove_balrog9", 1); register_clcmd ( "admin_get_runeblade", "get_balrog9", ADMIN_ACCESS ); register_clcmd( "weapon_runeblade" , "Hook_WeaponList" ); } public plugin_natives ( ) { register_native ( "get_rune", "get_balrog9", 1 ); register_native ( "remove_rune", "remove_balrog9", 1 ); } public plugin_precache() { engfunc(EngFunc_PrecacheModel, v_model) engfunc(EngFunc_PrecacheModel, p_model) for(new i = 0; i < sizeof(weapon_sound); i++) engfunc(EngFunc_PrecacheSound, weapon_sound[i]) g_exp_sprid = engfunc(EngFunc_PrecacheModel, exp_spr) g_exp_sprid2 = engfunc(EngFunc_PrecacheModel, exp_spr2) precache_generic("sprites/640hud81.spr") precache_generic("sprites/weapon_runeblade.txt") } public Hook_WeaponList( id ) { engclient_cmd( id, "weapon_knife" ) return PLUGIN_HANDLED; } public ze_select_item_pre(id, iItemid, bIgnoreCost) { if (iItemid != g_iItemID) return ZE_ITEM_AVAILABLE if (ze_is_user_zombie(id)) return ZE_ITEM_DONT_SHOW return ZE_ITEM_AVAILABLE } public ze_select_item_post(id, iItemid, bIgnoreCost) { if (iItemid != g_iItemID) return get_balrog9(id) } public ze_user_infected(iVictim, iInfector) { remove_balrog9(iVictim) } public get_balrog9(id) { g_had_balrog9[id] = 1 g_attack_mode[id] = 0 g_charged[id] = 0 g_charging[id] = 0 g_chargeattack[id] = 0 Set_Sprite( id, "weapon_runeblade" ) if(get_user_weapon(id) == CSW_KNIFE) { Event_CurWeapon(id) set_weapon_anim(id, BALROG9_ANIM_DRAW) } } public remove_balrog9(id) { g_had_balrog9[id] = 0 g_attack_mode[id] = 0 g_charged[id] = 0 g_charging[id] = 0 g_chargeattack[id] = 0 Set_Sprite( id, "weapon_knife" ) remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) } public client_putinserver(id) { if(is_user_bot(id) && !g_bot) { g_bot = 1 set_task(0.1, "Do_RegisterHamBot", id) } } public Do_RegisterHamBot(id) { RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack") RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Post", 1) } public Event_CurWeapon(id) { if(!is_user_alive(id)) return 1 if(get_user_weapon(id) != CSW_KNIFE) return 1 if(!g_had_balrog9[id]) return 1 set_pev(id, pev_viewmodel2, v_model) set_pev(id, pev_weaponmodel2, p_model) return 0 } public fw_Knife_SendAnim(ent, anim, skip_local) { if(!pev_valid(ent)) return HAM_IGNORED new id id = get_pdata_cbase(ent, 41 , 4) if(!g_had_balrog9[id]) return HAM_IGNORED static Float:PunchAngles[3] if(anim == KNIFE_ANIM_DRAW) { Set_Sprite( id, "weapon_runeblade" ) set_weapons_timeidle(id, DRAW_TIME) set_player_nextattack(id, DRAW_TIME) set_weapon_anim(id, BALROG9_ANIM_DRAW) Remove_OldStuff(id) } else if(anim == KNIFE_ANIM_MIDSLASH1) { set_pev(id, pev_punchangle, PunchAngles) set_weapon_anim(id, BALROG9_ANIM_SLASH1) Remove_OldStuff(id) } else if(anim == KNIFE_ANIM_MIDSLASH2) { set_pev(id, pev_punchangle, PunchAngles) set_weapon_anim(id, BALROG9_ANIM_SLASH2) Remove_OldStuff(id) } else if(anim == KNIFE_ANIM_STAB_HIT) { set_pev(id, pev_punchangle, PunchAngles) if(g_chargeattack[id] == 2) { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK2) set_task(0.18,"Effect_ChargedAttack",id) } else { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK1) SetHamParamFloat(3, DAMAGE_UNCHARGED) } } else if(anim == KNIFE_ANIM_STAB_MISS) { if(g_chargeattack[id] == 2) { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK2) set_task(0.18,"Effect_ChargedAttack",id) } else { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK1) SetHamParamFloat(3, DAMAGE_UNCHARGED) } } return HAM_IGNORED } public Remove_OldStuff(id) { g_charging[id] = 0 g_charged[id] = 0 g_chargeattack[id] = 0 remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) } public Effect_ChargedAttack(id) { static Float:Origin[3] get_position(id, 36.0, 0.0, 0.0, Origin) emit_sound(id, CHAN_WEAPON, weapon_sound[B9_CHARGE_ATTACK], 1.0, ATTN_NORM, 0, PITCH_NORM) // Exp message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_exp_sprid) // sprite index write_byte(8) // scale in 0.1's write_byte(24) // framerate write_byte(4) // flags message_end() message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_exp_sprid2) // sprite index write_byte(7) // scale in 0.1's write_byte(30) // framerate write_byte(4) // flags message_end() // Check Attack Damage //HamRadiusDamage(id, fm_get_user_weapon_entity(id, CSW_KNIFE), , , DMG_BURN) for(new i = 0; i < get_maxplayers(); i++) { if(!is_user_alive(i)) continue if(id == i) continue if(cs_get_user_team(i) == cs_get_user_team(id)) continue if(entity_range(i, id) > float(CHARGE_EXPRADIUS)) continue ExecuteHamB(Ham_TakeDamage, i, fm_get_user_weapon_entity(id, CSW_KNIFE), id, DAMAGE_CHARGE, DMG_BLAST) } } stock HamRadiusDamage(id, ent, Float:radius, Float:damage, bits, iVictim) { static target, Float:origin[3] target = -1 pev(ent, pev_origin, origin) while((target = find_ent_in_sphere(target, origin, radius) )) { static Float:o[3] pev(target, pev_origin, o) xs_vec_sub(origin, o, o) // Recheck if the entity is in radius if (xs_vec_len(o) > radius) continue if(is_user_alive(target)) { if(id == target) continue if(cs_get_user_team(id) == cs_get_user_team(target)) continue } Ham_ExecDamageB(target, ent, id, damage * (xs_vec_len(o) / radius), HIT_GENERIC, bits) } } stock Ham_ExecDamageB(victim, inflictor, attacker, Float:damage, hitgroup, bits) { static const Float:hitgroup_multi[] = { 1.0, // HIT_GENERIC 4.0, // HIT_HEAD 1.0, // HIT_CHEST 1.25, // HIT_STOMACH 1.0, // HIT_LEFTARM 1.0, // HIT_RIGHTARM 0.75, // HIT_LEFTLEG 0.75, // HIT_RIGHTLEG 0.0 // HIT_SHIELD } set_pdata_int(victim, 75, hitgroup, 5) ExecuteHamB(Ham_TakeDamage, victim, inflictor, attacker, damage * hitgroup_multi[hitgroup], bits) } public fw_TraceAttack(ent, attacker, Float:Damage, Float:Dir[3], ptr, DamageType, iVictim) { if(!is_user_alive(attacker)) return HAM_IGNORED if(get_user_weapon(attacker) != CSW_KNIFE || !g_had_balrog9[attacker]) return HAM_IGNORED if(g_attack_mode[attacker] == MODE_NORMAL) SetHamParamFloat(3, DAMAGE_SLASH) if(g_attack_mode[attacker] == MODE_CHARGE) SetHamParamFloat(3, DAMAGE_CHARGE) return HAM_HANDLED } public fw_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], ptr, DamageType) { if(!is_user_alive(attacker)) return HAM_IGNORED if(get_user_weapon(attacker) != CSW_KNIFE || !g_had_balrog9[attacker]) return HAM_IGNORED if(g_attack_mode[attacker] == MODE_CHARGE) { if(g_chargeattack[attacker] == 2) // Do KnockBack Here { static Float:Origin[3] pev(attacker, pev_origin, Origin) hook_ent2(ent, Origin, CHARGE_ATTACK_KNOCKPOWER, 2) } } return HAM_HANDLED } public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { if(!is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) != CSW_KNIFE || !g_had_balrog9[id]) return FMRES_IGNORED if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i') { if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a') { set_weapons_timeidle(id, NEXTATTACK_MISS) set_player_nextattack(id, NEXTATTACK_MISS) if(g_attack_mode[id] == MODE_CHARGE) { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) } else emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) return FMRES_SUPERCEDE } if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't') // hit { if (sample[17] == 'w') // wall { set_weapons_timeidle(id, NEXTATTACK_HIT) set_player_nextattack(id, NEXTATTACK_HIT) if(g_attack_mode[id] == MODE_CHARGE) { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[B9_HITWALL], volume, attn, flags, pitch) } else emit_sound(id, channel, weapon_sound[B9_HITWALL], volume, attn, flags, pitch) return FMRES_SUPERCEDE } else { set_weapons_timeidle(id, NEXTATTACK_HIT) set_player_nextattack(id, NEXTATTACK_HIT) if(g_attack_mode[id] == MODE_CHARGE) { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) } else emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) return FMRES_SUPERCEDE } } if(sample[14] == 's' && sample[15] == 't' && sample[16] == 'a') // stab { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) return FMRES_SUPERCEDE } } return FMRES_IGNORED } public sound1(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { emit_sound(id, channel, weapon_sound[B9_CHARGE_ATTACK], volume, attn, flags, pitch) } public fw_CmdStart(id, uc_handle, seed) { if (!is_user_alive(id)) return if(get_user_weapon(id) != CSW_KNIFE) return if(!g_had_balrog9[id]) return static ent ent = find_ent_by_owner(-1, "weapon_knife", id) if(!pev_valid(ent)) return static CurButton, OldButton CurButton = get_uc(uc_handle, UC_Buttons) OldButton = (pev(id, pev_oldbuttons) & IN_ATTACK2) if(CurButton & IN_ATTACK) { if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0) return g_attack_mode[id] = MODE_NORMAL set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK2) } else { if(CurButton & IN_ATTACK2) { set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK2) set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK) if(OldButton) // Holding This Button { if(g_charging[id] == 2) { if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0) return if(g_charged[id]) { set_weapons_timeidle(id, 99999.0) set_player_nextattack(id, 99999.0) if(pev(id, pev_weaponanim) != BALROG9_ANIM_CHARGE_IDLE2) set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE2) } else { set_weapons_timeidle(id, 99999.5) set_player_nextattack(id, 9999.5) if(pev(id, pev_weaponanim) != BALROG9_ANIM_CHARGE_IDLE1) set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE1) } } } if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0) return remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) g_attack_mode[id] = MODE_CHARGE g_charging[id] = 1 g_charged[id] = 0 g_chargeattack[id] = 1 set_weapons_timeidle(id, CHARGE_STARTTIME + 0.25) set_player_nextattack(id, CHARGE_STARTTIME + 0.25) set_weapon_anim(id, BALROG9_ANIM_CHARGE_START) set_task(CHARGE_STARTTIME, "Do_HoldCharge", id+TASK_CHARGE_STARTING) set_task(CHARGE_TIME, "Do_SetCharge", id+TASK_CHARGING) } else { if(OldButton) // After Press this Button (no Hold) { if(g_charging[id] == 2) { if(g_chargeattack[id]) { ExecuteHamB(Ham_Weapon_SecondaryAttack, ent) set_weapons_timeidle(id, CHARGE_NEXTATTACK) set_player_nextattack(id, CHARGE_NEXTATTACK) g_charging[id] = 0 g_charged[id] = 0 g_chargeattack[id] = 0 remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) } } } } } } public Do_SetCharge(id) { id -= TASK_CHARGING if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_KNIFE) return if(!g_had_balrog9[id]) return g_charging[id] = 2 g_charged[id] = 1 g_chargeattack[id] = 2 set_weapons_timeidle(id, 0.25) set_player_nextattack(id, 0.25) set_weapon_anim(id, BALROG9_ANIM_CHARGE_FINISH) } public Do_HoldCharge(id) { id -= TASK_CHARGE_STARTING if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_KNIFE) return if(!g_had_balrog9[id]) return if(!(pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) { static ent ent = find_ent_by_owner(-1, "weapon_knife", id) if(!pev_valid(ent)) return ExecuteHamB(Ham_Weapon_SecondaryAttack, ent) set_weapons_timeidle(id, CHARGE_NEXTATTACK) set_player_nextattack(id, CHARGE_NEXTATTACK) g_charging[id] = 0 g_charged[id] = 0 g_chargeattack[id] = 0 remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) return } g_charging[id] = 2 g_chargeattack[id] = 1 g_charged[id] = 0 set_weapons_timeidle(id, CHARGE_TIME + 0.25) set_player_nextattack(id, CHARGE_TIME + 0.25) set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE1) } public fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle) { if (!is_user_alive(id)) return FMRES_IGNORED if (get_user_weapon(id) != CSW_KNIFE) return FMRES_IGNORED if(!g_had_balrog9[id]) return FMRES_IGNORED static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, view_ofs) xs_vec_add(fOrigin, view_ofs, vecStart) pev(id, pev_v_angle, v_angle) engfunc(EngFunc_MakeVectors, v_angle) get_global_vector(GL_v_forward, v_forward) if(g_attack_mode[id] == MODE_NORMAL) xs_vec_mul_scalar(v_forward, ATTACKDIS_SLASH, v_forward) else if(g_attack_mode[id] == MODE_CHARGE) xs_vec_mul_scalar(v_forward, ATTACKDIS_CHARGE, v_forward) xs_vec_add(vecStart, v_forward, vecEnd) engfunc(EngFunc_TraceLine, vecStart, vecEnd, ignored_monster, id, handle) return FMRES_SUPERCEDE } public fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle) { if (!is_user_alive(id)) return FMRES_IGNORED if (get_user_weapon(id) != CSW_KNIFE) return FMRES_IGNORED if(!g_had_balrog9[id]) return FMRES_IGNORED static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, view_ofs) xs_vec_add(fOrigin, view_ofs, vecStart) pev(id, pev_v_angle, v_angle) engfunc(EngFunc_MakeVectors, v_angle) get_global_vector(GL_v_forward, v_forward) if(g_attack_mode[id] == MODE_NORMAL) xs_vec_mul_scalar(v_forward, ATTACKDIS_SLASH, v_forward) else if(g_attack_mode[id] == MODE_CHARGE) xs_vec_mul_scalar(v_forward, ATTACKDIS_CHARGE, v_forward) xs_vec_add(vecStart, v_forward, vecEnd) engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle) return FMRES_SUPERCEDE } stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[]) { new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(ent, pev_origin, vOrigin) pev(ent, pev_view_ofs,vUp) //for player xs_vec_add(vOrigin,vUp,vOrigin) pev(ent, pev_v_angle, vAngle) // if normal entity ,use pev_angles angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight) angle_vector(vAngle,ANGLEVECTOR_UP,vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } stock set_weapons_timeidle(id, Float:TimeIdle) { if(!is_user_alive(id)) return new entwpn = fm_get_user_weapon_entity(id, CSW_KNIFE) if (pev_valid(entwpn)) { set_pdata_float(entwpn, 46, TimeIdle, 4) set_pdata_float(entwpn, 47, TimeIdle, 4) set_pdata_float(entwpn, 48, TimeIdle + 1.0, 4) } } stock set_player_nextattack(id, Float:nexttime) { if(!is_user_alive(id)) return const m_flNextAttack = 83 set_pdata_float(id, m_flNextAttack, nexttime, 5) } stock set_weapon_anim(id, anim) { if(!is_user_alive(id)) return set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id) write_byte(anim) write_byte(0) message_end() } stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, type) { static Float:fl_Velocity[3] static Float:EntOrigin[3] pev(ent, pev_origin, EntOrigin) static Float:distance_f distance_f = get_distance_f(EntOrigin, VicOrigin) new Float:fl_Time = distance_f / speed VicOrigin[2] -= 36.0 if(type == 1) { fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5 fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5 fl_Velocity[2] = ((VicOrigin[2] - EntOrigin[2]) / fl_Time) * 1.5 } else if(type == 2) { fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5 fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5 fl_Velocity[2] = ((EntOrigin[2] - VicOrigin[2]) / fl_Time) * 1.5 } entity_set_vector(ent, EV_VEC_velocity, fl_Velocity) } Set_Sprite( iPlayer, const Weapon[ ] ) { if( ! pev_valid( iPlayer ) ) return; message_begin( MSG_ONE , get_user_msgid( "WeaponList" ) , _, iPlayer ) write_string( Weapon ) write_byte( -1 ) write_byte( -1) write_byte( -1 ) write_byte( -1 ) write_byte( 2 ) write_byte( 1 ) write_byte( 29 ) write_byte( 0 ) message_end( ) }
He who fails to plan is planning to fail
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
After one minute, server crashes:
07/25/2018 - 21:35:14: [HAMSANDWICH] Wrong data type (data is of type float)
L 07/25/2018 - 21:35:14: [AMXX] Displaying debug trace (plugin "weapon_runeblade.amxx", version "1.0")
L 07/25/2018 - 21:35:14: [AMXX] Run time error 10: native error (native "SetHamParamFloat")
L 07/25/2018 - 21:35:14: [AMXX] [0] weapon_runeblade.sma::fw_Knife_SendAnim (line 302)
07/25/2018 - 21:35:14: [HAMSANDWICH] Wrong data type (data is of type float)
L 07/25/2018 - 21:35:14: [AMXX] Displaying debug trace (plugin "weapon_runeblade.amxx", version "1.0")
L 07/25/2018 - 21:35:14: [AMXX] Run time error 10: native error (native "SetHamParamFloat")
L 07/25/2018 - 21:35:14: [AMXX] [0] weapon_runeblade.sma::fw_Knife_SendAnim (line 302)
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
L 07/25/2018 - 21:57:32: [HAMSANDWICH] Wrong data type (data is of type float)
L 07/25/2018 - 21:57:32: [AMXX] Displaying debug trace (plugin "weapon_runeblade.amxx", version "1.0")
L 07/25/2018 - 21:57:32: [AMXX] Run time error 10: native error (native "SetHamParamFloat")
L 07/25/2018 - 21:57:32: [AMXX] [0] weapon_runeblade.sma::fw_Knife_SendAnim (line 313)
L 07/25/2018 - 21:57:32: [AMXX] Displaying debug trace (plugin "weapon_runeblade.amxx", version "1.0")
L 07/25/2018 - 21:57:32: [AMXX] Run time error 10: native error (native "SetHamParamFloat")
L 07/25/2018 - 21:57:32: [AMXX] [0] weapon_runeblade.sma::fw_Knife_SendAnim (line 313)
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
As i told you, the weapon itself is bugged.
You asked for conversion & we did it.
You faced few problems aren't related to our mod so we don't care about it.
You asked for conversion & we did it.
You faced few problems aren't related to our mod so we don't care about it.
how change the flag from ze_extraitems.ini?Raheem wrote: ↑5 years ago Here fixed infected humans have rune blade. Also made it for VIPs only.
Make sure to enableze_items_vip.amxx
inplugins-zombie_escape.ini
and VIP plugin must be installed.
You can change the flag fromze_extraitems.ini
or change from here:ze_set_item_vip(g_iItemID, "VIP_A")
Version 1.3 of zombie escape required so this works, compile with latest compiler posted in releases:
Code: Select all
#include <zombie_escape> #include <engine> #include <fakemeta_util> #include <cstrike> #include <xs> #define PLUGIN "[CSO] RUNE BLADE" #define VERSION "1.0" #define AUTHOR "TK N CASH" #define ADMIN_ACCESS ADMIN_KICK // Draw Time #define DRAW_TIME 1.5 // Next Attack Time #define NEXTATTACK_MISS 1.45 #define NEXTATTACK_HIT 1.45 // Next Attack Time #define NEXTATTACK_MISS1 1.45 #define NEXTATTACK_HIT1 1.45 // Attack Distance #define ATTACKDIS_SLASH 75.0 #define ATTACKDIS_CHARGE 120.0 // Attack Damage #define DAMAGE_SLASH 500.0 #define DAMAGE_UNCHARGED 1000.0 #define DAMAGE_CHARGE 2500.0 // Charge Mode #define CHARGE_STARTTIME 0.75 #define CHARGE_ATTACKTIME 0.75 #define CHARGE_TIME 3.0 #define CHARGE_NEXTATTACK 2.0 #define CHARGE_EXPRADIUS 350 #define CHARGE_ATTACK_KNOCKPOWER 100.0 // Task #define TASK_CHARGE_STARTING 75675 #define TASK_CHARGING 464334 // Weapon info #define ITEM_NAME "RuneBlade" #define ITEM_COST 50 #define ITEM_LIMIT 0 // Models new const v_model[] = "models/v_runeblade.mdl" new const p_model[] = "models/p_runeblade.mdl" // Sprite new const exp_spr[] = "sprites/runeblade_ef.spr" new const exp_spr2[] = "sprites/runeblade_ef02.spr" new const weapon_sound[9][] = { "runeblade/draw.wav", "runeblade/miss.wav", "runeblade/miss.wav", "runeblade/hitwall.wav", "runeblade/hit.wav", "runeblade/hit.wav", "runeblade/charge_idle.wav", "runeblade/charge_finish1.wav", "runeblade/charge_hit.wav" } enum { B9_DRAW = 0, B9_SLASH1, B9_SLASH2, B9_HITWALL, B9_HIT1, B9_HIT2, B9_CHARGE_START, B9_CHARGE_FINISH, B9_CHARGE_ATTACK } new g_bot, g_exp_sprid, g_exp_sprid2 new g_had_balrog9[33], g_attack_mode[33], g_charging[33], g_charged[33], g_chargeattack[33] new g_iItemID enum { MODE_NORMAL = 1, MODE_CHARGE } enum { KNIFE_ANIM_IDLE = 0, KNIFE_ANIM_SLASH1, KNIFE_ANIM_SLASH2, KNIFE_ANIM_DRAW, KNIFE_ANIM_STAB_HIT, KNIFE_ANIM_STAB_MISS, KNIFE_ANIM_MIDSLASH1, KNIFE_ANIM_MIDSLASH2 } enum { BALROG9_ANIM_IDLE = 0, BALROG9_ANIM_SLASH1 = 1, BALROG9_ANIM_SLASH2 = 1, BALROG9_ANIM_SLASH3 = 1, BALROG9_ANIM_SLASH4 = 1, BALROG9_ANIM_SLASH5 = 1, BALROG9_ANIM_DRAW = 2, BALROG9_ANIM_CHARGE_START, BALROG9_ANIM_CHARGE_FINISH, BALROG9_ANIM_CHARGE_IDLE1, BALROG9_ANIM_CHARGE_IDLE2, BALROG9_ANIM_CHARGE_ATTACK1, BALROG9_ANIM_CHARGE_ATTACK2 } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) g_iItemID = ze_register_item(ITEM_NAME, ITEM_COST, ITEM_LIMIT) ze_set_item_vip(g_iItemID, "VIP_A") // Powers of ZE v1.3 (Jacks idea) register_event("CurWeapon", "Event_CurWeapon", "be", "1=1") register_forward(FM_EmitSound, "fw_EmitSound") register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_TraceLine, "fw_TraceLine") register_forward(FM_TraceHull, "fw_TraceHull") RegisterHam(Ham_CS_Weapon_SendWeaponAnim, "weapon_knife", "fw_Knife_SendAnim", 1) RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Post", 1) RegisterHam(Ham_Spawn, "player", "remove_balrog9", 1); register_clcmd ( "admin_get_runeblade", "get_balrog9", ADMIN_ACCESS ); register_clcmd( "weapon_runeblade" , "Hook_WeaponList" ); } public plugin_natives ( ) { register_native ( "get_rune", "get_balrog9", 1 ); register_native ( "remove_rune", "remove_balrog9", 1 ); } public plugin_precache() { engfunc(EngFunc_PrecacheModel, v_model) engfunc(EngFunc_PrecacheModel, p_model) for(new i = 0; i < sizeof(weapon_sound); i++) engfunc(EngFunc_PrecacheSound, weapon_sound[i]) g_exp_sprid = engfunc(EngFunc_PrecacheModel, exp_spr) g_exp_sprid2 = engfunc(EngFunc_PrecacheModel, exp_spr2) precache_generic("sprites/640hud81.spr") precache_generic("sprites/weapon_runeblade.txt") } public Hook_WeaponList( id ) { engclient_cmd( id, "weapon_knife" ) return PLUGIN_HANDLED; } public ze_select_item_pre(id, iItemid, bIgnoreCost) { if (iItemid != g_iItemID) return ZE_ITEM_AVAILABLE if (ze_is_user_zombie(id)) return ZE_ITEM_DONT_SHOW return ZE_ITEM_AVAILABLE } public ze_select_item_post(id, iItemid, bIgnoreCost) { if (iItemid != g_iItemID) return get_balrog9(id) } public ze_user_infected(iVictim, iInfector) { remove_balrog9(iVictim) } public get_balrog9(id) { g_had_balrog9[id] = 1 g_attack_mode[id] = 0 g_charged[id] = 0 g_charging[id] = 0 g_chargeattack[id] = 0 Set_Sprite( id, "weapon_runeblade" ) if(get_user_weapon(id) == CSW_KNIFE) { Event_CurWeapon(id) set_weapon_anim(id, BALROG9_ANIM_DRAW) } } public remove_balrog9(id) { g_had_balrog9[id] = 0 g_attack_mode[id] = 0 g_charged[id] = 0 g_charging[id] = 0 g_chargeattack[id] = 0 Set_Sprite( id, "weapon_knife" ) remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) } public client_putinserver(id) { if(is_user_bot(id) && !g_bot) { g_bot = 1 set_task(0.1, "Do_RegisterHamBot", id) } } public Do_RegisterHamBot(id) { RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack") RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Post", 1) } public Event_CurWeapon(id) { if(!is_user_alive(id)) return 1 if(get_user_weapon(id) != CSW_KNIFE) return 1 if(!g_had_balrog9[id]) return 1 set_pev(id, pev_viewmodel2, v_model) set_pev(id, pev_weaponmodel2, p_model) return 0 } public fw_Knife_SendAnim(ent, anim, skip_local) { if(!pev_valid(ent)) return HAM_IGNORED new id id = get_pdata_cbase(ent, 41 , 4) if(!g_had_balrog9[id]) return HAM_IGNORED static Float:PunchAngles[3] if(anim == KNIFE_ANIM_DRAW) { Set_Sprite( id, "weapon_runeblade" ) set_weapons_timeidle(id, DRAW_TIME) set_player_nextattack(id, DRAW_TIME) set_weapon_anim(id, BALROG9_ANIM_DRAW) Remove_OldStuff(id) } else if(anim == KNIFE_ANIM_MIDSLASH1) { set_pev(id, pev_punchangle, PunchAngles) set_weapon_anim(id, BALROG9_ANIM_SLASH1) Remove_OldStuff(id) } else if(anim == KNIFE_ANIM_MIDSLASH2) { set_pev(id, pev_punchangle, PunchAngles) set_weapon_anim(id, BALROG9_ANIM_SLASH2) Remove_OldStuff(id) } else if(anim == KNIFE_ANIM_STAB_HIT) { set_pev(id, pev_punchangle, PunchAngles) if(g_chargeattack[id] == 2) { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK2) set_task(0.18,"Effect_ChargedAttack",id) } else { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK1) SetHamParamFloat(3, DAMAGE_UNCHARGED) } } else if(anim == KNIFE_ANIM_STAB_MISS) { if(g_chargeattack[id] == 2) { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK2) set_task(0.18,"Effect_ChargedAttack",id) } else { set_weapon_anim(id, BALROG9_ANIM_CHARGE_ATTACK1) SetHamParamFloat(3, DAMAGE_UNCHARGED) } } return HAM_IGNORED } public Remove_OldStuff(id) { g_charging[id] = 0 g_charged[id] = 0 g_chargeattack[id] = 0 remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) } public Effect_ChargedAttack(id) { static Float:Origin[3] get_position(id, 36.0, 0.0, 0.0, Origin) emit_sound(id, CHAN_WEAPON, weapon_sound[B9_CHARGE_ATTACK], 1.0, ATTN_NORM, 0, PITCH_NORM) // Exp message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_exp_sprid) // sprite index write_byte(8) // scale in 0.1's write_byte(24) // framerate write_byte(4) // flags message_end() message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_exp_sprid2) // sprite index write_byte(7) // scale in 0.1's write_byte(30) // framerate write_byte(4) // flags message_end() // Check Attack Damage //HamRadiusDamage(id, fm_get_user_weapon_entity(id, CSW_KNIFE), , , DMG_BURN) for(new i = 0; i < get_maxplayers(); i++) { if(!is_user_alive(i)) continue if(id == i) continue if(cs_get_user_team(i) == cs_get_user_team(id)) continue if(entity_range(i, id) > float(CHARGE_EXPRADIUS)) continue ExecuteHamB(Ham_TakeDamage, i, fm_get_user_weapon_entity(id, CSW_KNIFE), id, DAMAGE_CHARGE, DMG_BLAST) } } stock HamRadiusDamage(id, ent, Float:radius, Float:damage, bits, iVictim) { static target, Float:origin[3] target = -1 pev(ent, pev_origin, origin) while((target = find_ent_in_sphere(target, origin, radius) )) { static Float:o[3] pev(target, pev_origin, o) xs_vec_sub(origin, o, o) // Recheck if the entity is in radius if (xs_vec_len(o) > radius) continue if(is_user_alive(target)) { if(id == target) continue if(cs_get_user_team(id) == cs_get_user_team(target)) continue } Ham_ExecDamageB(target, ent, id, damage * (xs_vec_len(o) / radius), HIT_GENERIC, bits) } } stock Ham_ExecDamageB(victim, inflictor, attacker, Float:damage, hitgroup, bits) { static const Float:hitgroup_multi[] = { 1.0, // HIT_GENERIC 4.0, // HIT_HEAD 1.0, // HIT_CHEST 1.25, // HIT_STOMACH 1.0, // HIT_LEFTARM 1.0, // HIT_RIGHTARM 0.75, // HIT_LEFTLEG 0.75, // HIT_RIGHTLEG 0.0 // HIT_SHIELD } set_pdata_int(victim, 75, hitgroup, 5) ExecuteHamB(Ham_TakeDamage, victim, inflictor, attacker, damage * hitgroup_multi[hitgroup], bits) } public fw_TraceAttack(ent, attacker, Float:Damage, Float:Dir[3], ptr, DamageType, iVictim) { if(!is_user_alive(attacker)) return HAM_IGNORED if(get_user_weapon(attacker) != CSW_KNIFE || !g_had_balrog9[attacker]) return HAM_IGNORED if(g_attack_mode[attacker] == MODE_NORMAL) SetHamParamFloat(3, DAMAGE_SLASH) if(g_attack_mode[attacker] == MODE_CHARGE) SetHamParamFloat(3, DAMAGE_CHARGE) return HAM_HANDLED } public fw_TraceAttack_Post(ent, attacker, Float:Damage, Float:Dir[3], ptr, DamageType) { if(!is_user_alive(attacker)) return HAM_IGNORED if(get_user_weapon(attacker) != CSW_KNIFE || !g_had_balrog9[attacker]) return HAM_IGNORED if(g_attack_mode[attacker] == MODE_CHARGE) { if(g_chargeattack[attacker] == 2) // Do KnockBack Here { static Float:Origin[3] pev(attacker, pev_origin, Origin) hook_ent2(ent, Origin, CHARGE_ATTACK_KNOCKPOWER, 2) } } return HAM_HANDLED } public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { if(!is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) != CSW_KNIFE || !g_had_balrog9[id]) return FMRES_IGNORED if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i') { if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a') { set_weapons_timeidle(id, NEXTATTACK_MISS) set_player_nextattack(id, NEXTATTACK_MISS) if(g_attack_mode[id] == MODE_CHARGE) { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) } else emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) return FMRES_SUPERCEDE } if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't') // hit { if (sample[17] == 'w') // wall { set_weapons_timeidle(id, NEXTATTACK_HIT) set_player_nextattack(id, NEXTATTACK_HIT) if(g_attack_mode[id] == MODE_CHARGE) { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[B9_HITWALL], volume, attn, flags, pitch) } else emit_sound(id, channel, weapon_sound[B9_HITWALL], volume, attn, flags, pitch) return FMRES_SUPERCEDE } else { set_weapons_timeidle(id, NEXTATTACK_HIT) set_player_nextattack(id, NEXTATTACK_HIT) if(g_attack_mode[id] == MODE_CHARGE) { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_SLASH1, B9_SLASH2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) } else emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) return FMRES_SUPERCEDE } } if(sample[14] == 's' && sample[15] == 't' && sample[16] == 'a') // stab { if(g_chargeattack[id] == 2) emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) else emit_sound(id, channel, weapon_sound[random_num(B9_HIT1, B9_HIT2)], volume, attn, flags, pitch) return FMRES_SUPERCEDE } } return FMRES_IGNORED } public sound1(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { emit_sound(id, channel, weapon_sound[B9_CHARGE_ATTACK], volume, attn, flags, pitch) } public fw_CmdStart(id, uc_handle, seed) { if (!is_user_alive(id)) return if(get_user_weapon(id) != CSW_KNIFE) return if(!g_had_balrog9[id]) return static ent ent = find_ent_by_owner(-1, "weapon_knife", id) if(!pev_valid(ent)) return static CurButton, OldButton CurButton = get_uc(uc_handle, UC_Buttons) OldButton = (pev(id, pev_oldbuttons) & IN_ATTACK2) if(CurButton & IN_ATTACK) { if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0) return g_attack_mode[id] = MODE_NORMAL set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK2) } else { if(CurButton & IN_ATTACK2) { set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK2) set_uc(uc_handle, UC_Buttons, CurButton & ~IN_ATTACK) if(OldButton) // Holding This Button { if(g_charging[id] == 2) { if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0) return if(g_charged[id]) { set_weapons_timeidle(id, 99999.0) set_player_nextattack(id, 99999.0) if(pev(id, pev_weaponanim) != BALROG9_ANIM_CHARGE_IDLE2) set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE2) } else { set_weapons_timeidle(id, 99999.5) set_player_nextattack(id, 9999.5) if(pev(id, pev_weaponanim) != BALROG9_ANIM_CHARGE_IDLE1) set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE1) } } } if(get_pdata_float(ent, 46, 4) > 0.0 || get_pdata_float(ent, 47, 4) > 0.0) return remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) g_attack_mode[id] = MODE_CHARGE g_charging[id] = 1 g_charged[id] = 0 g_chargeattack[id] = 1 set_weapons_timeidle(id, CHARGE_STARTTIME + 0.25) set_player_nextattack(id, CHARGE_STARTTIME + 0.25) set_weapon_anim(id, BALROG9_ANIM_CHARGE_START) set_task(CHARGE_STARTTIME, "Do_HoldCharge", id+TASK_CHARGE_STARTING) set_task(CHARGE_TIME, "Do_SetCharge", id+TASK_CHARGING) } else { if(OldButton) // After Press this Button (no Hold) { if(g_charging[id] == 2) { if(g_chargeattack[id]) { ExecuteHamB(Ham_Weapon_SecondaryAttack, ent) set_weapons_timeidle(id, CHARGE_NEXTATTACK) set_player_nextattack(id, CHARGE_NEXTATTACK) g_charging[id] = 0 g_charged[id] = 0 g_chargeattack[id] = 0 remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) } } } } } } public Do_SetCharge(id) { id -= TASK_CHARGING if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_KNIFE) return if(!g_had_balrog9[id]) return g_charging[id] = 2 g_charged[id] = 1 g_chargeattack[id] = 2 set_weapons_timeidle(id, 0.25) set_player_nextattack(id, 0.25) set_weapon_anim(id, BALROG9_ANIM_CHARGE_FINISH) } public Do_HoldCharge(id) { id -= TASK_CHARGE_STARTING if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_KNIFE) return if(!g_had_balrog9[id]) return if(!(pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) { static ent ent = find_ent_by_owner(-1, "weapon_knife", id) if(!pev_valid(ent)) return ExecuteHamB(Ham_Weapon_SecondaryAttack, ent) set_weapons_timeidle(id, CHARGE_NEXTATTACK) set_player_nextattack(id, CHARGE_NEXTATTACK) g_charging[id] = 0 g_charged[id] = 0 g_chargeattack[id] = 0 remove_task(id+TASK_CHARGE_STARTING) remove_task(id+TASK_CHARGING) return } g_charging[id] = 2 g_chargeattack[id] = 1 g_charged[id] = 0 set_weapons_timeidle(id, CHARGE_TIME + 0.25) set_player_nextattack(id, CHARGE_TIME + 0.25) set_weapon_anim(id, BALROG9_ANIM_CHARGE_IDLE1) } public fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle) { if (!is_user_alive(id)) return FMRES_IGNORED if (get_user_weapon(id) != CSW_KNIFE) return FMRES_IGNORED if(!g_had_balrog9[id]) return FMRES_IGNORED static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, view_ofs) xs_vec_add(fOrigin, view_ofs, vecStart) pev(id, pev_v_angle, v_angle) engfunc(EngFunc_MakeVectors, v_angle) get_global_vector(GL_v_forward, v_forward) if(g_attack_mode[id] == MODE_NORMAL) xs_vec_mul_scalar(v_forward, ATTACKDIS_SLASH, v_forward) else if(g_attack_mode[id] == MODE_CHARGE) xs_vec_mul_scalar(v_forward, ATTACKDIS_CHARGE, v_forward) xs_vec_add(vecStart, v_forward, vecEnd) engfunc(EngFunc_TraceLine, vecStart, vecEnd, ignored_monster, id, handle) return FMRES_SUPERCEDE } public fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle) { if (!is_user_alive(id)) return FMRES_IGNORED if (get_user_weapon(id) != CSW_KNIFE) return FMRES_IGNORED if(!g_had_balrog9[id]) return FMRES_IGNORED static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, view_ofs) xs_vec_add(fOrigin, view_ofs, vecStart) pev(id, pev_v_angle, v_angle) engfunc(EngFunc_MakeVectors, v_angle) get_global_vector(GL_v_forward, v_forward) if(g_attack_mode[id] == MODE_NORMAL) xs_vec_mul_scalar(v_forward, ATTACKDIS_SLASH, v_forward) else if(g_attack_mode[id] == MODE_CHARGE) xs_vec_mul_scalar(v_forward, ATTACKDIS_CHARGE, v_forward) xs_vec_add(vecStart, v_forward, vecEnd) engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle) return FMRES_SUPERCEDE } stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[]) { new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(ent, pev_origin, vOrigin) pev(ent, pev_view_ofs,vUp) //for player xs_vec_add(vOrigin,vUp,vOrigin) pev(ent, pev_v_angle, vAngle) // if normal entity ,use pev_angles angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight) angle_vector(vAngle,ANGLEVECTOR_UP,vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } stock set_weapons_timeidle(id, Float:TimeIdle) { if(!is_user_alive(id)) return new entwpn = fm_get_user_weapon_entity(id, CSW_KNIFE) if (pev_valid(entwpn)) { set_pdata_float(entwpn, 46, TimeIdle, 4) set_pdata_float(entwpn, 47, TimeIdle, 4) set_pdata_float(entwpn, 48, TimeIdle + 1.0, 4) } } stock set_player_nextattack(id, Float:nexttime) { if(!is_user_alive(id)) return const m_flNextAttack = 83 set_pdata_float(id, m_flNextAttack, nexttime, 5) } stock set_weapon_anim(id, anim) { if(!is_user_alive(id)) return set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id) write_byte(anim) write_byte(0) message_end() } stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, type) { static Float:fl_Velocity[3] static Float:EntOrigin[3] pev(ent, pev_origin, EntOrigin) static Float:distance_f distance_f = get_distance_f(EntOrigin, VicOrigin) new Float:fl_Time = distance_f / speed VicOrigin[2] -= 36.0 if(type == 1) { fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5 fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5 fl_Velocity[2] = ((VicOrigin[2] - EntOrigin[2]) / fl_Time) * 1.5 } else if(type == 2) { fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5 fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5 fl_Velocity[2] = ((EntOrigin[2] - VicOrigin[2]) / fl_Time) * 1.5 } entity_set_vector(ent, EV_VEC_velocity, fl_Velocity) } Set_Sprite( iPlayer, const Weapon[ ] ) { if( ! pev_valid( iPlayer ) ) return; message_begin( MSG_ONE , get_user_msgid( "WeaponList" ) , _, iPlayer ) write_string( Weapon ) write_byte( -1 ) write_byte( -1) write_byte( -1 ) write_byte( -1 ) write_byte( 2 ) write_byte( 1 ) write_byte( 29 ) write_byte( 0 ) message_end( ) }
Sorry for late, you can change it like:
- [Stun Rifle]
- NAME = Stun Rifle
- COST = 300
- LIMIT = 1
- VIP FLAG = VIP_C
He who fails to plan is planning to fail
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: Bing [Bot] and 1 guest