OsOccupation.txt 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. //===== rAthena Script =======================================
  2. //= OS Occupation Operation
  3. //===== Description: =========================================
  4. //= [Walkthrough Conversion]
  5. //= Episode 17.1 - OS Occupation Operation
  6. //= 2nd OS Search
  7. //===== Changelog: ===========================================
  8. //= 1.0 Initial release [crazyarashi]
  9. //= 1.1 Optimizations and cleanup [Everade]
  10. //============================================================
  11. 1@os_a,1,1,0 script #os_occupation_control HIDDEN_WARP_NPC,{
  12. end;
  13. OnInstanceInit:
  14. 'map$ = instance_mapname("1@os_a");
  15. for (.@i = 1; .@i < 26; .@i++)
  16. disablenpc instance_npcname("#ocp_rebel_" + .@i);
  17. hideonnpc instance_npcname("Est#171_ocp_0");
  18. disablenpc instance_npcname("#171_ocp_dev_0");
  19. disablenpc instance_npcname("#171_ocp_dev_1");
  20. disablenpc instance_npcname("#171_ocp_wrp_0");
  21. disablenpc instance_npcname("#171_ocp_wrp_1");
  22. disablenpc instance_npcname("#171_ocp_wrp_2");
  23. disablenpc instance_npcname("#171_ocp_miguel");
  24. disablenpc instance_npcname("Est#171_ocp_1");
  25. disablenpc instance_npcname("Operation Officer#171_osd");
  26. end;
  27. OnStory01:
  28. donpcevent instance_npcname("#171_ocp_mob") + "::OnPoisonStory";
  29. for (.@i = 1; .@i < 26; .@i++)
  30. enablenpc instance_npcname("#ocp_rebel_" + .@i);
  31. enablenpc instance_npcname("#171_ocp_dev_0");
  32. sleep2 1000;
  33. hideoffnpc instance_npcname("Est#171_ocp_0");
  34. doevent instance_npcname("Est#171_ocp_0") + "::OnEvent";
  35. end;
  36. OnStory02:
  37. for (.@i = 1; .@i < 26; .@i++)
  38. hideonnpc instance_npcname("#ocp_rebel_" + .@i);
  39. disablenpc instance_npcname("Est#171_ocp_0");
  40. sleep2 3000;
  41. donpcevent instance_npcname("#171_ocp_mob") + "::OnSummonStory01";
  42. doevent instance_npcname("#171_ocp_dev_0") + "::OnEvent01";
  43. end;
  44. OnStory03:
  45. enablenpc instance_npcname("#171_ocp_dev_1");
  46. for (.@i = 1; .@i < 26; .@i++)
  47. disablenpc instance_npcname("#ocp_rebel_" + .@i);
  48. end;
  49. OnDaily01:
  50. 'osd = 1;
  51. donpcevent instance_npcname("#171_ocp_mob") + "::OnSummon";
  52. donpcevent instance_npcname("#171_ocp_mob") + "::OnPoisonDaily";
  53. end;
  54. }
  55. 1@os_a,30,352,0 script #os_occupation_ev_0 HIDDEN_WARP_NPC,4,4,{
  56. end;
  57. OnTouch:
  58. if (!is_party_leader())
  59. end;
  60. disablenpc();
  61. disablenpc instance_npcname("#os_occupation_ev_1");
  62. doevent instance_npcname("#os_occupation_control") + "::OnStory01";
  63. end;
  64. }
  65. 1@os_a,335,34,0 script #os_occupation_ev_1 HIDDEN_WARP_NPC,4,4,{
  66. end;
  67. OnTouch:
  68. if (!is_party_leader())
  69. end;
  70. disablenpc();
  71. disablenpc instance_npcname("#os_occupation_ev_0");
  72. doevent instance_npcname("#os_occupation_control") + "::OnDaily01";
  73. disablenpc instance_npcname("Est#171_ocp_0");
  74. end;
  75. }
  76. 1@os_a,30,360,3 script Est#171_ocp_0 4_F_ESTLOVELOY,{
  77. cutin "ep162_est01",2;
  78. mes "[Est]";
  79. mes "Focus on the briefing.";
  80. close3;
  81. OnEvent:
  82. sleep2 3000;
  83. npctalk "Est : I have confirmed that there's biogas spreading at the front and it's currently under treatment.";
  84. sleep2 5000;
  85. npctalk "Est : If you get too close, you'll die immediately, so don't move until the treatment is finished...";
  86. sleep2 5000;
  87. npctalk "Est : First, we need to establish bases here. We don't know how many individuals are lurking around.";
  88. sleep2 5000;
  89. npctalk "Est : There isn't much information, so it's our duty to create those information. From now on, we'll split into 3 groups and subdue this place.";
  90. sleep2 5000;
  91. npctalk "Est : Alpha Team, start searching around the southern waterway.";
  92. sleep2 5000;
  93. npctalk "Est : Bravo Team, you will be sweeping with me before the eastern boundary.";
  94. sleep2 5000;
  95. npctalk "Est : The Echo team is in charge of backups under the command of " + strcharinfo(0) + ". You will block this place and prevent individuals from going outside.";
  96. sleep2 5000;
  97. npctalk "Est : We shouldn't have situations where we'll ask for support, but if such situation occurs, the Echo team will be called.";
  98. sleep2 5000;
  99. mapannounce 'map$,"Chemical Treatment Unit : The biogas facilities locked has been completed. The residual gas will continue for the next few minutes.",bc_map,0xFFCC00;
  100. sleep2 5000;
  101. npctalk "Est : It's time. We're moving. " + strcharinfo(0) + "'s unit is a support team, wait here and respond to communications.";
  102. sleep2 5000;
  103. doevent instance_npcname("#os_occupation_control") + "::OnStory02";
  104. end;
  105. }
  106. 1@os_a,29,360,3 script #171_ocp_dev_0 4_SCR_MT_ROBOTS,{
  107. if ('ocp >= 5) {
  108. mes "## Received Message ##";
  109. mes "## Team Alpha's last communication was at Oscar Sierra 52 177 ##";
  110. navigateto("1@os_a",52,177);
  111. close;
  112. }
  113. switch ('ocp) {
  114. case 1:
  115. mes "## Enter Message Input ##";
  116. next;
  117. setarray .@input$,
  118. "Engaging with mutants on north.","Engaging with small mutants.","Ah~! I want to go home!";
  119. .@menu$ = implode(.@input$,":");
  120. .@s = select(.@menu$) - 1;
  121. 'ocp = 2;
  122. mapannounce 'map$,strcharinfo(0) + " : " + .@input$[.@s],bc_map,0xEE66EE;
  123. doevent instance_npcname(strnpcinfo(0)) + "::OnEvent02";
  124. close;
  125. case 3:
  126. mes "## Enter Message Input ##";
  127. next;
  128. setarray .@input$,
  129. "Echo is fighting too. Requesting for support.","There was an engagement, but it's over.","Save me!";
  130. .@menu$ = implode(.@input$,":");
  131. .@s = select(.@menu$) - 1;
  132. 'ocp = 4;
  133. mapannounce 'map$,strcharinfo(0) + " : " + .@input$[.@s],bc_map,0xEE66EE;
  134. doevent instance_npcname(strnpcinfo(0)) + "::OnEvent03";
  135. close;
  136. default:
  137. mes "## No Communication Status ##";
  138. close;
  139. }
  140. end;
  141. OnEvent01:
  142. mapannounce 'map$,"Alpha : Alpha is approaching south. We found a number of mutants heading north towards Echo.",bc_map,0xCCCC00;
  143. sleep2 6000;
  144. mapannounce 'map$,"Est : Reception sensitivity is good, Echo prepare for response, and report when anything occurs.",bc_map,0x00EEEE;
  145. sleep2 6000;
  146. mapannounce 'map$,"Alpha : Alpha found a number of mutants on southern drainage. We're going to engage in battle.",bc_map,0xCCCC00;
  147. sleep2 9000;
  148. mapannounce 'map$,"Est : ---Roger.",bc_map,0x00EEEE;
  149. sleep2 3000;
  150. mapannounce 'map$,"Est : Alpha, send a transmission after you're done with the engagement.",bc_map,0x00EEEE;
  151. sleep2 6000;
  152. mapannounce 'map$,"Alpha : The drainage channel is now clear of mutants. Residual biological experiments were confirmed. We are preparing for the second engagement.",bc_map,0xCCCC00;
  153. sleep2 6000;
  154. mapannounce 'map$,"Est : Alpha, roger. Echo, status report.",bc_map,0x00EEEE;
  155. sleep2 3000;
  156. mapannounce 'map$,"Est : " + strcharinfo(0) + "!! Response your current situation!!",bc_map,0x00EEEE;
  157. 'ocp = 1;
  158. specialeffect EF_BIG_PORTAL;
  159. end;
  160. OnEvent02:
  161. sleep2 3000;
  162. mapannounce 'map$,"Est : Echo's reception is not smooth. Re-transmit the message.",bc_map,0x00EEEE;
  163. sleep2 10000;
  164. mapannounce 'map$,"Alpha : It's an ambush! Current coordinates are are Oscar Sierra 9...@$%**!",bc_map,0xCCCC00;
  165. sleep2 6000;
  166. mapannounce 'map$,"Est : Alpha retransmit your coordinates. Alpha!!! Please respond!!.",bc_map,0x00EEEE;
  167. sleep2 6000;
  168. mapannounce 'map$,"Alpha : ---- Tchhhhhhh ----",bc_map,0xCCCC00;
  169. sleep2 6000;
  170. mapannounce 'map$,"Est : Damn!... Echo, check if you can get support to Alpha's coordinates.",bc_map,0xCCCC00;
  171. sleep2 3000;
  172. mapannounce 'map$,"Est : " + strcharinfo(0) + "! Check Alpha's coordinates if it's available!",bc_map,0x00EEEE;
  173. 'ocp = 3;
  174. specialeffect EF_BIG_PORTAL;
  175. end;
  176. OnEvent03:
  177. sleep2 6000;
  178. mapannounce 'map$,"?????? : This is Foxtrot. Ground artillery support has been prepared. Please send the coordinates that needs support.",bc_map,0x00FF44;
  179. sleep2 6000;
  180. mapannounce 'map$,"Est : Alpha is unresponsive. " + strcharinfo(0) + " please support them. The coordinates are Oscar Sierra 32 356",bc_map,0x00EEEE;
  181. sleep2 6000;
  182. specialeffect EF_CLOUD4,AREA,instance_npcname("#ocp_rebel_5");
  183. mapannounce 'map$,"?????? : Foxtrot reporting, coordinates received. Please be careful to hit only the mutants.",bc_map,0x00FF44;
  184. sleep2 6000;
  185. mapannounce 'map$,"?????? : In 3 seconds, the mutant only ground artillery will be sent on the side of Echo.",bc_map,0x00FF44;
  186. sleep2 3000;
  187. for (.@i = 1; .@i < 26; .@i++) {
  188. specialeffect EF_METEORSTORM,AREA,instance_npcname("#ocp_rebel_" + .@i);
  189. killmonster 'map$,instance_npcname("#171_ocp_mob")+"::OnStoryKill";
  190. sleep2 300;
  191. }
  192. killmonster 'map$,instance_npcname("#171_ocp_mob")+"::OnPoisonKill";
  193. sleep2 1000;
  194. mapannounce 'map$,"?????? : Echo-coordinates mutant artillery support is complete.",bc_map,0x00FF44;
  195. sleep2 6000;
  196. mapannounce 'map$,"Est : Engagement on our side has ended.",bc_map,0x00EEEE;
  197. sleep2 6000;
  198. mapannounce 'map$,"Est : I will send the estimated coordinates of their last contact point using the radio. Please send support after getting the information on the radio.",bc_map,0x00EEEE;
  199. sleep2 3000;
  200. 'ocp = 5;
  201. specialeffect EF_BIG_PORTAL;
  202. donpcevent instance_npcname("#os_occupation_control") + "::OnStory03";
  203. end;
  204. }
  205. 1@os_a,52,177,3 script #171_ocp_dev_1 4_SCR_MT_ROBOTS,3,3,{
  206. if ('ocp == 5) {
  207. mes "## Send Message Input ##";
  208. next;
  209. select("There is no trace of alpha. Only the radio.");
  210. 'ocp = 6;
  211. mapannounce 'map$,strcharinfo(0) + " : There is no trace of alpha. Only the radio is here.",bc_map,0xEE66EE;
  212. sleep2 4000;
  213. mapannounce 'map$,"Est : " + strcharinfo(0) + ". Please look around if there are any traces left.",bc_map,0x00EEEE;
  214. sleep2 3000;
  215. select("Nothing in particular.");
  216. mapannounce 'map$,strcharinfo(0) + " : Nothing in particular.",bc_map,0xEE66EE;
  217. sleep2 3000;
  218. mapannounce 'map$,"Est : Bravo has completed the search on the east side.",bc_map,0x00EEEE;
  219. sleep2 4000;
  220. mapannounce 'map$,"Est : We are going to move south. I'll transmit the new coordinates. Please prepare yourselves for an engagement.",bc_map,0x00EEEE;
  221. mes "## Coordinates Received ##";
  222. enablenpc instance_npcname("#171_ocp_wrp_0");
  223. hideonnpc instance_npcname("#171_ocp_wrp_0");
  224. donpcevent instance_npcname("#171_ocp_wrp_0") + "::OnMobSpawn";
  225. initnpctimer instance_npcname("#171_ocp_wrp_0");
  226. }
  227. navigateto("1@os_a",84,256);
  228. end;
  229. OnTouch:
  230. if ('ocp == 5)
  231. npctalk "Est : " + strcharinfo(0) + " can you hear me? If you can, please respond.";
  232. end;
  233. }
  234. 1@os_a,84,256,5 script #171_ocp_wrp_0 4_ENERGY_BLUE,4,4,{
  235. end;
  236. OnTouch:
  237. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnMobKill";
  238. if (getd("'" + strnpcinfo(2)) && !mobcount('map$,.@event$)) {
  239. disablenpc();
  240. .@id = atoi(replacestr(strnpcinfo(2),"171_ocp_wrp_",""));
  241. if (.@id < 2) {
  242. enablenpc instance_npcname("#171_ocp_wrp_" + (.@id + 1));
  243. hideonnpc instance_npcname("#171_ocp_wrp_" + (.@id + 1));
  244. donpcevent instance_npcname("#171_ocp_wrp_" + (.@id + 1)) + "::OnSummon";
  245. }else
  246. donpcevent instance_npcname("#171_ocp_wrp_2") + "::OnBossSummon";
  247. switch (.@id) {
  248. case 0:
  249. monster 'map$,144,275,"",2536,1,instance_npcname("#171_ocp_mob") + "::OnPoisonKill";
  250. navigateto("1@os_a",163,266);
  251. mapannounce 'map$,"Est : " + strcharinfo(0) + ", can you hear me?",bc_map,0x00EEEE;
  252. sleep2 3000;
  253. mapannounce 'map$,"Est : I transmitted the second search coordinates. Be careful not to lose your records.",bc_map,0x00EEEE;
  254. sleep2 6000;
  255. mapannounce 'map$,"Est : " + strcharinfo(0) + ", check if there are any traces around there.",bc_map,0x00EEEE;
  256. initnpctimer instance_npcname("#171_ocp_wrp_1");
  257. sleep2 3000;
  258. mapannounce 'map$,strcharinfo(0) + " : I have found a troop of mutants along the route.",bc_map,0xEE66EE;
  259. sleep2 3000;
  260. mapannounce 'map$,"Est : If you see a mutant who can communicate, immediately capture it. Other than that... You can subdue them all.",bc_map,0x00EEEE;
  261. break;
  262. case 1:
  263. navigateto("1@os_a",138,174);
  264. initnpctimer instance_npcname("#171_ocp_wrp_2");
  265. mapannounce 'map$,"Est : " + strcharinfo(0) + ", are you still alive?",bc_map,0x00EEEE;
  266. sleep2 3000;
  267. mapannounce 'map$,strcharinfo(0) + " : Team Echo is still alive. We are moving towards the southern point.",bc_map,0xEE66EE;
  268. sleep2 3000;
  269. mapannounce 'map$,"Est : Bravo is also moving towards there, we're skipping the eastern point.",bc_map,0x00EEEE;
  270. sleep2 3000;
  271. mapannounce 'map$,strcharinfo(0) + " : I hope that Bravo arrive safely.",bc_map,0xEE66EE;
  272. sleep2 3000;
  273. mapannounce 'map$,"Est : I wish the same for Team Echo.",bc_map,0x00EEEE;
  274. break;
  275. case 2:
  276. navigateto("1@os_a",161,178);
  277. mapannounce 'map$,"???? : Grrr...",bc_map,0xFF9999;
  278. }
  279. }
  280. end;
  281. OnMobSpawn:
  282. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnMobKill";
  283. setarray .@xy,63,214,20349,63,230,20349,63,218,20350,63,222,20350,63,226,20350,63,234,20350,63,238,20350,63,242,20350;
  284. for (.@i = 0; .@i < getarraysize(.@xy); .@i += 3)
  285. monster 'map$,.@xy[.@i],.@xy[.@i+1],"Incomplete " + getmonsterinfo(.@xy[.@i+2],MOB_NAME),.@xy[.@i+2],1,.@event$;
  286. end;
  287. OnSummon:
  288. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnMobKill";
  289. .@id = atoi(replacestr(strnpcinfo(2),"171_ocp_wrp_",""));
  290. switch (.@id) {
  291. case 1: setarray .@xy,146,266,20349,166,266,20349,170,266,20349,154,266,20349,126,266,20350,130,266,20350,134,266,20350,138,266,20350,142,266,20350,150,266,20350,158,266,20350,162,266,20350,174,266,20350; break;
  292. case 2: setarray .@xy,151,243,20348,144,216,20349,141,213,20349,137,210,20349,132,207,20349,139,200,20349,146,199,20349,139,196,20349,146,216,20350,141,213,20350,135,213,20350,137,212,20350,143,203,20350,139,209,20350,134,199,20350;
  293. }
  294. for (.@i = 0; .@i < getarraysize(.@xy); .@i += 3)
  295. monster 'map$,.@xy[.@i],.@xy[.@i+1],"Incomplete " + getmonsterinfo(.@xy[.@i+2],MOB_NAME),.@xy[.@i+2],1,.@event$;
  296. end;
  297. OnMobKill:
  298. end;
  299. OnBossSummon:
  300. setarray .@xy,161,178,20347;
  301. .@event$ = instance_npcname("#171_ocp_mob") + "::OnBossKillStory";
  302. monster 'map$,.@xy[.@i],.@xy[.@i+1],"????",.@xy[.@i+2],1,.@event$;
  303. getunitdata $@mobid[0],.@boss_data;
  304. .@DAMAGE = (.@boss_data[UMOB_MAXHP]/10) * 9;
  305. .@HP = (.@boss_data[UMOB_MAXHP] - .@DAMAGE)/2;
  306. setunitdata $@mobid[0],UMOB_HP,.@HP;
  307. end;
  308. OnTimer10000:
  309. stopnpctimer;
  310. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnMobKill";
  311. .@id = atoi(replacestr(strnpcinfo(2),"171_ocp_wrp_",""));
  312. .@count = mobcount('map$,.@event$);
  313. if (.@count) {
  314. mapannounce 'map$,"Remaining Mutant Survivor - " + .@count,bc_map,0xFFFF00;
  315. initnpctimer;
  316. } else {
  317. mapannounce 'map$,"Intermediate point secured.",bc_map,0xFFFF00;
  318. setd("'" + strnpcinfo(2),1);
  319. hideoffnpc();
  320. }
  321. end;
  322. }
  323. 1@os_a,163,266,5 duplicate(#171_ocp_wrp_0) #171_ocp_wrp_1 4_ENERGY_BLUE,4,4
  324. 1@os_a,138,174,5 duplicate(#171_ocp_wrp_0) #171_ocp_wrp_2 4_ENERGY_BLUE,4,4
  325. 1@os_a,162,176,5 script #171_ocp_miguel 4_EP17_MIGUEL_D,{
  326. if (isbegin_quest(12452) == 1) {
  327. mes "^0000FFI think he stopped breathing.^000000";
  328. close;
  329. }
  330. cutin "ep171_miguel01",0;
  331. mes "[???]";
  332. mes "Krrr. I guess you're not someone of Regenschirm. Can you move aside, I have something to say to that person.";
  333. next;
  334. cutin "",255;
  335. mes "^0000FFThe mutant who's life is running out is trying to say something.^000000";
  336. close;
  337. }
  338. 1@os_a,165,176,3 script Est#171_ocp_1 4_F_ESTLOVELOY,{
  339. if (isbegin_quest(12452) == 1) {
  340. cutin "ep162_est01",2;
  341. mes "[Est]";
  342. mes strcharinfo(0) + ", I didn't think I'd survive and see you again. You're pretty good.";
  343. next;
  344. select("Ask about the fallen mutant.");
  345. mes "[Est]";
  346. mes "Well, even if you ask me... it's the first time that I'll talk to a mutant.";
  347. emotion ET_SCRATCH;
  348. next;
  349. cutin "ep171_miguel03",0;
  350. mes "[???]";
  351. mes "... Est?";
  352. next;
  353. cutin "ep162_est01",2;
  354. mes "[Est]";
  355. mes "How do you know my name? Who are you! I'll finish you painlessly, so be honest.";
  356. emotion ET_SURPRISE;
  357. next;
  358. cutin "ep171_miguel03",0;
  359. mes "[???]";
  360. mes "Est... Rebellion Ghost Squad... Do you remember uncle Miguel?";
  361. next;
  362. cutin "ep162_est01",2;
  363. mes "[Est]";
  364. mes "How do you know that name...";
  365. next;
  366. cutin "ep171_miguel03",0;
  367. mes "[???]";
  368. mes "Ha... haha... you still remember.";
  369. next;
  370. mes "^0000FFThe identification tag on the mutant's neck stands out.^000000";
  371. next;
  372. select("Get the identification tag and hand it to Est.");
  373. cutin "ep162_est01",2;
  374. mes "[Est]";
  375. mes "Mi... guel...?";
  376. next;
  377. cutin "ep171_miguel03",0;
  378. mes "[Miguel]";
  379. mes "... Est, the last thing I'll see... is your face... That's a relief.";
  380. next;
  381. cutin "ep162_est01",2;
  382. mes "[Est]";
  383. mes "Uncle Miguel!? How did this happen!";
  384. next;
  385. cutin "ep171_miguel03",0;
  386. mes "[Miguel]";
  387. mes "Before I die... I always wanted to see my old colleagues... You fulfilled my wish.";
  388. next;
  389. cutin "ep162_est01",2;
  390. mes "[Est]";
  391. mes "Uncle! What is this! What happened to you?";
  392. next;
  393. cutin "ep171_miguel01",0;
  394. mes "[Miguel]";
  395. mes "Ugh... I don't have much time left... Listen carefully, Est.";
  396. next;
  397. mes "[Miguel]";
  398. mes "Somewhere in here... the mad research results of Regenschirm... can be found somewhere in here.";
  399. next;
  400. mes "[Miguel]";
  401. mes "Find everything... and you'll know what happened to me... you'll see things that can't be explained here.";
  402. next;
  403. cutin "ep162_est01",2;
  404. mes "[Est]";
  405. mes "Uncle! Wake up!! Let's go out. If we go out, we can save you!";
  406. next;
  407. cutin "ep171_miguel02",0;
  408. mes "[Miguel]";
  409. mes "Est... you still have a big heart... that kind of feeling... on the battlefield... I taught you...";
  410. next;
  411. cutin "ep162_est01",2;
  412. mes "[Est]";
  413. mes "Uncle! Uncle!!";
  414. next;
  415. cutin "",255;
  416. mes "[Miguel]";
  417. mes "...";
  418. if (isbegin_quest(12452) == 1)
  419. completequest 12452;
  420. getitem 25668,1;
  421. getitem 25723,5;
  422. getexp 300000,300000;
  423. close;
  424. }
  425. select("Ask about Miguel");
  426. cutin "ep162_est01",2;
  427. mes "[Est]";
  428. mes strcharinfo(0) +", I'm sorry but I don't feel like talking about him right now.";
  429. next;
  430. select("Ask about the records.");
  431. mes "[Est]";
  432. mes "I checked the northeast section and saw a place over the railway that seemed to be a research facility.";
  433. next;
  434. mes "[Est]";
  435. mes "Maybe the research Miguel was talking about... is somewhere in there. I'm going to have to start another operation right away.";
  436. next;
  437. mes "[Est]";
  438. mes "I don't think there will be anything else to do here.";
  439. next;
  440. select("I want to go back.");
  441. warp "sp_cor",162,63;
  442. end;
  443. }
  444. 1@os_a,187,195,5 script Operation Officer#171_osd 4_M_ILYA,{
  445. if (isbegin_quest(12454) == 1) {
  446. mes "[Operation Officer]";
  447. mes "You've dealt with a CP7 Mutant by yourself... did the battle went well?";
  448. next;
  449. mes "[Operation Officer]";
  450. mes "Here are the supplies and experience given to the troops that joined the operation. Take it.";
  451. erasequest 12454;
  452. getexp 150000,150000;
  453. getitem 25669,5;
  454. getitem 25723,1;
  455. next;
  456. mes "[Operation Officer]";
  457. mes "Even though it's a CP7 Rated, sorry I couldn't give you more experience.";
  458. close;
  459. }
  460. mes "[Operation Officer]";
  461. mes "Let's go out now. We need to prepare for repairs quickly.";
  462. next;
  463. if (select("Look around more.:Go Out") == 1) {
  464. mes "[Operation Officer]";
  465. mes "Is that so? Don't delay it for too long.";
  466. close;
  467. }
  468. warp "sp_cor",162,63;
  469. end;
  470. }
  471. 1@os_a,1,1,0 script #171_ocp_mob HIDDEN_WARP_NPC,{
  472. end;
  473. OnSummonStory01:
  474. setarray .@mob,20348,20349,20350;
  475. for (.@i = 0; .@i < 12; .@i++) { //Summons max 12 mobs randomly
  476. .@id = .@mob[rand(3)];
  477. areamonster 'map$,26,349,37,357,"Incomplete " + getmonsterinfo(.@id,MOB_NAME),.@id,1,instance_npcname(strnpcinfo(0))+"::OnStoryKill";
  478. sleep 10000;
  479. }
  480. end;
  481. OnStoryKill:
  482. end;
  483. OnSummon:
  484. .@id = 'osd;
  485. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnMobKill";
  486. switch (.@id) {
  487. case 1: setarray .@xy,334,66,20348,291,95,20348,287,97,20348,280,95,20348,272,91,20348,265,89,20349,265,93,20349,263,95,20349,267,92,20350; break;
  488. case 2: setarray .@xy,252,82,20348,257,72,20348,260,70,20348,254,64,20348,263,83,20350,254,70,20350,259,66,20350; break;
  489. case 3: setarray .@xy,205,90,20348,201,90,20348,208,79,20348,204,71,20348,203,81,20348,200,81,20348,211,80,20349,202,75,20349,210,88,20349,207,93,20349,200,77,20349,206,79,20349,207,78,20350,208,83,20350; break;
  490. case 4: setarray .@xy,209,118,20348,208,129,20348,214,136,20348,222,131,20348,215,134,20348,204,137,20348,205,127,20349,222,127,20349,225,136,20349,221,132,20349,206,132,20349,217,132,20349,208,135,20350,216,129,20350,210,136,20350; break;
  491. case 5: setarray .@xy,257,153,20348,263,156,20348,261,158,20348,256,161,20348,252,161,20348,246,156,20349,240,156,20349,248,157,20349,256,158,20349,243,156,20350,249,156,20350,237,153,20350,252,161,20350,253,161,20350; break;
  492. case 6: setarray .@xy,200,190,20348,213,189,20348,227,190,20348,206,191,20348,201,189,20348,198,183,20348,200,170,20348,197,187,20349,200,191,20349,215,190,20349,207,190,20349,209,183,20349,218,184,20349,212,184,20349,229,185,20349,219,184,20350,199,183,20350,207,184,20350,206,182,20350,226,188,20350,203,187,20350,197,183,20350; break;
  493. case 7: donpcevent instance_npcname(strnpcinfo(0)) + "::OnSummonBoss"; end;
  494. }
  495. if (.@id == 1) {
  496. 'osd = 2;
  497. donpcevent instance_npcname(strnpcinfo(0)) + "::OnSummon";
  498. }
  499. if (.@id != 2)
  500. donpcevent instance_npcname(strnpcinfo(0)) + "::OnEvent0" + .@id;
  501. for (.@i = 0; .@i < getarraysize(.@xy); .@i += 3)
  502. monster 'map$,.@xy[.@i],.@xy[.@i+1],"CP" + .@id + " " + getmonsterinfo(.@xy[.@i+2],MOB_NAME),.@xy[.@i+2],1,.@event$;
  503. end;
  504. OnMobKill:
  505. end;
  506. OnTimer10000:
  507. stopnpctimer;
  508. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnMobKill";
  509. .@count = mobcount('map$,.@event$);
  510. if (.@count) {
  511. mapannounce 'map$,"Remaining Mutant Survivor - " + .@count,bc_map,0xFFFF00;
  512. initnpctimer;
  513. } else {
  514. mapannounce 'map$,"Sector " + ('osd - 1) + " secured.",bc_map,0x00FF00;
  515. .@id = 'osd + 1;
  516. 'osd = .@id;
  517. if (.@id == 5)
  518. killmonster 'map$,instance_npcname(strnpcinfo(0)) + "::OnPoisonKill";
  519. donpcevent instance_npcname(strnpcinfo(0)) + "::OnSummon";
  520. }
  521. end;
  522. OnEvent01:
  523. mapannounce 'map$,"Operation Officer : The Alpha team should be prepare to fight the moment you felt a Mutant's reaction near you.",bc_map,0x00EEEE;
  524. sleep 6000;
  525. mapannounce 'map$,"Operation Officer : There are no civilian in the main search area, so you can safely subdue any moving creatures.",bc_map,0x00EEEE;
  526. sleep 6000;
  527. mapannounce 'map$,"Operation Officer : Charlie, and Delta Team, if there is an engagement situation, immediately go into battle without reporting.",bc_map,0x00EEEE;
  528. initnpctimer;
  529. end;
  530. OnEvent03:
  531. mapannounce 'map$,"Operation Officer : We received a precaution within this area.",bc_map,0x00EEEE;
  532. sleep 6000;
  533. mapannounce 'map$,"Operation Officer : A mutant labeled with A013 is a independent mutant unrelated to its base.",bc_map,0x00EEEE;
  534. sleep 6000;
  535. mapannounce 'map$,"Operation Officer : It is said that it's combat ability is stronger than of ordinary mutants, avoid combat unless you are willing to fight.",bc_map,0x00EEEE;
  536. initnpctimer;
  537. end;
  538. OnEvent04:
  539. mapannounce 'map$,"Operation Officer : Be careful when dealing with CP4 or higher grade mutants.",bc_map,0x00EEEE;
  540. sleep 6000;
  541. mapannounce 'map$,"Operation Officer : They are the same type as CP1, but their destructive power increases with their grade. Be careful not to be surrounded.",bc_map,0x00EEEE;
  542. initnpctimer;
  543. end;
  544. OnEvent05:
  545. mapannounce 'map$,"Operation Officer : Sector 4 is said to be a confidential documents storage room.",bc_map,0x00EEEE;
  546. sleep 6000;
  547. mapannounce 'map$,"Operation Officer : The advanced team already searched the area, but there was nothing special, so focus on the battle and be careful to not get surrounded.",bc_map,0x00EEEE;
  548. initnpctimer;
  549. end;
  550. OnEvent06:
  551. mapannounce 'map$,"Operation Officer : Bravo Team. Is engaged with CP6 Mutants. Their offense is very powerful.",bc_map,0x00EEEE;
  552. sleep 6000;
  553. mapannounce 'map$,"Operation Officer : Alpha, Charlie, Delta team should also be careful. Don't get surrounded by CP6 Grade mutants!",bc_map,0x00EEEE;
  554. initnpctimer;
  555. end;
  556. OnSummonBoss:
  557. sleep 3000;
  558. mapannounce 'map$,"Operation Officer : To all team. If you find an S-Class mutant, please engage in the battle immediately.",bc_map,0x00EEEE;
  559. sleep 3000;
  560. mapannounce 'map$,"???? : Grrr...",bc_map,0xFF9999;
  561. sleep 3000;
  562. mapannounce 'map$,"Operation Officer : Be careful, it's difficult to deal with mutants with high CP grade!",bc_map,0x00EEEE;
  563. monster 'map$,205,188,"CP7 Miguel",20346,1,instance_npcname(strnpcinfo(0)) + "::OnBossKill";
  564. 'boss_gid = $@mobid[0];
  565. donpcevent instance_npcname(strnpcinfo(0)) + "::OnBossSkill";
  566. end;
  567. OnBossKillStory:
  568. enablenpc instance_npcname("#171_ocp_miguel");
  569. enablenpc instance_npcname("Est#171_ocp_1");
  570. end;
  571. OnBossKill:
  572. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnSummonKill";
  573. killmonster 'map$,.@event$;
  574. mapannounce 'map$,"Operation Officer : Guess I'm a little late!",bc_map,0x00EEEE;
  575. enablenpc instance_npcname("Operation Officer#171_osd");
  576. end;
  577. OnBossSkill:
  578. .@gid = 'boss_gid;
  579. freeloop(true);
  580. while(unitexists(.@gid)) {
  581. if (unitexists(.@gid)) {
  582. getunitdata .@gid,.@data;
  583. if (.@data[UMOB_HP] <= ((.@data[UMOB_MAXHP]/10) * 7)) {
  584. donpcevent instance_npcname(strnpcinfo(0)) + "::OnSummonSkill";
  585. break;
  586. }
  587. }
  588. sleep 100;
  589. }
  590. freeloop(false);
  591. end;
  592. OnSummonSkill:
  593. .@gid = 'boss_gid;
  594. .@event$ = instance_npcname(strnpcinfo(0)) + "::OnSummonKill";
  595. freeloop(true);
  596. while(unitexists(.@gid)) {
  597. sleep 100;
  598. if(!unitexists(.@gid))
  599. end;
  600. getunitdata .@gid,.@data;
  601. if (.@data[UMOB_HP] <= ((.@data[UMOB_MAXHP]/10) * 3) && 'skill == 0)
  602. 'skill = 1;
  603. if (.@data[UMOB_X] == 'gid_x && .@data[UMOB_Y] == 'gid_y)
  604. continue;
  605. killmonster 'map$,.@event$;
  606. if (unitexists(.@gid)) {
  607. 'gid_x = .@data[UMOB_X];
  608. 'gid_y = .@data[UMOB_Y];
  609. monster 'map$,.@data[UMOB_X] - 7,.@data[UMOB_Y],"",20351,1,.@event$;
  610. monster 'map$,.@data[UMOB_X] + 7,.@data[UMOB_Y],"",20351,1,.@event$;
  611. monster 'map$,.@data[UMOB_X],.@data[UMOB_Y] - 7,"",20351,1,.@event$;
  612. monster 'map$,.@data[UMOB_X],.@data[UMOB_Y] + 7,"",20351,1,.@event$;
  613. if ('skill) {
  614. monster 'map$,.@data[UMOB_X] - 5,.@data[UMOB_Y] + 5,"",20351,1,.@event$;
  615. monster 'map$,.@data[UMOB_X] + 5,.@data[UMOB_Y] + 5,"",20351,1,.@event$;
  616. monster 'map$,.@data[UMOB_X] - 5,.@data[UMOB_Y] - 5,"",20351,1,.@event$;
  617. monster 'map$,.@data[UMOB_X] + 5,.@data[UMOB_Y] - 5,"",20351,1,.@event$;
  618. }
  619. } else
  620. break;
  621. }
  622. freeloop(false);
  623. end;
  624. OnSummonKill:
  625. end;
  626. OnPoisonStory:
  627. monster 'map$,44,340,"",2536,1,instance_npcname(strnpcinfo(0)) + "::OnPoisonKill";
  628. monster 'map$,44,344,"",2536,1,instance_npcname(strnpcinfo(0)) + "::OnPoisonKill";
  629. monster 'map$,43,360,"",2536,1,instance_npcname(strnpcinfo(0)) + "::OnPoisonKill";
  630. end;
  631. OnPoisonDaily:
  632. monster 'map$,252,107,"",2536,1,instance_npcname(strnpcinfo(0)) + "::OnPoisonKill";
  633. monster 'map$,255,107,"",2536,1,instance_npcname(strnpcinfo(0)) + "::OnPoisonKill";
  634. end;
  635. OnPoisonKill:
  636. end;
  637. }
  638. 1@os_a,26,345,7 duplicate(dummy_npc) #ocp_rebel_1 4_M_GUNSLINGER3
  639. 1@os_a,38,357,1 duplicate(dummy_npc) #ocp_rebel_2 4_F_GUNSLINGER3
  640. 1@os_a,29,348,7 duplicate(dummy_npc) #ocp_rebel_3 4_M_REBELLION2
  641. 1@os_a,29,351,7 duplicate(dummy_npc) #ocp_rebel_4 4_M_REBELLION2
  642. 1@os_a,32,351,7 duplicate(dummy_npc) #ocp_rebel_5 4_M_REBELLION3
  643. 1@os_a,29,345,7 duplicate(dummy_npc) #ocp_rebel_6 4_M_REBELLION2
  644. 1@os_a,26,348,7 duplicate(dummy_npc) #ocp_rebel_7 4_M_REBELLION2
  645. 1@os_a,29,357,7 duplicate(dummy_npc) #ocp_rebel_8 4_M_REBELLION2
  646. 1@os_a,38,348,1 duplicate(dummy_npc) #ocp_rebel_9 4_F_GUNSLINGER3
  647. 1@os_a,32,348,7 duplicate(dummy_npc) #ocp_rebel_10 4_M_REBELLION3
  648. 1@os_a,26,351,7 duplicate(dummy_npc) #ocp_rebel_11 4_M_GUNSLINGER3
  649. 1@os_a,35,345,1 duplicate(dummy_npc) #ocp_rebel_12 4_F_GUNSLINGER2
  650. 1@os_a,35,348,1 duplicate(dummy_npc) #ocp_rebel_13 4_F_GUNSLINGER2
  651. 1@os_a,26,357,7 duplicate(dummy_npc) #ocp_rebel_14 4_M_GUNSLINGER3
  652. 1@os_a,26,354,7 duplicate(dummy_npc) #ocp_rebel_15 4_M_GUNSLINGER3
  653. 1@os_a,32,354,7 duplicate(dummy_npc) #ocp_rebel_16 4_M_REBELLION3
  654. 1@os_a,29,354,7 duplicate(dummy_npc) #ocp_rebel_17 4_M_REBELLION2
  655. 1@os_a,35,351,1 duplicate(dummy_npc) #ocp_rebel_18 4_F_GUNSLINGER2
  656. 1@os_a,35,354,1 duplicate(dummy_npc) #ocp_rebel_19 4_F_GUNSLINGER2
  657. 1@os_a,32,345,7 duplicate(dummy_npc) #ocp_rebel_20 4_M_REBELLION3
  658. 1@os_a,38,351,1 duplicate(dummy_npc) #ocp_rebel_21 4_F_GUNSLINGER3
  659. 1@os_a,35,357,1 duplicate(dummy_npc) #ocp_rebel_22 4_F_GUNSLINGER2
  660. 1@os_a,38,354,1 duplicate(dummy_npc) #ocp_rebel_23 4_F_GUNSLINGER3
  661. 1@os_a,38,345,1 duplicate(dummy_npc) #ocp_rebel_24 4_F_GUNSLINGER3
  662. 1@os_a,32,357,7 duplicate(dummy_npc) #ocp_rebel_25 4_M_REBELLION3