def run_script(pc, event_id, item_event_id=0): #general.log("run script id", event_id) with pc.lock and pc.user.lock: lock_move(pc) pc.event_id = event_id pc.item_event_id = item_event_id pc.map_send("05dc") #イベント開始の通知 pc.map_send("05e8", event_id) #EventID通知 Event送信に対する応答 if usermaps.map_id_in_range_flygarden(event_id): script_id = usermaps.MIN_FLYGARDEN_ID else: script_id = event_id with script_list_lock: event = script_list.get(script_id) try: if event: event["main"](pc) else: say(pc, "Script id %s not exist." % script_id, "") #raise ValueError("Script id not exist") except: general.log_error("run_script", event_id, traceback.format_exc()) with pc.lock and pc.user.lock: pc.event_id = 0 pc.item_event_id = 0 if pc.online: pc.map_send("05dd") #イベント終了の通知 unlock_move(pc)
def do_11fe(self, data_io): #MAPワープ完了通知 general.log("[ map ]", "map load") self.pc.set_visible(True) self.send("09e9", self.pc) self.send("0226", self.pc, 0) #スキル一覧 一次職 self.send("0226", self.pc, 1) #スキル一覧 エキスパ self.send("022d", self.pc) #HEARTスキル self.send("13ec", self.pc) #れしぴ self.send("196e", self.pc) #クエスト回数・時間 #self.send("0259", self.pc) #ステータス試算結果 #self.send("1b67", self.pc) #MAPログイン時に基本情報を全て受信した後に受信される self.sync_map() self.pc.unset_pet() if self.pc.equip.pet: time.sleep(0.5) #must have some delay before send 122f (pet info) self.pc.set_pet() if self.send_login_event: self.send_login_event = False script.run(self.pc, env.LOGIN_EVENT_ID) if usermaps.map_id_in_range_flygarden(self.pc.map_obj.map_id): #bad packet, i dont known the structure of 1be4 #self.send("1be4", self.pc) #飛空庭ログイン #1bf9 only for reply 1bf8, plz remove when 1be4 work self.send("13bc", 2) #飛空庭の天候 self.send("13bd", 4) #飛空庭の天体 self.send("1bee", self.pc) #飛空庭の天候 self.send("1bf0", self.pc) #飛空庭の天候
def run_script(pc, event_id, item_event_id=0): #general.log("run script id", event_id) with pc.lock and pc.user.lock: lock_move(pc) pc.event_id = event_id pc.item_event_id = item_event_id pc.map_send("05dc") #イベント開始の通知 pc.map_send("05e8", event_id) #EventID通知 Event送信に対する応答 if usermaps.map_id_in_range_flygarden(event_id): script_id = usermaps.MIN_FLYGARDEN_ID else: script_id = event_id with script_list_lock: event = script_list.get(script_id) try: if event: event["main"](pc) else: say(pc, "Script id %s not exist."%script_id, "") #raise ValueError("Script id not exist") except: general.log_error("run_script", event_id, traceback.format_exc()) with pc.lock and pc.user.lock: pc.event_id = 0 pc.item_event_id = 0 if pc.online: pc.map_send("05dd") #イベント終了の通知 unlock_move(pc)
def do_11fe(self, data_io): #MAPワープ完了通知 general.log("[ map ]", "map load") self.pc.set_visible(True) self.send("1239", self.pc) #キャラ速度通知・変更 self.send("196e", self.pc) #クエスト回数・時間 #self.send("0259", self.pc) #ステータス試算結果 #self.send("1b67", self.pc) #MAPログイン時に基本情報を全て受信した後に受信される self.send("0230", self.pc) #現在CAPA/PAYL self.send("0231", self.pc) #最大CAPA/PAYL self.send("0221", self.pc) #最大HP/MP/SP self.send("021c", self.pc) #現在のHP/MP/SP/EP self.send("157c", self.pc) #キャラの状態 self.send("0212", self.pc) #ステータス・補正・ボーナスポイント self.send("0217", self.pc) #詳細ステータス self.send("0226", self.pc, 0) #スキル一覧 一次職 self.send("0226", self.pc, 1) #スキル一覧 エキスパ self.send("022d", self.pc) #HEARTスキル self.send("0223", self.pc) #属性値 self.send("0244", self.pc) #ステータスウィンドウの職業 self.sync_map() self.pc.unset_pet() if self.pc.equip.pet: time.sleep(0.5) #must have some delay before send 122f (pet info) self.pc.set_pet() if self.send_login_event: self.send_login_event = False script.run(self.pc, env.LOGIN_EVENT_ID) if usermaps.map_id_in_range_flygarden(self.pc.map_obj.map_id): #bad packet, i dont known the structure of 1be4 #self.send("1be4", self.pc) #飛空庭ログイン #1bf9 only for reply 1bf8, plz remove when 1be4 work for i, attr in enumerate(general.FLYGARDEN_ATTR_LIST): #飛空庭に装飾品を装着・解除するの結果 self.send("1bf9", getattr(self.pc.map_obj.flygarden, attr), i) self.send("13bc", 2) #飛空庭の天候 self.send("13bd", 4) #飛空庭の天体 self.send("1bee", self.pc) #飛空庭の天候 self.send("1bf0", self.pc) #飛空庭の天候
def _set_map(self, map_id=None): if not map_id: map_id = self.map_id if usermaps.map_id_in_range_flygarden(map_id): map_obj = usermaps.get_usermap_from_map_id(map_id) else: map_obj = db.map_obj.get(map_id) if not map_obj: return False #general.log(self, "set_map", map_obj) with self.user.lock: self.unset_pet() if map_id: self.map_send_map_without_self("1211", self) #PC消去 self.map_id = map_id if self.map_obj: with self.map_obj.lock: self.map_obj.pc_list.remove(self) self.map_obj = map_obj with self.map_obj.lock: if self not in self.map_obj.pc_list: with self.map_obj.lock: self.map_obj.pc_list.append(self) return True