1 package games.stendhal.server.actions;
2 
3 import org.apache.log4j.Logger;
4 
5 import games.stendhal.server.core.events.TurnNotifier;
6 import games.stendhal.server.core.rp.pvp.PlayerVsPlayerChallengeAcceptedTurnListener;
7 import games.stendhal.server.core.rp.pvp.PlayerVsPlayerChallengeCreatorTurnListener;
8 import games.stendhal.server.entity.Entity;
9 import games.stendhal.server.entity.player.Player;
10 import games.stendhal.server.util.EntityHelper;
11 import marauroa.common.game.RPAction;
12 /**
13  * Handles challenge send from a player's client and creates the server side challenge
14  *
15  * @author markus
16  */
17 public class ChallengePlayerAction implements ActionListener {
18 
19 	private static final Logger logger = Logger.getLogger(ChallengePlayerAction.class);
20 
21 	/**
22 	 * registers the ChallengePlayerAction action
23 	 */
register()24 	public static void register() {
25 		CommandCenter.register("challenge", new ChallengePlayerAction());
26 	}
27 
28 	@Override
onAction(Player player, RPAction action)29 	public void onAction(Player player, RPAction action) {
30 
31 		String target = action.get("target");
32 		Entity targetEntity = EntityHelper.entityFromTargetName(target, player);
33 		String challengeAction = action.get("action");
34 
35 		if (targetEntity == null) {
36 			logger.debug(String.format("Unable to locate target %s for challenge action from player %s", target, player.getName()));
37 			return;
38 		}
39 
40 		if (!(targetEntity instanceof Player)){
41 			logger.debug(String.format("Found target for name %s is not a player object.", target));
42 			return;
43 		}
44 
45 		Player targetPlayer = (Player) targetEntity;
46 
47 		if(target != null && target.equals(player.getName())) {
48 			logger.debug(String.format("Player %s tried to open or accept a challenge with himself.", player.getName()));
49 			return;
50 		}
51 
52 		if("open".equals(challengeAction)) {
53 			TurnNotifier.get().notifyInTurns(0, new PlayerVsPlayerChallengeCreatorTurnListener(player, targetPlayer));
54 			return;
55 		}
56 
57 		if("accept".equals(challengeAction)) {
58 			TurnNotifier.get().notifyInTurns(0, new PlayerVsPlayerChallengeAcceptedTurnListener(targetPlayer, player));
59 			return;
60 		}
61 	}
62 
63 }
64