1. """
  2. root>dragon_soul_refine_settings.py
  3. """
  4. # En alta ekle:
  5. import app
  6. if app.ENABLE_DS_CHANGE_ATTR:
  7. default_flame_need_count = [1, 3, 5, 10, 20]
  8. """
  9. root>uidragonsoul.py
  10. """
  11. # Arat:
  12. self.tabText = self.GetChild("tab_text_area")
  13. # Altına ekle:
  14. if app.ENABLE_DS_CHANGE_ATTR: ##ENABLE_DS_CHANGE_ATTR: self.btnChangeAttr = self.GetChild("btnChangeAttr")
  15. # Arat:
  16. self.wndPopupDialog = uiCommon.PopupDialog()
  17. # Altına ekle:
  18. if app.ENABLE_DS_CHANGE_ATTR: self.btnChangeAttr.SetEvent(self.OnChangeAttr)
  19. # Arat:
  20. def ActivateEquipSlotWindow(self, deck):
  21. # Altına ekle:
  22. if app.ENABLE_DS_CHANGE_ATTR:
  23. def OnChangeAttr(self):
  24. self.wndDragonSoulChangeAttr.Show()
  25. # Arat:
  26. def UseItemSlot(self, slotIndex):
  27. if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS():
  28. return
  29. slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(player.DRAGON_SOUL_INVENTORY, slotIndex)
  30. try:
  31. # ¿ëÈ¥¼® °­È­Ã¢ÀÌ ¿­·ÁÀÖÀ¸¸é, ¾ÆÀÌÅÛ ¿ìŬ¸¯ ½Ã ÀÚµ¿À¸·Î °­È­Ã¢À¸·Î µé¾î°¨.
  32. if self.wndDragonSoulRefine.IsShow():
  33. if uiPrivateShopBuilder.IsBuildingPrivateShop():
  34. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
  35. return
  36. self.wndDragonSoulRefine.AutoSetItem((player.DRAGON_SOUL_INVENTORY, slotIndex), 1)
  37. return
  38. # Altına ekle:
  39. if app.ENABLE_DS_CHANGE_ATTR:
  40. if self.wndDragonSoulChangeAttr.IsShow():
  41. if uiPrivateShopBuilder.IsBuildingPrivateShop():
  42. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
  43. return
  44. self.wndDragonSoulChangeAttr.AutoSetItem((player.DRAGON_SOUL_INVENTORY, slotIndex), 1)
  45. return
  46. # Arat:
  47. def SetDragonSoulRefineWindow(self, wndDragonSoulRefine):
  48. if app.ENABLE_DRAGON_SOUL_SYSTEM:
  49. from _weakref import proxy
  50. self.wndDragonSoulRefine = proxy(wndDragonSoulRefine)
  51. # Altına ekle:
  52. if app.ENABLE_DS_CHANGE_ATTR:
  53. def SetDragonSoulChangeAttrWindow(self, wndDragonSoulChangeAttr):
  54. from _weakref import proxy
  55. self.wndDragonSoulChangeAttr = proxy(wndDragonSoulChangeAttr)
  56. # En alta ekle:
  57. if app.ENABLE_DS_CHANGE_ATTR:
  58. class DragonSoulChangeAttrWindow(ui.ScriptWindow):
  59. def __init__(self):
  60. ui.ScriptWindow.__init__(self)
  61. self.tooltipItem = None
  62. self.sellingSlotNumber = -1
  63. self.isLoaded = 0
  64. self.refineChoiceButtonDict = None
  65. self.doApplyButton = None
  66. self.wndMoney = None
  67. self.SetWindowName("DragonSoulChangeAttrWindow")
  68. self.__LoadWindow()
  69. def __del__(self):
  70. ui.ScriptWindow.__del__(self)
  71. def Show(self):
  72. self.__LoadWindow()
  73. ui.ScriptWindow.Show(self)
  74. def __LoadWindow(self):
  75. if self.isLoaded == 1:
  76. return
  77. self.isLoaded = 1
  78. try:
  79. pyScrLoader = ui.PythonScriptLoader()
  80. pyScrLoader.LoadScriptFile(self, "uiscript/dragonsoulattr.py")
  81. except:
  82. import exception
  83. exception.Abort("dragonsoulrefinewindow.LoadWindow.LoadObject")
  84. try:
  85. if localeInfo.IsARABIC():
  86. self.board = self.GetChild("DragonSoulRefineWindowBaseImage")
  87. self.board.SetScale(-1.0, 1.0)
  88. self.board.SetRenderingRect(-1.0, 0.0, 1.0, 0.0)
  89. wndRefineSlot = self.GetChild("RefineSlot")
  90. wndResultSlot = self.GetChild("ResultSlot")
  91. self.GetChild("TitleBar").SetCloseEvent(ui.__mem_func__(self.Close))
  92. self.changeAttrButton = self.GetChild("ChangeAttrButton")
  93. self.doApplyButton = self.GetChild("DoApplyButton")
  94. self.wndMoney = self.GetChild("Money_Slot")
  95. except:
  96. import exception
  97. exception.Abort("DragonSoulRefineWindow.LoadWindow.BindObject")
  98. ## Item Slots
  99. wndRefineSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInRefineItem))
  100. wndRefineSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))
  101. wndRefineSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.__SelectRefineEmptySlot))
  102. wndRefineSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))
  103. wndRefineSlot.SetUseSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))
  104. wndRefineSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__SelectRefineItemSlot))
  105. wndResultSlot.SetOverInItemEvent(ui.__mem_func__(self.__OverInResultItem))
  106. wndResultSlot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutItem))
  107. self.wndRefineSlot = wndRefineSlot
  108. self.wndResultSlot = wndResultSlot
  109. ## Button
  110. self.changeAttrButton.Down()
  111. self.doApplyButton.SetEvent(self.__PressDoApplyButton)
  112. ## Dialog
  113. self.wndPopupDialog = uiCommon.PopupDialog()
  114. self.refineItemInfo = {}
  115. self.resultItemInfo = {}
  116. self.needFireCount = 0
  117. self.needfee = 0
  118. self.wndMoney.SetText("Gerekli Ejderha alevi sayısı: %s" % self.needFireCount)
  119. self.__Initialize()
  120. def Destroy(self):
  121. self.ClearDictionary()
  122. self.tooltipItem = None
  123. self.wndItem = 0
  124. self.wndEquip = 0
  125. self.activateButton = 0
  126. self.questionDialog = None
  127. self.mallButton = None
  128. self.inventoryTab = []
  129. self.deckTab = []
  130. self.equipmentTab = []
  131. self.tabDict = None
  132. self.tabButtonDict = None
  133. def Close(self):
  134. if None != self.tooltipItem:
  135. self.tooltipItem.HideToolTip()
  136. self.__FlushRefineItemSlot()
  137. player.SendDragonSoulRefine(player.DRAGON_SOUL_REFINE_CLOSE)
  138. self.Hide()
  139. def Show(self):
  140. self.wndMoney.SetText("Gerekli Ejderha alevi sayısı: %s" % self.needFireCount)
  141. self.doApplyButton.Down() and self.doApplyButton.Disable()
  142. self.Refresh()
  143. ui.ScriptWindow.Show(self)
  144. def SetItemToolTip(self, tooltipItem):
  145. self.tooltipItem = tooltipItem
  146. def __Initialize(self):
  147. self.needFireCount = 0
  148. self.needfee = 0
  149. self.refineItemInfo = {}
  150. self.resultItemInfo = {}
  151. self.refineSlotLockStartIndex = 2
  152. for i in xrange(self.refineSlotLockStartIndex):
  153. self.wndRefineSlot.HideSlotBaseImage(i)
  154. self.wndMoney.SetText("Gerekli Ejderha alevi sayısı: %s" % self.needFireCount)
  155. def __FlushRefineItemSlot(self):
  156. for invenType, invenPos, itemCount in self.refineItemInfo.values():
  157. remainCount = player.GetItemCount(invenType, invenPos)
  158. player.SetItemCount(invenType, invenPos, remainCount + itemCount)
  159. self.__Initialize()
  160. def __PopUp(self, message):
  161. self.wndPopupDialog.SetText(message)
  162. self.wndPopupDialog.Open()
  163. def __SetItem(self, inven, dstSlotIndex, itemCount):
  164. invenType, invenPos = inven
  165. if dstSlotIndex >= self.refineSlotLockStartIndex:
  166. return False
  167. itemVnum = player.GetItemIndex(invenType, invenPos)
  168. maxCount = player.GetItemCount(invenType, invenPos)
  169. if itemCount > maxCount:
  170. raise Exception, ("Invalid attachedItemCount(%d). (base pos (%d, %d), base itemCount(%d))" % (itemCount, invenType, invenPos, maxCount))
  171. #return False
  172. if self.__IsDragonSoul(itemVnum):
  173. dstSlotIndex = 0
  174. self.__SetAttrCountInfo(itemVnum)
  175. else:
  176. dstSlotIndex = 1
  177. if dstSlotIndex in self.refineItemInfo:
  178. return False
  179. player.SetItemCount(invenType, invenPos, maxCount - itemCount)
  180. self.refineItemInfo[dstSlotIndex] = (invenType, invenPos, itemCount)
  181. self.Refresh()
  182. return True
  183. def __SetAttrCountInfo(self, vnum):
  184. ds_type, grade, step, strength = self.__GetDragonSoulTypeInfo(vnum)
  185. try:
  186. import dragon_soul_refine_settings
  187. self.needFireCount = dragon_soul_refine_settings.default_flame_need_count[step]
  188. self.wndMoney.SetText("Gerekli Ejderha alevi sayısı: %s" % self.needFireCount)
  189. except:
  190. return None
  191. def __IsDragonSoul(self, vnum):
  192. item.SelectItem(vnum)
  193. return item.GetItemType() == item.ITEM_TYPE_DS
  194. def __GetDragonSoulTypeInfo(self, vnum):
  195. if not self.__IsDragonSoul(vnum):
  196. return DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO
  197. ds_type = vnum / 10000
  198. grade = vnum % 10000 /1000
  199. step = vnum % 1000 / 100
  200. strength = vnum % 100 / 10
  201. return (ds_type, grade, step, strength)
  202. def __MakeDragonSoulVnum(self, ds_type, grade, step, strength):
  203. return ds_type * 10000 + grade * 1000 + step * 100 + strength * 10
  204. def __SelectRefineEmptySlot(self, selectedSlotPos):
  205. try:
  206. if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
  207. return
  208. if selectedSlotPos >= self.refineSlotLockStartIndex:
  209. return
  210. if mouseModule.mouseController.isAttached():
  211. attachedSlotType = mouseModule.mouseController.GetAttachedType()
  212. attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  213. attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
  214. attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
  215. mouseModule.mouseController.DeattachObject()
  216. if uiPrivateShopBuilder.IsBuildingPrivateShop():
  217. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
  218. return
  219. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  220. if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):
  221. return
  222. if player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:
  223. return
  224. if True == self.__SetItem((attachedInvenType, attachedSlotPos), selectedSlotPos, attachedItemCount):
  225. self.Refresh()
  226. except Exception, e:
  227. import dbg
  228. dbg.TraceError("Exception : __SelectRefineEmptySlot, %s" % e)
  229. def __SelectRefineItemSlot(self, selectedSlotPos):
  230. if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS() == 1:
  231. return
  232. try:
  233. if not selectedSlotPos in self.refineItemInfo:
  234. if mouseModule.mouseController.isAttached():
  235. attachedSlotType = mouseModule.mouseController.GetAttachedType()
  236. attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  237. attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
  238. attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
  239. mouseModule.mouseController.DeattachObject()
  240. if uiPrivateShopBuilder.IsBuildingPrivateShop():
  241. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
  242. return
  243. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  244. if player.INVENTORY == attachedInvenType and player.IsEquipmentSlot(attachedSlotPos):
  245. return
  246. if player.INVENTORY != attachedInvenType and player.DRAGON_SOUL_INVENTORY != attachedInvenType:
  247. return
  248. self.AutoSetItem((attachedInvenType, attachedSlotPos), 1)
  249. return
  250. elif mouseModule.mouseController.isAttached():
  251. return
  252. attachedInvenType, attachedSlotPos, attachedItemCount = self.refineItemInfo[selectedSlotPos]
  253. selectedItemVnum = player.GetItemIndex(attachedInvenType, attachedSlotPos)
  254. invenType, invenPos, itemCount = self.refineItemInfo[selectedSlotPos]
  255. remainCount = player.GetItemCount(invenType, invenPos)
  256. player.SetItemCount(invenType, invenPos, remainCount + itemCount)
  257. del self.refineItemInfo[selectedSlotPos]
  258. if not self.refineItemInfo:
  259. self.__Initialize()
  260. else:
  261. item.SelectItem(selectedItemVnum)
  262. if (item.ITEM_TYPE_MATERIAL == item.GetItemType() \
  263. and (item.MATERIAL_DS_REFINE_NORMAL <= item.GetItemSubType() and item.GetItemSubType() <= item.MATERIAL_DS_REFINE_HOLLY)):
  264. self.currentRecipe = {}
  265. self.wndMoney.SetText("Gerekli Ejderha alevi sayısı: %s" % self.needFireCount)
  266. else:
  267. pass
  268. except Exception, e:
  269. import dbg
  270. dbg.TraceError("Exception : __SelectRefineItemSlot, %s" % e)
  271. self.Refresh()
  272. def __OverInRefineItem(self, slotIndex):
  273. if self.refineItemInfo.has_key(slotIndex):
  274. inven_type, inven_pos, item_count = self.refineItemInfo[slotIndex]
  275. self.tooltipItem.SetInventoryItem(inven_pos, inven_type)
  276. def __OverInResultItem(self, slotIndex):
  277. if self.resultItemInfo.has_key(slotIndex):
  278. inven_type, inven_pos, item_count = self.resultItemInfo[slotIndex]
  279. self.tooltipItem.SetInventoryItem(inven_pos, inven_type)
  280. def __OverOutItem(self):
  281. if self.tooltipItem:
  282. self.tooltipItem.HideToolTip()
  283. def __PressDoApplyButton(self):
  284. for i in xrange(self.refineSlotLockStartIndex):
  285. if not i in self.refineItemInfo:
  286. self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_NOT_ENOUGH_MATERIAL)
  287. self.wndPopupDialog.Open()
  288. return
  289. inven_type, inven_pos, item_count = self.refineItemInfo[0]
  290. net.SendChatPacket("/ds_change_attr %s" % (inven_pos))
  291. def OnPressEscapeKey(self):
  292. self.Close()
  293. return True
  294. def Refresh(self):
  295. self.__RefreshRefineItemSlot()
  296. self.__ClearResultItemSlot()
  297. def __RefreshRefineItemSlot(self):
  298. try:
  299. for slotPos in xrange(self.wndRefineSlot.GetSlotCount()):
  300. self.wndRefineSlot.ClearSlot(slotPos)
  301. if slotPos < self.refineSlotLockStartIndex:
  302. if slotPos in self.refineItemInfo:
  303. invenType, invenPos, itemCount = self.refineItemInfo[slotPos]
  304. itemVnum = player.GetItemIndex(invenType, invenPos)
  305. if itemVnum:
  306. self.wndRefineSlot.SetItemSlot(slotPos, player.GetItemIndex(invenType, invenPos), itemCount)
  307. else:
  308. del self.refineItemInfo[slotPos]
  309. if not slotPos in self.refineItemInfo:
  310. try:
  311. reference_vnum = 0
  312. if 1 == slotPos:
  313. reference_vnum = 100700
  314. if 0 != reference_vnum:
  315. item.SelectItem(reference_vnum)
  316. itemIcon = item.GetIconImage()
  317. (width, height) = item.GetItemSize()
  318. self.wndRefineSlot.SetSlot(slotPos, 0, width, height, itemIcon, (1.0, 1.0, 1.0, 0.5))
  319. self.wndRefineSlot.SetSlotCount(slotPos, 0)
  320. except:
  321. pass
  322. self.wndRefineSlot.HideSlotBaseImage(slotPos)
  323. else:
  324. if slotPos in self.refineItemInfo:
  325. invenType, invenPos, itemCount = self.refineItemInfo[slotPos]
  326. remainCount = player.GetItemCount(invenType, invenPos)
  327. player.SetItemCount(invenType, invenPos, remainCount + itemCount)
  328. del self.refineItemInfo[slotPos]
  329. self.wndRefineSlot.ShowSlotBaseImage(slotPos)
  330. if not self.refineItemInfo:
  331. self.__Initialize()
  332. self.wndRefineSlot.RefreshSlot()
  333. except Exception, e:
  334. import dbg
  335. dbg.TraceError("Exception : __RefreshRefineItemSlot, %s" % e)
  336. def __GetEmptySlot(self, itemVnum = 0):
  337. if 0 == itemVnum:
  338. return -1
  339. if self.__IsDragonSoul(itemVnum):
  340. if not 0 in self.refineItemInfo:
  341. return 0
  342. elif 100700 == itemVnum:
  343. if not 1 in self.refineItemInfo:
  344. return 1
  345. return -1
  346. def AutoSetItem(self, inven, itemCount):
  347. invenType, invenPos = inven
  348. itemVnum = player.GetItemIndex(invenType, invenPos)
  349. emptySlot = self.__GetEmptySlot(itemVnum)
  350. if -1 == emptySlot:
  351. return
  352. self.__SetItem((invenType, invenPos), emptySlot, itemCount)
  353. def __ClearResultItemSlot(self):
  354. self.wndResultSlot.ClearSlot(0)
  355. self.resultItemInfo = {}
  356. def ChangeAttr_Success(self):
  357. inven_type, inven_pos, item_count = self.refineItemInfo[0]
  358. itemCount = player.GetItemCount(inven_type, inven_pos)
  359. self.__Initialize()
  360. self.Refresh()
  361. if itemCount > 0:
  362. self.resultItemInfo[0] = (inven_type, inven_pos, itemCount)
  363. self.wndResultSlot.SetItemSlot(0, player.GetItemIndex(inven_type, inven_pos), itemCount)
  364. def ChangeAttr_Failed(self):
  365. self.Refresh()
  366. def SetInventoryWindows(self, wndInventory, wndDragonSoul):
  367. self.wndInventory = wndInventory
  368. self.wndDragonSoul = wndDragonSoul