Ejemplo n.º 1
0
 def get_room(self, msg, client):
     online = self.server.online.copy()
     num = 1
     while True:
         i = 0
         for tmp in online:
             if tmp.room == f"{msg[2]['lid']}_{msg[2]['gid']}_{num}":
                 i += 1
         if i >= const.ROOM_LIMIT:
             num += 1
         else:
             break
     room = f"{msg[2]['lid']}_{msg[2]['gid']}_{num}"
     if client.room:
         prefix = common.get_prefix(client.room)
         for tmp in self.server.online.copy():
             if tmp.room != client.room or tmp.uid == client.uid:
                 continue
             tmp.send([prefix + ".r.lv", {"uid": client.uid}])
             tmp.send([client.room, client.uid], type_=17)
     client.room = room
     client.position = (-1.0, -1.0)
     client.action_tag = ""
     client.state = 0
     client.dimension = 4
     plr = gen_plr(client, self.server)
     for tmp in self.server.online.copy():
         if tmp.room != client.room:
             continue
         tmp.send(["o.r.jn", {"plr": plr}])
         tmp.send([client.room, client.uid], type_=16)
     client.send(["o.gr", {"rid": client.room}])
Ejemplo n.º 2
0
 def owner_info(self, msg, client):
     if not msg[2]["uid"]:
         return
     plr = gen_plr(msg[2]["uid"], self.server)
     rooms = []
     tmp = self.server.redis.smembers(f"rooms:{msg[2]['uid']}")
     for item in tmp:
         room = self.server.redis.lrange(f"rooms:{msg[2]['uid']}:{item}", 0,
                                         -1)
         room_items = self.server.get_room_items(msg[2]["uid"], item)
         rooms.append({
             "f": room_items,
             "w": 13,
             "l": 13,
             "id": item,
             "lev": int(room[1]),
             "nm": room[0]
         })
     client.send([
         "h.oinfo", {
             "ath": False,
             "plr": plr,
             "hs": {
                 "r": rooms,
                 "lt": 0
             }
         }
     ])
Ejemplo n.º 3
0
 def room(self, msg, client):
     subcommand = msg[1].split(".")[2]
     if subcommand == "info":
         rmmb = []
         room = msg[0]
         for tmp in self.server.online.copy():
             if tmp.room != room:
                 continue
             rmmb.append(gen_plr(tmp, self.server))
         room_addr = f"rooms:{msg[2]['uid']}:{msg[2]['rid']}"
         tmp = self.server.redis.lrange(room_addr, 0, -1)
         room_items = self.server.get_room_items(msg[2]["uid"],
                                                 msg[2]["rid"])
         room = {"f": room_items, "w": 13, "id": msg[2]["rid"],
                 "l": 13, "lev": int(tmp[1]), "nm": tmp[0]}
         client.send(["h.r.info", {"rmmb": rmmb, "rm": room,
                                   "evn": None}])
     elif subcommand == "rfr":
         room = msg[0].split("_")[-1]
         room_data = self.server.redis.lrange(f"rooms:{client.uid}:{room}",
                                              0, -1)
         room_items = self.server.get_room_items(client.uid, room)
         for tmp in self.server.online.copy():
             if tmp.room != msg[0]:
                 continue
             tmp.send(["h.r.rfr", {"rm": {"f": room_items, "w": 13, "l": 13,
                                          "lev": int(room_data[1]),
                                          "nm": room_data[0]}}])
     else:
         super().room(msg, client)
Ejemplo n.º 4
0
 def get_room(self, msg, client):
     online = self.server.online.copy()
     num = 1
     while True:
         i = 0
         for tmp in online:
             if tmp.room == f"{msg[2]['lid']}_{msg[2]['gid']}_{num}":
                 i += 1
         if i >= const.ROOM_LIMIT:
             num += 1
         else:
             break
     room = f"{msg[2]['lid']}_{msg[2]['gid']}_{num}"
     if client.room:
         logging.error(f"Already in room, uid - {client.uid}")
         return
     client.room = room
     client.position = (-1.0, -1.0)
     client.action_tag = ""
     client.state = 0
     client.dimension = 4
     plr = gen_plr(client, self.server)
     for tmp in self.server.online.copy():
         if tmp.room != client.room:
             continue
         tmp.send(["o.r.jn", {"plr": plr}])
         tmp.send([client.room, client.uid], type_=16)
     client.send(["o.gr", {"rid": client.room}])
