HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #if !defined NO_CS_CZ
  3. #include <fun>
  4. #endif
  5. #include <engine>
  6.  
  7. #define AUTHOR "KRoTaL"
  8.  
  9.  
  10. new piss_model
  11. new piss_sprite
  12. new water_splash
  13. new count_piss[33]
  14. new count_puddle[33]
  15. new bool:PissFlag[33]
  16. new bool:aim[33]
  17. new Float:aim_origin[33][3]
  18. #if !defined NO_CS_CZ
  19. new player_origins[33][3]
  20. new mod_name[32]
  21. #endif
  22.  
  23. public piss_on_player(id)
  24. {
  25.  
  26. if (get_cvar_num("amx_maxpees")==0)
  27. return PLUGIN_HANDLED
  28. if (!is_user_alive(id))
  29. return PLUGIN_HANDLED
  30. if ( (get_cvar_num("amx_piss_admin")==1) && !(get_user_flags(id) & ADMIN_LEVEL_A) )
  31. {
  32. console_print(id, "[AMXX] Szamodra nem elerheto ez a parancs!")
  33. return PLUGIN_HANDLED
  34. }
  35. if(PissFlag[id])
  36. return PLUGIN_HANDLED
  37.  
  38. #if !defined NO_CS_CZ
  39. new player_origin[3], players[32], inum=0, dist, last_dist=99999, last_id
  40.  
  41. get_user_origin(id,player_origin,0)
  42. get_players(players,inum,"b")
  43. if (inum>0) {
  44. for (new i=0;i<inum;i++) {
  45. if (players[i]!=id) {
  46. dist = get_distance(player_origin,player_origins[players[i]])
  47. if (dist<last_dist) {
  48. last_id = players[i]
  49. last_dist = dist
  50. }
  51. }
  52. }
  53. if (last_dist<80) {
  54. #endif
  55. if (count_piss[id] > get_cvar_num("amx_maxpees")) {
  56. client_print(id,print_chat,"Egy korben csak %d pisilhetsz!", get_cvar_num("amx_maxpees"), (get_cvar_num("amx_maxpees")>1) ? "s" : "")
  57. return PLUGIN_CONTINUE
  58. }
  59. new player_name[32]
  60. get_user_name(id, player_name, 31)
  61. #if !defined NO_CS_CZ
  62. new dead_name[32]
  63. get_user_name(last_id, dead_name, 31)
  64. client_print(0,print_chat,"%s lepisilte %s halott testet!! HaHaHaHa!!", player_name, dead_name)
  65. #else
  66. client_print(0,print_chat,"%s pisil!!", player_name)
  67. #endif
  68. count_piss[id]+=1
  69. count_puddle[id]=1
  70. new ids[1]
  71. ids[0]=id
  72. PissFlag[id]=true
  73. aim[id]=false
  74. #if !defined NO_CS_CZ
  75. if( (equali(mod_name,"cstrike")) || (equali(mod_name,"czero")) )
  76. {
  77. client_cmd(id, "weapon_knife")
  78. set_user_maxspeed(id, -1.0)
  79. }
  80. #endif
  81. emit_sound(id,CHAN_VOICE,"piss/pissing.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  82. switch(get_cvar_num("amx_piss_effect"))
  83. {
  84. case 0: set_task(0.2,"make_pee",1481+id,ids,1,"a",48)
  85. case 1: set_task(0.1,"make_pee",1481+id,ids,1,"a",102)
  86. default: set_task(0.2,"make_pee",1481+id,ids,1,"a",48)
  87. }
  88. set_task(2.2,"place_puddle",3424+id,ids,1,"a",4)
  89. #if !defined NO_CS_CZ
  90. set_task(12.0,"weapons_back",6794+id,ids,1)
  91. }
  92. else
  93. {
  94. client_print(id,print_chat,"Nincs holttest korulotted.")
  95. return PLUGIN_HANDLED
  96. }
  97. }
  98. #endif
  99. return PLUGIN_HANDLED
  100. }
  101.  
  102. public sqrt(num)
  103. {
  104. new div = num
  105. new result = 1
  106. while (div > result) {
  107. div = (div + result) / 2
  108. result = num / div
  109. }
  110. return div
  111. }
  112.  
  113. public make_pee(ids[])
  114. {
  115. new id=ids[0]
  116. new vec[3]
  117. new aimvec[3]
  118. new velocityvec[3]
  119. new length
  120. get_user_origin(id,vec)
  121. get_user_origin(id,aimvec,3)
  122. new distance = get_distance(vec,aimvec)
  123. new speed = floatround(distance*1.9)
  124.  
  125. velocityvec[0]=aimvec[0]-vec[0]
  126. velocityvec[1]=aimvec[1]-vec[1]
  127. velocityvec[2]=aimvec[2]-vec[2]
  128.  
  129. length=sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocityvec[2]*velocityvec[2])
  130.  
  131. velocityvec[0]=velocityvec[0]*speed/length
  132. velocityvec[1]=velocityvec[1]*speed/length
  133. velocityvec[2]=velocityvec[2]*speed/length
  134.  
  135. switch(get_cvar_num("amx_piss_effect"))
  136. {
  137. case 0:
  138. {
  139. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  140. write_byte(101)
  141. write_coord(vec[0])
  142. write_coord(vec[1])
  143. write_coord(vec[2])
  144. write_coord(velocityvec[0])
  145. write_coord(velocityvec[1])
  146. write_coord(velocityvec[2])
  147. write_byte(102)
  148. write_byte(160)
  149. message_end()
  150. }
  151. case 1:
  152. {
  153. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  154. write_byte(106)
  155. write_coord(vec[0])
  156. write_coord(vec[1])
  157. write_coord(vec[2])
  158. write_coord(velocityvec[0])
  159. write_coord(velocityvec[1])
  160. write_coord(velocityvec[2]+100)
  161. write_angle (0)
  162. write_short (piss_model)
  163. write_byte (0)
  164. write_byte (255)
  165. message_end()
  166.  
  167. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  168. write_byte (1)
  169. write_short (id)
  170. write_coord(aimvec[0])
  171. write_coord(aimvec[1])
  172. write_coord(aimvec[2])
  173. write_short(piss_sprite)
  174. write_byte( 1 )
  175. write_byte( 6 )
  176. write_byte( 1 )
  177. write_byte( 8 )
  178. write_byte( 0 )
  179. write_byte( 255 )
  180. write_byte( 255 )
  181. write_byte( 0 )
  182. write_byte( 200 )
  183. write_byte( 10 )
  184. message_end()
  185.  
  186. message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
  187. write_byte(17)
  188. write_coord(aimvec[0])
  189. write_coord(aimvec[1])
  190. write_coord(aimvec[2])
  191. write_short(water_splash)
  192. write_byte(16)
  193. write_byte(18)
  194. message_end()
  195.  
  196. }
  197. default:
  198. {
  199. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  200. write_byte(101)
  201. write_coord(vec[0])
  202. write_coord(vec[1])
  203. write_coord(vec[2])
  204. write_coord(velocityvec[0])
  205. write_coord(velocityvec[1])
  206. write_coord(velocityvec[2])
  207. write_byte(102)
  208. write_byte(160)
  209. message_end()
  210. }
  211. }
  212. }
  213.  
  214. public place_puddle(ids[])
  215. {
  216. new id=ids[0]
  217. if(!aim[id])
  218. {
  219. new origin[3]
  220. get_user_origin(id,origin,3)
  221. aim_origin[id][0]=float(origin[0])
  222. aim_origin[id][1]=float(origin[1])
  223. aim_origin[id][2]=float(origin[2])
  224. }
  225.  
  226. new puddle_entity
  227. puddle_entity = create_entity("info_target")
  228.  
  229. if(puddle_entity == 0) {
  230. return PLUGIN_HANDLED_MAIN
  231. }
  232.  
  233. new Float:MinBox[3]
  234. new Float:MaxBox[3]
  235.  
  236. MinBox[0] = -1.0
  237. MinBox[1] = -1.0
  238. MinBox[2] = -1.0
  239. MaxBox[0] = 1.0
  240. MaxBox[1] = 1.0
  241. MaxBox[2] = 1.0
  242.  
  243. entity_set_vector(puddle_entity, EV_VEC_mins, MinBox)
  244. entity_set_vector(puddle_entity, EV_VEC_maxs, MaxBox)
  245.  
  246. switch(count_puddle[id])
  247. {
  248. case 1:
  249. {
  250. entity_set_string(puddle_entity, EV_SZ_classname, "piss_puddle1")
  251. entity_set_model(puddle_entity, "models/piss/piss_puddle1.mdl")
  252. }
  253. case 2:
  254. {
  255. entity_set_string(puddle_entity, EV_SZ_classname, "piss_puddle2")
  256. entity_set_model(puddle_entity, "models/piss/piss_puddle2.mdl")
  257. }
  258. case 3:
  259. {
  260. entity_set_string(puddle_entity, EV_SZ_classname, "piss_puddle3")
  261. entity_set_model(puddle_entity, "models/piss/piss_puddle3.mdl")
  262. }
  263. case 4:
  264. {
  265. entity_set_string(puddle_entity, EV_SZ_classname, "piss_puddle4")
  266. entity_set_model(puddle_entity, "models/piss/piss_puddle4.mdl")
  267. }
  268. case 5:
  269. {
  270. entity_set_string(puddle_entity, EV_SZ_classname, "piss_puddle5")
  271. entity_set_model(puddle_entity, "models/piss/piss_puddle5.mdl")
  272. #if defined NO_CS_CZ
  273. PissFlag[id]=false
  274. #endif
  275. }
  276. default: {}
  277. }
  278.  
  279. entity_set_origin(puddle_entity, aim_origin[id])
  280. entity_set_int(puddle_entity, EV_INT_solid, 3)
  281. entity_set_int(puddle_entity, EV_INT_movetype, 6)
  282. entity_set_edict(puddle_entity, EV_ENT_owner, id)
  283.  
  284. count_puddle[id]+=1
  285. aim[id]=true
  286.  
  287. return PLUGIN_CONTINUE
  288. }
  289.  
  290. public death_event()
  291. {
  292. new victim = read_data(2)
  293. #if !defined NO_CS_CZ
  294. get_user_origin(victim,player_origins[victim],0)
  295. #endif
  296.  
  297. if(PissFlag[victim])
  298. reset_piss(victim)
  299.  
  300. return PLUGIN_CONTINUE
  301. }
  302.  
  303. #if !defined NO_CS_CZ
  304. public weapons_back(ids[])
  305. {
  306. PissFlag[ids[0]]=false
  307. if( (equali(mod_name,"cstrike")) || (equali(mod_name,"czero")) )
  308. {
  309. set_user_maxspeed(ids[0], 250.0)
  310. }
  311. }
  312.  
  313. public cur_weapon(id)
  314. {
  315. if(PissFlag[id])
  316. {
  317. if( (equali(mod_name,"cstrike")) || (equali(mod_name,"czero")) )
  318. {
  319. client_cmd(id, "weapon_knife")
  320. set_user_maxspeed(id, -1.0)
  321. }
  322. }
  323.  
  324. return PLUGIN_CONTINUE
  325. }
  326. #endif
  327.  
  328. public reset_piss(id)
  329. {
  330. if(task_exists(1481+id))
  331. remove_task(1481+id)
  332. if(task_exists(3424+id))
  333. remove_task(3424+id)
  334. #if !defined NO_CS_CZ
  335. if(task_exists(6794+id))
  336. remove_task(6794+id)
  337. #endif
  338. emit_sound(id,CHAN_VOICE,"piss/pissing.wav", 0.0, ATTN_NORM, 0, PITCH_NORM)
  339. PissFlag[id]=false
  340.  
  341. return PLUGIN_CONTINUE
  342. }
  343.  
  344. public reset_hud(id)
  345. {
  346. if(task_exists(1481+id))
  347. remove_task(1481+id)
  348. if(task_exists(3424+id))
  349. remove_task(3424+id)
  350. #if !defined NO_CS_CZ
  351. if(task_exists(6794+id))
  352. remove_task(6794+id)
  353. #endif
  354. emit_sound(id,CHAN_VOICE,"piss/pissing.wav", 0.0, ATTN_NORM, 0, PITCH_NORM)
  355. PissFlag[id]=false
  356.  
  357. new iCurrent
  358.  
  359. for (new i=1 ; i<count_piss[id] ; i++)
  360. {
  361. iCurrent = find_ent_by_class(-1, "piss_puddle1")
  362. if(iCurrent != -1)
  363. remove_entity(iCurrent)
  364. iCurrent = find_ent_by_class(-1, "piss_puddle2")
  365. if(iCurrent != -1)
  366. remove_entity(iCurrent)
  367. iCurrent = find_ent_by_class(-1, "piss_puddle3")
  368. if(iCurrent != -1)
  369. remove_entity(iCurrent)
  370. iCurrent = find_ent_by_class(-1, "piss_puddle4")
  371. if(iCurrent != -1)
  372. remove_entity(iCurrent)
  373. iCurrent = find_ent_by_class(-1, "piss_puddle5")
  374. if(iCurrent != -1)
  375. remove_entity(iCurrent)
  376. }
  377. count_piss[id]=1
  378.  
  379. return PLUGIN_CONTINUE
  380. }
  381.  
  382. public piss_help(id)
  383. {
  384. client_print(id, print_chat, "Ha le akarsz pisilni valakit hasznald a betut amire bindelted!")
  385. client_print(id, print_chat, "Ha pisilni akkarsz akkor konzolba bind ^"x^" ^"piss^"")
  386. client_print(id, print_chat, "Ha ez kesz akkor az x-el tudsz pisilni.")
  387.  
  388. return PLUGIN_CONTINUE
  389. }
  390.  
  391. public handle_say(id)
  392. {
  393. new said[192]
  394. read_args(said,192)
  395. remove_quotes(said)
  396.  
  397. if( (containi(said, "piss") != -1) && !(containi(said, "/piss") != -1) ) {
  398. client_print(id, print_chat, "[AMXX] Ird be /piss tovabbi informaciokert.")
  399. }
  400.  
  401. return PLUGIN_CONTINUE
  402. }
  403.  
  404. public plugin_precache()
  405. {
  406. if (file_exists("sound/piss/pissing.wav"))
  407. precache_sound( "piss/pissing.wav")
  408. if (file_exists("models/piss/piss_puddle1.mdl"))
  409. precache_model("models/piss/piss_puddle1.mdl")
  410. if (file_exists("models/piss/piss_puddle2.mdl"))
  411. precache_model("models/piss/piss_puddle2.mdl")
  412. if (file_exists("models/piss/piss_puddle3.mdl"))
  413. precache_model("models/piss/piss_puddle3.mdl")
  414. if (file_exists("models/piss/piss_puddle4.mdl"))
  415. precache_model("models/piss/piss_puddle4.mdl")
  416. if (file_exists("models/piss/piss_puddle5.mdl"))
  417. precache_model("models/piss/piss_puddle5.mdl")
  418. if (file_exists("models/piss/piss.mdl"))
  419. piss_model = precache_model("models/piss/piss.mdl")
  420. piss_sprite = precache_model("sprites/plasma.spr")
  421. water_splash = precache_model("sprites/wsplash3.spr")
  422.  
  423. return PLUGIN_CONTINUE
  424. }
  425.  
  426. public client_connect(id)
  427. {
  428. PissFlag[id]=false
  429. count_piss[id]=1
  430.  
  431. return PLUGIN_CONTINUE
  432. }
  433.  
  434. public client_disconnect(id)
  435. {
  436. reset_hud(id)
  437.  
  438. return PLUGIN_CONTINUE
  439. }
  440.  
  441. public plugin_init()
  442. {
  443. register_plugin("AMXX Piss","2.0","KRoTaL")
  444. register_clcmd("piss","piss_on_player",0,"- Pisilj a halott testere")
  445. register_clcmd("say /piss","piss_help",0,"- Hogyan pisilj | segitseg")
  446. register_clcmd("say","handle_say")
  447. register_cvar("amx_maxpees","6")
  448. register_cvar("amx_piss_admin","0")
  449. register_cvar("amx_piss_effect","0")
  450. register_event("DeathMsg","death_event","a")
  451. register_event("ResetHUD", "reset_hud", "be")
  452. #if !defined NO_CS_CZ
  453. register_event("CurWeapon","cur_weapon","be","1=1")
  454. get_modname(mod_name,31)
  455. #endif
  456.  
  457. return PLUGIN_CONTINUE
  458. }
  459. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  460. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
  461. */
  462.