hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 12:17



Jelenlévő felhasználók

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

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

Regisztrált felhasználók: nincs regisztrált felhasználó 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  [ 6 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: set_player_nextattack(id)
HozzászólásElküldve: 2013.07.08. 19:08 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
Ezt melyik modul vagy inc használja? THX :D

Meg kellene ezt a plugot fixálni, errort a set_player_nextattack-ra dobja h ismeretlen

SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fakemeta_util>
  5. #include <hamsandwich>
  6. #include <cstrike>
  7. #include <xs>
  8.  
  9. #define PLUGIN "LightSaber"
  10. #define VERSION "1.0"
  11. #define AUTHOR "Dias Leon"
  12.  
  13. /* ===============================
  14. ------------ Configs -------------
  15. =================================*/
  16. #define DAMAGE_LIGHTSABER 240
  17. #define DAMAGE_ATTACK 120
  18.  
  19. #define RADIUS_ON 96
  20. #define RADIUS_OFF 72
  21.  
  22. #define DRAW_TIME 0.75
  23. #define TURN_TIME 0.5
  24. #define RESET_TIME 1.5
  25.  
  26. #define ANIMEXT1 "onehanded"
  27. #define ANIMEXT2 "knife"
  28.  
  29. #define V_MODEL "models/b20_d2/male/v_sfsword.mdl"
  30. #define P_MODEL_ON "models/b20_d2/p_sfsword_on.mdl"
  31. #define P_MODEL_OFF "models/b20_d2/p_sfsword_off.mdl"
  32.  
  33. new const LightSaber_Sounds[14][] =
  34. {
  35. "weapons/sfsword_draw.wav",
  36. "weapons/sfsword_hit1.wav",
  37. "weapons/sfsword_hit2.wav",
  38. "weapons/sfsword_idle.wav",
  39. "weapons/sfsword_midslash1.wav",
  40. "weapons/sfsword_midslash2.wav",
  41. "weapons/sfsword_midslash3.wav",
  42. "weapons/sfsword_off.wav",
  43. "weapons/sfsword_off_hit.wav",
  44. "weapons/sfsword_off_slash1.wav",
  45. "weapons/sfsword_on.wav", // 10
  46. "weapons/sfsword_stab.wav",
  47. "weapons/sfsword_wall1.wav",
  48. "weapons/sfsword_wall2.wav"
  49. }
  50.  
  51. enum
  52. {
  53. LS_ANIM_IDLE_ON = 0,
  54. LS_ANIM_ON,
  55. LS_ANIM_OFF,
  56. LS_ANIM_DRAW,
  57. LS_ANIM_STAB,
  58. LS_ANIM_STAB_MISS,
  59. LS_ANIM_MIDSLASH1,
  60. LS_ANIM_MIDSLASH2,
  61. LS_ANIM_MIDSLASH3,
  62. LS_ANIM_IDLE_OFF,
  63. LS_ANIM_SLASH_OFF
  64. }
  65.  
  66. /* ===============================
  67. --------- End of Config ----------
  68. =================================*/
  69.  
  70. #define CSW_LIGHTSABER CSW_KNIFE
  71. #define weapon_lightsaber "weapon_knife"
  72.  
  73. #define TASK_TURN 4234234
  74. #define TASK_SLASH 6948638
  75. #define TASK_RESET 54893534
  76.  
  77. // MACROS
  78. #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
  79. #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
  80. #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
  81.  
  82. enum
  83. {
  84. HIT_NOTHING = 0,
  85. HIT_ENEMY,
  86. HIT_WALL
  87. }
  88.  
  89. enum
  90. {
  91. ATTACK_SLASH1 = 0,
  92. ATTACK_SLASH2,
  93. ATTACK_SLASH3
  94. }
  95.  
  96. // Vars
  97. new g_LightSaber
  98. new g_Had_LightSaber, g_IsOnMode, g_TempingAttack, g_InSpecialAttack
  99. new g_WillBeHit[33], g_AttackingMode[33]
  100. new g_MaxPlayers, g_Ham_Bot, g_OldWeapon[33]
  101.  
  102. public plugin_init()
  103. {
  104. register_plugin(PLUGIN, VERSION, AUTHOR)
  105.  
  106. register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
  107.  
  108. register_forward(FM_CmdStart, "fw_CmdStart")
  109. register_forward(FM_EmitSound, "fw_EmitSound")
  110. register_forward(FM_TraceLine, "fw_TraceLine")
  111. register_forward(FM_TraceHull, "fw_TraceHull")
  112.  
  113. RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
  114. RegisterHam(Ham_Weapon_WeaponIdle, weapon_lightsaber, "fw_Weapon_WeaponIdle_Post", 1)
  115. g_MaxPlayers = get_maxplayers()
  116. }
  117.  
  118. public plugin_precache()
  119. {
  120. engfunc(EngFunc_PrecacheModel, V_MODEL)
  121. engfunc(EngFunc_PrecacheModel, P_MODEL_ON)
  122. engfunc(EngFunc_PrecacheModel, P_MODEL_OFF)
  123.  
  124. for(new i = 0; i < sizeof(LightSaber_Sounds); i++)
  125. engfunc(EngFunc_PrecacheSound, LightSaber_Sounds[i])
  126. }
  127.  
  128. public client_putinserver(id)
  129. {
  130. Remove_LightSaber(id)
  131.  
  132. if(!g_Ham_Bot && is_user_bot(id))
  133. {
  134. g_Ham_Bot = 1
  135. set_task(0.1, "Do_RegisterHam_Bot", id)
  136. }
  137. }
  138.  
  139. public Do_RegisterHam_Bot(id)
  140. {
  141. RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
  142. }
  143.  
  144. public lightsaber(id, ItemID)
  145. {
  146. if(ItemID == g_LightSaber) Get_LightSaber(id)
  147. }
  148.  
  149. public Get_LightSaber(id)
  150. {
  151. if(!is_user_alive(id))
  152. return
  153.  
  154. Set_BitVar(g_Had_LightSaber, id)
  155. Set_BitVar(g_IsOnMode, id)
  156. UnSet_BitVar(g_TempingAttack, id)
  157. UnSet_BitVar(g_InSpecialAttack, id)
  158. g_WillBeHit[id] = HIT_NOTHING
  159. g_AttackingMode[id] = 0
  160.  
  161. remove_task(id+TASK_TURN)
  162. remove_task(id+TASK_SLASH)
  163. remove_task(id+TASK_RESET)
  164.  
  165. fm_give_item(id, weapon_lightsaber)
  166. if(get_user_weapon(id) == CSW_LIGHTSABER)
  167. {
  168. set_pev(id, pev_viewmodel2, V_MODEL)
  169. set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
  170.  
  171. set_player_nextattack(id, DRAW_TIME)
  172. set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
  173.  
  174. set_weapon_anim(id, LS_ANIM_DRAW)
  175. } else {
  176. engclient_cmd(id, weapon_lightsaber)
  177. }
  178. }
  179.  
  180. public Remove_LightSaber(id)
  181. {
  182. UnSet_BitVar(g_Had_LightSaber, id)
  183. UnSet_BitVar(g_IsOnMode, id)
  184. UnSet_BitVar(g_TempingAttack, id)
  185. UnSet_BitVar(g_InSpecialAttack, id)
  186. g_WillBeHit[id] = HIT_NOTHING
  187. g_AttackingMode[id] = 0
  188.  
  189. remove_task(id+TASK_TURN)
  190. remove_task(id+TASK_SLASH)
  191. remove_task(id+TASK_RESET)
  192. }
  193.  
  194. public Event_CurWeapon(id)
  195. {
  196. if(!is_user_alive(id))
  197. return
  198. static CSWID; CSWID = read_data(2)
  199.  
  200. if((CSWID == CSW_LIGHTSABER && g_OldWeapon[id] != CSW_LIGHTSABER) && Get_BitVar(g_Had_LightSaber, id))
  201. {
  202. set_pev(id, pev_viewmodel2, V_MODEL)
  203. set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
  204.  
  205. set_player_nextattack(id, DRAW_TIME)
  206. set_weapons_timeidle(id, CSW_LIGHTSABER, DRAW_TIME + 0.5)
  207.  
  208. set_weapon_anim(id, LS_ANIM_DRAW)
  209. set_pdata_string(id, (492) * 4, ANIMEXT1, -1 , 20)
  210. } else if(CSWID != CSW_LIGHTSABER && g_OldWeapon[id] == CSW_LIGHTSABER) {
  211. g_AttackingMode[id] = 0
  212.  
  213. Set_BitVar(g_IsOnMode, id)
  214. UnSet_BitVar(g_InSpecialAttack, id)
  215.  
  216. remove_task(id+TASK_TURN)
  217. }
  218.  
  219. g_OldWeapon[id] = CSWID
  220. }
  221.  
  222. public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
  223. {
  224. if(!is_user_connected(id))
  225. return FMRES_IGNORED
  226. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  227. return FMRES_IGNORED
  228.  
  229. if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
  230. {
  231. if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
  232. {
  233. g_WillBeHit[id] = HIT_NOTHING
  234. return FMRES_SUPERCEDE
  235. }
  236. if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't')
  237. {
  238. if (sample[17] == 'w') // wall
  239. {
  240. g_WillBeHit[id] = HIT_WALL
  241. return FMRES_SUPERCEDE
  242. } else {
  243. g_WillBeHit[id] = HIT_ENEMY
  244. return FMRES_SUPERCEDE
  245. }
  246. }
  247. if (sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
  248. return FMRES_SUPERCEDE;
  249. }
  250.  
  251. return FMRES_IGNORED
  252. }
  253.  
  254. public fw_CmdStart(id, uc_handle, seed)
  255. {
  256. if(!is_user_alive(id))
  257. return
  258. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  259. return
  260.  
  261. static ent; ent = fm_get_user_weapon_entity(id, CSW_LIGHTSABER)
  262. if(!pev_valid(ent))
  263. return
  264. if(get_pdata_float(id, 83, 5) > 0.0)
  265. return
  266.  
  267. static CurButton; CurButton = get_uc(uc_handle, UC_Buttons)
  268. if(CurButton & IN_ATTACK)
  269. {
  270. CurButton &= ~IN_ATTACK
  271. set_uc(uc_handle, UC_Buttons, CurButton)
  272.  
  273. if(Get_BitVar(g_IsOnMode, id))
  274. {
  275. if(!Get_BitVar(g_InSpecialAttack, id))
  276. {
  277. if(g_AttackingMode[id] == 0) g_AttackingMode[id] = 1
  278.  
  279. g_AttackingMode[id]++
  280. if(g_AttackingMode[id] > ATTACK_SLASH3) g_AttackingMode[id] = 1
  281.  
  282. set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
  283.  
  284. Set_BitVar(g_TempingAttack, id)
  285. ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
  286. UnSet_BitVar(g_TempingAttack, id)
  287.  
  288. set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
  289. set_player_nextattack(id, 1.0)
  290.  
  291. if(g_AttackingMode[id] == 1) set_weapon_anim(id, LS_ANIM_MIDSLASH1)
  292. else if(g_AttackingMode[id] == 2) set_weapon_anim(id, LS_ANIM_MIDSLASH2)
  293. else if(g_AttackingMode[id] == 3) set_weapon_anim(id, LS_ANIM_MIDSLASH3)
  294.  
  295. set_task(0.25, "Damage_Slash", id+TASK_SLASH)
  296. set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
  297. Set_BitVar(g_InSpecialAttack, id)
  298. } else {
  299. set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
  300.  
  301. Set_BitVar(g_TempingAttack, id)
  302. ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
  303. UnSet_BitVar(g_TempingAttack, id)
  304.  
  305. set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
  306. set_player_nextattack(id, 1.0)
  307.  
  308. set_weapon_anim(id, LS_ANIM_STAB)
  309.  
  310. set_task(0.25, "Damage_Stab", id+TASK_SLASH)
  311. set_task(0.5, "Damage_Stab", id+TASK_SLASH)
  312. set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
  313. UnSet_BitVar(g_InSpecialAttack, id)
  314. }
  315. } else {
  316. set_pdata_string(id, (492) * 4, ANIMEXT2, -1 , 20)
  317.  
  318. Set_BitVar(g_TempingAttack, id)
  319. ExecuteHamB(Ham_Weapon_PrimaryAttack, ent)
  320. UnSet_BitVar(g_TempingAttack, id)
  321.  
  322. set_weapons_timeidle(id, CSW_LIGHTSABER, 1.0)
  323. set_player_nextattack(id, 1.0)
  324.  
  325. set_weapon_anim(id, LS_ANIM_SLASH_OFF)
  326. set_task(0.25, "Damage_OffStab", id+TASK_SLASH)
  327. set_task(RESET_TIME, "Reset_Anim", id+TASK_RESET)
  328.  
  329. UnSet_BitVar(g_InSpecialAttack, id)
  330. }
  331. } else if(CurButton & IN_ATTACK2) {
  332. CurButton &= ~IN_ATTACK2
  333. set_uc(uc_handle, UC_Buttons, CurButton)
  334.  
  335. set_weapon_anim(id, !Get_BitVar(g_IsOnMode, id) ? LS_ANIM_ON : LS_ANIM_OFF)
  336.  
  337. set_player_nextattack(id, TURN_TIME)
  338. set_weapons_timeidle(id, CSW_LIGHTSABER, TURN_TIME)
  339.  
  340. set_task(TURN_TIME - 0.1, "Turn_Complete", id+TASK_TURN)
  341. }
  342. }
  343.  
  344. public Turn_Complete(id)
  345. {
  346. id -= TASK_TURN
  347. if(!is_user_alive(id))
  348. return
  349. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  350. return
  351.  
  352. if(Get_BitVar(g_IsOnMode, id)) UnSet_BitVar(g_IsOnMode, id)
  353. else Set_BitVar(g_IsOnMode, id)
  354.  
  355. set_pev(id, pev_weaponmodel2, Get_BitVar(g_IsOnMode, id) ? P_MODEL_ON : P_MODEL_OFF)
  356. set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
  357. }
  358.  
  359. public Reset_Anim(id)
  360. {
  361. id -= TASK_RESET
  362. if(!is_user_alive(id))
  363. return
  364. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  365. return
  366.  
  367. set_pdata_string(id, (492) * 4, Get_BitVar(g_IsOnMode, id) ? ANIMEXT1 : ANIMEXT2, -1 , 20)
  368. }
  369.  
  370. public Damage_Slash(id)
  371. {
  372. id -= TASK_SLASH
  373. if(!is_user_alive(id))
  374. return
  375. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  376. return
  377.  
  378. static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
  379. if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
  380. else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
  381. }
  382.  
  383. public Damage_Stab(id)
  384. {
  385. id -= TASK_SLASH
  386. if(!is_user_alive(id))
  387. return
  388. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  389. return
  390.  
  391. static Target; Target = CheckAttack(id, float(RADIUS_ON), 48.0, float(DAMAGE_LIGHTSABER))
  392. if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(1, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)
  393. else if(g_WillBeHit[id] == HIT_WALL) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[random_num(12, 13)], 1.0, ATTN_NORM, 0, PITCH_NORM)
  394. }
  395.  
  396. public Damage_OffStab(id)
  397. {
  398. id -= TASK_SLASH
  399. if(!is_user_alive(id))
  400. return
  401. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  402. return
  403.  
  404. static Ent; Ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
  405. if(!pev_valid(Ent)) Ent = 0
  406.  
  407. static Target; Target = CheckAttack(id, float(RADIUS_OFF), 24.0, float(DAMAGE_ATTACK))
  408. if(Target) emit_sound(id, CHAN_WEAPON, LightSaber_Sounds[8], 1.0, ATTN_NORM, 0, PITCH_NORM)
  409. }
  410.  
  411. public CheckAttack(id, Float:Radius, Float:PointDis, Float:Damage)
  412. {
  413. static Float:Max_Distance, Float:Point[4][3], Float:TB_Distance, Float:Point_Dis
  414.  
  415. Point_Dis = PointDis
  416. Max_Distance = Radius
  417. TB_Distance = Max_Distance / 4.0
  418.  
  419. static Float:VicOrigin[3], Float:MyOrigin[3]
  420. pev(id, pev_origin, MyOrigin)
  421.  
  422. for(new i = 0; i < 4; i++) get_position(id, TB_Distance * (i + 1), 0.0, 0.0, Point[i])
  423.  
  424. static Have_Victim; Have_Victim = 0
  425. static ent; ent = fm_get_user_weapon_entity(id, get_user_weapon(id))
  426.  
  427. if(!pev_valid(ent))
  428. return 0
  429.  
  430. for(new i = 0; i < g_MaxPlayers; i++)
  431. {
  432. if(!is_user_alive(i))
  433. continue
  434. if(id == i)
  435. continue
  436. if(entity_range(id, i) > Max_Distance)
  437. continue
  438.  
  439. pev(i, pev_origin, VicOrigin)
  440. if(is_wall_between_points(MyOrigin, VicOrigin, id))
  441. continue
  442.  
  443. if(get_distance_f(VicOrigin, Point[0]) <= Point_Dis
  444. || get_distance_f(VicOrigin, Point[1]) <= Point_Dis
  445. || get_distance_f(VicOrigin, Point[2]) <= Point_Dis
  446. || get_distance_f(VicOrigin, Point[3]) <= Point_Dis)
  447. {
  448. if(!Have_Victim) Have_Victim = 1
  449. do_attack(id, i, ent, Damage)
  450. }
  451. }
  452.  
  453. if(Have_Victim) return 1
  454. return 0
  455. }
  456.  
  457. public fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle)
  458. {
  459. if(!is_user_alive(id))
  460. return FMRES_IGNORED
  461. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  462. return FMRES_IGNORED
  463.  
  464. static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
  465.  
  466. pev(id, pev_origin, fOrigin)
  467. pev(id, pev_view_ofs, view_ofs)
  468. xs_vec_add(fOrigin, view_ofs, vecStart)
  469. pev(id, pev_v_angle, v_angle)
  470.  
  471. engfunc(EngFunc_MakeVectors, v_angle)
  472. get_global_vector(GL_v_forward, v_forward)
  473.  
  474. if(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
  475. else xs_vec_mul_scalar(v_forward, 0.0, v_forward)
  476. xs_vec_add(vecStart, v_forward, vecEnd)
  477.  
  478. engfunc(EngFunc_TraceLine, vecStart, vecEnd, ignored_monster, id, handle)
  479.  
  480. return FMRES_SUPERCEDE
  481. }
  482.  
  483. public fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle)
  484. {
  485. if(!is_user_alive(id))
  486. return FMRES_IGNORED
  487. if(get_user_weapon(id) != CSW_LIGHTSABER || !Get_BitVar(g_Had_LightSaber, id))
  488. return FMRES_IGNORED
  489.  
  490. static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
  491.  
  492. pev(id, pev_origin, fOrigin)
  493. pev(id, pev_view_ofs, view_ofs)
  494. xs_vec_add(fOrigin, view_ofs, vecStart)
  495. pev(id, pev_v_angle, v_angle)
  496.  
  497. engfunc(EngFunc_MakeVectors, v_angle)
  498. get_global_vector(GL_v_forward, v_forward)
  499.  
  500. if(Get_BitVar(g_TempingAttack, id)) xs_vec_mul_scalar(v_forward, (Get_BitVar(g_IsOnMode, id) ? float(RADIUS_ON) : float(RADIUS_OFF)), v_forward)
  501. else xs_vec_mul_scalar(v_forward, 0.0, v_forward)
  502. xs_vec_add(vecStart, v_forward, vecEnd)
  503.  
  504. engfunc(EngFunc_TraceHull, vecStart, vecEnd, ignored_monster, hull, id, handle)
  505.  
  506. return FMRES_SUPERCEDE
  507. }
  508.  
  509. public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], TraceResult, DamageBits)
  510. {
  511. if(!is_user_alive(Attacker))
  512. return HAM_IGNORED
  513. if(!Get_BitVar(g_Had_LightSaber, Attacker) || !Get_BitVar(g_TempingAttack, Attacker))
  514. return HAM_IGNORED
  515.  
  516. return HAM_SUPERCEDE
  517. }
  518.  
  519. public fw_Weapon_WeaponIdle_Post(ent)
  520. {
  521. static id; id = pev(ent, pev_owner)
  522. if(!is_user_alive(id))
  523. return HAM_IGNORED
  524. if(!Get_BitVar(g_Had_LightSaber, id))
  525. return HAM_IGNORED
  526.  
  527. if(get_pdata_float(ent, 48, 4) <= 0.25)
  528. {
  529. set_weapon_anim(id, Get_BitVar(g_IsOnMode, id) ? LS_ANIM_IDLE_ON : LS_ANIM_IDLE_OFF)
  530. set_pdata_float(ent, 48, 20.0, 4)
  531. }
  532.  
  533. return HAM_IGNORED
  534. }
  535.  
  536. stock is_wall_between_points(Float:start[3], Float:end[3], ignore_ent)
  537. {
  538. static ptr
  539. ptr = create_tr2()
  540.  
  541. engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, ignore_ent, ptr)
  542.  
  543. static Float:EndPos[3]
  544. get_tr2(ptr, TR_vecEndPos, EndPos)
  545.  
  546. free_tr2(ptr)
  547. return floatround(get_distance_f(end, EndPos))
  548. }
  549.  
  550. do_attack(Attacker, Victim, Inflictor, Float:fDamage)
  551. {
  552. fake_player_trace_attack(Attacker, Victim, fDamage)
  553. fake_take_damage(Attacker, Victim, fDamage, Inflictor)
  554. }
  555.  
  556. fake_player_trace_attack(iAttacker, iVictim, &Float:fDamage)
  557. {
  558. // get fDirection
  559. static Float:fAngles[3], Float:fDirection[3]
  560. pev(iAttacker, pev_angles, fAngles)
  561. angle_vector(fAngles, ANGLEVECTOR_FORWARD, fDirection)
  562.  
  563. // get fStart
  564. static Float:fStart[3], Float:fViewOfs[3]
  565. pev(iAttacker, pev_origin, fStart)
  566. pev(iAttacker, pev_view_ofs, fViewOfs)
  567. xs_vec_add(fViewOfs, fStart, fStart)
  568.  
  569. // get aimOrigin
  570. static iAimOrigin[3], Float:fAimOrigin[3]
  571. get_user_origin(iAttacker, iAimOrigin, 3)
  572. IVecFVec(iAimOrigin, fAimOrigin)
  573.  
  574. // TraceLine from fStart to AimOrigin
  575. static ptr; ptr = create_tr2()
  576. engfunc(EngFunc_TraceLine, fStart, fAimOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr)
  577. static pHit; pHit = get_tr2(ptr, TR_pHit)
  578. static iHitgroup; iHitgroup = get_tr2(ptr, TR_iHitgroup)
  579. static Float:fEndPos[3]; get_tr2(ptr, TR_vecEndPos, fEndPos)
  580.  
  581. // get target & body at aiming
  582. static iTarget, iBody
  583. get_user_aiming(iAttacker, iTarget, iBody)
  584.  
  585. // if aiming find target is iVictim then update iHitgroup
  586. if (iTarget == iVictim)
  587. {
  588. iHitgroup = iBody
  589. }
  590.  
  591. // if ptr find target not is iVictim
  592. else if (pHit != iVictim)
  593. {
  594. // get AimOrigin in iVictim
  595. static Float:fVicOrigin[3], Float:fVicViewOfs[3], Float:fAimInVictim[3]
  596. pev(iVictim, pev_origin, fVicOrigin)
  597. pev(iVictim, pev_view_ofs, fVicViewOfs)
  598. xs_vec_add(fVicViewOfs, fVicOrigin, fAimInVictim)
  599. fAimInVictim[2] = fStart[2]
  600. fAimInVictim[2] += get_distance_f(fStart, fAimInVictim) * floattan( fAngles[0] * 2.0, degrees )
  601.  
  602. // check aim in size of iVictim
  603. static iAngleToVictim; iAngleToVictim = get_angle_to_target(iAttacker, fVicOrigin)
  604. iAngleToVictim = abs(iAngleToVictim)
  605. static Float:fDis; fDis = 2.0 * get_distance_f(fStart, fAimInVictim) * floatsin( float(iAngleToVictim) * 0.5, degrees )
  606. static Float:fVicSize[3]
  607. pev(iVictim, pev_size , fVicSize)
  608. if ( fDis <= fVicSize[0] * 0.5 )
  609. {
  610. // TraceLine from fStart to aimOrigin in iVictim
  611. static ptr2; ptr2 = create_tr2()
  612. engfunc(EngFunc_TraceLine, fStart, fAimInVictim, DONT_IGNORE_MONSTERS, iAttacker, ptr2)
  613. static pHit2; pHit2 = get_tr2(ptr2, TR_pHit)
  614. static iHitgroup2; iHitgroup2 = get_tr2(ptr2, TR_iHitgroup)
  615.  
  616. // if ptr2 find target is iVictim
  617. if ( pHit2 == iVictim && (iHitgroup2 != HIT_HEAD || fDis <= fVicSize[0] * 0.25) )
  618. {
  619. pHit = iVictim
  620. iHitgroup = iHitgroup2
  621. get_tr2(ptr2, TR_vecEndPos, fEndPos)
  622. }
  623.  
  624. free_tr2(ptr2)
  625. }
  626.  
  627. // if pHit still not is iVictim then set default HitGroup
  628. if (pHit != iVictim)
  629. {
  630. // set default iHitgroup
  631. iHitgroup = HIT_GENERIC
  632.  
  633. static ptr3; ptr3 = create_tr2()
  634. engfunc(EngFunc_TraceLine, fStart, fVicOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr3)
  635. get_tr2(ptr3, TR_vecEndPos, fEndPos)
  636.  
  637. // free ptr3
  638. free_tr2(ptr3)
  639. }
  640. }
  641.  
  642. // set new Hit & Hitgroup & EndPos
  643. set_tr2(ptr, TR_pHit, iVictim)
  644. set_tr2(ptr, TR_iHitgroup, iHitgroup)
  645. set_tr2(ptr, TR_vecEndPos, fEndPos)
  646.  
  647. // hitgroup multi fDamage
  648. static Float:fMultifDamage
  649. switch(iHitgroup)
  650. {
  651. case HIT_HEAD: fMultifDamage = 4.0
  652. case HIT_STOMACH: fMultifDamage = 1.25
  653. case HIT_LEFTLEG: fMultifDamage = 0.75
  654. case HIT_RIGHTLEG: fMultifDamage = 0.75
  655. default: fMultifDamage = 1.0
  656. }
  657.  
  658. fDamage *= fMultifDamage
  659.  
  660. // ExecuteHam
  661. fake_trake_attack(iAttacker, iVictim, fDamage, fDirection, ptr)
  662.  
  663. // free ptr
  664. free_tr2(ptr)
  665. }
  666.  
  667. stock fake_trake_attack(iAttacker, iVictim, Float:fDamage, Float:fDirection[3], iTraceHandle, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
  668. {
  669. ExecuteHamB(Ham_TraceAttack, iVictim, iAttacker, fDamage, fDirection, iTraceHandle, iDamageBit)
  670. }
  671.  
  672. stock fake_take_damage(iAttacker, iVictim, Float:fDamage, iInflictor = 0, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
  673. {
  674. ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit)
  675. }
  676.  
  677. stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
  678. {
  679. static Float:fOrigin[3], iAimOrigin[3], Float:fAimOrigin[3], Float:fV1[3]
  680. pev(id, pev_origin, fOrigin)
  681. get_user_origin(id, iAimOrigin, 3) // end position from eyes
  682. IVecFVec(iAimOrigin, fAimOrigin)
  683. xs_vec_sub(fAimOrigin, fOrigin, fV1)
  684.  
  685. static Float:fV2[3]
  686. xs_vec_sub(fTarget, fOrigin, fV2)
  687.  
  688. static iResult; iResult = get_angle_between_vectors(fV1, fV2)
  689.  
  690. if (TargetSize > 0.0)
  691. {
  692. static Float:fTan; fTan = TargetSize / get_distance_f(fOrigin, fTarget)
  693. static fAngleToTargetSize; fAngleToTargetSize = floatround( floatatan(fTan, degrees) )
  694. iResult -= (iResult > 0) ? fAngleToTargetSize : -fAngleToTargetSize
  695. }
  696.  
  697. return iResult
  698. }
  699.  
  700. stock get_angle_between_vectors(const Float:fV1[3], const Float:fV2[3])
  701. {
  702. static Float:fA1[3], Float:fA2[3]
  703. engfunc(EngFunc_VecToAngles, fV1, fA1)
  704. engfunc(EngFunc_VecToAngles, fV2, fA2)
  705.  
  706. static iResult; iResult = floatround(fA1[1] - fA2[1])
  707. iResult = iResult % 360
  708. iResult = (iResult > 180) ? (iResult - 360) : iResult
  709.  
  710. return iResult
  711. }
  712.  
  713. stock get_position(ent, Float:forw, Float:right, Float:up, Float:vStart[])
  714. {
  715. static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  716.  
  717. pev(ent, pev_origin, vOrigin)
  718. pev(ent, pev_view_ofs,vUp) //for player
  719. xs_vec_add(vOrigin,vUp,vOrigin)
  720. pev(ent, pev_v_angle, vAngle) // if normal entity ,use pev_angles
  721.  
  722. angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
  723. angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
  724. angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
  725.  
  726. vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  727. vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  728. vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  729. }
  730.  
  731. stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
  732. {
  733. static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
  734. if(!pev_valid(entwpn))
  735. return
  736.  
  737. set_pdata_float(entwpn, 46, TimeIdle, 4)
  738. set_pdata_float(entwpn, 47, TimeIdle, 4)
  739. set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
  740. }
  741.  
  742. stock set_weapon_anim(id, anim)
  743. {
  744. set_pev(id, pev_weaponanim, anim)
  745.  
  746. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
  747. write_byte(anim)
  748. write_byte(0)
  749. message_end()
  750. }

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: set_player_nextattack(id)
HozzászólásElküldve: 2013.07.08. 19:27 
Offline
Tiszteletbeli

Csatlakozott: 2010.02.04. 19:12
Hozzászólások: 3528
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 180 alkalommal
google ilyet dobott
SMA Forráskód: [ Mindet kijelol ]
  1. set_player_nextattack(id, Float:nexttime)
  2. {
  3. set_pdata_float(id, m_flNextAttack, nexttime, 4)
  4. }

_________________
http://www.ebateam.eu/

Ők köszönték meg IrOn nek ezt a hozzászólást: RaZzoR (2013.07.08. 20:16)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: set_player_nextattack(id)
HozzászólásElküldve: 2013.07.08. 20:18 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
THX Iron, működik :D

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: set_player_nextattack(id)
HozzászólásElküldve: 2013.07.08. 20:28 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.11.14. 15:20
Hozzászólások: 449
Megköszönt másnak: 80 alkalommal
Megköszönték neki: 19 alkalommal
IrOn123 írta:
google ilyet dobott
SMA Forráskód: [ Mindet kijelol ]
  1. set_player_nextattack(id, Float:nexttime)
  2. {
  3. set_pdata_float(id, m_flNextAttack, nexttime, 4)
  4. }


és ez amúgy mit is csinál?

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: set_player_nextattack(id)
HozzászólásElküldve: 2013.07.08. 20:51 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
Én se tudom XD

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: set_player_nextattack(id)
HozzászólásElküldve: 2013.07.08. 21:08 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.11.14. 15:20
Hozzászólások: 449
Megköszönt másnak: 80 alkalommal
Megköszönték neki: 19 alkalommal
RaZzoR írta:
Én se tudom XD


legalább nem vagyok egyedül :lol:

_________________
Kép


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  [ 6 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 19 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