Existing user? Sign in
Sign up
Games
Servers
Useful
User
Pass
2FA
Unire pluginuri 2
Freakz Forum Index
->
Trash Bin
->
CS 2006-2019 (Archived)
->
Fixed issues
Author
Message
794
Iulian3D
[Mentally Stable]
Status: Offline
(since 04-03-2020 22:38)
Joined: 21 Jun 2015
Posts: 227
,
Topics: 37
Location:
Buftea .
Reputation:
178.8
Votes
: 4
Posted: 31-07-2015, 17:15:23
| Translate post to:
... (
Click for more languages
)
Salut ! Aș vrea sã-mi uniți și mie aceste trei pluginuri astfel încât la sfârșit sã rezulte o clasã human care sã aibã o undã de șoc ca Islave și sã aibã o sabie laser . ( Știu cã am mai fãcut o astfel de cerere , dar în topicul trecut , nu am fost atent și am postat un alt plugin de Islave ...)
Plugin Human :
Spoiler:
/*================================================================================
Human Test
================================================================================*/
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>
#include <zombieplague>
#include <zombiexp>
#define PLUGNAME "[ZP] Zombie Respawn"
#define AUTHOR "3D"
#define VERSION "4.0"
// Human Attributes
new const hclass_name[] = { "Human_15" } // name
new const hclass_info[] = { "AK-47 and USP" } // description
new const hclass_model[] = { "player" } // model
new const hclass_weapons[] = { WEAPON_AK47, WEAPON_USP } // weapons
const hclass_health = 300 // health
const hclass_speed = 300 // speed
const Float:hclass_gravity = 0.80 // gravity
const hclass_level = 15 // level required to use
// Class IDs
new g_hclassid
// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
new registerText[32]
formatex( registerText, sizeof registerText - 1, "[ZPXP] %s human", hclass_name)
register_plugin(registerText, "1.0", "N3messys")
// Register the new class and store ID for reference
g_hclassid = zpxp_register_human_class(hclass_name, hclass_info, hclass_model, hclass_weapons, hclass_health, hclass_speed, hclass_gravity, hclass_level)
if(g_hclassid == -1)
{
server_print("[ZPXP] You have not properly setup your Zombie XP Mod.");
}
}
// User Infected forward
public zp_user_infected_post(id, infector, nemesis)
{
// Check if the infected player is using our custom zombie class
if (zp_get_user_human_class(id) != g_hclassid) return;
// Undo any settings we have saved here
}
public zp_user_humanized_post(id)
{
// Check if the infected player is using our custom zombie class
if (zp_get_user_human_class(id) != g_hclassid) return;
// User turned human
if (zp_get_user_survivor(id) == 1)
{
// He's survivor, remove any changes made in the plugin
zp_user_infected_post(id, 0, 0)
} else {
zp_round_started_human(id)
}
}
//This is a forward from zpxp, as opposed to ZPs round_start (which is when infection begins) this is the true beginning of the round
public zp_round_started_human(id)
{
if (zp_get_user_human_class(id) != g_hclassid) return;
// Set our human's powers!
}
new bool:g_end
new g_respawn_count[33]
new cvar_maxspawn , cvar_spawndelay , cvar_color , cvar_colorspawn , cvar_amount , cvar_time;
new g_zclass_respawn
public plugin_init()
{
register_plugin("[ZPXP] Respawn Zombie","1.0","N3messys");
RegisterHam(Ham_Killed, "player", "PlayerKilled", 1);
register_cvar("zp_respawn", VERSION, FCVAR_SERVER)
cvar_maxspawn = register_cvar("zp_max_spawn" , "4");
cvar_spawndelay = register_cvar("zp_spawn_time" , "5.0");
cvar_color = register_cvar("zp_color" , "1");
cvar_colorspawn = register_cvar("zp_color_spawn" , "0 255 0");
cvar_amount = register_cvar("zp_color_amount" , "30");
cvar_time = register_cvar("zp_color_time" , "5.0");
}
public PlayerKilled(Victim)
if (zp_get_user_zombie(Victim) && zp_get_user_zombie_class(Victim) == g_zclass_respawn && !zp_get_user_nemesis(Victim))
set_task((get_pcvar_float(cvar_spawndelay)), "PlayerRespawn", Victim);
public PlayerRespawn(id)
{
client_print(id, print_chat, "debug");
if (g_respawn_count[id]++>=get_pcvar_num(cvar_maxspawn))
return PLUGIN_CONTINUE;
if (!g_end && !is_user_alive(id) && zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_respawn && !zp_get_user_nemesis(id))
{
remove_task(id);
zp_respawn_user(id, ZP_TEAM_ZOMBIE)
if(get_pcvar_num(cvar_color))
{
new szColor[12], szRed[4], szGreen[4], szBlue[4]
get_pcvar_string(cvar_colorspawn,szColor,11)
parse(szColor,szRed,3,szGreen,3,szBlue,4)
new iRed = clamp(str_to_num(szRed),0,255)
new iGreen = clamp(str_to_num(szGreen),0,255)
new iBlue = clamp(str_to_num(szBlue),0,255)
set_user_rendering(id,kRenderFxGlowShell,iRed,iGreen,iBlue,kRenderNormal,get_pcvar_num(cvar_amount))
set_task(get_pcvar_float(cvar_time),"event_time_color",id)
}
}
return PLUGIN_CONTINUE;
}
public event_time_color(id)
{
set_user_rendering(id,kRenderFxNone,0,0,0,kRenderNormal,0)
}
public zp_round_ended(winteam)
{
g_end = true
}
public zp_round_started(gamemode, player)
{
g_end = false
arrayset(g_respawn_count,0,33)
}
Plugin Islave :
Spoiler:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <xs>
#include <engine>
#include <zombieplague>
#include <zombiexp>
/*================================================================================
[Plugin Customization]
=================================================================================*/
new const zclass_name[] = { "Islave" }
new const zclass_info[] = { "Blast Power (Pressing E)" }
new const zclass_model[] = { "Islave" }
new const zclass_clawmodel[] = { "v_islave.mdl" }
const zclass_health = 1000
const zclass_speed = 200
const Float:zclass_gravity = 0.6
const Float:zclass_knockback = 0.6
const zclass_level = 48
new const beam_cylinder[] = "sprites/white.spr"
new const houndeye_attack[][] = { "houndeye/he_attack1.wav", "houndeye/he_attack3.wav" }
new const houndeye_blast[][] = { "houndeye/he_blast1.wav", "houndeye/he_blast3.wav" }
new Float:g_Time[33];
new cvar_cooldown;
/*================================================================================
[End Customization]
=================================================================================*/
#define is_player(%0) (1 <= %0 <= giMaxplayers)
#define TASK_BARTIME 16000
// Zombie vars
new gMsgBarTime, gMsgDeathMsg, gSprBeam, gHoundEye, giMaxplayers, cvar_timeblast, cvar_radius, cvar_blast_infect,
cvar_damage, cvar_damage_amount
public plugin_init()
{
register_plugin("Houndeye Zombie", "0.4", "Morte")
cvar_timeblast = register_cvar("zp_houndeye_timeblast", "2.5")
cvar_radius = register_cvar("zp_houndeye_radius", "150.0")
cvar_blast_infect = register_cvar("zp_houndeye_infect", "0")
cvar_damage = register_cvar("zp_houndeye_damage", "150")
cvar_damage_amount = register_cvar("zp_houndeye_damage_amount", "150")
cvar_cooldown = register_cvar("zp_houndeye_cooldown","16");
register_forward( FM_CmdStart, "CmdStart")
giMaxplayers = get_maxplayers()
gMsgBarTime = get_user_msgid("BarTime")
gMsgDeathMsg = get_user_msgid("DeathMsg")
}
public plugin_precache()
{
gHoundEye = zpxp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback, zclass_level)
gSprBeam = precache_model(beam_cylinder)
for (new i = 0; i < sizeof houndeye_attack; i++)
engfunc(EngFunc_PrecacheSound, houndeye_attack[i])
for (new i = 0; i < sizeof houndeye_blast; i++)
engfunc(EngFunc_PrecacheSound, houndeye_blast[i])
}
public CmdStart(id)
{
if(!is_user_alive(id))
return;
static iButton; iButton = pev(id, pev_button)
static iOldButton; iOldButton = pev(id, pev_oldbuttons)
if(zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == gHoundEye) && !zp_get_user_nemesis(id))
{
if( ( iButton & IN_USE ) && !( iOldButton & IN_USE ) )
{
static Float: cooldown;
cooldown = get_pcvar_float(cvar_cooldown);
if(get_gametime() - g_Time[id] < cooldown)
{
print_chatColor(id,"!g[ZM]!nTi-ai folosit abilitatea , asteapta !t%.f0 !nsecunde.", cooldown - (get_gametime() - g_Time[id]));
return;
}
g_Time[id] = get_gametime();
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(get_pcvar_num(cvar_timeblast))
write_byte(0)
message_end()
emit_sound(id, CHAN_VOICE, houndeye_attack[random_num(0, sizeof houndeye_attack - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(get_pcvar_float(cvar_timeblast), "blast_players", id+TASK_BARTIME)
}
if( iOldButton & IN_USE && !( iButton & IN_USE ) )
set_task(0.1, "blast_stop", id)
}
}
public blast_stop(id)
{
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(0)
write_byte(0)
message_end()
remove_task(id+TASK_BARTIME)
}
public blast_players(id)
{
id -= TASK_BARTIME
new Float: iOrigin[3]
pev(id, pev_origin, iOrigin)
emit_sound(id, CHAN_VOICE, houndeye_blast[random_num(0, sizeof houndeye_blast - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, iOrigin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2])
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2]+385.0)
write_short(gSprBeam)
write_byte(0)
write_byte(0)
write_byte(4)
write_byte(60)
write_byte(0)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(200)
write_byte(0)
message_end()
static Ent, Float: originF[3]
while( (Ent = engfunc(EngFunc_FindEntityInSphere, Ent, iOrigin, get_pcvar_float(cvar_radius))) )
{
if( is_player(Ent) && Ent != id )
{
if(zp_get_user_zombie(Ent) || zp_get_user_zombie(Ent))
return PLUGIN_CONTINUE;
if(get_pcvar_num(cvar_blast_infect))
{
zp_infect_user(Ent, 1)
SendDeathMsg(id, Ent)
}
if(get_pcvar_num(cvar_damage))
{
if(zp_get_user_survivor(Ent))
return PLUGIN_CONTINUE;
fm_set_user_health(Ent, pev(Ent, pev_health) - get_pcvar_num(cvar_damage_amount))
}
pev(Ent, pev_origin, originF)
originF[0] = (originF[0] - iOrigin[0]) * 10.0
originF[1] = (originF[1] - iOrigin[1]) * 10.0
originF[2] = (originF[2] - iOrigin[2]) + 500.0
set_pev(Ent, pev_velocity, originF)
}
}
return PLUGIN_HANDLED;
}
SendDeathMsg(attacker, victim)
{
message_begin(MSG_BROADCAST, gMsgDeathMsg)
write_byte(attacker)
write_byte(victim)
write_byte(1)
write_string("infection")
message_end()
}
/*================================================================================
[Stocks]
=================================================================================*/
stock print_chatColor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"!g","^4");// green
replace_all(msg,190,"!n","^1");// normal
replace_all(msg,190,"!t","^3");// team
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i=0;i<count;i++)
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
stock fm_set_user_health(id, health)
{
(health > 0) ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
}
Plugin sabie laser :
Spoiler:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <xs>
#include <zombieplague>
#define PLUGIN "[ZP][CSO] LightSaber"
#define VERSION "1.0"
#define AUTHOR "Dias Leon"
/* ===============================
------------ Configs -------------
=================================*/
#define DAMAGE_LIGHTSABER 240
#define DAMAGE_ATTACK 120
#define RADIUS_ON 96
#define RADIUS_OFF 72
#define DRAW_TIME 0.75
#define TURN_TIME 0.5
#define RESET_TIME 1.5
#define ANIMEXT1 "onehanded"
#define ANIMEXT2 "knife"
#define V_MODEL "models/v_sfsword.mdl"
#define P_MODEL_ON "models/p_sfsword_on.mdl"
#define P_MODEL_OFF "models/p_sfsword_off.mdl"
new const LightSaber_Sounds[14][] =
{
"weapons/sfsword_draw.wav",
"weapons/sfsword_hit1.wav",
"weapons/sfsword_hit2.wav",
"weapons/sfsword_idle.wav",
"weapons/sfsword_midslash1.wav",
"weapons/sfsword_midslash2.wav",
"weapons/sfsword_midslash3.wav",
"weapons/sfsword_off.wav",
"weapons/sfsword_off_hit.wav",
"weapons/sfsword_off_slash1.wav",
"weapons/sfsword_on.wav", // 10
"weapons/sfsword_stab.wav",
"weapons/sfsword_wall1.wav",
"weapons/sfsword_wall2.wav"
}
enum
{
LS_ANIM_IDLE_ON = 0,
LS_ANIM_ON,
LS_ANIM_OFF,
LS_ANIM_DRAW,
LS_ANIM_STAB,
LS_ANIM_STAB_MISS,
LS_ANIM_MIDSLASH1,
LS_ANIM_MIDSLASH2,
LS_ANIM_MIDSLASH3,
LS_ANIM_IDLE_OFF,
LS_ANIM_SLASH_OFF
}
/* ===============================
--------- End of Config ----------
=================================*/
#define CSW_LIGHTSABER CSW_KNIFE
#define weapon_lightsaber "weapon_knife"
#define TASK_TURN 4234234
#define TASK_SLASH 6948638
#define TASK_RESET 54893534
// MACROS
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
enum
{
HIT_NOTHING = 0,
HIT_ENEMY,
HIT_WALL
}
enum
{
ATTACK_SLASH1 = 0,
ATTACK_SLASH2,
ATTACK_SLASH3
}
// Vars
new g_LightSaber
new g_Had_LightSaber, g_IsOnMode, g_TempingAttack, g_InSpecialAttack
new g_OldWeapon[33], g_WillBeHit[33], g_AttackingMode[33]
new g_MaxPlayers, g_Ham_Bot
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_EmitSound, "fw_EmitSound")
register_forward(FM_TraceLine, "fw_TraceLine")
register_forward(FM_TraceHull, "fw_TraceHull")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_Weapon_WeaponIdle, weapon_lightsaber, "fw_Weapon_WeaponIdle_Post", 1)
g_MaxPlayers = get_maxplayers()
//register_clcmd("admin_get_lightsaber", "Get_LightSaber", ADMIN_BAN)
}
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, V_MODEL)
engfunc(EngFunc_PrecacheModel, P_MODEL_ON)
engfunc(EngFunc_PrecacheModel, P_MODEL_OFF)
for(new i = 0; i < sizeof(LightSaber_Sounds); i++)
engfunc(EngFunc_PrecacheSound, LightSaber_Sounds[i])
g_LightSaber = zp_register_extra_item("LightSaber", 15, ZP_TEAM_HUMAN)
}
public client_putinserver(id)
{
Remove_LightSaber(id)
if(!g_Ham_Bot && is_user_bot(id))
{
g_Ham_Bot = 1
set_task(0.1, "Do_RegisterHam_Bot", id)
}
}
public Do_RegisterHam_Bot(id)
{
RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
}
public zp_extra_item_selected(id, ItemID)
{
if(ItemID == g_LightSaber) Get_LightSaber(id)
}
public zp_user_infected_post(id) Remove_LightSaber(id)
public zp_user_humanized_post(id) Remove_LightSaber(id)
public Get_LightSaber(id)
{
if(!is_user_alive(id))
return
Set_BitVar(g_Had_LightSaber, id)
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
fm_give_item(id, weapon_lightsaber)
if(get_user_weapon(id) == CSW_LIGHTSABER)
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
} else {
engclient_cmd(id, weapon_lightsaber)
}
}
public Remove_LightSaber(id)
{
UnSet_BitVar(g_Had_LightSaber, id)
UnSet_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
}
public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return
static CSWID; CSWID = read_data(2)
if((CSWID == CSW_LIGHTSABER && g_OldWeapon[id] != CSW_LIGHTSABER) && Get_BitVar(g_Had_LightSaber, id))
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
set_pdata_string(id, (492) * 4, ANIMEXT1, -1 , 20)
} else if(CSWID != CSW_LIGHTSABER && g_OldWeapon[id] == CSW_LIGHTSABER) {
g_AttackingMode[id] = 0
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_InSpecialAttack, id)
remove_task(id+TASK_TURN)
}
g_OldWeapon[id] = CSWID
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return FMRES_IGNORED
if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
{
if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
{
g_WillBeHit[id] = HIT_NOTHING
return FMRES_SUPERCEDE
}
if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't')
{
if (sample[17] == 'w') // wall
{
g_WillBeHit[id] = HIT_WALL
return FMRES_SUPERCEDE
} else {
g_WillBeHit[id] = HIT_ENEMY
return FMRES_SUPERCEDE
}
}
if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static ent; ent = fm_get_user_weapon_entity(id, CSW_LIGHTSABER)
if(!pev_valid(ent))
return
if(get_pdata_float(id, 83, 5) > 0.0)
return
static CurButton; CurButton = get_uc(uc_handle, UC_Buttons)
if(CurButton & IN_ATTACK)
{
CurButton &= ~IN_ATTACK
set_uc(uc_handle, UC_Buttons, CurButton)
if(Get_BitVar(g_IsOnMode, id))
{
if(!Get_BitVar(g_InSpecialAttack, id))
{
if(g_AttackingMode[id] == 0) g_AttackingMode[id] = 1
g_AttackingMode[id]++
if(g_AttackingMode[id] > ATTACK_SLASH3) g_AttackingMode[id] = 1
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
if(g_AttackingMode[id] == 1) set_weapon_anim(id, LS_ANIM_MIDSLASH1)
else if(g_AttackingMode[id] == 2) set_weapon_anim(id, LS_ANIM_MIDSLASH2)
else if(g_AttackingMode[id] == 3) set_weapon_anim(id, LS_ANIM_MIDSLASH3)
set_task(0.25, "Damage_Slash", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
Set_BitVar(g_InSpecialAttack, id)
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_STAB)
set_task(0.25, "Damage_Stab", id+TASK_SLASH)
set_task(0.5, "Damage_Stab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_SLASH_OFF)
set_task(0.25, "Damage_OffStab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else if(CurButton & IN_ATTACK2) {
CurButton &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, CurButton)
set_weapon_anim(id, !Get_BitVar(g_IsOnMode, id) ? LS_ANIM_ON : LS_ANIM_OFF)
set_player_nextattack(id, TURN_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, TURN_TIME)
set_task(TURN_TIME - 0.1, "Turn_Complete", id+TASK_TURN)
}
}
public Turn_Complete(id)
{
id -= TASK_TURN
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
if(Get_BitVar(g_IsOnMode, id)) UnSet_BitVar(g_IsOnMode, id)
else Set_BitVar(g_IsOnMode, id)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Reset_Anim(id)
{
id -= TASK_RESET
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Damage_Slash(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_Stab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_OffStab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Ent; Ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(Ent)) Ent = 0
static Target; Target = CheckAttack(id, float(RADIUS_OFF), 24.0, float(DAMAGE_ATTACK))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[8], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public CheckAttack(id, Float:Radius, Float:PointDis, Float:Damage)
{
static Float:Max_Distance, Float:Point[4][3], Float:TB_Distance, Float:Point_Dis
Point_Dis = PointDis
Max_Distance = Radius
TB_Distance = Max_Distance / 4.0
static Float:VicOrigin[3], Float:MyOrigin[3]
pev(id, pev_origin, MyOrigin)
for(new i = 0; i < 4; i++) get_position(id, TB_Distance * (i + 1), 0.0, 0.0, Point[i])
static Have_Victim; Have_Victim = 0
static ent; ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(ent))
return 0
for(new i = 0; i < g_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_wall_between_points(MyOrigin, VicOrigin, id))
continue
if(get_distance_f(VicOrigin, Point[0]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[1]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[2]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[3]) <= Point_Dis)
{
if(!Have_Victim) Have_Victim = 1
do_attack(id, i, ent, Damage)
}
}
if(Have_Victim) return 1
return 0
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, 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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, v_forward)
xs_vec_add(vecStart, v_forward, vecEnd)
engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle)
return FMRES_SUPERCEDE
}
public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], TraceResult, DamageBits)
{
if(!is_user_alive(Attacker))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, Attacker) || !Get_BitVar(g_TempingAttack, Attacker))
return HAM_IGNORED
return HAM_SUPERCEDE
}
public fw_Weapon_WeaponIdle_Post(ent)
{
static id; id = pev(ent, pev_owner)
if(!is_user_alive(id))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, id))
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) <= 0.25)
{
set_weapon_anim(id, Get_BitVar(g_IsOnMode, id) ? LS_ANIM_IDLE_ON : LS_ANIM_IDLE_OFF)
set_pdata_float(ent, 48, 20.0, 4)
}
return HAM_IGNORED
}
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))
}
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
static Float:fAngles[3], Float:fDirection[3]
pev(iAttacker, pev_angles, fAngles)
angle_vector(fAngles, ANGLEVECTOR_FORWARD, fDirection)
// get fStart
static 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
static iAimOrigin[3], Float:fAimOrigin[3]
get_user_origin(iAttacker, iAimOrigin, 3)
IVecFVec(iAimOrigin, fAimOrigin)
// TraceLine from fStart to AimOrigin
static ptr; ptr = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr)
static pHit; pHit = get_tr2(ptr, TR_pHit)
static iHitgroup; iHitgroup = get_tr2(ptr, TR_iHitgroup)
static Float:fEndPos[3]; get_tr2(ptr, TR_vecEndPos, fEndPos)
// get target & body at aiming
static 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
static 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
static iAngleToVictim; iAngleToVictim = get_angle_to_target(iAttacker, fVicOrigin)
iAngleToVictim = abs(iAngleToVictim)
static Float:fDis; fDis = 2.0 * get_distance_f(fStart, fAimInVictim) * floatsin( float(iAngleToVictim) * 0.5, degrees )
static Float:fVicSize[3]
pev(iVictim, pev_size , fVicSize)
if ( fDis <= fVicSize[0] * 0.5 )
{
// TraceLine from fStart to aimOrigin in iVictim
static ptr2; ptr2 = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimInVictim, DONT_IGNORE_MONSTERS, iAttacker, ptr2)
static pHit2; pHit2 = get_tr2(ptr2, TR_pHit)
static iHitgroup2; 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
static ptr3; 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
static Float:fMultifDamage
switch(iHitgroup)
{
case HIT_HEAD: fMultifDamage = 4.0
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))
{
ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit)
}
stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
{
static 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)
static Float:fV2[3]
xs_vec_sub(fTarget, fOrigin, fV2)
static iResult; iResult = get_angle_between_vectors(fV1, fV2)
if (TargetSize > 0.0)
{
static Float:fTan; fTan = TargetSize / get_distance_f(fOrigin, fTarget)
static fAngleToTargetSize; 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])
{
static Float:fA1[3], Float:fA2[3]
engfunc(EngFunc_VecToAngles, fV1, fA1)
engfunc(EngFunc_VecToAngles, fV2, fA2)
static iResult; iResult = floatround(fA1[1] - fA2[1])
iResult = iResult % 360
iResult = (iResult > 180) ? (iResult - 360) : iResult
return iResult
}
stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
{
static 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, WeaponId ,Float:TimeIdle)
{
static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
if(!pev_valid(entwpn))
return
set_pdata_float(entwpn, 46, TimeIdle, 4)
set_pdata_float(entwpn, 47, TimeIdle, 4)
set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
}
stock set_weapon_anim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(anim)
write_byte(0)
message_end()
}
stock set_player_nextattack(id, Float:NextTime) set_pdata_float(id, 83, NextTime, 5)
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
0
0
Back to top
destroi112
[DEV]
Status: Offline
(since 12-03-2020 22:13)
Joined: 24 May 2014
Posts: 4042
,
Topics: 119
Location:
---------
Reputation:
515.9
Votes
: 118
Posted: 31-07-2015, 17:30:30
| Translate post to:
... (
Click for more languages
)
Poftim.
Spoiler:
#include <amxmodx>
#include <fun>
#include <hamsandwich>
#include <zombieplague>
#include <zombiexp>
#include <cstrike>
#include <fakemeta_util>
#include <fakemeta>
#include <engine>
#include <xs>
new const beam_cylinder[] = "sprites/white.spr"
new const houndeye_attack[][] = { "houndeye/he_attack1.wav", "houndeye/he_attack3.wav" }
new const houndeye_blast[][] = { "houndeye/he_blast1.wav", "houndeye/he_blast3.wav" }
new Float:g_Time[33];
new cvar_cooldown;
/*================================================================================
[End Customization]
=================================================================================*/
#define is_player(%0) (1 <= %0 <= g_MaxPlayers)
#define TASK_BARTIME 16000
// Zombie vars
new gMsgBarTime,gSprBeam,cvar_timeblast, cvar_radius, cvar_damage_amount
// Human Attributes
new const hclass_name[] = { "Human_17" } // name
new const hclass_info[] = { "AK-47 and USP" } // description
new const hclass_model[] = { "player" } // model
new const hclass_weapons[] = { } // weapons
const hclass_health = 450 // health
const hclass_speed = 300 // speed
const Float:hclass_gravity = 0.80 // gravity
const hclass_level = 17 // level required to use
// Class IDs
new g_hclassid
#define DAMAGE_LIGHTSABER 240
#define DAMAGE_ATTACK 120
#define RADIUS_ON 96
#define RADIUS_OFF 72
#define DRAW_TIME 0.75
#define TURN_TIME 0.5
#define RESET_TIME 1.5
#define ANIMEXT1 "onehanded"
#define ANIMEXT2 "knife"
#define V_MODEL "models/v_sfsword.mdl"
#define P_MODEL_ON "models/p_sfsword_on.mdl"
#define P_MODEL_OFF "models/p_sfsword_off.mdl"
new const LightSaber_Sounds[14][] =
{
"weapons/sfsword_draw.wav",
"weapons/sfsword_hit1.wav",
"weapons/sfsword_hit2.wav",
"weapons/sfsword_idle.wav",
"weapons/sfsword_midslash1.wav",
"weapons/sfsword_midslash2.wav",
"weapons/sfsword_midslash3.wav",
"weapons/sfsword_off.wav",
"weapons/sfsword_off_hit.wav",
"weapons/sfsword_off_slash1.wav",
"weapons/sfsword_on.wav", // 10
"weapons/sfsword_stab.wav",
"weapons/sfsword_wall1.wav",
"weapons/sfsword_wall2.wav"
}
enum
{
LS_ANIM_IDLE_ON = 0,
LS_ANIM_ON,
LS_ANIM_OFF,
LS_ANIM_DRAW,
LS_ANIM_STAB,
LS_ANIM_STAB_MISS,
LS_ANIM_MIDSLASH1,
LS_ANIM_MIDSLASH2,
LS_ANIM_MIDSLASH3,
LS_ANIM_IDLE_OFF,
LS_ANIM_SLASH_OFF
}
/* ===============================
--------- End of Config ----------
=================================*/
#define CSW_LIGHTSABER CSW_KNIFE
#define weapon_lightsaber "weapon_knife"
#define TASK_TURN 4234234
#define TASK_SLASH 6948638
#define TASK_RESET 54893534
// MACROS
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
enum
{
HIT_NOTHING = 0,
HIT_ENEMY,
HIT_WALL
}
enum
{
ATTACK_SLASH1 = 0,
ATTACK_SLASH2,
ATTACK_SLASH3
}
// Vars
new g_Had_LightSaber, g_IsOnMode, g_TempingAttack, g_InSpecialAttack
new g_OldWeapon[33], g_WillBeHit[33], g_AttackingMode[33]
new g_MaxPlayers, g_Ham_Bot
public plugin_init()
{
register_plugin("[ZPXP]HumanClass","1.0","uNIRE-> D3luxe");
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_EmitSound, "fw_EmitSound")
register_forward(FM_TraceLine, "fw_TraceLine")
register_forward(FM_TraceHull, "fw_TraceHull")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_Spawn,"player","spawn_now",1)
RegisterHam(Ham_Weapon_WeaponIdle, weapon_lightsaber, "fw_Weapon_WeaponIdle_Post", 1)
cvar_timeblast = register_cvar("zp_humanislave_timeblast", "2.5")
cvar_radius = register_cvar("zp_humanislave_radius", "150.0")
cvar_damage_amount = register_cvar("zp_humanislave_damage_amount", "150")
cvar_cooldown = register_cvar("zp_humanislave_cooldown","16");
register_forward( FM_CmdStart, "CmdStart")
gMsgBarTime = get_user_msgid("BarTime")
g_MaxPlayers = get_maxplayers()
}
public plugin_precache()
{
// Register the new class and store ID for reference
g_hclassid = zpxp_register_human_class(hclass_name, hclass_info, hclass_model, hclass_weapons, hclass_health, hclass_speed, hclass_gravity, hclass_level)
if(g_hclassid == -1) server_print("[ZPXP] You have not properly setup your Zombie XP Mod.");
engfunc(EngFunc_PrecacheModel, V_MODEL)
engfunc(EngFunc_PrecacheModel, P_MODEL_ON)
engfunc(EngFunc_PrecacheModel, P_MODEL_OFF)
for(new i = 0; i < sizeof(LightSaber_Sounds); i++)
engfunc(EngFunc_PrecacheSound, LightSaber_Sounds[i]);
gSprBeam = precache_model(beam_cylinder)
for (new i = 0; i < sizeof houndeye_attack; i++)
engfunc(EngFunc_PrecacheSound, houndeye_attack[i])
for (new i = 0; i < sizeof houndeye_blast; i++)
engfunc(EngFunc_PrecacheSound, houndeye_blast[i])
}
public spawn_now(id)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
// User Infected forward
public zp_user_infected_post(id, infector, nemesis)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
public CmdStart(id)
{
if(!is_user_alive(id))
return;
static iButton; iButton = pev(id, pev_button)
static iOldButton; iOldButton = pev(id, pev_oldbuttons)
if(!zp_get_user_zombie(id) && (zp_get_user_human_class(id) == g_hclassid) && !zp_get_user_survivor(id))
{
if( ( iButton & IN_USE ) && !( iOldButton & IN_USE ) )
{
static Float: cooldown;
cooldown = get_pcvar_float(cvar_cooldown);
if(get_gametime() - g_Time[id] < cooldown)
{
print_chatColor(id,"!g[ZM]!nTi-ai folosit abilitatea , asteapta !t%.f0 !nsecunde.", cooldown - (get_gametime() - g_Time[id]));
return;
}
g_Time[id] = get_gametime();
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(get_pcvar_num(cvar_timeblast))
write_byte(0)
message_end()
emit_sound(id, CHAN_VOICE, houndeye_attack[random_num(0, sizeof houndeye_attack - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(get_pcvar_float(cvar_timeblast), "blast_players", id+TASK_BARTIME)
}
if( iOldButton & IN_USE && !( iButton & IN_USE ) )
set_task(0.1, "blast_stop", id)
}
}
public blast_stop(id)
{
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(0)
write_byte(0)
message_end()
remove_task(id+TASK_BARTIME)
}
public blast_players(id)
{
id -= TASK_BARTIME
new Float: iOrigin[3]
pev(id, pev_origin, iOrigin)
emit_sound(id, CHAN_VOICE, houndeye_blast[random_num(0, sizeof houndeye_blast - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, iOrigin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2])
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2]+385.0)
write_short(gSprBeam)
write_byte(0)
write_byte(0)
write_byte(4)
write_byte(60)
write_byte(0)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(200)
write_byte(0)
message_end()
static Ent, Float: originF[3]
while( (Ent = engfunc(EngFunc_FindEntityInSphere, Ent, iOrigin, get_pcvar_float(cvar_radius))) )
{
if( is_player(Ent) && Ent != id )
{
if(!zp_get_user_zombie(Ent))
return PLUGIN_CONTINUE;
if(zp_get_user_nemesis(Ent))
return PLUGIN_CONTINUE;
fm_set_user_health(Ent, pev(Ent, pev_health) - get_pcvar_num(cvar_damage_amount))
pev(Ent, pev_origin, originF)
originF[0] = (originF[0] - iOrigin[0]) * 10.0
originF[1] = (originF[1] - iOrigin[1]) * 10.0
originF[2] = (originF[2] - iOrigin[2]) + 500.0
set_pev(Ent, pev_velocity, originF)
}
}
return PLUGIN_HANDLED;
}
public zp_user_humanized_post(id)
{
// Check if the infected player is using our custom zombie class
if (zp_get_user_human_class(id) != g_hclassid) return;
// User turned human
if (zp_get_user_survivor(id) == 1)
{
Remove_LightSaber(id)
zp_user_infected_post(id, 0, 0)
} else {
zp_round_started_human(id)
}
}
public zp_round_started_human(id)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
public client_disconnect(id)
{
Remove_LightSaber(id)
return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
Remove_LightSaber(id)
if(!g_Ham_Bot && is_user_bot(id))
{
g_Ham_Bot = 1
set_task(0.1, "Do_RegisterHam_Bot", id)
}
}
public Do_RegisterHam_Bot(id)
{
RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
}
public Get_LightSaber(id)
{
if(!is_user_alive(id))
return
Set_BitVar(g_Had_LightSaber, id)
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
fm_give_item(id, weapon_lightsaber)
if(get_user_weapon(id) == CSW_LIGHTSABER)
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
} else {
engclient_cmd(id, weapon_lightsaber)
}
}
public Remove_LightSaber(id)
{
UnSet_BitVar(g_Had_LightSaber, id)
UnSet_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
}
public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return
static CSWID; CSWID = read_data(2)
if((CSWID == CSW_LIGHTSABER && g_OldWeapon[id] != CSW_LIGHTSABER) && Get_BitVar(g_Had_LightSaber, id))
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
set_pdata_string(id, (492) * 4, ANIMEXT1, -1 , 20)
} else if(CSWID != CSW_LIGHTSABER && g_OldWeapon[id] == CSW_LIGHTSABER) {
g_AttackingMode[id] = 0
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_InSpecialAttack, id)
remove_task(id+TASK_TURN)
}
g_OldWeapon[id] = CSWID
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return FMRES_IGNORED
if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
{
if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
{
g_WillBeHit[id] = HIT_NOTHING
return FMRES_SUPERCEDE
}
if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't')
{
if (sample[17] == 'w') // wall
{
g_WillBeHit[id] = HIT_WALL
return FMRES_SUPERCEDE
} else {
g_WillBeHit[id] = HIT_ENEMY
return FMRES_SUPERCEDE
}
}
if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static ent; ent = fm_get_user_weapon_entity(id, CSW_LIGHTSABER)
if(!pev_valid(ent))
return
if(get_pdata_float(id, 83, 5) > 0.0)
return
static CurButton; CurButton = get_uc(uc_handle, UC_Buttons)
if(CurButton & IN_ATTACK)
{
CurButton &= ~IN_ATTACK
set_uc(uc_handle, UC_Buttons, CurButton)
if(Get_BitVar(g_IsOnMode, id))
{
if(!Get_BitVar(g_InSpecialAttack, id))
{
if(g_AttackingMode[id] == 0) g_AttackingMode[id] = 1
g_AttackingMode[id]++
if(g_AttackingMode[id] > ATTACK_SLASH3) g_AttackingMode[id] = 1
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
if(g_AttackingMode[id] == 1) set_weapon_anim(id, LS_ANIM_MIDSLASH1)
else if(g_AttackingMode[id] == 2) set_weapon_anim(id, LS_ANIM_MIDSLASH2)
else if(g_AttackingMode[id] == 3) set_weapon_anim(id, LS_ANIM_MIDSLASH3)
set_task(0.25, "Damage_Slash", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
Set_BitVar(g_InSpecialAttack, id)
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_STAB)
set_task(0.25, "Damage_Stab", id+TASK_SLASH)
set_task(0.5, "Damage_Stab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_SLASH_OFF)
set_task(0.25, "Damage_OffStab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else if(CurButton & IN_ATTACK2) {
CurButton &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, CurButton)
set_weapon_anim(id, !Get_BitVar(g_IsOnMode, id) ? LS_ANIM_ON : LS_ANIM_OFF)
set_player_nextattack(id, TURN_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, TURN_TIME)
set_task(TURN_TIME - 0.1, "Turn_Complete", id+TASK_TURN)
}
}
public Turn_Complete(id)
{
id -= TASK_TURN
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
if(Get_BitVar(g_IsOnMode, id)) UnSet_BitVar(g_IsOnMode, id)
else Set_BitVar(g_IsOnMode, id)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Reset_Anim(id)
{
id -= TASK_RESET
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Damage_Slash(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_Stab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_OffStab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Ent; Ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(Ent)) Ent = 0
static Target; Target = CheckAttack(id, float(RADIUS_OFF), 24.0, float(DAMAGE_ATTACK))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[8], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public CheckAttack(id, Float:Radius, Float:PointDis, Float:Damage)
{
static Float:Max_Distance, Float:Point[4][3], Float:TB_Distance, Float:Point_Dis
Point_Dis = PointDis
Max_Distance = Radius
TB_Distance = Max_Distance / 4.0
static Float:VicOrigin[3], Float:MyOrigin[3]
pev(id, pev_origin, MyOrigin)
for(new i = 0; i < 4; i++) get_position(id, TB_Distance * (i + 1), 0.0, 0.0, Point[i])
static Have_Victim; Have_Victim = 0
static ent; ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(ent))
return 0
for(new i = 0; i < g_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_wall_between_points(MyOrigin, VicOrigin, id))
continue
if(get_distance_f(VicOrigin, Point[0]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[1]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[2]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[3]) <= Point_Dis)
{
if(!Have_Victim) Have_Victim = 1
do_attack(id, i, ent, Damage)
}
}
if(Have_Victim) return 1
return 0
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, 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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, v_forward)
xs_vec_add(vecStart, v_forward, vecEnd)
engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle)
return FMRES_SUPERCEDE
}
public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], TraceResult, DamageBits)
{
if(!is_user_alive(Attacker))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, Attacker) || !Get_BitVar(g_TempingAttack, Attacker))
return HAM_IGNORED
return HAM_SUPERCEDE
}
public fw_Weapon_WeaponIdle_Post(ent)
{
static id; id = pev(ent, pev_owner)
if(!is_user_alive(id))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, id))
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) <= 0.25)
{
set_weapon_anim(id, Get_BitVar(g_IsOnMode, id) ? LS_ANIM_IDLE_ON : LS_ANIM_IDLE_OFF)
set_pdata_float(ent, 48, 20.0, 4)
}
return HAM_IGNORED
}
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))
}
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
static Float:fAngles[3], Float:fDirection[3]
pev(iAttacker, pev_angles, fAngles)
angle_vector(fAngles, ANGLEVECTOR_FORWARD, fDirection)
// get fStart
static 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
static iAimOrigin[3], Float:fAimOrigin[3]
get_user_origin(iAttacker, iAimOrigin, 3)
IVecFVec(iAimOrigin, fAimOrigin)
// TraceLine from fStart to AimOrigin
static ptr; ptr = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr)
static pHit; pHit = get_tr2(ptr, TR_pHit)
static iHitgroup; iHitgroup = get_tr2(ptr, TR_iHitgroup)
static Float:fEndPos[3]; get_tr2(ptr, TR_vecEndPos, fEndPos)
// get target & body at aiming
static 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
static 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
static iAngleToVictim; iAngleToVictim = get_angle_to_target(iAttacker, fVicOrigin)
iAngleToVictim = abs(iAngleToVictim)
static Float:fDis; fDis = 2.0 * get_distance_f(fStart, fAimInVictim) * floatsin( float(iAngleToVictim) * 0.5, degrees )
static Float:fVicSize[3]
pev(iVictim, pev_size , fVicSize)
if ( fDis <= fVicSize[0] * 0.5 )
{
// TraceLine from fStart to aimOrigin in iVictim
static ptr2; ptr2 = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimInVictim, DONT_IGNORE_MONSTERS, iAttacker, ptr2)
static pHit2; pHit2 = get_tr2(ptr2, TR_pHit)
static iHitgroup2; 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
static ptr3; 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
static Float:fMultifDamage
switch(iHitgroup)
{
case HIT_HEAD: fMultifDamage = 4.0
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))
{
ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit)
}
stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
{
static 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)
static Float:fV2[3]
xs_vec_sub(fTarget, fOrigin, fV2)
static iResult; iResult = get_angle_between_vectors(fV1, fV2)
if (TargetSize > 0.0)
{
static Float:fTan; fTan = TargetSize / get_distance_f(fOrigin, fTarget)
static fAngleToTargetSize; 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])
{
static Float:fA1[3], Float:fA2[3]
engfunc(EngFunc_VecToAngles, fV1, fA1)
engfunc(EngFunc_VecToAngles, fV2, fA2)
static iResult; iResult = floatround(fA1[1] - fA2[1])
iResult = iResult % 360
iResult = (iResult > 180) ? (iResult - 360) : iResult
return iResult
}
stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
{
static 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, WeaponId ,Float:TimeIdle)
{
static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
if(!pev_valid(entwpn))
return
set_pdata_float(entwpn, 46, TimeIdle, 4)
set_pdata_float(entwpn, 47, TimeIdle, 4)
set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
}
stock set_weapon_anim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(anim)
write_byte(0)
message_end()
}
stock print_chatColor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"!g","^4");// green
replace_all(msg,190,"!n","^1");// normal
replace_all(msg,190,"!t","^3");// team
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i=0;i<count;i++)
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
stock set_player_nextattack(id, Float:NextTime) set_pdata_float(id, 83, NextTime, 5);
PS:Pluginul de islave are cateva greseli ce vrei sa faca islave(cel de zm) sa dea
dmg
sau sa infecteze?
Retired from Amxmodx
0
0
Back to top
Iulian3D
[Mentally Stable]
Status: Offline
(since 04-03-2020 22:38)
Joined: 21 Jun 2015
Posts: 227
,
Topics: 37
Location:
Buftea .
Reputation:
178.8
Votes
: 4
Posted: 31-07-2015, 20:30:40
| Translate post to:
... (
Click for more languages
)
L-am testat și merge , dar poți te rog sã-l modifici astfel încât atunci când apãs pe E sã-și foloseascã abilitatea imediat , dacã apãs pe E îmi apare „ o casetã ” daia care se încarcã pânã când sã-și foloseascã abilitatea , dar eu vreau sã-și foloseascã abilitatea imediat . Și încâ ceva , atunci când omor un zombii numi dã nici ammo packs nici bani , apare ca și cum s-ar fi sinucis , nu aratã cã l-am omorât eu , eu aș vrea ca atunci când omor un zombii sã-mi dea ammo packs .
Legat de întrebarea ta el acum dã
dmg
și e bine așa , nu vreau sã infecteze , e bun cum e acum .
0
0
Back to top
destroi112
[DEV]
Status: Offline
(since 12-03-2020 22:13)
Joined: 24 May 2014
Posts: 4042
,
Topics: 119
Location:
---------
Reputation:
515.9
Votes
: 118
Posted: 31-07-2015, 21:18:20
| Translate post to:
... (
Click for more languages
)
Done
.Ti-am pus un cvar si pui cat ammo vrei tu .
Code:
kill_ammo = register_cvar("zp_humanislave_rewardkill","16");
Spoiler:
#include <amxmodx>
#include <fun>
#include <hamsandwich>
#include <zombieplague>
#include <zombiexp>
#include <cstrike>
#include <fakemeta_util>
#include <fakemeta>
#include <engine>
#include <xs>
new const beam_cylinder[] = "sprites/white.spr"
new const houndeye_attack[][] = { "houndeye/he_attack1.wav", "houndeye/he_attack3.wav" }
new const houndeye_blast[][] = { "houndeye/he_blast1.wav", "houndeye/he_blast3.wav" }
new Float:g_Time[33];
new cvar_cooldown;
/*================================================================================
[End Customization]
=================================================================================*/
#define is_player(%0) (1 <= %0 <= g_MaxPlayers)
#define TASK_BLASPLAYER 98124
// Zombie vars
new gSprBeam,cvar_radius, cvar_damage_amount ,kill_ammo;
// Human Attributes
new const hclass_name[] = { "Human_17" } // name
new const hclass_info[] = { "AK-47 and USP" } // description
new const hclass_model[] = { "player" } // model
new const hclass_weapons[] = { } // weapons
const hclass_health = 450 // health
const hclass_speed = 300 // speed
const Float:hclass_gravity = 0.80 // gravity
const hclass_level = 17 // level required to use
// Class IDs
new g_hclassid
#define DAMAGE_LIGHTSABER 240
#define DAMAGE_ATTACK 120
#define RADIUS_ON 96
#define RADIUS_OFF 72
#define DRAW_TIME 0.75
#define TURN_TIME 0.5
#define RESET_TIME 1.5
#define ANIMEXT1 "onehanded"
#define ANIMEXT2 "knife"
#define V_MODEL "models/v_sfsword.mdl"
#define P_MODEL_ON "models/p_sfsword_on.mdl"
#define P_MODEL_OFF "models/p_sfsword_off.mdl"
new const LightSaber_Sounds[14][] =
{
"weapons/sfsword_draw.wav",
"weapons/sfsword_hit1.wav",
"weapons/sfsword_hit2.wav",
"weapons/sfsword_idle.wav",
"weapons/sfsword_midslash1.wav",
"weapons/sfsword_midslash2.wav",
"weapons/sfsword_midslash3.wav",
"weapons/sfsword_off.wav",
"weapons/sfsword_off_hit.wav",
"weapons/sfsword_off_slash1.wav",
"weapons/sfsword_on.wav", // 10
"weapons/sfsword_stab.wav",
"weapons/sfsword_wall1.wav",
"weapons/sfsword_wall2.wav"
}
enum
{
LS_ANIM_IDLE_ON = 0,
LS_ANIM_ON,
LS_ANIM_OFF,
LS_ANIM_DRAW,
LS_ANIM_STAB,
LS_ANIM_STAB_MISS,
LS_ANIM_MIDSLASH1,
LS_ANIM_MIDSLASH2,
LS_ANIM_MIDSLASH3,
LS_ANIM_IDLE_OFF,
LS_ANIM_SLASH_OFF
}
/* ===============================
--------- End of Config ----------
=================================*/
#define CSW_LIGHTSABER CSW_KNIFE
#define weapon_lightsaber "weapon_knife"
#define TASK_TURN 4234234
#define TASK_SLASH 6948638
#define TASK_RESET 54893534
// MACROS
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
enum
{
HIT_NOTHING = 0,
HIT_ENEMY,
HIT_WALL
}
enum
{
ATTACK_SLASH1 = 0,
ATTACK_SLASH2,
ATTACK_SLASH3
}
// Vars
new g_Had_LightSaber, g_IsOnMode, g_TempingAttack, g_InSpecialAttack
new g_OldWeapon[33], g_WillBeHit[33], g_AttackingMode[33]
new g_MaxPlayers, g_Ham_Bot
public plugin_init()
{
register_plugin("[ZPXP]HumanClass","1.0","uNIRE-> D3luxe");
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_EmitSound, "fw_EmitSound")
register_forward(FM_TraceLine, "fw_TraceLine")
register_forward(FM_TraceHull, "fw_TraceHull")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_Spawn,"player","spawn_now",1)
RegisterHam(Ham_Weapon_WeaponIdle, weapon_lightsaber, "fw_Weapon_WeaponIdle_Post", 1)
cvar_radius = register_cvar("zp_humanislave_radius", "150.0")
cvar_damage_amount = register_cvar("zp_humanislave_damage_amount", "150")
cvar_cooldown = register_cvar("zp_humanislave_cooldown","16");
kill_ammo = register_cvar("zp_humanislave_rewardkill","16");
register_forward( FM_CmdStart, "CmdStart")
g_MaxPlayers = get_maxplayers()
}
public plugin_precache()
{
// Register the new class and store ID for reference
g_hclassid = zpxp_register_human_class(hclass_name, hclass_info, hclass_model, hclass_weapons, hclass_health, hclass_speed, hclass_gravity, hclass_level)
if(g_hclassid == -1) server_print("[ZPXP] You have not properly setup your Zombie XP Mod.");
engfunc(EngFunc_PrecacheModel, V_MODEL)
engfunc(EngFunc_PrecacheModel, P_MODEL_ON)
engfunc(EngFunc_PrecacheModel, P_MODEL_OFF)
for(new i = 0; i < sizeof(LightSaber_Sounds); i++)
engfunc(EngFunc_PrecacheSound, LightSaber_Sounds[i]);
gSprBeam = precache_model(beam_cylinder)
for (new i = 0; i < sizeof houndeye_attack; i++)
engfunc(EngFunc_PrecacheSound, houndeye_attack[i])
for (new i = 0; i < sizeof houndeye_blast; i++)
engfunc(EngFunc_PrecacheSound, houndeye_blast[i])
}
public spawn_now(id)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
// User Infected forward
public zp_user_infected_post(id, infector, nemesis)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
public CmdStart(id)
{
if(!is_user_alive(id))
return;
static iButton; iButton = pev(id, pev_button)
static iOldButton; iOldButton = pev(id, pev_oldbuttons)
if(!zp_get_user_zombie(id) && (zp_get_user_human_class(id) == g_hclassid) && !zp_get_user_survivor(id))
{
if( ( iButton & IN_USE ) && !( iOldButton & IN_USE ) )
{
static Float: cooldown;
cooldown = get_pcvar_float(cvar_cooldown);
if(get_gametime() - g_Time[id] < cooldown)
{
print_chatColor(id,"!g[ZM]!nTi-ai folosit abilitatea , asteapta !t%.f0 !nsecunde.", cooldown - (get_gametime() - g_Time[id]));
return;
}
g_Time[id] = get_gametime();
emit_sound(id, CHAN_VOICE, houndeye_attack[random_num(0, sizeof houndeye_attack - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "blast_players", id+TASK_BLASPLAYER)
}
}
}
public blast_players(id)
{
id -= TASK_BLASPLAYER
new Float: iOrigin[3]
pev(id, pev_origin, iOrigin)
emit_sound(id, CHAN_VOICE, houndeye_blast[random_num(0, sizeof houndeye_blast - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, iOrigin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2])
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2]+385.0)
write_short(gSprBeam)
write_byte(0)
write_byte(0)
write_byte(4)
write_byte(60)
write_byte(0)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(200)
write_byte(0)
message_end()
static Ent, Float: originF[3]
while( (Ent = engfunc(EngFunc_FindEntityInSphere, Ent, iOrigin, get_pcvar_float(cvar_radius))) )
{
if( is_player(Ent) && Ent != id )
{
if(!zp_get_user_zombie(Ent))
return PLUGIN_CONTINUE;
if(zp_get_user_nemesis(Ent))
return PLUGIN_CONTINUE;
if(get_user_health(Ent) - get_pcvar_num(cvar_damage_amount) <=0)
{
fm_set_user_health(Ent,0);
log_kill(id, Ent, "blastattack", 0);
}else fm_set_user_health(Ent, pev(Ent, pev_health) - get_pcvar_num(cvar_damage_amount));
pev(Ent, pev_origin, originF)
originF[0] = (originF[0] - iOrigin[0]) * 10.0
originF[1] = (originF[1] - iOrigin[1]) * 10.0
originF[2] = (originF[2] - iOrigin[2]) + 500.0
set_pev(Ent, pev_velocity, originF)
}
}
return PLUGIN_HANDLED;
}
public zp_user_humanized_post(id)
{
// Check if the infected player is using our custom zombie class
if (zp_get_user_human_class(id) != g_hclassid) return;
// User turned human
if (zp_get_user_survivor(id) == 1)
{
Remove_LightSaber(id)
zp_user_infected_post(id, 0, 0)
} else {
zp_round_started_human(id)
}
}
public zp_round_started_human(id)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
public client_disconnect(id)
{
Remove_LightSaber(id)
return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
Remove_LightSaber(id)
if(!g_Ham_Bot && is_user_bot(id))
{
g_Ham_Bot = 1
set_task(0.1, "Do_RegisterHam_Bot", id)
}
}
public Do_RegisterHam_Bot(id)
{
RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
}
public Get_LightSaber(id)
{
if(!is_user_alive(id))
return
Set_BitVar(g_Had_LightSaber, id)
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
fm_give_item(id, weapon_lightsaber)
if(get_user_weapon(id) == CSW_LIGHTSABER)
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
} else {
engclient_cmd(id, weapon_lightsaber)
}
}
public Remove_LightSaber(id)
{
UnSet_BitVar(g_Had_LightSaber, id)
UnSet_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
}
public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return
static CSWID; CSWID = read_data(2)
if((CSWID == CSW_LIGHTSABER && g_OldWeapon[id] != CSW_LIGHTSABER) && Get_BitVar(g_Had_LightSaber, id))
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
set_pdata_string(id, (492) * 4, ANIMEXT1, -1 , 20)
} else if(CSWID != CSW_LIGHTSABER && g_OldWeapon[id] == CSW_LIGHTSABER) {
g_AttackingMode[id] = 0
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_InSpecialAttack, id)
remove_task(id+TASK_TURN)
}
g_OldWeapon[id] = CSWID
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return FMRES_IGNORED
if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
{
if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
{
g_WillBeHit[id] = HIT_NOTHING
return FMRES_SUPERCEDE
}
if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't')
{
if (sample[17] == 'w') // wall
{
g_WillBeHit[id] = HIT_WALL
return FMRES_SUPERCEDE
} else {
g_WillBeHit[id] = HIT_ENEMY
return FMRES_SUPERCEDE
}
}
if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static ent; ent = fm_get_user_weapon_entity(id, CSW_LIGHTSABER)
if(!pev_valid(ent))
return
if(get_pdata_float(id, 83, 5) > 0.0)
return
static CurButton; CurButton = get_uc(uc_handle, UC_Buttons)
if(CurButton & IN_ATTACK)
{
CurButton &= ~IN_ATTACK
set_uc(uc_handle, UC_Buttons, CurButton)
if(Get_BitVar(g_IsOnMode, id))
{
if(!Get_BitVar(g_InSpecialAttack, id))
{
if(g_AttackingMode[id] == 0) g_AttackingMode[id] = 1
g_AttackingMode[id]++
if(g_AttackingMode[id] > ATTACK_SLASH3) g_AttackingMode[id] = 1
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
if(g_AttackingMode[id] == 1) set_weapon_anim(id, LS_ANIM_MIDSLASH1)
else if(g_AttackingMode[id] == 2) set_weapon_anim(id, LS_ANIM_MIDSLASH2)
else if(g_AttackingMode[id] == 3) set_weapon_anim(id, LS_ANIM_MIDSLASH3)
set_task(0.25, "Damage_Slash", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
Set_BitVar(g_InSpecialAttack, id)
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_STAB)
set_task(0.25, "Damage_Stab", id+TASK_SLASH)
set_task(0.5, "Damage_Stab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_SLASH_OFF)
set_task(0.25, "Damage_OffStab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else if(CurButton & IN_ATTACK2) {
CurButton &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, CurButton)
set_weapon_anim(id, !Get_BitVar(g_IsOnMode, id) ? LS_ANIM_ON : LS_ANIM_OFF)
set_player_nextattack(id, TURN_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, TURN_TIME)
set_task(TURN_TIME - 0.1, "Turn_Complete", id+TASK_TURN)
}
}
public Turn_Complete(id)
{
id -= TASK_TURN
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
if(Get_BitVar(g_IsOnMode, id)) UnSet_BitVar(g_IsOnMode, id)
else Set_BitVar(g_IsOnMode, id)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Reset_Anim(id)
{
id -= TASK_RESET
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Damage_Slash(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_Stab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_OffStab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Ent; Ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(Ent)) Ent = 0
static Target; Target = CheckAttack(id, float(RADIUS_OFF), 24.0, float(DAMAGE_ATTACK))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[8], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public CheckAttack(id, Float:Radius, Float:PointDis, Float:Damage)
{
static Float:Max_Distance, Float:Point[4][3], Float:TB_Distance, Float:Point_Dis
Point_Dis = PointDis
Max_Distance = Radius
TB_Distance = Max_Distance / 4.0
static Float:VicOrigin[3], Float:MyOrigin[3]
pev(id, pev_origin, MyOrigin)
for(new i = 0; i < 4; i++) get_position(id, TB_Distance * (i + 1), 0.0, 0.0, Point[i])
static Have_Victim; Have_Victim = 0
static ent; ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(ent))
return 0
for(new i = 0; i < g_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_wall_between_points(MyOrigin, VicOrigin, id))
continue
if(get_distance_f(VicOrigin, Point[0]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[1]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[2]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[3]) <= Point_Dis)
{
if(!Have_Victim) Have_Victim = 1
do_attack(id, i, ent, Damage)
}
}
if(Have_Victim) return 1
return 0
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, 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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, v_forward)
xs_vec_add(vecStart, v_forward, vecEnd)
engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle)
return FMRES_SUPERCEDE
}
public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], TraceResult, DamageBits)
{
if(!is_user_alive(Attacker))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, Attacker) || !Get_BitVar(g_TempingAttack, Attacker))
return HAM_IGNORED
return HAM_SUPERCEDE
}
public fw_Weapon_WeaponIdle_Post(ent)
{
static id; id = pev(ent, pev_owner)
if(!is_user_alive(id))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, id))
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) <= 0.25)
{
set_weapon_anim(id, Get_BitVar(g_IsOnMode, id) ? LS_ANIM_IDLE_ON : LS_ANIM_IDLE_OFF)
set_pdata_float(ent, 48, 20.0, 4)
}
return HAM_IGNORED
}
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))
}
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
static Float:fAngles[3], Float:fDirection[3]
pev(iAttacker, pev_angles, fAngles)
angle_vector(fAngles, ANGLEVECTOR_FORWARD, fDirection)
// get fStart
static 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
static iAimOrigin[3], Float:fAimOrigin[3]
get_user_origin(iAttacker, iAimOrigin, 3)
IVecFVec(iAimOrigin, fAimOrigin)
// TraceLine from fStart to AimOrigin
static ptr; ptr = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr)
static pHit; pHit = get_tr2(ptr, TR_pHit)
static iHitgroup; iHitgroup = get_tr2(ptr, TR_iHitgroup)
static Float:fEndPos[3]; get_tr2(ptr, TR_vecEndPos, fEndPos)
// get target & body at aiming
static 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
static 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
static iAngleToVictim; iAngleToVictim = get_angle_to_target(iAttacker, fVicOrigin)
iAngleToVictim = abs(iAngleToVictim)
static Float:fDis; fDis = 2.0 * get_distance_f(fStart, fAimInVictim) * floatsin( float(iAngleToVictim) * 0.5, degrees )
static Float:fVicSize[3]
pev(iVictim, pev_size , fVicSize)
if ( fDis <= fVicSize[0] * 0.5 )
{
// TraceLine from fStart to aimOrigin in iVictim
static ptr2; ptr2 = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimInVictim, DONT_IGNORE_MONSTERS, iAttacker, ptr2)
static pHit2; pHit2 = get_tr2(ptr2, TR_pHit)
static iHitgroup2; 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
static ptr3; 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
static Float:fMultifDamage
switch(iHitgroup)
{
case HIT_HEAD: fMultifDamage = 4.0
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))
{
ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit)
}
stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
{
static 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)
static Float:fV2[3]
xs_vec_sub(fTarget, fOrigin, fV2)
static iResult; iResult = get_angle_between_vectors(fV1, fV2)
if (TargetSize > 0.0)
{
static Float:fTan; fTan = TargetSize / get_distance_f(fOrigin, fTarget)
static fAngleToTargetSize; 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])
{
static Float:fA1[3], Float:fA2[3]
engfunc(EngFunc_VecToAngles, fV1, fA1)
engfunc(EngFunc_VecToAngles, fV2, fA2)
static iResult; iResult = floatround(fA1[1] - fA2[1])
iResult = iResult % 360
iResult = (iResult > 180) ? (iResult - 360) : iResult
return iResult
}
stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
{
static 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, WeaponId ,Float:TimeIdle)
{
static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
if(!pev_valid(entwpn))
return
set_pdata_float(entwpn, 46, TimeIdle, 4)
set_pdata_float(entwpn, 47, TimeIdle, 4)
set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
}
stock set_weapon_anim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(anim)
write_byte(0)
message_end()
}
stock print_chatColor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"!g","^4");// green
replace_all(msg,190,"!n","^1");// normal
replace_all(msg,190,"!t","^3");// team
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i=0;i<count;i++)
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
stock log_kill(killer, victim, weapon[],headshot)
{
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
user_kill(victim,1)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0)
write_byte(killer)
write_byte(victim)
write_byte(headshot)
write_string(weapon)
message_end()
set_user_frags(killer,get_user_frags(killer) +1);
zp_set_user_ammo_packs(killer, zp_get_user_ammo_packs(killer) + get_pcvar_num(kill_ammo));
new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10]
get_user_name(killer, kname, 31)
get_user_team(killer, kteam, 9)
get_user_authid(killer, kauthid, 31)
get_user_name(victim, vname, 31)
get_user_team(victim, vteam, 9)
get_user_authid(victim, vauthid, 31)
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
kname, get_user_userid(killer), kauthid, kteam,
vname, get_user_userid(victim), vauthid, vteam, weapon)
return PLUGIN_CONTINUE
}
stock set_player_nextattack(id, Float:NextTime) set_pdata_float(id, 83, NextTime, 5);
Imi spui daca acm apare ca tu l-ai omorat ^_^ si iti setezi cat ammo vrei tu.
Retired from Amxmodx
0
0
Back to top
Iulian3D
[Mentally Stable]
Status: Offline
(since 04-03-2020 22:38)
Joined: 21 Jun 2015
Posts: 227
,
Topics: 37
Location:
Buftea .
Reputation:
178.8
Votes
: 4
Posted: 31-07-2015, 22:19:52
| Translate post to:
... (
Click for more languages
)
Dacã apãs pe E și omor pe cineva îmi aratã de 2 ori cã a murit , o datã ca și cum sar fi sinucis , și o datã cã l-am omorât eu .
0
0
Back to top
destroi112
[DEV]
Status: Offline
(since 12-03-2020 22:13)
Joined: 24 May 2014
Posts: 4042
,
Topics: 119
Location:
---------
Reputation:
515.9
Votes
: 118
Posted: 31-07-2015, 22:32:08
| Translate post to:
... (
Click for more languages
)
Vezi asa.
Spoiler:
#include <amxmodx>
#include <fun>
#include <hamsandwich>
#include <zombieplague>
#include <zombiexp>
#include <cstrike>
#include <fakemeta_util>
#include <fakemeta>
#include <engine>
#include <xs>
new const beam_cylinder[] = "sprites/white.spr"
new const houndeye_attack[][] = { "houndeye/he_attack1.wav", "houndeye/he_attack3.wav" }
new const houndeye_blast[][] = { "houndeye/he_blast1.wav", "houndeye/he_blast3.wav" }
new Float:g_Time[33];
new cvar_cooldown;
/*================================================================================
[End Customization]
=================================================================================*/
#define is_player(%0) (1 <= %0 <= g_MaxPlayers)
#define TASK_BLASPLAYER 98124
// Zombie vars
new gSprBeam,cvar_radius, cvar_damage_amount ,kill_ammo;
// Human Attributes
new const hclass_name[] = { "Human_17" } // name
new const hclass_info[] = { "AK-47 and USP" } // description
new const hclass_model[] = { "player" } // model
new const hclass_weapons[] = { } // weapons
const hclass_health = 450 // health
const hclass_speed = 300 // speed
const Float:hclass_gravity = 0.80 // gravity
const hclass_level = 17 // level required to use
// Class IDs
new g_hclassid
#define DAMAGE_LIGHTSABER 240
#define DAMAGE_ATTACK 120
#define RADIUS_ON 96
#define RADIUS_OFF 72
#define DRAW_TIME 0.75
#define TURN_TIME 0.5
#define RESET_TIME 1.5
#define ANIMEXT1 "onehanded"
#define ANIMEXT2 "knife"
#define V_MODEL "models/v_sfsword.mdl"
#define P_MODEL_ON "models/p_sfsword_on.mdl"
#define P_MODEL_OFF "models/p_sfsword_off.mdl"
new const LightSaber_Sounds[14][] =
{
"weapons/sfsword_draw.wav",
"weapons/sfsword_hit1.wav",
"weapons/sfsword_hit2.wav",
"weapons/sfsword_idle.wav",
"weapons/sfsword_midslash1.wav",
"weapons/sfsword_midslash2.wav",
"weapons/sfsword_midslash3.wav",
"weapons/sfsword_off.wav",
"weapons/sfsword_off_hit.wav",
"weapons/sfsword_off_slash1.wav",
"weapons/sfsword_on.wav", // 10
"weapons/sfsword_stab.wav",
"weapons/sfsword_wall1.wav",
"weapons/sfsword_wall2.wav"
}
enum
{
LS_ANIM_IDLE_ON = 0,
LS_ANIM_ON,
LS_ANIM_OFF,
LS_ANIM_DRAW,
LS_ANIM_STAB,
LS_ANIM_STAB_MISS,
LS_ANIM_MIDSLASH1,
LS_ANIM_MIDSLASH2,
LS_ANIM_MIDSLASH3,
LS_ANIM_IDLE_OFF,
LS_ANIM_SLASH_OFF
}
/* ===============================
--------- End of Config ----------
=================================*/
#define CSW_LIGHTSABER CSW_KNIFE
#define weapon_lightsaber "weapon_knife"
#define TASK_TURN 4234234
#define TASK_SLASH 6948638
#define TASK_RESET 54893534
// MACROS
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
enum
{
HIT_NOTHING = 0,
HIT_ENEMY,
HIT_WALL
}
enum
{
ATTACK_SLASH1 = 0,
ATTACK_SLASH2,
ATTACK_SLASH3
}
// Vars
new g_Had_LightSaber, g_IsOnMode, g_TempingAttack, g_InSpecialAttack
new g_OldWeapon[33], g_WillBeHit[33], g_AttackingMode[33]
new g_MaxPlayers, g_Ham_Bot
public plugin_init()
{
register_plugin("[ZPXP]HumanClass","1.0","uNIRE-> D3luxe");
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_EmitSound, "fw_EmitSound")
register_forward(FM_TraceLine, "fw_TraceLine")
register_forward(FM_TraceHull, "fw_TraceHull")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_Spawn,"player","spawn_now",1)
RegisterHam(Ham_Weapon_WeaponIdle, weapon_lightsaber, "fw_Weapon_WeaponIdle_Post", 1)
cvar_radius = register_cvar("zp_humanislave_radius", "150.0")
cvar_damage_amount = register_cvar("zp_humanislave_damage_amount", "150")
cvar_cooldown = register_cvar("zp_humanislave_cooldown","16");
kill_ammo = register_cvar("zp_humanislave_rewardkill","16");
register_forward( FM_CmdStart, "CmdStart")
g_MaxPlayers = get_maxplayers()
}
public plugin_precache()
{
// Register the new class and store ID for reference
g_hclassid = zpxp_register_human_class(hclass_name, hclass_info, hclass_model, hclass_weapons, hclass_health, hclass_speed, hclass_gravity, hclass_level)
if(g_hclassid == -1) server_print("[ZPXP] You have not properly setup your Zombie XP Mod.");
engfunc(EngFunc_PrecacheModel, V_MODEL)
engfunc(EngFunc_PrecacheModel, P_MODEL_ON)
engfunc(EngFunc_PrecacheModel, P_MODEL_OFF)
for(new i = 0; i < sizeof(LightSaber_Sounds); i++)
engfunc(EngFunc_PrecacheSound, LightSaber_Sounds[i]);
gSprBeam = precache_model(beam_cylinder)
for (new i = 0; i < sizeof houndeye_attack; i++)
engfunc(EngFunc_PrecacheSound, houndeye_attack[i])
for (new i = 0; i < sizeof houndeye_blast; i++)
engfunc(EngFunc_PrecacheSound, houndeye_blast[i])
}
public spawn_now(id)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
// User Infected forward
public zp_user_infected_post(id, infector, nemesis)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
public CmdStart(id)
{
if(!is_user_alive(id))
return;
static iButton; iButton = pev(id, pev_button)
static iOldButton; iOldButton = pev(id, pev_oldbuttons)
if(!zp_get_user_zombie(id) && (zp_get_user_human_class(id) == g_hclassid) && !zp_get_user_survivor(id))
{
if( ( iButton & IN_USE ) && !( iOldButton & IN_USE ) )
{
static Float: cooldown;
cooldown = get_pcvar_float(cvar_cooldown);
if(get_gametime() - g_Time[id] < cooldown)
{
print_chatColor(id,"!g[ZM]!nTi-ai folosit abilitatea , asteapta !t%.f0 !nsecunde.", cooldown - (get_gametime() - g_Time[id]));
return;
}
g_Time[id] = get_gametime();
emit_sound(id, CHAN_VOICE, houndeye_attack[random_num(0, sizeof houndeye_attack - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "blast_players", id+TASK_BLASPLAYER)
}
}
}
public blast_players(id)
{
id -= TASK_BLASPLAYER
new Float: iOrigin[3]
pev(id, pev_origin, iOrigin)
emit_sound(id, CHAN_VOICE, houndeye_blast[random_num(0, sizeof houndeye_blast - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, iOrigin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2])
engfunc(EngFunc_WriteCoord, iOrigin[0])
engfunc(EngFunc_WriteCoord, iOrigin[1])
engfunc(EngFunc_WriteCoord, iOrigin[2]+385.0)
write_short(gSprBeam)
write_byte(0)
write_byte(0)
write_byte(4)
write_byte(60)
write_byte(0)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(200)
write_byte(0)
message_end()
static Ent, Float: originF[3]
while( (Ent = engfunc(EngFunc_FindEntityInSphere, Ent, iOrigin, get_pcvar_float(cvar_radius))) )
{
if( is_player(Ent) && Ent != id )
{
if(!zp_get_user_zombie(Ent))
return PLUGIN_CONTINUE;
if(zp_get_user_nemesis(Ent))
return PLUGIN_CONTINUE;
if(get_user_health(Ent) - get_pcvar_num(cvar_damage_amount) <=0)
{
log_kill(id, Ent, "blastattack", 0);
}else fm_set_user_health(Ent, pev(Ent, pev_health) - get_pcvar_num(cvar_damage_amount));
pev(Ent, pev_origin, originF)
originF[0] = (originF[0] - iOrigin[0]) * 10.0
originF[1] = (originF[1] - iOrigin[1]) * 10.0
originF[2] = (originF[2] - iOrigin[2]) + 500.0
set_pev(Ent, pev_velocity, originF)
}
}
return PLUGIN_HANDLED;
}
public zp_user_humanized_post(id)
{
// Check if the infected player is using our custom zombie class
if (zp_get_user_human_class(id) != g_hclassid) return;
// User turned human
if (zp_get_user_survivor(id) == 1)
{
Remove_LightSaber(id)
zp_user_infected_post(id, 0, 0)
} else {
zp_round_started_human(id)
}
}
public zp_round_started_human(id)
{
if (zp_get_user_human_class(id) == g_hclassid && !zp_get_user_zombie(id))
Get_LightSaber(id);
else
Remove_LightSaber(id);
}
public client_disconnect(id)
{
Remove_LightSaber(id)
return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
Remove_LightSaber(id)
if(!g_Ham_Bot && is_user_bot(id))
{
g_Ham_Bot = 1
set_task(0.1, "Do_RegisterHam_Bot", id)
}
}
public Do_RegisterHam_Bot(id)
{
RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
}
public Get_LightSaber(id)
{
if(!is_user_alive(id))
return
Set_BitVar(g_Had_LightSaber, id)
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
fm_give_item(id, weapon_lightsaber)
if(get_user_weapon(id) == CSW_LIGHTSABER)
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
} else {
engclient_cmd(id, weapon_lightsaber)
}
}
public Remove_LightSaber(id)
{
UnSet_BitVar(g_Had_LightSaber, id)
UnSet_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_TempingAttack, id)
UnSet_BitVar(g_InSpecialAttack, id)
g_WillBeHit[id] = HIT_NOTHING
g_AttackingMode[id] = 0
remove_task(id+TASK_TURN)
remove_task(id+TASK_SLASH)
remove_task(id+TASK_RESET)
}
public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return
static CSWID; CSWID = read_data(2)
if((CSWID == CSW_LIGHTSABER && g_OldWeapon[id] != CSW_LIGHTSABER) && Get_BitVar(g_Had_LightSaber, id))
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_player_nextattack(id, DRAW_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
set_weapon_anim(id, LS_ANIM_DRAW)
set_pdata_string(id, (492) * 4, ANIMEXT1, -1 , 20)
} else if(CSWID != CSW_LIGHTSABER && g_OldWeapon[id] == CSW_LIGHTSABER) {
g_AttackingMode[id] = 0
Set_BitVar(g_IsOnMode, id)
UnSet_BitVar(g_InSpecialAttack, id)
remove_task(id+TASK_TURN)
}
g_OldWeapon[id] = CSWID
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return FMRES_IGNORED
if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
{
if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
{
g_WillBeHit[id] = HIT_NOTHING
return FMRES_SUPERCEDE
}
if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't')
{
if (sample[17] == 'w') // wall
{
g_WillBeHit[id] = HIT_WALL
return FMRES_SUPERCEDE
} else {
g_WillBeHit[id] = HIT_ENEMY
return FMRES_SUPERCEDE
}
}
if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static ent; ent = fm_get_user_weapon_entity(id, CSW_LIGHTSABER)
if(!pev_valid(ent))
return
if(get_pdata_float(id, 83, 5) > 0.0)
return
static CurButton; CurButton = get_uc(uc_handle, UC_Buttons)
if(CurButton & IN_ATTACK)
{
CurButton &= ~IN_ATTACK
set_uc(uc_handle, UC_Buttons, CurButton)
if(Get_BitVar(g_IsOnMode, id))
{
if(!Get_BitVar(g_InSpecialAttack, id))
{
if(g_AttackingMode[id] == 0) g_AttackingMode[id] = 1
g_AttackingMode[id]++
if(g_AttackingMode[id] > ATTACK_SLASH3) g_AttackingMode[id] = 1
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
if(g_AttackingMode[id] == 1) set_weapon_anim(id, LS_ANIM_MIDSLASH1)
else if(g_AttackingMode[id] == 2) set_weapon_anim(id, LS_ANIM_MIDSLASH2)
else if(g_AttackingMode[id] == 3) set_weapon_anim(id, LS_ANIM_MIDSLASH3)
set_task(0.25, "Damage_Slash", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
Set_BitVar(g_InSpecialAttack, id)
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_STAB)
set_task(0.25, "Damage_Stab", id+TASK_SLASH)
set_task(0.5, "Damage_Stab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else {
set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
Set_BitVar(g_TempingAttack, id)
ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
UnSet_BitVar(g_TempingAttack, id)
set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
set_player_nextattack(id, 1.0)
set_weapon_anim(id, LS_ANIM_SLASH_OFF)
set_task(0.25, "Damage_OffStab", id+TASK_SLASH)
set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
UnSet_BitVar(g_InSpecialAttack, id)
}
} else if(CurButton & IN_ATTACK2) {
CurButton &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, CurButton)
set_weapon_anim(id, !Get_BitVar(g_IsOnMode, id) ? LS_ANIM_ON : LS_ANIM_OFF)
set_player_nextattack(id, TURN_TIME)
set_weapons_timeidle(id, CSW_LIGHTSABER, TURN_TIME)
set_task(TURN_TIME - 0.1, "Turn_Complete", id+TASK_TURN)
}
}
public Turn_Complete(id)
{
id -= TASK_TURN
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
if(Get_BitVar(g_IsOnMode, id)) UnSet_BitVar(g_IsOnMode, id)
else Set_BitVar(g_IsOnMode, id)
set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Reset_Anim(id)
{
id -= TASK_RESET
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
}
public Damage_Slash(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_Stab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public Damage_OffStab(id)
{
id -= TASK_SLASH
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
return
static Ent; Ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(Ent)) Ent = 0
static Target; Target = CheckAttack(id, float(RADIUS_OFF), 24.0, float(DAMAGE_ATTACK))
if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[8], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public CheckAttack(id, Float:Radius, Float:PointDis, Float:Damage)
{
static Float:Max_Distance, Float:Point[4][3], Float:TB_Distance, Float:Point_Dis
Point_Dis = PointDis
Max_Distance = Radius
TB_Distance = Max_Distance / 4.0
static Float:VicOrigin[3], Float:MyOrigin[3]
pev(id, pev_origin, MyOrigin)
for(new i = 0; i < 4; i++) get_position(id, TB_Distance * (i + 1), 0.0, 0.0, Point[i])
static Have_Victim; Have_Victim = 0
static ent; ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
if(!pev_valid(ent))
return 0
for(new i = 0; i < g_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_wall_between_points(MyOrigin, VicOrigin, id))
continue
if(get_distance_f(VicOrigin, Point[0]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[1]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[2]) <= Point_Dis
|| get_distance_f(VicOrigin, Point[3]) <= Point_Dis)
{
if(!Have_Victim) Have_Victim = 1
do_attack(id, i, ent, Damage)
}
}
if(Have_Victim) return 1
return 0
}
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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, 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_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, 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(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
else xs_vec_mul_scalar(v_forward, 0.0, v_forward)
xs_vec_add(vecStart, v_forward, vecEnd)
engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle)
return FMRES_SUPERCEDE
}
public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], TraceResult, DamageBits)
{
if(!is_user_alive(Attacker))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, Attacker) || !Get_BitVar(g_TempingAttack, Attacker))
return HAM_IGNORED
return HAM_SUPERCEDE
}
public fw_Weapon_WeaponIdle_Post(ent)
{
static id; id = pev(ent, pev_owner)
if(!is_user_alive(id))
return HAM_IGNORED
if(!Get_BitVar(g_Had_LightSaber, id))
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) <= 0.25)
{
set_weapon_anim(id, Get_BitVar(g_IsOnMode, id) ? LS_ANIM_IDLE_ON : LS_ANIM_IDLE_OFF)
set_pdata_float(ent, 48, 20.0, 4)
}
return HAM_IGNORED
}
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))
}
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
static Float:fAngles[3], Float:fDirection[3]
pev(iAttacker, pev_angles, fAngles)
angle_vector(fAngles, ANGLEVECTOR_FORWARD, fDirection)
// get fStart
static 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
static iAimOrigin[3], Float:fAimOrigin[3]
get_user_origin(iAttacker, iAimOrigin, 3)
IVecFVec(iAimOrigin, fAimOrigin)
// TraceLine from fStart to AimOrigin
static ptr; ptr = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr)
static pHit; pHit = get_tr2(ptr, TR_pHit)
static iHitgroup; iHitgroup = get_tr2(ptr, TR_iHitgroup)
static Float:fEndPos[3]; get_tr2(ptr, TR_vecEndPos, fEndPos)
// get target & body at aiming
static 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
static 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
static iAngleToVictim; iAngleToVictim = get_angle_to_target(iAttacker, fVicOrigin)
iAngleToVictim = abs(iAngleToVictim)
static Float:fDis; fDis = 2.0 * get_distance_f(fStart, fAimInVictim) * floatsin( float(iAngleToVictim) * 0.5, degrees )
static Float:fVicSize[3]
pev(iVictim, pev_size , fVicSize)
if ( fDis <= fVicSize[0] * 0.5 )
{
// TraceLine from fStart to aimOrigin in iVictim
static ptr2; ptr2 = create_tr2()
engfunc(EngFunc_TraceLine, fStart, fAimInVictim, DONT_IGNORE_MONSTERS, iAttacker, ptr2)
static pHit2; pHit2 = get_tr2(ptr2, TR_pHit)
static iHitgroup2; 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
static ptr3; 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
static Float:fMultifDamage
switch(iHitgroup)
{
case HIT_HEAD: fMultifDamage = 4.0
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))
{
ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit)
}
stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
{
static 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)
static Float:fV2[3]
xs_vec_sub(fTarget, fOrigin, fV2)
static iResult; iResult = get_angle_between_vectors(fV1, fV2)
if (TargetSize > 0.0)
{
static Float:fTan; fTan = TargetSize / get_distance_f(fOrigin, fTarget)
static fAngleToTargetSize; 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])
{
static Float:fA1[3], Float:fA2[3]
engfunc(EngFunc_VecToAngles, fV1, fA1)
engfunc(EngFunc_VecToAngles, fV2, fA2)
static iResult; iResult = floatround(fA1[1] - fA2[1])
iResult = iResult % 360
iResult = (iResult > 180) ? (iResult - 360) : iResult
return iResult
}
stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
{
static 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, WeaponId ,Float:TimeIdle)
{
static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
if(!pev_valid(entwpn))
return
set_pdata_float(entwpn, 46, TimeIdle, 4)
set_pdata_float(entwpn, 47, TimeIdle, 4)
set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
}
stock set_weapon_anim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(anim)
write_byte(0)
message_end()
}
stock print_chatColor(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"!g","^4");// green
replace_all(msg,190,"!n","^1");// normal
replace_all(msg,190,"!t","^3");// team
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i=0;i<count;i++)
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
stock log_kill(killer, victim, weapon[],headshot)
{
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
user_kill(victim,1)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0)
write_byte(killer)
write_byte(victim)
write_byte(headshot)
write_string(weapon)
message_end()
set_user_frags(killer,get_user_frags(killer) +1);
zp_set_user_ammo_packs(killer, zp_get_user_ammo_packs(killer) + get_pcvar_num(kill_ammo));
new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10]
get_user_name(killer, kname, 31)
get_user_team(killer, kteam, 9)
get_user_authid(killer, kauthid, 31)
get_user_name(victim, vname, 31)
get_user_team(victim, vteam, 9)
get_user_authid(victim, vauthid, 31)
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
kname, get_user_userid(killer), kauthid, kteam,
vname, get_user_userid(victim), vauthid, vteam, weapon)
return PLUGIN_CONTINUE
}
stock set_player_nextattack(id, Float:NextTime) set_pdata_float(id, 83, NextTime, 5);
Retired from Amxmodx
1
0
Back to top
Iulian3D
[Mentally Stable]
Status: Offline
(since 04-03-2020 22:38)
Joined: 21 Jun 2015
Posts: 227
,
Topics: 37
Location:
Buftea .
Reputation:
178.8
Votes
: 4
Posted: 01-08-2015, 08:43:01
| Translate post to:
... (
Click for more languages
)
Îți mulțumesc destroi112 , l-am testat și acum merge perfect , ai respectele mele .
Puteți sã dați T/C .
0
0
Back to top
Topic locked
Topic is closed, you cannot post any messages in it anymore
Locked by
-P!C@-
, 02 August 2015 08:58
Freakz Forum Index
->
Trash Bin
->
CS 2006-2019 (Archived)
->
Fixed issues
The time now is 27-07-2025, 06:22:26
Copyright info
Based on phpBB
ro
/
com
B
Login
I forgot my password
World of Warcraft
Login for more...
Download WoW 7.3.5
Misc
eSports
Achievements
Buy reputation with votes
Reputation trades
Forum rules
Ban list
Members list
User guide (FAQ)
World of Warcraft
View details