Added vomiting, "-all" for Words

This commit is contained in:
Sn0wStorm
2013-07-03 00:31:34 +02:00
parent 09c1e84317
commit 6e2df99c14
6 changed files with 101 additions and 13 deletions
+14 -3
View File
@@ -25,6 +25,12 @@ enableLoginDisallow: true
# Ob der Spieler sich übertrinken kann und dann in Ohnmacht fällt (gekickt wird) und sich für einige Stunden nicht einloggen kann # 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
# Ob der Spieler sich bei großer Trunkenheit übergibt (unten definiertes Item aus dem Mund fallen lässt, dass nicht aufgesammelt werden kann und bis zum Despawnen liegen bleibt)
enablePuke: true
# Item das beim Erbrechen mehrfach unaufsammelbar fallen gelassen wird
pukeItem: SOUL_SAND
# Autosave Intervall in Minuten # Autosave Intervall in Minuten
autosave: 3 autosave: 3
@@ -145,7 +151,7 @@ recipes:
# cooked: ALLE möglichen Zutaten und die nach dem Gähren daraus entstehenden Tranknamen: (leer für undefiniert) # cooked: ALLE möglichen Zutaten und die nach dem Gähren daraus entstehenden Tranknamen:
cooked: cooked:
WHEAT: Getreideferment WHEAT: Getreideferment
@@ -153,14 +159,14 @@ cooked:
APPLE: Apfelmost APPLE: Apfelmost
POTATO_ITEM: Kartoffelmaische POTATO_ITEM: Kartoffelmaische
LONG_GRASS: Kräuterbrühe LONG_GRASS: Kräuterbrühe
RED_MUSHROOM: RED_MUSHROOM: Pilzsud
# words: Wörter und Buchstaben die bei Chatten während Trunkenheit ersetzt werden sollen. # words: Wörter und Buchstaben die bei Chatten während Trunkenheit ersetzt werden sollen.
# Diese werden von oben nach unten gelesen und in dieser Reihenfolge wird ein geschriebener Satz dann verändert. # 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": Einfügen in zufällige Position, "-start": Ganz am Anfang, "-end": Ganz ans Ende.) # replace: Zu ersetzendes Wort oder Buchstabe. (Besondere: "-space": ersetzt Leerzeichen, "-random": Einfügen in zufällige Position, "-all": Alles, "-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
@@ -379,3 +385,8 @@ words:
to: ' *hicks*' to: ' *hicks*'
percentage: 70 percentage: 70
alcohol: 50 alcohol: 50
- replace: -all
to: '*rülps*'
percentage: 3
alcohol: 60
+3 -3
View File
@@ -1,5 +1,4 @@
# Brewery # Brewery
=======
**Brewery ist ein Bukkit-Plugin zum brauen auch alkoholischer Getränke.** **Brewery ist ein Bukkit-Plugin zum brauen auch alkoholischer Getränke.**
@@ -118,9 +117,10 @@ Der Alkoholgehalt des Trankes wird beim trinken auf den Spieler übertragen. Je
* Der Spieler kann nicht mehr richtig laufen, er wird Torkeln und für eine Strecke weitaus länger brauchen * Der Spieler kann nicht mehr richtig laufen, er wird Torkeln und für eine Strecke weitaus länger brauchen
* Es können Effekte wie Blindness, Confusion, Poison usw. auftreten * Es können Effekte wie Blindness, Confusion, Poison usw. auftreten
* Der Chat wird stark verändert, vieles was geschrieben wird ist fast unverständlich, teilweise nur gebrabbel * Der Chat wird stark verändert, vieles was geschrieben wird ist fast unverständlich, teilweise nur Gebrabbel
* Ist der getrunkene Alkohol sehr stark wird er sich leicht vergiften * Ist der getrunkene Alkohol sehr stark wird er sich leicht vergiften
* Loggt der Spieler sich aus wird er Schwierigkeiten haben sich wieder ein zu loggen * Hat er sehr viel getrunken, besteht die Wahrscheinlichkeit, dass er sich übergibt
* Loggt der Spieler sich aus wird er Schwierigkeiten haben sich wieder ein zu loggen, da sein Charakter nicht reagiert
* Trinkt er zu viel wird er in Ohnmacht fallen (Disconnect) * Trinkt er zu viel wird er in Ohnmacht fallen (Disconnect)
### Ausnüchtern ### Ausnüchtern
+2 -2
View File
@@ -62,13 +62,13 @@ public class BIngredients {
new Brew(uid, quality, cookRecipe, new BIngredients(ingredients, cookedTime)); new Brew(uid, quality, cookRecipe, new BIngredients(ingredients, cookedTime));
cookedName = cookRecipe.getName(quality); cookedName = cookRecipe.getName(quality);
potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false)); potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(true));
} else { } else {
// new base potion // new base potion
new Brew(uid, new BIngredients(ingredients, cookedTime)); new Brew(uid, new BIngredients(ingredients, cookedTime));
if (state == 0) {// TODO sonst 1 if (state == 1) {
cookedName = "Schlammiger Sud"; cookedName = "Schlammiger Sud";
potion.setDurability(Brew.PotionColor.BLUE.getColorId(false)); potion.setDurability(Brew.PotionColor.BLUE.getColorId(false));
} else { } else {
+73
View File
@@ -6,6 +6,8 @@ import java.util.HashMap;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@@ -15,6 +17,9 @@ import com.dre.brewery.Brew;
public class BPlayer { public class BPlayer {
public static Map<String, BPlayer> players = new HashMap<String, BPlayer>();// Players name and BPlayer public static Map<String, BPlayer> players = new HashMap<String, BPlayer>();// Players name and BPlayer
private static Map<Player, Integer> pTasks = new HashMap<Player, Integer>();// Player and count
private static int taskId;
public static int pukeItemId;
private int quality = 0;// = quality of drunkeness * drunkeness private int quality = 0;// = quality of drunkeness * drunkeness
private int drunkeness = 0;// = amount of drunkeness private int drunkeness = 0;// = amount of drunkeness
@@ -92,6 +97,7 @@ public class BPlayer {
} else { } else {
bPlayer.quality = bPlayer.getQuality() * 100; bPlayer.quality = bPlayer.getQuality() * 100;
bPlayer.drunkeness = 100; bPlayer.drunkeness = 100;
addPuke(player, 60 + (int) (Math.random() * 60));
P.p.msg(player, "Du kannst nicht mehr trinken"); P.p.msg(player, "Du kannst nicht mehr trinken");
} }
} }
@@ -253,6 +259,66 @@ public class BPlayer {
PotionEffectType.HUNGER.createEffect(duration, amplifier).apply(player); PotionEffectType.HUNGER.createEffect(duration, amplifier).apply(player);
} }
// Chance that players puke on big drunkeness
// runs every 6 sec, average chance is 10%, so should puke about every 60 sec
// good quality can decrease the chance by up to 10%
public void drunkPuke(Player player) {
if (drunkeness >= 80) {
if (drunkeness >= 90) {
if (Math.random() < 0.15 - (getQuality() / 100)) {
addPuke(player, 20 + (int) (Math.random() * 40));
}
} else {
if (Math.random() < 0.08 - (getQuality() / 100)) {
addPuke(player, 10 + (int) (Math.random() * 30));
}
}
}
}
// make a Player puke "count" items
public static void addPuke(Player player, int count) {
if (!P.p.getConfig().getBoolean("enablePuke", false)) {
return;
}
if (pTasks.isEmpty()) {
taskId = P.p.getServer().getScheduler().scheduleSyncRepeatingTask(P.p, new Runnable() {
public void run() {
pukeTask();
}
}, 1L, 1L);
}
pTasks.put(player, count);
}
public static void pukeTask() {
for (Player player : pTasks.keySet()) {
puke(player);
int newCount = pTasks.get(player) - 1;
if (newCount == 0) {
pTasks.remove(player);
} else {
pTasks.put(player, newCount);
}
}
if (pTasks.isEmpty()) {
P.p.getServer().getScheduler().cancelTask(taskId);
}
}
public static void puke(Player player) {
Location loc = player.getLocation();
Vector direction = loc.getDirection();
direction.multiply(0.5);
loc.setY(loc.getY() + 1.5);
loc.setPitch(loc.getPitch() + 10);
loc.add(direction);
Item item = player.getWorld().dropItem(loc, new ItemStack(pukeItemId));
item.setVelocity(direction);
item.setPickupDelay(Integer.MAX_VALUE);
}
public void drunkEffects(Player player) { public void drunkEffects(Player player) {
int duration = 10 - getQuality(); int duration = 10 - getQuality();
duration += drunkeness / 2; duration += drunkeness / 2;
@@ -293,11 +359,18 @@ public class BPlayer {
public static void drunkeness() { public static void drunkeness() {
for (String name : players.keySet()) { for (String name : players.keySet()) {
BPlayer bplayer = players.get(name); BPlayer bplayer = players.get(name);
if (bplayer.drunkeness > 30) { if (bplayer.drunkeness > 30) {
if (bplayer.offlineDrunk == 0) { if (bplayer.offlineDrunk == 0) {
Player player = getPlayer(name); Player player = getPlayer(name);
if (player != null) { if (player != null) {
bplayer.drunkEffects(player); bplayer.drunkEffects(player);
if (P.p.getConfig().getBoolean("enablePuke", false)) {
bplayer.drunkPuke(player);
}
} }
} }
} }
+4 -2
View File
@@ -99,6 +99,7 @@ public class P extends JavaPlugin {
// various Settings // various Settings
autosave = config.getInt("autosave", 3); autosave = config.getInt("autosave", 3);
BPlayer.pukeItemId = Material.matchMaterial(config.getString("pukeItem", "SOUL_SAND")).getId();
// loading recipes // loading recipes
ConfigurationSection configSection = config.getConfigurationSection("recipes"); ConfigurationSection configSection = config.getConfigurationSection("recipes");
@@ -112,8 +113,9 @@ public class P extends JavaPlugin {
configSection = config.getConfigurationSection("cooked"); configSection = config.getConfigurationSection("cooked");
if (configSection != null) { if (configSection != null) {
for (String ingredient : configSection.getKeys(false)) { for (String ingredient : configSection.getKeys(false)) {
BIngredients.cookedNames.put(Material.matchMaterial(ingredient), (configSection.getString(ingredient))); Material mat = Material.matchMaterial(ingredient);
BIngredients.possibleIngredients.add(Material.matchMaterial(ingredient)); BIngredients.cookedNames.put(mat, (configSection.getString(ingredient, null)));
BIngredients.possibleIngredients.add(mat);
} }
} }
+2
View File
@@ -91,6 +91,8 @@ public class Words {
} else if (from.equalsIgnoreCase("-start")) { } else if (from.equalsIgnoreCase("-start")) {
from = words; from = words;
to = to + words; to = to + words;
} else if (from.equalsIgnoreCase("-all")) {
from = words;
} else if (from.equalsIgnoreCase("-space")) { } else if (from.equalsIgnoreCase("-space")) {
from = " "; from = " ";
} else if (from.equalsIgnoreCase("-random")) { } else if (from.equalsIgnoreCase("-random")) {