######################################################################################## # 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 ######################################################################################## # Definitions: decode, encode, memory ############################################################################ init -1 python: stdout("======================= %s %s %s" % (config.name, config.version, persistent.release_name)) print "[STDBY] Loading Basic functions......." # Search for array[?][key]==search in an array of dicts # Returns the dictionary, or returns ERR_INVALID def dl_search(array, key, search): try: r=(item for item in array if item[key] == search).next() except: r=ERR_INVALID if r is None: r=ERR_INVALID stdout("dlsearch: r is None") return r def check_fail(raw): global debug, FAILUREMSG if (debug): stdout(str(raw)) if (raw == FAILUREMSG): return True return False def json_decode(raw): global ERRNO if (check_fail(raw)): return ERR_LOGIN_DEFAULT # TODO Move this to check_fail and rewrite check_fail # ERR_OFF should be handled top-level no? With full_restart() if raw in ERRNO: return raw try: return int(raw) except: pass # Maybe base 64 try: rw=base64.b64decode(raw) raw=rw if (debug): print "base64 decoded" except: pass # Maybe zlib compressed try: rw=zlib.decompress(raw) raw=rw if (debug): print str(raw) except: pass # Decode JSON try: return json.loads(raw) except: return ERR_JSONDECODER def get_token(): try: t=Player['token'] except: t="0" #"f528764d624db129b32c21fbca0cb8d6" return t def login(): global Player stdout("Login requested for %s" % logindata()) raw=send_packet("login", logindata()) Player=json_decode(raw) if (Player == ERR_JSONDECODER): return ERR_JSONDECODER if (Player == ERR_LOGIN_DEFAULT): return ERR_LOGIN_DEFAULT try: Player["inv"]=dlist() except: pass return Player["code"] def GAME_LOADER(): global allunitsbase, allunits, allquests, allstory, allworld, alltaverns global allnews, tr_load tr_load=False # Wait until everything is up to date while not tr_uptodate: sdelay() # Load unit data allunitsbase=json.loads(requests.get("http://"+HOST+'/units.json').text) # f=open(get_path_if_exists("units.json"), "r") # allunitsbase=json.load(f) # f.close() # Reorder unit data allunits={} for j in allunitsbase: allunits[j["unit_id"]]=j # Load summons data f=open(get_path_if_exists("summons.json"), "r") allworld=json.load(f) f.close() # Load quest data f=open(get_path_if_exists("quests.json"), "r") allquests=json.load(f) f.close() # Load story data f=open(get_path_if_exists("story.json"), "r") allstory=json.load(f) f.close() # Load world data f=open(get_path_if_exists("world.json"), "r") allworld=json.load(f) f.close() # Load tavern data f=open(get_path_if_exists("bar.json"), "r") alltaverns=json.load(f) f.close() # Load server news try: allnews=json.loads(requests.get("http://"+HOST+'/news.json', timeout=5.0).text) except: allnews=[] pass stdout("[OK] Game data loaded to memory") tr_load=True tr_memcheck=True return tr_load