From f1db040dbbe559969789a08aac6edab97916d951 Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Wed, 5 Jun 2013 22:08:49 +0200 Subject: [PATCH] Prevent 0 drunkeness --- config.yml | 15 ++++++------- src/com/dre/brewery/BPlayer.java | 36 +++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/config.yml b/config.yml index a716d2c..fe4dd1b 100644 --- a/config.yml +++ b/config.yml @@ -4,15 +4,16 @@ enableHome: true # Art des Nachhause-teleports: -# bed= Spieler wird zu seinem Spawn Bett teleportiert +# bed = Spieler wird zu seinem Spawn Bett teleportiert # SamplePlugin = installiertes home plugin. Unterstützt: ManagerXL. Wenn dies nicht geht: -# 'cmd: home' = /home wird vom spieler ausgelöst. Es sollte kein Verzögerungs, etc. plugin installiert sein! -# 'cmd: spawn' = /spawn wird vom spieler ausgelöst +# 'cmd: home' = /home wird vom Spieler ausgelöst. Es sollte kein Verzögerungs, etc. plugin installiert sein! +# 'cmd: spawn' = /spawn wird vom Spieler ausgelöst +# 'cmd: exmpl' = /exmpl wird vom Spieler ausgelöst homeType: 'cmd: home' # Ob der Spieler nach etwas kürzerem Ausloggen an einem zufälligen Ort "aufwacht" (diese müssen durch /setwake von einem Admin festgelegt werden) # Der Spieler wacht nur an einem Ort auf, der sich in seiner jetzigen Welt befindet. -# Work in Progress! +# Work in Progress, noch nicht implementiert! enableWake: true # Ob der Spieler sich bei großer Trunkenheit teilweise nicht einloggen kann und kurz warten muss, da sein Charakter nicht reagiert @@ -34,7 +35,7 @@ autosave: 3 # color: Farbe des Getränks nach destillieren/reifen. DARK_RED, RED, BRIGHT_RED, ORANGE, PINK, BLUE, CYAN, WATER, GREEN, BLACK, GREY, BRIGHT_GREY # difficulty: 1-10 Genauigkeit der Einhaltung der Vorgaben (1 = ungenau/einfach 10 = sehr genau/schwer) # alcohol: Alkoholgehalt 0-100 in absoluter Menge bei perfektem Getränk (wird dem Spieler hinzugefügt, bei 100 = tot) -# effect: Besonderer Trank-Effekt beim Trinken / Dauer in sek. Die Dauer wird bestehenden, gleichen Effekten hinzugefügt. Siehe: http://jd.bukkit.org/rb/apidocs/org/bukkit/potion/PotionEffectType.html +# effect: Effekt/Dauer Besonderer Trank-Effekt beim Trinken, Dauer in sek. Siehe: http://jd.bukkit.org/rb/apidocs/org/bukkit/potion/PotionEffectType.html recipes: 1: @@ -152,8 +153,8 @@ cooked: #words: Wörter und Buchstaben die bei Trunkenheit ersetzt werden sollen -#replace: zu ersetzendes Wort oder Buchstabe. (Besondere: "-space": ersetzt ein Leerzeichen, "-random": Eine zufällige Position, "-start": Ganz am Anfang, "-end": Ganz ans Ende.) -#to: in welches Wort es ersetzt werden soll. +#replace: Zu ersetzendes Wort oder Buchstabe. (Besondere: "-space": ersetzt ein Leerzeichen, "-random": Eine zufällige Position, "-start": Ganz am Anfang, "-end": Ganz ans Ende.) +#to: In welches Wort es ersetzt werden soll. #pre: Wörter und Buchstaben vor dem gesuchten Wort (durch "," getrennt) #match: true = eines der "pre"-Wörter muss vor dem gesuchten Wort stehen, false = keines der "pre" Wörter darf vor dem gesuchten stehen #alcohol: 1-100 trunkenheit ab der die Wörter ersetzt werden diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java index 7e87e4e..c8a32d0 100644 --- a/src/com/dre/brewery/BPlayer.java +++ b/src/com/dre/brewery/BPlayer.java @@ -65,6 +65,10 @@ public class BPlayer { public static boolean drink(int uid, Player player) { Brew brew = Brew.get(uid); if (brew != null) { + if (brew.calcAlcohol() == 0) { + addBrewEffects(brew, player); + return true; + } BPlayer bPlayer = get(player.getName()); if (bPlayer == null) { bPlayer = new BPlayer(); @@ -74,21 +78,15 @@ public class BPlayer { bPlayer.quality += brew.getQuality() * brew.calcAlcohol(); if (bPlayer.drunkeness <= 100) { - if (brew.getEffect() != null) { - int duration = (brew.getEffectDur() / 8) * brew.getQuality() * 20; - int amplifier = brew.getQuality() / 3; - - PotionEffectType type = PotionEffectType.getByName(brew.getEffect()); - type.createEffect(duration, amplifier).apply(player); - } - + addBrewEffects(brew, player); } else { if (P.p.getConfig().getBoolean("enableKickOnOverdrink", false)) { bPlayer.passOut(player); } else { bPlayer.quality = bPlayer.getQuality() * 100; bPlayer.drunkeness = 100; - P.p.msg(player, "Du kannst einfach nicht mehr trinken und spuckst es wieder aus!"); + P.p.msg(player, "Du kannst einfach nicht mehr trinken"); + return false; } } P.p.log(player.getName() + " ist nun " + bPlayer.drunkeness + "% betrunken, mit einer Qualität von " + bPlayer.getQuality()); @@ -249,12 +247,26 @@ public class BPlayer { PotionEffectType.getByName("HUNGER").createEffect(duration, amplifier).apply(player); } + public static void addBrewEffects(Brew brew, Player player) { + if (brew.getEffect() != null) { + int duration = (brew.getEffectDur() / 8) * brew.getQuality() * 20; + int amplifier = brew.getQuality() / 3; + + PotionEffectType type = PotionEffectType.getByName(brew.getEffect()); + type.createEffect(duration, amplifier).apply(player); + } + } + // decreasing drunkeness over time public static void onUpdate() { if (!players.isEmpty()) { int soberPerMin = 2; for (String name : players.keySet()) { BPlayer bplayer = players.get(name); + if (bplayer.drunkeness == soberPerMin) { + // Prevent 0 drunkeness + soberPerMin++; + } bplayer.quality -= bplayer.getQuality() * soberPerMin; bplayer.drunkeness -= soberPerMin; if (bplayer.drunkeness > 0) { @@ -280,7 +292,7 @@ public class BPlayer { section.set("offDrunk", players.get(name).offlineDrunk); } if (players.get(name).passedOut) { - section.set("passedOut", players.get(name).passedOut); + section.set("passedOut", true); } } } @@ -291,6 +303,10 @@ public class BPlayer { } public int getQuality() { + if (drunkeness == 0) { + P.p.errorLog("drunkeness should not be 0!"); + return quality; + } return Math.round(quality / drunkeness); }