From: Kimmo R. <ki...@us...> - 2009-09-08 18:26:50
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/item In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv10025/src/games/stendhal/server/entity/item Modified Files: WeddingRing.java Log Message: Destroy the old wedding ring, if another is added to the same slot with it and use up the energy of the new one Index: WeddingRing.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/item/WeddingRing.java,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** WeddingRing.java 26 Aug 2009 21:03:31 -0000 1.32 --- WeddingRing.java 8 Sep 2009 18:26:34 -0000 1.33 *************** *** 14,17 **** --- 14,18 ---- import games.stendhal.common.Direction; + import games.stendhal.common.NotificationType; import games.stendhal.server.core.engine.SingletonRepository; import games.stendhal.server.core.engine.StendhalRPZone; *************** *** 24,27 **** --- 25,29 ---- import marauroa.common.game.RPObject; + import marauroa.common.game.RPSlot; import org.apache.log4j.Logger; *************** *** 220,222 **** --- 222,282 ---- } } + + // Check if there are more rings in the slot where this ring was added + @Override + public void setContainer(RPObject container, RPSlot slot) { + WeddingRing oldRing = null; + if (slot != null) { + for (RPObject object : slot) { + if ((object instanceof WeddingRing) && (!getID().equals(object.getID()))) { + oldRing = (WeddingRing) object; + break; + } + } + } + + if (oldRing != null) { + // The player is cheating with multiple rings. Explode the + // old ring, and use up the energy of this one + destroyRing(oldRing); + storeLastUsed(); + } + + super.setContainer(container, slot); + } + + /** + * Destroy a wedding ring. + * To be used when a ring is put in a same slot with another. + * + * @param rings the ring to be destroyed + */ + private void destroyRing(WeddingRing ring) { + // The players need to be told first, while the ring still + // exist in the world + informNearbyPlayers(ring); + ring.removeFromWorld(); + logger.info("Destroyed a wedding ring: " + ring); + } + + /** + * Give a nice message to nearby players when rings get destroyed. + */ + private void informNearbyPlayers(WeddingRing ring) { + try { + Entity container = (Entity) ring.getBaseContainer(); + StendhalRPZone zone = getZone(); + + if (zone != null) { + for (Player player : zone.getPlayers()) { + if (player.nextTo(container)) { + player.sendPrivateText(NotificationType.SCENE_SETTING, + "There's a flash of light when a wedding ring disintegrates in a magical conflict."); + } + } + } + } catch (Exception e) { + logger.error(e); + } + } } |