Veteran Member
Join Date: Sep 2019
Location: Egypt
|
06-25-2020
, 13:56
Re: Help on Plugin plz
|
#8
|
Quote:
Originally Posted by mohanad
it did not work
|
Tested and I added a nice thing for you i added give dps cmd so if you want to give players this knife then just type in console amx_dps "name"
You can change the flag for who only can give players this sword knife
PHP Code:
register_concmd("amx_dps", "get_dps", ADMIN_LEVEL_A, "<name>")
PHP Code:
#pragma compress 1
#include <amxmodx>
#include <cstrike>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#include <zombieplague>
#define ADMIN_ACCESS ADMIN_KICK
#define PLUGIN "CSO Dual Sword Phantom Slayer"
#define VERSION "1.0"
#define AUTHOR "Natasha aka Asdian"
#define CSW_DPS CSW_KNIFE
#define weapon_dps "weapon_knife"
#define v_model "models/v_dualsword.mdl"
#define p_model "models/p_dualsword_a.mdl"
#define p_model2 "models/p_dualsword_b.mdl"
#define spr_wpn "knife_dualsword"
new const weapon_sound[][] =
{
"weapons/dualsword_stab1.wav", // 0
"weapons/dualsword_stab2.wav", // 1
"weapons/dualsword_stab1_hit.wav", // 2
"weapons/dualsword_stab2_hit.wav", // 3
"weapons/katanad_hitwall.wav", // 4
"weapons/dualsword_slash_1.wav", // 5
"weapons/dualsword_slash_2.wav", // 6
"weapons/dualsword_slash_3.wav", // 7
"weapons/dualsword_slash_4.wav", // 8
"weapons/dualsword_hit1.wav", // 9
"weapons/dualsword_hit2.wav", // 10
"weapons/dualsword_hit3.wav", // 11
"weapons/dualsword_slash_4_1.wav", // 12
"weapons/dualsword_slash_4_2.wav", // 13
"weapons/dualsword_skill_end.wav", // 14
"weapons/dualsword_fly1.wav", // 15
"weapons/dualsword_fly2.wav", // 16
"weapons/dualsword_fly3.wav", // 17
"weapons/dualsword_fly4.wav", // 18
"weapons/dualsword_fly5.wav", // 19
"weapons/dualsword_skill_start.wav"
}
//Hit
#define RESULT_HIT_NONE 0
#define RESULT_HIT_PLAYER 1
#define RESULT_HIT_WORLD 2
enum _:WpnAnim
{
ANIM_IDLEA = 0,
ANIM_SLASH1,
ANIM_SLASH2,
ANIM_SLASH3,
ANIM_SLASH4,
ANIM_SLASHEND,
ANIM_DRAWA,
ANIM_IDLEB,
ANIM_STAB1,
ANIM_STAB2,
ANIM_STABEND,
ANIM_DRAWB
}
new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_soundmode[33]//, g_dps
new ef_sakura[4]
new Float:g_Sound[33]
new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
new cvar_damage_special, cvar_special_range
new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);
register_think("dps_entytyd", "Fw_DPSEnt_Think")
register_concmd("amx_dps", "get_dps", ADMIN_LEVEL_A, "<name>")
RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
RegisterHam(Ham_Spawn, "player", "PlayerRespawn", 1);
// g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 0, ZP_TEAM_HUMAN)
register_clcmd(spr_wpn, "hook_rb")
cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
cvar_slash_radius = register_cvar("dps_slashradius","120.0")
cvar_slash_range = register_cvar("dps_slashrange","95.0")
cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
cvar_stab_radius = register_cvar("dps_stabradius","90.0")
cvar_stab_range = register_cvar("dps_stabrange","150.0")
cvar_damage_special = register_cvar("dps_specialdamage","95.0")
cvar_special_range = register_cvar("dps_specialrange","120.0")
cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0")
cvar_remove = register_cvar("dps_remove_onnewround", "0")
cvar_spr = register_cvar("dps_enable_sprites", "1")
//g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 10, ZP_TEAM_HUMAN)
}
public plugin_precache()
{
precache_model(v_model)
precache_model(p_model)
precache_model(p_model2)
for(new i = 0; i < sizeof(weapon_sound); i++)
precache_sound(weapon_sound[i])
precache_model("models/dualswordfx.mdl")
precache_model("models/dualsword_skill.mdl")
precache_model("models/dualsword_skillfx1.mdl")
precache_model("models/dualsword_skillfx2.mdl")
ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
new Txt[32]
format(Txt, 31, "sprites/%s.txt", spr_wpn)
engfunc(EngFunc_PrecacheGeneric, Txt)
}
public PlayerRespawn(id)
{
new Flag = get_user_flags(id)
if (!is_user_alive(id))
return;
if( Flag & ADMIN_ACCESS && cs_get_user_team(id) == CS_TEAM_CT)
{
fm_give_item(id, weapon_dps)
g_had_dps[id] = 1
return;
}
}
//public zp_extra_item_selected(i, d) if(d == g_dps) get_dps(i)
public zp_user_infected_post(i) remove_dps(i)
public zp_user_humanized_post(i) remove_dps(i)
public hook_rb(id)
{
engclient_cmd(id, weapon_dps)
return PLUGIN_HANDLED
}
public give_dps(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED;
new arg[32];
read_argv(1,arg,31);
new player = cmd_target(id,arg,7);
if (!player)
return PLUGIN_HANDLED;
new name[32];
get_user_name(player,name,31);
if (g_had_dps[player])
{
client_printcolor(id, "Player !t%s!n already have the !gDualsword.", name);
return PLUGIN_HANDLED;
}
fm_give_item(player, weapon_dps)
client_printcolor(player, "!n[ADMIN] !t%s!n has given you !gDualsword", name);
g_had_dps[player] = 1
return PLUGIN_HANDLED
}
public get_dps(id)
{
if (!is_user_alive(id))
return
g_had_dps[id] = 1
g_mode[id] = 0
g_slashend[id] = 0
g_check[id] = 0
g_soundmode[id] = 0
fm_give_item(id, weapon_dps)
if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
else engclient_cmd(id,weapon_dps)
}
public client_connect(id) remove_dps(id)
public client_disconnect(id) remove_dps(id)
public Event_NewRound()
{
if(!get_pcvar_num(cvar_remove))
return
for(new i = 0; i < get_maxplayers(); i++)
remove_dps(i)
}
public remove_dps(id)
{
g_had_dps[id] = 0
g_slashend[id] = 0
g_check[id] = 0
static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
if(!pev_valid(iEnt)) return
set_pev(iEnt, pev_iuser1, 0)
set_pev(iEnt, pev_iuser2, 0)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_iuser4, 0)
set_pev(iEnt, pev_fuser1, 0.0)
}
public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return 1
if(get_user_weapon(id) != CSW_DPS)
return 1
if(!g_had_dps[id])
return 1
if(zp_get_user_zombie(id))
return 1
set_pev(id, pev_viewmodel2, v_model)
set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
if(!pev_valid(iEnt)) return 1
set_pev(iEnt, pev_iuser1, 0)
set_pev(iEnt, pev_iuser2, 0)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_iuser4, 0)
set_pev(iEnt, pev_fuser1, 0.0)
g_slashend[id] = 0
g_check[id] = 0
set_pdata_float(id, 83, 0.23)
set_pdata_float(iEnt, 46, 0.25);
set_pdata_float(iEnt, 47, 0.25);
set_pdata_float(iEnt, 48, 0.25);
if(get_pcvar_num(cvar_spr))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(CSW_DPS)
write_byte(0)
message_end()
}
return 0
}
public message_DeathMsg(msg_id, msg_dest, msg_ent)
{
new szWeapon[64]
get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
if (strcmp(szWeapon, "knife"))
return PLUGIN_CONTINUE
new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
return PLUGIN_CONTINUE
set_msg_arg_string(4, "dualsword")
return PLUGIN_CONTINUE
}
public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
if (!pev_valid(iEnt))
return;
if (pev(iEnt, pev_flags) & FL_KILLME)
return;
new classname[32];
pev(iEnt, pev_classname, classname, 31);
if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
{
if (iHost != pev(iEnt, pev_owner))
set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
}
}
public Fw_DPSEnt_Think(iEnt)
{
if(!pev_valid(iEnt))
return
new iOwner
iOwner = pev(iEnt, pev_owner)
if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || zp_get_user_zombie(iOwner))
{
remove_entity(iEnt)
g_soundmode[iOwner] = 0
return
}
if(!Get_Entity_Mode(iEnt))
{
new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
iWpn = pev(iEnt, pev_iuser1)
iState = pev(iWpn, pev_iuser4)
Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
pev(iOwner, pev_v_angle, vecAngle);
vecAngle[0] = -vecAngle[0];
set_pev(iEnt, pev_origin, vecOrigin);
set_pev(iEnt, pev_angles, vecAngle);
if(!iState || get_user_weapon(iOwner) != CSW_DPS)
{
new Float:fRenderAmount;
pev(iEnt, pev_renderamt, fRenderAmount);
fRenderAmount -= 4.5;
if (fRenderAmount <= 5.0)
{
remove_entity(iEnt);
return;
}
set_pev(iEnt, pev_renderamt, fRenderAmount);
}
}
if(Get_Entity_Mode(iEnt) == 1)
{
set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
Origin[2] -= 25.0
Stock_Hook_Ent(iEnt, Origin, 0.01)
if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
{
set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
return
}
set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
set_pev(iEnt, pev_origin, Origin);
}
if(Get_Entity_Mode(iEnt) == 2)
{
new Float:vecOrigin[3]
GetGunPosition(iOwner, vecOrigin);
new Float:fOldOrigin[3];
pev(iEnt, pev_oldorigin, fOldOrigin);
new Float:vecNewOrigin[3];
pev(iEnt, pev_origin, vecNewOrigin);
new Float:vecfff[3];
xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
set_pev(iEnt, pev_origin, vecNewOrigin);
set_pev(iEnt, pev_oldorigin, vecOrigin);
if (pev(iEnt, pev_iuser1) == 2)
{
new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
if (fDist > 175.0 * 0.5)
{
remove_entity(iEnt);
return;
}
}
if(g_Sound[iOwner] < get_gametime())
{
if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
g_soundmode[iOwner]++
if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
g_Sound[iOwner] = get_gametime()+0.088;
}
}
set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
if(Get_Entity_Mode(iEnt) == 2)
{
new Float:fTimeLast;
pev(iEnt, pev_fuser1, fTimeLast);
if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
{
if (pev(iEnt, pev_iuser1) == 1)
{
new Float:fRenderAmount;
pev(iEnt, pev_renderamt, fRenderAmount);
fRenderAmount -= 7.5;
if (fRenderAmount <= 5.0)
{
remove_entity(iEnt);
return;
}
set_pev(iEnt, pev_renderamt, fRenderAmount);
} else remove_entity(iEnt);
g_soundmode[iOwner] = 0
}
}
}
public fw_Item_PostFrame(ent)
{
new id = pev(ent, pev_owner)
if(!is_user_connected(id))
return HAM_IGNORED
if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
{
if(g_check[id] < 6) g_check[id] = 0
set_pev(ent, pev_iuser3, 0)
Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
set_pdata_float(ent, 48, 4.03, 4)
}
new iButton = pev(id,pev_button)
return AurezBotac(id, ent, iButton)
}
public AurezBotac(id, iEnt, iButton)
{
new iState = pev(iEnt, pev_iuser3)
new iState2 = pev(iEnt, pev_iuser2)
new iSlash = pev(iEnt, pev_iuser4)
new Float:fSound; pev(iEnt, pev_fuser1, fSound)
new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
{
if(!iState || iState == 1)
{
Set_WeaponAnim(id, ANIM_STABEND)
set_pev(iEnt, pev_iuser2, 0)
set_pdata_float(iEnt, 48, 1.45,4)
}
}
if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
{
Set_WeaponAnim(id, ANIM_SLASHEND)
set_pdata_float(iEnt, 48, 2.03,4)
g_slashend[id] = 0
}
if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
{
new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
switch (iHitResult)
{
case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2])
case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
}
set_pev(iEnt, pev_iuser1, 0);
}
if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
{
set_pev(iEnt, pev_iuser4, 1 + iSlash)
Set_WeaponAnim(id, 1 + iSlash)
set_pdata_float(id, 83, 0.06)
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
Create_Slash(id,iEnt,iSlash)
if(iSlash == 3)
{
g_slashend[id] = 1
set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
set_pev(iEnt, pev_iuser4, 0)
}
}
if(fSound && fSound < get_gametime())
{
SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
set_pev(iEnt, pev_fuser1, 0.0)
if(g_check[id] == 5)
{
Set_WeaponAnim(id, 14)
SendSound(id,CHAN_ITEM,weapon_sound[20])
g_check[id] = 6
set_pdata_float(iEnt, 46, 1.03,4)
set_pdata_float(iEnt, 47, 1.03,4)
set_pdata_float(iEnt, 48, 1.03,4)
set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
DPS_Special(id, 0, 2.0)
}
}
if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
{
set_pdata_float(iEnt, 46, 11.36,4)
set_pdata_float(iEnt, 47, 11.36,4)
set_pdata_float(iEnt, 48, 11.36,4)
g_check[id] = 7
set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
Set_WeaponAnim(id, 15)
}
// NANI?!
if(g_check[id] == 7 && fSound && fSound < get_gametime())
{
SendSound(id,CHAN_VOICE,weapon_sound[14])
set_pev(iEnt, pev_fuser1, 0.0)
g_check[id] = 0
DPS_Special(id, 1, 1.46)
}
DPS_RealSpecial(id, iEnt, fRange)
if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
{
g_mode[id] = 0
g_slashend[id] = 0
set_pev(iEnt, pev_iuser2, 1)
set_pev(iEnt, pev_iuser4, 0)
switch(iState)
{
case 0:
{
set_pdata_float(id, 83, 0.16)
set_pdata_float(iEnt, 46, 0.4,4);
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 47, 0.4,4);
set_pdata_float(iEnt, 48, 1.0,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_iuser3, 1)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
Set_WeaponAnim(id, ANIM_STAB1)
SendSound(id, CHAN_WEAPON, weapon_sound[0])
if(!g_check[id]) g_check[id] = 1
else if(g_check[id] == 2) g_check[id] = 3
else g_check[id] = 0
}
case 1:
{
set_pdata_float(id, 83, 0.16)
set_pdata_float(iEnt, 46, 0.83,4);
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 47, 0.83,4);
set_pdata_float(iEnt, 48, 1.5,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
Set_WeaponAnim(id, ANIM_STAB2)
SendSound(id, CHAN_WEAPON, weapon_sound[1])
if(g_check[id] == 3) g_check[id] = 4
else g_check[id] = 0
}
}
}
if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
{
g_mode[id] = 1
set_pdata_float(id, 83, 0.04)
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 46, 0.13,4);
set_pdata_float(iEnt, 47, 0.13,4);
set_pdata_float(iEnt, 48, 0.5,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_iuser2, 0)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_iuser4, 1)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
Set_WeaponAnim(id, ANIM_SLASH1)
SendSound(id, CHAN_WEAPON, weapon_sound[5])
Create_Slash(id,iEnt,0)
if(g_check[id] == 1) g_check[id] = 2
else if(g_check[id] == 4) g_check[id] = 5
else g_check[id] = 0
}
iButton &= ~IN_ATTACK;
iButton &= ~IN_ATTACK2;
set_pev(id, pev_button, iButton);
return HAM_IGNORED
}
stock Create_Slash(id,iEnt,seq)
{
new Float:vecOrigin[3], Float:vecAngle[3];
GetGunPosition(id, vecOrigin);
pev(id, pev_v_angle, vecAngle);
vecAngle[0] = -vecAngle[0];
new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
// Set info for ent
Set_Entity_Mode(pEntity, 0)
set_pev(pEntity, pev_scale, 0.1);
set_pev(pEntity, pev_iuser1, iEnt);
set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
set_pev(pEntity, pev_angles, vecAngle);
set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}
stock DPS_Special(id, seq, Float:fTime)
{
new Float:VecOrig[3], Float:VecAng[3]
pev(id, pev_origin, VecOrig)
pev(id, pev_angles, VecAng)
new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
set_pev(iEfx, pev_classname, "dps_entytyd");
set_pev(iEfx, pev_origin, VecOrig)
set_pev(iEfx, pev_frame, 0.0)
set_pev(iEfx, pev_animtime, get_gametime())
set_pev(iEfx, pev_framerate, 1.0)
set_pev(iEfx, pev_sequence, seq)
engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
dllfunc(DLLFunc_Spawn, iEfx)
Set_Entity_Mode(iEfx, 1)
set_pev(iEfx, pev_angles, VecAng)
set_pev(iEfx, pev_solid, SOLID_NOT)
set_pev(iEfx, pev_owner, id)
set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
}
stock DPS_RealSpecial(id, iEnt, Float:fRange)
{
new Float:fTimeEffect;
pev(iEnt, pev_fuser4, fTimeEffect);
if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
{
KnifeAttack_Global(id, false, get_pcvar_float(cvar_special_range)*2.0, 180.0, get_pcvar_float(cvar_damage_special), get_pcvar_float(cvar_knockback[2]))
new Float:vecOrigin3[2][3], Float:vecOrigin[3];
pev(id, pev_origin, vecOrigin3[0]);
pev(id, pev_origin, vecOrigin);
xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
switch (random(3))
{
case 0:
{
vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
}
case 1:
{
vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
}
case 2:
{
vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
}
case 3:
{
vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
}
}
if (random_num(0,9) > 8)
{
new Float:vecAngle2[3];
vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)
set_pev(pEntity, pev_angles, vecAngle2);
set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
set_pev(pEntity, pev_iuser1, 1);
set_pev(pEntity, pev_iuser2, iEnt);
set_pev(pEntity, pev_frame, 0.0);
Set_Entity_Mode(pEntity, 2)
set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
set_pev(pEntity, pev_oldorigin, vecOrigin);
set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}
new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)
set_pev(pEntity, pev_iuser1, 2);
set_pev(pEntity, pev_iuser2, iEnt);
Set_Entity_Mode(pEntity, 2)
set_pev(pEntity, pev_frame, 0.0);
set_pev(pEntity, pev_oldorigin, vecOrigin);
set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
}
}
stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
{
new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
// Set info for ent
set_pev(pEntity, pev_movetype, move);
set_pev(pEntity, pev_owner, id);
engfunc(EngFunc_SetModel, pEntity, models);
set_pev(pEntity, pev_classname, "dps_entytyd");
set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
set_pev(pEntity, pev_origin, Start);
set_pev(pEntity, pev_gravity, 0.01);
set_pev(pEntity, pev_solid, solid);
static Float:Velocity[3];
Stock_Get_Speed_Vector(Start, End, speed, Velocity);
set_pev(pEntity, pev_velocity, Velocity);
new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
vector_to_angle(Velocity, vecVAngle)
if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
set_pev(pEntity, pev_angles, vecVAngle);
set_pev(pEntity, pev_rendermode, kRenderTransAdd);
set_pev(pEntity, pev_renderamt, 255.0);
set_pev(pEntity, pev_sequence, seq)
set_pev(pEntity, pev_animtime, get_gametime());
set_pev(pEntity, pev_framerate, 1.0)
return pEntity;
}
stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)
stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
xs_vec_sub(origin2, origin1, new_velocity)
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
xs_vec_mul_scalar(new_velocity, num, new_velocity)
}
stock GetGunPosition(id, Float:vecSrc[3])
{
new Float:vecViewOfs[3];
pev(id, pev_origin, vecSrc);
pev(id, pev_view_ofs, vecViewOfs);
xs_vec_add(vecSrc, vecViewOfs, vecSrc);
}
stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
{
new iHitResult
if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)
return iHitResult
}
stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
{
new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
GetGunPosition(id, vecSrc);
pev(id, pev_v_angle, v_angle);
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
new tr = create_tr2();
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
new iHitResult = RESULT_HIT_NONE;
if (flFraction < 1.0)
{
new pEntity = get_tr2(tr, TR_pHit);
iHitResult = RESULT_HIT_WORLD;
if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
{
if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
flDamage *= 1.0;
iHitResult = RESULT_HIT_PLAYER;
}
if (pev_valid(pEntity))
{
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
if (iHitgroup != -1)
set_tr2(tr, TR_iHitgroup, iHitgroup);
ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
Stock_Fake_KnockBack(id, pEntity, flKnockBack)
if (IsAlive(pEntity))
{
free_tr2(tr);
return iHitResult;
}
}
}
free_tr2(tr);
return iHitResult;
}
stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
pev(id, pev_origin, vecOrigin);
new iHitResult = RESULT_HIT_NONE;
GetGunPosition(id, vecSrc);
pev(id, pev_v_angle, v_angle);
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
new tr = create_tr2();
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
new Float:EndPos2[3]
get_tr2(tr, TR_vecEndPos, EndPos2)
new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
iHitResult = RESULT_HIT_WORLD;
if(bStab) Stock_SakuraEffect(id, EndPos2)
}
new Float:vecEndZ = vecEnd[2];
new pEntity = -1;
while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
{
if (!pev_valid(pEntity))
continue;
if (id == pEntity)
continue;
if (!IsAlive(pEntity))
continue;
if (!CheckAngle(id, pEntity, fAngle))
continue;
GetGunPosition(id, vecSrc);
Stock_Get_Origin(pEntity, vecEnd);
vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);
xs_vec_sub(vecEnd, vecSrc, vecForward);
xs_vec_normalize(vecForward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
if (IsPlayer(pEntity) || IsHostage(pEntity))
{
iHitResult = RESULT_HIT_PLAYER;
if(bStab) Stock_SakuraEffect(id, vecEnd)
if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
flDamage *= 1.0;
}
if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
{
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
Stock_Fake_KnockBack(id, pEntity, flKnockBack)
}
}
free_tr2(tr);
}
return iHitResult;
}
stock Set_WeaponAnim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(anim)
write_byte(pev(id, pev_body))
message_end()
}
stock Stock_Set_Vis(iEnt, iVis = 1)
set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)
stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
{
static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
pev(ent, pev_origin, EntOrigin)
if(!mode)
{
distance_f = get_distance_f(EntOrigin, TargetOrigin)
fl_Time = distance_f / Speed
pev(ent, pev_velocity, fl_Velocity)
fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time
if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
} else {
static Float:fl_EntVelocity[3], Float:fl_Acc[3]
Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
for(new i =0; i<3; i++)
{
if(fl_Velocity[i] > fl_EntVelocity[i])
{
fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
fl_Acc[i] = floatmin(70.0, fl_Acc[i])
fl_EntVelocity[i] += fl_Acc[i]
}
else if(fl_Velocity[i] < fl_EntVelocity[i])
{
fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
fl_Acc[i] = floatmin(70.0, fl_Acc[i])
fl_EntVelocity[i] -= fl_Acc[i]
}
}
set_pev(ent, pev_velocity, fl_EntVelocity)
}
}
stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
{
new Float:v3[3],i
for(i=0;i<3;i++) v3[i]=start[i]-end[i]
new Float:vl = vector_length(v3)
for(i=0;i<3;i++) reOri[i] = v3[i] / vl
}
stock Stock_Get_Postion(id,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(id, pev_origin, vOrigin)
pev(id, pev_view_ofs,vUp)
xs_vec_add(vOrigin,vUp,vOrigin)
pev(id, pev_v_angle, vAngle)
engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, 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 IsPlayer(pEntity) return is_user_connected(pEntity)
stock IsHostage(pEntity)
{
new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
return equal(classname, "hostage_entity")
}
stock IsAlive(pEntity)
{
if (pEntity < 1) return 0
return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}
stock CheckBack(iEnemy,id)
{
new Float:anglea[3], Float:anglev[3]
pev(iEnemy, pev_v_angle, anglea)
pev(id, pev_v_angle, anglev)
new Float:angle = anglea[1] - anglev[1]
if (angle < -180.0) angle += 360.0
if (angle <= 45.0 && angle >= -45.0) return 1
return 0
}
stock CheckAngle(iAttacker, iVictim, Float:fAngle) return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))
stock Float:Stock_CheckAngle(id,iTarget)
{
new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
Stock_Get_Origin(id, vId_ori)
Stock_Get_Origin(iTarget, vTar_ori)
pev(id,pev_angles,vId_ang)
for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
if (fLength<=0.0)
{
vOricross[0]=0.0
vOricross[1]=0.0
} else {
vOricross[0]=vOricross[0]*(1.0/fLength)
vOricross[1]=vOricross[1]*(1.0/fLength)
}
engfunc(EngFunc_MakeVectors,vId_ang)
global_get(glb_v_forward,vForward)
fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
return fRad //-> RAD 90' = 0.5rad
}
stock Stock_Get_Origin(id, Float:origin[3])
{
new Float:maxs[3],Float:mins[3]
if (pev(id, pev_solid) == SOLID_BSP)
{
pev(id,pev_maxs,maxs)
pev(id,pev_mins,mins)
origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
} else pev(id, pev_origin, origin)
}
public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
if(iVic > 32) return
new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
pev(id, pev_origin, vAttacker)
pev(iVic, pev_origin, vVictim)
vAttacker[2] = vVictim[2] = 0.0
flags = pev(id, pev_flags)
xs_vec_sub(vVictim, vAttacker, vVictim)
new Float:fDistance
fDistance = xs_vec_len(vVictim)
xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
pev(iVic, pev_velocity, vVelocity)
xs_vec_mul_scalar(vVictim, iKb, vVictim)
xs_vec_mul_scalar(vVictim, 50.0, vVictim)
vVictim[2] = xs_vec_len(vVictim) * 0.15
if(flags &~ FL_ONGROUND)
{
xs_vec_mul_scalar(vVictim, 1.2, vVictim)
vVictim[2] *= 0.4
}
if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}
stock Float:Stock_Get_Body_Dmg(iBody)
{
switch (iBody)
{
case HIT_GENERIC: return 0.75
case 1: return 4.0
case 2: return 1.0
case 3: return 1.25
case 4,5,6,7: return 0.75
default: return 0.75
}
return 1.0
}
stock Stock_SakuraEffect(id, Float:vecOri[3])
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
write_byte(TE_BLOODSPRITE)
engfunc(EngFunc_WriteCoord,vecOri[0])
engfunc(EngFunc_WriteCoord,vecOri[1])
engfunc(EngFunc_WriteCoord,vecOri[2])
write_short(ef_sakura[g_mode[id]?2:0])
write_short(ef_sakura[g_mode[id]?3:1])
write_byte(g_mode[id]?178:128)
write_byte(random_num(2,3))
message_end()
}
stock can_damage(id1, id2)
{
if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
return 1
// Check team
return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
}
stock client_printcolor(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^x04"); // Green Color
replace_all(msg, 190, "!n", "^x01"); // Default Color
replace_all(msg, 190, "!t", "^x03"); // Team Color
if(id)
players[0] = id;
else
get_players(players, count, "ch");
for (new i = 0; i < count; i++)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
|
|