From 1247bc2035c600de75eb6092caf5abd01a78ae22 Mon Sep 17 00:00:00 2001 From: Jonas Date: Mon, 18 Apr 2022 22:39:10 +0200 Subject: [PATCH 1/7] closing lobby during game adds game to finished games list. --- .../ch/unibas/dmi/dbis/cs108/BudaLogConfig.java | 2 +- .../ch/unibas/dmi/dbis/cs108/gamelogic/Game.java | 2 +- .../multiplayer/client/gui/chat/ChatApp.java | 2 +- .../cs108/multiplayer/server/ClientHandler.java | 16 ++++++++++++++-- .../server/JServerProtocolParser.java | 2 +- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java b/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java index 0d809eb..11e8ce0 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java @@ -19,7 +19,7 @@ public class BudaLogConfig { LoggerContext ctx = (LoggerContext) LogManager.getContext(false); Configuration config = ctx.getConfiguration(); LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); - loggerConfig.setLevel(Level.INFO); // change level here + loggerConfig.setLevel(Level.ERROR); // change level here ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig. } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java index ea1db1c..31e8bca 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java @@ -109,7 +109,7 @@ public class Game implements Runnable { LOGGER.info(gameState.toString()); i = 0; - while (isOngoing == true) { + while (isOngoing) { if (!isDay) { LOGGER.info("NIGHT"); gameOverCheck = voteHandler.ghostVote(gameState.getPassengerTrain(), this); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java index 5386a24..39e5980 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java @@ -83,7 +83,7 @@ public class ChatApp extends Application { Objects.requireNonNull(ChatApp.class.getResource( "splitPaneChatView.fxml"))); LOGGER.info("2"); - // TODO bin chatController.getChatPaneRoot() border to root border for rezising + // TODO bin chatController.getChatPaneRoot() border to root border for resizing Scene scene = new Scene(root); LOGGER.info("3"); scene.setRoot(root); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java index 5cf6e7d..071d248 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java @@ -217,9 +217,13 @@ public class ClientHandler implements Runnable { */ public void broadcastChatMessageToAll(String msg) { for (ClientHandler client : connectedClients) { + + // we can un-comment this if we want broadcast to only send to everyone else, excluding the person who sent it. + /* if (client.getClientUserName().equals(this.getClientUserName())) { continue; } + */ client.sendMsgToClient(Protocol.printToClientChat + "$" + clientUserName + ": " + msg); } } @@ -459,6 +463,8 @@ public class ClientHandler implements Runnable { Game game = l.getGame(); if (game != null) { l.getGame().getGameState().handleClientDisconnect(this); + l.removeGameFromRunningGames(game); + l.addGameToFinishedGames(game); } } } @@ -523,13 +529,19 @@ public class ClientHandler implements Runnable { } /** - * Lists all Games currenty running and already finished and displays it to the client handled by + * Lists all Games currently running and already finished and displays it to the client handled by * this */ public void listGames() { - if (Lobby.runningGames.isEmpty() && Lobby.finishedGames.isEmpty()) { + if (Lobby.runningGames.isEmpty() && Lobby.finishedGames.isEmpty() && Lobby.lobbies.isEmpty()) { sendAnnouncementToClient("No Games"); } else { + sendAnnouncementToClient("Open Games (i.e. open Lobbies):"); + for (Lobby l : Lobby.lobbies) { + if (l.getLobbyIsOpen()) { + sendAnnouncementToClient(" - Lobby Nr. " + l.getLobbyID()); + } + } sendAnnouncementToClient("Running Games:"); try { for (Game runningGame : Lobby.runningGames) { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java index b5bb04b..c131f08 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java @@ -31,7 +31,7 @@ public class JServerProtocolParser { try { header = msg.substring(0, 5); if (!header.equals(Protocol.pingBack) && !header.equals( - Protocol.pingFromClient)) { //for debuging without constant pings + Protocol.pingFromClient)) { //for debugging without constant pings LOGGER.debug("got message: " + msg + "."); } } catch (IndexOutOfBoundsException e) { From 1ca21a5b0e66eff26525359c85817be6b83f2f17 Mon Sep 17 00:00:00 2001 From: Jonas Date: Mon, 18 Apr 2022 23:12:07 +0200 Subject: [PATCH 2/7] Added diary entry. --- Meilenstein III/Diary.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Meilenstein III/Diary.txt b/Meilenstein III/Diary.txt index 76e3d19..8960ceb 100644 --- a/Meilenstein III/Diary.txt +++ b/Meilenstein III/Diary.txt @@ -282,6 +282,10 @@ eine Stimme abgeben und sie wird gezählt, NPC können sehr stupide stimmen abge Server schickt dem Client bei einem Voterequest immer seine Position im Zug mit, und der client schickt sie dem Server wieder zurück. +11 & 12.04.2022 - Jonas +Implementation aller notwendigen Lobby - funktionen, list-commands, sowie whisper chat. + + 13.04.2022 - Seraina Spiellogik: Habe Alexs noiseHandling in die restliche Spiellogik integriert und debugged. Ebenso musste ich den Input der Clients beim Abstimmen geben umstrukturieren. Anstatt dass eine speziefische Methode From 3fedb8d739a856e8e1d79a09c6611799801edbd6 Mon Sep 17 00:00:00 2001 From: Jonas Date: Mon, 18 Apr 2022 23:14:06 +0200 Subject: [PATCH 3/7] Added manual as pdf --- Meilenstein III/{Manual_1.0.docx => Manual.pdf} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Meilenstein III/{Manual_1.0.docx => Manual.pdf} (100%) diff --git a/Meilenstein III/Manual_1.0.docx b/Meilenstein III/Manual.pdf similarity index 100% rename from Meilenstein III/Manual_1.0.docx rename to Meilenstein III/Manual.pdf From bacae889f11e7d60270306a0f2f56f747246d6cb Mon Sep 17 00:00:00 2001 From: Alexander Sazonov Date: Mon, 18 Apr 2022 23:27:19 +0200 Subject: [PATCH 4/7] Changed noise handling: humans now get just one notification about having heard noises, even if multiple ghosts walked by --- .../gamelogic/ClientGameInfoHandler.java | 2 +- .../dbis/cs108/gamelogic/NoiseHandler.java | 16 +++++++++------- .../dmi/dbis/cs108/gamelogic/VoteHandler.java | 19 +++++++++++++++---- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java index 9317836..ba803e8 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java @@ -16,7 +16,7 @@ public class ClientGameInfoHandler { //relevant: public static final String ghostVoteRequest = "Vote on who to ghostify!"; public static final String humanVoteRequest = "Vote for a ghost to kick off!"; - public static final String noiseNotification = "You heard some noise"; + public static final String noiseNotification = "Someone passed by you "; public static final String gameOverHumansWin = "Game over: humans win!"; public static final String gameOverGhostsWin = "Game over: ghosts win!"; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java index cdda0ee..9579dea 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java @@ -8,30 +8,32 @@ import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; * and broadcasts noise message to them (via ServerGameInfoHandler) */ public class NoiseHandler { - /** - * Notifies passengers in the train about a ghost walking by them. Differentiates between two + /** Updates the amount of times passengers on the train heard ghosts walk by them. Differentiates between two * cases: if the active ghost (predator) is to the right of his victim, the Passenger array is * being walked through from right to left (from the predator's position back to the victim's * position), otherwise the other way around. One call of noiseNotifier only deals with one * predator infecting a victim, so if there are already multiple ghosts in the game, the method * should be called for each of them individually. - * + * @param passengers passengers of the train the game is played in * @param predator ghost that has infected a human player during this night (called upon as - * passenger for convenience reasons) + * passenger for convenience reasons) * @param victim human player who has been turned into a ghost this night + * @param noiseAmount array containing information about how many times each passenger heard a noise this night * @param game current game instance + * @return updated array with info on who heard how many noises */ - public void noiseNotifier(Passenger[] passengers, Passenger predator, Passenger victim, Game game) { + public int[] noiseNotifier(Passenger[] passengers, Passenger predator, Passenger victim, int[] noiseAmount, Game game) { if (predator.getPosition() - victim.getPosition() > 0) { // if predator is to the right of victim for (int i = predator.getPosition() - 1; i > victim.getPosition(); i--) { - passengers[i].send(ClientGameInfoHandler.noiseNotification, game); + noiseAmount[i]++; } } else { // if predator is to the left of victim for (int i = predator.getPosition() + 1; i < victim.getPosition(); i++) { - passengers[i].send(ClientGameInfoHandler.noiseNotification, game); + noiseAmount[i]++; } } + return noiseAmount; } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java index 457dee1..1c7472d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java @@ -88,14 +88,25 @@ public class VoteHandler { } /* notify passengers the ghosts passed by - for each ghost that ghostified a player, an instance of NoiseHandler - is being created and the passengers this ghost passed by are being notified. The player who's just been ghostified - is ignored since he didn't participate in this night's ghostification. */ + is being created and the array containing the information about the amount of times each passenger heard a ghost + walk by is being updated. Finally, each passenger receives information about how often he heard something during + this night. The player who's just been ghostified is ignored since he didn't participate in this night's + ghostification. */ + + int[] noiseAmount = new int[6]; for (int i = 0; i < passengers.length; i++) { if (passengers[i].getIsGhost() && i != ghostPosition) { NoiseHandler n = new NoiseHandler(); - n.noiseNotifier(passengers, passengers[i], g, game); + noiseAmount = n.noiseNotifier(passengers, passengers[i], g, noiseAmount, game); } } + for (int i = 0; i < passengers.length; i++) { + if (!passengers[i].getIsGhost() && noiseAmount[i] != 0) { // passenger is human and someone walked by him + passengers[i].send(ClientGameInfoHandler.noiseNotification + noiseAmount[i] + " time(s)", game); + } + } + + // no humans left in the game --> everyone has been ghostified, ghosts win int humanCounter = 0; for(Passenger passenger : passengers) { if(!passenger.getIsGhost()) { //if it is a human @@ -108,7 +119,7 @@ public class VoteHandler { } LOGGER.info(game.getGameState().toString()); - // set hasVoted to false for all passengers for future votings + // set hasVoted to false for all passengers for future voting for (Passenger passenger : passengers) { passenger.setHasVoted(false); passenger.setVote(Integer.MAX_VALUE); From 2da4d6c1ab67c0985b43fd06a98d3c1c7dc8dbbf Mon Sep 17 00:00:00 2001 From: Alexandr Sazonov Date: Mon, 18 Apr 2022 22:08:29 +0000 Subject: [PATCH 5/7] Added chat GUI section to manual, also other minor changes --- Meilenstein III/Manual.pdf | Bin 211206 -> 224152 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Meilenstein III/Manual.pdf b/Meilenstein III/Manual.pdf index 436f1cc98bb087a3e0544d14a5de3f531263052a..4c5d730d502359434d950177a61e9cfbace07449 100644 GIT binary patch delta 22835 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 delta 9820 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 Date: Mon, 18 Apr 2022 22:11:11 +0000 Subject: [PATCH 6/7] Fixed a typo in manual --- Meilenstein III/Manual.pdf | Bin 224152 -> 224153 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Meilenstein III/Manual.pdf b/Meilenstein III/Manual.pdf index 4c5d730d502359434d950177a61e9cfbace07449..dbf3c5b9c10b9902404c987b9c348d3e0f7722aa 100644 GIT binary patch delta 2513 zcmZvecQhLc8^)2gY1ODzwfEMDL?W>+YP2@7ZjBbTVzgJRqKU1jQ9|rdTd7eMtt*Oh z2{G$hHEI*9X4U$7&v(xENALIk^PKm0o^zh(zxT};W6T_542`6Xq-y~13ehSO_=EsF zIMdIUtuJM84J;xjXyM!MY2yPqsb@Gryx#hoJgJwJ731E)wsw?PTDv>R<{gg5M-p?b zDFMB559BVIGwvRsF9>q&X4s4Uj{5VR&7|HHfhWfc7ld7GAC~q>Q^?8Y?#YsF`kWx1 z8K^7%kn9~s(=|jlL&!cqnBEm2y|&-SAtlgyJI$M^@{5P}uz|s!SMq5Iau-X$)9*Sx ztK|Ht+@u=9fLs;I+8)=6FG+J9gJB^vVIuL^r)NPLsj5Ps6?;CJV}s88j$__|tf>OW zOVuUc&vt)o_wG?=Fm3mpoch_xdyGQ!^=H|{jkC@V&&(ALdL>*xM(=tY2NmLY8D~Rl zTTWM&@=uJ#0m&#W_odOsnWyJroSw6C`>~vvCv-r8zuauKeq+~^jpS`j5tb|v@{cRb zi2=o=1%0)`FV*oST&72`T1VkI)b{jE6K&yY<0|&fvXfGpA>fXsW4ki$t8tIa8W&2^ zTBP-5?jP&++{uNyK|eg{G7f=)l*j$|OET9qphPHBF<+xx`9o~y(&dC>TBFh0QI%2k4^B;@ z16b-m9FB%o*v0SZh^-ikx0RzllGSqGMx2@s2oAgmcX)DZdDMFP$y4tWNihKK-Z*LA zSpyQJ)e%OnIADN#XoR`ZX*q1Si(8bsY?eFKx^CL_mR`F|`d3iaLb*PKzp{%wip#-ps_6RIq3_aVZUnUK zT8aSNw@Xh7i9HUgg?cW!}Xu@X0#7#G1+iVJgw3h?anU(vfnKQj-HUyN3O7l(FEAe2O0au z+3s~%ip02tw6b!*l(^K|%Kq?8cOFc&)Iz3yQjMitd{ggVDQ6H{V}{{^vuO6sKygdc zBav*7l1uUpPBB_NeKVP%YPpV|N4ej4xefeg8SkzLk__H3fABPC+@!akJF=TJ+{NWk zj(k9pkE=kF@bO!|m4>BQEwa^^l4U)@3KL5K9j5uZlzMFF_o`P(@_Re$XGgBvs8xP^IQ8N0_F#Oy`t4;fesiY0Ko7%aCEMR0^i8GL#4!)fUL3?<1l z8ZTj0*wOYg!*@-hC7QQXS5*CZfbsy{FDNczj3r-tXT;-{L^kiEmh z3*QHg9ELSVb`x5udmwCD<1L8H+&IQj+b@t5LHc%DmVjpVDynWADxp96^Gi}v$oCF; zQug6!kv#q>?g?4hjAHRKhOc*j?{}QG zaz(Sz^q;?e%!lS;C{FW{LcP*0Ey^atC@neZ%Q z_U|ATV6$a`f$059GD)&$(X?Zs`38{gK1F3AW|g<#Csf>UzH1hI?h!WDpw<~&=d4ezb=rZ^8r_c{Ol*jjGR;UXA#O$jjq7s9qm7e5Y6G7(89qs5&Z)y2xqEMP!C0 z61!TIGly^>W>%O-7x9aLJu<6&j{=&G`8?lVU8np8pd>KWxBHs75KZb|WMA=UD=a?j zsi0|S%Sj;=no@fxG$1&0GNG}Y#fNO(d$@xNfk4Wv;!pOPtZEGs8+I zZ?Uc)>>@_hcrh%V{KEWE85$)t^zVMCZ?ni|M2hmh%-}l>yYAtZfEx1ub8RIKa8=gA z0LMPMI4O;y%xW5hxL+QMbW+watP8kk{O}>K)?{v+Me6pK=>^i2wV?^W^(BXEQ22(X2y=Glok8K}^Jw zwT)x@d2S2YQu9F(0#FK&g5&EcL#(=a2wCqP`A+Gf?7bTe%R7jYymzQF_~#r0Dw`I< zShkz@F?ptXYB^5XM>8CG!R6G<-K9BWg~eyOKh!u0q{D{X8sgp+c;rdiyIlW{Z)m7&LqQwbTiB)<05EG&`V-J8J4QELWYbp(?%d zRHbg3mI^OmtsMxrJQhvFQIw}Ahig-E$;&@Ri;g6S9qrCKXW}j)sOAEp0f*XK0+{gU z@3UJC279ln9^CiDgg2F280|(t{fvFwTR{C@7BW`rDDo2ISogtWrlZ;Dl5?-|RvIJ` z5KHgu{Rrdh0(Luljv^zlJ=ZBN>kH85Z+yTb45CT2==LRJ}&;Tc#yde0W z5%d za+yo6n^~yjP9Bq67Vq<%_nh~Sp7;09_xwKRd(Q9QADJbZ%My)E03__A0_BweaFT)& z@F+3!9UzrYZ;FgkGisSJHn=FUa;b4oJi*m&d_+&xRbQHeyI)b^m1BGCSQggvt1`wNPh zZ{zV3AP2Vg!4^a_AG&@XGpW7zg|=YDAR@O*LCqW!S&Oiz-;!%>ZtcqAx4D?xE%&eH zq*e0j$G5j`Zu43V6Q|cV?Y+FCuV0u_vk-e+YumlZ63%ltR?sx>=rH}9g&`3=7vpPw zbn3ijcC3(CL`*(rGhdh~cQkUN05ut9dHyYN?O|iHXYI!$jv?FML`Ge1Yh!dwh&FTs z#Va~{(c81T*^PisjY29H>l4vt`d9q&PNK=GawO*S=P8-=R9g$B{KTk^s^SAe!6>5- zE`1gx`kBVRv>4pcd+qV!2uaVx9BGp^dvqV|iux$ZH{j%$hPis~7j7`CoIk$MK!dY7 z$nbqoB2Ae?b6sXd#?nqbUX^0#1qg8NHNo_ZgJ-U{$5D$$L4ykx(}0P!R0Bqn`cY7e zuzyIHY{7T-xa3aaMkiWLl}k+ zbdpjrz4GjQ9I|FFRLOS0a$q5hsC>-^8doBsPs>c9SQ{OVfQP@5aEgn%mfSD;hp?TC zhnYlL>@=c#u>L@}@{3+cWr0!%ER)W(x_+zzt?xWL7bospDloFcc(@~~e1`9PU7IR* z_fY*zGR0b~cZ(`1t#2r65;ur2?1u8PJuH#gZN@3Rd#k7WW)0PIicN=!OChbqeX>8y z8Tpc}1eFt>OBw29@?$~U`9npOOgzqlu=~o}ffjDYzWn?rW6Cm#y7bcQ?vfVnu|!hd z+Vs()+!r(U^>a?o$NU#;ies)(E~}XSy7E@A9~0^hZ}d-GqiTE%O*X_|jlLDo!V ze5W=6oj;*2fg8yEpv(bckIPR7A?pnPr!wjLi`~Ynman^NF)PC=*xC{EAQ-rLXIxY} zz&mg_e$PqCFwPaPaI)K&G@V8l3M-RgY+PsRx*2hj4f!-5=cP*{J3+=OrO95Qq7zj_ zOUi4F0|sEoaa##hmNk0Lo>Rq?>5uaFqoXw!t4WND)87#hcElw1mvY4m^4@FA13*hA54-DQx4I!kJdV0JoZE@<2>hM8@F zXPTkR)({P~+cgU`1G~stzOQBnlaMuE*DJ=nCqMeRlo2Ppr~@&D zEjPL%t3&rQEDNowxt&>Xkve{!f0kKb6I(F)GdVHNhe+B*4N(DVL!ISO*_@m z`z>&2+=jh8s*n$BU;4`^*f&aeqm zIu@Sm#)ZPL#`Ur-AHa8GZb7pVwn>=|!RBH7fzkPeTpiLr!~o}6qu z=-qkq1Jo|o_w&J^AM&@HI)mKgboXZfe2t8xUQ1j&7)84fQb}Z|-&&nu-WX1VZ{!<7 zGpFYruMtYZ)~~5R^!q0PcyWJJ+aK{ktgO8j&;tM}WsSVRzHOp!J;7JcX67my_ptZp zRxz$rXH$+49*G2}HOn{ft^W7~K*bk7sT(h21)b%jH*O9I!bHoSN({z4=ncyld59!j zeR3mRA0IgwePWfJf5^uMwdGNBW}|YTSqCtX;?=0nt-H zxWi4KxN*B~eiYNZ2AiAPTy6&o znCIwZ%={cF+ElBhw+2}M0td#p(Vnfg`BlsOi8O2b)QbVn1tjF()P9RJJ3p+cw*8*` zPOYBmdt~0yDFi4aA|Kcg6?DD+Q4AqYL#|1kvex1O#Z zR8Q|;27@DhHy8{8{g)y2;r})G{|-Z;aER`2MJN=ZXYjk}K@d=qeJIdI04AiWYUOPG EAD|4Wwg3PC From 2e9656f9cde434f6a8befe46f504c25bdc5e3f3d Mon Sep 17 00:00:00 2001 From: Alexandr Sazonov Date: Mon, 18 Apr 2022 22:15:44 +0000 Subject: [PATCH 7/7] Update Diary.txt --- Meilenstein III/Diary.txt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Meilenstein III/Diary.txt b/Meilenstein III/Diary.txt index 8960ceb..b82abd9 100644 --- a/Meilenstein III/Diary.txt +++ b/Meilenstein III/Diary.txt @@ -322,5 +322,10 @@ Im GUI funktioniert der Whisper nun. Folgendes Colorcoding: Eigene Nachrichten s und im Momentan Whisper Nachrichten violet. 18.04.2022 - Seraina -Nach etlichem lesen von Websites zu custom tasks in gradle habe ich entlich die build-cs108 task zum Laufen -gebracht. Es war wie so oft die einfachste Lösung. \ No newline at end of file +Nach etlichem Lesen von Websites zu custom tasks in gradle habe ich endlich die build-cs108 task zum Laufen +gebracht. Es war wie so oft die einfachste Lösung. + +18.04.2022 - Alex +- Aktualisierung des Projektplans für Meilensteine 4 und 5 abgeschlossen (hochgeladen als pdf und xls) +- Änderung des NoiseHandlers: Nun werden human players, selbst wenn nachts mehrmals Geister an ihnen vorbeilaufen, nur einmal benachrichtigt. +- Abschliessende Arbeit am Manual.