* 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:
parent
96a7e476f5
commit
b4bdaebeeb
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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++;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user