summaryrefslogblamecommitdiff
path: root/utils.py
blob: c4cfb37ef9f5197e3eed1ebc93d67b829f0a1d6d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                                                                                 















                                                                                
                                                                                 

                                                  
                                                     

                         




                               






                                                                              





                           







                                                   
                   
                           
 



                                                                 




























                                                                    
                          
                          
                 





                                                                                           
                     
                                                            
                          
                           

                             
                           
                                                                          

















                                                                                





                                                                             



                   
            



























                                                   
                                                                           






                                                                          
#################################################################################
#     This file is part of Spheres.
#     Copyright (C) 2019  Jesusalva

#     This library is free software; you can redistribute it and/or
#     modify it under the terms of the GNU Lesser General Public
#     License as published by the Free Software Foundation; either
#     version 2.1 of the License, or (at your option) any later version.

#     This library is distributed in the hope that it will be useful,
#     but WITHOUT ANY WARRANTY; without even the implied warranty of
#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#     Lesser General Public License for more details.

#     You should have received a copy of the GNU Lesser General Public
#     License along with this library; if not, write to the Free Software
#     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#################################################################################
# Util Module, forcefully inheirted by all modules

import time, hashlib, datetime, uuid, string, secrets
import json, zlib, base64

# Set server debug level
# 0 - Production/Stable, Silent
# 1 - Production/Unstable
# 2 - Development/Debug
debug=1

# Create a variable called "salt", which contains the token saltening sequence
s=open("salt.txt", "r")
for l in s:
    salt=l
s.close()

def ifte(ifs, then, elses):
    if (ifs):
        return then
    else:
        return elses

def md5(string):
    return hashlib.md5(string.encode()).hexdigest()

def md5salt(string):
    global salt
    fs=salt+string
    return hashlib.md5(fs.encode()).hexdigest()

def create_token():
    return uuid.uuid4().hex

def create_password(size=32):
    alphabet = string.ascii_uppercase + string.digits
    return ''.join(secrets.choice(alphabet) for i in range(size))

def now():
    return int(time.time())

# [0]- Day, [1]- Month, [2]- Year, [3]-Weekday, [4]-Hour, [5]-Minute
def return_date(dt):
    day=dt.timetuple()[2]
    month=dt.timetuple()[1]
    year=dt.timetuple()[0]

    hour=dt.timetuple()[3]
    minute=dt.timetuple()[4]

    weekday=dt.timetuple()[6]

    #second=5, days_since_01/01=7
    return day, month, year, weekday, hour, minute

# Date from a SQL DATETIME string
def date_from_sql(date):
    # We assume date was taken from SQL DATETIME field
    dt=datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
    return return_date(dt)

# Current date (NOT UTC)
def date_from_now():
    dt=datetime.datetime.now()
    return return_date(dt)


def stdout(mx, verbose=1):
    if (debug >= verbose):
        print(mx)
        dfile=open("debug.txt", 'a')
        dt=datetime.datetime.now().timetuple()
        date="[%04d-%02d-%02d %02d:%02d:%02d]" % (dt[0], dt[1], dt[2], dt[3], dt[4], dt[5])
        dfile.write("%s %s\n" % (date, mx))
        dfile.close()

def compress(string):
    stdout("Compress: Received JSON data: %s" % (string), 1)
    sjs=json.dumps(string)
    sjs=sjs.encode("ascii")
    sjs=zlib.compress(sjs)
    sjs=base64.b64encode(sjs)
    sjs=sjs.decode("ascii")
    stdout("Compress: Sending base64+zlib JSON ASCII data: %s" % (sjs), 2)
    return sjs

# Search for array[?][key]==search in an array of dicts
# Returns the dictionary, or returns "ERROR"
def dl_search(array, key, search):
    return next((item for item in array if item[key] == search), "ERROR")

# Global classes
# We need to override standard list method. Original by Triptych (stackoverflow)
class dlist(list):

    def __setitem__(self, index, value):
        size = len(self)
        if index >= size:
            self.extend(None for _ in range(size, index + 1))

        list.__setitem__(self, index, value)

# Search for a client by user ID
# Returns the dictionary, or returns "ERROR"
def cli_search(search):
    global clients
    return next((item for item in clients if item.userid == search), "ERROR")

# Global structures
Player={}
Battle={}
ApTimer={}
clients = []

# Databases
# Load quest database
f=open("quests.json", "r")
allquests=json.load(f)
f.close()

# Load units database
f=open("units.json", "r")
allunits=json.load(f)
f.close()

# Load skills database
f=open("skills.json", "r")
allskills=json.load(f)
f.close()

# Load summons database
f=open("summons.json", "r")
allsummons=json.load(f)
f.close()

# Load taverns database
# Chance total must be 100% (or 10000). Rolled ONCE
f=open("bar.json", "r")
allbars=json.load(f)
f.close()

###########################################################################
# Comments
"""
abc=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
     'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
     'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
"""