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

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
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: 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:
WHEAT: Getreideferment
@ -153,14 +159,14 @@ cooked:
APPLE: Apfelmost
POTATO_ITEM: Kartoffelmaische
LONG_GRASS: Kräuterbrühe
RED_MUSHROOM:
RED_MUSHROOM: Pilzsud
# 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.
# 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.
# 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
@ -378,4 +384,9 @@ words:
- replace: -end
to: ' *hicks*'
percentage: 70
alcohol: 50
alcohol: 50
- replace: -all
to: '*rülps*'
percentage: 3
alcohol: 60

View File

@ -1,5 +1,4 @@
# Brewery
=======
**Brewery ist ein Bukkit-Plugin zum brauen auch alkoholischer Getränke.**
@ -116,11 +115,12 @@ Schlägt man den Zapfhahn mit einer Axt ab, so werden alle Getränke herausgesch
Der Alkoholgehalt des Trankes wird beim trinken auf den Spieler übertragen. Je nach Qualität hat dies verschiedene Auswirkungen.
* Der Spieler kann nicht mehr richtig laufen, er wird Torkeln und für eine Strecke weit aus 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
* 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
* 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)
### Ausnüchtern
@ -129,4 +129,4 @@ Nach dem Trinken dauert es eine Weile, bis der Alkohol wieder verschwunden ist.
* Loggt der Spieler sich stark betrunken aus, kann es sein, dass er sich beim nächsten einloggen (wenn etwas Zeit vergangen ist) an einen ihm völlig unbekannten Ort mitten in der Pampa wiederfindet und keine Ahnung hat wie er dort hingkommen ist
* Loggt er sich erst nach einigen Stunden oder am nächsten Morgen wieder ein befindet er sich bei seinem home, ebenfalls ohne jede Erinnerung
* War der Alkohol nicht von der guten Qualität sind mit Nacherscheinungen zu rechnen (Slowness und Hunger).
* War der Alkohol nicht von der guten Qualität sind mit Nacherscheinungen zu rechnen (Slowness und Hunger).

View File

@ -62,13 +62,13 @@ public class BIngredients {
new Brew(uid, quality, cookRecipe, new BIngredients(ingredients, cookedTime));
cookedName = cookRecipe.getName(quality);
potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false));
potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(true));
} else {
// new base potion
new Brew(uid, new BIngredients(ingredients, cookedTime));
if (state == 0) {// TODO sonst 1
if (state == 1) {
cookedName = "Schlammiger Sud";
potion.setDurability(Brew.PotionColor.BLUE.getColorId(false));
} else {

View File

@ -6,6 +6,8 @@ import java.util.HashMap;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.entity.Player;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import org.bukkit.Location;
import org.bukkit.potion.PotionEffectType;
@ -15,6 +17,9 @@ import com.dre.brewery.Brew;
public class 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 drunkeness = 0;// = amount of drunkeness
@ -92,6 +97,7 @@ public class BPlayer {
} else {
bPlayer.quality = bPlayer.getQuality() * 100;
bPlayer.drunkeness = 100;
addPuke(player, 60 + (int) (Math.random() * 60));
P.p.msg(player, "Du kannst nicht mehr trinken");
}
}
@ -253,6 +259,66 @@ public class BPlayer {
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) {
int duration = 10 - getQuality();
duration += drunkeness / 2;
@ -293,11 +359,18 @@ 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);
if (P.p.getConfig().getBoolean("enablePuke", false)) {
bplayer.drunkPuke(player);
}
}
}
}

View File

@ -99,6 +99,7 @@ public class P extends JavaPlugin {
// various Settings
autosave = config.getInt("autosave", 3);
BPlayer.pukeItemId = Material.matchMaterial(config.getString("pukeItem", "SOUL_SAND")).getId();
// loading recipes
ConfigurationSection configSection = config.getConfigurationSection("recipes");
@ -112,8 +113,9 @@ public class P extends JavaPlugin {
configSection = config.getConfigurationSection("cooked");
if (configSection != null) {
for (String ingredient : configSection.getKeys(false)) {
BIngredients.cookedNames.put(Material.matchMaterial(ingredient), (configSection.getString(ingredient)));
BIngredients.possibleIngredients.add(Material.matchMaterial(ingredient));
Material mat = Material.matchMaterial(ingredient);
BIngredients.cookedNames.put(mat, (configSection.getString(ingredient, null)));
BIngredients.possibleIngredients.add(mat);
}
}

View File

@ -91,6 +91,8 @@ public class Words {
} else if (from.equalsIgnoreCase("-start")) {
from = words;
to = to + words;
} else if (from.equalsIgnoreCase("-all")) {
from = words;
} else if (from.equalsIgnoreCase("-space")) {
from = " ";
} else if (from.equalsIgnoreCase("-random")) {