summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2020-02-09 22:46:11 +0100
committerGitHub <noreply@github.com>2020-02-09 22:46:11 +0100
commit5ee70096cecfbee98425248db1338f28ffe6d73a (patch)
tree00aebd209cae0c7d339fe3a4c00ea856219cc899 /npc
parent38f33af5049120c741196349505042e1485d11b0 (diff)
parentbfdeedaf09f87a610c9725127b92815e4dff1719 (diff)
downloadhercules-5ee70096cecfbee98425248db1338f28ffe6d73a.tar.gz
hercules-5ee70096cecfbee98425248db1338f28ffe6d73a.tar.bz2
hercules-5ee70096cecfbee98425248db1338f28ffe6d73a.tar.xz
hercules-5ee70096cecfbee98425248db1338f28ffe6d73a.zip
Merge pull request #2621 from dastgirp/script/rebellion
Added Rebellion Job Quest
Diffstat (limited to 'npc')
-rw-r--r--npc/re/jobs/2e/rebellion.txt1035
-rw-r--r--npc/re/scripts_jobs.conf1
2 files changed, 1036 insertions, 0 deletions
diff --git a/npc/re/jobs/2e/rebellion.txt b/npc/re/jobs/2e/rebellion.txt
new file mode 100644
index 000000000..53beb11f5
--- /dev/null
+++ b/npc/re/jobs/2e/rebellion.txt
@@ -0,0 +1,1035 @@
+//================= Hercules Script =======================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2020 Hercules Dev Team
+//= Copyright (C) Dastgir
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Rebellion Job Quest
+//================= Description ===========================================
+//= Job change Quest from Gunslinger -> Rebellion
+//================= Current Version =======================================
+//= 1.0
+//=========================================================================
+
+job_gun,1,1,1 script Administrator1 CLEAR_NPC,{
+ callfunc("F_GM_NPC");
+ mes("Please enter the password.");
+ .@success = callfunc("F_GM_NPC", 1854, 0);
+ if (.@sucess != 1)
+ close();
+
+ mes("[Time Administrator]");
+ mes("What time would you like to return?");
+ next();
+ .@select = select("Cancel", "Test monster spawn", "Start from beginning", "Furnace Zone", "Shooting Zone", "Complete the test");
+ if (.@select == 1) {
+ close();
+ } else if (.@select == 2) {
+ donpcevent("#target::OnStart");
+ donpcevent("#nontarget::OnStart");
+ close();
+ } else if (.@select == 4) {
+ .@questComplete = 12341;
+ } else if (.@select == 5) {
+ .@questComplete = 12342;
+ } else if (.@select == 6) {
+ .@questComplete = 12344;
+ }
+ for (.@i = 12340; .@i <= 12345; .@i++) {
+ erasequest(.@i);
+ if (.@i <= .@questComplete) {
+ setquest(.@i);
+ completequest(.@i);
+ }
+ }
+ close();
+
+OnInit:
+ disablenpc(strnpcinfo(NPC_NAME));
+ end;
+}
+
+// Warps
+job_gun,56,26,0 warp rebelroom#1 2,2,einbroch,49,97
+job_gun,18,10,0 warp rebelroom#2 2,2,job_gun,81,29
+job_gun,165,22,0 warp rebelroom#3 2,2,job_gun,196,35
+job_gun,197,49,0 warp rebelroom#4 2,2,job_gun,157,21
+
+job_gun,88,144,0 warp shootingrange#1 3,3,job_gun,93,123
+job_gun,105,97,0 warp shootingrange#2 3,3,job_gun,125,98
+job_gun,156,115,0 warp shootingrange#3 3,3,job_gun,157,137
+job_gun,152,154,0 warp shootingrange#4 3,3,job_gun,135,154
+job_gun,130,146,0 warp shootingrange#5 3,3,job_gun,120,130
+
+job_gun,165,18,1 script Furnace Controller#1 CLEAR_NPC,{
+ if (Class != Job_Gunslinger) {
+ mes("Only authorized user can do the operation.");
+ close();
+ }
+ if (getstatus(SC_MONSTER_TRANSFORM, 1) != G_L_SHECIL) {
+ mes("Not an authorized user. Abort the operation.");
+ close();
+ }
+ if (questprogress(12342) != 1) {
+ mes("Not an authorized user. Abort the operation.");
+ close();
+ }
+ mes("Do you want to dredge the mold up from the furnace?");
+ next();
+ if (select("Quit.", "Begin.") == 1) {
+ mes("Switch to the Standby mode.");
+ close();
+ }
+ hideonnpc("Furnace Controller#1");
+ donpcevent("Furnace Controller#2::OnStart");
+ mes("Initializing Furnace Controller ZX-3100...");
+ close();
+
+OnInit:
+ hideoffnpc("Furnace Controller#1");
+ end;
+}
+
+job_gun,214,36,1 script Auto Anvil#1 CLEAR_NPC,{
+ if (Class != Job_Gunslinger) {
+ mes("Only authorized user can do the operation.");
+ close();
+ }
+ if (countitem(Tiny_Flame) > 0) {
+ mes("Unauthorized firearm creation has been detected. Report to Manager Elwin.");
+ close();
+ }
+ if (checkweight(Tiny_Flame, 1) == 0) {
+ mes("You have too many items, please reduce them to continue.");
+ close();
+ }
+ if (getstatus(SC_MONSTER_TRANSFORM, 1) != G_L_SHECIL || countitem(Steel_Article_) <= 4 || questprogress(12342) != 1) {
+ mes("Not an authorized user. Abort the operation.");
+ close();
+ }
+
+ mes("Do you want to use the auto anvil and shape the standard Steel Artifacts into a firearm?");
+ next();
+ if (select("Quit.", "Begin.") == 1) {
+ mes("For your safety, please step away from the auto anvil.");
+ close();
+ }
+ if (rand(1, 10) > 6) {
+ specialeffect(EF_REPAIRWEAPON);
+ mes("You have successfully created a firearm using the auto anvil. ^ff0000Please report before your transformation expires^000000.");
+ delitem(Steel_Article_, 5);
+ getitem(Tiny_Flame, 1);
+ } else {
+ specialeffect(EF_SUI_EXPLOSION);
+ mes("Failed to create a firearm.");
+ delitem(Steel_Article_, 5);
+ }
+ close();
+
+OnInit:
+ hideoffnpc("Auto Anvil#1");
+ end;
+}
+
+job_gun,165,18,1 script Furnace Controller#2 CLEAR_NPC,{
+ mes("The system is busy dredging a completed mold from the furnace.");
+ close();
+
+OnInit:
+ hideonnpc("Furnace Controller#2");
+ end;
+
+OnStart:
+ hideoffnpc("Furnace Controller#2");
+ sleep(3000);
+ mapannounce("job_gun", "Furnace Controller: Dredging a mold up from the furnace... Workers, stand by at the production line.", bc_map, "0x00ff44");
+ sleep(500);
+ .@wh_start = 0;
+ while (true) {
+ if (.@wh_start >= 30)
+ break;
+
+ .@eff_rnd = rand(1, 100);
+ if (.@eff_rnd < 33) { // 0 - 32
+ donpcevent("Heating Furnace#3::OnStart");
+ } else if (.@eff_rnd > 66) { // 67-100
+ donpcevent("Heating Furnace#4::OnStart");
+ } else { // 33-66
+ donpcevent("Heating Furnace#5::OnStart");
+ }
+ sleep(200);
+ makeitem(Steel_Article, 1, "job_gun", rand(127, 143), rand(26, 29));
+ if (rand(1, 10) > 7) {
+ makeitem(Steel_Article_, 1, "job_gun", rand(127, 143), rand(26, 29));
+ }
+ .@wh_start += 1;
+ sleep(500);
+
+ }
+ sleep(2000);
+ mapannounce("job_gun", "Furnace Controller: Finishing the operation... Entering Standby mode in 15 seconds.", bc_map, "0x00ff44");
+ sleep(15000);
+ hideonnpc("Furnace Controller#2");
+ hideoffnpc("Furnace Controller#1");
+ end;
+}
+
+job_gun,130,31,1 script Heating Furnace#3 CLEAR_NPC,{
+ end;
+
+OnStart:
+ specialeffect(EF_FIREPILLAR);
+ sleep(500);
+ specialeffect(EF_FIREPILLARBOMB);
+ end;
+}
+
+job_gun,136,31,1 script Heating Furnace#4 CLEAR_NPC,{
+ end;
+
+OnStart:
+ specialeffect(EF_FIREPILLAR);
+ sleep(500);
+ specialeffect(EF_FIREPILLARBOMB);
+ end;
+}
+
+job_gun,141,31,1 script Heating Furnace#5 CLEAR_NPC,{
+ end;
+
+OnStart:
+ specialeffect(EF_FIREPILLAR);
+ sleep(500);
+ specialeffect(EF_FIREPILLARBOMB);
+ end;
+}
+
+function script F_summonTargetMonster {
+ .@monster_id = getarg(0);
+ .@max_mob_count = getarg(1);
+ .@monster_name$ = getarg(2);
+ .@event_name$ = getarg(3);
+ while(true) {
+ .@mob_dead_num = mobcount("job_gun", .@event_name$);
+ if (.@mob_dead_num >= .@max_mob_count)
+ break;
+
+ switch(rand(1, 5)) {
+ case 1:
+ .@mobx = rand(88, 99);
+ .@moby = rand(143, 147);
+ break;
+ case 2:
+ .@mobx = rand(92, 96);
+ .@moby = rand(95, 122);
+ break;
+ case 3:
+ .@mobx = rand(143, 159);
+ .@moby = rand(99, 100);
+ break;
+ case 4:
+ .@mobx = rand(157, 158);
+ .@moby = rand(137, 160);
+ break;
+ case 5:
+ .@mobx = rand(119, 134);
+ .@moby = rand(156, 160);
+ break;
+ }
+ monster("job_gun", .@mobx, .@moby, .@monster_name$, .@monster_id, 1, .@event_name$);
+ }
+ return;
+}
+
+job_gun,1,4,1 script #target CLEAR_NPC,{
+ end;
+
+OnStart:
+ killmonster("job_gun", "#target::OnTargetDead");
+ callfunc("F_summonTargetMonster", J_REB_SHECIL1, 16, _("Standard-issue Target"), "#target::OnTargetDead");
+ end;
+
+OnInit:
+ hideonnpc("#target");
+ callfunc("F_summonTargetMonster", J_REB_SHECIL1, 16, _("Standard-issue Target"), "#target::OnTargetDead");
+ end;
+
+OnTargetDead:
+ hideonnpc("#target");
+ callfunc("F_summonTargetMonster", J_REB_SHECIL1, 16, _("Standard-issue Target"), "#target::OnTargetDead");
+ end;
+}
+
+job_gun,1,5,1 script #nontarget CLEAR_NPC,{
+ end;
+OnStart:
+ killmonster("job_gun", "#nontarget::OnNonTargetDead");
+ hideonnpc("#nontarget");
+ callfunc("F_summonTargetMonster", J_REB_SHECIL2, 56, _("Defective Target"), "#nontarget::OnNonTargetDead");
+ end;
+
+OnInit:
+ hideonnpc("#nontarget");
+ callfunc("F_summonTargetMonster", J_REB_SHECIL2, 56, _("Defective Target"), "#nontarget::OnNonTargetDead");
+ end;
+
+OnNonTargetDead:
+ hideonnpc("#nontarget");
+ callfunc("F_summonTargetMonster", J_REB_SHECIL2, 56, _("Defective Target"), "#nontarget::OnNonTargetDead");
+ end;
+}
+
+moc_fild12,261,318,3 script Suspicious Man 4_M_MOCASS2,2,2,{
+ end;
+OnTouch:
+ if (Class != Job_Gunslinger || BaseLevel < 99 || JobLevel < 70)
+ end;
+ if (questprogress(12340) < 1) {
+ mes("[Suspicious Man]");
+ mes("Finally I've found you, Vagabond Spike! Your neck is mine!");
+ next();
+ select("Say what?");
+
+ mes("[Suspicious Man]");
+ mes("*Snort* Don't pretend like you don't know. Look at this poster! You're in it!");
+ next();
+ select("I see the resemblance, but that's not me.");
+
+ mesf("[%s]", strcharinfo(PC_NAME));
+ mes("Forget the resemblance. Where did you get that poster? I've never committed a crime.");
+ next();
+ mes("[Suspicious Man]");
+ mes("I knew you'd try to lie your way out.");
+ next();
+ mes("[Suspicious Man]");
+ mes("The ^0000ffEinbroch Private Pub^000000 has released that wanted poster. You have many bounty hunters like me on your heels.");
+ next();
+ mes("[Suspicious Man]");
+ mes("I don't care if you're the right one so long as you look it and I can take you dead or alive.");
+ next();
+ } else {
+ mes("[Suspicious Man]");
+ mes("It's you again! You've got guts to come back here!");
+ next();
+ }
+ switch (select("Make a run for it.", "Fight him.")) {
+ case 1:
+ mes("^0000ffI should run for now and think about this later.^000000");
+ close2();
+ break;
+ case 2:
+ mes("^0000ffHe's not the only bounty hunter after me, if he's telling the truth. I need time to strategize.^000000");
+ close2();
+ break;
+ }
+ setquest(12340);
+ warp("moc_fild12", 186, 83);
+ end;
+}
+
+einbroch,54,97,3 script Bouncer 4_M_REBELLION,2,2,{
+ if (Class != Job_Gunslinger) {
+ mes("[Bouncer]");
+ mes("No loitering around the venue.");
+ close();
+ }
+ if (questprogress(12340) < 1) {
+ mes("[Bouncer]");
+ mes("Under construction, can't get in.");
+ close();
+ } else if (questprogress(12340) == 1) {
+ mes("[Bouncer]");
+ mes("*Gasp* You! I thought you were already captured. Ooh, doesn't matter now. You're my Get Out of Jail Free card!");
+ next();
+ select("I'm not the criminal you think I am!");
+ mes("[Bouncer]");
+ mes("You aren't?");
+ next();
+ mes("^0000ffThe bouncer examines your face.^000000");
+ next();
+ mes("[Bouncer]");
+ mes("Hm, you bear a striking resemblance, though you don't look not as menacing as that criminal Spike");
+ next();
+ select("I want to talk to the poster publisher.");
+ mes("[Bouncer]");
+ mes("Your problem is a bit out of my league. Get in. If I find out you're the real deal all along, I'll see that you'll never see the outside again.");
+ close2();
+ warp("job_gun", 81, 29);
+ } else if (questprogress(12340) > 1) {
+ mes("[Bouncer]");
+ mes("You're back. Why?");
+ next();
+ if (select("I want in.", "I was passing by.") == 2) {
+ mes("[Bouncer]");
+ mes("You're silly.");
+ close();
+ }
+ mes("[Bouncer]");
+ mes("Go ahead. Stay out of trouble.");
+ close2();
+ warp("job_gun", 70, 28);
+ }
+ end;
+}
+
+job_gun,68,33,3 script Ruthless Rebellion 4_F_REBELLION,2,2,{
+ mes("[Ruthless Rebellion]");
+ mes("Do you know how to use a gun?");
+ close();
+}
+
+job_gun,78,33,6 script Suspicious Gunslinger 4_M_JOB_BLACKSMITH,2,2,{
+ mes("[Suspicious Gunslinger]");
+ mes("... ");
+ next();
+ mes("[Quiet Gunslinger]");
+ mes("Don't say I look like a blacksmith you know.");
+ close();
+}
+
+job_gun,74,24,6 script Drunken Man 4_M_LIEMAN,2,2,{
+ mes("[Drunken Man]");
+ mes("*Hiccups* Oh, I'm the owner here.");
+ mes("Oh wait, am I in the pub or someplace else? Zzz...");
+ close();
+}
+
+job_gun,64,33,6 script Anxious Man 4_M_ALCHE_A,2,2,{
+ mes("[Anxious Man]");
+ mes("Maybe I'm in the wrong place. This place doesn't look like a pub.");
+ close();
+}
+
+job_gun,86,29,3 script Kulbertinov 4_M_REBELLION,2,2,{
+ if (Class != Job_Gunslinger) {
+ mes("[Kulbertinov]");
+ mes("Are you looking for me?");
+ close();
+ }
+ if (questprogress(12340) < 1) {
+ mes("[Kulbertinov]");
+ mes("Can I help you?");
+ close();
+ } else if (questprogress(12340) == 1) {
+ mes("[Kulbertinov]");
+ mes("What do you want?");
+ next();
+ select("I'm mistaken for a criminal!");
+ mes("[Kulbertinov]");
+ mes("Wait a minute... Mwah hah hah!");
+ next();
+ mes("^0000ffHe scans your face, then guffaws.^000000");
+ next();
+ mes("[Kulbertinov]");
+ mes("I'm sorry. For a moment, I thought Spike came back to life. He was found dead three days ago.");
+ next();
+ select("He was captured already?");
+ mes("[Kulbertinov]");
+ mes("Yes, and the bounty hunter was already paid. The news hasn't spread, and you're the spitting image of him. Go figure.");
+ next();
+ select("You have to do something!");
+ mes("[Kulbertinov]");
+ mes("I'm sorry, but I can't talk to every single bounty hunter for you. Of course, I'm willing to compensate for your inconvenience.");
+ next();
+ mes("[Kulbertinov]");
+ mes("Hey, how about you join our ranks? At the very last, you won't get shot.");
+ next();
+ select("You want me become a bounty hunter?");
+ mes("[Kulbertinov]");
+ mes("No, bounty hunting is just a pastime. We're the experts of all the firearms in the world.");
+ next();
+ mes("[Kulbertinov]");
+ mes("Carefree spirits!");
+ mes("Magical spitfires!");
+ mes("We call ourselves the ^0000ffRebellion^000000.");
+ next();
+ mes("[Kulbertinov]");
+ mes("You look like you know how to use a gun. How'd you like to join our ranks? You won't have to worry about other bounty hunters anymore too.");
+ next();
+ switch (select("Let me think it over.", "I don't think I have a choice.")) {
+ case 1:
+ mes("[Kulbertinov]");
+ mes("You can think it over and over, but the answer won't change. Just take the offer.");
+ break;
+ case 2:
+ mes("[Kulbertinov]");
+ mes("Good thinking. Might as well do it now and get it over with.");
+ break;
+ }
+ next();
+ mes("[Kulbertinov]");
+ mes("Talk to Enwin Conick. She guides drifting spirits like you to the way of the Rebellion. I'll send word to her. Ah, and don't point your gun at her.");
+ setquest(12341);
+ completequest(12340);
+ } else if (questprogress(12340) > 1) {
+ mes("[Kulbertinov]");
+ mes("Do you have business with Elwin Conick?");
+ next();
+ if (select("No.", "Send me to Elwin Conick.") == 1) {
+ mes("[Kulbertinov]");
+ mes("All right. Care for a shot of vodka?");
+ close();
+ }
+ mes("[Kulbertinov]");
+ mes("Okay, I'll let her know.");
+ }
+ close2();
+ warp("job_gun", 19, 15);
+ end;
+}
+
+job_gun,19,24,3 script Elwin Conick#1 4_F_REBELLION,2,2,{
+ if (Class != Job_Gunslinger) {
+ mes("[Elwin Conick]");
+ mes("If you don't want to join Rebellions, just get out.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (questprogress(12341) == 1) {
+ mes("[Elwin Conick]");
+ mes("Do you to join us Rebellions?");
+ next();
+ mes("^0000ffThe short woman with keen eyes stares into your eyes.^000000");
+ next();
+ mes("[Elwin Conick]");
+ mes("Sign here.");
+ next();
+ mes("^0000ffThe undersigned party [_____] will not speak of the test even if he or she suffers injury, mutilation, or death in an unforeseen accident that may occur during the test.^000000");
+ next();
+ select("WHAT?!");
+ mes("[Elwin Conick]");
+ mes("Do you want join us or not?");
+ next();
+ if (select("I give up.", "...I'll sign.") == 1) {
+ mes("[Elwin Conick]");
+ mes("Your choice.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ mes("[Elwin Conick]");
+ mes("Good. Now, follow me.");
+ close2();
+ warp("job_gun", 117, 41);
+ end;
+ }
+ if (questprogress(12342) == 1) {
+ mes("[Elwin Conick]");
+ mes("Do you want to try again?");
+ next();
+ if (select("I give up.", "Do it.") == 1) {
+ mes("[Elwin Conick]");
+ mes("Your choice.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ mes("[Elwin Conick]");
+ mes("Follow me.");
+ close2();
+ warp("job_gun", 117, 41);
+ end;
+ }
+ if (questprogress(12343) == 1) {
+ mes("[Elwin Conick]");
+ mes("You still have Ivan's shooting test, do you want to try again?");
+ next();
+ if (select("I give up.", "Do it.") == 1) {
+ mes("[Elwin Conick]");
+ mes("It's not worth to give up, now go out and relax.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ mes("[Elwin Conick]");
+ mes("Remember to give your best.");
+ close2();
+ warp("job_gun", 120, 130);
+ end;
+ }
+ if (questprogress(12343) > 1) {
+ mes("[Elwin Conick]");
+ mes("Ivan's shooting test have not finished yet, do you want to try again?");
+ next();
+ if (select("I give up.", "Do it.") == 1) {
+ mes("[Elwin Conick]");
+ mes("It's not worth to give up, now go out and relax.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ mes("[Elwin Conick]");
+ mes("Remember to give your best.");
+ close2();
+ warp("job_gun", 120, 130);
+ end;
+ }
+ if (questprogress(12345) == 1) {
+ mes("[Elwin Conick]");
+ mes("Ivan is waiting for you, go find him.");
+ close2();
+ warp("job_gun", 120, 130);
+ end;
+ }
+ mes("[Elwin Conick]");
+ mes("You have no more test to take. Why don't you go out and have a drink?");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+}
+
+job_gun,117,46,3 script Elwin Conick#2 4_F_REBELLION,2,2,{
+ if (Class != Job_Gunslinger) {
+ mes("[Elwin Conick]");
+ mes("If you don't want to join Rebellions, just get out.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (getstatus(SC_MONSTER_TRANSFORM, 1) == G_L_SHECIL) {
+ mes("^0000ffYou are already in the test form. If you have finished all your tests, report to Elwin Conick in the Assembly Room^000000.");
+ close();
+ } else if (getstatus(SC_MONSTER_TRANSFORM, 1) > 1) {
+ mes("[Elwin Conick]");
+ mes("Look at yourself, do you really want to test?");
+ next();
+ mes("^0000ffElwin see you turn into another form and she is very angry. Wait for your current form ends, and then find her again.^000000");
+ next();
+ if (select("Wait.", "Go away.") == 1) {
+ mes("[Elwin Conick]");
+ mes("It's not worth to give up, now go out and relax..");
+ close();
+ }
+ mes("[Elwin Conick]");
+ mes("Come back when you aren't in any form.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (questprogress(12341) == 1) {
+ .@st_job1 = countitem(Steel_Article);
+ .@st_job2 = countitem(Steel_Article_);
+ if (.@st_job1 > 0) {
+ delitem(Steel_Article, .@st_job1);
+ mes("[Elwin Conick]");
+ mes("Any leftover Steel Artifacts must be returned after the test.");
+ close();
+ }
+ if (.@st_job2 > 0) {
+ delitem(Steel_Article_, .@st_job2);
+ mes("[Elwin Conick]");
+ mes("Any leftover Steel Artifacts must be returned after the test.");
+ close();
+ }
+ if (countitem(Tiny_Flame) > 0) {
+ delitem(Tiny_Flame, 1);
+ mes("[Elwin Conick]");
+ mes("Time over. You failed the test. Let me take all your leftover test materials.");
+ close();
+ }
+ setquest(12342);
+ completequest(12341);
+ .@showDialog = true;
+ } else if (questprogress(12342) == 1) {
+ .@st_job1 = countitem(Steel_Article);
+ .@st_job2 = countitem(Steel_Article_);
+ if (.@st_job1 > 0) {
+ delitem(Steel_Article, .@st_job1);
+ mes("[Elwin Conick]");
+ mes("Any leftover Steel Artifacts must be returned after the test.");
+ close();
+ }
+ if (.@st_job2 > 0) {
+ delitem(Steel_Article_, .@st_job2);
+ mes("[Elwin Conick]");
+ mes("Time over. You failed the test. Let me take all your leftover test materials.");
+ close();
+ }
+ if (countitem(Tiny_Flame) > 0) {
+ delitem(Tiny_Flame, 1);
+ mes("[Elwin Conick]");
+ mes("Time over. You failed the test. Let me take all your leftover test materials.");
+ close2();
+ end;
+ }
+ .@showDialog = true;
+ }
+ if (.@showDialog) {
+ mes("[Elwin Conick]");
+ mes("Listen up. I'm not going to great lengths trying to explain the test to you.");
+ next();
+ select("Okay.");
+ mes("[Elwin Conick]");
+ mes("This is where the firearm molds are cast. Everywhere you can see Steel Artifacts are being produced.");
+ next();
+ mes("[Elwin Conick]");
+ mes("You'll be asked to control switches on the machine and select 5 standard Steel Artifacts.");
+ next();
+ mes("[Elwin Conick]");
+ mes("You'll then take them to the next Assembly Room and assemble them into a complete firearm. You'll be given 3 minutes to finish all that. ^0000ffTo check the elapsed time, you'll be transformed into a different job^000000.");
+ next();
+ mes("[Elwin Conick]");
+ mes("I'll be in the next room, waiting for you to bring me a complete firearm. Remember, ^0000ffyou fail the test when your transformation expires after 3 minutes^000000.");
+ montransform(G_L_SHECIL, 180000);
+ close();
+ }
+ mes("[Elwin Conick]");
+ mes("Ah? Are you lost? You need to register first and then get back here.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+}
+
+job_gun,198,39,3 script Elwin Conick#3 4_F_REBELLION,2,2,{
+ if (Class != Job_Gunslinger) {
+ mes("[Elwin Conick]");
+ mes("If you don't want to join Rebellions, just get out.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (questprogress(12342) != 1) {
+ mes("[Elwin Conick]");
+ mes("Ah? Are you lost? You need to register first and then get back here.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (getstatus(SC_MONSTER_TRANSFORM, 1) == G_L_SHECIL) {
+ if (countitem(Tiny_Flame) == 0) {
+ mes("[Elwin Conick]");
+ mes("Are you done? I don't see any completed firearm in your inventory.");
+ close();
+ }
+ delitem(Tiny_Flame, 1);
+ mes("[Elwin Conick]");
+ mes("It's shoddy but not bad, given the time. You passed.");
+ next();
+ mes("[Elwin Conick]");
+ mes("Let me take all your leftover test materials.");
+ .@st_job1 = countitem(Steel_Article);
+ .@st_job2 = countitem(Steel_Article_);
+ if (.@st_job1 > 0) {
+ delitem(Steel_Article, .@st_job1);
+ }
+ if (.@st_job2 > 0) {
+ delitem(Steel_Article_, .@st_job2);
+ }
+ next();
+ mes("[Elwin Conick]");
+ mes("Now you can move on to the next course. Ivan Sidorenko will oversee your test.");
+ completequest(12342);
+ close2();
+ warp("job_gun", 120, 133);
+ end;
+
+ } else if (getstatus(SC_MONSTER_TRANSFORM, 1) > 1) {
+ mes("[Elwin Conick]");
+ mes("Look at yourself, do you really want to test?");
+ next();
+ mes("^0000ffElwin see you turn into another form and she is very angry. Wait for your current form ends, and then find her again.^000000");
+ next();
+ if (select("Wait.", "Go away.") == 1) {
+ mes("[Elwin Conick]");
+ mes("It's not worth to give up, now go out and relax..");
+ close();
+ }
+ mes("[Elwin Conick]");
+ mes("Come back when you aren't in any form.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ } else {
+ mes("[Elwin Conick]");
+ mes("Time over. You failed the test. Let me take all your leftover test materials.");
+ .@st_job1 = countitem(Steel_Article);
+ .@st_job2 = countitem(Steel_Article_);
+ if (.@st_job1 > 0) {
+ delitem(Steel_Article, .@st_job1);
+ }
+ if (.@st_job2 > 0) {
+ delitem(Steel_Article_, .@st_job2);
+ }
+ if (countitem(Tiny_Flame) > 0) {
+ delitem(Tiny_Flame, 1);
+ }
+ next();
+ mes("[Elwin Conick]");
+ mes("Let's start again.");
+ close2();
+ warp("job_gun", 117, 41);
+ end;
+ }
+ end;
+}
+
+job_gun,120,138,3 script Ivan Sidorenko#1 4_M_REBELLION,2,2,{
+ if (Class != Job_Gunslinger) {
+ mes("[Ivan Sidorenko]");
+ mes("This is shooting test area, you can't come here as you like.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (questprogress(12342) < 2) {
+ mes("[Ivan Sidorenko]");
+ mes("There seems to be a mistake, you can't stay here.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (questprogress(12343) < 1) {
+ mes("[Ivan Sidorenko]");
+ mes("Hey, stay focused--we're using live ammo here, and you can get shot anytime.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("Let me make this quick. Basically you'll be running in this shooting range consisting of 5 sections.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("The objective is to find enemies in the midst of a crowd quickly and without fail.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("Among all the targets, you must shoot only the ^0000ffStandard-issue Targets^000000. If you make a mistake, you'll lose points.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("Let's try. There aren't many ^0000ffStandard-issue Targets^000000, so keep your eyes peeled.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("^0000ffYou have 3 minutes to finish this test. If you can't finish before your transformation expires^000000, you'll fail. If that happens, just follow the path back to me.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("^0000ffYou'll fail if you miss a Standard-issue Target, or shoot 3 incorrect targets^000000. Let's get started.");
+ setquest(12343);
+ setquest(12344);
+ montransform(G_L_SHECIL, 180000);
+ close2();
+ warp("job_gun", 102, 146);
+ end;
+ } else if (questprogress(12343) == 1) {
+ .@standard_target = 0;
+ .@failed_target = 0;
+ .@total_target = 0;
+ if (questprogress(12343, HUNTING) == 2) {
+ .@standard_target = 10;
+ }
+ if (questprogress(12344, HUNTING) == 2) {
+ .@failed_target = 2;
+ }
+ if (getstatus(SC_MONSTER_TRANSFORM, 1) != G_L_SHECIL) {
+ .@total_target = 5;
+ }
+ .@target_count = .@standard_target - (.@failed_target + .@total_target); //
+ if (.@target_count > 9) { // Killed 10 Standard, 0 Failed
+ completequest(12343);
+ completequest(12344);
+ setquest(12345);
+ mes("[Ivan Sidorenko]");
+ mes("Good job. I didn't think you could pass so quickly.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("You may leave and wait outside. I'll bring other instructors' evaluation reports to see you.");
+ close2();
+ warp("job_gun", 210, 132);
+ end;
+ } else if (.@target_count == 8) { // Killed 10 Standard, 3 failed
+ erasequest(12343);
+ erasequest(12344);
+ mes("[Ivan Sidorenko]");
+ mes("You're quick enough, but you shot too many incorrect targets. You failed.");
+ next();
+ } else if (.@target_count == 5) { // Timeout
+ erasequest(12343);
+ erasequest(12344);
+ mes("[Ivan Sidorenko]");
+ mes("You accurate enough, but you took too much time. Slow Rebellions don't survive long enough.");
+ next();
+ } else if (.@target_count < 5) { // Timeout and failed targets
+ erasequest(12343);
+ erasequest(12344);
+ mes("[Ivan Sidorenko]");
+ mes("You failed at both speed and accuracy. How did you survive this long?");
+ next();
+ } else {
+ erasequest(12343);
+ erasequest(12344);
+ mes("[Ivan Sidorenko]");
+ mes("There's a problem, the statistic seems to be wrong. Well... This can happen sometimes.");
+ next();
+ }
+ mes("[Ivan Sidorenko]");
+ mes("Let's try again. Be more careful this time.");
+ setquest(12343);
+ setquest(12344);
+ montransform(G_L_SHECIL, 180000);
+ close2();
+ warp("job_gun", 102, 146);
+ end;
+ } else {
+ mes("[Ivan Sidorenko]");
+ mes("How did you not leave?");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("You may leave and wait outside. I'll bring other instructors' evaluation reports to see you.");
+ close2();
+ warp("job_gun", 210, 132);
+ end;
+ }
+ end;
+}
+
+job_gun,220,132,3 script Ivan Sidorenko#2 4_M_REBELLION,2,2,{
+ .@now_weight = MaxWeight - Weight;
+ if (checkweight(Knife, 1) == 0) {
+ mes("You have too many items, please reduce them to continue.");
+ close();
+ }
+ if (.@now_weight < 1000) {
+ mes("The items in your inventory are weighing you down. Lighten your weight first.");
+ close();
+ }
+ if (questprogress(12345) != 1) {
+ mes("[Ivan Sidorenko]");
+ mes("There must have been a mistake. You aren't supposed to remain here.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ }
+ if (Class == Job_Gunslinger) {
+ if (BaseLevel < 99 || JobLevel < 70) {
+ mes("[Ivan Sidorenko]");
+ mes("Huh? You look so weak? I have nothing more to say.");
+ close();
+ }
+ if (SkillPoint != 0) {
+ mes("[Ivan Sidorenko]");
+ mes("Oh no~ You still have Skill Points.");
+ close();
+ }
+ mes("[Ivan Sidorenko]");
+ mes("Kulbertinov, Elwin, and I've evaluated your Rebellion test results.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("And...");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("You've met all our requirements including the attitude and the test performance.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("That's right, you're now a member of the Rebellion. Get ready to be wowed.");
+ next();
+ jobchange(Job_Rebellion);
+ completequest(12345);
+ mes("[Ivan Sidorenko]");
+ mes("And Elwin wants you to have this. Take good care of it. He made it for you.");
+ getitem(Freedom_Flame, 1);
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("See you later.");
+ close2();
+ warp("job_gun", 81, 29);
+ end;
+ } else if (Class == Job_Rebellion) {
+ mes("[Ivan Sidorenko]");
+ mes("This life should be fun, not boring.");
+ next();
+ mes("[Ivan Sidorenko]");
+ mes("And by becoming a Rebellion your life should be upgraded. So, go and create a great journey, make us proud!");
+ close();
+ } else {
+ mes("[Ivan Sidorenko]");
+ mes("Do you have something to say to me, don't you?");
+ close();
+ }
+}
+
+job_gun,220,138,4 trader Prop Vending Machine 2_VENDING_MACHINE1,{
+ end;
+OnInit:
+ sellitem(Slug_Bullet_1);
+ sellitem(Slug_Bullet_2);
+ sellitem(Slug_Bullet_3);
+ sellitem(Slug_Bullet_4);
+ sellitem(Slug_Bullet_5);
+ sellitem(Fullmetal_Jacket_Bullet);
+ sellitem(Mine_Projectile);
+ sellitem(Dragon_Tail_Missile);
+ end;
+}
+
+job_gun,216,138,4 script Butler Karlex 1_M_01,{
+ mes("[Butler Karlex]");
+ mes("Use this temporary storage to keep your items safe while on the Advancement test.");
+ next();
+ .@select = select("Cancel", "Open the storage.");
+ mes("[Butler Karlex]");
+ mes("Thank you for using the service.");
+ close2();
+ if (.@select == 2) {
+ openstorage();
+ }
+ end;
+}
+
+prontera,92,209,4 trader Rebellion Weapons 2_VENDING_MACHINE1,{
+ end;
+OnInit:
+ sellitem(H_FEATHER_H_FIRE);
+ sellitem(ALTAIR_ARES);
+ sellitem(COLORSCOPE);
+ sellitem(RAG203);
+ sellitem(DEATHFIRE);
+ sellitem(R_THUNDER);
+ sellitem(P_BREAKER);
+ sellitem(MINIMAY);
+ sellitem(TEMPEST);
+ sellitem(END_OF_HORIZON);
+ sellitem(Southern_Cross_R);
+ end;
+}
+
+prontera,96,209,4 trader Rebellion Accessories 2_VENDING_MACHINE1,{
+ end;
+OnInit:
+ sellitem(Slug_Bullet);
+ sellitem(Fullmetal_Jacket_Bullet);
+ sellitem(Mine_Projectile);
+ sellitem(Dragon_Tail_Missile);
+ sellitem(Special_Alloy_Trap);
+ sellitem(Bullet);
+ sellitem(Silver_Bullet_);
+ sellitem(Shell_Of_Blood_);
+ sellitem(AP_Ammo);
+ sellitem(Blaze_Bullet);
+ sellitem(Freezing_Bullet);
+ sellitem(Electric_Shock_Bullet);
+ sellitem(Magical_Stone_Bullet);
+ sellitem(Sanctified_Bullet);
+ sellitem(Flare_Bullet);
+ sellitem(Lightning_Bullet);
+ sellitem(Poison_Bullet);
+ sellitem(Blind_Bullet);
+ sellitem(Ice_Bullet);
+ end;
+}
diff --git a/npc/re/scripts_jobs.conf b/npc/re/scripts_jobs.conf
index f112334de..6dd99e813 100644
--- a/npc/re/scripts_jobs.conf
+++ b/npc/re/scripts_jobs.conf
@@ -40,6 +40,7 @@
"npc/re/jobs/1-1e/taekwon.txt",
// - 2e
"npc/re/jobs/2e/kagerou_oboro.txt",
+"npc/re/jobs/2e/rebellion.txt",
// - 3-1
"npc/re/jobs/3-1/archbishop.txt",
"npc/re/jobs/3-1/mechanic.txt",