Marvin Löschenkohl 4 роки тому
батько
коміт
74676976c9

+ 42 - 213
docu_minecraft.php

@@ -511,7 +511,6 @@
         <tr>
             <td class="bold">Arguments</td>
             <td>
-                Objekt location1 / Objekt location2 / Zahl cooldown / Zahl livingtime<br>
                 cooldown: -1 terminated after a single trigger<br>
                 cooldown: > 0 clock rate in Ticks. no termination<br>
 				livingtime: -1 area lives forever<br>
@@ -1708,19 +1707,15 @@
     <table>
         <tr>
             <th class="command">block.grow</th>
-            <th class="desc">Lässt alle Samen zwischen den zwei locations zum Maximum wachsen</th>
+            <th class="desc">Grows all seeds between to locations to the maximum</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
             <td>block.grow(location1, location2)</td>
         </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt location1 / Objekt location2</td>
-        </tr>
         <tr>
             <td class="bold">Info</td>
-            <td>Exception wenn ein x, y oder z Abstand > 50 ist</td>
+            <td>Exception if x-, y- or z-distance > 50</td>
         </tr>
     </table>
 	<table>
@@ -1837,7 +1832,7 @@
 <section id="GlobalVar">
     <table>
         <tr>
-            <th class="command">getGlobalVar</th>
+            <th class="command">getGlobalVar (deprecated)</th>
             <th class="desc">returns a global var for a player from databank</th>
         </tr>
         <tr>
@@ -1851,7 +1846,7 @@
     </table>
 	<table>
 		<tr>
-			<th class="command">setGlobalVar</th>
+			<th class="command">setGlobalVar (deprecated)</th>
 			<th class="desc">set a global var for a player into databank</th>
 		</tr>
 		<tr>
@@ -1865,7 +1860,7 @@
 	</table>
 	<table>
 		<tr>
-			<th class="command">delGlobalVar</th>
+			<th class="command">delGlobalVar (deprecated)</th>
 			<th class="desc">deletes a global variable</th>
 		</tr>
 		<tr>
@@ -1952,24 +1947,6 @@
             <td>text.location(location)</td>
         </tr>
     </table>
-    <table>
-        <tr>
-            <th class="command">text.locationBlock</th>
-            <th class="desc">Verwandelt eine location (Objekt) in einen locationstring (String) ohne Blickrichtung</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>text.locationBlock(location)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>location (Objekt)</td>
-        </tr>
-        <tr>
-            <td class="bold">Returns</td>
-            <td>locationstring (String "weltname:x:y:z")</td>
-        </tr>
-    </table>
     <table>
         <tr>
             <th class="command">text.entity</th>
@@ -2645,16 +2622,12 @@
     <table>
         <tr>
             <th class="command">stacks.setActive</th>
-            <th class="desc">shows/remove the stacks-display</th>
+            <th class="desc">shows/removes the stacks-display</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
             <td>stacks.setActive(receiver, boolean)</td>
         </tr>
-        <tr>
-            <td class="bold">Info</td>
-            <td>Dieses Stacks-Display wird standardmäßig nicht angezeigt und muss daher erst aktiviert werden</td>
-        </tr>
     </table>
     <table>
         <tr>
@@ -2723,43 +2696,38 @@
     <table>
         <tr>
             <th class="command">head.add</th>
-            <th class="desc">Fügt am Bildschirm eines Spielers einen Spielerkopf hinzu</th>
+            <th class="desc">shows a player's head on the screen</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>head.add(Player, id, spielername, x, y, skalierung)</td>
+            <td>head.add(player, id, head_player_name, x, y, int scale|1)</td>
         </tr>
         <tr>
             <td class="bold">Arguments</td>
-            <td>Objekt Player / Zahl id (frei wählbar, nicht global, spielerbezogen) / String spielername (des Kopfes) / Zahl x/y (Koordinaten am Bildschirm) / Zahl skalierung (ganzzahlig, Standard: 1)</td>
+            <td>
+				id: free selectable, non-global, per-player<br>
+				x/y: coordinates on the screen<br>
+			</td>
         </tr>
     </table>
     <table>
         <tr>
             <th class="command">head.remove</th>
-            <th class="desc">Entfernt einen einem Spieler angezeigten Kopf</th>
+            <th class="desc">removes a shown head</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>head.remove(Player, id)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player / Zahl id</td>
+            <td>head.remove(player, id)</td>
         </tr>
     </table>
     <table>
         <tr>
             <th class="command">head.reset</th>
-            <th class="desc">Entfernt alle einem Spieler angezeigten Köpfe</th>
+            <th class="desc">Removes all shown heads</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>head.reset(Player)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player</td>
+            <td>head.reset(player)</td>
         </tr>
     </table>
 </section>
@@ -2768,71 +2736,55 @@
     <table>
         <tr>
             <th class="command">title.send</th>
-            <th class="desc">Zeigt einen Title einem Spieler an. Falls ein Subtitle gesetzt wurde, wird dieser mitgegeben</th>
+            <th class="desc">shows a player a title (and subtitle if set)</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>title.send(Player, title)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player / String title</td>
+            <td>title.send(player, title)</td>
         </tr>
     </table>
     <table>
         <tr>
             <th class="command">title.setSub</th>
-            <th class="desc">Setzt einen Subtitle für einen Spieler</th>
+            <th class="desc">sets a subtitle</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>title.setSub(Player, subtitle)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player / String subtitle</td>
+            <td>title.setSub(player, subtitle)</td>
         </tr>
     </table>
     <table>
         <tr>
             <th class="command">title.setTime</th>
-            <th class="desc">Setzt die Title-Zeiten (Einblenden, Anzeigen, Ausblenden) für einen Spieler. Standard sind 20, 60, 20 Ticks</th>
+            <th class="desc">sets the times for title</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>title.setTime(Player, einblendeZeit, anzeigeZeit, ausblendeZeit)</td>
+            <td>title.setTime(player, fadeIn|20, show|60, fadeOut|20)</td>
         </tr>
         <tr>
             <td class="bold">Arguments</td>
-            <td>Objekt Player / Zahl einblendeZeit (in Ticks) / Zahl anzeigeZeit (in Ticks) / Zahl ausblendeZeit (in Ticks)</td>
+            <td>times in ticks</td>
         </tr>
     </table>
     <table>
         <tr>
             <th class="command">title.reset</th>
-            <th class="desc">Setzt die Title-Zeiten eines Spielers auf Standard (20/60/20) zurück</th>
+            <th class="desc">resets the times for title to default</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>title.reset(Player)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player</td>
+            <td>title.reset(player)</td>
         </tr>
     </table>
     <table>
         <tr>
             <th class="command">title.clear</th>
-            <th class="desc">Entfernt den gesetzten Title und den Subtitle eines Spielers</th>
+            <th class="desc">removes the shown title</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>title.clear(Player)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player</td>
+            <td>title.clear(player)</td>
         </tr>
     </table>
 </section>
@@ -2841,7 +2793,7 @@
     <table>
         <tr>
             <th class="command">perm.clear</th>
-            <th class="desc">Entfernt alle Permissions</th>
+            <th class="desc">removes all permissions</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
@@ -2851,25 +2803,21 @@
     <table>
         <tr>
             <th class="command">perm.registerGroup</th>
-            <th class="desc">Fügt der Permissions-Gruppe mit der angegebenen ID die Permission hinzu</th>
+            <th class="desc">adds a permission to a permission-group</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
             <td>perm.registerGroup(id, permission)</td>
         </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Zahl id / String permission</td>
-        </tr>
         <tr>
             <td class="bold">Info</td>
-            <td>Default-Gruppe hat ID 0</td>
+            <td>id 0 = default<br>id 1 = worldedit</td>
         </tr>
     </table>
     <table>
         <tr>
             <th class="command">perm.registerPlayer</th>
-            <th class="desc">Fügt einem Spieler eine Permissions-Gruppe hinzu</th>
+            <th class="desc">adds a permission-group to a a player</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
@@ -2879,7 +2827,7 @@
     <table>
         <tr>
             <th class="command">perm.unregisterPlayer</th>
-            <th class="desc">Entfernt eine Permissions-Gruppe von einem Spieler</th>
+            <th class="desc">removes a permission-group from a player</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
@@ -3280,20 +3228,15 @@
     <table>
         <tr>
             <th class="command">player.damageItem</th>
-            <th class="desc">Gibt dem Item des Spielers in seiner Hand 'anzahl' an Schaden. Der Befehl berücksichtigt Unbreaking (und mehr) und zeigt beim Kaputtgehen die richtige Animation
-            </th>
+            <th class="desc">damages the item in a player's hand and returns true if the item breaks</th>
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>player.damageItem(Player, anzahl)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player / String anzahl</td>
+            <td>player.damageItem(player, damage_amount)</td>
         </tr>
         <tr>
-            <td class="bold">Returns</td>
-            <td>true/false (true wenn das Item kaputtgeht)</td>
+            <td class="bold">Info</td>
+            <td>unbreaking (and more) is considered</td>
         </tr>
     </table>
     <table>
@@ -3601,7 +3544,7 @@
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>inv.setItem(Inventory, slotindex, ItemStack)</td>
+            <td>inv.setItem(inventory, slotindex, itemstack)</td>
         </tr>
     </table>
     <table>
@@ -3611,7 +3554,7 @@
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>inv.getItem(Inventory, slotindex)</td>
+            <td>inv.getItem(inventory, slotindex)</td>
         </tr>
     </table>
     <table>
@@ -3631,11 +3574,7 @@
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>inv.close(Player)</td>
-        </tr>
-        <tr>
-            <td class="bold">Arguments</td>
-            <td>Objekt Player</td>
+            <td>inv.close(player)</td>
         </tr>
     </table>
     <table>
@@ -3645,7 +3584,7 @@
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>inv.update(Player)</td>
+            <td>inv.update(player)</td>
         </tr>
     </table>
     <table>
@@ -3655,7 +3594,7 @@
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>inv.loadChest(Location)</td>
+            <td>inv.loadChest(location)</td>
         </tr>
     </table>
     <table>
@@ -3665,7 +3604,7 @@
         </tr>
         <tr>
             <td class="bold">Format</td>
-            <td>inv.getID(Inventory)</td>
+            <td>inv.getID(inventory)</td>
         </tr>
     </table>
 </section>
@@ -4394,16 +4333,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseMaxHealth(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseMaxHealth</th>
-            <th class="desc">sets the unmodified vanilla maximum health</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseMaxHealth(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4434,16 +4363,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseAttackKnockback(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseAttackKnockback</th>
-            <th class="desc">sets the unmodified AttackKnockback of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseAttackKnockback(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4474,16 +4393,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseAttackDamage(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseAttackDamage</th>
-            <th class="desc">sets the unmodified AttackDamage of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseAttackDamage(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4514,16 +4423,6 @@
             <td class="bold">Format</td>
             <td>living.getBasegetAttackSpeed(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBasegetAttackSpeed</th>
-            <th class="desc">sets the unmodified getAttackSpeed of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBasegetAttackSpeed(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4554,16 +4453,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseFollowRange(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseFollowRange</th>
-            <th class="desc">sets the unmodified FollowRange of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseFollowRange(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4594,16 +4483,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseLuck(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseLuck</th>
-            <th class="desc">sets the unmodified Luck of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseLuck(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4634,16 +4513,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseArmor(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseArmor</th>
-            <th class="desc">sets the unmodified summarized armor of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseArmor(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4674,16 +4543,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseArmorThoughness(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseArmorThoughness</th>
-            <th class="desc">sets the unmodified summarized ArmorThoughness of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseArmorThoughness(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4714,16 +4573,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseMovementSpeed(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseMovementSpeed</th>
-            <th class="desc">sets the unmodified MovementSpeed of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseMovementSpeed(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4754,16 +4603,6 @@
             <td class="bold">Format</td>
             <td>living.getBaseFlyingSpeed(living_entity)</td>
         </tr>
-    </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseFlyingSpeed</th>
-            <th class="desc">sets the unmodified FlyingSpeed of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseFlyingSpeed(living_entity, value)</td>
-        </tr>
     </table>
 	<table>
         <tr>
@@ -4795,16 +4634,6 @@
             <td>living.getBaseKnockbackResistance(living_entity)</td>
         </tr>
     </table>
-    <table>
-        <tr>
-            <th class="command">living.setBaseKnockbackResistance</th>
-            <th class="desc">sets the unmodified KnockbackResistance of an entity</th>
-        </tr>
-        <tr>
-            <td class="bold">Format</td>
-            <td>living.setBaseKnockbackResistance(living_entity, value)</td>
-        </tr>
-    </table>
 </section>
 
 <section id="Particle">

+ 1 - 1
global/gamecenter.txt

@@ -344,7 +344,6 @@ function minigame.joinPlayer(script, player) {
 	//Event player_join
 	script.setVar(script, "player", player);
 	script.callEvent("player_join", script);
-	sign.ready($block_loc);
 	sign.players($block_loc, list.getSize(player_list), $maxplayers);
 }
 
@@ -371,6 +370,7 @@ function minigame.partyJoin(script, party_leader, party_list) {
 			player.speakPrefix(party_leader, $party_prefix, concat(p_name, "§c is in another game."));
 			continue;
 		}
+		sign.ready($block_loc);
 		minigame.joinPlayer(script, p);
 	}
 }

+ 4 - 0
global/mailsystem.txt

@@ -55,6 +55,10 @@ if(command == "mail") {
 		goto("wait");
 	}
 	//send a mail
+	if(player.isMuted(player)) {
+		player.speakPrefix(player, "§6Commands", "You are muted.");
+		goto("wait");
+	}
 	p_uuid = player.getUuid(arg0);
 	if(p_uuid == null) {
 		speakPrefix(player, "§bMail", "This player has never been online.");

Різницю між файлами не показано, бо вона завелика
+ 536 - 130
minigames/among_us/among_us.txt


+ 83 - 26
minigames/among_us/among_us_map1.txt

@@ -9,7 +9,8 @@ default_meeting_cooldown = 15; //sekunden
 default_kill_cooldown = 30; //sekunden
 start_kill_cooldown = 10; //sekunden
 default_discuss_time = 10; //sekunden
-default_vote_time = 10; //sekunden
+default_vote_time = 30; //sekunden
+confirm_ejects = true;
 
 default_speed = 1.25;
 
@@ -24,21 +25,23 @@ amount_long = 2;
 admin_table_loc = loc.new(gamesworld, 3089, 108, 3970);
 //admin_table_inv = inv.new("023332320 030203230 232003232 030203030 023332320 000000200");
 admin_table_inv = inv.new("023332320030203230232003232030203030023332320000000200");
-inv.setItem(admin_table_inv, 0, read.item("minecraft:sticky_piston", 33, "§rUpper Engine"));
-inv.setItem(admin_table_inv, 4, read.item("minecraft:cake", 33, "§rCafeteria"));
-inv.setItem(admin_table_inv, 6, read.item("minecraft:golden_sword", 33, "§rWeapons"));
-inv.setItem(admin_table_inv, 8, read.item("minecraft:bone", 33, "§rMedBay"));
-inv.setItem(admin_table_inv, 10, read.item("km:plum_sapling", 33, "§rO2"));
-inv.setItem(admin_table_inv, 12, read.item("minecraft:tnt", 33, "§rReactor"));
-inv.setItem(admin_table_inv, 14, read.item("minecraft:observer", 33, "§rSecurity"));
-inv.setItem(admin_table_inv, 16, read.item("minecraft:lectern", 33, "§rAdmin"));
-inv.setItem(admin_table_inv, 18, read.item("minecraft:compass", 33, "§rNavigation"));
-inv.setItem(admin_table_inv, 20, read.item("minecraft:redstone", 33, "§rElectrical"));
-inv.setItem(admin_table_inv, 23, read.item("minecraft:sticky_piston", 33, "§rLower Engine"));
-inv.setItem(admin_table_inv, 27, read.item("minecraft:red_shulker_box", 33, "§rStorage"));
-inv.setItem(admin_table_inv, 29, read.item("minecraft:shield", 33, "§rShields"));
-inv.setItem(admin_table_inv, 30, read.item("minecraft:end_rod", 33, "§rCommunications"));
-
+inv.setItem(admin_table_inv, 0, read.item("minecraft:blue_stained_glass_pane", 1, "§rUpper Engine"));
+inv.setItem(admin_table_inv, 4, read.item("minecraft:blue_stained_glass_pane", 1, "§rCafeteria"));
+inv.setItem(admin_table_inv, 6, read.item("minecraft:blue_stained_glass_pane", 1, "§rWeapons"));
+inv.setItem(admin_table_inv, 8, read.item("minecraft:blue_stained_glass_pane", 1, "§rMedBay"));
+inv.setItem(admin_table_inv, 10, read.item("minecraft:blue_stained_glass_pane", 1, "§rO2"));
+inv.setItem(admin_table_inv, 12, read.item("minecraft:blue_stained_glass_pane", 1, "§rReactor"));
+inv.setItem(admin_table_inv, 14, read.item("minecraft:blue_stained_glass_pane", 1, "§rSecurity"));
+inv.setItem(admin_table_inv, 16, read.item("minecraft:blue_stained_glass_pane", 1, "§rAdmin"));
+inv.setItem(admin_table_inv, 18, read.item("minecraft:blue_stained_glass_pane", 1, "§rNavigation"));
+inv.setItem(admin_table_inv, 20, read.item("minecraft:blue_stained_glass_pane", 1, "§rElectrical"));
+inv.setItem(admin_table_inv, 23, read.item("minecraft:blue_stained_glass_pane", 1, "§rLower Engine"));
+inv.setItem(admin_table_inv, 27, read.item("minecraft:blue_stained_glass_pane", 1, "§rStorage"));
+inv.setItem(admin_table_inv, 29, read.item("minecraft:blue_stained_glass_pane", 1, "§rShields"));
+inv.setItem(admin_table_inv, 30, read.item("minecraft:blue_stained_glass_pane", 1, "§rCommunications"));
+
+start_sign_loc = loc.new(gamesworld, 904, 85, 948);
+color_choose_loc = loc.new(gamesworld, 902, 84, 948);
 meeting_button_loc = loc.new(gamesworld, 3080, 109, 3950);
 fix_lights_loc_1 = loc.new(gamesworld, 3063, 109, 3975);
 fix_lights_loc_2 = loc.new(gamesworld, 3064, 109, 3975);
@@ -112,16 +115,16 @@ set.add(med_scan_locs, loc.new(gamesworld, 3067, 108, 3964));
 set.add(med_scan_locs, loc.new(gamesworld, 3068, 108, 3964));
 
 spawn_locs = list.new();
-list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3948.5));
-list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3950.5));
-list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3952.5));
-list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3948.5));
-list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3950.5));
-list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3952.5));
-list.add(spawn_locs, loc.new(gamesworld, 3079.5, 109, 3953.5));
-list.add(spawn_locs, loc.new(gamesworld, 3081.5, 109, 3953.5));
-list.add(spawn_locs, loc.new(gamesworld, 3079.5, 109, 3947.5));
-list.add(spawn_locs, loc.new(gamesworld, 3081.5, 109, 3947.5));
+list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3948.5, -57, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3950.5, -90, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3077.5, 109, 3952.5, -124, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3948.5, 57, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3950.5, 90, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3083.5, 109, 3952.5, 124, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3079.5, 109, 3953.5, -162, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3081.5, 109, 3953.5, 162, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3079.5, 109, 3947.5, -19, 0.0001));
+list.add(spawn_locs, loc.new(gamesworld, 3081.5, 109, 3947.5, 19, 0.0001));
 
 elec_power_loc = loc.new(gamesworld, 3065, 109, 3967);
 comm_power_loc = loc.new(gamesworld, 3092, 109, 3982);
@@ -586,6 +589,60 @@ list.add(cams_par_locs, loc.new(gamesworld, 3065.5, 110.5, 3949.5)); //MedBay
 list.add(cams_par_locs, loc.new(gamesworld, 3082.5, 110.5, 3965.5)); //Admin
 list.add(cams_par_locs, loc.new(gamesworld, 3103.5, 110.5, 3960.5)); //Navigation
 
+color_list = list.new();
+list.add(color_list, "black");
+list.add(color_list, "cyan");
+list.add(color_list, "red");
+list.add(color_list, "blue");
+list.add(color_list, "orange");
+list.add(color_list, "green");
+list.add(color_list, "gray");
+list.add(color_list, "white");
+list.add(color_list, "pink");
+list.add(color_list, "purple");
+list.add(color_list, "yellow");
+list.add(color_list, "lime");
+
+cloth_code_map = map.new();
+map.add(cloth_code_map, "black", 1908001);
+map.add(cloth_code_map, "cyan", 1481884);
+map.add(cloth_code_map, "red", 11546150);
+map.add(cloth_code_map, "blue", 3949738);
+map.add(cloth_code_map, "orange", 16351261);
+map.add(cloth_code_map, "green", 6192150);
+map.add(cloth_code_map, "gray", 10329495);
+map.add(cloth_code_map, "white", 16383998);
+map.add(cloth_code_map, "pink", 15961002);
+map.add(cloth_code_map, "purple", 8991416);
+map.add(cloth_code_map, "yellow", 16701501);
+map.add(cloth_code_map, "lime", 8439583);
+
+color_code_map = map.new();
+map.add(color_code_map, "black", "§0");
+map.add(color_code_map, "cyan", "§b");
+map.add(color_code_map, "red", "§c");
+map.add(color_code_map, "blue", "§9");
+map.add(color_code_map, "orange", "§6");
+map.add(color_code_map, "green", "§2");
+map.add(color_code_map, "gray", "§7");
+map.add(color_code_map, "white", "§f");
+map.add(color_code_map, "pink", "§d");
+map.add(color_code_map, "purple", "§5");
+map.add(color_code_map, "yellow", "§e");
+map.add(color_code_map, "lime", "§a");
+
+//color_choose_inv = inv.new("000000000 033333300 033333300 000000000");
+color_choose_inv = inv.new("000000000033333300033333300000000000");
+index = 0;
+iter = list.iterator(color_list);
+while(hasNext(iter)) {
+	color_name = next(iter);
+	cloth_code = map.get(cloth_code_map, color_name);
+	color_name = text.upperFirstLetter(color_name);
+	item = read.item(concat("{id:\"minecraft:leather_chestplate\",Count:1b,tag:{Damage:0,display:{color:", cloth_code, ",Name:'{\"text\":\"§r", color_name, "\"}'}}}"));
+	inv.setItem(color_choose_inv, index++, item);
+}
+
 function addVentIcons(vent_loc, icon_1, vent_tp_loc_1, icon_2, vent_tp_loc_2) {
 	a = array.new(4);
 	a[0] = icon_1;

+ 12 - 13
minigames/jumpnrun/icejumpnrun.txt

@@ -16,7 +16,6 @@ event.load("block_break");
 event.load("block_place");
 event.load("block_click");
 
-loop_list = list.new();
 notallowed = list.new();
 list.add(notallowed, "fly");
 list.add(notallowed, "gm");
@@ -68,15 +67,6 @@ list.add(checkpoints, loc.new(gamesworld, 986, 100, -1995));
 list.add(checkpoints, loc.new(gamesworld, 1000, 108, -1988));
 
 
-spawnlocs = list.new();
-for(i = 0; i < list.getSize(checkpoints); i++) {
-	location1 = list.getIndex(checkpoints, i);
-	location2 = loc.mod(location1, 1, 1, 1);
-	event.addMoveData(location1, location2, -1, -1);
-	
-	list.add(spawnlocs, loc.mod(location1, 0.5, 0, 0.5));
-}
-
 @wait
 wait();
 if(event == "living_pre_hurt") {
@@ -91,6 +81,16 @@ if(player.hasMinigameId(player, script_id)) {
 goto("wait");
 
 @player_join
+spawnlocs = list.new();
+for(i = 0; i < list.getSize(checkpoints); i++) {
+	location1 = list.getIndex(checkpoints, i);
+	location2 = loc.mod(location1, 1, 1, 1);
+	event.addMoveData(location1, location2, -1, -1, player);
+	
+	list.add(spawnlocs, loc.mod(location1, 0.5, 0, 0.5));
+}
+
+single_uuid = player.getUuid(player);
 starttime = time.getMillis();
 player.blockCommands(player);
 jumpstage = getPoints(rankingtable, player.getId(player));
@@ -104,7 +104,6 @@ entity.addEffect(player, "minecraft:night_vision", 32760, 0, false);
 gosub("stage_specific");
 player.setGamemode(player, "adventure");
 player.setFly(player, false);
-list.add(loop_list, player.getUuid(player));
 sgoto(1, "loop");
 goto("wait");
 
@@ -169,7 +168,7 @@ goto("wait");
 return;
 
 @loop
-player = player.get(list.getIndex(loop_list, 0));
+player = player.get(single_uuid);
 player.setHunger(player, 20);
 player.setSaturation(player, 5);
 sgoto(200, "loop");
@@ -193,4 +192,4 @@ minigame.statsLine(player, "§e", "Time", concat(hours, "h ", minutes, "min"));
 script = script.getFromId(script_id);
 minigame.kickPlayer(script, player);
 minigame.term(script, gamesignloc);
-term();
+term();

+ 2 - 0
minigames/jumpnrun/todesjumpnrun.txt

@@ -170,6 +170,7 @@ if(player.hasMinigameId(player, script_id)) {
 goto("wait");
 
 @player_join
+single_uuid = player.getUuid(player);
 spawnlocs = list.new();
 for(i = 0; i < list.getSize(checkpoints); i++) {
 	location1 = list.getIndex(checkpoints, i);
@@ -323,6 +324,7 @@ elseif(jumpstage == 47) {
 return;
 
 @loop
+player = player.get(single_uuid);
 player.setHunger(player, 20);
 player.setSaturation(player, 5);
 sgoto(200, "loop");

+ 2 - 2
minigames/parcour/parcour.txt

@@ -38,7 +38,7 @@ goto("wait");
 player_uuid = player.getUuid(player);
 for(i = 0; i < list.getSize(checkpoints); i++) {
 	location1 = list.getIndex(checkpoints, i);
-	location2 = loc.mod(location1, 1, 1, 1);
+	location2 = loc.mod(location1, 1, 1.5, 1);
 	event.addMoveData(location1, location2, -1, -1, player);
 }
 player.blockCommands(player);
@@ -177,7 +177,7 @@ if(key == 1) {
 	entity.teleport(player, list.getIndex(spawn_locs, 0));
 	for(i = 0; i <= jumpstage; i++) {
 		location1 = list.getIndex(checkpoints, i);
-		location2 = loc.mod(location1, 1, 1, 1);
+		location2 = loc.mod(location1, 1, 1.5, 1);
 		event.addMoveData(location1, location2, -1, -1, player);
 	}
 	minutes = 0;

+ 45 - 40
survival/survival.txt

@@ -17,6 +17,7 @@ setScriptVar("skills", list.new());
 skill.add("Subcutaneous Inventory", "skill.subcu_inv", "minecraft:chest", "Keeps the inventory on death", 20, false);
 skill.add("Head Hunter", "skill.head_human", "minecraft:player_head", "Drops a player's head with a 5% chance if you kill a player (0,5% if a teamler is killed)", 100, true);
 
+doors = list.new();
 tp_list = list.new();
 tp_map = map.new();
 sitting = map.new();
@@ -33,7 +34,8 @@ config = getScriptVar("server_config");
 survival_spawn = read.location(config.getString(config, "surv_spawn", "games:0:0:0"));
 adventure_chest_loc = loc.new(overworld, 240, 80, 234);
 adventure_aim_loc = loc.new(overworld, 237, 76, 237);
-money_präfix = "§2Money";
+prefix_money = "§2Money";
+open_prop = block.getproperty("open");
 
 max_ench_lvl = map.new();
 map.add(max_ench_lvl, enchantment.get("efficiency"), 10);
@@ -163,15 +165,6 @@ if(block_type == "minecraft:lectern") {
 }
 goto("wait");
 
-@player_login
-onadventure = ggv(player, "onadventure");
-if(onadventure != null) {
-	if(onadventure) {
-		addAdventureDisplay(player, adventure_aim_loc);
-	}
-}
-goto("wait");
-
 @living_pre_hurt
 if(!isPlayer(living_entity)) {
 	goto("wait");
@@ -207,16 +200,11 @@ if(entity.getType(entity) == "human") {
 		goto("wait");
 	}
 	if(entity_name == adv_human_name) {
-		onadventure = ggv(player, "onadventure");
-		if(onadventure == null) {
+		if(!player.isOnAdventure(player)) {
 			player.speak(player, "§5Adventure", "§rYou aren't on an adventure.");
 			goto("wait");
 		}
-		if(!onadventure) {
-			player.speak(player, "§5Adventure", "§rYou aren't on an adventure.");
-			goto("wait");
-		}
-		sgv(player, "onadventure", "false");
+		player.setAdventure(player, false);
 		adventures = ggv(player, "adventures");
 		if(adventures == null) {
 			adventures = 0;
@@ -230,7 +218,7 @@ if(entity.getType(entity) == "human") {
 			offerRank(player, "§2Pionier");
 		}
 		removeAdventureDisplay(player);
-		safeGiveItemPlayer(player, coin_silver);
+		safeGiveItemPlayer(player, coin_gold);
 		goto("wait");
 	}
 }
@@ -242,6 +230,9 @@ goto("wait");
 
 @player_login
 joinSurvWorld(player);
+if(player.isOnAdventure(player)) {
+	addAdventureDisplay(player, adventure_aim_loc);
+}
 goto("wait");
 
 @inv_click
@@ -293,7 +284,7 @@ if(inv_id == bankinvid) { //Bankmenü
 			coin_inv = silver_inv;
 		}
 		if(coin_inv < amount1) {
-			player.speak(player, money_präfix, message);
+			player.speak(player, prefix_money, message);
 			goto("wait");
 		}
 		player.removeItem(player, item1);
@@ -302,11 +293,11 @@ if(inv_id == bankinvid) { //Bankmenü
 			amount = item.getAmount(notgiven);
 			player.removeItem(player, read.item(item_type, amount2 - amount));
 			player.giveItem(player, item1);
-			player.speak(player, money_präfix, "Not enough space in inventory.");
+			player.speak(player, prefix_money, "Not enough space in inventory.");
 			goto("wait");
 		}
 		inv.update(player);
-		player.speak(player, money_präfix, "Exchange succesfull.");
+		player.speak(player, prefix_money, "Exchange succesfull.");
 		goto("wait");
 	}
 	//Kontobewegungen
@@ -326,7 +317,7 @@ if(inv_id == bankinvid) { //Bankmenü
 	if(inv_slot > 0 && inv_slot < 4) {
 		player_id = player.getId(player);
 		if(coin_inv < 1) {
-			player.speak(player, money_präfix, "§rCoin not in inventory.");
+			player.speak(player, prefix_money, "§rCoin not in inventory.");
 		} else {
 			addMoney(player, betrag);
 			player.removeItem(player, inv.getItem(bankmenu, inv_slot));
@@ -338,7 +329,7 @@ if(inv_id == bankinvid) { //Bankmenü
 	if(inv_slot > 8 && inv_slot < 12) {
 		player_id = player.getId(player);
 		if(!hasEnoughMoney(player_id, betrag)) {
-			player.speak(player, money_präfix, "§rNot enough money in account.");
+			player.speak(player, prefix_money, "§rNot enough money in account.");
 		} else {
 			subMoney(player, betrag);
 			player.giveItem(player, inv.getItem(bankmenu, inv_slot));
@@ -380,6 +371,17 @@ if(block.hasTag(beds_tag, block)) {
 if(hand == "OFF_HAND") {
 	goto("wait");
 }
+if(block.isDoor(block_loc)) {
+	player_spec = player.getAutoCloseDoor(player);
+	if(player_spec) {
+		state_open = block.getState(block_loc, open_prop);
+		if(!state_open) {
+			list.add(doors, block_loc);
+			sgoto(60, "closedoor");
+		}
+	}
+	goto("wait");
+}
 if(block.hasTag(stairs_tag, block)) {
 	goto("sitting");
 }
@@ -491,7 +493,7 @@ if(block_type == "minecraft:lectern") {
 				betrag += level * 20 + extra;
 			}
 			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				player.speak(player, money_präfix, concat("§rNot enough coin in inventory. This action costs ", text.number(betrag), " Gold."));
+				player.speak(player, prefix_money, concat("§rNot enough coin in inventory. This action costs ", text.number(betrag), " Gold."));
 				goto("wait");
 			}
 			subMoney(player, betrag);
@@ -517,7 +519,7 @@ if(block_type == "minecraft:lectern") {
 			map_size = map.getSize(map2);
 			betrag = 20 * map_size;
 			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				player.speak(player, money_präfix, concat("§rNot enough money in account. This action costs ", text.number(betrag), " Gold."));
+				player.speak(player, prefix_money, concat("§rNot enough money in account. This action costs ", text.number(betrag), " Gold."));
 				goto("wait");
 			}
 			subMoney(player, betrag);
@@ -550,7 +552,7 @@ if(block_type == "minecraft:lectern") {
 			
 			betrag = 20 * value;
 			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				player.speak(player, money_präfix, concat("§rNot enough money in account. This action costs ", text.number(betrag), " Gold."));
+				player.speak(player, prefix_money, concat("§rNot enough money in account. This action costs ", text.number(betrag), " Gold."));
 				goto("wait");
 			}
 			subMoney(player, betrag);
@@ -602,7 +604,7 @@ if(block_type == "minecraft:lectern") {
 				betrag += level * 20;
 			}
 			if(!hasEnoughMoney(player.getId(player), betrag)) {
-				player.speak(player, money_präfix, concat("§rNot enough money in account. This action costs ", text.number(betrag), " Gold."));
+				player.speak(player, prefix_money, concat("§rNot enough money in account. This action costs ", text.number(betrag), " Gold."));
 				goto("wait");
 			}
 			subMoney(player, betrag);
@@ -615,7 +617,7 @@ if(block_type == "minecraft:lectern") {
 		entity.throw(item_entity1, 0, 0.3, 0);
 		entity.throw(item_entity2, 0, 0.3, 0);
 		particle.spawn(loc.mod(block_loc, 0.5, 1.4, 0.5), par, 20, 0, 0.25, 0.25, 0.25);
-		player.speak(player, money_präfix, "This cost 20 Gold.");
+		player.speak(player, prefix_money, "This cost " , text.number(betrag), " Gold.");
 	}
 	goto("wait");
 }
@@ -642,11 +644,7 @@ if(block_type == "minecraft:chest") {
 		map.add(tp_map, player_uuid, now_time);
 		//Abenteuer-Teleport
 		if(block_loc == adventure_chest_loc) {
-			onadventure = ggv(player, "onadventure");
-			if(onadventure == null) {
-				onadventure = false;
-			}
-			if(!onadventure) {
+			if(!player.isOnAdventure(player)) {
 				alpha = math.random(0, 360);
 				alpha *= math.pi() / 180;
 				x = math.round(math.sin(alpha) * 8000) + 0.5;
@@ -717,6 +715,16 @@ if(block_type == "minecraft:chest") {
 }
 goto("wait");
 
+@closedoor
+doorloc = list.getIndex(doors, 0);
+list.removeIndex(doors, 0);
+if(block.isDoor(doorloc)) {
+	if(block.getDoorStatus(doorloc)) {
+		block.setDoorStatus(doorloc, false);
+	}
+}
+goto("wait");
+
 @sitting
 if(action == "left") {
 	goto("wait");
@@ -806,12 +814,9 @@ if(isPlayer(rider)) {
 goto("wait");
 
 @player_post_respawn
-onadventure = ggv(player, "onadventure");
-if(onadventure != null) {
-	if(onadventure) {
-		tploc = read.location(ggv(player, "adventureloc"));
-		entity.teleport(player, tploc);
-	}
+if(player.isOnAdventure(player)) {
+	tploc = read.location(ggv(player, "adventureloc"));
+	entity.teleport(player, tploc);
 }
 //player.setLevel(player, 0);
 //player.setExp(player, 0);
@@ -839,7 +844,7 @@ setWalls(block_loc, "minecraft:air");
 teleportPlayer(player, tp_loc, false);
 sound.spawn(tp_loc, adv_tp_sound, sound_category_ambient);
 if(bool) {
-	sgv(player, "onadventure", "true");
+	player.setAdventure(player, true);
 	sgv(player, "adventureloc", text.location(tp_loc));
 	addAdventureDisplay(player, adventure_aim_loc);
 	title.reset(player);

+ 13 - 9
system/chat.txt

@@ -126,24 +126,22 @@ if(list.contains(forbiddennames, text.toLowerCase(player_name))) {
 	ban.kick(player, "You won't join with this name.");
 	goto("wait");
 }
-first_join = ggv(player, "firstjoin");
-if(first_join == null) {
+first_join = player.hasFirstJoin(player_id);
+if(first_join) {
 	entity.teleport(player, serverspawn);
-	msg("online", "§tWelcome to our sick world §e", player_name, " §t!!!");
+	msg("online", "§tWelcome to our sick world §e", player_name, " §t!!!");
 	command("/recipe give ", player_name, " *");
-	sgv(player, "firstjoin", true);
+	player.setFirstJoin(player_id, true);
 }
 
-silentjoin = ggv(player, "silentjoin");
-if(silentjoin == null || !silentjoin) {
+silentjoin = player.getSilentJoin(player);
+if(!silentjoin) {
 	if(map.contains(personaljoinmessage, player_id) && send_personally_messages) {
 		message = concat("§a§l> §r", fullname, "§9", map.get(personaljoinmessage, player_id));
 	} else {
 		message = concat("§a§l> §r", fullname, "§9", list.getIndex(joinmessages, math.random(0, list.getSize(joinmessages) - 1)));
 	}
 	msg("online", message);
-} else {
-	sgv(player, "silentjoin", false);
 }
 
 //Keks geben, wenn man als einziger Spieler auf den Server joint und im Survival-Mode ist und der letzte Keks seit 5 Minuten vergeben wurde
@@ -172,7 +170,7 @@ if(player_id == 2) {
 		player.speakPrefix(player, "§cError", concat("There are ", text.number(error_size), " errors and ", text.number(debug_size), " debugs."));
 	} elseif(error_size > 0) {
 		player.speakPrefix(player, "§cError", concat("There are ", text.number(error_size), " errors."));
-	} else {
+	} elseif(debug_size > 0) {
 		player.speakPrefix(player, "§cError", concat("There are ", text.number(debug_size), " debugs."));
 	}
 }
@@ -205,6 +203,12 @@ if(text.startsWith(message, "7", 0)) {
 	}
 }
 cancel = true;
+if(player.isMuted(player)) {
+	if(!player.hasMinigame(player)) {
+		player.speakPrefix(player, "§6Commands", "You are muted.");
+	}
+	goto("wait");
+}
 if(perm.has(player, "color")) {
 	message = text.replace(message, "&", "§");
 }

+ 83 - 63
system/commands.txt

@@ -13,7 +13,7 @@ command.add("sfstats");
 command.add("topsfstats");
 command.add("removesfstats");
 //Sonstige
-command.add("questanswer");
+command.add("mayo");
 //Vanilla überschreiben
 command.add("help");
 command.add("butcher");
@@ -67,6 +67,7 @@ command.register("lock", "Ohne Funktion");
 command.register("mail", "Mail-Commands");
 command.register("memory", "Gibt den RAM-Verbrauch aus");
 command.register("msg", "Sendet eine private Nachricht");
+command.register("mute", "Mutes a player");
 command.register("news", "Zeigt allen Spielern Push-News");
 command.register("nickname", "Nickt einen Spieler");
 command.register("nowb", "Keine wieder-da-Meldung");
@@ -133,7 +134,6 @@ event.load("inv_click");
 event.load("missing_perm");
 event.load("missing_command");
 event.load("custom_command");
-event.load("block_click");
 event.load("block_place");
 event.load("block_break");
 event.load("portal");
@@ -165,7 +165,6 @@ command.registerAlias("hub", "leave");
 command.registerAlias("fuckit", "giveup");
 command.registerAlias("ram", "memory");
 
-open_prop = block.getproperty("open");
 crops_tag = block.getTag("minecraft:crops");
 dirt_tag = block.getTag("forge:dirt");
 gamesspawn = getGamesSpawn();
@@ -208,7 +207,6 @@ if(afk_map == null) {
 friend_requests = map.new();
 lock_chests = map.new();
 chatbuffer = map.new();
-doors = list.new();
 tpa_request = list.new();
 answer_map = map.new();
 warninglist = list.new();
@@ -473,29 +471,13 @@ if(event == "block_break") {
 	}
 	goto("wait");
 }
-if(event == "block_click") {
-	if(hand == "OFF_HAND") {
-		goto("wait");
-	}
-	if(block.isDoor(block_loc)) {
-		player_spec = ggv(player, "doors");
-		if(player_spec == null) {
-			sgv(player, "doors", true);
-			player_spec = true;
-		}
-		if(player_spec) {
-			state_open = block.getState(block_loc, open_prop);
-			if(!state_open) {
-				list.add(doors, block_loc);
-				sgoto(60, "closedoor");
-			}
-		}
-	}
-	goto("wait");
-}
 if(event == "missing_command") {
-	if(sender_name == "SERVER") {
+	if(player == null) { //--> Server
 		player = "SERVER";
+		if(command_name == null) {
+			player.speakPrefix(player, prefix_commands, concat("Missing Command"));
+			goto("wait");
+		}
 	}
 	player.speakPrefix(player, prefix_commands, concat("No command ", command_name));
 	goto("wait");
@@ -517,8 +499,12 @@ if(event == "portal") {
 	goto("wait");
 }
 if(event == "missing_perm") {
-	if(sender_name == "SERVER") {
+	if(player == null) { //--> Server
 		player = "SERVER";
+		if(command_name == null) {
+			player.speakPrefix(player, prefix_commands, concat("Missing Perm"));
+			goto("wait");
+		}
 	}
 	player.speakPrefix(player, prefix_commands, concat("You have no permission for ", command_name));
 	goto("wait");
@@ -730,6 +716,10 @@ if(arg0 == "list") {
 goto("friend_syntax");
 
 @link
+if(player.isMuted(player)) {
+	player.speakPrefix(player, "§6Commands", "You are muted.");
+	goto("wait");
+}
 link = text.concatList(args, " ", 0, size - 1);
 sendOnlineMessage(player, text.link(link, link));
 goto("wait");
@@ -941,16 +931,6 @@ script.setVar(script.get("scripts/global/voxel.txt"), "radius_per_player", map);
 player.speak(player, prefix_commands, "Radius auf ", text.number(radius), " gesetzt");
 goto("wait");
 
-@closedoor
-doorloc = list.getIndex(doors, 0);
-list.removeIndex(doors, 0);
-if(block.isDoor(doorloc)) {
-	if(block.getDoorStatus(doorloc)) {
-		block.setDoorStatus(doorloc, false);
-	}
-}
-goto("wait");
-
 @setservermessage
 if(size < 1) {
 	player.speak(player, prefix_commands, "/setservermessage <text>");
@@ -1113,19 +1093,14 @@ if(playtime > 60000) { //1000 Stunden
 	msg(player, text.click("[§2Legende§r]", concat("/setrank ", player_name, " &2Legende")));
 }
 //Abenteuer
+if(player.isOnAdventure(player)) {
+	msg(player, text.click("[§eAbenteurer§r]", concat("/setrank ", player_name, " &eAbenteurer")));
+}
 adventures = ggv(player, "adventures");
 if(adventures == null) {
 	adventures = 0;
 }
-onadventure = ggv(player, "onadventure");
-if(onadventure != null) {
-	if(onadventure) {
-		adventures++;
-	}
-}
-
 if(adventures >= 1) {
-	msg(player, text.click("[§eAbenteurer§r]", concat("/setrank ", player_name, " &eAbenteurer")));
 	msg(player, text.click("[§6Entdecker§r]", concat("/setrank ", player_name, " &6Entdecker")));
 }
 if(adventures >= 10) {
@@ -1192,8 +1167,7 @@ if(!perm.has(player, "setrank.other")) {
 	}
 	//Abenteuer
 	if(rank == "&eAbenteurer") {
-		onadventure = ggv(p, "onadventure");
-		if(onadventure != null || onadventure) {
+		if(player.isOnAdventure(p)) {
 			noperm = false;
 		}
 	}
@@ -1278,27 +1252,24 @@ if(!coords_loop_active) {
 goto("wait");
 
 @silentjoin
-silentjoin = ggv(player, "silentjoin");
-if(silentjoin == null) {
-	sgv(player, "silentjoin", true);
-	player.speak(player, prefix_commands, "§rSilentjoin aktiviert");
-} elseif(silentjoin) {
-	sgv(player, "silentjoin", false);
-	player.speak(player, prefix_commands, "§rSilentjoin deaktiviert");
+silentjoin = player.getSilentJoin(player);
+if(silentjoin) {
+	player.setSilentJoin(player, false);
+	player.speakPrefix(player, prefix_commands, "Silentjoin deactivated.");
 } else {
-	sgv(player, "silentjoin", true);
-	player.speak(player, prefix_commands, "§rSilentjoin aktiviert");
+	player.setSilentJoin(player, true);
+	player.speak(player, prefix_commands, "Silentjoin activated.");
 }
 goto("wait");
 
 @showcoords
 if(showCoords.get(player)) {
 	showCoords.set(player, false);
-	player.speak(player, prefix_commands, "§rCoords deactivated.");
+	player.speakPrefix(player, prefix_commands, "Coords deactivated.");
 	display.remove(player, 30);
 } else {
 	showCoords.set(player, true);
-	player.speak(player, prefix_commands, "§rCoords activated.");
+	player.speakPrefix(player, prefix_commands, "Coords activated.");
 }
 if(!coords_loop_active) {
 	sgoto(30, "coordsloop");
@@ -1482,7 +1453,7 @@ goto("wait");
 item = entity.getEquip(player, "hand");
 text = text.item(item);
 text = text.replace(text, "\"","\\\"");
-msg(player, text);
+msg(player, text.clipBoard(text, text));
 goto("wait");
 
 @permtoggle
@@ -1634,10 +1605,10 @@ if(size == 0) {
 }
 arg0 = list.getIndex(args, 0);
 if(arg0 == true) {
-	sgv(player, "doors", true);
+	player.setAutoCloseDoor(player, true);
 	player.speak(player, prefix_commands, "Doors now close automatically.");
 } else {
-	sgv(player, "doors", false);
+	player.setAutoCloseDoor(player, false);
 	player.speak(player, prefix_commands, "You have to close doors manually now.");
 }
 goto("wait");
@@ -2796,6 +2767,10 @@ elseif(arg0 == "statue") {
 goto("humanhelp");
 
 @answer
+if(player.isMuted(player)) {
+	player.speakPrefix(player, "§6Commands", "You are muted.");
+	goto("wait");
+}
 if(size < 1) {
 	player.speak(sender, prefix_commands, "/answer <nachricht>");
 	goto("wait");
@@ -2824,6 +2799,10 @@ map.add(answer_map, player_uuid, p_uuid);
 goto("wait");
 
 @msg
+if(player.isMuted(player)) {
+	player.speakPrefix(player, "§6Commands", "You are muted.");
+	goto("wait");
+}
 if(size < 2) {
 	player.speak(sender, prefix_commands, "/msg <player> <nachricht>");
 	goto("wait");
@@ -3019,6 +2998,46 @@ if(!ignore) {
 }
 goto("wait");
 
+@mute
+if(size < 1) {
+	player.speakPrefix(sender, prefix_commands, "/mute <player>");
+	goto("wait");
+}
+p_name = list.getIndex(args, 0);
+if(!isOnline(p_name)) {
+	player.speakPrefix(sender, prefix_commands, "This player is not online.");
+	goto("wait");
+}
+p = read.player(p_name);
+p_name = player.getName(p);
+if(p_name == "marvinius") {
+	msg(sender, "§cSorry §s¯\\_(ツ)_/¯");
+	goto("wait");
+}
+msg("online", concat("§c", p_name, " was muted by ", sender_name, "."));
+player.mute(p, true);
+goto("wait");
+
+@unmute
+if(size < 1) {
+	player.speakPrefix(sender, prefix_commands, "/unmute <player>");
+	goto("wait");
+}
+p_name = list.getIndex(args, 0);
+if(!isOnline(p_name)) {
+	player.speakPrefix(sender, prefix_commands, "This player is not online.");
+	goto("wait");
+}
+p = read.player(p_name);
+p_name = player.getName(p);
+if(p_name == "marvinius") {
+	msg(sender, "§cSorry §s¯\\_(ツ)_/¯");
+	goto("wait");
+}
+msg("online", concat("§c", p_name, " was unmuted by ", sender_name, "."));
+player.mute(p, false);
+goto("wait");
+
 @kick
 if(size < 1) {
 	player.speak(sender, prefix_commands, "/kick <player> [reason]");
@@ -4083,8 +4102,8 @@ goto("plothelp");
 
 @stopadventure
 removeAdventureDisplay(player);
-sgv(player, "onadventure", "false");
-player.speak(player, "§5Adventure", "Abenteuer wurde abgebrochen!");
+player.setAdventure(player, false);
+player.speak(player, "§5Adventure", "Adventure canceled!");
 goto("wait");
 
 @speed
@@ -4803,7 +4822,6 @@ while(databank.next(result)) {
 	minute = correctTimeFormat(minute);
 	dateformat = concat(day, ".", month, ".", year);
 	clockformat = concat(hour, ":", minute);
-    //msg(sender, concat(" - §a", player.getNameFromId(id), "§r am §v", dateformat, "§r um §v",  clockformat, " Uhr"));
 	msg(sender, table.get(table, concat("§a", player.getNameFromId(id)), concat("§v", dateformat, " ", clockformat)));
 }
 msg(sender, table.getEnd(table));
@@ -5540,6 +5558,7 @@ function setCommandHelps() {
 	command.addIgnored("kill");
 	command.addIgnored("gamemode");
 	
+	addCommandHelp("silentjoin");
 	addCommandHelp("wusi");
 	addCommandHelp("invignore");
 	addCommandHelp("nowb");
@@ -5562,6 +5581,7 @@ function setCommandHelps() {
 	addCommandHelp("repair");
 	addCommandHelp("showtables");
 	
+	addCommandHelpChildPlayer("mute");
 	addCommandHelpChildPlayer("tpa");
 	addCommandHelpChildPlayer("tpaccept");
 	addCommandHelpChildPlayer("tpahere");

+ 8 - 11
system/perms.txt

@@ -30,12 +30,10 @@ map.add(permgroupsmap, "supporter", 9);
 
 //Default-Rechte
 perm.registerGroup(0, "isUser");
-perm.registerGroup(0, "chat");
 perm.registerGroup(0, "link");
 perm.registerGroup(0, "wusi");
 perm.registerGroup(0, "showcoords");
 perm.registerGroup(0, "hasitem");
-perm.registerGroup(0, "questanswer");
 perm.registerGroup(0, "lock");
 perm.registerGroup(0, "ping");
 perm.registerGroup(0, "door");
@@ -55,7 +53,6 @@ perm.registerGroup(0, "playtime");
 perm.registerGroup(0, "kill");
 perm.registerGroup(0, "list");
 perm.registerGroup(0, "pvp");
-perm.registerGroup(0, "lag");
 perm.registerGroup(0, "coords");
 perm.registerGroup(0, "itemdb");
 perm.registerGroup(0, "msg");
@@ -64,17 +61,13 @@ perm.registerGroup(0, "answer");
 perm.registerGroup(0, "r");
 perm.registerGroup(0, "seen");
 perm.registerGroup(0, "teleportaccept");
-perm.registerGroup(0, "block");
 perm.registerGroup(0, "afk");
-perm.registerGroup(0, "recipe");
 perm.registerGroup(0, "skill");
-perm.registerGroup(0, "bossbar");
 perm.registerGroup(0, "giveup");
 perm.registerGroup(0, "help");
 perm.registerGroup(0, "spawn");
 perm.registerGroup(0, "server");
 perm.registerGroup(0, "playerinfo");
-perm.registerGroup(0, "pay");
 perm.registerGroup(0, "friend");
 perm.registerGroup(0, "money");
 perm.registerGroup(0, "party");
@@ -103,6 +96,8 @@ perm.registerGroup(0, "startgame");
 perm.registerGroup(2, "isAdmin");
 perm.registerGroup(2, "isTeam");
 perm.registerGroup(2, "news");
+perm.registerGroup(2, "bossbar");
+perm.registerGroup(2, "recipe");
 perm.registerGroup(2, "voxel");
 perm.registerGroup(2, "setrank.other");
 perm.registerGroup(2, "setservermessage");
@@ -156,7 +151,6 @@ perm.registerGroup(2, "plot.moreinfo");
 perm.registerGroup(2, "boost");
 perm.registerGroup(2, "whitelist");
 perm.registerGroup(2, "color");
-perm.registerGroup(2, "villager");
 perm.registerGroup(2, "elytra");
 perm.registerGroup(2, "rocket");
 perm.registerGroup(2, "time");
@@ -183,12 +177,13 @@ perm.registerGroup(2, "kill.other");
 perm.registerGroup(2, "hat");
 perm.registerGroup(2, "repair");
 perm.registerGroup(2, "pvp.other");
-perm.registerGroup(2, "lightupdate");
 perm.registerGroup(2, "invsee");
 perm.registerGroup(2, "op");
 perm.registerGroup(2, "deop");
 perm.registerGroup(2, "xp");
 perm.registerGroup(2, "vanish");
+perm.registerGroup(2, "mute");
+perm.registerGroup(2, "unmute");
 perm.registerGroup(2, "silentkick");
 perm.registerGroup(2, "kick");
 perm.registerGroup(2, "warn");
@@ -236,13 +231,11 @@ perm.registerGroup(3, "head");
 perm.registerGroup(3, "ass");
 perm.registerGroup(3, "sign");
 perm.registerGroup(3, "color");
-perm.registerGroup(3, "villager");
 perm.registerGroup(3, "grow");
 perm.registerGroup(3, "datatools");
 perm.registerGroup(3, "speed");
 perm.registerGroup(3, "plough");
 perm.registerGroup(3, "plant");
-perm.registerGroup(3, "grow");
 perm.registerGroup(3, "allsounds");
 perm.registerGroup(3, "top");
 perm.registerGroup(3, "jumpto");
@@ -321,6 +314,8 @@ perm.registerGroup(11, "isStreamer");
 perm.registerGroup(12, "isMod");
 perm.registerGroup(12, "isTeam");
 perm.registerGroup(12, "perm");
+perm.registerGroup(12, "speed");
+perm.registerGroup(12, "invignore");
 perm.registerGroup(12, "feed");
 perm.registerGroup(12, "heal");
 perm.registerGroup(12, "nickname");
@@ -349,6 +344,8 @@ perm.registerGroup(12, "adminshop");
 perm.registerGroup(12, "startgame.jump");
 perm.registerGroup(12, "user.other");
 perm.registerGroup(12, "gamerule");
+perm.registerGroup(12, "fly");
+perm.registerGroup(12, "fly.other");
 
 //YTer
 perm.registerGroup(13, "isYT");

+ 1 - 11
utils/u_games.txt

@@ -18,8 +18,7 @@ if(event == "entity_mount") {
 	if(!isPlayer(rider)) {
 		goto("simplelobby");
 	}
-	player =  rider;
-
+	player = rider;
 }
 if(!player.hasMinigameId(player, script_id)) {
 	goto("simplelobby");
@@ -508,15 +507,6 @@ function minigame.getPlayers(script_id) {
 	return list;
 }
 
-function player.getMinigameIds(player) {
-	set = data.get(player, "minigames_set");
-	if(set == null) {
-		set = set.new();
-		data.set(player, "minigames_set", set);
-	}
-	return set;
-}
-
 function player.hasMinigameId(player, script_id) {
 	set = player.getMinigameIds(player);
 	return set.contains(set, script_id);

+ 134 - 10
utils/u_general.txt

@@ -8,9 +8,16 @@ function sendOnlineMessage(player, message) {
 	colorcode = text.subString(rank, 0, 2);
 	if(player.getId(player) == 35) {
 		nickname = concat(nickname, "§r][§e§l★");
-		msg("online", "[", text.hover(concat(colorcode, nickname), concat(rank, "\n§eSpecial VIP for Special Services")), "§r] §r", message);
-	} else {
-		msg("online", "[", text.hover(concat(colorcode, nickname), rank), "§r] §r", message);
+		rank = concat(rank, "\n§eSpecial VIP for Special Services");
+	}
+	online_list = players.toList();
+	iter = list.iterator(online_list);
+	while(hasNext(iter)) {
+		p = next(iter);
+		if(player.hasMinigame(p) && player.isMuted(p)) {
+			continue;
+		}
+		msg(p, "[", text.hover(concat(colorcode, nickname), rank), "§r] §r", message);
 	}
 }
 
@@ -48,6 +55,51 @@ function backpos.get(player) {
 	return location;
 }
 
+function map.sort(map, ascending) {
+	map_size = map.getSize(map);
+	my_array = array.new(map_size, 2);
+	//Map in 2 Arrays verwandeln
+	i = 0;
+	iter = map.iterator(map);
+	while(hasNext(iter)) {
+		element = next(iter);
+		key = map.getKey(element);
+		value = map.getValue(element);
+		my_array[i, 0] = key;
+		my_array[i, 1] = value;
+		i++;
+	}
+	//Array sortieren
+	if(ascending) {
+		for(i = 0; i < map_size - 1; i++) {
+			for(j = i + 1; j < map_size; j++) {
+				if(my_array[j, 1] < my_array[i, 1]) {
+					g = my_array[i, 0];
+					h = my_array[i, 1];
+					my_array[i, 0] = my_array[j, 0];
+					my_array[i, 1] = my_array[j, 1];
+					my_array[j, 0] = g;
+					my_array[j, 1] = h;
+				}
+			}
+		}
+	} else {
+		for(i = 0; i < map_size - 1; i++) {
+			for(j = i + 1; j < map_size; j++) {
+				if(my_array[j, 1] > my_array[i, 1]) {
+					g = my_array[i, 0];
+					h = my_array[i, 1];
+					my_array[i, 0] = my_array[j, 0];
+					my_array[i, 1] = my_array[j, 1];
+					my_array[j, 0] = g;
+					my_array[j, 1] = h;
+				}
+			}
+		}
+	}
+	return my_array;
+}
+
 function getSpacer() {
 	return("§0-------------------------------------------------");
 }
@@ -81,7 +133,7 @@ function correctTimeFormat(textnumber) {
 }
 
 function checkInvChange(player, location) {
-	if(event == "portal") {
+	if($event == "portal") {
 		from_world = world.get($from);
 		to_world = world.get($to);
 	} else {
@@ -227,12 +279,9 @@ function teleportPlayer(player, location, backPos) { //Deprecated
 }
 
 function player.teleport(player, location, backPos) {
-	onadventure = ggv(player, "onadventure");
-	if(onadventure != null) {
-		if(onadventure) {
-			msg(player, "[§5Adventure§r] Teleport blocked. ", text.click("[§5Cancel Adenture?§r]", concat("/stopadventure ", player)));
-			return false;
-		}
+	if(player.isOnAdventure(player)) {
+		msg(player, "[§5Adventure§r] Teleport blocked. ", text.click("[§5Cancel Adenture?§r]", concat("/stopadventure ", player)));
+		return false;
 	}
 	if(backPos) {
 		setBackPos(player);
@@ -314,6 +363,15 @@ function player.hasMinigame(player) {
 	return false;
 }
 
+function player.getMinigameIds(player) {
+	set = data.get(player, "minigames_set");
+	if(set == null) {
+		set = set.new();
+		data.set(player, "minigames_set", set);
+	}
+	return set;
+}
+
 function loc.isInGamesWorld(location) {
 	return loc.getWorld(location) == getGamesWorld();
 }
@@ -338,6 +396,17 @@ function getSurvivalSpawn() {
 	return read.location(config.getString(getScriptVar("server_config"), "surv_spawn", "games:0:0:0"));
 }
 
+//--------------------------------------------------
+//Text-Utils
+//--------------------------------------------------
+
+function text.upperFirstLetter(string) {
+	length = text.length(string);
+	first_letter = text.subString(string, 0, 1);
+	rest = text.substring(string, 1, length);
+	return concat(text.toUpperCase(first_letter), rest);
+}
+
 //--------------------------------------------------
 //Showcoords-Utils
 //--------------------------------------------------
@@ -1171,6 +1240,61 @@ function player.getTotalPlaytime(player_or_id) {
 	return minutes;
 }
 
+function player.isOnAdventure(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getBool(config, "onadventure", false);
+}
+
+function player.setAdventure(player_or_id, boolean) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "onadventure", boolean);
+	config.saveAsync(config);
+}
+
+function player.isMuted(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getBool(config, "muted", false);
+}
+
+function player.mute(player_or_id, boolean) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "muted", boolean);
+	config.saveAsync(config);
+}
+
+function player.getSilentJoin(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getBool(config, "silentjoin", false);
+}
+
+function player.setSilentJoin(player_or_id, boolean) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "silentjoin", boolean);
+	config.saveAsync(config);
+}
+
+function player.getAutoCloseDoor(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getBool(config, "door_auto_close", true);
+}
+
+function player.setAutoCloseDoor(player_or_id, boolean) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "door_auto_close", boolean);
+	config.saveAsync(config);
+}
+
+function player.hasFirstJoin(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getBool(config, "firstjoin", true);
+}
+
+function player.setFirstJoin(player_or_id, boolean) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "firstjoin", !boolean);
+	config.saveAsync(config);
+}
+
 function player.getFirstJoin(player_or_id) {
 	if(isPlayer(player_or_id)) {
 		player_id = player.getId(player_or_id);

Деякі файли не було показано, через те що забагато файлів було змінено