diff options
-rw-r--r-- | conf/battle/battleground.conf | 15 | ||||
-rw-r--r-- | conf/battle/guild.conf | 15 | ||||
-rw-r--r-- | conf/battle/misc.conf | 10 | ||||
-rw-r--r-- | db/pre-re/map_zone_db.conf | 58 | ||||
-rw-r--r-- | db/re/map_zone_db.conf | 58 | ||||
-rw-r--r-- | src/map/battle.c | 101 | ||||
-rw-r--r-- | src/map/battle.h | 15 | ||||
-rw-r--r-- | src/map/map.c | 52 | ||||
-rw-r--r-- | src/map/map.h | 13 | ||||
-rw-r--r-- | src/map/npc.c | 18 | ||||
-rw-r--r-- | src/map/script.c | 2 |
11 files changed, 215 insertions, 142 deletions
diff --git a/conf/battle/battleground.conf b/conf/battle/battleground.conf index cce6bd84e..b4c0b2fbd 100644 --- a/conf/battle/battleground.conf +++ b/conf/battle/battleground.conf @@ -9,21 +9,6 @@ // assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) //-------------------------------------------------------------- -// Melee damage adjustments (non skills) for Battleground maps (Note 2) -bg_short_attack_damage_rate: 80 - -// Ranged damage adjustments (non skills) for Battleground maps (Note 2) -bg_long_attack_damage_rate: 80 - -// Weapon skills damage adjustments for Battleground maps (Note 2) -bg_weapon_attack_damage_rate: 60 - -// Magic skills damage adjustments for Battleground maps (Note 2) -bg_magic_attack_damage_rate: 60 - -// Misc skills damage adjustments for Battleground maps (Note 2) -bg_misc_attack_damage_rate: 60 - // Flee penalty on BG grounds. // NOTE: It's %, not absolute, so 20 is -20% of your total flee bg_flee_penalty: 20 diff --git a/conf/battle/guild.conf b/conf/battle/guild.conf index 3285ccb75..cc22c327f 100644 --- a/conf/battle/guild.conf +++ b/conf/battle/guild.conf @@ -23,21 +23,6 @@ guild_skill_relog_delay: yes // Damage adjustments for WOE battles against defending Guild monsters (Note 2) castle_defense_rate: 100 -// Melee damage adjustments (non skills) for WoE battles (Guild Vs Guild) (Note 2) -gvg_short_attack_damage_rate: 80 - -// Ranged damage adjustments (non skills) for WoE battles (Guild Vs Guild) (Note 2) -gvg_long_attack_damage_rate: 80 - -// Weapon skills damage adjustments for WoE battles (Guild Vs Guild) (Note 2) -gvg_weapon_attack_damage_rate: 60 - -// Magic skills damage adjustments for WoE battles (Guild Vs Guild) (Note 2) -gvg_magic_attack_damage_rate: 60 - -// Misc skills damage adjustments for WoE battles (Guild Vs Guild) (Note 2) -gvg_misc_attack_damage_rate: 60 - // Flee penalty on gvg grounds. Official value is 20 (Note 2) // NOTE: It's %, not absolute, so 20 is -20% of your total flee gvg_flee_penalty: 20 diff --git a/conf/battle/misc.conf b/conf/battle/misc.conf index 274cdee23..81c763836 100644 --- a/conf/battle/misc.conf +++ b/conf/battle/misc.conf @@ -16,7 +16,7 @@ // Note: If pk_mode is set to 2 instead of 1 (yes), players will receive a // manner penalty of 5 each time they kill another player (see manner_system // config to adjust how this will affect players) -pk_mode: 0 +pk_mode: 1 // Manner/karma system configuration. Specifies how does negative manner // (red no chat bubble) affects players (add as needed): @@ -35,14 +35,6 @@ pk_min_level: 55 // players to let them attack each other. 0 disables said limit. pk_level_range: 0 -// For PK servers. Damage adjustment settings, these follow the same logic -// as their WoE counterparts (see guild.conf) -pk_short_attack_damage_rate: 80 -pk_long_attack_damage_rate: 70 -pk_weapon_attack_damage_rate: 60 -pk_magic_attack_damage_rate: 60 -pk_misc_attack_damage_rate: 60 - // Display skill usage in console? (for debug only) (default: off) (Note 3) skill_log: off diff --git a/db/pre-re/map_zone_db.conf b/db/pre-re/map_zone_db.conf index 5ee8ba0b1..4ea5eebb4 100644 --- a/db/pre-re/map_zone_db.conf +++ b/db/pre-re/map_zone_db.conf @@ -52,6 +52,32 @@ zones: ( } }, { + /* PK Mode zone is only used when server is on pk_mode (battle.conf), + it applies to all pvp maps that don't have their own zone */ + name: "PK Mode" /* changing this name requires MAP_ZONE_PK_NAME to also be changed in src/map/map.h file */ + + disabled_skills: { + + } + + disabled_items: { + + } + + /* PK Mode Damage Reductions */ + /* - weapon_damage_rate -40% */ + /* - magic_damage_rate -40% */ + /* - misc_damage_rate -40% */ + /* - long_damage_rate -30% */ + /* - short_damage_rate -20% */ + mapflags: ( + "weapon_damage_rate 60", + "magic_damage_rate 60", + "misc_damage_rate 60", + "long_damage_rate 70", + "short_damage_rate 80" ) +}, +{ /* 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 */ @@ -82,7 +108,20 @@ zones: ( } /* 5 second duration increase on GvG */ /* knockback disabled */ - mapflags: ( "invincible_time_inc 5000", "noknockback" ) + /* GvG Mode Damage Reductions */ + /* - weapon_damage_rate -40% */ + /* - magic_damage_rate -40% */ + /* - misc_damage_rate -40% */ + /* - long_damage_rate -20% */ + /* - short_damage_rate -20% */ + mapflags: ( "invincible_time_inc 5000", + "noknockback", + "weapon_damage_rate 60", + "magic_damage_rate 60", + "misc_damage_rate 60", + "long_damage_rate 80", + "short_damage_rate 80" ) + }, { /* Battlegrounds zone is applied to all maps with a battlegrounds mapflag */ @@ -126,9 +165,22 @@ zones: ( disabled_items: { Assumptio_5_Scroll: true Pty_Assumptio_Scroll: true - } + } + /* knockback disabled */ - mapflags: ( "noknockback" ) + /* Battlegrounds Damage Reductions */ + /* - weapon_damage_rate -30% */ + /* - magic_damage_rate -30% */ + /* - misc_damage_rate -30% */ + /* - long_damage_rate -25% */ + /* - short_damage_rate -25% */ + mapflags: ( "noknockback", + "weapon_damage_rate 70", + "magic_damage_rate 70", + "misc_damage_rate 70", + "long_damage_rate 75", + "short_damage_rate 75" ) + }, { name: "Aldebaran Turbo Track" diff --git a/db/re/map_zone_db.conf b/db/re/map_zone_db.conf index 5ee8ba0b1..4ea5eebb4 100644 --- a/db/re/map_zone_db.conf +++ b/db/re/map_zone_db.conf @@ -52,6 +52,32 @@ zones: ( } }, { + /* PK Mode zone is only used when server is on pk_mode (battle.conf), + it applies to all pvp maps that don't have their own zone */ + name: "PK Mode" /* changing this name requires MAP_ZONE_PK_NAME to also be changed in src/map/map.h file */ + + disabled_skills: { + + } + + disabled_items: { + + } + + /* PK Mode Damage Reductions */ + /* - weapon_damage_rate -40% */ + /* - magic_damage_rate -40% */ + /* - misc_damage_rate -40% */ + /* - long_damage_rate -30% */ + /* - short_damage_rate -20% */ + mapflags: ( + "weapon_damage_rate 60", + "magic_damage_rate 60", + "misc_damage_rate 60", + "long_damage_rate 70", + "short_damage_rate 80" ) +}, +{ /* 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 */ @@ -82,7 +108,20 @@ zones: ( } /* 5 second duration increase on GvG */ /* knockback disabled */ - mapflags: ( "invincible_time_inc 5000", "noknockback" ) + /* GvG Mode Damage Reductions */ + /* - weapon_damage_rate -40% */ + /* - magic_damage_rate -40% */ + /* - misc_damage_rate -40% */ + /* - long_damage_rate -20% */ + /* - short_damage_rate -20% */ + mapflags: ( "invincible_time_inc 5000", + "noknockback", + "weapon_damage_rate 60", + "magic_damage_rate 60", + "misc_damage_rate 60", + "long_damage_rate 80", + "short_damage_rate 80" ) + }, { /* Battlegrounds zone is applied to all maps with a battlegrounds mapflag */ @@ -126,9 +165,22 @@ zones: ( disabled_items: { Assumptio_5_Scroll: true Pty_Assumptio_Scroll: true - } + } + /* knockback disabled */ - mapflags: ( "noknockback" ) + /* Battlegrounds Damage Reductions */ + /* - weapon_damage_rate -30% */ + /* - magic_damage_rate -30% */ + /* - misc_damage_rate -30% */ + /* - long_damage_rate -25% */ + /* - short_damage_rate -25% */ + mapflags: ( "noknockback", + "weapon_damage_rate 70", + "magic_damage_rate 70", + "misc_damage_rate 70", + "long_damage_rate 75", + "short_damage_rate 75" ) + }, { name: "Aldebaran Turbo Track" diff --git a/src/map/battle.c b/src/map/battle.c index 692750bdb..d2156058d 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1199,23 +1199,31 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag if (hd) hom_addspiritball(hd, 10); } } - - if (battle_config.pk_mode && sd && bl->type == BL_PC && damage && map[bl->m].flag.pvp) - { - if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex] - if (flag&BF_WEAPON) - damage = damage * battle_config.pk_weapon_damage_rate / 100; - if (flag&BF_MAGIC) - damage = damage * battle_config.pk_magic_damage_rate / 100; - if (flag&BF_MISC) - damage = damage * battle_config.pk_misc_damage_rate / 100; - } else { //Normal attacks get reductions based on range. - if (flag & BF_SHORT) - damage = damage * battle_config.pk_short_damage_rate / 100; - if (flag & BF_LONG) - damage = damage * battle_config.pk_long_damage_rate / 100; - } - if(!damage) damage = 1; + /* no data claims these settings affect anything other than players */ + if( damage && sd && bl->type == BL_PC ) { + switch( skill_id ) { + //case PA_PRESSURE: /* pressure also belongs to this list but it doesn't reach this area -- so dont worry about it */ + case HW_GRAVITATION: + case NJ_ZENYNAGE: + case KO_MUCHANAGE: + break; + default: + if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex] + if (flag&BF_WEAPON) + damage = damage * map[bl->m].weapon_damage_rate / 100; + if (flag&BF_MAGIC) + damage = damage * map[bl->m].magic_damage_rate / 100; + if (flag&BF_MISC) + damage = damage * map[bl->m].misc_damage_rate / 100; + } else { //Normal attacks get reductions based on range. + if (flag & BF_SHORT) + damage = damage * map[bl->m].short_damage_rate / 100; + if (flag & BF_LONG) + damage = damage * map[bl->m].long_damage_rate / 100; + } + if(!damage) damage = 1; + break; + } } if(battle_config.skill_min_damage && damage > 0 && damage < div_) @@ -1267,35 +1275,10 @@ int battle_calc_bg_damage(struct block_list *src, struct block_list *bl, int dam if( bl->type == BL_MOB ) { struct mob_data* md = BL_CAST(BL_MOB, bl); - if( map[bl->m].flag.battleground && (md->class_ == MOBID_BLUE_CRYST || md->class_ == MOBID_PINK_CRYST) && flag&BF_SKILL ) + if( flag&BF_SKILL && (md->class_ == MOBID_BLUE_CRYST || md->class_ == MOBID_PINK_CRYST) ) return 0; // Crystal cannot receive skill damage on battlegrounds } - switch( skill_id ) { - case PA_PRESSURE: - case HW_GRAVITATION: - case NJ_ZENYNAGE: - case KO_MUCHANAGE: - break; - default: - if( flag&BF_SKILL ) { //Skills get a different reduction than non-skills. [Skotlex] - if( flag&BF_WEAPON ) - damage = damage * battle_config.bg_weapon_damage_rate / 100; - if( flag&BF_MAGIC ) - damage = damage * battle_config.bg_magic_damage_rate / 100; - if( flag&BF_MISC ) - damage = damage * battle_config.bg_misc_damage_rate / 100; - } else { //Normal attacks get reductions based on range. - if( flag&BF_SHORT ) - damage = damage * battle_config.bg_short_damage_rate / 100; - if( flag&BF_LONG ) - damage = damage * battle_config.bg_long_damage_rate / 100; - } - - if( !damage ) - damage = 1; - } - return damage; } @@ -1335,7 +1318,6 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama } switch (skill_id) { - //Skills with no damage reduction. case PA_PRESSURE: case HW_GRAVITATION: case NJ_ZENYNAGE: @@ -1347,21 +1329,9 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama damage -= damage * (md->guardian_data->castle->defense/100) * battle_config.castle_defense_rate/100; } */ - if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex] - if (flag&BF_WEAPON) - damage = damage * battle_config.gvg_weapon_damage_rate / 100; - if (flag&BF_MAGIC) - damage = damage * battle_config.gvg_magic_damage_rate / 100; - if (flag&BF_MISC) - damage = damage * battle_config.gvg_misc_damage_rate / 100; - } else { //Normal attacks get reductions based on range. - if (flag & BF_SHORT) - damage = damage * battle_config.gvg_short_damage_rate / 100; - if (flag & BF_LONG) - damage = damage * battle_config.gvg_long_damage_rate / 100; - } - if(!damage) damage = 1; + break; } + return damage; } @@ -5665,17 +5635,7 @@ static const struct _battle_data { { "player_cloak_check_type", &battle_config.pc_cloak_check_type, 1, 0, 1|2|4, }, { "monster_cloak_check_type", &battle_config.monster_cloak_check_type, 4, 0, 1|2|4, }, { "sense_type", &battle_config.estimation_type, 1|2, 0, 1|2, }, - { "gvg_short_attack_damage_rate", &battle_config.gvg_short_damage_rate, 80, 0, INT_MAX, }, - { "gvg_long_attack_damage_rate", &battle_config.gvg_long_damage_rate, 80, 0, INT_MAX, }, - { "gvg_weapon_attack_damage_rate", &battle_config.gvg_weapon_damage_rate, 60, 0, INT_MAX, }, - { "gvg_magic_attack_damage_rate", &battle_config.gvg_magic_damage_rate, 60, 0, INT_MAX, }, - { "gvg_misc_attack_damage_rate", &battle_config.gvg_misc_damage_rate, 60, 0, INT_MAX, }, { "gvg_flee_penalty", &battle_config.gvg_flee_penalty, 20, 0, INT_MAX, }, - { "pk_short_attack_damage_rate", &battle_config.pk_short_damage_rate, 80, 0, INT_MAX, }, - { "pk_long_attack_damage_rate", &battle_config.pk_long_damage_rate, 70, 0, INT_MAX, }, - { "pk_weapon_attack_damage_rate", &battle_config.pk_weapon_damage_rate, 60, 0, INT_MAX, }, - { "pk_magic_attack_damage_rate", &battle_config.pk_magic_damage_rate, 60, 0, INT_MAX, }, - { "pk_misc_attack_damage_rate", &battle_config.pk_misc_damage_rate, 60, 0, INT_MAX, }, { "mob_changetarget_byskill", &battle_config.mob_changetarget_byskill, 0, 0, 1, }, { "attack_direction_change", &battle_config.attack_direction_change, BL_ALL, BL_NUL, BL_ALL, }, { "land_skill_limit", &battle_config.land_skill_limit, BL_ALL, BL_NUL, BL_ALL, }, @@ -5867,11 +5827,6 @@ static const struct _battle_data { { "client_limit_unit_lv", &battle_config.client_limit_unit_lv, 0, 0, BL_ALL, }, // BattleGround Settings { "bg_update_interval", &battle_config.bg_update_interval, 1000, 100, INT_MAX, }, - { "bg_short_attack_damage_rate", &battle_config.bg_short_damage_rate, 80, 0, INT_MAX, }, - { "bg_long_attack_damage_rate", &battle_config.bg_long_damage_rate, 80, 0, INT_MAX, }, - { "bg_weapon_attack_damage_rate", &battle_config.bg_weapon_damage_rate, 60, 0, INT_MAX, }, - { "bg_magic_attack_damage_rate", &battle_config.bg_magic_damage_rate, 60, 0, INT_MAX, }, - { "bg_misc_attack_damage_rate", &battle_config.bg_misc_damage_rate, 60, 0, INT_MAX, }, { "bg_flee_penalty", &battle_config.bg_flee_penalty, 20, 0, INT_MAX, }, /** * rAthena diff --git a/src/map/battle.h b/src/map/battle.h index e6f860b5a..cd07e25f9 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -232,17 +232,7 @@ struct Battle_Config { int pc_cloak_check_type; int monster_cloak_check_type; int estimation_type; - int gvg_short_damage_rate; - int gvg_long_damage_rate; - int gvg_weapon_damage_rate; - int gvg_magic_damage_rate; - int gvg_misc_damage_rate; int gvg_flee_penalty; - int pk_short_damage_rate; - int pk_long_damage_rate; - int pk_weapon_damage_rate; - int pk_magic_damage_rate; - int pk_misc_damage_rate; int mob_changetarget_byskill; int attack_direction_change; int land_skill_limit; @@ -439,11 +429,6 @@ struct Battle_Config { // [BattleGround Settings] int bg_update_interval; - int bg_short_damage_rate; - int bg_long_damage_rate; - int bg_weapon_damage_rate; - int bg_magic_damage_rate; - int bg_misc_damage_rate; int bg_flee_penalty; // rAthena diff --git a/src/map/map.c b/src/map/map.c index d6804a150..eb44ea6ac 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -2925,6 +2925,16 @@ void map_zone_db_clear(void) { db_destroy(zone_db);/* will aFree(zone) */ + /* clear the pk zone stuff */ + for(i = 0; i < map_zone_pk.disabled_skills_count; i++) { + aFree(map_zone_pk.disabled_skills[i]); + } + aFree(map_zone_pk.disabled_skills); + aFree(map_zone_pk.disabled_items); + for(i = 0; i < map_zone_pk.mapflags_count; i++) { + aFree(map_zone_pk.mapflags[i]); + } + aFree(map_zone_pk.mapflags); /* clear the main zone stuff */ for(i = 0; i < map_zone_all.disabled_skills_count; i++) { aFree(map_zone_all.disabled_skills[i]); @@ -3015,12 +3025,19 @@ void map_flags_init(void) { map[i].skill_count = 0; // adjustments - if( battle_config.pk_mode ) + 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; + map[i].zone = &map_zone_pk; + } else /* align with 'All' zone */ + map[i].zone = &map_zone_all; map[i].invincible_time_inc = 0; + + map[i].weapon_damage_rate = 100; + map[i].magic_damage_rate = 100; + map[i].misc_damage_rate = 100; + map[i].short_damage_rate = 100; + map[i].long_damage_rate = 100; } } @@ -3601,7 +3618,7 @@ void map_zone_apply(int m, struct map_zone_data *zone,char* w1, const char* star npc_parse_mapflag(w1,empty,flag,params,start,buffer,filepath); } } -/* used on npc load and reload to apply all "Normal" zone */ +/* used on npc load and reload to apply all "Normal" and "PK Mode" zones */ void map_zone_init(void) { struct map_zone_data *zone; char empty[1] = "\0"; @@ -3622,11 +3639,33 @@ void map_zone_init(void) { } } for(j = 0; j < map_num; j++) { - if( map[j].zone == &map_zone_all ) { + if( map[j].zone == zone ) { npc_parse_mapflag(map[j].name,empty,flag,params,empty,empty,empty); } } } + + if( battle_config.pk_mode ) { + zone = &map_zone_pk; + 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 == zone ) { + npc_parse_mapflag(map[j].name,empty,flag,params,empty,empty,empty); + } + } + } + } } enum bl_type map_zone_bl_type(const char *entry) { @@ -3712,6 +3751,9 @@ void read_map_zone_db(void) { if( strncmpi(zonename,MAP_ZONE_ALL_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) { zone = &map_zone_all; is_all = true; + } else if( strncmpi(zonename,MAP_ZONE_PK_NAME,MAP_ZONE_NAME_LENGTH) == 0 ) { + zone = &map_zone_pk; + is_all = true; } else { CREATE( zone, struct map_zone_data, 1 ); zone->disabled_skills_count = 0; diff --git a/src/map/map.h b/src/map/map.h index 964bee736..6f1a51e9f 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -507,6 +507,7 @@ struct map_zone_disabled_skill_entry { #define MAP_ZONE_PVP_NAME "PvP" #define MAP_ZONE_GVG_NAME "GvG" #define MAP_ZONE_BG_NAME "Battlegrounds" +#define MAP_ZONE_PK_NAME "PK Mode" #define MAP_ZONE_MAPFLAG_LENGTH 50 DBMap *zone_db;/* string => struct map_zone_data */ struct map_zone_data { @@ -522,6 +523,7 @@ 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_zone_data map_zone_pk;/* used for (pk_mode) */ struct map_data { @@ -628,6 +630,17 @@ struct map_data { /* invincible_time_inc mapflag */ unsigned int invincible_time_inc; + + /* weapon_damage_rate mapflag */ + unsigned short weapon_damage_rate; + /* magic_damage_rate mapflag */ + unsigned short magic_damage_rate; + /* misc_damage_rate mapflag */ + unsigned short misc_damage_rate; + /* short_damage_rate mapflag */ + unsigned short short_damage_rate; + /* long_damage_rate mapflag */ + unsigned short long_damage_rate; }; /// Stores information about a remote map (for multi-mapserver setups). diff --git a/src/map/npc.c b/src/map/npc.c index 92285118d..abba98293 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -3241,8 +3241,10 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char 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 ) { + if( state && (zone = strdb_get(zone_db, MAP_ZONE_PVP_NAME)) && map[m].zone != zone ) { map_zone_apply(m,zone,w1,start,buffer,filepath); + } else if ( !state ) { + map[m].zone = &map_zone_pk; } } else if (!strcmpi(w3,"pvp_noparty")) @@ -3294,7 +3296,7 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char 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 ) { + if( state && (zone = strdb_get(zone_db, MAP_ZONE_GVG_NAME)) && map[m].zone != zone ) { map_zone_apply(m,zone,w1,start,buffer,filepath); } } @@ -3329,7 +3331,7 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char 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 ) { + if( state && (zone = strdb_get(zone_db, MAP_ZONE_BG_NAME)) && map[m].zone != zone ) { map_zone_apply(m,zone,w1,start,buffer,filepath); } } @@ -3462,6 +3464,16 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char map[m].invincible_time_inc = (state) ? atoi(w4) : 0; } else if ( !strcmpi(w3,"noknockback") ) { map[m].flag.noknockback = state; + } else if ( !strcmpi(w3,"weapon_damage_rate") ) { + map[m].weapon_damage_rate = (state) ? atoi(w4) : 100; + } else if ( !strcmpi(w3,"magic_damage_rate") ) { + map[m].magic_damage_rate = (state) ? atoi(w4) : 100; + } else if ( !strcmpi(w3,"misc_damage_rate") ) { + map[m].misc_damage_rate = (state) ? atoi(w4) : 100; + } else if ( !strcmpi(w3,"short_damage_rate") ) { + map[m].short_damage_rate = (state) ? atoi(w4) : 100; + } else if ( !strcmpi(w3,"long_damage_rate") ) { + map[m].long_damage_rate = (state) ? atoi(w4) : 100; } else ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer)); diff --git a/src/map/script.c b/src/map/script.c index b2d9f6c87..5b076aeff 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -10907,7 +10907,7 @@ BUILDIN_FUNC(removemapflag) case MF_NOWARPTO: map[m].flag.nowarpto = 0; break; case MF_NIGHTMAREDROP: map[m].flag.pvp_nightmaredrop = 0; break; case MF_ZONE:/* reset zone state, mapflags cant be removed however */ - map[m].zone = &map_zone_all; + map[m].zone = ( battle_config.pk_mode && map[m].flag.pvp ) ? &map_zone_pk : &map_zone_all; break; case MF_NOCOMMAND: map[m].nocommand = 0; break; case MF_NODROP: map[m].flag.nodrop = 0; break; |