diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index b3ad050209..7712edd4c8 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -36,7 +36,7 @@ // 0x00400- usable only on party-members (and enemies if skill is offensive) // 0x00800- usable only on guild-mates (and enemies if skill is offensive) // 0x01000- disable usage on enemies (for non-offensive skills). -// 0x02000- free +// 0x02000- available skill for SC_AUTOSHADOWSPELL // 0x04000- chorus skill // 0x08000- spell that ignore bg reduction // 0x10000- spell that ignore gvg reduction @@ -80,17 +80,17 @@ // Mage 9,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x20, MG_SRECOVERY,Increase SP Recovery 10,0,6,4,3,0x3,3,1,1,yes,0,0,0,magic,0,0x20, MG_SIGHT,Sight -11,9,6,1,8,0x6,1,10,1,yes,0,0,0,magic,0,0x20, MG_NAPALMBEAT,Napalm Beat +11,9,6,1,8,0x6,1,10,1,yes,0,0x2000,0,magic,0,0x20, MG_NAPALMBEAT,Napalm Beat 12,9,8,2,8,0x1,0,10,1,yes,0,0,0,magic,0,0x20, MG_SAFETYWALL,Safety Wall -13,9,8,1,8,0,0,10,1:1:2:2:3:3:4:4:5:5,yes,0,0,0,magic,0,0x20, MG_SOULSTRIKE,Soul Strike -14,9,8,1,1,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_COLDBOLT,Cold Bolt -15,9,6,1,1,0,0,10,1,yes,0,0,0,magic,0,0x20, MG_FROSTDIVER,Frost Diver +13,9,8,1,8,0,0,10,1:1:2:2:3:3:4:4:5:5,yes,0,0x2000,0,magic,0,0x20, MG_SOULSTRIKE,Soul Strike +14,9,8,1,1,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_COLDBOLT,Cold Bolt +15,9,6,1,1,0,0,10,1,yes,0,0x2000,0,magic,0,0x20, MG_FROSTDIVER,Frost Diver 16,2,6,1,2,0x1,0,10,1,yes,0,0,0,magic,0,0x20, MG_STONECURSE,Stone Curse -17,9,6,1,3,0x2,2,10,1,yes,0,0,0,magic,0,0x20, MG_FIREBALL,Fire Ball -18,9,6,2,3,0,0,10,1,yes,0,0,3,magic,2,0x20, MG_FIREWALL,Fire Wall -19,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_FIREBOLT,Fire Bolt -20,9,8,1,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_LIGHTNINGBOLT,Lightning Bolt -21,9,8,2,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_THUNDERSTORM,Thunderstorm +17,9,6,1,3,0x2,2,10,1,yes,0,0x2000,0,magic,0,0x20, MG_FIREBALL,Fire Ball +18,9,6,2,3,0,0,10,1,yes,0,0x2000,3,magic,2,0x20, MG_FIREWALL,Fire Wall +19,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_FIREBOLT,Fire Bolt +20,9,8,1,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_LIGHTNINGBOLT,Lightning Bolt +21,9,8,2,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_THUNDERSTORM,Thunderstorm //**** // Acolyte @@ -100,7 +100,7 @@ 25,9,6,2,0,0x1,0,1,1,yes,0,0,0,magic,0,0x20, AL_PNEUMA,Pneuma 26,0,6,4,0,0x1,0,2,1,yes,0,0,0,magic,0,0x60, AL_TELEPORT,Teleport 27,9,6,2,0,0x1,0,4,1,yes,0,0,3,magic,0,0x20, AL_WARP,Warp Portal -28,9,6,16,6,0x21,0,10,1,yes,0,0,0,magic,0,0x20, AL_HEAL,Heal +28,9,6,16,6,0x21,0,10,1,yes,0,0x2000,0,magic,0,0x20, AL_HEAL,Heal 29,9,6,16,0,0x1,0,10,1,yes,0,0,0,magic,0,0x1020, AL_INCAGI,Increase AGI 30,9,6,1,0,0x1,0,10,1,yes,0,0,0,magic,0,0x0, AL_DECAGI,Decrease AGI 31,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0,0x20, AL_HOLYWATER,Aqua Benedicta @@ -171,17 +171,17 @@ //**** // Wizard -80,9,8,2,3,0x20,1:1:1:1:1:2:2:2:2:2:2,10,3:4:5:6:7:8:9:10:11:12:12,yes,0,0x80,5,magic,0,0x0, WZ_FIREPILLAR,Fire Pillar -81,0,6,4,3,0,3,10,1,yes,0,0,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher -83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0,0,magic,0,0x20, WZ_METEOR,Meteor Storm -84,9,8,1,4,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,2:3:3:4:4:5:5:6:6:7,0x20, WZ_JUPITEL,Jupitel Thunder -85,9,8,2,4,0,0,10,-10,yes,0,0,0,magic,0,0x20, WZ_VERMILION,Lord of Vermilion -86,9,8,1,1,0,0,5,1,yes,0,0,0,magic,0,0x0, WZ_WATERBALL,Water Ball +80,9,8,2,3,0x20,1:1:1:1:1:2:2:2:2:2:2,10,3:4:5:6:7:8:9:10:11:12:12,yes,0,0x2080,5,magic,0,0x0, WZ_FIREPILLAR,Fire Pillar +81,0,6,4,3,0,3,10,1,yes,0,0x2000,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher +83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0x2000,0,magic,0,0x20, WZ_METEOR,Meteor Storm +84,9,8,1,4,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0x2000,0,magic,2:3:3:4:4:5:5:6:6:7,0x20, WZ_JUPITEL,Jupitel Thunder +85,9,8,2,4,0,0,10,-10,yes,0,0x2000,0,magic,0,0x20, WZ_VERMILION,Lord of Vermilion +86,9,8,1,1,0,0,5,1,yes,0,0x2000,0,magic,0,0x0, WZ_WATERBALL,Water Ball 87,9,6,2,1,0x1,0,10,1,yes,0,0,0,magic,0,0x20, WZ_ICEWALL,Ice Wall -88,0,6,4,1,0x2,2,10,1,yes,0,0,0,magic,0,0x0, WZ_FROSTNOVA,Frost Nova -89,9,6,2,1,0,0,10,1,yes,0,0,0,magic,2,0x20, WZ_STORMGUST,Storm Gust -90,9,8,1,2,0,0,5,1:2:3:4:5,yes,0,0,0,magic,0,0x20, WZ_EARTHSPIKE,Earth Spike -91,9,8,2,2,0,0,5,1:2:3:4:5,yes,0,0,0,magic,0,0x20, WZ_HEAVENDRIVE,Heaven's Drive +88,0,6,4,1,0x2,2,10,1,yes,0,0x2000,0,magic,0,0x0, WZ_FROSTNOVA,Frost Nova +89,9,6,2,1,0,0,10,1,yes,0,0x2000,0,magic,2,0x20, WZ_STORMGUST,Storm Gust +90,9,8,1,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_EARTHSPIKE,Earth Spike +91,9,8,2,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_HEAVENDRIVE,Heaven's Drive 92,9,6,2,2,0x1,0,5,1,yes,0,0,3,magic,0,0x20, WZ_QUAGMIRE,Quagmire 93,9,6,1,0,0x1,0,1,1,yes,0,0,0,magic,0,0x0, WZ_ESTIMATION,Sense diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 705db31637..43a765a53d 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -36,7 +36,7 @@ // 0x00400- usable only on party-members (and enemies if skill is offensive) // 0x00800- usable only on guild-mates (and enemies if skill is offensive) // 0x01000- disable usage on enemies (for non-offensive skills). -// 0x02000- skill cannot be auto casted by Auto Shadow Spell +// 0x02000- available skill for SC_AUTOSHADOWSPELL // 0x04000- chorus skill // 0x08000- spell that ignore bg reduction // 0x10000- spell that ignore gvg reduction @@ -80,27 +80,27 @@ // Mage 9,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x20, MG_SRECOVERY,Increase SP Recovery 10,0,6,4,3,0x3,3,1,1,yes,0,0,0,magic,0,0x20, MG_SIGHT,Sight -11,9,6,1,8,0x6,1,10,1,yes,0,0,0,magic,0,0x20, MG_NAPALMBEAT,Napalm Beat +11,9,6,1,8,0x6,1,10,1,yes,0,0x2000,0,magic,0,0x20, MG_NAPALMBEAT,Napalm Beat 12,9,8,2,8,0x1,0,10,1,yes,0,0,0,magic,0,0x20, MG_SAFETYWALL,Safety Wall -13,9,8,1,8,0,0,10,1:1:2:2:3:3:4:4:5:5,yes,0,0,0,magic,0,0x20, MG_SOULSTRIKE,Soul Strike -14,9,8,1,1,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_COLDBOLT,Cold Bolt -15,9,6,1,1,0,0,10,1,yes,0,0,0,magic,0,0x20, MG_FROSTDIVER,Frost Diver +13,9,8,1,8,0,0,10,1:1:2:2:3:3:4:4:5:5,yes,0,0x2000,0,magic,0,0x20, MG_SOULSTRIKE,Soul Strike +14,9,8,1,1,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_COLDBOLT,Cold Bolt +15,9,6,1,1,0,0,10,1,yes,0,0x2000,0,magic,0,0x20, MG_FROSTDIVER,Frost Diver 16,2,6,1,2,0x1,0,10,1,yes,0,0,0,magic,0,0x20, MG_STONECURSE,Stone Curse -17,9,6,1,3,0x2,2,10,1,yes,0,0,0,magic,0,0x20, MG_FIREBALL,Fire Ball -18,9,6,2,3,0,0,10,1,yes,0,0,3,magic,2,0x20, MG_FIREWALL,Fire Wall -19,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_FIREBOLT,Fire Bolt -20,9,8,1,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_LIGHTNINGBOLT,Lightning Bolt -21,9,8,2,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,0x20, MG_THUNDERSTORM,Thunderstorm +17,9,6,1,3,0x2,2,10,1,yes,0,0x2000,0,magic,0,0x20, MG_FIREBALL,Fire Ball +18,9,6,2,3,0,0,10,1,yes,0,0x2000,3,magic,2,0x20, MG_FIREWALL,Fire Wall +19,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_FIREBOLT,Fire Bolt +20,9,8,1,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_LIGHTNINGBOLT,Lightning Bolt +21,9,8,2,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, MG_THUNDERSTORM,Thunderstorm //**** // Acolyte 22,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, AL_DP,Divine Protection 23,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, AL_DEMONBANE,Demon Bane -24,0,6,4,6,0x3,2,1,1,yes,0,0x2000,0,magic,0,0x20, AL_RUWACH,Ruwach +24,0,6,4,6,0x3,2,1,1,yes,0,0x0,0,magic,0,0x20, AL_RUWACH,Ruwach 25,9,6,2,0,0x1,0,1,1,yes,0,0,0,magic,0,0x20, AL_PNEUMA,Pneuma 26,0,6,4,0,0x1,0,2,1,yes,0,0,0,magic,0,0x60, AL_TELEPORT,Teleport 27,9,6,2,0,0x1,0,4,1,yes,0,0,3,magic,0,0x20, AL_WARP,Warp Portal -28,9,6,16,6,0x21,0,10,1,yes,0,0,0,magic,0,0x20, AL_HEAL,Heal +28,9,6,16,6,0x21,0,10,1,yes,0,0x2000,0,magic,0,0x20, AL_HEAL,Heal 29,9,6,16,0,0x1,0,10,1,yes,0,0,0,magic,0,0x20, AL_INCAGI,Increase AGI 30,9,6,1,0,0x1,0,10,1,yes,0,0,0,magic,0,0x0, AL_DECAGI,Decrease AGI 31,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0,0x20, AL_HOLYWATER,Aqua Benedicta @@ -165,23 +165,23 @@ 74,0,6,4,0,0x3,-1,5,1,yes,0,0,0,magic,0,0x20, PR_MAGNIFICAT,Magnificat 75,0,6,4,0,0x3,-1,5,1,yes,0,0,0,magic,0,0x0, PR_GLORIA,Gloria 76,5,6,1,0,0x1,0,10,0,yes,0,0,0,magic,0,0x20, PR_LEXDIVINA,Lex Divina -77,5,6,1,6,0x28,0,10,1,yes,0,0x2000,0,magic,0,0x20, PR_TURNUNDEAD,Turn Undead +77,5,6,1,6,0x28,0,10,1,yes,0,0x0,0,magic,0,0x20, PR_TURNUNDEAD,Turn Undead 78,9,6,1,0,0x1,0,1,0,yes,0,0,0,magic,0,0x20, PR_LEXAETERNA,Lex Aeterna -79,9,8,2,6,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x2000,0,magic,0,0x20, PR_MAGNUS,Magnus Exorcismus +79,9,8,2,6,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0x0,0,magic,0,0x20, PR_MAGNUS,Magnus Exorcismus //**** // Wizard -80,9,8,2,3,0x20,1:1:1:1:1:2:2:2:2:2:2,10,3:4:5:6:7:8:9:10:11:12:12,yes,0,0x80,5,magic,0,0x0, WZ_FIREPILLAR,Fire Pillar -81,0,6,4,3,0,3,10,1,yes,0,0,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher -83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0,0,magic,0,0x20, WZ_METEOR,Meteor Storm -84,9,8,1,4,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,2:3:3:4:4:5:5:6:6:7,0x20, WZ_JUPITEL,Jupitel Thunder -85,9,8,2,4,0,0,10,-10,yes,0,0,0,magic,0,0x20, WZ_VERMILION,Lord of Vermilion -86,9,8,1,1,0,0,5,1,yes,0,0,0,magic,0,0x0, WZ_WATERBALL,Water Ball +80,9,8,2,3,0x20,1:1:1:1:1:2:2:2:2:2:2,10,3:4:5:6:7:8:9:10:11:12:12,yes,0,0x2080,5,magic,0,0x0, WZ_FIREPILLAR,Fire Pillar +81,0,6,4,3,0,3,10,1,yes,0,0x2000,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher +83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0x2000,0,magic,0,0x20, WZ_METEOR,Meteor Storm +84,9,8,1,4,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0x2000,0,magic,2:3:3:4:4:5:5:6:6:7,0x20, WZ_JUPITEL,Jupitel Thunder +85,9,8,2,4,0,0,10,-10,yes,0,0x2000,0,magic,0,0x20, WZ_VERMILION,Lord of Vermilion +86,9,8,1,1,0,0,5,1,yes,0,0x2000,0,magic,0,0x0, WZ_WATERBALL,Water Ball 87,9,6,2,1,0x1,0,10,1,yes,0,0,0,magic,0,0x20, WZ_ICEWALL,Ice Wall -88,0,6,4,1,0x2,2,10,1,yes,0,0,0,magic,0,0x0, WZ_FROSTNOVA,Frost Nova -89,9,6,2,1,0,0,10,1,yes,0,0,0,magic,2,0x20, WZ_STORMGUST,Storm Gust -90,9,8,1,2,0,0,5,1:2:3:4:5,yes,0,0,0,magic,0,0x20, WZ_EARTHSPIKE,Earth Spike -91,9,8,2,2,0,0,5,1:2:3:4:5,yes,0,0,0,magic,0,0x20, WZ_HEAVENDRIVE,Heaven's Drive +88,0,6,4,1,0x2,2,10,1,yes,0,0x2000,0,magic,0,0x0, WZ_FROSTNOVA,Frost Nova +89,9,6,2,1,0,0,10,1,yes,0,0x2000,0,magic,2,0x20, WZ_STORMGUST,Storm Gust +90,9,8,1,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_EARTHSPIKE,Earth Spike +91,9,8,2,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_HEAVENDRIVE,Heaven's Drive 92,9,6,2,2,0x1,0,5,1,yes,0,0,3,magic,0,0x20, WZ_QUAGMIRE,Quagmire 93,9,6,1,0,0x1,0,1,1,yes,0,0,0,magic,0,0x0, WZ_ESTIMATION,Sense @@ -258,7 +258,7 @@ 153,1,6,1,-1,0x2,1,1,1,no,0,0x1,0,weapon,2,0x0, MC_CARTREVOLUTION,Cart Revolution 154,0,6,4,0,0x1,0,1,1,no,0,0x1,0,none,0,0x0, MC_CHANGECART,Change Cart 155,0,6,4,0,0x1,0,1,1,no,0,0x1,0,weapon,0,0x0, MC_LOUD,Crazy Uproar -156,9,6,1,6,0,0,1,1,yes,0,0x2001,0,magic,0,0x20, AL_HOLYLIGHT,Holy Light +156,9,6,1,6,0,0,1,1,yes,0,0x1,0,magic,0,0x20, AL_HOLYLIGHT,Holy Light 157,0,6,4,0,0x1,0,1,1,yes,0,0x1,0,magic,0,0x20, MG_ENERGYCOAT,Energy Coat //**** @@ -368,7 +368,7 @@ 251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang 252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect 253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross -254,5,6,4,6,0x48,0,10,1,no,33,0x2100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross +254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross 255,7:8:9:10:11,6,16,0,0x1,0,5,1,yes,0,0x600,0,none,0,0x0, CR_DEVOTION,Sacrifice 256,9,6,16,0,0x1,0,5,1,yes,0,0x200,0,none,0,0x0, CR_PROVIDENCE,Resistant Souls 257,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x0, CR_DEFENDER,Defending Aura diff --git a/npc/re/merchants/cash_trader-idRO.txt b/npc/re/merchants/cash_trader-idRO.txt index 5ee1d68f56..89855cccb9 100644 --- a/npc/re/merchants/cash_trader-idRO.txt +++ b/npc/re/merchants/cash_trader-idRO.txt @@ -3,18 +3,18 @@ //===== By: ================================================== //= Cydh //===== Current Version: ===================================== -//= 1.1 +//= 1.2 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= -//= Sell Cash shop items based on idRO's Cash shop. +//= Sell Cash shop items based on idRO's Cash shop //===== Additional Comments: ================================= //= 1.0 Initial release. 2014-Jan-13 [Cydh] -// - Put/enable all 'idRO misc items' from db/import/item_db.txt, or put from db/import-tmpl/item_db.txt -// - Change MAX_SHOPITEM (on npc.c) to 210 then recompile your server (some NPCs sell more than 100 items) //= 1.1 2014-Jan-18 [Cydh] // - Fixed the item list // - Added NPC placement for some maps +//= 1.2 2014-Feb-4 [Cydh] +// - Added Cash Trader with special offer for Chinese New Year //============================================================ //============================================================ @@ -349,3 +349,9 @@ rachel,100,135,3 duplicate(idRO_eq2) Equipment 2#ra 80 rachel,100,131,3 duplicate(idRO_acc) Acc and Kartu#ra 721 rachel,100,133,3 duplicate(idRO_acc2) Acc and Kartu 2#ra 80 rachel,95,131,3 duplicate(idRO_rental) Rental Shop#ra 874 + +//=========================================================== +//Special Prices of Chinese New Year 2014 +//=========================================================== +- cashshop idROC2014::idRO_C2014 721,2936:6250,2177:6250,18574:6250,6225:7500,6226:5625,5381:7500,5210:10000,5294:6250,5463:6250,5335:6250,5256:6250,5495:6250,18630:6250,19518:6250,19519:6250,19520:6250,2573:6250,15058:6250,5490:6250,5498:6250,5253:6250,5502:6250,5526:6250,5529:6250,19509:6250,5359:7500,18729:6250,18666:6250,5284:6250,5471:6250,5467:6250,5363:6250,5546:6250,5334:6250,1472:5000,13420:6250,1392:5000,15008:6250,1731:3750,1825:2500,1261:1875,5545:6250,5550:6250,5549:6250,5515:6250,5514:6250,5470:6250,5505:6250,18695:6250,18694:6250 +prontera,156,178,3 duplicate(idRO_C2014) Kafra Shop#C2014_prt 721 diff --git a/src/map/clif.c b/src/map/clif.c index 4edb0ab735..e20ae4fdbc 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -16669,14 +16669,11 @@ int clif_autoshadowspell_list(struct map_session_data *sd) { WFIFOHEAD(fd, 2 * 6 + 4); WFIFOW(fd,0) = 0x442; - //- Only list the skill that 'imitated' and Magic skill - //- Cannot autocasted 3rd and extended skills - //- Some holy skills cannot be autocasted, marked as INF2_NO_AUTOSHADOWSPELL [Cydh] - //! NOTE: Maybe later can get rid of 'sd->status.skill[i].id < GS_GLITTERING' since there is INF2_NO_AUTOSHADOWSPELL + + //AEGIS listed the specified skills that available for SC_AUTOSHADOWSPELL for( i = 0, c = 0; i < MAX_SKILL; i++ ) if( sd->status.skill[i].flag == SKILL_FLAG_PLAGIARIZED && sd->status.skill[i].id > 0 && - sd->status.skill[i].id < GS_GLITTERING && skill_get_type(sd->status.skill[i].id) == BF_MAGIC && - !(skill_get_inf2(sd->status.skill[i].id)&INF2_NO_AUTOSHADOWSPELL)) + (skill_get_inf2(sd->status.skill[i].id)&INF2_AUTOSHADOWSPELL)) { WFIFOW(fd,8+c*2) = sd->status.skill[i].id; c++; diff --git a/src/map/npc.c b/src/map/npc.c index 49c9c5a945..f718116243 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -2318,11 +2318,8 @@ static const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const */ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath) { - //TODO: could be rewritten to NOT need this temp array [ultramage] - #define MAX_SHOPITEM 100 - struct npc_item_list items[MAX_SHOPITEM]; char *p, point_str[32]; - int x, y, dir, m, i, nameid = 0, is_discount = 0; + int x, y, dir, m, nameid = 0, is_discount = 0; struct npc_data *nd; enum npc_subtype type; @@ -2398,10 +2395,15 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const is_discount = 1; break; } + + CREATE(nd, struct npc_data, 1); - for( i = 0; i < ARRAYLENGTH(items) && p; ++i ) { + nd->u.shop.count = 0; + while ( p ) { int nameid, value; struct item_data* id; + if( p == NULL ) + break; if( sscanf(p, ",%d:%d", &nameid, &value) != 2 ) { ShowError("npc_parse_shop: Invalid item definition in file '%s', line '%d'. Ignoring the rest of the line...\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4); break; @@ -2430,22 +2432,27 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const if( id->maxchance == 0 ) id->maxchance = -1; // -1 would show that the item's sold in NPC Shop - items[i].nameid = nameid; - items[i].value = value; + if (nd->u.shop.count > 0) + RECREATE(nd->u.shop.shop_item, struct npc_item_list,nd->u.shop.count+1); + else + CREATE(nd->u.shop.shop_item, struct npc_item_list,1); + + nd->u.shop.shop_item[nd->u.shop.count].nameid = nameid; + nd->u.shop.shop_item[nd->u.shop.count].value = value; + nd->u.shop.count++; p = strchr(p+1,','); } - if( i == 0 ) { + if( nd->u.shop.count == 0 ) { ShowWarning("npc_parse_shop: Ignoring empty shop in file '%s', line '%d'.\n", filepath, strline(buffer,start-buffer)); + aFree(nd); return strchr(start,'\n');// continue } - CREATE(nd, struct npc_data, 1); - CREATE(nd->u.shop.shop_item, struct npc_item_list, i); - memcpy(nd->u.shop.shop_item, items, sizeof(struct npc_item_list)*i); - nd->u.shop.count = i; - nd->u.shop.itemshop_nameid = nameid; // Item shop currency - safestrncpy(nd->u.shop.pointshop_str,point_str,strlen(point_str)+1); // Point shop currency - nd->u.shop.discount = is_discount; + if (type != SHOP) { + if (type == ITEMSHOP) nd->u.shop.itemshop_nameid = nameid; // Item shop currency + else if (type == POINTSHOP) safestrncpy(nd->u.shop.pointshop_str,point_str,strlen(point_str)+1); // Point shop currency + nd->u.shop.discount = is_discount; + } nd->bl.prev = nd->bl.next = NULL; nd->bl.m = m; nd->bl.x = x; diff --git a/src/map/npc.h b/src/map/npc.h index e498aba334..b9f3d7b06d 100644 --- a/src/map/npc.h +++ b/src/map/npc.h @@ -56,8 +56,8 @@ struct npc_data { struct npc_label_list *label_list; } scr; struct { - struct npc_item_list* shop_item; - int count; + struct npc_item_list *shop_item; + uint16 count; int itemshop_nameid; // Item Shop cost item ID char pointshop_str[32]; // Point Shop cost variable name bool discount; diff --git a/src/map/pc.c b/src/map/pc.c index c2973bdf56..0e7fb885ca 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -743,7 +743,7 @@ bool pc_isequipped(struct map_session_data *sd, int nameid) for( i = 0; i < EQI_MAX; i++ ) { - uint8 index = sd->equip_index[i], j; + int8 index = sd->equip_index[i], j; if( index < 0 ) continue; if( i == EQI_HAND_R && sd->equip_index[EQI_HAND_L] == index ) continue; diff --git a/src/map/skill.c b/src/map/skill.c index e4d1e9bb35..250a6abfd0 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -18898,8 +18898,10 @@ static bool skill_parse_row_requiredb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_castdb(char* split[], int columns, int current) -{// skill_id,CastingTime,AfterCastActDelay,AfterCastWalkDelay,Duration1,Duration2,Cooldown{,Fixedcast} +/** Reads skill cast db +* SkillID,CastingTime,AfterCastActDelay,AfterCastWalkDelay,Duration1,Duration2,Cooldown{,Fixedcast} +*/ +static bool skill_parse_row_castdb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); uint16 idx = skill_get_index(skill_id); if( !idx ) // invalid skill id @@ -18917,8 +18919,10 @@ static bool skill_parse_row_castdb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_castnodexdb(char* split[], int columns, int current) -{// Skill id,Cast,Delay (optional) +/** Reads skill cast no dex db +* SkillID,Cast,Delay (optional) +*/ +static bool skill_parse_row_castnodexdb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); uint16 idx = skill_get_index(skill_id); if( !idx ) // invalid skill id @@ -18931,8 +18935,10 @@ static bool skill_parse_row_castnodexdb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_nocastdb(char* split[], int columns, int current) -{// skill_id,Flag +/** Reads skill no cast db +* SkillID,Flag +*/ +static bool skill_parse_row_nocastdb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); uint16 idx = skill_get_index(skill_id); if( !idx ) // invalid skill id @@ -18943,8 +18949,10 @@ static bool skill_parse_row_nocastdb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_unitdb(char* split[], int columns, int current) -{// ID,unit ID,unit ID 2,layout,range,interval,target,flag +/** Reads skill unit db +* ID,unit ID,unit ID 2,layout,range,interval,target,flag +*/ +static bool skill_parse_row_unitdb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); uint16 idx = skill_get_index(skill_id); if( !idx ) // invalid skill id @@ -18984,8 +18992,10 @@ static bool skill_parse_row_unitdb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_producedb(char* split[], int columns, int current) -{// ProduceItemID,ItemLV,RequireSkill,Requireskill_lv,MaterialID1,MaterialAmount1,...... +/** Reads Produce db +* ProduceItemID,ItemLV,RequireSkill,Requireskill_lv,MaterialID1,MaterialAmount1,...... +*/ +static bool skill_parse_row_producedb(char* split[], int columns, int current) { int x,y; int i = atoi(split[0]); @@ -19005,8 +19015,10 @@ static bool skill_parse_row_producedb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_createarrowdb(char* split[], int columns, int current) -{// SourceID,MakeID1,MakeAmount1,...,MakeID5,MakeAmount5 +/** Reads create arrow db +* SourceID,MakeID1,MakeAmount1,...,MakeID5,MakeAmount5 +*/ +static bool skill_parse_row_createarrowdb(char* split[], int columns, int current) { int x,y; int i = atoi(split[0]); @@ -19022,8 +19034,11 @@ static bool skill_parse_row_createarrowdb(char* split[], int columns, int curren return true; } -static bool skill_parse_row_spellbookdb(char* split[], int columns, int current) -{// skill_id,PreservePoints + +/** Reads Spell book db +* SkillID,PreservePoints +*/ +static bool skill_parse_row_spellbookdb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); int points = atoi(split[1]); @@ -19045,8 +19060,11 @@ static bool skill_parse_row_spellbookdb(char* split[], int columns, int current) return false; } -static bool skill_parse_row_improvisedb(char* split[], int columns, int current) -{// SkillID,Rate + +/** Reads improvise db +* SkillID,Rate +*/ +static bool skill_parse_row_improvisedb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); short j = atoi(split[1]); @@ -19070,8 +19088,11 @@ static bool skill_parse_row_improvisedb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_magicmushroomdb(char* split[], int column, int current) -{// SkillID + +/** Reads Magic mushroom db +* SkillID +*/ +static bool skill_parse_row_magicmushroomdb(char* split[], int column, int current) { uint16 skill_id = atoi(split[0]); if( !skill_get_index(skill_id) || !skill_get_max(skill_id) ) @@ -19090,6 +19111,10 @@ static bool skill_parse_row_magicmushroomdb(char* split[], int column, int curre return true; } +/** Reads db of copyable skill +* SkillName,Option{,JobAllowed{,RequirementRemoved}} +* SkillID,Option{,JobAllowed{,RequirementRemoved}} +*/ static bool skill_parse_row_copyabledb(char* split[], int column, int current) { int16 id; uint8 option; @@ -19117,24 +19142,33 @@ static bool skill_parse_row_copyabledb(char* split[], int column, int current) { return true; } -/// Reads additional range [Cydh] +/** Reads additional range for distance checking from NPC [Cydh] +* SkillName,AdditionalRange{,NPC Type} +* SkillID,AdditionalRange{,NPC Type} +*/ static bool skill_parse_row_nonearnpcrangedb(char* split[], int column, int current) { - int idx; - uint16 skill_id = skill_name2id(split[0]); + int16 id; - if ((idx = skill_get_index(skill_id)) < 0) { // invalid skill id + trim(split[0]); + if(ISDIGIT(split[0][0])) + id = atoi(split[0]); + else + id = skill_name2id(split[0]); + + if ((id = skill_get_index(id)) < 0) { // invalid skill id ShowError("skill_parse_row_nonearnpcrangedb: Invalid skill '%s'\n",split[0]); return false; } - skill_db[idx].unit_nonearnpc_range = max(atoi(split[1]),0); - skill_db[idx].unit_nonearnpc_type = (atoi(split[2])) ? cap_value(atoi(split[2]),1,15) : 15; + skill_db[id].unit_nonearnpc_range = max(atoi(split[1]),0); + skill_db[id].unit_nonearnpc_type = (atoi(split[2])) ? cap_value(atoi(split[2]),1,15) : 15; return true; } - -static bool skill_parse_row_abradb(char* split[], int columns, int current) -{// skill_id,DummyName,RatePerLvl +/** Reads skill chance by Abracadabra/Hocus Pocus spell +* SkillID,DummyName,RatePerLvl +*/ +static bool skill_parse_row_abradb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); if( !skill_get_index(skill_id) || !skill_get_max(skill_id) ) { @@ -19154,8 +19188,10 @@ static bool skill_parse_row_abradb(char* split[], int columns, int current) return true; } -static bool skill_parse_row_changematerialdb(char* split[], int columns, int current) -{// ProductID,BaseRate,MakeAmount1,MakeAmountRate1...,MakeAmount5,MakeAmountRate5 +/** Reads change material db +* ProductID,BaseRate,MakeAmount1,MakeAmountRate1...,MakeAmount5,MakeAmountRate5 +*/ +static bool skill_parse_row_changematerialdb(char* split[], int columns, int current) { uint16 skill_id = atoi(split[0]); short j = atoi(split[1]); int x,y; diff --git a/src/map/skill.h b/src/map/skill.h index 9f2dadddbf..98ac35e072 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -65,7 +65,7 @@ enum e_skill_inf2 { INF2_PARTY_ONLY = 0x00400, INF2_GUILD_ONLY = 0x00800, INF2_NO_ENEMY = 0x01000, - INF2_NO_AUTOSHADOWSPELL = 0x02000, // Skill that cannot be auto casted by Auto Shadow Spell + INF2_AUTOSHADOWSPELL = 0x02000, // Skill that available for SC_AUTOSHADOWSPELL INF2_CHORUS_SKILL = 0x04000, // Chorus skill INF2_NO_BG_DMG = 0x08000, // spell that ignore bg reduction INF2_NO_GVG_DMG = 0x10000, // spell that ignore gvg reduction