Jump to content

DemoroCZ

Premium
  • Posts

    86
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by DemoroCZ

  1. to start :

    1006 16:40:08247 :: uiTaskBar.py: inconsistent use of tabs and spaces in indentation
     
    1006 16:40:08271 :: uiDragonSoul.py: inconsistent use of tabs and spaces in indentation
     
    1006 16:40:08309 :: uiSystem.py: inconsistent use of tabs and spaces in indentation
     
    1006 16:40:08359 :: uiQuest.py: inconsistent use of tabs and spaces in indentation
     
    1006 16:41:16375 :: CPythonPlayer::SetItemData(window_type : 1, dwSlotIndex=10, itemIndex=9991) - Failed to item data
     
    1006 16:41:20887 :: game.py: inconsistent use of tabs and spaces in indentation
     
    1006 16:41:20985 :: Traceback (most recent call last):
     
    1006 16:41:20985 ::   File "networkModule.py", line 239, in SetGamePhase
     
    1006 16:41:20986 ::   File "game.py", line 105, in __init__
     
    1006 16:41:20986 ::   File "interfaceModule.py", line 287, in MakeInterface
     
    1006 16:41:20986 ::   File "interfaceModule.py", line 171, in __MakeWindows
     
    1006 16:41:20986 ::   File "uiInventory.py", line 253, in __init__
     
    1006 16:41:20986 ::   File "uiInventory.py", line 386, in __LoadWindow
     
    1006 16:41:20986 ::   File "uiInventory.py", line 452, in SetInventoryPage
     
    1006 16:41:20987 ::   File "uiInventory.py", line 524, in RefreshBagSlotWindow
     
    1006 16:41:20987 ::   File "uiInventory.py", line 513, in __InventoryLocalSlotPosToGlobalSlotPos
     
    1006 16:41:20987 :: AttributeError
    1006 16:41:20987 :: :
    1006 16:41:20987 :: 'module' object has no attribute 'IsBeltInventorySlot'
    1006 16:41:20987 :: 

    that sema posted + there are many bad magic number

    1006 16:40:00634 :: # libntpath.pyc has bad magic
    1006 16:40:00638 :: # libstat.pyc has bad magic
    1006 16:40:00640 :: # libUserDict.pyc has bad magic
    and more

    czed by the un-compatiblity between pyc file and you python22/27.dll file

    to do :

    get them from gf client -.-

    and that should be it

    the other error i dont think its hard to solve

    tip : re-add the belt-system (python part)

    Thanks, solved :)

  2.  

    uiinventory fail

     

    1006 16:41:20987 :: 'module' object has no attribute 'IsBeltInventorySlot'
    

    Yes, i tried solve it, but unsuccessfully.

    uiinventory.py:

    import ui
    import player
    import mouseModule
    import net
    import app
    import snd
    import item
    import player
    import chat
    import grp
    import uiScriptLocale
    import uiRefine
    import uiAttachMetin
    import uiPickMoney
    import uiCommon
    import uiPrivateShopBuilder # °łŔλóÁˇ ż­µżľČ ItemMove ąćÁö
    import locale
    import constInfo
    import ime
    
    
    ITEM_MALL_BUTTON_ENABLE = TRUE
    
    
    
    ITEM_FLAG_APPLICABLE = 1 << 14
    
    class CostumeWindow(ui.ScriptWindow):
    
    	def __init__(self, wndInventory):
    		import exception
    		
    		if not app.ENABLE_COSTUME_SYSTEM:			
    			exception.Abort("What do you do?")
    			return
    
    		if not wndInventory:
    			exception.Abort("wndInventory parameter must be set to InventoryWindow")
    			return						
    			 	 
    		ui.ScriptWindow.__init__(self)
    
    		self.isLoaded = 0
    		self.wndInventory = wndInventory;
    
    		self.__LoadWindow()
    
    	def __del__(self):
    		ui.ScriptWindow.__del__(self)
    
    	def Show(self):
    		self.__LoadWindow()
    		self.RefreshCostumeSlot()
    
    		ui.ScriptWindow.Show(self)
    
    	def Close(self):
    		self.Hide()
    
    	def __LoadWindow(self):
    		if self.isLoaded == 1:
    			return
    
    		self.isLoaded = 1
    
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    			pyScrLoader.LoadScriptFile(self, "UIScript/CostumeWindow.py")
    		except:
    			import exception
    			exception.Abort("CostumeWindow.LoadWindow.LoadObject")
    
    		try:
    			wndEquip = self.GetChild("CostumeSlot")
    			self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
    			
    		except:
    			import exception
    			exception.Abort("CostumeWindow.LoadWindow.BindObject")
    
    		## Equipment
    		wndEquip.SetOverInItemEvent(ui.__mem_func__(self.wndInventory.OverInItem))
    		wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.wndInventory.OverOutItem))
    		wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))
    		wndEquip.SetUseSlotEvent(ui.__mem_func__(self.wndInventory.UseItemSlot))						
    		wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.wndInventory.SelectEmptySlot))
    		wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.wndInventory.SelectItemSlot))
    
    		self.wndEquip = wndEquip
    
    	def RefreshCostumeSlot(self):
    		getItemVNum=player.GetItemIndex
    		
    		for i in xrange(item.COSTUME_SLOT_COUNT):
    			slotNumber = item.COSTUME_SLOT_START + i
    			self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0)
    
    		self.wndEquip.RefreshSlot()
    		
    		
    class InventoryWindow(ui.ScriptWindow):
    
    	USE_TYPE_TUPLE = ("USE_CLEAN_SOCKET", "USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ATTRIBUTE2", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET")
    
    	def __init__(self):
    		ui.ScriptWindow.__init__(self)
    		self.questionDialog = None
    		self.tooltipItem = None
    		self.sellingSlotNumber = -1
    		self.isLoaded = 0
    		self.isOpenedCostumeWindowWhenClosingInventory = 0		# ŔÎşĄĹ丮 ´ÝŔ» ¶§ ÄÚ˝şĂőŔĚ ż­·ÁŔÖľú´ÂÁö ż©şÎ; ł×ŔĚąÖ ¤¸¤µ
    
    		self.__LoadWindow()
    
    	def __del__(self):
    		ui.ScriptWindow.__del__(self)
    
    	def Show(self):
    		self.__LoadWindow()
    
    		ui.ScriptWindow.Show(self)
    
    		# ŔÎşĄĹ丮¸¦ ´ÝŔ» ¶§ ÄÚ˝şĂőŔĚ ż­·ÁŔÖľú´Ů¸é ŔÎşĄĹ丮¸¦ ż­ ¶§ ÄÚ˝şĂőµµ °°ŔĚ ż­µµ·Ď ÇÔ.
    		if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
    			self.wndCostume.Show() 
    
    	def __LoadWindow(self):
    		if self.isLoaded == 1:
    			return
    
    		self.isLoaded = 1
    
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    
    			if ITEM_MALL_BUTTON_ENABLE:
    				pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "InventoryWindow.py")
    			else:
    				pyScrLoader.LoadScriptFile(self, "UIScript/InventoryWindow.py")
    		except:
    			import exception
    			exception.Abort("InventoryWindow.LoadWindow.LoadObject")
    
    		try:
    			wndItem = self.GetChild("ItemSlot")
    			wndEquip = self.GetChild("EquipmentSlot")
    			self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
    			self.wndMoney = self.GetChild("Money")
    			self.wndMoneySlot = self.GetChild("Money_Slot")
    			self.mallButton = self.GetChild2("MallButton")
    			self.costumeButton = self.GetChild2("CostumeButton")
    			
    			self.inventoryTab = []
    			self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
    			self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
    
    			self.equipmentTab = []
    			self.equipmentTab.append(self.GetChild("Equipment_Tab_01"))
    			self.equipmentTab.append(self.GetChild("Equipment_Tab_02"))
    
    			if self.costumeButton and not app.ENABLE_COSTUME_SYSTEM:
    				self.costumeButton.Hide()
    				self.costumeButton.Destroy()
    				self.costumeButton = 0
    
    		except:
    			import exception
    			exception.Abort("InventoryWindow.LoadWindow.BindObject")
    
    		## Item
    		wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
    		wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
    		wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
    		wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
    		wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
    		wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
    
    		## Equipment
    		wndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
    		wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))
    		wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))
    		wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))
    		wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
    		wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
    
    		## PickMoneyDialog
    		dlgPickMoney = uiPickMoney.PickMoneyDialog()
    		dlgPickMoney.LoadDialog()
    		dlgPickMoney.Hide()
    
    		## RefineDialog
    		self.refineDialog = uiRefine.RefineDialog()
    		self.refineDialog.Hide()
    
    		## AttachMetinDialog
    		self.attachMetinDialog = uiAttachMetin.AttachMetinDialog()
    		self.attachMetinDialog.Hide()
    
    		## MoneySlot
    		self.wndMoneySlot.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
    
    		self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
    		self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
    		self.inventoryTab[0].Down()
    
    		self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg))
    		self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg))
    		self.equipmentTab[0].Down()
    		self.equipmentTab[0].Hide()
    		self.equipmentTab[1].Hide()
    
    		self.wndItem = wndItem
    		self.wndEquip = wndEquip
    		self.dlgPickMoney = dlgPickMoney
    
    		# MallButton
    		if self.mallButton:
    			self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton))
            
    		# Costume Button
    		if self.costumeButton:
    			self.costumeButton.SetEvent(ui.__mem_func__(self.ClickCostumeButton))
    
    		self.wndCostume = None
    		
     		#####
    
    		## Refresh
    		self.SetInventoryPage(0)
    		self.SetEquipmentPage(0)
    		self.RefreshItemSlot()
    		self.RefreshStatus()
    
    	def Destroy(self):
    		self.ClearDictionary()
    
    		self.dlgPickMoney.Destroy()
    		self.dlgPickMoney = 0
    
    		self.refineDialog.Destroy()
    		self.refineDialog = 0
    
    		self.attachMetinDialog.Destroy()
    		self.attachMetinDialog = 0
    
    		self.tooltipItem = None
    		self.wndItem = 0
    		self.wndEquip = 0
    		self.dlgPickMoney = 0
    		self.wndMoney = 0
    		self.wndMoneySlot = 0
    		self.questionDialog = None
    		self.mallButton = None
    
    		if self.wndCostume:
    			self.wndCostume.Destroy()
    			self.wndCostume = 0
    			
    		self.inventoryTab = []
    		self.equipmentTab = []
    
    	def Close(self):
    		if None != self.tooltipItem:
    			self.tooltipItem.HideToolTip()
    
    		if self.wndCostume:
    			self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow()	# ŔÎşĄĹ丮 âŔĚ ´ÝČú ¶§ ÄÚ˝şĂőŔĚ ż­·Á ŔÖľú´Â°ˇ?
    			self.wndCostume.Close()
     
    		self.OnCloseQuestionDialog()
    		self.dlgPickMoney.Close()
    		self.Hide()
    
    	def SetInventoryPage(self, page):
    		self.inventoryPageIndex = page
    		self.inventoryTab[1-page].SetUp()
    		self.RefreshBagSlotWindow()
    
    	def SetEquipmentPage(self, page):
    		self.equipmentPageIndex = page
    		self.equipmentTab[1-page].SetUp()
    		self.RefreshEquipSlotWindow()
    
    	def ClickMallButton(self):
    		print "click_mall_button"
    		net.SendChatPacket("/click_mall")
    
    	def ClickCostumeButton(self):
    		print "Click Costume Button"
    		if self.wndCostume:
    			if self.wndCostume.IsShow(): 
    				self.wndCostume.Hide()
    			else:
    				self.wndCostume.Show()
    		else:
    			self.wndCostume = CostumeWindow(self)
    			self.wndCostume.Show()
    
    	def OpenPickMoneyDialog(self):
    
    		if mouseModule.mouseController.isAttached():
    
    			attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
    			if player.SLOT_TYPE_SAFEBOX == mouseModule.mouseController.GetAttachedType():
    
    				if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
    					net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
    					snd.PlaySound("sound/ui/money.wav")
    
    			mouseModule.mouseController.DeattachObject()
    
    		else:
    			curMoney = player.GetElk()
    
    			if curMoney <= 0:
    				return
    
    			self.dlgPickMoney.SetTitleName(locale.PICK_MONEY_TITLE)
    			self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
    			self.dlgPickMoney.Open(curMoney)
    			self.dlgPickMoney.SetMax(7) # ŔÎşĄĹ丮 990000 Á¦ÇŃ ąö±× ĽöÁ¤
    
    	def OnPickMoney(self, money):
    		mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
    
    	def OnPickItem(self, count):
    		itemSlotIndex = self.dlgPickMoney.itemGlobalSlotIndex
    		selectedItemVNum = player.GetItemIndex(itemSlotIndex)
    		mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, count)
    
    	def __InventoryLocalSlotPosToGlobalSlotPos(self, local):
    
    		if player.IsEquipmentSlot(local) or player.IsCostumeSlot(local):
    			return local
    
    		return self.inventoryPageIndex*player.INVENTORY_PAGE_SIZE + local
    
    	def RefreshBagSlotWindow(self):
    		getItemVNum=player.GetItemIndex
    		getItemCount=player.GetItemCount
    		setItemVNum=self.wndItem.SetItemSlot
    		
    		for i in xrange(player.INVENTORY_PAGE_SIZE):
    			slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
    			itemCount = getItemCount(slotNumber)
    			if itemCount <= 1:
    				itemCount = 0
    				
    			itemVnum = getItemVNum(slotNumber)
    			setItemVNum(i, itemVnum, itemCount)
    			
    			## ŔÚµżą°ľŕ (HP: #72723 ~ #72726, SP: #72727 ~ #72730) ĆŻĽöĂł¸® - ľĆŔĚĹŰŔεĄµµ ˝˝·Ôżˇ Č°ĽşČ­/şńČ°ĽşČ­ ÇĄ˝Ă¸¦ Ŕ§ÇŃ ŔŰľ÷ŔÓ - [hyo]
    			if constInfo.IS_AUTO_POTION(itemVnum):
    				# metinSocket - [0] : Č°ĽşČ­ ż©şÎ, [1] : »çżëÇŃ ľç, [2] : ĂÖ´ë żë·®
    				metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]	
    				
    				if slotNumber >= player.INVENTORY_PAGE_SIZE:
    					slotNumber -= player.INVENTORY_PAGE_SIZE
    					
    				isActivated = 0 != metinSocket[0]
    				
    				if isActivated:
    					self.wndItem.ActivateSlot(slotNumber)
    					potionType = 0;
    					if constInfo.IS_AUTO_POTION_HP(itemVnum):
    						potionType = player.AUTO_POTION_TYPE_HP
    					elif constInfo.IS_AUTO_POTION_SP(itemVnum):
    						potionType = player.AUTO_POTION_TYPE_SP						
    					
    					usedAmount = int(metinSocket[1])
    					totalAmount = int(metinSocket[2])					
    					player.SetAutoPotionInfo(potionType, isActivated, (totalAmount - usedAmount), totalAmount, self.__InventoryLocalSlotPosToGlobalSlotPos(i))
    					
    				else:
    					self.wndItem.DeactivateSlot(slotNumber)			
    					
    		self.wndItem.RefreshSlot()
    
    	def RefreshEquipSlotWindow(self):
    		getItemVNum=player.GetItemIndex
    		getItemCount=player.GetItemCount
    		setItemVNum=self.wndEquip.SetItemSlot
    		for i in xrange(player.EQUIPMENT_PAGE_COUNT):
    			slotNumber = player.EQUIPMENT_SLOT_START + i
    			itemCount = getItemCount(slotNumber)
    			if itemCount <= 1:
    				itemCount = 0
    			setItemVNum(slotNumber, getItemVNum(slotNumber), itemCount)
    
    		self.wndEquip.RefreshSlot()
    		
    		if self.wndCostume:
    			self.wndCostume.RefreshCostumeSlot()
    
    	def RefreshItemSlot(self):
    		self.RefreshBagSlotWindow()
    		self.RefreshEquipSlotWindow()
    
    	def RefreshStatus(self):
    		money = player.GetElk()
    		self.wndMoney.SetText(locale.NumberToMoneyString(money))
    
    	def SetItemToolTip(self, tooltipItem):
    		self.tooltipItem = tooltipItem
    
    	def SellItem(self):
    
    		net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count)
    		snd.PlaySound("sound/ui/money.wav")
    		self.OnCloseQuestionDialog()
    
    	def OnDetachMetinFromItem(self):
    		if None == self.questionDialog:
    			return
    			
    		#net.SendItemUseToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)		
    		self.__SendUseItemToItemPacket(self.questionDialog.sourcePos, self.questionDialog.targetPos)
    		self.OnCloseQuestionDialog()
    
    	def OnCloseQuestionDialog(self):
    		if self.questionDialog:
    			self.questionDialog.Close()
    
    		self.questionDialog = None
    
    	## Slot Event
    	def SelectEmptySlot(self, selectedSlotPos):
    		if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:
    			return
    
    		selectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(selectedSlotPos)
    
    		if mouseModule.mouseController.isAttached():
    
    			attachedSlotType = mouseModule.mouseController.GetAttachedType()
    			attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
    			attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
    			attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
    
    			if player.SLOT_TYPE_INVENTORY == attachedSlotType:
    				itemCount = player.GetItemCount(attachedSlotPos)
    				attachedCount = mouseModule.mouseController.GetAttachedItemCount()
    				self.__SendMoveItemPacket(attachedSlotPos, selectedSlotPos, attachedCount)
    
    				if item.IsRefineScroll(attachedItemIndex):
    					self.wndItem.SetUseMode(FALSE)
    
    			elif player.SLOT_TYPE_PRIVATE_SHOP == attachedSlotType:
    				mouseModule.mouseController.RunCallBack("INVENTORY")
    
    			elif player.SLOT_TYPE_SHOP == attachedSlotType:
    				net.SendShopBuyPacket(attachedSlotPos)
    
    			elif player.SLOT_TYPE_SAFEBOX == attachedSlotType:
    
    				if player.ITEM_MONEY == attachedItemIndex:
    					net.SendSafeboxWithdrawMoneyPacket(mouseModule.mouseController.GetAttachedItemCount())
    					snd.PlaySound("sound/ui/money.wav")
    
    				else:
    					net.SendSafeboxCheckoutPacket(attachedSlotPos, selectedSlotPos)
    
    			elif player.SLOT_TYPE_MALL == attachedSlotType:
    				net.SendMallCheckoutPacket(attachedSlotPos, selectedSlotPos)
    
    			mouseModule.mouseController.DeattachObject()
    
    	def SelectItemSlot(self, itemSlotIndex):
    		if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:
    			return
    
    		itemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(itemSlotIndex)
    
    		if mouseModule.mouseController.isAttached():
    			attachedSlotType = mouseModule.mouseController.GetAttachedType()
    			attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
    			attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()
    
    			if player.SLOT_TYPE_INVENTORY == attachedSlotType:
    				self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex)
    
    			mouseModule.mouseController.DeattachObject()
    
    		else:
    
    			curCursorNum = app.GetCursor()
    			if app.SELL == curCursorNum:
    				self.__SellItem(itemSlotIndex)
    				
    			elif app.BUY == curCursorNum:
    				chat.AppendChat(chat.CHAT_TYPE_INFO, locale.SHOP_BUY_INFO)
    
    			elif app.IsPressed(app.DIK_LALT):
    				link = player.GetItemLink(itemSlotIndex)
    				ime.PasteString(link)
    
    			elif app.IsPressed(app.DIK_LSHIFT):
    				itemCount = player.GetItemCount(itemSlotIndex)
    				
    				if itemCount > 1:
    					self.dlgPickMoney.SetTitleName(locale.PICK_ITEM_TITLE)
    					self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickItem))
    					self.dlgPickMoney.Open(itemCount)
    					self.dlgPickMoney.itemGlobalSlotIndex = itemSlotIndex
    				#else:
    					#selectedItemVNum = player.GetItemIndex(itemSlotIndex)
    					#mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum)
    
    			elif app.IsPressed(app.DIK_LCONTROL):
    				itemIndex = player.GetItemIndex(itemSlotIndex)
    
    				if TRUE == item.CanAddToQuickSlotItem(itemIndex):
    					player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_INVENTORY, itemSlotIndex)
    				else:
    					chat.AppendChat(chat.CHAT_TYPE_INFO, locale.QUICKSLOT_REGISTER_DISABLE_ITEM)
    
    			else:
    				selectedItemVNum = player.GetItemIndex(itemSlotIndex)
    				itemCount = player.GetItemCount(itemSlotIndex)
    				mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)
    				
    				if self.__IsUsableItemToItem(selectedItemVNum, itemSlotIndex):				
    					self.wndItem.SetUseMode(TRUE)
    				else:					
    					self.wndItem.SetUseMode(FALSE)
    
    				snd.PlaySound("sound/ui/pick.wav")
    
    	def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):
    		if srcItemSlotPos == dstItemSlotPos:
    			return
    					
    		if item.IsRefineScroll(srcItemVID):
    			self.RefineItem(srcItemSlotPos, dstItemSlotPos)
    			self.wndItem.SetUseMode(FALSE)
    
    		elif item.IsMetin(srcItemVID):
    			self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)
    
    		elif item.IsDetachScroll(srcItemVID):
    			self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)
    
    		elif item.IsKey(srcItemVID):
    			self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)			
    
    		elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
    			self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
    
    		elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE:
    			self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)			
    
    		else:
    			#snd.PlaySound("sound/ui/drop.wav")
    
    			## Ŕ̵ż˝ĂŲ °÷ŔĚ ŔĺÂř ˝˝·ÔŔĎ °ćżě ľĆŔĚĹŰŔ» »çżëÇŘĽ­ ŔĺÂř ˝ĂŲ´Ů - [levites]
    			if player.IsEquipmentSlot(dstItemSlotPos):
    
    				## µé°í ŔÖ´Â ľĆŔĚĹŰŔĚ ŔĺşńŔ϶§¸¸
    				if item.IsEquipmentVID(srcItemVID):
    					self.__UseItem(srcItemSlotPos)
    
    			else:
    				self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
    				#net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0)
    
    	def __SellItem(self, itemSlotPos):
    		if not player.IsEquipmentSlot(itemSlotPos):
    			self.sellingSlotNumber = itemSlotPos
    			itemIndex = player.GetItemIndex(itemSlotPos)
    			itemCount = player.GetItemCount(itemSlotPos)
    
    			item.SelectItem(itemIndex)
    			itemPrice = item.GetISellItemPrice()
    
    			if item.Is1GoldItem():
    				itemPrice = itemCount / itemPrice / 5
    			else:
    				itemPrice = itemPrice * itemCount / 5
    
    			item.GetItemName(itemIndex)
    			itemName = item.GetItemName()
    
    			self.questionDialog = uiCommon.QuestionDialog()
    			self.questionDialog.SetText(locale.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice))
    			self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem))
    			self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
    			self.questionDialog.Open()
    			self.questionDialog.count = itemCount
    
    	def RefineItem(self, scrollSlotPos, targetSlotPos):
    
    		scrollIndex = player.GetItemIndex(scrollSlotPos)
    		targetIndex = player.GetItemIndex(targetSlotPos)
    
    		if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos):
    			return
    
    		###########################################################
    		self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos)
    		#net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos)
    		return
    		###########################################################
    
    		###########################################################
    		#net.SendRequestRefineInfoPacket(targetSlotPos)
    		#return
    		###########################################################
    
    		result = player.CanRefine(scrollIndex, targetSlotPos)
    
    		if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result:
    			#snd.PlaySound("sound/ui/jaeryun_fail.wav")
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_MORE_SOCKET)
    
    		elif player.REFINE_NEED_MORE_GOOD_SCROLL == result:
    			#snd.PlaySound("sound/ui/jaeryun_fail.wav")
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NEED_BETTER_SCROLL)
    
    		elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result:
    			#snd.PlaySound("sound/ui/jaeryun_fail.wav")
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_SOCKET_DISABLE_ITEM)
    
    		elif player.REFINE_NOT_NEXT_GRADE_ITEM == result:
    			#snd.PlaySound("sound/ui/jaeryun_fail.wav")
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)
    
    		elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_EQUIP_ITEM)
    
    		if player.REFINE_OK != result:
    			return
    
    		self.refineDialog.Open(scrollSlotPos, targetSlotPos)
    
    	def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
    		scrollIndex = player.GetItemIndex(scrollSlotPos)
    		targetIndex = player.GetItemIndex(targetSlotPos)
    
    		if not player.CanDetach(scrollIndex, targetSlotPos):
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
    			return
    
    		self.questionDialog = uiCommon.QuestionDialog()
    		self.questionDialog.SetText(locale.REFINE_DO_YOU_SEPARATE_METIN)
    		self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem))
    		self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
    		self.questionDialog.Open()
    		self.questionDialog.sourcePos = scrollSlotPos
    		self.questionDialog.targetPos = targetSlotPos
    
    	def AttachMetinToItem(self, metinSlotPos, targetSlotPos):
    		metinIndex = player.GetItemIndex(metinSlotPos)
    		targetIndex = player.GetItemIndex(targetSlotPos)
    
    		item.SelectItem(metinIndex)
    		itemName = item.GetItemName()
    
    		result = player.CanAttachMetin(metinIndex, targetSlotPos)
    
    		if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result:
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))
    
    		if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_SOCKET(itemName))
    
    		elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))
    
    		elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.REFINE_FAILURE_EQUIP_ITEM)
    
    		if player.ATTACH_METIN_OK != result:
    			return
    
    		self.attachMetinDialog.Open(metinSlotPos, targetSlotPos)
    
    
    		
    	def OverOutItem(self):
    		self.wndItem.SetUsableItem(FALSE)
    		if None != self.tooltipItem:
    			self.tooltipItem.HideToolTip()
    
    	def OverInItem(self, overSlotPos):
    		overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
    		self.wndItem.SetUsableItem(FALSE)
    
    		if mouseModule.mouseController.isAttached():
    			attachedItemType = mouseModule.mouseController.GetAttachedType()
    			if player.SLOT_TYPE_INVENTORY == attachedItemType:
    
    				attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
    				attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()
    				
    				if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos):
    					self.wndItem.SetUsableItem(TRUE)
    					self.ShowToolTip(overSlotPos)
    					return
    				
    		self.ShowToolTip(overSlotPos)
    
    
    	def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
    		"´Ů¸Ą ľĆŔĚĹŰżˇ »çżëÇŇ Ľö ŔÖ´Â ľĆŔĚĹŰŔΰˇ?"
    
    		if item.IsRefineScroll(srcItemVNum):
    			return TRUE
    		elif item.IsMetin(srcItemVNum):
    			return TRUE
    		elif item.IsDetachScroll(srcItemVNum):
    			return TRUE
    		elif item.IsKey(srcItemVNum):
    			return TRUE
    		elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
    			return TRUE
    		else:
    			if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE:
    				return TRUE
    			
    		return FALSE
    
    	def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
    		"´ë»ó ľĆŔĚĹŰżˇ »çżëÇŇ Ľö Ŕִ°ˇ?"
    
    		if srcSlotPos == dstSlotPos:
    			return FALSE
    
    		if item.IsRefineScroll(srcItemVNum):
    			if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos):
    				return TRUE
    		elif item.IsMetin(srcItemVNum):
    			if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos):
    				return TRUE
    		elif item.IsDetachScroll(srcItemVNum):
    			if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
    				return TRUE
    		elif item.IsKey(srcItemVNum):
    			if player.CanUnlock(srcItemVNum, dstSlotPos):
    				return TRUE
    
    		elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
    			return TRUE
    
    		else:
    			useType=item.GetUseType(srcItemVNum)
    
    			if "USE_CLEAN_SOCKET" == useType:
    				if self.__CanCleanBrokenMetinStone(dstSlotPos):
    					return TRUE
    			elif "USE_CHANGE_ATTRIBUTE" == useType:
    				if self.__CanChangeItemAttrList(dstSlotPos):
    					return TRUE
    			elif "USE_ADD_ATTRIBUTE" == useType:
    				if self.__CanAddItemAttr(dstSlotPos):
    					return TRUE
    			elif "USE_ADD_ATTRIBUTE2" == useType:
    				if self.__CanAddItemAttr(dstSlotPos):
    					return TRUE
    			elif "USE_ADD_ACCESSORY_SOCKET" == useType:
    				if self.__CanAddAccessorySocket(dstSlotPos):
    					return TRUE
    			elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:								
    				if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
    					return TRUE;
    
    		return FALSE
    
    	def __CanCleanBrokenMetinStone(self, dstSlotPos):
    		dstItemVNum = player.GetItemIndex(dstSlotPos)
    		if dstItemVNum == 0:
    			return FALSE
    
    		item.SelectItem(dstItemVNum)
    		
    		if item.ITEM_TYPE_WEAPON != item.GetItemType():
    			return FALSE
    
    		for i in xrange(player.METIN_SOCKET_MAX_NUM):
    			if player.GetItemMetinSocket(dstSlotPos, i) == constInfo.ERROR_METIN_STONE:
    				return TRUE
    
    		return FALSE
    
    	def __CanChangeItemAttrList(self, dstSlotPos):
    		dstItemVNum = player.GetItemIndex(dstSlotPos)
    		if dstItemVNum == 0:
    			return FALSE
    
    		item.SelectItem(dstItemVNum)
    		
    		if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):	 
    			return FALSE
    
    		for i in xrange(player.METIN_SOCKET_MAX_NUM):
    			if player.GetItemAttribute(dstSlotPos, i) != 0:
    				return TRUE
    
    		return FALSE
    
    	def __CanPutAccessorySocket(self, dstSlotPos, mtrlVnum):
    		dstItemVNum = player.GetItemIndex(dstSlotPos)
    		if dstItemVNum == 0:
    			return FALSE
    
    		item.SelectItem(dstItemVNum)
    
    		if item.GetItemType() != item.ITEM_TYPE_ARMOR:
    			return FALSE
    
    		if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
    			return FALSE
    
    		curCount = player.GetItemMetinSocket(dstSlotPos, 0)
    		maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
    
    		if mtrlVnum != constInfo.GET_ACCESSORY_MATERIAL_VNUM(dstItemVNum, item.GetItemSubType()):
    			return FALSE
    		
    		if curCount>=maxCount:
    			return FALSE
    
    		return TRUE
    
    	def __CanAddAccessorySocket(self, dstSlotPos):
    		dstItemVNum = player.GetItemIndex(dstSlotPos)
    		if dstItemVNum == 0:
    			return FALSE
    
    		item.SelectItem(dstItemVNum)
    
    		if item.GetItemType() != item.ITEM_TYPE_ARMOR:
    			return FALSE
    
    		if not item.GetItemSubType() in (item.ARMOR_WRIST, item.ARMOR_NECK, item.ARMOR_EAR):
    			return FALSE
    
    		curCount = player.GetItemMetinSocket(dstSlotPos, 0)
    		maxCount = player.GetItemMetinSocket(dstSlotPos, 1)
    		
    		ACCESSORY_SOCKET_MAX_SIZE = 3
    		if maxCount >= ACCESSORY_SOCKET_MAX_SIZE:
    			return FALSE
    
    		return TRUE
    
    	def __CanAddItemAttr(self, dstSlotPos):
    		dstItemVNum = player.GetItemIndex(dstSlotPos)
    		if dstItemVNum == 0:
    			return FALSE
    
    		item.SelectItem(dstItemVNum)
    		
    		if not item.GetItemType() in (item.ITEM_TYPE_WEAPON, item.ITEM_TYPE_ARMOR):	 
    			return FALSE
    			
    		attrCount = 0
    		for i in xrange(player.METIN_SOCKET_MAX_NUM):
    			if player.GetItemAttribute(dstSlotPos, i) != 0:
    				attrCount += 1
    
    		if attrCount<4:
    			return TRUE
    								
    		return FALSE
    
    	def ShowToolTip(self, slotIndex):
    		if None != self.tooltipItem:
    			self.tooltipItem.SetInventoryItem(slotIndex)
    
    	def OnTop(self):
    		if None != self.tooltipItem:
    			self.tooltipItem.SetTop()
    
    	def OnPressEscapeKey(self):
    		self.Close()
    		return TRUE
    
    	def UseItemSlot(self, slotIndex):
    		if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():
    			return
    
    		slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)
    
    		self.__UseItem(slotIndex)
    		mouseModule.mouseController.DeattachObject()
    		self.OverOutItem()
    
    	def __UseItem(self, slotIndex):
    		ItemVNum = player.GetItemIndex(slotIndex)
    		item.SelectItem(ItemVNum)
    		if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE):
    			self.questionDialog = uiCommon.QuestionDialog()
    			self.questionDialog.SetText(locale.INVENTORY_REALLY_USE_ITEM)
    			self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept))
    			self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel))
    			self.questionDialog.Open()
    			self.questionDialog.slotIndex = slotIndex
    
    		else:
    			self.__SendUseItemPacket(slotIndex)
    			#net.SendItemUsePacket(slotIndex)	
    
    	def __UseItemQuestionDialog_OnCancel(self):
    		self.OnCloseQuestionDialog()
    
    	def __UseItemQuestionDialog_OnAccept(self):
    		self.__SendUseItemPacket(self.questionDialog.slotIndex)
    
    		if self.questionDialog:
    			self.questionDialog.Close()
    		self.questionDialog = None
    
    	def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
    		# °łŔλóÁˇ ż­°í ŔÖ´Â µżľČ ľĆŔĚĹŰ »çżë ąćÁö
    		if uiPrivateShopBuilder.IsBuildingPrivateShop():
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
    			return
    
    		net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
    
    	def __SendUseItemPacket(self, slotPos):
    		# °łŔλóÁˇ ż­°í ŔÖ´Â µżľČ ľĆŔĚĹŰ »çżë ąćÁö
    		if uiPrivateShopBuilder.IsBuildingPrivateShop():
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)
    			return
    
    		net.SendItemUsePacket(slotPos)
    	
    	def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
    		# °łŔλóÁˇ ż­°í ŔÖ´Â µżľČ ľĆŔĚĹŰ »çżë ąćÁö
    		if uiPrivateShopBuilder.IsBuildingPrivateShop():
    			chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
    			return
    
    		net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)
    

    Thanks.

  3. Hello,

    i have problem with my client binary (novaline). Client freeze after loading... Please can someone help me? Thanks :)

    syserr:

    1006 16:40:00022 :: import marshal # builtin
    
    1006 16:40:00022 :: import imp # builtin
    
    1006 16:40:00046 :: ui.py: inconsistent use of tabs and spaces in indentation
    
    1006 16:40:00076 :: import _weakref # builtin
    
    1006 16:40:00628 :: # trying .os.pyd
    
    1006 16:40:00628 :: # trying .os.py
    
    1006 16:40:00628 :: # trying .os.pyw
    
    1006 16:40:00628 :: # trying .os.pyc
    
    1006 16:40:00628 :: # trying libos.pyd
    
    1006 16:40:00628 :: # trying libos.py
    
    1006 16:40:00628 :: # libos.pyc has bad magic
    
    1006 16:40:00633 :: import os # from libos.py
    
    1006 16:40:00633 :: import nt # builtin
    
    1006 16:40:00633 :: # trying .ntpath.pyd
    
    1006 16:40:00633 :: # trying .ntpath.py
    
    1006 16:40:00633 :: # trying .ntpath.pyw
    
    1006 16:40:00633 :: # trying .ntpath.pyc
    
    1006 16:40:00634 :: # trying libntpath.pyd
    
    1006 16:40:00634 :: # trying libntpath.py
    
    1006 16:40:00634 :: # libntpath.pyc has bad magic
    
    1006 16:40:00637 :: import ntpath # from libntpath.py
    
    1006 16:40:00637 :: # trying .stat.pyd
    
    1006 16:40:00637 :: # trying .stat.py
    
    1006 16:40:00637 :: # trying .stat.pyw
    
    1006 16:40:00638 :: # trying .stat.pyc
    
    1006 16:40:00638 :: # trying libstat.pyd
    
    1006 16:40:00638 :: # trying libstat.py
    
    1006 16:40:00638 :: # libstat.pyc has bad magic
    
    1006 16:40:00639 :: import stat # from libstat.py
    
    1006 16:40:00639 :: # trying .UserDict.pyd
    
    1006 16:40:00639 :: # trying .UserDict.py
    
    1006 16:40:00639 :: # trying .UserDict.pyw
    
    1006 16:40:00639 :: # trying .UserDict.pyc
    
    1006 16:40:00639 :: # trying libUserDict.pyd
    
    1006 16:40:00639 :: # trying libUserDict.py
    
    1006 16:40:00640 :: # libUserDict.pyc has bad magic
    
    1006 16:40:00641 :: import UserDict # from libUserDict.py
    
    1006 16:40:00641 :: # trying .copy_reg.pyd
    
    1006 16:40:00641 :: # trying .copy_reg.py
    
    1006 16:40:00641 :: # trying .copy_reg.pyw
    
    1006 16:40:00641 :: # trying .copy_reg.pyc
    
    1006 16:40:00641 :: # trying libcopy_reg.pyd
    
    1006 16:40:00641 :: # trying libcopy_reg.py
    
    1006 16:40:00642 :: # libcopy_reg.pyc has bad magic
    
    1006 16:40:00642 :: import copy_reg # from libcopy_reg.py
    
    1006 16:40:00642 :: # trying .types.pyd
    
    1006 16:40:00642 :: # trying .types.py
    
    1006 16:40:00642 :: # trying .types.pyw
    
    1006 16:40:00643 :: # trying .types.pyc
    
    1006 16:40:00643 :: # trying libtypes.pyd
    
    1006 16:40:00643 :: # trying libtypes.py
    
    1006 16:40:00643 :: # libtypes.pyc has bad magic
    
    1006 16:40:00644 :: import types # from libtypes.py
    
    1006 16:40:00644 :: # trying .__future__.pyd
    
    1006 16:40:00644 :: # trying .__future__.py
    
    1006 16:40:00644 :: # trying .__future__.pyw
    
    1006 16:40:00644 :: # trying .__future__.pyc
    
    1006 16:40:00644 :: # trying lib__future__.pyd
    
    1006 16:40:00644 :: # trying lib__future__.py
    
    1006 16:40:00645 :: # lib__future__.pyc has bad magic
    
    1006 16:40:00645 :: import __future__ # from lib__future__.py
    
    1006 16:40:00646 :: import errno # builtin
    
    1006 16:40:00681 :: import time # builtin
    
    1006 16:40:08187 :: import math # builtin
    
    1006 16:40:08247 :: uiTaskBar.py: inconsistent use of tabs and spaces in indentation
    
    1006 16:40:08271 :: uiDragonSoul.py: inconsistent use of tabs and spaces in indentation
    
    1006 16:40:08309 :: uiSystem.py: inconsistent use of tabs and spaces in indentation
    
    1006 16:40:08359 :: uiQuest.py: inconsistent use of tabs and spaces in indentation
    
    1006 16:41:16375 :: CPythonPlayer::SetItemData(window_type : 1, dwSlotIndex=10, itemIndex=9991) - Failed to item data
    
    1006 16:41:20887 :: game.py: inconsistent use of tabs and spaces in indentation
    
    1006 16:41:20985 :: Traceback (most recent call last):
    
    1006 16:41:20985 ::   File "networkModule.py", line 239, in SetGamePhase
    
    1006 16:41:20986 ::   File "game.py", line 105, in __init__
    
    1006 16:41:20986 ::   File "interfaceModule.py", line 287, in MakeInterface
    
    1006 16:41:20986 ::   File "interfaceModule.py", line 171, in __MakeWindows
    
    1006 16:41:20986 ::   File "uiInventory.py", line 253, in __init__
    
    1006 16:41:20986 ::   File "uiInventory.py", line 386, in __LoadWindow
    
    1006 16:41:20986 ::   File "uiInventory.py", line 452, in SetInventoryPage
    
    1006 16:41:20987 ::   File "uiInventory.py", line 524, in RefreshBagSlotWindow
    
    1006 16:41:20987 ::   File "uiInventory.py", line 513, in __InventoryLocalSlotPosToGlobalSlotPos
    
    1006 16:41:20987 :: AttributeError
    1006 16:41:20987 :: : 
    1006 16:41:20987 :: 'module' object has no attribute 'IsBeltInventorySlot'
    1006 16:41:20987 :: 
    
    1006 16:41:28841 :: # clear __builtin__._
    
    1006 16:41:28841 :: # clear sys.path
    
    1006 16:41:28841 :: # clear sys.argv
    
    1006 16:41:28841 :: # clear sys.ps1
    
    1006 16:41:28841 :: # clear sys.ps2
    
    1006 16:41:28841 :: # clear sys.exitfunc
    
    1006 16:41:28841 :: # clear sys.exc_type
    
    1006 16:41:28841 :: # clear sys.exc_value
    
    1006 16:41:28841 :: # clear sys.exc_traceback
    
    1006 16:41:28841 :: # clear sys.last_type
    
    1006 16:41:28841 :: # clear sys.last_value
    
    1006 16:41:28841 :: # clear sys.last_traceback
    
    1006 16:41:28841 :: # clear sys.path_hooks
    
    1006 16:41:28841 :: # clear sys.path_importer_cache
    
    1006 16:41:28841 :: # clear sys.meta_path
    
    1006 16:41:28841 :: # clear sys.flags
    
    1006 16:41:28841 :: # clear sys.float_info
    
    1006 16:41:28841 :: # restore sys.stdin
    
    1006 16:41:28841 :: # restore sys.stdout
    
    1006 16:41:28841 :: # restore sys.stderr
    
  4. Hello,

    finally i found something about in syserr about DC, but still i can't solve this problem...

     

    SYSERR: Aug 22 20:23:11 :: SetDungeon: [GA]Demoro is trying to reassigning dungeon (current 0x28d27880, new party 0x28d27880)

    SYSERR: Aug 22 20:24:38 :: GetUniqueHpPerc: Unknown Key : fake6
    SYSERR: Aug 22 20:24:38 :: IsUniqueDead: Unknown Key or Dead : fake6
    SYSERR: Aug 22 20:25:08 :: IsUniqueDead: Unknown Key or Dead : real

     

    Maybe it help with solving this problem..

  5. are you sure about syserr?

    did you look into the core were you have the dc map?

    + what kind of crush is this ? client/server ? (most lilely form what you said + the info it looks like a server crush but still more info means more help)

    I'm sure with syserr, there is nothing about DC.

    I've DC on CH99, on CH99 is only DC, nothing else.

    Only core (CH99) crash when everyone warp from DC. But i found one interesing thing - when i kill Azrael in another floor, quest works without problems - someone kill Azrael, everyone warp from DC, and everything works fine - nothing crash.

     

    Thanks, and sorry for my english.

  6. Hello,

    I'm trying solve problem with Devil's catacomb for few hours, but i can't find solution... When someone kill Azrael in last floor in Devil's catacomb, core will crash. In syserr isn't anything about Devil's catacomb (map or quest).

     

    Please can someone help me?

     

    Sorry for my english, and thanks.

     

    Quest:

    quest devilscatacomb begin
        state start begin
        
            function getLevelByCord()
            
                if pc.get_local_x() > 30 and pc.get_local_y() > 45 and pc.get_local_x() < 450 and pc.get_local_y() < 450 then
                    return 1
                    
                elseif pc.get_local_x() > 540 and pc.get_local_y() > 39 and pc.get_local_x() < 1000 and pc.get_local_y() < 462 then
                    return 2
                    
                elseif pc.get_local_x() > 1048 and pc.get_local_y() > 35 and pc.get_local_x() < 1455 and pc.get_local_y() < 458 then
                    return 3
                    
                elseif pc.get_local_x() > 31 and pc.get_local_y() > 541 and pc.get_local_x() < 564 and pc.get_local_y() < 1058 then
                    return 4
                    
                elseif pc.get_local_x() > 650 and pc.get_local_y() > 540 and pc.get_local_x() < 1050 and pc.get_local_y() < 955 then
                    return 5
                    
                elseif pc.get_local_x() > 1175 and pc.get_local_y() > 576 and pc.get_local_x() < 1420 and pc.get_local_y() < 810 then
                    return 6
                    
                else
                    return 0
                end
                
            end
            
            function isInCatacomb()
            
                if pc.get_map_index() >= (213 * 10000) and pc.get_map_index() < (214 * 10000) and pc.in_dungeon() then
                    return true
                else
                    return false
                end
                
            end
            
            function get3FloorStonePositions()
            
                local positions = 
                {
                    {1365, 352}, {1349, 150}, {1133, 167}, {1151, 364},
                    {1234, 136}, {1255, 371}, {1132, 245},
                }
                
                for i = 1, 6 do
                
                    local j = number(i, 7)
                    
                    if i != j then
                    
                        local t = positions[i];
                        positions[i] = positions[j];
                        positions[j] = t;
                        
                    end
                    
                end 
                
                return positions
                
            end
            
            function getTimeLeft()
            
                local secondsLeft = (d.getf("time") - get_time())
                local minutesLeft = math.ceil(secondsLeft / 60)
                
                d.notice("Zbývá "..minutesLeft.." minut.")
            
            end
    	
            when logout begin
                pc.remove_item(30311, pc.count_item(30311))
                pc.remove_item(30312, pc.count_item(30312))
                pc.remove_item(30313, pc.count_item(30313))
            end
            
            
            when login begin
                if pc.get_map_index() == 213 then
                    if devilscatacomb.getLevelByCord() > 1 or not next_time_is_now() then
                    
                        pc.warp((5913)*100, (993)*100, 65) -- 5913x993  591374x
                        
                    end
                    
                    pc.set_warp_location(65, 5913, 993)
                    
                    say("V první úrovni musí vaše skupina získat Klíč krystalu duše.")
                    say("Až klíč Krystalu duše získáte, musíte najít sochu Kud, a použít")
    		say("klíč na sochu Kud.")
    				say("Poté bude vaše skupina přesunuta do další úrovně. ")
    				say("")
    				say_item_vnum(30311)
    				say("") 
                    
                elseif pc.get_map_index() >= (213 * 10000) and pc.get_map_index() <= (214 * 10000) then            
                    pc.set_warp_location(65, 5913, 993)
                end
            end
            
            
            when 20367.chat." Ďáblova katakomba" begin  --Enter the Devil Catacomb
                if pc.get_level() < 75 then
                    say_title(mob_name(npc.get_race()) ..":")
    				say("Chceš vstoupit do Ďáblovi katakomby?")
                    say("")
                    say("Jestli chceš vstoupit, tak musíš ")
                    say("mít aspoň úroveň 75.")
    				say("Vrať se, až budeš mít úroveň 75.")
                        else
                            say_title(mob_name(npc.get_race()) ..":")
                            say("Chceš vstoupit do Ďáblovi katakomby?")
                            say("")
    						say("Mohu tě teleportovat, ale ")
    						say("chci tě varovat: Už vstoupili mnoho bojovníků, ")
    						say("a ne všichni se vrátili!")
    						say("")
    						say("Chceš teleportovat?")
    						say("")
                            local s = select("Ano","Ne")
                            if s == 2 then
                                return
                            elseif s == 1 then
                                pc.warp(415300, 4209200)
                            end
                        end    
                    end    
            
            
            when kill with pc.get_map_index() == 213 and pc.countitem(30311) < 1 begin
                local rnd = number(1, 100)
                if rnd == 6 then
                    game.drop_item_with_ownership(30311, 1)
                end
            end
            
            
            when 30101.take with item.vnum == 30311 begin --Teleport to 2nd Stage with the passenger ticket
            
                if party.is_party() then
                
                    if party.is_leader() then
                        say("Portál byl otevřen.")
                        say("Můžete rychle projít!")
                        wait()
                        say("Toto je místo, kde začíná dobrodružství! Máte jen")
                        say("jednu hodinu na prozkoumání Ďáblovo katakomby.")
                        item.remove()
                        sys_log(0, "DC create try by "..pc.get_name())
                        d.join(213)
                    else
                        say("Musíš být vůdce skupiny.")
                    end
                    
                else
                    say("Bez skupiny nesmíš vstoupit.")
                end
                
            end
            
            
            when login with devilscatacomb.isInCatacomb() begin
                say("Ujisťete se, že všichni členové vaší skupiny")
                say("mají Vysušenou hlavu: ")
    	say_item_vnum(30319)
    		say("Vysušené hlavy si schovává Modrá smrt z Věže démonů. ")
    		say("Pokud máte Vysušené hlavy, musíte najít cestu do středu")
                say("úrovně, rozbíjet brány co vám stojí v cestě, a najít Želví skálu.")
    		say("Na prozkoumání celé katakomby máte 60 minut.")
    			d.spawn_mob(30103, 740, 227)
                loop_timer("item_check", 10)
                if party.is_leader() then
                    d.set_regen_file("data/dungeon/dc/dc_regen1.txt")
                    d.regen_file("data/dungeon/dc/dc_doors.txt")
                    d.setf("level", 2) 
                    server_timer("runtime", 6, pc.get_map_index())
                elseif pc.is_gm() and not party.is_party() then
                    d.set_regen_file("data/dungeon/dc/dc_regen1.txt")
                    d.regen_file("data/dungeon/dc/dc_doors.txt")
                    d.setf("level", 2)
                    server_timer("runtime", 6, pc.get_map_index())
                end
            end
            
            
            when item_check.timer with d.getf("level") == 3 begin
                if pc.countitem(30319) >= 1 then
                    say("Máte vysušenou hlavu, budete teleportováni ")
                    say("do 3. úrovně katakomby.")
                    pc.remove_item(30319, 1)
                    timer("item_check_end", 2)
                else
                    d.exit_all()
                end
            end
            
            
            when item_check_end.timer begin
                cleartimer("item_check")
            end
            
            
            when runtime.server_timer begin
                if d.select(get_server_timer_arg()) then
                    d.setf("time", get_time()+60*60*1)
                    devilscatacomb.getTimeLeft()
                    server_timer("runtime_end", 60*60, get_server_timer_arg())
                end
            end
            
            
            when runtime_end.server_timer begin
                if d.select(get_server_timer_arg()) then
                    d.notice(" Čas vypršel.")
                    d.exit_all()
                end
            end
    
            
            when 30103.click with devilscatacomb.isInCatacomb() and devilscatacomb.getLevelByCord() == 2 and npc.lock() begin
                say("Vypadá to, že na kameni je několik")
                say("míst do kterých by šla vložit vysušená hlava.")
                wait()
                say("Na kameni je vytesáno:")
                say_reward("Tento starý kámen je magický. ")
                say_reward("Při vložení vysušené hlavy od každého ")
                say_reward(" člena skupiny, tento starý kámen přenese ")
                say_reward("celou skupinu hlouběji do katakomby.")
                say_reward("Avšak každý člen musí svou vysušenou hlavu vložit ")
    	    say_reward("do kamene sám.")
    			say("")
                wait()
                local s = select("Všichni členové, vložte hlavy!", "Zatím ne.")
                if s == 2 then
                    return
                elseif s == 1 then
                    if pc.count_item(30319) >= 1 then
                        npc.purge()
                        d.setf("level", 3)
                        d.purge()
                        d.clear_regen()
                        timer("dc_jump_3", 6)
                    else
                        say("Všichni členové skupiny nemají vysušenou hlavu, ")
                        say("budete teleportováni ...")
                        pc.warp(591374, 99325, 65)
                    end
                end
            end
            
            
            when dc_jump_3.timer begin
                d.set_regen_file("data/dungeon/dc/dc_regen2.txt")
                d.notice("Na této úrovni musíte najít správný Balvan Naděje!")
                devilscatacomb.getTimeLeft()
                d.jump_all(5451, 42282)
                local positions = devilscatacomb.get3FloorStonePositions()
                for i = 1, 6 do
                    d.set_unique("fake" .. i , d.spawn_mob(8037, positions[i][1], positions[i][2]))
                end
                d.set_unique("real", d.spawn_mob(8037, positions[7][1], positions[7][2]))
                server_loop_timer('dc_stone3_update', 10, pc.get_map_index())
    
            end
            
            
            when dc_stone3_update.server_timer begin
                if d.select(get_server_timer_arg()) then
                    if not d.is_unique_dead("real") then
                        for i = 1, 6 do
                            if d.getf("fakedead" .. i) == 0 then
                                if d.unique_get_hp_perc("fake" .. i) < 30 then
                                    if not d.is_unique_dead("fake" .. i) then
                                        d.purge_unique("fake" .. i)
                                    end
                                    d.setf("fakedead" .. i, 1)
                                    d.notice("Tento balvan je falešný, hledejte dál!");
                                end
                            end
                        end
                    else
                        server_timer("dc_stone_end3", 5, get_server_timer_arg())
                        d.notice("Skupina našla správný balvan, budete teleportování dále.")
                    end
                else
                    server_timer('dc_stone3_stop_timer', 1, get_server_timer_arg())
                end
            end
    
            
            when dc_stone3_stop_timer.server_timer begin
                clear_server_timer('dc_stone3_update', get_server_timer_arg())
            end
            
            
            when dc_stone_end3.server_timer begin
                if d.select(get_server_timer_arg()) then
                    clear_server_timer('dc_stone3_update', get_server_timer_arg())
                    d.setf("level", 4)
                    d.jump_all(4347, 42810)        
                    d.clear_regen()
                    d.set_regen_file("data/dungeon/dc/dc_regen3.txt")
                    d.regen_file("data/dungeon/dc/dc_warps.txt")
                    d.spawn_mob(30104, 500, 716)
                end
            end
            
            
            when 30104.click with devilscatacomb.isInCatacomb() and devilscatacomb.getLevelByCord() == 4  and npc.lock() begin
                npc.purge()
                say_in_map(pc.get_map_index(),"Dokázali jste to! [ENTER] Toto vypadá jako výstup z bludiště! [ENTER] Budete přesunuti do 5. patra.")
                server_timer("dc4_enter", 6, pc.get_map_index())
            end
            
            
            when dc4_enter.server_timer begin
                if d.select(get_server_timer_arg()) then
                    d.jump_all(4918, 42939)
                    
                    d.set_regen_file("data/dungeon/dc/dc_regen4.txt")
                    d.spawn_mob(30102, 848, 739)
                    
                    local mob_pos = { {1006, 649}, {979, 829}, {691, 822}, {714, 653}, {848, 593} }
                    local rnd = number(1, 5)
                    d.spawn_mob(2591, mob_pos[rnd][1], mob_pos[rnd][2])
                    
                    server_timer("dc4_message", 3, get_server_timer_arg())
                end
            end
            
            
            when dc4_message.server_timer begin
                if d.select(get_server_timer_arg()) then
                    d.notice("Na této úrovni musíte najít Šklebící se totem. Schovává ho u sebe Král Azachiel.")
                    devilscatacomb.getTimeLeft()
                end
            end
            
            
            when 30102.take with item.vnum == 30312 begin
    			say("Našli jste Šklebící se totem.")
                say("Budete přesunuti na další úroveň!")
    			say("")
    			wait()
    			say("Dobrá práce!")
                item.remove()
    			npc.purge()
                d.clear_regen()
                timer("dc_level_5", 6)
            end
            
            
            when dc_level_5.timer begin
                d.jump_all(5312, 42799)
                timer("dc_level_5_start", 5)
            end
            
            
            when dc_level_5_start.timer begin
                d.setf("level", 5)
                d.notice("Poražte Charona!")
                devilscatacomb.getTimeLeft()
                d.regen_file("data/dungeon/dc/dc_regen5.txt")
                d.spawn_mob(2597, 1301, 699)
            end
            
            
            when kill begin
                if devilscatacomb.isInCatacomb() then
                    if npc.race == 2597 then
                        if d.count_monster() < 1000 then
                            d.setf("level", 6)
                            d.clear_regen()
                            timer("dc_level_5_end", 12)
                        else
                            if d.getf("charon_spawns") < 4 then
                                d.spawn_mob(2597, 1301, 699)
                                d.setf("charon_spawns", d.getf("charon_spawns") + 1)
                            else
                                d.notice("Bohužel se vám nepodařilo zabít Charona.")
                                d.notice("Budete teleportováni.")
                                local nextTime=get_time()+time_min_to_sec(1)
                                d.setqf("__NEXT_TIME__", nextTime)
                                d.exit_all()
                            end
                        end
                    end
                    
                    
                    if npc.race == 2591 then
                        game.drop_item_with_ownership(30312, 1)
                    end
                end
            end
            
            when 2598.kill with pc.in_dungeon() begin
                clear_server_timer("runtime", get_server_timer_arg())
                clear_server_timer("runtime_end", get_server_timer_arg())
                        notice_all("Skupina hráče "..pc.get_name().." zabila Azraela!")
    		            local text = "Azrael byl poražen. Za 60 sekund budete teleportováni."
                --d.spawn_mob(9012, 74, 1159) 
                say_in_map(pc.get_map_index(), text)
                        timer("glory_message", 60)
            end        
    
            when dc_level_5_end.timer begin
    	    d.setf("level", 6)
                say_in_map(pc.get_map_index(),"Podařilo se vám zabít Charona.[ENTER]Budete teleportování na poslední úroveň katakomby.")
                timer("dc_level_6", 3)
            end
            
            
            when dc_level_6.timer begin
                d.jump_all(4145, 43187)
                timer("dc_level_6_into", 3)
            end
            
            when dc_level_6_into.timer begin
                d.regen_file("data/dungeon/dc/dc_regen6.txt")
                d.spawn_mob(2598, 74, 1103)
                d.notice("Poražte Azraela!")
            end
            
            when glory_message.timer begin
                --local text = "Azrael byl poražen. Můžete se teleportovat."
                --d.spawn_mob(9012, 74, 1159) 
                --say_in_map(pc.get_map_index(), text)
                local nextTime=get_time()+time_min_to_sec(1)
                d.setqf("__NEXT_TIME__", nextTime)
                d.exit_all()
                --timer("dc_end", 60) 
            end
            
            
            when dc_end.timer begin
                local nextTime=get_time()+time_min_to_sec(1)
                d.setqf("__NEXT_TIME__", nextTime)
                d.exit_all()
                return
            end
        end
    end
  7. quest block_warpscroll begin
    	state start begin
    		when click with item.vnum >= 22000 and item.vnum <= 22050 begin
    			if(item.get_sub_type() >= 3) then
    				local index = {1,21,41}
    				for i = 1,table.getn(index),1 do
    					if(pc.get_map_index() >= index[i]) then
    						syschat("You can't use to this warp scroll on this map..")
    						return
    					end
    				end
    			end
    		end
    	end
    end

    Best Regards

    Ellie

     

    Thanks :)

  8.  

    At 2089 you can do it via quest

    when login begin
    	local indexes = {1,21,41} --map indexes
    	for x = 1,table.getn(indexes),1 do
    		if pc.get_map_index() == indexes[i] then warp_to_village() end
    	end
    end

    Thanks, but i need block only warp using warp-scroll, this quest will warp player everytime when he login (relog, respawn in town, warp by NPC)

     

    Again, sorry for my english, and thanks.

  9.  

    You should be look at char_item.cpp and search this ; 

    					case USE_TALISMAN:

    For block ;

    							// gm_guild_build, oxevent ¸Ê¿¡¼­ ±ÍȯºÎ ±Íȯ±â¾ïºÎ ¸¦ »ç¿ë¸øÇÏ°Ô ¸·À½
    							if (GetMapIndex() == 200 || GetMapIndex() == 113 || GetMapIndex() == newMapIndex)
    							{
    								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÇöÀç À§Ä¡¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."));
    								return false;
    							}

    Best Regards

    Ellie

    Thanks

     

    Is there solution for rev. 2089? I'm planning 40k core for my root server, but i need block warp scrolls quickly on some maps. Preparing 40k core takes weeks/months...

     

    Thanks, and sorry for my english.

  10. You should be look at char_item.cpp and search this ; 

    					case USE_TALISMAN:

    For block ;

    							// gm_guild_build, oxevent ¸Ê¿¡¼­ ±ÍȯºÎ ±Íȯ±â¾ïºÎ ¸¦ »ç¿ë¸øÇÏ°Ô ¸·À½
    							if (GetMapIndex() == 200 || GetMapIndex() == 113 || GetMapIndex() == newMapIndex)
    							{
    								ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÇöÀç À§Ä¡¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."));
    								return false;
    							}

    Best Regards

    Ellie

    Thanks

  11. Hi, i'm working on pvp system for my root server, and i need 1 quest function.

    For example:
    Player1 kills Player2, and i need get name of both players, so for Player1 i'll use pc.get_name, but i don't know how to get Player2 name.

    For example:
    notice_in_map("Player "..pc.get_name().." kills "..player2name.."")


    Thanks, and sorry for my english.

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.