瀏覽代碼

* Part two of fixing bugreport:6527. Players can now change equipment when talking with NPCs by default. This behavior can be switched off in conf/battle/items.conf. (Hercules ad792f4)
* Minor update to Renewal item database.
* Follow-up r17158, added a missing label in Octopus Cave instance (bugreport:7303).

> Hercules merges:
* b9c79ce:
Fixed NJ_SUITON not working properly with Kagerou/Oboro.

* dbf69e8:
Updated quest_db with more Port Malaya entries.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17163 54d463be-8e91-2dee-dedb-b68131a5f0ec

euphyy 12 年之前
父節點
當前提交
6e72489049

+ 4 - 0
conf/battle/items.conf

@@ -78,3 +78,7 @@ autospell_stacking: no
 
 // Will disabled consumables (disabled by item_noequip.txt) be consumed when trying to use them? (Note 1)
 item_restricted_consumption_type: yes
+
+// Allow changing of equipment while interacting with NPCs? (Note 1)
+// Default: yes
+item_enabled_npc: yes

+ 49 - 0
db/quest_db.txt

@@ -890,9 +890,58 @@
 7356,0,0,0,0,0,0,0,"Little Kid Wants a Button"
 7357,0,0,0,0,0,0,0,"Middle-aged Guy Wants a Button"
 7358,0,0,0,0,0,0,0,"Why do they want my Buttons?"
+7359,0,0,0,0,0,0,0,"Deliver Holy Item to Sailor"
 7360,0,0,0,0,0,0,0,"Deliver Holy Item to Old Man"
+7361,0,0,0,0,0,0,0,"Deliver Holy Item to Young Man"
+7362,0,0,0,0,0,0,0,"Deliver Holy Item to Merchant"
 7363,0,0,0,0,0,0,0,"Deliver Holy Item to Little Kid"
 7364,0,0,0,0,0,0,0,"Deliver Holy Item to Middle-aged Man"
+7365,0,0,0,0,0,0,0,"Better than My Old Button-2"
+7366,0,0,0,0,0,0,0,"Traditional Spiritual Protection and Impudent Girl-1"
+7367,0,0,0,0,0,0,0,"Traditional Spiritual Protection and Impudent Girl-2"
+7368,0,0,0,0,0,0,0,"Deliver Spiritual Protection-Pedro"
+7369,0,0,0,0,0,0,0,"Deliver Spiritual Protection-Nardo"
+7370,0,0,0,0,0,0,0,"Deliver Spiritual Protection-Pandoi"
+7371,0,0,0,0,0,0,0,"Deliver Spiritual Protection-Woeon"
+7372,0,0,0,0,0,0,0,"Deliver Spiritual Protection-Talah"
+7373,0,0,0,0,0,0,0,"Deliver Spiritual Protection-Romel"
+7374,0,0,0,0,0,0,0,"Love and Spiritual Protection for All"
+7375,0,0,0,0,0,0,0,"Love and Spiritual Protection Continues"
+7376,0,0,0,0,0,0,0,"Old Man and Cast-Iron Caldron-1"
+7377,0,0,0,0,0,0,0,"Old Man and Cast-Iron Caldron-2"
+7378,0,0,0,0,0,0,0,"Old Man and Cast-Iron Caldron-Regular Trades"
+7379,0,0,0,0,0,0,0,"Peace Preacher"
+7380,0,0,0,0,0,0,0,"To Smith a Traditional Spiritual Protection"
+7381,0,0,0,0,0,0,0,"High Demand on Spiritual Protection Material"
+7382,0,0,0,0,0,0,0,"Deliver to Pedro"
+7383,0,0,0,0,0,0,0,"Deliver to Nardo"
+7384,0,0,0,0,0,0,0,"Deliver to Pandoi"
+7385,0,0,0,0,0,0,0,"Deliver to Woeon"
+7386,0,0,0,0,0,0,0,"Deliver to Talah"
+7387,0,0,0,0,0,0,0,"Deliver to Romel"
+7388,0,0,0,0,0,0,0,"Maries's Child"
+7389,0,0,0,0,0,0,0,"Give the Shirt to Maries's Child"
+7390,0,0,0,0,0,0,0,"Worried about Maries's Child"
+7391,0,0,0,0,0,0,0,"Jejeling and Jejellopy"
+7392,0,0,0,0,0,0,0,"Collect Jejellopy Regularly"
+7393,0,0,0,0,0,0,0,"Shiny Silver Blade"
+7394,0,0,0,0,0,0,0,"Shiny Tomorrow"
+7395,0,0,0,0,0,0,0,"Ghost on the Perry Ship"
+7396,0,0,0,0,0,0,0,"Angry Soul on Perry Ship"
+7397,0,0,0,0,0,0,0,"Mumbaki Phong's Advice"
+7398,0,0,0,0,0,0,0,"Offering Bouquet Recommended by Mumbaki"
+7399,0,0,0,0,0,0,0,"Soul Diwata's Story"
+7400,0,0,0,0,0,0,0,"Mumbaki of Port Malaya"
+7401,0,0,0,0,0,0,0,"All Aboard for Perry Sailing"
+7402,0,0,0,0,0,0,0,"Bouquet for Diwata"
+7403,0,0,0,0,0,0,0,"Stabilized Perry"
+7404,0,0,0,0,0,0,0,"Get Rid of Jejeling"
+7405,0,0,0,0,0,0,0,"Get Rid of Jejeling - Same Time Tomorrow"
+7406,0,0,0,0,0,0,0,"Agree to Collecting Bones!"
+7407,0,0,0,0,0,0,0,"Purified Bone"
+7408,0,0,0,0,0,0,0,"Agree to Come Back Tomorrow?"
+7409,0,0,0,0,0,0,0,"Cannot Meet Eyes with Him!"
+7410,0,0,0,0,0,0,0,"Teach Another Lesson Tomorrow!"
 
 8000,0,0,0,0,0,0,0,"Quitting Job Change"
 8001,0,0,0,0,0,0,0,"Job Change to Assassin"

