diff options
24 files changed, 156 insertions, 47 deletions
diff --git a/tools/aligncsv.cpp b/tools/aligncsv.cpp index 6e570e55..ef75ac00 100644 --- a/tools/aligncsv.cpp +++ b/tools/aligncsv.cpp @@ -7,10 +7,12 @@ #include <vector> #include <string> -// this configuration puts 3-6 spaces between entries (excluding headers) +// this configuration puts 2-5 spaces between entries (excluding headers) // and rounds the start of each field up to 4, for easier manual indenting -const size_t min_pad = 3; +// but force each field to be at least size 8 +const size_t min_pad = 2; const size_t align_pad = 4; +const size_t min_size = 8; void add_pieces(std::vector<std::string>& line, std::vector<size_t>& sizes) { @@ -39,6 +41,8 @@ void add_pieces(std::vector<std::string>& line, std::vector<size_t>& sizes) line[i].resize(--elt_size); // mandatory padding and comma elt_size += min_pad + 1; + if (elt_size < min_size) + elt_size = min_size; if (elt_size > sizes[i]) // always true if we expanded sizes sizes[i] = elt_size; diff --git a/world/map/db/const.txt b/world/map/db/const.txt index 240507a7..2363a1a2 100644 --- a/world/map/db/const.txt +++ b/world/map/db/const.txt @@ -218,6 +218,7 @@ equip_misc1 7 equip_misc2 8 equip_torso 9 equip_legs 10 +equip_arrow 11 // Appearance Slots // Using this for anything but hair is probably a mistake. @@ -672,3 +673,8 @@ OPT_BANK_CLOSE 2 // Currently used by the fluffy hunt (033-1). // starts counting with 0 MAX_HIGH_SCORES 4 + +// Launcher/Ammo Types +AMMO_NONE 0 +AMMO_BOW 1 +AMMO_SLING 2 diff --git a/world/map/db/item_db.txt b/world/map/db/item_db.txt index 8324c8e6..42227b27 100644 --- a/world/map/db/item_db.txt +++ b/world/map/db/item_db.txt @@ -30,8 +30,8 @@ 526, CoinBag, Coin Bag, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} 527, Milk, Milk, 0, 300, 150, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {itemheal 150, 0;}, {} 528, Boots, Boots, 5, 8000, 500, 80, 0, 2, 0, -2, 0, 2, 64, 0, 0, 0, {}, {} -529, IronArrow, Iron Arrow, 10, 4, 2, 1, 40, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {} -530, ShortBow, Short Bow, 4, 8000, 2000, 600, 50, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {} +529, IronArrow, Iron Arrow, 10, 4, 2, 1, 40, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";} +530, ShortBow, Short Bow, 4, 8000, 2000, 600, 50, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";} 531, MinerGloves, Miner Gloves, 5, 3000, 1000, 30, 0, 2, 0, -10, 0, 2, 4, 0, 0, 0, {}, {} 532, LeatherGloves, Leather Gloves, 5, 6000, 2000, 20, 0, 4, 0, -20, 0, 2, 4, 0, 0, 0, {}, {} 533, RoastedMaggot, Roasted Maggot, 0, 110, 55, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {itemheal 150, 0;}, {} @@ -47,7 +47,7 @@ 542, BottleOfSand, Bottle of Sand, 3, 70, 35, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} 543, StandardHeadband, Standard Headband, 5, 800, 400, 10, 0, 3, 0, -3, 0, 2, 256, 0, 0, 0, {}, {} 544, SilkHeadband, Silk Headband, 5, 5000, 2000, 10, 0, 10, 0, -10, 0, 2, 256, 0, 0, 0, {}, {} -545, ForestBow, Forest Bow, 4, 20000, 5000, 1200, 70, 0, 5, 0, 0, 2, 34, 1, 0, 11, {}, {} +545, ForestBow, Forest Bow, 4, 20000, 5000, 1200, 70, 0, 5, 0, 0, 2, 34, 1, 0, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";} 546, DesertShirt, Desert Shirt, 5, 2000, 1000, 20, 0, 6, 0, -18, 0, 2, 512, 0, 0, 0, {}, {} 547, Bardiche, Bardiche, 4, 20, 10, 10, 0, 100, 1, -200, 0, 2, 2, 0, 0, 1, {}, {callfunc "UnreleasedItem";} 548, Halberd, Halberd, 4, 20, 10, 1400, 100, 0, 1, 0, 0, 2, 2, 1, 0, 1, {}, {callfunc "UnreleasedItem";} @@ -78,9 +78,9 @@ 572, Scimitar, Scimitar, 4, 8000, 4000, 200, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";} 573, Falchion, Falchion, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";} 574, Scorpion, Scorpion, 4, 8000, 4000, 600, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";} -575, DesertBow, Desert Bow, 4, 8000, 4000, 1200, 100, 0, 1, 0, 0, 2, 34, 1, 1, 11, {}, {callfunc "UnreleasedItem";} +575, DesertBow, Desert Bow, 4, 8000, 4000, 1200, 100, 0, 1, 0, 0, 2, 34, 1, 1, 11, {}, {callfunc "UnreleasedItem";set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";} 576, Beheader, Beheader, 4, 8000, 4000, 2000, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";} -577, BoneDarts, Bone Darts, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";} +577, BoneDarts, Bone Darts, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem"; } 578, SandCutter, Sand Cutter, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";} 579, RockKnife, Rock Knife, 4, 15000, 7500, 500, 110, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {bonus bVit, 3;} //ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript} @@ -274,7 +274,7 @@ //759, PaladinsHelmet, Paladin's Helmet, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} //760, OverlordsHelmet, Overlord's Helmet, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} //761, DesertHelmet, Desert Helmet, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -762, TerraniteArrow, Terranite Arrow, 10, 80, 20, 1, 50, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 10;} +762, TerraniteArrow, Terranite Arrow, 10, 80, 20, 1, 50, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 10;set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";} 763, TerraniteOre, Terranite Ore, 3, 500, 250, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} //764, SailorHat, Sailor Hat, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} //765, CaptainsHat, Captain's Hat, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} @@ -393,7 +393,7 @@ 875, HeartOfLazurite, Heart of Lazurite, 3, 10000, 400, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} 876, WarlordBoots, Warlord Boots, 5, 19000, 2000, 550, 0, 5, 0, -22, 0, 2, 64, 0, 0, 0, {}, {} 877, BullHelmet, Bull Helmet, 5, 90000, 60000, 1300, 0, 19, 0, -52, 0, 2, 256, 0, 90, 0, {}, {set @bStat, bStr;set @minbStatVal, 70;callfunc "RequireStat"; set @bStat, bVit;set @minbStatVal, 50;callfunc "RequireStat"; set @bStat, bLuk;set @minbStatVal, 50;callfunc "RequireStat"; bonus bAtkRange, -10; bonus bDoubleAddRate, 20; bonus bStr, 10; bonus bCritical, 15; bonus bAspdRate, 10; bonus bDef2Rate, -39; bonus bHit, -15;} -878, BansheeBow, Banshee Bow, 4, 101000, 40000, 900, 90, 0, 6, 0, 0, 2, 34, 1, 90, 11, {}, {set @bStat, bDex;set @minbStatVal, 80;callfunc "RequireStat"; bonus2 bHPDrainRate, 100, -4; bonus bAspdRate, 20; bonus bCritical, 70; bonus bMaxHP, -150; bonus bDefRate, -40; bonus bDef2Rate, -35;} +878, BansheeBow, Banshee Bow, 4, 101000, 40000, 900, 90, 0, 6, 0, 0, 2, 34, 1, 90, 11, {}, {set @bStat, bDex;set @minbStatVal, 80;callfunc "RequireStat"; bonus2 bHPDrainRate, 100, -4; bonus bAspdRate, 20; bonus bCritical, 70; bonus bMaxHP, -150; bonus bDefRate, -40; bonus bDef2Rate, -35;set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";} 879, HeartOfIsis, Heart of Isis, 5, 70000, 35000, 40, 0, 0, 0, 0, 0, 2, 8, 0, 85, 0, {}, {bonus bMaxHPrate, 15; bonus bHPrecovRate, 65;} 880, LazuriteRobe, Lazurite Robe, 5, 92000, 52000, 30, 0, 7, 0, 60, 0, 2, 512, 0, 90, 0, {}, {set @bStat, bInt;set @minbStatVal, 70;callfunc "RequireStat"; set @bStat, bVit;set @minbStatVal, 40;callfunc "RequireStat"; bonus bSpeedAddRate, -15; bonus bDef2Rate, -40; bonus bMdef, 60; bonus bVit, -1; bonus bInt, 7; bonus bLuk, -1; bonus bDex, -1; bonus bStr, -1;} 881, RaggedShorts, Ragged Shorts, 5, 60, 1, 7, 0, 0, 0, -2, 0, 2, 1, 0, 1, 0, {}, {} @@ -407,24 +407,26 @@ 889, MurdererCrown, Murderer Crown, 5, 75000, 12000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {} 890, BeanieCopter, Beanie Copter, 5, 8000, 2000, 20, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {} 891, SilkSheet, Silk Sheet, 3, 1000, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -892, OrangeSummonFlower, Orange Summon Flower, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -893, PurpleSummonFlower, Purple Summon Flower, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -894, WhiteSummonFlower, White Summon Flower, 3, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -895, YellowSummonFlower, Yellow Summon Flower, 3, 400, 200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -896, RedSummonFlower, Red Summon Flower, 3, 600, 300, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -897, RedRoseHat, Red Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} -898, WhiteRoseHat, White Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} -899, PinkRoseHat, Pink Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} -900, YellowRoseHat, Yellow Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} -901, OrangeRoseHat, Orange Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} -902, BlueRoseHat, Blue Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} +892, OrangeSummonFlower, Orange Summon Flower, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} +893, PurpleSummonFlower, Purple Summon Flower, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} +894, WhiteSummonFlower, White Summon Flower, 3, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} +895, YellowSummonFlower, Yellow Summon Flower, 3, 400, 200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} +896, RedSummonFlower, Red Summon Flower, 3, 600, 300, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} +897, RedRoseHat, Red Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} +898, WhiteRoseHat, White Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} +899, PinkRoseHat, Pink Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} +900, YellowRoseHat, Yellow Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} +901, OrangeRoseHat, Orange Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} +902, BlueRoseHat, Blue Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} +903, SlingShot, Sling Shot, 4, 500, 50, 10, 5, 0, 3, 0, 0, 2, 34, 1, 1, 11, {}, {set @LauncherType, AMMO_SLING; callfunc "CheckLauncher";} +904, SlingBullet, Sling Bullet, 10, 1, 0, 1, 5, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_SLING; callfunc "CheckAmmo";} -// Add new entries above here. For dyed entries,add to the bottom of the 2000s. +// Add new entries above here. For dyed entries, add to the bottom of the 2000s. 1197, SkeletonCharm, Skeleton Charm, 5, 0, 0, 10, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, { callfunc "CheckMunro"; } 1198, JackOSoul, Jack O Soul, 3, 100000, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} -1199, Arrow, Arrow, 10, 2, 1, 1, 20, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {} -1200, Bow, Bow, 4, 1000, 500, 20, 20, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {} +1199, Arrow, Arrow, 10, 2, 1, 1, 20, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";} +1200, Bow, Bow, 4, 1000, 500, 20, 20, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";} 1201, Knife, Knife, 4, 50, 25, 120, 5, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {} 1202, CottonShirt, Cotton Shirt, 5, 300, 5, 13, 0, 2, 0, -2, 0, 2, 512, 0, 0, 0, {}, {} //ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript} @@ -511,7 +513,7 @@ 1279, GoblinMask, Goblin Mask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {} 1280, Scissors, Scissors, 0, 1000, 500, 120, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useScissors";}, {} 1281, ShockSweet, Shock Sweet, 0, 1000, 500, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useShockSweet";}, {} -1282, BoneArrows, Bone Arrows, 10, 50, 20, 0, 55, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 1; } +1282, BoneArrows, Bone Arrows, 10, 50, 20, 0, 55, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 1;set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";} // No new additions to the 1000s please. Add to the bottom of the < 1000s for regular entries and the 2000s for dyed entries. 2050, RedCottonShirt, Red Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {} 2051, GreenCottonShirt, Green Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {} @@ -732,7 +734,7 @@ 2259, DarkGreenCottonCloth, Dark Green Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} //ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript} -// Add dyed entries above here. For regular entries,please use the < 1000s. +// Add dyed entries above here. For regular entries, please use the < 1000s. 3000, JackOLantern, Jack-o-Lantern, 3, 200, 100, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} 3001, RubberBat, Rubber Bat, 3, 200, 100, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {} diff --git a/world/map/npc/012-1/amrak.txt b/world/map/npc/012-1/amrak.txt index 74e6cd88..8997631f 100644 --- a/world/map/npc/012-1/amrak.txt +++ b/world/map/npc/012-1/amrak.txt @@ -8,4 +8,4 @@ mes "[Amrak]"; mes "\"Unfortunately, I've had trouble getting up there. The monsters in these caves scare me.\""; close; -}
\ No newline at end of file +} diff --git a/world/map/npc/012-1/injured-mouboo.txt b/world/map/npc/012-1/injured-mouboo.txt index 91042c13..5f629cbe 100644 --- a/world/map/npc/012-1/injured-mouboo.txt +++ b/world/map/npc/012-1/injured-mouboo.txt @@ -217,4 +217,4 @@ S_update_var: (QUEST_MAGIC & ~(@Q_MASK) | (@Q_wr_status << @Q_SHIFT)); return; -}
\ No newline at end of file +} diff --git a/world/map/npc/012-3/mana-seed.txt b/world/map/npc/012-3/mana-seed.txt index 05e27697..b6c806d2 100644 --- a/world/map/npc/012-3/mana-seed.txt +++ b/world/map/npc/012-3/mana-seed.txt @@ -238,4 +238,4 @@ L_magic_destroy: L_end: close; -}
\ No newline at end of file +} diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt index a25db145..8f975af3 100644 --- a/world/map/npc/013-1/sagatha.txt +++ b/world/map/npc/013-1/sagatha.txt @@ -448,4 +448,4 @@ S_update_var: (QUEST_MAGIC & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; -}
\ No newline at end of file +} diff --git a/world/map/npc/014-1/wedding-officiator.txt b/world/map/npc/014-1/wedding-officiator.txt index a576fae9..cb8249c0 100644 --- a/world/map/npc/014-1/wedding-officiator.txt +++ b/world/map/npc/014-1/wedding-officiator.txt @@ -245,4 +245,4 @@ L_No_Room_For_Rings: mes "[Wedding Officiator]"; mes "\"You don't have room to carry the rings.\""; close; -}
\ No newline at end of file +} diff --git a/world/map/npc/015-1/sword.txt b/world/map/npc/015-1/sword.txt index e68d54ef..a20d9ef2 100644 --- a/world/map/npc/015-1/sword.txt +++ b/world/map/npc/015-1/sword.txt @@ -325,4 +325,4 @@ S_update_var: (QUEST_MAGIC & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; -}
\ No newline at end of file +} diff --git a/world/map/npc/020-1/well.txt b/world/map/npc/020-1/well.txt index 17b63c5c..1bd1fafb 100644 --- a/world/map/npc/020-1/well.txt +++ b/world/map/npc/020-1/well.txt @@ -128,4 +128,4 @@ S_Update_Var: (QUEST_Nivalis_state & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; -}
\ No newline at end of file +} diff --git a/world/map/npc/021-1/north_shops.txt b/world/map/npc/021-1/north_shops.txt index b4e03d28..b7c2b65a 100644 --- a/world/map/npc/021-1/north_shops.txt +++ b/world/map/npc/021-1/north_shops.txt @@ -3,7 +3,7 @@ // More high-end stuff to satisfy the richer people in Royal Tulimshar // Some clothing -021-1.gat,135,38,0|shop|Inar|108,CottonShirt :-1,CottonShorts :-1,CottonBoots :-1,DesertShirt :-1,SilkRobe :-5,DesertHat :-4 +021-1.gat,135,38,0|shop|Inar|108,SlingShot :-1,SlingBullet :-1,CottonShirt :-1,CottonShorts :-1,CottonBoots :-1,DesertShirt :-1,SilkRobe :-5,DesertHat :-4 021-1.gat,129,40,0|script|Well|400, { diff --git a/world/map/npc/021-2/bakery.txt b/world/map/npc/021-2/bakery.txt index 5239c498..738c90c2 100644 --- a/world/map/npc/021-2/bakery.txt +++ b/world/map/npc/021-2/bakery.txt @@ -236,4 +236,4 @@ L_SeeBunny: mes ""; mes "\"We come here every week. This place has some of the best bread I've ever eaten!\""; close; -}
\ No newline at end of file +} diff --git a/world/map/npc/026-1/munro.txt b/world/map/npc/026-1/munro.txt index 1151e3b8..ab304091 100644 --- a/world/map/npc/026-1/munro.txt +++ b/world/map/npc/026-1/munro.txt @@ -69,6 +69,7 @@ L_disablemunro: disablenpc "Munro"; L_End: + setnpctimer 0; end; } @@ -81,7 +82,7 @@ function|script|CheckMunro|, if ((gettime(6) == 12 && gettime(5) >= 23) || (gettime(6) == 12 && gettime(5) <= 26)) goto L_Return; - // unequipbyid @slotId; + callfunc "UnequipLater"; L_Return: return; diff --git a/world/map/npc/027-1/golbenez.txt b/world/map/npc/027-1/golbenez.txt index d560f953..34885a34 100644 --- a/world/map/npc/027-1/golbenez.txt +++ b/world/map/npc/027-1/golbenez.txt @@ -34,4 +34,20 @@ L_Weak: next; mes "\"Come back when you're a bit more experienced.\""; close; + +// Golbenez resets the graveyard monsters when no players are present +// He's such an evil guy! +OnInit: + initnpctimer; + end; + +OnTimer10000: + if (getareausers("027-1.gat", 21, 30, 112, 105) == 0) + killmonsterall "027-1.gat"; + + setnpctimer 0; + end; } + + + diff --git a/world/map/npc/027-3/entrance.txt b/world/map/npc/027-3/entrance.txt index 5449a12c..01ee28ce 100644 --- a/world/map/npc/027-3/entrance.txt +++ b/world/map/npc/027-3/entrance.txt @@ -42,4 +42,4 @@ OnTimer2000: + "The only way to get out is to defeat the reaper" + "or die..."; close; -}
\ No newline at end of file +} diff --git a/world/map/npc/042-2/sorfina.txt b/world/map/npc/042-2/sorfina.txt index b01a83c7..20c04adf 100644 --- a/world/map/npc/042-2/sorfina.txt +++ b/world/map/npc/042-2/sorfina.txt @@ -231,6 +231,8 @@ L_SkipTut: mes "\"Alright, if you say so. But take at least this."; callfunc "TutorialCompleted"; getitem "Knife", 1; + getitem "SlingShot", 1; + getitem "SlingBullet", 100; getitem "CottonShirt", 1; getitem "RaggedShorts", 1; set Zeny, Zeny + 50; diff --git a/world/map/npc/042-2/tanisha.txt b/world/map/npc/042-2/tanisha.txt index 437099dd..de93b8d5 100644 --- a/world/map/npc/042-2/tanisha.txt +++ b/world/map/npc/042-2/tanisha.txt @@ -50,7 +50,7 @@ L_Maggots: L_Fight_Again: mes "\"Ok, listen what to do."; - mes "Equip the knife and kill the maggots.\""; + mes "Equip a weapon and kill the maggots.\""; next; mes "\"Press A to focus on a monster. With X you can focus and start attacking the same time."; mes "But it also works to click on the monster with your mouse.\""; @@ -64,7 +64,15 @@ L_Fight_Again: // The getitem must be in the same place as set tanisha, 2; // since it was moved to after L_Fight_Again, add it conditionally if (tanisha == 1) - getitem "Knife", 1; + goto L_GetFightItems; + goto L_ContinueFight; + +L_GetFightItems: + getitem "Knife", 1; + getitem "SlingShot", 1; + getitem "SlingBullet", 100; + +L_ContinueFight: set tanisha, 2; set @Maggot_Kills, 0; set @time, 0; diff --git a/world/map/npc/functions/strangerquiz.txt b/world/map/npc/functions/strangerquiz.txt index 211e7e4b..b3488649 100644 --- a/world/map/npc/functions/strangerquiz.txt +++ b/world/map/npc/functions/strangerquiz.txt @@ -5,4 +5,4 @@ function|script|StrangerQuiz|, // return in @quizanswer$ set @quizanswer$, getspellinvocation(@quizparam$); return; -}
\ No newline at end of file +} diff --git a/world/map/npc/items/launcher_ammo.txt b/world/map/npc/items/launcher_ammo.txt new file mode 100644 index 00000000..79cf057b --- /dev/null +++ b/world/map/npc/items/launcher_ammo.txt @@ -0,0 +1,32 @@ +// ------------------------------------------------------------ +// Ammo Needs to know Launcher and vice versa. +// +// Behavior: +// - If only one is equipped, do nothing +// - If incompatible launcher and ammo are equipped, unequip the ammo +// +// Variables passed to these scripts: +// +// @LauncherType, @AmmoType +// +// ------------------------------------------------------------ + +function|script|CheckLauncher|, +{ + if (getequipid(equip_arrow) == -1) + set @LauncherType, 0; + return; +} + +function|script|CheckAmmo|, +{ + if ((@LauncherType == @AmmoType) || (!@LauncherType)) + goto L_Return; + + callfunc "UnequipLater"; + +L_Return: + set @LauncherType, 0; + set @AmmoType, 0; + return; +} diff --git a/world/map/npc/items/require_stat.txt b/world/map/npc/items/require_stat.txt index 77a518b1..8629b686 100644 --- a/world/map/npc/items/require_stat.txt +++ b/world/map/npc/items/require_stat.txt @@ -11,9 +11,15 @@ function|script|RequireStat|, { set @bStatVal, readparam(@bStat); - // If the requirement isn't met, then we end the script. - // Hence, subsequent item modifiers won't be applied. + // If the requirement isn't met, we set an unequip trigger. + // The item is now removed. if (@bStatVal < @minbStatVal) - end; + goto L_Unequip; + goto L_Return; + +L_Unequip: + callfunc "UnequipLater"; + +L_Return: return; } diff --git a/world/map/npc/items/restricted_item.txt b/world/map/npc/items/restricted_item.txt index 2aa69c7e..7e3213c0 100644 --- a/world/map/npc/items/restricted_item.txt +++ b/world/map/npc/items/restricted_item.txt @@ -11,11 +11,10 @@ function|script|RestrictedItem|, if (!@minLvl) set @minLvl, 60; if (debug || getgmlevel() >= @minLvl) goto L_Return; // If the active character is staff, do nothing. message strcharinfo(0), "This item repells you with extreme force. It does not seem to be meant for you."; - unequipbyid @slotId; + callfunc "UnequipLater"; if (getgmlevel()) goto L_Return; gmcommand "@wgm Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'."; gmcommand "@l Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'."; - end; L_Return: return; diff --git a/world/map/npc/items/unequipcb.txt b/world/map/npc/items/unequipcb.txt new file mode 100644 index 00000000..62dc7715 --- /dev/null +++ b/world/map/npc/items/unequipcb.txt @@ -0,0 +1,27 @@ +// For now this has to use a real map name, but the effect happens +// on any map because of the -1s at the end. +// Note: the client (I think) has a display bug if this is called +// during the intial connection's equip hook +botcheck.gat,0,0,0|script|UnequipCB|-1,-1,-1 +{ + +OnUnequip: + unequipbyid (@unequip_slot - 1); + set @unequip_slot, 0; + end; +} + +// Paired with unequipcb +function|script|UnequipLater|, +{ + // if there are multiple items that want to be removed, + // only schedule one timer - scripts will be called again + if (@unequip_slot) + goto L_Return; + + set @unequip_slot, (@slotId + 1); + addtimer 0, "UnequipCB::OnUnequip"; + +L_Return: + return; +} diff --git a/world/map/npc/items/unreleased_item.txt b/world/map/npc/items/unreleased_item.txt index 708cc1e0..457c2bcb 100644 --- a/world/map/npc/items/unreleased_item.txt +++ b/world/map/npc/items/unreleased_item.txt @@ -5,8 +5,12 @@ function|script|UnreleasedItem|, { - if (debug || getgmlevel()) end; // If the server allows equipping unreleased items or if the active character is staff, do nothing. + // If the server allows equipping unreleased items or if the active character is staff, do nothing. + if (debug || getgmlevel()) + goto L_Return; message strcharinfo(0), "You have difficulties equipping this item, as if it is not yet fully in this world."; - unequipbyid @slotId; - end; + callfunc "UnequipLater"; + +L_Return: + return; } diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf index 26a0b0b4..2fff74b8 100644 --- a/world/map/npc/scripts.conf +++ b/world/map/npc/scripts.conf @@ -29,6 +29,8 @@ npc: npc/items/unreleased_item.txt npc: npc/items/require_stat.txt npc: npc/items/restricted_item.txt npc: npc/items/warpTowels.txt +npc: npc/items/unequipcb.txt +npc: npc/items/launcher_ammo.txt import: npc/_import.txt |