예제 #1
0
	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()
예제 #2
0
 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()
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
 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)
예제 #7
0
	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)
예제 #8
0
	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()
예제 #9
0
 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()