+ 16 - 14
db/re/item_db.txt

@@ -3881,11 +3881,11 @@
 6415,Strange_Embryo,Strange Embryo,3,0,,0,,,,,,,,,,,,,{},{},{}
 6416,Pet_Exchange,Pet Exchange,3,0,,0,,,,,,,,,,,,,{},{},{}
 6417,Garderie_Fruit,Garderie Fruit,3,20,,0,,,,,,,,,,,,,{},{},{}
-6418,A_Grade_Coin,A Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
-6419,B_Grade_Coin,B Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
-6420,C_Grade_Coin,C Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
-6421,D_Grade_Coin,D Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
-6422,E_Grade_Coin,E Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
+6418,Agrade_Coin,A Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
+6419,Bgrade_Coin,B Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
+6420,Cgrade_Coin,C Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
+6421,Dgrade_Coin,D Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
+6422,Egrade_Coin,E Grade Coin,3,20,,0,,,,,,,,,,,,,{},{},{}
 6423,Anger_Seagod,Sea God's Wrath,3,20,,0,,,,,,,,,,,,,{},{},{}
 6424,Halloween_Fragment,Spirit Piece,3,20,,0,,,,,,,,,,,,,{},{},{}
 6425,Halloween_Certificate,Halloween Certificate,3,20,,0,,,,,,,,,,,,,{},{},{}
@@ -5693,17 +5693,19 @@
 12613,Improved_Coin_Bag,Improved Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_Improved_Coin_Bag),1; getrandgroupitem(IG_Improved_Coin_Bag),1; getrandgroupitem(IG_Improved_Coin_Bag),1; getrandgroupitem(IG_Improved_Coin_Bag),1; },{},{}
 12614,Intermediate_Coin_Bag,Intermediate Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_Intermediate_Coin_Bag),1; getrandgroupitem(IG_Intermediate_Coin_Bag),1; getrandgroupitem(IG_Intermediate_Coin_Bag),1; getrandgroupitem(IG_Intermediate_Coin_Bag),1; },{},{}
 12615,Minor_Coin_Bag,Minor Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_Minor_Coin_Bag),1; getrandgroupitem(IG_Minor_Coin_Bag),1; getrandgroupitem(IG_Minor_Coin_Bag),1; getrandgroupitem(IG_Minor_Coin_Bag),1; },{},{}
-12616,S_Grade_Coin_Bag,S Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1; },{},{}
-12617,A_Grade_Coin_Bag,A Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1; },{},{}
-12618,B_Grade_Coin_Bag,B Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12619,C_Grade_Coin_Bag,C Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12620,D_Grade_Coin_Bag,D Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12621,E_Grade_Coin_Bag,E Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12622,Reins_Of_Mount,Reins Of Mount,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ setmounting(); },{},{}
-12623,Advanced_Weapons_Box,Advanced Weapons Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_Advanced_Weapons_Box),1; },{},{}
+12616,Sgrade_Pocket,S Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1; },{},{}
+12617,Agrade_Pocket,A Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1; },{},{}
+12618,Bgrade_Pocket,B Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12619,Cgrade_Pocket,C Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12620,Dgrade_Pocket,D Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12621,Egrade_Pocket,E Grade Coin Bag,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12622,Boarding_Halter,Reins Of Mount,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ setmounting(); },{},{}
+12623,High_Weapons_Box,Advanced Weapons Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getrandgroupitem(IG_Advanced_Weapons_Box),1; },{},{}
 12624,Delicious_Jelly,Delicious Jelly,0,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 3,3; },{},{}
 //
-12636,Malangdo_Canned_Specialties,Malangdo Canned Specialties,2,20,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ warp "malangdo",140,114; },{},{}
+12633,Malang_Cat_Can,Malangdo Cat Can,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXPBOOST,1200000,10; sc_start SC_ITEMBOOST,1200000,20; },{},{}
+//
+12636,Malang_Sp_Can,Malangdo Canned Specialties,2,20,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ warp "malangdo",140,114; },{},{}
 //
 12642,Terra_Mars_100_Box,Terra_Mars_100_Box,0,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 504,100; },{},{}
 //

+ 7 - 7
doc/script_commands.txt

@@ -4401,13 +4401,13 @@ getrandgroupitem(1,3);
 *enable_items;
 *disable_items;
 
-These commands enable item usage while an NPC is running. When enable_items is
-run, items can be used during scripts until disable_items is called. 
-To avoid possible exploits, when enable_items is invoked, it will only enable
-item usage while running that script in particular. Note that if a different
-script also calls enable_items, it will override the last call (so you may
-want to call this command at the start of your script without assuming the
-effect is still in effect).
+These commands toggle the ability to change equipment while interacting with
+an NPC. To avoid possible exploits, the commands affect the particular script
+instance only. Note that if a different script also calls enable_items, it
+will override the last call (so you may want to call this command at the start
+of your script without assuming it is still in effect).
+
+The default setting, 'item_enabled_npc', is defined in 'conf/battle/items.conf'.
 
 ---------------------------------------
 

+ 1 - 2
npc/custom/quests/quest_shop.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= Euphy
 //===== Current Version: =====================================
-//= 1.6a
+//= 1.6
 //===== Compatible With: =====================================
 //= rAthena SVN r16862+
 //===== Description: =========================================
@@ -107,7 +107,6 @@ OnBuyItem:
 		message strcharinfo(0),"You can't purchase that many "+getitemname(.@q[0])+".";
 		end;
 	}
-	disable_items;
 	mes "[Quest Shop]";
 	mes "Reward: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
 	mes "Requirements:";

+ 2 - 0
npc/re/instances/OctopusCave.txt

@@ -675,6 +675,8 @@ OnDisable:
 	killmonster "1@cash",instance_npcname("oct_boss_foot", instance_id())+"::OnMyMobDead"; // Not in official script.
 	disablenpc instance_npcname("oct_boss_foot", instance_id());
 	end;
