From: Daniel H. <wik...@us...> - 2006-09-05 15:41:51
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/npc In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv14813/src/games/stendhal/server/entity/npc Modified Files: SpeakerNPC.java ProducerBehaviour.java Log Message: tell the player when (approximately) to come back Index: ProducerBehaviour.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/npc/ProducerBehaviour.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ProducerBehaviour.java 2 Sep 2006 11:47:28 -0000 1.11 --- ProducerBehaviour.java 5 Sep 2006 15:41:45 -0000 1.12 *************** *** 20,23 **** --- 20,57 ---- /** + * Given a number of seconds, returns a corresponding string like + * "about 5 hours" or "about 27 minutes". + * @param seconds + * @return An approximate description of the given timespan + */ + public static String roundTimespan(int seconds) { + int d = seconds / (60 * 60 * 24); + int h = seconds / (60 * 60) - d * 24; + int min = seconds / 60 - h * 60; + // int s = seconds - min * 60; + if (d > 0) { + if (h >= 12) { + return "about " + (d + 1) + " days"; + } else { + return "about " + d + " days"; + } + } else if (h > 0) { + if (min >= 30) { + return "about " + (h + 1) + " hours"; + } else { + return "about " + h + " hours"; + } + } else { // if (min > 0) { + if (min >= 30) { + return "about " + (min + 1) + " minutes"; + } else { + return "about " + min + " minutes"; + } + } // else { + // return s + " seconds"; + // } + } + + /** * To store the current status of a production order, each * ProducerBehaviour needs to have an exclusive quest slot. *************** *** 140,143 **** --- 174,191 ---- } + public String getApproximateRemainingTime(Player player) { + String orderString = player.getQuest(questSlot); + String[] order = orderString.split(";"); + long orderTime = Long.parseLong(order[2]); + long timeNow = new Date().getTime(); + int numberOfProductItems = Integer.parseInt(order[0]); + // String productName = order[1]; + + long finishTime = orderTime + (getProductionTime(numberOfProductItems) * 1000); + int remainingSeconds = (int) ((finishTime - timeNow) / 1000); + return roundTimespan(remainingSeconds); + + } + private int getMaximalAmount(Player player) { int maxAmount = Integer.MAX_VALUE; *************** *** 207,211 **** + " " + getProductName() ! + " for you, but that will take some time. Come back later."); return true; } --- 255,259 ---- + " " + getProductName() ! + " for you, but that will take some time. Come back in " + getApproximateRemainingTime(player) + "."); return true; } *************** *** 233,237 **** + " " + getProductName() ! + " for you. Come back later to get it."); } else { StackableItem products = (StackableItem) StendhalRPWorld.get().getRuleManager().getEntityManager().getItem(getProductName()); --- 281,287 ---- + " " + getProductName() ! + " for you. Come back in " ! + getApproximateRemainingTime(player) ! + " to get it."); } else { StackableItem products = (StackableItem) StendhalRPWorld.get().getRuleManager().getEntityManager().getItem(getProductName()); Index: SpeakerNPC.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/npc/SpeakerNPC.java,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** SpeakerNPC.java 4 Sep 2006 16:52:48 -0000 1.61 --- SpeakerNPC.java 5 Sep 2006 15:41:45 -0000 1.62 *************** *** 1041,1046 **** }, ConversationStates.ATTENDING, ! "I still haven't finished your last order. Come back later!", ! null); add(ConversationStates.IDLE, --- 1041,1052 ---- }, ConversationStates.ATTENDING, ! null, ! new SpeakerNPC.ChatAction() { ! @Override ! public void fire(Player player, String text, ! SpeakerNPC npc) { ! npc.say("I still haven't finished your last order. Come back in " + behaviour.getApproximateRemainingTime(player) + "!"); ! } ! }); add(ConversationStates.IDLE, |