def do_09fd(self, data_io): #倉庫に預ける item_iid = io_unpack_int(data_io) item_count = io_unpack_short(data_io) general.log("[ map ] store item to warehouse", item_iid, item_count) with self.pc.lock: if len(self.pc.warehouse) >= env.MAX_WAREHOURSE_STOCK: #倉庫に預けた時の結果 倉庫のアイテム数が上限を超えてしまうためキャンセルされました self.send("09fe", -4) return if self.pc.warehouse_open is None: #倉庫に預けた時の結果 #倉庫を開けていません self.send("09fe", -1) return if item_iid not in self.pc.item: #倉庫に預けた時の結果 #指定されたアイテムは存在しません self.send("09fe", -2) return item = self.pc.item[item_iid] if item.count < item_count: #倉庫に預けた時の結果 #指定された数量が不正です self.send("09fe", -3) elif item.count == item_count: self.pc.item_pop(item_iid) else: item.count -= item_count self.send("09cf", item, item_iid) #アイテム個数変化 script.msg(self.pc, "%sを%s個失いました"%(item.name, item_count)) item_store = general.copy(item) item_store.count = item_count item_store.warehouse = self.pc.warehouse_open self.pc.warehouse_append(item_store) #倉庫に預けた時の結果 #成功 self.send("09fe", 0) self.pc.update_item_status()
def do_09fd(self, data_io): #倉庫に預ける item_iid = io_unpack_int(data_io) item_count = io_unpack_short(data_io) general.log("[ map ] store item to warehouse", item_iid, item_count) with self.pc.lock: if len(self.pc.warehouse) >= env.MAX_WAREHOURSE_STOCK: #倉庫に預けた時の結果 倉庫のアイテム数が上限を超えてしまうためキャンセルされました self.send("09fe", -4) return if self.pc.warehouse_open is None: #倉庫に預けた時の結果 #倉庫を開けていません self.send("09fe", -1) return if item_iid not in self.pc.item: #倉庫に預けた時の結果 #指定されたアイテムは存在しません self.send("09fe", -2) return item = self.pc.item[item_iid] if item.count < item_count: #倉庫に預けた時の結果 #指定された数量が不正です self.send("09fe", -3) elif item.count == item_count: self.pc.item_pop(item_iid) else: item.count -= item_count self.send("09cf", item, item_iid) #アイテム個数変化 script.msg(self.pc, "%sを%s個失いました" % (item.name, item_count)) item_store = general.copy(item) item_store.count = item_count item_store.warehouse = self.pc.warehouse_open self.pc.warehouse_append(item_store) #倉庫に預けた時の結果 #成功 self.send("09fe", 0) self.pc.update_item_status()
def takeitem_byiid(pc, item_iid, item_count): general.assert_value_range("item_iid", item_iid, general.RANGE_UNSIGNED_INT) general.assert_value_range("item_count", item_count, general.RANGE_UNSIGNED_SHORT) with pc.lock and pc.user.lock: item_exist = pc.item.get(item_iid) item_return = None error = 0 if not item_exist: error = -2 #存在しないアイテムです general.log_error("takeitem byiid: iid not exist", item_iid) elif pc.in_equip(item_iid): error = -11 #装備中のアイテムは捨てることが出来ません general.log_error("takeitem byiid: iid not exist", item_iid) elif item_exist.count < item_count: error = -22 #ロックアイテムは捨てることが出来ません general.log_error("takeitem byiid: item.count < item_count", item_count) elif item_exist.count > item_count: item_exist.count -= item_count item_return = general.copy(item_exist) item_return.count = item_count pc.map_send("09cf", item_exist, item_iid) #アイテム個数変化 msg(pc, "%sを%s個失いました" % (item_exist.name, item_count)) elif item_exist.count == item_count: item_return = pc.item_pop(item_iid) return item_return, error
def takeitem_byiid(pc, item_iid, item_count): general.assert_value_range("item_iid", item_iid, general.RANGE_UNSIGNED_INT) general.assert_value_range("item_count", item_count, general.RANGE_UNSIGNED_SHORT) with pc.lock and pc.user.lock: item_exist = pc.item.get(item_iid) item_return = None error = 0 if not item_exist: error = -2 #存在しないアイテムです general.log_error("takeitem byiid: iid not exist", item_iid) elif pc.in_equip(item_iid): error = -11 #装備中のアイテムは捨てることが出来ません general.log_error("takeitem byiid: iid not exist", item_iid) elif item_exist.count < item_count: error = -22 #ロックアイテムは捨てることが出来ません general.log_error("takeitem byiid: item.count < item_count", item_count) elif item_exist.count > item_count: item_exist.count -= item_count item_return = general.copy(item_exist) item_return.count = item_count pc.map_send("09cf", item_exist, item_iid) #アイテム個数変化 msg(pc, "%sを%s個失いました"%(item_exist.name, item_count)) elif item_exist.count == item_count: item_return = pc.item_pop(item_iid) return item_return, error
def unset_usermap(pc, logout=False): with pc.lock: if not pc.usermap_obj: return i = pc.usermap_obj.id general.log("[umaps] del usermap id", i) usermap_obj = pc.usermap_obj map_obj = general.get_map(usermap_obj.entrance_map_id) if not map_obj: general.log_error( "[umaps] unset_usermap error: entrance_map_id not exist", usermap_obj.entrance_map_id, ) return if logout: script.send_map_obj(map_obj, (pc,), "0bb9", pc) #飛空庭のひも・テント消去 else: script.send_map_obj(map_obj, (), "0bb9", pc) #飛空庭のひも・テント消去 for p in general.copy(usermap_obj.pc_list): if logout and p == pc: pc.set_map(usermap_obj.entrance_map_id) pc.set_coord(usermap_obj.entrance_x, usermap_obj.entrance_y) continue try: script.warp( p, usermap_obj.entrance_map_id, usermap_obj.entrance_x, usermap_obj.entrance_y, ) except: general.log_error(traceback.format_exc()) with usermap_list_lock: del usermap_list[i] pc.usermap_obj = None
def set_trade_return(self): #move item and gold to trade_return_list and trade_return_gold #must check_trade_list before with self.lock and self.user.lock: if not self.online: return general.log("[ pc ] set_trade_return") script.takegold(self, self.trade_gold) self.trade_return_gold = self.trade_gold for iid, count in self.trade_list: item = self.item.get(iid) if item.count > count: item.count -= count item_return = general.copy(item) item_return.count = count self.trade_return_list.append(item_return) #self.map_send("09cf", item, iid) #アイテム個数変化 script.msg(self, "%sを%s個失いました" % (item.name, count)) else: item_return = self.item_pop(iid) item_return.count = count self.trade_return_list.append(item_return)
def set_trade_return(self): #move item and gold to trade_return_list and trade_return_gold #must check_trade_list before with self.lock and self.user.lock: if not self.online: return general.log("[ pc ] set_trade_return") script.takegold(self, self.trade_gold) self.trade_return_gold = self.trade_gold for iid, count in self.trade_list: item = self.item.get(iid) if item.count > count: item.count -= count item_return = general.copy(item) item_return.count = count self.trade_return_list.append(item_return) #self.map_send("09cf", item, iid) #アイテム個数変化 script.msg(self, "%sを%s個失いました"%(item.name, count)) else: item_return = self.item_pop(iid) item_return.count = count self.trade_return_list.append(item_return)
def do_09fb(self, data_io): #倉庫から取り出す if len(self.pc.item) >= env.MAX_ITEM_STOCK: #倉庫から取り出した時の結果 #キャラのアイテム数が100個を超えてしまうためキャンセルされました self.send("09fc", -5) return item_iid = io_unpack_int(data_io) item_count = io_unpack_short(data_io) general.log("[ map ] take item from warehouse", item_iid, item_count) with self.pc.lock: if self.pc.warehouse_open is None: #倉庫から取り出した時の結果 #倉庫を開けていません self.send("09fc", -1) return if item_iid not in self.pc.warehouse: #倉庫から取り出した時の結果 #指定されたアイテムは存在しません self.send("09fc", -2) return item = self.pc.warehouse[item_iid] if item.count < item_count: #倉庫から取り出した時の結果 #指定された数量が不正です self.send("09fc", -3) return elif item.count == item_count: self.pc.warehouse_pop(item_iid) else: item.count -= item_count script.msg(self.pc, "%sを%s個取り出しました"%(item.name, item_count)) if item.stock: script.item(self.pc, item.item_id, item_count) else: item_take = general.copy(item) item_take.count = item_count item_take.warehouse = 0 self.pc.item_append(item_take) #倉庫から取り出した時の結果 #成功 self.send("09fc", 0) self.pc.update_item_status()
def do_09fb(self, data_io): #倉庫から取り出す if len(self.pc.item) >= env.MAX_ITEM_STOCK: #倉庫から取り出した時の結果 #キャラのアイテム数が100個を超えてしまうためキャンセルされました self.send("09fc", -5) return item_iid = io_unpack_int(data_io) item_count = io_unpack_short(data_io) general.log("[ map ] take item from warehouse", item_iid, item_count) with self.pc.lock: if self.pc.warehouse_open is None: #倉庫から取り出した時の結果 #倉庫を開けていません self.send("09fc", -1) return if item_iid not in self.pc.warehouse: #倉庫から取り出した時の結果 #指定されたアイテムは存在しません self.send("09fc", -2) return item = self.pc.warehouse[item_iid] if item.count < item_count: #倉庫から取り出した時の結果 #指定された数量が不正です self.send("09fc", -3) return elif item.count == item_count: self.pc.warehouse_pop(item_iid) else: item.count -= item_count script.msg(self.pc, "%sを%s個取り出しました" % (item.name, item_count)) if item.stock: script.item(self.pc, item.item_id, item_count) else: item_take = general.copy(item) item_take.count = item_count item_take.warehouse = 0 self.pc.item_append(item_take) #倉庫から取り出した時の結果 #成功 self.send("09fc", 0) self.pc.update_item_status()