PotionEffects for Drunkeness

This commit is contained in:
Sn0wStorm
2013-06-30 23:41:37 +02:00
parent f1db040dbb
commit d00c7888f9
5 changed files with 219 additions and 49 deletions
+124 -21
View File
@@ -1,5 +1,8 @@
# config für Brewery.jar # config für Brewery.jar
# Verschiedene Einstellungen
# Ob der Spieler beim nächsten Einloggen nach starker Trunkenheit am nächsten morgen Zuhause "aufwacht" (Ein home Plugin muss installiert sein!) # Ob der Spieler beim nächsten Einloggen nach starker Trunkenheit am nächsten morgen Zuhause "aufwacht" (Ein home Plugin muss installiert sein!)
enableHome: true enableHome: true
@@ -19,14 +22,16 @@ enableWake: true
# Ob der Spieler sich bei großer Trunkenheit teilweise nicht einloggen kann und kurz warten muss, da sein Charakter nicht reagiert # Ob der Spieler sich bei großer Trunkenheit teilweise nicht einloggen kann und kurz warten muss, da sein Charakter nicht reagiert
enableLoginDisallow: true enableLoginDisallow: true
# Ob der Spieler sich übertrinken kann und dann in Ohnmacht fällt (gekickt wird) # Ob der Spieler sich übertrinken kann und dann in Ohnmacht fällt (gekickt wird) und sich für einige Stunden nicht einloggen kann
enableKickOnOverdrink: true enableKickOnOverdrink: true
# Autosave Intervall in Minuten # Autosave Intervall in Minuten
autosave: 3 autosave: 3
# name: versch. Namen für schlecht/mittel/gut # Rezepte für Getränke
# name: Verschiedene Namen für schlecht/mittel/gut
# ingredients: Auflistung von material/Anzahl # ingredients: Auflistung von material/Anzahl
# cookingtime: Zeit in Echtminuten die die Zutaten kochen müssen # cookingtime: Zeit in Echtminuten die die Zutaten kochen müssen
# distillruns: Wie oft destilliert werden muss 0-10 (0=ohne Destillieren) # distillruns: Wie oft destilliert werden muss 0-10 (0=ohne Destillieren)
@@ -152,12 +157,14 @@ cooked:
#words: Wörter und Buchstaben die bei Trunkenheit ersetzt werden sollen # words: Wörter und Buchstaben die bei Chatten während 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.) # Diese werden von oben nach unten gelesen und in dieser Reihenfolge wird ein geschriebener Satz dann verändert.
# replace: Zu ersetzendes Wort oder Buchstabe. (Besondere: "-space": ersetzt Leerzeichen, "-random": Eine zufällige Position, "-start": Ganz am Anfang, "-end": Ganz ans Ende.)
# to: In welches Wort es ersetzt werden soll. # to: In welches Wort es ersetzt werden soll.
# pre: Wörter und Buchstaben vor dem gesuchten Wort (durch "," getrennt) # 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 # 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 # alcohol: 1-100 Trunkenheit ab der die Wörter ersetzt werden
# percentage: Wahrscheinlichkeit des Ersetzen eines Wortes in Prozent # percentage: Wahrscheinlichkeit des Ersetzen eines Wortes in Prozent
words: words:
@@ -179,24 +186,56 @@ words:
to: uuh to: uuh
percentage: 20 percentage: 20
- replace: u
to: uo
pre: u
match: false
percentage: 60
- replace: das - replace: das
to: dass to: dass
percentage: 10 percentage: 20
alcohol: 40 alcohol: 40
- replace: p
to: b
percentage: 30
- replace: p
to: b
percentage: 70
alcohol: 60
- replace: up
to: ubb
percentage: 80
- replace: o
to: oh
percentage: 20
- replace: ei
to: i
percentage: 15
- replace: b
to: bb
percentage: 80
alcohol: 40
- replace: '!!!'
to: '!!!111!!!einself!1!'
pre: '!'
match: false
percentage: 20
alcohol: 70
- replace: '!' - replace: '!'
to: '!!' to: '!!'
pre: '!' pre: '!'
match: false match: false
percentage: 90 percentage: 90
- replace: '!!'
to: '!!!111!!!einself!1!'
pre: '!'
match: false
percentage: 20
alcohol: 70
- replace: betrunken - replace: betrunken
to: brhetriunkhn to: brhetriunkhn
pre: bist,seid pre: bist,seid
@@ -209,14 +248,48 @@ words:
pre: kannst,kannst noch,kannst nicht pre: kannst,kannst noch,kannst nicht
match: false match: false
percentage: 80 percentage: 80
alcohol: 85 alcohol: 30
- replace: gehen - replace: gehen
to: hgheehn to: hgheehn
pre: kannst,kannst noch,kannst nicht pre: kannst,kannst noch,kannst nicht
match: false match: false
percentage: 80 percentage: 80
alcohol: 85 alcohol: 40
- replace: wtf
to: wft
percentage: 20
alcohol: 40
- replace: lol
to: loool
percentage: 80
alcohol: 10
- replace: afk
to: aafka
percentage: 20
alcohol: 30
- replace: schreiben
to: schribeen
pre: kannst,kannst noch,kannst nicht
match: false
percentage: 80
alcohol: 50
- replace: trinken
to: saufen
percentage: 80
alcohol: 70
- replace: '?'
to: '????'
pre: '?'
match: false
percentage: 80
alcohol: 40
- replace: -space - replace: -space
to: '' to: ''
@@ -226,7 +299,7 @@ words:
- replace: -space - replace: -space
to: '' to: ''
percentage: 50 percentage: 40
alcohol: 35 alcohol: 35
- replace: -space - replace: -space
@@ -234,17 +307,17 @@ words:
percentage: 10 percentage: 10
- replace: -start - replace: -start
to: dssho to: dho
percentage: 15 percentage: 15
alcohol: 50 alcohol: 50
- replace: -start - replace: -start
to: hhng to: hhn
percentage: 10 percentage: 10
alcohol: 50 alcohol: 50
- replace: -random - replace: -random
to: lrg to: lug
percentage: 10 percentage: 10
- replace: -random - replace: -random
@@ -263,7 +336,7 @@ words:
alcohol: 75 alcohol: 75
- replace: -random - replace: -random
to: grulg to: gul
percentage: 50 percentage: 50
alcohol: 80 alcohol: 80
@@ -281,11 +354,41 @@ words:
percentage: 50 percentage: 50
alcohol: 70 alcohol: 70
- replace: -random
to: ' '
percentage: 100
alcohol: 70
- replace: -random
to: ' '
percentage: 60
alcohol: 40
- replace: -random
to: ' '
percentage: 50
alcohol: 30
- replace: -end - replace: -end
to: '!' to: '!'
percentage: 30 percentage: 40
alcohol: 30 alcohol: 30
- replace: -random
to: ' *hicks* '
percentage: 80
alcohol: 70
- replace: -random
to: ' *hicks* '
percentage: 20
alcohol: 40
- replace: -space
to: ' *hicks* '
percentage: 20
alcohol: 20
- replace: -end - replace: -end
to: ' *hicks*' to: ' *hicks*'
percentage: 70 percentage: 70
+64 -17
View File
@@ -44,7 +44,7 @@ public class BPlayer {
return null; return null;
} }
public String getPlayerName() { /*public String getPlayerName() {
for (Map.Entry<String,BPlayer> entry : players.entrySet()) { for (Map.Entry<String,BPlayer> entry : players.entrySet()) {
if (entry.getValue() == this) { if (entry.getValue() == this) {
return entry.getKey(); return entry.getKey();
@@ -55,7 +55,7 @@ public class BPlayer {
public Player getPlayer() { public Player getPlayer() {
return org.bukkit.Bukkit.getPlayer(getPlayerName()); return org.bukkit.Bukkit.getPlayer(getPlayerName());
} }*/
public static Player getPlayer(String name) { public static Player getPlayer(String name) {
return org.bukkit.Bukkit.getPlayer(name); return org.bukkit.Bukkit.getPlayer(name);
@@ -65,7 +65,9 @@ public class BPlayer {
public static boolean drink(int uid, Player player) { public static boolean drink(int uid, Player player) {
Brew brew = Brew.get(uid); Brew brew = Brew.get(uid);
if (brew != null) { if (brew != null) {
if (brew.calcAlcohol() == 0) { int brewAlc = brew.calcAlcohol();
if (brewAlc == 0) {
//no alcohol so we dont need to add a BPlayer
addBrewEffects(brew, player); addBrewEffects(brew, player);
return true; return true;
} }
@@ -74,22 +76,26 @@ public class BPlayer {
bPlayer = new BPlayer(); bPlayer = new BPlayer();
players.put(player.getName(), bPlayer); players.put(player.getName(), bPlayer);
} }
bPlayer.drunkeness += brew.calcAlcohol(); bPlayer.drunkeness += brewAlc;
bPlayer.quality += brew.getQuality() * brew.calcAlcohol(); bPlayer.quality += brew.getQuality() * brewAlc;
if (bPlayer.drunkeness <= 100) { if (bPlayer.drunkeness <= 100) {
addBrewEffects(brew, player); addBrewEffects(brew, player);
if (brew.getQuality() < 5) {
addQualityEffects(brew.getQuality(), brewAlc, player);
}
} else { } else {
if (P.p.getConfig().getBoolean("enableKickOnOverdrink", false)) { if (P.p.getConfig().getBoolean("enableKickOnOverdrink", false)) {
bPlayer.passOut(player); bPlayer.passOut(player);
} else { } else {
bPlayer.quality = bPlayer.getQuality() * 100; bPlayer.quality = bPlayer.getQuality() * 100;
bPlayer.drunkeness = 100; bPlayer.drunkeness = 100;
P.p.msg(player, "Du kannst einfach nicht mehr trinken"); P.p.msg(player, "Du kannst nicht mehr trinken");
return false;
} }
} }
P.p.log(player.getName() + " ist nun " + bPlayer.drunkeness + "% betrunken, mit einer Qualität von " + bPlayer.getQuality()); P.p.msg(player, "Du bist nun " + bPlayer.drunkeness + "% betrunken, mit einer Qualität von " + bPlayer.getQuality());
return true; return true;
} }
return false; return false;
@@ -197,7 +203,7 @@ public class BPlayer {
}, 1L); }, 1L);
} }
// he is having a hangover // he may be having a hangover
public void login(final Player player) { public void login(final Player player) {
if (drunkeness < 10) { if (drunkeness < 10) {
if (offlineDrunk > 60) { if (offlineDrunk > 60) {
@@ -205,14 +211,14 @@ public class BPlayer {
goHome(player); goHome(player);
} }
} }
hangoverEffects(player);
// wird der spieler noch gebraucht?
players.remove(player.getName());
} else if (offlineDrunk - drunkeness >= 20) { } else if (offlineDrunk - drunkeness >= 20) {
// do some random teleport later // do some random teleport later
} }
hangoverEffects(player);
// wird der spieler noch gebraucht?
players.remove(player.getName());
offlineDrunk = 0; offlineDrunk = 0;
} }
@@ -231,7 +237,7 @@ public class BPlayer {
} else if (homeType.startsWith("cmd:")) { } else if (homeType.startsWith("cmd:")) {
player.performCommand(homeType.substring(4)); player.performCommand(homeType.substring(4));
} else { } else {
P.p.errorLog("'homeType: " + homeType + "' unknown!"); P.p.errorLog("Config.yml 'homeType: " + homeType + "' unknown!");
} }
if (home != null) { if (home != null) {
player.teleport(home); player.teleport(home);
@@ -243,8 +249,35 @@ public class BPlayer {
int duration = offlineDrunk * 50 * getHangoverQuality(); int duration = offlineDrunk * 50 * getHangoverQuality();
int amplifier = getHangoverQuality() / 3; int amplifier = getHangoverQuality() / 3;
PotionEffectType.getByName("SLOW").createEffect(duration, amplifier).apply(player); PotionEffectType.SLOW.createEffect(duration, amplifier).apply(player);
PotionEffectType.getByName("HUNGER").createEffect(duration, amplifier).apply(player); PotionEffectType.HUNGER.createEffect(duration, amplifier).apply(player);
}
public void drunkEffects(Player player) {
int duration = 10 - getQuality();
duration += drunkeness / 2;
duration *= 20;
if (duration > 960) {
duration *= 5;
} else if (duration < 460) {
duration = 460;
}
PotionEffectType.CONFUSION.createEffect(duration, 0).apply(player);
}
public static void addQualityEffects(int quality, int brewAlc, Player player) {
int duration = 7 - quality;
duration *= 250;
PotionEffectType.BLINDNESS.createEffect(duration, 0).apply(player);
if (brewAlc > 15) {
duration = 10 - quality;
duration += brewAlc;
duration *= 40;
} else {
duration = 200;
}
PotionEffectType.POISON.createEffect(duration, 0).apply(player);
} }
public static void addBrewEffects(Brew brew, Player player) { public static void addBrewEffects(Brew brew, Player player) {
@@ -257,6 +290,20 @@ public class BPlayer {
} }
} }
public static void drunkeness() {
for (String name : players.keySet()) {
BPlayer bplayer = players.get(name);
if (bplayer.drunkeness > 30) {
if (bplayer.offlineDrunk == 0) {
Player player = getPlayer(name);
if (player != null) {
bplayer.drunkEffects(player);
}
}
}
}
}
// decreasing drunkeness over time // decreasing drunkeness over time
public static void onUpdate() { public static void onUpdate() {
if (!players.isEmpty()) { if (!players.isEmpty()) {
@@ -271,7 +318,7 @@ public class BPlayer {
bplayer.drunkeness -= soberPerMin; bplayer.drunkeness -= soberPerMin;
if (bplayer.drunkeness > 0) { if (bplayer.drunkeness > 0) {
if (bplayer.offlineDrunk == 0) { if (bplayer.offlineDrunk == 0) {
if (getPlayer(name) == null) {// working offline check? if (getPlayer(name) == null) {
bplayer.offlineDrunk = bplayer.drunkeness; bplayer.offlineDrunk = bplayer.drunkeness;
} }
} }
+3
View File
@@ -304,6 +304,7 @@ public class Barrel {
// when not // when not
// the barrel needs to be formed correctly // the barrel needs to be formed correctly
public static Block getBrokenBlock(Block spigot) { public static Block getBrokenBlock(Block spigot) {
if (spigot.getChunk().isLoaded()) {
spigot = getSpigotOfSign(spigot); spigot = getSpigotOfSign(spigot);
if (isSign(spigot)) { if (isSign(spigot)) {
return checkSBarrel(spigot); return checkSBarrel(spigot);
@@ -311,6 +312,8 @@ public class Barrel {
return checkLBarrel(spigot); return checkLBarrel(spigot);
} }
} }
return null;
}
public static Block checkSBarrel(Block spigot) { public static Block checkSBarrel(Block spigot) {
int direction = getDirection(spigot);// 1=x+ 2=x- 3=z+ 4=z- int direction = getDirection(spigot);// 1=x+ 2=x- 3=z+ 4=z-
+15 -2
View File
@@ -57,7 +57,8 @@ public class P extends JavaPlugin {
p.getServer().getPluginManager().registerEvents(inventoryListener, p); p.getServer().getPluginManager().registerEvents(inventoryListener, p);
p.getServer().getPluginManager().registerEvents(worldListener, p); p.getServer().getPluginManager().registerEvents(worldListener, p);
p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 1200, 1200); p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 650, 1200);
p.getServer().getScheduler().runTaskTimer(p, new DrunkRunnable(), 120, 120);
this.log(this.getDescription().getName() + " enabled!"); this.log(this.getDescription().getName() + " enabled!");
} }
@@ -255,7 +256,6 @@ public class P extends JavaPlugin {
// save all Data // save all Data
public void saveData() { public void saveData() {
log("saving");
File datafile = new File(p.getDataFolder(), "data.yml"); File datafile = new File(p.getDataFolder(), "data.yml");
FileConfiguration oldData = YamlConfiguration.loadConfiguration(datafile); FileConfiguration oldData = YamlConfiguration.loadConfiguration(datafile);
@@ -313,6 +313,19 @@ public class P extends JavaPlugin {
return null; return null;
} }
public class DrunkRunnable implements Runnable {
public DrunkRunnable() {
}
@Override
public void run() {
if (!BPlayer.players.isEmpty()) {
BPlayer.drunkeness();
}
}
}
public class BreweryRunnable implements Runnable { public class BreweryRunnable implements Runnable {
public BreweryRunnable() { public BreweryRunnable() {
+5 -1
View File
@@ -92,7 +92,11 @@ public class Words {
from = " "; from = " ";
} else if (from.equalsIgnoreCase("-random")) { } else if (from.equalsIgnoreCase("-random")) {
// inserts "to" on a random position in "words" // inserts "to" on a random position in "words"
int charIndex = (int) (Math.random() * (words.length() - 1)); int charIndex = (int) (Math.random() * 100.0);
P.p.log("random: " + charIndex);
charIndex *= (words.length() - 1);
charIndex /= 100;
P.p.log("charIndex: " + charIndex);
if (charIndex > words.length() / 2) { if (charIndex > words.length() / 2) {
from = words.substring(charIndex); from = words.substring(charIndex);
to = to + from; to = to + from;