1 /* $Id$ */ 2 /*************************************************************************** 3 * (C) Copyright 2003-2010 - Stendhal * 4 *************************************************************************** 5 *************************************************************************** 6 * * 7 * This program is free software; you can redistribute it and/or modify * 8 * it under the terms of the GNU General Public License as published by * 9 * the Free Software Foundation; either version 2 of the License, or * 10 * (at your option) any later version. * 11 * * 12 ***************************************************************************/ 13 package games.stendhal.server.entity.npc.condition; 14 15 import java.util.Arrays; 16 import java.util.List; 17 18 import games.stendhal.common.parser.Sentence; 19 import games.stendhal.server.core.config.annotations.Dev; 20 import games.stendhal.server.core.config.annotations.Dev.Category; 21 import games.stendhal.server.entity.Entity; 22 import games.stendhal.server.entity.npc.ChatCondition; 23 import games.stendhal.server.entity.player.Player; 24 25 /** 26 * has the player completed the specified number of the specified achievements? 27 * 28 * @author madmetzger 29 */ 30 @Dev(category=Category.STATS, label="Achievement?") 31 public class PlayerHasCompletedAchievementsCondition implements ChatCondition { 32 33 private final List<String> achievements; 34 35 private final int minimumToComplete; 36 37 /** 38 * PlayerHasCompletedAchievementsCondition 39 * 40 * @param minimum required number of achievements, -1 means all 41 * @param achievementIdentifiers list of achievements to check 42 */ 43 @Dev PlayerHasCompletedAchievementsCondition(@evdefaultValue=R) int minimum, String... achievementIdentifiers)44 public PlayerHasCompletedAchievementsCondition(@Dev(defaultValue="-1") int minimum, String... achievementIdentifiers) { 45 achievements = Arrays.asList(achievementIdentifiers); 46 if (minimum > -1) { 47 minimumToComplete = minimum; 48 } else { 49 minimumToComplete = achievementIdentifiers.length; 50 } 51 } 52 53 /** 54 * PlayerHasCompletedAchievementsCondition 55 * 56 * @param achievementIdentifiers list of achievements to check 57 */ PlayerHasCompletedAchievementsCondition(String... achievementIdentifiers)58 public PlayerHasCompletedAchievementsCondition(String... achievementIdentifiers) { 59 this(-1, achievementIdentifiers); 60 } 61 62 @Override fire(Player player, Sentence sentence, Entity npc)63 public boolean fire(Player player, Sentence sentence, Entity npc) { 64 int reached = 0; 65 for (String achievementIdentifier : achievements) { 66 if(player.hasReachedAchievement(achievementIdentifier)) { 67 reached = reached + 1; 68 } 69 if(reached >= minimumToComplete) { 70 return true; 71 } 72 } 73 return false; 74 } 75 76 @Override hashCode()77 public int hashCode() { 78 return 43793 * achievements.hashCode() + minimumToComplete; 79 } 80 81 @Override equals(final Object obj)82 public boolean equals(final Object obj) { 83 if (!(obj instanceof PlayerHasCompletedAchievementsCondition)) { 84 return false; 85 } 86 PlayerHasCompletedAchievementsCondition other = (PlayerHasCompletedAchievementsCondition) obj; 87 return (minimumToComplete == other.minimumToComplete) 88 && achievements.equals(other.achievements); 89 } 90 } 91