Adding denyCommandsDistance
This commit is contained in:
		
							parent
							
								
									4c5eacec38
								
							
						
					
					
						commit
						8c72b5e734
					
				| @ -889,20 +889,46 @@ public class EngineMain extends Engine | |||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		// ... if there is a faction at the players location ... | 		// ... if there is a faction at the players location we fetch the relation now ... | ||||||
| 		PS ps = PS.valueOf(player.getLocation()).getChunk(true); | 		PS ps = PS.valueOf(player.getLocation()).getChunk(true); | ||||||
| 		Faction factionAtPs = BoardColl.get().getFactionAt(ps); | 		Faction factionAtPs = BoardColl.get().getFactionAt(ps); | ||||||
| 		if (factionAtPs == null) return; | 		Rel factionAtRel = null; | ||||||
| 		if (factionAtPs.isNone()) return; |  | ||||||
| 		 | 		 | ||||||
| 		// ... the command may be denied in the territory of this relation type ... | 		if (factionAtPs != null && ! factionAtPs.isNone()) | ||||||
| 		Rel rel = factionAtPs.getRelationTo(mplayer); | 		{ | ||||||
|  | 			factionAtRel = factionAtPs.getRelationTo(mplayer); | ||||||
|  | 		} | ||||||
| 		 | 		 | ||||||
| 		List<String> deniedCommands = MConf.get().denyCommandsTerritoryRelation.get(rel); | 		// ... there maybe be a player in the distance that denies the command ... | ||||||
|  | 		if (MConf.get().denyCommandsDistance > -1 && ! MConf.get().denyCommandsDistanceBypassIn.contains(factionAtRel)) | ||||||
|  | 		{	 | ||||||
|  | 			for (Player otherplayer : player.getWorld().getPlayers()) | ||||||
|  | 			{ | ||||||
|  | 				MPlayer othermplayer = MPlayer.get(otherplayer); | ||||||
|  | 				if (othermplayer == mplayer) continue; | ||||||
|  | 				 | ||||||
|  | 				double distance = player.getLocation().distance(otherplayer.getLocation()); | ||||||
|  | 				if (MConf.get().denyCommandsDistance > distance) continue; | ||||||
|  | 				 | ||||||
|  | 				Rel playerRel = mplayer.getRelationTo(othermplayer); | ||||||
|  | 				if ( ! MConf.get().denyCommandsDistanceRelation.containsKey(playerRel)) continue; | ||||||
|  | 				 | ||||||
|  | 				String desc = playerRel.getDescPlayerOne(); | ||||||
|  | 				 | ||||||
|  | 				mplayer.msg("<b>You can't use \"<h>/%s<b>\" as there is <h>%s<b> nearby.", command, desc); | ||||||
|  | 				event.setCancelled(true); | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		// ... if there is no relation here then there are no further checks ... | ||||||
|  | 		if (factionAtRel == null) return; | ||||||
|  | 		 | ||||||
|  | 		List<String> deniedCommands = MConf.get().denyCommandsTerritoryRelation.get(factionAtRel); | ||||||
| 		if (deniedCommands == null) return; | 		if (deniedCommands == null) return; | ||||||
| 		if ( ! MUtil.containsCommand(command, deniedCommands)) return; | 		if ( ! MUtil.containsCommand(command, deniedCommands)) return; | ||||||
| 		 | 		 | ||||||
| 		mplayer.msg("<b>You can't use \"<h>/%s<b>\" in %s territory.", command, Txt.getNicedEnum(rel)); | 		mplayer.msg("<b>You can't use \"<h>/%s<b>\" in %s territory.", command, Txt.getNicedEnum(factionAtRel)); | ||||||
| 		event.setCancelled(true); | 		event.setCancelled(true); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|  | |||||||
| @ -395,6 +395,26 @@ public class MConf extends Entity<MConf> | |||||||
| 		Rel.MEMBER, new ArrayList<String>() | 		Rel.MEMBER, new ArrayList<String>() | ||||||
| 	); | 	); | ||||||
| 	 | 	 | ||||||
|  | 	// The distance for denying the following commands. Set to -1 to disable. | ||||||
|  | 	public double denyCommandsDistance = -1; | ||||||
|  | 	 | ||||||
|  | 	// Lists of commands to deny depending on your relation to a nearby enemy in the above distance. | ||||||
|  | 	public Map<Rel, List<String>> denyCommandsDistanceRelation = MUtil.map( | ||||||
|  | 		Rel.ENEMY, MUtil.list( | ||||||
|  | 			"home" | ||||||
|  | 		), | ||||||
|  | 		Rel.NEUTRAL, new ArrayList<String>(), | ||||||
|  | 		Rel.TRUCE, new ArrayList<String>(), | ||||||
|  | 		Rel.ALLY, new ArrayList<String>(), | ||||||
|  | 		Rel.MEMBER, new ArrayList<String>() | ||||||
|  | 	); | ||||||
|  | 	 | ||||||
|  | 	// Allow bypassing the above setting when in these territories. | ||||||
|  | 	public List<Rel> denyCommandsDistanceBypassIn = MUtil.list( | ||||||
|  | 		Rel.MEMBER, | ||||||
|  | 		Rel.ALLY | ||||||
|  | 	); | ||||||
|  | 	 | ||||||
| 	// -------------------------------------------- // | 	// -------------------------------------------- // | ||||||
| 	// CHAT | 	// CHAT | ||||||
| 	// -------------------------------------------- // | 	// -------------------------------------------- // | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user