Lots of fixes, added player loading/ unloading, login.py custom event system, mysql_utils.columns property
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user