1. import ui
  2. import app
  3. import net
  4. import grp
  5. import chat
  6. import item
  7. import time
  8. import wndMgr
  9. import player
  10. import uiCommon
  11. import exchange
  12. import localeInfo
  13. import mouseModule
  14. import uiPickMoney
  15. import playerSettingModule
  16. ###################################################################################################
  17. ## Exchange
  18. class ExchangeDialog(ui.ScriptWindow):
  19. FACE_IMAGE_DICT = {
  20. playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
  21. playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
  22. playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
  23. playerSettingModule.RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
  24. playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga",
  25. playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga",
  26. playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
  27. playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
  28. }
  29. # if app.ENABLE_WOLFMAN_CHARACTER:
  30. # FACE_IMAGE_DICT.update({playerSettingModule.RACE_WOLFMAN_M : "icon/face/wolfman_m.tga",})
  31. def __init__(self):
  32. ui.ScriptWindow.__init__(self)
  33. self.TitleName = 0
  34. self.tooltipItem = 0
  35. self.xStart = 0
  36. self.yStart = 0
  37. def __del__(self):
  38. ui.ScriptWindow.__del__(self)
  39. class Item(ui.ListBoxEx.Item):
  40. def __init__(self,parent, text, value=0):
  41. ui.ListBoxEx.Item.__init__(self)
  42. self.textBox=ui.TextLine()
  43. self.textBox.SetParent(self)
  44. self.textBox.SetText(text)
  45. self.textBox.Show()
  46. self.value = value
  47. def GetValue(self):
  48. return self.value
  49. def __del__(self):
  50. ui.ListBoxEx.Item.__del__(self)
  51. def LoadDialog(self):
  52. PythonScriptLoader = ui.PythonScriptLoader()
  53. if app.ENABLE_NEW_EXCHANGE_WINDOW:
  54. PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog_new.py")
  55. else:
  56. PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog.py")
  57. self.OwnerSlot = self.GetChild("Owner_Slot")
  58. self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot))
  59. self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot))
  60. self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem))
  61. self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  62. self.OwnerMoney = self.GetChild("Owner_Money_Value")
  63. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  64. self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light")
  65. self.OwnerAcceptLight.Disable()
  66. self.OwnerMoneyButton = self.GetChild("Owner_Money")
  67. self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog))
  68. self.TargetSlot = self.GetChild("Target_Slot")
  69. self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem))
  70. self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  71. self.TargetMoney = self.GetChild("Target_Money_Value")
  72. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  73. self.TargetAcceptLight = self.GetChild("Target_Accept_Light")
  74. self.TargetAcceptLight.Disable()
  75. dlgPickMoney = uiPickMoney.PickMoneyDialog()
  76. dlgPickMoney.LoadDialog()
  77. dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
  78. dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY)
  79. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  80. dlgPickMoney.SetMax(13)
  81. else:
  82. dlgPickMoney.SetMax(20)
  83. dlgPickMoney.Hide()
  84. self.dlgPickMoney = dlgPickMoney
  85. self.AcceptButton = self.GetChild("Owner_Accept_Button")
  86. self.AcceptButton.SetToggleDownEvent(ui.__mem_func__(self.AcceptExchange))
  87. if app.ENABLE_NEW_EXCHANGE_WINDOW:
  88. self.TargetAcceptButton = self.GetChild("Target_Accept_Button")
  89. self.TitleName = self.GetChild("TitleName")
  90. self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket)
  91. if app.ENABLE_NEW_EXCHANGE_WINDOW:
  92. self.FaceOwnerImage = self.GetChild("FaceOwner_Image")
  93. self.FaceTargetImage = self.GetChild("FaceTarget_Image")
  94. self.TargetName = self.GetChild("target_NameText")
  95. self.TargetLevel = self.GetChild("target_LvText")
  96. self.ExchangeLogs = self.GetChild("ExchangeLogs")
  97. self.LogsScrollBar = ui.ThinScrollBar()
  98. self.LogsScrollBar.SetParent(self.ExchangeLogs)
  99. self.LogsScrollBar.SetPosition(442 - 75, 17)
  100. self.LogsScrollBar.SetScrollBarSize(50)
  101. self.LogsScrollBar.Show()
  102. self.LogsDropList = ui.ListBoxEx()
  103. self.LogsDropList.SetParent(self.ExchangeLogs)
  104. self.LogsDropList.itemHeight = 12
  105. self.LogsDropList.itemStep = 13
  106. self.LogsDropList.SetPosition(35, 27)
  107. self.LogsDropList.SetSize(0, 45)
  108. self.LogsDropList.SetScrollBar(self.LogsScrollBar)
  109. self.LogsDropList.SetViewItemCount(2)
  110. self.LogsDropList.Show()
  111. self.LogsScrollBar.Show()
  112. self.listOwnerSlot = []
  113. self.listTargetSlot = []
  114. def Destroy(self):
  115. print "---------------------------------------------------------------------------- DESTROY EXCHANGE"
  116. self.ClearDictionary()
  117. self.dlgPickMoney.Destroy()
  118. self.dlgPickMoney = 0
  119. self.OwnerSlot = 0
  120. self.OwnerMoney = 0
  121. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  122. self.OwnerAcceptLight = 0
  123. self.OwnerMoneyButton = 0
  124. self.TargetSlot = 0
  125. self.TargetMoney = 0
  126. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  127. self.TargetAcceptLight = 0
  128. self.TitleName = 0
  129. self.AcceptButton = 0
  130. if app.ENABLE_NEW_EXCHANGE_WINDOW:
  131. self.TargetAcceptButton = 0
  132. self.FaceOwnerImage = None
  133. self.FaceTargetImage = None
  134. self.TargetName = None
  135. self.TargetLevel = None
  136. self.ExchangesLogsWindow = None
  137. self.LogsDropList.RemoveAllItems()
  138. self.LogsScrollBar = None
  139. self.LogsDropList = None
  140. self.tooltipItem = 0
  141. def OpenDialog(self):
  142. self.TitleName.SetText(localeInfo.EXCHANGE_TITLE % (exchange.GetNameFromTarget()))
  143. self.AcceptButton.Enable()
  144. self.AcceptButton.SetUp()
  145. if app.ENABLE_NEW_EXCHANGE_WINDOW:
  146. self.TargetAcceptButton.Disable()
  147. self.TargetAcceptButton.SetUp()
  148. self.FaceOwnerImage.LoadImage(self.FACE_IMAGE_DICT[exchange.GetRaceFromSelf()])
  149. self.FaceTargetImage.LoadImage(self.FACE_IMAGE_DICT[exchange.GetRaceFromTarget()])
  150. self.TargetName.SetText(exchange.GetNameFromTarget())
  151. self.TargetLevel.SetText(localeInfo.NEW_EXCHANGE_LEVEL % (exchange.GetLevelFromTarget()))
  152. self.LogsDropList.RemoveAllItems()
  153. self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_READY % (str(time.strftime("[%H:%M:%S]"))), 0))
  154. self.Show()
  155. (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  156. def CloseDialog(self):
  157. wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
  158. if 0 != self.tooltipItem:
  159. self.tooltipItem.HideToolTip()
  160. self.dlgPickMoney.Close()
  161. self.Hide()
  162. def SetItemToolTip(self, tooltipItem):
  163. self.tooltipItem = tooltipItem
  164. def OpenPickMoneyDialog(self):
  165. if exchange.GetElkFromSelf() > 0:
  166. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY)
  167. return
  168. self.dlgPickMoney.Open(player.GetElk())
  169. def OnPickMoney(self, money):
  170. net.SendExchangeElkAddPacket(str(money))
  171. def AcceptExchange(self):
  172. if app.ENABLE_NEW_EXCHANGE_WINDOW:
  173. atLeastOneItem = 0
  174. atLeastOneYang = 0
  175. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  176. itemCount = exchange.GetItemCountFromTarget(i)
  177. if itemCount >= 1:
  178. atLeastOneYang = 1
  179. break
  180. if exchange.GetElkFromTarget() >= 1:
  181. atLeastOneYang = 1
  182. if atLeastOneItem or atLeastOneYang:
  183. net.SendExchangeAcceptPacket()
  184. self.AcceptButton.Disable()
  185. else:
  186. atLeastOneItem = 0
  187. atLeastOneYang = 0
  188. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  189. itemCount = exchange.GetItemCountFromSelf(i)
  190. if itemCount >= 1:
  191. atLeastOneYang = 1
  192. break
  193. if exchange.GetElkFromSelf() >= 1:
  194. atLeastOneYang = 1
  195. if atLeastOneItem or atLeastOneYang:
  196. self.questionDialog = uiCommon.QuestionDialog2()
  197. self.questionDialog.SetText1(localeInfo.NEW_EXCHANGE_ALERT1)
  198. self.questionDialog.SetText2(localeInfo.NEW_EXCHANGE_ALERT2)
  199. self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.AcceptQuestion))
  200. self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
  201. self.questionDialog.Open()
  202. else:
  203. net.SendExchangeAcceptPacket()
  204. self.AcceptButton.Disable()
  205. else:
  206. net.SendExchangeAcceptPacket()
  207. self.AcceptButton.Disable()
  208. if app.ENABLE_NEW_EXCHANGE_WINDOW:
  209. def AcceptQuestion(self):
  210. net.SendExchangeAcceptPacket()
  211. self.AcceptButton.Disable()
  212. if self.questionDialog:
  213. self.questionDialog.Close()
  214. self.questionDialog = None
  215. def OnCloseQuestionDialog(self):
  216. if self.questionDialog:
  217. self.questionDialog.Close()
  218. self.questionDialog = None
  219. self.AcceptButton.Enable()
  220. self.AcceptButton.SetUp()
  221. def SelectOwnerEmptySlot(self, SlotIndex):
  222. if False == mouseModule.mouseController.isAttached():
  223. return
  224. if mouseModule.mouseController.IsAttachedMoney():
  225. net.SendExchangeElkAddPacket(str(mouseModule.mouseController.GetAttachedMoneyAmount()))
  226. else:
  227. attachedSlotType = mouseModule.mouseController.GetAttachedType()
  228. if (player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType):
  229. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  230. SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
  231. DstSlotNumber = SlotIndex
  232. itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber)
  233. item.SelectItem(itemID)
  234. if item.IsAntiFlag(item.ANTIFLAG_GIVE):
  235. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE)
  236. mouseModule.mouseController.DeattachObject()
  237. return
  238. net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber)
  239. mouseModule.mouseController.DeattachObject()
  240. def SelectOwnerItemSlot(self, SlotIndex):
  241. if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex():
  242. money = mouseModule.mouseController.GetAttachedItemCount()
  243. net.SendExchangeElkAddPacket(str(money))
  244. def RefreshOwnerSlot(self):
  245. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  246. itemIndex = exchange.GetItemVnumFromSelf(i)
  247. itemCount = exchange.GetItemCountFromSelf(i)
  248. if 1 == itemCount:
  249. itemCount = 0
  250. self.OwnerSlot.SetItemSlot(i, itemIndex, itemCount)
  251. self.OwnerSlot.RefreshSlot()
  252. def RefreshTargetSlot(self):
  253. for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM):
  254. itemIndex = exchange.GetItemVnumFromTarget(i)
  255. itemCount = exchange.GetItemCountFromTarget(i)
  256. if 1 == itemCount:
  257. itemCount = 0
  258. self.TargetSlot.SetItemSlot(i, itemIndex, itemCount)
  259. self.TargetSlot.RefreshSlot()
  260. def Refresh(self):
  261. self.RefreshOwnerSlot()
  262. self.RefreshTargetSlot()
  263. self.OwnerMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromSelf()))
  264. self.TargetMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromTarget()))
  265. if exchange.GetAcceptFromSelf() == True:
  266. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  267. self.OwnerAcceptLight.Down()
  268. else:
  269. self.OwnerSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 0.3500, 0.8500, 0.3500, 1.0)
  270. self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_ACCEPT % (str((time.strftime("[%H:%M:%S]")))), 0))
  271. else:
  272. if self.AcceptButton.IsDown() == True:
  273. self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_ABORT % (str((time.strftime("[%H:%M:%S]")))), 0))
  274. self.AcceptButton.Enable()
  275. self.AcceptButton.SetUp()
  276. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  277. self.OwnerAcceptLight.SetUp()
  278. else:
  279. self.OwnerSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
  280. if exchange.GetAcceptFromTarget() == True:
  281. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  282. self.TargetAcceptLight.Down()
  283. else:
  284. self.TargetAcceptButton.Down()
  285. self.TargetSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 0.3500, 0.8500, 0.3500, 1.0)
  286. self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_ACCEPT % (str((time.strftime("[%H:%M:%S]"))), exchange.GetNameFromTarget()), 0))
  287. else:
  288. if not app.ENABLE_NEW_EXCHANGE_WINDOW:
  289. self.TargetAcceptLight.SetUp()
  290. else:
  291. if self.TargetAcceptButton.IsDown() == True:
  292. self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_ABORT % (str((time.strftime("[%H:%M:%S]"))), exchange.GetNameFromTarget()), 0))
  293. self.TargetAcceptButton.SetUp()
  294. self.TargetSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
  295. def OverInOwnerItem(self, slotIndex):
  296. if 0 != self.tooltipItem:
  297. self.tooltipItem.SetExchangeOwnerItem(slotIndex)
  298. def OverInTargetItem(self, slotIndex):
  299. if 0 != self.tooltipItem:
  300. self.tooltipItem.SetExchangeTargetItem(slotIndex)
  301. def OverOutItem(self):
  302. if 0 != self.tooltipItem:
  303. self.tooltipItem.HideToolTip()
  304. def OnTop(self):
  305. self.tooltipItem.SetTop()
  306. def OnUpdate(self):
  307. USE_EXCHANGE_LIMIT_RANGE = 1000
  308. (x, y, z) = player.GetMainCharacterPosition()
  309. if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE:
  310. (self.xStart, self.yStart, z) = player.GetMainCharacterPosition()
  311. net.SendExchangeExitPacket()

uiexchange.py