Advertisement
Filiq_

xmas

Nov 23rd, 2018
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.25 KB | None | 0 0
  1. /*
  2. ======================================
  3. ========== XMAS GIFTS 2.2 ============
  4. ======================================
  5.  
  6. Autor: KronoS
  7. Versiune: 2.2
  8. Site: http://www.eXtreamCS.com
  9.  
  10. Credite:
  11. FakeNick - pentru pluginul Pick up present de unde a pornit tot
  12. AlinHD - pentru pluginul de cadouri facut de el dar care nu l-a publicat
  13. joropito - pentru Super Spawns
  14. si alte persoane pentru informatii despre entitati
  15.  
  16. C-var-uri:
  17. presents_respawn_time 60.0 (Dupa cat timp dupa ridicarea unui cadou apare altul pe harta)
  18. presents_on_map 11 (Cate cadouri sa apara pe harta)
  19. ATENTIE: Se calculeaza numarul c-var-ului - 1!!!
  20. Daca puneti 11 or sa apara doar 10 cadouri!
  21.  
  22. Changelog:
  23. _______________________________
  24. V 2.0
  25. -super spawns
  26. -cvar: presents_on_map
  27. _______________________________
  28. V 2.1
  29. -bug reparat: cadourile apareau in aer
  30. -variabila globala
  31. -FUN -> Fakemeta
  32. -Hamsandwich
  33. -optimizare mesaje HUD
  34. _______________________________
  35. V 2.2
  36. -bug reparat: cadourile dispareau de pe harta
  37. -FM_Think indepartat
  38. _______________________________
  39. */
  40.  
  41. #include <amxmodx>
  42. #include <amxmisc>
  43.  
  44. /* Module necesare */
  45. #include <fakemeta>
  46. #include <hamsandwich>
  47. #include <engine>
  48.  
  49. /* INC-uri */
  50. #include <cellarray>
  51. #include <xs>
  52.  
  53. /* Model la cadouri */
  54. new const model_present[][] = { "models/present/w_present.mdl","models/present/w_present2.mdl" }
  55.  
  56. /* Extras din Fakemeta Util */
  57. #define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)
  58. #define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
  59.  
  60. /* Extras din Super Spawns */
  61. #define SS_VERSION "1.0"
  62. #define SS_MIN_DISTANCE 500.0
  63. #define SS_MAX_LOOPS 100000
  64.  
  65. new Array:g_vecSsOrigins
  66. new Array:g_vecSsSpawns
  67. new Array:g_vecSsUsed
  68. new Float:g_flSsMinDist
  69. new g_iSsTime
  70.  
  71. new const g_szStarts[][] = { "info_player_start", "info_player_deathmatch" }
  72. new const Float:g_flOffsets[] = { 3500.0, 3500.0, 1500.0 }
  73.  
  74. /* Offset-uri */
  75. #if cellbits == 32
  76. const OFFSET_CSMONEY = 115
  77. #else
  78. const OFFSET_CSMONEY = 140
  79. #endif
  80. const OFFSET_LINUX = 5
  81.  
  82. new pcvar_respawn_time, pcvar_presents_on_map
  83. new g_money
  84. new g_bonus[33]
  85.  
  86. public plugin_init()
  87. {
  88. register_plugin("XMAS GIFTS", "2.2", "KronoS")
  89.  
  90. /*====================================
  91. ==============Eventuri==============*/
  92.  
  93. register_event("HLTV", "spawn_gifts", "a", "1=0", "2=0")
  94. RegisterHam(Ham_Spawn, "player", "round_start", 1)
  95. RegisterHam(Ham_Killed, "player", "client_death", 1)
  96. RegisterHam(Ham_Item_PreFrame, "player", "FwdPreFramePost", 1)
  97. register_forward(FM_Touch,"forward_touch")
  98.  
  99. /*====================================
  100. ==============Cvar-uri==============*/
  101.  
  102. pcvar_respawn_time = register_cvar("presents_respawn_time","60.0")
  103. pcvar_presents_on_map = register_cvar("presents_on_map", "11")
  104.  
  105. SsInit(800.0)
  106. SsScan()
  107.  
  108. g_money = get_user_msgid("Money")
  109. }
  110.  
  111. public plugin_precache()
  112. {
  113. new i
  114. for(i = 0; i < sizeof model_present; i++)
  115. engfunc(EngFunc_PrecacheModel,model_present[i])
  116. }
  117.  
  118. public spawn_gifts()
  119. {
  120. func_spawn()
  121. }
  122.  
  123. public round_start(id)
  124. {
  125. if(g_bonus[id] > 0)
  126. {
  127. switch(g_bonus[id])
  128. {
  129. case 1:
  130. {
  131. fm_set_user_health(id, get_user_health(id) + 50)
  132. }
  133. case 2:
  134. {
  135. fm_set_user_gravity(id, 0.4)
  136. }
  137. }
  138. }
  139. }
  140.  
  141. public func_spawn()
  142. {
  143. new Float:origin[3]
  144. new i
  145.  
  146. for(i=0; i< get_pcvar_num(pcvar_presents_on_map); i++)
  147. {
  148. if(SsGetOrigin(origin))
  149. {
  150. new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  151. if(pev_valid(ent))
  152. {
  153. engfunc(EngFunc_SetModel,ent,model_present[random_num(0,sizeof model_present - 1)])
  154. engfunc(EngFunc_SetOrigin, ent, origin)
  155. static Float:fMaxs[3] = { 2.0, 2.0, 4.0 }
  156. static Float:fMins[3] = { -2.0, -2.0, -4.0 }
  157. set_pev(ent,pev_solid,SOLID_BBOX)
  158. engfunc(EngFunc_SetSize,ent,fMins,fMaxs)
  159. engfunc(EngFunc_DropToFloor, ent)
  160.  
  161. switch(random_num(0,1))
  162. {
  163. case 0:
  164. {
  165. set_pev(ent,pev_classname,"small_present")
  166. }
  167. case 1:
  168. {
  169. set_pev(ent,pev_classname,"large_present")
  170. }
  171. }
  172. }
  173. }
  174. }
  175. }
  176.  
  177. public client_death(id)
  178. {
  179. if(g_bonus[id] > 0)
  180. {
  181. g_bonus[id] = 0
  182. }
  183. }
  184.  
  185. public FwdPreFramePost(iClient)
  186. {
  187. if(is_user_connected(iClient))
  188. {
  189. if(g_bonus[iClient] == 3)
  190. {
  191. fm_set_user_maxspeed(iClient, 350.0)
  192. }
  193. if(g_bonus[iClient] == 4)
  194. {
  195. fm_set_user_maxspeed(iClient, 200.0)
  196. }
  197. }
  198. }
  199.  
  200. public forward_touch(ent,id)
  201. {
  202. if(!pev_valid(ent))
  203. return FMRES_IGNORED
  204.  
  205. static class[20]
  206.  
  207. pev(ent,pev_classname,class,sizeof class - 1)
  208.  
  209. if((!equali(class,"small_present") && !equali(class,"large_present")))
  210. return FMRES_IGNORED
  211.  
  212. if((equali(class,"large_present") && (g_bonus[id] > 0)))
  213. return FMRES_IGNORED
  214.  
  215. if(!is_user_alive(id))
  216. return FMRES_IGNORED
  217.  
  218. set_pev(ent,pev_solid,SOLID_NOT)
  219. set_pev(ent,pev_effects,EF_NODRAW)
  220. set_task(get_pcvar_float(pcvar_respawn_time), "func_spawn", ent)
  221.  
  222. if(equali(class,"small_present"))
  223. {
  224. switch(random_num(0,4))
  225. {
  226. case 0:
  227. {
  228. fm_set_user_money(id, fm_get_user_money(id) + 500)
  229. set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
  230. show_hudmessage(id, "[XMAS Gift] Mosul ti-a oferit 500$")
  231. }
  232. case 1:
  233. {
  234. fm_set_user_money(id, 16000)
  235. set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
  236. show_hudmessage(id, "[XMAS Gift] Mosul ti-a oferit 16000$")
  237. }
  238. case 2:
  239. {
  240. fm_set_user_money(id, 0)
  241. set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
  242. show_hudmessage(id, "[XMAS Gift] Mosul ti-a furat toti banii")
  243. }
  244. case 3:
  245. {
  246. fm_set_user_money(id, fm_get_user_money(id) - 500)
  247. set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
  248. show_hudmessage(id, "[XMAS Gift] Mosul ti-a furat 500$")
  249. }
  250. case 4:
  251. {
  252. fm_give_item(id, "weapon_awp")
  253. set_hudmessage(255, 165, 0, 0.02, 0.73, 0, 6.0, 12.0)
  254. show_hudmessage(id, "[XMAS Gift] Mosul ti-a oferit un AWP")
  255. }
  256. }
  257. }
  258. if(equali(class,"large_present"))
  259. {
  260. switch(random_num(0,3))
  261. {
  262. case 0:
  263. {
  264. fm_set_user_health(id, get_user_health(id) + 50)
  265. g_bonus[id] = 1
  266. large_present_hud(id)
  267. }
  268. case 1:
  269. {
  270. fm_set_user_gravity(id, 0.4)
  271. g_bonus[id] = 2
  272. large_present_hud(id)
  273. }
  274. case 2:
  275. {
  276. fm_set_user_maxspeed(id, 350.0)
  277. g_bonus[id] = 3
  278. large_present_hud(id)
  279. }
  280. case 3:
  281. {
  282. fm_set_user_maxspeed(id, 200.0)
  283. g_bonus[id] = 4
  284. large_present_hud(id)
  285. }
  286. }
  287. }
  288.  
  289. return FMRES_IGNORED
  290. }
  291.  
  292. public large_present_hud(id)
  293. {
  294. if(is_user_alive(id))
  295. {
  296. if(g_bonus[id] > 0)
  297. {
  298. switch(g_bonus[id])
  299. {
  300. case 1:
  301. {
  302. set_hudmessage(0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0)
  303. show_hudmessage(id, "[XMAS Gift] Viata+")
  304. }
  305. case 2:
  306. {
  307. set_hudmessage(0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0)
  308. show_hudmessage(id, "[XMAS Gift] Gravitatie-")
  309. }
  310. case 3:
  311. {
  312. set_hudmessage(0, 255, 0, 0.02, 0.73, 0, 6.0, 12.0)
  313. show_hudmessage(id, "[XMAS Gift] Viteza+")
  314. }
  315. case 4:
  316. {
  317. set_hudmessage(200, 0, 0, 0.02, 0.73, 0, 6.0, 12.0)
  318. show_hudmessage(id, "[XMAS Gift] Viteza-")
  319. }
  320. }
  321. set_task(12.0, "large_present_hud", id)
  322. }
  323. }
  324. }
  325.  
  326. public client_disconnect(id)
  327. {
  328. g_bonus[id] = 0
  329. }
  330.  
  331. /*====================================
  332. ========Inceput Fakemeta Util=======*/
  333.  
  334. stock fm_set_user_money(id,money,flash=1)
  335. {
  336. set_pdata_int(id,OFFSET_CSMONEY,money,OFFSET_LINUX)
  337.  
  338. message_begin(MSG_ONE,g_money,{0,0,0},id)
  339. write_long(money)
  340. write_byte(flash)
  341. message_end()
  342. }
  343.  
  344. stock fm_get_user_money(id)
  345. {
  346. return get_pdata_int(id,OFFSET_CSMONEY,OFFSET_LINUX)
  347. }
  348.  
  349. stock fm_set_user_health(id, health)
  350. {
  351. (health > 0) ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id)
  352.  
  353. return 1
  354. }
  355.  
  356. stock fm_give_item(index, const item[]) {
  357. if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
  358. return 0
  359.  
  360. new ent = fm_create_entity(item)
  361. if (!pev_valid(ent))
  362. return 0
  363.  
  364. new Float:origin[3]
  365. pev(index, pev_origin, origin)
  366. set_pev(ent, pev_origin, origin)
  367. set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
  368. dllfunc(DLLFunc_Spawn, ent)
  369.  
  370. new save = pev(ent, pev_solid)
  371. dllfunc(DLLFunc_Touch, ent, index)
  372. if (pev(ent, pev_solid) != save)
  373. return ent
  374.  
  375. engfunc(EngFunc_RemoveEntity, ent)
  376.  
  377. return -1
  378. }
  379.  
  380. stock fm_set_user_gravity(index, Float:gravity = 1.0) {
  381. set_pev(index, pev_gravity, gravity)
  382.  
  383. return 1
  384. }
  385.  
  386. stock fm_set_user_maxspeed(index, Float:speed = -1.0) {
  387. engfunc(EngFunc_SetClientMaxspeed, index, speed);
  388. set_pev(index, pev_maxspeed, speed);
  389.  
  390. return 1;
  391. }
  392.  
  393. /*====================================
  394. ========Sfarsit Fakemeta Util=======*/
  395.  
  396. /*====================================
  397. ========Inceput Super Spawns========*/
  398.  
  399. public SsInit(Float:mindist)
  400. {
  401. new cmd[32]
  402. format(cmd, 15, "_ss_dump%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'))
  403. register_cvar("sv_superspawns", SS_VERSION, (FCVAR_SERVER|FCVAR_SPONLY))
  404. register_concmd(cmd, "SsDump")
  405.  
  406. g_flSsMinDist = mindist
  407. g_vecSsOrigins = ArrayCreate(3, 1)
  408. g_vecSsSpawns = ArrayCreate(3, 1)
  409. g_vecSsUsed = ArrayCreate(3, 1)
  410. }
  411.  
  412. stock SsClean()
  413. {
  414. g_flSsMinDist = 0.0
  415. ArrayClear(g_vecSsOrigins)
  416. ArrayClear(g_vecSsSpawns)
  417. ArrayClear(g_vecSsUsed)
  418. }
  419.  
  420. stock SsGetOrigin(Float:origin[3])
  421. {
  422. new Float:data[3], size
  423. new ok = 1
  424.  
  425. while((size = ArraySize(g_vecSsOrigins)))
  426. {
  427. new idx = random_num(0, size - 1)
  428.  
  429. ArrayGetArray(g_vecSsOrigins, idx, origin)
  430.  
  431. new used = ArraySize(g_vecSsUsed)
  432. for(new i = 0; i < used; i++)
  433. {
  434. ok = 0
  435. ArrayGetArray(g_vecSsUsed, i, data)
  436. if(get_distance_f(data, origin) >= g_flSsMinDist)
  437. {
  438. ok = 1
  439. break
  440. }
  441. }
  442.  
  443. ArrayDeleteItem(g_vecSsOrigins, idx)
  444. if(ok)
  445. {
  446. ArrayPushArray(g_vecSsUsed, origin)
  447. return true
  448. }
  449. }
  450. return false
  451. }
  452.  
  453. public SsDump()
  454. {
  455. new Float:origin[3]
  456. new count = ArraySize(g_vecSsOrigins)
  457. server_print("-------------------------------------------------------")
  458. for(new i = 0; i < count; i++)
  459. {
  460. ArrayGetArray(g_vecSsOrigins, i, origin)
  461. server_print("Origin: %f %f %f", origin[0], origin[1], origin[2])
  462. }
  463. server_print("-------------------------------------------------------")
  464. server_print("Number of origins: %i", count)
  465. server_print("Time: %i", g_iSsTime)
  466. server_print("-------------------------------------------------------")
  467. }
  468.  
  469. public SsScan()
  470. {
  471. new start, Float:origin[3], starttime
  472. starttime = get_systime()
  473. for(start = 0; start < sizeof(g_szStarts); start++)
  474. {
  475. server_print("Searching for %s", g_szStarts[start])
  476. new ent
  477. if((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", g_szStarts[start])))
  478. {
  479. new counter
  480. pev(ent, pev_origin, origin)
  481. ArrayPushArray(g_vecSsSpawns, origin)
  482. while(counter < SS_MAX_LOOPS)
  483. {
  484. counter = GetLocation(origin, counter)
  485. }
  486. }
  487. }
  488. g_iSsTime = get_systime()
  489. g_iSsTime -= starttime
  490. }
  491.  
  492. GetLocation(Float:start[3], &counter)
  493. {
  494. new Float:end[3]
  495. for(new i = 0; i < 3; i++)
  496. {
  497. end[i] += random_float(0.0 - g_flOffsets[i], g_flOffsets[i])
  498. }
  499.  
  500. if(IsValid(start, end))
  501. {
  502. start[0] = end[0]
  503. start[1] = end[1]
  504. start[2] = end[2]
  505. ArrayPushArray(g_vecSsOrigins, end)
  506. }
  507. counter++
  508. return counter
  509. }
  510.  
  511. IsValid(Float:start[3], Float:end[3])
  512. {
  513. SetFloor(end)
  514. end[2] += 36.0
  515. new point = engfunc(EngFunc_PointContents, end)
  516. if(point == CONTENTS_EMPTY)
  517. {
  518. if(CheckPoints(end) && CheckDistance(end) && CheckVisibility(start, end))
  519. {
  520. if(!trace_hull(end, HULL_LARGE, -1))
  521. {
  522. return true
  523. }
  524. }
  525. }
  526. return false
  527. }
  528.  
  529. CheckVisibility(Float:start[3], Float:end[3])
  530. {
  531. new tr
  532. engfunc(EngFunc_TraceLine, start, end, IGNORE_GLASS, -1, tr)
  533. return (get_tr2(tr, TR_pHit) < 0)
  534. }
  535.  
  536. SetFloor(Float:start[3])
  537. {
  538. new tr, Float:end[3]
  539. end[0] = start[0]
  540. end[1] = start[1]
  541. end[2] = -99999.9
  542. engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr)
  543. get_tr2(tr, TR_vecEndPos, start)
  544. }
  545.  
  546. CheckPoints(Float:origin[3])
  547. {
  548. new Float:data[3], tr, point
  549. data[0] = origin[0]
  550. data[1] = origin[1]
  551. data[2] = 99999.9
  552. engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr)
  553. get_tr2(tr, TR_vecEndPos, data)
  554. point = engfunc(EngFunc_PointContents, data)
  555. if(point == CONTENTS_SKY && get_distance_f(origin, data) < 250.0)
  556. {
  557. return false
  558. }
  559. data[2] = -99999.9
  560. engfunc(EngFunc_TraceLine, origin, data, DONT_IGNORE_MONSTERS, -1, tr)
  561. get_tr2(tr, TR_vecEndPos, data)
  562. point = engfunc(EngFunc_PointContents, data)
  563. if(point < CONTENTS_SOLID)
  564. return false
  565.  
  566. return true
  567. }
  568.  
  569. CheckDistance(Float:origin[3])
  570. {
  571. new Float:dist, Float:data[3]
  572. new count = ArraySize(g_vecSsSpawns)
  573. for(new i = 0; i < count; i++)
  574. {
  575. ArrayGetArray(g_vecSsSpawns, i, data)
  576. dist = get_distance_f(origin, data)
  577. if(dist < SS_MIN_DISTANCE)
  578. return false
  579. }
  580.  
  581. count = ArraySize(g_vecSsOrigins)
  582. for(new i = 0; i < count; i++)
  583. {
  584. ArrayGetArray(g_vecSsOrigins, i, data)
  585. dist = get_distance_f(origin, data)
  586. if(dist < SS_MIN_DISTANCE)
  587. return false
  588. }
  589.  
  590. return true
  591. }
  592.  
  593. /*====================================
  594. ========Sfarsit Super Spawns========*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement