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