summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/quest_db.conf36
-rw-r--r--db/re/item_db.conf162
-rw-r--r--db/re/mob_db.conf62
-rw-r--r--doc/constants.md13
-rw-r--r--npc/re/jobs/2e/rebellion.txt1035
-rw-r--r--npc/re/scripts_jobs.conf1
-rw-r--r--sql-files/item_db_re.sql24
-rw-r--r--sql-files/mob_db_re.sql3
-rw-r--r--src/map/skill.c43
9 files changed, 1353 insertions, 26 deletions
diff --git a/db/quest_db.conf b/db/quest_db.conf
index adf425405..8163c540a 100644
--- a/db/quest_db.conf
+++ b/db/quest_db.conf
@@ -12626,6 +12626,42 @@ quest_db: (
Name: "About skills"
},
{
+ Id: 12340
+ Name: "Suspicious Person"
+},
+{
+ Id: 12341
+ Name: "New Challenge"
+},
+{
+ Id: 12342
+ Name: "Crafting Firearms"
+},
+{
+ Id: 12343
+ Name: "Target Practice"
+ Targets: (
+ {
+ MobId: 3169
+ Count: 10
+ },
+ )
+},
+{
+ Id: 12344
+ Name: "Wrong Target Practice"
+ Targets: (
+ {
+ MobId: 3170
+ Count: 3
+ },
+ )
+},
+{
+ Id: 12345
+ Name: "Transforming to Rebellion"
+},
+{
Id: 13101
Name: "The way of Taekwon"
},
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index fb0df3d2d..4f5be9de5 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -74523,6 +74523,16 @@ item_db: (
Name: "Love Wand"
},
{
+ Id: 6746
+ AegisName: "Steel_Article"
+ Name: "Steel Artifact"
+},
+{
+ Id: 6747
+ AegisName: "Steel_Article_"
+ Name: "Steel Artifact"
+},
+{
Id: 6755
AegisName: "Corrupted_Charm"
Name: "Contaminated Magic"
@@ -101220,6 +101230,58 @@ item_db: (
">
},
{
+ Id: 13118
+ AegisName: "Tiny_Flame"
+ Name: "Fading Flame"
+ Type: "IT_WEAPON"
+ Weight: 100
+ Range: 7
+ Job: {
+ Gunslinger: true
+ Rebellion: true
+ }
+ Loc: "EQP_ARMS"
+ WeaponLv: 1
+ EquipLv: 1
+ Trade: {
+ nodrop: true
+ notrade: true
+ nocart: true
+ nostorage: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Subtype: "W_REVOLVER"
+},
+{
+ Id: 13119
+ AegisName: "Freedom_Flame"
+ Name: "Freedom Flame"
+ Type: "IT_WEAPON"
+ Weight: 100
+ Atk: 100
+ Range: 7
+ Slots: 2
+ Job: {
+ Gunslinger: true
+ Rebellion: true
+ }
+ Loc: "EQP_ARMS"
+ WeaponLv: 3
+ EquipLv: 99
+ Trade: {
+ nodrop: true
+ notrade: true
+ nocart: true
+ nostorage: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Subtype: "W_REVOLVER"
+},
+{
Id: 13120
AegisName: "H_FEATHER_H_FIRE"
Name: "Heaven's_Feather_&_Hell's_Fire"
@@ -102889,6 +102951,7 @@ item_db: (
Atk: 15
Job: {
Gunslinger: true
+ Rebellion: true
}
Loc: "EQP_AMMO"
Subtype: "A_BULLET"
@@ -102904,6 +102967,7 @@ item_db: (
Atk: 30
Job: {
Gunslinger: true
+ Rebellion: true
}
Loc: "EQP_AMMO"
Subtype: "A_BULLET"
@@ -102922,6 +102986,7 @@ item_db: (
Atk: 50
Job: {
Gunslinger: true
+ Rebellion: true
}
Loc: "EQP_AMMO"
Subtype: "A_BULLET"
@@ -102937,6 +103002,7 @@ item_db: (
Atk: 50
Job: {
Gunslinger: true
+ Rebellion: true
}
Loc: "EQP_AMMO"
Subtype: "A_BULLET"
@@ -102952,6 +103018,7 @@ item_db: (
Atk: 50
Job: {
Gunslinger: true
+ Rebellion: true
}
Loc: "EQP_AMMO"
Subtype: "A_BULLET"
@@ -102970,6 +103037,7 @@ item_db: (
Atk: 50
Job: {
Gunslinger: true
+ Rebellion: true
}
Loc: "EQP_AMMO"
Subtype: "A_BULLET"
@@ -102988,11 +103056,98 @@ item_db: (
Atk: 50
Job: {
Gunslinger: true
+ Rebellion: true
}
Loc: "EQP_AMMO"
Subtype: "A_BULLET"
Script: <" bonus bAtkEle, Ele_Water; ">
},
+{
+ Id: 13228
+ AegisName: "Flare_Bullet"
+ Name: "Flare Bullet"
+ Type: "IT_AMMO"
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: {
+ Gunslinger: true
+ Rebellion: true
+ }
+ Loc: "EQP_AMMO"
+ Subtype: "A_BULLET"
+ Script: <" bonus bAtkEle, Ele_Fire; ">
+},
+{
+ Id: 13229
+ AegisName: "Lightning_Bullet"
+ Name: "Lightning Bullet"
+ Type: "IT_AMMO"
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: {
+ Gunslinger: true
+ Rebellion: true
+ }
+ Loc: "EQP_AMMO"
+ Subtype: "A_BULLET"
+ Script: <" bonus bAtkEle, Ele_Wind; ">
+},
+{
+ Id: 13230
+ AegisName: "Ice_Bullet"
+ Name: "Ice Bullet"
+ Type: "IT_AMMO"
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: {
+ Gunslinger: true
+ Rebellion: true
+ }
+ Loc: "EQP_AMMO"
+ Subtype: "A_BULLET"
+ Script: <" bonus bAtkEle, Ele_Water; ">
+},
+{
+ Id: 13231
+ AegisName: "Poison_Bullet"
+ Name: "Poison Bullet"
+ Type: "IT_AMMO"
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: {
+ Gunslinger: true
+ Rebellion: true
+ }
+ Loc: "EQP_AMMO"
+ Subtype: "A_BULLET"
+ Script: <"
+ bonus bAtkEle, Ele_Poison;
+ bonus2 bAddEff, Eff_Poison, 500;
+ ">
+},
+{
+ Id: 13232
+ AegisName: "Blind_Bullet"
+ Name: "Blind Bullet"
+ Type: "IT_AMMO"
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: {
+ Gunslinger: true
+ Rebellion: true
+ }
+ Loc: "EQP_AMMO"
+ Subtype: "A_BULLET"
+ Script: <"
+ bonus bAtkEle, Ele_Dark;
+ bonus2 bAddEff, Eff_Blind, 500;
+ ">
+},
//== Shurikens & Kunais ====================================
{
@@ -153464,6 +153619,13 @@ item_db: (
Name: "S_Genesis_Earing"
},
{
+ Id: 25187
+ AegisName: "Slug_Bullet"
+ Name: "Slug Bullet"
+ Buy: 1200
+ Weight: 1200
+},
+{
Id: 25258
AegisName: "BrokenArrow"
Name: "BrokenArrow"
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index c0c726f25..4f5c6ad9b 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -64487,7 +64487,43 @@ mob_db: (
//2428,G_L_SEYREN
//2429,G_L_EREMES
//2430,G_L_HARWORD
-//2431,G_L_SHECIL
+{
+ Id: 2431
+ SpriteName: "G_L_SHECIL"
+ Name: "Hunter Shecil"
+ Lv: 98
+ Hp: 8835
+ Sp: 1
+ AttackRange: 14
+ Attack: [574, 223]
+ Def: 68
+ Mdef: 13
+ Stats: {
+ Str: 108
+ Agi: 113
+ Vit: 60
+ Int: 72
+ Dex: 148
+ Luk: 37
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_DemiHuman"
+ Element: ("Ele_Wind", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 160
+ AttackDelay: 432
+ AttackMotion: 400
+ DamageMotion: 288
+},
//2432,G_L_KATRINN
//2433,G_L_MAGALETA
//2434,G_L_YGNIZEM
@@ -83975,6 +84011,30 @@ mob_db: (
//3156,EXPLORATION_ROVER
//3166,M_E_DEVILING
{
+ Id: 3169
+ SpriteName: "J_REB_SHECIL1"
+ Name: "Shooting Target"
+ Size: "Size_Small"
+ Race: "RC_Formless"
+ Element: ("Ele_Neutral", 1)
+ Mode: {
+ CanMove: true
+ }
+ MoveSpeed: 200
+},
+{
+ Id: 3170
+ SpriteName: "J_REB_SHECIL2"
+ Name: "Shooting Target"
+ Size: "Size_Small"
+ Race: "RC_Formless"
+ Element: ("Ele_Neutral", 1)
+ Mode: {
+ CanMove: true
+ }
+ MoveSpeed: 200
+},
+{
Id: 3181
SpriteName: "E1_FELOCK"
Name: "Captain Ferlock"
diff --git a/doc/constants.md b/doc/constants.md
index 7595e79a1..07ae12ce3 100644
--- a/doc/constants.md
+++ b/doc/constants.md
@@ -7742,6 +7742,7 @@
- `DUMMY_150`: 2411
- `DUMMY_10_FIRE`: 2413
- `RUNAWAY_BOOK`: 2414
+- `G_L_SHECIL`: 2431
- `MG_ZOMBIE`: 2464
- `MG_WRAITH`: 2465
- `MG_GHOUL`: 2466
@@ -8138,6 +8139,8 @@
- `XM_CELINE_KIMI`: 2996
- `GRIM_REAPER_ANKOU`: 3029
- `TIMEHOLDER`: 3074
+- `J_REB_SHECIL1`: 3169
+- `J_REB_SHECIL2`: 3170
- `E1_FELOCK`: 3181
- `MM_SARAH`: 3190
- `ORGANIC_JAKK`: 3202
@@ -12680,6 +12683,8 @@
- `Bag_Of_Selling_Goods`: 6682
- `Cash_Hair_Coupon`: 6707
- `Lovely_Stick`: 6712
+- `Steel_Article`: 6746
+- `Steel_Article_`: 6747
- `Corrupted_Charm`: 6755
- `ORGANIC_PUMPKIN`: 6804
- `INORGANIC_PUMPKIN`: 6805
@@ -14954,6 +14959,8 @@
- `Upg_Revolver`: 13115
- `Novice_Revolver`: 13116
- `TE_Woe_Pistol`: 13117
+- `Tiny_Flame`: 13118
+- `Freedom_Flame`: 13119
- `H_FEATHER_H_FIRE`: 13120
- `ALTAIR_ARES`: 13122
- `ALTAIR_ARES_`: 13124
@@ -15036,6 +15043,11 @@
- `Poison_Sphere_`: 13225
- `Blind_Sphere_`: 13226
- `Freezing_Sphere_`: 13227
+- `Flare_Bullet`: 13228
+- `Lightning_Bullet`: 13229
+- `Ice_Bullet`: 13230
+- `Poison_Bullet`: 13231
+- `Blind_Bullet`: 13232
- `Shuriken`: 13250
- `Nimbus_Shuriken`: 13251
- `Flash_Shuriken`: 13252
@@ -18757,6 +18769,7 @@
- `S_Genesis_Weapon`: 24581
- `S_Genesis_Pendant`: 24582
- `S_Genesis_Earing`: 24583
+- `Slug_Bullet`: 25187
- `BrokenArrow`: 25258
- `Shining_Spore`: 25265
- `Dried_Leaf_Of_Ygg`: 25266
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",
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index e69201f62..bc1e23376 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -4603,6 +4603,8 @@ REPLACE INTO `item_db` VALUES ('6681','XMAS_Cookie','XMAS Cookie','3','0','0','0
REPLACE INTO `item_db` VALUES ('6682','Bag_Of_Selling_Goods','Bag Of Selling Goods','3','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6707','Cash_Hair_Coupon','Cash Hair Coupon','3','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6712','Lovely_Stick','Love Wand','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('6746','Steel_Article','Steel Artifact','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('6747','Steel_Article_','Steel Artifact','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6755','Corrupted_Charm','Contaminated Magic','3','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6804','ORGANIC_PUMPKIN','Organic Pumpkin','3','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6805','INORGANIC_PUMPKIN','Inorganic Pumpkin','3','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6877,6 +6879,8 @@ REPLACE INTO `item_db` VALUES ('13114','P_Revolver3','Eden Group Revolver III','
REPLACE INTO `item_db` VALUES ('13115','Upg_Revolver','Upgrade Revolver','4','17','20','10','500','35','0','0','7','1','16777216','1','2','34','3','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,(getrefine()*5); bonus bLongAtkRate,(getrefine()*2); if(BaseLevel>70) { bonus bBaseAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('13116','Novice_Revolver','Beginner Revolver','4','17','0','0','500','20','0','0','7','0','16777216','1','2','34','1','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-5;','','');
REPLACE INTO `item_db` VALUES ('13117','TE_Woe_Pistol','TE Woe Pistol','4','17','0','0','0','60','0','0','7','0','1090519040','63','2','34','3','40',NULL,'0','0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Curse,1000;','','');
+REPLACE INTO `item_db` VALUES ('13118','Tiny_Flame','Fading Flame','4','17','0','0','100','0','0','0','7','0','1090519040','63','2','34','1','1',NULL,'1','0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13119','Freedom_Flame','Freedom Flame','4','17','0','0','100','100','0','0','7','2','1090519040','63','2','34','3','99',NULL,'1','0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13120','H_FEATHER_H_FIRE','Heaven\'s_Feather_&_Hell\'s_Fire','4','17','1250000','625000','800','150','0','0','9','1','1090519040','63','2','34','3','99',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,GS_DESPERADO,20; bonus2 bSkillAtk,RL_FALLEN_ANGEL,20;','','');
REPLACE INTO `item_db` VALUES ('13122','ALTAIR_ARES','Altea & Ares','4','17','1450000','725000','1000','200','0','0','9','0','1073741824','63','2','34','3','140',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30;','','');
REPLACE INTO `item_db` VALUES ('13124','ALTAIR_ARES_','Altea & Ares','4','17','1450000','725000','1000','200','0','0','9','1','1073741824','63','2','34','3','140',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30;','','');
@@ -6952,13 +6956,18 @@ REPLACE INTO `item_db` VALUES ('13217','Freezing_Bullet','Freezing Bullet','10',
REPLACE INTO `item_db` VALUES ('13218','Electric_Shock_Bullet','Lightning Bullet','10','3','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Wind;','','');
REPLACE INTO `item_db` VALUES ('13219','Magical_Stone_Bullet','Magic Stone Bullet','10','3','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Earth;','','');
REPLACE INTO `item_db` VALUES ('13220','Sanctified_Bullet','Purifying Bullet','10','3','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Holy;','','');
-REPLACE INTO `item_db` VALUES ('13221','Silver_Bullet_','Silver Bullet','10','3','5','2','2','15','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Holy;','','');
-REPLACE INTO `item_db` VALUES ('13222','Shell_Of_Blood_','Bloody Shell','10','3','10','5','2','30','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral; bonus2 bAddEff, Eff_Bleeding, 100;','','');
-REPLACE INTO `item_db` VALUES ('13223','Flare_Sphere_','Incendiary Grenade','10','3','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Fire;','','');
-REPLACE INTO `item_db` VALUES ('13224','Lighting_Sphere_','Lightning Grenade','10','3','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Wind;','','');
-REPLACE INTO `item_db` VALUES ('13225','Poison_Sphere_','Poison Grenade','10','3','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Poison; bonus2 bAddEff, Eff_Poison, 500;','','');
-REPLACE INTO `item_db` VALUES ('13226','Blind_Sphere_','Flash Grenade','10','3','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Dark; bonus2 bAddEff, Eff_Blind, 500;','','');
-REPLACE INTO `item_db` VALUES ('13227','Freezing_Sphere_','Cyro Grenade','10','3','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Water;','','');
+REPLACE INTO `item_db` VALUES ('13221','Silver_Bullet_','Silver Bullet','10','3','5','2','2','15','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Holy;','','');
+REPLACE INTO `item_db` VALUES ('13222','Shell_Of_Blood_','Bloody Shell','10','3','10','5','2','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral; bonus2 bAddEff, Eff_Bleeding, 100;','','');
+REPLACE INTO `item_db` VALUES ('13223','Flare_Sphere_','Incendiary Grenade','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Fire;','','');
+REPLACE INTO `item_db` VALUES ('13224','Lighting_Sphere_','Lightning Grenade','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Wind;','','');
+REPLACE INTO `item_db` VALUES ('13225','Poison_Sphere_','Poison Grenade','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Poison; bonus2 bAddEff, Eff_Poison, 500;','','');
+REPLACE INTO `item_db` VALUES ('13226','Blind_Sphere_','Flash Grenade','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Dark; bonus2 bAddEff, Eff_Blind, 500;','','');
+REPLACE INTO `item_db` VALUES ('13227','Freezing_Sphere_','Cyro Grenade','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Water;','','');
+REPLACE INTO `item_db` VALUES ('13228','Flare_Bullet','Flare Bullet','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Fire;','','');
+REPLACE INTO `item_db` VALUES ('13229','Lightning_Bullet','Lightning Bullet','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Wind;','','');
+REPLACE INTO `item_db` VALUES ('13230','Ice_Bullet','Ice Bullet','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Water;','','');
+REPLACE INTO `item_db` VALUES ('13231','Poison_Bullet','Poison Bullet','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Poison; bonus2 bAddEff, Eff_Poison, 500;','','');
+REPLACE INTO `item_db` VALUES ('13232','Blind_Bullet','Blind Bullet','10','3','15','7','5','50','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Dark; bonus2 bAddEff, Eff_Blind, 500;','','');
REPLACE INTO `item_db` VALUES ('13250','Shuriken','Shuriken','10','6','4','2','5','10','0','0','0','0','33554432','63','2','32768','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13251','Nimbus_Shuriken','Nimbus Shuriken','10','6','10','5','5','30','0','0','0','0','33554432','63','2','32768','0','20',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13252','Flash_Shuriken','Flash Shuriken','10','6','20','10','5','45','0','0','0','0','33554432','63','2','32768','0','40',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -10680,6 +10689,7 @@ REPLACE INTO `item_db` VALUES ('24580','S_Banish_Cannon_Shoes','S_Banish_Cannon_
REPLACE INTO `item_db` VALUES ('24581','S_Genesis_Weapon','S_Genesis_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24582','S_Genesis_Pendant','S_Genesis_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24583','S_Genesis_Earing','S_Genesis_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25187','Slug_Bullet','Slug Bullet','3','0','1200','600','1200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25258','BrokenArrow','BrokenArrow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25265','Shining_Spore','Shining_Spore','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25266','Dried_Leaf_Of_Ygg','Dried_Leaf_Of_Ygg','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
diff --git a/sql-files/mob_db_re.sql b/sql-files/mob_db_re.sql
index 80f5677e3..713054e9c 100644
--- a/sql-files/mob_db_re.sql
+++ b/sql-files/mob_db_re.sql
@@ -1412,6 +1412,7 @@ REPLACE INTO `mob_db` VALUES (2410,'DUMMY_100','Lv 100','Lv 100',100,99999999,1,
REPLACE INTO `mob_db` VALUES (2411,'DUMMY_150','Lv 150','Lv 150',150,99999999,1,0,0,0,0,0,120,120,0,0,0,0,0,0,1,1,1,0,20,32768,200,398,199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2413,'DUMMY_10_FIRE','Lv 10 (Fire)','Lv 10 (Fire)',10,99999999,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,23,32768,200,398,199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2414,'RUNAWAY_BOOK','Runaway Book','Runaway Book',1,10,1,1,1,1,6,9,1,1,1,1,1,0,1,1,10,12,0,0,20,12417,150,864,500,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (2431,'G_L_SHECIL','Hunter Shecil','Hunter Shecil',98,8835,1,0,0,14,574,223,68,13,108,113,60,72,148,37,10,12,1,7,64,14469,160,432,400,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2464,'MG_ZOMBIE','Corrupted Steward','Corrupted Steward',130,135600,1,13332,15998,1,2364,444,15,15,44,22,77,25,88,22,10,12,1,1,29,14741,400,2612,912,288,0,0,0,0,0,0,0,6609,1000,6610,1000,6608,10,938,1000,727,500,6755,500,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2465,'MG_WRAITH','Corrupted Monk','Corrupted Monk',133,100168,1,13998,16796,1,999,2787,80,200,16,26,30,115,79,5,10,12,2,1,89,14229,300,1816,576,240,0,0,0,0,0,0,0,731,100,747,500,2206,100,6608,10,6609,1000,6610,1000,6755,500,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2466,'MG_GHOUL','Grand Chamberlain in Pa','Grand Chamberlain in Pa',132,208100,1,14222,17066,1,2965,666,30,30,88,44,88,21,95,44,10,12,1,1,49,14741,250,2456,912,504,0,0,0,0,0,0,0,756,100,2609,100,6608,10,6609,1000,6610,1000,7751,1000,6755,500,0,0,0,0,0,0);
@@ -1808,6 +1809,8 @@ REPLACE INTO `mob_db` VALUES (2961,'E_TORTUROUS_REDEEMER','Torturous Redeemer','
REPLACE INTO `mob_db` VALUES (2996,'XM_CELINE_KIMI','Celine Kimi','Celine Kimi',160,66666666,1,4444444,4033332,2,5636,8303,479,444,144,166,44,444,166,166,10,12,2,1,28,13973,100,1056,1056,480,444444,616,10000,617,10000,22534,10000,22534,4000,18549,4000,7642,4000,19701,100,13442,100,712,10000,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3029,'GRIM_REAPER_ANKOU','Grim Reaper Ankou','Grim Reaper Ankou',159,50000000,1553,300000,330000,1,1500,2500,200,70,200,100,200,200,220,100,10,12,2,1,89,133,200,900,864,480,0,0,0,0,0,0,0,607,500,603,200,604,200,22537,10000,522,200,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3074,'TIMEHOLDER','Time Holder','Time Holder',170,25000000,1,2291250,1938750,1,5250,2100,288,265,224,152,251,257,402,77,10,12,2,6,80,14261,100,398,384,288,2291250,0,0,0,0,0,0,1095,3000,2121,10,7054,3000,22515,3000,18874,20,16024,5,15089,3,0,0,0,0,4625,1);
+REPLACE INTO `mob_db` VALUES (3169,'J_REB_SHECIL1','Shooting Target','Shooting Target',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,1,200,4000,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3170,'J_REB_SHECIL2','Shooting Target','Shooting Target',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,1,200,4000,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3181,'E1_FELOCK','Captain Ferlock','Captain Ferlock',130,3000000,1,3088,333333,10,0,0,0,0,0,0,0,0,0,0,10,12,2,9,47,129,170,1018,1008,300,0,0,0,0,0,0,0,15117,100,20744,100,22047,100,12082,3000,12072,3000,12087,3000,12077,3000,12092,3000,0,0,27182,1);
REPLACE INTO `mob_db` VALUES (3190,'MM_SARAH','Sarah','Sarah',160,100000000,1,0,0,12,1090,2755,276,255,43,161,6,188,225,136,10,12,1,0,20,164,2000,500,500,0,0,0,0,0,0,0,0,15121,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4610,1);
REPLACE INTO `mob_db` VALUES (3202,'ORGANIC_JAKK','Organic Pumpkin','Organic Pumpkin',10,40,1,20,13,1,100,0,160,99,1,1,1,1,999,1,1,1,0,3,21,97,200,398,199,0,0,0,0,0,0,0,0,6804,5000,6804,5000,6804,1000,2267,100,1062,1000,664,100,546,1000,12192,100,0,0,0,0);
diff --git a/src/map/skill.c b/src/map/skill.c
index a488e3eaf..ede3a4c52 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -7320,27 +7320,34 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
break;
case PR_STRECOVERY:
- if(status->isimmune(bl)) {
- clif->skill_nodamage(src,bl,skill_id,skill_lv,0);
+ if (status->isimmune(bl) != 0) {
+ clif->skill_nodamage(src, bl, skill_id, skill_lv, 0);
break;
}
- if (tsc && tsc->opt1) {
- status_change_end(bl, SC_FREEZE, INVALID_TIMER);
- status_change_end(bl, SC_STONE, INVALID_TIMER);
- status_change_end(bl, SC_SLEEP, INVALID_TIMER);
- status_change_end(bl, SC_STUN, INVALID_TIMER);
- status_change_end(bl, SC_WHITEIMPRISON, INVALID_TIMER);
- }
- status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER);
- //Is this equation really right? It looks so... special.
- if( battle->check_undead(tstatus->race,tstatus->def_ele) ) {
- status->change_start(src, bl, SC_BLIND,
- 100*(100-(tstatus->int_/2+tstatus->vit/3+tstatus->luk/10)), 1,0,0,0,
- skill->get_time2(skill_id, skill_lv) * (100-(tstatus->int_+tstatus->vit)/2)/100,SCFLAG_NONE);
+
+ if (!battle->check_undead(tstatus->race, tstatus->def_ele)) {
+ if (tsc != NULL && tsc->opt1 != 0) {
+ status_change_end(bl, SC_FREEZE, INVALID_TIMER);
+ status_change_end(bl, SC_STONE, INVALID_TIMER);
+ status_change_end(bl, SC_SLEEP, INVALID_TIMER);
+ status_change_end(bl, SC_STUN, INVALID_TIMER);
+ status_change_end(bl, SC_WHITEIMPRISON, INVALID_TIMER);
+ }
+
+ status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER);
+ } else {
+ int rate = 100 * (100 - (tstatus->int_ / 2 + tstatus->vit / 3 + tstatus->luk / 10));
+ int duration = skill->get_time2(skill_id, skill_lv);
+
+ duration *= (100 - (tstatus->int_ + tstatus->vit) / 2) / 100;
+ status->change_start(src, bl, SC_BLIND, rate, 1, 0, 0, 0, duration, SCFLAG_NONE);
}
- clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
- if(dstmd)
- mob->unlocktarget(dstmd,tick);
+
+ clif->skill_nodamage(src, bl, skill_id, skill_lv, 1);
+
+ if (dstmd != NULL)
+ mob->unlocktarget(dstmd, tick);
+
break;
// Mercenary Supportive Skills