diff options
author | Jesusaves <cpntb1@ymail.com> | 2019-08-31 15:03:45 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2019-08-31 15:03:45 -0300 |
commit | 63256388cb5b9ef7bc1a4afbd0270c135882d622 (patch) | |
tree | 7519f7aa64fd56f71038ad59ee747ba2c761082f | |
parent | 5dab87b522e5ff18b6a62e86c369ac3295c1817f (diff) | |
parent | 4de339bf2c92af5f74cdb28b0eb62e8ca66993c4 (diff) | |
download | serverdata-testserver.tar.gz serverdata-testserver.tar.bz2 serverdata-testserver.tar.xz serverdata-testserver.zip |
Merge branch 'master' into testservertestserver
36 files changed, 631 insertions, 215 deletions
diff --git a/conf/map/maps.conf b/conf/map/maps.conf index 733e5f357..5abef6ff7 100644 --- a/conf/map/maps.conf +++ b/conf/map/maps.conf @@ -129,6 +129,8 @@ map_list: ( "018-5", "018-6-0", "018-6-1", + "018-6-2", + "018-6-3", "019-1-1", "019-1", "019-2", diff --git a/db/item_options.conf b/db/item_options.conf index 9eabad237..cce2306f2 100644 --- a/db/item_options.conf +++ b/db/item_options.conf @@ -1050,7 +1050,7 @@ item_options_db: ( { Id: 187 Name: "IOPT_SPLASHDAMAGE" - Script: <" bonus(bSplashRange, getequippedoptioninfo(IT_OPT_VALUE)); "> + Script: <" bonus(bSplashAddRange, getequippedoptioninfo(IT_OPT_VALUE)); "> }, { Id: 188 @@ -1111,6 +1111,11 @@ item_options_db: ( Id: 199 Name: "IOPT_CRITDMG" Script: <" bonus(bCritAtkRate, getequippedoptioninfo(IT_OPT_VALUE)); "> +}, +{ + Id: 200 + Name: "IOPT_RICHNESS" + Script: <" bonus2(bAddGetZenyNum, -1, getequippedoptioninfo(IT_OPT_VALUE)); "> } diff --git a/db/map_index.txt b/db/map_index.txt index 3cf92e99f..2dc2bd3ea 100644 --- a/db/map_index.txt +++ b/db/map_index.txt @@ -126,52 +126,54 @@ 018-5 126 018-6-0 127 018-6-1 128 -019-1-1 129 -019-1 130 -019-2 131 -019-3 132 -019-4-1 133 -019-4 134 -020-1 135 -020-2 136 -020-3 137 -020-4 138 -020-5 139 -020-6 140 -020-7-1 141 -020-7-2 142 -020-7 143 -021-1 144 -021-2 145 -021-3 146 -021-4 147 -022-1 148 -023-1 149 -023-2 150 -023-3-1 151 -023-3-2 152 -023-3 153 -024-1 154 -024-10 155 -024-11 156 -024-12 157 -024-13 158 -024-14 159 -024-15 160 -024-16 161 -024-2 162 -024-3 163 -024-4 164 -024-5 165 -024-6 166 -024-7 167 -024-8 168 -024-9 169 -boss 170 -botcheck 171 -guilds 172 -sec_pri 173 -soren-2 174 -soren 175 -test 176 -testbg 177 +018-6-2 129 +018-6-3 130 +019-1-1 131 +019-1 132 +019-2 133 +019-3 134 +019-4-1 135 +019-4 136 +020-1 137 +020-2 138 +020-3 139 +020-4 140 +020-5 141 +020-6 142 +020-7-1 143 +020-7-2 144 +020-7 145 +021-1 146 +021-2 147 +021-3 148 +021-4 149 +022-1 150 +023-1 151 +023-2 152 +023-3-1 153 +023-3-2 154 +023-3 155 +024-1 156 +024-10 157 +024-11 158 +024-12 159 +024-13 160 +024-14 161 +024-15 162 +024-16 163 +024-2 164 +024-3 165 +024-4 166 +024-5 167 +024-6 168 +024-7 169 +024-8 170 +024-9 171 +boss 172 +botcheck 173 +guilds 174 +sec_pri 175 +soren-2 176 +soren 177 +test 178 +testbg 179 diff --git a/db/re/exp_guild.txt b/db/re/exp_guild.txt index 928047600..cecf66632 100644 --- a/db/re/exp_guild.txt +++ b/db/re/exp_guild.txt @@ -1,4 +1,8 @@ // Guild LvUp experience value table +// Exp needed for level 5: 5.500.000 Exp +// Exp needed for level 10: 38.500.000 Exp +// Exp needed for level 25: 552.500.000 Exp +// Exp needed for level 50: 4.292.500.000 Exp 100000 400000 900000 diff --git a/db/re/item_db.conf b/db/re/item_db.conf index d035bc5f4..48aeffd17 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -2281,7 +2281,7 @@ item_db: ( { Id: 615 AegisName: "HerbalTea" - Name: "Herbal Tea" + Name: "Nightshade Tea" Type: "IT_USABLE" Buy: 1240 Sell: 480 @@ -2291,7 +2291,8 @@ item_db: ( UseEffect: "EFFECT_HEAL" Script: <" sc_start SC_ATTHASTE_POTION1, 30000, 60; - sc_start SC_POISON, 40000, 0; + if (rand(10000) < 6000) + sc_start callfunc("any", SC_POISON, SC_SILENCE, SC_POISON, SC_CONFUSE, SC_POISON, SC_POISON), rand(20000, 40000), 0; itemheal 0, rand(10,200); "> }, @@ -5522,8 +5523,8 @@ item_db: ( }, { Id: 912 - AegisName: "Wurtizite" - Name: "Wurtizite Ore" + AegisName: "Wurtzite" + Name: "Wurtzite Ore" Type: "IT_ETC" Buy: 5000 Sell: 500 @@ -8118,8 +8119,8 @@ item_db: ( AegisName: "CottonTrousers" Name: "Cotton Trousers" Type: "IT_ARMOR" - Buy: 1200 - Sell: 250 + Buy: 12000 + Sell: 2500 Weight: 25 Def: 22 Slots: 1 diff --git a/db/re/map_zone_db.conf b/db/re/map_zone_db.conf index 871e8b228..95455f729 100644 --- a/db/re/map_zone_db.conf +++ b/db/re/map_zone_db.conf @@ -609,5 +609,9 @@ zones: ( disabled_items: { } + + disabled_commands: { + pvpon: 100 + } } ) diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf index b49f0af72..4a5d19db2 100644 --- a/db/re/mob_db.conf +++ b/db/re/mob_db.conf @@ -8844,7 +8844,7 @@ mob_db: ( Drops: { Coal: 200 CopperOre: 100 - Wurtizite: 100 + Wurtzite: 100 LeadOre: 40 Graphene: 25 LightGreenDiamond: 1 @@ -8870,7 +8870,7 @@ mob_db: ( Drops: { Coal: 300 CopperOre: 200 - Wurtizite: 200 + Wurtzite: 200 LeadOre: 80 Graphene: 45 LightGreenDiamond: 2 @@ -8896,7 +8896,7 @@ mob_db: ( Drops: { Coal: 500 CopperOre: 300 - Wurtizite: 300 + Wurtzite: 290 LeadOre: 120 Graphene: 65 LightGreenDiamond: 3 diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index a1fd3221f..8cbbc7ab5 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -751,33 +751,44 @@ skill_db: ( AttackType: "Magic" Element: "Ele_Water" InterruptCast: true - CastTime: 640 - AfterCastActDelay: 1500 + CastTime: { + Lv1: 640 + Lv2: 600 + Lv3: 555 + Lv4: 500 + Lv5: 450 + Lv6: 400 + Lv7: 384 + Lv8: 384 + Lv9: 384 + Lv10: 384 + } + AfterCastActDelay: 300 SkillData2: { - Lv1: 3000 - Lv2: 3500 - Lv3: 4000 - Lv4: 4500 - Lv5: 5000 - Lv6: 5500 - Lv7: 6000 - Lv8: 6500 - Lv9: 7000 - Lv10: 7500 + Lv1: 4000 + Lv2: 4500 + Lv3: 5000 + Lv4: 5500 + Lv5: 6000 + Lv6: 7000 + Lv7: 8000 + Lv8: 9000 + Lv9: 10000 + Lv10: 10500 } FixedCastTime: 160 Requirements: { SPCost: { - Lv1: 200 - Lv2: 210 - Lv3: 220 - Lv4: 230 - Lv5: 240 - Lv6: 250 - Lv7: 260 - Lv8: 270 - Lv9: 280 - Lv10: 290 + Lv1: 100 + Lv2: 120 + Lv3: 140 + Lv4: 160 + Lv5: 180 + Lv6: 200 + Lv7: 220 + Lv8: 240 + Lv9: 260 + Lv10: 280 } } }, @@ -927,7 +938,7 @@ skill_db: ( Lv10: 360 } SkillData1: { - Lv1: 7500 + Lv1: 8500 Lv2: 10000 Lv3: 12000 Lv4: 14000 @@ -1761,7 +1772,7 @@ skill_db: ( Id: 43 Name: "AC_OWL" Description: "Owl's Eye" - MaxLevel: 20 + MaxLevel: 10 NumberOfHits: 0 SkillInfo: { Quest: true @@ -3425,13 +3436,13 @@ skill_db: ( InterruptCast: true CastTime: { Lv1: 640 - Lv2: 640 - Lv3: 576 - Lv4: 576 - Lv5: 512 - Lv6: 512 - Lv7: 448 - Lv8: 448 + Lv2: 576 + Lv3: 412 + Lv4: 448 + Lv5: 384 + Lv6: 384 + Lv7: 384 + Lv8: 384 Lv9: 384 Lv10: 384 } @@ -3450,27 +3461,27 @@ skill_db: ( } FixedCastTime: { Lv1: 160 - Lv2: 160 - Lv3: 144 - Lv4: 144 - Lv5: 128 - Lv6: 128 - Lv7: 112 - Lv8: 112 + Lv2: 144 + Lv3: 128 + Lv4: 112 + Lv5: 96 + Lv6: 96 + Lv7: 96 + Lv8: 96 Lv9: 96 Lv10: 96 } Requirements: { SPCost: { - Lv1: 140 - Lv2: 160 - Lv3: 180 - Lv4: 200 - Lv5: 220 - Lv6: 240 - Lv7: 260 - Lv8: 280 - Lv9: 290 + Lv1: 120 + Lv2: 140 + Lv3: 160 + Lv4: 180 + Lv5: 200 + Lv6: 220 + Lv7: 240 + Lv8: 260 + Lv9: 280 Lv10: 300 } } @@ -12387,12 +12398,12 @@ skill_db: ( CastTime: 350 AfterCastActDelay: 500 SkillData2: { - Lv1: 10000 + Lv1: 15000 Lv2: 20000 - Lv3: 30000 - Lv4: 40000 - Lv5: 50000 - Lv6: 60000 + Lv3: 25000 + Lv4: 30000 + Lv5: 35000 + Lv6: 40000 Lv7: 70000 Lv8: 80000 Lv9: 90000 @@ -12402,15 +12413,15 @@ skill_db: ( Requirements: { SPCost: { Lv1: 95 - Lv2: 100 - Lv3: 110 - Lv4: 120 - Lv5: 130 - Lv6: 140 - Lv7: 150 - Lv8: 160 - Lv9: 170 - Lv10: 180 + Lv2: 120 + Lv3: 145 + Lv4: 170 + Lv5: 200 + Lv6: 200 + Lv7: 200 + Lv8: 200 + Lv9: 200 + Lv10: 200 } } }, @@ -19422,36 +19433,38 @@ skill_db: ( MaxLevel: 5 Range: { Lv1: 5 - Lv2: 6 - Lv3: 7 - Lv4: 8 - Lv5: 9 + Lv2: 7 + Lv3: 9 + Lv4: 10 + Lv5: 10 Lv6: 10 - Lv7: 11 - Lv8: 12 - Lv9: 13 - Lv10: 14 + Lv7: 10 + Lv8: 10 + Lv9: 10 + Lv10: 10 } Hit: "BDT_SKILL" SkillType: { Enemy: true } + DamageType: { + IgnoreFlee: true + } AttackType: "Weapon" Element: "Ele_Weapon" - AfterCastActDelay: 1500 - FixedCastTime: -1 + FixedCastTime: 100 Requirements: { SPCost: { - Lv1: 120 - Lv2: 125 - Lv3: 130 - Lv4: 135 - Lv5: 140 - Lv6: 145 - Lv7: 150 - Lv8: 155 - Lv9: 160 - Lv10: 165 + Lv1: 110 + Lv2: 115 + Lv3: 120 + Lv4: 125 + Lv5: 130 + Lv6: 135 + Lv7: 140 + Lv8: 145 + Lv9: 150 + Lv10: 155 } } }, @@ -28096,16 +28109,16 @@ skill_db: ( Element: "Ele_Fire" InterruptCast: true SkillInstances: { - Lv1: 8 - Lv2: 10 - Lv3: 12 - Lv4: 14 - Lv5: 16 - Lv6: 18 - Lv7: 20 - Lv8: 22 - Lv9: 24 - Lv10: 26 + Lv1: 7 + Lv2: 9 + Lv3: 11 + Lv4: 13 + Lv5: 15 + Lv6: 17 + Lv7: 19 + Lv8: 21 + Lv9: 23 + Lv10: 25 } CastTime: 1000 CoolDown: { @@ -28121,25 +28134,25 @@ skill_db: ( Lv10: 20000 } AfterCastActDelay: 1000 - SkillData1: 12000 - FixedCastTime: -1 + SkillData1: 9000 + FixedCastTime: 300 Requirements: { SPCost: { Lv1: 130 - Lv2: 134 - Lv3: 138 - Lv4: 142 - Lv5: 146 - Lv6: 150 - Lv7: 154 - Lv8: 158 - Lv9: 162 - Lv10: 166 + Lv2: 150 + Lv3: 180 + Lv4: 220 + Lv5: 250 + Lv6: 250 + Lv7: 250 + Lv8: 250 + Lv9: 250 + Lv10: 250 } } Unit: { Id: 0xdc - Interval: 500 + Interval: 750 Target: "Enemy" Flag: { UF_NOREITERATION: true diff --git a/maps/re/017-1.mcache b/maps/re/017-1.mcache Binary files differindex 8e0460974..291b35397 100644 --- a/maps/re/017-1.mcache +++ b/maps/re/017-1.mcache diff --git a/maps/re/018-6-2.mcache b/maps/re/018-6-2.mcache Binary files differnew file mode 100644 index 000000000..f72c6cf46 --- /dev/null +++ b/maps/re/018-6-2.mcache diff --git a/maps/re/018-6-3.mcache b/maps/re/018-6-3.mcache Binary files differnew file mode 100644 index 000000000..8adaa3869 --- /dev/null +++ b/maps/re/018-6-3.mcache diff --git a/npc/003-0/colin.txt b/npc/003-0/colin.txt index 7d8bbf77b..720afcbc1 100644 --- a/npc/003-0/colin.txt +++ b/npc/003-0/colin.txt @@ -20,6 +20,7 @@ mesc l("Napalm Beat - Spammable AoE Skill"); mesc l("Frost Diver - Attempt to freeze an enemy, dealing damage"); + mesc l("Fire Walk - Creates a trail of fire, harming any pursuer"); mesc l("Frost Nova - Freeze everything in a range"); mesc l("Note: You can exchange 1 @@ for 3 @@", getitemlink(GemPowder), getitemlink(Quill)), 1; @@ -29,6 +30,7 @@ l("Magic Strike"), MG_SOULSTRIKE, l("Napalm Beat"), MG_NAPALMBEAT, l("Frost Diver"), MG_FROSTDIVER, + l("Fire Walk"), SO_FIREWALK, l("Frost Nova"), WZ_FROSTNOVA, rif(countitem(GemPowder), l("Exchange Gempowder for Quill")), -1, l("Cancel"), 0; @@ -60,8 +62,12 @@ if (!mlearn(MG_FROSTDIVER, 7, 2, Quill, 1)) mesc l("You do not meet all requisites for this skill."), 1; break; + case SO_FIREWALK: + if (!mlearn(SO_FIREWALK, 2, 2, Lockpicks, 1)) + mesc l("You do not meet all requisites for this skill."), 1; + break; case WZ_FROSTNOVA: - if (!mlearn(WZ_FROSTNOVA, 7, 3, Quill, 1)) + if (!mlearn(WZ_FROSTNOVA, 4, 3, Quill, 1)) mesc l("You do not meet all requisites for this skill."), 1; break; default: diff --git a/npc/003-0/luca.txt b/npc/003-0/luca.txt index dc5720ebd..677f223c6 100644 --- a/npc/003-0/luca.txt +++ b/npc/003-0/luca.txt @@ -50,7 +50,7 @@ mesc l("You do not meet all requisites for this skill."), 1; break; case ASC_METEORASSAULT: - if (!mlearn(ASC_METEORASSAULT, 5, 2, FluoPowder, 3)) + if (!mlearn(ASC_METEORASSAULT, 3, 2, FluoPowder, 3)) mesc l("You do not meet all requisites for this skill."), 1; break; case SN_SHARPSHOOTING: diff --git a/npc/003-0/trickmaster.txt b/npc/003-0/trickmaster.txt index e35312606..3a111e4a3 100644 --- a/npc/003-0/trickmaster.txt +++ b/npc/003-0/trickmaster.txt @@ -19,11 +19,10 @@ "freecast", SA_FREECAST, "backslide", TF_BACKSLIDING, "firewall", MG_FIREWALL, - //"inccarry", ALL_INCCARRY, + "vulture", AC_VULTURE, "fullthrottle", ALL_FULL_THROTTLE, "darkillusion", GC_DARKILLUSION, "trickdead", NV_TRICKDEAD, - "firewalk", SO_FIREWALK, "Cancel", 0; mes ""; setskin ""; @@ -41,8 +40,8 @@ if (!mlearn(MG_FIREWALL, 10, 1, Lockpicks, 1)) mesc l("You do not meet all requisites for this skill."), 1; break; - case ALL_INCCARRY: - if (!mlearn(ALL_INCCARRY, 2, 1, Lockpicks, 1)) + case AC_VULTURE: + if (!mlearn(AC_VULTURE, 1, 1, Lockpicks, 1)) mesc l("You do not meet all requisites for this skill."), 1; break; case ALL_FULL_THROTTLE: @@ -50,17 +49,13 @@ mesc l("You do not meet all requisites for this skill."), 1; break; case GC_DARKILLUSION: - if (!mlearn(GC_DARKILLUSION, 1, 2, Lockpicks, 1)) + if (!mlearn(GC_DARKILLUSION, 3, 2, Lockpicks, 1)) mesc l("You do not meet all requisites for this skill."), 1; break; case NV_TRICKDEAD: if (!mlearn(NV_TRICKDEAD, 1, 2, Lockpicks, 1)) mesc l("You do not meet all requisites for this skill."), 1; break; - case SO_FIREWALK: - if (!mlearn(SO_FIREWALK, 2, 2, Lockpicks, 1)) - mesc l("You do not meet all requisites for this skill."), 1; - break; default: if (@menuret) Exception("ERROR skill not implemented", RB_DEFAULT|RB_SPEECH); diff --git a/npc/003-1/tinris.txt b/npc/003-1/tinris.txt index ce759981f..92404daef 100644 --- a/npc/003-1/tinris.txt +++ b/npc/003-1/tinris.txt @@ -109,7 +109,35 @@ L_Fail: else getexp 90, 0; mesn; - mesq l("Well, that could fail, I said. Here is some experience."); + switch (.@q2) { + case 1: + mesq l("Well, that could fail, I said. Here is some experience."); + break; + case 2: + mesq l("Don't worry, third time is the charm. Here is some experience. Let's try again."); + break; + case 3: + mesq l("Okay, here is some experience, and forgot what I've said before. We can try again."); + break; + case 4: + mesq l("Don't worry, I've tweaked my formula this time. Here is some experience and let's try again!"); + break; + case 5: + mesq l("I'm sorry, I just... Maybe if...? Aha! Here's the EXP, ready for a next go?"); + break; + case 6: + mesq l("Uhm, maybe I mashed the Plushroom too hard this time. Here's EXP as usual, let's try again?"); + break; + case 7: + mesq l("I shall not fail any further, I think my new formula is perfect! Here's the EXP, but I need material to use it!"); + break; + case 8: + mesq l("I never knew you could fail THAT hard. I've took Saulc's Fertilizer's recipe, success chance is of 100% if you want to try again."); + break; + default: + mesq l("Well, that could fail, I said. Here is some experience."); + break; + } next; if (countitem(Plushroom) >= 3 && countitem(MaggotSlime) >= 9) diff --git a/npc/004-1/anwar.txt b/npc/004-1/anwar.txt index 036131c6e..47ca64255 100644 --- a/npc/004-1/anwar.txt +++ b/npc/004-1/anwar.txt @@ -62,8 +62,8 @@ L_TryIt: next; setq2 TulimsharQuest_AnwarField, .@q2+1; - // Fail chances are 100% - 12% per attempt - if (rand(0,100) < 100-(.@q2*12)) { + // Fail chances are 100% - 13% per attempt + if (rand2(0,100) < 100-(.@q2*13)) { setq1 TulimsharQuest_AnwarField, 6; mesc l("Nothing happens."); next; diff --git a/npc/012-1/shoppakep.txt b/npc/012-1/shoppakep.txt index 2ee13acc2..a55e36554 100644 --- a/npc/012-1/shoppakep.txt +++ b/npc/012-1/shoppakep.txt @@ -35,7 +35,7 @@ OnInit: sellitem CottonSkirt, 100000, 1; sellitem MiniSkirt, 100000, 1; sellitem ShortTankTop, 100000, 1; - sellitem CottonTrousers, 90000, 1; + sellitem CottonTrousers, 80000, 1; sellitem CottonGloves, 20000, 1; sellitem CottonBoots, 10000, 1; @@ -56,7 +56,7 @@ OnClock0546: restoreshopitem CottonSkirt, 100000, 1; restoreshopitem MiniSkirt, 100000, 1; restoreshopitem ShortTankTop, 100000, 1; - restoreshopitem CottonTrousers, 90000, 1; + restoreshopitem CottonTrousers, 80000, 1; restoreshopitem CottonGloves, 20000, 1; restoreshopitem CottonBoots, 10000, 1; diff --git a/npc/014-2/mouboo.txt b/npc/014-2/mouboo.txt index 038f0aec0..99534db10 100644 --- a/npc/014-2/mouboo.txt +++ b/npc/014-2/mouboo.txt @@ -93,6 +93,7 @@ L_Begin: itemeffect(.@id); // As a bonus, you'll be healed too, because I need to retrieve @max value // You need about 9.000 HP-worth healing items, and you can't use Mouboo Steak + @val1*=rand2(3,5); // Average delay if (.@id == ElixirOfLife) setq2 HurnscaldQuest_InjuriedMouboo, 9999; else diff --git a/npc/014-5-1/sagratha.txt b/npc/014-5-1/sagratha.txt index e5f31475c..81ac6b0bb 100644 --- a/npc/014-5-1/sagratha.txt +++ b/npc/014-5-1/sagratha.txt @@ -57,8 +57,6 @@ function script SaggyMobCount { function requireHelp; if (array_find(.SaggyHats, getequipid(EQI_HEAD_TOP)) >= 0) goto L_HatAttack; - if (SAGRATHA_SCORE < 0) - goto L_Unhappy; .@q=getq(HurnscaldQuest_Sagratha); .@m=getq(HurnscaldQuest_InjuriedMouboo); @@ -86,6 +84,8 @@ function script SaggyMobCount { goto L_Reward; if (.@q == 6) goto L_Finish; + if (SAGRATHA_SCORE < 0) + goto L_Unhappy; do { diff --git a/npc/015-8-1/_import.txt b/npc/015-8-1/_import.txt index d2ae0e8bb..016ede10f 100644 --- a/npc/015-8-1/_import.txt +++ b/npc/015-8-1/_import.txt @@ -1,4 +1,4 @@ -// Map 015-8-1: Cave Of Trials +// Map 015-8-1: Abandoned Ruins // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/015-8-1/campaign.txt", "npc/015-8-1/puzzle.txt", diff --git a/npc/017-1/townhall.txt b/npc/017-1/townhall.txt index 61df25334..772688eed 100644 --- a/npc/017-1/townhall.txt +++ b/npc/017-1/townhall.txt @@ -4,7 +4,7 @@ // Description: // LoF Townhall Access Control -017-1,180,20,0 script #LoF_Townhall01 NPC_HIDDEN,{ +017-1,180,20,0 script #LoF_Townhall01 NPC_NO_SPRITE,0,0,{ end; OnTouch: @@ -14,13 +14,10 @@ OnTouch: warp "017-10", 56, 78; } end; -OnInit: - .distance=1; - end; } -017-1,182,20,0 script #LoF_Townhall02 NPC_HIDDEN,{ +017-1,182,20,0 script #LoF_Townhall02 NPC_NO_SPRITE,0,0,{ end; OnTouch: @@ -30,12 +27,9 @@ OnTouch: warp "017-10", 60, 78; } end; -OnInit: - .distance=1; - end; } -017-1,171,20,0 script #LoF_Townhall03 NPC_HIDDEN,{ +017-1,171,20,0 script #LoF_Townhall03 NPC_NO_SPRITE,0,0,{ end; OnTouch: @@ -45,12 +39,9 @@ OnTouch: warp "017-10", 36, 78; } end; -OnInit: - .distance=1; - end; } -017-1,190,20,0 script #LoF_Townhall04 NPC_HIDDEN,{ +017-1,190,20,0 script #LoF_Townhall04 NPC_NO_SPRITE,0,0,{ end; OnTouch: @@ -60,9 +51,6 @@ OnTouch: warp "017-10", 80, 78; } end; -OnInit: - .distance=1; - end; } ///////////////////////////// // Main Quest 6 @@ -85,8 +73,8 @@ function script BarbaraInstCheck { .@inst = instance_create("Forgotten Shrine "+getcharid(0), getcharid(3), IOT_CHAR); instance_attachmap("018-6-0", .@inst, false, .@map0$); instance_attachmap("018-6-1", .@inst, false, .@map1$); - //instance_attachmap("018-6-2", .@inst, false, .@map2$); - //instance_attachmap("018-6-3", .@inst, false, .@map3$); + instance_attachmap("018-6-2", .@inst, false, .@map2$); + instance_attachmap("018-6-3", .@inst, false, .@map3$); // Instance lasts two hours instance_set_timeout(7200, 7200, .@inst); instance_init(.@inst); @@ -104,11 +92,10 @@ function script BarbaraInstCheck { return getd(".@map"+.@house+"$"); } -017-1,32,44,0 script #LoF_EleniumMines NPC_HIDDEN,{ +017-1,32,44,0 script #LoF_EleniumMines NPC_NO_SPRITE,0,0,{ end; OnTouch: - // TODO: OnQuest: Instance .@q=getq(LoFQuest_Barbara); if (.@q >= 1) { warp BarbaraInstCheck(1), 80, 199; @@ -116,8 +103,5 @@ OnTouch: warp "018-6-1", 80, 199; } end; -OnInit: - .distance=1; - end; } diff --git a/npc/017-4/refine.txt b/npc/017-4/refine.txt index 4c3e472d7..2bed9cee8 100644 --- a/npc/017-4/refine.txt +++ b/npc/017-4/refine.txt @@ -35,12 +35,12 @@ OnInit: L_Fusus: inventoryplace Iten, 1; mesn; - mesq l("I can fuse an @@ and 20 @@, besides @@ GP, into 3~5 @@.", getitemlink(CopperIngot), getitemlink(SilkCocoon), 500, getitemlink(Wurtizite)); - mesc l("5 @@ can be fused in a @@", getitemlink(Wurtizite), getitemlink(Graphene)); + mesq l("I can fuse an @@ and 20 @@, besides @@ GP, into 3~5 @@.", getitemlink(CopperIngot), getitemlink(SilkCocoon), 500, getitemlink(Wurtzite)); + mesc l("5 @@ can be fused in a @@", getitemlink(Wurtzite), getitemlink(Graphene)); mesc l("5 @@ can be fused in a @@", getitemlink(Graphene), getitemlink(Arcanum)); select - rif(Zeny >= 500, l("I want the Wurtizite")), - rif(countitem(Wurtizite) >= 5, l("I want Graphene")), + rif(Zeny >= 500, l("I want the Wurtzite")), + rif(countitem(Wurtzite) >= 5, l("I want Graphene")), rif(countitem(Graphene) >= 5, l("I want Arcanum")), l("Do nothing"); mes ""; @@ -51,10 +51,10 @@ L_Fusus: if (!transcheck(CopperIngot, 1, SilkCocoon, 20)) close; Zeny -= 500; - getitem Wurtizite, any(3,3,4,4,4,5); // 3: ~33%. 4: =50%. 5: ~17%. AVG: 3.8 + getitem Wurtzite, any(3,3,4,4,4,5); // 3: ~33%. 4: =50%. 5: ~17%. AVG: 3.8 break; case 2: - delitem Wurtizite, 5; + delitem Wurtzite, 5; getitem Graphene, 1; break; case 3: diff --git a/npc/018-6-0/_import.txt b/npc/018-6-0/_import.txt index 45be6bdab..0e2c16f0e 100644 --- a/npc/018-6-0/_import.txt +++ b/npc/018-6-0/_import.txt @@ -1,2 +1,3 @@ // Map 018-6-0: Sanctuary - Forgotten Chamber // This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/018-6-0/main.txt", diff --git a/npc/018-6-0/ctrl b/npc/018-6-0/ctrl new file mode 100644 index 000000000..e1f7f6140 --- /dev/null +++ b/npc/018-6-0/ctrl @@ -0,0 +1,29 @@ +LoFQuest_Barbara +q1 + q3 + +-------------------------- +0 Quest not assigned +1 Quest was assigned + 0 No cutscene seen + 1 The wounded soldier seen + 2 The footprints seen +2 Forgotten Chamber Puzzle is in progress (warp on) + 0 No puzzle solved + 1 West puzzle solved (&) (west lever) + 2 East puzzle solved (&) (east lever) + 3 South puzzle unlocked (w/e lever) + 4 South puzzle node (e/w lever) + 5 South puzzle solved, access to shrine granted +3 Forgotten Shrine has been allowed (warp on / remember to reenable NPCs on resume) + Bitwise boss fights: + 1, 2, 4, 8, 16, 32, 64, 128, 256 (enable warps as win) + → Once the main shrine was reached: set to 511, Mana Stone story + & 512 => Boss defeated, cutscene ended, magic apple now visible +4 Ambush finished, return to elenium mines +5 Barbara captured +6 Reward claimed, Barbara Arrested +7 Reward claimed, Barbara NOT Arrested + +Field 2: Instance ID + diff --git a/npc/018-6-0/main.txt b/npc/018-6-0/main.txt new file mode 100644 index 000000000..40827f383 --- /dev/null +++ b/npc/018-6-0/main.txt @@ -0,0 +1,122 @@ +// TMW2 Scripts +// Author: +// Jesusalva +// Description: +// Controls Forgotten Chamber + +///////////////////////////// +018-6-0,90,67,0 script #ToForgottenShrine NPC_SUMMONING_CIRC,0,0,{ + dispbottom l("It looks dangerous."); + end; + +OnTouch: + .@q=getq(LoFQuest_Barbara); + if (.@q >= 2) { + warp BarbaraInstCheck(3), 31, 151; + //warp BarbaraInstCheck(0), 90+any(-1, 1), 90+any(-1,1); + } else { + Exception("ERROR, YOU SHOULD NOT BEEN SEEING THIS. 018-6-1.TFC"); + } + end; + + +OnInit: + disablenpc .name$; + end; +OnInstanceInit: + disablenpc instance_npcname(.name$); + end; +} + +///////////////////////////// +018-6-0,90,90,0 script #FromEleniumMines NPC_SUMMONING_CIRC,0,0,{ + dispbottom l("It should bring me back."); + end; + +OnTouch: + .@q=getq(LoFQuest_Barbara); + if (.@q < 10) { + warp BarbaraInstCheck(1), 83, 28; + //warp BarbaraInstCheck(0), 90+any(-1, 1), 90+any(-1,1); + } else { + warp "018-6-1", 83, 28; + } + end; +} + + + + + +///////////////////////////// +018-6-0,90,113,0 script #ToSouthHall NPC_SUMMONING_CIRC,0,0,{ + dispbottom l("It looks dangerous."); + end; + +OnTouch: + .@q=getq(LoFQuest_Barbara); + .@q2=getq2(LoFQuest_Barbara); + .@q3=getq3(LoFQuest_Barbara); + if (.@q == 2 && .@q3 >= 3) { + warp BarbaraInstCheck(2), 90, 32; + //warp BarbaraInstCheck(0), 90+any(-1, 1), 90+any(-1,1); + } else { + dispbottom l("I already visited this warp."); + } + end; + + +OnInit: + disablenpc .name$; + end; +OnInstanceInit: + disablenpc instance_npcname(.name$); + end; +} + +///////////////////////////// +018-6-0,67,90,0 script #ToWestHall NPC_SUMMONING_CIRC,0,0,{ + dispbottom l("It looks dangerous."); + end; + +OnTouch: + .@q=getq(LoFQuest_Barbara); + .@q2=getq2(LoFQuest_Barbara); + .@q3=getq3(LoFQuest_Barbara); + if (.@q == 2 && !(.@q3 & 1)) { + warp BarbaraInstCheck(2), 70, 150; + } else { + dispbottom l("I already visited this warp."); + } + end; + + +OnInit: + disablenpc .name$; + end; +} + + +///////////////////////////// +018-6-0,113,90,0 script #ToEastHall NPC_SUMMONING_CIRC,0,0,{ + dispbottom l("It looks dangerous."); + end; + +OnTouch: + .@q=getq(LoFQuest_Barbara); + .@q2=getq2(LoFQuest_Barbara); + .@q3=getq3(LoFQuest_Barbara); + if (.@q == 2 && !(.@q3 & 2)) { + warp BarbaraInstCheck(2), 103, 156; + } else { + dispbottom l("I already visited this warp."); + } + end; + + +OnInit: + disablenpc .name$; + end; +} + + diff --git a/npc/018-6-1/_import.txt b/npc/018-6-1/_import.txt index de446a263..2770c1ae4 100644 --- a/npc/018-6-1/_import.txt +++ b/npc/018-6-1/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/018-6-1/_mobs.txt", "npc/018-6-1/_warps.txt", +"npc/018-6-1/main.txt", diff --git a/npc/018-6-1/main.txt b/npc/018-6-1/main.txt new file mode 100644 index 000000000..5a1331aaf --- /dev/null +++ b/npc/018-6-1/main.txt @@ -0,0 +1,115 @@ +// TMW2 Scripts +// Author: +// Jesusalva +// Description: +// Controls Elenium Mines, specially the instances + +// Main Controller for Instanced maps +018-6-1,0,0,0 script #01861_InstCtrl NPC_HIDDEN,{ + end; + +// Map, x, y, width, height, mob, amount +function AreaMonsterB { + .@m$=getarg(0); + .@x1=getarg(1); + .@x2=.@x1+getarg(3); + .@y1=getarg(2); + .@y2=.@y1+getarg(4); + .@mi=getarg(5); + .@am=getarg(6); + areamonster(.@m$, .@x1, .@y1, .@x2, .@y2, strmobinfo(1, .@mi), .@mi, .@am, instance_npcname(.name$)+"::OnKill"+.@mi); + return; +} + +// (var, value) +function SetIfVoid { + if (!getarg(0)) + return getarg(1); + return 0; +} + +// Bifs won't respawn +OnKill1226: +OnKill1227: +OnKill1228: + end; + +// Others: Wait 30 seconds and respawn +OnKill1178: + .@mi=SetIfVoid(.@mi, 1178); +OnKill1051: + .@mi=SetIfVoid(.@mi, 1051); +OnKill1074: + .@mi=SetIfVoid(.@mi, 1074); +OnKill1123: + .@mi=SetIfVoid(.@mi, 1123); +OnKill1176: + .@mi=SetIfVoid(.@mi, 1176); +OnKill1026: + .@mi=SetIfVoid(.@mi, 1026); + + // Common utils + getmapxy(.@m$, .@x, .@y, 0); + sleep(30000); + AreaMonsterB(.@m$, .@x-2, .@y-2, 4, 4, .@mi, 1); + end; + +OnInstanceInit: + // Generate map ID + getmapxy(.@m$, .@x, .@y, UNITTYPE_NPC); + + // Bif monsters + AreaMonsterB(.@m$, 40, 49, 7, 8, BigEleniumBif, 5); + AreaMonsterB(.@m$, 95, 51, 7, 8, BigEleniumBif, 5); + AreaMonsterB(.@m$, 145, 83, 6, 5, EleniumBif, 5); + AreaMonsterB(.@m$, 62, 86, 6, 5, EleniumBif, 5); + AreaMonsterB(.@m$, 65, 130, 6, 5, EleniumBif, 5); + AreaMonsterB(.@m$, 125, 158, 6, 5, SmallEleniumBif, 4); + AreaMonsterB(.@m$, 129, 183, 6, 5, SmallEleniumBif, 4); + AreaMonsterB(.@m$, 34, 181, 5, 5, SmallEleniumBif, 4); + + // Common Monsters + AreaMonsterB(.@m$, 80, 172, 54, 25, BlackSlime, 16); + AreaMonsterB(.@m$, 89, 167, 54, 25, DarkLizard, 8); + AreaMonsterB(.@m$, 96, 103, 56, 29, BlackScorpion, 18); + AreaMonsterB(.@m$, 101, 105, 54, 25, MountainSnake, 10); + AreaMonsterB(.@m$, 70, 45, 44, 25, WickedMushroom, 14); + AreaMonsterB(.@m$, 68, 45, 31, 21, Archant, 7); + end; + +} +///////////////////////////// +018-6-1,83,26,0 script #ToForgottenChamber NPC_SUMMONING_CIRC,0,0,{ + dispbottom l("It looks dangerous."); + end; + +OnTouch: + .@q=getq(LoFQuest_Barbara); + .@q2=getq2(LoFQuest_Barbara); + .@q3=getq3(LoFQuest_Barbara); + if (.@q >= 1) { + warp BarbaraInstCheck(0), 90, 91; + // Complete the first arc if possible + if (.@q == 1) { + setq1 LoFQuest_Barbara, 2; + setq3 LoFQuest_Barbara, 0; + } + // Update M0 NPCs based on quest state + if (.@q3 == 5) + enablenpc instance_npcname("#ToForgottenShrine", .@q2); + + } else { + Exception("ERROR, YOU SHOULD NOT BEEN SEEING THIS. 018-6-1.TFC"); + } + end; + +OnInit: + disablenpc .name$; + end; + +} + +///////////////////////////// Minievents + + + diff --git a/npc/018-6-2/_import.txt b/npc/018-6-2/_import.txt new file mode 100644 index 000000000..2291a778c --- /dev/null +++ b/npc/018-6-2/_import.txt @@ -0,0 +1,3 @@ +// Map 018-6-2: Forgotten Hall +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/018-6-2/main.txt", diff --git a/npc/018-6-2/main.txt b/npc/018-6-2/main.txt new file mode 100644 index 000000000..a1ffd51fa --- /dev/null +++ b/npc/018-6-2/main.txt @@ -0,0 +1,48 @@ +// TMW2 Scripts +// Author: +// Jesusalva +// Description: +// Controls Forgotten Chamber + +///////////////////////////// +018-6-2,90,31,0 script #FromSouthHall NPC_SUMMONING_CIRC,0,0,{ + dispbottom l("It looks dangerous."); + end; + +OnTouch: + .@q=getq(LoFQuest_Barbara); + .@q2=getq2(LoFQuest_Barbara); + .@q3=getq3(LoFQuest_Barbara); + if (.@q == 2) { + // 1 - West Puzzle + if (!(.@q3 & 1)) { + warp BarbaraInstCheck(0), 68, 90; + setq3 LoFQuest_Barbara, .@q3|1; + } + // 2 - East Puzzle + else if (!(.@q3 & 2)) { + warp BarbaraInstCheck(0), 112, 90; + setq3 LoFQuest_Barbara, .@q3|2; + } + // Wut + else { + Exception("ERROR, YOU SHOULD NOT BEEN SEEING THIS. 018-6-2.FSH", RB_DEFAULT|RB_ISFATAL); + } + // Active the quest + if (.@q3 == 3) + enablenpc instance_npcname("#ToSouthHall", .@q2); + } else { + Exception("ERROR, YOU SHOULD NOT BEEN SEEING THIS. 018-6-2.FSH.MQ"); + } + end; + +OnInit: + disablenpc .name$; + end; +OnInstanceInit: + disablenpc instance_npcname(.name$); + end; + +} + + diff --git a/npc/018-6-3/_import.txt b/npc/018-6-3/_import.txt new file mode 100644 index 000000000..31f003015 --- /dev/null +++ b/npc/018-6-3/_import.txt @@ -0,0 +1,2 @@ +// Map 018-6-3: Forgotten Shrine +// This file is generated automatically. All manually added changes will be removed when running the Converter. diff --git a/npc/_import.txt b/npc/_import.txt index c877bae5d..e5596800e 100644 --- a/npc/_import.txt +++ b/npc/_import.txt @@ -128,6 +128,8 @@ @include "npc/018-5/_import.txt" @include "npc/018-6-0/_import.txt" @include "npc/018-6-1/_import.txt" +@include "npc/018-6-2/_import.txt" +@include "npc/018-6-3/_import.txt" @include "npc/019-1-1/_import.txt" @include "npc/019-1/_import.txt" @include "npc/019-2/_import.txt" diff --git a/npc/craft/options.txt b/npc/craft/options.txt index c0ad5c8b7..db844d179 100644 --- a/npc/craft/options.txt +++ b/npc/craft/options.txt @@ -276,6 +276,9 @@ function script csys_Generate { array_push(@csys_attr, IOPT_EXPGAIN); } if (.@lvl >= 3) { + array_push(@csys_attr, IOPT_RICHNESS); + } + if (.@lvl >= 5) { array_push(@csys_attr, IOPT_SPLASHDAMAGE); } array_push(@csys_penalty, IOPT_WALKSPEED); @@ -345,6 +348,7 @@ function script csys_Multiplier { case IOPT_SPLASHDAMAGE: return 0; case IOPT_WALKSPEED: + case IOPT_RICHNESS: return 2; case VAR_AGIAMOUNT: case VAR_LUKAMOUNT: diff --git a/npc/functions/clientversion.txt b/npc/functions/clientversion.txt index b264b6b09..9c9308d56 100644 --- a/npc/functions/clientversion.txt +++ b/npc/functions/clientversion.txt @@ -12,8 +12,22 @@ function script clientupdater { if (getmap() ~= "000-0*") { UPDATE=gettimetick(2); } + // If you're in Jail, show a minor message + if (getmap() == "sec_pri") { + dispbottom l("You seem to be jailed. We cannot unjail offline players, so please don't logout."); + dispbottom l("You have the right to defend yourself if you believe we were wrong. If we find out it's true, you'll receive an apology gift."); + dispbottom l("Note: Unless you were doing something REALLY bad which is harmful to player community (eg. scamming, hacking, DDoS'ing, etc.)"); + dispbottom l("Please contact a GM as soon as possible so we can make out a compromise. You should be liberated even if found guilty."); + } .@dg=0; + // ERROR fixing + if (UPDATE == 1565039378 && #UPDATE < 1565039378) { + getitem MysteriousFruit, 1; + UPDATE+=1; + #UPDATE=1565039378; + dispbottom l("Received one @@ as August daily login bug Token of Apology!", getitemlink(MysteriousFruit)); + } // Update handler (use `date +%s` for this) // Current UPDATE value: Qui Jun 7 08:10:55 -03 2018 if (Lang > 5 && UPDATE < 1528369855) { @@ -574,6 +588,34 @@ function script clientupdater { } // Update Crafting Score CRAFTING_SCORE_COMPLETE=CRAFTING_SCORE*39; + // Water bug + if (strcharinfo(0) == "JulieWarhawk") { + .@dg=true; + + // Sell Bottles + if (countitem(BottleOfWoodlandWater) > 1) { + delitem BottleOfWoodlandWater, (countitem(BottleOfWoodlandWater)/2)+1; + } + if (countitem(EmptyBottle)) { + delitem EmptyBottle, countitem(EmptyBottle); + } + if (countitem(IcedBottle)) { + delitem IcedBottle, countitem(IcedBottle); + } + getitem ArcmageBoxset, 1; + + // Unjail player + atcommand "@unjail "+strcharinfo(0); + mesn "Jesusalva"; + mesq l("You're right, you never sold any Water Bottle ever. I'm unjailing you."); + mesc l("As an Apology Token, you're also receiving one @@.", getitemlink(ArcmageBoxset)); + next; + } + + // Bug reward (FF) + if (strcharinfo(0) == "seeds") { + getitembound LegendaryMouboo, 1, 1; + } } // Test Server Updates diff --git a/npc/functions/game-rules.txt b/npc/functions/game-rules.txt index cd528e333..baa60f14c 100644 --- a/npc/functions/game-rules.txt +++ b/npc/functions/game-rules.txt @@ -27,7 +27,9 @@ function script GameRules { l("6. ##BDo not create multi accounts.##b A person may only hold one account and as many chars as allowed by the server/client. Staff members with special privileges in-game may have a second account without those privileges."), l("7. ##BAs long as you have an account, you agree with the [@@https://tmw2.org/legal|Terms Of Service@@]##b. Shall any rule conflict with these terms, the Terms Of Service provided on that link shall prevail."), l("8. ##BThe use of real money is prohibited##b for ingame stuff, except by sponsoring."), - l("9. ##BAdmit when you're wrong.##b Users trying to lie to or fool GMs will get no pity from them."); + l("9. ##BAdmit when you're wrong.##b Users trying to lie to or fool GMs will get no pity from them."), + l("10. ##BDo not logout##b at Botcheck area or at Jail. We cannot unjail an offline player. The opposite of rule 9: If you believe you're right, keep your ground and explain calmly what happened. We'll calmly analyse the situation. If you were jailed without guilt, an apology will be sent to you, provided this rule is not broken."), + l("11. If you believe you are Not Guilty, but the GM deemed you guilty, request a ##BCouncil Trial##b. It's your right. In a Council Trial, we'll have multiple people giving the veredict. Any player may be called to compose the council. All admins shall take part in it. An arragment relative to time, date, and number of counsellors is to be made."); return; } diff --git a/npc/functions/refine.txt b/npc/functions/refine.txt index 48535f91d..6275c042c 100644 --- a/npc/functions/refine.txt +++ b/npc/functions/refine.txt @@ -76,7 +76,7 @@ function script refineMaster { case 1: case 2: case 3: - .@rg=Wurtizite; break; + .@rg=Wurtzite; break; case 4: case 5: case 6: diff --git a/npc/items/teleporter.txt b/npc/items/teleporter.txt index 40bf61821..592817a75 100644 --- a/npc/items/teleporter.txt +++ b/npc/items/teleporter.txt @@ -31,10 +31,10 @@ OnUse: } // TODO: Are you already at target point? - // It have at least 30% chance to break + // It have at least 20% chance to break // Chances begin at 100%, and lower in 0.01% each second - // It will never be below 30%, which happens after 7000 seconds - .@adj_breakrate=max(3000, 10000-(gettimetick(2)-TELEPORTER_TIME) ); + // It will never be below 20%, which happens after 8000 seconds + .@adj_breakrate=max(2000, 10000-(gettimetick(2)-TELEPORTER_TIME) ); //debugmes "Adjusted break ratio: %d", .@adj_breakrate; if (rand(0,10000) > .@adj_breakrate) getitem @itemid, 1; |