diff --git a/build.ant.properties b/build.ant.properties index 50a7debb4c..374505b198 100644 --- a/build.ant.properties +++ b/build.ant.properties @@ -75,8 +75,8 @@ updates_server = http://arianne.sourceforge.net/stendhal/updates version_server = http://arianne.sourceforge.net/stendhal.version # current version of stendhal -version.old = 0.81 -version = 0.82.5 +version.old = 0.82 +version = 0.83 # javac options javac.deprecation = true diff --git a/data/conf/zones/kalavan.xml b/data/conf/zones/kalavan.xml index c924e6df61..29f9a660e7 100644 --- a/data/conf/zones/kalavan.xml +++ b/data/conf/zones/kalavan.xml @@ -335,6 +335,7 @@ 2 2 + - @@ -67,6 +67,14 @@ + + + + + + + + diff --git a/runserver.bat b/runserver.bat index 61ae7283f7..073a374953 100644 --- a/runserver.bat +++ b/runserver.bat @@ -1,3 +1,3 @@ -set STENDHAL_VERSION=0.82.5 +set STENDHAL_VERSION=0.83 set LOCALCLASSPATH=.;data\script;data\conf;stendhal-server-%STENDHAL_VERSION%.jar;marauroa.jar;mysql-connector.jar;log4j.jar;commons-lang.jar;h2.jar java -Xmx400m -cp "%LOCALCLASSPATH%" marauroa.server.marauroad -c server.ini -l diff --git a/runserver.sh b/runserver.sh index df2c13de2e..b91366c503 100644 --- a/runserver.sh +++ b/runserver.sh @@ -1,5 +1,5 @@ #!/bin/sh -STENDHAL_VERSION="0.82.5" +STENDHAL_VERSION="0.83" LOCALCLASSPATH=.:data/script/:data/conf/:stendhal-server-$STENDHAL_VERSION.jar:marauroa.jar:mysql-connector.jar:log4j.jar:commons-lang.jar:h2.jar diff --git a/src/games/stendhal/client/entity/Door.java b/src/games/stendhal/client/entity/Door.java index d6e73fcdc2..eb439b465a 100644 --- a/src/games/stendhal/client/entity/Door.java +++ b/src/games/stendhal/client/entity/Door.java @@ -32,6 +32,7 @@ public class Door extends Entity { * Create a door entity. */ public Door() { + // default constructor } // @@ -114,4 +115,13 @@ public class Door extends Entity { fireChange(PROP_OPEN); } } + + /** + * Is this entity useable? + * + * @return true if it is useable, false otherwise + */ + public boolean isUseable() { + return rpObject.has("use"); + } } diff --git a/src/games/stendhal/client/entity/Portal.java b/src/games/stendhal/client/entity/Portal.java index 1dcdb68fb7..8ceb529825 100644 --- a/src/games/stendhal/client/entity/Portal.java +++ b/src/games/stendhal/client/entity/Portal.java @@ -93,4 +93,14 @@ public class Portal extends InvisibleEntity { hidden = false; } } + + + /** + * Is this entity useable? + * + * @return true if it is useable, false otherwise + */ + public boolean isUseable() { + return rpObject.has("use"); + } } diff --git a/src/games/stendhal/client/gui/j2d/entity/Door2DView.java b/src/games/stendhal/client/gui/j2d/entity/Door2DView.java index 9b63464522..0819343ea5 100644 --- a/src/games/stendhal/client/gui/j2d/entity/Door2DView.java +++ b/src/games/stendhal/client/gui/j2d/entity/Door2DView.java @@ -231,12 +231,16 @@ class Door2DView extends StateEntity2DView { @Override public boolean isInteractive() { - return false; + return ((Door) entity).isUseable(); } @Override public StendhalCursor getCursor() { - return StendhalCursor.PORTAL; + if (isInteractive()) { + return StendhalCursor.ACTIVITY; + } else { + return StendhalCursor.PORTAL; + } } } diff --git a/src/games/stendhal/client/gui/j2d/entity/Portal2DView.java b/src/games/stendhal/client/gui/j2d/entity/Portal2DView.java index 1103424a37..9bd31231e2 100644 --- a/src/games/stendhal/client/gui/j2d/entity/Portal2DView.java +++ b/src/games/stendhal/client/gui/j2d/entity/Portal2DView.java @@ -75,14 +75,19 @@ class Portal2DView extends InvisibleEntity2DView { } } + @Override public boolean isInteractive() { - return false; + return ((Portal) entity).isUseable(); } @Override public StendhalCursor getCursor() { - return StendhalCursor.PORTAL; + if (isInteractive()) { + return StendhalCursor.ACTIVITY; + } else { + return StendhalCursor.PORTAL; + } } } diff --git a/src/games/stendhal/client/gui/j2d/entity/UseableItem2DView.java b/src/games/stendhal/client/gui/j2d/entity/UseableItem2DView.java index d15b66c6ac..7d25df545d 100644 --- a/src/games/stendhal/client/gui/j2d/entity/UseableItem2DView.java +++ b/src/games/stendhal/client/gui/j2d/entity/UseableItem2DView.java @@ -5,6 +5,7 @@ package games.stendhal.client.gui.j2d.entity; import games.stendhal.client.entity.ActionType; import games.stendhal.client.gui.styled.cursor.StendhalCursor; +import games.stendhal.client.gui.wt.core.WtWindowManager; import java.util.List; @@ -33,6 +34,11 @@ class UseableItem2DView extends StackableItem2DView { @Override public StendhalCursor getCursor() { - return StendhalCursor.ITEM_USE; + boolean doubleClick = Boolean.parseBoolean(WtWindowManager.getInstance().getProperty("ui.doubleclick", "false")); + if (doubleClick) { + return StendhalCursor.ACTIVITY; + } else { + return StendhalCursor.ITEM_USE; + } } } diff --git a/src/games/stendhal/client/gui/j2d/entity/UseableRing2DView.java b/src/games/stendhal/client/gui/j2d/entity/UseableRing2DView.java index 2218d49152..f95705fbee 100644 --- a/src/games/stendhal/client/gui/j2d/entity/UseableRing2DView.java +++ b/src/games/stendhal/client/gui/j2d/entity/UseableRing2DView.java @@ -2,6 +2,7 @@ package games.stendhal.client.gui.j2d.entity; import games.stendhal.client.entity.ActionType; import games.stendhal.client.gui.styled.cursor.StendhalCursor; +import games.stendhal.client.gui.wt.core.WtWindowManager; import java.util.List; @@ -23,6 +24,11 @@ public class UseableRing2DView extends Ring2DView { @Override public StendhalCursor getCursor() { - return StendhalCursor.ITEM_USE; + boolean doubleClick = Boolean.parseBoolean(WtWindowManager.getInstance().getProperty("ui.doubleclick", "false")); + if (doubleClick) { + return StendhalCursor.ACTIVITY; + } else { + return StendhalCursor.ITEM_USE; + } } } diff --git a/src/games/stendhal/client/update/Version.java b/src/games/stendhal/client/update/Version.java index 1c6b91fdd5..2d8c019ce7 100644 --- a/src/games/stendhal/client/update/Version.java +++ b/src/games/stendhal/client/update/Version.java @@ -10,7 +10,7 @@ package games.stendhal.client.update; public class Version { /** Version Number. */ - public static final String VERSION = "0.82.5"; + public static final String VERSION = "0.83"; /** * Extract the specified number of parts from a version-string. diff --git a/src/games/stendhal/common/Debug.java b/src/games/stendhal/common/Debug.java index 92d22db980..f337a75ebf 100644 --- a/src/games/stendhal/common/Debug.java +++ b/src/games/stendhal/common/Debug.java @@ -25,7 +25,7 @@ public interface Debug { /** server version. */ // Note: This line is updated by build.xml using a regexp so be sure to adjust it in case you modify this line. - String VERSION = "0.82.5"; + String VERSION = "0.83"; /** diff --git a/src/games/stendhal/server/actions/equip/SourceObject.java b/src/games/stendhal/server/actions/equip/SourceObject.java index 9bea562196..7ba573794c 100644 --- a/src/games/stendhal/server/actions/equip/SourceObject.java +++ b/src/games/stendhal/server/actions/equip/SourceObject.java @@ -89,8 +89,9 @@ class SourceObject extends MoveableObject { if (!baseSlot.has(baseItemId)) { logger.debug("Base item(" + parent + ") doesn't contain item(" + baseItemId + ") on given slot(" + slotName + ")"); - player.sendPrivateText("There is no such item in the " + slotName + " of " - + parent.getDescriptionName(true)); + // Remove message as discussed on #arianne 2010-04-25 + // player.sendPrivateText("There is no such item in the " + slotName + " of " + // + parent.getDescriptionName(true)); return invalidSource; } diff --git a/src/games/stendhal/server/core/engine/GenerateINI.java b/src/games/stendhal/server/core/engine/GenerateINI.java index 03762b5d27..a158cdcf54 100644 --- a/src/games/stendhal/server/core/engine/GenerateINI.java +++ b/src/games/stendhal/server/core/engine/GenerateINI.java @@ -233,7 +233,7 @@ public class GenerateINI { out.println(); out.println("server_typeGame=" + gameName); out.println("server_name=" + gameName + " Marauroa server"); - out.println("server_version=0.82.5"); + out.println("server_version=0.83"); out.println("server_contact=https://sourceforge.net/tracker/?atid=514826&group_id=66537&func=browse"); out.println(); out.println("# Extensions configured on the server. Enable at will."); diff --git a/src/games/stendhal/server/entity/item/Item.java b/src/games/stendhal/server/entity/item/Item.java index 0242e15a0e..420b466875 100644 --- a/src/games/stendhal/server/entity/item/Item.java +++ b/src/games/stendhal/server/entity/item/Item.java @@ -574,7 +574,8 @@ public class Item extends PassiveEntity implements TurnListener, EquipListener { stats.append(" "); stats.append(entry.getKey()); stats.append(": "); - stats.append(entry.getValue()); + stats.append(Math.round(100/entry.getValue())); + stats.append("%"); } } String statString = ""; diff --git a/src/games/stendhal/server/entity/mapstuff/portal/AccessCheckingPortal.java b/src/games/stendhal/server/entity/mapstuff/portal/AccessCheckingPortal.java index ca70b69440..e384f7acb1 100644 --- a/src/games/stendhal/server/entity/mapstuff/portal/AccessCheckingPortal.java +++ b/src/games/stendhal/server/entity/mapstuff/portal/AccessCheckingPortal.java @@ -55,6 +55,8 @@ abstract class AccessCheckingPortal extends Portal { protected void rejected(final RPEntity user) { if (rejectMessage != null) { sendMessage(user, rejectMessage); + user.stop(); + user.clearPath(); } } diff --git a/src/games/stendhal/server/entity/mapstuff/portal/Portal.java b/src/games/stendhal/server/entity/mapstuff/portal/Portal.java index e68db21bbf..bb6fab7afc 100644 --- a/src/games/stendhal/server/entity/mapstuff/portal/Portal.java +++ b/src/games/stendhal/server/entity/mapstuff/portal/Portal.java @@ -41,6 +41,7 @@ public class Portal extends Entity implements UseListener { * The hidden flags attribute name. */ protected static final String ATTR_HIDDEN = "hidden"; + protected static final String ATTR_USE = "use"; /** the logger instance. */ private static final Logger logger = Logger.getLogger(Portal.class); @@ -58,6 +59,7 @@ public class Portal extends Entity implements UseListener { if (!RPClass.hasRPClass(RPCLASS_NAME)){ final RPClass portal = new RPClass(RPCLASS_NAME); portal.isA("entity"); + portal.addAttribute(ATTR_USE, Type.FLAG); portal.addAttribute(ATTR_HIDDEN, Type.FLAG); } } catch (final SyntaxException e) { @@ -179,7 +181,12 @@ public class Portal extends Entity implements UseListener { player.sendPrivateText("For some reason you cannot get through right now."); return false; } - + + if (!nextTo(player) && has("use")) { + player.sendPrivateText("You must come closer before you can use this orb."); + return false; + } + if (!nextTo(player)) { // Too far to use the portal from here, but walk to it // The pathfinder will do the rest of the work and make the player pass through the portal diff --git a/src/games/stendhal/server/entity/player/Player.java b/src/games/stendhal/server/entity/player/Player.java index 821d71b7a1..c902db876a 100644 --- a/src/games/stendhal/server/entity/player/Player.java +++ b/src/games/stendhal/server/entity/player/Player.java @@ -155,9 +155,9 @@ public class Player extends RPEntity { player.put("atk_xp", 0); player.put("def", 10); player.put("def_xp", 0); + player.put("level", 0); player.setXP(0); - final Outfit randomoutfit = Outfit.getRandomOutfit(); player.setOutfit(randomoutfit); diff --git a/src/games/stendhal/server/maps/quests/ThePiedPiper.java b/src/games/stendhal/server/maps/quests/ThePiedPiper.java index 8e48793d59..5aecca7cf7 100644 --- a/src/games/stendhal/server/maps/quests/ThePiedPiper.java +++ b/src/games/stendhal/server/maps/quests/ThePiedPiper.java @@ -21,10 +21,7 @@ import games.stendhal.server.entity.npc.SpeakerNPC; import games.stendhal.server.entity.npc.parser.Sentence; import games.stendhal.server.entity.player.Player; -import java.lang.Math; - import java.util.Arrays; -import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Observable; @@ -560,6 +557,7 @@ import org.apache.log4j.Logger; } // spawn creature rat.registerObjectsForNotification(ratsObserver); + /* -- commented because of these noises reflects on all archrats in game -- // add unique noises to humanoids if (tc==RAT_TYPES.indexOf("archrat")) { final LinkedList ll = new LinkedList( @@ -573,6 +571,7 @@ import org.apache.log4j.Logger; lhm.put("follow", ll); rat.setNoises(lhm); }; + */ StendhalRPAction.placeat(zone, rat, x, y); rats.add(rat); }; diff --git a/stendhal.jnlp b/stendhal.jnlp index f209acb901..3982275e51 100644 --- a/stendhal.jnlp +++ b/stendhal.jnlp @@ -22,7 +22,7 @@ Some of these people are NPC, they will give you tasks to accomplish and hints t - + diff --git a/tests/games/stendhal/server/actions/equip/EquipmentActionTest.java b/tests/games/stendhal/server/actions/equip/EquipmentActionTest.java index 1624481900..1a75450859 100644 --- a/tests/games/stendhal/server/actions/equip/EquipmentActionTest.java +++ b/tests/games/stendhal/server/actions/equip/EquipmentActionTest.java @@ -60,23 +60,6 @@ public class EquipmentActionTest extends ZoneAndPlayerTestImpl { return player; } - /** - * Tests for dropInvalidSourceSlot. - */ - @Test - public void testDropInvalidSourceSlot() { - final Player player = createTestPlayer("george"); - - final RPAction drop = new RPAction(); - drop.put("type", "drop"); - drop.put("baseobject", player.getID().getObjectID()); - drop.put("baseslot", "nonExistingSlotXXXXXX"); - drop.put("baseitem", -1); - - final EquipmentAction action = new DropAction(); - action.onAction(player, drop); - Assert.assertEquals("Source nonExistingSlotXXXXXX does not exist", player.events().get(0).get("text")); - } /** * Tests for dropNonExistingItem. diff --git a/tiled/interiors/ados/tavern_0.tmx b/tiled/interiors/ados/tavern_0.tmx index 40c44c2238..b060b3b459 100644 --- a/tiled/interiors/ados/tavern_0.tmx +++ b/tiled/interiors/ados/tavern_0.tmx @@ -1,112 +1,113 @@ - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - H4sIAAAAAAAAADNjYGAwG2DMSiUMMouBRPVmaHxq0Mhm4/MzOptSO9HFQVgKiOXQsCyN/I8tbOvRML39T2z408r/Ax3/9UTaP1zTP73i/yYS/+II9P9gTf/09P9ITv+U+p9YTEg9PnlS0ykhe6iBAQeYFR+ACQAA + H4sIAAAAAAAAAzNjYGAwG2DMSiUMMouBRPVmaHxq0Mhm4/MzOptSO9HFQVgKiOXQsCyN/I8tbOvRML39T2z408r/Ax3/9UTaP1zTPz3jf6T7fzCm/9H4Hxr+JxYTUo9PntR0SsgeamAAz3Seg4AJAAA= - H4sIAAAAAAAAAL2TTQrCMBCFE90pdSfYlbryTq6rC68gaFU8g5uC7vw7jcueRl8kgTA0cZK2DnwU2sm894a0EEKcG+ICisD+K7iBe00eoCv580z/G8+XqF8leOo8nHml5bcpfZpnDU4OjN8282/AGEwscjAV/8mv9LeEnPhtO79Pv+n8tn6m9RcefZo/0/3LSP3Q/XPyp2DO1A/dP/d/VfpDhgdanPz2vlxZVwytpvLHZo29/778IV7ovJShX5Xf7Jp772z9uvlpGS9Hpj7NvwN7wsHjN6aUx5Fjnuvezohfgadk8m2veN+Rv+fZZ01/D/QZJBpViaxmoOe5vtOzqv8D8mte4oAJAAA= + H4sIAAAAAAAAA72TTQrCMBCFE90puhPsSl15J9fVhVcQtCqewU1Bd/6dxmVPoy+SQBiadJo2DnwE2sm899I0F0JcWuIK8pr9N3AHj4Y8QVfy55n+D9a3aF4FeOk8nHmF5bctfZpnA84OjN+Y+bdgAqYWGZiJ/+RX+jtCRvzGzu/Tj5k/1fpLjz7Nn+r+VaB+jPwJWETS5/6vSn/E0DdVJ799/q6s6wpt17yQ/JysLv2Q7+/LX8cLnZcw9Mvym7Pm3jtbv2l+WsbLialP8+/BgXD0+A0p5XHsmOe6t3PiV2CVTH7tJc87snqevdf090CfwUCjaiDLGep5rvd0r+r/ArngtJ6ACQAA - H4sIAAAAAAAAAMWVOQ7CMBBF00LFnnTsEmdg39cb0ENDRcMdoACOzEdyJMvyPlbypSfHk/n5mShRoih7dXPI5NWT1DoMHxUltYGmv6/I55Vo/LpzMr3Bi9s/Nb0lUAVljoqkltZrhuwmaDEStrYNHtV8rnPnrYaw2vaH0gXE4Oroi4V96Pty1d2iZwhGYAwmhCzfWRdgCVZgTch/ePr24ACO4ETIvxG8ony+1y93/CHmn4l+6rP459eJ1zBJ9766zF9Q1GX/Nhv5+nSaghmYZ+xNtQFbsAvo/QFHkI4pgAkAAA== + H4sIAAAAAAAAA8WVOQ7CMBBF00LFnnTsEmdg39cb0ENDRcMdoACOzEdyJMvyPlbypSfHk/n5mShRoih7dXPI5NWT1DoMHxUltYGmv6/I55Vo/LpzMr3Bi9s/Nb0lUAVljoqkltZrhuwmaDEStrYNHtV8rnPnrYaw2vaH0gXE4Oroi4V96Pty1d2iZwhGYAwmhCzfWRdgCVZgTch/ePr24ACO4ETIvxG8ony+1y93/CHmn4l+6rP459eJ1zBJ9766zF9Q1GX/Nhv5+nSaghmYZ+xNtQFbsAvo/QFHkI4pgAkAAA== - H4sIAAAAAAAAAGNgwASaWMTIAdpUMmckAW4g5gNiHiTMi0UMJs4/MM4cBQRAGBCHQ3EEiXqIVU8vEDnQDqAjoMSv/kAcQC2HDAJAabwPdLpRo5I5LWTq66KS/fgAvjAup4P9o4AyAAC+EsVYgAkAAA== + H4sIAAAAAAAAA2NgwASaWMTIAdpUMmckAW4g5gNiHiTMi0UMJs4/MM4cBQRAGBCHQ3EEiXqIVU8vEDnQDqAjoMSv/kAcQC2HDAJAabwPdLpRo5I5LWTq66KS/fgAvjAup4P9o4AyAAC+EsVYgAkAAA== - H4sIAAAAAAAAAGNgGAWDCeQjsXOAeAKafC+U7qGPc0YBhaCCRPXFNHEFZSCfsJJBAfyBOGCgHTEKhh1oG2gHjIJhCwBO2VhvgAkAAA== + H4sIAAAAAAAAA2NgGAWDCeQjsXOAeAKafC+U7qGPc0YBhaCCRPXFNHEFZSCfsJJBAfyBOGCgHTEKhh1oG2gHjIJhCwBO2VhvgAkAAA== - H4sIAAAAAAAAAGNgGAWjYBSMglEwCkbBKBjcwGCA9NIKAAAnhrUUgAkAAA== + H4sIAAAAAAAAA2NgGAWjYBSMglEwCkbBKBjcwGCA9NIKAAAnhrUUgAkAAA== - H4sIAAAAAAAAADNmYGAwHsVwTA4g1Sxq2o3LTEJ2UaoeXS+pfqGm30ftJz1dE4pDSu2npnpahCe17ScV4Mt/1DRvKNtPiltwpWdS7UdXM5D2k+IOWtlPrNuILXfwqSUGU6KfUrtpgQFxdyhtgAkAAA== + H4sIAAAAAAAAAzNmYGAwHsVwTA4g1Sxq2o3LTEJ2UaoeXS+pfqGm30ftJz1dE4pDSu2npnpahCe17ScV4Mt/1DRvKNtPiltwpWdS7UdXM5D2k+IOWtlPrNuILXfwqSUGU6KfUrtpgQFxdyhtgAkAAA== - H4sIAAAAAAAAAO3BMQEAAADCoPVPbQsvoAAAeBoUK4qJgAkAAA== + H4sIAAAAAAAAA+3BMQEAAADCoPVPbQsvoAAAeBoUK4qJgAkAAA==