Ejemplo n.º 5
0
 def get_my_info(self, msg, client):
     apprnc = self.server.get_appearance(client.uid)
     if not apprnc:
         client.send(["h.minfo", {"has.avtr": False}])
         return
     user_data = self.server.get_user_data(client.uid)
     inv = self.server.inv[client.uid].get()
     cs = self.server.get_clothes(client.uid, type_=1)
     rooms = []
     for item in self.server.redis.smembers(f"rooms:{client.uid}"):
         room = self.server.redis.lrange(f"rooms:{client.uid}:{item}",
                                         0, -1)
         rooms.append({"f": self.server.get_room_items(client.uid, item),
                       "w": 13, "id": item, "lev": int(room[1]), "l": 13,
                       "nm": room[0]})
     tr = {}
     for item in const.tr:
         tr[item] = {"trrt": 0, "trcd": 0, "trid": item}
     plr = gen_plr(client, self.server)
     plr.update({"cs": cs, "hs": {"r": rooms, "lt": 0}, "inv": inv,
                 "onl": True, "achc": {"ac": {}, "tr": tr}})
     plr["res"] = {"slvr": user_data["slvr"], "enrg": user_data["enrg"],
                   "emd": user_data["emd"], "gld": user_data["gld"]}
     client.send(["h.minfo", {"plr": plr, "tm": 1}])
     self._perform_login(client)
Ejemplo n.º 6
0
 def save_layout(self, msg, client):
     room = msg[0].split("_")
     uid = client.uid
     if room[1] != client.uid:
         return
     for item in msg[2]["f"]:
         if item["t"] == 0:
             self.type_add(item, room, uid)
         if item["t"] == 1:
             self.type_update(item, room, uid)
         elif item["t"] == 2:
             self.type_remove(item, room, uid)
         elif item["t"] == 3:
             self.type_replace_door(item, room, uid)
     inv = self.server.inv[uid].get()
     room_inf = self.server.redis.lrange(f"rooms:{uid}:{room[2]}", 0, -1)
     room_items = self.server.get_room_items(uid, room[2])
     self.update_hrt(uid)
     ci = gen_plr(client, self.server)["ci"]
     client.send([
         "frn.save", {
             "inv": inv,
             "ci": ci,
             "hs": {
                 "f": room_items,
                 "w": 13,
                 "id": room[2],
                 "l": 13,
                 "lev": int(room_inf[1]),
                 "nm": room[0]
             }
         }
     ])
Ejemplo n.º 7
0
 def sale_item(self, msg, client):
     items = self.server.game_items["game"]
     tpid = msg[2]["tpid"]
     cnt = msg[2]["cnt"]
     if tpid not in items or "saleSilver" not in items[tpid]:
         return
     if not self.server.inv[client.uid].take_item(tpid, cnt):
         return
     price = items[tpid]["saleSilver"]
     user_data = self.server.get_user_data(client.uid)
     redis = self.server.redis
     redis.set(f"uid:{client.uid}:slvr", user_data["slvr"] + price * cnt)
     ci = gen_plr(client.uid, self.server)["ci"]
     client.send(["ntf.ci", {"ci": ci}])
     inv = self.server.inv[client.uid].get()
     client.send(["ntf.inv", {"inv": inv}])
     user_data = self.server.get_user_data(client.uid)
     client.send([
         "ntf.res", {
             "res": {
                 "gld": user_data["gld"],
                 "slvr": user_data["slvr"],
                 "enrg": user_data["enrg"],
                 "emd": user_data["emd"]
             }
         }
     ])
Ejemplo n.º 8
0
 def players_by_id(self, msg, client):
     players = []
     for uid in msg[2]["uids"]:
         plr = gen_plr(uid, self.server)
         if not plr:
             continue
         players.append(plr)
     client.send(["pl.get", {"plrs": players, "clid": msg[2]["clid"]}])
Ejemplo n.º 9
0
 def room(self, msg, client):
     subcommand = msg[1].split(".")[2]
     if subcommand == "info":
         rmmb = []
         room = msg[0]
         for tmp in self.server.online.copy():
             if tmp.room != room:
                 continue
             rmmb.append(gen_plr(tmp, self.server))
         client.send(["o.r.info", {"rmmb": rmmb, "evn": None}])
     else:
         super().room(msg, client)
