Solved cso skull 11 and vulcanus 7

Unpaid Requests, Public Plugins
Post Reply
czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

cso skull 11 and vulcanus 7

#1

Post by czirimbolo » 6 years ago

Hello,

can someone convert those guns to our zombie escape mod?
Attachments
vulkanus-7.rar
(1.66 MiB) Downloaded 357 times
vulkanus-7.rar
(1.66 MiB) Downloaded 357 times
CSO Skull-11.rar
(664.17 KiB) Downloaded 364 times
CSO Skull-11.rar
(664.17 KiB) Downloaded 364 times
Last edited by czirimbolo 6 years ago, edited 1 time in total.
Image

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#2

Post by johnnysins2000 » 6 years ago

czirimbolo wrote: 6 years ago Hello,

can someone convert thoase guns to our zombie escape mod?
OK I will convert them :) this Evening
Nobody Is That Busy If They Make Time :roll:

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#3

Post by czirimbolo » 6 years ago

Thanks ;)
Image

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#4

Post by johnnysins2000 » 6 years ago

Vulcanus 7
    1. //=========================================================================
    2. #define CSW_BALROG7     CSW_M249
    3. new const g_weapon_entity[]=    "weapon_m249"
    4. new const g_weaponbox_model[]=  "models/w_m249.mdl"
    5.  
    6. #define WEAPON_NAME     "Vulcanus-7"
    7. #define WEAPON_COST     0
    8. #define SLOT                1
    9.  
    10. #define DAMAGE          1.2
    11. #define RATE_OF_FIRE        0.1
    12. #define CLIP            120
    13. #define AMMO            200
    14. #define TIME_RELOAD     4.0
    15.  
    16. #define ANIM_IDLE       0
    17. #define ANIM_SHOOT_1        6
    18. #define ANIM_RELOAD     11
    19. #define ANIM_DRAW       13
    20.  
    21. #define BODY_NUMBER     0
    22. new const MODELS[][]={
    23.                 "models/xXx_kz/v_vulcanus7.mdl",
    24.                 "models/xXx_kz/p_vulcanus7a.mdl",
    25.                 "models/xXx_kz/w_vulcanus7a.mdl"
    26. }
    27. new const SOUNDS[][]= {
    28.                 "weapons/vulcanus7-1.wav",
    29.                 "weapons/vulcanus7-2.wav",
    30.                 "weapons/vulcanus_shootc1_change.wav",
    31.                 "weapons/vulcanus_reloada_1.wav",
    32.                 "weapons/vulcanus_reloada_2.wav",
    33.                 "weapons/vulcanus_reloada_3.wav"
    34. }
    35. #define WEAPONLIST      "unix_vulcanus7"
    36. new const SPRITES[][]=  {
    37.                 "sprites/xXx_kz/640hud7.spr",
    38.                 "sprites/xXx_kz/640hud129.spr"
    39. }
    40. new const GrenadeModel[]="models/grenade.mdl"
    41. //=========================================================================
    42. #include <zombie_escape>
    43. #include <xs>
    44. #include <fakemeta_util>
    45.  
    46. new g_msgWeaponList,g_wpn_variables[10],g_iszWeaponKey,g_index_smoke,g_index_shell, g_Beam_SprId
    47. new trail_spr, explode_spr, smoke_spr, g_iItemID
    48. new Blood[2]
    49. #define is_valid_weapon(%1) (pev_valid(%1)&&pev(%1, pev_impulse) == g_iszWeaponKey)
    50. #define M1_MODE     (1<<1)
    51. public plugin_precache() {
    52.         for(new i;i<=charsmax(MODELS);i++)precache_model(MODELS[i])
    53.         for(new i;i<=charsmax(SOUNDS);i++)precache_sound(SOUNDS[i])
    54.         for(new i;i<=charsmax(SPRITES);i++) precache_generic(SPRITES[i])
    55.         new tmp[32];formatex(tmp,charsmax(tmp),"sprites/%s.txt",WEAPONLIST)
    56.         precache_generic(tmp)
    57.         for(new i;i<=charsmax(SPRITES);i++)precache_generic(SPRITES[i])
    58.         g_index_smoke=precache_model("sprites/wall_puff1.spr")
    59.         g_index_shell=precache_model("models/rshell.mdl")
    60.         g_Beam_SprId =  engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr")
    61.         trail_spr=precache_model("sprites/shellchrome.spr")
    62.         explode_spr=precache_model("sprites/fexplo.spr")
    63.         smoke_spr=precache_model("sprites/black_smoke4.spr")   
    64.         Blood[0] = precache_model("sprites/bloodspray.spr")
    65.         Blood[1] = precache_model("sprites/blood.spr")
    66.         precache_model(GrenadeModel)
    67.         g_iszWeaponKey = engfunc(EngFunc_AllocString, WEAPON_NAME)
    68.         register_clcmd(WEAPONLIST, "clcmd_weapon")
    69.         register_message(78, "message_weaponlist")
    70. }
    71. public plugin_init() {
    72.         register_forward(FM_CmdStart, "fm_cmdstart")
    73.         g_iItemID = ze_register_item("Vulcanus", 25)
    74.         register_forward(FM_SetModel, "fm_setmodel")
    75.         register_forward(FM_UpdateClientData, "fm_updateclientdata_post", 1)
    76.         register_forward(FM_PlaybackEvent, "fm_playbackevent")
    77.         RegisterHam(Ham_Item_Deploy, g_weapon_entity, "ham_item_deploy_post",1)
    78.         RegisterHam(Ham_Weapon_PrimaryAttack, g_weapon_entity, "ham_weapon_primaryattack")
    79.         RegisterHam(Ham_Weapon_Reload, g_weapon_entity, "ham_weapon_reload")
    80.         RegisterHam(Ham_Weapon_WeaponIdle, g_weapon_entity, "ham_weapon_idle")
    81.         RegisterHam(Ham_Item_PostFrame, g_weapon_entity, "ham_item_postframe")
    82.         RegisterHam(Ham_Item_AddToPlayer, g_weapon_entity, "ham_item_addtoplayer")
    83.         RegisterHam(Ham_RemovePlayerItem, "player", "ham_player_removeitem")
    84.         RegisterHam(Ham_TraceAttack, "player", "ham_traceattack_post",1)
    85.         RegisterHam(Ham_TraceAttack, "worldspawn", "ham_traceattack_post",1)
    86.         RegisterHam(Ham_TraceAttack, "func_breakable", "ham_traceattack_post",1)
    87.         RegisterHam(Ham_TakeDamage, "player", "ham_takedamage")
    88.         RegisterHam(Ham_TakeDamage, "func_breakable", "ham_takedamage")
    89.         register_touch("vulcanus7_gr", "*", "fwTouch")
    90.         g_msgWeaponList=get_user_msgid("WeaponList")
    91.         g_iszWeaponKey=engfunc(EngFunc_AllocString, WEAPON_NAME)
    92. }
    93. public clcmd_weapon(id)engclient_cmd(id, g_weapon_entity)
    94. public message_weaponlist(msg_id,msg_dest,id)if(get_msg_arg_int(8)==CSW_BALROG7)for(new i=2;i<=9;i++)g_wpn_variables[i]=get_msg_arg_int(i)
    95. public fm_cmdstart(id,uc_handle,seed){
    96.     if(!is_user_alive(id))return
    97.     static weapon_ent;weapon_ent=get_pdata_cbase(id,373,5)
    98.     if(!is_valid_weapon(weapon_ent)) return
    99.     if((get_uc(uc_handle,UC_Buttons)&IN_ATTACK2)&&get_pdata_float(weapon_ent,46,4)<=0.0){
    100.         if(get_pdata_int(weapon_ent, 74, 4)&M1_MODE){
    101.             set_pdata_int(weapon_ent, 74, get_pdata_int(weapon_ent, 74, 4)&~M1_MODE, 4)
    102.             set_pdata_float(weapon_ent,46,0.5,4)
    103.             set_pdata_float(weapon_ent,47,0.5,4)
    104.             set_pdata_float(weapon_ent,48,2.0,4)
    105.             play_weapon_animation(id, ANIM_SHOOT_1+3)
    106.             emit_sound(id, CHAN_ITEM, SOUNDS[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    107.             GrenadeAttack(id)
    108.         }
    109.     }
    110. }
    111. public fm_setmodel(model_entity,model[]){
    112.     if(!pev_valid(model_entity))return FMRES_IGNORED           
    113.     if(!equal(model,g_weaponbox_model))return FMRES_IGNORED
    114.     static weap;weap=fm_find_ent_by_owner(-1,g_weapon_entity,model_entity) 
    115.     if(!is_valid_weapon(weap))return FMRES_IGNORED 
    116.     fm_entity_set_model(model_entity,MODELS[2])
    117.     set_pev(model_entity,pev_body,BODY_NUMBER)
    118.     return FMRES_SUPERCEDE
    119. }
    120. public fm_updateclientdata_post(id,SendWeapons,CD_Handle){
    121.     if(!is_user_alive(id))return
    122.     static weapon_ent; weapon_ent=get_pdata_cbase(id,373,5)
    123.     if(!is_valid_weapon(weapon_ent))return
    124.     set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001)
    125. }
    126. public fm_playbackevent(flags,id){
    127.     if(!is_user_alive(id))return FMRES_IGNORED
    128.     static weapon_ent;weapon_ent=get_pdata_cbase(id, 373, 5)
    129.     if(!is_valid_weapon(weapon_ent))return FMRES_IGNORED
    130.     return FMRES_SUPERCEDE
    131. }
    132. public ham_item_deploy_post(weapon_ent){
    133.     if(!is_valid_weapon(weapon_ent))return
    134.     static id;id=get_pdata_cbase(weapon_ent,41,4)
    135.     set_pev(id, pev_viewmodel2, MODELS[0]),set_pev(id, pev_weaponmodel2, MODELS[1])
    136.     play_weapon_animation(id, (get_pdata_int(weapon_ent, 74, 4)&M1_MODE)?ANIM_DRAW+1:ANIM_DRAW),set_pdata_float(id, 83, 0.5, 5)
    137. }
    138. public ham_weapon_primaryattack(weapon_entity) {
    139.     if(!is_valid_weapon(weapon_entity))return HAM_IGNORED
    140.     if(get_pdata_float(weapon_entity,46,4)>0.0||!get_pdata_int(weapon_entity,51,4))return HAM_IGNORED
    141.     static id; id = get_pdata_cbase(weapon_entity, 41, 4)
    142.     if(get_pdata_int(weapon_entity, 74, 4)&M1_MODE){
    143.         if(get_pdata_int(weapon_entity, 64, 4)==9){
    144.             play_weapon_animation(id, ANIM_SHOOT_1+2)
    145.             emit_sound(id, CHAN_ITEM, SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    146.         }
    147.         else{
    148.             emit_sound(id, CHAN_ITEM, SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    149.             play_weapon_animation(id, ANIM_SHOOT_1+1)
    150.         }
    151.     } else if(get_pdata_int(weapon_entity, 64, 4)==29) {
    152.         emit_sound(id, CHAN_ITEM, SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    153.         set_pdata_int(weapon_entity, 74, get_pdata_int(weapon_entity, 74, 4)|M1_MODE, 4)
    154.         play_weapon_animation(id, ANIM_SHOOT_1+2)
    155.     } else {
    156.         emit_sound(id, CHAN_WEAPON, SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    157.         play_weapon_animation(id, ANIM_SHOOT_1)
    158.     }
    159.     ExecuteHam(Ham_Weapon_PrimaryAttack, weapon_entity)
    160.     set_pdata_float(weapon_entity,46, RATE_OF_FIRE,4)
    161.     set_pdata_int(weapon_entity,57,g_index_shell,4)
    162.         set_pdata_float(id,111,get_gametime())
    163.     return HAM_SUPERCEDE
    164. }
    165. public ham_weapon_reload(weapon_entity) {
    166.     if(!is_valid_weapon(weapon_entity))return HAM_IGNORED
    167.     static id; id = get_pdata_cbase(weapon_entity,41,4)
    168.     static bpammo;bpammo=get_pdata_int(id,376+get_pdata_int(weapon_entity,49,4),5)
    169.     static clip;clip=get_pdata_int(weapon_entity,51,4)
    170.     if(!bpammo||clip==CLIP)return HAM_SUPERCEDE
    171.     ExecuteHam(Ham_Weapon_Reload,weapon_entity)
    172.     play_weapon_animation(id,(get_pdata_int(weapon_entity, 74, 4)&M1_MODE)?ANIM_RELOAD+1:ANIM_RELOAD)
    173.     set_pdata_int(id,363,90,5)
    174.     set_pdata_float(id,83,TIME_RELOAD,5)
    175.     set_pdata_float(weapon_entity,46,TIME_RELOAD,4)
    176.     set_pdata_int(weapon_entity,54,1,4)
    177.     return HAM_SUPERCEDE
    178. }
    179. public ham_weapon_idle(ent) {
    180.     if(!is_valid_weapon(ent))return HAM_IGNORED
    181.     static id; id = get_pdata_cbase(ent, 41, 4)
    182.  
    183.     if(get_pdata_float(ent, 48, 4)>0.0)return HAM_IGNORED
    184.     if(get_pdata_int(ent, 74, 4)&M1_MODE)
    185.         play_weapon_animation(id, ANIM_IDLE+1)
    186.     else play_weapon_animation(id, ANIM_IDLE)
    187.     set_pdata_float(ent, 48, 5.0, 4)
    188.     return HAM_SUPERCEDE
    189. }
    190. public ham_item_postframe(weapon_entity)  {
    191.     if(!is_valid_weapon(weapon_entity)) return
    192.     static id; id = get_pdata_cbase(weapon_entity,41,4)
    193.     if(get_pdata_int(weapon_entity, 54, 4)&&get_pdata_float(id, 83, 5)<=0.0){      
    194.         static bpammo;bpammo=get_pdata_int(id, 376 + get_pdata_int(weapon_entity, 49, 4), 5)
    195.         static clip;clip=get_pdata_int(weapon_entity, 51, 4)
    196.         for(new i=clip; i<CLIP;i++)if(bpammo)bpammo--,clip++   
    197.         set_pdata_int(weapon_entity,54,0,4)
    198.         set_pdata_int(weapon_entity,51,clip,4)
    199.         set_pdata_int(id,376+get_pdata_int(weapon_entity,49,4),bpammo,5)
    200.     }
    201. }
    202. public ham_item_addtoplayer(weapon_entity,id)if(is_valid_weapon(weapon_entity))set_weaponlist(id,1)
    203. public ham_player_removeitem(id,weapon_entity) if(is_valid_weapon(weapon_entity)) set_weaponlist(id)
    204. public ham_traceattack_post(pEntity,attacker,Float:flDamage,Float:direction[3],ptr,damage_type) {
    205.     if(!is_user_connected(attacker)||!(damage_type&DMG_BULLET))return
    206.     static weapon_entity;weapon_entity=get_pdata_cbase(attacker, 373, 5)
    207.     if(!is_valid_weapon(weapon_entity))return
    208.     new Float:vecEnd[3],Float:vecPlane[3]
    209.     get_tr2(ptr,TR_vecEndPos,vecEnd)
    210.     get_tr2(ptr,TR_vecPlaneNormal,vecPlane)
    211.     xs_vec_mul_scalar(vecPlane,5.0,vecPlane)
    212.  
    213.         if(!is_user_alive(pEntity)){
    214.         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    215.         write_byte(TE_GUNSHOTDECAL)
    216.         engfunc(EngFunc_WriteCoord,vecEnd[0])
    217.         engfunc(EngFunc_WriteCoord,vecEnd[1])
    218.         engfunc(EngFunc_WriteCoord,vecEnd[2])
    219.         write_short(pEntity)
    220.         write_byte(random_num(41,45))
    221.         message_end()
    222.         xs_vec_add(vecEnd,vecPlane,vecEnd)
    223.         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    224.         write_byte(TE_EXPLOSION)
    225.         engfunc(EngFunc_WriteCoord,vecEnd[0])
    226.         engfunc(EngFunc_WriteCoord,vecEnd[1])
    227.         engfunc(EngFunc_WriteCoord,vecEnd[2]-10.0)
    228.         write_short(g_index_smoke)
    229.         write_byte(3)
    230.         write_byte(50)
    231.         write_byte(TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOPARTICLES)
    232.         message_end()
    233.     }
    234.         if((get_pdata_int(weapon_entity,64,4)==30)||((get_pdata_int(weapon_entity, 74, 4)&M1_MODE)&&get_pdata_int(weapon_entity,64,4)==10)) {
    235.         new Float:Origin[3]
    236.         get_weapon_position(attacker, Origin, .add_forward=10.0, .add_right=3.0, .add_up=-2.5)
    237.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    238.         write_byte(TE_BEAMPOINTS)
    239.         engfunc(EngFunc_WriteCoord, Origin[0])
    240.         engfunc(EngFunc_WriteCoord, Origin[1])
    241.         engfunc(EngFunc_WriteCoord, Origin[2])
    242.         engfunc(EngFunc_WriteCoord, vecEnd[0])
    243.         engfunc(EngFunc_WriteCoord, vecEnd[1])
    244.         engfunc(EngFunc_WriteCoord, vecEnd[2])
    245.         write_short(g_Beam_SprId)
    246.         write_byte(0)
    247.         write_byte(0)
    248.         write_byte(10)
    249.         write_byte(10)
    250.         write_byte(0)
    251.         write_byte(218)
    252.         write_byte(165)
    253.         write_byte(32)
    254.         write_byte(150)
    255.         write_byte(0)
    256.         message_end()
    257.        
    258.         set_pdata_int(weapon_entity,64,0,4)
    259.         if(is_user_alive(pEntity))xs_vec_add(vecEnd,vecPlane,vecEnd)
    260.         new victim=FM_NULLENT, Float:temp, Float:damage, Float:radius=100.0, Float:vOrigin[3]
    261.         while((victim=engfunc(EngFunc_FindEntityInSphere,victim, vecEnd, radius))!=0) {
    262.             damage=200.0
    263.             if(pev(victim, pev_takedamage)!=DAMAGE_NO&&pev(victim, pev_solid)!=SOLID_NOT) {
    264.                 if(is_user_connected(victim)) { if(is_user_alive(victim)&&ze_is_user_zombie(victim)) {
    265.                         pev(victim,pev_origin,vOrigin),xs_vec_sub(vecEnd,vOrigin,vOrigin)
    266.                         temp=vector_length(vOrigin)
    267.                         if(temp<1.0)temp=1.0
    268.                         if(temp>radius)temp=radius
    269.                         damage-=(damage/radius)*temp           
    270.                         ExecuteHamB(Ham_TakeDamage, victim, attacker, attacker, damage, DMG_NEVERGIB)
    271.                     }
    272.                 } else ExecuteHamB(Ham_TakeDamage,victim,attacker,attacker,damage,DMG_BULLET|DMG_NEVERGIB)
    273.             }
    274.         }
    275.     }
    276. }
    277. public ham_takedamage(victim,inflictor,attacker,Float:damage,damage_type){
    278.     if(!is_user_connected(attacker)||attacker==victim||!(damage_type&DMG_BULLET))return
    279.     static weapon_ent; weapon_ent=get_pdata_cbase(attacker,373,5)
    280.     if(is_valid_weapon(weapon_ent))SetHamParamFloat(4,damage*DAMAGE)
    281. }
    282.  
    283. public ze_select_item_pre(id, itemid)
    284. {
    285.     // This not our item?
    286.     if (itemid != g_iItemID)
    287.         return ZE_ITEM_AVAILABLE
    288.    
    289.     // Available for Humans only, So don't show it for zombies
    290.     if (ze_is_user_zombie(id))
    291.         return ZE_ITEM_DONT_SHOW
    292.    
    293.     // Finally return that it's available
    294.     return ZE_ITEM_AVAILABLE
    295. }
    296.  
    297. public ze_select_item_post(id, itemid)
    298. {
    299.     // This is not our item, Block it here and don't execute the blew code
    300.     if (itemid != g_iItemID)
    301.         return
    302.    
    303.     give_balrog(id)
    304. }
    305.  
    306. public give_balrog(id)
    307. {
    308.     new Ent=give_weapon(id)
    309.     set_pdata_int(id,376+get_pdata_int(Ent,49,4),AMMO,5)
    310. }
    311. public give_weapon(id){
    312.     new Float:Origin[3]
    313.     pev(id, pev_origin, Origin)
    314.     new wName[32],iItem=get_pdata_cbase(id, 367 + 1, 5);
    315.     while (pev_valid(iItem)==2)pev(iItem,pev_classname,wName,31),engclient_cmd(id,"drop",wName),iItem=get_pdata_cbase(id, 367 + 1, 5);
    316.     new iWeapon=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,g_weapon_entity))
    317.     if(!pev_valid(iWeapon)) return 0
    318.     dllfunc(DLLFunc_Spawn, iWeapon)
    319.     engfunc(EngFunc_SetOrigin, iWeapon, Origin)
    320.     set_pev(iWeapon, pev_impulse, g_iszWeaponKey)
    321.     set_pdata_int(iWeapon, 51, CLIP, 4)
    322.     new save = pev(iWeapon,pev_solid)
    323.     dllfunc(DLLFunc_Touch,iWeapon,id)
    324.  
    325.     if(pev(iWeapon, pev_solid)!=save)return iWeapon
    326.     engfunc(EngFunc_RemoveEntity,iWeapon)
    327.     return 0
    328. }
    329. public fwTouch(ent, id)
    330. {
    331.     if(pev(ent, pev_owner)==id)
    332.         return
    333.            
    334.     new Float:Origin[3]
    335.  
    336.     pev(ent, pev_origin, Origin)
    337.    
    338.     set_pev(ent, pev_movetype, MOVETYPE_NONE)
    339.     set_pev(ent, pev_solid, SOLID_NOT) 
    340.    
    341.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    342.     write_byte(TE_EXPLOSION)
    343.     engfunc(EngFunc_WriteCoord, Origin[0]+random_float(20.0, 35.0))
    344.     engfunc(EngFunc_WriteCoord, Origin[1]+random_float(20.0, 35.0))
    345.     engfunc(EngFunc_WriteCoord, Origin[2]+50.0)
    346.     write_short(explode_spr)
    347.     write_byte(random_num(13,16))
    348.     write_byte(random_num(20,22))
    349.     write_byte(0)
    350.     message_end()
    351.    
    352.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    353.     write_byte(TE_EXPLOSION)
    354.     engfunc(EngFunc_WriteCoord, Origin[0])
    355.     engfunc(EngFunc_WriteCoord, Origin[1])
    356.     engfunc(EngFunc_WriteCoord, Origin[2]+90.0)
    357.     write_short(explode_spr)
    358.     write_byte(random_num(18,22))
    359.     write_byte(random_num(20,22))
    360.     write_byte(0)
    361.     message_end()  
    362.    
    363.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    364.     write_byte(TE_SMOKE)
    365.     engfunc(EngFunc_WriteCoord, Origin[0])
    366.     engfunc(EngFunc_WriteCoord, Origin[1])
    367.     engfunc(EngFunc_WriteCoord, Origin[2]+10)
    368.     write_short(smoke_spr)
    369.     write_byte(20)
    370.     write_byte(20)
    371.     message_end()  
    372.    
    373.     new victim=FM_NULLENT, Float:vOrigin[3], Float:temp, attacker, Float:damage, Float:radius
    374.  
    375.     attacker=pev(ent, pev_owner)
    376.    
    377.     radius=200.0
    378.    
    379.     while((victim=fm_find_ent_in_sphere(victim, Origin, radius))!=0)
    380.     {  
    381.         if(pev(victim, pev_takedamage)!=DAMAGE_NO&&pev(victim, pev_solid)!=SOLID_NOT)
    382.         {
    383.             damage=500.0
    384.            
    385.             if(1<=victim<=32)
    386.             {
    387.                 if(is_user_alive(victim)&&ze_is_user_zombie(victim))
    388.                 {
    389.                     pev(victim, pev_origin, vOrigin)
    390.                    
    391.                     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    392.                     write_byte(TE_BLOODSPRITE)
    393.                     engfunc(EngFunc_WriteCoord, vOrigin[0])
    394.                     engfunc(EngFunc_WriteCoord, vOrigin[1])
    395.                     engfunc(EngFunc_WriteCoord, vOrigin[2])
    396.                     write_short(Blood[0])
    397.                     write_short(Blood[1])
    398.                     write_byte(76)
    399.                     write_byte(10)
    400.                     message_end()
    401.                    
    402.                     temp=vector_distance(Origin, vOrigin)
    403.                    
    404.                     //xs_vec_normalize(vOrigin, vOrigin)
    405.                     //xs_vec_mul_scalar(vOrigin, KNOCKBACK, vOrigin)
    406.                     //xs_vec_neg(vOrigin, vOrigin)
    407.                    
    408.                     //vOrigin[2]+=KNOCKBACK
    409.                    
    410.                     //set_pev(victim, pev_velocity, vOrigin)
    411.        
    412.                     if(temp<1.0)temp=1.0
    413.        
    414.                     if(temp>radius)temp=radius
    415.                        
    416.                     damage-=(damage/radius)*temp   
    417.                    
    418.                     if(damage<50.0) damage=50.0
    419.  
    420.                     ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET|DMG_NEVERGIB)
    421.                 }
    422.             }
    423.             else
    424.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET|DMG_NEVERGIB)
    425.         }
    426.     }
    427.    
    428.     fm_remove_entity(ent)
    429. }
    430. public GrenadeAttack(id)
    431. {  
    432.     new Float:Origin[3], Float:AimOrigin[3], Float:Velocity[3], Float:PlayerVelocity[3]
    433.  
    434.     pev(id, pev_velocity, PlayerVelocity)
    435.    
    436.     new ent=fm_create_entity("info_target")
    437.    
    438.     if(!ent) return
    439.  
    440.     set_pev(ent, pev_classname, "vulcanus7_gr")
    441.    
    442.     set_pev(ent, pev_owner, id)
    443.    
    444.     get_weapon_position(id, Origin, .add_forward=60.0, .add_right=12.0, .add_up=-5.0)
    445.        
    446.     set_pev(ent, pev_origin, Origin)
    447.    
    448.     fm_entity_set_model(ent,GrenadeModel)
    449.  
    450.     set_pev(ent, pev_solid, SOLID_BBOX)
    451.     set_pev(ent, pev_movetype, MOVETYPE_FLY)
    452.     set_pev(ent, pev_effects, EF_LIGHT)
    453.  
    454.     fm_entity_set_size(ent,Float:{0.0, 0.0, 0.0},Float:{0.0, 0.0, 0.0})
    455.  
    456.     set_pev(ent, pev_gravity, 0.8)
    457.  
    458.     fm_get_aim_origin(id, AimOrigin)
    459.  
    460.     xs_vec_sub(AimOrigin, Origin, AimOrigin)
    461.     xs_vec_normalize(AimOrigin, Velocity)
    462.     xs_vec_mul_scalar(Velocity, 1500.0, Velocity)
    463.    
    464.     vector_to_angle(AimOrigin, AimOrigin)
    465.  
    466.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    467.     write_byte(TE_BEAMFOLLOW)
    468.     write_short(ent)
    469.     write_short(trail_spr)
    470.     write_byte(25)
    471.     write_byte(3)
    472.     write_byte(180)
    473.     write_byte(180)
    474.     write_byte(180)
    475.     write_byte(250)
    476.     message_end()  
    477.        
    478.     xs_vec_add(Velocity, PlayerVelocity, Velocity) 
    479.  
    480.     set_pev(ent, pev_angles, AimOrigin)
    481.     set_pev(ent, pev_velocity, Velocity)
    482. }
    483. stock play_weapon_animation(id,sequence)set_pev(id, pev_weaponanim, sequence),message_begin(MSG_ONE,SVC_WEAPONANIM,_,id),write_byte(sequence),write_byte(0),message_end()
    484. stock set_weaponlist(id,num=0){
    485.     message_begin(MSG_ONE,g_msgWeaponList,_,id)
    486.     write_string(num?WEAPONLIST:g_weapon_entity)
    487.     for(new i=2;i<=9;i++)write_byte(g_wpn_variables[i])
    488.     message_end()
    489. }
    490. stock get_weapon_position(id, Float:fOrigin[3], Float:add_forward=0.0, Float:add_right=0.0, Float:add_up=0.0)
    491. {
    492.     static Float:Angles[3],Float:ViewOfs[3], Float:vAngles[3]
    493.     static Float:Forward[3], Float:Right[3], Float:Up[3]
    494.    
    495.     pev(id, pev_v_angle, vAngles)
    496.     pev(id, pev_origin, fOrigin)
    497.     pev(id, pev_view_ofs, ViewOfs)
    498.     xs_vec_add(fOrigin, ViewOfs, fOrigin)
    499.    
    500.     pev(id, pev_v_angle, Angles)
    501.    
    502.     engfunc(EngFunc_MakeVectors, Angles)
    503.    
    504.     global_get(glb_v_forward, Forward)
    505.     global_get(glb_v_right, Right)
    506.     global_get(glb_v_up,  Up)
    507.    
    508.     xs_vec_mul_scalar(Forward, add_forward, Forward)
    509.     xs_vec_mul_scalar(Right, add_right, Right)
    510.     xs_vec_mul_scalar(Up, add_up, Up)
    511.    
    512.     fOrigin[0]=fOrigin[0]+Forward[0]+Right[0]+Up[0]
    513.     fOrigin[1]=fOrigin[1]+Forward[1]+Right[1]+Up[1]
    514.     fOrigin[2]=fOrigin[2]+Forward[2]+Right[2]+Up[2]
    515. }
Nobody Is That Busy If They Make Time :roll:

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#5

Post by johnnysins2000 » 6 years ago

Skull 11
    1. #include <zombie_escape>
    2. #include <fakemeta_util>
    3. #include <cstrike>
    4.  
    5. #define PLUGIN "[CSO] Skull-11"
    6. #define VERSION "1.0"
    7. #define AUTHOR "Dias+ ZE DEV TEAM"
    8.  
    9. #define CSW_GATLING CSW_M3
    10. #define weapon_gatling "weapon_m3"
    11. #define WEAPON_ANIMEXT "m249"
    12. #define DEFAULT_W_MODEL "models/w_m3.mdl"
    13. #define WEAPON_SECRET_CODE 1942
    14. #define old_event "events/m3.sc"
    15.  
    16. #define DAMAGE 112
    17. #define SPEED 0.35
    18. #define RECOIL 0.75
    19. #define RELOAD_TIME 4.0
    20. #define DEFAULT_CLIP 28
    21. #define DEFAULT_BPAMMO 180
    22.  
    23. new const WeaponModel[3][] =
    24. {
    25.     "models/v_skull11.mdl", // V
    26.     "models/p_skull11.mdl", // P
    27.     "models/w_skull11.mdl" // W
    28. }
    29.  
    30. new const WeaponSound[4][] =
    31. {
    32.     "weapons/skull11_shoot1.wav",
    33.     "weapons/skull11_boltpull.wav",
    34.     "weapons/skull11_clipin.wav",
    35.     "weapons/skull11_clipout.wav"
    36. }
    37.  
    38. enum
    39. {
    40.     GATLING_ANIM_IDLE = 0,
    41.     GATLING_ANIM_SHOOT1,
    42.     GATLING_ANIM_SHOOT2,
    43.     GATLING_ANIM_RELOAD,
    44.     GATLING_ANIM_DRAW
    45. }
    46.  
    47. const PDATA_SAFE = 2
    48. const OFFSET_LINUX_WEAPONS = 4
    49. const OFFSET_LINUX_PLAYER = 5
    50. const OFFSET_WEAPONOWNER = 41
    51. const m_iClip = 51
    52. const m_fInReload = 54
    53. const m_flNextAttack = 83
    54. const m_szAnimExtention = 492
    55.  
    56. new g_iItemID
    57. new g_had_gatling[33], Float:g_punchangles[33][3], g_gatling_event, g_smokepuff_id, m_iBlood[2], g_ham_bot
    58. new g_Zoom, Float:g_ZoomTime[33]
    59.  
    60.  
    61. // MACROS
    62. #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
    63. #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
    64. #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
    65.  
    66.  
    67. public plugin_init()
    68. {
    69.     register_plugin(PLUGIN, VERSION, AUTHOR)
    70.     g_iItemID = ze_register_item("Skull 11", 35)
    71.    
    72.     register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
    73.    
    74.     register_forward(FM_CmdStart, "fw_CmdStart")
    75.     register_forward(FM_SetModel, "fw_SetModel")
    76.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
    77.     register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") 
    78.    
    79.     RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
    80.     RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")       
    81.    
    82.     RegisterHam(Ham_Item_Deploy, weapon_gatling, "fw_Item_Deploy_Post", 1)
    83.     RegisterHam(Ham_Weapon_Reload, weapon_gatling, "fw_Weapon_Reload_Post", 1)
    84.     RegisterHam(Ham_Item_PostFrame, weapon_gatling, "fw_Item_PostFrame")
    85.     RegisterHam(Ham_Item_AddToPlayer, weapon_gatling, "fw_Item_AddToPlayer_Post", 1)
    86.     RegisterHam(Ham_Weapon_PrimaryAttack, weapon_gatling, "fw_Weapon_PrimaryAttack")
    87.     RegisterHam(Ham_Weapon_PrimaryAttack, weapon_gatling, "fw_Weapon_PrimaryAttack_Post", 1)
    88. }
    89.  
    90. public plugin_precache()
    91. {
    92.     new i
    93.    
    94.     for(i = 0; i < sizeof(WeaponModel); i++)
    95.         engfunc(EngFunc_PrecacheModel, WeaponModel[i])
    96.     for(i = 0; i < sizeof(WeaponSound); i++)
    97.         engfunc(EngFunc_PrecacheSound, WeaponSound[i])
    98.  
    99.     g_smokepuff_id = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
    100.     m_iBlood[0] = engfunc(EngFunc_PrecacheModel, "sprites/blood.spr")
    101.     m_iBlood[1] = engfunc(EngFunc_PrecacheModel, "sprites/bloodspray.spr")     
    102.    
    103.     register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1) 
    104. }
    105.  
    106. public fw_PrecacheEvent_Post(type, const name[])
    107. {
    108.     if(equal(old_event, name))
    109.         g_gatling_event = get_orig_retval()
    110. }
    111.  
    112. public client_putinserver(id)
    113. {
    114.     if(is_user_bot(id) && !g_ham_bot)
    115.     {
    116.         g_ham_bot = 1
    117.         set_task(0.1, "Do_Register_Ham", id)
    118.     }
    119. }
    120.  
    121. public Do_Register_Ham(id)
    122. {
    123.     RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")   
    124. }
    125.  
    126. public zd_weapon_addammo(id, itemid)
    127. {
    128.     if(itemid == g_iItemID) cs_set_user_bpammo(id, CSW_GATLING, DEFAULT_BPAMMO)  
    129. }
    130.  
    131. public ze_select_item_pre(id, itemid)
    132. {
    133.     // This not our item?
    134.     if (itemid != g_iItemID)
    135.         return ZE_ITEM_AVAILABLE
    136.    
    137.     // Available for Humans only, So don't show it for zombies
    138.     if (ze_is_user_zombie(id))
    139.         return ZE_ITEM_DONT_SHOW
    140.    
    141.     // Finally return that it's available
    142.     return ZE_ITEM_AVAILABLE
    143. }
    144.  
    145. public ze_select_item_post(id, itemid)
    146. {
    147.     // This is not our item, Block it here and don't execute the blew code
    148.     if (itemid != g_iItemID)
    149.         return
    150.    
    151.     get_gatling(id)
    152. }
    153.  
    154. public get_gatling(id)
    155. {
    156.     UnSet_BitVar(g_Zoom, id)
    157.    
    158.     g_had_gatling[id] = 1
    159.     give_item(id, weapon_gatling)
    160.    
    161.     // Set Clip
    162.     static ent; ent = fm_get_user_weapon_entity(id, CSW_GATLING)
    163.     if(pev_valid(ent)) cs_set_weapon_ammo(ent, DEFAULT_CLIP)
    164.    
    165.     // Set BpAmmo
    166.     cs_set_user_bpammo(id, CSW_GATLING, DEFAULT_BPAMMO)
    167.    
    168.     // Update Ammo
    169.     update_ammo(id, CSW_GATLING, DEFAULT_CLIP, DEFAULT_BPAMMO)
    170. }
    171.  
    172. public remove_gatling(id)
    173. {
    174.     g_had_gatling[id] = 0
    175. }
    176.  
    177. public hook_weapon(id)
    178. {
    179.     client_cmd(id, weapon_gatling)
    180.     return PLUGIN_HANDLED
    181. }
    182.  
    183. public Event_CurWeapon(id)
    184. {
    185.     if(!is_user_alive(id))
    186.         return
    187.     if(get_user_weapon(id) != CSW_GATLING || !g_had_gatling[id])
    188.         return
    189.        
    190.     // Speed
    191.     static ent; ent = fm_get_user_weapon_entity(id, CSW_GATLING)
    192.     if(!pev_valid(ent))
    193.         return
    194.        
    195.     set_pdata_float(ent, 46, get_pdata_float(ent, 46, OFFSET_LINUX_WEAPONS) * SPEED, OFFSET_LINUX_WEAPONS)
    196. }
    197.  
    198. public fw_CmdStart(id, uc_handle, seed)
    199. {
    200.     if(!is_user_alive(id))
    201.         return
    202.     if(get_user_weapon(id) != CSW_GATLING || !g_had_gatling[id])
    203.         return
    204.  
    205.     static CurButton; CurButton = get_uc(uc_handle, UC_Buttons)
    206.  
    207.     if(CurButton & IN_ATTACK2)
    208.     {
    209.         if(get_gametime() - 0.5 > g_ZoomTime[id])
    210.         {
    211.             if(!Get_BitVar(g_Zoom, id))
    212.             {
    213.                 Set_BitVar(g_Zoom, id)
    214.                 client_print(id, print_center, "Changed to Slug Mode")
    215.             } else {
    216.                
    217.                 UnSet_BitVar(g_Zoom, id)
    218.                 client_print(id, print_center, "Changed to Normal Mode")
    219.             }
    220.            
    221.             g_ZoomTime[id] = get_gametime()
    222.         }
    223.     }
    224.    
    225.     if(CurButton & IN_RELOAD)
    226.     {
    227.         CurButton &= ~IN_RELOAD
    228.         set_uc(uc_handle, UC_Buttons, CurButton)
    229.        
    230.         static ent; ent = fm_get_user_weapon_entity(id, CSW_GATLING)
    231.         if(!pev_valid(ent)) return
    232.        
    233.         static fInReload; fInReload = get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS)
    234.         static Float:flNextAttack; flNextAttack = get_pdata_float(id, m_flNextAttack, OFFSET_LINUX_PLAYER)
    235.        
    236.         if (flNextAttack > 0.0)
    237.             return
    238.            
    239.         if (fInReload)
    240.         {
    241.             set_weapon_anim(id, GATLING_ANIM_IDLE)
    242.             return
    243.         }
    244.        
    245.         if(cs_get_weapon_ammo(ent) >= DEFAULT_CLIP)
    246.         {
    247.             set_weapon_anim(id, GATLING_ANIM_IDLE)
    248.             return
    249.         }
    250.            
    251.         fw_Weapon_Reload_Post(ent)
    252.     }
    253. }
    254.  
    255. public fw_SetModel(entity, model[])
    256. {
    257.     if(!pev_valid(entity))
    258.         return FMRES_IGNORED
    259.    
    260.     static szClassName[33]
    261.     pev(entity, pev_classname, szClassName, charsmax(szClassName))
    262.    
    263.     if(!equal(szClassName, "weaponbox"))
    264.         return FMRES_IGNORED
    265.    
    266.     static id
    267.     id = pev(entity, pev_owner)
    268.    
    269.     if(equal(model, DEFAULT_W_MODEL))
    270.     {
    271.         static weapon
    272.         weapon = fm_find_ent_by_owner(-1, weapon_gatling, entity)
    273.        
    274.         if(!pev_valid(weapon))
    275.             return FMRES_IGNORED
    276.        
    277.         if(g_had_gatling[id])
    278.         {
    279.             set_pev(weapon, pev_impulse, WEAPON_SECRET_CODE)
    280.             engfunc(EngFunc_SetModel, entity, WeaponModel[2])
    281.            
    282.             remove_gatling(id)
    283.            
    284.             return FMRES_SUPERCEDE
    285.         }
    286.     }
    287.  
    288.     return FMRES_IGNORED
    289. }
    290.  
    291. public fw_TraceAttack(ent, attacker, Float:Damage, Float:fDir[3], ptr, iDamageType)
    292. {
    293.     if(!is_user_alive(attacker))
    294.         return HAM_IGNORED 
    295.     if(get_user_weapon(attacker) != CSW_GATLING || !g_had_gatling[attacker])
    296.         return HAM_IGNORED
    297.        
    298.     if(!is_user_alive(ent))
    299.     {
    300.         static Float:flEnd[3], Float:vecPlane[3]
    301.    
    302.         get_tr2(ptr, TR_vecEndPos, flEnd)
    303.         get_tr2(ptr, TR_vecPlaneNormal, vecPlane)      
    304.        
    305.         if(!Get_BitVar(g_Zoom, attacker))
    306.         {
    307.             make_bullet(attacker, flEnd)
    308.             fake_smoke(attacker, ptr)
    309.         } else {
    310.             static Float:Target[3];
    311.             fm_get_aim_origin(attacker, Target)
    312.            
    313.             set_tr2(ptr, TR_vecEndPos, Target)
    314.            
    315.             get_tr2(ptr, TR_vecEndPos, flEnd)
    316.             make_bullet(attacker, flEnd)
    317.             fake_smoke(attacker, ptr)
    318.         }
    319.     }
    320.        
    321.     SetHamParamFloat(3, float(DAMAGE) / 6.0)   
    322.  
    323.     return HAM_HANDLED
    324. }
    325.  
    326. public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
    327. {
    328.     if(!is_user_alive(id) || !is_user_connected(id))
    329.         return FMRES_IGNORED
    330.     if(get_user_weapon(id) != CSW_GATLING || !g_had_gatling[id])
    331.         return FMRES_IGNORED
    332.        
    333.     set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
    334.    
    335.     return FMRES_HANDLED
    336. }
    337.  
    338. public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
    339. {
    340.     if(!is_user_connected(invoker))
    341.         return FMRES_IGNORED   
    342.        
    343.     if(get_user_weapon(invoker) == CSW_GATLING && g_had_gatling[invoker] && eventid == g_gatling_event)
    344.     {
    345.         engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
    346.         Event_Gatling_Shoot(invoker)   
    347.  
    348.         return FMRES_SUPERCEDE
    349.     }
    350.    
    351.     return FMRES_HANDLED
    352. }
    353.  
    354. public fw_Item_Deploy_Post(ent)
    355. {
    356.     static id; id = fm_cs_get_weapon_ent_owner(ent)
    357.     if (!pev_valid(id))
    358.         return
    359.    
    360.     static weaponid
    361.     weaponid = cs_get_weapon_id(ent)
    362.    
    363.     if(weaponid != CSW_GATLING)
    364.         return
    365.     if(!g_had_gatling[id])
    366.         return
    367.        
    368.     set_pev(id, pev_viewmodel2, WeaponModel[0])
    369.     set_pev(id, pev_weaponmodel2, WeaponModel[1])
    370.    
    371.     set_weapon_anim(id, GATLING_ANIM_DRAW)
    372.     set_pdata_string(id, m_szAnimExtention * 4, WEAPON_ANIMEXT, -1 , 20)
    373. }
    374.  
    375. public fw_Weapon_Reload_Post(ent)
    376. {
    377.     static id; id = pev(ent, pev_owner)
    378.  
    379.     if(g_had_gatling[id])
    380.     {
    381.         static CurBpAmmo; CurBpAmmo = cs_get_user_bpammo(id, CSW_GATLING)
    382.        
    383.         if(CurBpAmmo  <= 0)
    384.             return HAM_IGNORED
    385.  
    386.         set_pdata_int(ent, 55, 0, OFFSET_LINUX_WEAPONS)
    387.         set_pdata_float(id, 83, RELOAD_TIME, OFFSET_LINUX_PLAYER)
    388.         set_pdata_float(ent, 48, RELOAD_TIME + 0.5, OFFSET_LINUX_WEAPONS)
    389.         set_pdata_float(ent, 46, RELOAD_TIME + 0.25, OFFSET_LINUX_WEAPONS)
    390.         set_pdata_float(ent, 47, RELOAD_TIME + 0.25, OFFSET_LINUX_WEAPONS)
    391.         set_pdata_int(ent, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
    392.        
    393.         set_weapon_anim(id, GATLING_ANIM_RELOAD)           
    394.        
    395.         return HAM_HANDLED
    396.     }
    397.    
    398.     return HAM_IGNORED 
    399. }
    400.  
    401. public fw_Item_PostFrame(ent)
    402. {
    403.     static id; id = pev(ent, pev_owner)
    404.     if(!g_had_gatling[id]) return
    405.  
    406.     static iBpAmmo ; iBpAmmo = get_pdata_int(id, 381, OFFSET_LINUX_PLAYER)
    407.     static iClip ; iClip = get_pdata_int(ent, m_iClip, OFFSET_LINUX_WEAPONS)
    408.     static iMaxClip ; iMaxClip = DEFAULT_CLIP
    409.  
    410.     if(get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS) && get_pdata_float(id, m_flNextAttack, OFFSET_LINUX_PLAYER) <= 0.0)
    411.     {
    412.         static j; j = min(iMaxClip - iClip, iBpAmmo)
    413.         set_pdata_int(ent, m_iClip, iClip + j, OFFSET_LINUX_WEAPONS)
    414.         set_pdata_int(id, 381, iBpAmmo-j, OFFSET_LINUX_PLAYER)
    415.        
    416.         set_pdata_int(ent, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
    417.         cs_set_weapon_ammo(ent, DEFAULT_CLIP)
    418.    
    419.         update_ammo(id, CSW_GATLING, cs_get_weapon_ammo(ent), cs_get_user_bpammo(id, CSW_GATLING))
    420.    
    421.         return
    422.     }
    423. }
    424.  
    425. public fw_Item_AddToPlayer_Post(ent, id)
    426. {
    427.     if(!pev_valid(ent))
    428.         return HAM_IGNORED
    429.        
    430.     if(pev(ent, pev_impulse) == WEAPON_SECRET_CODE)
    431.     {
    432.         remove_gatling(id)
    433.         g_had_gatling[id] = 1
    434.        
    435.         update_ammo(id, CSW_GATLING, cs_get_weapon_ammo(ent), cs_get_user_bpammo(id, CSW_GATLING))
    436.     }
    437.    
    438.     return HAM_IGNORED
    439. }
    440.  
    441. public fw_Weapon_PrimaryAttack(ent)
    442. {
    443.     static id; id = pev(ent, pev_owner)
    444.     if(!g_had_gatling[id])
    445.         return
    446.        
    447.     pev(id, pev_punchangle, g_punchangles[id])
    448. }
    449.  
    450. public fw_Weapon_PrimaryAttack_Post(ent)
    451. {
    452.     static id; id = pev(ent, pev_owner)
    453.     if(!g_had_gatling[id])
    454.         return
    455.        
    456.     static Float:push[3]
    457.     pev(id, pev_punchangle, push)
    458.     xs_vec_sub(push, g_punchangles[id], push)
    459.    
    460.     xs_vec_mul_scalar(push, RECOIL, push)
    461.     xs_vec_add(push, g_punchangles[id], push)
    462.     set_pev(id, pev_punchangle, push)  
    463. }
    464.  
    465. public update_ammo(id, csw_id, clip, bpammo)
    466. {
    467.     if(!is_user_alive(id))
    468.         return
    469.        
    470.     message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), _, id)
    471.     write_byte(1)
    472.     write_byte(csw_id)
    473.     write_byte(clip)
    474.     message_end()
    475.    
    476.     message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id)
    477.     write_byte(3)
    478.     write_byte(bpammo)
    479.     message_end()
    480. }
    481.  
    482. public Event_Gatling_Shoot(id)
    483. {
    484.     set_weapon_anim(id, random_num(GATLING_ANIM_SHOOT1, GATLING_ANIM_SHOOT2))
    485.     emit_sound(id, CHAN_WEAPON, WeaponSound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
    486. }
    487.  
    488. stock fm_cs_get_weapon_ent_owner(ent)
    489. {
    490.     if (pev_valid(ent) != PDATA_SAFE)
    491.         return -1
    492.    
    493.     return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
    494. }
    495.  
    496. stock set_weapon_anim(id, anim)
    497. {
    498.     if(!is_user_alive(id))
    499.         return
    500.        
    501.     set_pev(id, pev_weaponanim, anim)
    502.    
    503.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
    504.     write_byte(anim)
    505.     write_byte(0)
    506.     message_end()  
    507. }
    508.  
    509. stock drop_weapons(id, dropwhat)
    510. {
    511.     static weapons[32], num, i, weaponid
    512.     num = 0
    513.     get_user_weapons(id, weapons, num)
    514.    
    515.     const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_MAC10)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
    516.    
    517.     for (i = 0; i < num; i++)
    518.     {
    519.         weaponid = weapons[i]
    520.        
    521.         if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
    522.         {
    523.             static wname[32]
    524.             get_weaponname(weaponid, wname, sizeof wname - 1)
    525.             engclient_cmd(id, "drop", wname)
    526.         }
    527.     }
    528. }
    529.  
    530.  
    531. stock make_bullet(id, Float:Origin[3])
    532. {
    533.     // Find target
    534.     new decal = random_num(41, 45)
    535.     const loop_time = 2
    536.    
    537.     static Body, Target
    538.     get_user_aiming(id, Target, Body, 999999)
    539.    
    540.     if(is_user_connected(Target))
    541.         return
    542.    
    543.     for(new i = 0; i < loop_time; i++)
    544.     {
    545.         // Put decal on "world" (a wall)
    546.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    547.         write_byte(TE_WORLDDECAL)
    548.         engfunc(EngFunc_WriteCoord, Origin[0])
    549.         engfunc(EngFunc_WriteCoord, Origin[1])
    550.         engfunc(EngFunc_WriteCoord, Origin[2])
    551.         write_byte(decal)
    552.         message_end()
    553.        
    554.         // Show sparcles
    555.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    556.         write_byte(TE_GUNSHOTDECAL)
    557.         engfunc(EngFunc_WriteCoord, Origin[0])
    558.         engfunc(EngFunc_WriteCoord, Origin[1])
    559.         engfunc(EngFunc_WriteCoord, Origin[2])
    560.         write_short(id)
    561.         write_byte(decal)
    562.         message_end()
    563.     }
    564. }
    565.  
    566. public fake_smoke(id, trace_result)
    567. {
    568.     static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
    569.    
    570.     get_weapon_attachment(id, vecSrc)
    571.     global_get(glb_v_forward, vecEnd)
    572.    
    573.     xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
    574.     xs_vec_add(vecSrc, vecEnd, vecEnd)
    575.  
    576.     get_tr2(trace_result, TR_vecEndPos, vecSrc)
    577.     get_tr2(trace_result, TR_vecPlaneNormal, vecEnd)
    578.    
    579.     xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
    580.     xs_vec_add(vecSrc, vecEnd, vecEnd)
    581.    
    582.     TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
    583.     TE_FLAG |= TE_EXPLFLAG_NOSOUND
    584.     TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
    585.    
    586.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
    587.     write_byte(TE_EXPLOSION)
    588.     engfunc(EngFunc_WriteCoord, vecEnd[0])
    589.     engfunc(EngFunc_WriteCoord, vecEnd[1])
    590.     engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
    591.     write_short(g_smokepuff_id)
    592.     write_byte(2)
    593.     write_byte(50)
    594.     write_byte(TE_FLAG)
    595.     message_end()
    596. }
    597.  
    598. stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
    599. {
    600.     new Float:vfEnd[3], viEnd[3]
    601.     get_user_origin(id, viEnd, 3)  
    602.     IVecFVec(viEnd, vfEnd)
    603.    
    604.     new Float:fOrigin[3], Float:fAngle[3]
    605.    
    606.     pev(id, pev_origin, fOrigin)
    607.     pev(id, pev_view_ofs, fAngle)
    608.    
    609.     xs_vec_add(fOrigin, fAngle, fOrigin)
    610.    
    611.     new Float:fAttack[3]
    612.    
    613.     xs_vec_sub(vfEnd, fOrigin, fAttack)
    614.     xs_vec_sub(vfEnd, fOrigin, fAttack)
    615.    
    616.     new Float:fRate
    617.    
    618.     fRate = fDis / vector_length(fAttack)
    619.     xs_vec_mul_scalar(fAttack, fRate, fAttack)
    620.    
    621.     xs_vec_add(fOrigin, fAttack, output)
    622. }
    623.  
    624. stock create_blood(const Float:origin[3])
    625. {
    626.     // Show some blood :)
    627.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    628.     write_byte(TE_BLOODSPRITE)
    629.     engfunc(EngFunc_WriteCoord, origin[0])
    630.     engfunc(EngFunc_WriteCoord, origin[1])
    631.     engfunc(EngFunc_WriteCoord, origin[2])
    632.     write_short(m_iBlood[1])
    633.     write_short(m_iBlood[0])
    634.     write_byte(75)
    635.     write_byte(5)
    636.     message_end()
    637. }
