Advertisement
Guest User

Christmass System v2.0!

a guest
Nov 24th, 2014
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.56 KB | None | 0 0
  1. // Filterscript by Adrian Petre,nu stergeti creditele!!!
  2.  
  3. #define FILTERSCRIPT // Definirea de Filescript.
  4.  
  5. #include <a_samp>
  6. #include <sscanf2>
  7. #include <foreach>
  8. #include <streamer>
  9. //#include <Double-O-Icons> // Asta lasatil asa.
  10.  
  11. #define COLOR_LIME 0x00FF00DC //Culoarea LIME(verde mai deschis) pentru caciula de mos craciun
  12. #define GREY 0xAFAFAFAA // Culoarea gri
  13. #define LIGHTGREEN 0x9ACD32AA //Culoarea verde deschis.
  14. #define COLOR_GREY 0xAFAFAFAA //Culoarea Gri
  15. #define COLOR_WHITE 0xFFFFFFAA //Culoarea alba
  16. #define COLOR_YELLOW 0xFFFF00AA//Culoarea galben
  17. #define RocketHeight 50 // Inaltimea obiectului in cazul nostru artificiul..
  18. #define RocketSpread 30 // Raza de vedere a artificiului.
  19. #define MAX_LAUNCH 20 //Altceva...
  20. #define MAX_FIREWORKS 100 // Maximul de artificii
  21. #if defined FILTERSCRIPT // Definirea de Filescript.
  22.  
  23.  
  24. #define F_MAX_OBJECTS 1000 //Ai posibilitatea de a pune 1000 de obiecte create(de comanda /brad) pe server
  25. #define UpdateTime 300 //Update la timp pentru brazi
  26. #define ObjectsToStream 300 // 300 obiecte pe streamer..
  27. #define StreamRange 300.0 // Distanta in care vei vedea brazii.
  28. #pragma dynamic 30000 // O chestie importanta.
  29. #define MAX_XMASTREES 100 // Maximul de brazi pe server este de 100 pentru a nu se creea lag.
  30.  
  31. forward F_ObjectUpdate(bool:DontCheckDistance);
  32. forward F_StartUpdate();
  33.  
  34. new Rocket[MAX_LAUNCH];
  35. new RocketLight[MAX_LAUNCH];
  36. new RocketSmoke[MAX_LAUNCH];
  37. new RocketExplosions[MAX_LAUNCH];
  38. new Float:rx[MAX_LAUNCH];
  39. new Float:ry[MAX_LAUNCH];
  40. new Float:rz[MAX_LAUNCH];
  41. new FireworkTotal;
  42. new Fired;
  43.  
  44. forward Firework(i);
  45. public Firework(i)
  46. {
  47. new Float:x, Float:y, Float:z;
  48. x = rx[i];
  49. y = ry[i];
  50. z = rz[i];
  51. z += RocketHeight;
  52. if (RocketExplosions[i] == 0)
  53. {
  54. DestroyDynamicObject(Rocket[i]);
  55. DestroyDynamicObject(RocketLight[i]);
  56. DestroyDynamicObject(RocketSmoke[i]);
  57. CreateExplosion(x ,y, z, 4, 10);
  58. CreateExplosion(x ,y, z, 5, 10);
  59. CreateExplosion(x ,y, z, 6, 10);
  60. }
  61. else if (RocketExplosions[i] >= MAX_FIREWORKS)
  62. {
  63. for (new j = 0; j <= RocketSpread; j++)
  64. {
  65. CreateExplosion(x + float(j - (RocketSpread / 2)), y, z, 7, 10);
  66. CreateExplosion(x, y + float(j - (RocketSpread / 2)), z, 7, 10);
  67. CreateExplosion(x, y, z + float(j - (RocketSpread / 2)), 7, 10);
  68. }
  69. RocketExplosions[i] = -1;
  70. FireworkTotal = 0;
  71. Fired = 0;
  72. return 1;
  73. }
  74. else
  75. {
  76. x += float(random(RocketSpread) - (RocketSpread / 2));
  77. y += float(random(RocketSpread) - (RocketSpread / 2));
  78. z += float(random(RocketSpread) - (RocketSpread / 2));
  79. CreateExplosion(x, y, z, 7, 10);
  80. }
  81. RocketExplosions[i]++;
  82. SetTimerEx("Firework", 250, 0, "i", i);
  83. return 1;
  84. }
  85.  
  86. new
  87. bool:snowOn[ 54 char ],
  88. snowObject[ 54 ][ 5 ],
  89. updateTimer [ 54 char ]
  90. ;
  91.  
  92. enum XmasTrees
  93. {
  94. XmasTreeX,
  95. Float:XmasX,
  96. Float:XmasY,
  97. Float:XmasZ,
  98. XmasObject1,
  99. XmasObject2,
  100. XmasObject3,
  101. XmasObject4,
  102. XmasObject5,
  103. XmasObject6,
  104. XmasObject7,
  105. XmasObject8,
  106. XmasObject9,
  107. XmasObject10,
  108.  
  109. };
  110. new Treepos[MAX_XMASTREES][XmasTrees];
  111.  
  112. enum OInfo
  113. {
  114. ModelID,
  115. ObjectID[MAX_PLAYERS],
  116. Float:ox,
  117. Float:oy,
  118. Float:oz,
  119. Float:orox,
  120. Float:oroy,
  121. Float:oroz,
  122. Float:ovdist,
  123. bool:ObjectCreated[MAX_PLAYERS],
  124. };
  125. new ObjectInfo[F_MAX_OBJECTS][OInfo];
  126. new bool:ObjectUpdatetRunning;
  127. new bool:CantCreateMore;
  128. new bool:RefreshObjects[MAX_PLAYERS];
  129. new Float:OldX[MAX_PLAYERS], Float:OldY[MAX_PLAYERS], Float:OldZ[MAX_PLAYERS];
  130.  
  131. public OnFilterScriptInit()
  132. {
  133. print("\n--------------------------------------");
  134. print(" Christmass System by Adrian Pere ");
  135. print("--------------------------------------\n");
  136. return 1;
  137. }
  138.  
  139. public OnFilterScriptExit()
  140. {
  141. return 1;
  142. }
  143.  
  144. public OnPlayerConnect( playerid )
  145. {
  146. CreateSnow( playerid );
  147. return 1;
  148. }
  149.  
  150. public OnPlayerCommandText(playerid, cmdtext[])
  151. {
  152. if(!strcmp(cmdtext, "/artificii", true))
  153. {
  154. if(FireworkTotal == MAX_LAUNCH)
  155. {
  156. SendClientMessage(playerid, COLOR_WHITE, "Ai cumparat numarul maxim de artificii!");
  157. return 1;
  158. }
  159. if(Fired == 1)
  160. {
  161. SendClientMessage(playerid, COLOR_WHITE, "Asteapta sa explodeze artificiul!");
  162. return 1;
  163. }
  164. new string[128];
  165. format(string, sizeof(string), "%s a aprins un artificiu.", GetPlayerNameEx(playerid));
  166. new Float:x, Float:y, Float:z, Float:a;
  167. GetPlayerPos(playerid, x, y, z);
  168. foreach(Player, i)
  169. {
  170. if(IsPlayerInRangeOfPoint(i, 30, x, y, z)) {
  171. SendClientMessage(i, COLOR_YELLOW, string);
  172. }
  173. }
  174. GetPlayerFacingAngle(playerid, a);
  175. x += (2 * floatsin(-a, degrees));
  176. y += (2 * floatcos(-a, degrees));
  177. Rocket[FireworkTotal] = CreateDynamicObject(3786, x, y, z, 0, 90, 0);
  178. RocketLight[FireworkTotal] = CreateDynamicObject(354, x, y, z + 1, 0, 90, 0);
  179. RocketSmoke[FireworkTotal] = CreateDynamicObject(18716, x, y, z - 4, 0, 0, 0);
  180. rx[FireworkTotal] = x;
  181. ry[FireworkTotal] = y;
  182. rz[FireworkTotal] = z;
  183. RocketExplosions[FireworkTotal] = 0;
  184. FireworkTotal++;
  185. return 1;
  186. }
  187.  
  188. if(!strcmp(cmdtext, "/lanseaza", true))
  189. {
  190. if(FireworkTotal == 0)
  191. {
  192. SendClientMessage(playerid, COLOR_WHITE, "Nu ai nici un artificiu!");
  193. return 1;
  194. }
  195. if(Fired == 1)
  196. {
  197. SendClientMessage(playerid, COLOR_WHITE, "Ai plasat deja focul de artificiu,asteapta sa explodeze!");
  198. return 1;
  199. }
  200. for(new i = 0; i < FireworkTotal; i++)
  201. {
  202. CreateExplosion(rx[i] ,ry[i], rz[i], 12, 5);
  203. new time = MoveDynamicObject(Rocket[i], rx[i] ,ry[i], rz[i] + RocketHeight, 10);
  204. MoveDynamicObject(RocketLight[i], rx[i] ,ry[i], rz[i] + 2 + RocketHeight, 10);
  205. MoveDynamicObject(RocketSmoke[i], rx[i] ,ry[i], rz[i] + RocketHeight, 10);
  206. SetTimerEx("Firework", time, 0, "i", i);
  207. }
  208. Fired = 1;
  209. return 1;
  210. }
  211. if(strcmp(cmdtext, "/brad", true) == 0)
  212. {
  213. new Float:plocx,Float:plocy,Float:plocz; // Ia niste float-uri.
  214. GetPlayerPos(playerid, plocx, plocy, plocz); // Se iau coordonatele playerului.
  215. SetXmasTree(plocx,plocy,plocz);// Se iau coordonatele bradului si se creeaza.
  216. SetPlayerPos(playerid, plocx-2.5, plocy+2.5, plocz);//La aceasta pozitie se va creea bradul
  217. SendClientMessage(playerid, LIGHTGREEN, "Ai creat un brad de craciun!Felicitari.");
  218. return 1;
  219.  
  220. }
  221. if(strcmp(cmdtext, "/scoatebrad", true) == 0)
  222. {
  223. DeleteClosestXmasTree(playerid);
  224. SendClientMessage(playerid, LIGHTGREEN, "Ai scos un brad de craciun!Sarbatori fericite!");
  225. return 1;
  226.  
  227. }
  228. if(!strcmp(cmdtext, "/caciula", true))
  229. {
  230. if( snowOn{ playerid } )
  231. {
  232. DeleteSnow( playerid );
  233. SendClientMessage( playerid, 0x00FF00AA, "{FF0000}Sarbatori fericite!{FFFFFF}Ai oprit ninsoarea!" );
  234. }
  235. else
  236. {
  237. CreateSnow( playerid );
  238. SendClientMessage( playerid, 0x00FF00AA, "{FF0000}Craciunul soseste!{FFFFFF}Ninge!" );
  239. }
  240. return ( 1 );
  241. }
  242. if(!strcmp(cmdtext, "/caciula", true))
  243. {
  244. SetPlayerAttachedObject(playerid, 3, 19065, 2, 0.120000, 0.040000, -0.003500, 0, 100, 100, 1.4, 1.4, 1.4);
  245. return SendClientMessage(playerid, 0x00FF00FF, "Ti-ai pus o caciula de Mos Craciun!Sarbatori fericite!");
  246. }
  247. if(!strcmp(cmdtext, "/scoatecaciula", true))
  248. {
  249. if(IsPlayerAttachedObjectSlotUsed(playerid, 3))
  250. {
  251. RemovePlayerAttachedObject(playerid, 3);
  252. SendClientMessage(playerid, 0x00FF00FF, "Ti-ai dat caciula de craciun jos!Sarbatori fericite!");
  253. }
  254. return 1;
  255. }
  256. if(strcmp(cmdtext, "/scoatetotibrazii", true) == 0)
  257. {
  258. DeleteAllXmasTree();
  259. SendClientMessage(playerid, LIGHTGREEN, "Ai scos toti brazii de pe server!Sarbatori fericite!");
  260. return 1;
  261.  
  262.  
  263. }
  264. return 0;
  265. }
  266.  
  267. public F_StartUpdate()
  268. {
  269. SetTimer("F_ObjectUpdate", UpdateTime, 1);
  270. }
  271.  
  272. stock F_CreateObject(modelid, Float:x, Float:y, Float:z, Float:rox, Float:roy, Float:roz, Float:vdist=0.0)
  273. {
  274. if(ObjectUpdatetRunning == false)
  275. {
  276. SetTimer("F_StartUpdate", F_MAX_OBJECTS/2, 0);
  277. ObjectUpdatetRunning = true;
  278. }
  279.  
  280. new objectid;
  281.  
  282. if(CantCreateMore == false)
  283. {
  284. for(new i; i<F_MAX_OBJECTS; i++)
  285. {
  286. if(i == F_MAX_OBJECTS-1)
  287. {
  288. printf("Obiectele de la brazi (%i) au ajuns la limita!", F_MAX_OBJECTS);
  289. CantCreateMore = true;
  290. }
  291. if(ObjectInfo[i][ModelID] == 0)
  292. {
  293. objectid = i;
  294. break;
  295. }
  296. }
  297. }
  298. else
  299. {
  300. return -1;
  301. }
  302.  
  303. if(modelid == 0)
  304. {
  305. printf("Comanda invalida a obiectului (%i)", objectid);
  306. return -1;
  307. }
  308.  
  309. ObjectInfo[objectid][ModelID] = modelid;
  310. ObjectInfo[objectid][ox] = x;
  311. ObjectInfo[objectid][oy] = y;
  312. ObjectInfo[objectid][oz] = z;
  313. ObjectInfo[objectid][orox] = rox;
  314. ObjectInfo[objectid][oroy] = roy;
  315. ObjectInfo[objectid][oroz] = roz;
  316. ObjectInfo[objectid][ovdist] = vdist;
  317. return objectid;
  318. }
  319.  
  320. stock F_IsValidObject(objectid)
  321. {
  322. if(ObjectInfo[objectid][ModelID] == 0 || objectid == -1)
  323. {
  324. return 0;
  325. }
  326. return 1;
  327. }
  328.  
  329. stock F_DestroyObject(objectid)
  330. {
  331. if(F_IsValidObject(objectid))
  332. {
  333. for(new playerid; playerid<MAX_PLAYERS; playerid++)
  334. {
  335. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid) && ObjectInfo[objectid][ObjectCreated][playerid] == true)
  336. {
  337. DestroyPlayerObject(playerid, ObjectInfo[objectid][ObjectID][playerid]);
  338. ObjectInfo[objectid][ObjectCreated][playerid] = false;
  339. }
  340. }
  341. ObjectInfo[objectid][ModelID] = 0;
  342. return 1;
  343. }
  344. return 0;
  345. }
  346.  
  347. stock F_MoveObject(objectid, Float:x, Float:y, Float:z, Float:speed)
  348. {
  349. if(F_IsValidObject(objectid))
  350. {
  351. new time;
  352. for(new playerid; playerid<MAX_PLAYERS; playerid++)
  353. {
  354. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid) && ObjectInfo[objectid][ObjectCreated][playerid] == true)
  355. {
  356. time = MovePlayerObject(playerid, ObjectInfo[objectid][ObjectID][playerid], x, y, z, speed);
  357. }
  358. }
  359. return time;
  360. }
  361. return 0;
  362. }
  363.  
  364. stock F_StopObject(objectid)
  365. {
  366. if(F_IsValidObject(objectid))
  367. {
  368. for(new playerid; playerid<MAX_PLAYERS; playerid++)
  369. {
  370. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid) && ObjectInfo[objectid][ObjectCreated][playerid] == true)
  371. {
  372. StopPlayerObject(playerid, ObjectInfo[objectid][ObjectID][playerid]);
  373. }
  374. }
  375. return 1;
  376. }
  377. return 0;
  378. }
  379.  
  380. stock F_SetObjectPos(objectid, Float:x, Float:y, Float:z)
  381. {
  382. if(F_IsValidObject(objectid))
  383. {
  384. ObjectInfo[objectid][ox] = x;
  385. ObjectInfo[objectid][oy] = y;
  386. ObjectInfo[objectid][oz] = z;
  387. for(new playerid; playerid<MAX_PLAYERS; playerid++)
  388. {
  389. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid) && ObjectInfo[objectid][ObjectCreated][playerid] == true)
  390. {
  391. SetPlayerObjectPos(playerid, ObjectInfo[objectid][ObjectID][playerid], x, y, z);
  392. }
  393. }
  394. return 1;
  395. }
  396. return 0;
  397. }
  398.  
  399. stock F_GetObjectPos(objectid, &Float:x, &Float:y, &Float:z)
  400. {
  401. if(F_IsValidObject(objectid))
  402. {
  403. x = ObjectInfo[objectid][ox];
  404. y = ObjectInfo[objectid][oy];
  405. z = ObjectInfo[objectid][oz];
  406. return 1;
  407. }
  408. else
  409. {
  410. return 0;
  411. }
  412. }
  413.  
  414. stock F_SetObjectRot(objectid, Float:rox, Float:roy, Float:roz)
  415. {
  416. if(F_IsValidObject(objectid))
  417. {
  418. ObjectInfo[objectid][orox] = rox;
  419. ObjectInfo[objectid][oroy] = roy;
  420. ObjectInfo[objectid][oroz] = roz;
  421. for(new playerid; playerid<MAX_PLAYERS; playerid++)
  422. {
  423. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid) && ObjectInfo[objectid][ObjectCreated][playerid] == true)
  424. {
  425. SetPlayerObjectRot(playerid, ObjectInfo[objectid][ObjectID][playerid], rox, roy, roz);
  426. }
  427. }
  428. return 1;
  429. }
  430. return 0;
  431. }
  432.  
  433. stock F_GetObjectRot(objectid, &Float:rox, &Float:roy, &Float:roz)
  434. {
  435. if(F_IsValidObject(objectid))
  436. {
  437. rox = ObjectInfo[objectid][orox];
  438. roy = ObjectInfo[objectid][oroy];
  439. roz = ObjectInfo[objectid][oroz];
  440. return 1;
  441. }
  442. else
  443. {
  444. return 0;
  445. }
  446. }
  447.  
  448. stock F_RefreshObjects(playerid)
  449. {
  450. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
  451. {
  452. RefreshObjects[playerid] = true;
  453. new Float:x, Float:y, Float:z;
  454. GetPlayerPos(playerid, x, y, z);
  455. F_PlayerObjectUpdate(playerid, x, y, z);
  456. return 1;
  457. }
  458. return 0;
  459. }
  460.  
  461. stock F_Streamer_OnPlayerConnect(playerid)
  462. {
  463. for(new objectid; objectid<F_MAX_OBJECTS; objectid++)
  464. {
  465. ObjectInfo[objectid][ObjectCreated][playerid] = false;
  466. }
  467. OldX[playerid] = 999999999.99;
  468. OldY[playerid] = 999999999.99;
  469. OldZ[playerid] = 999999999.99;
  470. RefreshObjects[playerid] = false;
  471. return 1;
  472. }
  473.  
  474. public F_ObjectUpdate(bool:DontCheckDistance)
  475. {
  476. new Float:ObjDistance[F_MAX_OBJECTS];
  477. new Closest[ObjectsToStream];
  478. new ObjectArr[F_MAX_OBJECTS];
  479. new nr;
  480. new bool:Firstloop;
  481. new bool:DontDestroy[F_MAX_OBJECTS];
  482.  
  483. for(new playerid; playerid<MAX_PLAYERS; playerid++)
  484. {
  485. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
  486. {
  487. if(!IsPlayerInRangeOfPoint(playerid, 1.0, OldX[playerid], OldY[playerid], OldZ[playerid]) || DontCheckDistance)
  488. {
  489. GetPlayerPos(playerid, OldX[playerid], OldY[playerid], OldZ[playerid]);
  490.  
  491. nr = 0;
  492. for(new objectid; objectid<F_MAX_OBJECTS; objectid++)
  493. {
  494. if(F_IsValidObject(objectid))
  495. {
  496. ObjDistance[objectid] = floatsqroot(floatpower(floatsub(ObjectInfo[objectid][ox],OldX[playerid]),2)+floatpower(floatsub(ObjectInfo[objectid][oy],OldY[playerid]),2)+floatpower(floatsub(ObjectInfo[objectid][oz],OldZ[playerid]),2));
  497. if(floatcmp(ObjDistance[objectid], StreamRange) == -1)
  498. {
  499. ObjectArr[nr] = objectid;
  500. nr++;
  501. }
  502. }
  503. }
  504.  
  505. Closest = "";
  506.  
  507. if(nr > ObjectsToStream)
  508. {
  509. for(new loop; loop<ObjectsToStream; loop++)
  510. {
  511. Firstloop = true;
  512. for(new objectid; objectid<nr; objectid++)
  513. {
  514. if((ObjDistance[ObjectArr[objectid]] != 999999999.99) && ((floatcmp(ObjDistance[ObjectArr[objectid]], ObjDistance[Closest[loop]]) == -1) || Firstloop))
  515. {
  516. Firstloop = false;
  517. Closest[loop] = ObjectArr[objectid];
  518. }
  519. }
  520. ObjDistance[Closest[loop]] = 999999999.99;
  521. }
  522. }
  523. else
  524. {
  525. for(new objectid; objectid<nr; objectid++)
  526. {
  527. Closest[objectid] = ObjectArr[objectid];
  528. }
  529. }
  530.  
  531. for(new objectid; objectid<F_MAX_OBJECTS; objectid++) { DontDestroy[objectid] = false; }
  532. for(new objectid; objectid<ObjectsToStream && objectid<nr; objectid++)
  533. {
  534. DontDestroy[Closest[objectid]] = true;
  535. }
  536.  
  537. for(new objectid; objectid<F_MAX_OBJECTS; objectid++)
  538. {
  539. if(ObjectInfo[objectid][ObjectCreated][playerid] == true && DontDestroy[objectid] == false)
  540. {
  541. DestroyPlayerObject(playerid, ObjectInfo[objectid][ObjectID][playerid]);
  542. ObjectInfo[objectid][ObjectCreated][playerid] = false;
  543. }
  544. }
  545.  
  546. for(new loop; loop<ObjectsToStream && loop<nr; loop++)
  547. {
  548. if(ObjectInfo[Closest[loop]][ObjectCreated][playerid] == false)
  549. {
  550. ObjectInfo[Closest[loop]][ObjectID][playerid] = CreatePlayerObject(playerid, ObjectInfo[Closest[loop]][ModelID], ObjectInfo[Closest[loop]][ox], ObjectInfo[Closest[loop]][oy], ObjectInfo[Closest[loop]][oz], ObjectInfo[Closest[loop]][orox], ObjectInfo[Closest[loop]][oroy], ObjectInfo[Closest[loop]][oroz], ObjectInfo[Closest[loop]][ovdist]);
  551. ObjectInfo[Closest[loop]][ObjectCreated][playerid] = true;
  552. }
  553. }
  554. }
  555. }
  556. }
  557. }
  558.  
  559. stock F_ObjectUpdateForAll()
  560. {
  561. F_ObjectUpdate(true);
  562. }
  563.  
  564. stock F_PlayerObjectUpdate(playerid, Float:x, Float:y, Float:z)
  565. {
  566. if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
  567. {
  568. OldX[playerid] = x;
  569. OldY[playerid] = y;
  570. OldZ[playerid] = z;
  571.  
  572. new nr;
  573. new Float:ObjDistance[F_MAX_OBJECTS];
  574. new ObjectArr[F_MAX_OBJECTS];
  575. for(new objectid; objectid<F_MAX_OBJECTS; objectid++)
  576. {
  577. if(F_IsValidObject(objectid))
  578. {
  579. ObjDistance[objectid] = floatsqroot(floatpower(floatsub(ObjectInfo[objectid][ox],x),2)+floatpower(floatsub(ObjectInfo[objectid][oy],y),2)+floatpower(floatsub(ObjectInfo[objectid][oz],z),2));
  580. if(floatcmp(ObjDistance[objectid], StreamRange) == -1)
  581. {
  582. ObjectArr[nr] = objectid;
  583. nr++;
  584. }
  585. }
  586. }
  587.  
  588. new Closest[ObjectsToStream];
  589.  
  590. if(nr > ObjectsToStream)
  591. {
  592. for(new loop; loop<ObjectsToStream; loop++)
  593. {
  594. new bool:Firstloop = true;
  595. for(new objectid; objectid<nr; objectid++)
  596. {
  597. if((ObjDistance[ObjectArr[objectid]] != 999999999.99) && ((floatcmp(ObjDistance[ObjectArr[objectid]], ObjDistance[Closest[loop]]) == -1) || Firstloop))
  598. {
  599. Firstloop = false;
  600. Closest[loop] = ObjectArr[objectid];
  601. }
  602. }
  603. ObjDistance[Closest[loop]] = 999999999.99;
  604. }
  605. }
  606. else
  607. {
  608. for(new objectid; objectid<nr; objectid++)
  609. {
  610. Closest[objectid] = ObjectArr[objectid];
  611. }
  612. }
  613.  
  614. new bool:DontDestroy[F_MAX_OBJECTS];
  615. for(new objectid; objectid<ObjectsToStream && objectid<nr; objectid++)
  616. {
  617. DontDestroy[Closest[objectid]] = true;
  618. }
  619.  
  620. for(new objectid; objectid<F_MAX_OBJECTS; objectid++)
  621. {
  622. if(ObjectInfo[objectid][ObjectCreated][playerid] == true && (DontDestroy[objectid] == false || RefreshObjects[playerid] == true))
  623. {
  624. DestroyPlayerObject(playerid, ObjectInfo[objectid][ObjectID][playerid]);
  625. ObjectInfo[objectid][ObjectCreated][playerid] = false;
  626. }
  627. }
  628. RefreshObjects[playerid] = false;
  629.  
  630. for(new loop; loop<ObjectsToStream && loop<nr; loop++)
  631. {
  632. if(ObjectInfo[Closest[loop]][ObjectCreated][playerid] == false)
  633. {
  634. ObjectInfo[Closest[loop]][ObjectID][playerid] = CreatePlayerObject(playerid, ObjectInfo[Closest[loop]][ModelID], ObjectInfo[Closest[loop]][ox], ObjectInfo[Closest[loop]][oy], ObjectInfo[Closest[loop]][oz], ObjectInfo[Closest[loop]][orox], ObjectInfo[Closest[loop]][oroy], ObjectInfo[Closest[loop]][oroz], ObjectInfo[Closest[loop]][ovdist]);
  635. ObjectInfo[Closest[loop]][ObjectCreated][playerid] = true;
  636. }
  637. }
  638. }
  639. }
  640. #define SetPlayerPos F_SetPlayerPos
  641. stock F_SetPlayerPos(playerid, Float:x, Float:y, Float:z)
  642. {
  643. F_PlayerObjectUpdate(playerid, x, y, z);
  644. SetPlayerPos(playerid, x, y, z);
  645. }
  646.  
  647. stock SetXmasTree(Float:x,Float:y,Float:z)
  648. {
  649. for(new i = 0; i < sizeof(Treepos); i++)
  650. {
  651. if(Treepos[i][XmasTreeX] == 0)
  652. {
  653. Treepos[i][XmasTreeX]=1;
  654. Treepos[i][XmasX]=x;
  655. Treepos[i][XmasY]=y;
  656. Treepos[i][XmasZ]=z;
  657. Treepos[i][XmasObject1] = F_CreateObject(19076, x, y, z-1.0,0,0,300);//xmas tree
  658. Treepos[i][XmasObject2] = F_CreateObject(19054, x, y+1.0, z-0.4,0,0,300);//XmasBox1
  659. Treepos[i][XmasObject3] = F_CreateObject(19058, x+1.0, y, z-0.4,0,0,300);//XmasBox5
  660. Treepos[i][XmasObject4] = F_CreateObject(19056, x, y-1.0, z-0.4,0,0,300);//XmasBox3
  661. Treepos[i][XmasObject5] = F_CreateObject(19057, x-1.0, y, z-0.4,0,0,300);//XmasBox4
  662. Treepos[i][XmasObject6] = F_CreateObject(19058, x-1.5, y+1.5, z-1.0,0,0,300);//XmasBox5
  663. Treepos[i][XmasObject7] = F_CreateObject(19055, x+1.5, y-1.5, z-1.0,0,0,300);//XmasBox2
  664. Treepos[i][XmasObject8] = F_CreateObject(19057, x+1.5, y+1.5, z-1.0,0,0,300);//XmasBox4
  665. Treepos[i][XmasObject9] = F_CreateObject(19054, x-1.5, y-1.5, z-1.0,0,0,300);//XmasBox1
  666. Treepos[i][XmasObject10] = F_CreateObject(3526, x, y, z-1.0,0,0,300);//Airportlight - for flashing affect
  667. return 1;
  668. }
  669. }
  670. return 0;
  671. }
  672.  
  673. stock DeleteAllXmasTree()
  674. {
  675. for(new i = 0; i < sizeof(Treepos); i++)
  676. {
  677. if(Treepos[i][XmasTreeX] == 1)
  678. {
  679. Treepos[i][XmasTreeX]=0;
  680. Treepos[i][XmasX]=0.0;
  681. Treepos[i][XmasY]=0.0;
  682. Treepos[i][XmasZ]=0.0;
  683. F_DestroyObject(Treepos[i][XmasObject1]);
  684. F_DestroyObject(Treepos[i][XmasObject2]);
  685. F_DestroyObject(Treepos[i][XmasObject3]);
  686. F_DestroyObject(Treepos[i][XmasObject4]);
  687. F_DestroyObject(Treepos[i][XmasObject5]);
  688. F_DestroyObject(Treepos[i][XmasObject6]);
  689. F_DestroyObject(Treepos[i][XmasObject7]);
  690. F_DestroyObject(Treepos[i][XmasObject8]);
  691. F_DestroyObject(Treepos[i][XmasObject9]);
  692. F_DestroyObject(Treepos[i][XmasObject10]);
  693. }
  694. }
  695. return 0;
  696. }
  697.  
  698. stock DeleteClosestXmasTree(playerid)
  699. {
  700. for(new i = 0; i < sizeof(Treepos); i++)
  701. {
  702. if(IsPlayerInRangeOfPoint(playerid, 3.0, Treepos[i][XmasX], Treepos[i][XmasY], Treepos[i][XmasZ]))
  703. {
  704. if(Treepos[i][XmasTreeX] == 1)
  705. {
  706. Treepos[i][XmasTreeX]=0;
  707. Treepos[i][XmasX]=0.0;
  708. Treepos[i][XmasY]=0.0;
  709. Treepos[i][XmasZ]=0.0;
  710. F_DestroyObject(Treepos[i][XmasObject1]);
  711. F_DestroyObject(Treepos[i][XmasObject2]);
  712. F_DestroyObject(Treepos[i][XmasObject3]);
  713. F_DestroyObject(Treepos[i][XmasObject4]);
  714. F_DestroyObject(Treepos[i][XmasObject5]);
  715. F_DestroyObject(Treepos[i][XmasObject6]);
  716. F_DestroyObject(Treepos[i][XmasObject7]);
  717. F_DestroyObject(Treepos[i][XmasObject8]);
  718. F_DestroyObject(Treepos[i][XmasObject9]);
  719. F_DestroyObject(Treepos[i][XmasObject10]);
  720. return 1;
  721. }
  722. }
  723. }
  724. return 0;
  725. }
  726. stock CreateSnow( playerid )
  727. {
  728. if( snowOn{ playerid } )
  729. return ( 0 );
  730.  
  731. new Float:pPos[ 3 ];
  732. GetPlayerPos( playerid, pPos[ 0 ], pPos[ 1 ], pPos[ 2 ] );
  733.  
  734. for( new i = 0; i < 5; i ++ )
  735. snowObject[ playerid ][ i ] = CreateObject( 18864, pPos[ 0 ] + random( 25 ), pPos[ 1 ] + random ( 25 ), pPos[ 2 ] - 5, random( 100 ), random( 100 ), random( 100 ), -1, -1, playerid );
  736.  
  737. snowOn{ playerid } = true;
  738. return ( 1 );
  739. }
  740.  
  741. stock DeleteSnow( playerid )
  742. {
  743. if( !snowOn{ playerid } )
  744. return ( 0 );
  745.  
  746. for( new i = 0; i < 5; i ++ )
  747. DestroyObject( snowObject[ playerid ][ i ] );
  748.  
  749. KillTimer( updateTimer{ playerid } );
  750. snowOn{ playerid } = false;
  751. return ( 1 );
  752. }
  753. GetPlayerNameEx(playerid) {
  754.  
  755. new sz_playerName[MAX_PLAYER_NAME], i_pos;
  756.  
  757. GetPlayerName(playerid, sz_playerName, MAX_PLAYER_NAME);
  758. while ((i_pos = strfind(sz_playerName, "_", false, i_pos)) != -1) sz_playerName[i_pos] = ' ';
  759. return sz_playerName;
  760. }
  761. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement