Example #1
0
 def do_0616(self, data_io):
     #ショップで売却
     general.log("[ map ] npcsell")
     with self.pc.lock:
         if self.pc.shop_open != 65535:
             general.log_error("do_0616: shop_open != 65535",
                               self.pc.shop_open)
             return
     item_iid_list = io_unpack_array(io_unpack_int, data_io)
     item_count_list = io_unpack_array(io_unpack_int, data_io)
     item_sell_list = zip(item_iid_list, item_count_list)
     general.log("[ map ] item_sell_list", item_sell_list)
     with self.pc.lock:
         for item_iid, item_count in item_sell_list:
             if not item_count:
                 general.log_error("do_0616: not item_count", item_count)
                 continue
             if self.pc.in_equip(item_iid):
                 general.log_error("do_0616: in_equip(item_iid)", item_iid)
                 continue
             item = self.pc.item.get(item_iid)
             if not item:
                 general.log_error("do_0616: not item", item_iid)
                 continue
             if item.count < item_count:
                 general.log_error("do_0616: item.count < item_count")
                 continue
             if script.gold(self.pc,
                            (int(item.price / 100.0) or 1) * item_count):
                 if item.count <= item_count:
                     self.pc.item_pop(item_iid)
                 else:
                     item.count -= item_count
                     script.msg(self.pc,
                                "%sを%s個失いました" % (item.name, item_count))
                     self.send("09cf", item, item_iid)  #アイテム個数変化
     self.pc.update_item_status()
	def do_0616(self, data_io):
		#ショップで売却
		general.log("[ map ] npcsell")
		with self.pc.lock:
			if self.pc.shop_open != 65535:
				general.log_error("do_0616: shop_open != 65535", self.pc.shop_open)
				return
		item_iid_list = io_unpack_array(io_unpack_int, data_io)
		item_count_list = io_unpack_array(io_unpack_int, data_io)
		item_sell_list = zip(item_iid_list, item_count_list)
		general.log("[ map ] item_sell_list", item_sell_list)
		with self.pc.lock:
			for item_iid, item_count in item_sell_list:
				if not item_count:
					general.log_error("do_0616: not item_count", item_count)
					continue
				if self.pc.in_equip(item_iid):
					general.log_error("do_0616: in_equip(item_iid)", item_iid)
					continue
				item = self.pc.item.get(item_iid)
				if not item:
					general.log_error("do_0616: not item", item_iid)
					continue
				if item.count < item_count:
					general.log_error("do_0616: item.count < item_count")
					continue
				if script.gold(self.pc, (int(item.price/100.0) or 1)*item_count):
					if item.count <= item_count:
						self.pc.item_pop(item_iid)
					else:
						item.count -= item_count
						script.msg(self.pc, "%sを%s個失いました"%(
							item.name, item_count
						))
						self.send("09cf", item, item_iid) #アイテム個数変化
		self.pc.update_item_status()
Example #3
0
 def _set_trade_finish(self):
     if not self.check_trade_list():
         self.cancel_trade()
         return
     if not self.trade:
         return
     self.trade_state = 1  #トレード完了してる状態
     p = self.get_trade_target()
     if p:
         with p.lock and p.user.lock:
             if not p.trade:
                 return
             if len(self.item) + len(p.trade_list) > env.MAX_ITEM_STOCK:
                 script.msg(self, "trade error: self stock limit")
                 script.msg(p, "trade error: target stock limit")
                 self.cancel_trade()
                 p.cancel_trade()
                 return
             if len(p.item) + len(self.trade_list) > env.MAX_ITEM_STOCK:
                 script.msg(self, "trade error: target stock limit")
                 script.msg(p, "trade error: self stock limit")
                 self.cancel_trade()
                 p.cancel_trade()
                 return
             if p.trade_state == 1:  #exchange item and gold
                 if not p.check_trade_list():
                     self.cancel_trade()
                     return
                 self.set_trade_return()
                 p.set_trade_return()
                 if self.trade_return_gold:
                     script.gold(p, self.trade_return_gold)
                 for item in self.trade_return_list:
                     if item.stock:
                         script.item(p, item.item_id, item.count)
                     else:
                         p.item_append(item)
                 if p.trade_return_gold:
                     script.gold(self, p.trade_return_gold)
                 for item in p.trade_return_list:
                     if item.stock:
                         script.item(self, item.item_id, item.count)
                     else:
                         self.item_append(item)
                 self.reset_trade()
                 p.reset_trade()
                 self.map_send("0a1c")  #トレード終了通知
                 p.map_send("0a1c")  #トレード終了通知
                 self.update_item_status()
                 p.update_item_status()
                 script.update_item(self)
                 script.update_item(p)
             else:  #send trade status
                 #自分・相手がOKやキャンセルを押した際に双方に送信される
                 self.map_send("0a19", self, p)
                 #自分・相手がOKやキャンセルを押した際に双方に送信される
                 p.map_send("0a19", p, self)
     elif p is False:
         #target offline or map changed
         self.cancel_trade()
     else:  #p is None: npctrade
         self.set_trade_return()
         self.reset_trade(False)  #don't clear return list
         self.map_send("0a1c")  #トレード終了通知
         self.update_item_status()
         script.update_item(self)
Example #4
0
	def _set_trade_finish(self):
		if not self.check_trade_list():
			self.cancel_trade()
			return
		if not self.trade:
			return
		self.trade_state = 1 #トレード完了してる状態
		p = self.get_trade_target()
		if p:
			with p.lock and p.user.lock:
				if not p.trade:
					return
				if len(self.item)+len(p.trade_list) > env.MAX_ITEM_STOCK:
					script.msg(self, "trade error: self stock limit")
					script.msg(p, "trade error: target stock limit")
					self.cancel_trade()
					p.cancel_trade()
					return
				if len(p.item)+len(self.trade_list) > env.MAX_ITEM_STOCK:
					script.msg(self, "trade error: target stock limit")
					script.msg(p, "trade error: self stock limit")
					self.cancel_trade()
					p.cancel_trade()
					return
				if p.trade_state == 1: #exchange item and gold
					if not p.check_trade_list():
						self.cancel_trade()
						return
					self.set_trade_return()
					p.set_trade_return()
					if self.trade_return_gold:
						script.gold(p, self.trade_return_gold)
					for item in self.trade_return_list:
						if item.stock:
							script.item(p, item.item_id, item.count)
						else:
							p.item_append(item)
					if p.trade_return_gold:
						script.gold(self, p.trade_return_gold)
					for item in p.trade_return_list:
						if item.stock:
							script.item(self, item.item_id, item.count)
						else:
							self.item_append(item)
					self.reset_trade()
					p.reset_trade()
					self.map_send("0a1c") #トレード終了通知
					p.map_send("0a1c") #トレード終了通知
					self.update_item_status()
					p.update_item_status()
					script.update_item(self)
					script.update_item(p)
				else: #send trade status
					#自分・相手がOKやキャンセルを押した際に双方に送信される
					self.map_send("0a19", self, p)
					#自分・相手がOKやキャンセルを押した際に双方に送信される
					p.map_send("0a19", p, self)
		elif p is False:
			#target offline or map changed
			self.cancel_trade()
		else: #p is None: npctrade
			self.set_trade_return()
			self.reset_trade(False) #don't clear return list
			self.map_send("0a1c") #トレード終了通知
			self.update_item_status()
			script.update_item(self)