diff options
Diffstat (limited to 'game/02_init.rpy')
-rw-r--r-- | game/02_init.rpy | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/game/02_init.rpy b/game/02_init.rpy new file mode 100644 index 0000000..6186e32 --- /dev/null +++ b/game/02_init.rpy @@ -0,0 +1,247 @@ +######################################################################################## +# 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 +############################################################################ +init -1 python: + # Android might have special SSL problems + if renpy.android: + try: + import ssl + except ImportError: + SSL_IS_BROKEN=True + stdout("Android SSL misbehavior detected") + import _openssl as ssl + else: + import ssl + print("Using system-wide SSL implementation...") + + # wsock already imported + + 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 send_packet_now(packet, args="", legacy=False): + global tr_load, tr_val, tr_busy + global ws + + stdout("Sending: %s" % packet) + try: + ws.send(get_token() + ";" + packet + ";" + args) + except: + stdout("Failed to send message!!") + # FIXME set tr_val/tr_load/tr_busy to good values + return False + # TODO: Wait for onmsg + # TODO: ping packets + return True + + def send_packet(packet, args=""): + global tr_load, tr_val, tr_busy + # TODO: if tr_busy already true, wait until it is made false + while tr_busy: + sdelay() + + # Book processing space for ourselves + tr_busy=True + tr_load=False + tr_val=None + + # This is a secret variable which disables threading and queue + # This may cause hangs and other issues. + if persistent.nothreading: + send_packet_now(packet, args) + tr_busy=False + val=tr_val + return val + + # FIXME + timeout=0.0 + renpy.show("spinner", at_list=[truecenter]) + r = send_packet_now(packet, args) + if not r: + # Something went wrong + return ERR_INVALID + + while not tr_load: + sdelay() # FIXME: This can cause errors in mobile? + timeout+=0.02 + + if timeout >= TIMEOUT_INTERVAL: + # FIXME: What if a screen is already being displayed? BUG + try: + renpy.call_screen("msgbox", "Error Code: %d\n\nApplication timeout, click to try again" % (ERR_TIMEOUT)) + timeout=0.0 + except: + if not "ping" in packet.lower(): + stdout("WARNING, ILLEGAL PACKET ON SCREEN TIME: %s" % packet) + pass + + renpy.hide("spinner") + val=tr_val + tr_busy=False + del tr_val + + print "value obtained" + if (val is None): + return ERR_INVALID + return val + + 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 + + |