Nobody Is That Busy If They Make Time :roll:

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#6

Post by czirimbolo » 6 years ago

Many thanks johnny, everything works fine!

A got for you 2 new guns to convert, can you try it? :D

Thanatos-5 and Coilgun
Attachments
CSO Coilgun 2015.rar
(862.78 KiB) Downloaded 308 times
CSO Coilgun 2015.rar
(862.78 KiB) Downloaded 308 times
CSO Thanatos-5 2015.rar
(842.07 KiB) Downloaded 291 times
CSO Thanatos-5 2015.rar
(842.07 KiB) Downloaded 291 times
Image

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#7

Post by johnnysins2000 » 6 years ago

czirimbolo wrote: 6 years ago Many thanks johnny, everything works fine!

A got for you 2 new guns to convert, can you try it? :D

Thanatos-5 and Coilgun
OK bro :lol:
Nobody Is That Busy If They Make Time :roll:

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#8

Post by johnnysins2000 » 6 years ago

Thanatos 5
    1. #include <zombie_escape>
    2. #include <fakemeta_util>
    3. #include <cstrike>
    4.  
    5. #define PLUGIN "[CSO] Thanatos-5"
    6. #define VERSION "1.0"
    7. #define AUTHOR "Dias no Pendragon + ZE DEV TEAM"
    8.  
    9. #define DAMAGE_A 29 // 58 for zombie
    10. #define DAMAGE_B 150 // 300 for zombie
    11.  
    12. #define CLIP 30
    13. #define SCYTHE_RADIUS 120.0
    14.  
    15. #define V_MODEL "models/v_thanatos5.mdl"
    16. #define P_MODEL "models/p_thanatos5.mdl"
    17. #define W_MODEL "models/w_thanatos5.mdl"
    18. #define S_MODEL "models/thanatos5_bulleta.mdl"
    19.  
    20. new const WeaponSounds[12][] =
    21. {
    22.     "weapons/thanatos5-1.wav",
    23.     "weapons/thanatos5_shootb2_1.wav",
    24.     "weapons/thanatos5_explode1.wav",
    25.     "weapons/thanatos5_explode2.wav",
    26.     "weapons/thanatos5_explode3.wav",
    27.     "weapons/thanatos5_changea_1.wav",
    28.     "weapons/thanatos5_changea_2.wav",
    29.     "weapons/thanatos5_changea_3.wav",
    30.     "weapons/thanatos5_changea_4.wav",
    31.     "weapons/thanatos5_reloada_1.wav",
    32.     "weapons/thanatos5_reloada_2.wav",
    33.     "weapons/thanatos5_reloada_3.wav"
    34. }
    35.  
    36. new const WeaponResources[6][] =
    37. {
    38.     "sprites/thanatos5_explode.spr",
    39.     "sprites/thanatos5_explode2.spr",
    40.     "sprites/640hud7_2.spr",
    41.     "sprites/640hud14_2.spr",
    42.     "sprites/640hud125_2.spr",
    43.     "sprites/weapon_thanatos5.txt"
    44. }
    45.  
    46. enum
    47. {
    48.     ANIM_IDLE_A = 0,
    49.     ANIM_IDLE_B,
    50.     ANIM_SHOOT_A1,
    51.     ANIM_SHOOT_A2,
    52.     ANIM_SHOOT_A3,
    53.     ANIM_SHOOT_B1,
    54.     ANIM_SHOOT_B2,
    55.     ANIM_SHOOT_B3,
    56.     ANIM_SHOOT_SPECIAL,
    57.     ANIM_RELOAD_A,
    58.     ANIM_RELOAD_B,
    59.     ANIM_CHANGE,
    60.     ANIM_DRAW_A,
    61.     ANIM_DRAW_B
    62. }
    63.  
    64. #define TASK_RELOAD 31515
    65. #define SCYTHE_CLASSNAME "mines"
    66. #define SCYTHE_CLASSNAME2 "mines2"
    67.  
    68. #define CSW_THANATOS5 CSW_M4A1
    69. #define weapon_thanatos5 "weapon_m4a1"
    70.  
    71. // Fire Start
    72. #define THANATOS5_OLDMODEL "models/w_m4a1.mdl"
    73.  
    74. const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
    75. const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
    76.  
    77. // MACROS
    78. #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
    79. #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
    80. #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
    81.  
    82. new g_Had_Thanatos5, g_Thanatos5_Clip[33], g_GrenadeMode
    83. new g_MsgCurWeapon, g_MsgStatusIcon, g_MsgWeaponList, g_InTempingAttack, g_MaxPlayers, g_iItemID
    84. new g_Event_Thanatos5, g_ShellId, g_SmokePuff_SprId, g_HamBot, spr_trail, g_Exp_SprID, g_Exp2_SprID
    85.  
    86. public plugin_init()
    87. {
    88.     register_plugin(PLUGIN, VERSION, AUTHOR)
    89.     g_iItemID = ze_register_item("Thanatos 5", 40)
    90.    
    91.     register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
    92.     register_think(SCYTHE_CLASSNAME, "fw_Scythe_Think")
    93.     register_think(SCYTHE_CLASSNAME2, "fw_Scythe_Think2")
    94.    
    95.     register_forward(FM_UpdateClientData,"fw_UpdateClientData_Post", 1)
    96.     register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") 
    97.     register_forward(FM_SetModel, "fw_SetModel")       
    98.     register_forward(FM_CmdStart, "fw_CmdStart")
    99.     register_forward(FM_EmitSound, "fw_EmitSound")
    100.     register_forward(FM_TraceLine, "fw_TraceLine")
    101.     register_forward(FM_TraceHull, "fw_TraceHull") 
    102.    
    103.     RegisterHam(Ham_Item_Deploy, weapon_thanatos5, "fw_Item_Deploy_Post", 1)   
    104.     RegisterHam(Ham_Item_AddToPlayer, weapon_thanatos5, "fw_Item_AddToPlayer_Post", 1)
    105.     RegisterHam(Ham_Item_PostFrame, weapon_thanatos5, "fw_Item_PostFrame") 
    106.     RegisterHam(Ham_Weapon_Reload, weapon_thanatos5, "fw_Weapon_Reload")
    107.     RegisterHam(Ham_Weapon_Reload, weapon_thanatos5, "fw_Weapon_Reload_Post", 1)   
    108.     RegisterHam(Ham_Weapon_WeaponIdle, weapon_thanatos5, "fw_Weapon_WeaponIdle_Post", 1)
    109.    
    110.     RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_World")
    111.     RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Player")
    112.    
    113.     g_MsgCurWeapon = get_user_msgid("CurWeapon")
    114.     g_MsgStatusIcon = get_user_msgid("StatusIcon")
    115.     g_MsgWeaponList = get_user_msgid("WeaponList")
    116.     g_MaxPlayers = get_maxplayers()
    117.    
    118.     register_clcmd("weapon_thanatos5", "Hook_Weapon")
    119. }
    120.  
    121. public plugin_precache()
    122. {
    123.     precache_model(V_MODEL)
    124.     precache_model(P_MODEL)
    125.     precache_model(W_MODEL)
    126.     precache_model(S_MODEL)
    127.    
    128.     for(new i = 0; i < sizeof(WeaponSounds); i++)
    129.         precache_sound(WeaponSounds[i])
    130.        
    131.     g_Exp_SprID = precache_model(WeaponResources[0])
    132.     g_Exp2_SprID = precache_model(WeaponResources[1])
    133.     precache_model(WeaponResources[2])
    134.     precache_model(WeaponResources[3])
    135.     precache_model(WeaponResources[4])
    136.     precache_generic(WeaponResources[5])
    137.    
    138.     g_ShellId = precache_model("models/rshell.mdl")
    139.     g_SmokePuff_SprId = precache_model("sprites/wall_puff1.spr")
    140.     spr_trail = engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr")
    141.    
    142.     register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
    143. }
    144.  
    145. public fw_PrecacheEvent_Post(type, const name[])
    146. {
    147.     if(equal("events/m4a1.sc", name)) g_Event_Thanatos5 = get_orig_retval()    
    148. }
    149.  
    150. public client_putinserver(id)
    151. {
    152.     if(!g_HamBot && is_user_bot(id))
    153.     {
    154.         g_HamBot = 1
    155.         set_task(0.1, "Do_Register_HamBot", id)
    156.     }
    157. }
    158.  
    159. public Do_Register_HamBot(id)
    160. {
    161.     RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Player")
    162. }
    163.  
    164. public Event_NewRound() remove_entity_name(SCYTHE_CLASSNAME)
    165. public Hook_Weapon(id)
    166. {
    167.     engclient_cmd(id, weapon_thanatos5)
    168.     return PLUGIN_HANDLED
    169. }
    170.  
    171. public ze_select_item_pre(id, itemid)
    172. {
    173.     // This not our item?
    174.     if (itemid != g_iItemID)
    175.         return ZE_ITEM_AVAILABLE
    176.    
    177.     // Available for Humans only, So don't show it for zombies
    178.     if (ze_is_user_zombie(id))
    179.         return ZE_ITEM_DONT_SHOW
    180.    
    181.     // Finally return that it's available
    182.     return ZE_ITEM_AVAILABLE
    183. }
    184.  
    185. public ze_select_item_post(id, itemid)
    186. {
    187.     // This is not our item, Block it here and don't execute the blew code
    188.     if (itemid != g_iItemID)
    189.         return
    190.    
    191.     Get_Thanatos5(id)
    192. }
    193.  
    194. public Get_Thanatos5(id)
    195. {
    196.     drop_weapons(id, 1)
    197.    
    198.     Set_BitVar(g_Had_Thanatos5, id)
    199.     UnSet_BitVar(g_GrenadeMode, id)
    200.     give_item(id, weapon_thanatos5)
    201.    
    202.     static Ent; Ent = fm_get_user_weapon_entity(id, CSW_THANATOS5)
    203.     if(pev_valid(Ent)) cs_set_weapon_ammo(Ent, CLIP)
    204.    
    205.     message_begin(MSG_ONE_UNRELIABLE, g_MsgWeaponList, _, id)
    206.     write_string("weapon_thanatos5")
    207.     write_byte(4)
    208.     write_byte(90)
    209.     write_byte(-1)
    210.     write_byte(-1)
    211.     write_byte(0)
    212.     write_byte(6)
    213.     write_byte(CSW_THANATOS5)
    214.     write_byte(0)
    215.     message_end()  
    216.    
    217.     Update_Ammo(id, CLIP)
    218.     Update_SpecialAmmo(id, 1, 0)
    219.    
    220.     cs_set_user_bpammo(id, CSW_THANATOS5, 200)
    221. }
    222.  
    223. public Remove_Thanatos5(id)
    224. {
    225.     if(is_user_connected(id))
    226.         Update_SpecialAmmo(id, 1, 0)
    227.    
    228.     UnSet_BitVar(g_Had_Thanatos5, id)
    229.     UnSet_BitVar(g_GrenadeMode, id)
    230. }
    231.  
    232. public Update_Ammo(id, Ammo)
    233. {
    234.     if(!is_user_alive(id))
    235.         return
    236.    
    237.     engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, g_MsgCurWeapon, {0, 0, 0}, id)
    238.     write_byte(1)
    239.     write_byte(CSW_THANATOS5)
    240.     write_byte(Ammo)
    241.     message_end()
    242. }
    243.  
    244. public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
    245. {
    246.     if(!is_user_alive(id))
    247.         return FMRES_IGNORED   
    248.     if(get_user_weapon(id) == CSW_THANATOS5 && Get_BitVar(g_Had_Thanatos5, id))
    249.         set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
    250.    
    251.     return FMRES_HANDLED
    252. }
    253.  
    254. public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
    255. {
    256.     if (!is_user_connected(invoker))
    257.         return FMRES_IGNORED   
    258.     if(get_user_weapon(invoker) != CSW_THANATOS5 || !Get_BitVar(g_Had_Thanatos5, invoker))
    259.         return FMRES_IGNORED
    260.     if(eventid != g_Event_Thanatos5)
    261.         return FMRES_IGNORED
    262.    
    263.     engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
    264.    
    265.     if(Get_BitVar(g_GrenadeMode, invoker)) Set_WeaponAnim(invoker, ANIM_SHOOT_B1)
    266.     else Set_WeaponAnim(invoker, ANIM_SHOOT_A1)
    267.     emit_sound(invoker, CHAN_WEAPON, WeaponSounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
    268.    
    269.     Eject_Shell(invoker, g_ShellId, 0.01)
    270.  
    271.     return FMRES_IGNORED
    272. }
    273.  
    274. public Update_SpecialAmmo(id, Ammo, On)
    275. {
    276.     static AmmoSprites[33], Color[3]
    277.     format(AmmoSprites, sizeof(AmmoSprites), "number_%d", Ammo)
    278.  
    279.     switch(Ammo)
    280.     {
    281.         case 1..3: { Color[0] = 0; Color[1] = 200; Color[2] = 0; }
    282.         case 4..5: { Color[0] = 200; Color[1] = 200; Color[2] = 0; }
    283.         case 6..10: { Color[0] = 200; Color[1] = 0; Color[2] = 0; }
    284.     }
    285.    
    286.     message_begin(MSG_ONE_UNRELIABLE, g_MsgStatusIcon, {0,0,0}, id)
    287.     write_byte(On)
    288.     write_string(AmmoSprites)
    289.     write_byte(Color[0]) // red
    290.     write_byte(Color[1]) // green
    291.     write_byte(Color[2]) // blue
    292.     message_end()
    293. }
    294.  
    295. public fw_SetModel(entity, model[])
    296. {
    297.     if(!pev_valid(entity))
    298.         return FMRES_IGNORED
    299.    
    300.     static Classname[32]
    301.     pev(entity, pev_classname, Classname, sizeof(Classname))
    302.    
    303.     if(!equal(Classname, "weaponbox"))
    304.         return FMRES_IGNORED
    305.    
    306.     static iOwner
    307.     iOwner = pev(entity, pev_owner)
    308.    
    309.     if(equal(model, THANATOS5_OLDMODEL))
    310.     {
    311.         static weapon; weapon = find_ent_by_owner(-1, weapon_thanatos5, entity)
    312.        
    313.         if(!pev_valid(weapon))
    314.             return FMRES_IGNORED;
    315.        
    316.         if(Get_BitVar(g_Had_Thanatos5, iOwner))
    317.         {
    318.             set_pev(weapon, pev_impulse, 3152015)
    319.             set_pev(weapon, pev_iuser4, Get_BitVar(g_GrenadeMode, iOwner) ? 1 : 0)
    320.            
    321.             engfunc(EngFunc_SetModel, entity, W_MODEL)
    322.            
    323.             Remove_Thanatos5(iOwner)
    324.            
    325.             return FMRES_SUPERCEDE
    326.         }
    327.     }
    328.  
    329.     return FMRES_IGNORED;
    330. }
    331.  
    332. public fw_CmdStart(id, uc_handle, seed)
    333. {
    334.     if(!is_user_alive(id))
    335.         return FMRES_IGNORED
    336.     if(get_user_weapon(id) != CSW_THANATOS5 || !Get_BitVar(g_Had_Thanatos5, id))
    337.         return FMRES_IGNORED
    338.        
    339.     static PressedButton
    340.     PressedButton = get_uc(uc_handle, UC_Buttons)
    341.    
    342.     if(PressedButton & IN_ATTACK2)
    343.     {
    344.         if(get_pdata_float(id, 83, 5) > 0.0)
    345.             return FMRES_IGNORED
    346.        
    347.         PressedButton &= ~IN_ATTACK2
    348.         set_uc(uc_handle, UC_Buttons, PressedButton)
    349.  
    350.         if(!Get_BitVar(g_GrenadeMode, id))
    351.         {
    352.             set_pdata_float(id, 83, 5.0, 5)
    353.             Set_WeaponIdleTime(id, CSW_THANATOS5, 5.0)
    354.            
    355.             Set_WeaponAnim(id, ANIM_CHANGE)
    356.            
    357.             remove_task(id+TASK_RELOAD)
    358.             set_task(4.75, "Complete_Reload", id+TASK_RELOAD)
    359.         } else {
    360.             Shoot_Scythe(id)
    361.         }
    362.     }
    363.        
    364.     return FMRES_HANDLED
    365. }
    366.  
    367. public Complete_Reload(id)
    368. {
    369.     id -= TASK_RELOAD
    370.    
    371.     if(!is_user_alive(id))
    372.         return
    373.     if(get_user_weapon(id) != CSW_THANATOS5 || !Get_BitVar(g_Had_Thanatos5, id))
    374.         return
    375.     if(Get_BitVar(g_GrenadeMode, id))
    376.         return
    377.        
    378.     Set_BitVar(g_GrenadeMode, id)
    379.    
    380.     set_pdata_float(id, 83, 0.0, 5)
    381.     Set_WeaponIdleTime(id, CSW_THANATOS5, 0.0)
    382.     Set_WeaponAnim(id, ANIM_IDLE_B)
    383.    
    384.     Update_SpecialAmmo(id, 1, 1)
    385. }
    386.  
    387. public Shoot_Scythe(id)
    388. {
    389.     emit_sound(id, CHAN_WEAPON, WeaponSounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    390.    
    391.     Create_FakeAttackAnim(id)
    392.     Set_WeaponAnim(id, ANIM_SHOOT_SPECIAL)
    393.    
    394.     Update_SpecialAmmo(id, 1, 0)
    395.     set_pdata_float(id, 83, 2.0, 5)
    396.     Set_WeaponIdleTime(id, CSW_THANATOS5, 2.0)
    397.    
    398.     UnSet_BitVar(g_GrenadeMode, id)
    399.    
    400.     // Fake Punch
    401.     //static Float:Origin[3]
    402.     //Origin[0] = random_float(-2.5, -5.0)
    403.    
    404.     //set_pev(id, pev_punchangle, Origin)
    405.    
    406.     // Scythe
    407.     Create_Scythe(id)
    408. }
    409.  
    410. public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
    411. {
    412.     if(!is_user_connected(id))
    413.         return FMRES_IGNORED
    414.     if(!Get_BitVar(g_InTempingAttack, id))
    415.         return FMRES_IGNORED
    416.        
    417.     if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
    418.     {
    419.         if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
    420.             return FMRES_SUPERCEDE
    421.         if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't')
    422.         {
    423.             if (sample[17] == 'w')  return FMRES_SUPERCEDE
    424.             else  return FMRES_SUPERCEDE
    425.         }
    426.         if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
    427.             return FMRES_SUPERCEDE;
    428.     }
    429.    
    430.     return FMRES_IGNORED
    431. }
    432.  
    433. public fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle)
    434. {
    435.     if(!is_user_alive(id))
    436.         return FMRES_IGNORED   
    437.     if(!Get_BitVar(g_InTempingAttack, id))
    438.         return FMRES_IGNORED
    439.    
    440.     static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
    441.    
    442.     pev(id, pev_origin, fOrigin)
    443.     pev(id, pev_view_ofs, view_ofs)
    444.     xs_vec_add(fOrigin, view_ofs, vecStart)
    445.     pev(id, pev_v_angle, v_angle)
    446.    
    447.     engfunc(EngFunc_MakeVectors, v_angle)
    448.     get_global_vector(GL_v_forward, v_forward)
    449.  
    450.     xs_vec_mul_scalar(v_forward, 0.0, v_forward)
    451.     xs_vec_add(vecStart, v_forward, vecEnd)
    452.    
    453.     engfunc(EngFunc_TraceLine, vecStart, vecEnd, ignored_monster, id, handle)
    454.    
    455.     return FMRES_SUPERCEDE
    456. }
    457.  
    458. public fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle)
    459. {
    460.     if(!is_user_alive(id))
    461.         return FMRES_IGNORED   
    462.     if(!Get_BitVar(g_InTempingAttack, id))
    463.         return FMRES_IGNORED
    464.    
    465.     static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
    466.    
    467.     pev(id, pev_origin, fOrigin)
    468.     pev(id, pev_view_ofs, view_ofs)
    469.     xs_vec_add(fOrigin, view_ofs, vecStart)
    470.     pev(id, pev_v_angle, v_angle)
    471.    
    472.     engfunc(EngFunc_MakeVectors, v_angle)
    473.     get_global_vector(GL_v_forward, v_forward)
    474.    
    475.     xs_vec_mul_scalar(v_forward, 0.0, v_forward)
    476.     xs_vec_add(vecStart, v_forward, vecEnd)
    477.    
    478.     engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle)
    479.    
    480.     return FMRES_SUPERCEDE
    481. }
    482.  
    483. public Create_FakeAttackAnim(id)
    484. {
    485.     Set_BitVar(g_InTempingAttack, id)
    486.    
    487.     static Ent; Ent = fm_get_user_weapon_entity(id, CSW_KNIFE)
    488.     if(pev_valid(Ent)) ExecuteHamB(Ham_Weapon_PrimaryAttack, Ent)
    489.    
    490.     UnSet_BitVar(g_InTempingAttack, id)
    491. }
    492.  
    493. public fw_Item_Deploy_Post(Ent)
    494. {
    495.     if(pev_valid(Ent) != 2)
    496.         return
    497.     static Id; Id = get_pdata_cbase(Ent, 41, 4)
    498.     if(get_pdata_cbase(Id, 373) != Ent)
    499.         return
    500.     if(!Get_BitVar(g_Had_Thanatos5, Id))
    501.         return
    502.    
    503.     set_pev(Id, pev_viewmodel2, V_MODEL)
    504.     set_pev(Id, pev_weaponmodel2, P_MODEL)
    505.    
    506.     if(Get_BitVar(g_GrenadeMode, Id)) Set_WeaponAnim(Id, ANIM_DRAW_B)
    507.     else Set_WeaponAnim(Id, ANIM_DRAW_A)
    508. }
    509.  
    510. public fw_Item_AddToPlayer_Post(Ent, id)
    511. {
    512.     if(!pev_valid(Ent))
    513.         return HAM_IGNORED
    514.        
    515.     if(pev(Ent, pev_impulse) == 3152015)
    516.     {
    517.         Set_BitVar(g_Had_Thanatos5, id)
    518.         set_pev(Ent, pev_impulse, 0)
    519.        
    520.         if(pev(Ent, pev_iuser4))
    521.         {
    522.             Set_BitVar(g_GrenadeMode, id)
    523.             Update_SpecialAmmo(id, 1, 1)
    524.         }
    525.        
    526.         message_begin(MSG_ONE_UNRELIABLE, g_MsgWeaponList, _, id)
    527.         write_string("weapon_thanatos5")
    528.         write_byte(4)
    529.         write_byte(90)
    530.         write_byte(-1)
    531.         write_byte(-1)
    532.         write_byte(0)
    533.         write_byte(6)
    534.         write_byte(CSW_THANATOS5)
    535.         write_byte(0)
    536.         message_end()      
    537.     }
    538.  
    539.     return HAM_HANDLED 
    540. }
    541.  
    542. public fw_Weapon_WeaponIdle_Post( iEnt )
    543. {
    544.     if(pev_valid(iEnt) != 2)
    545.         return
    546.     static Id; Id = get_pdata_cbase(iEnt, 41, 4)
    547.     if(get_pdata_cbase(Id, 373) != iEnt)
    548.         return
    549.     if(!Get_BitVar(g_Had_Thanatos5, Id))
    550.         return
    551.        
    552.     if(get_pdata_float(iEnt, 48, 4) <= 0.25)
    553.     {
    554.         if(Get_BitVar(g_GrenadeMode, Id)) Set_WeaponAnim(Id, ANIM_IDLE_B)
    555.         else Set_WeaponAnim(Id, ANIM_IDLE_A)
    556.        
    557.         set_pdata_float(iEnt, 48, 20.0, 4)
    558.     }  
    559. }
    560.  
    561. public fw_TraceAttack_World(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
    562. {
    563.     if(!is_user_connected(Attacker))
    564.         return HAM_IGNORED 
    565.     if(get_user_weapon(Attacker) != CSW_THANATOS5 || !Get_BitVar(g_Had_Thanatos5, Attacker))
    566.         return HAM_IGNORED
    567.        
    568.     static Float:flEnd[3], Float:vecPlane[3]
    569.        
    570.     get_tr2(Ptr, TR_vecEndPos, flEnd)
    571.     get_tr2(Ptr, TR_vecPlaneNormal, vecPlane)      
    572.            
    573.     Make_BulletHole(Attacker, flEnd, Damage)
    574.     Make_BulletSmoke(Attacker, Ptr)
    575.  
    576.     SetHamParamFloat(3, float(DAMAGE_A))
    577.    
    578.     return HAM_IGNORED
    579. }
    580.  
    581. public fw_TraceAttack_Player(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
    582. {
    583.     if(!is_user_connected(Attacker))
    584.         return HAM_IGNORED 
    585.     if(get_user_weapon(Attacker) != CSW_THANATOS5 || !Get_BitVar(g_Had_Thanatos5, Attacker))
    586.         return HAM_IGNORED
    587.        
    588.     SetHamParamFloat(3, float(DAMAGE_A))
    589.    
    590.     return HAM_IGNORED
    591. }
    592.  
    593. public fw_Item_PostFrame(ent)
    594. {
    595.     static id; id = pev(ent, pev_owner)
    596.     if(!is_user_alive(id))
    597.         return HAM_IGNORED
    598.     if(!Get_BitVar(g_Had_Thanatos5, id))
    599.         return HAM_IGNORED 
    600.    
    601.     static Float:flNextAttack; flNextAttack = get_pdata_float(id, 83, 5)
    602.     static bpammo; bpammo = cs_get_user_bpammo(id, CSW_THANATOS5)
    603.    
    604.     static iClip; iClip = get_pdata_int(ent, 51, 4)
    605.     static fInReload; fInReload = get_pdata_int(ent, 54, 4)
    606.    
    607.     if(fInReload && flNextAttack <= 0.0)
    608.     {
    609.         static temp1
    610.         temp1 = min(CLIP - iClip, bpammo)
    611.  
    612.         set_pdata_int(ent, 51, iClip + temp1, 4)
    613.         cs_set_user_bpammo(id, CSW_THANATOS5, bpammo - temp1)      
    614.        
    615.         set_pdata_int(ent, 54, 0, 4)
    616.        
    617.         fInReload = 0
    618.     }      
    619.    
    620.     return HAM_IGNORED
    621. }
    622.  
    623. public fw_Weapon_Reload(ent)
    624. {
    625.     static id; id = pev(ent, pev_owner)
    626.     if(!is_user_alive(id))
    627.         return HAM_IGNORED
    628.     if(!Get_BitVar(g_Had_Thanatos5, id))
    629.         return HAM_IGNORED 
    630.  
    631.     g_Thanatos5_Clip[id] = -1
    632.        
    633.     static BPAmmo; BPAmmo = cs_get_user_bpammo(id, CSW_THANATOS5)
    634.     static iClip; iClip = get_pdata_int(ent, 51, 4)
    635.        
    636.     if(BPAmmo <= 0)
    637.         return HAM_SUPERCEDE
    638.     if(iClip >= CLIP)
    639.         return HAM_SUPERCEDE       
    640.            
    641.     g_Thanatos5_Clip[id] = iClip   
    642.    
    643.     return HAM_HANDLED
    644. }
    645.  
    646. public fw_Weapon_Reload_Post(ent)
    647. {
    648.     static id; id = pev(ent, pev_owner)
    649.     if(!is_user_alive(id))
    650.         return HAM_IGNORED
    651.     if(!Get_BitVar(g_Had_Thanatos5, id))
    652.         return HAM_IGNORED 
    653.        
    654.     if((get_pdata_int(ent, 54, 4) == 1))
    655.     { // Reload
    656.         if(g_Thanatos5_Clip[id] == -1)
    657.             return HAM_IGNORED
    658.        
    659.         set_pdata_int(ent, 51, g_Thanatos5_Clip[id], 4)
    660.         set_pdata_float(id, 83, 3.0, 5)
    661.        
    662.         if(Get_BitVar(g_GrenadeMode, id)) Set_WeaponAnim(id, ANIM_RELOAD_B)
    663.         else Set_WeaponAnim(id, ANIM_RELOAD_A)
    664.     }
    665.    
    666.     return HAM_HANDLED
    667. }
    668.  
    669. public Create_Scythe(id)
    670. {
    671.     new iEnt = create_entity("info_target")
    672.    
    673.     static Float:Origin[3], Float:Angles[3], Float:TargetOrigin[3], Float:Velocity[3]
    674.    
    675.     get_weapon_attachment(id, Origin, 40.0)
    676.     get_position(id, 1024.0, 6.0, 0.0, TargetOrigin)
    677.    
    678.     pev(id, pev_v_angle, Angles)
    679.     Angles[0] *= -1.0
    680.  
    681.     // set info for ent
    682.     set_pev(iEnt, pev_movetype, MOVETYPE_PUSHSTEP)
    683.     entity_set_string(iEnt, EV_SZ_classname, SCYTHE_CLASSNAME)
    684.     engfunc(EngFunc_SetModel, iEnt, S_MODEL)
    685.    
    686.     set_pev(iEnt, pev_mins, Float:{-1.0, -1.0, -1.0})
    687.     set_pev(iEnt, pev_maxs, Float:{1.0, 1.0, 1.0})
    688.     set_pev(iEnt, pev_origin, Origin)
    689.     set_pev(iEnt, pev_gravity, 1.0)
    690.     set_pev(iEnt, pev_angles, Angles)
    691.     set_pev(iEnt, pev_solid, SOLID_TRIGGER)
    692.     set_pev(iEnt, pev_owner, id)   
    693.     set_pev(iEnt, pev_iuser1, get_user_team(id))
    694.     set_pev(iEnt, pev_iuser2, 0)
    695.     set_pev(iEnt, pev_fuser1, get_gametime() + 1.5)
    696.  
    697.     get_speed_vector(Origin, TargetOrigin, 900.0, Velocity)
    698.     set_pev(iEnt, pev_velocity, Velocity)  
    699.    
    700.     set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
    701.    
    702.     // Animation
    703.     set_pev(iEnt, pev_animtime, get_gametime())
    704.     set_pev(iEnt, pev_framerate, 2.0)
    705.     set_pev(iEnt, pev_sequence, 0)
    706.    
    707.     // Make a Beam
    708.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    709.     write_byte(TE_BEAMFOLLOW)
    710.     write_short(iEnt) // entity
    711.     write_short(spr_trail) // sprite
    712.     write_byte(20)  // life
    713.     write_byte(2)  // width
    714.     write_byte(200) // r
    715.     write_byte(200);  // g
    716.     write_byte(200);  // b
    717.     write_byte(200); // brightness
    718.     message_end();
    719. }
    720.  
    721. public fw_Scythe_Think(Ent)
    722. {
    723.     if(!pev_valid(Ent))
    724.         return
    725.        
    726.     static Float:Time; pev(Ent, pev_fuser1, Time)
    727.     static Team; Team = pev(Ent, pev_iuser1)
    728.    
    729.     if(Time <= get_gametime())
    730.     {
    731.         static Float:Origin[3];
    732.         pev(Ent, pev_origin, Origin)
    733.        
    734.         Thanatos5_Explose(Origin)
    735.         emit_sound(Ent, CHAN_BODY, WeaponSounds[2], VOL_NORM, ATTN_NONE, 0, PITCH_NORM)
    736.        
    737.         static ID; ID = pev(Ent, pev_owner)
    738.         if(!is_user_connected(ID))
    739.         {
    740.             set_pev(Ent, pev_flags, FL_KILLME)
    741.             set_pev(Ent, pev_nextthink, get_gametime() + 0.1)
    742.            
    743.             return
    744.         }
    745.        
    746.         Thanatos5_Damage(ID, Team, Origin)
    747.         Create_ScytheSystem(ID, Ent, 1)
    748.        
    749.         set_pev(Ent, pev_flags, FL_KILLME)
    750.         set_pev(Ent, pev_nextthink, get_gametime() + 0.1)
    751.        
    752.         return
    753.     }
    754.    
    755.     set_pev(Ent, pev_nextthink, get_gametime() + 0.1)
    756. }
    757.  
    758. public Create_ScytheSystem(id, Ent, Next)
    759. {
    760.     static Float:Origin[4][3]
    761.     static Float:Start[3]; pev(Ent, pev_origin, Start)
    762.    
    763.     get_position(Ent, 100.0, 0.0, 100.0, Origin[0])
    764.     get_position(Ent, -100.0, 0.0, 100.0, Origin[1])
    765.     get_position(Ent, 0.0, -100.0, 100.0, Origin[2])
    766.     get_position(Ent, 0.0, 100.0, 100.0, Origin[3])
    767.    
    768.     for(new i = 0; i < 4; i++)
    769.         Create_Mine(id, Start, Origin[i], Next)
    770. }
    771.  
    772. public Create_Mine(id, Float:Origin[3], Float:TargetOrigin[3], Next)
    773. {
    774.     new iEnt = create_entity("info_target")
    775.     static Float:Velocity[3]
    776.  
    777.     // set info for ent
    778.     set_pev(iEnt, pev_movetype, MOVETYPE_PUSHSTEP)
    779.     entity_set_string(iEnt, EV_SZ_classname, SCYTHE_CLASSNAME2)
    780.     engfunc(EngFunc_SetModel, iEnt, S_MODEL)
    781.    
    782.     set_pev(iEnt, pev_mins, Float:{-1.0, -1.0, -1.0})
    783.     set_pev(iEnt, pev_maxs, Float:{1.0, 1.0, 1.0})
    784.     set_pev(iEnt, pev_origin, Origin)
    785.     set_pev(iEnt, pev_gravity, 1.0)
    786.     set_pev(iEnt, pev_solid, SOLID_TRIGGER)
    787.     set_pev(iEnt, pev_owner, id)   
    788.     set_pev(iEnt, pev_iuser1, get_user_team(id))
    789.     set_pev(iEnt, pev_iuser2, Next)
    790.     set_pev(iEnt, pev_fuser1, get_gametime() + 1.5)
    791.  
    792.     get_speed_vector(Origin, TargetOrigin, 250.0, Velocity)
    793.     set_pev(iEnt, pev_velocity, Velocity)  
    794.    
    795.     set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
    796.    
    797.     // Animation
    798.     set_pev(iEnt, pev_animtime, get_gametime())
    799.     set_pev(iEnt, pev_framerate, 2.0)
    800.     set_pev(iEnt, pev_sequence, 0)
    801.    
    802.     // Make a Beam
    803.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    804.     write_byte(TE_BEAMFOLLOW)
    805.     write_short(iEnt) // entity
    806.     write_short(spr_trail) // sprite
    807.     write_byte(10)  // life
    808.     write_byte(2)  // width
    809.     write_byte(200) // r
    810.     write_byte(200);  // g
    811.     write_byte(200);  // b
    812.     write_byte(200); // brightness
    813.     message_end();
    814. }
    815.  
    816. public fw_Scythe_Think2(Ent)
    817. {
    818.     if(!pev_valid(Ent))
    819.         return
    820.        
    821.     static Float:Time; pev(Ent, pev_fuser1, Time)
    822.     static Next; Next = pev(Ent, pev_iuser2)
    823.     static Team; Team = pev(Ent, pev_iuser1)
    824.    
    825.     if(Time <= get_gametime())
    826.     {
    827.         static Float:Origin[3];
    828.         pev(Ent, pev_origin, Origin)
    829.        
    830.         Thanatos5_Explose(Origin)
    831.         emit_sound(Ent, CHAN_BODY, WeaponSounds[2], VOL_NORM, ATTN_NONE, 0, PITCH_NORM)
    832.        
    833.         static ID; ID = pev(Ent, pev_owner)
    834.         if(!is_user_connected(ID))
    835.         {
    836.             set_pev(Ent, pev_flags, FL_KILLME)
    837.             set_pev(Ent, pev_nextthink, get_gametime() + 0.1)
    838.            
    839.             return
    840.         }
    841.        
    842.         Thanatos5_Damage(ID, Team, Origin)
    843.         if(Next) Create_ScytheSystem(ID, Ent, 0)
    844.        
    845.         set_pev(Ent, pev_flags, FL_KILLME)
    846.         set_pev(Ent, pev_nextthink, get_gametime() + 0.1)
    847.        
    848.         return
    849.     }
    850.    
    851.     set_pev(Ent, pev_nextthink, get_gametime() + 0.1)
    852. }
    853.  
    854. public Thanatos5_Explose(Float:Origin[3])
    855. {
    856.     message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
    857.     write_byte(TE_EXPLOSION)
    858.     engfunc(EngFunc_WriteCoord, Origin[0])
    859.     engfunc(EngFunc_WriteCoord, Origin[1])
    860.     engfunc(EngFunc_WriteCoord, Origin[2])
    861.     write_short(g_Exp_SprID)    // sprite index
    862.     write_byte(5)   // scale in 0.1's
    863.     write_byte(30)  // framerate
    864.     write_byte(TE_EXPLFLAG_NOSOUND) // flags
    865.     message_end()
    866.    
    867.     message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
    868.     write_byte(TE_EXPLOSION)
    869.     engfunc(EngFunc_WriteCoord, Origin[0])
    870.     engfunc(EngFunc_WriteCoord, Origin[1])
    871.     engfunc(EngFunc_WriteCoord, Origin[2])
    872.     write_short(g_Exp2_SprID)   // sprite index
    873.     write_byte(5)   // scale in 0.1's
    874.     write_byte(30)  // framerate
    875.     write_byte(TE_EXPLFLAG_NOSOUND | TE_EXPLFLAG_NODLIGHTS) // flags
    876.     message_end()
    877. }
    878.  
    879. public Thanatos5_Damage(id, Team, Float:Origin[3])
    880. {
    881.     static Float:MyOrigin[3]
    882.     for(new i = 0; i < g_MaxPlayers; i++)
    883.     {
    884.         if(!is_user_alive(id))
    885.             continue
    886.         if(get_user_team(i) == Team)
    887.             continue
    888.         if(id == i)
    889.             continue
    890.         pev(i, pev_origin, MyOrigin)
    891.         if(get_distance_f(Origin, MyOrigin) > SCYTHE_RADIUS)
    892.             continue
    893.            
    894.         ExecuteHamB(Ham_TakeDamage, i, 0, id, float(DAMAGE_B), DMG_BULLET)
    895.     }
    896. }
    897.  
    898. // Drop primary/secondary weapons
    899. stock drop_weapons(id, dropwhat)
    900. {
    901.     // Get user weapons
    902.     static weapons[32], num, i, weaponid
    903.     num = 0 // reset passed weapons count (bugfix)
    904.     get_user_weapons(id, weapons, num)
    905.    
    906.     // Loop through them and drop primaries or secondaries
    907.     for (i = 0; i < num; i++)
    908.     {
    909.         // Prevent re-indexing the array
    910.         weaponid = weapons[i]
    911.        
    912.         if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
    913.         {
    914.             // Get weapon entity
    915.             static wname[32]; get_weaponname(weaponid, wname, charsmax(wname))
    916.             engclient_cmd(id, "drop", wname)
    917.         }
    918.     }
    919. }
    920.  
    921. stock Set_WeaponAnim(id, anim)
    922. {
    923.     set_pev(id, pev_weaponanim, anim)
    924.    
    925.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
    926.     write_byte(anim)
    927.     write_byte(pev(id, pev_body))
    928.     message_end()
    929. }
    930.  
    931. stock Eject_Shell(id, Shell_ModelIndex, Float:Time) // By Dias
    932. {
    933.     static Ent; Ent = get_pdata_cbase(id, 373, 5)
    934.     if(!pev_valid(Ent))
    935.         return
    936.  
    937.         set_pdata_int(Ent, 57, Shell_ModelIndex, 4)
    938.         set_pdata_float(id, 111, get_gametime() + Time)
    939. }
    940.  
    941. stock Make_BulletHole(id, Float:Origin[3], Float:Damage)
    942. {
    943.     // Find target
    944.     static Decal; Decal = random_num(41, 45)
    945.     static LoopTime;
    946.    
    947.     if(Damage > 100.0) LoopTime = 2
    948.     else LoopTime = 1
    949.    
    950.     for(new i = 0; i < LoopTime; i++)
    951.     {
    952.         // Put decal on "world" (a wall)
    953.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    954.         write_byte(TE_WORLDDECAL)
    955.         engfunc(EngFunc_WriteCoord, Origin[0])
    956.         engfunc(EngFunc_WriteCoord, Origin[1])
    957.         engfunc(EngFunc_WriteCoord, Origin[2])
    958.         write_byte(Decal)
    959.         message_end()
    960.        
    961.         // Show sparcles
    962.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    963.         write_byte(TE_GUNSHOTDECAL)
    964.         engfunc(EngFunc_WriteCoord, Origin[0])
    965.         engfunc(EngFunc_WriteCoord, Origin[1])
    966.         engfunc(EngFunc_WriteCoord, Origin[2])
    967.         write_short(id)
    968.         write_byte(Decal)
    969.         message_end()
    970.     }
    971. }
    972.  
    973. stock Make_BulletSmoke(id, TrResult)
    974. {
    975.     static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
    976.    
    977.     get_weapon_attachment(id, vecSrc)
    978.     global_get(glb_v_forward, vecEnd)
    979.    
    980.     xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
    981.     xs_vec_add(vecSrc, vecEnd, vecEnd)
    982.  
    983.     get_tr2(TrResult, TR_vecEndPos, vecSrc)
    984.     get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
    985.    
    986.     xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
    987.     xs_vec_add(vecSrc, vecEnd, vecEnd)
    988.    
    989.     TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
    990.     TE_FLAG |= TE_EXPLFLAG_NOSOUND
    991.     TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
    992.    
    993.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
    994.     write_byte(TE_EXPLOSION)
    995.     engfunc(EngFunc_WriteCoord, vecEnd[0])
    996.     engfunc(EngFunc_WriteCoord, vecEnd[1])
    997.     engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
    998.     write_short(g_SmokePuff_SprId)
    999.     write_byte(2)
    1000.     write_byte(50)
    1001.     write_byte(TE_FLAG)
    1002.     message_end()
    1003. }
    1004.  
    1005. stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
    1006. {
    1007.     static Float:vfEnd[3], viEnd[3]
    1008.     get_user_origin(id, viEnd, 3)  
    1009.     IVecFVec(viEnd, vfEnd)
    1010.    
    1011.     static Float:fOrigin[3], Float:fAngle[3]
    1012.    
    1013.     pev(id, pev_origin, fOrigin)
    1014.     pev(id, pev_view_ofs, fAngle)
    1015.    
    1016.     xs_vec_add(fOrigin, fAngle, fOrigin)
    1017.    
    1018.     static Float:fAttack[3]
    1019.    
    1020.     xs_vec_sub(vfEnd, fOrigin, fAttack)
    1021.     xs_vec_sub(vfEnd, fOrigin, fAttack)
    1022.    
    1023.     static Float:fRate
    1024.    
    1025.     fRate = fDis / vector_length(fAttack)
    1026.     xs_vec_mul_scalar(fAttack, fRate, fAttack)
    1027.    
    1028.     xs_vec_add(fOrigin, fAttack, output)
    1029. }
    1030.  
    1031. stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
    1032. {
    1033.     new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
    1034.    
    1035.     pev(id, pev_origin, vOrigin)
    1036.     pev(id, pev_view_ofs,vUp) //for player
    1037.     xs_vec_add(vOrigin,vUp,vOrigin)
    1038.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
    1039.    
    1040.     angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
    1041.     angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
    1042.     angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
    1043.    
    1044.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
    1045.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
    1046.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
    1047. }
    1048.  
    1049. stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
    1050. {
    1051.     new_velocity[0] = origin2[0] - origin1[0]
    1052.     new_velocity[1] = origin2[1] - origin1[1]
    1053.     new_velocity[2] = origin2[2] - origin1[2]
    1054.     new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
    1055.     new_velocity[0] *= num
    1056.     new_velocity[1] *= num
    1057.     new_velocity[2] *= num
    1058.    
    1059.     return 1;
    1060. }
    1061.  
    1062. stock Set_WeaponIdleTime(id, WeaponId ,Float:TimeIdle)
    1063. {
    1064.     static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
    1065.     if(!pev_valid(entwpn))
    1066.         return
    1067.        
    1068.     set_pdata_float(entwpn, 46, TimeIdle, 4)
    1069.     set_pdata_float(entwpn, 47, TimeIdle, 4)
    1070.     set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
    1071. }
Coil Gun
    1. #include <zombie_escape>
    2. #include <fakemeta_util>
    3. #include <cstrike>
    4. #include <xs>
    5.  
    6. #define PLUGIN "[CSO] Coilgun"
    7. #define VERSION "1.0"
    8. #define AUTHOR "Dias + ZE DEV TEAM"
    9.  
    10. #define DAMAGE 31 // 62 for zombie
    11. #define CLIP 100
    12. #define BPAMMO 200
    13. #define TIME_RELOAD 3.5
    14. #define TIME_SHOOT 1.0
    15.  
    16. #define MODEL_V "models/v_coilmg.mdl"
    17. #define MODEL_P "models/p_coilmg.mdl"
    18. #define MODEL_W "models/w_coilmg.mdl"
    19.  
    20. #define DARTPISTOL_OLDMODEL "models/w_m249.mdl"
    21.  
    22. new const WeaponSounds[5][] =
    23. {
    24.     "weapons/coilmg-1.wav",
    25.     "weapons/coilmg_exp1.wav",
    26.     "weapons/coilmg_exp2.wav",
    27.     "weapons/coilmg_clipin.wav",
    28.     "weapons/coilmg_clipout.wav"
    29. }
    30.  
    31. new const WeaponResources[3][] =
    32. {
    33.     "sprites/weapon_coilmg.txt",
    34.     "sprites/640hud8_2.spr",
    35.     "sprites/640hud129_2.spr"
    36. }
    37.  
    38. new const Muzzleflash[] = "sprites/muzzleflash19.spr"
    39. new const Electric_Sprite[] = "sprites/ef_coilmg.spr"
    40.  
    41. enum
    42. {
    43.     ANIME_IDLE = 0,
    44.     ANIME_RELOAD,
    45.     ANIME_DRAW,
    46.     ANIME_SHOOT,
    47.     ANIME_SHOOT2,
    48.     ANIME_SHOOT3
    49. }
    50.  
    51. // MACROS
    52. #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
    53. #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
    54. #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
    55.  
    56. // Vars
    57. new g_Had_Coilgun, g_Clip[33]
    58. new g_SprID, g_Event_Coilgun, g_SmokePuff_SprId
    59. new g_MaxPlayers, g_MsgWeaponList, g_MsgCurWeapon
    60. new g_Muzzleflash_Ent[33], g_Muzzleflash, g_iItemID
    61.  
    62.  
    63. // Safety
    64. new g_IsConnected, g_IsAlive, g_PlayerWeapon[33], g_HamBot
    65.  
    66. public plugin_init()
    67. {
    68.     register_plugin(PLUGIN, VERSION, AUTHOR)
    69.     g_iItemID = ze_register_item("Coil Gun", 40)
    70.    
    71.     // Safety
    72.     Register_SafetyFunc()
    73.    
    74.     register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
    75.    
    76.     // Forward
    77.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
    78.     register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
    79.     register_forward(FM_CmdStart, "fw_CmdStart")
    80.     register_forward(FM_SetModel, "fw_SetModel")   
    81.    
    82.     register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1)
    83.     register_forward(FM_CheckVisibility, "fw_CheckVisibility")
    84.    
    85.     // Ham
    86.     RegisterHam(Ham_Item_Deploy, "weapon_m249", "fw_Item_Deploy_Post", 1)  
    87.     RegisterHam(Ham_Item_AddToPlayer, "weapon_m249", "fw_Item_AddToPlayer_Post", 1)
    88.     RegisterHam(Ham_Weapon_WeaponIdle, "weapon_m249", "fw_Weapon_WeaponIdle_Post", 1)
    89.     RegisterHam(Ham_Item_PostFrame, "weapon_m249", "fw_Item_PostFrame")
    90.     RegisterHam(Ham_Weapon_Reload, "weapon_m249", "fw_Weapon_Reload")
    91.     RegisterHam(Ham_Weapon_Reload, "weapon_m249", "fw_Weapon_Reload_Post", 1)  
    92.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "fw_Weapon_PrimaryAttack_Post", 1)
    93.    
    94.     RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_World")
    95.     RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Player")
    96.    
    97.     g_MaxPlayers = get_maxplayers()
    98.     g_MsgCurWeapon = get_user_msgid("CurWeapon")
    99.     g_MsgWeaponList = get_user_msgid("WeaponList")
    100.    
    101.     register_clcmd("weapon_coilmg", "Hook_Weapon")
    102. }
    103.  
    104. public plugin_precache()
    105. {
    106.     precache_model(MODEL_V)
    107.     precache_model(MODEL_P)
    108.     precache_model(MODEL_W)
    109.  
    110.     for(new i = 0; i < sizeof(WeaponSounds); i++)
    111.         precache_sound(WeaponSounds[i])
    112.        
    113.     precache_generic(WeaponResources[0])
    114.     precache_model(WeaponResources[1])
    115.     precache_model(WeaponResources[2])
    116.        
    117.     g_SprID = precache_model(Electric_Sprite)
    118.     precache_model(Muzzleflash)
    119.     g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
    120.    
    121.     register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
    122. }
    123.  
    124. public fw_PrecacheEvent_Post(type, const name[])
    125. {
    126.     if(equal("events/m249.sc", name)) g_Event_Coilgun = get_orig_retval()      
    127. }
    128.  
    129. public client_putinserver(id)
    130. {
    131.     Safety_Connected(id)
    132.    
    133.     if(!g_HamBot && is_user_bot(id))
    134.     {
    135.         g_HamBot = 1
    136.         set_task(0.1, "Do_Register_HamBot", id)
    137.     }
    138. }
    139.  
    140. public Do_Register_HamBot(id)
    141. {
    142.     Register_SafetyFuncBot(id)
    143.     RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Player")
    144. }
    145.  
    146. public client_disconnect(id)
    147. {
    148.     Safety_Disconnected(id)
    149.     Muzzleflash_Reset(id)
    150. }
    151.  
    152. public Hook_Weapon(id)
    153. {
    154.     engclient_cmd(id, "weapon_m249")
    155.     return PLUGIN_HANDLED
    156. }
    157.  
    158. public ze_select_item_pre(id, itemid)
    159. {
    160.     // This not our item?
    161.     if (itemid != g_iItemID)
    162.         return ZE_ITEM_AVAILABLE
    163.    
    164.     // Available for Humans only, So don't show it for zombies
    165.     if (ze_is_user_zombie(id))
    166.         return ZE_ITEM_DONT_SHOW
    167.    
    168.     // Finally return that it's available
    169.     return ZE_ITEM_AVAILABLE
    170. }
    171.  
    172. public ze_select_item_post(id, itemid)
    173. {
    174.     // This is not our item, Block it here and don't execute the blew code
    175.     if (itemid != g_iItemID)
    176.         return
    177.    
    178.     Get_Coilgun(id)
    179. }
    180.  
    181. public Get_Coilgun(id)
    182. {
    183.     Set_BitVar(g_Had_Coilgun, id)
    184.     give_item(id, "weapon_m249")
    185.    
    186.     // Clip & Ammo
    187.     static Ent; Ent = fm_get_user_weapon_entity(id, CSW_M249)
    188.     if(!pev_valid(Ent)) return
    189.    
    190.     cs_set_weapon_ammo(Ent, CLIP)
    191.     cs_set_user_bpammo(id, CSW_M249, BPAMMO)
    192.    
    193.     message_begin(MSG_ONE_UNRELIABLE, g_MsgCurWeapon, _, id)
    194.     write_byte(1)
    195.     write_byte(CSW_M249)
    196.     write_byte(CLIP)
    197.     message_end()
    198.    
    199.     MuzzleFlash_Set(id, Muzzleflash, 0.1)
    200. }
    201.  
    202. public Remove_Coilgun(id)
    203. {
    204.     UnSet_BitVar(g_Had_Coilgun, id)
    205. }
    206.  
    207. public Event_CurWeapon(id)
    208. {
    209.     static CSW; CSW = read_data(2)
    210.     if(CSW != CSW_M249)
    211.         return
    212.     if(!Get_BitVar(g_Had_Coilgun, id)) 
    213.         return
    214.  
    215.     static Float:Delay, Float:Delay2
    216.     static Ent; Ent = fm_get_user_weapon_entity(id, CSW_M249)
    217.     if(!pev_valid(Ent)) return
    218.    
    219.     Delay = get_pdata_float(Ent, 46, 4) * TIME_SHOOT
    220.     Delay2 = get_pdata_float(Ent, 47, 4) * TIME_SHOOT
    221.    
    222.     if(Delay > 0.0)
    223.     {
    224.         set_pdata_float(Ent, 46, Delay, 4)
    225.         set_pdata_float(Ent, 47, Delay2, 4)
    226.     }
    227. }
    228.  
    229. public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
    230. {
    231.     if(!is_alive(id))
    232.         return FMRES_IGNORED   
    233.     if(get_user_weapon(id) == CSW_M249 && Get_BitVar(g_Had_Coilgun, id))
    234.         set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
    235.    
    236.     return FMRES_HANDLED
    237. }
    238.  
    239. public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
    240. {
    241.     if (!is_connected(invoker))
    242.         return FMRES_IGNORED   
    243.     if(get_player_weapon(invoker) != CSW_M249 || !Get_BitVar(g_Had_Coilgun, invoker))
    244.         return FMRES_IGNORED
    245.     if(eventid != g_Event_Coilgun)
    246.         return FMRES_IGNORED
    247.    
    248.     engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
    249.  
    250.     Set_WeaponAnim(invoker, ANIME_SHOOT)
    251.     emit_sound(invoker, CHAN_WEAPON, WeaponSounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    252.    
    253.     return FMRES_SUPERCEDE
    254. }
    255.  
    256. public fw_SetModel(entity, model[])
    257. {
    258.     if(!pev_valid(entity))
    259.         return FMRES_IGNORED
    260.    
    261.     static Classname[32]
    262.     pev(entity, pev_classname, Classname, sizeof(Classname))
    263.    
    264.     if(!equal(Classname, "weaponbox"))
    265.         return FMRES_IGNORED
    266.    
    267.     static iOwner
    268.     iOwner = pev(entity, pev_owner)
    269.    
    270.     if(equal(model, DARTPISTOL_OLDMODEL))
    271.     {
    272.         static weapon; weapon = find_ent_by_owner(-1, "weapon_m249", entity)
    273.        
    274.         if(!pev_valid(weapon))
    275.             return FMRES_IGNORED;
    276.        
    277.         if(Get_BitVar(g_Had_Coilgun, iOwner))
    278.         {
    279.             set_pev(weapon, pev_impulse, 1372015)
    280.             engfunc(EngFunc_SetModel, entity, MODEL_W)
    281.        
    282.             Remove_Coilgun(iOwner)
    283.            
    284.             return FMRES_SUPERCEDE
    285.         }
    286.     }
    287.  
    288.     return FMRES_IGNORED;
    289. }
    290.  
    291. public fw_CmdStart(id, uc_handle, seed)
    292. {
    293.     if(!is_alive(id))
    294.         return FMRES_IGNORED
    295.     if(get_user_weapon(id) != CSW_M249 || !Get_BitVar(g_Had_Coilgun, id))
    296.         return FMRES_IGNORED
    297.        
    298.    
    299.     return FMRES_HANDLED
    300. }
    301.  
    302. public fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
    303. {
    304.     if(iEnt != g_Muzzleflash_Ent[iHost])
    305.         return
    306.        
    307.     if(Get_BitVar(g_Muzzleflash, iHost))
    308.     {
    309.         set_es(esState, ES_Frame, float(random_num(0, 2)))
    310.            
    311.         set_es(esState, ES_RenderMode, kRenderTransAdd)
    312.         set_es(esState, ES_RenderAmt, 255.0)
    313.        
    314.         UnSet_BitVar(g_Muzzleflash, iHost)
    315.     }
    316.        
    317.     set_es(esState, ES_Skin, iHost)
    318.     set_es(esState, ES_Body, 1)
    319.     set_es(esState, ES_AimEnt, iHost)
    320.     set_es(esState, ES_MoveType, MOVETYPE_FOLLOW)
    321. }
    322.  
    323. public fw_CheckVisibility(iEntity, pSet)
    324. {
    325.     if(pev(iEntity, pev_impulse) != 2015)
    326.         return FMRES_IGNORED
    327.    
    328.     forward_return(FMV_CELL, 1)
    329.    
    330.     return FMRES_SUPERCEDE
    331. }
    332.  
    333. public fw_Item_Deploy_Post(Ent)
    334. {
    335.     if(pev_valid(Ent) != 2)
    336.         return
    337.     static Id; Id = get_pdata_cbase(Ent, 41, 4)
    338.     if(get_pdata_cbase(Id, 373) != Ent)
    339.         return
    340.     if(!Get_BitVar(g_Had_Coilgun, Id))
    341.         return
    342.    
    343.     set_pev(Id, pev_viewmodel2, MODEL_V)
    344.     set_pev(Id, pev_weaponmodel2, MODEL_P)
    345.    
    346.     Set_WeaponAnim(Id, ANIME_DRAW)
    347. }
    348.  
    349. public fw_Item_AddToPlayer_Post(Ent, id)
    350. {
    351.     if(!pev_valid(Ent))
    352.         return HAM_IGNORED
    353.        
    354.     if(pev(Ent, pev_impulse) == 1372015)
    355.     {
    356.         Set_BitVar(g_Had_Coilgun, id)
    357.         set_pev(Ent, pev_impulse, 0)
    358.     }
    359.    
    360.     if(Get_BitVar(g_Had_Coilgun, id))
    361.     {
    362.         message_begin(MSG_ONE_UNRELIABLE, g_MsgWeaponList, _, id)
    363.         write_string("weapon_coilmg")
    364.         write_byte(3)
    365.         write_byte(200)
    366.         write_byte(-1)
    367.         write_byte(-1)
    368.         write_byte(0)
    369.         write_byte(4)
    370.         write_byte(CSW_M249)
    371.         write_byte(0)
    372.         message_end()          
    373.     }
    374.    
    375.     return HAM_HANDLED 
    376. }
    377.  
    378. public fw_Item_PostFrame(ent)
    379. {
    380.     static id; id = pev(ent, pev_owner)
    381.     if(!is_user_alive(id))
    382.         return HAM_IGNORED
    383.     if(!Get_BitVar(g_Had_Coilgun, id))
    384.         return HAM_IGNORED 
    385.    
    386.     static Float:flNextAttack; flNextAttack = get_pdata_float(id, 83, 5)
    387.     static bpammo; bpammo = cs_get_user_bpammo(id, CSW_M249)
    388.    
    389.     static iClip; iClip = get_pdata_int(ent, 51, 4)
    390.     static fInReload; fInReload = get_pdata_int(ent, 54, 4)
    391.    
    392.     if(fInReload && flNextAttack <= 0.0)
    393.     {
    394.         static temp1
    395.         temp1 = min(CLIP - iClip, bpammo)
    396.  
    397.         set_pdata_int(ent, 51, iClip + temp1, 4)
    398.         cs_set_user_bpammo(id, CSW_M249, bpammo - temp1)       
    399.        
    400.         set_pdata_int(ent, 54, 0, 4)
    401.        
    402.         fInReload = 0
    403.     }      
    404.    
    405.     return HAM_IGNORED
    406. }
    407.  
    408. public fw_Weapon_Reload(ent)
    409. {
    410.     static id; id = pev(ent, pev_owner)
    411.     if(!is_user_alive(id))
    412.         return HAM_IGNORED
    413.     if(!Get_BitVar(g_Had_Coilgun, id))
    414.         return HAM_IGNORED 
    415.  
    416.     g_Clip[id] = -1
    417.        
    418.     static BPAmmo; BPAmmo = cs_get_user_bpammo(id, CSW_M249)
    419.     static iClip; iClip = get_pdata_int(ent, 51, 4)
    420.        
    421.     if(BPAmmo <= 0)
    422.         return HAM_SUPERCEDE
    423.     if(iClip >= CLIP)
    424.         return HAM_SUPERCEDE       
    425.            
    426.     g_Clip[id] = iClip 
    427.    
    428.     return HAM_HANDLED
    429. }
    430.  
    431. public fw_Weapon_Reload_Post(ent)
    432. {
    433.     static id; id = pev(ent, pev_owner)
    434.     if(!is_user_alive(id))
    435.         return HAM_IGNORED
    436.     if(!Get_BitVar(g_Had_Coilgun, id))
    437.         return HAM_IGNORED 
    438.    
    439.     if((get_pdata_int(ent, 54, 4) == 1))
    440.     { // Reload
    441.         if(g_Clip[id] == -1)
    442.             return HAM_IGNORED
    443.        
    444.         set_pdata_int(ent, 51, g_Clip[id], 4)
    445.         Set_WeaponAnim(id, ANIME_RELOAD)
    446.        
    447.         Set_PlayerNextAttack(id, TIME_RELOAD)
    448.     }
    449.    
    450.     return HAM_HANDLED
    451. }
    452.  
    453. public fw_Weapon_WeaponIdle_Post( iEnt )
    454. {
    455.     if(pev_valid(iEnt) != 2)
    456.         return
    457.     static Id; Id = get_pdata_cbase(iEnt, 41, 4)
    458.     if(get_pdata_cbase(Id, 373) != iEnt)
    459.         return
    460.     if(!Get_BitVar(g_Had_Coilgun, Id))
    461.         return
    462.        
    463.     //if(get_pdata_float(iEnt, 48, 4) <= 0.25)
    464.     //{
    465.         //Set_WeaponAnim(Id, g_Ammo[Id] > 0 ? ANIME_IDLE : ANIME_IDLE_EMPTY)
    466.         //set_pdata_float(iEnt, 48, 20.0, 4)
    467.     //}
    468. }
    469.  
    470. public fw_TraceAttack_World(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
    471. {
    472.     if(!is_connected(Attacker))
    473.         return HAM_IGNORED 
    474.     if(get_player_weapon(Attacker) != CSW_M249 || !Get_BitVar(g_Had_Coilgun, Attacker))
    475.         return HAM_IGNORED
    476.        
    477.     static Float:flEnd[3], Float:vecPlane[3]
    478.        
    479.     get_tr2(Ptr, TR_vecEndPos, flEnd)
    480.     get_tr2(Ptr, TR_vecPlaneNormal, vecPlane)      
    481.            
    482.     Make_BulletHole(Attacker, flEnd, Damage)
    483.     Make_BulletSmoke(Attacker, Ptr)
    484.  
    485.     SetHamParamFloat(3, float(DAMAGE))
    486.     return HAM_HANDLED
    487. }
    488.  
    489. public fw_TraceAttack_Player(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
    490. {
    491.     if(!is_connected(Attacker))
    492.         return HAM_IGNORED 
    493.     if(get_player_weapon(Attacker) != CSW_M249 || !Get_BitVar(g_Had_Coilgun, Attacker))
    494.         return HAM_IGNORED
    495.  
    496.     SetHamParamFloat(3, float(DAMAGE))
    497.    
    498.     static Float:Origin[3]; pev(Victim, pev_origin, Origin)
    499.    
    500.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    501.     write_byte(TE_EXPLOSION)
    502.     engfunc(EngFunc_WriteCoord, Origin[0])
    503.     engfunc(EngFunc_WriteCoord, Origin[1])
    504.     engfunc(EngFunc_WriteCoord, Origin[2])
    505.     write_short(g_SprID)
    506.     write_byte(6)
    507.     write_byte(15)
    508.     write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND)
    509.     message_end()
    510.    
    511.     emit_sound(Victim, CHAN_STATIC, WeaponSounds[random_num(1, 2)], VOL_NORM, ATTN_NONE, 0, PITCH_NORM)
    512.     Check_Damage(Attacker, Victim, Origin, Attacker)
    513.            
    514.     return HAM_HANDLED
    515. }
    516.  
    517. public Check_Damage(Atk, id, Float:Origin[3], Except)
    518. {
    519.     for(new i = 0; i < g_MaxPlayers; i++)
    520.     {
    521.         if(!is_alive(i))
    522.             continue
    523.         if(entity_range(id, i) > 48.0)
    524.             continue
    525.         if(Except == i)
    526.             continue
    527.            
    528.         if(id != i) ExecuteHamB(Ham_TakeDamage, i, 0, id, float(DAMAGE), DMG_BURN)
    529.     }
    530. }
    531.  
    532. public fw_Weapon_PrimaryAttack_Post(Ent)
    533. {
    534.     if(pev_valid(Ent) != 2)
    535.         return
    536.     static Id; Id = get_pdata_cbase(Ent, 41, 4)
    537.     if(get_pdata_cbase(Id, 373) != Ent)
    538.         return
    539.     if(!Get_BitVar(g_Had_Coilgun, Id))
    540.         return
    541.  
    542.     if(cs_get_weapon_ammo(Ent) > 0) Muzzleflash_Activate(Id)
    543. }
    544.  
    545. public MuzzleFlash_Set(id, const Muzzleflash[], Float:Scale)
    546. {
    547.     if(!is_user_connected(id))
    548.         return
    549.    
    550.     if(!pev_valid(g_Muzzleflash_Ent[id]))
    551.         g_Muzzleflash_Ent[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
    552.  
    553.     engfunc(EngFunc_SetModel, g_Muzzleflash_Ent[id], Muzzleflash)
    554.     set_pev(g_Muzzleflash_Ent[id], pev_scale, Scale)
    555.        
    556.     set_pev(g_Muzzleflash_Ent[id], pev_rendermode, kRenderTransTexture)
    557.     set_pev(g_Muzzleflash_Ent[id], pev_renderamt, 0.0)
    558.    
    559.     set_pev(g_Muzzleflash_Ent[id], pev_impulse, 2015)
    560. }
    561.  
    562. public Muzzleflash_Reset(id)
    563. {
    564.     if(1 > id || id > 32)
    565.         return
    566.    
    567.     if(pev_valid(g_Muzzleflash_Ent[id])) set_pev(id, pev_flags, FL_KILLME)
    568. }
    569.  
    570. public Muzzleflash_Activate(id) Set_BitVar(g_Muzzleflash, id)
    571.  
    572. /* ===============================
    573. ------------- SAFETY -------------
    574. =================================*/
    575. public Register_SafetyFunc()
    576. {
    577.     register_event("CurWeapon", "Safety_CurWeapon", "be", "1=1")
    578.    
    579.     RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
    580.     RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
    581. }
    582.  
    583. public Register_SafetyFuncBot(id)
    584. {
    585.     RegisterHamFromEntity(Ham_Spawn, id, "fw_Safety_Spawn_Post", 1)
    586.     RegisterHamFromEntity(Ham_Killed, id, "fw_Safety_Killed_Post", 1)
    587. }
    588.  
    589. public Safety_Connected(id)
    590. {
    591.     Set_BitVar(g_IsConnected, id)
    592.     UnSet_BitVar(g_IsAlive, id)
    593.    
    594.     g_PlayerWeapon[id] = 0
    595. }
    596.  
    597. public Safety_Disconnected(id)
    598. {
    599.     UnSet_BitVar(g_IsConnected, id)
    600.     UnSet_BitVar(g_IsAlive, id)
    601.    
    602.     g_PlayerWeapon[id] = 0
    603. }
    604.  
    605. public Safety_CurWeapon(id)
    606. {
    607.     if(!is_alive(id))
    608.         return
    609.        
    610.     static CSW; CSW = read_data(2)
    611.     if(g_PlayerWeapon[id] != CSW) g_PlayerWeapon[id] = CSW
    612. }
    613.  
    614. public fw_Safety_Spawn_Post(id)
    615. {
    616.     if(!is_user_alive(id))
    617.         return
    618.        
    619.     Set_BitVar(g_IsAlive, id)
    620. }
    621.  
    622. public fw_Safety_Killed_Post(id)
    623. {
    624.     UnSet_BitVar(g_IsAlive, id)
    625. }
    626.  
    627. public is_alive(id)
    628. {
    629.     if(!(1 <= id <= 32))
    630.         return 0
    631.     if(!Get_BitVar(g_IsConnected, id))
    632.         return 0
    633.     if(!Get_BitVar(g_IsAlive, id))
    634.         return 0
    635.    
    636.     return 1
    637. }
    638.  
    639. public is_connected(id)
    640. {
    641.     if(!(1 <= id <= 32))
    642.         return 0
    643.     if(!Get_BitVar(g_IsConnected, id))
    644.         return 0
    645.    
    646.     return 1
    647. }
    648.  
    649. public get_player_weapon(id)
    650. {
    651.     if(!is_alive(id))
    652.         return 0
    653.    
    654.     return g_PlayerWeapon[id]
    655. }
    656.  
    657. /* ===============================
    658. --------- End of SAFETY ----------
    659. =================================*/
    660.  
    661. stock Set_WeaponAnim(id, anim)
    662. {
    663.     set_pev(id, pev_weaponanim, anim)
    664.    
    665.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
    666.     write_byte(anim)
    667.     write_byte(pev(id, pev_body))
    668.     message_end()
    669. }
    670.  
    671. stock Make_BulletHole(id, Float:Origin[3], Float:Damage)
    672. {
    673.     // Find target
    674.     static Decal; Decal = random_num(41, 45)
    675.     static LoopTime;
    676.    
    677.     if(Damage > 100.0) LoopTime = 2
    678.     else LoopTime = 1
    679.    
    680.     for(new i = 0; i < LoopTime; i++)
    681.     {
    682.         // Put decal on "world" (a wall)
    683.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    684.         write_byte(TE_WORLDDECAL)
    685.         engfunc(EngFunc_WriteCoord, Origin[0])
    686.         engfunc(EngFunc_WriteCoord, Origin[1])
    687.         engfunc(EngFunc_WriteCoord, Origin[2])
    688.         write_byte(Decal)
    689.         message_end()
    690.        
    691.         // Show sparcles
    692.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    693.         write_byte(TE_GUNSHOTDECAL)
    694.         engfunc(EngFunc_WriteCoord, Origin[0])
    695.         engfunc(EngFunc_WriteCoord, Origin[1])
    696.         engfunc(EngFunc_WriteCoord, Origin[2])
    697.         write_short(id)
    698.         write_byte(Decal)
    699.         message_end()
    700.     }
    701. }
    702.  
    703. stock Make_BulletSmoke(id, TrResult)
    704. {
    705.     static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
    706.    
    707.     get_weapon_attachment(id, vecSrc)
    708.     global_get(glb_v_forward, vecEnd)
    709.    
    710.     xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
    711.     xs_vec_add(vecSrc, vecEnd, vecEnd)
    712.  
    713.     get_tr2(TrResult, TR_vecEndPos, vecSrc)
    714.     get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
    715.    
    716.     xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
    717.     xs_vec_add(vecSrc, vecEnd, vecEnd)
    718.    
    719.     TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
    720.     TE_FLAG |= TE_EXPLFLAG_NOSOUND
    721.     TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
    722.    
    723.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
    724.     write_byte(TE_EXPLOSION)
    725.     engfunc(EngFunc_WriteCoord, vecEnd[0])
    726.     engfunc(EngFunc_WriteCoord, vecEnd[1])
    727.     engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
    728.     write_short(g_SmokePuff_SprId)
    729.     write_byte(2)
    730.     write_byte(50)
    731.     write_byte(TE_FLAG)
    732.     message_end()
    733. }
    734.  
    735. stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
    736. {
    737.     static Float:vfEnd[3], viEnd[3]
    738.     get_user_origin(id, viEnd, 3)  
    739.     IVecFVec(viEnd, vfEnd)
    740.    
    741.     static Float:fOrigin[3], Float:fAngle[3]
    742.    
    743.     pev(id, pev_origin, fOrigin)
    744.     pev(id, pev_view_ofs, fAngle)
    745.    
    746.     xs_vec_add(fOrigin, fAngle, fOrigin)
    747.    
    748.     static Float:fAttack[3]
    749.    
    750.     xs_vec_sub(vfEnd, fOrigin, fAttack)
    751.     xs_vec_sub(vfEnd, fOrigin, fAttack)
    752.    
    753.     static Float:fRate
    754.    
    755.     fRate = fDis / vector_length(fAttack)
    756.     xs_vec_mul_scalar(fAttack, fRate, fAttack)
    757.    
    758.     xs_vec_add(fOrigin, fAttack, output)
    759. }
    760.  
    761. stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
    762. {
    763.     new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
    764.    
    765.     pev(id, pev_origin, vOrigin)
    766.     pev(id, pev_view_ofs,vUp) //for player
    767.     xs_vec_add(vOrigin,vUp,vOrigin)
    768.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
    769.    
    770.     angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
    771.     angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
    772.     angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
    773.    
    774.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
    775.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
    776.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
    777. }
    778.  
    779. stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
    780. {
    781.     new_velocity[0] = origin2[0] - origin1[0]
    782.     new_velocity[1] = origin2[1] - origin1[1]
    783.     new_velocity[2] = origin2[2] - origin1[2]
    784.     new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
    785.     new_velocity[0] *= num
    786.     new_velocity[1] *= num
    787.     new_velocity[2] *= num
    788.    
    789.     return 1;
    790. }
    791.  
    792. stock Set_WeaponIdleTime(id, WeaponId ,Float:TimeIdle)
    793. {
    794.     static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
    795.     if(!pev_valid(entwpn))
    796.         return
    797.        
    798.     set_pdata_float(entwpn, 46, TimeIdle, 4)
    799.     set_pdata_float(entwpn, 47, TimeIdle, 4)
    800.     set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
    801. }
    802.  
    803. stock Set_PlayerNextAttack(id, Float:nexttime)
    804. {
    805.     set_pdata_float(id, 83, nexttime, 5)
    806. }
    807.  
    808.  
    809. stock Get_Position(id,Float:forw, Float:right, Float:up, Float:vStart[])
    810. {
    811.     static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
    812.    
    813.     pev(id, pev_origin, vOrigin)
    814.     pev(id, pev_view_ofs,vUp) //for player
    815.     xs_vec_add(vOrigin,vUp,vOrigin)
    816.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
    817.    
    818.     angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
    819.     angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
    820.     angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
    821.    
    822.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
    823.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
    824.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
    825. }
    826. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
    827. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par }
    828. */
Nobody Is That Busy If They Make Time :roll:

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#9

Post by czirimbolo » 6 years ago

I got crash, error: 'weapons/ric_conc-2.wav' failed to precache because the item count is over the 512 limit.

edit:

ok I turned off some plugins and guns works. Many thanks johnny!
Image

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#10

Post by johnnysins2000 » 6 years ago

czirimbolo wrote: 6 years ago I got crash, error: 'weapons/ric_conc-2.wav' failed to precache because the item count is over the 512 limit.

edit:

ok I turned off some plugins and guns works. Many thanks johnny!
Can u post these extra items in extra items section in the way I and Raheem Post it ?
Nobody Is That Busy If They Make Time :roll:

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#11

Post by czirimbolo » 6 years ago

Yes, tomorrow I will make it
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#12

Post by Raheem » 6 years ago

Marked as solved.
He who fails to plan is planning to fail

RichardGhval
Member
Member
Denmark
Posts: 1
Joined: 7 years ago
Location: Denmark
Contact:

#13

Post by RichardGhval » 6 years ago

Roger

Many thanks for these contacts. I will let you and everyone else know how I get on

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#14

Post by Night Fury » 6 years ago

RichardGhval wrote: 6 years ago Roger

Many thanks for these contacts. I will let you and everyone else know how I get on
What?! Is this anther account?
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 5 guests