Ver código fonte

New permissions added for groups: show_bossmobs, disable_pvm and disable_pvp; documented usage in permissions.txt
Fixed a typo in monster.conf.
Removed old functionality from showmobs command to make room for show_bossmobs.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16445 54d463be-8e91-2dee-dedb-b68131a5f0ec

cookiecrumbs 13 anos atrás
pai
commit
1c121768cb
6 arquivos alterados com 45 adições e 6 exclusões
  1. 1 1
      conf/battle/monster.conf
  2. 3 0
      doc/permissions.txt
  3. 3 5
      src/map/atcommand.c
  4. 32 0
      src/map/battle.c
  5. 3 0
      src/map/pc.h
  6. 3 0
      src/map/pc_groups.c

+ 1 - 1
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

+ 3 - 0
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.

+ 3 - 5
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--

+ 32 - 0
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);

+ 3 - 0
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 )

+ 3 - 0
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 },
 };
 
 /**