Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.06 KB | None | 0 0
  1. //#define engine
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <fun>
  6. #if defined engine
  7. #include <engine>
  8. #else
  9. #include <fakemeta>
  10. #endif
  11.  
  12. #define ADMIN_LEVEL_Q ADMIN_LEVEL_C
  13.  
  14. //Used for Grab
  15. new maxplayers
  16. new grab[33]
  17. new Float:grab_totaldis[33]
  18. new grab_speed_cvar
  19. new grab_enabled_cvar
  20. new bool:has_grab[33]
  21.  
  22. //Used for Hook
  23. new bool:hook[33]
  24. new hook_to[33][3]
  25. new hook_speed_cvar
  26. new hook_enabled_cvar
  27. new bool:has_hook[33]
  28.  
  29. //Used for Rope
  30. new bool:rope[33]
  31. new rope_to[33][3]
  32. new Float:rope_totaldis[33]
  33. new rope_speed_cvar
  34. new rope_enabled_cvar
  35. new bool:has_rope[33]
  36.  
  37. //Used for All
  38. new beamsprite
  39.  
  40.  
  41. /****************************
  42. Register Commands and CVARs
  43. ****************************/
  44.  
  45. public plugin_init()
  46. {
  47. register_plugin("Grab + Hook + Rope","1.0","GHW_Chronic")
  48. register_concmd("+grab","grab_on",ADMIN_LEVEL_Q," - Use: bind key +grab")
  49. register_concmd("-grab","grab_off")
  50. register_concmd("grab_toggle","grab_toggle",ADMIN_LEVEL_Q,"Toggles your grab on and off")
  51. register_concmd("+hook","hook_on",ADMIN_LEVEL_Q," - Use: bind key +hook")
  52. register_concmd("-hook","hook_off")
  53. register_concmd("hook_toggle","hook_toggle",ADMIN_LEVEL_Q,"Toggles your hook on and off")
  54. register_concmd("+rope","rope_on",ADMIN_LEVEL_Q," - Use: bind key +rope")
  55. register_concmd("-rope","rope_off")
  56. register_concmd("rope_toggle","rope_toggle",ADMIN_LEVEL_Q,"Toggles your rope on and off")
  57.  
  58. //register_concmd("amx_give_grab","cmd_givetake",ADMIN_LEVEL_Q,"Give a player the ability to grab <nick>")
  59. //register_concmd("amx_give_hook","cmd_givetake",ADMIN_LEVEL_Q,"Give a player the ability to hook <nick>")
  60. //register_concmd("amx_give_rope","cmd_givetake",ADMIN_LEVEL_Q,"Give a player the ability to rope <nick>")
  61.  
  62. //register_concmd("amx_take_grab","cmd_givetake",ADMIN_LEVEL_Q,"Take a player's ability to grab <nick>")
  63. //register_concmd("amx_take_hook","cmd_givetake",ADMIN_LEVEL_Q,"Take a player's ability to hook <nick>")
  64. //register_concmd("amx_take_rope","cmd_givetake",ADMIN_LEVEL_Q,"Take a player's ability to rope <nick>")
  65.  
  66. //register_concmd("amx_ghr_menu","menu_cmd",ADMIN_LEVEL_Q,"Shows a menu that allows you to turn on/off non-admin use of grab, hook, or rope")
  67.  
  68. //register_menucmd(register_menuid("ghr_menu"),(1<<0)|(1<<1)|(1<<2)|(1<<9), "Pressedghr")
  69.  
  70. grab_speed_cvar = register_cvar("grab_speed","5")
  71. grab_enabled_cvar = register_cvar("grab_enabled","0")
  72.  
  73. hook_speed_cvar = register_cvar("hook_speed","5")
  74. hook_enabled_cvar = register_cvar("hook_enabled","0")
  75.  
  76. rope_speed_cvar = register_cvar("rope_speed","5")
  77. rope_enabled_cvar = register_cvar("rope_enabled","0")
  78.  
  79. maxplayers = get_maxplayers()
  80.  
  81. //CVAR that is only used for tracking servers that use this plugin.
  82. register_cvar("GHW_GHW","1",FCVAR_SERVER)
  83. }
  84.  
  85.  
  86. /**********************************
  87. Register beam sprite + Hook Sound
  88. **********************************/
  89.  
  90. public plugin_precache()
  91. {
  92. beamsprite = precache_model("sprites/dot.spr")
  93. precache_sound("weapons/zoom.wav")
  94. precache_sound("weapons/xbow_fire1.wav")
  95. }
  96.  
  97.  
  98. /*****************************
  99. Reset VARs on client connect
  100. *****************************/
  101.  
  102. public client_putinserver(id)
  103. {
  104. has_grab[id]=false
  105. has_hook[id]=false
  106. has_rope[id]=false
  107. }
  108.  
  109.  
  110. /*****
  111. Menu
  112. *****/
  113.  
  114. public menu_cmd(id,level,cid)
  115. {
  116. if(cmd_access(id,level,cid,1))
  117. {
  118. show_ghr(id)
  119. console_print(id,"[AMXX] Menu launched.")
  120. }
  121. }
  122.  
  123. public show_ghr(id)
  124. {
  125. static aaa[32]
  126. static bbb[32]
  127. static ccc[32]
  128. if(get_pcvar_num(grab_enabled_cvar)==0) format(aaa,31,"No")
  129. else format(aaa,31,"Yes")
  130. if(get_pcvar_num(hook_enabled_cvar)==0) format(bbb,31,"No")
  131. else format(bbb,31,"Yes")
  132. if(get_pcvar_num(rope_enabled_cvar)==0) format(ccc,31,"No")
  133. else format(ccc,31,"Yes")
  134.  
  135. new menuBody[576]
  136.  
  137. if(colored_menus())
  138. {
  139. new len = format(menuBody,575,"\bAllow Players To Use:^n^n")
  140. len += format(menuBody[len],575-len, "\w1. Grab\R\w%s^n",aaa)
  141. len += format(menuBody[len],575-len, "\w2. Hook\R\w%s^n",bbb)
  142. len += format(menuBody[len],575-len, "\w3. Rope\R\w%s^n",ccc)
  143. len += format(menuBody[len],575-len, "\r0. Exit")
  144. }
  145. else
  146. {
  147. new len = format(menuBody,575,"Allow Players To Use:^n^n")
  148. len += format(menuBody[len],575-len, "1. Grab\R%s^n",aaa)
  149. len += format(menuBody[len],575-len, "2. Hook\R%s^n",bbb)
  150. len += format(menuBody[len],575-len, "3. Rope\R%s^n",ccc)
  151. len += format(menuBody[len],575-len, "0. Exit")
  152. }
  153. show_menu(id,(1<<0)|(1<<1)|(1<<2)|(1<<9),menuBody,-1,"ghr_menu")
  154.  
  155. return PLUGIN_CONTINUE
  156. }
  157.  
  158. public Pressedghr(id,key)
  159. {
  160. switch(key)
  161. {
  162. case 0:
  163. {
  164. if(get_pcvar_num(grab_enabled_cvar)==0)
  165. {
  166. set_pcvar_num(grab_enabled_cvar,1)
  167. client_print(0,print_chat,"[AMXX] Admin has enabled Grab for all clients. Use: bind key +grab")
  168. }
  169. else
  170. {
  171. set_pcvar_num(grab_enabled_cvar,0)
  172. client_print(0,print_chat,"[AMXX] Admin has disabled Grab for all non-admins.")
  173. }
  174. show_ghr(id)
  175. }
  176. case 1:
  177. {
  178. if(get_pcvar_num(hook_enabled_cvar)==0)
  179. {
  180. set_pcvar_num(hook_enabled_cvar,1)
  181. client_print(0,print_chat,"[AMXX] Admin has enabled Hook for all clients. Use: bind key +hook")
  182. }
  183. else
  184. {
  185. set_pcvar_num(hook_enabled_cvar,0)
  186. client_print(0,print_chat,"[AMXX] Admin has disabled Hook for all non-admins.")
  187. }
  188. show_ghr(id)
  189. }
  190. case 2:
  191. {
  192. if(get_pcvar_num(rope_enabled_cvar)==0)
  193. {
  194. set_pcvar_num(rope_enabled_cvar,1)
  195. client_print(0,print_chat,"[AMXX] Admin has enabled Rope for all clients. Use: bind key +rope")
  196. }
  197. else
  198. {
  199. set_pcvar_num(rope_enabled_cvar,0)
  200. client_print(0,print_chat,"[AMXX] Admin has disabled Rope for all non-admins.")
  201. }
  202. show_ghr(id)
  203. }
  204. }
  205. }
  206.  
  207.  
  208. /****************
  209. Handle Commands
  210. ****************/
  211.  
  212. public cmd_givetake(id,level,cid)
  213. {
  214. if(!cmd_access(id,level,cid,2))
  215. {
  216. return PLUGIN_HANDLED
  217. }
  218.  
  219. new arg1[32]
  220. read_argv(1,arg1,31)
  221.  
  222. new target = cmd_target(id,arg1,9)
  223. if(!target)
  224. {
  225. return PLUGIN_HANDLED
  226. }
  227.  
  228. new name[32]
  229. get_user_name(target,name,31)
  230. if(get_user_flags(target) & ADMIN_LEVEL_Q)
  231. {
  232. console_print(id,"[AMXX] Cannot give/take grab/hook/rope from admin %s.",name)
  233. return PLUGIN_HANDLED
  234. }
  235.  
  236. new arg0[32]
  237. read_argv(0,arg0,31)
  238. if(containi(arg0,"give")!=-1)
  239. {
  240. if(containi(arg0,"grab")!=-1)
  241. {
  242. if(has_grab[target])
  243. {
  244. console_print(id,"[AMXX] %s already has grab",name)
  245. }
  246. else
  247. {
  248. has_grab[target]=true
  249. console_print(id,"[AMXX] %s has been given grab",name)
  250. client_print(target,print_chat,"[AMXX] An admin has given you grab. Use: bind key +grab")
  251. }
  252. }
  253. else if(containi(arg0,"hook")!=-1)
  254. {
  255. if(has_hook[target])
  256. {
  257. console_print(id,"[AMXX] %s already has hook",name)
  258. }
  259. else
  260. {
  261. has_hook[target]=true
  262. console_print(id,"[AMXX] %s has been given hook",name)
  263. client_print(target,print_chat,"[AMXX] An admin has given you hook. Use: bind key +hook")
  264. }
  265. }
  266. else if(containi(arg0,"rope")!=-1)
  267. {
  268. if(has_rope[target])
  269. {
  270. console_print(id,"[AMXX] %s already has rope",name)
  271. }
  272. else
  273. {
  274. has_rope[target]=true
  275. console_print(id,"[AMXX] %s has been given rope",name)
  276. client_print(target,print_chat,"[AMXX] An admin has given you hook. Use: bind key +rope")
  277. }
  278. }
  279. }
  280. if(containi(arg0,"take")!=-1)
  281. {
  282. if(containi(arg0,"grab")!=-1)
  283. {
  284. if(!has_grab[target])
  285. {
  286. console_print(id,"[AMXX] %s doesn't have grab",name)
  287. }
  288. else
  289. {
  290. has_grab[target]=false
  291. console_print(id,"[AMXX] %s's grab has been taken away.",name)
  292. client_print(target,print_chat,"[AMXX] An admin has taken your grab away.")
  293. }
  294. }
  295. if(containi(arg0,"hook")!=-1)
  296. {
  297. if(!has_hook[target])
  298. {
  299. console_print(id,"[AMXX] %s doesn't have hook",name)
  300. }
  301. else
  302. {
  303. has_hook[target]=false
  304. console_print(id,"[AMXX] %s's hook has been taken away.",name)
  305. client_print(target,print_chat,"[AMXX] An admin has taken your hook away.")
  306. }
  307. }
  308. if(containi(arg0,"rope")!=-1)
  309. {
  310. if(!has_rope[target])
  311. {
  312. console_print(id,"[AMXX] %s doesn't have rope",name)
  313. }
  314. else
  315. {
  316. has_rope[target]=false
  317. console_print(id,"[AMXX] %s's rope has been taken away.",name)
  318. client_print(target,print_chat,"[AMXX] An admin has taken your rope away.")
  319. }
  320. }
  321. }
  322. return PLUGIN_HANDLED
  323. }
  324.  
  325.  
  326. /*****
  327. Grab
  328. *****/
  329.  
  330. public grab_toggle(id,level,cid)
  331. {
  332. if(grab[id]) grab_off(id)
  333. else grab_on(id,level,cid)
  334. return PLUGIN_HANDLED
  335. }
  336.  
  337. public grab_on(id,level,cid)
  338. {
  339. if(is_user_alive(id))
  340. {
  341. if(!has_grab[id] && !get_pcvar_num(grab_enabled_cvar))
  342. {
  343. return PLUGIN_HANDLED
  344. }
  345. if(grab[id])
  346. {
  347. return PLUGIN_HANDLED
  348. }
  349. if(!cmd_access(id, level, cid, 1)) {
  350. client_print(id, print_chat, "NU ESTI VIP")
  351. return PLUGIN_HANDLED
  352. }
  353. grab[id]=-1
  354. static target, trash
  355. target=0
  356. get_user_aiming(id,target,trash)
  357. if(target && is_valid_ent2(target) && target!=id)
  358. {
  359. if(target<=maxplayers)
  360. {
  361. if(is_user_alive(target) && !(get_user_flags(target) & ADMIN_IMMUNITY))
  362. {
  363. client_print(id,print_chat,"[AMXX] Found Target")
  364. grabem(id,target)
  365. }
  366. }
  367. else if(get_solidity(target)!=4)
  368. {
  369. client_print(id,print_chat,"[AMXX] Found Target")
  370. grabem(id,target)
  371. }
  372. }
  373. else
  374. {
  375. client_print(id,print_chat,"[AMXX] Searching for Target")
  376. set_task(0.1,"grab_on2",id)
  377. }
  378. }
  379. else
  380. client_print(id, print_chat, "Poti folosi comanda doar cand esti viu.")
  381. return PLUGIN_HANDLED
  382. }
  383.  
  384. public grab_on2(id)
  385. {
  386. if(is_user_connected(id))
  387. {
  388. static target, trash
  389. target=0
  390. get_user_aiming(id,target,trash)
  391. if(target && is_valid_ent2(target) && target!=id)
  392. {
  393. if(target<=maxplayers)
  394. {
  395. if(is_user_alive(target) && !(get_user_flags(target) & ADMIN_IMMUNITY))
  396. {
  397. client_print(id,print_chat,"[AMXX] Found Target")
  398. grabem(id,target)
  399. }
  400. }
  401. else if(get_solidity(target)!=4)
  402. {
  403. client_print(id,print_chat,"[AMXX] Found Target")
  404. grabem(id,target)
  405. }
  406. }
  407. else
  408. {
  409. set_task(0.1,"grab_on2",id)
  410. }
  411. }
  412. }
  413.  
  414. public grabem(id,target)
  415. {
  416. grab[id]=target
  417. set_rendering2(target,kRenderFxGlowShell,255,0,0,kRenderTransAlpha,70)
  418. if(target<=maxplayers) set_user_gravity(target,0.0)
  419. grab_totaldis[id] = 0.0
  420. set_task(0.1,"grab_prethink",id+1000,"",0,"b")
  421. grab_prethink(id+1000)
  422. emit_sound(id,CHAN_VOICE,"weapons/zoom.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  423. }
  424.  
  425. public grab_off(id)
  426. {
  427. if(is_user_connected(id))
  428. {
  429. if(grab[id]==-1)
  430. {
  431. client_print(id,print_chat,"[AMXX] No Target Found")
  432. grab[id]=0
  433. }
  434. else if(grab[id])
  435. {
  436. client_print(id,print_chat,"[AMXX] Target Released")
  437. set_rendering2(grab[id])
  438. if(grab[id]<=maxplayers && is_user_alive(grab[id])) set_user_gravity(grab[id],1.0)
  439. grab[id]=0
  440. }
  441. }
  442. return PLUGIN_HANDLED
  443. }
  444.  
  445. public grab_prethink(id)
  446. {
  447. id -= 1000
  448. if(!is_user_connected(id) && grab[id]>0)
  449. {
  450. set_rendering2(grab[id])
  451. if(grab[id]<=maxplayers && is_user_alive(grab[id])) set_user_gravity(grab[id],1.0)
  452. grab[id]=0
  453. }
  454. if(!grab[id] || grab[id]==-1)
  455. {
  456. remove_task(id+1000)
  457. return PLUGIN_HANDLED
  458. }
  459.  
  460. //Get Id's, target's, and Where Id is looking's origins
  461. static origin1[3]
  462. get_user_origin(id,origin1)
  463. static Float:origin2_F[3], origin2[3]
  464. get_origin(grab[id],origin2_F)
  465. origin2[0] = floatround(origin2_F[0])
  466. origin2[1] = floatround(origin2_F[1])
  467. origin2[2] = floatround(origin2_F[2])
  468. static origin3[3]
  469. get_user_origin(id,origin3,3)
  470.  
  471. //Create red beam
  472. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  473. write_byte(1) //TE_BEAMENTPOINT
  474. write_short(id) // start entity
  475. write_coord(origin2[0])
  476. write_coord(origin2[1])
  477. write_coord(origin2[2])
  478. write_short(beamsprite)
  479. write_byte(1) // framestart
  480. write_byte(1) // framerate
  481. write_byte(1) // life in 0.1's
  482. write_byte(5) // width
  483. write_byte(0) // noise
  484. write_byte(255) // red
  485. write_byte(0) // green
  486. write_byte(0) // blue
  487. write_byte(255) // brightness
  488. write_byte(0) // speed
  489. message_end()
  490.  
  491. //Convert to floats for calculation
  492. static Float:origin1_F[3]
  493. static Float:origin3_F[3]
  494. origin1_F[0] = float(origin1[0])
  495. origin1_F[1] = float(origin1[1])
  496. origin1_F[2] = float(origin1[2])
  497. origin3_F[0] = float(origin3[0])
  498. origin3_F[1] = float(origin3[1])
  499. origin3_F[2] = float(origin3[2])
  500.  
  501. //Calculate target's new velocity
  502. static Float:distance[3]
  503.  
  504. if(!grab_totaldis[id])
  505. {
  506. distance[0] = floatabs(origin1_F[0] - origin2_F[0])
  507. distance[1] = floatabs(origin1_F[1] - origin2_F[1])
  508. distance[2] = floatabs(origin1_F[2] - origin2_F[2])
  509. grab_totaldis[id] = floatsqroot(distance[0]*distance[0] + distance[1]*distance[1] + distance[2]*distance[2])
  510. }
  511. distance[0] = origin3_F[0] - origin1_F[0]
  512. distance[1] = origin3_F[1] - origin1_F[1]
  513. distance[2] = origin3_F[2] - origin1_F[2]
  514.  
  515. static Float:grab_totaldis2
  516. grab_totaldis2 = floatsqroot(distance[0]*distance[0] + distance[1]*distance[1] + distance[2]*distance[2])
  517.  
  518. static Float:que
  519. que = grab_totaldis[id] / grab_totaldis2
  520.  
  521. static Float:origin4[3]
  522. origin4[0] = ( distance[0] * que ) + origin1_F[0]
  523. origin4[1] = ( distance[1] * que ) + origin1_F[1]
  524. origin4[2] = ( distance[2] * que ) + origin1_F[2]
  525.  
  526. static Float:velocity[3]
  527. velocity[0] = (origin4[0] - origin2_F[0]) * (get_pcvar_float(grab_speed_cvar) / 1.666667)
  528. velocity[1] = (origin4[1] - origin2_F[1]) * (get_pcvar_float(grab_speed_cvar) / 1.666667)
  529. velocity[2] = (origin4[2] - origin2_F[2]) * (get_pcvar_float(grab_speed_cvar) / 1.666667)
  530.  
  531. set_velo(grab[id],velocity)
  532.  
  533. return PLUGIN_CONTINUE
  534. }
  535.  
  536.  
  537. /*****
  538. Hook
  539. *****/
  540.  
  541. public hook_toggle(id,level,cid)
  542. {
  543. if(hook[id]) hook_off(id)
  544. else hook_on(id,level,cid)
  545. return PLUGIN_HANDLED
  546. }
  547.  
  548. public hook_on(id,level,cid)
  549. {
  550. if(is_user_alive(id))
  551. {
  552. if(cmd_access(id,level,cid,1))
  553. {
  554. if(!has_hook[id] && !get_pcvar_num(hook_enabled_cvar))
  555. {
  556. return PLUGIN_HANDLED
  557. }
  558. if(hook[id])
  559. {
  560. return PLUGIN_HANDLED
  561. }
  562. set_user_gravity(id,0.0)
  563. set_task(0.1,"hook_prethink",id+10000,"",0,"b")
  564. hook[id]=true
  565. hook_to[id][0]=999999
  566. hook_prethink(id+10000)
  567. emit_sound(id,CHAN_VOICE,"weapons/xbow_hit2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  568. }
  569. else
  570. client_print(id, print_chat, "NU ESTI VIP")
  571. }
  572. else
  573. client_print(id, print_chat, "Poti folosi comanda doar cand esti viu.")
  574. return PLUGIN_HANDLED
  575. }
  576.  
  577. public hook_off(id)
  578. {
  579. if(is_user_alive(id)) set_user_gravity(id)
  580. hook[id]=false
  581. return PLUGIN_HANDLED
  582. }
  583.  
  584. public hook_prethink(id)
  585. {
  586. id -= 10000
  587. if(!is_user_alive(id))
  588. {
  589. hook[id]=false
  590. }
  591. if(!hook[id])
  592. {
  593. remove_task(id+10000)
  594. return PLUGIN_HANDLED
  595. }
  596.  
  597. //Get Id's origin
  598. static origin1[3]
  599. get_user_origin(id,origin1)
  600.  
  601. if(hook_to[id][0]==999999)
  602. {
  603. static origin2[3]
  604. get_user_origin(id,origin2,3)
  605. hook_to[id][0]=origin2[0]
  606. hook_to[id][1]=origin2[1]
  607. hook_to[id][2]=origin2[2]
  608. }
  609.  
  610. //Create blue beam
  611. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  612. write_byte(1) //TE_BEAMENTPOINT
  613. write_short(id) // start entity
  614. write_coord(hook_to[id][0])
  615. write_coord(hook_to[id][1])
  616. write_coord(hook_to[id][2])
  617. write_short(beamsprite)
  618. write_byte(1) // framestart
  619. write_byte(1) // framerate
  620. write_byte(2) // life in 0.1's
  621. write_byte(5) // width
  622. write_byte(0) // noise
  623. write_byte(255) // red
  624. write_byte(255) // green
  625. write_byte(0) // blue
  626. write_byte(255) // brightness
  627. write_byte(0) // speed
  628. message_end()
  629.  
  630. //Calculate Velocity
  631. static Float:velocity[3]
  632. velocity[0] = (float(hook_to[id][0]) - float(origin1[0])) * 3.0
  633. velocity[1] = (float(hook_to[id][1]) - float(origin1[1])) * 3.0
  634. velocity[2] = (float(hook_to[id][2]) - float(origin1[2])) * 3.0
  635.  
  636. static Float:y
  637. y = velocity[0]*velocity[0] + velocity[1]*velocity[1] + velocity[2]*velocity[2]
  638.  
  639. static Float:x
  640. x = (get_pcvar_float(hook_speed_cvar) * 120.0) / floatsqroot(y)
  641.  
  642. velocity[0] *= x
  643. velocity[1] *= x
  644. velocity[2] *= x
  645.  
  646. set_velo(id,velocity)
  647.  
  648. return PLUGIN_CONTINUE
  649. }
  650.  
  651.  
  652. /*****
  653. Rope
  654. *****/
  655.  
  656. public rope_toggle(id,level,cid)
  657. {
  658. if(rope[id])
  659. rope_off(id)
  660. else
  661. rope_on(id,level,cid)
  662. }
  663.  
  664. public rope_on(id,level,cid)
  665. {
  666. if(is_user_alive(id))
  667. {
  668. if(!has_rope[id] && !get_pcvar_num(rope_enabled_cvar) && !cmd_access(id,level,cid,1))
  669. {
  670. return PLUGIN_HANDLED
  671. }
  672. if(rope[id])
  673. {
  674. return PLUGIN_HANDLED
  675. }
  676. set_task(0.1,"rope_prethink",id+100000,"",0,"b")
  677. rope[id]=true
  678. rope_to[id][0]=999999
  679. rope_prethink(id+100000)
  680. emit_sound(id,CHAN_VOICE,"weapons/zoom.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  681. }
  682. else
  683. client_print(id, print_chat, "POTI FOLOSI COMANDA DOAR CAND ESTI VIU!")
  684. return PLUGIN_HANDLED
  685. }
  686.  
  687. public rope_off(id)
  688. {
  689. rope[id]=false
  690. return PLUGIN_HANDLED
  691. }
  692.  
  693. public rope_prethink(id)
  694. {
  695. id -= 100000
  696. if(!is_user_alive(id))
  697. {
  698. rope[id]=false
  699. }
  700. if(!rope[id])
  701. {
  702. remove_task(id+100000)
  703. return PLUGIN_HANDLED
  704. }
  705.  
  706. //Get Id's origin
  707. static origin1[3]
  708. get_user_origin(id,origin1)
  709.  
  710. static Float:origin1_F[3]
  711. origin1_F[0] = float(origin1[0])
  712. origin1_F[1] = float(origin1[1])
  713. origin1_F[2] = float(origin1[2])
  714.  
  715. //Check to see if this is the first time prethink is being run
  716. if(rope_to[id][0]==999999)
  717. {
  718. static origin2[3]
  719. get_user_origin(id,origin2,3)
  720. rope_to[id][0]=origin2[0]
  721. rope_to[id][1]=origin2[1]
  722. rope_to[id][2]=origin2[2]
  723.  
  724. static Float:origin2_F[3]
  725. origin2_F[0] = float(origin2[0])
  726. origin2_F[1] = float(origin2[1])
  727. origin2_F[2] = float(origin2[2])
  728.  
  729. static Float:distance[3]
  730. distance[0] = floatabs(origin1_F[0] - origin2_F[0])
  731. distance[1] = floatabs(origin1_F[1] - origin2_F[1])
  732. distance[2] = floatabs(origin1_F[2] - origin2_F[2])
  733. rope_totaldis[id] = floatsqroot(distance[0]*distance[0] + distance[1]*distance[1] + distance[2]*distance[2])
  734. }
  735.  
  736. //Create green beam
  737. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  738. write_byte(1) //TE_BEAMENTPOINT
  739. write_short(id) // start entity
  740. write_coord(rope_to[id][0])
  741. write_coord(rope_to[id][1])
  742. write_coord(rope_to[id][2])
  743. write_short(beamsprite)
  744. write_byte(170) // framestart
  745. write_byte(100) // framerate
  746. write_byte(1) // life in 0.1's
  747. write_byte(5) // width
  748. write_byte(30) // noise
  749. write_byte(random(255)) // red
  750. write_byte(random(255)) // green
  751. write_byte(random(255)) // blue
  752. write_byte(255) // brightness
  753. write_byte(0) // speed
  754. message_end()
  755.  
  756. //Calculate Velocity
  757. static Float:velocity[3]
  758. get_velo(id,velocity)
  759.  
  760. static Float:velocity2[3]
  761. velocity2[0] = (rope_to[id][0] - origin1_F[0]) * 3.0
  762. velocity2[1] = (rope_to[id][1] - origin1_F[1]) * 3.0
  763.  
  764. static Float:y
  765. y = velocity2[0]*velocity2[0] + velocity2[1]*velocity2[1]
  766.  
  767. static Float:x
  768. x = (get_pcvar_float(rope_speed_cvar) * 20.0) / floatsqroot(y)
  769.  
  770. velocity[0] += velocity2[0]*x
  771. velocity[1] += velocity2[1]*x
  772.  
  773. if(rope_to[id][2] - origin1_F[2] >= rope_totaldis[id] && velocity[2]<0.0) velocity[2] *= -1
  774.  
  775. set_velo(id,velocity)
  776.  
  777. return PLUGIN_CONTINUE
  778. }
  779.  
  780. public get_origin(ent,Float:origin[3])
  781. {
  782. #if defined engine
  783. return entity_get_vector(id,EV_VEC_origin,origin)
  784. #else
  785. return pev(ent,pev_origin,origin)
  786. #endif
  787. }
  788.  
  789. public set_velo(id,Float:velocity[3])
  790. {
  791. #if defined engine
  792. return set_user_velocity(id,velocity)
  793. #else
  794. return set_pev(id,pev_velocity,velocity)
  795. #endif
  796. }
  797.  
  798. public get_velo(id,Float:velocity[3])
  799. {
  800. #if defined engine
  801. return get_user_velocity(id,velocity)
  802. #else
  803. return pev(id,pev_velocity,velocity)
  804. #endif
  805. }
  806.  
  807. public is_valid_ent2(ent)
  808. {
  809. #if defined engine
  810. return is_valid_ent(ent)
  811. #else
  812. return pev_valid(ent)
  813. #endif
  814. }
  815.  
  816. public get_solidity(ent)
  817. {
  818. #if defined engine
  819. return entity_get_int(ent,EV_INT_solid)
  820. #else
  821. return pev(ent,pev_solid)
  822. #endif
  823. }
  824.  
  825. stock set_rendering2(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16)
  826. {
  827. #if defined engine
  828. return set_rendering(index,fx,r,g,b,render,amount)
  829. #else
  830. set_pev(index, pev_renderfx, fx);
  831. new Float:RenderColor[3];
  832. RenderColor[0] = float(r);
  833. RenderColor[1] = float(g);
  834. RenderColor[2] = float(b);
  835. set_pev(index, pev_rendercolor, RenderColor);
  836. set_pev(index, pev_rendermode, render);
  837. set_pev(index, pev_renderamt, float(amount));
  838. return 1;
  839. #endif
  840. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement