Last active
August 29, 2015 14:07
-
-
Save utoxin/d5a43e89855670ed6a60 to your computer and use it in GitHub Desktop.
Script for running UHC in 1.8 with killer rabbits added by donors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import threading | |
from time import sleep | |
from subprocess import call | |
from math import * | |
# Process Parameters | |
screen_name = "UHC" | |
# World Border Parameters | |
initial_diameter = 2001 | |
minimal_diameter = 201 | |
decrease_step = 200 | |
decrease_time = 300 | |
decrease_interval = 1200 | |
current_diameter = initial_diameter | |
# Spread Players Parameters | |
spread_x = 0 | |
spread_z = 0 | |
min_spread = 400 | |
spread_radius = (initial_diameter-1)/2 | |
respect_teams = 'false' | |
# Rabbit Summoning Location | |
rabbit_x = 0 | |
rabbit_y = 64 | |
rabbit_z = 0 | |
# Game Start Area | |
start_x = -1750 | |
start_z = -1700 | |
start_diameter = 200 | |
# Pregen Settings | |
max_spacing = 200 | |
pregen_pause = 300 | |
pregen_player = "Utoxin" | |
def sendToScreen(command): | |
call(['/usr/bin/screen', '-S', screen_name, '-p', '0', '-X', 'stuff', command+'\n']) | |
def initServer(): | |
sendToScreen("scoreboard objectives remove Deaths") | |
sendToScreen("scoreboard objectives remove Kills") | |
sendToScreen("scoreboard objectives remove Health") | |
sendToScreen("scoreboard objectives add Deaths deathCount") | |
sendToScreen("scoreboard objectives add Kills playerKillCount") | |
sendToScreen("scoreboard objectives setdisplay sidebar Kills") | |
sendToScreen("scoreboard objectives add Health health") | |
sendToScreen("scoreboard objectives setdisplay list Health") | |
sendToScreen("time set day") | |
sendToScreen("gamerule doDaylightCycle false") | |
sendToScreen("difficulty peaceful") | |
sendToScreen(" ".join(["setworldspawn", str(start_x), "64", str(start_z)])) | |
sendToScreen(" ".join(["worldborder center", str(start_x), str(start_z)])) | |
sendToScreen(" ".join(["worldborder set", str(start_diameter)])) | |
def startGame(): | |
sendToScreen("say Preparing game... Keep hands and feet inside the vehicle at all times.") | |
sleep(1) | |
sendToScreen("worldborder set " + str(initial_diameter * 10)) | |
sleep(1) | |
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), "0 1", respect_teams, '@a'])) | |
sleep(1) | |
sendToScreen(" ".join(["worldborder center", str(spread_x), str(spread_z)])) | |
sendToScreen(" ".join(["worldborder set", str(initial_diameter)])) | |
sendToScreen(" ".join(["setworldspawn", str(spread_x), "64", str(spread_z)])) | |
sleep(1) | |
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), str(min_spread), str(spread_radius), respect_teams, '@a'])) | |
sendToScreen("difficulty normal") | |
sendToScreen("gamerule naturalRegeneration false") | |
sendToScreen("gamerule doDaylightCycle true") | |
sendToScreen("clear @a") | |
sleep(1) | |
sendToScreen("say On your marks...") | |
sleep(5) | |
sendToScreen("say Get set...") | |
sleep(5) | |
sendToScreen("say GO!") | |
def pregenWorld(): | |
sendToScreen("worldborder set " + str(initial_diameter * 10)) | |
sendToScreen(" ".join(["gamemode creative", pregen_player])) | |
stepSize = ceil(initial_diameter / ceil(initial_diameter / max_spacing)) | |
stepCount = floor(ceil(initial_diameter / max_spacing) / 2) + 1 | |
for x in range(-stepCount, stepCount): | |
for z in range(-stepCount, stepCount): | |
sendToScreen(" ".join(["tp", pregen_player, str(x*stepSize), "150", str(z*stepSize), "~ -90"])) | |
sleep(pregen_pause) | |
sendToScreen(" ".join(["spreadplayers", str(start_x), str(start_z), "1 10 false", pregen_player])) | |
sendToScreen(" ".join(["gamemode survival", pregen_player])) | |
sendToScreen(" ".join(["worldborder center", str(start_x), str(start_z)])) | |
sendToScreen(" ".join(["worldborder set", str(start_diameter)])) | |
def runWorldBorder(): | |
global current_diameter | |
while current_diameter > minimal_diameter: | |
sleep(decrease_interval) | |
current_diameter = current_diameter - decrease_step | |
sendToScreen("say WARNING: World Border decreasing by "+str(decrease_step)+" blocks over the next "+str(decrease_time/60)+" minutes.") | |
sendToScreen(" ".join(["worldborder set", str(current_diameter), str(decrease_time)])) | |
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), "10", str(current_diameter/2), 'false @e[type=Rabbit]'])) | |
sendToScreen("say World Border now at minimum size. Stop hiding!") | |
def addRabbits(): | |
quantity = int(int(input("How many dollars in this donation? ").strip()) / 5) | |
donator = input("Who donated? ").strip() | |
for x in range(0, quantity): | |
sendToScreen(" ".join(["summon Rabbit", str(rabbit_x), str(rabbit_y), str(rabbit_z), "{RabbitType:99}"])) | |
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), "10", str(current_diameter/2), 'false @e[type=Rabbit]'])) | |
sendToScreen(" ".join(["say", str(quantity), "killer rabbits added to arena. Thanks,", donator+"!"])) | |
command = "" | |
while command != "quit": | |
command = input("Execute which command? (init, pregen, startgame, donor, quit) ") | |
if command == "init": | |
initServer() | |
elif command == "pregen": | |
pregenWorld() | |
elif command == "startgame": | |
startGame() | |
# Start the border shrinking thread | |
borderThread = threading.Thread(target=runWorldBorder) | |
borderThread.daemon = True | |
borderThread.start() | |
elif command == "donor": | |
# Listen on stdin for donations, and add rabbits | |
addRabbits() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment