
Стаж: 13 лет
Сообщений: 335
Благодарностей: 13
Полезность: < 0
|
SISA,спасибо большое, и можешь сказать есть две версии оружие dual infinity, можешь сказать который лучше поставить чтоб была минимум нагрузки 32/32, Код:
#include <amxmodx> #include <engine> #include <fakemeta> #include <fun> #include <hamsandwich> #include <xs> #include <cstrike> //#include <la2a>
#define ENG_NULLENT -1 #define EV_INT_WEAPONKEY EV_INT_impulse #define infiex2_WEAPONKEY 308 #define MAX_PLAYERS 32 #define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
const USE_STOPPED = 0 const OFFSET_ACTIVE_ITEM = 373 const OFFSET_WEAPONOWNER = 41 const OFFSET_LINUX = 5 const OFFSET_LINUX_WEAPONS = 4
#define WEAP_LINUX_XTRA_OFF 4 #define m_pPlayer 41 #define m_iId 43 #define m_fKnown 44 #define m_flNextPrimaryAttack 46 #define m_flNextSecondaryAttack 47 #define m_flTimeWeaponIdle 48 #define m_iClip 51 #define m_fInReload 54 #define PLAYER_LINUX_XTRA_OFF 5 #define m_flNextAttack 83
#define infiex2_DRAW_TIME 1.0 #define infiex2_RELOAD_TIME 4.5
#define infiex2_SHOOT_RIGHT 1 #define infiex2_SHOOT_RIGHTLAST 2 #define infiex2_SHOOT_LEFT 3 #define infiex2_SHOOT_LEFTLAST 4 #define infiex2_SP_SHOOT_RIGHT1 5 #define infiex2_SP_SHOOT_RIGHT2 6 #define infiex2_SP_SHOOT_LEFT1 7 #define infiex2_SP_SHOOT_LEFT2 8 #define infiex2_SP_SHOOT_LAST 9 #define infiex2_RELOAD 10 #define infiex2_DRAW 11
#define UP_SCALE -6.0 //ВВЕРХ #define FORWARD_SCALE 9.0 //ВПЕРЕД #define RIGHT_SCALE 4.5 //ВПРАВО #define LEFT_SCALE -4.5 //ВЛЕВО
#define UP_SCALE_MODE -6.0 //ВВЕРХ #define FORWARD_SCALE_MODE 8.5 //ВПЕРЕД #define RIGHT_SCALE_MODE 3.2 //ВПРАВО #define LEFT_SCALE_MODE -3.2 //ВЛЕВО
#define TE_BOUNCE_SHELL 1
#define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)
//new g_itemid new const Fire_Sounds_infiex2[][] = { "JCTF_ITEMS/infi-1.wav" } new const Sounds_infiex2[][] = { "JCTF_ITEMS/infi_clipin.wav" , "JCTF_ITEMS/infi_clipon.wav" , "JCTF_ITEMS/infi_clipout.wav" , "JCTF_ITEMS/infi_draw.wav" }
new infiex2_V_MODEL[64] = "models/JCTF_ITEMS/v_infinityex2_01.mdl" new infiex2_P_MODEL[64] = "models/JCTF_ITEMS/p_infinityex2.mdl" new infiex2_W_MODEL[64] = "models/JCTF_ITEMS/w_infinityex2.mdl"
#define infiex2_Body 0
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
new const infiex2_name[] = "weapon_infiex2_lars"
new const infiex2_spr[][] = { "sprites/JCTF_ITEMS/640hud43.spr", "sprites/JCTF_ITEMS/640hud42.spr", "sprites/JCTF_ITEMS/640hud7.spr" }
new cvar_dmg_infiex2, cvar_recoil_infiex2, cvar_clip_infiex2, cvar_spd_infiex2, cvar_infiex2_ammo, cvar_dmg_mode_infiex2, cvar_spd_mode_infiex2, cvar_recoil_mode_infiex2 new g_MaxPlayers, g_orig_event_infiex2, g_orig_event_infiex3, g_IsInPrimaryAttack, g_iClip new Float:cl_pushangle[MAX_PLAYERS + 1][3] new g_has_infiex2[33], g_clip_ammo[33], g_infiex2_TmpClip[33], oldweap[33] new g_hamczbots, cvar_botquota new g_mode[33] new gmsgWeaponList new g_iShellModel
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_deagle", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90" }
public plugin_init() { register_plugin("[ZP] Extra: Dual Infinity EX2", "1.0", "LARS-BLOODLIKER") register_message(get_user_msgid("DeathMsg"), "message_DeathMsg") register_event("CurWeapon","CurrentWeapon","be","1=1") RegisterHam(Ham_Item_AddToPlayer, "weapon_elite", "fw_infiex2_AddToPlayer") RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1) RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1) RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1) RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1) for (new i = 1; i < sizeof WEAPONENTNAMES; i++) if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1) RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_elite", "fw_infiex2_PrimaryAttack") RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_elite", "fw_infiex2_PrimaryAttack_Post", 1) RegisterHam(Ham_Item_PostFrame, "weapon_elite", "infiex2_ItemPostFrame") RegisterHam(Ham_Weapon_Reload, "weapon_elite", "infiex2_Reload") RegisterHam(Ham_Weapon_Reload, "weapon_elite", "infiex2_Reload_Post", 1) RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_forward(FM_PlaybackEvent, "fwPlaybackEvent") register_forward(FM_CmdStart, "fw_CmdStart") RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1) RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1) RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1) RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1) RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1) RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1) RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
cvar_clip_infiex2 = register_cvar("zp_infiex2_clip", "40") cvar_infiex2_ammo = register_cvar("zp_infiex2_ammo", "200") cvar_dmg_infiex2 = register_cvar("zp_infiex2_dmg", "1.3") cvar_dmg_mode_infiex2 = register_cvar("zp_infiex2_mode_dmg", "1.2") cvar_recoil_infiex2 = register_cvar("zp_infiex2_recoil", "0.8") cvar_recoil_mode_infiex2 = register_cvar("zp_infiex2_mode_recoil", "0.35") cvar_spd_infiex2 = register_cvar("zp_infiex2_spd", "1.18") cvar_spd_mode_infiex2 = register_cvar("zp_infiex2_mode_spd", "1.25") //g_itemid = la2a_register_item("Dual Infinity", 0, "Qula", TEAM_ALL) //register_clcmd("dual", "give_infiex2") g_MaxPlayers = get_maxplayers() cvar_botquota = get_cvar_pointer("bot_quota") gmsgWeaponList = get_user_msgid("WeaponList") register_clcmd(infiex2_name, "command_infiex2") } /* public la2a_item_selected(id, itemid) { if(itemid != g_itemid) return PLUGIN_CONTINUE give_infiex2(id) return PLUGIN_CONTINUE } */ public plugin_precache() { precache_model(infiex2_V_MODEL) precache_model(infiex2_P_MODEL) precache_model(infiex2_W_MODEL)
for(new i = 0; i < sizeof Fire_Sounds_infiex2; i++) precache_sound(Fire_Sounds_infiex2[i])
for(new i = 0; i < sizeof Sounds_infiex2; i++) precache_sound(Sounds_infiex2[i])
g_iShellModel = precache_model("models/pshell.mdl")
register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
new sFile[64] formatex(sFile, charsmax(sFile), "sprites/%s.txt", infiex2_name) precache_generic(sFile) for(new i = 0; i < sizeof(infiex2_spr); i++) { precache_generic(infiex2_spr[i]) } }
public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType) { if(!is_user_alive(iAttacker)) return
new g_currentweapon = get_user_weapon(iAttacker)
if(g_currentweapon != CSW_ELITE) return if(!g_has_infiex2[iAttacker]) return
static Float:flEnd[3] get_tr2(ptr, TR_vecEndPos, flEnd) if(iEnt) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_DECAL) write_coord_f(flEnd[0]) write_coord_f(flEnd[1]) write_coord_f(flEnd[2]) write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)]) write_short(iEnt) message_end() } else { message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) write_coord_f(flEnd[0]) write_coord_f(flEnd[1]) write_coord_f(flEnd[2]) write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)]) message_end() } message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) write_coord_f(flEnd[0]) write_coord_f(flEnd[1]) write_coord_f(flEnd[2]) write_short(iAttacker) write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)]) message_end() }
public register_ham_czbots(Player) { if(g_hamczbots || !is_user_connected(Player) || !get_pcvar_num(cvar_botquota)) return RegisterHamFromEntity(Ham_TakeDamage, Player, "fw_TakeDamage") g_hamczbots = true }
public client_putinserver(Player) { if(is_user_bot(Player) && !g_hamczbots && cvar_botquota) set_task(0.1, "register_ham_czbots", Player) }
public command_infiex2(Player) { engclient_cmd(Player, "weapon_elite") return PLUGIN_HANDLED }
public zp_user_humanized_post(id) { g_has_infiex2[id] = false }
public plugin_natives () { register_native("give_weapon_infiex2", "native_give_weapon_add", 1) register_native("get_weapon_infiex2", "native_get_weapon_add", 1) } public native_give_weapon_add(id) { give_infiex2(id) } public native_get_weapon_add(id) { return g_has_infiex2[id] }
public fwPrecacheEvent_Post(type, const name[]) { if(equal("events/elite_right.sc", name)) { g_orig_event_infiex2 = get_orig_retval() return FMRES_HANDLED } else if(equal("events/elite_left.sc", name)) { g_orig_event_infiex3 = get_orig_retval() return FMRES_HANDLED } return FMRES_IGNORED }
public client_connect(id) { g_has_infiex2[id] = false g_mode[id] = 0 }
public client_disconnect(id) { g_has_infiex2[id] = false g_mode[id] = 0 }
public fw_SetModel(entity, model[]) { if(!is_valid_ent(entity)) return FMRES_IGNORED static szClassName[33] entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName)) if(!equal(szClassName, "weaponbox")) return FMRES_IGNORED static iOwner iOwner = entity_get_edict(entity, EV_ENT_owner) if(equal(model, "models/w_elite.mdl")) { static iStoredAugID iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_elite", entity) if(!is_valid_ent(iStoredAugID)) return FMRES_IGNORED if(g_has_infiex2[iOwner]) { entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, infiex2_WEAPONKEY)
g_has_infiex2[iOwner] = false
entity_set_model(entity, infiex2_W_MODEL)
set_pev(entity, pev_body, infiex2_Body) return FMRES_SUPERCEDE } } return FMRES_IGNORED }
public give_infiex2(id) { drop_weapons(id, 2) new iWep2 = give_item(id,"weapon_elite") if(iWep2 > 0) { g_mode[id] = 0 cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_infiex2)) cs_set_user_bpammo (id, CSW_ELITE, get_pcvar_num(cvar_infiex2_ammo)) UTIL_PlayWeaponAnimation(id, infiex2_DRAW) set_pdata_float(id, m_flNextAttack, infiex2_DRAW_TIME, OFFSET_LINUX)
message_begin(MSG_ONE, gmsgWeaponList, _, id) write_string(infiex2_name) write_byte(10) write_byte(120) write_byte(-1) write_byte(-1) write_byte(1) write_byte(5) write_byte(CSW_ELITE) message_end() } g_has_infiex2[id] = true }
public fw_infiex2_AddToPlayer(infiex2, id) { if(!is_valid_ent(infiex2) || !is_user_connected(id)) return HAM_IGNORED if(entity_get_int(infiex2, EV_INT_WEAPONKEY) == infiex2_WEAPONKEY) { g_has_infiex2[id] = true g_mode[id] = 0 entity_set_int(infiex2, EV_INT_WEAPONKEY, 0)
message_begin(MSG_ONE, gmsgWeaponList, _, id) write_string(infiex2_name) write_byte(10) write_byte(120) write_byte(-1) write_byte(-1) write_byte(1) write_byte(5) write_byte(CSW_ELITE) message_end()
return HAM_HANDLED } else { message_begin(MSG_ONE, gmsgWeaponList, _, id) write_string("weapon_elite") write_byte(10) write_byte(120) write_byte(-1) write_byte(-1) write_byte(1) write_byte(5) write_byte(CSW_ELITE) message_end() } return HAM_IGNORED }
public fw_UseStationary_Post(entity, caller, activator, use_type) { if(use_type == USE_STOPPED && is_user_connected(caller)) replace_weapon_models(caller, get_user_weapon(caller)) }
public fw_Item_Deploy_Post(weapon_ent) { static owner owner = fm_cs_get_weapon_ent_owner(weapon_ent) static weaponid weaponid = cs_get_weapon_id(weapon_ent) replace_weapon_models(owner, weaponid) }
public CurrentWeapon(id) { replace_weapon_models(id, read_data(2))
if(read_data(2) != CSW_ELITE || !g_has_infiex2[id]) return static Float:iSpeed
if(g_mode[id] == 1) iSpeed = get_pcvar_float(cvar_spd_mode_infiex2) else iSpeed = get_pcvar_float(cvar_spd_infiex2)
static weapon[32],Ent get_weaponname(read_data(2),weapon,31) Ent = find_ent_by_owner(-1,weapon,id) if(Ent) { static Float:Delay, Float:M_Delay Delay = get_pdata_float(Ent, 46, 4) * iSpeed M_Delay = get_pdata_float(Ent, 47, 4) * iSpeed if(Delay > 0.0) { set_pdata_float(Ent, 46, Delay, 4) set_pdata_float(Ent, 47, M_Delay, 4) } } }
replace_weapon_models(id, weaponid) { switch(weaponid) { case CSW_ELITE: { if(g_has_infiex2[id]) { set_pev(id, pev_viewmodel2, infiex2_V_MODEL) set_pev(id, pev_weaponmodel2, infiex2_P_MODEL) if(oldweap[id] != CSW_ELITE) { UTIL_PlayWeaponAnimation (id, infiex2_DRAW) set_pdata_float(id, m_flNextAttack, infiex2_DRAW_TIME, OFFSET_LINUX)
message_begin(MSG_ONE, gmsgWeaponList, _, id) write_string(infiex2_name) write_byte(10) write_byte(120) write_byte(-1) write_byte(-1) write_byte(1) write_byte(5) write_byte(CSW_ELITE) message_end() } } } } oldweap[id] = weaponid }
public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle) { if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_ELITE || !g_has_infiex2[Player])) return FMRES_IGNORED set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001) return FMRES_HANDLED }
public fw_infiex2_PrimaryAttack(Weapon) { new Player = get_pdata_cbase(Weapon, 41, 4) if(!g_has_infiex2[Player]) return g_IsInPrimaryAttack = 1 pev(Player,pev_punchangle,cl_pushangle[Player]) g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon) g_iClip = cs_get_weapon_ammo(Weapon) }
public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) { if((eventid != g_orig_event_infiex2 && eventid != g_orig_event_infiex3) || !g_IsInPrimaryAttack) return FMRES_IGNORED if(!(1 <= invoker <= g_MaxPlayers)) return FMRES_IGNORED
playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2) return FMRES_SUPERCEDE }
public fw_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id) || (get_user_weapon(id) != CSW_ELITE || !g_has_infiex2[id])) return FMRES_IGNORED if(get_pdata_float(id, m_flNextAttack, OFFSET_LINUX) > 0.0) return FMRES_IGNORED if(get_user_weapon(id) == CSW_ELITE && g_has_infiex2[id]) { new iButtons = get_uc(uc_handle, UC_Buttons) //new entity = find_ent_by_owner(-1, "weapon_elite", id) new entity = get_pdata_cbase(id, OFFSET_ACTIVE_ITEM) if(!pev_valid(entity)) return FMRES_IGNORED
if((iButtons & IN_ATTACK2) && !(iButtons & IN_ATTACK)) {
if(get_pdata_float(entity, m_flNextSecondaryAttack, WEAP_LINUX_XTRA_OFF) <= 0.0) { if(cs_get_weapon_ammo(entity) <= 0) return FMRES_IGNORED g_mode[id] = 1 ExecuteHamB(Ham_Weapon_PrimaryAttack, entity) } } else if((iButtons & IN_ATTACK) && !(iButtons & IN_ATTACK2)) { if(get_pdata_float(entity, m_flNextSecondaryAttack, WEAP_LINUX_XTRA_OFF) <= 0.0) { if(cs_get_weapon_ammo(entity) <= 0) return FMRES_IGNORED g_mode[id] = 0 } } } return FMRES_HANDLED }
public fw_infiex2_PrimaryAttack_Post(Weapon) { g_IsInPrimaryAttack = 0 new Player = get_pdata_cbase(Weapon, 41, 4) if(!is_user_alive(Player)) return
new szClip, szAmmo get_user_weapon(Player, szClip, szAmmo)
if(g_iClip <= cs_get_weapon_ammo(Weapon)) return
if(g_has_infiex2[Player]) { if(!g_clip_ammo[Player]) return
new Float:push[3]
pev(Player,pev_punchangle,push) xs_vec_sub(push,cl_pushangle[Player],push)
if(g_mode[Player] == 1) xs_vec_mul_scalar(push , get_pcvar_float(cvar_recoil_mode_infiex2), push) else xs_vec_mul_scalar(push , get_pcvar_float(cvar_recoil_infiex2), push)
xs_vec_add(push,cl_pushangle[Player],push) set_pev(Player,pev_punchangle,push)
if(g_mode[Player] == 1) { new num num = random_num(1,2)
static Float:vVel[3], Float:vAngle[3], Float:vOrigin[3], Float:vViewOfs[3], i, Float:vShellOrigin[3], Float:vShellVelocity[3], Float:vRight[3], Float:vUp[3], Float:vForward[3] pev(Player, pev_velocity, vVel) pev(Player, pev_view_ofs, vViewOfs) pev(Player, pev_angles, vAngle) pev(Player, pev_origin, vOrigin) global_get(glb_v_right, vRight) global_get(glb_v_up, vUp) global_get(glb_v_forward, vForward)
if(num == 1) { for(i = 0; i<3; i++) { vShellOrigin[i] = vOrigin[i] + vViewOfs[i] + vUp[i] * UP_SCALE_MODE + vForward[i] * FORWARD_SCALE_MODE + vRight[i] * LEFT_SCALE_MODE vShellVelocity[i] = vVel[i] + vRight[i] * random_float(-50.0, -70.0) + vUp[i] * random_float(100.0, 150.0) + vForward[i] * 25.0 } CBaseWeapon__EjectBrass(vShellOrigin, vShellVelocity, -vAngle[1], g_iShellModel, TE_BOUNCE_SHELL)
//UTIL_PlayWeaponAnimation(Player, random_num(infiex2_SP_SHOOT_LEFT1, infiex2_SP_SHOOT_LEFT2)) UTIL_PlayWeaponAnimation(Player, infiex2_SP_SHOOT_LEFT1) } if(num == 2) { for(i = 0; i<3; i++) { vShellOrigin[i] = vOrigin[i] + vViewOfs[i] + vUp[i] * UP_SCALE_MODE + vForward[i] * FORWARD_SCALE_MODE + vRight[i] * RIGHT_SCALE_MODE vShellVelocity[i] = vVel[i] + vRight[i] * random_float(50.0, 70.0) + vUp[i] * random_float(100.0, 150.0) + vForward[i] * 25.0 } CBaseWeapon__EjectBrass(vShellOrigin, vShellVelocity, -vAngle[1], g_iShellModel, TE_BOUNCE_SHELL)
//UTIL_PlayWeaponAnimation(Player, szClip < 1 ? infiex2_SP_SHOOT_LAST : random_num(infiex2_SP_SHOOT_RIGHT1, infiex2_SP_SHOOT_RIGHT2)) UTIL_PlayWeaponAnimation(Player, szClip < 1 ? infiex2_SP_SHOOT_LAST : infiex2_SP_SHOOT_RIGHT1) } } else { new num num = random_num(1,2)
static Float:vVel[3], Float:vAngle[3], Float:vOrigin[3], Float:vViewOfs[3], i, Float:vShellOrigin[3], Float:vShellVelocity[3], Float:vRight[3], Float:vUp[3], Float:vForward[3] pev(Player, pev_velocity, vVel) pev(Player, pev_view_ofs, vViewOfs) pev(Player, pev_angles, vAngle) pev(Player, pev_origin, vOrigin) global_get(glb_v_right, vRight) global_get(glb_v_up, vUp) global_get(glb_v_forward, vForward)
if(num == 1) { for(i = 0; i<3; i++) { vShellOrigin[i] = vOrigin[i] + vViewOfs[i] + vUp[i] * UP_SCALE + vForward[i] * FORWARD_SCALE + vRight[i] * LEFT_SCALE vShellVelocity[i] = vVel[i] + vRight[i] * random_float(-50.0, -70.0) + vUp[i] * random_float(100.0, 150.0) + vForward[i] * 25.0 } CBaseWeapon__EjectBrass(vShellOrigin, vShellVelocity, -vAngle[1], g_iShellModel, TE_BOUNCE_SHELL)
UTIL_PlayWeaponAnimation(Player, szClip < 1 ? infiex2_SHOOT_LEFTLAST : infiex2_SHOOT_LEFT)
} if(num == 2) { for(i = 0; i<3; i++) { vShellOrigin[i] = vOrigin[i] + vViewOfs[i] + vUp[i] * UP_SCALE + vForward[i] * FORWARD_SCALE + vRight[i] * RIGHT_SCALE vShellVelocity[i] = vVel[i] + vRight[i] * random_float(50.0, 70.0) + vUp[i] * random_float(100.0, 150.0) + vForward[i] * 25.0 } CBaseWeapon__EjectBrass(vShellOrigin, vShellVelocity, -vAngle[1], g_iShellModel, TE_BOUNCE_SHELL)
UTIL_PlayWeaponAnimation(Player, szClip < 1 ? infiex2_SHOOT_RIGHTLAST : infiex2_SHOOT_RIGHT) } } emit_sound(Player, CHAN_WEAPON, Fire_Sounds_infiex2[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) } }
public fw_TakeDamage(victim, inflictor, attacker, Float:damage) { if(victim != attacker && is_user_connected(attacker)) { if(get_user_weapon(attacker) == CSW_ELITE) { if(g_has_infiex2[attacker]) { if(g_mode[attacker] == 1) SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_mode_infiex2)) else SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_infiex2)) } } } }
public message_DeathMsg(msg_id, msg_dest, id) { static szTruncatedWeapon[33], iAttacker, iVictim get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon)) iAttacker = get_msg_arg_int(1) iVictim = get_msg_arg_int(2) if(!is_user_connected(iAttacker) || iAttacker == iVictim) return PLUGIN_CONTINUE if(equal(szTruncatedWeapon, "elite") && get_user_weapon(iAttacker) == CSW_ELITE) { if(g_has_infiex2[iAttacker]) set_msg_arg_string(4, "elite") } return PLUGIN_CONTINUE }
stock fm_cs_get_current_weapon_ent(id) { return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX) }
stock fm_cs_get_weapon_ent_owner(ent) { return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS) }
stock UTIL_PlayWeaponAnimation(const Player, const Sequence) { set_pev(Player, pev_weaponanim, Sequence) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player) write_byte(Sequence) write_byte(pev(Player, pev_body)) message_end() }
public infiex2_ItemPostFrame(weapon_entity) { new id = pev(weapon_entity, pev_owner) if(!is_user_connected(id)) return HAM_IGNORED
if(!g_has_infiex2[id]) return HAM_IGNORED
static iClipExtra iClipExtra = get_pcvar_num(cvar_clip_infiex2) new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
new iBpAmmo = cs_get_user_bpammo(id, CSW_ELITE) new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
if(fInReload && flNextAttack <= 0.0) { new j = min(iClipExtra - iClip, iBpAmmo) set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF) cs_set_user_bpammo(id, CSW_ELITE, iBpAmmo-j) set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF) fInReload = 0 } return HAM_IGNORED }
public infiex2_Reload(weapon_entity) { new id = pev(weapon_entity, pev_owner) if(!is_user_connected(id)) return HAM_IGNORED
if(!g_has_infiex2[id]) return HAM_IGNORED
static iClipExtra
if(g_has_infiex2[id]) iClipExtra = get_pcvar_num(cvar_clip_infiex2)
g_infiex2_TmpClip[id] = -1
new iBpAmmo = cs_get_user_bpammo(id, CSW_ELITE) new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
if(iBpAmmo <= 0) return HAM_SUPERCEDE
if(iClip >= iClipExtra) return HAM_SUPERCEDE
g_infiex2_TmpClip[id] = iClip
return HAM_IGNORED }
public infiex2_Reload_Post(weapon_entity) { new id = pev(weapon_entity, pev_owner) if(!is_user_connected(id)) return HAM_IGNORED
if(!g_has_infiex2[id]) return HAM_IGNORED
if(g_infiex2_TmpClip[id] == -1) return HAM_IGNORED
set_pdata_int(weapon_entity, m_iClip, g_infiex2_TmpClip[id], WEAP_LINUX_XTRA_OFF)
set_pdata_float(weapon_entity, m_flTimeWeaponIdle, infiex2_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
set_pdata_float(id, m_flNextAttack, infiex2_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
UTIL_PlayWeaponAnimation(id, infiex2_RELOAD)
set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
return HAM_IGNORED }
CBaseWeapon__EjectBrass(Float:vecOrigin[3], Float:vecVelocity[3], Float:rotation, model, soundtype) { engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0) write_byte(TE_MODEL) engfunc(EngFunc_WriteCoord, vecOrigin[0]) engfunc(EngFunc_WriteCoord, vecOrigin[1]) engfunc(EngFunc_WriteCoord, vecOrigin[2]) engfunc(EngFunc_WriteCoord, vecVelocity[0]) engfunc(EngFunc_WriteCoord, vecVelocity[1]) engfunc(EngFunc_WriteCoord, vecVelocity[2]) engfunc(EngFunc_WriteAngle, rotation) write_short(model) write_byte(soundtype) write_byte(25) // 2.5 seconds message_end() }
stock drop_weapons(id, dropwhat) { static weapons[32], num, i, weaponid num = 0 get_user_weapons(id, weapons, num) for(i = 0; i < num; i++) { weaponid = weapons[i] if(dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)) { static wname[32] get_weaponname(weaponid, wname, sizeof wname - 1) engclient_cmd(id, "drop", wname) } } } Код:
//========================================================================= #define CSW_WEAPON CSW_SG552 new const g_weapon_entity[]= "weapon_sg552" new const g_weaponbox_model[]= "models/w_sg552.mdl"
#define WEAPON_NAME "Gilboa Ex"
#define DAMAGE 30.0 #define RECOIL 0.5 #define RATE_OF_FIRE 0.1 #define CLIP 60 #define AMMO 90 #define TIME_RELOAD 2.4 #define ANIM_IDLE 0 #define ANIM_SHOOT_1 random_num(1,2) #define ANIM_RELOAD 3 #define ANIM_DRAW 4
#define BODY_NUMBER 0 new const MODELS[][]={ "models/csobc/v_gilboaex.mdl", "models/csobc/p_gilboaex.mdl", "models/csobc/w_gilboaex.mdl" } new const SOUNDS[][]= { "weapons/gilboaex-1.wav", "weapons/gilboaex_clipin1.wav", "weapons/gilboaex_clipin2.wav", "weapons/gilboaex_clipout.wav" } #define WEAPONLIST "csobc_gilboaex" new const SPRITES[][]= { "sprites/csobc/640hud7.spr", "sprites/csobc/640hud116.spr" } //========================================================================= #include <amxmodx> #include <engine> #include <xs> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <zp50_items> native zp_tattoo_get(id) new g_msgWeaponList,g_wpn_variables[10],g_iszWeaponKey,g_index_smoke,g_index_shell #define is_valid_weapon(%1) (pev_valid(%1)&&pev(%1, pev_impulse) == g_iszWeaponKey) public plugin_precache() { for(new i;i<=charsmax(MODELS);i++)precache_model(MODELS[i]) for(new i;i<=charsmax(SOUNDS);i++)precache_sound(SOUNDS[i]) for(new i;i<=charsmax(SPRITES);i++) precache_generic(SPRITES[i]) new tmp[32];formatex(tmp,charsmax(tmp),"sprites/%s.txt",WEAPONLIST) precache_generic(tmp) for(new i;i<=charsmax(SPRITES);i++)precache_generic(SPRITES[i]) g_index_smoke=precache_model("sprites/wall_puff1.spr") g_index_shell=precache_model("models/pshell.mdl") g_iszWeaponKey = engfunc(EngFunc_AllocString, WEAPON_NAME) register_clcmd(WEAPONLIST, "clcmd_weapon") register_message(78, "message_weaponlist") } public plugin_init() { register_forward(FM_SetModel, "fm_setmodel") register_forward(FM_UpdateClientData, "fm_updateclientdata_post", 1) register_forward(FM_PlaybackEvent, "fm_playbackevent") RegisterHam(Ham_Item_Deploy, g_weapon_entity, "ham_item_deploy_post",1) RegisterHam(Ham_Weapon_PrimaryAttack, g_weapon_entity, "ham_weapon_primaryattack") RegisterHam(Ham_Weapon_Reload, g_weapon_entity, "ham_weapon_reload") RegisterHam(Ham_Weapon_WeaponIdle, g_weapon_entity, "ham_weapon_idle") RegisterHam(Ham_Item_PostFrame, g_weapon_entity, "ham_item_postframe") RegisterHam(Ham_Item_AddToPlayer, g_weapon_entity, "ham_item_addtoplayer") RegisterHam(Ham_TraceAttack, "player", "ham_traceattack_post",1) RegisterHam(Ham_TraceAttack, "worldspawn", "ham_traceattack_post",1) RegisterHam(Ham_TraceAttack, "func_breakable", "ham_traceattack_post",1) g_msgWeaponList=get_user_msgid("WeaponList") g_iszWeaponKey=engfunc(EngFunc_AllocString, WEAPON_NAME) } public clcmd_weapon(id)engclient_cmd(id, g_weapon_entity) public message_weaponlist(msg_id,msg_dest,id)if(get_msg_arg_int(8)==CSW_WEAPON)for(new i=2;i<=9;i++)g_wpn_variables[i]=get_msg_arg_int(i) public fm_setmodel(model_entity,model[]){ if(!pev_valid(model_entity)||!equal(model,g_weaponbox_model))return FMRES_IGNORED static weap;weap=fm_find_ent_by_owner(-1,g_weapon_entity,model_entity) if(!is_valid_weapon(weap))return FMRES_IGNORED fm_entity_set_model(model_entity,MODELS[2]) set_pev(model_entity,pev_body,BODY_NUMBER) return FMRES_SUPERCEDE } public fm_updateclientdata_post(id,SendWeapons,CD_Handle){ if(!is_user_alive(id))return static weapon_ent; weapon_ent=get_pdata_cbase(id,373,5) if(is_valid_weapon(weapon_ent))set_cd(CD_Handle, CD_flNextAttack, get_gametime()+0.001) } public fm_playbackevent(flags,id){ if(!is_user_alive(id))return FMRES_IGNORED static weapon_ent;weapon_ent=get_pdata_cbase(id, 373, 5) if(!is_valid_weapon(weapon_ent))return FMRES_IGNORED return FMRES_SUPERCEDE } public ham_item_deploy_post(weapon_ent){ if(!is_valid_weapon(weapon_ent))return static id;id=get_pdata_cbase(weapon_ent,41,4) set_pev(id, pev_viewmodel2, MODELS[0]),set_pev(id, pev_weaponmodel2, MODELS[1]) play_weapon_animation(id, ANIM_DRAW) set_pdata_float(id, 83, 0.5, 5),set_pdata_float(weapon_ent, 48, 3.0, 4) } public ham_weapon_primaryattack(weapon_entity) { if(!is_valid_weapon(weapon_entity))return HAM_IGNORED if(get_pdata_float(weapon_entity,46,4)>0.0||!get_pdata_int(weapon_entity,51,4))return HAM_IGNORED static id; id = get_pdata_cbase(weapon_entity, 41, 4) static clip;clip=get_pdata_int(weapon_entity,51,4) ExecuteHam(Ham_Weapon_PrimaryAttack, weapon_entity) if(clip<=get_pdata_int(weapon_entity,51,4))return HAM_IGNORED emit_sound(id, CHAN_WEAPON, SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) play_weapon_animation(id, ANIM_SHOOT_1) set_pdata_float(weapon_entity,46,RATE_OF_FIRE,4) set_pdata_float(weapon_entity, 48, RATE_OF_FIRE+0.3, 4) set_pdata_int(weapon_entity, 64,get_pdata_int(weapon_entity, 64, 4)+1,4) set_pdata_int(weapon_entity,57,g_index_shell,4) set_pdata_float(id,111,get_gametime()) set_pdata_float(weapon_entity,62,RECOIL,4) return HAM_SUPERCEDE } public ham_weapon_reload(weapon_entity) { if(!is_valid_weapon(weapon_entity))return HAM_IGNORED static id; id = get_pdata_cbase(weapon_entity,41,4) static bpammo;bpammo=get_pdata_int(id,376+get_pdata_int(weapon_entity,49,4),5) static clip;clip=get_pdata_int(weapon_entity,51,4) if(!bpammo||clip==CLIP)return HAM_SUPERCEDE ExecuteHam(Ham_Weapon_Reload,weapon_entity) play_weapon_animation(id,ANIM_RELOAD) set_pdata_int(id,363,90,5) set_pdata_float(id,83,TIME_RELOAD,5) set_pdata_int(weapon_entity,54,1,4) return HAM_SUPERCEDE } public ham_weapon_idle(ent) { if(!is_valid_weapon(ent))return HAM_IGNORED static id; id = get_pdata_cbase(ent, 41, 4) if(get_pdata_float(ent, 48, 4)>0.0)return HAM_IGNORED play_weapon_animation(id, ANIM_IDLE) set_pdata_float(ent, 48, 5.0, 4) return HAM_SUPERCEDE } public ham_item_postframe(weapon_entity) { if(!is_valid_weapon(weapon_entity)) return static id; id = get_pdata_cbase(weapon_entity,41,4) if(get_pdata_int(weapon_entity, 54, 4)&&get_pdata_float(id, 83, 5)<=0.0){ static bpammo;bpammo=get_pdata_int(id, 376 + get_pdata_int(weapon_entity, 49, 4), 5) static clip;clip=get_pdata_int(weapon_entity, 51, 4) for(new i=clip; i<CLIP;i++)if(bpammo)bpammo--,clip++ set_pdata_int(weapon_entity,54,0,4) set_pdata_int(weapon_entity,51,clip,4) set_pdata_int(id,376+get_pdata_int(weapon_entity,49,4),bpammo,5) } } public ham_item_addtoplayer(weapon_entity,id)if(is_valid_weapon(weapon_entity))set_weap onlist(id,1) public ham_traceattack_post(pEntity,attacker,Float:flDamage,Float:direction[3],ptr,dama ge_type) { if(!is_user_connected(attacker)||!(damage_type&DMG_BULLET))return static weapon_entity;weapon_entity=get_pdata_cbase(attacker, 373, 5) if(!is_valid_weapon(weapon_entity))return new Float:vecEnd[3],Float:vecPlane[3] get_tr2(ptr,TR_vecEndPos,vecEnd) get_tr2(ptr,TR_vecPlaneNormal,vecPlane) xs_vec_mul_scalar(vecPlane,5.0,vecPlane) if(!is_user_alive(pEntity)){ message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) engfunc(EngFunc_WriteCoord,vecEnd[0]) engfunc(EngFunc_WriteCoord,vecEnd[1]) engfunc(EngFunc_WriteCoord,vecEnd[2]) write_short(pEntity) write_byte(random_num(41,45)) message_end() xs_vec_add(vecEnd,vecPlane,vecEnd) message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord,vecEnd[0]) engfunc(EngFunc_WriteCoord,vecEnd[1]) engfunc(EngFunc_WriteCoord,vecEnd[2]-10.0) write_short(g_index_smoke) write_byte(3) write_byte(50) write_byte(TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOPARTICLES) message_end() } } public zp_fw_items_select_post(id,itemid) { if(itemid!=g_itemid)return new Ent=give_weapon(id) set_pdata_int(id,376+get_pdata_int(Ent,49,4),AMMO,5) } public give_weapon(id){ new Float:Origin[3]; pev(id, pev_origin, Origin) new wName[32],iItem=get_pdata_cbase(id, 367+1, 5); while (pev_valid(iItem)==2)pev(iItem,pev_classname,wName,31),engclient_cmd(id,"drop",wName),iItem=get_pdata_cbase(iItem, 42, 4) new iWeapon=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,g_weapon_e ntity)) if(!pev_valid(iWeapon)) return 0 dllfunc(DLLFunc_Spawn, iWeapon) engfunc(EngFunc_SetOrigin, iWeapon, Origin) set_pev(iWeapon, pev_impulse, g_iszWeaponKey) set_pdata_int(iWeapon, 51, CLIP, 4) new save = pev(iWeapon,pev_solid) dllfunc(DLLFunc_Touch,iWeapon,id) if(pev(iWeapon, pev_solid)!=save)return iWeapon engfunc(EngFunc_RemoveEntity,iWeapon) return 0 } stock play_weapon_animation(id,sequence)message_begin(MSG_ONE,SVC_WEAPONANIM,_,id),wri te_byte(sequence),write_byte(zp_tattoo_get(id)),message_end() stock set_weaponlist(id,num=0){ message_begin(MSG_ONE,g_msgWeaponList,_,id) write_string(num?WEAPONLIST:g_weapon_entity) for(new i=2;i<=9;i++)write_byte(g_wpn_variables[i]) message_end() } forward damage_pre(id) native damage_set(id, Float:dmg) public damage_pre(attacker) { static weapon_ent; weapon_ent=get_pdata_cbase(attacker,373,5) if(is_valid_weapon(weapon_ent)) { damage_set(attacker, DAMAGE) return 1 } return 0 }
Отредактировал: soneekk, - 16.7.2016, 22:33
|