Ejemplo n.º 10
0
 def save_layout(self, msg, client):
     room = msg[0].split("_")
     uid = client.uid
     if room[1] != client.uid:
         return
     for item in msg[2]["f"]:
         items = self.server.redis.smembers(f"rooms:{uid}:{room[2]}:items")
         if item["t"] == 1:
             name = f"{item['tpid']}_{item['oid']}"
             if name in items:
                 self.del_item(name, room[2], uid)
                 self.add_item(item, room[2], uid)
             else:
                 if not self.server.inv[uid].take_item(item["tpid"]):
                     continue
                 self.add_item(item, room[2], uid)
         elif item["t"] == 2:
             name = f"{item['tpid']}_{item['oid']}"
             if name not in items:
                 continue
             self.del_item(name, room[2], uid)
             self.server.inv[uid].add_item(item["tpid"], "frn")
     inv = self.server.inv[uid].get()
     room_inf = self.server.redis.lrange(f"rooms:{uid}:{room[2]}", 0, -1)
     room_items = self.server.get_room_items(uid, room[2])
     self.server.update_hrt(uid)
     ci = gen_plr(client, self.server)["ci"]
     client.send([
         "frn.save", {
             "inv": inv,
             "ci": ci,
             "hs": {
                 "f": room_items,
                 "w": 13,
                 "id": room[2],
                 "l": 13,
                 "lev": int(room_inf[1]),
                 "nm": room[0]
             }
         }
     ])
Ejemplo n.º 11
0
 def get_room(self, msg, client):
     room = f"{msg[2]['lid']}_{msg[2]['gid']}_{msg[2]['rid']}"
     if client.room:
         prefix = common.get_prefix(client.room)
         for tmp in self.server.online.copy():
             if tmp.room != client.room or tmp.uid == client.uid:
                 continue
             tmp.send([f"{prefix}.r.lv", {"uid": client.uid}])
             tmp.send([client.room, client.uid], type_=17)
     client.room = room
     client.position = (-1.0, -1.0)
     client.action_tag = ""
     client.state = 0
     client.dimension = 4
     plr = gen_plr(client, self.server)
     for tmp in self.server.online.copy():
         if tmp.room != client.room:
             continue
         prefix = common.get_prefix(client.room)
         tmp.send([f"{prefix}.r.jn", {"plr": plr}])
         tmp.send([client.room, client.uid], type_=16)
     client.send(["h.gr", {"rid": client.room}])
Ejemplo n.º 12
0
 def get_room(self, msg, client):
     if "rid" not in msg[2]:
         num = 1
         room = f"{msg[2]['lid']}_{msg[2]['gid']}_{num}"
         while True:
             if self._get_room_len(room) >= const.ROOM_LIMIT:
                 num += 1
             else:
                 break
     else:
         room = f"{msg[2]['lid']}_{msg[2]['gid']}_{msg[2]['rid']}"
         if msg[2]["gid"][-1] == "e":
             limit = const.EVENT_ROOM_LIMIT
         else:
             limit = const.ROOM_LIMIT
         if self._get_room_len(room) >= limit:
             return
     if client.room:
         prefix = common.get_prefix(client.room)
         for tmp in self.server.online.copy():
             if tmp.room != client.room or tmp.uid == client.uid:
                 continue
             tmp.send([prefix + ".r.lv", {"uid": client.uid}])
             tmp.send([client.room, client.uid], type_=17)
     client.room = room
     client.position = (-1.0, -1.0)
     client.action_tag = ""
     client.state = 0
     client.dimension = 4
     plr = gen_plr(client, self.server)
     for tmp in self.server.online.copy():
         if tmp.room != client.room:
             continue
         tmp.send(["o.r.jn", {"plr": plr}])
         tmp.send([client.room, client.uid], type_=16)
     client.send(["o.gr", {"rid": client.room}])
Ejemplo n.º 13
0
 def init_owner_info(self, msg, client):
     if not msg[2]["uid"]:
         return
     plr = gen_plr(msg[2]["uid"], self.server)
     client.send("h.ioinfo", {"tids": [], "ath": False, "plr": plr})