hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.29. 10:38



Jelenlévő felhasználók

Jelenleg 331 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 330 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 17 hozzászólás ]  Oldal 1 2 Következő
Szerző Üzenet
 Hozzászólás témája: Dual Infinity
HozzászólásElküldve: 2013.08.31. 16:53 
Offline
Senior Tag

Csatlakozott: 2012.07.09. 11:57
Hozzászólások: 234
Megköszönt másnak: 20 alkalommal
Megköszönték neki: 12 alkalommal
Hali valaki átírná ezt nekem hogy működjön csbe? és a dual_inf consol parancsal lehessen lekérni.
Mert amit kaptam tutorialt azt megpróbáltam de gondoltam hogy nemlessz jó mert voltak olyan részek amik ebbe nincsennek is benne.
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <hamsandwich>
  5. #include <fakemeta_util>
  6. #include <zombieplague>
  7.  
  8. #define PLUGIN "[ZP]ExtraDualInfinity"
  9. #define VERSION "1.0"
  10. #define AUTHOR "Arwel"
  11.  
  12. #define CONFIG_CFG_FILE "weapons/dual_infinity.cfg"
  13.  
  14. #define OFFSET_LINUX_WEAPONS 4
  15. #define OFFSET_LINUX 5
  16.  
  17. #define m_flNextAttack 83
  18. #define m_flNextPrimaryAttack 46
  19. #define m_flTimeWeaponIdle 48
  20. #define m_fInReload 54
  21.  
  22. #define pev_weaponkey pev_impulse
  23. #define weaponkey_value 18318
  24.  
  25. #define CSW_INFINITY CSW_ELITE
  26.  
  27. new const g_weapon_entity[]="weapon_elite"
  28. new const g_weapon_event1[]="events/elite_right.sc"
  29. new const g_weapon_event2[]="events/elite_left.sc"
  30. new const g_weapon_weaponbox_model[]="models/w_elite.mdl"
  31.  
  32. new const weapon_list_txt[]="weapon_dual_infinity2"
  33.  
  34. new const weapon_list_sprites[][]=
  35. {
  36. "sprites/zp/640hud42.spr",
  37. "sprites/zp/640hud43.spr",
  38. "sprites/zp/640hud7.spr"
  39. }
  40.  
  41. new const ViewModel[]="models/zp/v_infinityex2.mdl"
  42. new const PlayerModel[]="models/zp/p_infinity.mdl"
  43. new const WorldModel[]="models/zp/w_infinity.mdl"
  44.  
  45. new const Sounds[][]=
  46. {
  47. "weapons/infi-1.wav",
  48. "weapons/infi_clipin.wav",
  49. "weapons/infi_clipon.wav",
  50. "weapons/infi_clipout.wav",
  51. "weapons/infi_draw.wav"
  52. }
  53.  
  54. new Blood[2]
  55.  
  56. new g_orig_event_dinfinity
  57.  
  58. new g_HasInfinity[33], g_player_weapon_ammo[33], Float:cl_pushangle[33][3], g_shoot_anim[33], g_hitgroup[33]
  59. new g_mode[33], g_anim_mode[33]
  60.  
  61. new g_itemid
  62.  
  63. new pcvar_item_name, pcvar_clipammo, pcvar_bpammo, pcvar_cost, pcvar_time_fire_normal, pcvar_time_fire_fast
  64.  
  65. new pcvar_normal_damage_head, pcvar_normal_damage_chest, pcvar_normal_damage_stomach, pcvar_normal_damage_arms, pcvar_normal_damage_legs
  66. new pcvar_fast_damage_head, pcvar_fast_damage_chest, pcvar_fast_damage_stomach, pcvar_fast_damage_arms, pcvar_fast_damage_legs
  67.  
  68. new Float:cvar_time_fire_normal, Float:cvar_time_fire_fast
  69.  
  70. const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
  71.  
  72. public plugin_init()
  73. {
  74. register_plugin(PLUGIN, VERSION, AUTHOR)
  75.  
  76. register_clcmd(weapon_list_txt, "Redirect")
  77.  
  78. pcvar_item_name=register_cvar("dinfinity_item_name", "Dual Infinity")
  79. pcvar_cost=register_cvar("dinfinity_cost", "15")
  80. pcvar_bpammo=register_cvar("dinfinity_bpammo", "100")
  81. pcvar_clipammo=register_cvar("dinfinity_clipammo", "40")
  82. pcvar_time_fire_normal=register_cvar("dinfinity_fire_normal_period", "0.15")
  83. pcvar_time_fire_fast=register_cvar("dinfinity_fire_fast_period", "0.02")
  84.  
  85. pcvar_normal_damage_head=register_cvar("dinfinity_normal_damage_head", "130")
  86. pcvar_normal_damage_chest=register_cvar("dinfinity_normal_damage_chest", "34")
  87. pcvar_normal_damage_stomach=register_cvar("dinfinity_normal_damage_stomach", "34")
  88. pcvar_normal_damage_arms=register_cvar("dinfinity_normal_damage_arms", "34")
  89. pcvar_normal_damage_legs=register_cvar("dinfinity_normal_damage_legs", "34")
  90.  
  91. pcvar_fast_damage_head=register_cvar("dinfinity_fast_damage_head", "115")
  92. pcvar_fast_damage_chest=register_cvar("dinfinity_fast_damage_chest", "30")
  93. pcvar_fast_damage_stomach=register_cvar("dinfinity_fast_damage_stomach", "30")
  94. pcvar_fast_damage_arms=register_cvar("dinfinity_fast_damage_arms", "30")
  95. pcvar_fast_damage_legs=register_cvar("dinfinity_fast_damage_legs", "30")
  96.  
  97. ReadSettings()
  98.  
  99. RegisterHam(Ham_Item_AddToPlayer, g_weapon_entity, "fwAddToPlayer", 1)
  100. RegisterHam(Ham_Item_Deploy, g_weapon_entity, "fwDeployPost", 1)
  101. RegisterHam(Ham_Weapon_PrimaryAttack, g_weapon_entity, "fwPrimaryAttack")
  102. RegisterHam(Ham_Weapon_Reload, g_weapon_entity, "fwReloadPre")
  103. RegisterHam(Ham_Item_PostFrame, g_weapon_entity, "fwItemPostFrame")
  104. RegisterHam(Ham_TakeDamage, "player", "fwDamagePre")
  105. RegisterHam(Ham_RemovePlayerItem, "player", "fwRemoveItem")
  106.  
  107. RegisterHam(Ham_TraceAttack, "player", "fwTraceAttackPost", 1)
  108. RegisterHam(Ham_TraceAttack, "worldspawn", "fwTraceAttackPost", 1)
  109. RegisterHam(Ham_TraceAttack, "func_breakable", "fwTraceAttackPost", 1)
  110. RegisterHam(Ham_TraceAttack, "func_wall", "fwTraceAttackPost", 1)
  111. RegisterHam(Ham_TraceAttack, "func_door", "fwTraceAttackPost", 1)
  112. RegisterHam(Ham_TraceAttack, "func_door_rotating", "fwTraceAttackPost", 1)
  113. RegisterHam(Ham_TraceAttack, "func_plat", "fwTraceAttackPost", 1)
  114. RegisterHam(Ham_TraceAttack, "func_rotating", "fwTraceAttackPost", 1)
  115.  
  116. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  117. register_forward(FM_UpdateClientData, "fwUpdateClientDataPost", 1)
  118. register_forward(FM_CmdStart, "fwCmdStart")
  119. register_forward(FM_SetModel, "fwSetModel")
  120.  
  121. new item_name[64]
  122.  
  123. get_pcvar_string(pcvar_item_name, item_name, charsmax(item_name))
  124.  
  125. g_itemid=zp_register_extra_item(item_name, get_pcvar_num(pcvar_cost), ZP_TEAM_HUMAN)
  126. }
  127.  
  128. public plugin_precache()
  129. {
  130. precache_model(ViewModel)
  131. precache_model(PlayerModel)
  132. precache_model(WorldModel)
  133.  
  134. for(new i; i<=charsmax(Sounds); i++)
  135. {
  136. precache_sound(Sounds[i])
  137. }
  138.  
  139. Blood[0] = precache_model("sprites/bloodspray.spr")
  140. Blood[1] = precache_model("sprites/blood.spr")
  141.  
  142. new tmp[128]
  143.  
  144. formatex(tmp, charsmax(tmp), "sprites/%s.txt", weapon_list_txt)
  145.  
  146. precache_generic(tmp)
  147.  
  148. for(new i; i<=charsmax(weapon_list_sprites); i++)
  149. {
  150. precache_generic(weapon_list_sprites[i])
  151.  
  152. }
  153.  
  154. register_forward(FM_PrecacheEvent, "fwPrecachePost", 1)
  155. }
  156.  
  157. public ReadSettings()
  158. {
  159. new confdir[64], path[128]
  160.  
  161. get_configsdir(confdir, charsmax(confdir))
  162.  
  163. formatex(path, charsmax(path), "%s/%s", confdir, CONFIG_CFG_FILE)
  164.  
  165. server_cmd("exec %s", path)
  166. server_exec()
  167.  
  168. cvar_time_fire_normal=get_pcvar_float(pcvar_time_fire_normal)/*ز ��鳼 諳*/
  169. cvar_time_fire_fast=get_pcvar_float(pcvar_time_fire_fast)
  170.  
  171. }
  172.  
  173. public Redirect(id)
  174. {
  175. client_cmd(id, g_weapon_entity)
  176. }
  177.  
  178. public zp_extra_item_selected(id, itemid)
  179. {
  180. if(itemid!=g_itemid)
  181. return
  182.  
  183. give_infinity(id)
  184. }
  185.  
  186. public client_disconnect(id)
  187. {
  188. g_HasInfinity[id]=false
  189. }
  190.  
  191. public zp_user_infected_post(id)
  192. {
  193. g_HasInfinity[id]=false
  194. }
  195.  
  196. public give_infinity(id)
  197. {
  198. drop_weapons(id, 2)
  199.  
  200. g_HasInfinity[id]=true
  201.  
  202. new ent=fm_give_item(id, g_weapon_entity)
  203.  
  204. cs_set_user_bpammo(id, CSW_INFINITY, get_pcvar_num(pcvar_bpammo))
  205. cs_set_weapon_ammo(ent, get_pcvar_num(pcvar_clipammo))
  206.  
  207.  
  208. InfinitySprite(id)
  209. }
  210.  
  211. public fwPrecachePost(type, const name[])
  212. {
  213. if (equal(g_weapon_event1, name) || equal(g_weapon_event2, name) )
  214. {
  215. g_orig_event_dinfinity=get_orig_retval()
  216.  
  217. return FMRES_HANDLED
  218. }
  219.  
  220. return FMRES_IGNORED
  221. }
  222.  
  223. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  224. {
  225. if ((eventid != g_orig_event_dinfinity))
  226. return FMRES_IGNORED
  227.  
  228. if (!is_valid_player(invoker))
  229. return FMRES_IGNORED
  230.  
  231. fm_playback_event(flags|FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  232.  
  233. return FMRES_SUPERCEDE
  234. }
  235.  
  236. public fwUpdateClientDataPost(id, SendWeapons, CD_Handle)
  237. {
  238. if (!is_valid_player(id))
  239. return FMRES_IGNORED
  240.  
  241. if(get_user_weapon(id)!=CSW_INFINITY)
  242. return FMRES_IGNORED
  243.  
  244.  
  245. set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001)
  246.  
  247. return FMRES_HANDLED
  248. }
  249.  
  250. public fwCmdStart(id, uc_handle, seed)
  251. {
  252. if(!is_valid_player(id))
  253. return
  254.  
  255. if(get_user_weapon(id)!=CSW_INFINITY)
  256. return
  257.  
  258. static buttons; buttons=get_uc(uc_handle, UC_Buttons)
  259.  
  260. if(!(buttons&IN_ATTACK2))
  261. {
  262. g_mode[id]=0
  263.  
  264. return
  265. }
  266.  
  267. static ent; ent=get_pdata_cbase(id, 373)
  268.  
  269. if((buttons&IN_ATTACK)) /*Fix*/
  270. {
  271. set_pdata_float(ent, m_flNextPrimaryAttack, cvar_time_fire_normal, OFFSET_LINUX_WEAPONS)
  272.  
  273. g_mode[id]=0
  274.  
  275. return
  276. }
  277.  
  278. if(get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS)||get_pdata_float(ent, m_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS)>-0.1)
  279. return
  280.  
  281. g_mode[id]=1
  282.  
  283. if(cs_get_weapon_ammo(ent)!=0)
  284. ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
  285. }
  286.  
  287. public fwSetModel(ent, model[])
  288. {
  289. if(!pev_valid(ent))
  290. return FMRES_IGNORED;
  291.  
  292. if(!equal(model, g_weapon_weaponbox_model))
  293. return FMRES_IGNORED;
  294.  
  295. static classname[33]
  296. pev(ent, pev_classname, classname, charsmax(classname))
  297.  
  298. if(!equal(classname, "weaponbox"))
  299. return FMRES_IGNORED
  300.  
  301. static owner; owner=pev(ent, pev_owner)
  302. static weap;weap=fm_find_ent_by_owner(-1, g_weapon_entity, ent)
  303.  
  304. if(g_HasInfinity[owner]&&pev_valid(weap))
  305. {
  306. set_pev(weap, pev_weaponkey, weaponkey_value)
  307.  
  308. g_HasInfinity[owner]=false
  309.  
  310. fm_entity_set_model(ent, WorldModel)
  311.  
  312. return FMRES_SUPERCEDE
  313. }
  314.  
  315. return FMRES_IGNORED
  316. }
  317.  
  318. public fwAddToPlayer(ent, id)
  319. {
  320. if(pev_valid(ent))
  321. {
  322. if(pev(ent, pev_weaponkey)==weaponkey_value)
  323. {
  324. g_HasInfinity[id] = true
  325.  
  326. set_pev(ent, pev_weaponkey, 0)
  327.  
  328. InfinitySprite(id)
  329.  
  330. return HAM_HANDLED
  331.  
  332. }
  333. }
  334.  
  335. return HAM_IGNORED
  336. }
  337.  
  338. public fwDeployPost(ent)
  339. {
  340. new id=fm_get_weapon_owner(ent)
  341.  
  342. if (!is_valid_player(id))
  343. return
  344.  
  345. set_pev(id, pev_viewmodel2, ViewModel)
  346. set_pev(id, pev_weaponmodel2, PlayerModel)
  347.  
  348. playanim(id, 15)
  349.  
  350. set_pdata_float(ent, m_flNextPrimaryAttack, 0.8, OFFSET_LINUX_WEAPONS)
  351.  
  352. g_anim_mode[id]=!g_anim_mode[id]
  353. }
  354.  
  355. public fwPrimaryAttack(ent)
  356. {
  357. new id=fm_get_weapon_owner(ent)
  358.  
  359. if (!is_valid_player(id))
  360. return
  361.  
  362. pev(id,pev_punchangle,cl_pushangle[id])
  363.  
  364. g_player_weapon_ammo[id]=cs_get_weapon_ammo(ent)
  365. }
  366.  
  367. public fwTraceAttackPost(ent, attacker, Float:damage, Float:dir[3], ptr, damage_type)
  368. {
  369. if(!is_valid_player(attacker))
  370. return
  371.  
  372. if(get_user_weapon(attacker)!=CSW_INFINITY)
  373. return
  374.  
  375. static Float:fEnd[3]
  376.  
  377. get_tr2(ptr, TR_vecEndPos, fEnd)
  378.  
  379. make_bullet_decals(attacker, fEnd)
  380.  
  381. g_hitgroup[attacker]=get_tr2(ptr, TR_iHitgroup)
  382. }
  383.  
  384. public fwReloadPre(ent)
  385. {
  386. new id=fm_get_weapon_owner(ent)
  387.  
  388. if(!is_valid_player(id))
  389. return HAM_IGNORED
  390.  
  391. static bpammo; bpammo=cs_get_user_bpammo(id, CSW_INFINITY)
  392.  
  393. static clip; clip=cs_get_weapon_ammo(ent)
  394.  
  395. if(bpammo>0&&clip<get_pcvar_num(pcvar_clipammo))
  396. {
  397. set_pdata_int(ent, 55, 0, OFFSET_LINUX_WEAPONS)
  398.  
  399. set_pdata_float(id, m_flNextAttack, 4.4, OFFSET_LINUX)
  400. set_pdata_float(ent, m_flTimeWeaponIdle, 4.4, OFFSET_LINUX_WEAPONS)
  401. set_pdata_float(ent, m_flNextPrimaryAttack, 4.4, OFFSET_LINUX_WEAPONS)
  402. set_pdata_float(ent, 47, 4.4, OFFSET_LINUX_WEAPONS)
  403.  
  404. set_pdata_int(ent, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
  405.  
  406. playanim(id, 14)
  407. }
  408.  
  409. return HAM_SUPERCEDE
  410. }
  411.  
  412. public fwItemPostFrame(ent)
  413. {
  414. new id=fm_get_weapon_owner(ent)
  415.  
  416. if(!is_valid_player(id))
  417. return
  418.  
  419. static bpammo; bpammo=cs_get_user_bpammo(id, CSW_INFINITY)
  420. static clip; clip=cs_get_weapon_ammo(ent)
  421.  
  422. if(clip<g_player_weapon_ammo[id])
  423. {
  424. g_player_weapon_ammo[id]=clip
  425.  
  426. new Float:push[3]
  427.  
  428. pev(id,pev_punchangle,push)
  429.  
  430. xs_vec_sub(push,cl_pushangle[id],push)
  431. xs_vec_mul_scalar(push,0.8,push)
  432. xs_vec_add(push,cl_pushangle[id],push)
  433.  
  434. if(g_mode[id]==0)
  435. {
  436. if(g_shoot_anim[id]==0)
  437. {
  438.  
  439. playanim(id, 2)
  440. }
  441. else
  442. {
  443. playanim(id, 12)
  444. }
  445.  
  446. set_pdata_float(ent, m_flNextPrimaryAttack, cvar_time_fire_normal, OFFSET_LINUX_WEAPONS)
  447. }
  448. else
  449. {
  450. if(g_shoot_anim[id]==0)
  451. {
  452. playanim(id, (g_anim_mode[id])?18:16)
  453.  
  454. push[0]+=1.0
  455. push[1]-=1.5
  456. }
  457. else
  458. {
  459. playanim(id, (g_anim_mode[id])?19:17)
  460.  
  461. push[0]+=1.0
  462. push[1]+=1.5
  463. }
  464.  
  465. set_pdata_float(ent, m_flNextPrimaryAttack,cvar_time_fire_fast, OFFSET_LINUX_WEAPONS)
  466. }
  467.  
  468. g_shoot_anim[id]=!g_shoot_anim[id]
  469.  
  470. set_pev(id,pev_punchangle,push)
  471.  
  472. emit_sound(id, CHAN_WEAPON, Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  473. }
  474.  
  475. if(get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS)&&get_pdata_float(id, m_flNextAttack, 5) <= 0.0 )
  476. {
  477.  
  478. set_pdata_int(ent, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
  479.  
  480. for(new i = clip; i<get_pcvar_num(pcvar_clipammo); i++)
  481. {
  482. if(bpammo==0)
  483. break
  484. bpammo--
  485. clip++
  486. }
  487.  
  488. cs_set_weapon_ammo(ent, clip)
  489. cs_set_user_bpammo(id, CSW_INFINITY, bpammo)
  490.  
  491. }
  492. }
  493.  
  494. public fwDamagePre(id, weapon, attacker, Float:damage)
  495. {
  496.  
  497. if(!is_valid_player(attacker))
  498. return
  499.  
  500. if(get_user_weapon(attacker)!=CSW_INFINITY)
  501. return
  502.  
  503. new Float:Damage
  504.  
  505. switch(g_hitgroup[attacker])
  506. {
  507.  
  508. case HIT_HEAD: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_head:pcvar_normal_damage_head)
  509.  
  510. case HIT_CHEST: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_chest:pcvar_normal_damage_chest)
  511.  
  512. case HIT_STOMACH: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_stomach:pcvar_normal_damage_stomach)
  513.  
  514. case HIT_LEFTARM: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_arms:pcvar_normal_damage_arms)
  515. case HIT_RIGHTARM: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_arms:pcvar_normal_damage_arms)
  516.  
  517. case HIT_LEFTLEG: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_legs:pcvar_normal_damage_legs)
  518. case HIT_RIGHTLEG: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_legs:pcvar_normal_damage_legs)
  519.  
  520. }
  521.  
  522. SetHamParamFloat(4, Damage)
  523. }
  524.  
  525. public fwRemoveItem(id, ent)
  526. {
  527. if(!is_valid_player(id))
  528. return
  529.  
  530. new classname[62]
  531.  
  532. pev(ent, pev_classname, classname, 61)
  533.  
  534. if(!equal(classname, g_weapon_entity))
  535. return
  536.  
  537. DefaultSprite(id)
  538.  
  539. }
  540.  
  541. public make_bullet_decals(id, Float:Origin[3])
  542. {
  543. new target, body
  544. get_user_aiming(id, target, body, 999999)
  545.  
  546. if(is_user_alive(target))
  547. {
  548. if(zp_get_user_zombie(id))
  549. {
  550. new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
  551. pev(id, pev_origin, fStart)
  552.  
  553. velocity_by_aim(id, 64, fVel)
  554.  
  555. fStart[0] = Origin[0]
  556. fStart[1] = Origin[1]
  557. fStart[2] = Origin[2]
  558. fEnd[0] = fStart[0]+fVel[0]
  559. fEnd[1] = fStart[1]+fVel[1]
  560. fEnd[2] = fStart[2]+fVel[2]
  561.  
  562. new res
  563. engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
  564. get_tr2(res, TR_vecEndPos, fRes)
  565.  
  566. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  567. write_byte(TE_BLOODSPRITE)
  568. write_coord(floatround(fStart[0]))
  569. write_coord(floatround(fStart[1]))
  570. write_coord(floatround(fStart[2]))
  571. write_short(Blood[0])
  572. write_short(Blood[1])
  573. write_byte(70)
  574. write_byte(random_num(1,2))
  575. message_end()
  576. }
  577. }
  578.  
  579. else
  580. {
  581. new decal = 41
  582.  
  583. if(target)
  584. {
  585.  
  586. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  587. write_byte(TE_DECAL)
  588. write_coord(floatround(Origin[0]))
  589. write_coord(floatround(Origin[1]))
  590. write_coord(floatround(Origin[2]))
  591. write_byte(decal)
  592. write_short(target)
  593. message_end()
  594. }
  595. else
  596. {
  597. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  598. write_byte(TE_WORLDDECAL)
  599. write_coord(floatround(Origin[0]))
  600. write_coord(floatround(Origin[1]))
  601. write_coord(floatround(Origin[2]))
  602. write_byte(decal)
  603. message_end()
  604. }
  605.  
  606.  
  607. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  608. write_byte(TE_GUNSHOTDECAL)
  609. write_coord(floatround(Origin[0]))
  610. write_coord(floatround(Origin[1]))
  611. write_coord(floatround(Origin[2]))
  612. write_short(id)
  613. write_byte(decal)
  614. message_end()
  615. }
  616. }
  617.  
  618. public InfinitySprite(id)
  619. {
  620. message_begin( MSG_ONE, get_user_msgid("WeaponList"), .player=id )
  621. write_string(weapon_list_txt)
  622. write_byte(10)
  623. write_byte(120)
  624. write_byte(-1)
  625. write_byte(-1)
  626. write_byte(1)
  627. write_byte(1)
  628. write_byte(CSW_INFINITY)
  629. write_byte(0)
  630. message_end()
  631. }
  632.  
  633. public DefaultSprite(id)
  634. {
  635. message_begin( MSG_ONE, get_user_msgid("WeaponList"), .player=id )
  636. write_string(g_weapon_entity)
  637. write_byte(10)
  638. write_byte(120)
  639. write_byte(-1)
  640. write_byte(-1)
  641. write_byte(1)
  642. write_byte(1)
  643. write_byte(CSW_INFINITY)
  644. write_byte(0)
  645. message_end()
  646. }
  647.  
  648. public is_valid_player(id)
  649. {
  650.  
  651. if(!is_user_alive(id))
  652. return false
  653.  
  654. if(!g_HasInfinity[id])
  655. return false
  656.  
  657. return true
  658. }
  659.  
  660. stock drop_weapons(id, dropwhat)
  661. {
  662. static weapons[32], num, i, weaponid
  663. num = 0
  664. get_user_weapons(id, weapons, num)
  665.  
  666. for (i = 0; i < num; i++)
  667. {
  668. weaponid = weapons[i]
  669.  
  670. if (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))
  671. {
  672. static wname[32]
  673. get_weaponname(weaponid, wname, sizeof wname - 1)
  674.  
  675. engclient_cmd(id, "drop", wname)
  676. }
  677. }
  678.  
  679. }
  680.  
  681. stock playanim(player,anim)
  682. {
  683. set_pev(player, pev_weaponanim, anim)
  684.  
  685. message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
  686. write_byte(anim)
  687. write_byte(pev(player, pev_body))
  688. message_end()
  689. }
  690.  
  691. stock fm_get_weapon_owner(weapon)
  692. {
  693. return get_pdata_cbase(weapon, 41, 4)
  694.  
  695. }

_________________
[mozgo]Bogdan for President[/mozgo]
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 17:23 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.09.23. 20:29
Hozzászólások: 325
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 87 alkalommal
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <hamsandwich>
  5. #include <fakemeta_util>
  6.  
  7. #define PLUGIN "[ZP]ExtraDualInfinity"
  8. #define VERSION "1.0"
  9. #define AUTHOR "Arwel"
  10.  
  11. #define CONFIG_CFG_FILE "weapons/dual_infinity.cfg"
  12.  
  13. #define OFFSET_LINUX_WEAPONS 4
  14. #define OFFSET_LINUX 5
  15.  
  16. #define m_flNextAttack 83
  17. #define m_flNextPrimaryAttack 46
  18. #define m_flTimeWeaponIdle 48
  19. #define m_fInReload 54
  20.  
  21. #define pev_weaponkey pev_impulse
  22. #define weaponkey_value 18318
  23.  
  24. #define CSW_INFINITY CSW_ELITE
  25.  
  26. new const g_weapon_entity[]="weapon_elite"
  27. new const g_weapon_event1[]="events/elite_right.sc"
  28. new const g_weapon_event2[]="events/elite_left.sc"
  29. new const g_weapon_weaponbox_model[]="models/w_elite.mdl"
  30.  
  31. new const weapon_list_txt[]="weapon_dual_infinity2"
  32.  
  33. new const weapon_list_sprites[][]=
  34. {
  35. "sprites/zp/640hud42.spr",
  36. "sprites/zp/640hud43.spr",
  37. "sprites/zp/640hud7.spr"
  38. }
  39.  
  40. new const ViewModel[]="models/zp/v_infinityex2.mdl"
  41. new const PlayerModel[]="models/zp/p_infinity.mdl"
  42. new const WorldModel[]="models/zp/w_infinity.mdl"
  43.  
  44. new const Sounds[][]=
  45. {
  46. "weapons/infi-1.wav",
  47. "weapons/infi_clipin.wav",
  48. "weapons/infi_clipon.wav",
  49. "weapons/infi_clipout.wav",
  50. "weapons/infi_draw.wav"
  51. }
  52.  
  53. new Blood[2]
  54.  
  55. new g_orig_event_dinfinity
  56.  
  57. new g_HasInfinity[33], g_player_weapon_ammo[33], Float:cl_pushangle[33][3], g_shoot_anim[33], g_hitgroup[33]
  58. new g_mode[33], g_anim_mode[33]
  59.  
  60. new pcvar_item_name, pcvar_clipammo, pcvar_bpammo, pcvar_time_fire_normal, pcvar_time_fire_fast
  61.  
  62. new pcvar_normal_damage_head, pcvar_normal_damage_chest, pcvar_normal_damage_stomach, pcvar_normal_damage_arms, pcvar_normal_damage_legs
  63. new pcvar_fast_damage_head, pcvar_fast_damage_chest, pcvar_fast_damage_stomach, pcvar_fast_damage_arms, pcvar_fast_damage_legs
  64.  
  65. new Float:cvar_time_fire_normal, Float:cvar_time_fire_fast
  66.  
  67. const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
  68.  
  69. public plugin_init()
  70. {
  71. register_plugin(PLUGIN, VERSION, AUTHOR)
  72.  
  73. register_clcmd(weapon_list_txt, "Redirect")
  74.  
  75. pcvar_item_name=register_cvar("dinfinity_item_name", "Dual Infinity")
  76. pcvar_bpammo=register_cvar("dinfinity_bpammo", "100")
  77. pcvar_clipammo=register_cvar("dinfinity_clipammo", "40")
  78. pcvar_time_fire_normal=register_cvar("dinfinity_fire_normal_period", "0.15")
  79. pcvar_time_fire_fast=register_cvar("dinfinity_fire_fast_period", "0.02")
  80.  
  81. pcvar_normal_damage_head=register_cvar("dinfinity_normal_damage_head", "130")
  82. pcvar_normal_damage_chest=register_cvar("dinfinity_normal_damage_chest", "34")
  83. pcvar_normal_damage_stomach=register_cvar("dinfinity_normal_damage_stomach", "34")
  84. pcvar_normal_damage_arms=register_cvar("dinfinity_normal_damage_arms", "34")
  85. pcvar_normal_damage_legs=register_cvar("dinfinity_normal_damage_legs", "34")
  86.  
  87. pcvar_fast_damage_head=register_cvar("dinfinity_fast_damage_head", "115")
  88. pcvar_fast_damage_chest=register_cvar("dinfinity_fast_damage_chest", "30")
  89. pcvar_fast_damage_stomach=register_cvar("dinfinity_fast_damage_stomach", "30")
  90. pcvar_fast_damage_arms=register_cvar("dinfinity_fast_damage_arms", "30")
  91. pcvar_fast_damage_legs=register_cvar("dinfinity_fast_damage_legs", "30")
  92.  
  93. ReadSettings()
  94.  
  95. RegisterHam(Ham_Item_AddToPlayer, g_weapon_entity, "fwAddToPlayer", 1)
  96. RegisterHam(Ham_Item_Deploy, g_weapon_entity, "fwDeployPost", 1)
  97. RegisterHam(Ham_Weapon_PrimaryAttack, g_weapon_entity, "fwPrimaryAttack")
  98. RegisterHam(Ham_Weapon_Reload, g_weapon_entity, "fwReloadPre")
  99. RegisterHam(Ham_Item_PostFrame, g_weapon_entity, "fwItemPostFrame")
  100. RegisterHam(Ham_TakeDamage, "player", "fwDamagePre")
  101. RegisterHam(Ham_RemovePlayerItem, "player", "fwRemoveItem")
  102.  
  103. RegisterHam(Ham_TraceAttack, "player", "fwTraceAttackPost", 1)
  104. RegisterHam(Ham_TraceAttack, "worldspawn", "fwTraceAttackPost", 1)
  105. RegisterHam(Ham_TraceAttack, "func_breakable", "fwTraceAttackPost", 1)
  106. RegisterHam(Ham_TraceAttack, "func_wall", "fwTraceAttackPost", 1)
  107. RegisterHam(Ham_TraceAttack, "func_door", "fwTraceAttackPost", 1)
  108. RegisterHam(Ham_TraceAttack, "func_door_rotating", "fwTraceAttackPost", 1)
  109. RegisterHam(Ham_TraceAttack, "func_plat", "fwTraceAttackPost", 1)
  110. RegisterHam(Ham_TraceAttack, "func_rotating", "fwTraceAttackPost", 1)
  111.  
  112. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  113. register_forward(FM_UpdateClientData, "fwUpdateClientDataPost", 1)
  114. register_forward(FM_CmdStart, "fwCmdStart")
  115. register_forward(FM_SetModel, "fwSetModel")
  116.  
  117. new item_name[64]
  118.  
  119. get_pcvar_string(pcvar_item_name, item_name, charsmax(item_name))
  120.  
  121. register_clcmd("dual_inf","give_infinity")
  122. }
  123.  
  124. public plugin_precache()
  125. {
  126. precache_model(ViewModel)
  127. precache_model(PlayerModel)
  128. precache_model(WorldModel)
  129.  
  130. for(new i; i<=charsmax(Sounds); i++)
  131. {
  132. precache_sound(Sounds[i])
  133. }
  134.  
  135. Blood[0] = precache_model("sprites/bloodspray.spr")
  136. Blood[1] = precache_model("sprites/blood.spr")
  137.  
  138. new tmp[128]
  139.  
  140. formatex(tmp, charsmax(tmp), "sprites/%s.txt", weapon_list_txt)
  141.  
  142. precache_generic(tmp)
  143.  
  144. for(new i; i<=charsmax(weapon_list_sprites); i++)
  145. {
  146. precache_generic(weapon_list_sprites[i])
  147.  
  148. }
  149.  
  150. register_forward(FM_PrecacheEvent, "fwPrecachePost", 1)
  151. }
  152.  
  153. public ReadSettings()
  154. {
  155. new confdir[64], path[128]
  156.  
  157. get_configsdir(confdir, charsmax(confdir))
  158.  
  159. formatex(path, charsmax(path), "%s/%s", confdir, CONFIG_CFG_FILE)
  160.  
  161. server_cmd("exec %s", path)
  162. server_exec()
  163.  
  164. cvar_time_fire_normal=get_pcvar_float(pcvar_time_fire_normal)/*?? ??? ??*/
  165. cvar_time_fire_fast=get_pcvar_float(pcvar_time_fire_fast)
  166.  
  167. }
  168.  
  169. public Redirect(id)
  170. {
  171. client_cmd(id, g_weapon_entity)
  172. }
  173.  
  174. public client_disconnect(id)
  175. {
  176. g_HasInfinity[id]=false
  177. }
  178.  
  179.  
  180. public give_infinity(id)
  181. {
  182. drop_weapons(id, 2)
  183.  
  184. g_HasInfinity[id]=true
  185.  
  186. new ent=fm_give_item(id, g_weapon_entity)
  187.  
  188. cs_set_user_bpammo(id, CSW_INFINITY, get_pcvar_num(pcvar_bpammo))
  189. cs_set_weapon_ammo(ent, get_pcvar_num(pcvar_clipammo))
  190.  
  191.  
  192. InfinitySprite(id)
  193. }
  194.  
  195. public fwPrecachePost(type, const name[])
  196. {
  197. if (equal(g_weapon_event1, name) || equal(g_weapon_event2, name) )
  198. {
  199. g_orig_event_dinfinity=get_orig_retval()
  200.  
  201. return FMRES_HANDLED
  202. }
  203.  
  204. return FMRES_IGNORED
  205. }
  206.  
  207. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  208. {
  209. if ((eventid != g_orig_event_dinfinity))
  210. return FMRES_IGNORED
  211.  
  212. if (!is_valid_player(invoker))
  213. return FMRES_IGNORED
  214.  
  215. fm_playback_event(flags|FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  216.  
  217. return FMRES_SUPERCEDE
  218. }
  219.  
  220. public fwUpdateClientDataPost(id, SendWeapons, CD_Handle)
  221. {
  222. if (!is_valid_player(id))
  223. return FMRES_IGNORED
  224.  
  225. if(get_user_weapon(id)!=CSW_INFINITY)
  226. return FMRES_IGNORED
  227.  
  228.  
  229. set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001)
  230.  
  231. return FMRES_HANDLED
  232. }
  233.  
  234. public fwCmdStart(id, uc_handle, seed)
  235. {
  236. if(!is_valid_player(id))
  237. return
  238.  
  239. if(get_user_weapon(id)!=CSW_INFINITY)
  240. return
  241.  
  242. static buttons; buttons=get_uc(uc_handle, UC_Buttons)
  243.  
  244. if(!(buttons&IN_ATTACK2))
  245. {
  246. g_mode[id]=0
  247.  
  248. return
  249. }
  250.  
  251. static ent; ent=get_pdata_cbase(id, 373)
  252.  
  253. if((buttons&IN_ATTACK)) /*Fix*/
  254. {
  255. set_pdata_float(ent, m_flNextPrimaryAttack, cvar_time_fire_normal, OFFSET_LINUX_WEAPONS)
  256.  
  257. g_mode[id]=0
  258.  
  259. return
  260. }
  261.  
  262. if(get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS)||get_pdata_float(ent, m_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS)>-0.1)
  263. return
  264.  
  265. g_mode[id]=1
  266.  
  267. if(cs_get_weapon_ammo(ent)!=0)
  268. ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
  269. }
  270.  
  271. public fwSetModel(ent, model[])
  272. {
  273. if(!pev_valid(ent))
  274. return FMRES_IGNORED;
  275.  
  276. if(!equal(model, g_weapon_weaponbox_model))
  277. return FMRES_IGNORED;
  278.  
  279. static classname[33]
  280. pev(ent, pev_classname, classname, charsmax(classname))
  281.  
  282. if(!equal(classname, "weaponbox"))
  283. return FMRES_IGNORED
  284.  
  285. static owner; owner=pev(ent, pev_owner)
  286. static weap;weap=fm_find_ent_by_owner(-1, g_weapon_entity, ent)
  287.  
  288. if(g_HasInfinity[owner]&&pev_valid(weap))
  289. {
  290. set_pev(weap, pev_weaponkey, weaponkey_value)
  291.  
  292. g_HasInfinity[owner]=false
  293.  
  294. fm_entity_set_model(ent, WorldModel)
  295.  
  296. return FMRES_SUPERCEDE
  297. }
  298.  
  299. return FMRES_IGNORED
  300. }
  301.  
  302. public fwAddToPlayer(ent, id)
  303. {
  304. if(pev_valid(ent))
  305. {
  306. if(pev(ent, pev_weaponkey)==weaponkey_value)
  307. {
  308. g_HasInfinity[id] = true
  309.  
  310. set_pev(ent, pev_weaponkey, 0)
  311.  
  312. InfinitySprite(id)
  313.  
  314. return HAM_HANDLED
  315.  
  316. }
  317. }
  318.  
  319. return HAM_IGNORED
  320. }
  321.  
  322. public fwDeployPost(ent)
  323. {
  324. new id=fm_get_weapon_owner(ent)
  325.  
  326. if (!is_valid_player(id))
  327. return
  328.  
  329. set_pev(id, pev_viewmodel2, ViewModel)
  330. set_pev(id, pev_weaponmodel2, PlayerModel)
  331.  
  332. playanim(id, 15)
  333.  
  334. set_pdata_float(ent, m_flNextPrimaryAttack, 0.8, OFFSET_LINUX_WEAPONS)
  335.  
  336. g_anim_mode[id]=!g_anim_mode[id]
  337. }
  338.  
  339. public fwPrimaryAttack(ent)
  340. {
  341. new id=fm_get_weapon_owner(ent)
  342.  
  343. if (!is_valid_player(id))
  344. return
  345.  
  346. pev(id,pev_punchangle,cl_pushangle[id])
  347.  
  348. g_player_weapon_ammo[id]=cs_get_weapon_ammo(ent)
  349. }
  350.  
  351. public fwTraceAttackPost(ent, attacker, Float:damage, Float:dir[3], ptr, damage_type)
  352. {
  353. if(!is_valid_player(attacker))
  354. return
  355.  
  356. if(get_user_weapon(attacker)!=CSW_INFINITY)
  357. return
  358.  
  359. static Float:fEnd[3]
  360.  
  361. get_tr2(ptr, TR_vecEndPos, fEnd)
  362.  
  363. make_bullet_decals(attacker, fEnd)
  364.  
  365. g_hitgroup[attacker]=get_tr2(ptr, TR_iHitgroup)
  366. }
  367.  
  368. public fwReloadPre(ent)
  369. {
  370. new id=fm_get_weapon_owner(ent)
  371.  
  372. if(!is_valid_player(id))
  373. return HAM_IGNORED
  374.  
  375. static bpammo; bpammo=cs_get_user_bpammo(id, CSW_INFINITY)
  376.  
  377. static clip; clip=cs_get_weapon_ammo(ent)
  378.  
  379. if(bpammo>0&&clip<get_pcvar_num(pcvar_clipammo))
  380. {
  381. set_pdata_int(ent, 55, 0, OFFSET_LINUX_WEAPONS)
  382.  
  383. set_pdata_float(id, m_flNextAttack, 4.4, OFFSET_LINUX)
  384. set_pdata_float(ent, m_flTimeWeaponIdle, 4.4, OFFSET_LINUX_WEAPONS)
  385. set_pdata_float(ent, m_flNextPrimaryAttack, 4.4, OFFSET_LINUX_WEAPONS)
  386. set_pdata_float(ent, 47, 4.4, OFFSET_LINUX_WEAPONS)
  387.  
  388. set_pdata_int(ent, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
  389.  
  390. playanim(id, 14)
  391. }
  392.  
  393. return HAM_SUPERCEDE
  394. }
  395.  
  396. public fwItemPostFrame(ent)
  397. {
  398. new id=fm_get_weapon_owner(ent)
  399.  
  400. if(!is_valid_player(id))
  401. return
  402.  
  403. static bpammo; bpammo=cs_get_user_bpammo(id, CSW_INFINITY)
  404. static clip; clip=cs_get_weapon_ammo(ent)
  405.  
  406. if(clip<g_player_weapon_ammo[id])
  407. {
  408. g_player_weapon_ammo[id]=clip
  409.  
  410. new Float:push[3]
  411.  
  412. pev(id,pev_punchangle,push)
  413.  
  414. xs_vec_sub(push,cl_pushangle[id],push)
  415. xs_vec_mul_scalar(push,0.8,push)
  416. xs_vec_add(push,cl_pushangle[id],push)
  417.  
  418. if(g_mode[id]==0)
  419. {
  420. if(g_shoot_anim[id]==0)
  421. {
  422.  
  423. playanim(id, 2)
  424. }
  425. else
  426. {
  427. playanim(id, 12)
  428. }
  429.  
  430. set_pdata_float(ent, m_flNextPrimaryAttack, cvar_time_fire_normal, OFFSET_LINUX_WEAPONS)
  431. }
  432. else
  433. {
  434. if(g_shoot_anim[id]==0)
  435. {
  436. playanim(id, (g_anim_mode[id])?18:16)
  437.  
  438. push[0]+=1.0
  439. push[1]-=1.5
  440. }
  441. else
  442. {
  443. playanim(id, (g_anim_mode[id])?19:17)
  444.  
  445. push[0]+=1.0
  446. push[1]+=1.5
  447. }
  448.  
  449. set_pdata_float(ent, m_flNextPrimaryAttack,cvar_time_fire_fast, OFFSET_LINUX_WEAPONS)
  450. }
  451.  
  452. g_shoot_anim[id]=!g_shoot_anim[id]
  453.  
  454. set_pev(id,pev_punchangle,push)
  455.  
  456. emit_sound(id, CHAN_WEAPON, Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  457. }
  458.  
  459. if(get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS)&&get_pdata_float(id, m_flNextAttack, 5) <= 0.0 )
  460. {
  461.  
  462. set_pdata_int(ent, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
  463.  
  464. for(new i = clip; i<get_pcvar_num(pcvar_clipammo); i++)
  465. {
  466. if(bpammo==0)
  467. break
  468. bpammo--
  469. clip++
  470. }
  471.  
  472. cs_set_weapon_ammo(ent, clip)
  473. cs_set_user_bpammo(id, CSW_INFINITY, bpammo)
  474.  
  475. }
  476. }
  477.  
  478. public fwDamagePre(id, weapon, attacker, Float:damage)
  479. {
  480.  
  481. if(!is_valid_player(attacker))
  482. return
  483.  
  484. if(get_user_weapon(attacker)!=CSW_INFINITY)
  485. return
  486.  
  487. new Float:Damage
  488.  
  489. switch(g_hitgroup[attacker])
  490. {
  491.  
  492. case HIT_HEAD: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_head:pcvar_normal_damage_head)
  493.  
  494. case HIT_CHEST: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_chest:pcvar_normal_damage_chest)
  495.  
  496. case HIT_STOMACH: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_stomach:pcvar_normal_damage_stomach)
  497.  
  498. case HIT_LEFTARM: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_arms:pcvar_normal_damage_arms)
  499. case HIT_RIGHTARM: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_arms:pcvar_normal_damage_arms)
  500.  
  501. case HIT_LEFTLEG: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_legs:pcvar_normal_damage_legs)
  502. case HIT_RIGHTLEG: Damage=get_pcvar_float((g_mode[attacker])?pcvar_fast_damage_legs:pcvar_normal_damage_legs)
  503.  
  504. }
  505.  
  506. SetHamParamFloat(4, Damage)
  507. }
  508.  
  509. public fwRemoveItem(id, ent)
  510. {
  511. if(!is_valid_player(id))
  512. return
  513.  
  514. new classname[62]
  515.  
  516. pev(ent, pev_classname, classname, 61)
  517.  
  518. if(!equal(classname, g_weapon_entity))
  519. return
  520.  
  521. DefaultSprite(id)
  522.  
  523. }
  524.  
  525. public make_bullet_decals(id, Float:Origin[3])
  526. {
  527. new target, body
  528. get_user_aiming(id, target, body, 999999)
  529.  
  530. if(is_user_alive(target))
  531. {
  532. new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
  533. pev(id, pev_origin, fStart)
  534.  
  535. velocity_by_aim(id, 64, fVel)
  536.  
  537. fStart[0] = Origin[0]
  538. fStart[1] = Origin[1]
  539. fStart[2] = Origin[2]
  540. fEnd[0] = fStart[0]+fVel[0]
  541. fEnd[1] = fStart[1]+fVel[1]
  542. fEnd[2] = fStart[2]+fVel[2]
  543.  
  544. new res
  545. engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
  546. get_tr2(res, TR_vecEndPos, fRes)
  547.  
  548. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  549. write_byte(TE_BLOODSPRITE)
  550. write_coord(floatround(fStart[0]))
  551. write_coord(floatround(fStart[1]))
  552. write_coord(floatround(fStart[2]))
  553. write_short(Blood[0])
  554. write_short(Blood[1])
  555. write_byte(70)
  556. write_byte(random_num(1,2))
  557. message_end()
  558. }
  559.  
  560. else
  561. {
  562. new decal = 41
  563.  
  564. if(target)
  565. {
  566.  
  567. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  568. write_byte(TE_DECAL)
  569. write_coord(floatround(Origin[0]))
  570. write_coord(floatround(Origin[1]))
  571. write_coord(floatround(Origin[2]))
  572. write_byte(decal)
  573. write_short(target)
  574. message_end()
  575. }
  576. else
  577. {
  578. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  579. write_byte(TE_WORLDDECAL)
  580. write_coord(floatround(Origin[0]))
  581. write_coord(floatround(Origin[1]))
  582. write_coord(floatround(Origin[2]))
  583. write_byte(decal)
  584. message_end()
  585. }
  586.  
  587.  
  588. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  589. write_byte(TE_GUNSHOTDECAL)
  590. write_coord(floatround(Origin[0]))
  591. write_coord(floatround(Origin[1]))
  592. write_coord(floatround(Origin[2]))
  593. write_short(id)
  594. write_byte(decal)
  595. message_end()
  596. }
  597. }
  598.  
  599. public InfinitySprite(id)
  600. {
  601. message_begin( MSG_ONE, get_user_msgid("WeaponList"), .player=id )
  602. write_string(weapon_list_txt)
  603. write_byte(10)
  604. write_byte(120)
  605. write_byte(-1)
  606. write_byte(-1)
  607. write_byte(1)
  608. write_byte(1)
  609. write_byte(CSW_INFINITY)
  610. write_byte(0)
  611. message_end()
  612. }
  613.  
  614. public DefaultSprite(id)
  615. {
  616. message_begin( MSG_ONE, get_user_msgid("WeaponList"), .player=id )
  617. write_string(g_weapon_entity)
  618. write_byte(10)
  619. write_byte(120)
  620. write_byte(-1)
  621. write_byte(-1)
  622. write_byte(1)
  623. write_byte(1)
  624. write_byte(CSW_INFINITY)
  625. write_byte(0)
  626. message_end()
  627. }
  628.  
  629. public is_valid_player(id)
  630. {
  631.  
  632. if(!is_user_alive(id))
  633. return false
  634.  
  635. if(!g_HasInfinity[id])
  636. return false
  637.  
  638. return true
  639. }
  640.  
  641. stock drop_weapons(id, dropwhat)
  642. {
  643. static weapons[32], num, i, weaponid
  644. num = 0
  645. get_user_weapons(id, weapons, num)
  646.  
  647. for (i = 0; i < num; i++)
  648. {
  649. weaponid = weapons[i]
  650.  
  651. if (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))
  652. {
  653. static wname[32]
  654. get_weaponname(weaponid, wname, sizeof wname - 1)
  655.  
  656. engclient_cmd(id, "drop", wname)
  657. }
  658. }
  659.  
  660. }
  661.  
  662. stock playanim(player,anim)
  663. {
  664. set_pev(player, pev_weaponanim, anim)
  665.  
  666. message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
  667. write_byte(anim)
  668. write_byte(pev(player, pev_body))
  669. message_end()
  670. }
  671.  
  672. stock fm_get_weapon_owner(weapon)
  673. {
  674. return get_pdata_cbase(weapon, 41, 4)
  675.  
  676. }

Ők köszönték meg Vinnice nek ezt a hozzászólást: JAck (2013.08.31. 17:25)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 17:25 
Offline
Senior Tag

Csatlakozott: 2012.07.09. 11:57
Hozzászólások: 234
Megköszönt másnak: 20 alkalommal
Megköszönték neki: 12 alkalommal
Ha küldök még 3mat megcsinálod azokat is?

_________________
[mozgo]Bogdan for President[/mozgo]
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 19:37 
Offline
Felfüggesztve

Csatlakozott: 2013.08.09. 22:37
Hozzászólások: 571
Megköszönt másnak: 10 alkalommal
Megköszönték neki: 85 alkalommal
Küldjed. megcsinálom helyette


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 20:03 
Offline
Senior Tag

Csatlakozott: 2012.07.09. 11:57
Hozzászólások: 234
Megköszönt másnak: 20 alkalommal
Megköszönték neki: 12 alkalommal
ittvan még ez ezt balrog3 consol parancsal lehessen.
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <fakemeta_util>
  4. #include <hamsandwich>
  5. #include <cstrike>
  6.  
  7. #define PLUGIN "Balrog-III"
  8. #define VERSION "1.0"
  9. #define AUTHOR "Dias"
  10.  
  11. #define V_MODEL "models/v_balrog3.mdl"
  12. #define P_MODEL "models/p_balrog3.mdl"
  13. #define W_MODEL "models/w_balrog3.mdl"
  14.  
  15. #define DAMAGE 24
  16. #define BPAMMO 240
  17. #define ACTIVE_CLIP 15
  18.  
  19. #define CSW_BALROG3 CSW_MP5NAVY
  20. #define weapon_balrog3 "weapon_mp5navy"
  21.  
  22. #define WEAPON_SECRETCODE 4962
  23. #define WEAPON_EVENT "events/mp5n.sc"
  24. #define OLD_W_MODEL "models/w_mp5.mdl"
  25.  
  26. new const Balrog3_Sounds[6][] =
  27. {
  28. "weapons/balrig3-1.wav",
  29. "weapons/balrig3-2.wav",
  30. "weapons/balrig3_boltpull.wav",
  31. "weapons/balrig3_clipin.wav",
  32. "weapons/balrig3_clipout.wav",
  33. "weapons/balrig3_draw.wav"
  34. }
  35.  
  36. #define EXPLOSE_SPR "sprites/balrog5stack.spr"
  37.  
  38. enum
  39. {
  40. ANIM_IDLE = 0,
  41. ANIM_DRAW,
  42. ANIM_RELOAD,
  43. ANIM_SHOOT_A,
  44. ANIM_SHOOT_B
  45. }
  46.  
  47.  
  48. new g_Had_Balrog3[33], g_Shoot_Special[33], g_Holding_Attack[33], g_Shoot_Count[33], g_Old_Weapon[33], g_Current_Weapon[33]
  49. new g_Exp_SprId, g_balrog3_event, g_ShellId, g_SmokePuff_SprId
  50.  
  51. public plugin_init()
  52. {
  53. register_plugin(PLUGIN, VERSION, AUTHOR)
  54.  
  55. register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
  56.  
  57. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  58. register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
  59. register_forward(FM_SetModel, "fw_SetModel")
  60. register_forward(FM_CmdStart, "fw_CmdStart")
  61.  
  62. RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
  63. RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
  64. RegisterHam(Ham_Weapon_PrimaryAttack, weapon_balrog3, "fw_Weapon_PrimaryAttack")
  65. RegisterHam(Ham_Weapon_PrimaryAttack, weapon_balrog3, "fw_Weapon_PrimaryAttack_Post", 1)
  66. RegisterHam(Ham_Item_AddToPlayer, weapon_balrog3, "fw_Item_AddToPlayer_Post", 1)
  67.  
  68. register_clcmd("admin_get_balrog3", "Get_Balrog3", ADMIN_BAN)
  69. }
  70.  
  71. public plugin_precache()
  72. {
  73. engfunc(EngFunc_PrecacheModel, V_MODEL)
  74. engfunc(EngFunc_PrecacheModel, P_MODEL)
  75. engfunc(EngFunc_PrecacheModel, W_MODEL)
  76.  
  77. for(new i = 0; i < sizeof(Balrog3_Sounds); i++)
  78. engfunc(EngFunc_PrecacheSound, Balrog3_Sounds[i])
  79.  
  80. g_Exp_SprId = engfunc(EngFunc_PrecacheModel, EXPLOSE_SPR)
  81. g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
  82. g_ShellId = engfunc(EngFunc_PrecacheModel, "models/pshell.mdl")
  83.  
  84. register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
  85. }
  86.  
  87. public fw_PrecacheEvent_Post(type, const name[])
  88. {
  89. if(equal(WEAPON_EVENT, name))
  90. g_balrog3_event = get_orig_retval()
  91. }
  92.  
  93. public Get_Balrog3(id)
  94. {
  95. if(!is_user_alive(id))
  96. return
  97.  
  98. g_Had_Balrog3[id] = 1
  99. g_Shoot_Special[id] = 0
  100. g_Holding_Attack[id] = 0
  101. g_Shoot_Count[id] = 0
  102.  
  103. fm_give_item(id, weapon_balrog3)
  104.  
  105. cs_set_user_bpammo(id, CSW_BALROG3, BPAMMO)
  106. }
  107.  
  108. public Remove_Balrog3(id)
  109. {
  110. if(!is_user_connected(id))
  111. return
  112.  
  113. g_Had_Balrog3[id] = 0
  114. g_Shoot_Special[id] = 0
  115. }
  116.  
  117. public Event_CurWeapon(id)
  118. {
  119. if(!is_user_alive(id))
  120. return
  121.  
  122. if(get_user_weapon(id) != g_Current_Weapon[id]) g_Current_Weapon[id] = get_user_weapon(id)
  123.  
  124. if(get_user_weapon(id) == CSW_BALROG3 && g_Had_Balrog3[id])
  125. {
  126. if(g_Old_Weapon[id] != CSW_BALROG3)
  127. {
  128. set_pev(id, pev_viewmodel2, V_MODEL)
  129. set_pev(id, pev_weaponmodel2, P_MODEL)
  130. }
  131. }
  132.  
  133. g_Old_Weapon[id] = get_user_weapon(id)
  134. }
  135.  
  136. public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
  137. {
  138. if(!is_user_alive(id) || !is_user_connected(id))
  139. return FMRES_IGNORED
  140. if(get_user_weapon(id) == CSW_BALROG3 && g_Had_Balrog3[id])
  141. set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
  142.  
  143. return FMRES_HANDLED
  144. }
  145.  
  146. public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  147. {
  148. if (!is_user_connected(invoker))
  149. return FMRES_IGNORED
  150. if(get_user_weapon(invoker) != CSW_BALROG3 || !g_Had_Balrog3[invoker])
  151. return FMRES_IGNORED
  152. if(eventid != g_balrog3_event)
  153. return FMRES_IGNORED
  154.  
  155. engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  156.  
  157. if(!g_Shoot_Special[invoker] && cs_get_user_bpammo(invoker, CSW_BALROG3) > 0)
  158. {
  159. g_Shoot_Count[invoker]++
  160. if(g_Shoot_Count[invoker] >= ACTIVE_CLIP)
  161. {
  162. g_Shoot_Special[invoker] = 1
  163.  
  164. static Ent; Ent = fm_get_user_weapon_entity(invoker, CSW_BALROG3)
  165. if(pev_valid(Ent)) g_Shoot_Count[invoker] = cs_get_weapon_ammo(Ent)
  166. }
  167. } else if(g_Shoot_Special[invoker]) {
  168. cs_set_user_bpammo(invoker, CSW_BALROG3, cs_get_user_bpammo(invoker, CSW_BALROG3) - 1)
  169.  
  170. if(cs_get_user_bpammo(invoker, CSW_BALROG3) <= 0)
  171. {
  172. g_Shoot_Special[invoker] = 0
  173. g_Shoot_Count[invoker] = 0
  174. }
  175. }
  176.  
  177. set_weapon_anim(invoker, g_Shoot_Special[invoker] == 1 ? ANIM_SHOOT_B : ANIM_SHOOT_A)
  178. emit_sound(invoker, CHAN_WEAPON, g_Shoot_Special[invoker] == 1 ? Balrog3_Sounds[1] : Balrog3_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  179.  
  180. Eject_Shell(invoker, g_ShellId, 0.0)
  181.  
  182. return FMRES_SUPERCEDE
  183. }
  184.  
  185. public fw_SetModel(entity, model[])
  186. {
  187. if(!pev_valid(entity))
  188. return FMRES_IGNORED
  189.  
  190. static Classname[32]
  191. pev(entity, pev_classname, Classname, sizeof(Classname))
  192.  
  193. if(!equal(Classname, "weaponbox"))
  194. return FMRES_IGNORED
  195.  
  196. static iOwner
  197. iOwner = pev(entity, pev_owner)
  198.  
  199. if(equal(model, OLD_W_MODEL))
  200. {
  201. static weapon; weapon = fm_find_ent_by_owner(-1, weapon_balrog3, entity)
  202.  
  203. if(!pev_valid(weapon))
  204. return FMRES_IGNORED;
  205.  
  206. if(g_Had_Balrog3[iOwner])
  207. {
  208. Remove_Balrog3(iOwner)
  209.  
  210. set_pev(weapon, pev_impulse, WEAPON_SECRETCODE)
  211. engfunc(EngFunc_SetModel, entity, W_MODEL)
  212.  
  213. return FMRES_SUPERCEDE
  214. }
  215. }
  216.  
  217. return FMRES_IGNORED;
  218. }
  219.  
  220. public fw_CmdStart(id, uc_handle, seed)
  221. {
  222. if(!is_user_alive(id))
  223. return
  224. if(g_Current_Weapon[id] != CSW_BALROG3 || !g_Had_Balrog3[id])
  225. return
  226.  
  227. static NewButton; NewButton = get_uc(uc_handle, UC_Buttons)
  228. static OldButton; OldButton = pev(id, pev_oldbuttons)
  229.  
  230. if(NewButton & IN_ATTACK)
  231. {
  232. if(!g_Holding_Attack[id]) g_Holding_Attack[id] = 1
  233. } else if((NewButton & IN_ATTACK2) && !(OldButton & IN_ATTACK2)) {
  234. if(cs_get_user_zoom(id) == 1) cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
  235. else cs_set_user_zoom(id, CS_SET_NO_ZOOM, 1)
  236. } else {
  237. if(OldButton & IN_ATTACK)
  238. {
  239. if(g_Holding_Attack[id])
  240. {
  241. g_Holding_Attack[id] = 0
  242. g_Shoot_Count[id] = 0
  243. g_Shoot_Special[id] = 0
  244. }
  245. }
  246. }
  247. }
  248.  
  249. public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
  250. {
  251. if(!is_user_alive(Attacker))
  252. return HAM_IGNORED
  253. if(get_user_weapon(Attacker) != CSW_BALROG3 || !g_Had_Balrog3[Attacker])
  254. return HAM_IGNORED
  255.  
  256. static Float:flEnd[3], Float:vecPlane[3]
  257.  
  258. get_tr2(Ptr, TR_vecEndPos, flEnd)
  259. get_tr2(Ptr, TR_vecPlaneNormal, vecPlane)
  260.  
  261. if(!is_user_alive(Victim))
  262. {
  263. Make_BulletHole(Attacker, flEnd, Damage)
  264. Make_BulletSmoke(Attacker, Ptr)
  265. }
  266.  
  267. if(g_Shoot_Special[Attacker])
  268. {
  269. Make_BalrogEffect(Attacker, Ptr)
  270. radius_damage(Attacker, flEnd, float(DAMAGE), 96.0)
  271. }
  272.  
  273. SetHamParamFloat(3, float(DAMAGE))
  274.  
  275. return HAM_IGNORED
  276. }
  277.  
  278. public fw_Weapon_PrimaryAttack(Ent)
  279. {
  280. if(!pev_valid(Ent))
  281. return
  282. static Id; Id = pev(Ent, pev_owner)
  283. if(!g_Had_Balrog3[Id])
  284. return
  285.  
  286. if(g_Shoot_Special[Id]) set_pdata_float(Ent, 62, 0.4, 4)
  287. else set_pdata_float(Ent, 62, 0.2, 4)
  288. }
  289.  
  290. public fw_Weapon_PrimaryAttack_Post(Ent)
  291. {
  292. if(!pev_valid(Ent))
  293. return
  294. static Id; Id = pev(Ent, pev_owner)
  295. if(!g_Had_Balrog3[Id])
  296. return
  297.  
  298. if(g_Shoot_Special[Id] && cs_get_weapon_ammo(Ent) > 0)
  299. {
  300. cs_set_weapon_ammo(Ent, g_Shoot_Count[Id])
  301. set_pdata_float(Ent, 46, get_pdata_float(Ent, 46, 4) * 0.75, 4)
  302. }
  303. }
  304.  
  305. public fw_Item_AddToPlayer_Post(ent, id)
  306. {
  307. if(!pev_valid(ent))
  308. return HAM_IGNORED
  309.  
  310. if(pev(ent, pev_impulse) == WEAPON_SECRETCODE)
  311. {
  312. g_Had_Balrog3[id] = 1
  313. set_pev(ent, pev_impulse, 0)
  314. }
  315.  
  316. return HAM_HANDLED
  317. }
  318.  
  319. stock Make_BulletHole(id, Float:Origin[3], Float:Damage)
  320. {
  321. // Find target
  322. static Decal; Decal = random_num(41, 45)
  323. static LoopTime;
  324.  
  325. if(Damage > 100.0) LoopTime = 2
  326. else LoopTime = 1
  327.  
  328. for(new i = 0; i < LoopTime; i++)
  329. {
  330. // Put decal on "world" (a wall)
  331. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  332. write_byte(TE_WORLDDECAL)
  333. engfunc(EngFunc_WriteCoord, Origin[0])
  334. engfunc(EngFunc_WriteCoord, Origin[1])
  335. engfunc(EngFunc_WriteCoord, Origin[2])
  336. write_byte(Decal)
  337. message_end()
  338.  
  339. // Show sparcles
  340. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  341. write_byte(TE_GUNSHOTDECAL)
  342. engfunc(EngFunc_WriteCoord, Origin[0])
  343. engfunc(EngFunc_WriteCoord, Origin[1])
  344. engfunc(EngFunc_WriteCoord, Origin[2])
  345. write_short(id)
  346. write_byte(Decal)
  347. message_end()
  348. }
  349. }
  350.  
  351. public Make_BulletSmoke(id, TrResult)
  352. {
  353. static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
  354.  
  355. get_weapon_attachment(id, vecSrc)
  356. global_get(glb_v_forward, vecEnd)
  357.  
  358. xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
  359. xs_vec_add(vecSrc, vecEnd, vecEnd)
  360.  
  361. get_tr2(TrResult, TR_vecEndPos, vecSrc)
  362. get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
  363.  
  364. xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
  365. xs_vec_add(vecSrc, vecEnd, vecEnd)
  366.  
  367. TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
  368. TE_FLAG |= TE_EXPLFLAG_NOSOUND
  369. TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
  370.  
  371. engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
  372. write_byte(TE_EXPLOSION)
  373. engfunc(EngFunc_WriteCoord, vecEnd[0])
  374. engfunc(EngFunc_WriteCoord, vecEnd[1])
  375. engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
  376. write_short(g_SmokePuff_SprId)
  377. write_byte(2)
  378. write_byte(50)
  379. write_byte(TE_FLAG)
  380. message_end()
  381. }
  382.  
  383. public Make_BalrogEffect(id, TrResult)
  384. {
  385. static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
  386.  
  387. get_weapon_attachment(id, vecSrc)
  388. global_get(glb_v_forward, vecEnd)
  389.  
  390. xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
  391. xs_vec_add(vecSrc, vecEnd, vecEnd)
  392.  
  393. get_tr2(TrResult, TR_vecEndPos, vecSrc)
  394. get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
  395.  
  396. xs_vec_mul_scalar(vecEnd, 5.0, vecEnd)
  397. xs_vec_add(vecSrc, vecEnd, vecEnd)
  398.  
  399. TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
  400. TE_FLAG |= TE_EXPLFLAG_NOSOUND
  401. TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
  402.  
  403. engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
  404. write_byte(TE_EXPLOSION)
  405. engfunc(EngFunc_WriteCoord, vecEnd[0])
  406. engfunc(EngFunc_WriteCoord, vecEnd[1])
  407. engfunc(EngFunc_WriteCoord, vecEnd[2])
  408. write_short(g_Exp_SprId)
  409. write_byte(5)
  410. write_byte(30)
  411. write_byte(TE_FLAG)
  412. message_end()
  413. }
  414.  
  415. stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
  416. {
  417. new Float:vfEnd[3], viEnd[3]
  418. get_user_origin(id, viEnd, 3)
  419. IVecFVec(viEnd, vfEnd)
  420.  
  421. new Float:fOrigin[3], Float:fAngle[3]
  422.  
  423. pev(id, pev_origin, fOrigin)
  424. pev(id, pev_view_ofs, fAngle)
  425.  
  426. xs_vec_add(fOrigin, fAngle, fOrigin)
  427.  
  428. new Float:fAttack[3]
  429.  
  430. xs_vec_sub(vfEnd, fOrigin, fAttack)
  431. xs_vec_sub(vfEnd, fOrigin, fAttack)
  432.  
  433. new Float:fRate
  434.  
  435. fRate = fDis / vector_length(fAttack)
  436. xs_vec_mul_scalar(fAttack, fRate, fAttack)
  437.  
  438. xs_vec_add(fOrigin, fAttack, output)
  439. }
  440.  
  441. stock radius_damage(id, Float:Origin[3], Float:Damage, Float:Radius)
  442. {
  443. static Victim; Victim = -1
  444.  
  445. while((Victim = engfunc(EngFunc_FindEntityInSphere, Victim, Origin, Radius)) != 0)
  446. {
  447. if(!is_user_alive(Victim) || id == Victim)
  448. continue
  449.  
  450. ExecuteHamB(Ham_TakeDamage, Victim, fm_get_user_weapon_entity(id, get_user_weapon(id)), id, Damage, DMG_BULLET)
  451. }
  452. }
  453.  
  454. stock Eject_Shell(id, Shell_ModelIndex, Float:Time) // By Dias
  455. {
  456. static Ent; Ent = get_pdata_cbase(id, 373, 5)
  457. if(!pev_valid(Ent))
  458. return
  459.  
  460. set_pdata_int(Ent, 57, Shell_ModelIndex, 4)
  461. set_pdata_float(id, 111, get_gametime() + Time)
  462. }
  463.  
  464. stock set_weapon_anim(id, anim)
  465. {
  466. if(!is_user_alive(id))
  467. return
  468.  
  469. set_pev(id, pev_weaponanim, anim)
  470.  
  471. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
  472. write_byte(anim)
  473. write_byte(pev(id, pev_body))
  474. message_end()
  475. }
  476. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  477. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  478. */
  479.  

_________________
[mozgo]Bogdan for President[/mozgo]
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 20:48 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.09.23. 20:29
Hozzászólások: 325
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 87 alkalommal
Rákeresel erre:(68. Sor)
SMA Forráskód: [ Mindet kijelol ]
  1. register_clcmd("admin_get_balrog3", "Get_Balrog3", ADMIN_BAN)

Vagy át írod erre vagy feléje beilleszted ezt:
SMA Forráskód: [ Mindet kijelol ]
  1. register_clcmd("balrog3", "Get_Balrog3")


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 20:51 
Offline
Senior Tag

Csatlakozott: 2012.07.09. 11:57
Hozzászólások: 234
Megköszönt másnak: 20 alkalommal
Megköszönték neki: 12 alkalommal
Ja hogy ez csak ilyen. Akkor ittvan ez
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fun>
  5. #include <hamsandwich>
  6. #include <xs>
  7. #include <cstrike>
  8. #include <zombieplague>
  9.  
  10. enum
  11. {
  12. anim_idle,
  13. anim_reload,
  14. anim_draw,
  15. anim_shoot1,
  16. anim_shoot2,
  17. anim_shoot3
  18. }
  19.  
  20. #define ENG_NULLENT -1
  21. #define EV_INT_WEAPONKEY EV_INT_impulse
  22. #define tomi_WEAPONKEY 9142
  23. #define MAX_PLAYERS 32
  24. #define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
  25.  
  26. const USE_STOPPED = 0
  27. const OFFSET_ACTIVE_ITEM = 373
  28. const OFFSET_WEAPONOWNER = 41
  29. const OFFSET_LINUX = 5
  30. const OFFSET_LINUX_WEAPONS = 5
  31.  
  32. #define WEAP_LINUX_XTRA_OFF 4
  33. #define m_fKnown 44
  34. #define m_flNextPrimaryAttack 46
  35. #define m_flTimeWeaponIdle 48
  36. #define m_iClip 51
  37. #define m_fInReload 54
  38. #define PLAYER_LINUX_XTRA_OFF 5
  39. #define m_flNextAttack 83
  40.  
  41. #define tomi_RELOAD_TIME 4.0
  42.  
  43. const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_SG550)|(1<<CSW_P90)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_P90)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_P90)|(1<<CSW_AK47)|(1<<CSW_P90)
  44. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_p90",
  45. "weapon_p90", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_p90", "weapon_sg550",
  46. "weapon_p90", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_p90", "weapon_m249",
  47. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_p90",
  48. "weapon_ak47", "weapon_knife", "weapon_p90" }
  49.  
  50. new const Fire_Sounds[][] = { "weapons/thompson-1.wav" }
  51.  
  52. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  53.  
  54. new tomi_V_MODEL[64] = "models/cso_cz/v_th.mdl"
  55. new tomi_P_MODEL[64] = "models/cso_cz/p_th.mdl"
  56. new tomi_W_MODEL[64] = "models/cso_cz/w_th.mdl"
  57.  
  58. new cvar_dmg_tomi, cvar_recoil_tomi, cvar_clip_tomi, cvar_tomi_ammo , cvar_dmg_tomi2
  59. new g_has_tomi[33]
  60. new g_MaxPlayers, g_orig_event_tomi, g_clip_ammo[33] , g_reload[33]
  61. new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
  62. new g_tomi_TmpClip[33]
  63. new g_mode[33] , g_mode2[33]
  64. new g_itemid
  65. new g_hasZoom[33]
  66. public plugin_init()
  67. {
  68. register_plugin("[CSO:tomi(2 Regimes)]", "1.1", "Gazik")
  69. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  70. register_event("CurWeapon","CurrentWeapon","be","1=1")
  71. RegisterHam(Ham_Item_AddToPlayer, "weapon_p90", "fw_tomi_AddToPlayer")
  72. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  73. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  74. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  75. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  76. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  77. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  78. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "fw_tomi_PrimaryAttack")
  79. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "fw_tomi_PrimaryAttack_Post", 1)
  80. RegisterHam(Ham_Item_PostFrame, "weapon_p90", "tomi__ItemPostFrame");
  81. RegisterHam(Ham_Weapon_Reload, "weapon_p90", "tomi__Reload");
  82. RegisterHam(Ham_Weapon_Reload, "weapon_p90", "tomi__Reload_Post", 1);
  83. register_forward(FM_CmdStart, "fw_CmdStart")
  84. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  85. register_forward(FM_SetModel, "fw_SetModel")
  86. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  87. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  88.  
  89. cvar_dmg_tomi = register_cvar("tomi_dmg", "2.0")
  90. cvar_dmg_tomi2 = register_cvar("tomi_dmg_sniper", "3.0")
  91. cvar_recoil_tomi = register_cvar("tomi_recoil", "0.5")
  92. cvar_clip_tomi = register_cvar("tomi_clip", "50")
  93. cvar_tomi_ammo = register_cvar("tomi_ammo", "100")
  94. g_itemid = zp_register_extra_item("Автомат томпсона", 18, ZP_TEAM_HUMAN)
  95.  
  96. g_MaxPlayers = get_maxplayers()
  97. }
  98.  
  99. public plugin_precache()
  100. {
  101. precache_model(tomi_V_MODEL)
  102. precache_model(tomi_P_MODEL)
  103. precache_model(tomi_W_MODEL)
  104.  
  105. precache_sound(Fire_Sounds[0])
  106. m_iBlood[0] = precache_model("sprites/blood.spr")
  107. m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  108. precache_model("sprites/640hud5.spr")
  109. register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  110. }
  111.  
  112. public zp_extra_item_selected(id, itemid)
  113. {
  114. if(itemid == g_itemid)
  115. {
  116. give_tomi(id)
  117. }
  118. }
  119.  
  120. public plugin_natives ()
  121. {
  122. register_native("give_cso_tomi", "native_give_weapon_add", 1)
  123. register_native("get_user_tomi", "native_give_weapon_add2", 1)
  124. }
  125.  
  126. public native_give_weapon_add(id)
  127. {
  128. give_tomi(id)
  129. }
  130.  
  131. public native_give_weapon_add2(id)
  132. {
  133. return g_has_tomi[id]
  134. }
  135.  
  136. public fwPrecacheEvent_Post(type, const name[])
  137. {
  138. if (equal("events/p90.sc", name))
  139. {
  140. g_orig_event_tomi = get_orig_retval()
  141. return FMRES_HANDLED
  142. }
  143.  
  144. return FMRES_IGNORED
  145. }
  146.  
  147. public client_connect(id)
  148. {
  149. g_has_tomi[id] = false
  150. }
  151.  
  152. public client_disconnect(id)
  153. {
  154. g_has_tomi[id] = false
  155. }
  156.  
  157. public fw_SetModel(entity, model[])
  158. {
  159. if(!is_valid_ent(entity))
  160. return FMRES_IGNORED;
  161.  
  162. static szClassName[33]
  163. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  164.  
  165. if(!equal(szClassName, "weaponbox"))
  166. return FMRES_IGNORED;
  167.  
  168. static iOwner
  169.  
  170. iOwner = entity_get_edict(entity, EV_ENT_owner)
  171.  
  172. if(equal(model, "models/w_p90.mdl"))
  173. {
  174. static iStoredSVDID
  175.  
  176. iStoredSVDID = find_ent_by_owner(ENG_NULLENT, "weapon_p90", entity)
  177.  
  178. if(!is_valid_ent(iStoredSVDID))
  179. return FMRES_IGNORED;
  180.  
  181. if(g_has_tomi[iOwner])
  182. {
  183. entity_set_int(iStoredSVDID, EV_INT_WEAPONKEY, tomi_WEAPONKEY)
  184. g_has_tomi[iOwner] = false
  185.  
  186. entity_set_model(entity, tomi_W_MODEL)
  187.  
  188. return FMRES_SUPERCEDE;
  189. }
  190. }
  191.  
  192.  
  193. return FMRES_IGNORED;
  194. }
  195.  
  196. public give_tomi(id)
  197. {
  198. drop_weapons(id, 1);
  199. new iWep2 = give_item(id,"weapon_p90")
  200. if( iWep2 > 0 )
  201. {
  202. cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_tomi))
  203. cs_set_user_bpammo (id, CSW_P90, get_pcvar_num(cvar_tomi_ammo))
  204. }
  205. g_has_tomi[id] = true;
  206. }
  207.  
  208. public fw_tomi_AddToPlayer(tomi, id)
  209. {
  210. if(!is_valid_ent(tomi) || !is_user_connected(id))
  211. return HAM_IGNORED;
  212.  
  213. if(entity_get_int(tomi, EV_INT_WEAPONKEY) == tomi_WEAPONKEY)
  214. {
  215. g_has_tomi[id] = true
  216.  
  217. entity_set_int(tomi, EV_INT_WEAPONKEY, 0)
  218.  
  219. return HAM_HANDLED;
  220. }
  221.  
  222. return HAM_IGNORED;
  223. }
  224.  
  225. public fw_CmdStart(id, uc_handle, seed)
  226. {
  227. if(id > 0 && id < 33)
  228. {
  229. if(!is_user_alive(id))
  230. return PLUGIN_HANDLED
  231. if(get_user_weapon(id) == CSW_P90 && g_has_tomi[id])
  232. {
  233. if((get_uc(uc_handle, UC_Buttons) & IN_USE) && !(pev(id, pev_oldbuttons) & IN_USE) && g_reload[id] == 0 && g_mode2[id] == 0)
  234. {
  235. if(!g_hasZoom[id])
  236. {
  237. g_hasZoom[id] = true
  238. cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
  239. }else{
  240. g_hasZoom[ id ] = false
  241. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  242. }
  243. if (!g_mode[id])
  244. {
  245. g_hasZoom[id] = false
  246. cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
  247. }
  248. }
  249.  
  250. if (g_hasZoom[ id ] && (pev(id, pev_button) & IN_RELOAD))
  251. {
  252. g_hasZoom[ id ] = false
  253. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  254. }
  255.  
  256. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && !g_mode2[id] && !g_reload[id])
  257. {
  258. g_hasZoom[ id ] = false
  259. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  260. if(g_mode[id] == 0) make_mode2(id)
  261. if(g_mode[id] == 2) make_mode1(id)
  262. }
  263. }
  264. return HAM_SUPERCEDE;
  265. }
  266. return PLUGIN_HANDLED
  267. }
  268.  
  269. public make_mode2(id)
  270. {
  271. set_task(0.000001,"mode_new2",id)
  272. g_mode2[id] = 1
  273. UTIL_PlayWeaponAnimation(id, 6)
  274. set_pdata_float(id, m_flNextAttack, 0.000001, PLAYER_LINUX_XTRA_OFF)
  275. }
  276.  
  277. public make_mode1(id)
  278. {
  279. set_task(0.000001,"mode_new1",id)
  280. g_mode2[id] = 1
  281. UTIL_PlayWeaponAnimation(id, 6)
  282. set_pdata_float(id, m_flNextAttack, 0.000001, PLAYER_LINUX_XTRA_OFF)
  283. }
  284.  
  285. public mode_new2(id)
  286. {
  287. if(g_mode2[id] == 1 && is_user_alive(id))
  288. {
  289. g_mode2[id] = 0
  290. g_mode[id] = 2
  291. client_print(id,print_center,"[Раздача]")
  292. }
  293. }
  294.  
  295. public mode_new1(id)
  296. {
  297. if(g_mode2[id] == 1 && is_user_alive(id))
  298. {
  299. g_mode2[id] = 0
  300. g_mode[id] = 0
  301. client_print(id,print_center,"[Автомат]")
  302. }
  303. }
  304.  
  305. public fw_UseStationary_Post(entity, caller, activator, use_type)
  306. {
  307. if (use_type == USE_STOPPED && is_user_connected(caller))
  308. replace_weapon_models(caller, get_user_weapon(caller))
  309. }
  310.  
  311. public fw_Item_Deploy_Post(weapon_ent)
  312. {
  313. static owner
  314. owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  315.  
  316. static weaponid
  317. weaponid = cs_get_weapon_id(weapon_ent)
  318.  
  319. replace_weapon_models(owner, weaponid)
  320. }
  321.  
  322. public CurrentWeapon(id)
  323. {
  324. replace_weapon_models(id, read_data(2))
  325. remove_task(id)
  326. g_reload[id] = 0
  327. g_mode2[id] = 0
  328. }
  329.  
  330. replace_weapon_models(id, weaponid)
  331. {
  332. switch (weaponid)
  333. {
  334. case CSW_P90:
  335. {
  336. if(g_has_tomi[id])
  337. {
  338. if(g_mode[id] == 0) set_pev(id, pev_viewmodel2, tomi_V_MODEL)
  339. if(g_mode[id] == 2) set_pev(id, pev_viewmodel2, tomi_V_MODEL)
  340. set_pev(id, pev_weaponmodel2, tomi_P_MODEL)
  341. }
  342. }
  343. }
  344. }
  345.  
  346. public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  347. {
  348. if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_P90) || !g_has_tomi[Player])
  349. return FMRES_IGNORED
  350.  
  351. set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.00001)
  352. return FMRES_HANDLED
  353. }
  354.  
  355. public fw_tomi_PrimaryAttack(Weapon)
  356. {
  357. new Player = get_pdata_cbase(Weapon, 41, 4)
  358.  
  359. if (!g_has_tomi[Player])
  360. return;
  361.  
  362. pev(Player,pev_punchangle,cl_pushangle[Player])
  363.  
  364. g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  365. }
  366.  
  367. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  368. {
  369. if ((eventid != g_orig_event_tomi))
  370. return FMRES_IGNORED
  371. if (!(1 <= invoker <= g_MaxPlayers))
  372. return FMRES_IGNORED
  373.  
  374. playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  375. return FMRES_SUPERCEDE
  376. }
  377.  
  378. public fw_tomi_PrimaryAttack_Post(Weapon)
  379. {
  380. new Player = get_pdata_cbase(Weapon, 41, 4)
  381.  
  382. new szClip, szAmmo
  383. get_user_weapon(Player, szClip, szAmmo)
  384. if(Player > 0 && Player < 33)
  385. {
  386. if(!g_has_tomi[Player])
  387. {
  388. if(szClip > 0) emit_sound(Player, CHAN_WEAPON, "weapons/p90-1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  389. }
  390. if(g_has_tomi[Player])
  391. {
  392. new Float:push[3]
  393. pev(Player,pev_punchangle,push)
  394. xs_vec_sub(push,cl_pushangle[Player],push)
  395.  
  396. xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_tomi),push)
  397. xs_vec_add(push,cl_pushangle[Player],push)
  398. set_pev(Player,pev_punchangle,push)
  399.  
  400. if (!g_clip_ammo[Player])
  401. return
  402.  
  403. emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  404. UTIL_PlayWeaponAnimation(Player, 3)
  405.  
  406. make_blood_and_bulletholes(Player)
  407. if(g_mode[Player] == 2) set_pdata_float(Player, m_flNextAttack, 0.3, PLAYER_LINUX_XTRA_OFF)
  408. }
  409. }
  410. }
  411.  
  412. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  413. {
  414. if (victim != attacker && is_user_connected(attacker))
  415. {
  416. if(get_user_weapon(attacker) == CSW_P90)
  417. {
  418. if(g_has_tomi[attacker])
  419. {
  420. if(g_mode[attacker] == 2) SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_tomi2))
  421. if(g_mode[attacker] == 0) SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_tomi))
  422. }
  423. }
  424. }
  425. }
  426.  
  427. public message_DeathMsg(msg_id, msg_dest, id)
  428. {
  429. static szTruncatedWeapon[33], iAttacker, iVictim
  430.  
  431. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  432.  
  433. iAttacker = get_msg_arg_int(1)
  434. iVictim = get_msg_arg_int(2)
  435.  
  436. if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  437. return PLUGIN_CONTINUE
  438.  
  439. if(equal(szTruncatedWeapon, "p90") && get_user_weapon(iAttacker) == CSW_P90)
  440. {
  441. if(g_has_tomi[iAttacker])
  442. set_msg_arg_string(4, "p90")
  443. }
  444.  
  445. return PLUGIN_CONTINUE
  446. }
  447.  
  448. stock fm_cs_get_current_weapon_ent(id)
  449. {
  450. return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);
  451. }
  452.  
  453. stock fm_cs_get_weapon_ent_owner(ent)
  454. {
  455. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
  456. }
  457.  
  458. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  459. {
  460. set_pev(Player, pev_weaponanim, Sequence)
  461.  
  462. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  463. write_byte(Sequence)
  464. write_byte(pev(Player, pev_body))
  465. message_end()
  466. }
  467.  
  468. stock make_blood_and_bulletholes(id)
  469. {
  470. new aimOrigin[3], target, body
  471. get_user_origin(id, aimOrigin, 3)
  472. get_user_aiming(id, target, body)
  473.  
  474. if(target > 0 && target <= g_MaxPlayers)
  475. {
  476. new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
  477. pev(id, pev_origin, fStart)
  478.  
  479. velocity_by_aim(id, 64, fVel)
  480.  
  481. fStart[0] = float(aimOrigin[0])
  482. fStart[1] = float(aimOrigin[1])
  483. fStart[2] = float(aimOrigin[2])
  484. fEnd[0] = fStart[0]+fVel[0]
  485. fEnd[1] = fStart[1]+fVel[1]
  486. fEnd[2] = fStart[2]+fVel[2]
  487.  
  488. new res
  489. engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
  490. get_tr2(res, TR_vecEndPos, fRes)
  491.  
  492. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  493. write_byte(TE_BLOODSPRITE)
  494. write_coord(floatround(fStart[0]))
  495. write_coord(floatround(fStart[1]))
  496. write_coord(floatround(fStart[2]))
  497. write_short( m_iBlood [ 1 ])
  498. write_short( m_iBlood [ 0 ] )
  499. write_byte(70)
  500. write_byte(random_num(1,2))
  501. message_end()
  502.  
  503.  
  504. }
  505. else if(!is_user_connected(target))
  506. {
  507. if(target)
  508. {
  509. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  510. write_byte(TE_DECAL)
  511. write_coord(aimOrigin[0])
  512. write_coord(aimOrigin[1])
  513. write_coord(aimOrigin[2])
  514. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  515. write_short(target)
  516. message_end()
  517. }
  518. else
  519. {
  520. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  521. write_byte(TE_WORLDDECAL)
  522. write_coord(aimOrigin[0])
  523. write_coord(aimOrigin[1])
  524. write_coord(aimOrigin[2])
  525. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  526. message_end()
  527. }
  528.  
  529. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  530. write_byte(TE_GUNSHOTDECAL)
  531. write_coord(aimOrigin[0])
  532. write_coord(aimOrigin[1])
  533. write_coord(aimOrigin[2])
  534. write_short(id)
  535. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  536. message_end()
  537. }
  538. }
  539.  
  540. public tomi__ItemPostFrame(weapon_entity) {
  541. new id = pev(weapon_entity, pev_owner)
  542. if (!is_user_connected(id))
  543. return HAM_IGNORED;
  544.  
  545. if (!g_has_tomi[id])
  546. return HAM_IGNORED;
  547.  
  548. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  549.  
  550. new iBpAmmo = cs_get_user_bpammo(id, CSW_P90);
  551. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  552.  
  553. new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
  554.  
  555. if( fInReload && flNextAttack <= 0.0 )
  556. {
  557. new j = min(get_pcvar_num(cvar_clip_tomi) - iClip, iBpAmmo)
  558.  
  559. set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  560. cs_set_user_bpammo(id, CSW_P90, iBpAmmo-j);
  561.  
  562. set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  563. fInReload = 0
  564. g_reload[id] = 0
  565. }
  566.  
  567. return HAM_IGNORED;
  568. }
  569.  
  570. public tomi__Reload(weapon_entity) {
  571. new id = pev(weapon_entity, pev_owner)
  572. if (!is_user_connected(id))
  573. return HAM_IGNORED;
  574.  
  575. if (!g_has_tomi[id])
  576. return HAM_IGNORED;
  577.  
  578. g_tomi_TmpClip[id] = -1;
  579.  
  580. new iBpAmmo = cs_get_user_bpammo(id, CSW_P90);
  581. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  582.  
  583. if (iBpAmmo <= 0)
  584. return HAM_SUPERCEDE;
  585.  
  586. if (iClip >= get_pcvar_num(cvar_clip_tomi))
  587. return HAM_SUPERCEDE;
  588.  
  589.  
  590. g_tomi_TmpClip[id] = iClip;
  591.  
  592. g_reload[id] = 1
  593.  
  594. return HAM_IGNORED;
  595. }
  596.  
  597. public tomi__Reload_Post(weapon_entity) {
  598. new id = pev(weapon_entity, pev_owner)
  599. if (!is_user_connected(id))
  600. return HAM_IGNORED;
  601.  
  602. if (!g_has_tomi[id])
  603. return HAM_IGNORED;
  604.  
  605. if (g_tomi_TmpClip[id] == -1)
  606. return HAM_IGNORED;
  607.  
  608. set_pdata_int(weapon_entity, m_iClip, g_tomi_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  609.  
  610. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, tomi_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  611.  
  612. set_pdata_float(id, m_flNextAttack, tomi_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  613.  
  614. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  615.  
  616. // relaod animation
  617. UTIL_PlayWeaponAnimation(id, 1)
  618.  
  619. return HAM_IGNORED;
  620. }
  621.  
  622. stock drop_weapons(id, dropwhat)
  623. {
  624. static weapons[32], num, i, weaponid
  625. num = 0
  626. get_user_weapons(id, weapons, num)
  627.  
  628. for (i = 0; i < num; i++)
  629. {
  630. weaponid = weapons[i]
  631.  
  632. if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  633. {
  634. static wname[32]
  635. get_weaponname(weaponid, wname, sizeof wname - 1)
  636. engclient_cmd(id, "drop", wname)
  637. }
  638. }
  639. }

_________________
[mozgo]Bogdan for President[/mozgo]
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 20:56 
Offline
Felfüggesztve

Csatlakozott: 2013.08.09. 22:37
Hozzászólások: 571
Megköszönt másnak: 10 alkalommal
Megköszönték neki: 85 alkalommal
Itt a barlog3

SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <fakemeta_util>
  4. #include <hamsandwich>
  5. #include <cstrike>
  6.  
  7. #define PLUGIN "Balrog-III"
  8. #define VERSION "1.0"
  9. #define AUTHOR "Dias"
  10.  
  11. #define V_MODEL "models/v_balrog3.mdl"
  12. #define P_MODEL "models/p_balrog3.mdl"
  13. #define W_MODEL "models/w_balrog3.mdl"
  14.  
  15. #define DAMAGE 24
  16. #define BPAMMO 240
  17. #define ACTIVE_CLIP 15
  18.  
  19. #define CSW_BALROG3 CSW_MP5NAVY
  20. #define weapon_balrog3 "weapon_mp5navy"
  21.  
  22. #define WEAPON_SECRETCODE 4962
  23. #define WEAPON_EVENT "events/mp5n.sc"
  24. #define OLD_W_MODEL "models/w_mp5.mdl"
  25.  
  26. new const Balrog3_Sounds[6][] =
  27. {
  28. "weapons/balrig3-1.wav",
  29. "weapons/balrig3-2.wav",
  30. "weapons/balrig3_boltpull.wav",
  31. "weapons/balrig3_clipin.wav",
  32. "weapons/balrig3_clipout.wav",
  33. "weapons/balrig3_draw.wav"
  34. }
  35.  
  36. #define EXPLOSE_SPR "sprites/balrog5stack.spr"
  37.  
  38. enum
  39. {
  40. ANIM_IDLE = 0,
  41. ANIM_DRAW,
  42. ANIM_RELOAD,
  43. ANIM_SHOOT_A,
  44. ANIM_SHOOT_B
  45. }
  46.  
  47.  
  48. new g_Had_Balrog3[33], g_Shoot_Special[33], g_Holding_Attack[33], g_Shoot_Count[33], g_Old_Weapon[33], g_Current_Weapon[33]
  49. new g_Exp_SprId, g_balrog3_event, g_ShellId, g_SmokePuff_SprId
  50.  
  51. public plugin_init()
  52. {
  53. register_plugin(PLUGIN, VERSION, AUTHOR)
  54.  
  55. register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
  56.  
  57. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  58. register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
  59. register_forward(FM_SetModel, "fw_SetModel")
  60. register_forward(FM_CmdStart, "fw_CmdStart")
  61.  
  62. RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
  63. RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
  64. RegisterHam(Ham_Weapon_PrimaryAttack, weapon_balrog3, "fw_Weapon_PrimaryAttack")
  65. RegisterHam(Ham_Weapon_PrimaryAttack, weapon_balrog3, "fw_Weapon_PrimaryAttack_Post", 1)
  66. RegisterHam(Ham_Item_AddToPlayer, weapon_balrog3, "fw_Item_AddToPlayer_Post", 1)
  67.  
  68. register_clcmd("balrog3", "Get_Balrog3", ADMIN_BAN)
  69. }
  70.  
  71. public plugin_precache()
  72. {
  73. engfunc(EngFunc_PrecacheModel, V_MODEL)
  74. engfunc(EngFunc_PrecacheModel, P_MODEL)
  75. engfunc(EngFunc_PrecacheModel, W_MODEL)
  76.  
  77. for(new i = 0; i < sizeof(Balrog3_Sounds); i++)
  78. engfunc(EngFunc_PrecacheSound, Balrog3_Sounds[i])
  79.  
  80. g_Exp_SprId = engfunc(EngFunc_PrecacheModel, EXPLOSE_SPR)
  81. g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
  82. g_ShellId = engfunc(EngFunc_PrecacheModel, "models/pshell.mdl")
  83.  
  84. register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
  85. }
  86.  
  87. public fw_PrecacheEvent_Post(type, const name[])
  88. {
  89. if(equal(WEAPON_EVENT, name))
  90. g_balrog3_event = get_orig_retval()
  91. }
  92.  
  93. public Get_Balrog3(id)
  94. {
  95. if(!is_user_alive(id))
  96. return
  97.  
  98. g_Had_Balrog3[id] = 1
  99. g_Shoot_Special[id] = 0
  100. g_Holding_Attack[id] = 0
  101. g_Shoot_Count[id] = 0
  102.  
  103. fm_give_item(id, weapon_balrog3)
  104.  
  105. cs_set_user_bpammo(id, CSW_BALROG3, BPAMMO)
  106. }
  107.  
  108. public Remove_Balrog3(id)
  109. {
  110. if(!is_user_connected(id))
  111. return
  112.  
  113. g_Had_Balrog3[id] = 0
  114. g_Shoot_Special[id] = 0
  115. }
  116.  
  117. public Event_CurWeapon(id)
  118. {
  119. if(!is_user_alive(id))
  120. return
  121.  
  122. if(get_user_weapon(id) != g_Current_Weapon[id]) g_Current_Weapon[id] = get_user_weapon(id)
  123.  
  124. if(get_user_weapon(id) == CSW_BALROG3 && g_Had_Balrog3[id])
  125. {
  126. if(g_Old_Weapon[id] != CSW_BALROG3)
  127. {
  128. set_pev(id, pev_viewmodel2, V_MODEL)
  129. set_pev(id, pev_weaponmodel2, P_MODEL)
  130. }
  131. }
  132.  
  133. g_Old_Weapon[id] = get_user_weapon(id)
  134. }
  135.  
  136. public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
  137. {
  138. if(!is_user_alive(id) || !is_user_connected(id))
  139. return FMRES_IGNORED
  140. if(get_user_weapon(id) == CSW_BALROG3 && g_Had_Balrog3[id])
  141. set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
  142.  
  143. return FMRES_HANDLED
  144. }
  145.  
  146. public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  147. {
  148. if (!is_user_connected(invoker))
  149. return FMRES_IGNORED
  150. if(get_user_weapon(invoker) != CSW_BALROG3 || !g_Had_Balrog3[invoker])
  151. return FMRES_IGNORED
  152. if(eventid != g_balrog3_event)
  153. return FMRES_IGNORED
  154.  
  155. engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  156.  
  157. if(!g_Shoot_Special[invoker] && cs_get_user_bpammo(invoker, CSW_BALROG3) > 0)
  158. {
  159. g_Shoot_Count[invoker]++
  160. if(g_Shoot_Count[invoker] >= ACTIVE_CLIP)
  161. {
  162. g_Shoot_Special[invoker] = 1
  163.  
  164. static Ent; Ent = fm_get_user_weapon_entity(invoker, CSW_BALROG3)
  165. if(pev_valid(Ent)) g_Shoot_Count[invoker] = cs_get_weapon_ammo(Ent)
  166. }
  167. } else if(g_Shoot_Special[invoker]) {
  168. cs_set_user_bpammo(invoker, CSW_BALROG3, cs_get_user_bpammo(invoker, CSW_BALROG3) - 1)
  169.  
  170. if(cs_get_user_bpammo(invoker, CSW_BALROG3) <= 0)
  171. {
  172. g_Shoot_Special[invoker] = 0
  173. g_Shoot_Count[invoker] = 0
  174. }
  175. }
  176.  
  177. set_weapon_anim(invoker, g_Shoot_Special[invoker] == 1 ? ANIM_SHOOT_B : ANIM_SHOOT_A)
  178. emit_sound(invoker, CHAN_WEAPON, g_Shoot_Special[invoker] == 1 ? Balrog3_Sounds[1] : Balrog3_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  179.  
  180. Eject_Shell(invoker, g_ShellId, 0.0)
  181.  
  182. return FMRES_SUPERCEDE
  183. }
  184.  
  185. public fw_SetModel(entity, model[])
  186. {
  187. if(!pev_valid(entity))
  188. return FMRES_IGNORED
  189.  
  190. static Classname[32]
  191. pev(entity, pev_classname, Classname, sizeof(Classname))
  192.  
  193. if(!equal(Classname, "weaponbox"))
  194. return FMRES_IGNORED
  195.  
  196. static iOwner
  197. iOwner = pev(entity, pev_owner)
  198.  
  199. if(equal(model, OLD_W_MODEL))
  200. {
  201. static weapon; weapon = fm_find_ent_by_owner(-1, weapon_balrog3, entity)
  202.  
  203. if(!pev_valid(weapon))
  204. return FMRES_IGNORED;
  205.  
  206. if(g_Had_Balrog3[iOwner])
  207. {
  208. Remove_Balrog3(iOwner)
  209.  
  210. set_pev(weapon, pev_impulse, WEAPON_SECRETCODE)
  211. engfunc(EngFunc_SetModel, entity, W_MODEL)
  212.  
  213. return FMRES_SUPERCEDE
  214. }
  215. }
  216.  
  217. return FMRES_IGNORED;
  218. }
  219.  
  220. public fw_CmdStart(id, uc_handle, seed)
  221. {
  222. if(!is_user_alive(id))
  223. return
  224. if(g_Current_Weapon[id] != CSW_BALROG3 || !g_Had_Balrog3[id])
  225. return
  226.  
  227. static NewButton; NewButton = get_uc(uc_handle, UC_Buttons)
  228. static OldButton; OldButton = pev(id, pev_oldbuttons)
  229.  
  230. if(NewButton & IN_ATTACK)
  231. {
  232. if(!g_Holding_Attack[id]) g_Holding_Attack[id] = 1
  233. } else if((NewButton & IN_ATTACK2) && !(OldButton & IN_ATTACK2)) {
  234. if(cs_get_user_zoom(id) == 1) cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
  235. else cs_set_user_zoom(id, CS_SET_NO_ZOOM, 1)
  236. } else {
  237. if(OldButton & IN_ATTACK)
  238. {
  239. if(g_Holding_Attack[id])
  240. {
  241. g_Holding_Attack[id] = 0
  242. g_Shoot_Count[id] = 0
  243. g_Shoot_Special[id] = 0
  244. }
  245. }
  246. }
  247. }
  248.  
  249. public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
  250. {
  251. if(!is_user_alive(Attacker))
  252. return HAM_IGNORED
  253. if(get_user_weapon(Attacker) != CSW_BALROG3 || !g_Had_Balrog3[Attacker])
  254. return HAM_IGNORED
  255.  
  256. static Float:flEnd[3], Float:vecPlane[3]
  257.  
  258. get_tr2(Ptr, TR_vecEndPos, flEnd)
  259. get_tr2(Ptr, TR_vecPlaneNormal, vecPlane)
  260.  
  261. if(!is_user_alive(Victim))
  262. {
  263. Make_BulletHole(Attacker, flEnd, Damage)
  264. Make_BulletSmoke(Attacker, Ptr)
  265. }
  266.  
  267. if(g_Shoot_Special[Attacker])
  268. {
  269. Make_BalrogEffect(Attacker, Ptr)
  270. radius_damage(Attacker, flEnd, float(DAMAGE), 96.0)
  271. }
  272.  
  273. SetHamParamFloat(3, float(DAMAGE))
  274.  
  275. return HAM_IGNORED
  276. }
  277.  
  278. public fw_Weapon_PrimaryAttack(Ent)
  279. {
  280. if(!pev_valid(Ent))
  281. return
  282. static Id; Id = pev(Ent, pev_owner)
  283. if(!g_Had_Balrog3[Id])
  284. return
  285.  
  286. if(g_Shoot_Special[Id]) set_pdata_float(Ent, 62, 0.4, 4)
  287. else set_pdata_float(Ent, 62, 0.2, 4)
  288. }
  289.  
  290. public fw_Weapon_PrimaryAttack_Post(Ent)
  291. {
  292. if(!pev_valid(Ent))
  293. return
  294. static Id; Id = pev(Ent, pev_owner)
  295. if(!g_Had_Balrog3[Id])
  296. return
  297.  
  298. if(g_Shoot_Special[Id] && cs_get_weapon_ammo(Ent) > 0)
  299. {
  300. cs_set_weapon_ammo(Ent, g_Shoot_Count[Id])
  301. set_pdata_float(Ent, 46, get_pdata_float(Ent, 46, 4) * 0.75, 4)
  302. }
  303. }
  304.  
  305. public fw_Item_AddToPlayer_Post(ent, id)
  306. {
  307. if(!pev_valid(ent))
  308. return HAM_IGNORED
  309.  
  310. if(pev(ent, pev_impulse) == WEAPON_SECRETCODE)
  311. {
  312. g_Had_Balrog3[id] = 1
  313. set_pev(ent, pev_impulse, 0)
  314. }
  315.  
  316. return HAM_HANDLED
  317. }
  318.  
  319. stock Make_BulletHole(id, Float:Origin[3], Float:Damage)
  320. {
  321. // Find target
  322. static Decal; Decal = random_num(41, 45)
  323. static LoopTime;
  324.  
  325. if(Damage > 100.0) LoopTime = 2
  326. else LoopTime = 1
  327.  
  328. for(new i = 0; i < LoopTime; i++)
  329. {
  330. // Put decal on "world" (a wall)
  331. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  332. write_byte(TE_WORLDDECAL)
  333. engfunc(EngFunc_WriteCoord, Origin[0])
  334. engfunc(EngFunc_WriteCoord, Origin[1])
  335. engfunc(EngFunc_WriteCoord, Origin[2])
  336. write_byte(Decal)
  337. message_end()
  338.  
  339. // Show sparcles
  340. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  341. write_byte(TE_GUNSHOTDECAL)
  342. engfunc(EngFunc_WriteCoord, Origin[0])
  343. engfunc(EngFunc_WriteCoord, Origin[1])
  344. engfunc(EngFunc_WriteCoord, Origin[2])
  345. write_short(id)
  346. write_byte(Decal)
  347. message_end()
  348. }
  349. }
  350.  
  351. public Make_BulletSmoke(id, TrResult)
  352. {
  353. static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
  354.  
  355. get_weapon_attachment(id, vecSrc)
  356. global_get(glb_v_forward, vecEnd)
  357.  
  358. xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
  359. xs_vec_add(vecSrc, vecEnd, vecEnd)
  360.  
  361. get_tr2(TrResult, TR_vecEndPos, vecSrc)
  362. get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
  363.  
  364. xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
  365. xs_vec_add(vecSrc, vecEnd, vecEnd)
  366.  
  367. TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
  368. TE_FLAG |= TE_EXPLFLAG_NOSOUND
  369. TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
  370.  
  371. engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
  372. write_byte(TE_EXPLOSION)
  373. engfunc(EngFunc_WriteCoord, vecEnd[0])
  374. engfunc(EngFunc_WriteCoord, vecEnd[1])
  375. engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
  376. write_short(g_SmokePuff_SprId)
  377. write_byte(2)
  378. write_byte(50)
  379. write_byte(TE_FLAG)
  380. message_end()
  381. }
  382.  
  383. public Make_BalrogEffect(id, TrResult)
  384. {
  385. static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
  386.  
  387. get_weapon_attachment(id, vecSrc)
  388. global_get(glb_v_forward, vecEnd)
  389.  
  390. xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
  391. xs_vec_add(vecSrc, vecEnd, vecEnd)
  392.  
  393. get_tr2(TrResult, TR_vecEndPos, vecSrc)
  394. get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
  395.  
  396. xs_vec_mul_scalar(vecEnd, 5.0, vecEnd)
  397. xs_vec_add(vecSrc, vecEnd, vecEnd)
  398.  
  399. TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
  400. TE_FLAG |= TE_EXPLFLAG_NOSOUND
  401. TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
  402.  
  403. engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
  404. write_byte(TE_EXPLOSION)
  405. engfunc(EngFunc_WriteCoord, vecEnd[0])
  406. engfunc(EngFunc_WriteCoord, vecEnd[1])
  407. engfunc(EngFunc_WriteCoord, vecEnd[2])
  408. write_short(g_Exp_SprId)
  409. write_byte(5)
  410. write_byte(30)
  411. write_byte(TE_FLAG)
  412. message_end()
  413. }
  414.  
  415. stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
  416. {
  417. new Float:vfEnd[3], viEnd[3]
  418. get_user_origin(id, viEnd, 3)
  419. IVecFVec(viEnd, vfEnd)
  420.  
  421. new Float:fOrigin[3], Float:fAngle[3]
  422.  
  423. pev(id, pev_origin, fOrigin)
  424. pev(id, pev_view_ofs, fAngle)
  425.  
  426. xs_vec_add(fOrigin, fAngle, fOrigin)
  427.  
  428. new Float:fAttack[3]
  429.  
  430. xs_vec_sub(vfEnd, fOrigin, fAttack)
  431. xs_vec_sub(vfEnd, fOrigin, fAttack)
  432.  
  433. new Float:fRate
  434.  
  435. fRate = fDis / vector_length(fAttack)
  436. xs_vec_mul_scalar(fAttack, fRate, fAttack)
  437.  
  438. xs_vec_add(fOrigin, fAttack, output)
  439. }
  440.  
  441. stock radius_damage(id, Float:Origin[3], Float:Damage, Float:Radius)
  442. {
  443. static Victim; Victim = -1
  444.  
  445. while((Victim = engfunc(EngFunc_FindEntityInSphere, Victim, Origin, Radius)) != 0)
  446. {
  447. if(!is_user_alive(Victim) || id == Victim)
  448. continue
  449.  
  450. ExecuteHamB(Ham_TakeDamage, Victim, fm_get_user_weapon_entity(id, get_user_weapon(id)), id, Damage, DMG_BULLET)
  451. }
  452. }
  453.  
  454. stock Eject_Shell(id, Shell_ModelIndex, Float:Time) // By Dias
  455. {
  456. static Ent; Ent = get_pdata_cbase(id, 373, 5)
  457. if(!pev_valid(Ent))
  458. return
  459.  
  460. set_pdata_int(Ent, 57, Shell_ModelIndex, 4)
  461. set_pdata_float(id, 111, get_gametime() + Time)
  462. }
  463.  
  464. stock set_weapon_anim(id, anim)
  465. {
  466. if(!is_user_alive(id))
  467. return
  468.  
  469. set_pev(id, pev_weaponanim, anim)
  470.  
  471. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
  472. write_byte(anim)
  473. write_byte(pev(id, pev_body))
  474. message_end()
  475. }
  476. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  477.   *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  478.   */
  479.  

Ők köszönték meg stupid nek ezt a hozzászólást: JAck (2013.08.31. 21:00)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 21:08 
Offline
Senior Tag

Csatlakozott: 2012.07.09. 11:57
Hozzászólások: 234
Megköszönt másnak: 20 alkalommal
Megköszönték neki: 12 alkalommal
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fun>
  5. #include <hamsandwich>
  6. #include <xs>
  7. #include <cstrike>
  8. #include <zombieplague>
  9.  
  10. enum
  11. {
  12. anim_idle,
  13. anim_reload,
  14. anim_draw,
  15. anim_shoot1,
  16. anim_shoot2,
  17. anim_shoot3
  18. }
  19.  
  20. #define ENG_NULLENT -1
  21. #define EV_INT_WEAPONKEY EV_INT_impulse
  22. #define tomi_WEAPONKEY 9142
  23. #define MAX_PLAYERS 32
  24. #define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
  25.  
  26. const USE_STOPPED = 0
  27. const OFFSET_ACTIVE_ITEM = 373
  28. const OFFSET_WEAPONOWNER = 41
  29. const OFFSET_LINUX = 5
  30. const OFFSET_LINUX_WEAPONS = 5
  31.  
  32. #define WEAP_LINUX_XTRA_OFF 4
  33. #define m_fKnown 44
  34. #define m_flNextPrimaryAttack 46
  35. #define m_flTimeWeaponIdle 48
  36. #define m_iClip 51
  37. #define m_fInReload 54
  38. #define PLAYER_LINUX_XTRA_OFF 5
  39. #define m_flNextAttack 83
  40.  
  41. #define tomi_RELOAD_TIME 4.0
  42.  
  43. const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_SG550)|(1<<CSW_P90)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_P90)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_P90)|(1<<CSW_AK47)|(1<<CSW_P90)
  44. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_p90",
  45. "weapon_p90", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_p90", "weapon_sg550",
  46. "weapon_p90", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_p90", "weapon_m249",
  47. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_p90",
  48. "weapon_ak47", "weapon_knife", "weapon_p90" }
  49.  
  50. new const Fire_Sounds[][] = { "weapons/thompson-1.wav" }
  51.  
  52. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  53.  
  54. new tomi_V_MODEL[64] = "models/cso_cz/v_th.mdl"
  55. new tomi_P_MODEL[64] = "models/cso_cz/p_th.mdl"
  56. new tomi_W_MODEL[64] = "models/cso_cz/w_th.mdl"
  57.  
  58. new cvar_dmg_tomi, cvar_recoil_tomi, cvar_clip_tomi, cvar_tomi_ammo , cvar_dmg_tomi2
  59. new g_has_tomi[33]
  60. new g_MaxPlayers, g_orig_event_tomi, g_clip_ammo[33] , g_reload[33]
  61. new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
  62. new g_tomi_TmpClip[33]
  63. new g_mode[33] , g_mode2[33]
  64. new g_itemid
  65. new g_hasZoom[33]
  66. public plugin_init()
  67. {
  68. register_plugin("[CSO:tomi(2 Regimes)]", "1.1", "Gazik")
  69. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  70. register_event("CurWeapon","CurrentWeapon","be","1=1")
  71. RegisterHam(Ham_Item_AddToPlayer, "weapon_p90", "fw_tomi_AddToPlayer")
  72. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  73. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  74. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  75. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  76. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  77. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  78. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "fw_tomi_PrimaryAttack")
  79. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "fw_tomi_PrimaryAttack_Post", 1)
  80. RegisterHam(Ham_Item_PostFrame, "weapon_p90", "tomi__ItemPostFrame");
  81. RegisterHam(Ham_Weapon_Reload, "weapon_p90", "tomi__Reload");
  82. RegisterHam(Ham_Weapon_Reload, "weapon_p90", "tomi__Reload_Post", 1);
  83. register_forward(FM_CmdStart, "fw_CmdStart")
  84. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  85. register_forward(FM_SetModel, "fw_SetModel")
  86. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  87. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  88.  
  89. cvar_dmg_tomi = register_cvar("tomi_dmg", "2.0")
  90. cvar_dmg_tomi2 = register_cvar("tomi_dmg_sniper", "3.0")
  91. cvar_recoil_tomi = register_cvar("tomi_recoil", "0.5")
  92. cvar_clip_tomi = register_cvar("tomi_clip", "50")
  93. cvar_tomi_ammo = register_cvar("tomi_ammo", "100")
  94. g_itemid = zp_register_extra_item("Автомат томпсона", 18, ZP_TEAM_HUMAN)
  95.  
  96. g_MaxPlayers = get_maxplayers()
  97. }
  98.  
  99. public plugin_precache()
  100. {
  101. precache_model(tomi_V_MODEL)
  102. precache_model(tomi_P_MODEL)
  103. precache_model(tomi_W_MODEL)
  104.  
  105. precache_sound(Fire_Sounds[0])
  106. m_iBlood[0] = precache_model("sprites/blood.spr")
  107. m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  108. precache_model("sprites/640hud5.spr")
  109. register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  110. }
  111.  
  112. public zp_extra_item_selected(id, itemid)
  113. {
  114. if(itemid == g_itemid)
  115. {
  116. give_tomi(id)
  117. }
  118. }
  119.  
  120. public plugin_natives ()
  121. {
  122. register_native("give_cso_tomi", "native_give_weapon_add", 1)
  123. register_native("get_user_tomi", "native_give_weapon_add2", 1)
  124. }
  125.  
  126. public native_give_weapon_add(id)
  127. {
  128. give_tomi(id)
  129. }
  130.  
  131. public native_give_weapon_add2(id)
  132. {
  133. return g_has_tomi[id]
  134. }
  135.  
  136. public fwPrecacheEvent_Post(type, const name[])
  137. {
  138. if (equal("events/p90.sc", name))
  139. {
  140. g_orig_event_tomi = get_orig_retval()
  141. return FMRES_HANDLED
  142. }
  143.  
  144. return FMRES_IGNORED
  145. }
  146.  
  147. public client_connect(id)
  148. {
  149. g_has_tomi[id] = false
  150. }
  151.  
  152. public client_disconnect(id)
  153. {
  154. g_has_tomi[id] = false
  155. }
  156.  
  157. public fw_SetModel(entity, model[])
  158. {
  159. if(!is_valid_ent(entity))
  160. return FMRES_IGNORED;
  161.  
  162. static szClassName[33]
  163. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  164.  
  165. if(!equal(szClassName, "weaponbox"))
  166. return FMRES_IGNORED;
  167.  
  168. static iOwner
  169.  
  170. iOwner = entity_get_edict(entity, EV_ENT_owner)
  171.  
  172. if(equal(model, "models/w_p90.mdl"))
  173. {
  174. static iStoredSVDID
  175.  
  176. iStoredSVDID = find_ent_by_owner(ENG_NULLENT, "weapon_p90", entity)
  177.  
  178. if(!is_valid_ent(iStoredSVDID))
  179. return FMRES_IGNORED;
  180.  
  181. if(g_has_tomi[iOwner])
  182. {
  183. entity_set_int(iStoredSVDID, EV_INT_WEAPONKEY, tomi_WEAPONKEY)
  184. g_has_tomi[iOwner] = false
  185.  
  186. entity_set_model(entity, tomi_W_MODEL)
  187.  
  188. return FMRES_SUPERCEDE;
  189. }
  190. }
  191.  
  192.  
  193. return FMRES_IGNORED;
  194. }
  195.  
  196. public give_tomi(id)
  197. {
  198. drop_weapons(id, 1);
  199. new iWep2 = give_item(id,"weapon_p90")
  200. if( iWep2 > 0 )
  201. {
  202. cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_tomi))
  203. cs_set_user_bpammo (id, CSW_P90, get_pcvar_num(cvar_tomi_ammo))
  204. }
  205. g_has_tomi[id] = true;
  206. }
  207.  
  208. public fw_tomi_AddToPlayer(tomi, id)
  209. {
  210. if(!is_valid_ent(tomi) || !is_user_connected(id))
  211. return HAM_IGNORED;
  212.  
  213. if(entity_get_int(tomi, EV_INT_WEAPONKEY) == tomi_WEAPONKEY)
  214. {
  215. g_has_tomi[id] = true
  216.  
  217. entity_set_int(tomi, EV_INT_WEAPONKEY, 0)
  218.  
  219. return HAM_HANDLED;
  220. }
  221.  
  222. return HAM_IGNORED;
  223. }
  224.  
  225. public fw_CmdStart(id, uc_handle, seed)
  226. {
  227. if(id > 0 && id < 33)
  228. {
  229. if(!is_user_alive(id))
  230. return PLUGIN_HANDLED
  231. if(get_user_weapon(id) == CSW_P90 && g_has_tomi[id])
  232. {
  233. if((get_uc(uc_handle, UC_Buttons) & IN_USE) && !(pev(id, pev_oldbuttons) & IN_USE) && g_reload[id] == 0 && g_mode2[id] == 0)
  234. {
  235. if(!g_hasZoom[id])
  236. {
  237. g_hasZoom[id] = true
  238. cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
  239. }else{
  240. g_hasZoom[ id ] = false
  241. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  242. }
  243. if (!g_mode[id])
  244. {
  245. g_hasZoom[id] = false
  246. cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
  247. }
  248. }
  249.  
  250. if (g_hasZoom[ id ] && (pev(id, pev_button) & IN_RELOAD))
  251. {
  252. g_hasZoom[ id ] = false
  253. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  254. }
  255.  
  256. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && !g_mode2[id] && !g_reload[id])
  257. {
  258. g_hasZoom[ id ] = false
  259. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  260. if(g_mode[id] == 0) make_mode2(id)
  261. if(g_mode[id] == 2) make_mode1(id)
  262. }
  263. }
  264. return HAM_SUPERCEDE;
  265. }
  266. return PLUGIN_HANDLED
  267. }
  268.  
  269. public make_mode2(id)
  270. {
  271. set_task(0.000001,"mode_new2",id)
  272. g_mode2[id] = 1
  273. UTIL_PlayWeaponAnimation(id, 6)
  274. set_pdata_float(id, m_flNextAttack, 0.000001, PLAYER_LINUX_XTRA_OFF)
  275. }
  276.  
  277. public make_mode1(id)
  278. {
  279. set_task(0.000001,"mode_new1",id)
  280. g_mode2[id] = 1
  281. UTIL_PlayWeaponAnimation(id, 6)
  282. set_pdata_float(id, m_flNextAttack, 0.000001, PLAYER_LINUX_XTRA_OFF)
  283. }
  284.  
  285. public mode_new2(id)
  286. {
  287. if(g_mode2[id] == 1 && is_user_alive(id))
  288. {
  289. g_mode2[id] = 0
  290. g_mode[id] = 2
  291. client_print(id,print_center,"[Раздача]")
  292. }
  293. }
  294.  
  295. public mode_new1(id)
  296. {
  297. if(g_mode2[id] == 1 && is_user_alive(id))
  298. {
  299. g_mode2[id] = 0
  300. g_mode[id] = 0
  301. client_print(id,print_center,"[Автомат]")
  302. }
  303. }
  304.  
  305. public fw_UseStationary_Post(entity, caller, activator, use_type)
  306. {
  307. if (use_type == USE_STOPPED && is_user_connected(caller))
  308. replace_weapon_models(caller, get_user_weapon(caller))
  309. }
  310.  
  311. public fw_Item_Deploy_Post(weapon_ent)
  312. {
  313. static owner
  314. owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  315.  
  316. static weaponid
  317. weaponid = cs_get_weapon_id(weapon_ent)
  318.  
  319. replace_weapon_models(owner, weaponid)
  320. }
  321.  
  322. public CurrentWeapon(id)
  323. {
  324. replace_weapon_models(id, read_data(2))
  325. remove_task(id)
  326. g_reload[id] = 0
  327. g_mode2[id] = 0
  328. }
  329.  
  330. replace_weapon_models(id, weaponid)
  331. {
  332. switch (weaponid)
  333. {
  334. case CSW_P90:
  335. {
  336. if(g_has_tomi[id])
  337. {
  338. if(g_mode[id] == 0) set_pev(id, pev_viewmodel2, tomi_V_MODEL)
  339. if(g_mode[id] == 2) set_pev(id, pev_viewmodel2, tomi_V_MODEL)
  340. set_pev(id, pev_weaponmodel2, tomi_P_MODEL)
  341. }
  342. }
  343. }
  344. }
  345.  
  346. public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  347. {
  348. if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_P90) || !g_has_tomi[Player])
  349. return FMRES_IGNORED
  350.  
  351. set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.00001)
  352. return FMRES_HANDLED
  353. }
  354.  
  355. public fw_tomi_PrimaryAttack(Weapon)
  356. {
  357. new Player = get_pdata_cbase(Weapon, 41, 4)
  358.  
  359. if (!g_has_tomi[Player])
  360. return;
  361.  
  362. pev(Player,pev_punchangle,cl_pushangle[Player])
  363.  
  364. g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  365. }
  366.  
  367. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  368. {
  369. if ((eventid != g_orig_event_tomi))
  370. return FMRES_IGNORED
  371. if (!(1 <= invoker <= g_MaxPlayers))
  372. return FMRES_IGNORED
  373.  
  374. playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  375. return FMRES_SUPERCEDE
  376. }
  377.  
  378. public fw_tomi_PrimaryAttack_Post(Weapon)
  379. {
  380. new Player = get_pdata_cbase(Weapon, 41, 4)
  381.  
  382. new szClip, szAmmo
  383. get_user_weapon(Player, szClip, szAmmo)
  384. if(Player > 0 && Player < 33)
  385. {
  386. if(!g_has_tomi[Player])
  387. {
  388. if(szClip > 0) emit_sound(Player, CHAN_WEAPON, "weapons/p90-1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  389. }
  390. if(g_has_tomi[Player])
  391. {
  392. new Float:push[3]
  393. pev(Player,pev_punchangle,push)
  394. xs_vec_sub(push,cl_pushangle[Player],push)
  395.  
  396. xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_tomi),push)
  397. xs_vec_add(push,cl_pushangle[Player],push)
  398. set_pev(Player,pev_punchangle,push)
  399.  
  400. if (!g_clip_ammo[Player])
  401. return
  402.  
  403. emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  404. UTIL_PlayWeaponAnimation(Player, 3)
  405.  
  406. make_blood_and_bulletholes(Player)
  407. if(g_mode[Player] == 2) set_pdata_float(Player, m_flNextAttack, 0.3, PLAYER_LINUX_XTRA_OFF)
  408. }
  409. }
  410. }
  411.  
  412. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  413. {
  414. if (victim != attacker && is_user_connected(attacker))
  415. {
  416. if(get_user_weapon(attacker) == CSW_P90)
  417. {
  418. if(g_has_tomi[attacker])
  419. {
  420. if(g_mode[attacker] == 2) SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_tomi2))
  421. if(g_mode[attacker] == 0) SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_tomi))
  422. }
  423. }
  424. }
  425. }
  426.  
  427. public message_DeathMsg(msg_id, msg_dest, id)
  428. {
  429. static szTruncatedWeapon[33], iAttacker, iVictim
  430.  
  431. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  432.  
  433. iAttacker = get_msg_arg_int(1)
  434. iVictim = get_msg_arg_int(2)
  435.  
  436. if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  437. return PLUGIN_CONTINUE
  438.  
  439. if(equal(szTruncatedWeapon, "p90") && get_user_weapon(iAttacker) == CSW_P90)
  440. {
  441. if(g_has_tomi[iAttacker])
  442. set_msg_arg_string(4, "p90")
  443. }
  444.  
  445. return PLUGIN_CONTINUE
  446. }
  447.  
  448. stock fm_cs_get_current_weapon_ent(id)
  449. {
  450. return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);
  451. }
  452.  
  453. stock fm_cs_get_weapon_ent_owner(ent)
  454. {
  455. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
  456. }
  457.  
  458. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  459. {
  460. set_pev(Player, pev_weaponanim, Sequence)
  461.  
  462. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  463. write_byte(Sequence)
  464. write_byte(pev(Player, pev_body))
  465. message_end()
  466. }
  467.  
  468. stock make_blood_and_bulletholes(id)
  469. {
  470. new aimOrigin[3], target, body
  471. get_user_origin(id, aimOrigin, 3)
  472. get_user_aiming(id, target, body)
  473.  
  474. if(target > 0 && target <= g_MaxPlayers)
  475. {
  476. new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
  477. pev(id, pev_origin, fStart)
  478.  
  479. velocity_by_aim(id, 64, fVel)
  480.  
  481. fStart[0] = float(aimOrigin[0])
  482. fStart[1] = float(aimOrigin[1])
  483. fStart[2] = float(aimOrigin[2])
  484. fEnd[0] = fStart[0]+fVel[0]
  485. fEnd[1] = fStart[1]+fVel[1]
  486. fEnd[2] = fStart[2]+fVel[2]
  487.  
  488. new res
  489. engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
  490. get_tr2(res, TR_vecEndPos, fRes)
  491.  
  492. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  493. write_byte(TE_BLOODSPRITE)
  494. write_coord(floatround(fStart[0]))
  495. write_coord(floatround(fStart[1]))
  496. write_coord(floatround(fStart[2]))
  497. write_short( m_iBlood [ 1 ])
  498. write_short( m_iBlood [ 0 ] )
  499. write_byte(70)
  500. write_byte(random_num(1,2))
  501. message_end()
  502.  
  503.  
  504. }
  505. else if(!is_user_connected(target))
  506. {
  507. if(target)
  508. {
  509. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  510. write_byte(TE_DECAL)
  511. write_coord(aimOrigin[0])
  512. write_coord(aimOrigin[1])
  513. write_coord(aimOrigin[2])
  514. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  515. write_short(target)
  516. message_end()
  517. }
  518. else
  519. {
  520. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  521. write_byte(TE_WORLDDECAL)
  522. write_coord(aimOrigin[0])
  523. write_coord(aimOrigin[1])
  524. write_coord(aimOrigin[2])
  525. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  526. message_end()
  527. }
  528.  
  529. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  530. write_byte(TE_GUNSHOTDECAL)
  531. write_coord(aimOrigin[0])
  532. write_coord(aimOrigin[1])
  533. write_coord(aimOrigin[2])
  534. write_short(id)
  535. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  536. message_end()
  537. }
  538. }
  539.  
  540. public tomi__ItemPostFrame(weapon_entity) {
  541. new id = pev(weapon_entity, pev_owner)
  542. if (!is_user_connected(id))
  543. return HAM_IGNORED;
  544.  
  545. if (!g_has_tomi[id])
  546. return HAM_IGNORED;
  547.  
  548. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  549.  
  550. new iBpAmmo = cs_get_user_bpammo(id, CSW_P90);
  551. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  552.  
  553. new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
  554.  
  555. if( fInReload && flNextAttack <= 0.0 )
  556. {
  557. new j = min(get_pcvar_num(cvar_clip_tomi) - iClip, iBpAmmo)
  558.  
  559. set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  560. cs_set_user_bpammo(id, CSW_P90, iBpAmmo-j);
  561.  
  562. set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  563. fInReload = 0
  564. g_reload[id] = 0
  565. }
  566.  
  567. return HAM_IGNORED;
  568. }
  569.  
  570. public tomi__Reload(weapon_entity) {
  571. new id = pev(weapon_entity, pev_owner)
  572. if (!is_user_connected(id))
  573. return HAM_IGNORED;
  574.  
  575. if (!g_has_tomi[id])
  576. return HAM_IGNORED;
  577.  
  578. g_tomi_TmpClip[id] = -1;
  579.  
  580. new iBpAmmo = cs_get_user_bpammo(id, CSW_P90);
  581. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  582.  
  583. if (iBpAmmo <= 0)
  584. return HAM_SUPERCEDE;
  585.  
  586. if (iClip >= get_pcvar_num(cvar_clip_tomi))
  587. return HAM_SUPERCEDE;
  588.  
  589.  
  590. g_tomi_TmpClip[id] = iClip;
  591.  
  592. g_reload[id] = 1
  593.  
  594. return HAM_IGNORED;
  595. }
  596.  
  597. public tomi__Reload_Post(weapon_entity) {
  598. new id = pev(weapon_entity, pev_owner)
  599. if (!is_user_connected(id))
  600. return HAM_IGNORED;
  601.  
  602. if (!g_has_tomi[id])
  603. return HAM_IGNORED;
  604.  
  605. if (g_tomi_TmpClip[id] == -1)
  606. return HAM_IGNORED;
  607.  
  608. set_pdata_int(weapon_entity, m_iClip, g_tomi_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  609.  
  610. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, tomi_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  611.  
  612. set_pdata_float(id, m_flNextAttack, tomi_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  613.  
  614. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  615.  
  616. // relaod animation
  617. UTIL_PlayWeaponAnimation(id, 1)
  618.  
  619. return HAM_IGNORED;
  620. }
  621.  
  622. stock drop_weapons(id, dropwhat)
  623. {
  624. static weapons[32], num, i, weaponid
  625. num = 0
  626. get_user_weapons(id, weapons, num)
  627.  
  628. for (i = 0; i < num; i++)
  629. {
  630. weaponid = weapons[i]
  631.  
  632. if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  633. {
  634. static wname[32]
  635. get_weaponname(weaponid, wname, sizeof wname - 1)
  636. engclient_cmd(id, "drop", wname)
  637. }
  638. }
  639. }

_________________
[mozgo]Bogdan for President[/mozgo]
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Dual Infinity
HozzászólásElküldve: 2013.08.31. 22:13 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.09.23. 20:29
Hozzászólások: 325
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 87 alkalommal
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fun>
  5. #include <hamsandwich>
  6. #include <xs>
  7. #include <cstrike>
  8.  
  9.  
  10. enum
  11. {
  12. anim_idle,
  13. anim_reload,
  14. anim_draw,
  15. anim_shoot1,
  16. anim_shoot2,
  17. anim_shoot3
  18. }
  19.  
  20. #define ENG_NULLENT -1
  21. #define EV_INT_WEAPONKEY EV_INT_impulse
  22. #define tomi_WEAPONKEY 9142
  23. #define MAX_PLAYERS 32
  24. #define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
  25.  
  26. const USE_STOPPED = 0
  27. const OFFSET_ACTIVE_ITEM = 373
  28. const OFFSET_WEAPONOWNER = 41
  29. const OFFSET_LINUX = 5
  30. const OFFSET_LINUX_WEAPONS = 5
  31.  
  32. #define WEAP_LINUX_XTRA_OFF 4
  33. #define m_fKnown 44
  34. #define m_flNextPrimaryAttack 46
  35. #define m_flTimeWeaponIdle 48
  36. #define m_iClip 51
  37. #define m_fInReload 54
  38. #define PLAYER_LINUX_XTRA_OFF 5
  39. #define m_flNextAttack 83
  40.  
  41. #define tomi_RELOAD_TIME 4.0
  42.  
  43. const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_SG550)|(1<<CSW_P90)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_P90)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_P90)|(1<<CSW_AK47)|(1<<CSW_P90)
  44. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_p90",
  45. "weapon_p90", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_p90", "weapon_sg550",
  46. "weapon_p90", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_p90", "weapon_m249",
  47. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_p90",
  48. "weapon_ak47", "weapon_knife", "weapon_p90" }
  49.  
  50. new const Fire_Sounds[][] = { "weapons/thompson-1.wav" }
  51.  
  52. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  53.  
  54. new tomi_V_MODEL[64] = "models/cso_wpn/vth.mdl"
  55. new tomi_P_MODEL[64] = "models/cso_wpn/pth.mdl"
  56. new tomi_W_MODEL[64] = "models/cso_wpn/wth.mdl"
  57.  
  58. new cvar_dmg_tomi, cvar_recoil_tomi, cvar_clip_tomi, cvar_tomi_ammo , cvar_dmg_tomi2
  59. new g_has_tomi[33]
  60. new g_MaxPlayers, g_orig_event_tomi, g_clip_ammo[33] , g_reload[33]
  61. new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
  62. new g_tomi_TmpClip[33]
  63. new g_mode[33] , g_mode2[33]
  64. new g_hasZoom[33]
  65. public plugin_init()
  66. {
  67. register_plugin("[CSO:tomi(2 Regimes)]", "1.0", "ololo XD")
  68. register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  69. register_event("CurWeapon","CurrentWeapon","be","1=1")
  70. RegisterHam(Ham_Item_AddToPlayer, "weapon_p90", "fw_tomi_AddToPlayer")
  71. RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
  72. RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
  73. RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
  74. RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
  75. for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
  76. if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
  77. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "fw_tomi_PrimaryAttack")
  78. RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "fw_tomi_PrimaryAttack_Post", 1)
  79. RegisterHam(Ham_Item_PostFrame, "weapon_p90", "tomi__ItemPostFrame");
  80. RegisterHam(Ham_Weapon_Reload, "weapon_p90", "tomi__Reload");
  81. RegisterHam(Ham_Weapon_Reload, "weapon_p90", "tomi__Reload_Post", 1);
  82. register_forward(FM_CmdStart, "fw_CmdStart")
  83. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  84. register_forward(FM_SetModel, "fw_SetModel")
  85. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  86. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  87.  
  88. cvar_dmg_tomi = register_cvar("tomi_dmg", "2.1")
  89. cvar_dmg_tomi2 = register_cvar("tomi_dmg_sniper", "3.0")
  90. cvar_recoil_tomi = register_cvar("tomi_recoil", "0.6")
  91. cvar_clip_tomi = register_cvar("tomi_clip", "50")
  92. cvar_tomi_ammo = register_cvar("tomi_ammo", "100")
  93. register_clcmd("thompson","give_tomi")
  94.  
  95. g_MaxPlayers = get_maxplayers()
  96. }
  97.  
  98. public plugin_precache()
  99. {
  100. precache_model(tomi_V_MODEL)
  101. precache_model(tomi_P_MODEL)
  102. precache_model(tomi_W_MODEL)
  103.  
  104. precache_sound(Fire_Sounds[0])
  105. m_iBlood[0] = precache_model("sprites/blood.spr")
  106. m_iBlood[1] = precache_model("sprites/bloodspray.spr")
  107. precache_model("sprites/640hud5.spr")
  108. register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  109. }
  110.  
  111. public plugin_natives ()
  112. {
  113. register_native("give_cso_tomi", "native_give_weapon_add", 1)
  114. register_native("get_user_tomi", "native_give_weapon_add2", 1)
  115. }
  116.  
  117. public native_give_weapon_add(id)
  118. {
  119. give_tomi(id)
  120. }
  121.  
  122. public native_give_weapon_add2(id)
  123. {
  124. return g_has_tomi[id]
  125. }
  126.  
  127. public fwPrecacheEvent_Post(type, const name[])
  128. {
  129. if (equal("events/p90.sc", name))
  130. {
  131. g_orig_event_tomi = get_orig_retval()
  132. return FMRES_HANDLED
  133. }
  134.  
  135. return FMRES_IGNORED
  136. }
  137.  
  138. public client_connect(id)
  139. {
  140. g_has_tomi[id] = false
  141. }
  142.  
  143. public client_disconnect(id)
  144. {
  145. g_has_tomi[id] = false
  146. }
  147.  
  148. public fw_SetModel(entity, model[])
  149. {
  150. if(!is_valid_ent(entity))
  151. return FMRES_IGNORED;
  152.  
  153. static szClassName[33]
  154. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  155.  
  156. if(!equal(szClassName, "weaponbox"))
  157. return FMRES_IGNORED;
  158.  
  159. static iOwner
  160.  
  161. iOwner = entity_get_edict(entity, EV_ENT_owner)
  162.  
  163. if(equal(model, "models/w_p90.mdl"))
  164. {
  165. static iStoredSVDID
  166.  
  167. iStoredSVDID = find_ent_by_owner(ENG_NULLENT, "weapon_p90", entity)
  168.  
  169. if(!is_valid_ent(iStoredSVDID))
  170. return FMRES_IGNORED;
  171.  
  172. if(g_has_tomi[iOwner])
  173. {
  174. entity_set_int(iStoredSVDID, EV_INT_WEAPONKEY, tomi_WEAPONKEY)
  175. g_has_tomi[iOwner] = false
  176.  
  177. entity_set_model(entity, tomi_W_MODEL)
  178.  
  179. return FMRES_SUPERCEDE;
  180. }
  181. }
  182.  
  183.  
  184. return FMRES_IGNORED;
  185. }
  186.  
  187. public give_tomi(id)
  188. {
  189. drop_weapons(id, 1);
  190. new iWep2 = give_item(id,"weapon_p90")
  191. if( iWep2 > 0 )
  192. {
  193. cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_tomi))
  194. cs_set_user_bpammo (id, CSW_P90, get_pcvar_num(cvar_tomi_ammo))
  195. }
  196. g_has_tomi[id] = true;
  197. }
  198.  
  199. public fw_tomi_AddToPlayer(tomi, id)
  200. {
  201. if(!is_valid_ent(tomi) || !is_user_connected(id))
  202. return HAM_IGNORED;
  203.  
  204. if(entity_get_int(tomi, EV_INT_WEAPONKEY) == tomi_WEAPONKEY)
  205. {
  206. g_has_tomi[id] = true
  207.  
  208. entity_set_int(tomi, EV_INT_WEAPONKEY, 0)
  209.  
  210. return HAM_HANDLED;
  211. }
  212.  
  213. return HAM_IGNORED;
  214. }
  215.  
  216. public fw_CmdStart(id, uc_handle, seed)
  217. {
  218. if(id > 0 && id < 33)
  219. {
  220. if(!is_user_alive(id))
  221. return PLUGIN_HANDLED
  222. if(get_user_weapon(id) == CSW_P90 && g_has_tomi[id])
  223. {
  224. if((get_uc(uc_handle, UC_Buttons) & IN_USE) && !(pev(id, pev_oldbuttons) & IN_USE) && g_reload[id] == 0 && g_mode2[id] == 0)
  225. {
  226. if(!g_hasZoom[id])
  227. {
  228. g_hasZoom[id] = true
  229. cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
  230. }else{
  231. g_hasZoom[ id ] = false
  232. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  233. }
  234. if (!g_mode[id])
  235. {
  236. g_hasZoom[id] = false
  237. cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
  238. }
  239. }
  240.  
  241. if (g_hasZoom[ id ] && (pev(id, pev_button) & IN_RELOAD))
  242. {
  243. g_hasZoom[ id ] = false
  244. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  245. }
  246.  
  247. if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && !g_mode2[id] && !g_reload[id])
  248. {
  249. g_hasZoom[ id ] = false
  250. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  251. if(g_mode[id] == 0) make_mode2(id)
  252. if(g_mode[id] == 2) make_mode1(id)
  253. }
  254. }
  255. return HAM_SUPERCEDE;
  256. }
  257. return PLUGIN_HANDLED
  258. }
  259.  
  260. public make_mode2(id)
  261. {
  262. set_task(0.000001,"mode_new2",id)
  263. g_mode2[id] = 1
  264. UTIL_PlayWeaponAnimation(id, 6)
  265. set_pdata_float(id, m_flNextAttack, 0.000001, PLAYER_LINUX_XTRA_OFF)
  266. }
  267.  
  268. public make_mode1(id)
  269. {
  270. set_task(0.000001,"mode_new1",id)
  271. g_mode2[id] = 1
  272. UTIL_PlayWeaponAnimation(id, 6)
  273. set_pdata_float(id, m_flNextAttack, 0.000001, PLAYER_LINUX_XTRA_OFF)
  274. }
  275.  
  276. public mode_new2(id)
  277. {
  278. if(g_mode2[id] == 1 && is_user_alive(id))
  279. {
  280. g_mode2[id] = 0
  281. g_mode[id] = 2
  282. client_print(id,print_center,"[Pontozott]")
  283. }
  284. }
  285.  
  286. public mode_new1(id)
  287. {
  288. if(g_mode2[id] == 1 && is_user_alive(id))
  289. {
  290. g_mode2[id] = 0
  291. g_mode[id] = 0
  292. client_print(id,print_center,"[Automata]")
  293. }
  294. }
  295.  
  296. public fw_UseStationary_Post(entity, caller, activator, use_type)
  297. {
  298. if (use_type == USE_STOPPED && is_user_connected(caller))
  299. replace_weapon_models(caller, get_user_weapon(caller))
  300. }
  301.  
  302. public fw_Item_Deploy_Post(weapon_ent)
  303. {
  304. static owner
  305. owner = fm_cs_get_weapon_ent_owner(weapon_ent)
  306.  
  307. static weaponid
  308. weaponid = cs_get_weapon_id(weapon_ent)
  309.  
  310. replace_weapon_models(owner, weaponid)
  311. }
  312.  
  313. public CurrentWeapon(id)
  314. {
  315. replace_weapon_models(id, read_data(2))
  316. remove_task(id)
  317. g_reload[id] = 0
  318. g_mode2[id] = 0
  319. }
  320.  
  321. replace_weapon_models(id, weaponid)
  322. {
  323. switch (weaponid)
  324. {
  325. case CSW_P90:
  326. {
  327. if(g_has_tomi[id])
  328. {
  329. if(g_mode[id] == 0) set_pev(id, pev_viewmodel2, tomi_V_MODEL)
  330. if(g_mode[id] == 2) set_pev(id, pev_viewmodel2, tomi_V_MODEL)
  331. set_pev(id, pev_weaponmodel2, tomi_P_MODEL)
  332. }
  333. }
  334. }
  335. }
  336.  
  337. public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  338. {
  339. if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_P90) || !g_has_tomi[Player])
  340. return FMRES_IGNORED
  341.  
  342. set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.00001)
  343. return FMRES_HANDLED
  344. }
  345.  
  346. public fw_tomi_PrimaryAttack(Weapon)
  347. {
  348. new Player = get_pdata_cbase(Weapon, 41, 4)
  349.  
  350. if (!g_has_tomi[Player])
  351. return;
  352.  
  353. pev(Player,pev_punchangle,cl_pushangle[Player])
  354.  
  355. g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
  356. }
  357.  
  358. public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  359. {
  360. if ((eventid != g_orig_event_tomi))
  361. return FMRES_IGNORED
  362. if (!(1 <= invoker <= g_MaxPlayers))
  363. return FMRES_IGNORED
  364.  
  365. playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  366. return FMRES_SUPERCEDE
  367. }
  368.  
  369. public fw_tomi_PrimaryAttack_Post(Weapon)
  370. {
  371. new Player = get_pdata_cbase(Weapon, 41, 4)
  372.  
  373. new szClip, szAmmo
  374. get_user_weapon(Player, szClip, szAmmo)
  375. if(Player > 0 && Player < 33)
  376. {
  377. if(!g_has_tomi[Player])
  378. {
  379. if(szClip > 0) emit_sound(Player, CHAN_WEAPON, "weapons/p90-1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  380. }
  381. if(g_has_tomi[Player])
  382. {
  383. new Float:push[3]
  384. pev(Player,pev_punchangle,push)
  385. xs_vec_sub(push,cl_pushangle[Player],push)
  386.  
  387. xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_tomi),push)
  388. xs_vec_add(push,cl_pushangle[Player],push)
  389. set_pev(Player,pev_punchangle,push)
  390.  
  391. if (!g_clip_ammo[Player])
  392. return
  393.  
  394. emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  395. UTIL_PlayWeaponAnimation(Player, 3)
  396.  
  397. make_blood_and_bulletholes(Player)
  398. if(g_mode[Player] == 2) set_pdata_float(Player, m_flNextAttack, 0.3, PLAYER_LINUX_XTRA_OFF)
  399. }
  400. }
  401. }
  402.  
  403. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  404. {
  405. if (victim != attacker && is_user_connected(attacker))
  406. {
  407. if(get_user_weapon(attacker) == CSW_P90)
  408. {
  409. if(g_has_tomi[attacker])
  410. {
  411. if(g_mode[attacker] == 2) SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_tomi2))
  412. if(g_mode[attacker] == 0) SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_tomi))
  413. }
  414. }
  415. }
  416. }
  417.  
  418. public message_DeathMsg(msg_id, msg_dest, id)
  419. {
  420. static szTruncatedWeapon[33], iAttacker, iVictim
  421.  
  422. get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  423.  
  424. iAttacker = get_msg_arg_int(1)
  425. iVictim = get_msg_arg_int(2)
  426.  
  427. if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  428. return PLUGIN_CONTINUE
  429.  
  430. if(equal(szTruncatedWeapon, "p90") && get_user_weapon(iAttacker) == CSW_P90)
  431. {
  432. if(g_has_tomi[iAttacker])
  433. set_msg_arg_string(4, "p90")
  434. }
  435.  
  436. return PLUGIN_CONTINUE
  437. }
  438.  
  439. stock fm_cs_get_current_weapon_ent(id)
  440. {
  441. return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);
  442. }
  443.  
  444. stock fm_cs_get_weapon_ent_owner(ent)
  445. {
  446. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
  447. }
  448.  
  449. stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
  450. {
  451. set_pev(Player, pev_weaponanim, Sequence)
  452.  
  453. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  454. write_byte(Sequence)
  455. write_byte(pev(Player, pev_body))
  456. message_end()
  457. }
  458.  
  459. stock make_blood_and_bulletholes(id)
  460. {
  461. new aimOrigin[3], target, body
  462. get_user_origin(id, aimOrigin, 3)
  463. get_user_aiming(id, target, body)
  464.  
  465. if(target > 0 && target <= g_MaxPlayers)
  466. {
  467. new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
  468. pev(id, pev_origin, fStart)
  469.  
  470. velocity_by_aim(id, 64, fVel)
  471.  
  472. fStart[0] = float(aimOrigin[0])
  473. fStart[1] = float(aimOrigin[1])
  474. fStart[2] = float(aimOrigin[2])
  475. fEnd[0] = fStart[0]+fVel[0]
  476. fEnd[1] = fStart[1]+fVel[1]
  477. fEnd[2] = fStart[2]+fVel[2]
  478.  
  479. new res
  480. engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
  481. get_tr2(res, TR_vecEndPos, fRes)
  482.  
  483. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  484. write_byte(TE_BLOODSPRITE)
  485. write_coord(floatround(fStart[0]))
  486. write_coord(floatround(fStart[1]))
  487. write_coord(floatround(fStart[2]))
  488. write_short( m_iBlood [ 1 ])
  489. write_short( m_iBlood [ 0 ] )
  490. write_byte(70)
  491. write_byte(random_num(1,2))
  492. message_end()
  493.  
  494.  
  495. }
  496. else if(!is_user_connected(target))
  497. {
  498. if(target)
  499. {
  500. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  501. write_byte(TE_DECAL)
  502. write_coord(aimOrigin[0])
  503. write_coord(aimOrigin[1])
  504. write_coord(aimOrigin[2])
  505. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  506. write_short(target)
  507. message_end()
  508. }
  509. else
  510. {
  511. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  512. write_byte(TE_WORLDDECAL)
  513. write_coord(aimOrigin[0])
  514. write_coord(aimOrigin[1])
  515. write_coord(aimOrigin[2])
  516. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  517. message_end()
  518. }
  519.  
  520. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  521. write_byte(TE_GUNSHOTDECAL)
  522. write_coord(aimOrigin[0])
  523. write_coord(aimOrigin[1])
  524. write_coord(aimOrigin[2])
  525. write_short(id)
  526. write_byte(GUNSHOT_DECALS[random_num ( 0, sizeof GUNSHOT_DECALS -1 ) ] )
  527. message_end()
  528. }
  529. }
  530.  
  531. public tomi__ItemPostFrame(weapon_entity) {
  532. new id = pev(weapon_entity, pev_owner)
  533. if (!is_user_connected(id))
  534. return HAM_IGNORED;
  535.  
  536. if (!g_has_tomi[id])
  537. return HAM_IGNORED;
  538.  
  539. new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
  540.  
  541. new iBpAmmo = cs_get_user_bpammo(id, CSW_P90);
  542. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  543.  
  544. new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
  545.  
  546. if( fInReload && flNextAttack <= 0.0 )
  547. {
  548. new j = min(get_pcvar_num(cvar_clip_tomi) - iClip, iBpAmmo)
  549.  
  550. set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
  551. cs_set_user_bpammo(id, CSW_P90, iBpAmmo-j);
  552.  
  553. set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
  554. fInReload = 0
  555. g_reload[id] = 0
  556. }
  557.  
  558. return HAM_IGNORED;
  559. }
  560.  
  561. public tomi__Reload(weapon_entity) {
  562. new id = pev(weapon_entity, pev_owner)
  563. if (!is_user_connected(id))
  564. return HAM_IGNORED;
  565.  
  566. if (!g_has_tomi[id])
  567. return HAM_IGNORED;
  568.  
  569. g_tomi_TmpClip[id] = -1;
  570.  
  571. new iBpAmmo = cs_get_user_bpammo(id, CSW_P90);
  572. new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
  573.  
  574. if (iBpAmmo <= 0)
  575. return HAM_SUPERCEDE;
  576.  
  577. if (iClip >= get_pcvar_num(cvar_clip_tomi))
  578. return HAM_SUPERCEDE;
  579.  
  580.  
  581. g_tomi_TmpClip[id] = iClip;
  582.  
  583. g_reload[id] = 1
  584.  
  585. return HAM_IGNORED;
  586. }
  587.  
  588. public tomi__Reload_Post(weapon_entity) {
  589. new id = pev(weapon_entity, pev_owner)
  590. if (!is_user_connected(id))
  591. return HAM_IGNORED;
  592.  
  593. if (!g_has_tomi[id])
  594. return HAM_IGNORED;
  595.  
  596. if (g_tomi_TmpClip[id] == -1)
  597. return HAM_IGNORED;
  598.  
  599. set_pdata_int(weapon_entity, m_iClip, g_tomi_TmpClip[id], WEAP_LINUX_XTRA_OFF)
  600.  
  601. set_pdata_float(weapon_entity, m_flTimeWeaponIdle, tomi_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
  602.  
  603. set_pdata_float(id, m_flNextAttack, tomi_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
  604.  
  605. set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
  606.  
  607. // relaod animation
  608. UTIL_PlayWeaponAnimation(id, 1)
  609.  
  610. return HAM_IGNORED;
  611. }
  612.  
  613. stock drop_weapons(id, dropwhat)
  614. {
  615. static weapons[32], num, i, weaponid
  616. num = 0
  617. get_user_weapons(id, weapons, num)
  618.  
  619. for (i = 0; i < num; i++)
  620. {
  621. weaponid = weapons[i]
  622.  
  623. if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  624. {
  625. static wname[32]
  626. get_weaponname(weaponid, wname, sizeof wname - 1)
  627. engclient_cmd(id, "drop", wname)
  628. }
  629. }
  630. }

Ők köszönték meg Vinnice nek ezt a hozzászólást: JAck (2013.09.01. 17:19)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 17 hozzászólás ]  Oldal 1 2 Következő


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 21 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole