Explorar el Código

new quests, teleporter

mloeschenkohl hace 7 meses
padre
commit
1b62083394

+ 36 - 67
Jan/4D_Fractal_Maker.txt

@@ -498,9 +498,39 @@ function place_blocks(current_layer, currently_active_dimensions, Blocks, first_
 		msg("dev",text.new("FirstCoords bigger than 32K"));
 		term();
 	}
-	wusi = false;//ob die koordinaten existieren und verändert worden sind
+
+    if(currently_active_dimensions == 0){//0 = XYZ
+        i = 3;
+        x = 0;
+        y = 1;
+        z = 2;
+    }elseif(currently_active_dimensions == 1){//1 = WYZ
+		i = 0;
+        x = 3;
+        y = 1;
+        z = 2;									  
+    }elseif(currently_active_dimensions == 2){//2 = WYX
+        i = 2;
+        x = 3;
+        y = 1;
+        z = 0;
+    }elseif(currently_active_dimensions == 3){//3 = ZYX
+        i = 3;
+        x = 2;
+        y = 1;
+        z = 0;
+    }elseif(currently_active_dimensions == 4){//4 = ZYW
+        i = 0;
+        x = 2;
+        y = 1;
+        z = 3;
+    }elseif(currently_active_dimensions == 5){//5 = XYW
+        i = 2;
+        x = 0;
+        y = 1;
+        z = 3;
+    }
 	while(hasnext(iterator)){
-		wusi = false;
 		element = next(iterator);
 		Coord_Array = map.getKey(element);//map.get(Blocks, key) ist der Block-Type, bei remove egal. D_Array[0] = x, D_Array[1] = y, D_Array[2] = z, D_Array[3] = w
 		//0 = XYZ, 1 = WYZ, 2 = XYW
@@ -514,71 +544,10 @@ function place_blocks(current_layer, currently_active_dimensions, Blocks, first_
 			waitfor(2);
 		}
 		
-		if(currently_active_dimensions == 0){//0 = XYZ
-			if(Coord_Array[3] == temp_c_l){
-				wusi = true;
-				X_place = Coord_Array[0];
-				Y_place = Coord_Array[1];
-				Z_place = Coord_Array[2];
-			}
-		}elseif(currently_active_dimensions == 1){//1 = WYZ
-			if(Coord_Array[0] == temp_c_l){
-				wusi = true;
-				X_place = Coord_Array[3];
-				Y_place = Coord_Array[1];
-				Z_place = Coord_Array[2];
-			}
-		}elseif(currently_active_dimensions == 2){//2 = WYX
-			if(Coord_Array[2] == temp_c_l){
-				wusi = true;
-				X_place = Coord_Array[3];
-				Y_place = Coord_Array[1];
-				Z_place = Coord_Array[0];
-			}
-		}elseif(currently_active_dimensions == 3){//3 = ZYX
-			if(Coord_Array[3] == temp_c_l){
-				wusi = true;
-				X_place = Coord_Array[2];
-				Y_place = Coord_Array[1];
-				Z_place = Coord_Array[0];
-			}
-		}elseif(currently_active_dimensions == 4){//4 = ZYW
-			if(Coord_Array[0] == temp_c_l){
-				wusi = true;
-				X_place = Coord_Array[2];
-				Y_place = Coord_Array[1];
-				Z_place = Coord_Array[3];
-			}
-		}elseif(currently_active_dimensions == 5){//5 = XYW
-			if(Coord_Array[2] == temp_c_l){
-				wusi = true;
-				X_place = Coord_Array[0];
-				Y_place = Coord_Array[1];
-				Z_place = Coord_Array[3];
-			}
-		}
-		if(math.abs(X_place) > 32000){
-			msg("dev",text.new("X_Coords bigger than 32K"));
-			msg("dev",text.new(X_place));
-			msg("dev",text.new(Y_place));
-			msg("dev",text.new(Z_place));
-			term();
-		}
-		if(math.abs(Y_place) > 32000 ){
-			msg("dev",text.new("Y_Coords bigger than 32K"));
-			msg("dev",text.new(X_place));
-			msg("dev",text.new(Y_place));
-			msg("dev",text.new(Z_place));
-			term();
-		}
-		if(math.abs(Z_place) > 32000){
-			msg("dev",text.new("Z_Coords bigger than 32K"));
-			msg("dev",text.new(X_place));
-			msg("dev",text.new(Y_place));
-			msg("dev",text.new(Z_place));
-			term();
-		}
-		if(wusi){
+		if(Coord_Array[i] == temp_c_l){
+			X_place = Coord_Array[x];
+			Y_place = Coord_Array[y];
+			Z_place = Coord_Array[z];
 			c += 2;
 			X_place += first_X;
 			Y_place += first_Y;

+ 1 - 1
Jan/bmq.txt

@@ -45,7 +45,7 @@ if(event == "entity_click"){
 	}
 	entity_name = entity.getName(entity);
 	string_name = string.text(entity_name);
-	if(entity_name == "§9Jan") {
+	if(entity_name == "§cJan") {
 		if(player.isSneaking(player)){
 			inv.open(Jan_inv, player);
 			goto("wait");

+ 3 - 3
Jan/jump_duo.txt

@@ -27,8 +27,8 @@ if (!list.contains(entangled_player, player)){
 	}
 	goto("wait");
 }
-sgoto(1,"jump");
-goto("wait");
+
+goto("jump");
 
 @jump
 Motion = entity.getMotion(player);
@@ -40,6 +40,6 @@ while(hasnext(list_iterator)){
 		continue;
 	}
 	pl_Motion = entity.getMotion(pl);
-	entity.setMotion(pl, Motion[0],Motion[1],Motion[2]);
+	entity.setMotion(pl, Motion[0],0.42,Motion[2]);
 }
 goto("wait");

+ 85 - 5
docu_core.php

@@ -2,7 +2,7 @@
     <table>
         <tr>
             <th class="command">
-                + - * / % &amp; | ^ ~ = += -= *= /= %= ++ -- &lt;&lt; &lt;&lt;= &gt;&gt; 
+                + - * / % = += -= *= /= %= ++ -- &lt;&lt;= 
                 &gt;&gt;= &amp;= ^= |= || &amp;&amp; () &lt; &gt; &lt;= &gt;= == ! !=
                 if while break continue elseif else
             </th>
@@ -12,10 +12,6 @@
             <td class="bold">Examples</td>
             <td>a = 3 * (5 - 1);<br>a++;<br>a <<= 3;</td>
         </tr>
-        <tr>
-            <td class="bold">Info</td>
-            <td><< and >> are not implemented at the moment</td>
-        </tr>
     </table>
     <table>
 		<tr>
@@ -571,6 +567,90 @@
             <td>true or false depending on the bit</td>
         </tr>
     </table>
+    <table>
+        <tr>
+            <th class="command">bit.leftShift</th>
+            <th class="desc">&lt;&lt;</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>bit.leftShift(value, value)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the left shifted value</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">bit.rightShift</th>
+            <th class="desc">&gt;&gt;</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>bit.rightShift(value, value)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the right shifted value</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">bit.and</th>
+            <th class="desc">&</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>bit.and(value, value)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the and value</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">bit.or</th>
+            <th class="desc">|</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>bit.or(value, value)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the or value</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">bit.xor</th>
+            <th class="desc">^</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>bit.xor(value, value)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the xor value</td>
+        </tr>
+    </table>
+    <table>
+        <tr>
+            <th class="command">bit.invert</th>
+            <th class="desc">~</th>
+        </tr>
+        <tr>
+            <td class="bold">Format</td>
+            <td>bit.invert(value)</td>
+        </tr>
+        <tr>
+            <td class="bold">Returns</td>
+            <td>the inverted value</td>
+        </tr>
+    </table>
 </section>
 
 <section id="Math">

+ 8 - 4
docu_minecraft.php

@@ -12,10 +12,6 @@
             <td class="bold">**</td>
             <td>can be null</td>
         </tr>
-        <tr>
-            <td class="bold">receiver</td>
-            <td>sender (player / console)<br>"dev" (perm "script.debug" needed)<br>"online"<br>"server"</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -1524,6 +1520,10 @@
             <td class="bold">Format</td>
             <td>msg(receiver, text)</td>
         </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>receiver:<br>sender (player / console)<br>"dev" (perm "script.debug" needed)<br>"online"<br>"server"</td>
+        </tr>
     </table>
     <table>
         <tr>
@@ -3491,6 +3491,10 @@
             <td class="bold">Format</td>
             <td>player.action(receiver, text)</td>
         </tr>
+        <tr>
+            <td class="bold">Info</td>
+            <td>receiver:<br>sender (player / console)<br>"dev" (perm "script.debug" needed)<br>"online"<br>"server"</td>
+        </tr>
     </table>
     <table>
         <tr>

+ 1 - 0
minigames/itemhunt/ihranked.txt

@@ -341,6 +341,7 @@ while(hasNext(iter)) {
 	
 	minigame.statsHeader(player, $gamename, "§e");
 	minigame.statsLine(player, "§e", "Found Items", string.number(yetfound));
+	minigame.statsLine(player, "§e", "Your record", string.number(last_record));
 	if(diff != null) {
 		msg(player, text.new(string.concat(" §e- §rBeat own record by §e", string.number(diff))));
 	}

+ 0 - 1
minigames/itemhunt/itemhuntitems.txt

@@ -44,7 +44,6 @@ list.add(items1, "pink_tulip");
 list.add(items1, "oxeye_daisy");
 list.add(items1, "sandstone");
 list.add(items1, "red_sandstone");
-list.add(items1, "grass");
 list.add(items1, "brown_mushroom");
 list.add(items1, "red_mushroom");
 list.add(items1, "crafting_table");

+ 1 - 1
minigames/shoppingchaos/shoppingchaos.txt

@@ -697,7 +697,7 @@ function updateDisplay() {
 		}
 		minigame.displayAll(97 - team, string.concat("§r", string.number(map.get($points, team)), " ", map.get($colorcodes, team), team_string));
 	}
-	minigame.displayAll(97 - i, sb.getSpacer());
+	minigame.displayAll(97 - team - 1, sb.getSpacer());
 }
 
 function addItem(item, item1, item2, item3, item4, item5, item6, item7, item8, item9) {

+ 31 - 46
story/admont/core.txt

@@ -4,13 +4,6 @@ quest_book = item.create("ENCHANTED_BOOK", 1, "§eQuests", null);
 //stable_loc = loc.new(world.getStory(), -1584, 66, -57);
 prefix_skill = "§2Skill";
 prefix_quest = "§dQuest";
-
-oma_inv = inv.new("333333333", text.new("Quests: Oma"));
-inv.setItem(oma_inv, 0, item.create("minecraft:enchanted_book", 1, "§fDer Anfang...", "§e...beginnt immer mit einer netten Oma."));
-inv.setItem(oma_inv, 8, item.create("minecraft:enchanted_book", 1, "§fMülleimer", "§eOma räumt für dich auf"));
-
-dieter_inv = inv.new("333333333", text.new("Quests: Dieter"));
-inv.setItem(dieter_inv, 0, item.create("minecraft:enchanted_book", 1, "§fGaumenschmauß...", "§e...für die ganze Familie."));
 	
 mageguard_inv = inv.new("333333333", text.new("Quests: Mage Guard"));
 inv.setItem(mageguard_inv, 0, item.create("minecraft:enchanted_book", 1, "§fMage", null));
@@ -33,8 +26,11 @@ inv.setItem(mason_inv, 0, item.create("minecraft:enchanted_book", 1, "§fNightma
 gustav_inv = inv.new("333333333", text.new("Quests: Gustav"));
 inv.setItem(gustav_inv, 0, item.create("minecraft:enchanted_book", 1, "§fHelfende Hand", null));
 
-gertrude_inv = inv.new("333333333", text.new("Quests: Gertrude"));
-inv.setItem(gertrude_inv, 0, item.create("minecraft:enchanted_book", 1, "§fMage Guard", null));
+butcher_inv = inv.new("200000000", text.new("Quests: Butcher"));
+inv.setItem(butcher_inv, 0, item.create("minecraft:enchanted_book", 1, "§fMage Guard", null));
+
+innkeeper_inv = inv.new("200000000", text.new("Quests: Innkeeper"));
+inv.setItem(innkeeper_inv, 0, item.create("minecraft:enchanted_book", 1, "§fDelicacy...", "§e...for the whole family."));
 
 bernd_inv = inv.new("333333333", text.new("Quests: Bernd"));
 inv.setItem(bernd_inv, 0, item.create("minecraft:enchanted_book", 1, "§fHide and Seek", null));
@@ -45,8 +41,9 @@ inv.setItem(kunibert_inv, 0, item.create("minecraft:enchanted_book", 1, "§fKrä
 bauer_inv = inv.new("333333333", text.new("Quests: Bauer"));
 inv.setItem(bauer_inv, 0, item.create("minecraft:enchanted_book", 1, "§fSpezialwunsch", null));
 
-baker_inv = inv.new("200000000", text.new("Quests: Baker"));
+baker_inv = inv.new("220000000", text.new("Quests: Baker"));
 inv.setItem(baker_inv, 0, item.create("minecraft:enchanted_book", 1, "§fIn Haste", null));
+inv.setItem(baker_inv, 1, item.create("minecraft:enchanted_book", 1, "§fThe beginning...", "§e...always starts with a nice grandma."));
 
 isabell_inv = inv.new("333333333", text.new("Quests: Isabell"));
 inv.setItem(isabell_inv, 0, item.create("minecraft:enchanted_book", 1, "§fFür die Wissenschaft!", null));
@@ -61,8 +58,9 @@ inv.setItem(rolf_inv, 0, item.create("minecraft:enchanted_book", 1, "§fTücher"
 schmied_inv = inv.new("333333333", text.new("Quests: Schmied"));
 inv.setItem(schmied_inv, 0, item.create("minecraft:enchanted_book", 1, "§fDie Uhr tickt", null));
 
-lumberjack_inv = inv.new("200000000", text.new("Quests: Lumberjack"));
+lumberjack_inv = inv.new("220000000", text.new("Quests: Lumberjack"));
 inv.setItem(lumberjack_inv, 0, item.create("minecraft:enchanted_book", 1, "§fMe and my wood", null));
+inv.setItem(lumberjack_inv, 1, item.create("minecraft:enchanted_book", 1, "§fReforestation", null));
 
 msg.string("dev", "§bQuests: §rAdmont loaded.");
 @main
@@ -79,19 +77,8 @@ if(item == quest_book) {
 		msg.prefix(player, prefix_quest, "You already have a quest.");
 		goto("main");
 	}
-	if(entity_name == "Oma") {
-		inv.open(oma_inv, player);
-	} elseif(entity_name == "Dieter") {
-		inv.open(dieter_inv, player);
-	} elseif(title_string == "Mage Guard") {
+	if(title_string == "Mage Guard") {
 		inv.open(mageguard_inv, player);
-	} elseif(entity_name == "Felsmagier") {
-		/*if() {
-			skill.showShop(player, "skill.subcu_inv", "skill.comeback", "skill.head_human", "skill.head_monster", "skill.fly10min", "skill.grow", "skill.haste", "skill.speed", "skill.jump_boost", "skill.dolphin", "skill.block_up", "skill.block_down", "skill.fire_arrow", "skill.cobweb_miner", null, null, null, null);
-		} else {
-			msg.prefix(player, "§dFelsmagier", "Du musst zuerst ein paar Aufgaben für mich erledigen. Finde meinen Zauberlehrling, der hilft dir weiter.");
-		}*/
-		goto("main");
 	} elseif(title_string == "Farmer") {
 		inv.open(farmer_inv, player);
 	} elseif(title_string == "Anna") {
@@ -102,8 +89,10 @@ if(item == quest_book) {
 		inv.open(mason_inv, player);
 	} elseif(entity_name == "Gustav") {
 		inv.open(gustav_inv, player);
-	} elseif(entity_name == "Gertrude") {
-		inv.open(gertrude_inv, player);
+	} elseif(title_string == "Butcher") {
+		inv.open(butcher_inv, player);
+	} elseif(title_string == "Innkeeper") {
+		inv.open(innkeeper_inv, player);
 	} elseif(entity_name == "Bernd") {
 		inv.open(bernd_inv, player);
 	} elseif(entity_name == "Kunibert") {
@@ -125,25 +114,6 @@ if(item == quest_book) {
 	}
 	goto("main");
 }
-if(title_string == "Quests: Oma") {
-	if(inv_slot == 0) {
-		quest.start(player, "story/admont/der_anfang");
-		goto("main");
-	}
-	if(inv_slot == 8) {
-		waste_inv = inv.new("111111111111111111111111111", text.new("Mülleimer"));
-		inv.open(waste_inv, player);
-		goto("main");
-	}
-	goto("main");
-}
-if(title_string == "Quests: Dieter") {
-	if(inv_slot == 0) {
-		quest.start(player, "story/admont/gaumenschmauss");
-		goto("main");
-	}
-	goto("main");
-}
 if(title_string == "Quests: Mage Guard") {
 	if(inv_slot == 0) {
 		if(script.isActiveName("scripts/story/admont/mage.txt")) {
@@ -209,9 +179,16 @@ if(title_string == "Quests: Gustav") {
 	}
 	goto("main");
 }
-if(inv_name == "Quests: Gertrude") {
+if(title_string == "Quests: Butcher") {
+	if(inv_slot == 0) {
+		quest.start(player, "story/admont/mage_guard");
+		goto("main");
+	}
+	goto("main");
+}
+if(title_string == "Quests: Innkeeper") {
 	if(inv_slot == 0) {
-		quest.start(player, "story/admont/zauberlehrling");
+		quest.start(player, "story/admont/delicacy");
 		goto("main");
 	}
 	goto("main");
@@ -246,6 +223,10 @@ if(title_string == "Quests: Baker") {
 		quest.start(player, "story/admont/in_haste");
 		goto("main");
 	}
+	if(inv_slot == 1) {
+		quest.start(player, "story/admont/the_beginning");
+		goto("main");
+	}
 	goto("main");
 }
 if(title_string == "Quests: Isabell") {
@@ -285,6 +266,10 @@ if(title_string == "Quests: Lumberjack") {
 		quest.start(player, "story/admont/me_and_my_wood");
 		goto("main");
 	}
+	if(inv_slot == 1) {
+		quest.start(player, "story/admont/reforestation");
+		goto("main");
+	}
 	goto("main");
 }
 goto("main");

+ 168 - 0
story/admont/delicacy.txt

@@ -0,0 +1,168 @@
+event.load("entity_click");
+event.load("quest_start");
+event.load("quest_term");
+event.load("custom_command");
+event.load("block_click");
+event.load("block_break");
+event.load("entity_damage");
+event.load("living_death");
+
+stage = 0;
+all_stages = 7;
+quest_name = "Delicacy...";
+coal_counter = 0;
+
+w = world.getOverworld();
+cow_loc = loc.new(w, 136.5, 74, -40);
+coal_ore_mat = material.get("COAL_ORE");
+coal_mat = material.get("COAL");
+beef_mat = material.get("BEEF");
+
+@wait
+wait();
+if(event == "living_death") {
+	player = player.getFromDamageSource(damage_source);
+	if(player == null) {
+		goto("wait");
+	}
+}
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	//Hier Code einfügen...
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dInnkeeper", "It looks like we have company! If you've come here to eat with us, I'm afraid I have to disappoint you. We have neither a dish nor fire. You could say we need someone to cheer us up.");
+	msg.string(player, "§dAnswer options:");
+	msg(player, string.getClickText("[§dA§r] §eI'd love to join in the cheering!", "/questanswer A"));
+	msg(player, string.getClickText("[§dB§r] §eCheerleading? I can do that.", "/questanswer B"));
+	goto("wait");
+}
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "custom_command" && command == "questanswer") {
+	option = list.getIndex(args, 0);
+	if(option == "A" || option == "B") {
+		stage.increase(player);
+		msg.prefix(player, "§dInnkeeper", "Well, that's great. The Odelstein Cave is downstairs in Church Square 5. Go get us 6 pieces of coal.");
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "block_click") {
+	if(block == null) {
+		goto("wait");
+	}
+	block_type = block.getType(block);
+	if(block_type == coal_ore_mat) {
+		cancel = false;
+	}
+	goto("wait");
+}
+if(event == "block_break") {
+	block_type = block.getType(block);
+	if(block_type == coal_ore_mat) {
+		cancel = true;
+		item.drop(item.create("COAL", 1, null, null), entity.getLocation(player));
+		coal_counter++;
+		if(coal_counter == 6) {
+			stage.increase(player);
+		}
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "entity_click" && slot.isHand(hand) && isCitizen(entity)) {
+	entity_name = entity.getName(entity);
+	string_name = string.text(entity_name);
+	if(string_name == "Innkeeper") {
+		item = living.getHand(player);
+		item_type = item.getType(item);
+		if(item_type == coal_mat) {
+			rest_amount = citizen.giveItem(string_name, player, item_type, coal_counter);
+			if(rest_amount == 0) {
+				stage.increase(player);
+				msg.prefix(player, "§dInnkeeper", "Thank you! Now all we're missing is a proper roast.");
+				scheduler.msgPrefix(30, player, "§dInnkeeper", "We'll start the fire with some wood. Meanwhile, you go to the butcher and get us some beef!");
+			} else {
+				coal_counter = rest_amount;
+			}
+		}
+	}
+}
+goto("wait");
+
+@stage3
+if(event == "entity_click" && slot.isHand(hand) && isCitizen(entity)) {
+	entity_name = entity.getName(entity);
+	string_name = string.text(entity_name);
+	if(string_name == "Butcher") {
+		stage.increase(player);
+		msg.prefix(player, "§dButcher", "Hey, you really shouldn't be here! I don't want your young eyes to witness this gruesome scene.");
+		msg.string(player, "§dAnswer options:");
+		msg(player, string.getClickText("[§dA§r] §eIt's okay. I would like some beef, if that's possible.", "/questanswer A"));
+		msg(player, string.getClickText("[§dB§r] §eI can't bear to watch this at all!", "/questanswer B"));
+	}
+}
+goto("wait");
+
+@stage4
+if(event == "custom_command" && command == "questanswer") {
+	option = list.getIndex(args, 0);
+	if(option == "A") {
+		stage.increase(player);
+		msg.prefix(player, "§dButcher", "Well then, go through the door next to us in the slaughterhouse and pick one. I'll even let you do it yourself.");
+		entity.spawn(cow_loc, "COW");
+		goto("wait");
+	}
+	if(option == "B") {
+		stage.increase(player);
+		stage.increase(player);
+		player.safeGiveItem(player, item.create("BEEF", 1, null, null));
+		msg.prefix(player, "§dButcher", "No problem. I have some stored.");
+		scheduler.msgPrefix(30, player, "§dInnkeeper", "Come back to me.");
+	}
+}
+goto("wait");
+
+@stage5
+if(event == "entity_damage") {
+	if(entity.getType(entity) == "cow") {
+		cancel = false;
+	}
+}
+if(event == "living_death") {
+	if(entity.getType(living_entity) == "cow") {
+		stage.increase(player);
+		msg.prefix(player, "§dInnkeeper", "Come back to me.");
+	}
+}
+goto("wait");
+
+@stage6
+if(event == "entity_click" && slot.isHand(hand) && isCitizen(entity)) {
+	entity_name = entity.getName(entity);
+	string_name = string.text(entity_name);
+	if(string_name == "Innkeeper") {
+		item = living.getHand(player);
+		item_type = item.getType(item);
+		if(item_type == beef_mat) {
+			rest_amount = citizen.giveItem(string_name, player, item_type, 1);
+			if(rest_amount == 0) {
+				msg.prefix(player, "§dInnkeeper", "Excellent! This will be a unique culinary delight.");
+				player.safeGiveItem(player, item.create("COOKED_BEEF", 1, null, null));
+				msg(player, text.new("§dQuest finished. Reward: 22 snuvis!"));
+				money.addBoost(player, 22);
+				quest.finish(script, player);
+			}
+		}
+	}
+}
+goto("wait");

+ 0 - 108
story/admont/der_anfang.txt

@@ -1,108 +0,0 @@
-event.load("entity_click");
-event.load("quest_start");
-event.load("quest_term");
-event.load("block_click");
-event.load("custom_command");
-
-stage = 0;
-all_stages = 5;
-quest_name = "Der Anfang...";
-cake_loc = loc.new(world.getStory(), -1511, 65, -23);
-
-@wait
-wait();
-if(!player.isQuester(player, script)) {
-	goto("wait");
-}
-if(event == "quest_term") {
-	//Hier Code einfügen...
-	wait(); //Script wird von außen terminiert
-}
-if(event == "quest_start") {
-	quest.display(player, quest_name, stage, all_stages);
-	msg.prefix(player, "§dOma", "Hallo Grünschnabel! Du siehst sehr verloren aus... Ist alles okay bei dir?");
-	scheduler.msgPrefix(30, player, "§dOma", "Iss doch etwas von meinem frisch gebackenen Kuchen, damit du nicht verhungerst.");
-	block.set(cake_loc, "minecraft:cake");
-	if(player.getHunger(player) > 18) {
-		player.setHunger(player, 18);
-		player.setSaturation(player, 0);
-	}
-	goto("wait");
-}
-label = concat("stage", text.number(stage));
-goto(label);
-
-@stage0
-if(event == "block_click") {
-	if(block_loc == cake_loc) {
-		stage.increase(player);
-		msg.prefix(player, "§dOma", "Na, das ist doch schon besser :)");
-		scheduler.msgPrefix(30, player, "§dOma", "Geh doch dort über die Brücke und sprich mit dem Gastwirt, direkt am Dorfeingang auf der rechten Seite. Er wird dir sicher behilflich sein!");
-	}
-}
-goto("wait");
-
-@stage1
-if(event == "entity_click" && hand == "MAIN_HAND" && isCitizen(entity)) {
-	entity_name = entity.getName(entity);
-	string_name = string.text(entity_name);
-	if(string_name == "Gastwirt") {
-		stage.increase(player);
-		msg.prefix(player, "§dGastwirt", "Guten Tag, wie kann ich dir behilflich sein?");
-		msg(player, "§dAntwortmöglichkeiten:");
-		msg(player, text.click("[§dA§r] §eIch weiß nicht, wo ich hier gelandet bin.", "/questanswer A"));
-		msg(player, text.click("[§dB§r] §eMir ist nicht mehr zu helfen.", "/questanswer B"));
-	}
-}
-goto("wait");
-
-@stage2
-if(event == "custom_command" && command == "questanswer") {
-	option = list.getIndex(args, 0);
-	if(option == "A") {
-		stage.increase(player);
-		msg.prefix(player, "§dGastwirt", "Da bin ich der richtige Ansprechpartner. Du bist hier in Admont, einem kleinen Dörfchen in der weiten Welt.");
-		scheduler.msgPrefix(30, player, "§dGastwirt", "Du siehst mir recht vertrauenswürdig aus. Vielleicht könntest du uns die eine oder andere Arbeit abnehmen.");
-		scheduler.msgPrefix(60, player, "§dGastwirt", "Geh doch in mein Haus zu meiner Frau, sie wird dir weiterhelfen.");
-		goto("wait");
-	}
-	if(option == "B") {
-		stage.increase(player);
-		msg.prefix(player, "§dGastwirt", "Aber hallo. Das bekommen wir schon auf die Reihe.");
-		scheduler.msgPrefix(30, player, "§dGastwirt", "Du bist hier in Admont, einem kleinen Dörfchen in der weiten Welt.");
-		scheduler.msgPrefix(60, player, "§dGastwirt", "Du siehst mir recht vertrauenswürdig aus. Vielleicht könntest du uns die eine oder andere Arbeit abnehmen.");
-		scheduler.msgPrefix(90, player, "§dGastwirt", "Geh doch in mein Haus zu meiner Frau, sie wird dir weiterhelfen.");
-	}
-}
-goto("wait");
-
-@stage3
-if(event == "entity_click" && hand == "MAIN_HAND" && isCitizen(entity)) {
-	entity_name = entity.getName(entity);
-	string_name = string.text(entity_name);
-	if(string_name == "Gastwirtin") {
-		stage.increase(player);
-		msg.prefix(player, "§dGastwirtin", concat("Hallo, ", player.getName(player), " du scheinst neu zu sein. Mein Mann hat mir schon von dir erzählt."));
-		scheduler.msgPrefix(30, player, "§dGastwirtin", "Schau dich doch erstmal in Admont um und wenn du fertig bist, bring mir doch bitte etwas Wasser mit.");
-		scheduler.msgPrefix(60, player, "§dGastwirtin", "Nach diesem langen Tag bin ich sehr durstig. Hier hast du eine Wasserflasche.");
-		player.safeGiveItem(player, read.item("minecraft:glass_bottle"));
-	}
-}
-goto("wait");
-
-@stage4
-if(event == "entity_click" && hand == "MAIN_HAND" && isCitizen(entity)) {
-	entity_name = entity.getName(entity);
-	string_name = string.text(entity_name);
-	if(string_name == "Gastwirtin") {
-		item = living.getEquip(player, "hand");
-		if(text.item(item) == "{id:\"minecraft:potion\",Count:1b,tag:{Potion:\"minecraft:water\"}}") {
-			msg.prefix(player, "§dGastwirt", "Danke! Hier eine kleine Belohnung.");
-			player.removeItem(player, item);
-			msg(player, "§dQuest abgeschlossen. Belohnung: 22 Snuvis!");
-			money.addBoost(player, 22);
-			quest.finish(script, player);
-		}
-	}
-}
-goto("wait");

+ 0 - 140
story/admont/gaumenschmauss.txt

@@ -1,140 +0,0 @@
-event.load("entity_click");
-event.load("quest_start");
-event.load("quest_term");
-event.load("custom_command");
-event.load("block_break");
-event.load("living_death");
-
-stage = 0;
-all_stages = 7;
-quest_name = "Gaumenschmauß...";
-coal_counter = 0;
-story = world.getStory();
-cow_loc = loc.new(story, -1561.5, 66, -80);
-
-@wait
-wait();
-if(event == "living_death") {
-	player = player.getFromDamageSource(damage_source);
-	if(player == null) {
-		goto("wait");
-	}
-}
-if(!player.isQuester(player, script)) {
-	goto("wait");
-}
-if(event == "quest_term") {
-	//Hier Code einfügen...
-	wait(); //Script wird von außen terminiert
-}
-if(event == "quest_start") {
-	quest.display(player, quest_name, stage, all_stages);
-	msg.prefix(player, "§dDieter", "Sieht aus als hätten wir Gesellschaft! Wenn du hergekommen bist, um mit uns zu essen, muss ich dich leider enttäuschen. Wir haben weder ein Gericht, noch Feuer. Man könnte sagen, wir brauchen jemanden zum Anfeuern.");
-	msg(player, "§dAntwortmöglichkeiten:");
-	msg(player, text.click("[§dA§r] §eIch feuer sehr gerne mit an!", "/questanswer A"));
-	msg(player, text.click("[§dB§r] §eCheerleading? Kann ich.", "/questanswer B"));
-	goto("wait");
-}
-label = concat("stage", text.number(stage));
-goto(label);
-
-@stage0
-if(event == "custom_command" && command == "questanswer") {
-	option = list.getIndex(args, 0);
-	if(option == "A" || option == "B") {
-		stage.increase(player);
-		msg.prefix(player, "§dDieter", "Na das ist doch super. Hier in der Nähe ist die Odelsteinhöhle. Hol uns doch 6 Stück Kohle.");
-		player.giveSingleItem(player, read.item("minecraft:stone_pickaxe"), false);
-	}
-}
-goto("wait");
-
-@stage1
-if(event == "block_break") {
-	if(block_type == "minecraft:coal_ore") {
-		cancel = true;
-		item.drop(entity.getLocation(player), read.item("minecraft:coal"));
-		coal_counter++;
-		if(coal_counter == 6) {
-			stage.increase(player);
-		}
-	}
-}
-goto("wait");
-
-@stage2
-if(event == "entity_click" && hand == "MAIN_HAND" && isCitizen(entity)) {
-	entity_name = entity.getName(entity);
-	string_name = string.text(entity_name);
-	if(string_name == "Dieter") {
-		rest_amount = citizen.giveItem(string_name, player, "minecraft:coal", coal_counter);
-		if(rest_amount == 0) {
-			stage.increase(player);
-			msg.prefix(player, "§dDieter", "Vielen Dank! Jetzt fehlt uns nur noch ein ordentlicher Braten.");
-			scheduler.msgPrefix(30, player, "§dDieter", "Wir zünden schonmal das Holz an. Geh du derweil zum Metzger und besorg uns etwas Rindfleisch!");
-		} else {
-			coal_counter = rest_amount;
-		}
-	}
-}
-goto("wait");
-
-@stage3
-if(event == "entity_click" && hand == "MAIN_HAND" && isCitizen(entity)) {
-	entity_name = entity.getName(entity);
-	string_name = string.text(entity_name);
-	if(string_name == "Metzger") {
-		stage.increase(player);
-		msg.prefix(player, "§dMetzger", "Hey, du gehörst hier eigentlich nicht hin! Ich will deinen jungen Augen diesen grausamen Anblick ersparen.");
-		msg(player, "§dAntwortmöglichkeiten:");
-		msg(player, text.click("[§dA§r] §eDas macht nichts. Ich hätte gerne etwas Rindfleisch, wenn das möglich ist.", "/questanswer A"));
-		msg(player, text.click("[§dB§r] §eIch kann das auf keinen Fall mit ansehen!", "/questanswer B"));
-	}
-}
-goto("wait");
-
-@stage4
-if(event == "custom_command" && command == "questanswer") {
-	option = list.getIndex(args, 0);
-	if(option == "A") {
-		stage.increase(player);
-		msg.prefix(player, "§dMetzger", "Na dann such dir eins aus. Ich erlaube dir auch, selbst Hand anzulegen.");
-		entity.spawn("cow", cow_loc);
-		player.giveSingleItem(player, read.item("minecraft:stone_axe"), false);
-		goto("wait");
-	}
-	if(option == "B") {
-		stage.increase(player);
-		stage.increase(player);
-		player.safeGiveItem(player, read.item("minecraft:beef", 1));
-		msg.prefix(player, "§dMetzger", "Kein Problem. Ich habe noch etwas gelagert.");
-		scheduler.msgPrefix(30, player, "§dDieter", "Komm zurück zu mir.");
-	}
-}
-goto("wait");
-
-@stage5
-if(event == "living_death") {
-	if(entity.getType(living_entity) == "cow") {
-		stage.increase(player);
-		msg.prefix(player, "§dDieter", "Komm zurück zu mir.");
-	}
-}
-goto("wait");
-
-@stage6
-if(event == "entity_click" && hand == "MAIN_HAND" && isCitizen(entity)) {
-	entity_name = entity.getName(entity);
-	string_name = string.text(entity_name);
-	if(string_name == "Dieter") {
-		rest_amount = citizen.giveItem(string_name, player, "minecraft:beef", 1);
-		if(rest_amount == 0) {
-			msg.prefix(player, "§dDieter", "Super! Das wird ein einzigartiger Gaumenschmaus.");
-			player.safeGiveItem(player, read.item("minecraft:cooked_beef"));
-			msg(player, "§dQuest abgeschlossen. Belohnung: 28 Snuvis!");
-			money.addBoost(player, 28);
-			quest.finish(script, player);
-		}
-	}
-}
-goto("wait");

+ 61 - 0
story/admont/mage_guard.txt

@@ -0,0 +1,61 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("custom_command");
+event.load("player_move");
+
+stage = 0;
+all_stages = 2;
+quest_name = "Zauberlehrling";
+
+breads = item.create("minecraft:bread", 5, null, null);
+
+@wait
+wait();
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	player.removeItem(player, breads);
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dButcher", " have so much to do. Please be my helping hand. I'm devastated! I would love to visit my grandson, the Mage Guard. Unfortunately, I'm not the youngest anymore and my knees can't handle it either. It would be so kind of you if you could bring him his favorite bread and greet him from me!");
+	msg.string(player, "§dAnswer options:");
+	msg(player, string.getClickText("[§dA§r] §eNo problem, I'll set off right away.", "/questanswer A"));
+	msg(player, string.getClickText("[§dB§r] §eI also have knee problems.", "/questanswer B"));
+	goto("wait");
+}
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "custom_command" && command == "questanswer") {
+	option = list.getIndex(args, 0);
+	if(option == "A") {
+		stage.increase(player);
+		player.giveItem(player, breads);
+		msg.prefix(player, "§dButcher", "Follow the way to the mage tower.");
+		w = world.getOverworld();
+		loc1 = loc.new(w, 191, 23, -81);
+		loc2 = loc.new(w, 201, 20, -71);
+		move_id = event.addMoveData(loc1, loc2, -1, -1, player);
+		goto("wait");
+	}
+	if(option == "B") {
+		msg.prefix(player, "§dButcher", "Then he will probably never hear from me again...");
+		msg.prefix(player, "§dQuest", "Quest termed.");
+		quest.term(script, player);
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "player_move") {
+	if(id == move_id) {
+		money.addBoost(player, 4);
+		msg(player, text.new("§dQuest finished. Reward: 4 snuvis!"));
+		quest.finish(script, player);
+	}
+}
+goto("wait");

+ 48 - 0
story/admont/reforestation.txt

@@ -0,0 +1,48 @@
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_place");
+
+stage = 0;
+all_stages = 1;
+quest_name = "Reforestation";
+
+spruce_sap = 0;
+spruce_sap_mat = material.get("SPRUCE_SAPLING");
+saps = item.create("SPRUCE_SAPLING", 5, null, null);
+
+@wait
+wait();
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	player.removeItem(player, saps);
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dLumberjack", "I am concerned about the sustainability of the forest.");
+	scheduler.msgPrefix(30, player, "§dLumberjack", "Please plant 5 new trees around the village. Here you have 5 saplings.");
+	player.giveItem(player, saps);
+	goto("wait");
+}
+
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "block_place") {
+	block_type = block.getType(block);
+	if(block_type == spruce_sap_mat && !cancel) {
+		spruce_sap++;
+		if(spruce_sap == 5) {
+			stage.increase(player);
+			msg.prefix(player, "§dLumberjack", "Part of the forest, part of the crew.");
+			msg(player, text.new("§dQuest finished. Reward: 3 snuvis!"));
+			money.addBoost(player, 3);
+			quest.finish(script, player);
+		}
+	}
+	goto("wait");
+}
+goto("wait");

+ 4 - 1
story/admont/schatz_von_admont.txt

@@ -24,7 +24,7 @@ if(event == "quest_term") {
 if(event == "quest_start") {
 	quest.display(player, quest_name, stage, all_stages);
 	msg.prefix(player, "§dMiner", "In Admont there is a hidden treasure. Nobody has ever seen it...");
-	scheduler.msgPrefix(30, player, "§dMiner", "I have tried it to find it since years.");
+	scheduler.msgPrefix(30, player, "§dMiner", "I have tried it to find it for years.");
 	scheduler.msgPrefix(60, player, "§dMiner", "Alena told me she had found a strange hole hidden in the tavern behind a door.");
 	scheduler.msgPrefix(90, player, "§dMiner", "Maybe you have more success than me.");
 	entity.spawn(mob_loc_1, "ZOMBIE");
@@ -38,6 +38,9 @@ goto(label);
 
 @stage0
 if(event == "block_click") {
+	if (block == NULL){
+		goto("wait");
+	}
 	block_loc = block.getLocation(block);
 	if(block_loc == treasure_chest_loc) {
 		stage.increase(player);

+ 110 - 0
story/admont/the_beginning.txt

@@ -0,0 +1,110 @@
+event.load("entity_click");
+event.load("quest_start");
+event.load("quest_term");
+event.load("block_click");
+event.load("custom_command");
+
+stage = 0;
+all_stages = 5;
+quest_name = "The beginning...";
+cake_loc = loc.new(world.getOverworld(), 124, 78, -38);
+cake_mat = material.get("CAKE");
+
+@wait
+wait();
+if(!player.isQuester(player, script)) {
+	goto("wait");
+}
+if(event == "quest_term") {
+	//Hier Code einfügen...
+	wait(); //Script wird von außen terminiert
+}
+if(event == "quest_start") {
+	quest.display(player, quest_name, stage, all_stages);
+	msg.prefix(player, "§dBaker", "Hello, greenhorn! You look very lost... Is everything okay with you?");
+	scheduler.msgPrefix(30, player, "§dBaker", "Have some of my freshly baked cake so you don't starve.");
+	block.setMaterial(block.get(cake_loc), cake_mat);
+	if(player.getHunger(player) > 18) {
+		player.setHunger(player, 18);
+		player.setSaturation(player, 0);
+	}
+	goto("wait");
+}
+label = string.concat("stage", string.number(stage));
+goto(label);
+
+@stage0
+if(event == "block_click") {
+	block_loc = block.getLocation(block);
+	if(block_loc == cake_loc) {
+		stage.increase(player);
+		msg.prefix(player, "§dBaker", "Well, that's better :)");
+		scheduler.msgPrefix(30, player, "§dBaker", "Go into the tavern and talk to the Innkeeper. He will definitely help you!");
+	}
+}
+goto("wait");
+
+@stage1
+if(event == "entity_click" && slot.isHand(hand) && isCitizen(entity)) {
+	entity_name = entity.getName(entity);
+	string_name = string.text(entity_name);
+	if(string_name == "Innkeeper") {
+		stage.increase(player);
+		msg.prefix(player, "§dInnkeeper", "Hello, how can I help you?");
+		msg.string(player, "§dAnswer options:");
+		msg(player, string.getClickText("[§dA§r] §eI don't know where I ended up here.", "/questanswer A"));
+		msg(player, string.getClickText("[§dB§r] §eI can't be helped anymore.", "/questanswer B"));
+	}
+}
+goto("wait");
+
+@stage2
+if(event == "custom_command" && command == "questanswer") {
+	option = list.getIndex(args, 0);
+	if(option == "A") {
+		stage.increase(player);
+		msg.prefix(player, "§dInnkeeper", "I am the right person to contact. You are here in Admont, a small village in the wide world.");
+		scheduler.msgPrefix(30, player, "§dInnkeeper", "You look pretty trustworthy to me. Maybe you could relieve us of some of the work.");
+		scheduler.msgPrefix(60, player, "§dInnkeeper", "Go to my wife at the counter, she will help you.");
+		goto("wait");
+	}
+	if(option == "B") {
+		stage.increase(player);
+		msg.prefix(player, "§dInnkeeper", "But of course. We'll get this sorted out.");
+		scheduler.msgPrefix(30, player, "§dInnkeeper", "You are here in Admont, a small village in the wide world.");
+		scheduler.msgPrefix(60, player, "§dInnkeeper", "You look pretty trustworthy to me. Maybe you could relieve us of some of the work.");
+		scheduler.msgPrefix(90, player, "§dInnkeeper", "Go to my wife at the counter, she will help you.");
+	}
+}
+goto("wait");
+
+@stage3
+if(event == "entity_click" && slot.isHand(hand) && isCitizen(entity)) {
+	entity_name = entity.getName(entity);
+	string_name = string.text(entity_name);
+	if(string_name == "Alena") {
+		stage.increase(player);
+		msg.prefix(player, "§dAlena", string.concat("Hello, ", player.getName(player), " you seem new. My husband already told me about you."));
+		scheduler.msgPrefix(30, player, "§dAlena", "First take a look around Admont and when you're done, please bring me some water.");
+		scheduler.msgPrefix(60, player, "§dAlena", "After this long day I am very thirsty. Here you have a water bottle.");
+		player.safeGiveItem(player, item.create("GLASS_BOTTLE", 1, null, null));
+	}
+}
+goto("wait");
+
+@stage4
+if(event == "entity_click" && slot.isHand(hand) && isCitizen(entity)) {
+	entity_name = entity.getName(entity);
+	string_name = string.text(entity_name);
+	if(string_name == "Alena") {
+		item = living.getHand(player);
+		if(string.item(item) == "{Count:1b,id:\"minecraft:potion\",tag:{Potion:\"minecraft:water\"}}") {
+			msg.prefix(player, "§dInnkeeper", "Thanks! Here's a little reward.");
+			player.removeItem(player, item);
+			msg(player, text.new("§dQuest finished. Reward: 15 snuvis!"));
+			money.addBoost(player, 15);
+			quest.finish(script, player);
+		}
+	}
+}
+goto("wait");

+ 0 - 59
story/admont/zauberlehrling.txt

@@ -1,59 +0,0 @@
-event.load("quest_start");
-event.load("quest_term");
-event.load("custom_command");
-event.load("player_move");
-
-stage = 0;
-all_stages = 2;
-quest_name = "Zauberlehrling";
-
-@wait
-wait();
-if(!player.isQuester(player, script)) {
-	goto("wait");
-}
-if(event == "quest_term") {
-	//Hier Code einfügen...
-	wait(); //Script wird von außen terminiert
-}
-if(event == "quest_start") {
-	quest.display(player, quest_name, stage, all_stages);
-	msg.prefix(player, "§dGertrude", "Ich habe so viel zu tun. Sei doch meine helfende Hand. Ich bin am Boden zerstört! Wie gern würde ich meinen Enkel, den Zauberlehrling, am Berg besuchen. Leider bin ich nicht mehr die Jüngste und meine Knie machen da auch nicht mehr mit. Es wäre so lieb von dir, wenn du ihm sein Lieblingsbrot vorbeibringst und ihn von mir grüßt!");
-	msg(player, "§dAntwortmöglichkeiten:");
-	msg(player, text.click("[§dA§r] §eKein Problem, ich mache mich sofort auf den Weg.", "/questanswer A"));
-	msg(player, text.click("[§dB§r] §eIch habe auch Knieprobleme.", "/questanswer B"));
-	goto("wait");
-}
-label = concat("stage", text.number(stage));
-goto(label);
-
-@stage0
-if(event == "custom_command" && command == "questanswer") {
-	option = list.getIndex(args, 0);
-	if(option == "A") {
-		stage.increase(player);
-		player.giveItem(player, read.item("minecraft:bread", 15));
-		msg.prefix(player, "§dGertrude", "Folge dem Weg zum Felsmagier, dort oben zum Turm.");
-		story = world.get("story");
-		loc1 = loc.new(story, -1626, 85, 75);
-		loc2 = loc.new(story, -1625, 87, 76);
-		move_id = event.addMoveData(loc1, loc2, -1, -1, player);
-		goto("wait");
-	}
-	if(option == "B") {
-		msg.prefix(player, "§dGertrude", "Dann wird er wohl nie wieder von mir hören...");
-		msg.prefix(player, "§dQuest", "Quest termed.");
-		quest.term(script, player);
-	}
-}
-goto("wait");
-
-@stage1
-if(event == "player_move") {
-	if(id == move_id) {
-		money.addBoost(player, 15);
-		msg(player, "§dQuest abgeschlossen. Belohnung: 15 Snuvis!");
-		quest.finish(script, player);
-	}
-}
-goto("wait");

+ 113 - 14
survival/survival.txt

@@ -1,5 +1,4 @@
 event.load("entity_click");
-//event.load("inv_click");
 event.load("snuvi_click");
 event.load("player_pre_respawn");
 event.load("player_post_respawn");
@@ -12,9 +11,6 @@ event.load("entity_change_block");
 
 clan.loadData();
 
-tp_list = list.new();
-tp_map = map.new();
-tp_set = set.new();
 afk_loop_map = map.new();
 survival_respawn = set.new();
 
@@ -27,10 +23,9 @@ moveid_afk_up = event.addMoveData(loc.new(overworld, 170, 34, -47), loc.new(over
 moveid_tpcave_down = event.addMoveData(loc.new(overworld, 103, 80, -12), loc.new(overworld, 104, 81, -11), 20, -1);
 moveid_tpcave_up = event.addMoveData(loc.new(overworld, 91, 60, -22), loc.new(overworld, 92, 61, -21), 20, -1);
 
+daily_reward_loc = loc.new(overworld, 136, 77, -22);
 
 config = getScriptVar("server_config");
-adventure_chest_loc = loc.new(overworld, 177, 74, 237);
-adventure_aim_loc = loc.new(overworld, 180, 70, 241);
 mobarena_spawn = loc.new(overworld, 1150.5, -5, 1087, 90, 0);
 afk_down_loc = loc.new(overworld, 168.5, 34, -46.5, 135, 25);
 afk_up_loc = loc.new(overworld, 137.5, 66.6, -56.5, -35, 0);
@@ -377,19 +372,53 @@ goto("wait");
 
 @player_join
 if(player.isOnAdventure(player)) {
-	addAdventureDisplay(player, adventure_aim_loc);
+	//addAdventureDisplay(player, adventure_aim_loc);
 }
 goto("wait");
 
-@inv_click
-//Verhindert während eines (Abenteuer-)Teleports, die Benutzung des Spielerinventars (inkl. Crafting-Bereich!)
-player_uuid = player.getUuid(player);
-if(set.contains(tp_set, player_uuid)) {
-	cancel = true;
+@snuvi_click
+title_string = string.text(inv_title);
+if(title_string == "Daily Reward") {
+	item = inv.getItem(inv, inv_slot);
+	lore_list = item.getLore(item);
+	lore_string_0 = string.removeFormat(string.text(list.getIndex(lore_list, 0)));
+	if(lore_string_0 == "Heute abholen!") {
+		player.setLastVoteTime(player, time.getMillis());
+		dr_value = player.getDailyReward(player);
+		dr_value <<= 1; // shift all days to the left
+		dr_value = bit.set(dr_value, 0); // set today's bit
+		player.setDailyReward(player, dr_value);
+		player.setDailyRewardTime(player, time.getMillis());
+		list.setIndex(lore_list, 0, text.new("Bereits abgeholt"));
+		item.setLore(item, lore_list);
+		if(inv_slot == 0) {
+			reward_text = "1 Snuvi";
+			money.add(player, 1);
+		} elseif(inv_slot == 1) {
+			reward_text = "2 Snuvi";
+			money.add(player, 2);
+		} elseif(inv_slot == 2) {
+			reward_text = "4 Snuvi";
+			money.add(player, 4);
+		} elseif(inv_slot == 3) {
+			reward_text = "8 Snuvi";
+			money.add(player, 8);
+		} elseif(inv_slot == 4) {
+			reward_text = "16 Snuvi";
+			money.add(player, 16);
+		} elseif(inv_slot == 5) {
+			reward_text = "32 Snuvi";
+			money.add(player, 32);
+		} elseif(inv_slot == 6) {
+			reward_text = "1 Amber";
+			reward_item = item.custom.create("AMBER", 1, null, null);
+			player.safeGiveItem(player, reward_item);
+		}
+		msg.prefix(player, "§6Daily Reward", string.concat("Daily reward received: ", reward_text));
+	}
+	goto("wait");
 }
-goto("wait");
 
-@snuvi_click
 inv_id = inv.getId(inv);
 if(inv_id == bankinvid) { //Bankmenü
 	//Einzahlen
@@ -568,6 +597,54 @@ function fire_ring(location, block_string, radius){
 }
 
 @block_click
+if(block != null) {
+	block_loc = block.getLocation(block);
+	if(block_loc == daily_reward_loc) {
+		cancel = true;
+		dr_value = player.getDailyReward(player);
+		dr_time = player.getDailyRewardTime(player);
+		now_time = time.getMillis();
+		if(dr_value >= 127 && isFollowingDay(dr_time, now_time)) {
+			player.setDailyReward(player, 0);
+			player.setDailyRewardTime(player, 0);
+			dr_value = 0;
+			dr_time = 0;
+		}
+		
+		daily_reward_inv = inv.new("222222200", text.new("Daily Reward"));
+		canGetRewardTodayAlreadyShown = false;
+		for(i = 0; i < 7; i++) {
+			dr_bit = bit.get(dr_value, i);
+			if(dr_bit) {
+				lore = "Bereits abgeholt";
+			} elseif((dr_time == 0 || isFollowingDay(dr_time, now_time)) && !canGetRewardTodayAlreadyShown) {
+				lore = "Heute abholen!";
+				canGetRewardTodayAlreadyShown = true;
+			} else {
+				lore = "An einem anderen Tag abzuholen";
+			}
+			if(i == 0) {
+				inv.setItem(daily_reward_inv, 0, item.custom.create("COPPER_COIN", 1, "§f1 Snuvi", lore));
+			} elseif(i == 1) {
+				inv.setItem(daily_reward_inv, 1, item.custom.create("COPPER_COIN", 2, "§f2 Snuvi", lore));
+			} elseif(i == 2) {
+				inv.setItem(daily_reward_inv, 2, item.custom.create("COPPER_COIN", 4, "§f4 Snuvi", lore));
+			} elseif(i == 3) {
+				inv.setItem(daily_reward_inv, 3, item.custom.create("COPPER_COIN", 8, "§f8 Snuvi", lore));
+			} elseif(i == 4) {
+				inv.setItem(daily_reward_inv, 4, item.custom.create("COPPER_COIN", 16, "§f16 Snuvi", lore));
+			} elseif(i == 5) {
+				inv.setItem(daily_reward_inv, 5, item.custom.create("COPPER_COIN", 32, "§f32 Snuvi", lore));
+			} elseif(i == 6) {
+				inv.setItem(daily_reward_inv, 6, item.custom.create("AMBER", 1, "§f1 Amber", lore));
+			}
+		}
+		
+		
+		inv.open(daily_reward_inv, player);
+		goto("wait");
+	}
+}
 if(action == "RIGHT_CLICK_AIR") {
 	player_loc = entity.getLocation(player);
 	world = loc.getWorld(player_loc);
@@ -640,4 +717,26 @@ function lottery.setValue(value) {
 function lottery.getValue() {
 	config = getServerConfig();
 	return config.getDouble(config, "lottery_value", 0);
+}
+
+function player.getDailyReward(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getDouble(config, "dailyreward", 0);
+}
+
+function player.setDailyReward(player_or_id, value) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "dailyreward", value);
+	config.saveAsync(config);
+}
+
+function player.setDailyRewardTime(player_or_id, millis) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "lastdailyrewardtime", millis);
+	config.saveAsync(config);
+}
+
+function player.getDailyRewardTime(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getDouble(config, "lastdailyrewardtime", 0);
 }

+ 9 - 8
survival/teleporter.txt

@@ -17,7 +17,7 @@ adv_tp_sound = sound.get("BLOCK_PORTAL_TRAVEL");
 sound_category_ambient = sound.getCategory("AMBIENT");
 
 overworld = world.getOverWorld();
-adventure_chest_loc = loc.new(overworld, 104, 74, -6);
+random_tp_loc = loc.new(overworld, 134, 79, 5);
 
 event.load("block_click");
 
@@ -61,24 +61,25 @@ if(block.getType(block) == shroomlight_mat && action == "RIGHT_CLICK_BLOCK") {
 		goto("main");
 	}
 	map.add(tp_map, player_uuid, now_time);
-	//Abenteuer-Teleport
-	if(block_loc == adventure_chest_loc) {
+	//Random-Teleport
+	if(block_loc == random_tp_loc) {
 		/*if(!player.isOnAdventure(player)) {
 			if(!player.hasClearInventory(player)) {
 				msg.prefix(player, "§5Adventure", "Your inventory needs to be empty!");
 				goto("main");
 			}*/
+			disp_loc = loc.mod(block_loc, 0, 4, 0);
 			alpha = math.random(0, 360);
 			alpha *= math.pi() / 180;
 			x = math.round(math.sin(alpha) * 5000) + 0.5;
 			z = math.round(math.cos(alpha) * 5000) + 0.5;
 			tp_loc = loc.getHighestPoint(loc.new(world.getOverWorld(), x, 0, z));
-			setTpWallX(block_loc, tinted_glass_mat);
-			sound.spawn(block_loc, piston_sound, sound_category_ambient);
+			setTpWallX(disp_loc, tinted_glass_mat);
+			sound.spawn(disp_loc, piston_sound, sound_category_ambient);
 			player_uuid = player.getUuid(player);
 			array = array.new(4);
 			array[0] = player_uuid;
-			array[1] = block_loc;
+			array[1] = disp_loc;
 			array[2] = tp_loc;
 			//array[3] = true;
 			array[3] = false;
@@ -178,12 +179,12 @@ if(adventure) {
 			p = player.get(next(iter));
 			p_name = player.getName(p);
 			p_loc = entity.getLocation(p);
-			if(!loc.isSameWorld(adventure_chest_loc, p_loc)) {
+			if(!loc.isSameWorld(random_tp_loc, p_loc)) {
 				msg.prefix(player, "§5Party", string.concat(p_name, "§c is in another world."));
 				msg.prefix(p, "§5Party", "§cYou are in another world.");
 				continue;
 			}
-			if(loc.distance(adventure_chest_loc, p_loc) > 5) {
+			if(loc.distance(random_tp_loc, p_loc) > 5) {
 				msg.prefix(player, "§5Party", string.concat(p_name, "§c is too far away."));
 				msg.prefix(p, "§5Party", "§cYou are too far away.");
 				continue;

+ 4 - 5
system/cmdhelp.txt

@@ -350,9 +350,9 @@ command.addHelpArgument(help, command.newHelpLiteral("remove"));
 command.registerHelp(help);
 
 help = command.newHelp("perm", "perm");
-command.addHelpArgument(help, command.newHelpLiteral("give", "perm.give"));
+command.addHelpArgument(help, command.newHelpLiteral("give", "perm.remove"));
 command.addHelpArgument(help, command.newHelpSpecial("Player", "player"));
-command.addHelpArgument(help, command.newHelpLiteral("owner", "isOwner"));
+command.addHelpArgument(help, command.newHelpLiteral("owner", "isAdmin"));
 command.registerHelp(help);
 help = command.newHelp("perm", "perm");
 command.addHelpArgument(help, command.newHelpLiteral("give", "perm.give"));
@@ -369,7 +369,6 @@ addPermHelp("perm", "give", "builder");
 addPermHelp("perm", "give", "worldedit");
 addPermHelp("perm", "give", "vip");
 addPermHelp("perm", "give", "developer");
-addPermHelp("perm", "give", "devmaster");
 addPermHelp("perm", "give", "yt");
 addPermHelp("perm", "give", "streamer");
 addPermHelp("perm", "give", "sponsor");
@@ -380,10 +379,11 @@ addPermHelp("perm", "give", "altruist");
 addPermHelp("perm", "give", "legend");
 addPermHelp("perm", "give", "creativeWE");
 
+
 help = command.newHelp("perm", "perm");
 command.addHelpArgument(help, command.newHelpLiteral("remove", "perm.remove"));
 command.addHelpArgument(help, command.newHelpSpecial("Player", "player"));
-command.addHelpArgument(help, command.newHelpLiteral("owner", "isOwner"));
+command.addHelpArgument(help, command.newHelpLiteral("owner", "isAdmin"));
 command.registerHelp(help);
 help = command.newHelp("perm", "perm");
 command.addHelpArgument(help, command.newHelpLiteral("remove", "perm.remove"));
@@ -400,7 +400,6 @@ addPermHelp("perm", "remove", "builder");
 addPermHelp("perm", "remove", "worldedit");
 addPermHelp("perm", "remove", "vip");
 addPermHelp("perm", "remove", "developer");
-addPermHelp("perm", "remove", "devmaster");
 addPermHelp("perm", "remove", "yt");
 addPermHelp("perm", "remove", "streamer");
 addPermHelp("perm", "remove", "sponsor");

+ 32 - 45
system/commands.txt

@@ -374,36 +374,35 @@ set.add(not_blocked_cmd, "quest");
 set.add(not_blocked_cmd, "msg");
 set.add(not_blocked_cmd, "help");
 
-rank_array = array.new(28, 2);
+rank_array = array.new(27, 2);
 //Playtime
-rank.add(0, "rank.owner", "4Owner");
-rank.add(1, "rank.admin", "cAdmin");
-rank.add(2, "rank.moderator", "9Moderator");
-rank.add(3, "rank.supporter", "bSupporter");
-rank.add(4, "rank.dev", "5Developer");
-rank.add(5, "rank.builder", "5Builder");
-rank.add(6, "rank.vip", "dVIP");
-rank.add(7, "rank.influencer", "dInfluencer");
-rank.add(8, "rank.sponsor", "dSponsor");
-rank.add(9, "rank.legend", "2Legend");
-rank.add(10, "rank.pioneer", "2Pioneer");
-rank.add(11, "rank.lord", "2Lord");
-rank.add(12, "rank.altruist", "2Altruist");
-rank.add(13, "rank.major", "2Major");
-rank.add(14, "rank.frequenter", "6Frequenter");
-rank.add(15, "rank.explorer", "6Explorer");
-rank.add(16, "rank.chief", "6Chief");
-rank.add(17, "rank.friend", "6Friend");
-rank.add(18, "rank.colonizer", "6Colonizer");
-rank.add(19, "rank.newcomer", "eNewcomer");
-rank.add(20, "rank.adventurer", "eAdventurer");
-rank.add(21, "rank.commander", "eCommander");
-rank.add(22, "rank.volunteer", "eVolunteer");
-rank.add(23, "rank.settler", "eSettler");
-rank.add(24, "rank.user", "3User");
-rank.add(25, "rank.challenger", "5Challenger");
-rank.add(26, "rank.mobhunter", "6Mobhunter");
-rank.add(27, "rank.collector", "2Collector");
+rank.add(0, "rank.admin", "cAdmin");
+rank.add(1, "rank.moderator", "9Moderator");
+rank.add(2, "rank.supporter", "bSupporter");
+rank.add(3, "rank.dev", "5Developer");
+rank.add(4, "rank.builder", "5Builder");
+rank.add(5, "rank.vip", "dVIP");
+rank.add(6, "rank.influencer", "dInfluencer");
+rank.add(7, "rank.sponsor", "dSponsor");
+rank.add(8, "rank.legend", "2Legend");
+rank.add(9, "rank.pioneer", "2Pioneer");
+rank.add(10, "rank.lord", "2Lord");
+rank.add(11, "rank.altruist", "2Altruist");
+rank.add(12, "rank.major", "2Major");
+rank.add(13, "rank.frequenter", "6Frequenter");
+rank.add(14, "rank.explorer", "6Explorer");
+rank.add(15, "rank.chief", "6Chief");
+rank.add(16, "rank.friend", "6Friend");
+rank.add(17, "rank.colonizer", "6Colonizer");
+rank.add(18, "rank.newcomer", "eNewcomer");
+rank.add(19, "rank.adventurer", "eAdventurer");
+rank.add(20, "rank.commander", "eCommander");
+rank.add(21, "rank.volunteer", "eVolunteer");
+rank.add(22, "rank.settler", "eSettler");
+rank.add(23, "rank.user", "3User");
+rank.add(24, "rank.challenger", "5Challenger");
+rank.add(25, "rank.mobhunter", "6Mobhunter");
+rank.add(26, "rank.collector", "2Collector");
 setScriptVar("ranks", rank_array);
 
 month_array = array.new(12, 2);
@@ -1721,7 +1720,7 @@ goto("wait");
 
 @infopoint6
 msg.string(player, string.getSpacer());
-msg.prefix(player, "§eShops", "§aUse our admin-shop to trade, or create an own shop with /shop. We might do a YT-tutorial on this.");
+msg.prefix(player, "§eShops", "§aTrade with citizens and players, or create your own chest shop with /shop.");
 goto("wait");
 
 @infopoint7
@@ -1741,7 +1740,7 @@ goto("wait");
 
 @infopoint10
 msg.string(player, string.getSpacer());
-msg.prefix(player, "§eRules", "§aWe have no rules, except to be respectful. Look at our jokes instead.");
+msg.prefix(player, "§eJokes", "§aWe have no rules, except to be respectful. Look at our jokes instead.");
 goto("wait");
 
 @infopoint11
@@ -1751,7 +1750,7 @@ goto("wait");
 
 @infopoint12
 msg.string(player, string.getSpacer());
-msg.prefix(player, "§eNote", "§aBe Creative in our creative world.");
+msg.prefix(player, "§eCreative", "§aBe Creative in our creative world.");
 goto("wait");
 
 @party
@@ -2845,7 +2844,7 @@ iter = iterator(list);
 if(title_a == null) {
 	while(hasNext(iter)) {
 	p = next(iter);
-		sb.setTitle(p, text.new("§c§k# §6minecraft§c.§6marvin§c.§6lu §c§k#"));
+		sb.setTitle(p, text.new("§c§k# §6mundus§c-§6crassus§c.§6de §c§k#"));
 		title_a = true;
 	}
 } else {
@@ -3471,12 +3470,6 @@ if(arg0 == "give") {
 		msg.prefix(player, prefix_perms, "This is not a permission group.");
 		goto("wait");
 	}
-	if(!perm.has("isOwner", player)) {
-		if(perm == "owner") {
-			msg.prefix(player, prefix_perms, "Only owners can give this permission group.");
-			goto("wait");
-		}
-	}
 	if(!perm.has("isAdmin", player)) {
 		if(perm == "admin" || perm == "mod") {
 			msg.prefix(player, prefix_perms, "Only admins can give this permission group.");
@@ -3526,12 +3519,6 @@ if(arg0 == "remove") {
 		msg.prefix(player, prefix_perms, "This is not a permission group.");
 		goto("wait");
 	}
-	if(!perm.has("isOwner", player)) {
-		if(perm == "owner") {
-			msg.prefix(player, prefix_perms, "Only owners can remove this permission group.");
-			goto("wait");
-		}
-	}
 	if(!perm.has("isAdmin", player)) {
 		if(perm == "admin" || perm == "mod") {
 			msg.prefix(player, prefix_perms, "Only admins can remove this permission group.");

+ 5 - 1
system/humans.txt

@@ -9,6 +9,7 @@ quest_book = item.create("ENCHANTED_BOOK", 1, "§eQuests", null);
 scroll = item.custom.create("SCROLL", 1, "§2Skills", null);
 spyglass = item.create("SPYGLASS", 1, "§2Challenges", null);
 
+//createMainMenu(inv_name, market, quests, skills, challenges)
 anna_inv = createMainMenu("Anna", false, true, false, false);
 farmer_inv = createMainMenu("Farmer", true, true, false, false);
 fisher_inv = createMainMenu("Fisher", true, false, false, false);
@@ -19,11 +20,12 @@ mason_inv = createMainMenu("Mason", true, true, false, false);
 priest_inv = createMainMenu("Priest", true, false, false, false);
 mage_inv = createMainMenu("Mage", true, false, true, false);
 lumberjack_inv = createMainMenu("Lumberjack", true, true, true, true);
-butcher_inv = createMainMenu("Butcher", true, false, false, true);
+butcher_inv = createMainMenu("Butcher", true, true, false, true);
 librarian_inv = createMainMenu("Librarian", true, false, false, true);
 nether_inv = createMainMenu("Nether Merchant", true, false, false, false);
 diver_inv = createMainMenu("Diver", true, false, false, false);
 mage_guard_inv = createMainMenu("Mage Guard", false, true, false, false);
+innkeeper_inv = createMainMenu("Innkeeper", false, true, false, false);
 
 skins = map.new();
 addSkin("notch", "ewogICJ0aW1lc3RhbXAiIDogMTYyNDUyNjI0NjM2MywKICAicHJvZmlsZUlkIiA6ICIwNjlhNzlmNDQ0ZTk0NzI2YTViZWZjYTkwZTM4YWFmNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3RjaCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yOTIwMDlhNDkyNWI1OGYwMmM3N2RhZGMzZWNlZjA3ZWE0Yzc0NzJmNjRlMGZkYzMyY2U1NTIyNDg5MzYyNjgwIgogICAgfQogIH0KfQ==", "K76X+5wYgbcKhUxr5ZJuF4MXquYNPM5ypUf6DdNz2k0+XaJlobLVVdETe2LotlHyj6ABoU3//8mGZnfwhdj2BiulOErpB6cQR4pMmIrW6T3TLCt4L8d9juQy7xy7Dw9sQngXWm2h3Cazm+205qa0apnvA/i+IGv+WeutP52kfGhJBAN7uBUQaut0NWBfFPL8Jo7DhwBvWf/KWVpcT9UcVQuS/dVP/VE0rrTTSf3x2/jGI0ksBEdOz5lROARCHwOA1sRDvP1nQHhZD1Uekj4Bmo6rsAjJCrzr++nK2IcaPMv1uTLv0sbsGe4JF884rqWHYzs7/Cc5lGv8FNy+QjHmTcISfjnlxwJIkI48KOmAjuaova+tU1gBHRFHqJR186Vw8gtIGHusitFr6rUuutODaHyJ1C9VnItyk5RF3eznsh+uUHSkT9NOCTAhx11UhaFjlIHgqHG3rRVmeFWyEKHE8Pk2yEAlROGPedp+oYEwMFbM97Q+og7W/RtSH+kYl9vNwpLrQEG2F0bQUtulwQrWzk8T2fKgPHncZIDS2YvQjrrHjjlG0bLbiakHGvRrMrLbrVtmQrKjOjLuc5j4M/quMoZpFz98q4uftCmNOyN9ZmoEjgFv5fOdsJDGJawSaug9VEieCWhuuPnXPx19GpT1TRzGRjDW9DqO08kNeCcRxq0=");
@@ -124,6 +126,8 @@ if(string_name == "Farmer") {
 	inv.open(diver_inv, player);
 } elseif(string_name == "Mage Guard") {
 	inv.open(mage_guard_inv, player);
+} elseif(string_name == "Innkeeper") {
+	inv.open(innkeeper_inv, player);
 }
 goto("main");
 

+ 9 - 18
system/perms.txt

@@ -10,12 +10,12 @@ databank.workerExecute(databank.prepare("
 
 permgroups = array.new(20, 4);
 perm.addGroup(0, "user", "3User", false);
-perm.addGroup(1, "owner", "4Owner", true);
+perm.addGroup(1, "owner", null, false);
 perm.addGroup(2, "admin", "cAdmin", true);
 perm.addGroup(3, "moderator", "9Moderator", true);
 perm.addGroup(4, "supporter", "bSupporter", true);
 perm.addGroup(5, "developer", "5Developer", true);
-perm.addGroup(6, "devmaster", null, true);
+perm.addGroup(6, "", null, false); //not used anymore, just a placeholder
 perm.addGroup(7, "builder", "5Builder", true);
 perm.addGroup(8, "streamer", "dInfluencer", true);
 perm.addGroup(9, "yt", "dInfluencer", true);
@@ -108,8 +108,8 @@ perm.addToGroup(1, "bukkit.command.paper.entity");
 perm.addToGroup(1, "bukkit.command.paper.mobcaps");
 perm.addToGroup(1, "bukkit.command.paper.reload");
 perm.addToGroup(1, "bukkit.command.paper.debug");
-perm.addToGroup(1, "bukkit.command.plugins");
-perm.addToGroup(1, "bukkit.command.reload");
+perm.addToGroup(1, "block.fix");
+perm.addToGroup(1, "mail.reset");
 perm.addToGroup(1, "minecraft.command.datapack");
 perm.addToGroup(1, "minecraft.command.deop");
 perm.addToGroup(1, "minecraft.command.op");
@@ -118,6 +118,10 @@ perm.addToGroup(1, "test");
 perm.addToGroup(1, "stop");
 perm.addToGroup(1, "missing.dynmap");
 perm.addToGroup(1, "dynmap.*");
+perm.addToGroup(1, "isSnuviMaster");
+perm.addToGroup(1, "removeinvstats");
+perm.addToGroup(1, "removesfstats");
+perm.addToGroup(1, "stats.remove");
 
 perm.addToGroup(2, "isAdmin");
 perm.addToGroup(2, "butcher");
@@ -281,6 +285,7 @@ perm.addToGroup(5, "color");
 perm.addToGroup(5, "databank");
 perm.addToGroup(5, "dev");
 perm.addToGroup(5, "error");
+perm.addToGroup(5, "game");
 perm.addToGroup(5, "iteminfo");
 perm.addToGroup(5, "joinme");
 perm.addToGroup(5, "loginrequests");
@@ -308,20 +313,6 @@ perm.addToGroup(5, "var");
 perm.addToGroup(5, "warp");
 perm.addToGroup(5, "warp.create");
 
-perm.addToGroup(6, "isSnuviMaster");
-perm.addToGroup(6, "block.fix");
-perm.addToGroup(6, "bukkit.command.plugins");
-perm.addToGroup(6, "bukkit.command.reload");
-perm.addToGroup(6, "game");
-perm.addToGroup(6, "mail.reset");
-perm.addToGroup(6, "minecraft.command.datapack");
-perm.addToGroup(6, "minecraft.command.deop");
-perm.addToGroup(6, "minecraft.command.op");
-perm.addToGroup(6, "minecraft.command.worldborder");
-perm.addToGroup(6, "removeinvstats");
-perm.addToGroup(6, "removesfstats");
-perm.addToGroup(6, "stats.remove");
-
 perm.addToGroup(7, "isBuilder");
 perm.addToGroup(7, "isTeam");
 perm.addToGroup(7, "allsounds");

+ 1 - 3
utils/u_general.txt

@@ -1523,6 +1523,7 @@ function msg.chat(player, text_or_string) {
 		}
 		msg(p, text.merge(text.new("<"), text.new(live_tag), string.getHoverText(string.concat(colorcode, nickname), rank), text.new("§r> §r"), getMessage(text_or_string)));
 	}
+	msg("SERVER", text.merge(text.new("<"), text.new(live_tag), string.getHoverText(string.concat(colorcode, nickname), rank), text.new("§r> §r"), getMessage(text_or_string)));
 }
 
 function msg.send(from_player, to_name, prefix, string_message, send_mail) {
@@ -3374,9 +3375,6 @@ function rank.checkCriteria(player, tech_name) {
 		return player.hasPlotRaised(player);
 	}
 	//Team
-	if(tech_name == "rank.owner") {
-		return perm.has("isOwner", player);
-	}
 	if(tech_name == "rank.admin") {
 		return perm.has("isAdmin", player);
 	}