def combat_state(self): req = self.req() char = self.character(req.user()) combat_id = req.args try: combat = CombatInterface(self.app(), combat_id) self.call("web.response_json", combat.state_for_interface(char, req.param("marker"))) except CombatUnavailable as e: self.call("combat.unavailable-exception-char", combat_id, char, e) self.call("web.not_found")
def combat_interface(self): req = self.req() char = self.character(req.user()) combat_id = req.args try: combat = CombatInterface(self.app(), combat_id) combat.ping() # Show combat interface to user rules = self.conf("combats-%s.rules" % combat.rules, {}) vars = { "combat": combat_id, "load_extjs": { "full": True }, "generic": rules.get("generic", 1), } if vars["generic"]: vars["generic_myavatar"] = rules.get("generic_myavatar", 1) if vars["generic_myavatar"]: vars["generic_myavatar_width"] = rules.get("generic_myavatar_width", 300) vars["generic_enemyavatar"] = rules.get("generic_enemyavatar", 1) if vars["generic_enemyavatar"]: vars["generic_enemyavatar_width"] = rules.get("generic_enemyavatar_width", 300) vars["generic_log"] = rules.get("generic_log", 1) if vars["generic_log"]: layout = vars["generic_log_layout"] = rules.get("generic_log_layout", 0) if layout == 0: vars["generic_combat_height"] = rules.get("generic_combat_height", 300) elif layout == 1: vars["generic_log_height"] = rules.get("generic_log_height", 300) vars["generic_log_resize"] = "true" if rules.get("generic_log_resize", True) else "false" if rules.get("generic_gobutton", True): vars["generic_gobutton"] = True vars["generic_gobutton_text"] = jsencode(rules.get("generic_gobutton_text", "Go")) for pos in ["aboveavatar", "belowavatar"]: params = rules.get(pos) if params is None: params = [] self.call("combats.default-%s" % pos, params) params.sort(cmp=lambda x, y: cmp(x["order"], y["order"]) or cmp(x["id"], y["id"])) vars["generic_%s" % pos] = json.dumps(params) vars["generic_target_template"] = json.dumps(rules.get("generic_target_template", [[".", ["glob", "member"], "name"]])) vars["generic_member_list_template"] = json.dumps(rules.get("generic_member_list_template", [[".", ["glob", "member"], "name"]])) dim_avatar = rules.get("dim_avatar", [120, 220]) vars["combat_avatar_width"] = dim_avatar[0] vars["combat_avatar_height"] = dim_avatar[1] content = self.call("combat.parse", combat.rules, "combat-interface.html", vars) self.call("combat.response_main_frame", combat.rules, "combat.html", vars, content) except CombatUnavailable as e: self.call("combat.unavailable-exception-char", combat_id, char, e) self.call("web.redirect", "/location")
def combat_action(self): req = self.req() data = req.param("data") try: data = json.loads(data) except ValueError: self.call("web.response_json", {"error": self._("Invalid JSON data submitted")}) char = self.character(req.user()) combat_id = req.args try: combat = CombatInterface(self.app(), combat_id) self.call("web.response_json", combat.action(char, data)) except CombatUnavailable as e: self.call("combat.unavailable-exception-char", combat_id, char, e) self.call("web.not_found")
def character_state(self, combat_id, character_uuid): try: combat = CombatInterface(self.app(), combat_id) for member in combat.members: if member.get("character") == character_uuid: member["combat"] = combat_id return member except CombatUnavailable as e: return None