diff options
-rw-r--r-- | conf/battle/monster.conf | 2 | ||||
-rw-r--r-- | doc/permissions.txt | 3 | ||||
-rw-r--r-- | src/map/atcommand.c | 8 | ||||
-rw-r--r-- | src/map/battle.c | 32 | ||||
-rw-r--r-- | src/map/pc.h | 3 | ||||
-rw-r--r-- | src/map/pc_groups.c | 3 |
6 files changed, 45 insertions, 6 deletions
diff --git a/conf/battle/monster.conf b/conf/battle/monster.conf index 4d9014c91..398b2a0ab 100644 --- a/conf/battle/monster.conf +++ b/conf/battle/monster.conf @@ -198,6 +198,6 @@ ksprotection: 0 // Should MVP slaves retain their target when summoned back to their master? mob_slave_keep_target: yes -// Wheter or not to spawn the mvp tomb. +// Whether or not to spawn the mvp tomb. // See http://irowiki.org/wiki/MVP#Gravestone mvp_tomb_enabled: yes diff --git a/doc/permissions.txt b/doc/permissions.txt index afadb680c..e3e44ef7f 100644 --- a/doc/permissions.txt +++ b/doc/permissions.txt @@ -19,3 +19,6 @@ use_check : Ability to use client command /check (display character status). use_changemaptype : Ability to use client command /changemaptype. all_commands: Ability to use ALL atcommands/charcommands. receive_requests: Ability to receive @requests. +show_bossmobs: Ability to see boss mobs with @showmobs. +disable_pvm: Ability to disable Player v.s. Monster. +disable_pvp: Ability to disable Player v.s. Player.
\ No newline at end of file diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 9586d5a24..8e199ca73 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -6790,15 +6790,13 @@ ACMD_FUNC(showmobs) clif_displaymessage(fd, atcmd_output); return 0; } -// Uncomment the following line to show mini-bosses & MVP. -//#define SHOW_MVP -#ifndef SHOW_MVP - if(mob_db(mob_id)->status.mode&MD_BOSS){ + + if(mob_db(mob_id)->status.mode&MD_BOSS && !pc_has_permission(sd, PC_PERM_SHOW_BOSS)){ // If player group does not have access to boss mobs. snprintf(atcmd_output, sizeof atcmd_output, "Can't show Boss mobs!"); clif_displaymessage(fd, atcmd_output); return 0; } -#endif + if(mob_id == atoi(mob_name) && mob_db(mob_id)->jname) strcpy(mob_name,mob_db(mob_id)->jname); // --ja-- //strcpy(mob_name,mob_db(mob_id)->name); // --en-- diff --git a/src/map/battle.c b/src/map/battle.c index 35e2fc710..561f9ef53 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -4801,6 +4801,38 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f if( (s_bl = battle_get_master(src)) == NULL ) s_bl = src; + // Disable PVM for specific groups. + if (src->type&BL_PC && target->type&BL_MOB && src->id && map_id2sd(src->id) != NULL) + { // Source => PC, Target => MOB + if (pc_has_permission(map_id2sd(src->id), PC_PERM_DISABLE_PVM)) + return 0; + } + else if (src->type&BL_HOM && target->type&BL_MOB) + { // Source => HOM, Target => MOB; check the master BL id of homun + struct homun_data *hd = (TBL_HOM*)src; + if (hd != NULL && hd->master->bl.id) + { + if (pc_has_permission(map_id2sd(hd->master->bl.id), PC_PERM_DISABLE_PVM)) + return 0; + } + } + + // Disable PVP + if (src->type&BL_PC && target->type&(BL_PC|BL_HOM) && src->id && map_id2sd(src->id) != NULL) + { // Source => PC, Target => PC + if (pc_has_permission(map_id2sd(src->id), PC_PERM_DISABLE_PVP)) + return 0; + } + else if (src->type&BL_HOM && target->type&(BL_HOM|BL_PC)) + { // Source => HOM, Target => MOB|PC; check the master BL id of homun + struct homun_data *hd = (TBL_HOM*)src; + if (hd != NULL && hd->master->bl.id) + { + if (pc_has_permission(map_id2sd(hd->master->bl.id), PC_PERM_DISABLE_PVP)) + return 0; + } + } + switch( target->type ) { // Checks on actual target case BL_PC: { struct status_change* sc = status_get_sc(src); diff --git a/src/map/pc.h b/src/map/pc.h index 2cb859e5b..2cf4947a1 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -590,6 +590,9 @@ enum e_pc_permission { PC_PERM_USE_CHANGEMAPTYPE = 0x04000, PC_PERM_USE_ALL_COMMANDS = 0x08000, PC_PERM_RECEIVE_REQUESTS = 0x10000, + PC_PERM_SHOW_BOSS = 0x20000, + PC_PERM_DISABLE_PVM = 0x40000, + PC_PERM_DISABLE_PVP = 0x80000, }; #define pc_setdead(sd) ( (sd)->state.dead_sit = (sd)->vd.dead_sit = 1 ) diff --git a/src/map/pc_groups.c b/src/map/pc_groups.c index 59eecb254..c6713fedf 100644 --- a/src/map/pc_groups.c +++ b/src/map/pc_groups.c @@ -59,6 +59,9 @@ static const struct { { "use_changemaptype", PC_PERM_USE_CHANGEMAPTYPE }, { "all_commands", PC_PERM_USE_ALL_COMMANDS }, { "receive_requests", PC_PERM_RECEIVE_REQUESTS }, + { "show_bossmobs", PC_PERM_SHOW_BOSS }, + { "disable_pvm", PC_PERM_DISABLE_PVM }, + { "disable_pvp", PC_PERM_DISABLE_PVP }, }; /** |