Marvin Löschenkohl преди 4 години
родител
ревизия
6ad0f9f4c4

+ 0 - 0
minigames/dame/dame.txt → Archiv/minigames/dame/dame.txt


+ 0 - 0
minigames/dame/dame_map1.txt → Archiv/minigames/dame/dame_map1.txt


+ 0 - 0
minigames/hungergames/hungergames.txt → Archiv/minigames/hungergames/hungergames.txt


+ 0 - 0
minigames/hungergames/region_hgmap1.txt → Archiv/minigames/hungergames/region_hgmap1.txt


+ 0 - 0
minigames/presents/presents.txt → Archiv/minigames/presents/presents.txt


+ 0 - 0
minigames/presents/region_presentsmap1.txt → Archiv/minigames/presents/region_presentsmap1.txt


+ 0 - 0
minigames/pvp/pvp.txt → Archiv/minigames/pvp/pvp.txt


+ 0 - 0
minigames/pvp/pvpequipment.txt → Archiv/minigames/pvp/pvpequipment.txt


+ 0 - 0
minigames/pvp/pvpmap1.txt → Archiv/minigames/pvp/pvpmap1.txt


+ 0 - 0
minigames/pvp/pvpmap2.txt → Archiv/minigames/pvp/pvpmap2.txt


+ 0 - 0
minigames/sinkships/sinkships.txt → Archiv/minigames/sinkships/sinkships.txt


+ 0 - 0
minigames/sinkships/sinkshipsmap1.txt → Archiv/minigames/sinkships/sinkshipsmap1.txt


+ 0 - 0
minigames/skywars/region_swmap1.txt → Archiv/minigames/skywars/region_swmap1.txt


+ 0 - 0
minigames/skywars/skywars.txt → Archiv/minigames/skywars/skywars.txt


+ 0 - 0
minigames/skywars/skywarskits.txt → Archiv/minigames/skywars/skywarskits.txt


+ 0 - 0
minigames/zombies/region_zombies1.txt → Archiv/minigames/zombies/region_zombies1.txt


+ 0 - 0
minigames/zombies/zombies.txt → Archiv/minigames/zombies/zombies.txt


+ 20 - 11
global/gamecenter.txt

@@ -7,6 +7,7 @@ event.load("entity_click");
 event.load("custom_command");
 event.load("player_logout");
 event.load("term_script");
+event.load("player_move");
 
 script_ids = map.new();
 script_players = list.new();
@@ -24,18 +25,19 @@ gamesworld = getGamesWorld();
 sign_tag = block.getTag("minecraft:wall_signs");
 facing_property = block.getProperty("horizontal_facing");
 marv_loc = loc.new(gamesworld, -410, 161, -60);
-dice_loc = loc.new(gamesworld, -412, 156, -54);
+dice_loc = loc.new(gamesworld, -416, 156, -57);
 dice_time = time.getMillis();
+move_id_to_spawn = event.addMoveData(loc.new(gamesworld, -415, 148, -62), loc.new(gamesworld, -411, 153, -58), 5, -1);
 
-minigame.addSign("bwmapsign1", false, loc.new(gamesworld, -423, 158, -42), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap1", false);
-minigame.addSign("bwmapsign2", false, loc.new(gamesworld, -423, 158, -43), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap2", false);
-minigame.addSign("bwmapsign3", false, loc.new(gamesworld, -423, 158, -44), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap3", false);
-minigame.addSign("bwmapsign4", false, loc.new(gamesworld, -423, 157, -42), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap4", false);
-minigame.addSign("bwmapsign5", false, loc.new(gamesworld, -423, 157, -43), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap5", false);
-minigame.addSign("bwmapsign6", false, loc.new(gamesworld, -423, 157, -44), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap6", false);
-minigame.addSign("bwmapsign7", false, loc.new(gamesworld, -423, 156, -42), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap7", false);
-minigame.addSign("bwmapsign8", false, loc.new(gamesworld, -423, 156, -43), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap8", false);
-minigame.addSign("bwmapsign9", false, loc.new(gamesworld, -423, 156, -44), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap9", false);
+minigame.addSign("bwmapsign1", true, loc.new(gamesworld, -423, 158, -42), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap1", false);
+minigame.addSign("bwmapsign2", true, loc.new(gamesworld, -423, 158, -43), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap2", false);
+minigame.addSign("bwmapsign3", true, loc.new(gamesworld, -423, 158, -44), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap3", false);
+minigame.addSign("bwmapsign4", true, loc.new(gamesworld, -423, 157, -42), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap4", false);
+minigame.addSign("bwmapsign5", true, loc.new(gamesworld, -423, 157, -43), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap5", false);
+minigame.addSign("bwmapsign6", true, loc.new(gamesworld, -423, 157, -44), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap6", false);
+minigame.addSign("bwmapsign7", true, loc.new(gamesworld, -423, 156, -42), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap7", false);
+minigame.addSign("bwmapsign8", true, loc.new(gamesworld, -423, 156, -43), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap8", false);
+minigame.addSign("bwmapsign9", true, loc.new(gamesworld, -423, 156, -44), "minigames/bedwars/bedwars", "minigames/bedwars/region_bwmap9", false);
 minigame.addSign("letterssign1", true, loc.new(gamesworld, -396, 158, -63), "minigames/letters/letters", "minigames/letters/region_lettersmap1", true);
 minigame.addSign("letterssign2", true, loc.new(gamesworld, -396, 158, -62), "minigames/letters/letters", "minigames/letters/region_lettersmap2", true);
 minigame.addSign("letterssign3", true, loc.new(gamesworld, -396, 158, -61), "minigames/letters/letters", "minigames/letters/region_lettersmap3", true);
@@ -63,7 +65,7 @@ minigame.addSign("invertingclsign3", true, loc.new(gamesworld, -396, 157, -55),
 //minigame.addSign("maednsign1", false, loc.new(gamesworld, -401, 157, -72), "minigames/maedn/maedn", "minigames/maedn/maednmap1", false);
 //minigame.addSign("ctfsign1", false, loc.new(gamesworld, 13, 75, 64), "minigames/capturetheflag/capturetheflag", "minigames/capturetheflag/ctfmap1", false);
 minigame.addSign("jrmap", true, loc.new(gamesworld, -396, 158, -51), "minigames/jumpnrun/jumpnrun", "minigames/jumpnrun/jumpnrun", true);
-minigame.addSign("parcoursign1", false, loc.new(gamesworld, -396, 158, -50), "minigames/parcour/parcour", "minigames/parcour/parcour_map1", true);
+minigame.addSign("parcoursign1", true, loc.new(gamesworld, -396, 158, -50), "minigames/parcour/parcour", "minigames/parcour/parcour_map1", true);
 minigame.addSign("tjrsign", true, loc.new(gamesworld, -396, 157, -51), "minigames/jumpnrun/todesjumpnrun", "minigames/jumpnrun/todesjumpnrun", true);
 minigame.addSign("icejrsign", true, loc.new(gamesworld, -404, 157, -75), "minigames/jumpnrun/icejumpnrun", "minigames/jumpnrun/icejumpnrun", true);
 minigame.addSign("fastbridgesign1", true, loc.new(gamesworld, -413, 157, -40), "minigames/fastbridge/fastbridge", "minigames/fastbridge/region_fastbridgemap1", false);
@@ -114,6 +116,13 @@ wait();
 ignoreGoto(event);
 goto("wait");
 
+@player_move
+if(id == move_id_to_spawn) {
+	player.setBackPosLoc(player, world.getGamesSpawn());
+	player.teleport(player, world.getServerSpawn(), false);
+}
+goto("wait");
+
 @term_script
 map.remove(script_ids, getScriptVar("sign_loc"));
 goto("wait");

+ 1 - 1
global/mailsystem.txt

@@ -97,7 +97,7 @@ function mail.showNew(player) {
 		databank.close(stmt);
 		return;
 	}
-	msg(player, "[§bMail-Newt§r]");
+	msg(player, "[§bMail-New§r]");
 	while(nextrow) {
 		mail_id = databank.getInt(result, 1);
 		from = player.getNameFromId(databank.getInt(result, 2));

+ 46 - 46
global/party.txt

@@ -30,7 +30,7 @@ if(command == "party") {
 	size = list.getSize(args);
 	if(size == 0) {
 		@partyhelp
-		speakPrefix(player, party_prefix, "§r/party ...");
+		msg.prefix(player, party_prefix, "§r/party ...");
 		msg(player, "§5 - invite <player> §rInvite a player");
 		msg(player, "§5 - accept <player> §rAccept an invitation");
 		msg(player, "§5 - deny <player> §rDeny an invitation");
@@ -46,10 +46,10 @@ if(command == "party") {
 	arg0 = list.getIndex(args, 0);
 	if(arg0 == "list") {
 		if(size != 1) {
-			speakPrefix(player, party_prefix, "§5/party list");
+			msg.prefix(player, party_prefix, "§5/party list");
 		} else {
 			if(!player.isInParty(player)) {
-				speakPrefix(player, party_prefix, "You are not in a party.");
+				msg.prefix(player, party_prefix, "You are not in a party.");
 				goto("wait");
 			}
 			list = party.getList(player.getPartyId(player));
@@ -68,10 +68,10 @@ if(command == "party") {
 	}
 	if(arg0 == "leave") {
 		if(size != 1) {
-			speakPrefix(player, party_prefix, "§5/party leave");
+			msg.prefix(player, party_prefix, "§5/party leave");
 		} else {
 			if(!player.isInParty(player)) {
-				speakPrefix(player, party_prefix, "You are not in a party.");
+				msg.prefix(player, party_prefix, "You are not in a party.");
 				goto("wait");
 			}
 			party.kickPlayer(player, "leave");
@@ -80,14 +80,14 @@ if(command == "party") {
 	}
 	if(arg0 == "disband") {
 		if(size != 1) {
-			speakPrefix(player, party_prefix, "§5/party disband");
+			msg.prefix(player, party_prefix, "§5/party disband");
 		} else {
 			if(!player.isInParty(player)) {
-				speakPrefix(player, party_prefix, "You are not in a party.");
+				msg.prefix(player, party_prefix, "You are not in a party.");
 				goto("wait");
 			}
 			if(!player.isPartyLeader(player)) {
-				speakPrefix(player, party_prefix, "You are not the party leader.");
+				msg.prefix(player, party_prefix, "You are not the party leader.");
 				goto("wait");
 			}
 			party.delete(player.getPartyId(player));
@@ -96,38 +96,38 @@ if(command == "party") {
 	}
 	if(arg0 == "kick") {
 		if(size != 2) {
-			speakPrefix(player, party_prefix, "§5/party kick <player>");
+			msg.prefix(player, party_prefix, "§5/party kick <player>");
 		} else {
 			if(!player.isInParty(player)) {
-				speakPrefix(player, party_prefix, "You are not in a party.");
+				msg.prefix(player, party_prefix, "You are not in a party.");
 				goto("wait");
 			}
 			if(!player.isPartyLeaderOrMod(player)) {
-				speakPrefix(player, party_prefix, "You are not leader or moderator of the party.");
+				msg.prefix(player, party_prefix, "You are not leader or moderator of the party.");
 				goto("wait");
 			}
 			pname = list.getIndex(args, 1);
 			if(!checkIfEverOnline(pname)) {
-				speakPrefix(player, party_prefix, "This player has never been online.");
+				msg.prefix(player, party_prefix, "This player has never been online.");
 				goto("wait");
 			}
 			p = read.player(pname);
 			if(p == null) {
-				speakPrefix(player, party_prefix, "This player is not online.");
+				msg.prefix(player, party_prefix, "This player is not online.");
 				goto("wait");
 			}
 			if(player == p) {
-				speakPrefix(player, party_prefix, "You can´t apply that to yourself.");
+				msg.prefix(player, party_prefix, "You can´t apply that to yourself.");
 				goto("wait");
 			}
 			if(!party.same(p, player)) {
-				speakPrefix(player, party_prefix, "This player is not in your party.");
+				msg.prefix(player, party_prefix, "This player is not in your party.");
 				goto("wait");
 			}
 			ownrank = player.getPartyRank(player);
 			if(ownrank == "Moderator") {
 				if(player.isPartyLeaderOrMod(p)) {
-					speakPrefix(player, party_prefix, "§rDu darfst diesen Spieler nicht kicken");
+					msg.prefix(player, party_prefix, "§rDu darfst diesen Spieler nicht kicken");
 					goto("wait");
 				}
 			}
@@ -137,32 +137,32 @@ if(command == "party") {
 	}
 	if(arg0 == "promote" || arg0 == "demote") {
 		if(size != 2) {
-			speakPrefix(player, party_prefix, concat("§5/party ", arg0, " <player>"));
+			msg.prefix(player, party_prefix, concat("§5/party ", arg0, " <player>"));
 		} else {
 			pname = list.getIndex(args, 1);
 			if(!player.isInParty(player)) {
-				speakPrefix(player, party_prefix, "You are not in a party.");
+				msg.prefix(player, party_prefix, "You are not in a party.");
 				goto("wait");
 			}
 			if(!player.isPartyLeader(player)) {
-				speakPrefix(player, party_prefix, "You are not the party leader.");
+				msg.prefix(player, party_prefix, "You are not the party leader.");
 				goto("wait");
 			}
 			if(!checkIfEverOnline(pname)) {
-				speakPrefix(player, party_prefix, "This player has never been online.");
+				msg.prefix(player, party_prefix, "This player has never been online.");
 				goto("wait");
 			}
 			p = read.player(pname);
 			if(p == null) {
-				speakPrefix(player, party_prefix, "This player is not online.");
+				msg.prefix(player, party_prefix, "This player is not online.");
 				goto("wait");
 			}
 			if(player == p) {
-				speakPrefix(player, party_prefix, "You can´t apply that to yourself.");
+				msg.prefix(player, party_prefix, "You can´t apply that to yourself.");
 				goto("wait");
 			}
 			if(!party.same(p, player)) {
-				speakPrefix(player, party_prefix, "This player is not in your party.");
+				msg.prefix(player, party_prefix, "This player is not in your party.");
 				goto("wait");
 			}
 			partyid = player.getPartyId(player);
@@ -181,7 +181,7 @@ if(command == "party") {
 					player.setPartyRank(p, "Player");
 					party.sendMessage(partyid, concat("§r", pname, " is no longer Moderator."));
 				} else {
-					speakPrefix(player, party_prefix, "This player cannot be demoted.");
+					msg.prefix(player, party_prefix, "This player cannot be demoted.");
 				}
 			}
 		}
@@ -189,7 +189,7 @@ if(command == "party") {
 	}
 	if(arg0 == "invite") {
 		if(size != 2) {
-			speakPrefix(player, party_prefix, "§5/party invite <player>");
+			msg.prefix(player, party_prefix, "§5/party invite <player>");
 		} else {
 			if(!player.isInParty(player)) { //wenn nicht in party
 				if(map.contains(invite_ids, player)) { //wenn id noch nicht zugewiesen
@@ -198,26 +198,26 @@ if(command == "party") {
 			}
 			pname = list.getIndex(args, 1);
 			if(!checkIfEverOnline(pname)) {
-				speakPrefix(player, party_prefix, "This player has never been online.");
+				msg.prefix(player, party_prefix, "This player has never been online.");
 				goto("wait");
 			}
 			p = read.player(pname);
 			if(p == null) {
-				speakPrefix(player, party_prefix, "This player is not online.");
+				msg.prefix(player, party_prefix, "This player is not online.");
 				goto("wait");
 			}
 			if(player == p) {
-				speakPrefix(player, party_prefix, "You can´t apply that to yourself.");
+				msg.prefix(player, party_prefix, "You can´t apply that to yourself.");
 				goto("wait");
 			}
 			if(player.isInParty(player)) {
 				if(!player.isPartyLeaderOrMod(player)) {
-					speakPrefix(player, party_prefix, "You are not leader or moderator of the party.");
+					msg.prefix(player, party_prefix, "You are not leader or moderator of the party.");
 					goto("wait");
 				}
 			}
 			if(player.isInParty(p)) {
-				speakPrefix(player, party_prefix, "This player is already in your party.");
+				msg.prefix(player, party_prefix, "This player is already in your party.");
 				goto("wait");
 			}
 			list = map.get(invitations, p);
@@ -226,7 +226,7 @@ if(command == "party") {
 				map.add(invitations, p, list);
 			}
 			if(list.contains(list, player)) {
-				speakPrefix(player, party_prefix, "This player already has an invitation from you.");
+				msg.prefix(player, party_prefix, "This player already has an invitation from you.");
 				goto("wait");
 			}
 			list.add(list, player);
@@ -236,8 +236,8 @@ if(command == "party") {
 			list = map.get(delkeytimes, p);
 			list.add(list, time.getMillis());
 			map.add(invite_ids, player, partycounter);
-			speakPrefix(player, party_prefix, "Invitation sent.");
-			speakPrefix(p, party_prefix, concat(player_name, " invites you to a party."));
+			msg.prefix(player, party_prefix, "Invitation sent.");
+			msg.prefix(p, party_prefix, concat(player_name, " invites you to a party."));
 			msg(p, " §5=> §rAccept ? ", text.click("[§aYes§r] ", concat("/party accept ", player_name)), text.click("[§cNo§r]", concat("/party deny ", player_name)));
 			sgoto(1200, "deletePartyInvitation"); //Einladung bleibt 1 Minute lang erhalten
 		}
@@ -245,25 +245,25 @@ if(command == "party") {
 	}
 	if(arg0 == "accept") {
 		if(size != 2) {
-			speakPrefix(player, party_prefix, "§5/party accept <player>");
+			msg.prefix(player, party_prefix, "§5/party accept <player>");
 		} else {
 			if(player.isInParty(player)) {
-				speakPrefix(player, party_prefix, "You are already in a party.");
+				msg.prefix(player, party_prefix, "You are already in a party.");
 				goto("wait");
 			}
 			pname = list.getIndex(args, 1);
 			if(!checkIfEverOnline(pname)) {
-				speakPrefix(player, party_prefix, "This player has never been online.");
+				msg.prefix(player, party_prefix, "This player has never been online.");
 				goto("wait");
 			}
 			p = read.player(pname);
 			if(p == null) {
-				speakPrefix(player, party_prefix, "This player is no longer online.");
+				msg.prefix(player, party_prefix, "This player is no longer online.");
 				goto("wait");
 			}
 			list = map.get(invitations, player);
 			if(list == null || !list.contains(list, p)) {
-				speakPrefix(player, party_prefix, "This invitation is invalid.");
+				msg.prefix(player, party_prefix, "This invitation is invalid.");
 				goto("wait");
 			}
 			if(player.isInParty(p)) { //wenn einlader bereits in party
@@ -272,7 +272,7 @@ if(command == "party") {
 					party.addPlayer(partyid, player);
 					player.setPartyRank(player, "Player");
 				} else {
-					speakPrefix(player, party_prefix, "This player is already in another party.");
+					msg.prefix(player, party_prefix, "This player is already in another party.");
 					goto("wait");
 				}
 			} else {
@@ -282,7 +282,7 @@ if(command == "party") {
 				party.addPlayer(partyid, player);
 				player.setPartyRank(p, "Leader");
 				player.setPartyRank(player, "Player");
-				speakPrefix(p, party_prefix, "The party was created.");
+				msg.prefix(p, party_prefix, "The party was created.");
 			}
 			list.clear(list); //Einladungs-Liste von oben
 			party.sendMessage(partyid, concat("§r", player_name, " joined the party."));
@@ -291,18 +291,18 @@ if(command == "party") {
 	}
 	if(arg0 == "deny") {
 		if(size != 2) {
-			speakPrefix(player, party_prefix, "§5/party deny <player>");
+			msg.prefix(player, party_prefix, "§5/party deny <player>");
 		} else {
 			list = map.get(invitations, player);
 			if(list != null) {
 				pname = list.getIndex(args, 1);
 				p = read.player(pname);
 				if(p == null) {
-					speakPrefix(player, party_prefix, "This player is no longer online.");
+					msg.prefix(player, party_prefix, "This player is no longer online.");
 					goto("wait");
 				}
 				if(list == null || !list.contains(list, p)) {
-					speakPrefix(player, party_prefix, "This invitation is invalid.");
+					msg.prefix(player, party_prefix, "This invitation is invalid.");
 					goto("wait");
 				}
 				
@@ -312,9 +312,9 @@ if(command == "party") {
 				list.removeIndex(list2, index);
 				p = read.player(pname);
 				if(p != null) {
-					speakPrefix(p, party_prefix, concat("§r", player_name, " has denied your invitation."));
+					msg.prefix(p, party_prefix, concat("§r", player_name, " has denied your invitation."));
 				}
-				speakPrefix(player, party_prefix, concat("Invitation from ", pname, " denied."));
+				msg.prefix(player, party_prefix, concat("Invitation from ", pname, " denied."));
 			}
 		}
 		goto("wait");
@@ -387,7 +387,7 @@ function party.kickPlayer(player, reason) {
 function party.sendMessage(party_id, message) {
 	iter = list.iterator(party.getList(party_id));
 	while(hasNext(iter)) {
-		speakPrefix(player.get(next(iter)), $party_prefix, message);
+		msg.prefix(player.get(next(iter)), $party_prefix, message);
 	}
 }
 

+ 1 - 1
minigames/bedwars/bedwars.txt

@@ -351,7 +351,7 @@ for(i = 0; i < list.getSize(player_list); i++) {
 wait();
 if(event == "living_pre_hurt" || event == "living_death") {
 	if(!isPlayer(living_entity)) {
-		goto("wait");
+		goto("checkgame");
 	}
 	player = living_entity;
 }

+ 0 - 54
minigames/sudoku/sudoku.txt

@@ -1,54 +0,0 @@
-gamesworld = world.get("games");
-edge1 = loc.new(gamesworld, -438, 154, -122);
-edge2 = loc.new(gamesworld, -426, 154, -110);
-
-default_type = "minecraft:glass";
-border_type = "minecraft:black_concrete";
-
-command.add("sudoku");
-
-event.load("custom_command");
-
-@wait
-wait();
-iGoto(event);
-goto("wait");
-
-@custom_command
-if(command == "sudoku") {
-	size = list.getSize(args);
-	if(size == 0) {
-		msg(player, "/sudoku...");
-		msg(player, " - clear");
-		msg(player, " - reset");
-		msg(player, " - solve");
-		goto("wait");
-	}
-	arg0 = list.getIndex(args, 0);
-	if(arg0 == "clear") {
-		y = loc.getY(edge1);
-		x1 = loc.getX(edge1);
-		z1 = loc.getZ(edge1);
-		x2 = loc.getX(edge2);
-		z2 = loc.getZ(edge2);
-
-		for(x = x1; x <= x2; x++) {
-			for(z = z1; z <= z2; z++) {
-				loc = loc.new(gamesworld, x, y, z);
-				b_type = block.getType(loc);
-				if(b_type != default_type) {
-					if(b_type != border_type) {
-						block.set(loc, default_type);
-					}
-				}
-			}
-		}
-		msg("dev", "Sudoku geleert");
-		goto("wait");
-	}
-	if(arg0 == "solve") {
-		
-		goto("wait");
-	}
-}
-goto("wait");

+ 3 - 2
storydorf/spawn/core.txt

@@ -34,7 +34,7 @@ if(player.hasQuest2(player)) {
 }
 entity_name = entity.getName(entity);
 if(entity_name == "Tutorial") {
-	script = script.start("storydorf/spawn/tutorial", "utils/u_quest", "utils/u_general");
+	/*script = script.start("storydorf/spawn/tutorial", "utils/u_quest", "utils/u_general");
 	if(script == null) {
 		waitfor(1);
 		msg("dev", "quest waitfor");
@@ -43,7 +43,8 @@ if(entity_name == "Tutorial") {
 	script.setVar(script, "player", player);
 	script.setVar(script, "script", script);
 	script.setVar(script, "quest_player_uuid", player.getUuid(player));
-	script.callEvent("quest_start", script);
+	script.callEvent("quest_start", script);*/
+	msg(player, "Coming soon");
 	goto("wait");
 }
 if(entity_name == "Marvin") {

+ 33 - 9
survival/survival.txt

@@ -1,3 +1,16 @@
+/* Description Clan Data-Structure
+
+CONFIGS
+clan_data / clan_id
+- name
+- tag
+- money
+
+player_data / player_id
+- clan.id
+- clan.role
+
+*/
 event.load("entity_click");
 event.load("inv_click");
 event.load("player_post_respawn");
@@ -16,6 +29,8 @@ 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);
 
+clan.loadData();
+
 doors = list.new();
 tp_list = list.new();
 tp_map = map.new();
@@ -29,8 +44,8 @@ moveid_gamesspawn = event.addMoveData(loc.new(overworld, 219, 66, 253), loc.new(
 move_id_afk_loop = event.addMoveData(loc.new(overworld, 208, 69, 226), loc.new(overworld, 209, 69.5, 227), 5, -1);
 config = getScriptVar("server_config");
 survival_spawn = read.location(config.getString(config, "surv_spawn", "games:0:0:0"));
-adventure_chest_loc = loc.new(overworld, 180, 74, 228);
-adventure_aim_loc = loc.new(overworld, 177, 70, 232);
+adventure_chest_loc = loc.new(overworld, 177, 74, 237);
+adventure_aim_loc = loc.new(overworld, 180, 70, 241);
 prefix_money = "§2Money";
 
 max_ench_lvl = map.new();
@@ -99,7 +114,8 @@ msg("dev", "§bSurvival §rloaded.");
 wait();
 if(event == "player_move") {
 	if(id == moveid_gamesspawn) {
-		teleportPlayer(player, world.getGamesSpawn(), false);
+		player.setBackPosLoc(player, world.getServerSpawn());
+		player.teleport(player, world.getGamesSpawn(), false);
 		goto("wait");
 	}
 	if(id == move_id_afk_loop) {
@@ -109,7 +125,7 @@ if(event == "player_move") {
 		if(now_time - time > 9000) { //9 Sekunden
 			map.add(afk_loop_map, player_uuid, now_time);
 			addMoney(player, 1);
-			msg.prefix(player, prefix_money, "+1");
+			player.action(player, "+§61 §rsnuvi");
 		}
 		goto("wait");
 	}
@@ -161,6 +177,10 @@ if(!isPlayer(living_entity)) {
 player = living_entity;
 damager = player.getFromDamageSource(damage_source);
 if(!isPlayer(damager)) {
+	player_loc = entity.getLocation(player);
+	if(loc.hasPlotId(player_loc, 128) && damage.getType(damage_source) == "fall") {
+		cancel = true;
+	}
 	goto("wait");
 }
 if(player == damager) {
@@ -654,7 +674,7 @@ if(block_type == "minecraft:chest") {
 				setWalls(block_loc, wall_type);
 				sound.spawn(block_loc, piston_sound, sound_category_ambient);
 				array = array.new(4);
-				array[0] = player;
+				array[0] = player.getUuid(player);
 				array[1] = block_loc;
 				array[2] = tp_loc;
 				array[3] = true;
@@ -701,7 +721,7 @@ if(block_type == "minecraft:chest") {
 		setWalls(block_loc, wall_type);
 		sound.spawn(block_loc, piston_sound, sound_category_ambient);
 		array = array.new(4);
-		array[0] = player;
+		array[0] = player.getUuid(player);
 		array[1] = block_loc;
 		array[2] = tp_loc;
 		array[3] = false;
@@ -798,13 +818,17 @@ goto("wait");
 @tp_final
 array = list.getIndex(tp_list, 0);
 list.removeIndex(tp_list, 0);
-player = array[0];
+player_uuid = array[0];
 block_loc = array[1];
 tp_loc = array[2];
 bool = array[3];
 sound.spawn(block_loc, piston_sound, sound_category_ambient);
 setWalls(block_loc, "minecraft:air");
-teleportPlayer(player, tp_loc, false);
+player = player.get(player_uuid);
+if(player == null) {
+	goto("wait");
+}
+player.teleport(player, tp_loc, false);
 sound.spawn(tp_loc, adv_tp_sound, sound_category_ambient);
 if(bool) {
 	player.setAdventure(player, true);
@@ -813,7 +837,7 @@ if(bool) {
 	title.reset(player);
 	title.setSub(player, "Have fun!");
 	title.send(player, "§cAdventure");
-	player.speak(player, "§5Adventure", "§rTo complete your adventure, walk to the survival spawn. You cannot teleport. If you die, you start again!");
+	msg.prefix(player, "§5Adventure", "§rTo complete your adventure, walk to the survival spawn. You cannot teleport. If you die, you start again!");
 	offerRank(player, "§eAbenteurer");
 }
 goto("wait");

+ 9 - 1
system/ai.txt

@@ -1,6 +1,11 @@
 event.load("player_login");
 event.load("entity_join");
 
+ai_ignore = list.new();
+list.add(ai_ignore, "human");
+list.add(ai_ignore, "ender_dragon");
+list.add(ai_ignore, "villager");
+
 msg("dev", "§bAi §rloaded");
 @wait
 wait();
@@ -14,7 +19,10 @@ if(isLiving(entity)) {
 	world_name = world.getName(world);
 	if(isSurvWorldName(world_name)) {
 		if(!living.getAi()) {
-			living.removeAi(entity);
+			entity_type = entity.getType(entity);
+			if(!list.contains(ai_ignore, entity_type)) {
+				living.removeAi(entity);
+			}
 		}
 	}
 }

+ 2 - 2
system/chat.txt

@@ -115,7 +115,7 @@ if(first_join) {
 	command("/recipe give ", player_name, " *");
 	player.setFirstJoin(player_id, true);
 }
-
+player.setHeadName(player);
 silentjoin = player.getSilentJoin(player);
 if(!silentjoin) {
 	if(map.contains(personaljoinmessage, player_id) && send_personally_messages) {
@@ -233,6 +233,6 @@ goto("wait");
 
 function player.greet(player) {
 	player_name = player.getName(player);
-	title.setSub(player, concat("§7", player_name));
+	title.setSub(player, concat("§6", player_name));
 	title.send(player, concat("§cNice to see you"));
 }

Файловите разлики са ограничени, защото са твърде много
+ 681 - 82
system/commands.txt


+ 0 - 0
system/explosions.txt


+ 3 - 0
system/perms.txt

@@ -29,11 +29,13 @@ map.add(permgroupsmap, "supporter", 9);
 
 //Default-Rechte
 perm.registerGroup(0, "isUser");
+perm.registerGroup(0, "clan");
 perm.registerGroup(0, "wusi");
 perm.registerGroup(0, "hasitem");
 perm.registerGroup(0, "lock");
 perm.registerGroup(0, "ping");
 perm.registerGroup(0, "bug");
+perm.registerGroup(0, "questanswer");
 perm.registerGroup(0, "report");
 perm.registerGroup(0, "uuid");
 perm.registerGroup(0, "mail");
@@ -249,6 +251,7 @@ perm.registerGroup(3, "tppos");
 perm.registerGroup(4, "isVIP");
 perm.registerGroup(4, "fly");
 perm.registerGroup(4, "hat");
+perm.registerGroup(4, "ride");
 perm.registerGroup(4, "playtime.year");
 perm.registerGroup(4, "playtime.month");
 perm.registerGroup(4, "playtime.other");

+ 0 - 1
test.txt

@@ -1 +0,0 @@
-gusi

+ 1 - 1
utils/u_games.txt

@@ -319,7 +319,7 @@ function minigame.statsHeader(player, gamename, colorcode) {
 }
 
 function minigame.statsLine(player, colorcode, string, value) {
-	msg(player, colorcode, " -§r ", string, ": ", colorcode, value);
+	msg(player, concat(colorcode, " -§r ", string, ": ", colorcode, value));
 }
 
 function getTeamWithLowestPeople(team_lists, numberofteams) {

+ 364 - 16
utils/u_general.txt

@@ -137,19 +137,21 @@ function player.teleport(player, location, backPos) {
 	if(backPos) {
 		player.setBackPos(player);
 	}
+	from_location = entity.getLocation(player);
+	from_world_name = world.getName(loc.getWorld(from_location));
 	inv.checkForChange(player, location);
 	entity.teleport(player, location);
 	world = loc.getWorld(location);
 	display.reset(player);
-	entity.setName(player, player.getName(player));
-	world_name = world.getName(world);
-	if(isGamesWorldName(world_name)) {
+	player.setHeadName(player);
+	to_world_name = world.getName(world);
+	if(isGamesWorldName(to_world_name)) {
 		joinGamesWorld(player);
 	}
-	if(isSurvWorldName(world_name)) {
+	if(isSurvWorldName(to_world_name)) {
 		joinSurvWorld(player);
 	}
-	if(world.isCreativeWorldName(world_name)) {
+	if(world.isCreativeName(to_world_name)) {
 		world.joinCreative(player);
 	}
 	//Tabliste
@@ -287,7 +289,7 @@ function world.joinCreative(player) {
 	
 }
 
-function world.isCreativeWorldName(world_name) {
+function world.isCreativeName(world_name) {
 	return world_name == "creative";
 }
 
@@ -317,6 +319,16 @@ function inv.checkForChange(player, location) {
 		return;
 	}
 	//Weltwechsel
+	script_id = quest.getFromPlayer(player);
+	if(script_id != null) {
+		script = script.getFromId(script_id);
+		if(script != null) {
+			setScriptVar("player", player);
+			script.callEvent("quest_term", script);
+			quest.term(script, player);
+			msg.prefix(player, "§dQuest", "Quest termed.");
+		}
+	}
 	entity.clearEffects(player);
 	inv.saveForPlayer(player, player, from_world);
 	inv.loadFromPlayer(player, player, to_world);
@@ -1108,7 +1120,7 @@ function playerdata.getSurvival(player_or_id) {
 		player_id = player_or_id;
 		loadData(player_id, getScriptVar("survival_data"), "survival_data");
 	}
-	//On player_login data is needed, but the data isn't loaded yet, so the config can be null at this point
+	//On player_login data is needed, but the data isn't loaded yet. So the config can be null at this point. That's why else {} already do loadData.
 	config = map.get(getScriptVar("survival_data"), player_id);
 	if(config == null) {
 		loadData(player_id, getScriptVar("survival_data"), "survival_data");
@@ -1124,7 +1136,7 @@ function playerdata.getGames(player_or_id) {
 		player_id = player_or_id;
 		loadData(player_id, getScriptVar("games_data"), "games_data");
 	}
-	//On player_login data is needed, but the data isn't loaded yet, so the config can be null at this point
+	//On player_login data is needed, but the data isn't loaded yet. So the config can be null at this point. That's why else {} already do loadData.
 	config = map.get(getScriptVar("games_data"), player_id);
 	if(config == null) {
 		loadData(player_id, getScriptVar("games_data"), "games_data");
@@ -1231,7 +1243,7 @@ function player.sendMessage(from_player, to_name, prefix, message, send_mail) {
 	if(p == null) {
 		mail.send(player.getName(from_player), to_name, message);
 	} elseif(send_mail) {
-		player.speakPrefix(p, prefix, message);
+		msg.prefix(p, prefix, message);
 	}
 }
 
@@ -1242,7 +1254,7 @@ function speakPrefix(player, prefix, message) { //Deprecated
 function player.speakPrefix(player, prefix, message) { //Deprecated
 	msg.prefix(player, prefix, message);
 }
-
+	
 function msg.prefix(player, prefix, message) {
 	msg(player, concat("§r[", prefix, "§r] ", message));
 }
@@ -1251,7 +1263,7 @@ function msg.radius(prefix, message, location, radius) {
 	list = players.near(location, radius);
 	iter = list.iterator(list);
 	while(hasNext(iter)) {
-		player.speakPrefix(next(iter), prefix, message);
+		msg.prefix(next(iter), prefix, message);
 	}
 }
 
@@ -1348,6 +1360,12 @@ function player.setBackPos(player) {
 	config.saveAsync(config);
 }
 
+function player.setBackPosLoc(player, location) {
+	config = playerdata.getSurvival(player);
+	config.set(config, "backpos", text.location(location));
+	config.saveAsync(config);
+}
+
 function player.clearBackPos(player) {
 	config = playerdata.getSurvival(player);
 	config.set(config, "backpos", "null");
@@ -1424,6 +1442,62 @@ function player.invIgnore(player_or_id, boolean) {
 	config.saveAsync(config);
 }
 
+function player.getClanId(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getDouble(config, "clan_id", -1);
+}
+
+function player.setClanId(player_or_id, clan_id) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "clan_id", clan_id);
+	config.saveAsync(config);
+}
+
+function player.getClanRole(player_or_id) {
+	config = playerdata.getSurvival(player_or_id);
+	return config.getString(config, "clan_role", "null");
+}
+
+function player.setClanRole(player_or_id, clan_id) {
+	config = playerdata.getSurvival(player_or_id);
+	config.set(config, "clan_role", clan_id);
+	config.saveAsync(config);
+}
+
+function player.isInClan(player_or_id) {
+	return player.getClanId(player_or_id) >= 0;
+}
+
+function player.isClanLeader(player_or_id) {
+	return player.getClanRole(player_or_id) == "leader";
+}
+
+function player.isClanMod(player_or_id) {
+	return player.getClanRole(player_or_id) == "mod";
+}
+
+function player.isClanMember(player_or_id) {
+	return player.getClanRole(player_or_id) == "member";
+}
+
+function player.isSameClan(player_or_id_1, player_or_id_2) {
+	id_1 = player.getClanId(player_or_id_1);
+	id_2 = player.getClanId(player_or_id_2);
+	if(id_1 < 0 || id_2 < 0) {
+		return false;
+	}
+	return id_1 == id_2;
+}
+
+function player.setHeadName(player) {
+	player_name = player.getName(player);
+	clan_string = "";
+	if(player.isInClan(player)) {
+		clan_id = player.getClanId(player);
+		clan_string = text.concat(" [§6", clan.getTag(clan_id), "§r]");
+	}
+	entity.setName(player, text.concat(player_name, clan_string));
+}
 
 function player.setAdventureAmounts(player_or_id, amount) {
 	config = playerdata.getSurvival(player_or_id);
@@ -1702,6 +1776,16 @@ function plot.getIdFromLocation(location) {
 	return plot_id;
 }
 
+function plot.getIdListFromLocation(location) {
+	list = plot.get(location);
+	for(i = 0; i < list.getSize(list); i++) {
+		plot = list.getIndex(list, i);
+		list.setIndex(list, i, plot.getId(plot));
+		
+	}
+	return list;
+}
+
 function plot.addPlayer(plot, player_name) {
 	list = plot.getOwners(plot);
 	uuid = player.getUuid(player_name);
@@ -2025,6 +2109,10 @@ function skill.showShop(player, skill_name1, skill_name2, skill_name3, skill_nam
 //Loc-Utils
 //--------------------------------------------------
 
+function loc.hasPlotId(location, plot_id) {
+	return list.contains(plot.getIdListFromLocation(location), plot_id);
+}
+
 function loc.isAir(location) {
 	type = block.getType(location);
 	return type == "minecraft:air" || type == "minecraft:cave_air";
@@ -2066,7 +2154,7 @@ function joinGamesWorld(player) {
 }
 
 function minigame.displayElo(player, elo) {
-	display.add(player, 101, concat("§b§tElo: §r", text.number(elo)));
+	display.add(player, 101, concat("§bElo: §r", text.number(elo)));
 }
 
 function minigame.setElo(player_or_id, elo) {
@@ -2090,7 +2178,7 @@ function minigame.addElo(player_or_id, elo) {
 	config.saveAsync(config);
 	if(isPlayer(player_or_id)) {
 		minigame.displayElo(player_or_id, new_elo);
-		player.speakPrefix(player_or_id, "§b§tElo", concat("§r+§e", text.number(elo)));
+		msg.prefix(player_or_id, "§bElo", concat("§r+§e", text.number(elo)));
 	}
 }
 
@@ -2281,7 +2369,7 @@ function mail.send(from_name, to_name, message) {
 	//Wenn Spieler online, dann Pushmeldung veranlassen
 	p = read.player(to_name);
 	if(p != null) {
-		player.speak(p, "§bMail", concat("§rYou´ve got a new mail from §b", from_name, "."));
+		msg.prefix(p, "§bMail", concat("§rYou´ve got a new mail from §b", from_name, "."));
 	}
 }
 
@@ -2305,9 +2393,9 @@ function mail.checkForNew(player) {
 	databank.close(stmt);
 	if(newmails > 0) {
 		if(newmails > 1) {
-			player.speakPrefix(player, "§bMail", concat("§rYou´ve got §b", text.number(newmails), "§r new mails."));
+			msg.prefix(player, "§bMail", concat("§rYou´ve got §b", text.number(newmails), "§r new mails."));
 		} else {
-			player.speakPrefix(player, "§bMail", "§rYou´ve got §b1 §rnew mail.");
+			msg.prefix(player, "§bMail", "§rYou´ve got §b1 §rnew mail.");
 		}
 	}
 }
@@ -2370,4 +2458,264 @@ function friend.getList(player_id) {
 	databank.close(result);
 	databank.close(stmt);
 	return list;
+}
+
+//--------------------------------------------------
+//Clan-Utils
+//--------------------------------------------------
+
+function clan.getIdList() {
+	file = file.new("scripts/configs/clan_data");
+	if(file.exists(file) && file.isDirectory(file)) {
+		list = file.getList(file);
+	}
+	id_list = list.new();
+	iter = list.iterator(list);
+	while(hasNext(iter)) {
+		element = next(iter);
+		file_name = file.getName(element);
+		file_name = text.subString(file_name, 0, 1);
+		list.add(id_list, read.number(file_name));
+	}
+	return id_list;
+}
+
+function clan.loadData() {
+	list = clan.getIdList();
+	iter = list.iterator(list);
+	map = map.new();
+	while(hasNext(iter)) {
+		clan_id = next(iter);
+		config = config.new("scripts/configs/clan_data", clan_id);
+		if(config.exists(config)) {
+			config.load(config);
+		}
+		map.add(map, clan_id, config);
+	}
+	setScriptVar("clan_data", map);
+}
+
+function clan.getData(clan_id) {
+	if(clan_id == null) {
+		snuvi.debug("script termed. clan_id was null");
+		term();
+	}
+	map = getScriptVar("clan_data");
+	config = map.get(map, clan_id);
+	if(config == null) {
+		config = config.new("scripts/configs/clan_data", clan_id);
+		if(config.exists(config)) {
+			config.load(config);
+		}
+		map.add(map, clan_id, config);
+	}
+	return config;
+}
+
+function clan.setName(clan_id, name) {
+	config = clan.getData(clan_id);
+	config.set(config, "name", name);
+	config.saveAsync(config);
+}
+
+function clan.getName(clan_id) {
+	config = clan.getData(clan_id);
+	return config.getString(config, "name", "null");
+}
+
+function clan.setTag(clan_id, tag) {
+	config = clan.getData(clan_id);
+	config.set(config, "tag", tag);
+	config.saveAsync(config);
+}
+
+function clan.getTag(clan_id) {
+	config = clan.getData(clan_id);
+	return config.getString(config, "tag", "null");
+}
+
+function clan.setMoney(clan_id, money) {
+	config = clan.getData(clan_id);
+	config.set(config, "money", money);
+	config.saveAsync(config);
+}
+
+function clan.getMoney(clan_id) {
+	config = clan.getData(clan_id);
+	return config.getDouble(config, "money", 0);
+}
+
+function clan.addMoney(clan_id, money) {
+	config = clan.getData(clan_id);
+	new_money = config.getDouble(config, "money", 0) + money;
+	config.set(config, "money", new_money);
+	config.saveAsync(config);
+}
+
+function clan.subMoney(clan_id, money) {
+	config = clan.getData(clan_id);
+	new_money = config.getDouble(config, "money", 0) - money;
+	config.set(config, "money", new_money);
+	config.saveAsync(config);
+}
+
+
+function clan.getIdFromName(name) {
+	list = clan.getIdList();
+	iter = list.iterator(list);
+	while(hasNext(iter)) {
+		clan_id = next(iter);
+		if(clan.getName(clan_id) == name) {
+			return clan_id;
+		}
+	}
+	return null;
+}
+
+function clan.getIdFromTag(clan_tag) {
+	list = clan.getIdList();
+	iter = list.iterator(list);
+	while(hasNext(iter)) {
+		clan_id = next(iter);
+		if(clan.getTag(clan_id) == clan_tag) {
+			return clan_id;
+		}
+	}
+	return null;
+}
+
+function clan.isExistingTag(clan_tag) {
+	return !(clan.getIdFromTag(clan_tag) == null);
+}
+
+function clan.isExistingName(name) {
+	return !(clan.getIdFromName(name) == null);
+}
+
+function clan.getNextFreeId() {
+	server_config = getScriptVar("server_config");
+	id = config.getDouble(server_config, "clan.id.next", 0) + 1;
+	config.set(server_config, "clan.id.next", id);
+	config.saveAsync(server_config);
+	return id;
+}
+
+function clan.create(name, tag) {
+	clan_id = clan.getNextFreeId();
+	config = clan.getData(clan_id);
+	config.set(config, "name", name);
+	config.set(config, "tag", tag);
+	config.set(config, "members", 0);
+	config.save(config);
+	return clan_id;
+}
+
+function clan.getMembersAmount(clan_id) {
+	config = clan.getData(clan_id);
+	return config.getDouble(config, "members", 0);
+}
+
+function clan.setMembersAmount(clan_id, amount) {
+	config = clan.getData(clan_id);
+	config.set(config, "members", amount);
+	config.saveAsync(config);
+}
+
+function clan.addMember(clan_id, player_or_id, role) {
+	//Player
+	player.setClanId(player_or_id, clan_id);
+	player.setClanRole(player_or_id, role);
+	//Clan
+	new_amount = clan.getMembersAmount(clan_id) + 1;
+	if(isPlayer(player_or_id)) {
+		player_uuid = player.getUuid(player_or_id);
+	} else {
+		player_uuid = player.getUuidFromId(player_or_id);
+	}
+	config = clan.getData(clan_id);
+	config.set(config, text.concat("player_", new_amount), text(player_uuid));
+	config.set(config, "members", new_amount);
+	config.saveAsync(config);
+}
+
+function clan.removeMember(clan_id, player_or_id) {
+	//Player
+	player.setClanId(player_or_id, -1);
+	player.setClanRole(player_or_id, "null");
+	if(isPlayer(player_or_id)) {
+		player_uuid = player.getUuid(player_or_id);
+	} else {
+		player_uuid = player.getUuidFromId(player_or_id);
+	}
+	//Clan
+	config = clan.getData(clan_id);
+	amount = config.getDouble(config, "members", 0);
+	for(i = 1; i <= amount; i++) {
+		if(config.getString(config, text.concat("player_", i), "null") == text(player_uuid)) {
+			break;
+		}
+	}
+	if(i != amount) {
+		config.set(config, text.concat("player_", i), config.getString(config, text.concat("player_", amount), "null"));
+	}
+	config.set(config, text.concat("player_", amount), "null");
+	config.set(config, "members", amount - 1);
+	config.saveAsync(config);
+}
+
+function clan.delete(clan_id) {
+	//Members
+	list = clan.getMembersList(clan_id);
+	iter = list.iterator(list);
+	while(hasNext(iter)) {
+		player_uuid = next(iter);
+		player_id = player.getId(player_uuid);
+		player.setClanId(player_id, -1);
+		player.setClanRole(player_id, "null");
+	}
+	//Clan
+	config.delete(clan.getData(clan_id));
+	map.remove(getScriptVar("clan_data"), clan_id);
+}
+
+function clan.getMembersList(clan_id) {
+	list = list.new();
+	config = clan.getData(clan_id);
+	amount = config.getDouble(config, "members", 0);
+	for(i = 1; i <= amount; i++) {
+		player_uuid = read.uuid(config.getString(config, text.concat("player_", i), "null"));
+		list.add(list, player_uuid);
+	}
+	return list;
+}
+
+function clan.updateHeadNames(clan_id) {
+	list = clan.getMembersList(clan_id);
+	iter = list.iterator(list);
+	while(hasNext(iter)) {
+		p = player.get(next(iter));
+		if(p != null) {
+			player.setHeadName(p);
+		}
+	}
+}
+
+function clan.msg(clan_id, message) {
+	list = clan.getMembersList(clan_id);
+	iter = list.iterator(list);
+	while(hasNext(iter)) {
+		p = player.get(next(iter));
+		if(p != null) {
+			msg.prefix(p, "§2Clan", message);
+		}
+	}
+}
+
+function clan.mail(clan_id, from_name, message) {
+	list = clan.getMembersList(clan_id);
+	iter = list.iterator(list);
+	while(hasNext(iter)) {
+		to_name = player.getName(next(iter));
+		mail.send(from_name, to_name, message);
+	}
 }

Някои файлове не бяха показани, защото твърде много файлове са промени