+OnMyMobDead:
+	end;
 }
 
 1@cash,198,116,0	script	oct_boss_warp	45,2,2,{

+ 16 - 14
sql-files/item_db_re.sql

@@ -3912,11 +3912,11 @@ REPLACE INTO `item_db_re` VALUES (6414,'Ragunta_Card','Ragunta Card',3,20,NULL,1
 REPLACE INTO `item_db_re` VALUES (6415,'Strange_Embryo','Strange Embryo',3,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6416,'Pet_Exchange','Pet Exchange',3,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6417,'Garderie_Fruit','Garderie Fruit',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (6418,'A_Grade_Coin','A Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (6419,'B_Grade_Coin','B Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (6420,'C_Grade_Coin','C Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (6421,'D_Grade_Coin','D Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (6422,'E_Grade_Coin','E Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (6418,'Agrade_Coin','A Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (6419,'Bgrade_Coin','B Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (6420,'Cgrade_Coin','C Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (6421,'Dgrade_Coin','D Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (6422,'Egrade_Coin','E Grade Coin',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6423,'Anger_Seagod','Sea God\'s Wrath',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6424,'Halloween_Fragment','Spirit Piece',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (6425,'Halloween_Certificate','Halloween Certificate',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -5724,17 +5724,19 @@ REPLACE INTO `item_db_re` VALUES (12612,'Old_Coin_Bag','Old Coin Bag',2,20,NULL,
 REPLACE INTO `item_db_re` VALUES (12613,'Improved_Coin_Bag','Improved Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Improved_Coin_Bag),1; getrandgroupitem(IG_Improved_Coin_Bag),1; getrandgroupitem(IG_Improved_Coin_Bag),1; getrandgroupitem(IG_Improved_Coin_Bag),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12614,'Intermediate_Coin_Bag','Intermediate Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Intermediate_Coin_Bag),1; getrandgroupitem(IG_Intermediate_Coin_Bag),1; getrandgroupitem(IG_Intermediate_Coin_Bag),1; getrandgroupitem(IG_Intermediate_Coin_Bag),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12615,'Minor_Coin_Bag','Minor Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Minor_Coin_Bag),1; getrandgroupitem(IG_Minor_Coin_Bag),1; getrandgroupitem(IG_Minor_Coin_Bag),1; getrandgroupitem(IG_Minor_Coin_Bag),1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12616,'S_Grade_Coin_Bag','S Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12617,'A_Grade_Coin_Bag','A Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12618,'B_Grade_Coin_Bag','B Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12619,'C_Grade_Coin_Bag','C Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12620,'D_Grade_Coin_Bag','D Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12621,'E_Grade_Coin_Bag','E Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12622,'Reins_Of_Mount','Reins Of Mount',11,NULL,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'setmounting();',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (12623,'Advanced_Weapons_Box','Advanced Weapons Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Advanced_Weapons_Box),1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12616,'Sgrade_Pocket','S Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1; getrandgroupitem(IG_S_Grade_Coin_Bag),1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12617,'Agrade_Pocket','A Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1; getrandgroupitem(IG_A_Grade_Coin_Bag),1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12618,'Bgrade_Pocket','B Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12619,'Cgrade_Pocket','C Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12620,'Dgrade_Pocket','D Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12621,'Egrade_Pocket','E Grade Coin Bag',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12622,'Boarding_Halter','Reins Of Mount',11,NULL,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'setmounting();',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12623,'High_Weapons_Box','Advanced Weapons Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Advanced_Weapons_Box),1;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (12624,'Delicious_Jelly','Delicious Jelly',0,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 3,3;',NULL,NULL);
 #
-REPLACE INTO `item_db_re` VALUES (12636,'Malangdo_Canned_Specialties','Malangdo Canned Specialties',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'warp "malangdo",140,114;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (12633,'Malang_Cat_Can','Malangdo Cat Can',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_EXPBOOST,1200000,10; sc_start SC_ITEMBOOST,1200000,20;',NULL,NULL);
+#
+REPLACE INTO `item_db_re` VALUES (12636,'Malang_Sp_Can','Malangdo Canned Specialties',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'warp "malangdo",140,114;',NULL,NULL);
 #
 REPLACE INTO `item_db_re` VALUES (12642,'Terra_Mars_100_Box','Terra_Mars_100_Box',0,NULL,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 504,100;',NULL,NULL);
 #

+ 1 - 0
src/map/battle.c

@@ -5903,6 +5903,7 @@ static const struct _battle_data {
 	{ "skill_trap_type",                    &battle_config.skill_trap_type,                 0,      0,      1,              },
 	{ "item_restricted_consumption_type",   &battle_config.item_restricted_consumption_type,1,      0,      1,              },
 	{ "max_walk_path",						&battle_config.max_walk_path,					17,     1,      MAX_WALKPATH,   },
+	{ "item_enabled_npc",					&battle_config.item_enabled_npc,				1,      0,      1,				},
 };
 #ifndef STATS_OPT_OUT
 /**

+ 1 - 0
src/map/battle.h

@@ -486,6 +486,7 @@ extern struct Battle_Config
 	int skill_trap_type;
 	int item_restricted_consumption_type;
 	int max_walk_path;
+	int item_enabled_npc;
 	} battle_config;
 
 void do_init_battle(void);

+ 5 - 2
src/map/clif.c

@@ -10215,7 +10215,7 @@ void clif_parse_EquipItem(int fd,struct map_session_data *sd)
 		return; //Out of bounds check.
 
 	if(sd->npc_id) {
-		if (sd->npc_id != sd->npc_item_flag)
+		if (!sd->npc_item_flag)
 			return;
 	} else if (sd->state.storage_flag || sd->sc.opt1)
 		; //You can equip/unequip stuff while storage is open/under status changes
@@ -10254,7 +10254,10 @@ void clif_parse_UnequipItem(int fd,struct map_session_data *sd)
 		return;
 	}
 
-	if (sd->state.storage_flag || sd->sc.opt1)
+	if (sd->npc_id) {
+		if (!sd->npc_item_flag)
+			return;
+	} else if (sd->state.storage_flag || sd->sc.opt1)
 		; //You can equip/unequip stuff while storage is open/under status changes
 	else if (pc_cant_act2(sd))
 		return;

+ 1 - 2
src/map/pc.c

@@ -4215,8 +4215,7 @@ int pc_useitem(struct map_session_data *sd,int n)
 
 	nullpo_ret(sd);
 
-	//This flag enables you to use items while in an NPC. [Skotlex]
-	if( sd->npc_id && sd->npc_id != sd->npc_item_flag ){
+	if( sd->npc_id ){
 #ifdef RENEWAL
 		clif_msg(sd, 0x783); // TODO look for the client date that has this message.
 #endif

+ 4 - 2
src/map/script.c

@@ -3016,6 +3016,7 @@ struct script_state* script_alloc_state(struct script_code* script, int pos, int
 	st->rid = rid;
 	st->oid = oid;
 	st->sleep.timer = INVALID_TIMER;
+	st->npc_item_flag = battle_config.item_enabled_npc;
 	return st;
 }
 
@@ -3643,6 +3644,7 @@ static void script_attach_state(struct script_state* st)
 		}
 		sd->st = st;
 		sd->npc_id = st->oid;
+		sd->npc_item_flag = st->npc_item_flag; // load default.
 /**
  * For the Secure NPC Timeout option (check config/Secure.h) [RR]
  **/
@@ -6961,7 +6963,7 @@ BUILDIN_FUNC(enableitemuse)
 	TBL_PC *sd;
 	sd=script_rid2sd(st);
 	if (sd)
-		sd->npc_item_flag = st->oid;
+		st->npc_item_flag = sd->npc_item_flag = 1;
 	return 0;
 }
 
@@ -6970,7 +6972,7 @@ BUILDIN_FUNC(disableitemuse)
 	TBL_PC *sd;
 	sd=script_rid2sd(st);
 	if (sd)
-		sd->npc_item_flag = 0;
+		st->npc_item_flag = sd->npc_item_flag = 0;
 	return 0;
 }
 

+ 1 - 0
src/map/script.h

@@ -132,6 +132,7 @@ struct script_state {
 	int bk_npcid;
 	unsigned freeloop : 1;// used by buildin_freeloop
 	unsigned op2ref : 1;// used by op_2
+	unsigned npc_item_flag : 1;
 };
 
 struct script_reg {

+ 1 - 1
src/map/status.c

@@ -7375,7 +7375,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 #endif
 			break;
 		case SC_SUITON:
-			if (!val2 || (sd && (sd->class_&MAPID_UPPERMASK) == MAPID_NINJA)) {
+			if (!val2 || (sd && (sd->class_&MAPID_BASEMASK) == MAPID_NINJA)) {
 				//No penalties.
 				val2 = 0; //Agi penalty
 				val3 = 0; //Walk speed penalty