SINVAL o.O 728 Posted June 20, 2013 Olá Pessoal Sistema Oficial Crafting para compartilhar hoje Print: Download VT Bem vamos lá: Add game.py self.interface.OpenCubeWindow()if npcVNUM not in self.cubeInformation:net.SendChatPacket("/cube r_info")else:cubeInfoList = self.cubeInformation[npcVNUM]i = 0for cubeInfo in cubeInfoList:self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"])j = 0for materialList in cubeInfo["materialList"]:for materialInfo in materialList:itemVnum, itemCount = materialInfoself.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount)j = j + 1i = i + 1self.interface.wndCube.Refresh()def BINARY_Cube_Close(self):self.interface.CloseCubeWindow()# Á¦ÀÛ¿¡ ÇÊ¿äÇÑ °ñµå, ¿¹»óµÇ´Â ¿Ï¼ºÇ°ÀÇ VNUM°ú °³¼ö Á¤º¸ updatedef BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):self.interface.UpdateCubeInfo(gold, itemVnum, count)def BINARY_Cube_Succeed(self, itemVnum, count):print "Å¥ºê Á¦ÀÛ ¼º°ø"self.interface.SucceedCubeWork(itemVnum, count)passdef BINARY_Cube_Failed(self):print "Å¥ºê Á¦ÀÛ ½ÇÆĞ"self.interface.FailedCubeWork()passdef BINARY_Cube_ResultList(self, npcVNUM, listText):# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀÚ·Î ±¸ºĞµÈ ¸®½ºÆ®¸¦ ÁÜ#print listTextif npcVNUM == 0:npcVNUM = self.currentCubeNPCself.cubeInformation[npcVNUM] = []try:for eachInfoText in listText.split("/"):eachInfo = eachInfoText.split(",")itemVnum = int(eachInfo[0])itemCount = int(eachInfo[1])self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount})self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount)resultCount = len(self.cubeInformation[npcVNUM])requestCount = 7modCount = resultCount % requestCountsplitCount = resultCount / requestCountfor i in xrange(splitCount):#print("/cube r_info %d %d" % (i * requestCount, requestCount))net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount))if 0 &--#60; modCount:#print("/cube r_info %d %d" % (splitCount * requestCount, modCount))net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount))except RuntimeError, msg:dbg.TraceError(msg)return 0passdef BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText):# Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000try:#print listTextif 3 &--#62; len(listText):dbg.TraceError("Wrong Cube Material Infomation")return 0eachResultList = listText.split("@")cubeInfo = self.cubeInformation[self.currentCubeNPC]itemIndex = 0for eachResultText in eachResultList:cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []]materialList = cubeInfo[startIndex + itemIndex]["materialList"]gold = 0splitResult = eachResultText.split("/")if 1 &--#60; len(splitResult):gold = int(splitResult[1])#print "splitResult : ", splitResulteachMaterialList = splitResult[0].split("&")i = 0for eachMaterialText in eachMaterialList:complicatedList = eachMaterialText.split("|")if 0 &--#60; len(complicatedList):for complicatedText in complicatedList:(itemVnum, itemCount) = complicatedText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))else:itemVnum, itemCount = eachMaterialText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))i = i + 1itemIndex = itemIndex + 1self.interface.wndCube.Refresh()except RuntimeError, msg:dbg.TraceError(msg)return 0pass# END_OF_CUBE# ¿ëÈ¥¼®def BINARY_Highlight_Item(self, inven_type, inven_pos):self.interface.Highligt_Item(inven_type, inven_pos)def BINARY_DragonSoulGiveQuilification(self):self.interface.DragonSoulGiveQuilification()def BINARY_DragonSoulRefineWindow_Open(self):self.interface.OpenDragonSoulRefineWindow()def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)# END of DRAGON SOUL REFINE WINDOWself.interface.OpenCubeWindow()if npcVNUM not in self.cubeInformation:net.SendChatPacket("/cube r_info")else:cubeInfoList = self.cubeInformation[npcVNUM]i = 0for cubeInfo in cubeInfoList:self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"])j = 0for materialList in cubeInfo["materialList"]:for materialInfo in materialList:itemVnum, itemCount = materialInfoself.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount)j = j + 1i = i + 1self.interface.wndCube.Refresh()def BINARY_Cube_Close(self):self.interface.CloseCubeWindow()# Á¦ÀÛ¿¡ ÇÊ¿äÇÑ °ñµå, ¿¹»óµÇ´Â ¿Ï¼ºÇ°ÀÇ VNUM°ú °³¼ö Á¤º¸ updatedef BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):self.interface.UpdateCubeInfo(gold, itemVnum, count)def BINARY_Cube_Succeed(self, itemVnum, count):print "Å¥ºê Á¦ÀÛ ¼º°ø"self.interface.SucceedCubeWork(itemVnum, count)passdef BINARY_Cube_Failed(self):print "Å¥ºê Á¦ÀÛ ½ÇÆĞ"self.interface.FailedCubeWork()passdef BINARY_Cube_ResultList(self, npcVNUM, listText):# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀÚ·Î ±¸ºĞµÈ ¸®½ºÆ®¸¦ ÁÜ#print listTextif npcVNUM == 0:npcVNUM = self.currentCubeNPCself.cubeInformation[npcVNUM] = []try:for eachInfoText in listText.split("/"):eachInfo = eachInfoText.split(",")itemVnum = int(eachInfo[0])itemCount = int(eachInfo[1])self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount})self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount)resultCount = len(self.cubeInformation[npcVNUM])requestCount = 7modCount = resultCount % requestCountsplitCount = resultCount / requestCountfor i in xrange(splitCount):#print("/cube r_info %d %d" % (i * requestCount, requestCount))net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount))if 0 &--#60; modCount:#print("/cube r_info %d %d" % (splitCount * requestCount, modCount))net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount))except RuntimeError, msg:dbg.TraceError(msg)return 0passdef BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText):# Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000try:#print listTextif 3 &--#62; len(listText):dbg.TraceError("Wrong Cube Material Infomation")return 0eachResultList = listText.split("@")cubeInfo = self.cubeInformation[self.currentCubeNPC]itemIndex = 0for eachResultText in eachResultList:cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []]materialList = cubeInfo[startIndex + itemIndex]["materialList"]gold = 0splitResult = eachResultText.split("/")if 1 &--#60; len(splitResult):gold = int(splitResult[1])#print "splitResult : ", splitResulteachMaterialList = splitResult[0].split("&")i = 0for eachMaterialText in eachMaterialList:complicatedList = eachMaterialText.split("|")if 0 &--#60; len(complicatedList):for complicatedText in complicatedList:(itemVnum, itemCount) = complicatedText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))else:itemVnum, itemCount = eachMaterialText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))i = i + 1itemIndex = itemIndex + 1self.interface.wndCube.Refresh()except RuntimeError, msg:dbg.TraceError(msg)return 0pass# END_OF_CUBE# ¿ëÈ¥¼®def BINARY_Highlight_Item(self, inven_type, inven_pos):self.interface.Highligt_Item(inven_type, inven_pos)def BINARY_DragonSoulGiveQuilification(self):self.interface.DragonSoulGiveQuilification()def BINARY_DragonSoulRefineWindow_Open(self):self.interface.OpenDragonSoulRefineWindow()def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)# END of DRAGON SOUL REFINE WINDOWself.interface.OpenCubeWindow()if npcVNUM not in self.cubeInformation:net.SendChatPacket("/cube r_info")else:cubeInfoList = self.cubeInformation[npcVNUM]i = 0for cubeInfo in cubeInfoList:self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"])j = 0for materialList in cubeInfo["materialList"]:for materialInfo in materialList:itemVnum, itemCount = materialInfoself.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount)j = j + 1i = i + 1self.interface.wndCube.Refresh()def BINARY_Cube_Close(self):self.interface.CloseCubeWindow()# Á¦ÀÛ¿¡ ÇÊ¿äÇÑ °ñµå, ¿¹»óµÇ´Â ¿Ï¼ºÇ°ÀÇ VNUM°ú °³¼ö Á¤º¸ updatedef BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):self.interface.UpdateCubeInfo(gold, itemVnum, count)def BINARY_Cube_Succeed(self, itemVnum, count):print "Å¥ºê Á¦ÀÛ ¼º°ø"self.interface.SucceedCubeWork(itemVnum, count)passdef BINARY_Cube_Failed(self):print "Å¥ºê Á¦ÀÛ ½ÇÆĞ"self.interface.FailedCubeWork()passdef BINARY_Cube_ResultList(self, npcVNUM, listText):# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀÚ·Î ±¸ºĞµÈ ¸®½ºÆ®¸¦ ÁÜ#print listTextif npcVNUM == 0:npcVNUM = self.currentCubeNPCself.cubeInformation[npcVNUM] = []try:for eachInfoText in listText.split("/"):eachInfo = eachInfoText.split(",")itemVnum = int(eachInfo[0])itemCount = int(eachInfo[1])self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount})self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount)resultCount = len(self.cubeInformation[npcVNUM])requestCount = 7modCount = resultCount % requestCountsplitCount = resultCount / requestCountfor i in xrange(splitCount):#print("/cube r_info %d %d" % (i * requestCount, requestCount))net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount))if 0 &--#60; modCount:#print("/cube r_info %d %d" % (splitCount * requestCount, modCount))net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount))except RuntimeError, msg:dbg.TraceError(msg)return 0passdef BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText):# Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000try:#print listTextif 3 &--#62; len(listText):dbg.TraceError("Wrong Cube Material Infomation")return 0eachResultList = listText.split("@")cubeInfo = self.cubeInformation[self.currentCubeNPC]itemIndex = 0for eachResultText in eachResultList:cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []]materialList = cubeInfo[startIndex + itemIndex]["materialList"]gold = 0splitResult = eachResultText.split("/")if 1 &--#60; len(splitResult):gold = int(splitResult[1])#print "splitResult : ", splitResulteachMaterialList = splitResult[0].split("&")i = 0for eachMaterialText in eachMaterialList:complicatedList = eachMaterialText.split("|")if 0 &--#60; len(complicatedList):for complicatedText in complicatedList:(itemVnum, itemCount) = complicatedText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))else:itemVnum, itemCount = eachMaterialText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))i = i + 1itemIndex = itemIndex + 1self.interface.wndCube.Refresh()except RuntimeError, msg:dbg.TraceError(msg)return 0pass# END_OF_CUBE# ¿ëÈ¥¼®def BINARY_Highlight_Item(self, inven_type, inven_pos):self.interface.Highligt_Item(inven_type, inven_pos)def BINARY_DragonSoulGiveQuilification(self):self.interface.DragonSoulGiveQuilification()def BINARY_DragonSoulRefineWindow_Open(self):self.interface.OpenDragonSoulRefineWindow()def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)# END of DRAGON SOUL REFINE WINDOWself.interface.OpenCubeWindow()if npcVNUM not in self.cubeInformation:net.SendChatPacket("/cube r_info")else:cubeInfoList = self.cubeInformation[npcVNUM]i = 0for cubeInfo in cubeInfoList:self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"])j = 0for materialList in cubeInfo["materialList"]:for materialInfo in materialList:itemVnum, itemCount = materialInfoself.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount)j = j + 1i = i + 1self.interface.wndCube.Refresh()def BINARY_Cube_Close(self):self.interface.CloseCubeWindow()# Á¦ÀÛ¿¡ ÇÊ¿äÇÑ °ñµå, ¿¹»óµÇ´Â ¿Ï¼ºÇ°ÀÇ VNUM°ú °³¼ö Á¤º¸ updatedef BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):self.interface.UpdateCubeInfo(gold, itemVnum, count)def BINARY_Cube_Succeed(self, itemVnum, count):print "Å¥ºê Á¦ÀÛ ¼º°ø"self.interface.SucceedCubeWork(itemVnum, count)passdef BINARY_Cube_Failed(self):print "Å¥ºê Á¦ÀÛ ½ÇÆĞ"self.interface.FailedCubeWork()passdef BINARY_Cube_ResultList(self, npcVNUM, listText):# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀÚ·Î ±¸ºĞµÈ ¸®½ºÆ®¸¦ ÁÜ#print listTextif npcVNUM == 0:npcVNUM = self.currentCubeNPCself.cubeInformation[npcVNUM] = []try:for eachInfoText in listText.split("/"):eachInfo = eachInfoText.split(",")itemVnum = int(eachInfo[0])itemCount = int(eachInfo[1])self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount})self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount)resultCount = len(self.cubeInformation[npcVNUM])requestCount = 7modCount = resultCount % requestCountsplitCount = resultCount / requestCountfor i in xrange(splitCount):#print("/cube r_info %d %d" % (i * requestCount, requestCount))net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount))if 0 &--#60; modCount:#print("/cube r_info %d %d" % (splitCount * requestCount, modCount))net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount))except RuntimeError, msg:dbg.TraceError(msg)return 0passdef BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText):# Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000try:#print listTextif 3 &--#62; len(listText):dbg.TraceError("Wrong Cube Material Infomation")return 0eachResultList = listText.split("@")cubeInfo = self.cubeInformation[self.currentCubeNPC]itemIndex = 0for eachResultText in eachResultList:cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []]materialList = cubeInfo[startIndex + itemIndex]["materialList"]gold = 0splitResult = eachResultText.split("/")if 1 &--#60; len(splitResult):gold = int(splitResult[1])#print "splitResult : ", splitResulteachMaterialList = splitResult[0].split("&")i = 0for eachMaterialText in eachMaterialList:complicatedList = eachMaterialText.split("|")if 0 &--#60; len(complicatedList):for complicatedText in complicatedList:(itemVnum, itemCount) = complicatedText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))else:itemVnum, itemCount = eachMaterialText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))i = i + 1itemIndex = itemIndex + 1self.interface.wndCube.Refresh()except RuntimeError, msg:dbg.TraceError(msg)return 0pass# END_OF_CUBE# ¿ëÈ¥¼®def BINARY_Highlight_Item(self, inven_type, inven_pos):self.interface.Highligt_Item(inven_type, inven_pos)def BINARY_DragonSoulGiveQuilification(self):self.interface.DragonSoulGiveQuilification()def BINARY_DragonSoulRefineWindow_Open(self):self.interface.OpenDragonSoulRefineWindow()def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)# END of DRAGON SOUL REFINE WINDOWself.interface.OpenCubeWindow()if npcVNUM not in self.cubeInformation:net.SendChatPacket("/cube r_info")else:cubeInfoList = self.cubeInformation[npcVNUM]i = 0for cubeInfo in cubeInfoList:self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"])j = 0for materialList in cubeInfo["materialList"]:for materialInfo in materialList:itemVnum, itemCount = materialInfoself.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount)j = j + 1i = i + 1self.interface.wndCube.Refresh()def BINARY_Cube_Close(self):self.interface.CloseCubeWindow()# Á¦ÀÛ¿¡ ÇÊ¿äÇÑ °ñµå, ¿¹»óµÇ´Â ¿Ï¼ºÇ°ÀÇ VNUM°ú °³¼ö Á¤º¸ updatedef BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):self.interface.UpdateCubeInfo(gold, itemVnum, count)def BINARY_Cube_Succeed(self, itemVnum, count):print "Å¥ºê Á¦ÀÛ ¼º°ø"self.interface.SucceedCubeWork(itemVnum, count)passdef BINARY_Cube_Failed(self):print "Å¥ºê Á¦ÀÛ ½ÇÆĞ"self.interface.FailedCubeWork()passdef BINARY_Cube_ResultList(self, npcVNUM, listText):# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀÚ·Î ±¸ºĞµÈ ¸®½ºÆ®¸¦ ÁÜ#print listTextif npcVNUM == 0:npcVNUM = self.currentCubeNPCself.cubeInformation[npcVNUM] = []try:for eachInfoText in listText.split("/"):eachInfo = eachInfoText.split(",")itemVnum = int(eachInfo[0])itemCount = int(eachInfo[1])self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount})self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount)resultCount = len(self.cubeInformation[npcVNUM])requestCount = 7modCount = resultCount % requestCountsplitCount = resultCount / requestCountfor i in xrange(splitCount):#print("/cube r_info %d %d" % (i * requestCount, requestCount))net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount))if 0 &--#60; modCount:#print("/cube r_info %d %d" % (splitCount * requestCount, modCount))net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount))except RuntimeError, msg:dbg.TraceError(msg)return 0passdef BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText):# Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000try:#print listTextif 3 &--#62; len(listText):dbg.TraceError("Wrong Cube Material Infomation")return 0eachResultList = listText.split("@")cubeInfo = self.cubeInformation[self.currentCubeNPC]itemIndex = 0for eachResultText in eachResultList:cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []]materialList = cubeInfo[startIndex + itemIndex]["materialList"]gold = 0splitResult = eachResultText.split("/")if 1 &--#60; len(splitResult):gold = int(splitResult[1])#print "splitResult : ", splitResulteachMaterialList = splitResult[0].split("&")i = 0for eachMaterialText in eachMaterialList:complicatedList = eachMaterialText.split("|")if 0 &--#60; len(complicatedList):for complicatedText in complicatedList:(itemVnum, itemCount) = complicatedText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))else:itemVnum, itemCount = eachMaterialText.split(",")itemVnum = int(itemVnum)itemCount = int(itemCount)self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)materialList[i].append((itemVnum, itemCount))i = i + 1itemIndex = itemIndex + 1self.interface.wndCube.Refresh()except RuntimeError, msg:dbg.TraceError(msg)return 0pass# END_OF_CUBE# ¿ëÈ¥¼®def BINARY_Highlight_Item(self, inven_type, inven_pos):self.interface.Highligt_Item(inven_type, inven_pos)def BINARY_DragonSoulGiveQuilification(self):self.interface.DragonSoulGiveQuilification()def BINARY_DragonSoulRefineWindow_Open(self):self.interface.OpenDragonSoulRefineWindow()def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)# END of DRAGON SOUL REFINE WINDOW dragon_soul_refine_settings.py import itemdefault_grade_need_count = [15, 10, 5, 3]default_grade_fee = [30000, 50000, 70000, 100000]default_step_need_count = [4, 3, 2, 1]default_step_fee = [20000, 30000, 40000, 50000]strength_fee = {item.MATERIAL_DS_REFINE_NORMAL : 10000,item.MATERIAL_DS_REFINE_BLESSED : 20000,item.MATERIAL_DS_REFINE_HOLLY : 30000,}# °*È*°¡ ¾î´À ´Ü°è ±îÁö °¡´É ÇÑÁö# table(GRADE, STEP) = max strength.default_strength_max_table = [[2, 2, 3, 3, 4],[3, 3, 3, 4, 4],[4, 4, 4, 4, 4],[4, 4, 4, 4, 5],[4, 4, 4, 5, 6],]# ÀÏ´Ü ±âȹÀûÀ¸·Î´Â strength °*È*ÀÇ °æ¿ì, °*È*¼®¿¡ ÀÇÇØ fee°¡ ¼ÂÆõDZ⠶§¹®¿¡,# dragon_soul_refine_info¿¡ ³ÖÁö ¾Ê¾Ò´Ù.# (°*È*¼®¸¸ ³Ö¾îµµ ¾ó¸¶ ÇÊ¿äÇÑÁö º¸ÀÏ ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ)# ´Ù¸¸ ¼*¹ö¿¡¼*´Â ¿ëÈ¥¼® ŸÀÔ º°·Î °*È*¼® fee¸¦ ¼ÂÆÃÇÒ ¼ö ÀÖµµ·Ï Çسù±â ¶§¹®¿¡,# ¸¸ÀÏ ¿ëÈ¥¼® º°·Î °*È*¼® fee¸¦ ´Ù¸£°Ô ÇÏ°í ½Í´Ù¸é,# Ŭ¶ó Äڵ带 ¼öÁ¤ÇؾßÇÒ °ÍÀÌ´Ù.default_refine_info = {"grade_need_count" : default_grade_need_count,"grade_fee" : default_grade_fee,"step_need_count" : default_step_need_count,"step_fee" : default_step_fee,"strength_max_table" : default_strength_max_table,}dragon_soul_refine_info = {11 : default_refine_info,12 : default_refine_info,13 : default_refine_info,14 : default_refine_info,15 : default_refine_info,16 : default_refine_info,} locale/de/ui dragonsoulrefinewindow.py import localeimport uiScriptLocalewindow = {"name" : "DragonSoulRefineWindow",## ¿ëÈ¥¼® â ¹Ù·Î ¿ŞÂÊ"x" : SCREEN_WIDTH - 176 - 287 - 10 - 287,"y" : SCREEN_HEIGHT - 37 - 505,"style" : ("movable", "float",),"width" : 287,"height" : 232,"children" :({"name" : "board","type" : "board","style" : ("attach",),"x" : 0,"y" : 0,"width" : 287,"height" : 232,"children" :(## Base BackGroud Image{"name" : "DragonSoulRefineWindowBaseImage","type" : "expanded_image","x" : 0,"y" : 0,"image" : "d:/ymir work/ui/dragonsoul/dragon_soul_refine_bg.tga",},## Title{"name" : "TitleBar","type" : "titlebar","style" : ("attach",),"x" : 5,"y" : 7,"width" : 275,"color" : "yellow","children" :({"name":"TitleName","type":"text","x":140,"y":5,"text":uiScriptLocale.DRAGONSOUL_REFINE_WINDOW_TITLE,"text_horizontal_align":"center"},),},## Refine Slot{"name" : "RefineSlot","type" : "grid_table","image" : "d:/ymir work/ui/dragonsoul/cap.tga","x" : 15,"y" : 39,"start_index" : 0,"x_count" : 5,"y_count" : 3,"x_step" : 32,"y_step" : 32,},## Result Slot{"name" : "ResultSlot","type" : "grid_table","x" : 207,"y" : 39,"start_index" : 0,"x_count" : 2,"y_count" : 3,"x_step" : 32,"y_step" : 32,},## Grade Button{"name" : "GradeButton","type" : "toggle_button","x" : 36,"y" : 148,"default_image" : "d:/ymir work/ui/dragonsoul/button_01.tga","over_image" : "d:/ymir work/ui/dragonsoul/button_02.tga","down_image" : "d:/ymir work/ui/dragonsoul/button_03.tga","children" :({"name" : "GradeSlotTitle","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.GRADE_SELECT,"color" : 0xFFF1E6C0,},),},## Step Button{"name" : "StepButton","type" : "toggle_button","x" : 118,"y" : 148,"default_image" : "d:/ymir work/ui/dragonsoul/button_01.tga","over_image" : "d:/ymir work/ui/dragonsoul/button_02.tga","down_image" : "d:/ymir work/ui/dragonsoul/button_03.tga","children" :({"name" : "StepSlotTitle","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.STEP_SELECT,"color" : 0xFFF1E6C0,},),},## Refine Button{"name" : "StrengthButton","type" : "toggle_button","x" : 198,"y" : 148,"default_image" : "d:/ymir work/ui/dragonsoul/button_01.tga","over_image" : "d:/ymir work/ui/dragonsoul/button_02.tga","down_image" : "d:/ymir work/ui/dragonsoul/button_03.tga","children" :({"name" : "RefineSlotTitle","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.STRENGTH_SELECT,"color" : 0xFFF1E6C0,},),},## Money Print{"name":"Money_Slot","type" : "text","x":35,"y":180,"horizontal_align" : "right","text_horizontal_align" : "right","text" : "123456789",},## Do Refine Button{"name" : "DoRefineButton","type" : "button","x" : 188,"y" : 200,"default_image" : "d:/ymir work/ui/dragonsoul/l_button01.tga","over_image" : "d:/ymir work/ui/dragonsoul/l_button02.tga","down_image" : "d:/ymir work/ui/dragonsoul/l_button03.tga","children" :({"name" : "DoRefineButtonTitle","type" : "text","x" : 0,"y" : 0,"text" : uiScriptLocale.DO_REFINE,"all_align" : "center",},),},),},),} locale/de/ui dragonsoulwindow.py import uiScriptLocaleimport playerwindow = {"name" : "InventoryWindow",## 600 - (width + ¿À¸¥ÂÊÀ¸·Î ºÎÅÍ ¶ç¿ì±â 24 px)"x" : SCREEN_WIDTH - 176 - 287 - 10,"y" : SCREEN_HEIGHT - 37 - 505,"style" : ("movable", "float",),"width" : 287,"height" : 505,"children" :({"name" : "board","type" : "board","style" : ("attach",),"x" : 0,"y" : 0,"width" : 287,"height" : 505,"children" :(## Equipment Slot{"name" : "Equipment_Base","type" : "expanded_image","x" : 0,"y" : 0,"image" : "d:/ymir work/ui/dragonsoul/dragon_soul_bg.tga",},{"name" : "Inventory_Tab_01","type" : "radio_button","x" : 16,"y" : 332,"default_image" : "d:/ymir work/ui/dragonsoul/s_button01.tga","over_image" : "d:/ymir work/ui/dragonsoul/s_button02.tga","down_image" : "d:/ymir work/ui/dragonsoul/s_button03.tga","children" :({"name" : "Inventory_Tab_01_Print","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.DRAGONSOUL_PAGE_BUTTON_1,"color" : 0xFFF1E6C0,},),},{"name" : "Inventory_Tab_02","type" : "radio_button","x" : 67,"y" : 332,"default_image" : "d:/ymir work/ui/dragonsoul/s_button01.tga","over_image" : "d:/ymir work/ui/dragonsoul/s_button02.tga","down_image" : "d:/ymir work/ui/dragonsoul/s_button03.tga","children" :({"name" : "Inventory_Tab_02_Print","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.DRAGONSOUL_PAGE_BUTTON_2,"color" : 0xFFF1E6C0,},),},{"name" : "Inventory_Tab_03","type" : "radio_button","x" : 118,"y" : 332,"default_image" : "d:/ymir work/ui/dragonsoul/s_button01.tga","over_image" : "d:/ymir work/ui/dragonsoul/s_button02.tga","down_image" : "d:/ymir work/ui/dragonsoul/s_button03.tga","children" :({"name" : "Inventory_Tab_03_Print","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.DRAGONSOUL_PAGE_BUTTON_3,"color" : 0xFFF1E6C0,},),},{"name" : "Inventory_Tab_04","type" : "radio_button","x" : 169,"y" : 332,"default_image" : "d:/ymir work/ui/dragonsoul/s_button01.tga","over_image" : "d:/ymir work/ui/dragonsoul/s_button02.tga","down_image" : "d:/ymir work/ui/dragonsoul/s_button03.tga","children" :({"name" : "Inventory_Tab_04_Print","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.DRAGONSOUL_PAGE_BUTTON_4,"color" : 0xFFF1E6C0,},),},{"name" : "Inventory_Tab_05","type" : "radio_button","x" : 220,"y" : 332,"default_image" : "d:/ymir work/ui/dragonsoul/s_button01.tga","over_image" : "d:/ymir work/ui/dragonsoul/s_button02.tga","down_image" : "d:/ymir work/ui/dragonsoul/s_button03.tga","children" :({"name" : "Inventory_Tab_05_Print","type" : "text","x" : 0,"y" : 0,"all_align" : "center","text" : uiScriptLocale.DRAGONSOUL_PAGE_BUTTON_5,"color" : 0xFFF1E6C0,},),},## Item Slot{"name" : "ItemSlot","type" : "grid_table","x" : 15,"y" : 355,"start_index" : 0,"x_count" : 8,"y_count" : 4,"x_step" : 32,"y_step" : 32,#"image" : "d:/ymir work/ui/public/Slot_Base.sub"},{"name" : "EquipmentSlot","type" : "slot","x" : 0,"y" : 0,"width" : 287,"height" : 280,"slot" : ({"index":player.DRAGON_SOUL_EQUIPMENT_SLOT_START+0, "x":128, "y":53, "width":32, "height":32},{"index":player.DRAGON_SOUL_EQUIPMENT_SLOT_START+1, "x":59, "y":93, "width":32, "height":32},{"index":player.DRAGON_SOUL_EQUIPMENT_SLOT_START+2, "x":59, "y":179, "width":32, "height":32},{"index":player.DRAGON_SOUL_EQUIPMENT_SLOT_START+3, "x":128, "y":219, "width":32, "height":32},{"index":player.DRAGON_SOUL_EQUIPMENT_SLOT_START+4, "x":194, "y":179, "width":32, "height":32},{"index":player.DRAGON_SOUL_EQUIPMENT_SLOT_START+5, "x":194, "y":93, "width":32, "height":32},),},{"name" : "deck1","type" : "toggle_button","x" : 21,"y" : 230,"default_image" : "d:/ymir work/ui/dragonsoul/deck1_1.tga","over_image" : "d:/ymir work/ui/dragonsoul/deck1_2.tga","down_image" : "d:/ymir work/ui/dragonsoul/deck1_3.tga",},{"name" : "deck2","type" : "toggle_button","x" : 234,"y" : 230,"default_image" : "d:/ymir work/ui/dragonsoul/deck2_1.tga","over_image" : "d:/ymir work/ui/dragonsoul/deck2_2.tga","down_image" : "d:/ymir work/ui/dragonsoul/deck2_3.tga",},## Title{"name" : "TitleBar","type" : "titlebar","style" : ("attach",),"x" : 8,"y" : 7,"width" : 271,"color" : "yellow","children" :({ "name":"TitleName", "type":"text", "x":130, "y":3, "text":uiScriptLocale.DRAGONSOUL_TITLE, "text_horizontal_align":"center" },),},## Tab Area{"name" : "TabControl","type" : "window","x" : 10,"y" : 279,"width" : 267,"height" : 30,"children" :(## Tab{"name" : "Tab_01","type" : "expanded_image","x" : 0,"y" : 0,"width" : 267,"height" : 30,"image" : "d:/ymir work/ui/dragonsoul/tap01.tga",},{"name" : "Tab_02","type" : "expanded_image","x" : 0,"y" : 0,"width" : 267,"height" : 30,"image" : "d:/ymir work/ui/dragonsoul/tap02.tga",},{"name" : "Tab_03","type" : "expanded_image","x" : 0,"y" : 0,"width" : 267,"height" : 30,"image" : "d:/ymir work/ui/dragonsoul/tap03.tga",},{"name" : "Tab_04","type" : "expanded_image","x" : 0,"y" : 0,"width" : 267,"height" : 30,"image" : "d:/ymir work/ui/dragonsoul/tap04.tga",},{"name" : "Tab_05","type" : "expanded_image","x" : 0,"y" : 0,"width" : 267,"height" : 30,"image" : "d:/ymir work/ui/dragonsoul/tap05.tga",},{"name" : "Tab_06","type" : "expanded_image","x" : 0,"y" : 0,"width" : 267,"height" : 30,"image" : "d:/ymir work/ui/dragonsoul/tap06.tga",},## RadioButton{"name" : "Tab_Button_01","type" : "radio_button","x" : 2,"y" : 2,"width" : 36,"height" : 27,},{"name" : "Tab_Button_02","type" : "radio_button","x" : 42,"y" : 2,"width" : 36,"height" : 27,},{"name" : "Tab_Button_03","type" : "radio_button","x" : 82,"y" : 2,"width" : 36,"height" : 27,},{"name" : "Tab_Button_04","type" : "radio_button","x" : 122,"y" : 2,"width" : 36,"height" : 27,},{"name" : "Tab_Button_05","type" : "radio_button","x" : 162,"y" : 2,"width" : 36,"height" : 27,},{"name" : "Tab_Button_06","type" : "radio_button","x" : 202,"y" : 2,"width" : 36,"height" : 27,},),},{"name" : "tab_text_area","type" : "text","x" : 18,"y" : 315,"text" : uiScriptLocale.DRAGONSOUL_TAP_TITLE_1,"color" : 0xFFC0C0C0,},{"name" : "activate","type" : "toggle_button","x" : 217,"y" : 492,"text" : uiScriptLocale.DRAGONSOUL_ACTIVATE,"default_image" : "d:/ymir work/ui/dragonsoul/m_button01.tga","over_image" : "d:/ymir work/ui/dragonsoul/m_button02.tga","down_image" : "d:/ymir work/ui/dragonsoul/m_button03.tga",},),},),} root uidragonsoul.py import uiimport playerimport mouseModuleimport netimport appimport sndimport itemimport chatimport grpimport uiScriptLocaleimport uiRefineimport uiAttachMetinimport uiPickMoneyimport uiCommonimport uiPrivateShopBuilderimport localeimport constInfoimport imeimport uiInventoryimport sysITEM_FLAG_APPLICABLE = 1 &--#60;&--#60; 14# ¿ëÈ¥¼® Vnum¿¡ ´ëÇÑ comment# ITEM VNUMÀ» 10¸¸ ÀÚ¸®ºÎÅÍ, FEDCBA¶ó°í ÇÑ´Ù¸é# FE : ¿ëÈ¥¼® Á¾·ù. D : µî±Ş# C : ´Ü°è B : °*È*# A : ¿©¹úÀÇ ¹øÈ£µé...class DragonSoulWindow(ui.ScriptWindow):KIND_TAP_TITLES = [uiScriptLocale.DRAGONSOUL_TAP_TITLE_1, uiScriptLocale.DRAGONSOUL_TAP_TITLE_2,uiScriptLocale.DRAGONSOUL_TAP_TITLE_3, uiScriptLocale.DRAGONSOUL_TAP_TITLE_4, uiScriptLocale.DRAGONSOUL_TAP_TITLE_5, uiScriptLocale.DRAGONSOUL_TAP_TITLE_6]def __init__(self):ui.ScriptWindow.__init__(self)self.questionDialog = Noneself.tooltipItem = Noneself.sellingSlotNumber = -1self.isLoaded = 0self.isActivated = FALSEself.DSKindIndex = 0self.tabDict = Noneself.tabButtonDict = Noneself.deckPageIndex = 0self.inventoryPageIndex = 0self.SetWindowName("DragonSoulWindow")self.__LoadWindow()def __del__(self):ui.ScriptWindow.__del__(self)def Show(self):self.__LoadWindow()ui.ScriptWindow.Show(self)def __LoadWindow(self):if self.isLoaded == 1:returnself.isLoaded = 1try:pyScrLoader = ui.PythonScriptLoader()pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "dragonsoulwindow.py")except:import exceptionexception.Abort("dragonsoulwindow.LoadWindow.LoadObject")try:if locale.IsARABIC():self.board = self.GetChild("Equipment_Base")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_01")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_02")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_03")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_04")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_05")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_06")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)wndItem = self.GetChild("ItemSlot")wndEquip = self.GetChild("EquipmentSlot")self.activateButton = self.GetChild("activate")self.deckTab = []self.deckTab.append(self.GetChild("deck1"))self.deckTab.append(self.GetChild("deck2"))self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))self.inventoryTab = []self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))self.inventoryTab.append(self.GetChild("Inventory_Tab_05"))self.tabDict = {0 : self.GetChild("Tab_01"),1 : self.GetChild("Tab_02"),2 : self.GetChild("Tab_03"),3 : self.GetChild("Tab_04"),4 : self.GetChild("Tab_05"),5 : self.GetChild("Tab_06"),}self.tabButtonDict = {0 : self.GetChild("Tab_Button_01"),1 : self.GetChild("Tab_Button_02"),2 : self.GetChild("Tab_Button_03"),3 : self.GetChild("Tab_Button_04"),4 : self.GetChild("Tab_Button_05"),5 : self.GetChild("Tab_Button_06"),}self.tabText = self.GetChild("tab_text_area")except:import exceptionexception.Abort("InventoryWindow.LoadWindow.BindObject")## DragonSoul Kind Tapfor (tabKey, tabButton) in self.tabButtonDict.items():tabButton.SetEvent(ui.__mem_func__(self.SetDSKindIndex), tabKey)## ItemwndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))## EquipmentwndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyEquipSlot))wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectEquipItemSlot))wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseEquipItemSlot))wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseEquipItemSlot))wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInEquipItem))wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutEquipItem))## Deckself.deckTab[0].SetToggleDownEvent(lambda arg=0: self.SetDeckPage(arg))self.deckTab[1].SetToggleDownEvent(lambda arg=1: self.SetDeckPage(arg))self.deckTab[0].SetToggleUpEvent(lambda arg=0: self.__DeckButtonDown(arg))self.deckTab[1].SetToggleUpEvent(lambda arg=1: self.__DeckButtonDown(arg))self.deckTab[0].Down()## Grade buttonself.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))self.inventoryTab[4].SetEvent(lambda arg=4: self.SetInventoryPage(arg))self.inventoryTab[0].Down()## Etcself.wndItem = wndItemself.wndEquip = wndEquipself.dlgQuestion = uiCommon.QuestionDialog2()self.dlgQuestion.Close()self.activateButton.SetToggleDownEvent(ui.__mem_func__(self.ActivateButtonClick))self.activateButton.SetToggleUpEvent(ui.__mem_func__(self.ActivateButtonClick))self.wndPopupDialog = uiCommon.PopupDialog()##self.listHighlightedSlot = []## Refreshself.SetInventoryPage(0)self.RefreshItemSlot()self.RefreshEquipSlotWindow()self.RefreshBagSlotWindow()self.SetDSKindIndex(0)self.activateButton.Enable()self.deckTab[self.deckPageIndex].Down()self.activateButton.SetUp()def Destroy(self):self.ClearDictionary()self.tooltipItem = Noneself.wndItem = 0self.wndEquip = 0self.activateButton = 0self.questionDialog = Noneself.mallButton = Noneself.inventoryTab = []self.deckTab = []self.equipmentTab = []self.tabDict = Noneself.tabButtonDict = Nonedef Close(self):if None != self.tooltipItem:self.tooltipItem.HideToolTip()self.Hide()def __DeckButtonDown(self, deck):self.deckTab[deck].Down()def SetInventoryPage(self, page):if self.inventoryPageIndex != page:self.__HighlightSlot_ClearCurrentPage()self.inventoryPageIndex = pageself.inventoryTab[(page+1)%5].SetUp()self.inventoryTab[(page+2)%5].SetUp()self.inventoryTab[(page+3)%5].SetUp()self.inventoryTab[(page+4)%5].SetUp()self.RefreshBagSlotWindow()def SetItemToolTip(self, tooltipItem):self.tooltipItem = tooltipItemdef RefreshItemSlot(self):self.RefreshBagSlotWindow()self.RefreshEquipSlotWindow()def RefreshEquipSlotWindow(self):for i in xrange(6):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)itemVnum = player.GetItemIndex(slotNumber)self.wndEquip.SetItemSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i, itemVnum, 0)self.wndEquip.EnableSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)if itemVnum != 0:item.SelectItem(itemVnum)for j in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(j)# ¹Ø¿¡¼* remain_timeÀÌ 0ÀÌÇÏÀÎÁö üũ Çϱ⠶§¹®¿¡ ÀÓÀÇÀÇ ¾ç¼ö·Î ÃʱâÈ*remain_time = 999# ÀÏ´Ü ÇöÀç ŸÀ̸Ӵ ÀÌ ¼¼°³ »ÓÀÌ´Ù.if item.LIMIT_REAL_TIME == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) - app.GetGlobalTimeStamp()elif item.LIMIT_REAL_TIME_START_FIRST_USE == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) - app.GetGlobalTimeStamp()elif item.LIMIT_TIMER_BASED_ON_WEAR == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0)if remain_time &--#60;= 0:self.wndEquip.DisableSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)breakself.wndEquip.RefreshSlot()def RefreshStatus(self):self.RefreshItemSlot()def __InventoryLocalSlotPosToGlobalSlotPos(self, window_type, local_slot_pos):if player.INVENTORY == window_type:return self.deckPageIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + local_slot_posreturn (self.DSKindIndex * 5 * player.DRAGON_SOUL_PAGE_SIZE) + self.inventoryPageIndex * player.DRAGON_SOUL_PAGE_SIZE + local_slot_posdef RefreshBagSlotWindow(self):getItemVNum=player.GetItemIndexgetItemCount=player.GetItemCountsetItemVnum=self.wndItem.SetItemSlotfor i in xrange(player.DRAGON_SOUL_PAGE_SIZE):self.wndItem.EnableSlot(i)#&--#60;- dragon soul kindslotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)itemCount = getItemCount(player.DRAGON_SOUL_INVENTORY, slotNumber)if 0 == itemCount:self.wndItem.ClearSlot(i)continueelif 1 == itemCount:itemCount = 0itemVnum = getItemVNum(player.DRAGON_SOUL_INVENTORY, slotNumber)setItemVnum(i, itemVnum, itemCount)if itemVnum != 0:item.SelectItem(itemVnum)for j in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(j)# ¹Ø¿¡¼* remain_timeÀÌ À½¼öÀÎÁö üũ Çϱ⠶§¹®¿¡ ÀÓÀÇÀÇ ¾ç¼ö·Î ÃʱâÈ*remain_time = 999if item.LIMIT_REAL_TIME == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)elif item.LIMIT_REAL_TIME_START_FIRST_USE == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)elif item.LIMIT_TIMER_BASED_ON_WEAR == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)if remain_time &--#60;= 0:self.wndItem.DisableSlot(i)breakself.__HighlightSlot_RefreshCurrentPage()self.wndItem.RefreshSlot()def ShowToolTip(self, window_type, slotIndex):if None != self.tooltipItem:if player.INVENTORY == window_type:self.tooltipItem.SetInventoryItem(slotIndex)else:self.tooltipItem.SetInventoryItem(slotIndex, player.DRAGON_SOUL_INVENTORY)def OnPressEscapeKey(self):self.Close()return TRUEdef OnTop(self):if None != self.tooltipItem:self.tooltipItem.SetTop()# item slot °ü·Ã ÇÔ¼ödef OverOutItem(self):self.wndItem.SetUsableItem(FALSE)if None != self.tooltipItem:self.tooltipItem.HideToolTip()def OverInItem(self, overSlotPos):self.wndItem.DeactivateSlot(overSlotPos)overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, overSlotPos)try:self.listHighlightedSlot.remove(overSlotPos)except:passself.wndItem.SetUsableItem(FALSE)self.ShowToolTip(player.DRAGON_SOUL_INVENTORY, overSlotPos)def __UseItem(self, slotIndex):ItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, slotIndex)if 0 == player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotIndex, 0):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_EXPIRED)self.wndPopupDialog.Open()returnself.__EquipItem(slotIndex)def __EquipItem(self, slotIndex):ItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, slotIndex)item.SelectItem(ItemVNum)subType = item.GetItemSubType()equipSlotPos = player.DRAGON_SOUL_EQUIPMENT_SLOT_START + self.deckPageIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + subTypesrcItemPos = (player.DRAGON_SOUL_INVENTORY, slotIndex)dstItemPos = (player.INVENTORY, equipSlotPos)self.__OpenQuestionDialog(TRUE, srcItemPos, dstItemPos)def SelectItemSlot(self, itemSlotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnitemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.RESERVED_WINDOW != attachedInvenType:net.SendItemUseToItemPacket(attachedInvenType, attachedSlotPos, player.DRAGON_SOUL_INVENTORY, itemSlotIndex)mouseModule.mouseController.DeattachObject()else:selectedItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)itemCount = player.GetItemCount(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_DRAGON_SOUL_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)self.wndItem.SetUseMode(FALSE)snd.PlaySound("sound/ui/pick.wav")def SelectEmptySlot(self, selectedSlotPos):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnselectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, selectedSlotPos)print "__debug", selectedSlotPosif mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if 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, player.DRAGON_SOUL_INVENTORY, selectedSlotPos)elif player.SLOT_TYPE_MALL == attachedSlotType:net.SendMallCheckoutPacket(attachedSlotPos, player.DRAGON_SOUL_INVENTORY, selectedSlotPos)elif player.RESERVED_WINDOW != attachedInvenType:if player.IsDSEquipmentSlot(attachedInvenType, attachedSlotPos):srcItemPos = (attachedInvenType, attachedSlotPos)dstItemPos = (player.DRAGON_SOUL_INVENTORY, selectedSlotPos)self.__OpenQuestionDialog(FALSE, srcItemPos, dstItemPos)else:itemCount = player.GetItemCount(attachedInvenType, attachedSlotPos)attachedCount = mouseModule.mouseController.GetAttachedItemCount()self.__SendMoveItemPacket(attachedInvenType, attachedSlotPos, player.DRAGON_SOUL_INVENTORY, selectedSlotPos, attachedCount)mouseModule.mouseController.DeattachObject()def UseItemSlot(self, slotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():returnslotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, slotIndex)try:# ¿ëÈ¥¼® °*È*âÀÌ ¿*·ÁÀÖÀ¸¸é, ¾ÆÀÌÅÛ ¿ìŬ¸¯ ½Ã ÀÚµ¿À¸·Î °*È*âÀ¸·Î µé¾î°¨.if self.wndDragonSoulRefine.IsShow():if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnself.wndDragonSoulRefine.AutoSetItem((player.DRAGON_SOUL_INVENTORY, slotIndex), 1)returnexcept:passself.__UseItem(slotIndex)mouseModule.mouseController.DeattachObject()self.OverOutItem()def __SendMoveItemPacket(self, srcSlotWindow, srcSlotPos, dstSlotWindow, dstSlotPos, srcItemCount):if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnnet.SendItemMovePacket(srcSlotWindow , srcSlotPos, dstSlotWindow, dstSlotPos, srcItemCount)# equip ½½·Ô °ü·Ã ÇÔ¼öµé.def OverOutEquipItem(self):self.OverOutItem()def OverInEquipItem(self, overSlotPos):overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, overSlotPos)self.wndItem.SetUsableItem(FALSE)self.ShowToolTip(player.INVENTORY, overSlotPos)def UseEquipItemSlot(self, slotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():returnslotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, slotIndex)self.__UseEquipItem(slotIndex)mouseModule.mouseController.DeattachObject()self.OverOutEquipItem()def __UseEquipItem(self, slotIndex):if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)returnself.__OpenQuestionDialog(FALSE, (player.INVENTORY, slotIndex), (1, 1))def SelectEquipItemSlot(self, itemSlotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnitemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, itemSlotIndex)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()# ÀÚ±â ÀÚ½ÅÀ» ÀÚ±â Àڽſ¡°Ô µå·¡±×ÇÏ´Â °æ¿ìif player.SLOT_TYPE_INVENTORY == attachedSlotType and itemSlotIndex == attachedSlotPos:returnattachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.RESERVED_WINDOW != attachedInvenType:net.SendItemUseToItemPacket(attachedInvenType, attachedSlotPos, player.INVENTORY, itemSlotIndex)mouseModule.mouseController.DeattachObject()else:selectedItemVNum = player.GetItemIndex(player.INVENTORY, itemSlotIndex)itemCount = player.GetItemCount(player.INVENTORY, itemSlotIndex)mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)self.wndItem.SetUseMode(FALSE)snd.PlaySound("sound/ui/pick.wav")def SelectEmptyEquipSlot(self, selectedSlot):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnselectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, selectedSlot)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()if player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType:if 0 == player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, attachedSlotPos, 0):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_EXPIRED)self.wndPopupDialog.Open()returnitem.SelectItem(attachedItemIndex)subType = item.GetItemSubType()if subType != (selectedSlot - player.DRAGON_SOUL_EQUIPMENT_SLOT_START):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_UNMATCHED_SLOT)self.wndPopupDialog.Open()else:srcItemPos = (player.DRAGON_SOUL_INVENTORY, attachedSlotPos)dstItemPos = (player.INVENTORY, selectedSlotPos)self.__OpenQuestionDialog(TRUE, srcItemPos, dstItemPos)mouseModule.mouseController.DeattachObject()# equip ½½·Ô °ü·Ã ÇÔ¼öµé ³¡.# °æ°íâ °ü·Ãdef __OpenQuestionDialog(self, Equip, srcItemPos, dstItemPos):self.srcItemPos = srcItemPosself.dstItemPos = dstItemPosself.dlgQuestion.SetAcceptEvent(ui.__mem_func__(self.__Accept))self.dlgQuestion.SetCancelEvent(ui.__mem_func__(self.__Cancel))if Equip:self.dlgQuestion.SetText1(locale.DRAGON_SOUL_EQUIP_WARNING1)self.dlgQuestion.SetText2(locale.DRAGON_SOUL_EQUIP_WARNING2)else:self.dlgQuestion.SetText1(locale.DRAGON_SOUL_UNEQUIP_WARNING1)self.dlgQuestion.SetText2(locale.DRAGON_SOUL_UNEQUIP_WARNING2)self.dlgQuestion.Open()def __Accept(self):if (-1, -1) == self.dstItemPos:net.SendItemUsePacket(*srcItemPos)else:self.__SendMoveItemPacket(*(self.srcItemPos + self.dstItemPos + (0,)))self.dlgQuestion.Close()def __Cancel(self):self.srcItemPos = (0, 0)self.dstItemPos = (0, 0)self.dlgQuestion.Close()# °æ°íâ °ü·Ã ³¡def SetDSKindIndex(self, kindIndex):if self.DSKindIndex != kindIndex:self.__HighlightSlot_ClearCurrentPage()self.DSKindIndex = kindIndexfor (tabKey, tabButton) in self.tabButtonDict.items():if kindIndex!=tabKey:tabButton.SetUp()for tabValue in self.tabDict.itervalues():tabValue.Hide()self.tabDict[kindIndex].Show()self.tabText.SetText(DragonSoulWindow.KIND_TAP_TITLES[kindIndex])self.RefreshBagSlotWindow()def SetDeckPage(self, page):if page == self.deckPageIndex:returnif self.isActivated:self.DeactivateDragonSoul()net.SendChatPacket("/dragon_soul deactivate")self.deckPageIndex = pageself.deckTab .Down()self.deckTab[(page+1)%2].SetUp()self.RefreshEquipSlotWindow()# ¿ëÈ¥¼® È°¼ºÈ* °ü·Ãdef ActivateDragonSoulByExtern(self, deck):self.isActivated = TRUEself.activateButton.Down()self.deckPageIndex = deckself.deckTab[deck].Down()self.deckTab[(deck+1)%2].SetUp()self.RefreshEquipSlotWindow()def DeactivateDragonSoul(self):self.isActivated = FALSEself.activateButton.SetUp()def ActivateButtonClick(self):self.isActivated = self.isActivated ^ TRUEif self.isActivated:if self.__CanActivateDeck():net.SendChatPacket("/dragon_soul activate " + str(self.deckPageIndex))else:self.isActivated = FALSEself.activateButton.SetUp()else:net.SendChatPacket("/dragon_soul deactivate")def __CanActivateDeck(self):canActiveNum = 0for i in xrange(6):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)itemVnum = player.GetItemIndex(slotNumber)if itemVnum != 0:item.SelectItem(itemVnum)isNoLimit = TRUEfor i in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(i)# LIMIT_TIMER_BASED_ON_WEAR´Â ¼ÒÄÏ0¿¡ ³²Àº ½Ã°£À» ¹Ú´Â´Ù.# LIMIT_REAL_TIMEÀº ½Ã°£ ´Ù µÇ¸é ¾ÆÀÌÅÛÀÌ »ç¶óÁö¹Ç·Î ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.# LIMIT_REAL_TIME_START_FIRST_USE´Â ¼*¹ö¿¡ Á¦´ë·Î Á¤ÀǵÇÁö ¾Ê¾Æ ÀÏ´Ü ³ÀµĞ´Ù.if item.LIMIT_TIMER_BASED_ON_WEAR == limitType:isNoLimit = FALSEremain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0)if 0 != remain_time:canActiveNum += 1break# ŸÀ̸Ӱ¡ ¾ø´Ù¸é ActivateÇÒ ¼ö ÀÖ´Â ¿ëÈ¥¼®.if isNoLimit:canActiveNum += 1return canActiveNum &--#62; 0# È°¼ºÈ* °ü·Ã ³¡# ½½·Ô highlight °ü·Ãdef __HighlightSlot_ClearCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.DeactivateSlot(i)self.listHighlightedSlot.remove(slotNumber)def __HighlightSlot_RefreshCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.ActivateSlot(i)def HighlightSlot(self, slot):if not slot in self.listHighlightedSlot:self.listHighlightedSlot.append (slot)# ½½·Ô highlight °ü·Ã ³¡def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):if app.ENABLE_DRAGON_SOUL_SYSTEM:from _weakref import proxyself.wndDragonSoulRefine = proxy(wndDragonSoulRefine)## °*È*ÇÒ ¼ö ¾ø´Â °æ¿ì ³¯¸®´Â ¿¹¿Ü#class DragonSoulRefineException(Exception):#passclass DragonSoulRefineWindow(ui.ScriptWindow):REFINE_TYPE_GRADE, REFINE_TYPE_STEP, REFINE_TYPE_STRENGTH = xrange(3)DS_SUB_HEADER_DIC = {REFINE_TYPE_GRADE : player.DS_SUB_HEADER_DO_UPGRADE,REFINE_TYPE_STEP : player.DS_SUB_HEADER_DO_IMPROVEMENT,REFINE_TYPE_STRENGTH : player.DS_SUB_HEADER_DO_REFINE}REFINE_STONE_SLOT, DRAGON_SOUL_SLOT = xrange(2)INVALID_DRAGON_SOUL_INFO = -1def __init__(self):ui.ScriptWindow.__init__(self)self.tooltipItem = Noneself.sellingSlotNumber = -1self.isLoaded = 0self.refineChoiceButtonDict = Noneself.doRefineButton = Noneself.wndMoney = Noneself.SetWindowName("DragonSoulRefineWindow")self.__LoadWindow()def __del__(self):ui.ScriptWindow.__del__(self)def Show(self):self.__LoadWindow()ui.ScriptWindow.Show(self)def __LoadWindow(self):if self.isLoaded == 1:returnself.isLoaded = 1try:pyScrLoader = ui.PythonScriptLoader()pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "dragonsoulrefinewindow.py")except:import exceptionexception.Abort("dragonsoulrefinewindow.LoadWindow.LoadObject")try:if locale.IsARABIC():self.board = self.GetChild("DragonSoulRefineWindowBaseImage")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)wndRefineSlot = self.GetChild("RefineSlot")wndResultSlot = self.GetChild("ResultSlot")self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))self.refineChoiceButtonDict = {self.REFINE_TYPE_GRADE : self.GetChild("GradeButton"),self.REFINE_TYPE_STEP: self.GetChild("StepButton"),self.REFINE_TYPE_STRENGTH : self.GetChild("StrengthButton"),}self.doRefineButton = self.GetChild("DoRefineButton")self.wndMoney = self.GetChild("Money_Slot")except:import exceptionexception.Abort("DragonSoulRefineWindow.LoadWindow.BindObject")## Item SlotswndRefineSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInRefineItem))wndRefineSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))wndRefineSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.__SelectRefineEmptySlot))wndRefineSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUseSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndResultSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInResultItem))wndResultSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))self.wndRefineSlot = wndRefineSlotself.wndResultSlot = wndResultSlot## Buttonself.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleDownEvent(self.__ToggleDownGradeButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleDownEvent(self.__ToggleDownStepButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleDownEvent(self.__ToggleDownStrengthButton)self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_GRADE))self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STEP))self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STRENGTH))self.doRefineButton.SetEvent(self.__PressDoRefineButton)## Dialogself.wndPopupDialog = uiCommon.PopupDialog()self.currentRefineType = self.REFINE_TYPE_GRADEself.refineItemInfo = {}self.resultItemInfo = {}self.currentRecipe = {}self.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.__Initialize()def Destroy(self):self.ClearDictionary()self.tooltipItem = Noneself.wndItem = 0self.wndEquip = 0self.activateButton = 0self.questionDialog = Noneself.mallButton = Noneself.inventoryTab = []self.deckTab = []self.equipmentTab = []self.tabDict = Noneself.tabButtonDict = Nonedef Close(self):if None != self.tooltipItem:self.tooltipItem.HideToolTip()self.__FlushRefineItemSlot()player.SendDragonSoulRefine(player.DRAGON_SOUL_REFINE_CLOSE)self.Hide()def Show(self):self.currentRefineType = self.REFINE_TYPE_GRADEself.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetUp()self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetUp()self.Refresh()ui.ScriptWindow.Show(self)def SetItemToolTip(self, tooltipItem):self.tooltipItem = tooltipItem# ¹öÆ° ´*·Á ÀÖ´Â »óŸ¦ Á¦¿ÜÇÑ ¸ğµç °*È*â °ü·Ã º¯¼öµéÀ» ÃʱâÈ*.def __Initialize(self):self.currentRecipe = {}self.refineItemInfo = {}self.resultItemInfo = {}if self.REFINE_TYPE_STRENGTH == self.currentRefineType:self.refineSlotLockStartIndex = 2else:self.refineSlotLockStartIndex = 1for i in xrange(self.refineSlotLockStartIndex):self.wndRefineSlot.HideSlotBaseImage(i)self.wndMoney.SetText(locale.NumberToMoneyString(0))def __FlushRefineItemSlot(self):## Item slot settings# ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹for invenType, invenPos, itemCount in self.refineItemInfo.values():remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)self.__Initialize()def __ToggleUpButton(self, idx):#if self.REFINE_TYPE_GRADE == self.currentRefineType:self.refineChoiceButtonDict[idx].Down()def __ToggleDownGradeButton(self):if self.REFINE_TYPE_GRADE == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_GRADEself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStepButton(self):if self.REFINE_TYPE_STEP == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STEPself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStrengthButton(self):if self.REFINE_TYPE_STRENGTH == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STRENGTHself.__FlushRefineItemSlot()self.Refresh()def __PopUp(self, message):self.wndPopupDialog.SetText(message)self.wndPopupDialog.Open()def __SetItem(self, (invenType, invenPos), dstSlotIndex, itemCount):if dstSlotIndex &--#62;= self.refineSlotLockStartIndex:return FALSEitemVnum = player.GetItemIndex(invenType, invenPos)maxCount = player.GetItemCount(invenType, invenPos)if itemCount &--#62; maxCount:raise Exception, ("Invalid attachedItemCount(%d). (base pos (%d, %d), base itemCount(%d))" % (itemCount, invenType, invenPos, maxCount))#return FALSE# strength °*È*ÀÏ °æ¿ì, 0¹ø¿£ °*È*¼®, 1¹ø¿£ ¿ëÈ¥¼®À» ³õµµ·Ï °*Á¦ÇÔ.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if self.__IsDragonSoul(itemVnum):dstSlotIndex = 1else:dstSlotIndex = 0# ºó ½½·ÔÀ̾î¾ßÇÔ.if dstSlotIndex in self.refineItemInfo:return FALSE# °*È*â¿¡ ¿Ã¸± ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö °Ë»ç.if FALSE == self.__CheckCanRefine(itemVnum):return FALSE# ²ø¾î´Ù ³õÀº ¾ÆÀÌÅÛ Ä«¿îÆ®¸¸Å* ¿ø·¡ ÀÚ¸®ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® °¨¼Òplayer.SetItemCount(invenType, invenPos, maxCount - itemCount)self.refineItemInfo[dstSlotIndex] = (invenType, invenPos, itemCount)self.Refresh()return TRUE# °*È* °¡´ÉÇÑ ¾ÆÀÌÅÛÀÎÁö üũ# ¿ëÈ¥¼® °*È*´Â °*È* ·¹½ÃÇǸ¦ Á¤Çسõ°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó,# óÀ½¿¡ °*È*â¿¡ ¿Ã¸° ¿ëÈ¥¼®¿¡ ÀÇÇØ °*È* ·¹½ÃÇÇ°¡ °áÁ¤µÈ´Ù.# ±×·¡¼* __CanRefineGrade, __CanRefineStep, __CanRefineStrength ÇÔ¼ö¿¡¼*# °*È* ·¹½ÃÇÇ°¡ ¾ø´Ù¸é(óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀ̶ó¸é), °*È* ·¹½ÃÇǸ¦ ¼³Á¤ÇØÁÖ´Â ¿ªÇÒµµ ÇÑ´Ù.def __CheckCanRefine(self, vnum):if self.REFINE_TYPE_GRADE == self.currentRefineType:return self.__CanRefineGrade(vnum)elif self.REFINE_TYPE_STEP == self.currentRefineType:return self.__CanRefineStep(vnum)elif self.REFINE_TYPE_STRENGTH == self.currentRefineType:return self.__CanRefineStrength(vnum)else:return FALSEreturn TRUEdef __CanRefineGrade (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, °*È* Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineGradeRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStep (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade and cur_refine_step == step):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineStepRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStrength (self, vnum):# ¿ëÈ¥¼®ÀÎ °æ¿ì, ´õ ÀÌ»ó strength °*È*¸¦ ÇÒ ¼ö ¾ø´ÂÁö üũÇؾßÇÔ.if self.__IsDragonSoul(vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)import dragon_soul_refine_settingsif strength &--#62;= dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["strength_max_table"][grade][step]:self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE_MORE)return FALSEelse:return TRUE# strength °*È*ÀÇ °æ¿ì, refine_recipe°¡ ¿ëÈ¥¼®ÀÇ Á¾·ù°¡ ¾Æ´Ñ, °*È*¼®ÀÇ Á¾·ù¿¡ µû¶ó ´Ş¶óÁø´Ù.# µû¶ó¼* ¿ëÈ¥¼®ÀÌ ¾Æ´Ï¶ó¸é,# ÀÌ¹Ì ·¹½ÃÇÇ°¡ ÀÖ´Â °æ¿ì´Â, °*È*¼®ÀÌ °*È*â¿¡ ÀÖ´Ù´Â °ÍÀ̹ǷÎ, return FALSE# ·¹½ÃÇÇ°¡ ¾ø´Â °æ¿ì´Â, °*È*¼®ÀÎÁö È®ÀÎÇÏ°í, ·¹½ÃÇǸ¦ ¼ÂÆÃÇÑ´Ù.else:if self.currentRecipe:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEelse:refineRecipe = self.__GetRefineStrengthInfo(vnum)if refineRecipe:self.currentRecipe = refineRecipeself.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# ·¹½ÃÇǸ¦ ¼ÂÆÃÇÒ ¼ö ¾ø´Â °æ¿ìself.__PopUp(locale.DRAGON_SOUL_NOT_DRAGON_SOUL_REFINE_STONE)return FALSEdef __GetRefineGradeRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_need_count"][grade],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_fee"][grade]}except:return Nonedef __GetRefineStepRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_need_count"][step],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_fee"][step]}except:return None# strength °*È*ÀÇ °æ¿ì, refineInfo´Â °*È*¼®¿¡ µû¶ó ´Ş¶óÁø´Ù.def __GetRefineStrengthInfo (self, itemVnum):try:# À̳ğÀÇ À§Ä¡¸¦ ¾îÂîÇÏÁö....# °*È*¼®ÀÌ ¾Æ´Ï¸é ¾ÈµÊ.item.SelectItem(itemVnum)if not (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):return Noneimport dragon_soul_refine_settingsreturn { "fee" : dragon_soul_refine_settings.strength_fee[item.GetItemSubType()] }except:return Nonedef __IsDragonSoul(self, vnum):item.SelectItem(vnum)return item.GetItemType() == item.ITEM_TYPE_DS# ¿ëÈ¥¼® Vnum¿¡ ´ëÇÑ comment# ITEM VNUMÀ» 10¸¸ ÀÚ¸®ºÎÅÍ, FEDCBA¶ó°í ÇÑ´Ù¸é# FE : ¿ëÈ¥¼® Á¾·ù. D : µî±Ş# C : ´Ü°è B : °*È*# A : ¿©¹úÀÇ ¹øÈ£µé...def __GetDragonSoulTypeInfo(self, vnum):if not self.__IsDragonSoul(vnum):return DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFOds_type = vnum / 10000grade = vnum % 10000 /1000step = vnum % 1000 / 100strength = vnum % 100 / 10return (ds_type, grade, step, strength)def __MakeDragonSoulVnum(self, ds_type, grade, step, strength):return ds_type * 10000 + grade * 1000 + step * 100 + strength * 10## ºó ½½·Ô ¼±Åà Eventdef __SelectRefineEmptySlot(self, selectedSlotPos):try:if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnif selectedSlotPos &--#62;= self.refineSlotLockStartIndex:returnif mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnif TRUE == self.__SetItem((attachedInvenType, attachedSlotPos), selectedSlotPos, attachedItemCount):self.Refresh()except Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineEmptySlot, %s" % e)# Ŭ¸¯À¸·Î ½½·Ô¿¡¼* »èÁ¦.def __SelectRefineItemSlot(self, selectedSlotPos):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returntry:if not selectedSlotPos in self.refineItemInfo:# »õ·Î¿î ¾ÆÀÌÅÛÀ» °*È*â¿¡ ¿Ã¸®´Â ÀÛ¾÷.if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnself.AutoSetItem((attachedInvenType, attachedSlotPos), 1)returnelif mouseModule.mouseController.isAttached():returnattachedInvenType, attachedSlotPos, attachedItemCount = self.refineItemInfo[selectedSlotPos]selectedItemVnum = player.GetItemIndex(attachedInvenType, attachedSlotPos)# °*È*â¿¡¼* »èÁ¦ ¹× ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹invenType, invenPos, itemCount = self.refineItemInfo[selectedSlotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# °*È*âÀÌ ºñ¾ú´Ù¸é, ÃʱâÈ*if not self.refineItemInfo:self.__Initialize()else:item.SelectItem(selectedItemVnum)# ¾ø¾Ø ¾ÆÀÌÅÛÀÌ °*È*¼®À̾ú´Ù¸é °*È* ·¹Çǽà ÃʱâÈ*if (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):self.currentRecipe = {}self.wndMoney.SetText(localeInfo.NumberToMoneyString(0))# ¿ëÈ¥¼®À̾ú´Ù¸é,# strength°*È*°¡ ¾Æ´Ñ °æ¿ì, °*È*â¿¡ ´Ù¸¥ ¿ëÈ¥¼®ÀÌ ³²¾ÆÀÖÀ¸¹Ç·Î, ·¹½ÃÇǸ¦ ÃʱâÈ*ÇÏ¸é ¾ÈµÊ.# strength°*È*ÀÇ °æ¿ì, °*È* ·¹½ÃÇÇ´Â °*È*¼®¿¡ Á¾¼ÓµÈ °ÍÀ̹ǷΠ´Ù¸¥ ó¸®ÇÒ ÇÊ¿ä°¡ ¾øÀ½.else:passexcept Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineItemSlot, %s" % e)self.Refresh()def __OverInRefineItem(self, slotIndex):if self.refineItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.refineItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverInResultItem(self, slotIndex):if self.resultItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.resultItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverOutItem(self):if self.tooltipItem:self.tooltipItem.HideToolTip()def __PressDoRefineButton(self):for i in xrange(self.refineSlotLockStartIndex):if not i in self.refineItemInfo:self.wndPopupDialog.SetText(locale.DRAGON_SOUL_NOT_ENOUGH_MATERIAL)self.wndPopupDialog.Open()returnplayer.SendDragonSoulRefine(DragonSoulRefineWindow.DS_SUB_HEADER_DIC[self.currentRefineType], self.refineItemInfo)def OnPressEscapeKey(self):self.Close()return TRUEdef Refresh(self):self.__RefreshRefineItemSlot()self.__ClearResultItemSlot()def __RefreshRefineItemSlot(self):try:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):self.wndRefineSlot.ClearSlot(slotPos)if slotPos &--#60; self.refineSlotLockStartIndex:# self.refineItemInfo[slotPos]ÀÇ Á¤º¸È®ÀÎ# (½ÇÁ¦·Î ¾ÆÀÌÅÛÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎ)# Á¸Àç -&--#62; ¾ÆÀÌÅÛ ¾ÆÀÌÄÜÀ» ½½·Ô¿¡ ¼ÂÆÃ.# ºñÁ¸Àç -&--#62; ¾ÆÀÌÅÛÀÌ ¾øÀ¸¹Ç·Î °*È*â¿¡¼* »èÁ¦.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]itemVnum = player.GetItemIndex(invenType, invenPos)# if itemVnum:if itemVnum:self.wndRefineSlot.SetItemSlot(slotPos, player.GetItemIndex(invenType, invenPos), itemCount)else:del self.refineItemInfo[slotPos]# ºó ½½·Ô¿¡ reference ¾ÆÀÌÄÜÀ» alpha 0.5·Î ¼ÂÆÃ.if not slotPos in self.refineItemInfo:try:reference_vnum = 0# strength °*È*ÀÏ ¶§´Â,# 0¹ø ½½·Ô¿¡ °*È*¼®À», 1¹ø ½½·Ô¿¡ ¿ëÈ¥¼®À» ³õ´Â´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if DragonSoulRefineWindow.REFINE_STONE_SLOT == slotPos:reference_vnum = 100300else:reference_vnum = self.__MakeDragonSoulVnum(*self.currentRecipe["ds_info"])if 0 != reference_vnum:item.SelectItem(reference_vnum)itemIcon = item.GetIconImage()(width, height) = item.GetItemSize()self.wndRefineSlot.SetSlot(slotPos, 0, width, height, itemIcon, (1.0, 1.0, 1.0, 0.5))# slot ¿ìÃø ÇÏ´Ü¿¡ ¼ıÀÚ ¶ß¸é ¾È ¿¹»İ...self.wndRefineSlot.SetSlotCount(slotPos, 0)except:pass# refineSlotLockStartIndex º¸´Ù ÀÛÀº ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©ÁÖ¸é ¾ÈµÊ.self.wndRefineSlot.HideSlotBaseImage(slotPos)# slotPos &--#62;= self.refineSlotLockStartIndex:else:# Á¤»óÀûÀÎ °æ¿ì¶ó¸é ÀÌ if¹®¿¡ µé¾î°¥ ÀÏÀº ¾ø°ÚÁö¸¸,# (¾ÖÃÊ¿¡ À妽º°¡ refineSlotLockStartIndex ÀÌ»óÀÎ ½½·Ô¿¡´Â ¾ÆÀÌÅÛÀ» ³ÖÁö ¸øÇÏ°Ô Ç߱⠶§¹®)# Ȥ½Ã ¸ğ¸¦ ¿¡·¯¿¡ ´ëºñÇÔ.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# refineSlotLockStartIndex ÀÌ»óÀÎ ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©Áà¾ßÇÔ.self.wndRefineSlot.ShowSlotBaseImage(slotPos)# °*È*â¿¡ ¾Æ¹«·± ¾ÆÀÌÅÛÀÌ ¾ø´Ù¸é, ÃʱâÈ*ÇØÁÜ.# À§¿¡¼* Áß°£ Áß°£¿¡ "del self.refineItemInfo[slotPos]"¸¦ Ç߱⠶§¹®¿¡,# ¿©±â¼* Çѹø üũÇØÁà¾ßÇÔ.if not self.refineItemInfo:self.__Initialize()self.wndRefineSlot.RefreshSlot()except Exception, e:import dbgdbg.TraceError("Exception : __RefreshRefineItemSlot, %s" % e)def __GetEmptySlot(self, itemVnum = 0):# STRENGTH °*È*ÀÇ °æ¿ì, ¿ëÈ¥¼® ½½·Ô°ú °*È*¼® ½½·ÔÀÌ ±¸ºĞµÇ¾îÀֱ⠋š¹®¿¡# vnumÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if 0 == itemVnum:return -1if self.__IsDragonSoul(itemVnum):if not DragonSoulRefineWindow.DRAGON_SOUL_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.DRAGON_SOUL_SLOTelse:if not DragonSoulRefineWindow.REFINE_STONE_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.REFINE_STONE_SLOTelse:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):if not slotPos in self.refineItemInfo:return slotPosreturn -1def AutoSetItem(self, (invenType, invenPos), itemCount):itemVnum = player.GetItemIndex(invenType, invenPos)emptySlot = self.__GetEmptySlot(itemVnum)if -1 == emptySlot:returnself.__SetItem((invenType, invenPos), emptySlot, itemCount)def __ClearResultItemSlot(self):self.wndResultSlot.ClearSlot(0)self.resultItemInfo = {}def RefineSucceed(self, inven_type, inven_pos):self.__Initialize()self.Refresh()itemCount = player.GetItemCount(inven_type, inven_pos)if itemCount &--#62; 0:self.resultItemInfo[0] = (inven_type, inven_pos, itemCount)self.wndResultSlot.SetItemSlot(0, player.GetItemIndex(inven_type, inven_pos), itemCount)def RefineFail(self, reason, inven_type, inven_pos):if net.DS_SUB_HEADER_REFINE_ [img]import uiimport playerimport mouseModuleimport netimport appimport sndimport itemimport chatimport grpimport uiScriptLocaleimport uiRefineimport uiAttachMetinimport uiPickMoneyimport uiCommonimport uiPrivateShopBuilderimport localeimport constInfoimport imeimport uiInventoryimport sysITEM_FLAG_APPLICABLE = 1 &--#60;&--#60; 14# ¿ëÈ¥¼® Vnum¿¡ ´ëÇÑ comment# ITEM VNUMÀ» 10¸¸ ÀÚ¸®ºÎÅÍ, FEDCBA¶ó°í ÇÑ´Ù¸é# FE : ¿ëÈ¥¼® Á¾·ù. D : µî±Ş# C : ´Ü°è B : °*È*# A : ¿©¹úÀÇ ¹øÈ£µé...class DragonSoulWindow(ui.ScriptWindow):KIND_TAP_TITLES = [uiScriptLocale.DRAGONSOUL_TAP_TITLE_1, uiScriptLocale.DRAGONSOUL_TAP_TITLE_2,uiScriptLocale.DRAGONSOUL_TAP_TITLE_3, uiScriptLocale.DRAGONSOUL_TAP_TITLE_4, uiScriptLocale.DRAGONSOUL_TAP_TITLE_5, uiScriptLocale.DRAGONSOUL_TAP_TITLE_6]def __init__(self):ui.ScriptWindow.__init__(self)self.questionDialog = Noneself.tooltipItem = Noneself.sellingSlotNumber = -1self.isLoaded = 0self.isActivated = FALSEself.DSKindIndex = 0self.tabDict = Noneself.tabButtonDict = Noneself.deckPageIndex = 0self.inventoryPageIndex = 0self.SetWindowName("DragonSoulWindow")self.__LoadWindow()def __del__(self):ui.ScriptWindow.__del__(self)def Show(self):self.__LoadWindow()ui.ScriptWindow.Show(self)def __LoadWindow(self):if self.isLoaded == 1:returnself.isLoaded = 1try:pyScrLoader = ui.PythonScriptLoader()pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "dragonsoulwindow.py")except:import exceptionexception.Abort("dragonsoulwindow.LoadWindow.LoadObject")try:if locale.IsARABIC():self.board = self.GetChild("Equipment_Base")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_01")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_02")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_03")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_04")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_05")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)self.board = self.GetChild("Tab_06")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)wndItem = self.GetChild("ItemSlot")wndEquip = self.GetChild("EquipmentSlot")self.activateButton = self.GetChild("activate")self.deckTab = []self.deckTab.append(self.GetChild("deck1"))self.deckTab.append(self.GetChild("deck2"))self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))self.inventoryTab = []self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))self.inventoryTab.append(self.GetChild("Inventory_Tab_05"))self.tabDict = {0 : self.GetChild("Tab_01"),1 : self.GetChild("Tab_02"),2 : self.GetChild("Tab_03"),3 : self.GetChild("Tab_04"),4 : self.GetChild("Tab_05"),5 : self.GetChild("Tab_06"),}self.tabButtonDict = {0 : self.GetChild("Tab_Button_01"),1 : self.GetChild("Tab_Button_02"),2 : self.GetChild("Tab_Button_03"),3 : self.GetChild("Tab_Button_04"),4 : self.GetChild("Tab_Button_05"),5 : self.GetChild("Tab_Button_06"),}self.tabText = self.GetChild("tab_text_area")except:import exceptionexception.Abort("InventoryWindow.LoadWindow.BindObject")## DragonSoul Kind Tapfor (tabKey, tabButton) in self.tabButtonDict.items():tabButton.SetEvent(ui.__mem_func__(self.SetDSKindIndex), tabKey)## ItemwndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot))wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot))wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot))## EquipmentwndEquip.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyEquipSlot))wndEquip.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectEquipItemSlot))wndEquip.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseEquipItemSlot))wndEquip.SetUseSlotEvent(ui.__mem_func__(self.UseEquipItemSlot))wndEquip.SetOverInItemEvent(ui.__mem_func__(self.OverInEquipItem))wndEquip.SetOverOutItemEvent(ui.__mem_func__(self.OverOutEquipItem))## Deckself.deckTab[0].SetToggleDownEvent(lambda arg=0: self.SetDeckPage(arg))self.deckTab[1].SetToggleDownEvent(lambda arg=1: self.SetDeckPage(arg))self.deckTab[0].SetToggleUpEvent(lambda arg=0: self.__DeckButtonDown(arg))self.deckTab[1].SetToggleUpEvent(lambda arg=1: self.__DeckButtonDown(arg))self.deckTab[0].Down()## Grade buttonself.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))self.inventoryTab[4].SetEvent(lambda arg=4: self.SetInventoryPage(arg))self.inventoryTab[0].Down()## Etcself.wndItem = wndItemself.wndEquip = wndEquipself.dlgQuestion = uiCommon.QuestionDialog2()self.dlgQuestion.Close()self.activateButton.SetToggleDownEvent(ui.__mem_func__(self.ActivateButtonClick))self.activateButton.SetToggleUpEvent(ui.__mem_func__(self.ActivateButtonClick))self.wndPopupDialog = uiCommon.PopupDialog()##self.listHighlightedSlot = []## Refreshself.SetInventoryPage(0)self.RefreshItemSlot()self.RefreshEquipSlotWindow()self.RefreshBagSlotWindow()self.SetDSKindIndex(0)self.activateButton.Enable()self.deckTab[self.deckPageIndex].Down()self.activateButton.SetUp()def Destroy(self):self.ClearDictionary()self.tooltipItem = Noneself.wndItem = 0self.wndEquip = 0self.activateButton = 0self.questionDialog = Noneself.mallButton = Noneself.inventoryTab = []self.deckTab = []self.equipmentTab = []self.tabDict = Noneself.tabButtonDict = Nonedef Close(self):if None != self.tooltipItem:self.tooltipItem.HideToolTip()self.Hide()def __DeckButtonDown(self, deck):self.deckTab[deck].Down()def SetInventoryPage(self, page):if self.inventoryPageIndex != page:self.__HighlightSlot_ClearCurrentPage()self.inventoryPageIndex = pageself.inventoryTab[(page+1)%5].SetUp()self.inventoryTab[(page+2)%5].SetUp()self.inventoryTab[(page+3)%5].SetUp()self.inventoryTab[(page+4)%5].SetUp()self.RefreshBagSlotWindow()def SetItemToolTip(self, tooltipItem):self.tooltipItem = tooltipItemdef RefreshItemSlot(self):self.RefreshBagSlotWindow()self.RefreshEquipSlotWindow()def RefreshEquipSlotWindow(self):for i in xrange(6):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)itemVnum = player.GetItemIndex(slotNumber)self.wndEquip.SetItemSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i, itemVnum, 0)self.wndEquip.EnableSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)if itemVnum != 0:item.SelectItem(itemVnum)for j in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(j)# ¹Ø¿¡¼* remain_timeÀÌ 0ÀÌÇÏÀÎÁö üũ Çϱ⠶§¹®¿¡ ÀÓÀÇÀÇ ¾ç¼ö·Î ÃʱâÈ*remain_time = 999# ÀÏ´Ü ÇöÀç ŸÀ̸Ӵ ÀÌ ¼¼°³ »ÓÀÌ´Ù.if item.LIMIT_REAL_TIME == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) - app.GetGlobalTimeStamp()elif item.LIMIT_REAL_TIME_START_FIRST_USE == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) - app.GetGlobalTimeStamp()elif item.LIMIT_TIMER_BASED_ON_WEAR == limitType:remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0)if remain_time &--#60;= 0:self.wndEquip.DisableSlot(player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)breakself.wndEquip.RefreshSlot()def RefreshStatus(self):self.RefreshItemSlot()def __InventoryLocalSlotPosToGlobalSlotPos(self, window_type, local_slot_pos):if player.INVENTORY == window_type:return self.deckPageIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + local_slot_posreturn (self.DSKindIndex * 5 * player.DRAGON_SOUL_PAGE_SIZE) + self.inventoryPageIndex * player.DRAGON_SOUL_PAGE_SIZE + local_slot_posdef RefreshBagSlotWindow(self):getItemVNum=player.GetItemIndexgetItemCount=player.GetItemCountsetItemVnum=self.wndItem.SetItemSlotfor i in xrange(player.DRAGON_SOUL_PAGE_SIZE):self.wndItem.EnableSlot(i)#&--#60;- dragon soul kindslotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)itemCount = getItemCount(player.DRAGON_SOUL_INVENTORY, slotNumber)if 0 == itemCount:self.wndItem.ClearSlot(i)continueelif 1 == itemCount:itemCount = 0itemVnum = getItemVNum(player.DRAGON_SOUL_INVENTORY, slotNumber)setItemVnum(i, itemVnum, itemCount)if itemVnum != 0:item.SelectItem(itemVnum)for j in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(j)# ¹Ø¿¡¼* remain_timeÀÌ À½¼öÀÎÁö üũ Çϱ⠶§¹®¿¡ ÀÓÀÇÀÇ ¾ç¼ö·Î ÃʱâÈ*remain_time = 999if item.LIMIT_REAL_TIME == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)elif item.LIMIT_REAL_TIME_START_FIRST_USE == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)elif item.LIMIT_TIMER_BASED_ON_WEAR == limitType:remain_time = player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotNumber, 0)if remain_time &--#60;= 0:self.wndItem.DisableSlot(i)breakself.__HighlightSlot_RefreshCurrentPage()self.wndItem.RefreshSlot()def ShowToolTip(self, window_type, slotIndex):if None != self.tooltipItem:if player.INVENTORY == window_type:self.tooltipItem.SetInventoryItem(slotIndex)else:self.tooltipItem.SetInventoryItem(slotIndex, player.DRAGON_SOUL_INVENTORY)def OnPressEscapeKey(self):self.Close()return TRUEdef OnTop(self):if None != self.tooltipItem:self.tooltipItem.SetTop()# item slot °ü·Ã ÇÔ¼ödef OverOutItem(self):self.wndItem.SetUsableItem(FALSE)if None != self.tooltipItem:self.tooltipItem.HideToolTip()def OverInItem(self, overSlotPos):self.wndItem.DeactivateSlot(overSlotPos)overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, overSlotPos)try:self.listHighlightedSlot.remove(overSlotPos)except:passself.wndItem.SetUsableItem(FALSE)self.ShowToolTip(player.DRAGON_SOUL_INVENTORY, overSlotPos)def __UseItem(self, slotIndex):ItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, slotIndex)if 0 == player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, slotIndex, 0):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_EXPIRED)self.wndPopupDialog.Open()returnself.__EquipItem(slotIndex)def __EquipItem(self, slotIndex):ItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, slotIndex)item.SelectItem(ItemVNum)subType = item.GetItemSubType()equipSlotPos = player.DRAGON_SOUL_EQUIPMENT_SLOT_START + self.deckPageIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + subTypesrcItemPos = (player.DRAGON_SOUL_INVENTORY, slotIndex)dstItemPos = (player.INVENTORY, equipSlotPos)self.__OpenQuestionDialog(TRUE, srcItemPos, dstItemPos)def SelectItemSlot(self, itemSlotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnitemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.RESERVED_WINDOW != attachedInvenType:net.SendItemUseToItemPacket(attachedInvenType, attachedSlotPos, player.DRAGON_SOUL_INVENTORY, itemSlotIndex)mouseModule.mouseController.DeattachObject()else:selectedItemVNum = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)itemCount = player.GetItemCount(player.DRAGON_SOUL_INVENTORY, itemSlotIndex)mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_DRAGON_SOUL_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)self.wndItem.SetUseMode(FALSE)snd.PlaySound("sound/ui/pick.wav")def SelectEmptySlot(self, selectedSlotPos):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnselectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, selectedSlotPos)print "__debug", selectedSlotPosif mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if 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, player.DRAGON_SOUL_INVENTORY, selectedSlotPos)elif player.SLOT_TYPE_MALL == attachedSlotType:net.SendMallCheckoutPacket(attachedSlotPos, player.DRAGON_SOUL_INVENTORY, selectedSlotPos)elif player.RESERVED_WINDOW != attachedInvenType:if player.IsDSEquipmentSlot(attachedInvenType, attachedSlotPos):srcItemPos = (attachedInvenType, attachedSlotPos)dstItemPos = (player.DRAGON_SOUL_INVENTORY, selectedSlotPos)self.__OpenQuestionDialog(FALSE, srcItemPos, dstItemPos)else:itemCount = player.GetItemCount(attachedInvenType, attachedSlotPos)attachedCount = mouseModule.mouseController.GetAttachedItemCount()self.__SendMoveItemPacket(attachedInvenType, attachedSlotPos, player.DRAGON_SOUL_INVENTORY, selectedSlotPos, attachedCount)mouseModule.mouseController.DeattachObject()def UseItemSlot(self, slotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():returnslotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, slotIndex)try:# ¿ëÈ¥¼® °*È*âÀÌ ¿*·ÁÀÖÀ¸¸é, ¾ÆÀÌÅÛ ¿ìŬ¸¯ ½Ã ÀÚµ¿À¸·Î °*È*âÀ¸·Î µé¾î°¨.if self.wndDragonSoulRefine.IsShow():if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnself.wndDragonSoulRefine.AutoSetItem((player.DRAGON_SOUL_INVENTORY, slotIndex), 1)returnexcept:passself.__UseItem(slotIndex)mouseModule.mouseController.DeattachObject()self.OverOutItem()def __SendMoveItemPacket(self, srcSlotWindow, srcSlotPos, dstSlotWindow, dstSlotPos, srcItemCount):if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnnet.SendItemMovePacket(srcSlotWindow , srcSlotPos, dstSlotWindow, dstSlotPos, srcItemCount)# equip ½½·Ô °ü·Ã ÇÔ¼öµé.def OverOutEquipItem(self):self.OverOutItem()def OverInEquipItem(self, overSlotPos):overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, overSlotPos)self.wndItem.SetUsableItem(FALSE)self.ShowToolTip(player.INVENTORY, overSlotPos)def UseEquipItemSlot(self, slotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS():returnslotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, slotIndex)self.__UseEquipItem(slotIndex)mouseModule.mouseController.DeattachObject()self.OverOutEquipItem()def __UseEquipItem(self, slotIndex):if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_ITEM_FAILURE_PRIVATE_SHOP)returnself.__OpenQuestionDialog(FALSE, (player.INVENTORY, slotIndex), (1, 1))def SelectEquipItemSlot(self, itemSlotIndex):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnitemSlotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, itemSlotIndex)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()# ÀÚ±â ÀÚ½ÅÀ» ÀÚ±â Àڽſ¡°Ô µå·¡±×ÇÏ´Â °æ¿ìif player.SLOT_TYPE_INVENTORY == attachedSlotType and itemSlotIndex == attachedSlotPos:returnattachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.RESERVED_WINDOW != attachedInvenType:net.SendItemUseToItemPacket(attachedInvenType, attachedSlotPos, player.INVENTORY, itemSlotIndex)mouseModule.mouseController.DeattachObject()else:selectedItemVNum = player.GetItemIndex(player.INVENTORY, itemSlotIndex)itemCount = player.GetItemCount(player.INVENTORY, itemSlotIndex)mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount)self.wndItem.SetUseMode(FALSE)snd.PlaySound("sound/ui/pick.wav")def SelectEmptyEquipSlot(self, selectedSlot):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnselectedSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, selectedSlot)if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()if player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType:if 0 == player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, attachedSlotPos, 0):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_EXPIRED)self.wndPopupDialog.Open()returnitem.SelectItem(attachedItemIndex)subType = item.GetItemSubType()if subType != (selectedSlot - player.DRAGON_SOUL_EQUIPMENT_SLOT_START):self.wndPopupDialog.SetText(locale.DRAGON_SOUL_UNMATCHED_SLOT)self.wndPopupDialog.Open()else:srcItemPos = (player.DRAGON_SOUL_INVENTORY, attachedSlotPos)dstItemPos = (player.INVENTORY, selectedSlotPos)self.__OpenQuestionDialog(TRUE, srcItemPos, dstItemPos)mouseModule.mouseController.DeattachObject()# equip ½½·Ô °ü·Ã ÇÔ¼öµé ³¡.# °æ°íâ °ü·Ãdef __OpenQuestionDialog(self, Equip, srcItemPos, dstItemPos):self.srcItemPos = srcItemPosself.dstItemPos = dstItemPosself.dlgQuestion.SetAcceptEvent(ui.__mem_func__(self.__Accept))self.dlgQuestion.SetCancelEvent(ui.__mem_func__(self.__Cancel))if Equip:self.dlgQuestion.SetText1(locale.DRAGON_SOUL_EQUIP_WARNING1)self.dlgQuestion.SetText2(locale.DRAGON_SOUL_EQUIP_WARNING2)else:self.dlgQuestion.SetText1(locale.DRAGON_SOUL_UNEQUIP_WARNING1)self.dlgQuestion.SetText2(locale.DRAGON_SOUL_UNEQUIP_WARNING2)self.dlgQuestion.Open()def __Accept(self):if (-1, -1) == self.dstItemPos:net.SendItemUsePacket(*srcItemPos)else:self.__SendMoveItemPacket(*(self.srcItemPos + self.dstItemPos + (0,)))self.dlgQuestion.Close()def __Cancel(self):self.srcItemPos = (0, 0)self.dstItemPos = (0, 0)self.dlgQuestion.Close()# °æ°íâ °ü·Ã ³¡def SetDSKindIndex(self, kindIndex):if self.DSKindIndex != kindIndex:self.__HighlightSlot_ClearCurrentPage()self.DSKindIndex = kindIndexfor (tabKey, tabButton) in self.tabButtonDict.items():if kindIndex!=tabKey:tabButton.SetUp()for tabValue in self.tabDict.itervalues():tabValue.Hide()self.tabDict[kindIndex].Show()self.tabText.SetText(DragonSoulWindow.KIND_TAP_TITLES[kindIndex])self.RefreshBagSlotWindow()def SetDeckPage(self, page):if page == self.deckPageIndex:returnif self.isActivated:self.DeactivateDragonSoul()net.SendChatPacket("/dragon_soul deactivate")self.deckPageIndex = pageself.deckTab .Down()self.deckTab[(page+1)%2].SetUp()self.RefreshEquipSlotWindow()# ¿ëÈ¥¼® È°¼ºÈ* °ü·Ãdef ActivateDragonSoulByExtern(self, deck):self.isActivated = TRUEself.activateButton.Down()self.deckPageIndex = deckself.deckTab[deck].Down()self.deckTab[(deck+1)%2].SetUp()self.RefreshEquipSlotWindow()def DeactivateDragonSoul(self):self.isActivated = FALSEself.activateButton.SetUp()def ActivateButtonClick(self):self.isActivated = self.isActivated ^ TRUEif self.isActivated:if self.__CanActivateDeck():net.SendChatPacket("/dragon_soul activate " + str(self.deckPageIndex))else:self.isActivated = FALSEself.activateButton.SetUp()else:net.SendChatPacket("/dragon_soul deactivate")def __CanActivateDeck(self):canActiveNum = 0for i in xrange(6):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)itemVnum = player.GetItemIndex(slotNumber)if itemVnum != 0:item.SelectItem(itemVnum)isNoLimit = TRUEfor i in xrange(item.LIMIT_MAX_NUM):(limitType, limitValue) = item.GetLimit(i)# LIMIT_TIMER_BASED_ON_WEAR´Â ¼ÒÄÏ0¿¡ ³²Àº ½Ã°£À» ¹Ú´Â´Ù.# LIMIT_REAL_TIMEÀº ½Ã°£ ´Ù µÇ¸é ¾ÆÀÌÅÛÀÌ »ç¶óÁö¹Ç·Î ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.# LIMIT_REAL_TIME_START_FIRST_USE´Â ¼*¹ö¿¡ Á¦´ë·Î Á¤ÀǵÇÁö ¾Ê¾Æ ÀÏ´Ü ³ÀµĞ´Ù.if item.LIMIT_TIMER_BASED_ON_WEAR == limitType:isNoLimit = FALSEremain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0)if 0 != remain_time:canActiveNum += 1break# ŸÀ̸Ӱ¡ ¾ø´Ù¸é ActivateÇÒ ¼ö ÀÖ´Â ¿ëÈ¥¼®.if isNoLimit:canActiveNum += 1return canActiveNum &--#62; 0# È°¼ºÈ* °ü·Ã ³¡# ½½·Ô highlight °ü·Ãdef __HighlightSlot_ClearCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.DeactivateSlot(i)self.listHighlightedSlot.remove(slotNumber)def __HighlightSlot_RefreshCurrentPage(self):for i in xrange(self.wndItem.GetSlotCount()):slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, i)if slotNumber in self.listHighlightedSlot:self.wndItem.ActivateSlot(i)def HighlightSlot(self, slot):if not slot in self.listHighlightedSlot:self.listHighlightedSlot.append (slot)# ½½·Ô highlight °ü·Ã ³¡def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):if app.ENABLE_DRAGON_SOUL_SYSTEM:from _weakref import proxyself.wndDragonSoulRefine = proxy(wndDragonSoulRefine)## °*È*ÇÒ ¼ö ¾ø´Â °æ¿ì ³¯¸®´Â ¿¹¿Ü#class DragonSoulRefineException(Exception):#passclass DragonSoulRefineWindow(ui.ScriptWindow):REFINE_TYPE_GRADE, REFINE_TYPE_STEP, REFINE_TYPE_STRENGTH = xrange(3)DS_SUB_HEADER_DIC = {REFINE_TYPE_GRADE : player.DS_SUB_HEADER_DO_UPGRADE,REFINE_TYPE_STEP : player.DS_SUB_HEADER_DO_IMPROVEMENT,REFINE_TYPE_STRENGTH : player.DS_SUB_HEADER_DO_REFINE}REFINE_STONE_SLOT, DRAGON_SOUL_SLOT = xrange(2)INVALID_DRAGON_SOUL_INFO = -1def __init__(self):ui.ScriptWindow.__init__(self)self.tooltipItem = Noneself.sellingSlotNumber = -1self.isLoaded = 0self.refineChoiceButtonDict = Noneself.doRefineButton = Noneself.wndMoney = Noneself.SetWindowName("DragonSoulRefineWindow")self.__LoadWindow()def __del__(self):ui.ScriptWindow.__del__(self)def Show(self):self.__LoadWindow()ui.ScriptWindow.Show(self)def __LoadWindow(self):if self.isLoaded == 1:returnself.isLoaded = 1try:pyScrLoader = ui.PythonScriptLoader()pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "dragonsoulrefinewindow.py")except:import exceptionexception.Abort("dragonsoulrefinewindow.LoadWindow.LoadObject")try:if locale.IsARABIC():self.board = self.GetChild("DragonSoulRefineWindowBaseImage")self.board.SetScale(-1.0, 1.0)self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)wndRefineSlot = self.GetChild("RefineSlot")wndResultSlot = self.GetChild("ResultSlot")self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))self.refineChoiceButtonDict = {self.REFINE_TYPE_GRADE : self.GetChild("GradeButton"),self.REFINE_TYPE_STEP: self.GetChild("StepButton"),self.REFINE_TYPE_STRENGTH : self.GetChild("StrengthButton"),}self.doRefineButton = self.GetChild("DoRefineButton")self.wndMoney = self.GetChild("Money_Slot")except:import exceptionexception.Abort("DragonSoulRefineWindow.LoadWindow.BindObject")## Item SlotswndRefineSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInRefineItem))wndRefineSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))wndRefineSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.__SelectRefineEmptySlot))wndRefineSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUseSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndRefineSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))wndResultSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInResultItem))wndResultSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))self.wndRefineSlot = wndRefineSlotself.wndResultSlot = wndResultSlot## Buttonself.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleDownEvent(self.__ToggleDownGradeButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleDownEvent(self.__ToggleDownStepButton)self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleDownEvent(self.__ToggleDownStrengthButton)self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_GRADE))self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STEP))self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetToggleUpEvent(lambda : self.__ToggleUpButton(self.REFINE_TYPE_STRENGTH))self.doRefineButton.SetEvent(self.__PressDoRefineButton)## Dialogself.wndPopupDialog = uiCommon.PopupDialog()self.currentRefineType = self.REFINE_TYPE_GRADEself.refineItemInfo = {}self.resultItemInfo = {}self.currentRecipe = {}self.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.__Initialize()def Destroy(self):self.ClearDictionary()self.tooltipItem = Noneself.wndItem = 0self.wndEquip = 0self.activateButton = 0self.questionDialog = Noneself.mallButton = Noneself.inventoryTab = []self.deckTab = []self.equipmentTab = []self.tabDict = Noneself.tabButtonDict = Nonedef Close(self):if None != self.tooltipItem:self.tooltipItem.HideToolTip()self.__FlushRefineItemSlot()player.SendDragonSoulRefine(player.DRAGON_SOUL_REFINE_CLOSE)self.Hide()def Show(self):self.currentRefineType = self.REFINE_TYPE_GRADEself.wndMoney.SetText(locale.NumberToMoneyString(0))self.refineChoiceButtonDict[self.REFINE_TYPE_GRADE].Down()self.refineChoiceButtonDict[self.REFINE_TYPE_STEP].SetUp()self.refineChoiceButtonDict[self.REFINE_TYPE_STRENGTH].SetUp()self.Refresh()ui.ScriptWindow.Show(self)def SetItemToolTip(self, tooltipItem):self.tooltipItem = tooltipItem# ¹öÆ° ´*·Á ÀÖ´Â »óŸ¦ Á¦¿ÜÇÑ ¸ğµç °*È*â °ü·Ã º¯¼öµéÀ» ÃʱâÈ*.def __Initialize(self):self.currentRecipe = {}self.refineItemInfo = {}self.resultItemInfo = {}if self.REFINE_TYPE_STRENGTH == self.currentRefineType:self.refineSlotLockStartIndex = 2else:self.refineSlotLockStartIndex = 1for i in xrange(self.refineSlotLockStartIndex):self.wndRefineSlot.HideSlotBaseImage(i)self.wndMoney.SetText(locale.NumberToMoneyString(0))def __FlushRefineItemSlot(self):## Item slot settings# ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹for invenType, invenPos, itemCount in self.refineItemInfo.values():remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)self.__Initialize()def __ToggleUpButton(self, idx):#if self.REFINE_TYPE_GRADE == self.currentRefineType:self.refineChoiceButtonDict[idx].Down()def __ToggleDownGradeButton(self):if self.REFINE_TYPE_GRADE == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_GRADEself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStepButton(self):if self.REFINE_TYPE_STEP == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STEPself.__FlushRefineItemSlot()self.Refresh()def __ToggleDownStrengthButton(self):if self.REFINE_TYPE_STRENGTH == self.currentRefineType:returnself.refineChoiceButtonDict[self.currentRefineType].SetUp()self.currentRefineType = self.REFINE_TYPE_STRENGTHself.__FlushRefineItemSlot()self.Refresh()def __PopUp(self, message):self.wndPopupDialog.SetText(message)self.wndPopupDialog.Open()def __SetItem(self, (invenType, invenPos), dstSlotIndex, itemCount):if dstSlotIndex &--#62;= self.refineSlotLockStartIndex:return FALSEitemVnum = player.GetItemIndex(invenType, invenPos)maxCount = player.GetItemCount(invenType, invenPos)if itemCount &--#62; maxCount:raise Exception, ("Invalid attachedItemCount(%d). (base pos (%d, %d), base itemCount(%d))" % (itemCount, invenType, invenPos, maxCount))#return FALSE# strength °*È*ÀÏ °æ¿ì, 0¹ø¿£ °*È*¼®, 1¹ø¿£ ¿ëÈ¥¼®À» ³õµµ·Ï °*Á¦ÇÔ.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if self.__IsDragonSoul(itemVnum):dstSlotIndex = 1else:dstSlotIndex = 0# ºó ½½·ÔÀ̾î¾ßÇÔ.if dstSlotIndex in self.refineItemInfo:return FALSE# °*È*â¿¡ ¿Ã¸± ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö °Ë»ç.if FALSE == self.__CheckCanRefine(itemVnum):return FALSE# ²ø¾î´Ù ³õÀº ¾ÆÀÌÅÛ Ä«¿îÆ®¸¸Å* ¿ø·¡ ÀÚ¸®ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® °¨¼Òplayer.SetItemCount(invenType, invenPos, maxCount - itemCount)self.refineItemInfo[dstSlotIndex] = (invenType, invenPos, itemCount)self.Refresh()return TRUE# °*È* °¡´ÉÇÑ ¾ÆÀÌÅÛÀÎÁö üũ# ¿ëÈ¥¼® °*È*´Â °*È* ·¹½ÃÇǸ¦ Á¤Çسõ°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó,# óÀ½¿¡ °*È*â¿¡ ¿Ã¸° ¿ëÈ¥¼®¿¡ ÀÇÇØ °*È* ·¹½ÃÇÇ°¡ °áÁ¤µÈ´Ù.# ±×·¡¼* __CanRefineGrade, __CanRefineStep, __CanRefineStrength ÇÔ¼ö¿¡¼*# °*È* ·¹½ÃÇÇ°¡ ¾ø´Ù¸é(óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀ̶ó¸é), °*È* ·¹½ÃÇǸ¦ ¼³Á¤ÇØÁÖ´Â ¿ªÇÒµµ ÇÑ´Ù.def __CheckCanRefine(self, vnum):if self.REFINE_TYPE_GRADE == self.currentRefineType:return self.__CanRefineGrade(vnum)elif self.REFINE_TYPE_STEP == self.currentRefineType:return self.__CanRefineStep(vnum)elif self.REFINE_TYPE_STRENGTH == self.currentRefineType:return self.__CanRefineStrength(vnum)else:return FALSEreturn TRUEdef __CanRefineGrade (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, °*È* Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineGradeRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStep (self, vnum):ds_info = self.__GetDragonSoulTypeInfo(vnum)if DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO == ds_info:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEif self.currentRecipe:ds_type, grade, step, strength = ds_infocur_refine_ds_type, cur_refine_grade, cur_refine_step, cur_refine_strength = self.currentRecipe["ds_info"]if not (cur_refine_ds_type == ds_type and cur_refine_grade == grade and cur_refine_step == step):self.__PopUp(locale.DRAGON_SOUL_INVALID_DRAGON_SOUL)return FALSE# °*È* â¿¡ óÀ½ ¾ÆÀÌÅÛÀ» ¿Ã¸®´Â °æ¿ì, Àç·á¿¡ °üÇÑ Á¤º¸°¡ ¾ø´Ù.# ¿ëÈ¥¼® °*È*°¡, ·¹½ÃÇǸ¦ °¡Áö°í ½ÃÀÛÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, °*È*â¿¡ óÀ½ ¿Ã¸®´Â ¾ÆÀÌÅÛÀÌ ¹«¾ùÀ̳Ŀ¡ µû¶ó,# ¹«¾ùÀ» °*È*ÇÏ°í, Àç·á°¡ ¹«¾ùÀÎÁö(ÀÌÇÏ ·¹½ÃÇÇ)°¡ Á¤ÇØÁø´Ù.# ·¹½ÃÇÇ°¡ ¾ø´Ù¸é, óÀ½ ¿Ã¸° ¾ÆÀÌÅÛÀ̶ó »ı°¢ÇÏ°í, vnumÀ» ¹ÙÅÁÀ¸·Î ·¹½ÃÇǸ¦ ¼ÂÆÃ.else:self.currentRecipe = self.__GetRefineStepRecipe(vnum)if self.currentRecipe:self.refineSlotLockStartIndex = self.currentRecipe["need_count"]self.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# °*È* Á¤º¸ ¼ÂÆÿ¡ ½ÇÆĞÇÏ¸é ¿Ã¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀ¸·Î ÆÇ´Ü.self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE)return FALSEdef __CanRefineStrength (self, vnum):# ¿ëÈ¥¼®ÀÎ °æ¿ì, ´õ ÀÌ»ó strength °*È*¸¦ ÇÒ ¼ö ¾ø´ÂÁö üũÇؾßÇÔ.if self.__IsDragonSoul(vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)import dragon_soul_refine_settingsif strength &--#62;= dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["strength_max_table"][grade][step]:self.__PopUp(locale.DRAGON_SOUL_CANNOT_REFINE_MORE)return FALSEelse:return TRUE# strength °*È*ÀÇ °æ¿ì, refine_recipe°¡ ¿ëÈ¥¼®ÀÇ Á¾·ù°¡ ¾Æ´Ñ, °*È*¼®ÀÇ Á¾·ù¿¡ µû¶ó ´Ş¶óÁø´Ù.# µû¶ó¼* ¿ëÈ¥¼®ÀÌ ¾Æ´Ï¶ó¸é,# ÀÌ¹Ì ·¹½ÃÇÇ°¡ ÀÖ´Â °æ¿ì´Â, °*È*¼®ÀÌ °*È*â¿¡ ÀÖ´Ù´Â °ÍÀ̹ǷÎ, return FALSE# ·¹½ÃÇÇ°¡ ¾ø´Â °æ¿ì´Â, °*È*¼®ÀÎÁö È®ÀÎÇÏ°í, ·¹½ÃÇǸ¦ ¼ÂÆÃÇÑ´Ù.else:if self.currentRecipe:self.__PopUp(locale.DRAGON_SOUL_IS_NOT_DRAGON_SOUL)return FALSEelse:refineRecipe = self.__GetRefineStrengthInfo(vnum)if refineRecipe:self.currentRecipe = refineRecipeself.wndMoney.SetText(locale.NumberToMoneyString(self.currentRecipe["fee"]))return TRUEelse:# ·¹½ÃÇǸ¦ ¼ÂÆÃÇÒ ¼ö ¾ø´Â °æ¿ìself.__PopUp(locale.DRAGON_SOUL_NOT_DRAGON_SOUL_REFINE_STONE)return FALSEdef __GetRefineGradeRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_need_count"][grade],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["grade_fee"][grade]}except:return Nonedef __GetRefineStepRecipe (self, vnum):ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)try:import dragon_soul_refine_settingsreturn {"ds_info" : (ds_type, grade, step, strength),"need_count" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_need_count"][step],"fee" : dragon_soul_refine_settings.dragon_soul_refine_info[ds_type]["step_fee"][step]}except:return None# strength °*È*ÀÇ °æ¿ì, refineInfo´Â °*È*¼®¿¡ µû¶ó ´Ş¶óÁø´Ù.def __GetRefineStrengthInfo (self, itemVnum):try:# À̳ğÀÇ À§Ä¡¸¦ ¾îÂîÇÏÁö....# °*È*¼®ÀÌ ¾Æ´Ï¸é ¾ÈµÊ.item.SelectItem(itemVnum)if not (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):return Noneimport dragon_soul_refine_settingsreturn { "fee" : dragon_soul_refine_settings.strength_fee[item.GetItemSubType()] }except:return Nonedef __IsDragonSoul(self, vnum):item.SelectItem(vnum)return item.GetItemType() == item.ITEM_TYPE_DS# ¿ëÈ¥¼® Vnum¿¡ ´ëÇÑ comment# ITEM VNUMÀ» 10¸¸ ÀÚ¸®ºÎÅÍ, FEDCBA¶ó°í ÇÑ´Ù¸é# FE : ¿ëÈ¥¼® Á¾·ù. D : µî±Ş# C : ´Ü°è B : °*È*# A : ¿©¹úÀÇ ¹øÈ£µé...def __GetDragonSoulTypeInfo(self, vnum):if not self.__IsDragonSoul(vnum):return DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFOds_type = vnum / 10000grade = vnum % 10000 /1000step = vnum % 1000 / 100strength = vnum % 100 / 10return (ds_type, grade, step, strength)def __MakeDragonSoulVnum(self, ds_type, grade, step, strength):return ds_type * 10000 + grade * 1000 + step * 100 + strength * 10## ºó ½½·Ô ¼±Åà Eventdef __SelectRefineEmptySlot(self, selectedSlotPos):try:if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returnif selectedSlotPos &--#62;= self.refineSlotLockStartIndex:returnif mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, locale.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnif TRUE == self.__SetItem((attachedInvenType, attachedSlotPos), selectedSlotPos, attachedItemCount):self.Refresh()except Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineEmptySlot, %s" % e)# Ŭ¸¯À¸·Î ½½·Ô¿¡¼* »èÁ¦.def __SelectRefineItemSlot(self, selectedSlotPos):if constInfo.GET_ITEM_DROP_QUESTION_DIALOG_STATUS() == 1:returntry:if not selectedSlotPos in self.refineItemInfo:# »õ·Î¿î ¾ÆÀÌÅÛÀ» °*È*â¿¡ ¿Ã¸®´Â ÀÛ¾÷.if mouseModule.mouseController.isAttached():attachedSlotType = mouseModule.mouseController.GetAttachedType()attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()mouseModule.mouseController.DeattachObject()if uiPrivateShopBuilder.IsBuildingPrivateShop():chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)returnattachedInvenType = player.SlotTypeToInvenType(attachedSlotType)if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):returnif player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:returnself.AutoSetItem((attachedInvenType, attachedSlotPos), 1)returnelif mouseModule.mouseController.isAttached():returnattachedInvenType, attachedSlotPos, attachedItemCount = self.refineItemInfo[selectedSlotPos]selectedItemVnum = player.GetItemIndex(attachedInvenType, attachedSlotPos)# °*È*â¿¡¼* »èÁ¦ ¹× ¿ø·¡ Àκ¥ÀÇ ¾ÆÀÌÅÛ Ä«¿îÆ® ȸº¹invenType, invenPos, itemCount = self.refineItemInfo[selectedSlotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# °*È*âÀÌ ºñ¾ú´Ù¸é, ÃʱâÈ*if not self.refineItemInfo:self.__Initialize()else:item.SelectItem(selectedItemVnum)# ¾ø¾Ø ¾ÆÀÌÅÛÀÌ °*È*¼®À̾ú´Ù¸é °*È* ·¹Çǽà ÃʱâÈ*if (item.ITEM_TYPE_MATERIAL == item.GetItemType()and (item.MATERIAL_DS_REFINE_NORMAL &--#60;= item.GetItemSubType() and item.GetItemSubType() &--#60;= item.MATERIAL_DS_REFINE_HOLLY)):self.currentRecipe = {}self.wndMoney.SetText(localeInfo.NumberToMoneyString(0))# ¿ëÈ¥¼®À̾ú´Ù¸é,# strength°*È*°¡ ¾Æ´Ñ °æ¿ì, °*È*â¿¡ ´Ù¸¥ ¿ëÈ¥¼®ÀÌ ³²¾ÆÀÖÀ¸¹Ç·Î, ·¹½ÃÇǸ¦ ÃʱâÈ*ÇÏ¸é ¾ÈµÊ.# strength°*È*ÀÇ °æ¿ì, °*È* ·¹½ÃÇÇ´Â °*È*¼®¿¡ Á¾¼ÓµÈ °ÍÀ̹ǷΠ´Ù¸¥ ó¸®ÇÒ ÇÊ¿ä°¡ ¾øÀ½.else:passexcept Exception, e:import dbgdbg.TraceError("Exception : __SelectRefineItemSlot, %s" % e)self.Refresh()def __OverInRefineItem(self, slotIndex):if self.refineItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.refineItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverInResultItem(self, slotIndex):if self.resultItemInfo.has_key(slotIndex):inven_type, inven_pos, item_count = self.resultItemInfo[slotIndex]self.tooltipItem.SetInventoryItem(inven_pos, inven_type)def __OverOutItem(self):if self.tooltipItem:self.tooltipItem.HideToolTip()def __PressDoRefineButton(self):for i in xrange(self.refineSlotLockStartIndex):if not i in self.refineItemInfo:self.wndPopupDialog.SetText(locale.DRAGON_SOUL_NOT_ENOUGH_MATERIAL)self.wndPopupDialog.Open()returnplayer.SendDragonSoulRefine(DragonSoulRefineWindow.DS_SUB_HEADER_DIC[self.currentRefineType], self.refineItemInfo)def OnPressEscapeKey(self):self.Close()return TRUEdef Refresh(self):self.__RefreshRefineItemSlot()self.__ClearResultItemSlot()def __RefreshRefineItemSlot(self):try:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):self.wndRefineSlot.ClearSlot(slotPos)if slotPos &--#60; self.refineSlotLockStartIndex:# self.refineItemInfo[slotPos]ÀÇ Á¤º¸È®ÀÎ# (½ÇÁ¦·Î ¾ÆÀÌÅÛÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎ)# Á¸Àç -&--#62; ¾ÆÀÌÅÛ ¾ÆÀÌÄÜÀ» ½½·Ô¿¡ ¼ÂÆÃ.# ºñÁ¸Àç -&--#62; ¾ÆÀÌÅÛÀÌ ¾øÀ¸¹Ç·Î °*È*â¿¡¼* »èÁ¦.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]itemVnum = player.GetItemIndex(invenType, invenPos)# if itemVnum:if itemVnum:self.wndRefineSlot.SetItemSlot(slotPos, player.GetItemIndex(invenType, invenPos), itemCount)else:del self.refineItemInfo[slotPos]# ºó ½½·Ô¿¡ reference ¾ÆÀÌÄÜÀ» alpha 0.5·Î ¼ÂÆÃ.if not slotPos in self.refineItemInfo:try:reference_vnum = 0# strength °*È*ÀÏ ¶§´Â,# 0¹ø ½½·Ô¿¡ °*È*¼®À», 1¹ø ½½·Ô¿¡ ¿ëÈ¥¼®À» ³õ´Â´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if DragonSoulRefineWindow.REFINE_STONE_SLOT == slotPos:reference_vnum = 100300else:reference_vnum = self.__MakeDragonSoulVnum(*self.currentRecipe["ds_info"])if 0 != reference_vnum:item.SelectItem(reference_vnum)itemIcon = item.GetIconImage()(width, height) = item.GetItemSize()self.wndRefineSlot.SetSlot(slotPos, 0, width, height, itemIcon, (1.0, 1.0, 1.0, 0.5))# slot ¿ìÃø ÇÏ´Ü¿¡ ¼ıÀÚ ¶ß¸é ¾È ¿¹»İ...self.wndRefineSlot.SetSlotCount(slotPos, 0)except:pass# refineSlotLockStartIndex º¸´Ù ÀÛÀº ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©ÁÖ¸é ¾ÈµÊ.self.wndRefineSlot.HideSlotBaseImage(slotPos)# slotPos &--#62;= self.refineSlotLockStartIndex:else:# Á¤»óÀûÀÎ °æ¿ì¶ó¸é ÀÌ if¹®¿¡ µé¾î°¥ ÀÏÀº ¾ø°ÚÁö¸¸,# (¾ÖÃÊ¿¡ À妽º°¡ refineSlotLockStartIndex ÀÌ»óÀÎ ½½·Ô¿¡´Â ¾ÆÀÌÅÛÀ» ³ÖÁö ¸øÇÏ°Ô Ç߱⠶§¹®)# Ȥ½Ã ¸ğ¸¦ ¿¡·¯¿¡ ´ëºñÇÔ.if slotPos in self.refineItemInfo:invenType, invenPos, itemCount = self.refineItemInfo[slotPos]remainCount = player.GetItemCount(invenType, invenPos)player.SetItemCount(invenType, invenPos, remainCount + itemCount)del self.refineItemInfo[selectedSlotPos]# refineSlotLockStartIndex ÀÌ»óÀÎ ½½·ÔÀº ´İÈù À̹ÌÁö¸¦ º¸¿©Áà¾ßÇÔ.self.wndRefineSlot.ShowSlotBaseImage(slotPos)# °*È*â¿¡ ¾Æ¹«·± ¾ÆÀÌÅÛÀÌ ¾ø´Ù¸é, ÃʱâÈ*ÇØÁÜ.# À§¿¡¼* Áß°£ Áß°£¿¡ "del self.refineItemInfo[slotPos]"¸¦ Ç߱⠶§¹®¿¡,# ¿©±â¼* Çѹø üũÇØÁà¾ßÇÔ.if not self.refineItemInfo:self.__Initialize()self.wndRefineSlot.RefreshSlot()except Exception, e:import dbgdbg.TraceError("Exception : __RefreshRefineItemSlot, %s" % e)def __GetEmptySlot(self, itemVnum = 0):# STRENGTH °*È*ÀÇ °æ¿ì, ¿ëÈ¥¼® ½½·Ô°ú °*È*¼® ½½·ÔÀÌ ±¸ºĞµÇ¾îÀֱ⠋š¹®¿¡# vnumÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.if DragonSoulRefineWindow.REFINE_TYPE_STRENGTH == self.currentRefineType:if 0 == itemVnum:return -1if self.__IsDragonSoul(itemVnum):if not DragonSoulRefineWindow.DRAGON_SOUL_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.DRAGON_SOUL_SLOTelse:if not DragonSoulRefineWindow.REFINE_STONE_SLOT in self.refineItemInfo:return DragonSoulRefineWindow.REFINE_STONE_SLOTelse:for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):if not slotPos in self.refineItemInfo:return slotPosreturn -1def AutoSetItem(self, (invenType, invenPos), itemCount):itemVnum = player.GetItemIndex(invenType, invenPos)emptySlot = self.__GetEmptySlot(itemVnum)if -1 == emptySlot:returnself.__SetItem((invenType, invenPos), emptySlot, itemCount)def __ClearResultItemSlot(self):self.wndResultSlot.ClearSlot(0)self.resultItemInfo = {}def RefineSucceed(self, inven_type, inven_pos):self.__Initialize()self.Refresh()itemCount = player.GetItemCount(inven_type, inven_pos)if itemCount &--#62; 0:self.resultItemInfo[0] = (inven_type, inven_pos, itemCount)self.wndResultSlot.SetItemSlot(0, player.GetItemIndex(inven_type, inven_pos), itemCount)def RefineFail(self, reason, inven_type, inven_pos):if net.DS_SUB_HEADER_REFINE_ [img]http://cyber-gamers.org/public/style_emoticons/<#EMO_DIR#>/55158.gif[/img]http://cyber-gamers.org/public/style_emoticons/<#EMO_DIR#>/55158.gif[/img] == reason:self.__Initialize()self.Refresh()itemCount = player.GetItemCount(inven_type, inven_pos)if itemCount &--#62; 0:self.resultItemInfo[0] = (inven_type, inven_pos, itemCount)self.wndResultSlot.SetItemSlot(0, player.GetItemIndex(inven_type, inven_pos), itemCount)else:self.Refresh()def SetInventoryWindows(self, wndInventory, wndDragonSoul):self.wndInventory = wndInventoryself.wndDragonSoul = wndDragonSoul Adicionar game.py ## Inventory Suche ## DragonSoulelif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)mouseModule.mouseController.DeattachObject()else:hyperlink = ui.GetHyperlink()if hyperlink:if app.IsPressed(app.DIK_LALT):link = chat.GetLinkFromHyperlink(hyperlink)ime.PasteString(link)else:self.interface.MakeHyperlinkTooltip(hyperlink)returnelse:player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK)#player.EndMouseWalking()return TRUEdef __PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID):if player.SLOT_TYPE_INVENTORY == attachedType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:attachedInvenType = player.SlotTypeToInvenType(attachedType)if TRUE == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID:if player.IsEquipmentSlot(attachedItemSlotPos):self.stream.popupWindow.Close()self.stream.popupWindow.Open(locale.EXCHANGE_FAILURE_EQUIP_ITEM, 0, locale.UI_OK)else:if chr.IsNPC(dstChrID):net.SendGiveItemPacket(dstChrID, attachedInvenType, attachedItemSlotPos, attachedItemCount)else:net.SendExchangeStartPacket(dstChrID)net.SendExchangeItemAddPacket(attachedInvenType, attachedItemSlotPos, 0)else:self.__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount) Add Game.py # END_OF_CUBE # ¿ëÈ¥¼®def BINARY_Highlight_Item(self, inven_type, inven_pos):self.interface.Highligt_Item(inven_type, inven_pos)def BINARY_DragonSoulGiveQuilification(self):self.interface.DragonSoulGiveQuilification()def BINARY_DragonSoulRefineWindow_Open(self):self.interface.OpenDragonSoulRefineWindow()def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)# END of DRAGON SOUL REFINE WINDOW Add Game.py onPressKeyDict[app.DIK_I] = lambda : self.interface.ToggleInventoryWindow() e adicioná-lo onPressKeyDict[app.DIK_O] = lambda : self.interface.ToggleDragonSoulWindowWithNoInfo() Add Game.py# UNKNOWN_UPDATEdef BINARY_NEW_AddAffect(self, type, pointIdx, value, duration): self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1) elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type: self.BINARY_DragonSoulGiveQuilification() def BINARY_NEW_RemoveAffect(self, type, pointIdx): self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulDeactivate() Fonte : EPVP Cumprimentos, 8 RickyM2, kikoocunha, thecrazy and 5 others reacted to this Share this post Link to post Share on other sites
kikoocunha 35 Posted June 20, 2013 Muito obrigadovalente http://cyber-gamers.org/public/style_emoticons/default/451960.gif :D Share this post Link to post Share on other sites
SINVAL o.O 728 Posted June 20, 2013 Muito obrigadovalente http://cyber-gamers.org/public/style_emoticons/default/451960.gif :DNds(entra skype pow) Share this post Link to post Share on other sites
Obilivion 183 Posted June 20, 2013 LOL parece Minecraft xDD http://cyber-gamers.org/public/style_emoticons/default/451960.gif :) Share this post Link to post Share on other sites
'PACI 2,317 Posted June 20, 2013 Nem deve ter testado se funciona, flw ae Share this post Link to post Share on other sites
SINVAL o.O 728 Posted June 20, 2013 Nem deve ter testado se funciona, flw aeAinda não testei por não ter tempo, mais lá onde peguei deve ter uns 20 comentarios que funcionou; Em segundo lugar a maioria do que o povo posta não testa, mais si o tópico te encomoda denuncia ele ai. Share this post Link to post Share on other sites
'PACI 2,317 Posted June 20, 2013 Ainda não testei por não ter tempo, mais lá onde peguei deve ter uns 20 comentarios que funcionou; Em segundo lugar a maioria do que o povo posta não testa, mais si o tópico te encomoda denuncia ele ai. Então sendo assim, arranje lá a lib que tanto se fala lá. Ou então arranje um binário onde se possa usar o Sistema de Alquimia do Dragão. Ou então resolva isso do npcVnum :) É uma perda de tempo. E não, de facto, não me incomoda. Só que postar sem testar, tipo nah.. 1 RickyM2 reacted to this Share this post Link to post Share on other sites
skeewzz ♛ 245 Posted June 20, 2013 LOL parece Minecraft xDD http://cyber-gamers.org/public/style_emoticons/default/451960.gif :) Share this post Link to post Share on other sites
Witness 87 Posted May 16, 2017 não falta interfacemodule.py? Share this post Link to post Share on other sites