Advertisement
Guest User

Untitled

a guest
Oct 19th, 2012
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.86 KB | None | 0 0
  1. //===== eAthena Script ============================================
  2. //= Power Plant
  3. //===== By: =======================================================
  4. //= Kenedos
  5. //===== Current Version: ==========================================
  6. //= 1.2
  7. //===== Description: ==============================================
  8. //=
  9. //= Set of scripts and mapflags for the Power Plant arena.
  10. //=
  11. //====== Changelog: ================================================
  12. //= Fixed a bug where using @reloadscript while barricades were active
  13. //= would bug the map walkable titles.
  14. //==================================================================
  15.  
  16. //-------------------- Mapflags -----------------------------------
  17.  
  18. power_plant mapflag pvp
  19. power_plant mapflag nomemo
  20. power_plant mapflag nobranch
  21. power_plant mapflag noteleport
  22.  
  23. // -----------------------------------------------------------------
  24.  
  25.  
  26.  
  27. // ------------------- Scripts -------------------------------------
  28.  
  29. power_plant,70,45,0 script #PP_Fence01 -1,28,0,{
  30.  
  31. OnTouch:
  32. while (1)
  33. {
  34. if (Hp <= 0)
  35. {
  36. break;
  37. }
  38. dispbottom "The electrified fence discharges a thunder on you!";
  39. specialeffect2 622;
  40. set .@rand, rand(33,66);
  41. percentheal -(.@rand),0;
  42. if (Hp == 1)
  43. {
  44. //donpcevent Audience...
  45. dispbottom "The thunder bolt discharges directly on your body!";
  46. heal -1,0;
  47. end;
  48. }
  49. sleep2 1560;
  50. getmapxy .@map$, .@npcx, .@npcy, 1;
  51. getmapxy .@map$, .@x, .@y, 0;
  52. if ((strnpcinfo(2) == "PP_Fence01") ||
  53. (strnpcinfo(2) == "PP_Fence02"))
  54. {
  55. if (.@y != .@npcy)
  56. {
  57. break;
  58. }
  59. }
  60. if ((strnpcinfo(2) == "PP_Fence03") ||
  61. (strnpcinfo(2) == "PP_Fence04"))
  62. {
  63. if (.@x != .@npcx)
  64. {
  65. break;
  66. }
  67. }
  68. }
  69. end;
  70.  
  71. }
  72.  
  73. power_plant,70,101,0 duplicate(#PP_Fence01) #PP_Fence02 -1,28,0
  74. power_plant,98,73,0 duplicate(#PP_Fence01) #PP_Fence03 -1,0,28
  75. power_plant,42,73,0 duplicate(#PP_Fence01) #PP_Fence04 -1,0,28
  76.  
  77.  
  78. power_plant,55,66,0 script #PP_Mine01 -1,0,0,{
  79.  
  80. OnTouch:
  81. switch(rand(1,3))
  82. {
  83. // Lightning Mine
  84. case 1:
  85. dispbottom "You stepped on a lightning mine!";
  86. specialeffect2 257;
  87. specialeffect2 52;
  88. set .@rand, rand(25,45);
  89. percentheal -(.@rand),0;
  90. heal -1, 0;
  91. break;
  92.  
  93. // Shockwave
  94. case 2:
  95. dispbottom "You stepped on a shockwave mine! Your SP has been drained!";
  96. specialeffect2 94;
  97. set .@rand, rand(70,90);
  98. percentheal 0,-(.@rand);
  99. break;
  100.  
  101. // Flasher
  102. case 3:
  103. dispbottom "You stepped on a flasher mine! You may suffer negative status effects.";
  104. specialeffect2 99;
  105. set .@quantity, rand(1,3);
  106. for (set .@i, 0; .@i < .@quantity; set .@i, .@i + 1)
  107. {
  108. set .@effectnumber, rand(1,8);
  109. set .@duration, rand(4000,8000);
  110. sc_start .@effectnumber, .@duration, 0;
  111. }
  112. break;
  113.  
  114. }
  115. end;
  116.  
  117. }
  118.  
  119. // First Mine
  120. power_plant,55,67,0 duplicate(#PP_Mine01) #PP_Mine02 -1,0,0
  121. power_plant,54,67,0 duplicate(#PP_Mine01) #PP_Mine03 -1,0,0
  122. power_plant,54,66,0 duplicate(#PP_Mine01) #PP_Mine04 -1,0,0
  123.  
  124. // Second Mine
  125. power_plant,59,86,0 duplicate(#PP_Mine01) #PP_Mine05 -1,0,0
  126. power_plant,59,85,0 duplicate(#PP_Mine01) #PP_Mine06 -1,0,0
  127. power_plant,58,85,0 duplicate(#PP_Mine01) #PP_Mine07 -1,0,0
  128. power_plant,58,86,0 duplicate(#PP_Mine01) #PP_Mine08 -1,0,0
  129.  
  130. // Third Mine
  131. power_plant,76,87,0 duplicate(#PP_Mine01) #PP_Mine09 -1,0,0
  132. power_plant,75,87,0 duplicate(#PP_Mine01) #PP_Mine10 -1,0,0
  133. power_plant,75,86,0 duplicate(#PP_Mine01) #PP_Mine11 -1,0,0
  134. power_plant,76,86,0 duplicate(#PP_Mine01) #PP_Mine12 -1,0,0
  135.  
  136. // Fourth Mine
  137. power_plant,85,87,0 duplicate(#PP_Mine01) #PP_Mine13 -1,0,0
  138. power_plant,84,87,0 duplicate(#PP_Mine01) #PP_Mine14 -1,0,0
  139. power_plant,84,86,0 duplicate(#PP_Mine01) #PP_Mine15 -1,0,0
  140. power_plant,85,86,0 duplicate(#PP_Mine01) #PP_Mine16 -1,0,0
  141.  
  142. // Fifth Mine
  143. power_plant,83,60,0 duplicate(#PP_Mine01) #PP_Mine17 -1,0,0
  144. power_plant,82,60,0 duplicate(#PP_Mine01) #PP_Mine18 -1,0,0
  145. power_plant,82,59,0 duplicate(#PP_Mine01) #PP_Mine19 -1,0,0
  146. power_plant,83,59,0 duplicate(#PP_Mine01) #PP_Mine20 -1,0,0
  147.  
  148.  
  149. power_plant,67,73,0 script #PP_Guardian -1,1,0,{
  150.  
  151. OnTouch:
  152. if (.pp_guardian_delay < gettimetick(2) ) {
  153. dispbottom "The guardian of the power plant will aid you.";
  154. for (set .@i, 0; .@i < 6; set .@i, .@i + 1)
  155. {
  156. // Raydric
  157. summon "Power Plant Guardian",1677;
  158. if ((.@i % 2) == 0)
  159. {
  160. // Raydric Archer
  161. summon "Power Plant Guardian",1670;
  162. }
  163. }
  164. set .pp_guardian_delay, gettimetick(2) + 149;
  165. }
  166. else
  167. {
  168. dispbottom "The guardian power must recharge. Wait "+((.pp_guardian_delay - gettimetick(2)) + 1)+" seconds before calling it again.";
  169. }
  170. end;
  171.  
  172. }
  173.  
  174. power_plant,75,77,0 script #PP_Cannon01 -1,1,1,{
  175.  
  176. OnTouch:
  177. if (.pp_can_delay < gettimetick(2) ) {
  178. dispbottom "You fire the cannon!";
  179. specialeffect2 97;
  180. sleep2 900;
  181. setarray .@x[0], 85, 90, 90, 94, 96, 89;
  182. setarray .@y[0], 92, 95, 89, 93, 97, 85;
  183. for (set .@i, 0; .@i < getarraysize(.@x); set .@i, .@i + 1)
  184. {
  185. set .@idbomb, bg_monster(0,"power_plant",.@x[.@i],.@y[.@i]," ",1937,"");
  186. unitskilluseid .@idbomb,173,1;
  187. }
  188. set .pp_can_delay, gettimetick(2) + 29;
  189.  
  190. }
  191. else
  192. {
  193. dispbottom "The cannon is reloading. Wait "+((.pp_can_delay - gettimetick(2)) + 1)+" seconds.";
  194. }
  195. end;
  196.  
  197. }
  198.  
  199. power_plant,64,77,0 script #PP_Cannon02 -1,1,1,{
  200.  
  201. OnTouch:
  202. if (.pp_can_delay < gettimetick(2) ) {
  203. dispbottom "You fire the cannon!";
  204. specialeffect2 97;
  205. sleep2 900;
  206. setarray .@x[0], 55, 52, 49, 44, 47, 50, 46, 49, 43;
  207. setarray .@y[0], 91, 96, 99, 97, 94, 91, 91, 88, 95;
  208. for (set .@i, 0; .@i < getarraysize(.@x); set .@i, .@i + 1)
  209. {
  210. set .@idbomb, bg_monster(0,"power_plant",.@x[.@i],.@y[.@i]," ",1937,"");
  211. unitskilluseid .@idbomb,173,1;
  212. }
  213. set .pp_can_delay, gettimetick(2) + 29;
  214.  
  215. }
  216. else
  217. {
  218. dispbottom "The cannon is reloading. Wait "+((.pp_can_delay - gettimetick(2)) + 1)+" seconds.";
  219. }
  220. end;
  221.  
  222. }
  223.  
  224. power_plant,75,66,0 script #PP_Cannon03 -1,1,1,{
  225.  
  226. OnTouch:
  227. if (.pp_can_delay < gettimetick(2) ) {
  228. dispbottom "You fire the cannon!";
  229. specialeffect2 97;
  230. sleep2 900;
  231. setarray .@x[0], 89, 94, 95, 91, 87, 90, 87, 84;
  232. setarray .@y[0], 56, 52, 48, 50, 52, 46, 48, 50;
  233. for (set .@i, 0; .@i < getarraysize(.@x); set .@i, .@i + 1)
  234. {
  235. set .@idbomb, bg_monster(0,"power_plant",.@x[.@i],.@y[.@i]," ",1937,"");
  236. unitskilluseid .@idbomb,173,1;
  237. }
  238. set .pp_can_delay, gettimetick(2) + 29;
  239.  
  240. }
  241. else
  242. {
  243. dispbottom "The cannon is reloading. Wait "+((.pp_can_delay - gettimetick(2)) + 1)+" seconds.";
  244. }
  245. end;
  246.  
  247. }
  248.  
  249. power_plant,64,66,0 script #PP_Cannon04 -1,1,1,{
  250.  
  251. OnTouch:
  252. if (.pp_can_delay < gettimetick(2) ) {
  253. dispbottom "You fire the cannon!";
  254. specialeffect2 97;
  255. sleep2 900;
  256. setarray .@x[0], 50, 49, 46, 49, 43;
  257. setarray .@y[0], 52, 48, 52, 56, 54;
  258. for (set .@i, 0; .@i < getarraysize(.@x); set .@i, .@i + 1)
  259. {
  260. set .@idbomb, bg_monster(0,"power_plant",.@x[.@i],.@y[.@i]," ",1937,"");
  261. unitskilluseid .@idbomb,173,1;
  262. }
  263. set .pp_can_delay, gettimetick(2) + 29;
  264.  
  265. }
  266. else
  267. {
  268. dispbottom "The cannon is reloading. Wait "+((.pp_can_delay - gettimetick(2)) + 1)+" seconds.";
  269. }
  270. end;
  271.  
  272. }
  273.  
  274. power_plant,45,99,0 script #PP_Healpod01 -1,0,0,{
  275.  
  276. OnTouch:
  277. while (1)
  278. {
  279. if (@pp_healpod)
  280. {
  281. break;
  282. }
  283. specialeffect2 325;
  284. dispbottom "The Healing pod regenerates your life quickly!";
  285. set .@rand, rand(25,40);
  286. percentheal .@rand, 0;
  287. set @pp_healpod, 1;
  288. sleep2 1300;
  289. set @pp_healpod, 0;
  290. getmapxy .@map$, .@x, .@y, 0;
  291. if ( ( (.@x != 45) || (.@y != 99) ) &&
  292. ( (.@x != 44) || (.@y != 99) ) &&
  293. ( (.@x != 45) || (.@y != 98) ) &&
  294. ( (.@x != 44) || (.@y != 98) ) )
  295. {
  296. break;
  297. }
  298.  
  299. }
  300. end;
  301.  
  302. }
  303.  
  304. power_plant,44,99,0 duplicate(#PP_Healpod01) #PP_Healpod02 -1,0,0
  305. power_plant,44,98,0 duplicate(#PP_Healpod01) #PP_Healpod03 -1,0,0
  306. power_plant,45,98,0 duplicate(#PP_Healpod01) #PP_Healpod04 -1,0,0
  307.  
  308.  
  309. power_plant,94,48,0 script #PP_Healpod05 -1,0,0,{
  310.  
  311. OnTouch:
  312. while (1)
  313. {
  314. if (@pp_healpod)
  315. {
  316. break;
  317. }
  318. specialeffect2 325;
  319. dispbottom "The Healing pod regenerates your life quickly!";
  320. set .@rand, rand(25,40);
  321. percentheal .@rand, 0;
  322. set @pp_healpod, 1;
  323. sleep2 1300;
  324. set @pp_healpod, 0;
  325. getmapxy .@map$, .@x, .@y, 0;
  326. if ( ( (.@x != 94) || (.@y != 48) ) &&
  327. ( (.@x != 93) || (.@y != 48) ) &&
  328. ( (.@x != 94) || (.@y != 47) ) &&
  329. ( (.@x != 93) || (.@y != 47) ) )
  330. {
  331. break;
  332. }
  333.  
  334. }
  335. end;
  336.  
  337. }
  338.  
  339. power_plant,94,47,0 duplicate(#PP_Healpod05) #PP_Healpod06 -1,0,0
  340. power_plant,93,48,0 duplicate(#PP_Healpod05) #PP_Healpod07 -1,0,0
  341. power_plant,93,47,0 duplicate(#PP_Healpod05) #PP_Healpod08 -1,0,0
  342.  
  343.  
  344.  
  345. power_plant,63,73,0 script #PP_Panel01 -1,0,0,{
  346.  
  347. OnTouch:
  348. if (.pp_panel_delay < gettimetick(2) ) {
  349. if (.monstercount == 0)
  350. {
  351. monster "power_plant",61,67,"Power Plant Guardian",1675,1,strnpcinfo(0)+"::OnMyMobDead";
  352. monster "power_plant",61,76,"Power Plant Guardian",1675,1,strnpcinfo(0)+"::OnMyMobDead";
  353. set .monstercount, 2;
  354. }
  355. if (.idbarrier0 == 0)
  356. {
  357. for (set .@i, 0; .@i < 6; set .@i, .@i + 1)
  358. {
  359. setd ".idbarrier"+.@i, bg_monster(0,"power_plant",62,(73 - .@i)," ",1905,strnpcinfo(0)+"::OnBarricadeBreak"+.@i);
  360. }
  361. setcell "power_plant",62,73,62,68,cell_walkable,0;
  362. setcell "power_plant",62,73,62,68,cell_shootable,1;
  363. dispbottom "You activate the power plant barrier security!";
  364. set .pp_panel_delay, gettimetick(2) + 299;
  365. }
  366. else
  367. {
  368. dispbottom "The barrier security is still active.";
  369. }
  370. }
  371. else
  372. {
  373. dispbottom "The barrier power must recharge. Wait "+((.pp_panel_delay - gettimetick(2)) + 1)+" seconds before calling it again.";
  374. }
  375. end;
  376.  
  377. OnInit:
  378. setcell "power_plant",62,73,62,68,cell_walkable,1;
  379. setcell "power_plant",62,73,62,68,cell_shootable,0;
  380. end;
  381.  
  382. OnBarricadeBreak0:
  383. set .idbarrier0, 0;
  384. set .barriernumber, 0;
  385. goto OnBarricadeBreak;
  386.  
  387. OnBarricadeBreak1:
  388. set .idbarrier1, 0;
  389. set .barriernumber, 1;
  390. goto OnBarricadeBreak;
  391.  
  392. OnBarricadeBreak2:
  393. set .idbarrier2, 0;
  394. set .barriernumber, 2;
  395. goto OnBarricadeBreak;
  396.  
  397. OnBarricadeBreak3:
  398. set .idbarrier3, 0;
  399. set .barriernumber, 3;
  400. goto OnBarricadeBreak;
  401.  
  402. OnBarricadeBreak4:
  403. set .idbarrier4, 0;
  404. set .barriernumber, 4;
  405. goto OnBarricadeBreak;
  406.  
  407. OnBarricadeBreak5:
  408. set .idbarrier5, 0;
  409. set .barriernumber, 5;
  410. goto OnBarricadeBreak;
  411.  
  412. OnBarricadeBreak:
  413. for (set .@i, 0; .@i < 6; set .@i, .@i + 1)
  414. {
  415. if (.@i != .barriernumber)
  416. {
  417. unitkill getd(".idbarrier"+.@i);
  418. setd ".idbarrier"+.@i, 0;
  419. }
  420. }
  421. set .barriernumber, 0;
  422. setcell "power_plant",62,73,62,68,cell_walkable,1;
  423. setcell "power_plant",62,73,62,68,cell_shootable,0;
  424. end;
  425.  
  426. OnMyMobDead:
  427. if (.monstercount > 0)
  428. {
  429. set .monstercount, .monstercount - 1;
  430. }
  431. end;
  432.  
  433. }
  434.  
  435.  
  436. power_plant,69,71,0 script #PP_Panel02 -1,0,0,{
  437.  
  438. OnTouch:
  439. if (.pp_panel_delay < gettimetick(2) ) {
  440. dispbottom "The power generator discharges directly in the water!";
  441. specialeffect2 666;
  442. specialeffect2 461;
  443. sleep2 500;
  444. donpcevent "#PP_Thundergen::OnThunder";
  445. set .pp_panel_delay, gettimetick(2) + 89;
  446. }
  447. else
  448. {
  449. dispbottom "The power generator must recharge. Wait "+((.pp_panel_delay - gettimetick(2)) + 1)+" seconds before calling it again.";
  450. }
  451.  
  452. }
  453.  
  454. power_plant,81,81,0 script #PP_Water01 -1,0,2,{
  455.  
  456. OnTouch:
  457. doevent "#PP_Thundergen::OnActivate";
  458. end;
  459.  
  460. }
  461.  
  462. power_plant,81,62,0 duplicate(#PP_Water01) #PP_Water02 -1,0,2
  463. power_plant,61,71,0 duplicate(#PP_Water01) #PP_Water03 -1,0,4
  464.  
  465.  
  466.  
  467. power_plant,0,0,0 script #PP_Thundergen -1,{
  468.  
  469. end;
  470.  
  471. OnActivate:
  472. for (set .@i, 0; .@i < 30; set .@i, .@i + 1)
  473. {
  474. if (getd(".playerid"+.@i) == getcharid(3))
  475. {
  476. end;
  477. }
  478. }
  479. for (set .@i, 0; .@i < 30; set .@i, .@i + 1)
  480. {
  481. if (getd(".playerid"+.@i) == 0)
  482. {
  483. setd ".playerid"+.@i, getcharid(3);
  484. doevent "#PP_Thundergen::OnWet";
  485. break;
  486. }
  487. }
  488. end;
  489.  
  490. OnWet:
  491. while (1)
  492. {
  493. sleep2 2000;
  494. getmapxy .@map$, .@x, .@y, 0;
  495. if ( (.@map$ != "power_plant") ||
  496. (.@x > 81) || (.@x < 58) ||
  497. (.@y > 83) || (.@y < 60) ||
  498. ( (.@x > 61) && (.@x < 78) &&
  499. ((.@y < 80) && (.@y > 63)) ) ||
  500. (Hp <= 0) )
  501. {
  502. for (set .@i, 0; .@i < 30; set .@i, .@i + 1)
  503. {
  504. if (getd(".playerid"+.@i) == getcharid(3))
  505. {
  506. setd ".playerid"+.@i, 0;
  507. break;
  508. }
  509. }
  510. end;
  511. }
  512. }
  513.  
  514. OnThunder:
  515. for (set .@i, 0; .@i < 30; set .@i, .@i + 1)
  516. {
  517. if (getd(".playerid"+.@i) != 0)
  518. {
  519. if (isloggedin(getd(".playerid"+.@i)))
  520. {
  521. if (attachrid(getd(".playerid"+.@i)))
  522. {
  523. dispbottom "The power generator was activated!";
  524. specialeffect2 622;
  525. if (rand(1,4) == 1)
  526. {
  527. set .@rand, rand(90, 95);
  528. percentheal -(.@rand), 0;
  529. heal -1, 0;
  530. }
  531. else
  532. {
  533. percentheal -100, 0;
  534. heal -1, 0;
  535. }
  536. detachrid;
  537. }
  538. }
  539. }
  540. }
  541. end;
  542.  
  543. }
  544.  
  545. // ----------------------------------------------------------------
  546.  
  547.  
  548. // -------------------- Power Plant Warper ------------------------
  549.  
  550. // Adjust Warper Location Here
  551. prontera,156,180,3 script Power Plant#PP_warp 872,{
  552.  
  553. set .@name$, "["+ strnpcinfo(1) + "]";
  554. mes .@name$;
  555. mes "Hey you there, have you seen the ^0000FFPower Plant^000000?";
  556. next;
  557. if (select("Show me:No thanks") == 2)
  558. {
  559. mes .@name$;
  560. mes "Alright, have a good day.";
  561. close;
  562. }
  563.  
  564. switch(rand(1,14))
  565. {
  566. case 1:
  567. warp "power_plant",91,60;
  568. break;
  569.  
  570. case 2:
  571. warp "power_plant",95,79;
  572. break;
  573.  
  574. case 3:
  575. warp "power_plant",90,94;
  576. break;
  577.  
  578. case 4:
  579. warp "power_plant",77,98;
  580. break;
  581.  
  582. case 5:
  583. warp "power_plant",65,92;
  584. break;
  585.  
  586. case 6:
  587. warp "power_plant",56,98;
  588. break;
  589.  
  590. case 7:
  591. warp "power_plant",46,92;
  592. break;
  593.  
  594. case 8:
  595. warp "power_plant",44,78;
  596. break;
  597.  
  598. case 9:
  599. warp "power_plant",50,65;
  600. break;
  601.  
  602. case 10:
  603. warp "power_plant",45,53;
  604. break;
  605.  
  606. case 11:
  607. warp "power_plant",62,47;
  608. break;
  609.  
  610. case 12:
  611. warp "power_plant",74,53;
  612. break;
  613.  
  614. case 13:
  615. warp "power_plant",83,48;
  616. break;
  617.  
  618. case 14:
  619. warp "power_plant",96,50;
  620. break;
  621.  
  622. }
  623. end;
  624.  
  625. }
  626.  
  627. // --------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement