From b78b54477ac9881241c4b3a6498a4258d3830e63 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 9 Jul 2024 17:29:38 -0700 Subject: [PATCH 1/4] Hammer detail layer for smith-type NPCs Hammer image from blacksmithnpc (OGA BY 3.0): https://opengameart.org/node/82370 --- .../detail/016-blacksmith_hammer.xcf.bz2 | Bin 0 -> 28932 bytes data/sprites/outfit/detail/016-rear.png | Bin 0 -> 407 bytes data/sprites/outfit/detail/016.png | Bin 0 -> 479 bytes data/sprites/outfit/outfits.json | 2 +- doc/sources/graphics-outfit.txt | 27 +++++++++--------- 5 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 data/sprites/outfit/detail/016-blacksmith_hammer.xcf.bz2 create mode 100644 data/sprites/outfit/detail/016-rear.png create mode 100644 data/sprites/outfit/detail/016.png diff --git a/data/sprites/outfit/detail/016-blacksmith_hammer.xcf.bz2 b/data/sprites/outfit/detail/016-blacksmith_hammer.xcf.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..4185a7995f3379d325d13a2c1970349c7b3c0613 GIT binary patch literal 28932 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

Mq6MoT7w3Woq%t>DU8CX)1uHd%8 z_Fjx$%xN#coN-LC4$i}$C}~Pb*+HkAA+GY^C=G(ZPY$?V!_!@#e+j$Zmnim$%&`N7 zQBkw^sO*7tbi?x_;s{B_cF#+0LL`R$**E$o@C9U9g`Eb1WR*aA&NQ+a?>SN6J zOZy5u4$)UL#u#roAU|DN@-|~aH4Pl5b>VAwd`1}cMX$3}%(`YbCB_aF)v-l}zveuv z0|d8Ok99WW)ityaG%g@3m#Z8@op?f~d8j}8L}wTDpQJ!!u0K(V5?J8V;WLU7X}y)% zMwyrYGe&NUZh0t7tmbW%4p5>b6yH$W#car_Bx93s z+3{3)dc(I{U4e%*k=@%6UwuT(g38UXdvEvnt?{0(ZzWj$_O?_A%%Qs3mP${07szo_ zHTV_qki#$!$l#{%!r|Tz{e_Li$M#V^eAHtRfdWjHe^YKz1=9+`u(hj*ITZ2uB@aJM zdZUe~WZuh^4AN^~|-Ws0A$p&9A^xgZ)m{lT; zrd22YkkN(;*}t+^RjI{{x@RXkA`s62x&mV0pD+(p zWct3XhJ2~JZ5QYUCy;l8hzqJA;{k5xi`9F#3)cZyf$+KwzaWM5;(}n_viobYzo^K> zlOzUYQ{eq@HQq{QVsd2@lP7Oqd(P%-G8+{UCZB!b;ptjh7E)2?ksR)Pa?KSo=D|ZK z0ET?&G-Zs&7r;8}P^e{ps{Y?q&-VVV=nvgIq{-S+=|_4}x_Bw|03){8^ZjTCYos5=~Z9QqP;UCX8bjM01F~4+bROg-An!=CTrpDyQ;}@he~DkZPaDRMpbBQkr{m?C)s-c5@JuV0Q(8Ep+3ZYtn15{skLQxB1(ul}BjtgG!ttJDr;Xq&y)~2$wN3 zmttq!HPskwpSmxf$~79#Gt@ zZ@orQKgB~iuCy8I7r46FZ+XWbeW`9<`w*3HVE#j1s!H*l>T1BN7IyzS>mhCV&?9XI z-q{hRN(`dI%izuFo7Ct@<=i>9XasTZ*GB^k7fSD~ zdv9#AXhg+j)`subw#ucMF~8>_Uo!B816;jF7rwPn23*f?N)azjy%K88Uv|-n(mt^p z3R|XZ!8LfuE@3J1%Q^okVvnGot~5?z#%8(gD=E#5e<(jG=v{F7?3be+6Ib2~gNIBp zZS7K)QrII%rNi^M5&9%d^C{jIbRq<&qraCd{FAF48vXS|eUpC`)ioPC%*dF>#fMsQ zmCx>4_R4(0OHx7V)%$9G1Lz&@$POrAO^#mE&v2njrsODna=VJJD=2z4>3{08&B-3T z`mZQQgp94n)?)~$(gjsL$tqKGO^)@^dV|X`2hf3?bZl-*1x-T=HXmFZ9ru&1T^v%f z-!kyLw=XT0Q;7=S`_zq&y_?8vebLdj5=sKgh3J|#1$~1wX6racx zmnG&uWy=BF`jv_kuCmqRT40+;<93SQ1(4dOuVg=rE3?BFQUb)XS+}jF?}Iv7%**+! zpA0mn;4r!=1%qof6lMb+fWuHP2&n!p!TGHN`C zWu+CMimtl-*g@#i9Y)?Rrxg^>+0mkm@NomE>~V+C)h9;vQ@FcdGt)PIQ~RsK#9n_{ z@_xPeOEx>Is%h2xna$Zc@QKg&Y)LvLiIMiJxT|pw1g^Y%%2mlhe){yz$60N(b=t|< z=f2s$k0Rt?G72DYX~i)OfA%jj7{dFD&WwCN6r wmyKAr?j`MDTf{*RxBlRpHI&+X3uw6)xjZiGb7_vgS#s{ZQ#SvV>bQ~r1!0>*&j0`b literal 0 HcmV?d00001 diff --git a/data/sprites/outfit/detail/016-rear.png b/data/sprites/outfit/detail/016-rear.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4123a67d11f6237bce1193cdf8fb26459165fb GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^6Brm68CaNstaX)-YJiktfKQ04dw~y-X)es5rKRPn zAQTuFXliPjnVDH_rC?)YbNlvf>FUrjpbEy4AirP+hi5m^fNT{{7srr_TW@b0<{fen zXnnYK=Ye$(7*?NP=Wr^UVpcTqnv=+qUX3D#78g&~?x3eEF~)WWY)&iZHvibq{AS-x z!xDWKppiDqk1o65c=z2_p9P2ihN)e+Za8(uPOCX>5lPQprO)3q>t<;{d35ZRGZ&3- z8=20JJoBdNjn=il?Y5t_thZnIa&ykjJqcOdWlKcPa;t4m*gt6pkhgWl!oqyVJz2W@ z_C!1}H_cmk;l67ZBhW51FykSobU}Bo_R72irSV1Ohj3I)2#JVu6_xLrLq73 literal 0 HcmV?d00001 diff --git a/data/sprites/outfit/detail/016.png b/data/sprites/outfit/detail/016.png new file mode 100644 index 0000000000000000000000000000000000000000..58a57781baa95b883ede709aebbe88f18a962655 GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0vp^6Brm68CaNstaX)-YJiktfKQ04dw~y-simc5F3b=Z z7-(v0nwgntV`Jm0Aawio?P@CpgU*EQKoyK7L4Lsu4$p3+0ogg8E{-7;x8B|`%s%8G zaqOda-bBARj+Cv7N^DOm^|`){v3JsJ%3k?4>!py@^mDCxm;56$FFgDd_u+{{`+xoz zy&q3@dT-j}#RxR_fa>LqOkq!nt-{JA_rllN}XB>nW*#M&QHJ5qD!T@Si&_KW74=TFu~SUBF&3gz3E$6TFN z{B~W9cInjha((Z1+N+kQS1k@vkGJYA+4=jV?OxgP=*u_n@c#Px?T+N{`0mEd$+4cc z-^I5}=Le*|auw`LTuby2Gs0 zrSmw$y)Qm-ot3Kksb%%rj7i<*)74`#Z)==8Bmcg&rtr{H%_wQna;FJdK0Bhiu5C-x z?e!5V{G%wow$v^1@vN`krg#6le2OFcUb?Ww@{Q@gm#A%Q`cl0{Wi`k$5P1HHJtANC Tk6@mTA&Beg>gTe~DWM4fg%8Ti literal 0 HcmV?d00001 diff --git a/data/sprites/outfit/outfits.json b/data/sprites/outfit/outfits.json index 392dfa86dcf..9bccb61fd79 100644 --- a/data/sprites/outfit/outfits.json +++ b/data/sprites/outfit/outfits.json @@ -1,5 +1,5 @@ { "detail": { - "rear": [1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15] + "rear": [1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] } } diff --git a/doc/sources/graphics-outfit.txt b/doc/sources/graphics-outfit.txt index a4877d0a9b3..b3eeec052de 100644 --- a/doc/sources/graphics-outfit.txt +++ b/doc/sources/graphics-outfit.txt @@ -27,19 +27,20 @@ data/sprites/outfit/body/ data/sprites/outfit/detail/ 000 (empty) -00[1-3] (balloon) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal, https://opengameart.org/node/101299 -004 (bone) Bart Kelsey; CC0; https://opengameart.org/node/3755 -005 (flag) Kimmo Rundelin (kiheru); CC BY-SA 3.0; Stendhal -006 (cane) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal -007 (umbrella) Diligent Dodo (soniccuz), Jordan Irwin (AntumDeluge); CC BY-SA 3.0; https://sourceforge.net/p/arianne/patches/687/ -008 (sword) LordNeo; CC0; https://opengameart.org/node/10878 -009 (knife) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal -010 (spear) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal -011 (bow) Michael Williams (BizmasterStudios); CC BY 3.0; https://opengameart.org/node/66349 -012 (axe) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal -013 (axe) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal -014 (kite shield) Michael Williams (BizmasterStudios); CC BY 3.0; https://opengameart.org/node/64857 -015 (shield) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +00[1-3] (balloon) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal, https://opengameart.org/node/101299 +004 (bone) Bart Kelsey; CC0; https://opengameart.org/node/3755 +005 (flag) Kimmo Rundelin (kiheru); CC BY-SA 3.0; Stendhal +006 (cane) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +007 (umbrella) Diligent Dodo (soniccuz), Jordan Irwin (AntumDeluge); CC BY-SA 3.0; https://sourceforge.net/p/arianne/patches/687/ +008 (sword) LordNeo; CC0; https://opengameart.org/node/10878 +009 (knife) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +010 (spear) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +011 (bow) Michael Williams (BizmasterStudios); CC BY 3.0; https://opengameart.org/node/66349 +012 (axe) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +013 (axe) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +014 (kite shield) Michael Williams (BizmasterStudios); CC BY 3.0; https://opengameart.org/node/64857 +015 (shield) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +016 (blacksmith hammer) Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal, https://opengameart.org/node/82370 data/sprites/outfit/dress/ From c3258009477567d967f66002d3bc0b063a76190f Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 9 Jul 2024 18:50:14 -0700 Subject: [PATCH 2/4] New player selectable hair --- data/sprites/outfit/hair/057.png | Bin 0 -> 890 bytes doc/CHANGES.txt | 1 + doc/sources/graphics-outfit.txt | 1 + src/games/stendhal/common/Outfits.java | 4 ++-- src/js/stendhal/data/OutfitStore.ts | 4 ++-- 5 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 data/sprites/outfit/hair/057.png diff --git a/data/sprites/outfit/hair/057.png b/data/sprites/outfit/hair/057.png new file mode 100644 index 0000000000000000000000000000000000000000..e446dec0868df881036fdebc0bcb72bcc7602713 GIT binary patch literal 890 zcmV-=1BLvFP)ewy3ouEK#ErD|kWG0K&U69@sliNLMZMLQdWE7q z^rHWQgZzs>wu7XSdG*qGd6(=>0lCJ;E7$!V2y6<-yylcu@bl93peZ2pD!5;}at3OO z$Tct9b=_|i;iiCGTfg;L34%=lxi)$E9Mf(YulpgHgZg|XI@MzGWAeiG`_EELeoS80 z*zVsIlOL0pxi;nUMg9YF3Q-Nx{g})bN>PJ!KPJ!m-#zj}a)=-Z_#ycyXy^p0Y0Qrg z3B(ia?lizt8B{1XEHWL>tM4$c)f=v-QLPawUk#|Q%HU&mTGJY$v;mEISu#~^6%>} zjrb86&E#PJU=SSyp}D0&KMor7Lo&K+!zrX%#_s6Q??Xr~m&@gHxm@q7A0U4Y(`Q(c QdH?_b07*qoM6N<$f|>H9od5s; literal 0 HcmV?d00001 diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt index 5f864c97dff..6e94062f9c0 100644 --- a/doc/CHANGES.txt +++ b/doc/CHANGES.txt @@ -9,6 +9,7 @@ Changelog - added music to Athor Island - Mayor Chalmers won't accept experimental sandwiches for Daily Item Quest - touched up and added equipment to many entity sprites +- new player selectable hair *chat* - new offers with Harold are announced in chat diff --git a/doc/sources/graphics-outfit.txt b/doc/sources/graphics-outfit.txt index b3eeec052de..f14f33f2aed 100644 --- a/doc/sources/graphics-outfit.txt +++ b/doc/sources/graphics-outfit.txt @@ -242,6 +242,7 @@ data/sprites/outfit/hair/ 054 diamonddmgirl, Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal, https://opengameart.org/node/72198 055 Yamilian; CC BY-SA 3.0; https://opengameart.org/node/11445 056 Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal +057 Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal 998 Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal 999 diamonddmgirl, bleutailfly, Jordan Irwin (AntumDeluge); OGA BY 3.0; Stendhal, https://opengameart.org/node/72198 diff --git a/src/games/stendhal/common/Outfits.java b/src/games/stendhal/common/Outfits.java index 83d96d62956..02e080741eb 100644 --- a/src/games/stendhal/common/Outfits.java +++ b/src/games/stendhal/common/Outfits.java @@ -1,6 +1,6 @@ /* $Id$ */ /*************************************************************************** - * (C) Copyright 2003-2010 - Stendhal * + * (C) Copyright 2003-2024 - Stendhal * *************************************************************************** *************************************************************************** * * @@ -34,7 +34,7 @@ public class Outfits { public static final int CLOTHES_OUTFITS = 65; /** number of player selectable hair styles */ - public static final int HAIR_OUTFITS = 57; + public static final int HAIR_OUTFITS = 58; /** number of player selectable body shapes */ public static final int BODY_OUTFITS = 3; diff --git a/src/js/stendhal/data/OutfitStore.ts b/src/js/stendhal/data/OutfitStore.ts index 10fbe6abbf6..2ddbc69c055 100644 --- a/src/js/stendhal/data/OutfitStore.ts +++ b/src/js/stendhal/data/OutfitStore.ts @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright © 2003-2023 - Arianne * + * Copyright © 2003-2024 - Arianne * *************************************************************************** * * * This program is free software; you can redistribute it and/or modify * @@ -21,7 +21,7 @@ export class OutfitStore { // player pickable layers private count: {[key: string]: number} = { "hat": 19, - "hair": 57, + "hair": 58, "mask": 9, "eyes": 28, "mouth": 5, From 51ea3d14d127c960194641964308816bb60f2a5d Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 9 Jul 2024 18:53:47 -0700 Subject: [PATCH 3/4] New NPC Tinny https://github.com/arianne/stendhal/issues/256 --- data/conf/zones/deniran.xml | 1 + doc/CHANGES.txt | 1 + .../tannery/LeatherCrafterNPC.java | 93 +++++++++++++++++++ .../tannery/LeatherCrafterNPCTest.java | 72 ++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 src/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPC.java create mode 100644 tests/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPCTest.java diff --git a/data/conf/zones/deniran.xml b/data/conf/zones/deniran.xml index 043d84d280c..9f2390acdf7 100644 --- a/data/conf/zones/deniran.xml +++ b/data/conf/zones/deniran.xml @@ -1429,6 +1429,7 @@ Entrance fee is 10 money + diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt index 6e94062f9c0..784b3d242c2 100644 --- a/doc/CHANGES.txt +++ b/doc/CHANGES.txt @@ -10,6 +10,7 @@ Changelog - Mayor Chalmers won't accept experimental sandwiches for Daily Item Quest - touched up and added equipment to many entity sprites - new player selectable hair +- new NPC Tinny *chat* - new offers with Harold are announced in chat diff --git a/src/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPC.java b/src/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPC.java new file mode 100644 index 00000000000..9f18250dc63 --- /dev/null +++ b/src/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPC.java @@ -0,0 +1,93 @@ +/*************************************************************************** + * Copyright © 2024 - Faiumoni e. V. * + *************************************************************************** + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +package games.stendhal.server.maps.deniran.cityinterior.tannery; + +import java.awt.Color; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import games.stendhal.common.constants.SkinColor; +import games.stendhal.server.core.config.ZoneConfigurator; +import games.stendhal.server.core.engine.StendhalRPZone; +import games.stendhal.server.core.pathfinder.FixedPath; +import games.stendhal.server.core.pathfinder.Node; +import games.stendhal.server.entity.CollisionAction; +import games.stendhal.server.entity.npc.ChatCondition; +import games.stendhal.server.entity.npc.ConversationPhrases; +import games.stendhal.server.entity.npc.ConversationStates; +import games.stendhal.server.entity.npc.SpeakerNPC; +import games.stendhal.server.entity.npc.condition.NotCondition; +import games.stendhal.server.entity.npc.condition.QuestRegisteredCondition; + + +public class LeatherCrafterNPC implements ZoneConfigurator { + + @Override + public void configureZone(StendhalRPZone zone, Map attributes) { + zone.add(buildNPC()); + } + + private SpeakerNPC buildNPC() { + final SpeakerNPC npc = new SpeakerNPC("Tinny"); + npc.setDescription("You see Tinny, the leather crafter."); + + buildOutfit(npc); + buildPath(npc); + buildDialogue(npc); + + return npc; + } + + private void buildOutfit(final SpeakerNPC npc) { + npc.setOutfit("body=0,head=0,eyes=3,hair=57,dress=968,mask=5,detail=16"); + npc.setOutfitColor("body", SkinColor.LIGHT); + npc.setOutfitColor("eyes", Color.BLUE); + } + + private void buildPath(final SpeakerNPC npc) { + final List nodes = new LinkedList<>(); + nodes.add(new Node(30, 4)); + nodes.add(new Node(20, 4)); + nodes.add(new Node(20, 13)); + nodes.add(new Node(30, 13)); + npc.setPath(new FixedPath(nodes, true)); + npc.setPosition(30, 4); + npc.setCollisionAction(CollisionAction.STOP); + } + + private void buildDialogue(final SpeakerNPC npc) { + npc.addGreeting("Hello, how can I help you?"); + npc.addGoodbye("Goodbye."); + npc.addJob("I am a leather crafter. I recently completed my apprenticeship under Skinner and" + + " will one day take over responsibility of the tannery."); + + final String questSlot = "items_for_tinny"; + final ChatCondition questNotRegistered = new NotCondition(new QuestRegisteredCondition(questSlot)); + + npc.add( + ConversationStates.ATTENDING, + ConversationPhrases.HELP_MESSAGES, + questNotRegistered, + ConversationStates.ATTENDING, + "If you are interested in a pouch to carry your money in, speak to Skinner.", + null); + + npc.add( + ConversationStates.ATTENDING, + ConversationPhrases.QUEST_MESSAGES, + questNotRegistered, + ConversationStates.ATTENDING, + "There is nothing I need help with at this time.", + null); + } +} diff --git a/tests/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPCTest.java b/tests/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPCTest.java new file mode 100644 index 00000000000..0dc8d3d3dfa --- /dev/null +++ b/tests/games/stendhal/server/maps/deniran/cityinterior/tannery/LeatherCrafterNPCTest.java @@ -0,0 +1,72 @@ +/*************************************************************************** + * Copyright © 2024 - Faiumoni e. V. * + *************************************************************************** + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +package games.stendhal.server.maps.deniran.cityinterior.tannery; + +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; +import static utilities.SpeakerNPCTestHelper.getReply; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import games.stendhal.server.core.engine.SingletonRepository; +import games.stendhal.server.entity.npc.SpeakerNPC; +import games.stendhal.server.entity.npc.fsm.Engine; +import games.stendhal.server.entity.player.Player; +import utilities.PlayerTestHelper; +import utilities.QuestHelper; +import utilities.ZonePlayerAndNPCTestImpl; + + +public class LeatherCrafterNPCTest extends ZonePlayerAndNPCTestImpl { + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + QuestHelper.setUpBeforeClass(); + setupZone("testzone"); + } + + @Override + @Before + public void setUp() throws Exception { + setZoneForPlayer("testzone"); + setNpcNames("Tinny"); + addZoneConfigurator(new LeatherCrafterNPC(), "testzone"); + + super.setUp(); + } + + @Test + public void testDialogue() { + final Player player = PlayerTestHelper.createPlayer("player"); + final SpeakerNPC npc = SingletonRepository.getNPCList().get("Tinny"); + + assertThat(player, notNullValue()); + assertThat(npc, notNullValue()); + + final Engine en = npc.getEngine(); + en.step(player, "hi"); + assertThat(getReply(npc), is("Hello, how can I help you?")); + en.step(player, "job"); + assertThat(getReply(npc), is("I am a leather crafter. I recently completed my apprenticeship" + + " under Skinner and will one day take over responsibility of the tannery.")); + en.step(player, "help"); + assertThat(getReply(npc), is("If you are interested in a pouch to carry your money in, speak to" + + " Skinner.")); + en.step(player, "task"); + assertThat(getReply(npc), is("There is nothing I need help with at this time.")); + en.step(player, "bye"); + assertThat(getReply(npc), is("Goodbye.")); + } +} From c1912b421e0f359894bacf81b912df1b33b6580c Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Tue, 9 Jul 2024 20:25:39 -0700 Subject: [PATCH 4/4] Begin work on Items for Tinny quest (WIP) --- .../server/maps/quests/ItemsForTinny.java | 47 +++++++++++++++++++ .../server/maps/quests/ItemsForTinnyTest.java | 18 +++++++ 2 files changed, 65 insertions(+) create mode 100644 src/games/stendhal/server/maps/quests/ItemsForTinny.java create mode 100644 tests/games/stendhal/server/maps/quests/ItemsForTinnyTest.java diff --git a/src/games/stendhal/server/maps/quests/ItemsForTinny.java b/src/games/stendhal/server/maps/quests/ItemsForTinny.java new file mode 100644 index 00000000000..9203e1e7e54 --- /dev/null +++ b/src/games/stendhal/server/maps/quests/ItemsForTinny.java @@ -0,0 +1,47 @@ +/*************************************************************************** + * Copyright © 2024 - Faiumoni e. V. * + *************************************************************************** + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +package games.stendhal.server.maps.quests; + +import games.stendhal.server.entity.npc.quest.BringItemQuestBuilder; +import games.stendhal.server.entity.npc.quest.QuestManuscript; +import games.stendhal.server.maps.Region; + + +public class ItemsForTinny implements QuestManuscript { + + @Override + public BringItemQuestBuilder story() { + final BringItemQuestBuilder quest = new BringItemQuestBuilder(); + + quest.info() + .name("Items for Tinny") + .internalName("items_for_tinny") + .description("Tinny the leather crafter needs to restock his shelves.") + .region(Region.DENIRAN_CITY) + .questGiverNpc("Tinny"); + + quest.history(); + + quest.offer() + .respondToRequest("Well, as a matter of fact I do have a task for you. I am in need of some" + + " supplies. Would you be interested in helping me?") + .respondToReject("Ah well, maybe I can find another brave soul to help me.") + .respondToAccept("Good! There is a few things that I need to restock my shelves. I would" + + " reward you nicely, I do love working with leather."); + + quest.task(); + + quest.complete(); + + return quest; + } +} diff --git a/tests/games/stendhal/server/maps/quests/ItemsForTinnyTest.java b/tests/games/stendhal/server/maps/quests/ItemsForTinnyTest.java new file mode 100644 index 00000000000..501f627b765 --- /dev/null +++ b/tests/games/stendhal/server/maps/quests/ItemsForTinnyTest.java @@ -0,0 +1,18 @@ +/*************************************************************************** + * Copyright © 2024 - Faiumoni e. V. * + *************************************************************************** + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +package games.stendhal.server.maps.quests; + +import utilities.QuestHelper; + + +public class ItemsForTinnyTest extends QuestHelper { +}