mirror of
https://github.com/HerculesWS/Hercules
synced 2026-08-15 12:23:13 -04:00
Introducing Hercules' Map Zone Database
Click the link for full info~! http://hercules.ws/board/topic/302-introducing-hercules-map-zone-database/ Signed-off-by: shennetsind <ind@henn.et>
This commit is contained in:
parent
c58f741a0f
commit
90f117f6b0
26 changed files with 1085 additions and 740 deletions
|
|
@ -1,126 +0,0 @@
|
|||
//===== Hercules Script =======================================
|
||||
//= Mapflag: Restricted.
|
||||
//===== By: ==================================================
|
||||
//= Komurka
|
||||
//===== Current Version: =====================================
|
||||
//= 1.3
|
||||
//===== Description: =========================================
|
||||
//= Disables items configured in item_noequip.txt
|
||||
//= and skills configured in skill_nocast_db.txt.
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.1 - Added WoE:SE Map restrictions. [L0ne_W0lf]
|
||||
//= 1.2 - Added Endless Tower Restrictions. (bugreport:4707) [L0ne_W0lf]
|
||||
//= 1.3 - Added Orc's Memory, Nidhoggur's Nest and towns restrictions. [Daegaladh]
|
||||
//============================================================
|
||||
|
||||
//Aldebaran Turbo Track
|
||||
alde_tt02 mapflag restricted 1
|
||||
turbo_n_1 mapflag restricted 1
|
||||
turbo_n_4 mapflag restricted 1
|
||||
turbo_n_8 mapflag restricted 1
|
||||
turbo_n_16 mapflag restricted 1
|
||||
turbo_e_4 mapflag restricted 1
|
||||
turbo_e_8 mapflag restricted 1
|
||||
turbo_e_16 mapflag restricted 1
|
||||
|
||||
//Jail
|
||||
sec_pri mapflag restricted 2
|
||||
|
||||
//Izlude Battle Arena
|
||||
force_1-1 mapflag restricted 3
|
||||
force_2-1 mapflag restricted 3
|
||||
force_3-1 mapflag restricted 3
|
||||
force_4-1 mapflag restricted 3
|
||||
force_5-1 mapflag restricted 3
|
||||
force_1-2 mapflag restricted 3
|
||||
force_1-3 mapflag restricted 3
|
||||
prt_are_in mapflag restricted 3
|
||||
|
||||
//WoE:SE Maps
|
||||
schg_cas01 mapflag restricted 4
|
||||
schg_cas02 mapflag restricted 4
|
||||
schg_cas03 mapflag restricted 4
|
||||
schg_cas04 mapflag restricted 4
|
||||
schg_cas05 mapflag restricted 4
|
||||
arug_cas01 mapflag restricted 4
|
||||
arug_cas02 mapflag restricted 4
|
||||
arug_cas03 mapflag restricted 4
|
||||
arug_cas04 mapflag restricted 4
|
||||
arug_cas05 mapflag restricted 4
|
||||
|
||||
//Sealed Shrine ==================
|
||||
1@cata mapflag restricted 5
|
||||
2@cata mapflag restricted 5
|
||||
|
||||
//Endless Tower ==================
|
||||
1@tower mapflag restricted 6
|
||||
2@tower mapflag restricted 6
|
||||
3@tower mapflag restricted 6
|
||||
4@tower mapflag restricted 6
|
||||
5@tower mapflag restricted 6
|
||||
6@tower mapflag restricted 6
|
||||
|
||||
//Orc's Memory ===================
|
||||
1@orcs mapflag restricted 6
|
||||
2@orcs mapflag restricted 6
|
||||
|
||||
// Nidhoggr's Instance ===========
|
||||
1@nyd mapflag restricted 6
|
||||
2@nyd mapflag restricted 6
|
||||
|
||||
// Misty Forest Labyrinth ===========
|
||||
1@mist mapflag restricted 6
|
||||
|
||||
// Octopus Cave ===========
|
||||
1@cash mapflag restricted 6
|
||||
|
||||
// Drain ===========
|
||||
1@pump mapflag restricted 6
|
||||
2@pump mapflag restricted 6
|
||||
|
||||
// Somatology Laboratory ===========
|
||||
1@lhz mapflag restricted 6
|
||||
|
||||
// Bangungot Hospital F2 ===========
|
||||
1@ma_h mapflag restricted 6
|
||||
|
||||
// Buwaya Cave ===========
|
||||
1@ma_c mapflag restricted 6
|
||||
|
||||
// Bakonawa Hideout ===========
|
||||
1@ma_b mapflag restricted 6
|
||||
|
||||
// Inside Eclage ===========
|
||||
1@ecl mapflag restricted 6
|
||||
|
||||
//Towns
|
||||
alberta mapflag restricted 7
|
||||
aldebaran mapflag restricted 7
|
||||
amatsu mapflag restricted 7
|
||||
ayothaya mapflag restricted 7
|
||||
brasilis mapflag restricted 7
|
||||
comodo mapflag restricted 7
|
||||
einbroch mapflag restricted 7
|
||||
einbech mapflag restricted 7
|
||||
geffen mapflag restricted 7
|
||||
gonryun mapflag restricted 7
|
||||
izlude mapflag restricted 7
|
||||
jawaii mapflag restricted 7
|
||||
hugel mapflag restricted 7
|
||||
lighthalzen mapflag restricted 7
|
||||
louyang mapflag restricted 7
|
||||
manuk mapflag restricted 7
|
||||
mid_camp mapflag restricted 7
|
||||
moc_ruins mapflag restricted 7
|
||||
morocc mapflag restricted 7
|
||||
moscovia mapflag restricted 7
|
||||
niflheim mapflag restricted 7
|
||||
prontera mapflag restricted 7
|
||||
payon mapflag restricted 7
|
||||
pay_arche mapflag restricted 7
|
||||
rachel mapflag restricted 7
|
||||
splendide mapflag restricted 7
|
||||
umbala mapflag restricted 7
|
||||
veins mapflag restricted 7
|
||||
xmas mapflag restricted 7
|
||||
yuno mapflag restricted 7
|
||||
122
conf/mapflag/zone.txt
Normal file
122
conf/mapflag/zone.txt
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
//===== Hercules==============================================
|
||||
//= Mapflag: Zone.
|
||||
//===== By: ==================================================
|
||||
//= Ind/Hercules
|
||||
//===== Current Version: =====================================
|
||||
//= 1.0
|
||||
//===== Description: =========================================
|
||||
//= Flags maps as part of zones defined in map_zone_db.txt
|
||||
//===== Additional Comments: =================================
|
||||
//============================================================
|
||||
|
||||
//Aldebaran Turbo Track
|
||||
alde_tt02 mapflag zone Aldebaran Turbo Track
|
||||
turbo_n_1 mapflag zone Aldebaran Turbo Track
|
||||
turbo_n_4 mapflag zone Aldebaran Turbo Track
|
||||
turbo_n_8 mapflag zone Aldebaran Turbo Track
|
||||
turbo_n_16 mapflag zone Aldebaran Turbo Track
|
||||
turbo_e_4 mapflag zone Aldebaran Turbo Track
|
||||
turbo_e_8 mapflag zone Aldebaran Turbo Track
|
||||
turbo_e_16 mapflag zone Aldebaran Turbo Track
|
||||
|
||||
//Jail
|
||||
sec_pri mapflag zone Jail
|
||||
|
||||
//Izlude Battle Arena
|
||||
force_1-1 mapflag zone Izlude Battle Arena
|
||||
force_2-1 mapflag zone Izlude Battle Arena
|
||||
force_3-1 mapflag zone Izlude Battle Arena
|
||||
force_4-1 mapflag zone Izlude Battle Arena
|
||||
force_5-1 mapflag zone Izlude Battle Arena
|
||||
force_1-2 mapflag zone Izlude Battle Arena
|
||||
force_1-3 mapflag zone Izlude Battle Arena
|
||||
prt_are_in mapflag zone Izlude Battle Arena
|
||||
|
||||
//WoE:SE Maps
|
||||
schg_cas01 mapflag zone GvG2
|
||||
schg_cas02 mapflag zone GvG2
|
||||
schg_cas03 mapflag zone GvG2
|
||||
schg_cas04 mapflag zone GvG2
|
||||
schg_cas05 mapflag zone GvG2
|
||||
arug_cas01 mapflag zone GvG2
|
||||
arug_cas02 mapflag zone GvG2
|
||||
arug_cas03 mapflag zone GvG2
|
||||
arug_cas04 mapflag zone GvG2
|
||||
arug_cas05 mapflag zone GvG2
|
||||
|
||||
//Sealed Shrine ==================
|
||||
1@cata mapflag zone Sealed Shrine
|
||||
2@cata mapflag zone Sealed Shrine
|
||||
|
||||
//Endless Tower ==================
|
||||
1@tower mapflag zone Memorial Dungeon
|
||||
2@tower mapflag zone Memorial Dungeon
|
||||
3@tower mapflag zone Memorial Dungeon
|
||||
4@tower mapflag zone Memorial Dungeon
|
||||
5@tower mapflag zone Memorial Dungeon
|
||||
6@tower mapflag zone Memorial Dungeon
|
||||
|
||||
//Orc's Memory ===================
|
||||
1@orcs mapflag zone Memorial Dungeon
|
||||
2@orcs mapflag zone Memorial Dungeon
|
||||
|
||||
// Nidhoggr's Instance ===========
|
||||
1@nyd mapflag zone Memorial Dungeon
|
||||
2@nyd mapflag zone Memorial Dungeon
|
||||
|
||||
// Misty Forest Labyrinth ===========
|
||||
1@mist mapflag zone Memorial Dungeon
|
||||
|
||||
// Octopus Cave ===========
|
||||
1@cash mapflag zone Memorial Dungeon
|
||||
|
||||
// Drain ===========
|
||||
1@pump mapflag zone Memorial Dungeon
|
||||
2@pump mapflag zone Memorial Dungeon
|
||||
|
||||
// Somatology Laboratory ===========
|
||||
1@lhz mapflag zone Memorial Dungeon
|
||||
|
||||
// Bangungot Hospital F2 ===========
|
||||
1@ma_h mapflag zone Memorial Dungeon
|
||||
|
||||
// Buwaya Cave ===========
|
||||
1@ma_c mapflag zone Memorial Dungeon
|
||||
|
||||
// Bakonawa Hideout ===========
|
||||
1@ma_b mapflag zone Memorial Dungeon
|
||||
|
||||
// Inside Eclage ===========
|
||||
1@ecl mapflag zone Memorial Dungeon
|
||||
|
||||
//Towns
|
||||
alberta mapflag zone Towns
|
||||
aldebaran mapflag zone Towns
|
||||
amatsu mapflag zone Towns
|
||||
ayothaya mapflag zone Towns
|
||||
brasilis mapflag zone Towns
|
||||
comodo mapflag zone Towns
|
||||
einbroch mapflag zone Towns
|
||||
einbech mapflag zone Towns
|
||||
geffen mapflag zone Towns
|
||||
gonryun mapflag zone Towns
|
||||
izlude mapflag zone Towns
|
||||
jawaii mapflag zone Towns
|
||||
hugel mapflag zone Towns
|
||||
lighthalzen mapflag zone Towns
|
||||
louyang mapflag zone Towns
|
||||
manuk mapflag zone Towns
|
||||
mid_camp mapflag zone Towns
|
||||
moc_ruins mapflag zone Towns
|
||||
morocc mapflag zone Towns
|
||||
moscovia mapflag zone Towns
|
||||
niflheim mapflag zone Towns
|
||||
prontera mapflag zone Towns
|
||||
payon mapflag zone Towns
|
||||
pay_arche mapflag zone Towns
|
||||
rachel mapflag zone Towns
|
||||
splendide mapflag zone Towns
|
||||
umbala mapflag zone Towns
|
||||
veins mapflag zone Towns
|
||||
xmas mapflag zone Towns
|
||||
yuno mapflag zone Towns
|
||||
|
|
@ -835,7 +835,7 @@
|
|||
// @mapinfo
|
||||
1038: Please enter at least one valid list number (usage: @mapinfo <0-3> <map>).
|
||||
1039: ------ Map Info ------
|
||||
1040: Map Name: %s | Players In Map: %d | NPCs In Map: %d | Chats In Map: %d
|
||||
1040: Map: %s (Zone:%s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d
|
||||
1041: ------ Map Flags ------
|
||||
1042: Town Map
|
||||
1043: Autotrade Enabled
|
||||
|
|
|
|||
|
|
@ -348,7 +348,7 @@ mf_nomvploot 32
|
|||
mf_noreturn 33
|
||||
mf_nowarpto 34
|
||||
mf_nightmaredrop 35
|
||||
mf_restricted 36
|
||||
mf_zone 36
|
||||
mf_nocommand 37
|
||||
mf_nodrop 38
|
||||
mf_jexp 39
|
||||
|
|
|
|||
|
|
@ -1,60 +0,0 @@
|
|||
// The equipment/items/cards restriction file
|
||||
// here you define which items may not be used at PvP / GvG
|
||||
// format: <item id>,<mode>
|
||||
// mode
|
||||
// 1 - restricted in normal maps
|
||||
// 2 - restricted in PVP
|
||||
// 4 - restricted in GVG
|
||||
// 8 - restricted in Battlegrounds
|
||||
// Restricted zones - they're configured by 'restricted <number>' mapflag
|
||||
// 32 - restricted in zone 1
|
||||
// 64 - restricted in zone 2
|
||||
// 128 - restricted in zone 3
|
||||
// 256 - restricted in zone 4
|
||||
// 512 - restricted in zone 5
|
||||
// 1024 - restricted in zone 6
|
||||
// 2048 - restricted in zone 7
|
||||
|
||||
//Examples:
|
||||
//1201,1 you can't use KNIFE(ID 1201) on normal maps
|
||||
//608,4 you can't use Yggdrasil Seed(ID 608) on both GvG and WoE Castles
|
||||
//4174,6 Forbid Deviling Card in every PVP or GVG map, and during woes.
|
||||
//501,32 you can't use Red Potion on map marked as 'restricted zone 1'
|
||||
//502,64 you can't use Orange Potion on map marked as 'restricted zone 2'
|
||||
//503,128 you can't use Yellow Potion on map marked as 'restricted zone 3'
|
||||
// you can even mix modes
|
||||
//519,322 (256+64+2) you can't use Milk on PVP, and maps marked as 'restricted zone 2' and 'restricted zone 4'
|
||||
|
||||
//PVP
|
||||
14529,2 //Greed Scroll
|
||||
|
||||
//GVG
|
||||
12218,4 //LV5 Assumptio Scroll
|
||||
14529,4 //Greed Scroll
|
||||
14590,4 //Party Assumptio 5 Scroll
|
||||
|
||||
//BATTLEGROUND
|
||||
12218,8 //LV5 Assumptio Scroll
|
||||
14590,8 //Party Assumptio 5 Scroll
|
||||
|
||||
|
||||
//Zone 1 - Aldebaran Turbo Track
|
||||
601,32 //Fly Wing
|
||||
605,32 //Anodyne
|
||||
506,32 //Green Potion
|
||||
525,32 //Panacea
|
||||
|
||||
//Zone 2 - Jail
|
||||
601,64 //Fly Wing - not really needed here but ...
|
||||
602,64 //Butterfly Wing - also not needed
|
||||
12212,64 //Giant Fly Wing
|
||||
14582,64
|
||||
14583,64
|
||||
14584,64
|
||||
14585,64
|
||||
|
||||
//Zone 3 - Izlude Battle Arena
|
||||
601,128 //Fly Wing
|
||||
|
||||
//Zone 7 - Towns
|
||||
14529,2048 //Greed Scroll
|
||||
239
db/pre-re/map_zone_db.txt
Normal file
239
db/pre-re/map_zone_db.txt
Normal file
|
|
@ -0,0 +1,239 @@
|
|||
//====================================================
|
||||
//= _ _ _
|
||||
//= | | | | | |
|
||||
//= | |_| | ___ _ __ ___ _ _| | ___ ___
|
||||
//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
|
||||
//= | | | | __/ | | (__| |_| | | __/\__ \
|
||||
//= \_| |_/\___|_| \___|\__,_|_|\___||___/
|
||||
//=
|
||||
//= http://hercules.ws/board/
|
||||
//====================================================
|
||||
//= Hercules Map Zone Database [Ind/Hercules]
|
||||
//==
|
||||
//= A unlimited number of zones may be created, a zone
|
||||
//= may be used to create a set of disabled items, disabled skills
|
||||
//= and mapflags to be used by as many maps as one chooses,
|
||||
//= maps can be linked to a specific zone through the zone mapflag
|
||||
//= '<map name><tab>mapflag<tab>zone<tab><zone name>'
|
||||
zones: (
|
||||
{
|
||||
/* Normal zone is applied to all maps that are not pkable (where players cant fight each other) */
|
||||
/* However, it wont be applied to maps with its own zones (specified thru mapflag) */
|
||||
name: "Normal" /* changing this name requires MAP_ZONE_NORMAL_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
WM_LULLABY_DEEPSLEEP: true
|
||||
WM_SIRCLEOFNATURE: true
|
||||
WM_SATURDAY_NIGHT_FEVER: true
|
||||
SO_ARRULLO: true
|
||||
CG_HERMODE: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
|
||||
}
|
||||
mapflags: ( )
|
||||
},
|
||||
{
|
||||
/* PvP zone is applied to all maps with a pvp mapflag */
|
||||
name: "PvP" /* changing this name requires MAP_ZONE_PVP_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
BS_GREED: true
|
||||
CG_HERMODE: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Greed_Scroll: true
|
||||
}
|
||||
},
|
||||
{
|
||||
/* GvG zone is applied to all maps with a pvp mapflag */
|
||||
name: "GvG" /* changing this name requires MAP_ZONE_GVG_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
AL_TELEPORT: true
|
||||
AL_WARP: true
|
||||
WZ_ICEWALL: true
|
||||
TF_BACKSLIDING: true
|
||||
RG_INTIMIDATE: true
|
||||
WE_CALLPARTNER: true
|
||||
HP_ASSUMPTIO: true
|
||||
HP_BASILICA: true
|
||||
CG_MOONLIT: true
|
||||
WE_CALLPARENT: true
|
||||
WE_CALLBABY: true
|
||||
CR_CULTIVATION: true
|
||||
NJ_KIRIKAGE: true
|
||||
CASH_ASSUMPTIO: true
|
||||
BS_GREED: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Assumptio_5_Scroll: true
|
||||
Greed_Scroll: true
|
||||
Pty_Assumptio_Scroll: true
|
||||
}
|
||||
},
|
||||
{
|
||||
/* Battlegrounds zone is applied to all maps with a battlegrounds mapflag */
|
||||
name: "Battlegrounds" /* changing this name requires MAP_ZONE_BG_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
AL_TELEPORT: true
|
||||
AL_WARP: true
|
||||
WZ_ICEWALL: true
|
||||
TF_BACKSLIDING: true
|
||||
RG_INTIMIDATE: true
|
||||
MO_BODYRELOCATION: true
|
||||
WE_CALLPARTNER: true
|
||||
HP_ASSUMPTIO: true
|
||||
HP_BASILICA: true
|
||||
CG_MOONLIT: true
|
||||
WE_CALLPARENT: true
|
||||
WE_CALLBABY: true
|
||||
CR_CULTIVATION: true
|
||||
TK_RUN: true
|
||||
TK_HIGHJUMP: true
|
||||
SG_FEEL: true
|
||||
SG_SUN_WARM: true
|
||||
SG_MOON_WARM: true
|
||||
SG_STAR_WARM: true
|
||||
SG_SUN_COMFORT: true
|
||||
SG_MOON_COMFORT: true
|
||||
SG_STAR_COMFORT: true
|
||||
SG_HATE: true
|
||||
SG_SUN_ANGER: true
|
||||
SG_MOON_ANGER: true
|
||||
SG_STAR_ANGER: true
|
||||
SG_SUN_BLESS: true
|
||||
SG_MOON_BLESS: true
|
||||
SG_STAR_BLESS: true
|
||||
NJ_KIRIKAGE: true
|
||||
CASH_ASSUMPTIO: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
disabled_items: {
|
||||
Assumptio_5_Scroll: true
|
||||
Pty_Assumptio_Scroll: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Aldebaran Turbo Track"
|
||||
|
||||
disabled_skills: {
|
||||
SM_ENDURE: true
|
||||
AL_TELEPORT: true
|
||||
AL_WARP: true
|
||||
AL_CURE: true
|
||||
TF_HIDING: true
|
||||
WZ_ICEWALL: true
|
||||
AS_CLOAKING: true
|
||||
RG_INTIMIDATE: true
|
||||
MO_BODYRELOCATION: true
|
||||
LK_CONCENTRATION: true
|
||||
LK_BERSERK: true
|
||||
HP_BASILICA: true
|
||||
WS_CARTBOOST: true
|
||||
ST_CHASEWALK: true
|
||||
CG_MOONLIT: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
GN_CARTBOOST: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Wing_Of_Fly: true
|
||||
Anodyne: true
|
||||
Green_Potion: true
|
||||
Panacea: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Jail"
|
||||
|
||||
disabled_skills: {
|
||||
TK_JUMPKICK: true
|
||||
TK_HIGHJUMP: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Wing_Of_Fly: true
|
||||
Wing_Of_Butterfly: true
|
||||
Giant_Fly_Wing: true
|
||||
WOB_Rune: true
|
||||
WOB_Schwaltz: true
|
||||
WOB_Rachel: true
|
||||
WOB_Local: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Izlude Battle Arena"
|
||||
|
||||
disabled_skills: {
|
||||
RG_INTIMIDATE: true
|
||||
AL_TELEPORT: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Wing_Of_Fly: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "GvG2"
|
||||
inherit: ( "GvG" ) /* will import all gvg has */
|
||||
|
||||
disabled_skills: {
|
||||
TK_HIGHJUMP: true
|
||||
SA_ABRACADABRA: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Sealed Shrine"
|
||||
|
||||
disabled_skills: {
|
||||
MG_SAFETYWALL: true
|
||||
AL_TELEPORT: true
|
||||
RG_INTIMIDATE: true
|
||||
HP_ASSUMPTIO: true
|
||||
CASH_ASSUMPTIO: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Memorial Dungeon" /* ETower, Orc's Memory, Nidhoggur's Nest, etc */
|
||||
|
||||
disabled_skills: {
|
||||
AL_TELEPORT: true
|
||||
WZ_ICEWALL: true
|
||||
RG_INTIMIDATE: true
|
||||
PF_SPIDERWEB: true
|
||||
NPC_EXPULSION: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Towns"
|
||||
|
||||
disabled_skills: {
|
||||
AM_CANNIBALIZE: true
|
||||
AM_SPHEREMINE: true
|
||||
CR_CULTIVATION: true
|
||||
BS_GREED: true
|
||||
SC_MANHOLE: true
|
||||
WM_POEMOFNETHERWORLD: true
|
||||
GN_WALLOFTHORN: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Greed_Scroll: true
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
// Forbidden Skills Database
|
||||
//
|
||||
// Structure of Database:
|
||||
// SkillID,Flag
|
||||
//
|
||||
// Legend for 'Flag' field (bitmask):
|
||||
// 1 = Cannot be used in normal maps
|
||||
// 2 = Cannot be used in PvP maps (use this instead of 1 for PK-mode servers)
|
||||
// 4 = Cannot be used in GvG maps
|
||||
// 8 = Cannot be used in Battleground maps
|
||||
// 16 = Cannot be cloned (clones will not copy this skill)
|
||||
// Restricted zones - they're configured by 'restricted <number>' mapflag
|
||||
// 32 = Cannot be used in zone 1 maps
|
||||
// 64 = Cannot be used in zone 2 maps
|
||||
// 128 = Cannot be used in zone 3 maps
|
||||
// 256 = Cannot be used in zone 4 maps
|
||||
// 512 = Cannot be used in zone 5 maps
|
||||
// 1024 = Cannot be used in zone 6 maps
|
||||
// 2048 = Cannot be used in zone 7 maps
|
||||
//
|
||||
// Example:
|
||||
// 8,6 = Endure cannot be used in PvP and GvG maps (2+4)
|
||||
|
||||
//Normal
|
||||
2422,1 //WM_LULLABY_DEEPSLEEP
|
||||
2423,1 //WM_SIRCLEOFNATURE
|
||||
2430,1 //WM_SATURDAY_NIGHT_FEVER
|
||||
2455,1 //SO_ARRULLO
|
||||
|
||||
//PVP
|
||||
1013,2 //BS_GREED
|
||||
|
||||
//GVG
|
||||
26,4 //AL_TELEPORT
|
||||
27,4 //AL_WARP
|
||||
87,4 //WZ_ICEWALL
|
||||
150,4 //TF_BACKSLIDING
|
||||
219,4 //RG_INTIMIDATE
|
||||
336,4 //WE_CALLPARTNER
|
||||
361,4 //HP_ASSUMPTIO
|
||||
362,4 //HP_BASILICA
|
||||
395,4 //CG_MOONLIT
|
||||
409,4 //WE_CALLPARENT
|
||||
410,4 //WE_CALLBABY
|
||||
491,4 //CR_CULTIVATION
|
||||
530,4 //NJ_KIRIKAGE
|
||||
691,4 //CASH_ASSUMPTIO
|
||||
1013,4 //BS_GREED
|
||||
2284,4 //SC_FATALMENACE
|
||||
2300,4 //SC_DIMENSIONDOOR
|
||||
|
||||
//BATTLEGROUND
|
||||
26,8 //AL_TELEPORT
|
||||
27,8 //AL_WARP
|
||||
87,8 //WZ_ICEWALL
|
||||
150,8 //TF_BACKSLIDING
|
||||
219,8 //RG_INTIMIDATE
|
||||
264,8 //MO_BODYRELOCATION
|
||||
336,8 //WE_CALLPARTNER
|
||||
361,8 //HP_ASSUMPTIO
|
||||
362,8 //HP_BASILICA
|
||||
395,8 //CG_MOONLIT
|
||||
409,8 //WE_CALLPARENT
|
||||
410,8 //WE_CALLBABY
|
||||
491,8 //CR_CULTIVATION
|
||||
411,8 //TK_RUN
|
||||
426,8 //TK_HIGHJUMP
|
||||
427,8 //SG_FEEL
|
||||
428,8 //SG_SUN_WARM
|
||||
429,8 //SG_MOON_WARM
|
||||
430,8 //SG_STAR_WARM
|
||||
431,8 //SG_SUN_COMFORT
|
||||
432,8 //SG_MOON_COMFORT
|
||||
433,8 //SG_STAR_COMFORT
|
||||
434,8 //SG_HATE
|
||||
435,8 //SG_SUN_ANGER
|
||||
436,8 //SG_MOON_ANGER
|
||||
437,8 //SG_STAR_ANGER
|
||||
438,8 //SG_SUN_BLESS
|
||||
439,8 //SG_MOON_BLESS
|
||||
440,8 //SG_STAR_BLESS
|
||||
530,8 //NJ_KIRIKAGE
|
||||
691,8 //CASH_ASSUMPITO
|
||||
2284,8 //SC_FATALMENACE
|
||||
2300,8 //SC_DIMENSIONDOOR
|
||||
|
||||
//mixed
|
||||
488,3 //CG_HERMODE
|
||||
3013,3 //KO_KYOUGAKU
|
||||
|
||||
//Clone Forbidden/pointless skills
|
||||
77,16 //PR_TURNUNDEAD
|
||||
79,16 //PR_MAGNUS
|
||||
|
||||
//Zone 1 - Aldebaran Turbo Track
|
||||
8,32 //SM_ENDURE
|
||||
26,32 //AL_TELEPORT
|
||||
27,32 //AL_WARP
|
||||
35,32 //AL_CURE
|
||||
51,32 //TF_HIDING
|
||||
87,32 //WZ_ICEWALL
|
||||
135,32 //AS_CLOAKING
|
||||
219,32 //RG_INTIMIDATE
|
||||
264,32 //MO_BODYRELOCATION
|
||||
357,32 //LK_CONCENTRATION
|
||||
359,32 //LK_BERSERK
|
||||
362,32 //HP_BASILICA
|
||||
387,32 //WS_CARTBOOST
|
||||
389,32 //ST_CHASEWALK
|
||||
395,32 //CG_MOONLIT
|
||||
2284,32 //SC_FATALMENACE
|
||||
2300,32 //SC_DIMENSIONDOOR
|
||||
2478,32 //GN_CARTBOOST
|
||||
|
||||
//Zone 2 - Jail
|
||||
421,64 //TK_JUMPKICK
|
||||
426,64 //TK_HIGHJUMP
|
||||
|
||||
//Zone 3 - Izlude Battle Arena
|
||||
219,128 //RG_INTIMIDATE
|
||||
26,128 //AL_TELEPORT
|
||||
2284,128 //SC_FATALMENACE
|
||||
2300,128 //SC_DIMENSIONDOOR
|
||||
|
||||
//Zone 4 - WoE:SE
|
||||
426,256 //TK_HIGHJUMP
|
||||
290,256 //SA_ABRACADABRA
|
||||
|
||||
//Zone 5 - Sealed Shrine
|
||||
12,512 //MG_SAFETYWALL
|
||||
26,512 //AL_TELEPORT
|
||||
219,512 //RG_INTIMIDATE
|
||||
361,512 //HP_ASSUMPTIO
|
||||
691,512 //CASH_ASSUMPTIO
|
||||
2284,512 //SC_FATALMENACE
|
||||
2300,512 //SC_DIMENSIONDOOR
|
||||
|
||||
//Zone 6 - Endless Tower, Orc's Memory, Nidhoggur's Nest
|
||||
26,1024 //AL_TELEPORT
|
||||
87,1024 //WZ_ICEWALL
|
||||
219,1024 //RG_INTIMIDATE
|
||||
405,1024 //PF_SPIDERWEB
|
||||
674,1024 //NPC_EXPULSION
|
||||
2284,1024 //SC_FATALMENACE
|
||||
2300,1024 //SC_DIMENSIONDOOR
|
||||
|
||||
//Zone 7 - Towns
|
||||
232,2048 //AM_CANNIBALIZE
|
||||
233,2048 //AM_SPHEREMINE
|
||||
491,2048 //CR_CULTIVATION
|
||||
1013,2048 //BS_GREED
|
||||
2299,2048 //SC_MANHOLE
|
||||
2419,2048 //WM_POEMOFNETHERWORLD
|
||||
2482,2048 //GN_WALLOFTHORN
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
// The equipment/items/cards restriction file
|
||||
// here you define which items may not be used at PvP / GvG
|
||||
// format: <item id>,<mode>
|
||||
// mode
|
||||
// 1 - restricted in normal maps
|
||||
// 2 - restricted in PVP
|
||||
// 4 - restricted in GVG
|
||||
// 8 - restricted in Battlegrounds
|
||||
// Restricted zones - they're configured by 'restricted <number>' mapflag
|
||||
// 32 - restricted in zone 1
|
||||
// 64 - restricted in zone 2
|
||||
// 128 - restricted in zone 3
|
||||
// 256 - restricted in zone 4
|
||||
// 512 - restricted in zone 5
|
||||
// 1024 - restricted in zone 6
|
||||
// 2048 - restricted in zone 7
|
||||
|
||||
//Examples:
|
||||
//1201,1 you can't use KNIFE(ID 1201) on normal maps
|
||||
//608,4 you can't use Yggdrasil Seed(ID 608) on both GvG and WoE Castles
|
||||
//4174,6 Forbid Deviling Card in every PVP or GVG map, and during woes.
|
||||
//501,32 you can't use Red Potion on map marked as 'restricted zone 1'
|
||||
//502,64 you can't use Orange Potion on map marked as 'restricted zone 2'
|
||||
//503,128 you can't use Yellow Potion on map marked as 'restricted zone 3'
|
||||
// you can even mix modes
|
||||
//519,322 (256+64+2) you can't use Milk on PVP, and maps marked as 'restricted zone 2' and 'restricted zone 4'
|
||||
|
||||
//PVP
|
||||
14529,2 //Greed Scroll
|
||||
|
||||
//GVG
|
||||
12218,4 //LV5 Assumptio Scroll
|
||||
14529,4 //Greed Scroll
|
||||
14590,4 //Party Assumptio 5 Scroll
|
||||
|
||||
//BATTLEGROUND
|
||||
12218,8 //LV5 Assumptio Scroll
|
||||
14590,8 //Party Assumptio 5 Scroll
|
||||
|
||||
|
||||
//Zone 1 - Aldebaran Turbo Track
|
||||
601,32 //Fly Wing
|
||||
605,32 //Anodyne
|
||||
506,32 //Green Potion
|
||||
525,32 //Panacea
|
||||
|
||||
//Zone 2 - Jail
|
||||
601,64 //Fly Wing - not really needed here but ...
|
||||
602,64 //Butterfly Wing - also not needed
|
||||
12212,64 //Giant Fly Wing
|
||||
14582,64
|
||||
14583,64
|
||||
14584,64
|
||||
14585,64
|
||||
|
||||
//Zone 3 - Izlude Battle Arena
|
||||
601,128 //Fly Wing
|
||||
|
||||
//Zone 7 - Towns
|
||||
14529,2048 //Greed Scroll
|
||||
239
db/re/map_zone_db.txt
Normal file
239
db/re/map_zone_db.txt
Normal file
|
|
@ -0,0 +1,239 @@
|
|||
//====================================================
|
||||
//= _ _ _
|
||||
//= | | | | | |
|
||||
//= | |_| | ___ _ __ ___ _ _| | ___ ___
|
||||
//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
|
||||
//= | | | | __/ | | (__| |_| | | __/\__ \
|
||||
//= \_| |_/\___|_| \___|\__,_|_|\___||___/
|
||||
//=
|
||||
//= http://hercules.ws/board/
|
||||
//====================================================
|
||||
//= Hercules Map Zone Database [Ind/Hercules]
|
||||
//==
|
||||
//= A unlimited number of zones may be created, a zone
|
||||
//= may be used to create a set of disabled items, disabled skills
|
||||
//= and mapflags to be used by as many maps as one chooses,
|
||||
//= maps can be linked to a specific zone through the zone mapflag
|
||||
//= '<map name><tab>mapflag<tab>zone<tab><zone name>'
|
||||
zones: (
|
||||
{
|
||||
/* Normal zone is applied to all maps that are not pkable (where players cant fight each other) */
|
||||
/* However, it wont be applied to maps with its own zones (specified thru mapflag) */
|
||||
name: "Normal" /* changing this name requires MAP_ZONE_NORMAL_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
WM_LULLABY_DEEPSLEEP: true
|
||||
WM_SIRCLEOFNATURE: true
|
||||
WM_SATURDAY_NIGHT_FEVER: true
|
||||
SO_ARRULLO: true
|
||||
CG_HERMODE: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
|
||||
}
|
||||
mapflags: ( )
|
||||
},
|
||||
{
|
||||
/* PvP zone is applied to all maps with a pvp mapflag */
|
||||
name: "PvP" /* changing this name requires MAP_ZONE_PVP_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
BS_GREED: true
|
||||
CG_HERMODE: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Greed_Scroll: true
|
||||
}
|
||||
},
|
||||
{
|
||||
/* GvG zone is applied to all maps with a pvp mapflag */
|
||||
name: "GvG" /* changing this name requires MAP_ZONE_GVG_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
AL_TELEPORT: true
|
||||
AL_WARP: true
|
||||
WZ_ICEWALL: true
|
||||
TF_BACKSLIDING: true
|
||||
RG_INTIMIDATE: true
|
||||
WE_CALLPARTNER: true
|
||||
HP_ASSUMPTIO: true
|
||||
HP_BASILICA: true
|
||||
CG_MOONLIT: true
|
||||
WE_CALLPARENT: true
|
||||
WE_CALLBABY: true
|
||||
CR_CULTIVATION: true
|
||||
NJ_KIRIKAGE: true
|
||||
CASH_ASSUMPTIO: true
|
||||
BS_GREED: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Assumptio_5_Scroll: true
|
||||
Greed_Scroll: true
|
||||
Pty_Assumptio_Scroll: true
|
||||
}
|
||||
},
|
||||
{
|
||||
/* Battlegrounds zone is applied to all maps with a battlegrounds mapflag */
|
||||
name: "Battlegrounds" /* changing this name requires MAP_ZONE_BG_NAME to also be changed in src/map/map.h file */
|
||||
|
||||
disabled_skills: {
|
||||
AL_TELEPORT: true
|
||||
AL_WARP: true
|
||||
WZ_ICEWALL: true
|
||||
TF_BACKSLIDING: true
|
||||
RG_INTIMIDATE: true
|
||||
MO_BODYRELOCATION: true
|
||||
WE_CALLPARTNER: true
|
||||
HP_ASSUMPTIO: true
|
||||
HP_BASILICA: true
|
||||
CG_MOONLIT: true
|
||||
WE_CALLPARENT: true
|
||||
WE_CALLBABY: true
|
||||
CR_CULTIVATION: true
|
||||
TK_RUN: true
|
||||
TK_HIGHJUMP: true
|
||||
SG_FEEL: true
|
||||
SG_SUN_WARM: true
|
||||
SG_MOON_WARM: true
|
||||
SG_STAR_WARM: true
|
||||
SG_SUN_COMFORT: true
|
||||
SG_MOON_COMFORT: true
|
||||
SG_STAR_COMFORT: true
|
||||
SG_HATE: true
|
||||
SG_SUN_ANGER: true
|
||||
SG_MOON_ANGER: true
|
||||
SG_STAR_ANGER: true
|
||||
SG_SUN_BLESS: true
|
||||
SG_MOON_BLESS: true
|
||||
SG_STAR_BLESS: true
|
||||
NJ_KIRIKAGE: true
|
||||
CASH_ASSUMPTIO: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
disabled_items: {
|
||||
Assumptio_5_Scroll: true
|
||||
Pty_Assumptio_Scroll: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Aldebaran Turbo Track"
|
||||
|
||||
disabled_skills: {
|
||||
SM_ENDURE: true
|
||||
AL_TELEPORT: true
|
||||
AL_WARP: true
|
||||
AL_CURE: true
|
||||
TF_HIDING: true
|
||||
WZ_ICEWALL: true
|
||||
AS_CLOAKING: true
|
||||
RG_INTIMIDATE: true
|
||||
MO_BODYRELOCATION: true
|
||||
LK_CONCENTRATION: true
|
||||
LK_BERSERK: true
|
||||
HP_BASILICA: true
|
||||
WS_CARTBOOST: true
|
||||
ST_CHASEWALK: true
|
||||
CG_MOONLIT: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
GN_CARTBOOST: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Wing_Of_Fly: true
|
||||
Anodyne: true
|
||||
Green_Potion: true
|
||||
Panacea: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Jail"
|
||||
|
||||
disabled_skills: {
|
||||
TK_JUMPKICK: true
|
||||
TK_HIGHJUMP: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Wing_Of_Fly: true
|
||||
Wing_Of_Butterfly: true
|
||||
Giant_Fly_Wing: true
|
||||
WOB_Rune: true
|
||||
WOB_Schwaltz: true
|
||||
WOB_Rachel: true
|
||||
WOB_Local: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Izlude Battle Arena"
|
||||
|
||||
disabled_skills: {
|
||||
RG_INTIMIDATE: true
|
||||
AL_TELEPORT: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Wing_Of_Fly: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "GvG2"
|
||||
inherit: ( "GvG" ) /* will import all gvg has */
|
||||
|
||||
disabled_skills: {
|
||||
TK_HIGHJUMP: true
|
||||
SA_ABRACADABRA: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Sealed Shrine"
|
||||
|
||||
disabled_skills: {
|
||||
MG_SAFETYWALL: true
|
||||
AL_TELEPORT: true
|
||||
RG_INTIMIDATE: true
|
||||
HP_ASSUMPTIO: true
|
||||
CASH_ASSUMPTIO: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Memorial Dungeon" /* ETower, Orc's Memory, Nidhoggur's Nest, etc */
|
||||
|
||||
disabled_skills: {
|
||||
AL_TELEPORT: true
|
||||
WZ_ICEWALL: true
|
||||
RG_INTIMIDATE: true
|
||||
PF_SPIDERWEB: true
|
||||
NPC_EXPULSION: true
|
||||
SC_FATALMENACE: true
|
||||
SC_DIMENSIONDOOR: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Towns"
|
||||
|
||||
disabled_skills: {
|
||||
AM_CANNIBALIZE: true
|
||||
AM_SPHEREMINE: true
|
||||
CR_CULTIVATION: true
|
||||
BS_GREED: true
|
||||
SC_MANHOLE: true
|
||||
WM_POEMOFNETHERWORLD: true
|
||||
GN_WALLOFTHORN: true
|
||||
}
|
||||
|
||||
disabled_items: {
|
||||
Greed_Scroll: true
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
// Forbidden Skills Database
|
||||
//
|
||||
// Structure of Database:
|
||||
// SkillID,Flag
|
||||
//
|
||||
// Legend for 'Flag' field (bitmask):
|
||||
// 1 = Cannot be used in normal maps
|
||||
// 2 = Cannot be used in PvP maps (use this instead of 1 for PK-mode servers)
|
||||
// 4 = Cannot be used in GvG maps
|
||||
// 8 = Cannot be used in Battleground maps
|
||||
// 16 = Cannot be cloned (clones will not copy this skill)
|
||||
// Restricted zones - they're configured by 'restricted <number>' mapflag
|
||||
// 32 = Cannot be used in zone 1 maps
|
||||
// 64 = Cannot be used in zone 2 maps
|
||||
// 128 = Cannot be used in zone 3 maps
|
||||
// 256 = Cannot be used in zone 4 maps
|
||||
// 512 = Cannot be used in zone 5 maps
|
||||
// 1024 = Cannot be used in zone 6 maps
|
||||
// 2048 = Cannot be used in zone 7 maps
|
||||
//
|
||||
// Example:
|
||||
// 8,6 = Endure cannot be used in PvP and GvG maps (2+4)
|
||||
|
||||
//Normal
|
||||
2422,1 //WM_LULLABY_DEEPSLEEP
|
||||
2423,1 //WM_SIRCLEOFNATURE
|
||||
2430,1 //WM_SATURDAY_NIGHT_FEVER
|
||||
2455,1 //SO_ARRULLO
|
||||
|
||||
//PVP
|
||||
1013,2 //BS_GREED
|
||||
|
||||
//GVG
|
||||
26,4 //AL_TELEPORT
|
||||
27,4 //AL_WARP
|
||||
87,4 //WZ_ICEWALL
|
||||
150,4 //TF_BACKSLIDING
|
||||
219,4 //RG_INTIMIDATE
|
||||
336,4 //WE_CALLPARTNER
|
||||
361,4 //HP_ASSUMPTIO
|
||||
362,4 //HP_BASILICA
|
||||
395,4 //CG_MOONLIT
|
||||
409,4 //WE_CALLPARENT
|
||||
410,4 //WE_CALLBABY
|
||||
491,4 //CR_CULTIVATION
|
||||
530,4 //NJ_KIRIKAGE
|
||||
691,4 //CASH_ASSUMPTIO
|
||||
1013,4 //BS_GREED
|
||||
2284,4 //SC_FATALMENACE
|
||||
2300,4 //SC_DIMENSIONDOOR
|
||||
|
||||
//BATTLEGROUND
|
||||
26,8 //AL_TELEPORT
|
||||
27,8 //AL_WARP
|
||||
87,8 //WZ_ICEWALL
|
||||
150,8 //TF_BACKSLIDING
|
||||
219,8 //RG_INTIMIDATE
|
||||
264,8 //MO_BODYRELOCATION
|
||||
336,8 //WE_CALLPARTNER
|
||||
361,8 //HP_ASSUMPTIO
|
||||
362,8 //HP_BASILICA
|
||||
395,8 //CG_MOONLIT
|
||||
409,8 //WE_CALLPARENT
|
||||
410,8 //WE_CALLBABY
|
||||
491,8 //CR_CULTIVATION
|
||||
411,8 //TK_RUN
|
||||
426,8 //TK_HIGHJUMP
|
||||
427,8 //SG_FEEL
|
||||
428,8 //SG_SUN_WARM
|
||||
429,8 //SG_MOON_WARM
|
||||
430,8 //SG_STAR_WARM
|
||||
431,8 //SG_SUN_COMFORT
|
||||
432,8 //SG_MOON_COMFORT
|
||||
433,8 //SG_STAR_COMFORT
|
||||
434,8 //SG_HATE
|
||||
435,8 //SG_SUN_ANGER
|
||||
436,8 //SG_MOON_ANGER
|
||||
437,8 //SG_STAR_ANGER
|
||||
438,8 //SG_SUN_BLESS
|
||||
439,8 //SG_MOON_BLESS
|
||||
440,8 //SG_STAR_BLESS
|
||||
530,8 //NJ_KIRIKAGE
|
||||
691,8 //CASH_ASSUMPITO
|
||||
2284,8 //SC_FATALMENACE
|
||||
2300,8 //SC_DIMENSIONDOOR
|
||||
|
||||
//mixed
|
||||
488,3 //CG_HERMODE
|
||||
3013,3 //KO_KYOUGAKU
|
||||
|
||||
//Clone Forbidden/pointless skills
|
||||
77,16 //PR_TURNUNDEAD
|
||||
79,16 //PR_MAGNUS
|
||||
|
||||
//Zone 1 - Aldebaran Turbo Track
|
||||
8,32 //SM_ENDURE
|
||||
26,32 //AL_TELEPORT
|
||||
27,32 //AL_WARP
|
||||
35,32 //AL_CURE
|
||||
51,32 //TF_HIDING
|
||||
87,32 //WZ_ICEWALL
|
||||
135,32 //AS_CLOAKING
|
||||
219,32 //RG_INTIMIDATE
|
||||
264,32 //MO_BODYRELOCATION
|
||||
357,32 //LK_CONCENTRATION
|
||||
359,32 //LK_BERSERK
|
||||
362,32 //HP_BASILICA
|
||||
387,32 //WS_CARTBOOST
|
||||
389,32 //ST_CHASEWALK
|
||||
395,32 //CG_MOONLIT
|
||||
2284,32 //SC_FATALMENACE
|
||||
2300,32 //SC_DIMENSIONDOOR
|
||||
2478,32 //GN_CARTBOOST
|
||||
|
||||
//Zone 2 - Jail
|
||||
421,64 //TK_JUMPKICK
|
||||
426,64 //TK_HIGHJUMP
|
||||
|
||||
//Zone 3 - Izlude Battle Arena
|
||||
219,128 //RG_INTIMIDATE
|
||||
26,128 //AL_TELEPORT
|
||||
2284,128 //SC_FATALMENACE
|
||||
2300,128 //SC_DIMENSIONDOOR
|
||||
|
||||
//Zone 4 - WoE:SE
|
||||
426,256 //TK_HIGHJUMP
|
||||
290,256 //SA_ABRACADABRA
|
||||
|
||||
//Zone 5 - Sealed Shrine
|
||||
12,512 //MG_SAFETYWALL
|
||||
26,512 //AL_TELEPORT
|
||||
219,512 //RG_INTIMIDATE
|
||||
361,512 //HP_ASSUMPTIO
|
||||
691,512 //CASH_ASSUMPTIO
|
||||
2284,512 //SC_FATALMENACE
|
||||
2300,512 //SC_DIMENSIONDOOR
|
||||
|
||||
//Zone 6 - Endless Tower, Orc's Memory, Nidhoggur's Nest
|
||||
26,1024 //AL_TELEPORT
|
||||
87,1024 //WZ_ICEWALL
|
||||
219,1024 //RG_INTIMIDATE
|
||||
405,1024 //PF_SPIDERWEB
|
||||
674,1024 //NPC_EXPULSION
|
||||
2284,1024 //SC_FATALMENACE
|
||||
2300,1024 //SC_DIMENSIONDOOR
|
||||
|
||||
//Zone 7 - Towns
|
||||
232,2048 //AM_CANNIBALIZE
|
||||
233,2048 //AM_SPHEREMINE
|
||||
491,2048 //CR_CULTIVATION
|
||||
1013,2048 //BS_GREED
|
||||
2299,2048 //SC_MANHOLE
|
||||
2419,2048 //WM_POEMOFNETHERWORLD
|
||||
2482,2048 //GN_WALLOFTHORN
|
||||
Binary file not shown.
|
|
@ -22,10 +22,10 @@ npc: conf/mapflag/pvp.txt
|
|||
npc: conf/mapflag/pvp_noparty.txt
|
||||
npc: conf/mapflag/pvp_noguild.txt
|
||||
npc: conf/mapflag/night.txt
|
||||
npc: conf/mapflag/restricted.txt
|
||||
npc: conf/mapflag/zone.txt
|
||||
npc: conf/mapflag/battleground.txt
|
||||
npc: conf/mapflag/novending.txt
|
||||
npc: conf/mapflag/town.txt
|
||||
npc: conf/mapflag/reset.txt
|
||||
//npc: conf/mapflag/skillmodifier.txt
|
||||
//npc: conf/mapflag/skillduration.txt
|
||||
npc: conf/mapflag/skillmodifier.txt
|
||||
npc: conf/mapflag/skillduration.txt
|
||||
|
|
@ -3795,16 +3795,16 @@ ACMD_FUNC(reloadscript)
|
|||
* 0 = no additional information
|
||||
* 1 = Show users in that map and their location
|
||||
* 2 = Shows NPCs in that map
|
||||
* 3 = Shows the shops/chats in that map (not implemented)
|
||||
* 3 = Shows the chats in that map
|
||||
TODO# add the missing mapflags e.g. adjust_skill_damage to display
|
||||
*------------------------------------------*/
|
||||
ACMD_FUNC(mapinfo)
|
||||
{
|
||||
ACMD_FUNC(mapinfo) {
|
||||
struct map_session_data* pl_sd;
|
||||
struct s_mapiterator* iter;
|
||||
struct npc_data *nd = NULL;
|
||||
struct chat_data *cd = NULL;
|
||||
char direction[12];
|
||||
int i, m_id, chat_num, list = 0;
|
||||
int i, m_id, chat_num = 0, list = 0, vend_num = 0;
|
||||
unsigned short m_index;
|
||||
char mapname[24];
|
||||
|
||||
|
|
@ -3839,12 +3839,17 @@ ACMD_FUNC(mapinfo)
|
|||
// count chats (for initial message)
|
||||
chat_num = 0;
|
||||
iter = mapit_getallusers();
|
||||
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
|
||||
if( (cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) != NULL && pl_sd->mapindex == m_index && cd->usersd[0] == pl_sd )
|
||||
chat_num++;
|
||||
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) {
|
||||
if( pl_sd->mapindex == m_index ) {
|
||||
if( sd->state.vending )
|
||||
vend_num++;
|
||||
else if( (cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) != NULL && cd->usersd[0] == pl_sd )
|
||||
chat_num++;
|
||||
}
|
||||
}
|
||||
mapit_free(iter);
|
||||
|
||||
sprintf(atcmd_output, msg_txt(1040), mapname, map[m_id].users, map[m_id].npc_num, chat_num); // Map Name: %s | Players In Map: %d | NPCs In Map: %d | Chats In Map: %d
|
||||
sprintf(atcmd_output, msg_txt(1040), mapname, map[m_id].zone->name, map[m_id].users, map[m_id].npc_num, chat_num, vend_num); // Map: %s (Zone:%s) | Players: %d | NPCs: %d | Chats: %d | Vendings: %d
|
||||
clif_displaymessage(fd, atcmd_output);
|
||||
clif_displaymessage(fd, msg_txt(1041)); // ------ Map Flags ------
|
||||
if (map[m_id].flag.town)
|
||||
|
|
@ -3932,11 +3937,6 @@ ACMD_FUNC(mapinfo)
|
|||
strcat(atcmd_output, msg_txt(1077)); // Fireworks |
|
||||
if (map[m_id].flag.leaves)
|
||||
strcat(atcmd_output, msg_txt(1078)); // Leaves |
|
||||
/**
|
||||
* No longer available, keeping here just in case it's back someday. [Ind]
|
||||
**/
|
||||
//if (map[m_id].flag.rain)
|
||||
// strcat(atcmd_output, msg_txt(1079)); // Rain |
|
||||
if (map[m_id].flag.nightenabled)
|
||||
strcat(atcmd_output, msg_txt(1080)); // Displays Night |
|
||||
clif_displaymessage(fd, atcmd_output);
|
||||
|
|
@ -7635,7 +7635,7 @@ ACMD_FUNC(mapflag) {
|
|||
checkflag(fog); checkflag(fireworks); checkflag(sakura); checkflag(leaves);
|
||||
checkflag(nogo); checkflag(nobaseexp);
|
||||
checkflag(nojobexp); checkflag(nomobloot); checkflag(nomvploot); checkflag(nightenabled);
|
||||
checkflag(restricted); checkflag(nodrop); checkflag(novending); checkflag(loadevent);
|
||||
checkflag(nodrop); checkflag(novending); checkflag(loadevent);
|
||||
checkflag(nochat); checkflag(partylock); checkflag(guildlock); checkflag(src4instance);
|
||||
clif_displaymessage(sd->fd," ");
|
||||
clif_displaymessage(sd->fd,msg_txt(1312)); // Usage: "@mapflag monster_noteleport 1" (0=Off | 1=On)
|
||||
|
|
@ -7654,7 +7654,7 @@ ACMD_FUNC(mapflag) {
|
|||
setflag(fog); setflag(fireworks); setflag(sakura); setflag(leaves);
|
||||
setflag(nogo); setflag(nobaseexp);
|
||||
setflag(nojobexp); setflag(nomobloot); setflag(nomvploot); setflag(nightenabled);
|
||||
setflag(restricted); setflag(nodrop); setflag(novending); setflag(loadevent);
|
||||
setflag(nodrop); setflag(novending); setflag(loadevent);
|
||||
setflag(nochat); setflag(partylock); setflag(guildlock); setflag(src4instance);
|
||||
|
||||
clif_displaymessage(sd->fd,msg_txt(1314)); // Invalid flag name or flag.
|
||||
|
|
@ -7666,7 +7666,7 @@ ACMD_FUNC(mapflag) {
|
|||
clif_displaymessage(sd->fd,"pvp_nocalcrank, gvg_castle, gvg, gvg_dungeon, gvg_noparty, battleground,");
|
||||
clif_displaymessage(sd->fd,"nozenypenalty, notrade, noskill, nowarp, nowarpto, noicewall, snow, clouds, clouds2,");
|
||||
clif_displaymessage(sd->fd,"fog, fireworks, sakura, leaves, nogo, nobaseexp, nojobexp, nomobloot,");
|
||||
clif_displaymessage(sd->fd,"nomvploot, nightenabled, restricted, nodrop, novending, loadevent, nochat, partylock,");
|
||||
clif_displaymessage(sd->fd,"nomvploot, nightenabled, nodrop, novending, loadevent, nochat, partylock,");
|
||||
clif_displaymessage(sd->fd,"guildlock, src4instance");
|
||||
|
||||
#undef checkflag
|
||||
|
|
|
|||
|
|
@ -314,6 +314,10 @@ enum useskill_fail_cause
|
|||
USESKILL_FAIL_THERE_ARE_NPC_AROUND = 83,
|
||||
};
|
||||
|
||||
enum clif_messages {
|
||||
SKILL_CANT_USE_AREA = 0x536,
|
||||
};
|
||||
|
||||
int clif_setip(const char* ip);
|
||||
void clif_setbindip(const char* ip);
|
||||
void clif_setport(uint16 port);
|
||||
|
|
|
|||
|
|
@ -585,27 +585,6 @@ static void itemdb_read_itemgroup(void)
|
|||
return;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Read item forbidden by mapflag (can't equip item)
|
||||
*------------------------------------------*/
|
||||
static bool itemdb_read_noequip(char* str[], int columns, int current)
|
||||
{// <nameid>,<mode>
|
||||
int nameid;
|
||||
struct item_data *id;
|
||||
|
||||
nameid = atoi(str[0]);
|
||||
|
||||
if( ( id = itemdb_exists(nameid) ) == NULL )
|
||||
{
|
||||
ShowWarning("itemdb_read_noequip: Invalid item id %d.\n", nameid);
|
||||
return false;
|
||||
}
|
||||
|
||||
id->flag.no_equip |= atoi(str[1]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Reads item trade restrictions [Skotlex]
|
||||
*------------------------------------------*/
|
||||
|
|
@ -1310,7 +1289,6 @@ static void itemdb_read(void) {
|
|||
itemdb_read_combos();
|
||||
itemdb_read_itemgroup();
|
||||
sv_readdb(db_path, "item_avail.txt", ',', 2, 2, -1, &itemdb_read_itemavail);
|
||||
sv_readdb(db_path, DBPATH"item_noequip.txt", ',', 2, 2, -1, &itemdb_read_noequip);
|
||||
sv_readdb(db_path, DBPATH"item_trade.txt", ',', 3, 3, -1, &itemdb_read_itemtrade);
|
||||
sv_readdb(db_path, "item_delay.txt", ',', 2, 2, -1, &itemdb_read_itemdelay);
|
||||
sv_readdb(db_path, "item_stack.txt", ',', 3, 3, -1, &itemdb_read_stack);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ enum {
|
|||
ITEMID_CAMOUFLAGE_GENERATOR,
|
||||
ITEMID_HIGH_QUALITY_COOLER,
|
||||
ITEMID_SPECIAL_COOLER,
|
||||
} mecha_item_list;
|
||||
} mecha_item_list;
|
||||
|
||||
//The only item group required by the code to be known. See const.txt for the full list.
|
||||
#define IG_FINDINGORE 6
|
||||
|
|
@ -123,7 +123,6 @@ struct item_data {
|
|||
struct script_code *unequip_script;//Script executed once when unequipping.
|
||||
struct {
|
||||
unsigned available : 1;
|
||||
short no_equip;
|
||||
unsigned no_refine : 1; // [celest]
|
||||
unsigned delay_consume : 1; // Signifies items that are not consumed immediately upon double-click [Skotlex]
|
||||
unsigned trade_restriction : 9; //Item restrictions mask [Skotlex]
|
||||
|
|
|
|||
331
src/map/map.c
331
src/map/map.c
|
|
@ -13,6 +13,7 @@
|
|||
#include "../common/random.h"
|
||||
#include "../common/strlib.h"
|
||||
#include "../common/utils.h"
|
||||
#include "../common/conf.h"
|
||||
|
||||
#include "map.h"
|
||||
#include "path.h"
|
||||
|
|
@ -2892,6 +2893,31 @@ int map_delmap(char* mapname)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
void map_zone_db_clear(void) {
|
||||
struct map_zone_data *zone;
|
||||
int i;
|
||||
|
||||
DBIterator *iter = db_iterator(zone_db);
|
||||
for(zone = dbi_first(iter); dbi_exists(iter); zone = dbi_next(iter)) {
|
||||
aFree(zone->disabled_skills);
|
||||
aFree(zone->disabled_items);
|
||||
for(i = 0; i < zone->mapflags_count; i++) {
|
||||
aFree(zone->mapflags[i]);
|
||||
}
|
||||
aFree(zone->mapflags);
|
||||
}
|
||||
dbi_destroy(iter);
|
||||
|
||||
db_destroy(zone_db);/* will aFree(zone) */
|
||||
|
||||
/* clear the main zone stuff */
|
||||
aFree(map_zone_all.disabled_skills);
|
||||
aFree(map_zone_all.disabled_items);
|
||||
for(i = 0; i < map_zone_all.mapflags_count; i++) {
|
||||
aFree(map_zone_all.mapflags[i]);
|
||||
}
|
||||
aFree(map_zone_all.mapflags);
|
||||
}
|
||||
|
||||
void do_final_maps(void) {
|
||||
int i, v = 0;
|
||||
|
|
@ -2931,11 +2957,12 @@ void do_final_maps(void) {
|
|||
}
|
||||
map[i].skill_count = 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
map_zone_db_clear();
|
||||
|
||||
}
|
||||
|
||||
/// Initializes map flags and adjusts them depending on configuration.
|
||||
void map_flags_init(void) {
|
||||
int i, v = 0;
|
||||
|
|
@ -2945,7 +2972,6 @@ void map_flags_init(void) {
|
|||
memset(&map[i].flag, 0, sizeof(map[i].flag));
|
||||
|
||||
// additional mapflag data
|
||||
map[i].zone = 0; // restricted mapflag zone
|
||||
map[i].nocommand = 0; // nocommand mapflag level
|
||||
map[i].bexp = 100; // per map base exp multiplicator
|
||||
map[i].jexp = 100; // per map job exp multiplicator
|
||||
|
|
@ -2968,10 +2994,12 @@ void map_flags_init(void) {
|
|||
}
|
||||
map[i].skills = NULL;
|
||||
map[i].skill_count = 0;
|
||||
|
||||
|
||||
// adjustments
|
||||
if( battle_config.pk_mode )
|
||||
map[i].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris]
|
||||
/* align with 'All' zone */
|
||||
map[i].zone = &map_zone_all;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3533,6 +3561,296 @@ int log_sql_init(void)
|
|||
#endif
|
||||
return 0;
|
||||
}
|
||||
void map_zone_apply(int m, struct map_zone_data *zone,char* w1, const char* start, const char* buffer, const char* filepath) {
|
||||
int i;
|
||||
char empty[1] = "\0";
|
||||
map[m].zone = zone;
|
||||
for(i = 0; i < zone->mapflags_count; i++) {
|
||||
char flag[MAP_ZONE_MAPFLAG_LENGTH], params[MAP_ZONE_MAPFLAG_LENGTH];
|
||||
int len = strlen(zone->mapflags[i]);
|
||||
int k;
|
||||
params[0] = '\0';
|
||||
memcpy(flag, zone->mapflags[i], MAP_ZONE_MAPFLAG_LENGTH);
|
||||
for(k = 0; k < len; k++) {
|
||||
if( flag[k] == '\t' ) {
|
||||
memcpy(params, &flag[k+1], len - k);
|
||||
flag[k] = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
npc_parse_mapflag(w1,empty,flag,params,start,buffer,filepath);
|
||||
}
|
||||
}
|
||||
/* used on npc load and reload to apply all "Normal" zone */
|
||||
void map_zone_init(void) {
|
||||
struct map_zone_data *zone;
|
||||
char empty[1] = "\0";
|
||||
int i,k,j;
|
||||
|
||||
zone = &map_zone_all;
|
||||
|
||||
for(i = 0; i < zone->mapflags_count; i++) {
|
||||
char flag[MAP_ZONE_MAPFLAG_LENGTH], params[MAP_ZONE_MAPFLAG_LENGTH];
|
||||
int len = strlen(zone->mapflags[i]);
|
||||
params[0] = '\0';
|
||||
memcpy(flag, zone->mapflags[i], MAP_ZONE_MAPFLAG_LENGTH);
|
||||
for(k = 0; k < len; k++) {
|
||||
if( flag[k] == '\t' ) {
|
||||
memcpy(params, &flag[k+1], len - k);
|
||||
flag[k] = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(j = 0; j < map_num; j++) {
|
||||
if( map[j].zone == &map_zone_all ) {
|
||||
npc_parse_mapflag(map[j].name,empty,flag,params,empty,empty,empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
void read_map_zone_db(void) {
|
||||
config_t map_zone_db;
|
||||
config_setting_t *zones = NULL;
|
||||
/* TODO: #ifndef required for re/pre-re */
|
||||
#ifdef RENEWAL
|
||||
const char *config_filename = "db/re/map_zone_db.txt"; // FIXME hardcoded name
|
||||
#else
|
||||
const char *config_filename = "db/pre-re/map_zone_db.txt"; // FIXME hardcoded name
|
||||
#endif
|
||||
if (conf_read_file(&map_zone_db, config_filename))
|
||||
return;
|
||||
|
||||
zones = config_lookup(&map_zone_db, "zones");
|
||||
|
||||
if (zones != NULL) {
|
||||
struct map_zone_data *zone;
|
||||
struct item_data *data;
|
||||
config_setting_t *zone_e;
|
||||
config_setting_t *skills;
|
||||
config_setting_t *items;
|
||||
config_setting_t *mapflags;
|
||||
const char *name;
|
||||
const char *zonename;
|
||||
int i,h;
|
||||
int zone_count = 0, disabled_skills_count = 0, disabled_items_count = 0, mapflags_count = 0;
|
||||
|
||||
zone_count = config_setting_length(zones);
|
||||
for (i = 0; i < zone_count; ++i) {
|
||||
bool is_all = false;
|
||||
|
||||
zone_e = config_setting_get_elem(zones, i);
|
||||
|
||||
if (!config_setting_lookup_string(zone_e, "name", &zonename)) {
|
||||
ShowError("map_zone_db: missing zone name, skipping... (%s:%d)\n",
|
||||
config_setting_source_file(zone_e), config_setting_source_line(zone_e));
|
||||
config_setting_remove_elem(zones,i);/* remove from the tree */
|
||||
--zone_count;
|
||||
--i;
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strdb_exists(zone_db, zonename) ) {
|
||||
ShowError("map_zone_db: duplicate zone name '%s', skipping...\n",zonename);
|
||||
config_setting_remove_elem(zones,i);/* remove from the tree */
|
||||
--zone_count;
|
||||
--i;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* is this the global template? */
|
||||
if( strncmpi(zonename,MAP_ZONE_ALL_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) {
|
||||
zone = &map_zone_all;
|
||||
is_all = true;
|
||||
} else {
|
||||
CREATE( zone, struct map_zone_data, 1 );
|
||||
zone->disabled_skills_count = 0;
|
||||
zone->disabled_items_count = 0;
|
||||
}
|
||||
safestrncpy(zone->name, zonename, MAP_ZONE_NAME_LENGTH);
|
||||
|
||||
if( (skills = config_setting_get_member(zone_e, "disabled_skills")) != NULL ) {
|
||||
disabled_skills_count = config_setting_length(skills);
|
||||
/* validate */
|
||||
for(h = 0; h < config_setting_length(skills); h++) {
|
||||
config_setting_t *skill = config_setting_get_elem(skills, h);
|
||||
name = config_setting_name(skill);
|
||||
if( !strdb_exists(skilldb_name2id,name) ) {
|
||||
ShowError("map_zone_db: unknown skill (%s) in disabled_skills for zone '%s', skipping skill...\n",name,zone->name);
|
||||
config_setting_remove_elem(skills,h);
|
||||
--disabled_skills_count;
|
||||
--h;
|
||||
continue;
|
||||
}
|
||||
if( !config_setting_get_bool(skill) )/* we dont remove it from the three due to inheritance */
|
||||
--disabled_skills_count;
|
||||
}
|
||||
/* all ok, process */
|
||||
CREATE( zone->disabled_skills, int, disabled_skills_count );
|
||||
for(h = 0; h < disabled_skills_count; h++) {
|
||||
config_setting_t *skill = config_setting_get_elem(skills, h);
|
||||
|
||||
name = config_setting_name(skill);
|
||||
|
||||
if( config_setting_get_bool(skill) )/* only add if enabled */
|
||||
zone->disabled_skills[h] = strdb_iget(skilldb_name2id, name);
|
||||
|
||||
}
|
||||
zone->disabled_skills_count = disabled_skills_count;
|
||||
}
|
||||
|
||||
if( (items = config_setting_get_member(zone_e, "disabled_items")) != NULL ) {
|
||||
disabled_items_count = config_setting_length(items);
|
||||
/* validate */
|
||||
for(h = 0; h < config_setting_length(items); h++) {
|
||||
config_setting_t *item = config_setting_get_elem(items, h);
|
||||
name = config_setting_name(item);
|
||||
data = itemdb_searchname(name);
|
||||
if( data == NULL ) {
|
||||
ShowError("map_zone_db: unknown item (%s) in disabled_items for zone '%s', skipping item...\n",name,zone->name);
|
||||
config_setting_remove_elem(items,h);
|
||||
--disabled_items_count;
|
||||
--h;
|
||||
continue;
|
||||
}
|
||||
if( !config_setting_get_bool(item) )/* we dont remove it from the three due to inheritance */
|
||||
--disabled_items_count;
|
||||
}
|
||||
/* all ok, process */
|
||||
CREATE( zone->disabled_items, int, disabled_items_count );
|
||||
for(h = 0; h < disabled_items_count; h++) {
|
||||
config_setting_t *item = config_setting_get_elem(items, h);
|
||||
|
||||
if( config_setting_get_bool(item) ) { /* only add if enabled */
|
||||
name = config_setting_name(item);
|
||||
data = itemdb_searchname(name);
|
||||
zone->disabled_items[h] = data->nameid;
|
||||
}
|
||||
|
||||
}
|
||||
zone->disabled_items_count = disabled_items_count;
|
||||
}
|
||||
|
||||
if( (mapflags = config_setting_get_member(zone_e, "mapflags")) != NULL ) {
|
||||
mapflags_count = config_setting_length(mapflags);
|
||||
/* mapflags are not validated here, so we save all anyway */
|
||||
CREATE( zone->mapflags, char *, mapflags_count );
|
||||
for(h = 0; h < mapflags_count; h++) {
|
||||
CREATE( zone->mapflags[h], char, MAP_ZONE_MAPFLAG_LENGTH );
|
||||
|
||||
name = config_setting_get_string_elem(mapflags, h);
|
||||
|
||||
safestrncpy(zone->mapflags[h], name, MAP_ZONE_MAPFLAG_LENGTH);
|
||||
|
||||
}
|
||||
zone->mapflags_count = mapflags_count;
|
||||
}
|
||||
|
||||
|
||||
if( !is_all ) /* global template doesn't go into db -- since it isn't a alloc'd piece of data */
|
||||
strdb_put(zone_db, zonename, zone);
|
||||
|
||||
}
|
||||
|
||||
/* process inheritance, aka loop through the whole thing again :P */
|
||||
for (i = 0; i < zone_count; ++i) {
|
||||
config_setting_t *inherit_tree = NULL;
|
||||
|
||||
zone_e = config_setting_get_elem(zones, i);
|
||||
|
||||
if( (inherit_tree = config_setting_get_member(zone_e, "inherit")) != NULL ) {
|
||||
int inherit_count = config_setting_length(inherit_tree);
|
||||
for(h = 0; h < inherit_count; h++) {
|
||||
struct map_zone_data *izone; /* inherit zone */
|
||||
int disabled_skills_count_i = 0; /* disabled skill count from inherit zone */
|
||||
int disabled_items_count_i = 0; /* disabled item count from inherit zone */
|
||||
int mapflags_count_i = 0; /* mapflag count from inherit zone */
|
||||
int j;
|
||||
|
||||
name = config_setting_get_string_elem(inherit_tree, h);
|
||||
config_setting_lookup_string(zone_e, "name", &zonename);/* will succeed for we validated it earlier */
|
||||
|
||||
if( !(izone = strdb_get(zone_db, name)) ) {
|
||||
ShowError("map_zone_db: Unknown zone '%s' being inherit by zone '%s', skipping...\n",name,zonename);
|
||||
continue;
|
||||
}
|
||||
|
||||
zone = strdb_get(zone_db, zonename);/* will succeed for we just put it in here */
|
||||
|
||||
disabled_skills_count_i = izone->disabled_skills_count;
|
||||
disabled_items_count_i = izone->disabled_items_count;
|
||||
mapflags_count_i = izone->mapflags_count;
|
||||
|
||||
/* process everything to override, paying attention to config_setting_get_bool */
|
||||
if( (skills = config_setting_get_member(zone_e, "disabled_skills")) != NULL ) {
|
||||
disabled_skills_count = config_setting_length(skills);
|
||||
for(j = 0; j < disabled_skills_count_i; j++) {
|
||||
int k;
|
||||
for(k = 0; k < disabled_skills_count; k++) {
|
||||
config_setting_t *skill = config_setting_get_elem(skills, k);
|
||||
if( strdb_iget(skilldb_name2id, config_setting_name(skill)) == izone->disabled_skills[j] ) {
|
||||
if( config_setting_get_bool(skill) )
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( k == disabled_skills_count ) {/* we didn't find it */
|
||||
RECREATE( zone->disabled_skills, int, ++zone->disabled_skills_count );
|
||||
zone->disabled_skills[zone->disabled_skills_count-1] = izone->disabled_skills[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( (items = config_setting_get_member(zone_e, "disabled_items")) != NULL ) {
|
||||
disabled_items_count = config_setting_length(items);
|
||||
for(j = 0; j < disabled_items_count_i; j++) {
|
||||
int k;
|
||||
for(k = 0; k < disabled_items_count; k++) {
|
||||
config_setting_t *item = config_setting_get_elem(items, k);
|
||||
|
||||
name = config_setting_name(item);
|
||||
data = itemdb_searchname(name);
|
||||
|
||||
if( data->nameid == izone->disabled_items[j] ) {
|
||||
if( config_setting_get_bool(item) )
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( k == disabled_items_count ) {/* we didn't find it */
|
||||
RECREATE( zone->disabled_items, int, ++zone->disabled_items_count );
|
||||
zone->disabled_items[zone->disabled_items_count-1] = izone->disabled_items[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( (mapflags = config_setting_get_member(zone_e, "mapflags")) != NULL ) {
|
||||
mapflags_count = config_setting_length(mapflags);
|
||||
for(j = 0; j < mapflags_count_i; j++) {
|
||||
int k;
|
||||
for(k = 0; k < mapflags_count; k++) {
|
||||
name = config_setting_get_string_elem(mapflags, k);
|
||||
|
||||
if( strcmpi(name,izone->mapflags[j]) == 0 ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( k == mapflags_count ) {/* we didn't find it */
|
||||
RECREATE( zone->mapflags, char*, ++zone->mapflags_count );
|
||||
CREATE( zone->mapflags[zone->mapflags_count-1], char, MAP_ZONE_MAPFLAG_LENGTH );
|
||||
safestrncpy(zone->mapflags[zone->mapflags_count-1], izone->mapflags[j], MAP_ZONE_MAPFLAG_LENGTH);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' zones in '"CL_WHITE"%s"CL_RESET"'.\n", zone_count, config_filename);
|
||||
/* not supposed to go in here but in skill_final whatever */
|
||||
config_destroy(&map_zone_db);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DBApply
|
||||
|
|
@ -3632,7 +3950,7 @@ void do_final(void)
|
|||
id_db->foreach(id_db,cleanup_db_sub);
|
||||
chrif_char_reset_offline();
|
||||
chrif_flush_fifo();
|
||||
|
||||
|
||||
do_final_atcommand();
|
||||
battle->final();
|
||||
do_final_chrif();
|
||||
|
|
@ -3933,7 +4251,9 @@ int do_init(int argc, char *argv[])
|
|||
regen_db = idb_alloc(DB_OPT_BASE); // efficient status_natural_heal processing
|
||||
|
||||
iwall_db = strdb_alloc(DB_OPT_RELEASE_DATA,2*NAME_LENGTH+2+1); // [Zephyrus] Invisible Walls
|
||||
zone_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, MAP_ZONE_NAME_LENGTH);
|
||||
|
||||
|
||||
map_sql_init();
|
||||
if (log_config.sql_logs)
|
||||
log_sql_init();
|
||||
|
|
@ -3957,6 +4277,7 @@ int do_init(int argc, char *argv[])
|
|||
do_init_script();
|
||||
do_init_itemdb();
|
||||
skill->init();
|
||||
read_map_zone_db();/* read after item and skill initalization */
|
||||
do_init_mob();
|
||||
do_init_pc();
|
||||
do_init_status();
|
||||
|
|
|
|||
|
|
@ -11,9 +11,6 @@
|
|||
#include "../common/mapindex.h"
|
||||
#include "../common/db.h"
|
||||
|
||||
/**
|
||||
* [rAthena.org]
|
||||
**/
|
||||
#include "../config/core.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
|
|
@ -21,8 +18,7 @@
|
|||
struct npc_data;
|
||||
struct item_data;
|
||||
|
||||
enum E_MAPSERVER_ST
|
||||
{
|
||||
enum E_MAPSERVER_ST {
|
||||
MAPSERVER_ST_RUNNING = CORE_ST_LAST,
|
||||
MAPSERVER_ST_SHUTDOWN,
|
||||
MAPSERVER_ST_LAST
|
||||
|
|
@ -501,6 +497,28 @@ struct mapflag_skill_adjust {
|
|||
unsigned short modifier;
|
||||
};
|
||||
|
||||
#define MAP_ZONE_NAME_LENGTH 30
|
||||
#define MAP_ZONE_ALL_NAME "Normal"
|
||||
#define MAP_ZONE_PVP_NAME "PvP"
|
||||
#define MAP_ZONE_GVG_NAME "GvG"
|
||||
#define MAP_ZONE_BG_NAME "Battlegrounds"
|
||||
#define MAP_ZONE_MAPFLAG_LENGTH 50
|
||||
DBMap *zone_db;/* string => struct map_zone_data */
|
||||
struct map_zone_data {
|
||||
char name[MAP_ZONE_NAME_LENGTH];/* 20'd */
|
||||
int *disabled_skills;
|
||||
int disabled_skills_count;
|
||||
int *disabled_items;
|
||||
int disabled_items_count;
|
||||
char **mapflags;
|
||||
int mapflags_count;
|
||||
};
|
||||
void map_zone_init(void);
|
||||
void map_zone_apply(int m, struct map_zone_data *zone,char* w1, const char* start, const char* buffer, const char* filepath);
|
||||
|
||||
struct map_zone_data map_zone_all;/* used as a base on all maps */
|
||||
|
||||
|
||||
struct map_data {
|
||||
char name[MAP_NAME_LENGTH];
|
||||
uint16 index; // The map index used by the mapindex* functions.
|
||||
|
|
@ -559,7 +577,6 @@ struct map_data {
|
|||
unsigned nomobloot : 1; // [Lorky]
|
||||
unsigned nomvploot : 1; // [Lorky]
|
||||
unsigned nightenabled :1; //For night display. [Skotlex]
|
||||
unsigned restricted : 1; // [Komurka]
|
||||
unsigned nodrop : 1;
|
||||
unsigned novending : 1;
|
||||
unsigned loadevent : 1;
|
||||
|
|
@ -579,7 +596,6 @@ struct map_data {
|
|||
|
||||
struct spawn_data *moblist[MAX_MOB_LIST_PER_MAP]; // [Wizputer]
|
||||
int mob_delete_timer; // [Skotlex]
|
||||
int zone; // zone number (for item/skill restrictions)
|
||||
int jexp; // map experience multiplicator
|
||||
int bexp; // map experience multiplicator
|
||||
int nocommand; //Blocks @/# commands for non-gms. [Skotlex]
|
||||
|
|
@ -600,6 +616,9 @@ struct map_data {
|
|||
/* adjust_skill_damage mapflag */
|
||||
struct mapflag_skill_adjust **skills;
|
||||
unsigned short skill_count;
|
||||
|
||||
/* Hercules nocast db overhaul */
|
||||
struct map_zone_data *zone;
|
||||
};
|
||||
|
||||
/// Stores information about a remote map (for multi-mapserver setups).
|
||||
|
|
|
|||
|
|
@ -3389,8 +3389,7 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons
|
|||
for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) {
|
||||
skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].id;
|
||||
if (!skill_id || sd->status.skill[skill_id].lv < 1 ||
|
||||
(skill->get_inf2(skill_id)&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL)) ||
|
||||
skill->get_nocast(skill_id)&16
|
||||
(skill->get_inf2(skill_id)&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL))
|
||||
)
|
||||
continue;
|
||||
//Normal aggressive mob, disable skills that cannot help them fight
|
||||
|
|
|
|||
|
|
@ -3157,14 +3157,12 @@ static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const c
|
|||
|
||||
return strchr(start,'\n');// continue
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Set or disable mapflag on map
|
||||
* eg : bat_c01 mapflag battleground 2
|
||||
* also chking if mapflag conflict with another
|
||||
*------------------------------------------*/
|
||||
static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
|
||||
{
|
||||
const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath) {
|
||||
int16 m;
|
||||
char mapname[32];
|
||||
int state = 1;
|
||||
|
|
@ -3231,19 +3229,21 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
|
|||
map[m].flag.nozenypenalty=state;
|
||||
}
|
||||
else if (!strcmpi(w3,"pvp")) {
|
||||
struct map_zone_data *zone;
|
||||
map[m].flag.pvp = state;
|
||||
if( state && (map[m].flag.gvg || map[m].flag.gvg_dungeon || map[m].flag.gvg_castle) )
|
||||
{
|
||||
if( state && (map[m].flag.gvg || map[m].flag.gvg_dungeon || map[m].flag.gvg_castle) ) {
|
||||
map[m].flag.gvg = 0;
|
||||
map[m].flag.gvg_dungeon = 0;
|
||||
map[m].flag.gvg_castle = 0;
|
||||
ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing GvG flags from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
|
||||
}
|
||||
if( state && map[m].flag.battleground )
|
||||
{
|
||||
if( state && map[m].flag.battleground ) {
|
||||
map[m].flag.battleground = 0;
|
||||
ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
|
||||
}
|
||||
if( (zone = strdb_get(zone_db, MAP_ZONE_GVG_NAME)) && map[m].zone != zone ) {
|
||||
map_zone_apply(m,zone,w1,start,buffer,filepath);
|
||||
}
|
||||
}
|
||||
else if (!strcmpi(w3,"pvp_noparty"))
|
||||
map[m].flag.pvp_noparty=state;
|
||||
|
|
@ -3283,17 +3283,20 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
|
|||
else if (!strcmpi(w3,"pvp_nocalcrank"))
|
||||
map[m].flag.pvp_nocalcrank=state;
|
||||
else if (!strcmpi(w3,"gvg")) {
|
||||
struct map_zone_data *zone;
|
||||
|
||||
map[m].flag.gvg = state;
|
||||
if( state && map[m].flag.pvp )
|
||||
{
|
||||
if( state && map[m].flag.pvp ) {
|
||||
map[m].flag.pvp = 0;
|
||||
ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
|
||||
}
|
||||
if( state && map[m].flag.battleground )
|
||||
{
|
||||
if( state && map[m].flag.battleground ) {
|
||||
map[m].flag.battleground = 0;
|
||||
ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing BattleGround flag from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
|
||||
}
|
||||
if( (zone = strdb_get(zone_db, MAP_ZONE_GVG_NAME)) && map[m].zone != zone ) {
|
||||
map_zone_apply(m,zone,w1,start,buffer,filepath);
|
||||
}
|
||||
}
|
||||
else if (!strcmpi(w3,"gvg_noparty"))
|
||||
map[m].flag.gvg_noparty=state;
|
||||
|
|
@ -3306,28 +3309,29 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
|
|||
if (state) map[m].flag.pvp=0;
|
||||
}
|
||||
else if (!strcmpi(w3,"battleground")) {
|
||||
if( state )
|
||||
{
|
||||
struct map_zone_data *zone;
|
||||
if( state ) {
|
||||
if( sscanf(w4, "%d", &state) == 1 )
|
||||
map[m].flag.battleground = state;
|
||||
else
|
||||
map[m].flag.battleground = 1; // Default value
|
||||
}
|
||||
else
|
||||
} else
|
||||
map[m].flag.battleground = 0;
|
||||
|
||||
if( map[m].flag.battleground && map[m].flag.pvp )
|
||||
{
|
||||
if( map[m].flag.battleground && map[m].flag.pvp ) {
|
||||
map[m].flag.pvp = 0;
|
||||
ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing PvP flag from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
|
||||
}
|
||||
if( map[m].flag.battleground && (map[m].flag.gvg || map[m].flag.gvg_dungeon || map[m].flag.gvg_castle) )
|
||||
{
|
||||
if( map[m].flag.battleground && (map[m].flag.gvg || map[m].flag.gvg_dungeon || map[m].flag.gvg_castle) ) {
|
||||
map[m].flag.gvg = 0;
|
||||
map[m].flag.gvg_dungeon = 0;
|
||||
map[m].flag.gvg_castle = 0;
|
||||
ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing GvG flag from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
|
||||
}
|
||||
|
||||
if( (zone = strdb_get(zone_db, MAP_ZONE_BG_NAME)) && map[m].zone != zone ) {
|
||||
map_zone_apply(m,zone,w1,start,buffer,filepath);
|
||||
}
|
||||
}
|
||||
else if (!strcmpi(w3,"noexppenalty"))
|
||||
map[m].flag.noexppenalty=state;
|
||||
|
|
@ -3391,16 +3395,6 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
|
|||
} else
|
||||
map[m].nocommand=0;
|
||||
}
|
||||
else if (!strcmpi(w3,"restricted")) {
|
||||
if (state) {
|
||||
map[m].flag.restricted=1;
|
||||
sscanf(w4, "%d", &state);
|
||||
map[m].zone |= 1<<(state+1);
|
||||
} else {
|
||||
map[m].flag.restricted=0;
|
||||
map[m].zone = 0;
|
||||
}
|
||||
}
|
||||
else if (!strcmpi(w3,"jexp")) {
|
||||
map[m].jexp = (state) ? atoi(w4) : 100;
|
||||
if( map[m].jexp < 0 ) map[m].jexp = 100;
|
||||
|
|
@ -3459,6 +3453,14 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
|
|||
map[m].skills[idx]->skill_id = (unsigned short)skill_id;
|
||||
map[m].skills[idx]->modifier = (unsigned short)atoi(mod);
|
||||
}
|
||||
} else if (!strcmpi(w3,"zone")) {
|
||||
struct map_zone_data *zone;
|
||||
|
||||
if( !(zone = strdb_get(zone_db, w4)) ) {
|
||||
ShowWarning("npc_parse_mapflag: Invalid zone '%s'! removing flag from %s (file '%s', line '%d').\n", w4, map[m].name, filepath, strline(buffer,start-buffer));
|
||||
} else if( map[m].zone != zone ) { /* we do not override :P would mess everything */
|
||||
map_zone_apply(m,zone,w1,start,buffer,filepath);
|
||||
}
|
||||
} else
|
||||
ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer));
|
||||
|
||||
|
|
@ -3792,12 +3794,14 @@ int npc_reload(void) {
|
|||
"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Cached\n"
|
||||
"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Not Cached\n",
|
||||
npc_id - npc_new_min, npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob);
|
||||
|
||||
|
||||
do_final_instance();
|
||||
|
||||
for( i = 0; i < ARRAYLENGTH(instance); ++i )
|
||||
instance_init(instance[i].instance_id);
|
||||
|
||||
map_zone_init();
|
||||
|
||||
//Re-read the NPC Script Events cache.
|
||||
npc_read_event_script();
|
||||
|
||||
|
|
@ -3926,6 +3930,8 @@ int do_init_npc(void)
|
|||
"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Not Cached\n",
|
||||
npc_id - START_NPC_NUM, npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob);
|
||||
|
||||
map_zone_init();
|
||||
|
||||
// set up the events cache
|
||||
memset(script_event, 0, sizeof(script_event));
|
||||
npc_read_event_script();
|
||||
|
|
|
|||
|
|
@ -124,6 +124,7 @@ int npc_buysellsel(struct map_session_data* sd, int id, int type);
|
|||
int npc_buylist(struct map_session_data* sd,int n, unsigned short* item_list);
|
||||
int npc_selllist(struct map_session_data* sd, int n, unsigned short* item_list);
|
||||
void npc_parse_mob2(struct spawn_data* mob);
|
||||
const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath);
|
||||
struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y);
|
||||
int npc_globalmessage(const char* name,const char* mes);
|
||||
|
||||
|
|
|
|||
23
src/map/pc.c
23
src/map/pc.c
|
|
@ -4227,12 +4227,13 @@ int pc_isUseitem(struct map_session_data *sd,int n)
|
|||
int pc_useitem(struct map_session_data *sd,int n)
|
||||
{
|
||||
unsigned int tick = gettick();
|
||||
int amount, nameid;
|
||||
int amount, nameid, i;
|
||||
struct script_code *script;
|
||||
|
||||
nullpo_ret(sd);
|
||||
|
||||
if( sd->npc_id ){
|
||||
/* TODO: add to clif_messages enum */
|
||||
#ifdef RENEWAL
|
||||
clif_msg(sd, 0x783); // TODO look for the client date that has this message.
|
||||
#endif
|
||||
|
|
@ -4320,19 +4321,15 @@ int pc_useitem(struct map_session_data *sd,int n)
|
|||
}
|
||||
}
|
||||
|
||||
/* on restricted maps the item is consumed but the effect is not used */
|
||||
if (
|
||||
(!map_flag_vs(sd->bl.m) && sd->inventory_data[n]->flag.no_equip&1) || // Normal
|
||||
(map[sd->bl.m].flag.pvp && sd->inventory_data[n]->flag.no_equip&2) || // PVP
|
||||
(map_flag_gvg(sd->bl.m) && sd->inventory_data[n]->flag.no_equip&4) || // GVG
|
||||
(map[sd->bl.m].flag.battleground && sd->inventory_data[n]->flag.no_equip&8) || // Battleground
|
||||
(map[sd->bl.m].flag.restricted && sd->inventory_data[n]->flag.no_equip&(8*map[sd->bl.m].zone)) // Zone restriction
|
||||
) {
|
||||
if( battle_config.item_restricted_consumption_type ) {
|
||||
clif_useitemack(sd,n,sd->status.inventory[n].amount-1,true);
|
||||
pc_delitem(sd,n,1,1,0,LOG_TYPE_CONSUME);
|
||||
/* on restricted maps the item is consumed but the effect is not used */
|
||||
for(i = 0; i < map[sd->bl.m].zone->disabled_items_count; i++) {
|
||||
if( map[sd->bl.m].zone->disabled_items[i] == nameid ) {
|
||||
if( battle_config.item_restricted_consumption_type ) {
|
||||
clif_useitemack(sd,n,sd->status.inventory[n].amount-1,true);
|
||||
pc_delitem(sd,n,1,1,0,LOG_TYPE_CONSUME);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 0;/* regardless, effect is not run */
|
||||
}
|
||||
|
||||
sd->itemid = sd->status.inventory[n].nameid;
|
||||
|
|
|
|||
|
|
@ -384,7 +384,7 @@ enum {
|
|||
MF_NORETURN,
|
||||
MF_NOWARPTO,
|
||||
MF_NIGHTMAREDROP,
|
||||
MF_RESTRICTED,
|
||||
MF_ZONE,
|
||||
MF_NOCOMMAND,
|
||||
MF_NODROP,
|
||||
MF_JEXP,
|
||||
|
|
@ -9558,8 +9558,8 @@ static int buildin_announce_sub(struct block_list *bl, va_list ap)
|
|||
return 0;
|
||||
}
|
||||
/* Runs item effect on attached character.
|
||||
* consumeitem <item id>;
|
||||
* consumeitem "<item name>"; */
|
||||
* itemeffect <item id>;
|
||||
* itemeffect "<item name>"; */
|
||||
BUILDIN_FUNC(itemeffect) {
|
||||
TBL_NPC *nd;
|
||||
TBL_PC *sd;
|
||||
|
|
@ -9579,14 +9579,14 @@ BUILDIN_FUNC(itemeffect) {
|
|||
ShowError( "buildin_itemeffect: Nonexistant item %s requested.\n", name );
|
||||
return 1;
|
||||
}
|
||||
}else if( data_isint( data ) ){
|
||||
} else if( data_isint( data ) ){
|
||||
int nameid = conv_num( st, data );
|
||||
|
||||
if( ( item_data = itemdb_exists( nameid ) ) == NULL ){
|
||||
ShowError("buildin_itemeffect: Nonexistant item %d requested.\n", nameid );
|
||||
return 1;
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
ShowError("buildin_itemeffect: invalid data type for argument #1 (%d).", data->type );
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -10707,10 +10707,6 @@ BUILDIN_FUNC(getmapflag)
|
|||
case MF_FOG: script_pushint(st,map[m].flag.fog); break;
|
||||
case MF_SAKURA: script_pushint(st,map[m].flag.sakura); break;
|
||||
case MF_LEAVES: script_pushint(st,map[m].flag.leaves); break;
|
||||
/**
|
||||
* No longer available, keeping here just in case it's back someday. [Ind]
|
||||
**/
|
||||
//case MF_RAIN: script_pushint(st,map[m].flag.rain); break;
|
||||
case MF_NOGO: script_pushint(st,map[m].flag.nogo); break;
|
||||
case MF_CLOUDS: script_pushint(st,map[m].flag.clouds); break;
|
||||
case MF_CLOUDS2: script_pushint(st,map[m].flag.clouds2); break;
|
||||
|
|
@ -10725,7 +10721,6 @@ BUILDIN_FUNC(getmapflag)
|
|||
case MF_NORETURN: script_pushint(st,map[m].flag.noreturn); break;
|
||||
case MF_NOWARPTO: script_pushint(st,map[m].flag.nowarpto); break;
|
||||
case MF_NIGHTMAREDROP: script_pushint(st,map[m].flag.pvp_nightmaredrop); break;
|
||||
case MF_RESTRICTED: script_pushint(st,map[m].flag.restricted); break;
|
||||
case MF_NOCOMMAND: script_pushint(st,map[m].nocommand); break;
|
||||
case MF_NODROP: script_pushint(st,map[m].flag.nodrop); break;
|
||||
case MF_JEXP: script_pushint(st,map[m].jexp); break;
|
||||
|
|
@ -10764,15 +10759,27 @@ static int script_mapflag_pvp_sub(struct block_list *bl,va_list ap) {
|
|||
BUILDIN_FUNC(setmapflag)
|
||||
{
|
||||
int16 m,i;
|
||||
const char *str;
|
||||
const char *str, *val2;
|
||||
struct script_data* data;
|
||||
int val=0;
|
||||
|
||||
str=script_getstr(st,2);
|
||||
i=script_getnum(st,3);
|
||||
|
||||
i = script_getnum(st, 3);
|
||||
|
||||
if(script_hasdata(st,4)){
|
||||
val=script_getnum(st,4);
|
||||
data = script_getdata(st,4);
|
||||
get_val(st, data);
|
||||
|
||||
|
||||
if( data_isstring(data) )
|
||||
val2 = script_getstr(st, 4);
|
||||
else
|
||||
val = script_getnum(st, 4);
|
||||
|
||||
}
|
||||
m = map_mapname2mapid(str);
|
||||
|
||||
if(m >= 0) {
|
||||
switch(i) {
|
||||
case MF_NOMEMO: map[m].flag.nomemo = 1; break;
|
||||
|
|
@ -10821,9 +10828,13 @@ BUILDIN_FUNC(setmapflag)
|
|||
case MF_NORETURN: map[m].flag.noreturn = 1; break;
|
||||
case MF_NOWARPTO: map[m].flag.nowarpto = 1; break;
|
||||
case MF_NIGHTMAREDROP: map[m].flag.pvp_nightmaredrop = 1; break;
|
||||
case MF_RESTRICTED:
|
||||
map[m].zone |= 1<<(val+1);
|
||||
map[m].flag.restricted=1;
|
||||
case MF_ZONE: {
|
||||
char zone[6] = "zone\0";
|
||||
char empty[1] = "\0";
|
||||
char params[MAP_ZONE_MAPFLAG_LENGTH];
|
||||
memcpy(params, val2, MAP_ZONE_MAPFLAG_LENGTH);
|
||||
npc_parse_mapflag(map[m].name, empty, zone, params, empty, empty, empty);
|
||||
}
|
||||
break;
|
||||
case MF_NOCOMMAND: map[m].nocommand = (val <= 0) ? 100 : val; break;
|
||||
case MF_NODROP: map[m].flag.nodrop = 1; break;
|
||||
|
|
@ -10887,10 +10898,6 @@ BUILDIN_FUNC(removemapflag)
|
|||
case MF_FOG: map[m].flag.fog = 0; break;
|
||||
case MF_SAKURA: map[m].flag.sakura = 0; break;
|
||||
case MF_LEAVES: map[m].flag.leaves = 0; break;
|
||||
/**
|
||||
* No longer available, keeping here just in case it's back someday. [Ind]
|
||||
**/
|
||||
//case MF_RAIN: map[m].flag.rain = 0; break;
|
||||
case MF_NOGO: map[m].flag.nogo = 0; break;
|
||||
case MF_CLOUDS: map[m].flag.clouds = 0; break;
|
||||
case MF_CLOUDS2: map[m].flag.clouds2 = 0; break;
|
||||
|
|
@ -10905,11 +10912,8 @@ BUILDIN_FUNC(removemapflag)
|
|||
case MF_NORETURN: map[m].flag.noreturn = 0; break;
|
||||
case MF_NOWARPTO: map[m].flag.nowarpto = 0; break;
|
||||
case MF_NIGHTMAREDROP: map[m].flag.pvp_nightmaredrop = 0; break;
|
||||
case MF_RESTRICTED:
|
||||
map[m].zone ^= 1<<(val+1);
|
||||
if (map[m].zone == 0){
|
||||
map[m].flag.restricted=0;
|
||||
}
|
||||
case MF_ZONE:/* reset zone state, mapflags cant be removed however */
|
||||
map[m].zone = &map_zone_all;
|
||||
break;
|
||||
case MF_NOCOMMAND: map[m].nocommand = 0; break;
|
||||
case MF_NODROP: map[m].flag.nodrop = 0; break;
|
||||
|
|
@ -17566,7 +17570,7 @@ struct script_function buildin_func[] = {
|
|||
BUILDIN_DEF(isloggedin,"i?"),
|
||||
BUILDIN_DEF(setmapflagnosave,"ssii"),
|
||||
BUILDIN_DEF(getmapflag,"si"),
|
||||
BUILDIN_DEF(setmapflag,"si?"),
|
||||
BUILDIN_DEF(setmapflag,"sv?"),
|
||||
BUILDIN_DEF(removemapflag,"si?"),
|
||||
BUILDIN_DEF(pvpon,"s"),
|
||||
BUILDIN_DEF(pvpoff,"s"),
|
||||
|
|
|
|||
|
|
@ -212,7 +212,6 @@ int skill_get_blewcount( uint16 skill_id ,uint16 skill_lv ) { skill_get (skill_d
|
|||
int skill_get_mhp( uint16 skill_id ,uint16 skill_lv ) { skill_get (skill_db[skill_id].mhp[skill_lv-1], skill_id, skill_lv); }
|
||||
int skill_get_castnodex( uint16 skill_id ,uint16 skill_lv ) { skill_get (skill_db[skill_id].castnodex[skill_lv-1], skill_id, skill_lv); }
|
||||
int skill_get_delaynodex( uint16 skill_id ,uint16 skill_lv ){ skill_get (skill_db[skill_id].delaynodex[skill_lv-1], skill_id, skill_lv); }
|
||||
int skill_get_nocast ( uint16 skill_id ) { skill_get (skill_db[skill_id].nocast, skill_id, 1); }
|
||||
int skill_get_type( uint16 skill_id ) { skill_get (skill_db[skill_id].skill_type, skill_id, 1); }
|
||||
int skill_get_unit_id ( uint16 skill_id, int flag ){ skill_get (skill_db[skill_id].unit_id[flag], skill_id, 1); }
|
||||
int skill_get_unit_interval( uint16 skill_id ) { skill_get (skill_db[skill_id].unit_interval, skill_id, 1); }
|
||||
|
|
@ -478,6 +477,7 @@ int can_copy (struct map_session_data *sd, uint16 skill_id, struct block_list* b
|
|||
int skillnotok (uint16 skill_id, struct map_session_data *sd)
|
||||
{
|
||||
int16 idx,m;
|
||||
int i;
|
||||
nullpo_retr (1, sd);
|
||||
m = sd->bl.m;
|
||||
idx = skill->get_index(skill_id);
|
||||
|
|
@ -501,25 +501,23 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (sd->blockskill[idx] > 0){
|
||||
if (sd->blockskill[idx] > 0) {
|
||||
clif_skill_fail(sd, skill_id, USESKILL_FAIL_SKILLINTERVAL, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* It has been confirmed on a official server (thanks to Yommy) that item-cast skills bypass all the restrictions above
|
||||
* It has been confirmed on a official server (thanks to Yommy) that item-cast skills bypass all the restrictions below
|
||||
* Also, without this check, an exploit where an item casting + healing (or any other kind buff) isn't deleted after used on a restricted map
|
||||
**/
|
||||
if( sd->skillitem == skill_id )
|
||||
return 0;
|
||||
/* TODO: these skill_get_nocast should be cached once instead of looking it up 5 times =_= */
|
||||
// Check skill restrictions [Celest]
|
||||
if( (!map_flag_vs(m) && skill->get_nocast (skill_id) & 1) ||
|
||||
(map[m].flag.pvp && skill->get_nocast (skill_id) & 2) ||
|
||||
(map_flag_gvg(m) && skill->get_nocast (skill_id) & 4) ||
|
||||
(map[m].flag.battleground && skill->get_nocast (skill_id) & 8) ||
|
||||
(map[m].flag.restricted && map[m].zone && skill->get_nocast (skill_id) & (8*map[m].zone)) ){
|
||||
clif_msg(sd, 0x536); // This skill cannot be used within this area
|
||||
|
||||
for(i = 0; i < map[m].zone->disabled_skills_count; i++) {
|
||||
if( skill_id == map[m].zone->disabled_skills[i] ) {
|
||||
clif_msg(sd, SKILL_CANT_USE_AREA); // This skill cannot be used within this area
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if( sd->sc.option&OPTION_MOUNTING )
|
||||
|
|
@ -17476,18 +17474,6 @@ bool skill_parse_row_castnodexdb(char* split[], int columns, int current) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool skill_parse_row_nocastdb(char* split[], int columns, int current) {
|
||||
// skill_id,Flag
|
||||
uint16 skill_id = atoi(split[0]);
|
||||
uint16 idx = skill->get_index(skill_id);
|
||||
if( !idx ) // invalid skill id
|
||||
return false;
|
||||
|
||||
skill_db[idx].nocast |= atoi(split[1]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool skill_parse_row_unitdb(char* split[], int columns, int current) {
|
||||
// ID,unit ID,unit ID 2,layout,range,interval,target,flag
|
||||
uint16 skill_id = atoi(split[0]);
|
||||
|
|
@ -17734,8 +17720,6 @@ void skill_readdb(void) {
|
|||
sv_readdb(db_path, DBPATH"skill_castnodex_db.txt", ',', 2, 3, MAX_SKILL_DB, skill->parse_row_castnodexdb);
|
||||
sv_readdb(db_path, DBPATH"skill_unit_db.txt" , ',', 8, 8, MAX_SKILL_DB, skill->parse_row_unitdb);
|
||||
|
||||
sv_readdb(db_path, DBPATH"skill_nocast_db.txt" , ',', 2, 2, MAX_SKILL_DB, skill->parse_row_nocastdb);
|
||||
|
||||
skill->init_unit_layout();
|
||||
sv_readdb(db_path, "produce_db.txt" , ',', 4, 4+2*MAX_PRODUCE_RESOURCE, MAX_SKILL_PRODUCE_DB, skill->parse_row_producedb);
|
||||
sv_readdb(db_path, "create_arrow_db.txt" , ',', 1+2, 1+2*MAX_ARROW_RESOURCE, MAX_SKILL_ARROW_DB, skill->parse_row_createarrowdb);
|
||||
|
|
@ -17747,7 +17731,6 @@ void skill_readdb(void) {
|
|||
sv_readdb(db_path, "skill_reproduce_db.txt", ',', 1, 1, MAX_SKILL_DB, skill->parse_row_reproducedb);
|
||||
sv_readdb(db_path, "skill_improvise_db.txt" , ',', 2, 2, MAX_SKILL_IMPROVISE_DB, skill->parse_row_improvisedb);
|
||||
sv_readdb(db_path, "skill_changematerial_db.txt" , ',', 4, 4+2*5, MAX_SKILL_PRODUCE_DB, skill->parse_row_changematerialdb);
|
||||
|
||||
}
|
||||
|
||||
void skill_reload (void) {
|
||||
|
|
@ -17791,6 +17774,7 @@ int do_init_skill (void)
|
|||
int do_final_skill(void)
|
||||
{
|
||||
db_destroy(skilldb_name2id);
|
||||
/* TODO: ZONE_DB IS NOT PROPERLY CLEARED */
|
||||
db_destroy(group_db);
|
||||
db_destroy(skillunit_db);
|
||||
db_destroy(skillcd_db);
|
||||
|
|
@ -17834,7 +17818,6 @@ void skill_defaults(void) {
|
|||
skill->get_weapontype = skill_get_weapontype;
|
||||
skill->get_ammotype = skill_get_ammotype;
|
||||
skill->get_ammo_qty = skill_get_ammo_qty;
|
||||
skill->get_nocast = skill_get_nocast;
|
||||
skill->get_unit_id = skill_get_unit_id;
|
||||
skill->get_inf2 = skill_get_inf2;
|
||||
skill->get_castcancel = skill_get_castcancel;
|
||||
|
|
@ -17967,7 +17950,6 @@ void skill_defaults(void) {
|
|||
skill->parse_row_castdb = skill_parse_row_castdb;
|
||||
skill->parse_row_castnodexdb = skill_parse_row_castnodexdb;
|
||||
skill->parse_row_unitdb = skill_parse_row_unitdb;
|
||||
skill->parse_row_nocastdb = skill_parse_row_nocastdb;
|
||||
skill->parse_row_producedb = skill_parse_row_producedb;
|
||||
skill->parse_row_createarrowdb = skill_parse_row_createarrowdb;
|
||||
skill->parse_row_abradb = skill_parse_row_abradb;
|
||||
|
|
|
|||
|
|
@ -1732,7 +1732,6 @@ struct skill_interface {
|
|||
int (*get_weapontype) ( uint16 skill_id );
|
||||
int (*get_ammotype) ( uint16 skill_id );
|
||||
int (*get_ammo_qty) ( uint16 skill_id, uint16 skill_lv );
|
||||
int (*get_nocast) ( uint16 skill_id );
|
||||
int (*get_unit_id) (uint16 skill_id,int flag);
|
||||
int (*get_inf2) ( uint16 skill_id );
|
||||
int (*get_castcancel) ( uint16 skill_id );
|
||||
|
|
@ -1866,7 +1865,6 @@ struct skill_interface {
|
|||
bool (*parse_row_castdb) (char* split[], int columns, int current);
|
||||
bool (*parse_row_castnodexdb) (char* split[], int columns, int current);
|
||||
bool (*parse_row_unitdb) (char* split[], int columns, int current);
|
||||
bool (*parse_row_nocastdb) (char* split[], int columns, int current);
|
||||
bool (*parse_row_producedb) (char* split[], int columns, int current);
|
||||
bool (*parse_row_createarrowdb) (char* split[], int columns, int current);
|
||||
bool (*parse_row_abradb) (char* split[], int columns, int current);
|
||||
|
|
|
|||
|
|
@ -2228,7 +2228,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
|||
const struct status_change *sc = &sd->sc;
|
||||
struct s_skill b_skill[MAX_SKILL]; // previous skill tree
|
||||
int b_weight, b_max_weight, b_cart_weight_max, // previous weight
|
||||
i, index, skill,refinedef=0;
|
||||
i, k, index, skill,refinedef=0;
|
||||
int64 i64;
|
||||
|
||||
if (++calculating > 10) //Too many recursive calls!
|
||||
|
|
@ -2392,19 +2392,14 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
|||
if(!sd->inventory_data[index])
|
||||
continue;
|
||||
|
||||
if(sd->inventory_data[index]->flag.no_equip) { // Items may be equipped, their effects however are nullified.
|
||||
if(map[sd->bl.m].flag.restricted && sd->inventory_data[index]->flag.no_equip&(8*map[sd->bl.m].zone))
|
||||
continue;
|
||||
if(!map_flag_vs(sd->bl.m) && sd->inventory_data[index]->flag.no_equip&1)
|
||||
continue;
|
||||
if(map[sd->bl.m].flag.pvp && sd->inventory_data[index]->flag.no_equip&2)
|
||||
continue;
|
||||
if(map_flag_gvg(sd->bl.m) && sd->inventory_data[index]->flag.no_equip&4)
|
||||
continue;
|
||||
if(map[sd->bl.m].flag.battleground && sd->inventory_data[index]->flag.no_equip&8)
|
||||
continue;
|
||||
for(k = 0; k < map[sd->bl.m].zone->disabled_items_count; k++) {
|
||||
if( map[sd->bl.m].zone->disabled_items[k] == sd->inventory_data[index]->nameid ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( k < map[sd->bl.m].zone->disabled_items_count )
|
||||
continue;
|
||||
|
||||
status->def += sd->inventory_data[index]->def;
|
||||
|
||||
|
|
@ -2540,28 +2535,24 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
|||
data = itemdb_exists(c);
|
||||
if(!data)
|
||||
continue;
|
||||
if(first && data->equip_script)
|
||||
{ //Execute equip-script on login
|
||||
if(first && data->equip_script) {//Execute equip-script on login
|
||||
run_script(data->equip_script,0,sd->bl.id,0);
|
||||
if (!calculating)
|
||||
return 1;
|
||||
}
|
||||
if(!data->script)
|
||||
continue;
|
||||
if(data->flag.no_equip) { //Card restriction checks.
|
||||
if(map[sd->bl.m].flag.restricted && data->flag.no_equip&(8*map[sd->bl.m].zone))
|
||||
continue;
|
||||
if(!map_flag_vs(sd->bl.m) && data->flag.no_equip&1)
|
||||
continue;
|
||||
if(map[sd->bl.m].flag.pvp && data->flag.no_equip&2)
|
||||
continue;
|
||||
if(map_flag_gvg(sd->bl.m) && data->flag.no_equip&4)
|
||||
continue;
|
||||
if(map[sd->bl.m].flag.battleground && data->flag.no_equip&8)
|
||||
continue;
|
||||
|
||||
for(k = 0; k < map[sd->bl.m].zone->disabled_items_count; k++) {
|
||||
if( map[sd->bl.m].zone->disabled_items[k] == sd->inventory_data[index]->nameid ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i == EQI_HAND_L && sd->status.inventory[index].equip == EQP_HAND_L)
|
||||
{ //Left hand status.
|
||||
|
||||
if( k < map[sd->bl.m].zone->disabled_items_count )
|
||||
continue;
|
||||
|
||||
if(i == EQI_HAND_L && sd->status.inventory[index].equip == EQP_HAND_L) { //Left hand status.
|
||||
sd->state.lr_flag = 1;
|
||||
run_script(data->script,0,sd->bl.id,0);
|
||||
sd->state.lr_flag = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue