* Replaced INF2_NO_AUTOSHADOWSPELL with INF2_AUTOSHADOWSPELL following AEGIS standard, reverted c9cf222.

* Fixed bugreport:8596 http://rathena.org/board/tracker/issue-8596-compile-warnings-with-fresh-svn/
* Removed temporary array while parsing shop NPC, makes remove the limit 100 items each NPC
* Added idRO cash trader according to Chinese New Year event

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
This commit is contained in:
Cydh Ramdh 2014-02-04 12:32:38 +07:00
parent 96a7e476f5
commit b4bdaebeeb
9 changed files with 151 additions and 105 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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++;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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