summaryrefslogtreecommitdiff
path: root/wrapper_player.py
diff options
context:
space:
mode:
Diffstat (limited to 'wrapper_player.py')
-rw-r--r--wrapper_player.py113
1 files changed, 90 insertions, 23 deletions
diff --git a/wrapper_player.py b/wrapper_player.py
index 4ca302a..5fb5c79 100644
--- a/wrapper_player.py
+++ b/wrapper_player.py
@@ -1,25 +1,75 @@
import time
import mysqlhack
from mysql_utils import *
+from util_events import fire_event
from thread_utils import *
from players_secret import *
from datetime import datetime
from com.ziclix.python.sql import zxJDBC
+from traceback import format_exc as print_traceback
-class py_player:
+class py_player(object):
def __init__(self,player):
self.player = player
self.logging_in = True
-
+ self.authenticated = False
self.login_time = time.time()
- self.nickname = self.name
- self.registered = False
- self.password = "None"
- self.banned = False
- self.banned_reason = "You have been banned!"
- self.played_time = time.time() - self.login_time
- self.last_login = datetime.now()
- self.first_seen = datetime.now()
+
+ self.props ={"uuid":self.uuid,
+ "name":self.name,
+ "nickname":self.name,
+ "registered":False,
+ "password":"None",
+ "banned":False,
+ "banned_reason":"You have been banned!",
+ "played_time":time.time() - self.login_time,
+ "last_login":datetime.now(),
+ "first_seen":datetime.now()}
+
+ def __setattr__(self, attribute, value):
+ if not attribute in dir(self):
+ if not 'props' in self.__dict__:
+ self.__dict__[attribute] = value
+ else:
+ self.props[attribute] = value
+ else:
+ object.__setattr__(self, attribute, value)
+
+ def __getattr__(self, attribute):
+ try:
+ return self.props[attribute]
+ except:
+ pass
+
+ def save(self):
+ properties = []
+ keys = []
+ columns = []
+
+ with mysql_connect() as sql:
+ columns = sql.columns
+
+ for key, value in self.props.items():
+ if key not in columns:
+ with mysql_connect() as sql:
+ if isinstance(value, int):
+ sql.execute("ALTER TABLE utils_players ADD %s INT" % key)
+ elif isinstance(value, str):
+ sql.execute("ALTER TABLE utils_players ADD %s TEXT" % key)
+ elif isinstance(value, bool):
+ sql.execute("ALTER TABLE utils_players ADD %s TINYINT(1)" % key)
+ if key == "uuid":
+ continue
+ keys.append(key+"=?")
+ properties.append(value)
+ print value
+ properties.append(self.props["uuid"])
+ keys = str(tuple(keys)).replace("\'","").replace("(","").replace(")","")
+
+
+ with mysql_connect() as sql:
+ sql.execute("UPDATE utils_players set %s WHERE uuid = ?" % keys, properties)
+
def kick(self, kick_message = "You have been kicked from the server!"):
self.player.KickPlayer(kick_message)
@@ -34,6 +84,7 @@ class py_player:
@property
def uuid(self):
return str(self.player.getUniqueId())
+
class Py_players:
@@ -60,10 +111,12 @@ py_players = Py_players()
@async(daemon=True)
def fetch_player(player):
- properties = (player.uuid, player.name, player.nickname, player.registered,
- player.password, player.banned,
- player.banned_reason, player.played_time,
- player.last_login, player.first_seen)
+
+ properties = []
+ keys = []
+ for key, value in player.props.iteritems():
+ keys.append(key)
+ properties.append(value)
with mysql_connect() as sql:
sql.execute("SELECT * FROM utils_players WHERE uuid = ?", (player.uuid,))
@@ -71,24 +124,34 @@ def fetch_player(player):
if len(result) is 0:
with mysql_connect() as sql:
- sql.execute("INSERT INTO utils_players \
- (uuid, name, nickname, registered, password, banned, \
- banned_reason, played_time, last_login, first_seen) \
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
-
- args=properties)
+ sql.execute("INSERT INTO utils_players %s \
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" % str(tuple(keys)).replace("\'","")
+ ,args=tuple(properties))
elif len(result) is 1:
+ keys = []
props = result[0]
- print props
+ with mysql_connect() as sql:
+ sql.execute("SHOW COLUMNS FROM utils_players")
+ result = sql.fetchall()
+ for row in result:
+ keys.append(row[0])
+
+ for key in keys:
+ player.props[key] = props[keys.index(key)]
+
for prop in properties:
- prop = props[properties.index(prop)]
+ print str(prop)
else:
player.kick("Something went wrong while loading your player data, please contact an admin")
return
+
player.logging_in = False
player.msg("You have succesfully logged into redstoner!")
+ fire_event("player_login", player)
+
+
blocked_events = ["block.BlockBreakEvent", "block.BlockPlaceEvent", "player.PlayerMoveEvent",
@@ -106,7 +169,11 @@ for event in blocked_events:
@hook.event("player.PlayerJoinEvent","lowest")
def on_join(event):
- player = py_player(event.getPlayer())
+ try:
+ player = py_player(event.getPlayer())
+ except:
+ print(print_traceback())
+ time.sleep(10)
py_players.append(player)
player.msg("Your input will be blocked for a short while")
fetch_player(player)