From a44c60c08d87807c99532bd54016ec5bba21630f Mon Sep 17 00:00:00 2001 From: Hendrik Brummermann Date: Sun, 17 Dec 2023 19:21:53 +0100 Subject: [PATCH 01/20] updated version --- build.ant.properties | 2 +- buildtools/mkdocs/mkdocs.yml | 2 +- runserver.bat | 2 +- runserver.sh | 2 +- src/games/stendhal/common/Debug.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) mode change 100755 => 100644 runserver.sh diff --git a/build.ant.properties b/build.ant.properties index 0ec4fcc806..c38264af45 100644 --- a/build.ant.properties +++ b/build.ant.properties @@ -85,7 +85,7 @@ version_server = http://arianne.sourceforge.net/stendhal.version # current version of stendhal version.old = 1.44 -version = 1.44.5 +version = 1.45 # javac options javac.deprecation = true diff --git a/buildtools/mkdocs/mkdocs.yml b/buildtools/mkdocs/mkdocs.yml index c9f7cd8f25..6108ea5d3a 100644 --- a/buildtools/mkdocs/mkdocs.yml +++ b/buildtools/mkdocs/mkdocs.yml @@ -1,4 +1,4 @@ -site_name: Stendhal 1.44.5 Reference Documentation +site_name: Stendhal 1.45 Reference Documentation site_description: A fun, friendly, & free multiplayer online adventure game. copyright: Copyright © 2003-2023 Stendhal site_url: https://stendhalgame.org/ diff --git a/runserver.bat b/runserver.bat index 258f73e8eb..66227fb0c2 100644 --- a/runserver.bat +++ b/runserver.bat @@ -1,6 +1,6 @@ @echo off -set STENDHAL_VERSION=1.44.5 +set STENDHAL_VERSION=1.45 set SERVER_JAR=stendhal-server-%STENDHAL_VERSION%.jar :: change to server directory diff --git a/runserver.sh b/runserver.sh old mode 100755 new mode 100644 index 0b18840986..36e432b6cb --- a/runserver.sh +++ b/runserver.sh @@ -1,6 +1,6 @@ #!/bin/sh -STENDHAL_VERSION="1.44.5" +STENDHAL_VERSION="1.45" SERVER_JAR="stendhal-server-${STENDHAL_VERSION}.jar" # change to server directory diff --git a/src/games/stendhal/common/Debug.java b/src/games/stendhal/common/Debug.java index 03797b2ca3..5608cca154 100644 --- a/src/games/stendhal/common/Debug.java +++ b/src/games/stendhal/common/Debug.java @@ -26,7 +26,7 @@ public class Debug { /** version. */ // Note: This line is updated by build.xml using a regexp so be sure to adjust it in case you modify this line. - public static final String VERSION = "1.44.5"; + public static final String VERSION = "1.45"; /** pre release suffix */ // Note: This line is updated by build.xml using a regexp so be sure to adjust it in case you modify this line. From bef30954e82a243a9d1d0643ddf4bbf5d61957fe Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sun, 17 Dec 2023 22:28:29 -0800 Subject: [PATCH 02/20] Remove click/touch indicator --- srcjs/stendhal.html | 4 --- srcjs/stendhal/Client.ts | 34 ---------------------- srcjs/stendhal/ui/ViewPort.ts | 2 -- srcjs/stendhal/ui/dialog/SettingsDialog.ts | 3 -- srcjs/stendhal/util/ConfigManager.ts | 1 - 5 files changed, 44 deletions(-) diff --git a/srcjs/stendhal.html b/srcjs/stendhal.html index dd6a78355b..35c15a96a6 100644 --- a/srcjs/stendhal.html +++ b/srcjs/stendhal.html @@ -252,7 +252,6 @@ -
@@ -415,9 +414,6 @@
- - - diff --git a/srcjs/stendhal/Client.ts b/srcjs/stendhal/Client.ts index df24c492ae..cfaa919585 100644 --- a/srcjs/stendhal/Client.ts +++ b/srcjs/stendhal/Client.ts @@ -48,8 +48,6 @@ export class Client { private unloading = false; public username?: string; - private static click_indicator_id: number|undefined = undefined; - /** Singleton instance. */ private static instance: Client; @@ -425,20 +423,6 @@ export class Client { soundbutton.addEventListener("click", stendhal.main.toggleSound); // update button state this.onSoundToggled(); - - // click/touch indicator - // TODO: - // - animate - // - would work better if displayed upon mousedown/touchstart then position updated & timer - // started upon release - const click_indicator = document.getElementById("click-indicator")! as HTMLImageElement; - click_indicator.onload = () => { - click_indicator.onload = null; - // FIXME: some event handlers cancel propagation - document.addEventListener("click", Client.handleClickIndicator); - document.addEventListener("touchend", Client.handleClickIndicator); - }; - click_indicator.src = stendhal.paths.gui + "/click_indicator.png"; } toggleSound() { @@ -493,22 +477,4 @@ export class Client { // use Stendhal's built-in cursor for entire page (e.target as HTMLElement).style.cursor = "url(" + stendhal.paths.sprites + "/cursor/normal.png) 1 3, auto"; } - - static handleClickIndicator(e: Event) { - if (!stendhal.config.getBoolean("input.click.indicator")) { - return; - } - if (Client.click_indicator_id !== undefined) { - clearTimeout(Client.click_indicator_id); - Client.click_indicator_id = undefined; - } - const pos = stendhal.data.html.extractPosition(e); - const click_indicator = document.getElementById("click-indicator")! as HTMLImageElement; - click_indicator.style["left"] = (pos.pageX - (click_indicator.width / 2)) + "px"; - click_indicator.style["top"] = (pos.pageY - (click_indicator.height / 2)) + "px"; - click_indicator.style["display"] = "inline"; - Client.click_indicator_id = setTimeout(function() { - click_indicator.style["display"] = "none"; - }, 300); - } } diff --git a/srcjs/stendhal/ui/ViewPort.ts b/srcjs/stendhal/ui/ViewPort.ts index 544cee23da..f16bd7a588 100644 --- a/srcjs/stendhal/ui/ViewPort.ts +++ b/srcjs/stendhal/ui/ViewPort.ts @@ -570,8 +570,6 @@ export class ViewPort { stendhal.ui.touch.unsetHeldItem(); stendhal.ui.touch.unsetOrigin(); } - // execute here because "touchend" event propagation is cancelled on the veiwport - Client.handleClickIndicator(e); } onContentMenu(e: MouseEvent) { diff --git a/srcjs/stendhal/ui/dialog/SettingsDialog.ts b/srcjs/stendhal/ui/dialog/SettingsDialog.ts index 499ff2beed..7dfed05d13 100644 --- a/srcjs/stendhal/ui/dialog/SettingsDialog.ts +++ b/srcjs/stendhal/ui/dialog/SettingsDialog.ts @@ -126,9 +126,6 @@ export class SettingsDialog extends DialogContentComponent { undefined, "ui/notify_up", "null"); chk_pvtsnd.checked = stendhal.config.get("event.pvtmsg.sound") === "ui/notify_up"; - this.createCheckBox("chk_clickindicator", "input.click.indicator", - "Displaying clicks", "Not displaying clicks"); - this.createCheckBox("chk_pathfinding", "client.pathfinding", "Pathfinding on ground enabled", "Pathfinding on ground disabled"); diff --git a/srcjs/stendhal/util/ConfigManager.ts b/srcjs/stendhal/util/ConfigManager.ts index 5cf9a3b182..78a047be8c 100644 --- a/srcjs/stendhal/util/ConfigManager.ts +++ b/srcjs/stendhal/util/ConfigManager.ts @@ -51,7 +51,6 @@ export class ConfigManager { "gamescreen.nonude": "false", "gamescreen.shadows": "true", "gamescreen.speech.creature": "true", - "input.click.indicator": "false", "input.movecont": "false", //"input.doubleclick": "false", "action.item.doubleclick": "false", From e964352fe940a3f706b9dad0483ab24291814b97 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 15:00:44 -0800 Subject: [PATCH 03/20] Make Monogenes respond to both "building" & "buildings" --- src/games/stendhal/server/maps/quests/MeetMonogenes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/games/stendhal/server/maps/quests/MeetMonogenes.java b/src/games/stendhal/server/maps/quests/MeetMonogenes.java index 158cc6c4c9..062a865222 100644 --- a/src/games/stendhal/server/maps/quests/MeetMonogenes.java +++ b/src/games/stendhal/server/maps/quests/MeetMonogenes.java @@ -122,7 +122,7 @@ public class MeetMonogenes extends AbstractQuest { "That's right, like that! Now, I can show you a #map or direct you to the #bank, the #library, the #tavern, the #temple, the #blacksmith, the #bakery, or the old #village."); npc.addReply( - "buildings", + "building", "I can show you a #map or direct you to the #bank, the #library, the #tavern, the #temple, the #blacksmith, the #bakery, the #public #chest or the old #village."); npc.add( From 9cc0648272857a9af72de380872bc215bec197f7 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 15:12:55 -0800 Subject: [PATCH 04/20] Disable browser double-tap zoom Interferes with dpad & double-tap items. --- srcjs/stendhal.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/srcjs/stendhal.css b/srcjs/stendhal.css index 4e2a3ba86c..b422699b48 100644 --- a/srcjs/stendhal.css +++ b/srcjs/stendhal.css @@ -8,6 +8,11 @@ overflow: hidden; } +/* disable double-tap zoom in browsers that support it */ +html { + touch-action: manipulation; +} + /* disable pull down refresh in browsers that support it */ html, body { overscroll-behavior: none; From 2605e35066fb82d48d215bee86d82e6a4905c248 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 15:34:31 -0800 Subject: [PATCH 05/20] Prevent dialog window title bar placement outside browser page https://github.com/arianne/stendhal/issues/602 --- srcjs/stendhal/ui/toolkit/FloatingWindow.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/srcjs/stendhal/ui/toolkit/FloatingWindow.ts b/srcjs/stendhal/ui/toolkit/FloatingWindow.ts index cd377181fc..458dad2d5e 100644 --- a/srcjs/stendhal/ui/toolkit/FloatingWindow.ts +++ b/srcjs/stendhal/ui/toolkit/FloatingWindow.ts @@ -163,8 +163,12 @@ export class FloatingWindow extends Component { window.removeEventListener("mouseup", this.onMouseUpDuringDragListener, true); window.removeEventListener("touchmove", this.onMouseMovedDuringDragListener, true); window.removeEventListener("touchend", this.onMouseUpDuringDragListener, true); + this.onMoved(); } + /** + * Keeps dialog window within browser page. + */ private checkPos(): any { if (this.content) { this.content.onMoved(); From 741bface9b4d203e4ceb142755e5e260e93964b8 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 18:24:48 -0800 Subject: [PATCH 06/20] Add "complete" to known chat options --- .../stendhal/server/entity/npc/ConversationPhrases.java | 2 +- src/games/stendhal/server/events/ChatOptionsEvent.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/games/stendhal/server/entity/npc/ConversationPhrases.java b/src/games/stendhal/server/entity/npc/ConversationPhrases.java index dd44f9853b..a6b4215bac 100644 --- a/src/games/stendhal/server/entity/npc/ConversationPhrases.java +++ b/src/games/stendhal/server/entity/npc/ConversationPhrases.java @@ -67,7 +67,7 @@ public class ConversationPhrases { public static final List PURCHASE_MESSAGES = Arrays.asList("buy", "purchase"); public static final ImmutableSet KNOWN = ImmutableSet.of("hello", "help", "job", - "task", "done", "another", "offer", "yes", "no", "bye", "buy", "sell", "heal"); + "task", "complete", "done", "another", "offer", "yes", "no", "bye", "buy", "sell", "heal"); /** * Combine a string collection (list) with additional strings. diff --git a/src/games/stendhal/server/events/ChatOptionsEvent.java b/src/games/stendhal/server/events/ChatOptionsEvent.java index aa693b9ae6..ef92a48656 100644 --- a/src/games/stendhal/server/events/ChatOptionsEvent.java +++ b/src/games/stendhal/server/events/ChatOptionsEvent.java @@ -47,8 +47,9 @@ public class ChatOptionsEvent extends RPEvent { SORT_INDEX.put("Yes", 11); SORT_INDEX.put("No", 12); SORT_INDEX.put("Another", 21); - SORT_INDEX.put("Done", 22); - SORT_INDEX.put("Task", 23); + SORT_INDEX.put("Complete", 22); + SORT_INDEX.put("Done", 23); + SORT_INDEX.put("Task", 24); SORT_INDEX.put("Help", 31); SORT_INDEX.put("Job", 32); SORT_INDEX.put("Offer", 33); From 83077c591ef79a40c17444fd851e5ab66d1ad4c2 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 18:25:22 -0800 Subject: [PATCH 07/20] Add "heal" to ChatOptionsEvent.SORT_INDEX --- src/games/stendhal/server/events/ChatOptionsEvent.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/games/stendhal/server/events/ChatOptionsEvent.java b/src/games/stendhal/server/events/ChatOptionsEvent.java index ef92a48656..c169096beb 100644 --- a/src/games/stendhal/server/events/ChatOptionsEvent.java +++ b/src/games/stendhal/server/events/ChatOptionsEvent.java @@ -55,6 +55,7 @@ public class ChatOptionsEvent extends RPEvent { SORT_INDEX.put("Offer", 33); SORT_INDEX.put("Buy ...", 34); SORT_INDEX.put("Sell ...", 35); + SORT_INDEX.put("Heal", 41); SORT_INDEX.put("Bye", 9999); } From 54068a796f4d01ba1a480e5182ce2fbb33d95248 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 18:42:18 -0800 Subject: [PATCH 08/20] Add ChatInputComponent to singletons --- srcjs/stendhal/SingletonRepo.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/srcjs/stendhal/SingletonRepo.ts b/srcjs/stendhal/SingletonRepo.ts index 73d26fe186..ac1197c277 100644 --- a/srcjs/stendhal/SingletonRepo.ts +++ b/srcjs/stendhal/SingletonRepo.ts @@ -27,6 +27,8 @@ import { Paths } from "./data/Paths"; import { SpriteStore, store } from "./data/SpriteStore"; import { TileStore } from "./data/TileStore"; +import { ui } from "./ui/UI"; +import { UIComponentEnum } from "./ui/UIComponentEnum"; import { HTMLManager } from "./ui/HTMLManager"; import { Inventory } from "./ui/Inventory"; import { KeyHandler } from "./ui/KeyHandler"; @@ -35,6 +37,8 @@ import { SoundManager } from "./ui/SoundManager"; import { TouchHandler } from "./ui/TouchHandler"; import { ViewPort } from "./ui/ViewPort"; +import { ChatInputComponent } from "./ui/component/ChatInputComponent"; + export class SingletonRepo { @@ -46,6 +50,10 @@ export class SingletonRepo { return CacheManager.get(); } + static getChatInput(): ChatInputComponent { + return ui.get(UIComponentEnum.ChatInput) as ChatInputComponent; + } + static getClient(): Client { return Client.get(); } From abbe0bac012ad7a8cc661917fe62b2384db7fcb3 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 18:43:12 -0800 Subject: [PATCH 09/20] Add chat options ending with ellipis to chat input instead of sending event --- srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts b/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts index 3cb6218617..85635c21d0 100644 --- a/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts +++ b/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts @@ -11,6 +11,7 @@ import { DialogContentComponent } from "../toolkit/DialogContentComponent"; import { Chat } from "../../util/Chat"; +import { singletons } from "../../SingletonRepo"; declare var marauroa: any; declare var stendhal: any; @@ -89,11 +90,19 @@ export class ChatOptionsDialog extends DialogContentComponent { } private onButtonPressed(keyword: string) { - const action = { - "type": "chat", - "text": keyword - } as any; - marauroa.clientFramework.sendAction(action); + if (keyword.endsWith("...")) { + // add to chat input instead of sending text + while (keyword.endsWith(".")) { + keyword = keyword.substring(0, keyword.length-1); + } + singletons.getChatInput().setText(keyword); + } else { + const action = { + "type": "chat", + "text": keyword + } as any; + marauroa.clientFramework.sendAction(action); + } this.close(); } } From 197c85541b9171382b0d5e5c1fb5fab5fb22dd35 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 18:47:38 -0800 Subject: [PATCH 10/20] Remember executed chat options in chat history --- srcjs/stendhal/ui/component/ChatInputComponent.ts | 2 +- srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/srcjs/stendhal/ui/component/ChatInputComponent.ts b/srcjs/stendhal/ui/component/ChatInputComponent.ts index 535bfe9d03..7a395b63ef 100644 --- a/srcjs/stendhal/ui/component/ChatInputComponent.ts +++ b/srcjs/stendhal/ui/component/ChatInputComponent.ts @@ -113,7 +113,7 @@ export class ChatInputComponent extends Component { } } - private remember(text: string) { + public remember(text: string) { if (this.history.length > 100) { this.history.shift(); } diff --git a/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts b/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts index 85635c21d0..b56ae00cb5 100644 --- a/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts +++ b/srcjs/stendhal/ui/dialog/ChatOptionsDialog.ts @@ -102,6 +102,8 @@ export class ChatOptionsDialog extends DialogContentComponent { "text": keyword } as any; marauroa.clientFramework.sendAction(action); + // add to chat history + singletons.getChatInput().remember(keyword); } this.close(); } From a18c93b323cd3fe446bab958939cb598147c2d1a Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 19:35:28 -0800 Subject: [PATCH 11/20] Thumbs up/down & wave emojis --- data/sprites/emoji/emojis.json | 14 +++++++++++++- data/sprites/emoji/thumbsdown.png | Bin 0 -> 199 bytes data/sprites/emoji/thumbsup.png | Bin 0 -> 195 bytes data/sprites/emoji/wave.png | Bin 0 -> 227 bytes 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 data/sprites/emoji/thumbsdown.png create mode 100644 data/sprites/emoji/thumbsup.png create mode 100644 data/sprites/emoji/wave.png diff --git a/data/sprites/emoji/emojis.json b/data/sprites/emoji/emojis.json index 4c86d34246..a6cb16bb43 100644 --- a/data/sprites/emoji/emojis.json +++ b/data/sprites/emoji/emojis.json @@ -40,7 +40,11 @@ "musicnotequarter", "musicnoteeighth", "musicnotesasc", - "musicnotesdesc" + "musicnotesdesc", + + "thumbsup", + "thumbsdown", + "wave" ], "emojimap": @@ -245,12 +249,20 @@ ":nervous:": "sweat", "💧": "sweat", + ":thumbdown:": "thumbsdown", + "👎": "thumbsdown", + + ":thumbup:": "thumbsup", + "👍": "thumbsup", + ":p": "tongue", ":P": "tongue", ":-p": "tongue", ":-P": "tongue", "😛": "tongue", + "👋": "wave", + ":winking:": "wink", ";)": "wink", ";-)": "wink", diff --git a/data/sprites/emoji/thumbsdown.png b/data/sprites/emoji/thumbsdown.png new file mode 100644 index 0000000000000000000000000000000000000000..5597edd3521b8175f0a822adf55d67274b49754a GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh-3?!F4n4ALQ1o(uwx)=DQN7;UT+5F>9-2d(7 zpWg1^zIaU?D9cz9hBKJ9 uvMax}F0&PX=qQ%HZh!Hs&F1;DpRs+~$9>gtI(s?LItEWyKbLh*2~7Y!JWNCY literal 0 HcmV?d00001 diff --git a/data/sprites/emoji/thumbsup.png b/data/sprites/emoji/thumbsup.png new file mode 100644 index 0000000000000000000000000000000000000000..60771470567b64adeb0740174b15211fdc56c093 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh-3?!F4n4ALQ1o(uwx)=DQN7;UT+5F>9+^4rY z{%<#TjpaE6lw~Xl@(X5gcy=QV$cguKaSY+Oo}A#o+QVcptwTvpY_XTZ6vZc69Lrc+ zeOXx@XSGh9!ZUS_16OOz93Iw#O%7oTCUqNiEL|kRAsQUS7gEI3$*C>re6*#vm$|o> ox3S9A+1Xj~nITsb!zO7)lRMnECuxa_0Ig#1boFyt=akR{087d}2LJ#7 literal 0 HcmV?d00001 diff --git a/data/sprites/emoji/wave.png b/data/sprites/emoji/wave.png new file mode 100644 index 0000000000000000000000000000000000000000..7f00355f99915b95d460834d02f3231775f9b3f3 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh-3?!F4n4AKnBm#UwT-^(N(xYs@zHI(+Ck`m~ zf4ljow>zdZ$91fA`3U4QmIV0)GdMiEkp|>cdb&7`oKpD~t~+qc{>j1VFYlLK z*r)T8!(;LZ3+3FD=*QAo`;ESE?$$Bnf67&# Date: Thu, 21 Dec 2023 19:46:51 -0800 Subject: [PATCH 12/20] Slightly improved wave emoji --- data/sprites/emoji/wave.png | Bin 227 -> 224 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/sprites/emoji/wave.png b/data/sprites/emoji/wave.png index 7f00355f99915b95d460834d02f3231775f9b3f3..60ad40e7bce42a0cea603312b5170752263cea59 100644 GIT binary patch delta 185 zcmV;q07n1g0pJ0UFMs&lUiImN|F<^)008psxRirlBt1$P00001bW%=J06^y0W&i*H zc1c7*R0!8)&M^vrFboCIWa!>1=-gV|TTfspxMuMHD!7aH2b)@4%=GvP;RCEtM*$d9 z#DKvTGGYj=7PjWEF6*w^HhQ-gIbYPIb6>Rl>Eq-tBWXWGvNAO1497^m9OAfBk_d1( nT++;<$;~P^ky5#q`dTtPPOA`jH^!lf00000NkvXXu0mjftI1K^ delta 188 zcmV;t07L)a0pkIXFMsvvgZSKD00030w>R?bxRirlh^<8N00001bW%=J06^y0W&i*H zc}YY;R0!8q&Or) Date: Thu, 21 Dec 2023 20:46:15 -0800 Subject: [PATCH 13/20] Register producer activities with chat options --- .../npc/behaviour/adder/ProducerAdder.java | 7 +++++++ .../server/events/ChatOptionsEvent.java | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/games/stendhal/server/entity/npc/behaviour/adder/ProducerAdder.java b/src/games/stendhal/server/entity/npc/behaviour/adder/ProducerAdder.java index ff92d3bab9..436c5f6d18 100644 --- a/src/games/stendhal/server/entity/npc/behaviour/adder/ProducerAdder.java +++ b/src/games/stendhal/server/entity/npc/behaviour/adder/ProducerAdder.java @@ -35,6 +35,7 @@ import games.stendhal.server.entity.npc.condition.SentenceHasErrorCondition; import games.stendhal.server.entity.npc.condition.TransitionMayBeExecutedCondition; import games.stendhal.server.entity.npc.fsm.Engine; import games.stendhal.server.entity.player.Player; +import games.stendhal.server.events.ChatOptionsEvent; public class ProducerAdder { private static final Logger logger = Logger.getLogger(ProducerAdder.class); @@ -73,6 +74,12 @@ public class ProducerAdder { producerRegister.add(npcName, behaviour); npc.put("job_producer", ""); + final String activity = behaviour.getProductionActivity(); + // add to NPC's known chat options + npc.addKnownChatOptions(activity); + // add to known merchant/producer activities + ChatOptionsEvent.addMerchantActivity(activity); + /* The Player greets the NPC. * The NPC is not currently producing for player (not started, is rejected, or is complete) */ engine.add(ConversationStates.IDLE, diff --git a/src/games/stendhal/server/events/ChatOptionsEvent.java b/src/games/stendhal/server/events/ChatOptionsEvent.java index c169096beb..8927122338 100644 --- a/src/games/stendhal/server/events/ChatOptionsEvent.java +++ b/src/games/stendhal/server/events/ChatOptionsEvent.java @@ -11,6 +11,7 @@ ***************************************************************************/ package games.stendhal.server.events; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -59,6 +60,11 @@ public class ChatOptionsEvent extends RPEvent { SORT_INDEX.put("Bye", 9999); } + private static final List merchant_activities = new ArrayList() {{ + add("buy"); + add("sell"); + }}; + private String trigger; private String label; private String options = ""; @@ -69,7 +75,7 @@ public class ChatOptionsEvent extends RPEvent { String label = Grammar.makeUpperCaseWord(trigger); String options = ""; - if (trigger.equals("buy") || trigger.equals("sell") || trigger.equals("")) { + if (merchant_activities.contains(trigger) || trigger.equals("")) { label = label + " ..."; options = "params"; } @@ -174,4 +180,15 @@ public class ChatOptionsEvent extends RPEvent { rpclass.addAttribute(NPC, Type.STRING); rpclass.addAttribute(OPTIONS, Type.VERY_LONG_STRING); } + + /** + * Add a word or phrase to list of known merchant/producer activities. + */ + public static void addMerchantActivity(final String activity) { + if (ChatOption.merchant_activities.contains(activity)) { + return; + } + ChatOption.merchant_activities.add(activity); + // XXX: should it also be added to ChatOption.SORT_INDEX? + } } From 93178b8f09910ae69ef7fb5f262fd812debdeafb Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 21:02:08 -0800 Subject: [PATCH 14/20] Send chat options event whenever NPC becomes idle --- src/games/stendhal/server/entity/npc/SpeakerNPC.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/games/stendhal/server/entity/npc/SpeakerNPC.java b/src/games/stendhal/server/entity/npc/SpeakerNPC.java index 2039393c3e..8c98f7bfb0 100644 --- a/src/games/stendhal/server/entity/npc/SpeakerNPC.java +++ b/src/games/stendhal/server/entity/npc/SpeakerNPC.java @@ -338,6 +338,7 @@ public class SpeakerNPC extends PassiveNPC { * the entity with whom the NPC should be talking. */ public void setAttending(final RPEntity rpentity) { + final RPEntity was_attending = attending; attending = rpentity; lastMessageTurn = SingletonRepository.getRuleProcessor().getTurn(); if (rpentity != null) { @@ -348,6 +349,10 @@ public class SpeakerNPC extends PassiveNPC { } setIdea(null); learnedWordsInCurrentConversation = new HashSet<>(); + // send chat option event when NPC becomes "idle" + if (was_attending instanceof Player) { + engine.addChatOptionsEvent((Player) was_attending); + } } // set facing direction @@ -478,11 +483,7 @@ public class SpeakerNPC extends PassiveNPC { } onGoodbye(attending); engine.setCurrentState(ConversationStates.IDLE); - final Player player = attending instanceof Player ? (Player) attending : null; setAttending(null); - if (player != null) { - engine.addChatOptionsEvent(player); - } } public boolean inConversationRange() { From 47cc43572f01ef0ac5681b811b5e85669c330582 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 21 Dec 2023 23:54:21 -0800 Subject: [PATCH 15/20] Highlight travel log tabs when selected --- srcjs/stendhal/event/ProgressStatusEvent.ts | 2 ++ srcjs/stendhal/ui/dialog/TravelLogDialog.ts | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/srcjs/stendhal/event/ProgressStatusEvent.ts b/srcjs/stendhal/event/ProgressStatusEvent.ts index f18fb2047d..b77995d4bc 100644 --- a/srcjs/stendhal/event/ProgressStatusEvent.ts +++ b/srcjs/stendhal/event/ProgressStatusEvent.ts @@ -38,12 +38,14 @@ export class ProgressStatusEvent extends RPEvent { travelLogDialog = new TravelLogDialog(dataItems); new FloatingWindow("Travel Log", travelLogDialog, dstate.x, dstate.y).setId("travellog"); } + travelLogDialog.updateTabs(); return; } if (!travelLogDialog) { return; } + travelLogDialog.updateTabs(); if (!this["item"]) { if (progressType === "repeatable") { diff --git a/srcjs/stendhal/ui/dialog/TravelLogDialog.ts b/srcjs/stendhal/ui/dialog/TravelLogDialog.ts index f01fa55d28..d14f667fb4 100644 --- a/srcjs/stendhal/ui/dialog/TravelLogDialog.ts +++ b/srcjs/stendhal/ui/dialog/TravelLogDialog.ts @@ -67,12 +67,24 @@ export class TravelLogDialog extends DialogContentComponent { }); } + public updateTabs() { + document.querySelectorAll(".progressTypeButton").forEach((tab) => { + const element = document.getElementById(tab.id)! as HTMLElement; + if (element.id == this.currentProgressType) { + // highlight selected tab + element.style.setProperty("background-color", "#b3b3b3"); + } else { + element.style.removeProperty("background-color"); + } + }); + } private onProgressTypeButtonClick(event: Event) { // clear details when changing category this.refreshDetails(); this.currentProgressType = (event.target as HTMLElement).id; + this.updateTabs(); var action = { "type": "progressstatus", "progress_type": this.currentProgressType From 8a1e83f5731365d5e700cc2967a8e7e684b190a3 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 22 Dec 2023 23:31:38 -0800 Subject: [PATCH 16/20] Lighten sickle sprite --- data/sprites/items/axe/sickle.png | Bin 330 -> 331 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/sprites/items/axe/sickle.png b/data/sprites/items/axe/sickle.png index 46bc0f4728cf507eb68cf9f2df2936e9408b8e32..b4f447af9ae959a3bb1ffba47063443c76dc5821 100644 GIT binary patch delta 296 zcmV+@0oVS@0?PuBEPsTAgqE6>kdlwm)Y3&T1*)&A0002Awz6_^a#uhbX<#j%p`DVD zh<;RAG3*Zfys04oVT<2$~0mq?V3bB2+VYmmb ueOlqRoQmNOq9H#QRiGl&fvfx?*X9j^`3GJ2Q>YXG0000Negs#bWcGHm+k$B00001bW%=J06^y0W&i*Hvq?lj zR5;7M)7cV&FboCIhNekTT2}r4Pc;>1Bmv8d!+nE$CWOtoYk$LQe%I}qV^Zprq9h49 z=v$clIARGkd%-z-9OD{{-U^0Ha{9d@kO(t_laG-;yD=AGfJf=Sha%Jn&Z;j0I|WGh zjyog;Okcpf0h}mW@YwFa4cWWyaN1s>u>$}R6aWJz(g1ePb$*5#a2)zYiT%3`!!2;_ t(+c Date: Fri, 22 Dec 2023 23:52:12 -0800 Subject: [PATCH 17/20] Make Alrak understand both singular & plural forms of "kobolds" & "supplies" --- src/games/stendhal/server/maps/quests/ObsidianKnife.java | 4 ++-- .../stendhal/server/maps/wofol/blacksmith/BlacksmithNPC.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/games/stendhal/server/maps/quests/ObsidianKnife.java b/src/games/stendhal/server/maps/quests/ObsidianKnife.java index bb8cb1e8d9..fb81ceef64 100644 --- a/src/games/stendhal/server/maps/quests/ObsidianKnife.java +++ b/src/games/stendhal/server/maps/quests/ObsidianKnife.java @@ -1,6 +1,6 @@ /* $Id$ */ /*************************************************************************** - * (C) Copyright 2003-2010 - Stendhal * + * (C) Copyright 2003-2023 - Stendhal * *************************************************************************** *************************************************************************** * * @@ -255,7 +255,7 @@ public class ObsidianKnife extends AbstractQuest { // Player asks what supplies he needs, and a random choice of what he // wants is made. npc.add(ConversationStates.QUEST_ITEM_QUESTION, - "supplies", + "supply", null, ConversationStates.QUEST_OFFERED, null, diff --git a/src/games/stendhal/server/maps/wofol/blacksmith/BlacksmithNPC.java b/src/games/stendhal/server/maps/wofol/blacksmith/BlacksmithNPC.java index 5df7ae65b9..8d17e67755 100644 --- a/src/games/stendhal/server/maps/wofol/blacksmith/BlacksmithNPC.java +++ b/src/games/stendhal/server/maps/wofol/blacksmith/BlacksmithNPC.java @@ -89,7 +89,7 @@ public class BlacksmithNPC implements ZoneConfigurator { addJob("I am a blacksmith. I was a mountain dwarf but I left that lot behind me. Good riddance, I say!"); addHelp("I've heard rumours of a fearsome creature living below these mines, and his small minions, evil imps. I wouldn't go down there even to look, if I were you. It's very dangerous."); addOffer("#Wrvil is the one who runs a shop, not me. I still #make the occasional #bobbin if you need one, though."); - addReply("kobolds", "You know, those odd furry creatures. Don't get much conversation out of any except #Wrvil."); + addReply("kobold", "You know, those odd furry creatures. Don't get much conversation out of any except #Wrvil."); addReply("Wrvil", "He runs a trading business not far from here. I used to make the odd item for him, but don't have any energy left."); addGoodbye(); From e462173cd75e4a7e0af8812c70c0ada8a826f467 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Fri, 22 Dec 2023 23:54:17 -0800 Subject: [PATCH 18/20] Add "challenge" to known chat options --- src/games/stendhal/server/entity/npc/ConversationPhrases.java | 3 ++- src/games/stendhal/server/events/ChatOptionsEvent.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/games/stendhal/server/entity/npc/ConversationPhrases.java b/src/games/stendhal/server/entity/npc/ConversationPhrases.java index a6b4215bac..2b3c3cbb36 100644 --- a/src/games/stendhal/server/entity/npc/ConversationPhrases.java +++ b/src/games/stendhal/server/entity/npc/ConversationPhrases.java @@ -67,7 +67,8 @@ public class ConversationPhrases { public static final List PURCHASE_MESSAGES = Arrays.asList("buy", "purchase"); public static final ImmutableSet KNOWN = ImmutableSet.of("hello", "help", "job", - "task", "complete", "done", "another", "offer", "yes", "no", "bye", "buy", "sell", "heal"); + "task", "complete", "done", "another", "offer", "yes", "no", "bye", "buy", "sell", "heal", + "challenge"); /** * Combine a string collection (list) with additional strings. diff --git a/src/games/stendhal/server/events/ChatOptionsEvent.java b/src/games/stendhal/server/events/ChatOptionsEvent.java index 8927122338..803b27cf79 100644 --- a/src/games/stendhal/server/events/ChatOptionsEvent.java +++ b/src/games/stendhal/server/events/ChatOptionsEvent.java @@ -51,6 +51,7 @@ public class ChatOptionsEvent extends RPEvent { SORT_INDEX.put("Complete", 22); SORT_INDEX.put("Done", 23); SORT_INDEX.put("Task", 24); + SORT_INDEX.put("Challenge", 25); SORT_INDEX.put("Help", 31); SORT_INDEX.put("Job", 32); SORT_INDEX.put("Offer", 33); @@ -60,6 +61,7 @@ public class ChatOptionsEvent extends RPEvent { SORT_INDEX.put("Bye", 9999); } + // common triggers for merchants & producers private static final List merchant_activities = new ArrayList() {{ add("buy"); add("sell"); From 2793ab23827801e1a79159968ed9c4c204f3e965 Mon Sep 17 00:00:00 2001 From: Hendrik Brummermann Date: Mon, 25 Dec 2023 00:17:20 +0100 Subject: [PATCH 19/20] avoid creation of "{{...}}"-subclass for initialisation --- .../stendhal/server/events/ChatOptionsEvent.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/games/stendhal/server/events/ChatOptionsEvent.java b/src/games/stendhal/server/events/ChatOptionsEvent.java index 803b27cf79..3db8f2b6d5 100644 --- a/src/games/stendhal/server/events/ChatOptionsEvent.java +++ b/src/games/stendhal/server/events/ChatOptionsEvent.java @@ -11,8 +11,9 @@ ***************************************************************************/ package games.stendhal.server.events; -import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; @@ -62,10 +63,8 @@ public class ChatOptionsEvent extends RPEvent { } // common triggers for merchants & producers - private static final List merchant_activities = new ArrayList() {{ - add("buy"); - add("sell"); - }}; + private static final List merchantActivities = new LinkedList<>(Arrays.asList("buy", "sell")); + private String trigger; private String label; @@ -77,7 +76,7 @@ public class ChatOptionsEvent extends RPEvent { String label = Grammar.makeUpperCaseWord(trigger); String options = ""; - if (merchant_activities.contains(trigger) || trigger.equals("")) { + if (merchantActivities.contains(trigger) || trigger.equals("")) { label = label + " ..."; options = "params"; } @@ -187,10 +186,10 @@ public class ChatOptionsEvent extends RPEvent { * Add a word or phrase to list of known merchant/producer activities. */ public static void addMerchantActivity(final String activity) { - if (ChatOption.merchant_activities.contains(activity)) { + if (ChatOption.merchantActivities.contains(activity)) { return; } - ChatOption.merchant_activities.add(activity); + ChatOption.merchantActivities.add(activity); // XXX: should it also be added to ChatOption.SORT_INDEX? } } From d9cd7e774b79c165e7f028609592472af9f04fe7 Mon Sep 17 00:00:00 2001 From: Hendrik Brummermann Date: Mon, 25 Dec 2023 00:29:12 +0100 Subject: [PATCH 20/20] fixed Plinks text on question completion --- src/games/stendhal/server/maps/quests/PlinksToy.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/games/stendhal/server/maps/quests/PlinksToy.java b/src/games/stendhal/server/maps/quests/PlinksToy.java index 24624ee11f..69a82af872 100644 --- a/src/games/stendhal/server/maps/quests/PlinksToy.java +++ b/src/games/stendhal/server/maps/quests/PlinksToy.java @@ -81,9 +81,9 @@ public class PlinksToy implements QuestManuscript { step2(); quest.complete() - .greet("Ah, I see, you have enough coal to keep my BBQ on! Is it for me?") - .respondToReject("Well then, hopefully someone else will help me before my BBQ goes out.") - .respondToAccept("You found him! *hugs teddy* Thank you, thank you! *smile*") + .greet("You found my teddy! Please, please, may I have him back?") + .respondToReject("*snifff*") + .respondToAccept("*hugs teddy* Thank you, thank you! *smile*") .rewardWith(new IncreaseXPAction(20)) .rewardWith(new IncreaseKarmaAction(10));