1. ###################################################################
  2. # title_name : Duel System Advanced
  3. # date_created : 2016.09.10
  4. # filename : uiDuel.py
  5. # author : VegaS
  6. # version : 0.2.0
  7. #
  8. import ui
  9. import wndMgr
  10. import chat
  11. import player as ch
  12. import constInfo as pvp
  13. import uiGuild as uiPvP
  14. import uiCommon as message
  15. import playerSettingModule as face
  16. import localeInfo as translate
  17. import net as commandServer
  18. import app
  19. def CalculateTimeLeft(iTime):
  20. A, B = divmod(iTime, 60)
  21. C, A = divmod(A, 60)
  22. return "%02d:%02d" % (A, B)
  23. mCheck = 0
  24. FACE_IMAGE_DICT = {
  25. face.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
  26. face.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
  27. face.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
  28. face.RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
  29. face.RACE_SURA_M : "icon/face/sura_m.tga",
  30. face.RACE_SURA_W : "icon/face/sura_w.tga",
  31. face.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
  32. face.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
  33. #face.RACE_WOLFMAN_M : "icon/face/wolfman_m.tga"
  34. }
  35. BINARY_DUEL_GET_ = {
  36. "selected" : {
  37. 0 : 0,
  38. 1 : 0,
  39. 2 : 0,
  40. 3 : 0,
  41. 4 : 0,
  42. 5 : 0,
  43. 6 : 0,
  44. 7 : 0,
  45. },
  46. "amount" : {
  47. 0 : 0
  48. }
  49. }
  50. class WindowEquipmentBlock(ui.BoardWithTitleBar):
  51. def __init__(self):
  52. ui.BoardWithTitleBar.__init__(self)
  53. self.SetSize(250, 100)
  54. self.SetTitleName(translate.DUEL_TITLENAME)
  55. self.SetCloseEvent(ui.__mem_func__(self.Close))
  56. self.SetCenterPosition()
  57. self.AddFlag('movable')
  58. self.SetTop()
  59. self.btns = []
  60. self.Add(translate.DUEL_EQUIP_BLOCK, self.Enable)
  61. self.Add(translate.DUEL_EQUIP_UNBLOCK, self.Disable)
  62. def Add(self, text, event):
  63. height = len(self.btns) * 26
  64. button = ui.Button()
  65. button.SetParent(self)
  66. button.SetPosition(33, 35 + height)
  67. button.SetUpVisual("d:/ymir work/ui/public/XLarge_Button_01.sub")
  68. button.SetOverVisual("d:/ymir work/ui/public/XLarge_Button_02.sub")
  69. button.SetDownVisual("d:/ymir work/ui/public/XLarge_Button_03.sub")
  70. button.SetText(text)
  71. button.SetEvent(event)
  72. button.Show()
  73. self.btns.append(button)
  74. def __del__(self):
  75. ui.BoardWithTitleBar.__del__(self)
  76. def Destroy(self):
  77. self.Hide()
  78. for obj in self.btns:
  79. obj.Hide()
  80. obj = None
  81. del self.btns[:]
  82. self.btns = None
  83. def Close(self):
  84. self.Hide()
  85. def Open(self):
  86. self.Show()
  87. def Enable(self):
  88. commandServer.SendChatPacket("/pvp_block_equipment BLOCK")
  89. def Disable(self):
  90. commandServer.SendChatPacket("/pvp_block_equipment UNBLOCK")
  91. class WindowLiveInformations(ui.ScriptWindow):
  92. def __init__(self):
  93. ui.ScriptWindow.__init__(self)
  94. self.__CreateDialog()
  95. def __del__(self):
  96. ui.ScriptWindow.__del__(self)
  97. def __CreateDialog(self):
  98. pyScrLoader = ui.PythonScriptLoader()
  99. pyScrLoader.LoadScriptFile(self, "uiscript/pvp_advanced_informations.py")
  100. getObject = self.GetChild
  101. self.wndBoard = getObject("Board")
  102. self.name = self.GetChild("NameCharacterValue")
  103. self.level = self.GetChild("LevelCharacterValue")
  104. self.face = getObject("CharacterIcon")
  105. self.MoneyText = getObject("Money")
  106. width = self.GetWidth()
  107. x = min(0 + width/2, wndMgr.GetScreenWidth() - width/2) - width/2
  108. y = wndMgr.GetScreenHeight() - 305
  109. box_x = x+10
  110. text_x = x + 67
  111. color = "|cFFff5148"
  112. self.checkBoxTable = {
  113. 0 : [uiPvP.CheckBox(self, box_x, y+65, lambda arg = 0: self.SetType(arg)), 0, self.SetText(text_x, y+65, color + translate.DUEL_BLOCK_CHANGE_ITEM)],
  114. 1 : [uiPvP.CheckBox(self, box_x, y+65+20, lambda arg = 1: self.SetType(arg)), 0, self.SetText(text_x, y+65+20, color + translate.DUEL_BLOCK_BUFF)],
  115. 2 : [uiPvP.CheckBox(self, box_x, y+65+20+20, lambda arg = 2: self.SetType(arg)), 0, self.SetText(text_x, y+65+20+20, color + translate.DUEL_BLOCK_POTION_RED)],
  116. 3 : [uiPvP.CheckBox(self, box_x, y+65+20+20+20, lambda arg = 3: self.SetType(arg)), 0, self.SetText(text_x, y+65+20+20+20, color + translate.DUEL_BLOCK_HORSE_MOUNT)],
  117. 4 : [uiPvP.CheckBox(self, box_x+155, y+65, lambda arg = 4: self.SetType(arg)), 0, self.SetText(text_x+155, y+65, color + translate.DUEL_BLOCK_PET)],
  118. 5 : [uiPvP.CheckBox(self, box_x+155, y+65+20, lambda arg = 5: self.SetType(arg)), 0, self.SetText(text_x+155, y+65+20, color + translate.DUEL_BLOCK_POLY)],
  119. 6 : [uiPvP.CheckBox(self, box_x+155, y+65+20+20, lambda arg = 6: self.SetType(arg)), 0, self.SetText(text_x+155, y+65+20+20, color + translate.DUEL_BLOCK_PARTY)],
  120. 7 : [uiPvP.CheckBox(self, box_x+155, y+65+20+20+20, lambda arg = 7: self.SetType(arg)), 0, self.SetText(text_x+155, y+65+20+20+20, color + translate.DUEL_BLOCK_EXCHANGE)]
  121. }
  122. self.wndBoard.SetPosition(x + 5, y)
  123. def SetText(self, x, y, text):
  124. self.textLine = ui.TextLine()
  125. self.textLine.SetParent(self)
  126. self.textLine.SetPosition(x, y)
  127. self.textLine.SetText(text)
  128. self.textLine.Show()
  129. return self.textLine
  130. def ShowInformations(self, value):
  131. self.name.SetText((str(value[0])))
  132. self.level.SetText((str(value[1])))
  133. self.face.LoadImage(FACE_IMAGE_DICT[int(value[2])])
  134. for i in xrange(8):
  135. self.checkBoxTable[i][0].SetCheck((int(value[i + 3])))
  136. self.MoneyText.SetText(translate.NumberToMoneyString(str(value[11])))
  137. self.Show()
  138. class Initializate(ui.ScriptWindow):
  139. def __init__(self):
  140. ui.ScriptWindow.__init__(self)
  141. self.Name = ""
  142. self.Guild = ""
  143. self.Level = 0
  144. self.PlayTime = 0
  145. self.VID = 0
  146. self.acceptButton = 0
  147. self.declineButton = 0
  148. self.HP = 0
  149. self.SP = 0
  150. self.Race = 0
  151. self.__CreateDialog()
  152. def __del__(self):
  153. ui.ScriptWindow.__del__(self)
  154. def __CreateDialog(self):
  155. pyScrLoader = ui.PythonScriptLoader()
  156. pyScrLoader.LoadScriptFile(self, "uiscript/pvp_advanced.py")
  157. getObject = self.GetChild
  158. self.board = getObject("Board")
  159. self.board.SetCloseEvent(self.Close)
  160. self.acceptButton = getObject("AcceptButton")
  161. self.declineButton = getObject("DenyButton")
  162. self.name = self.GetChild("NameCharacterValue")
  163. self.guild = self.GetChild("GuildCharacterValue")
  164. self.level = self.GetChild("LevelCharacterValue")
  165. self.playtime = self.GetChild("PlayTimeCharacterValue")
  166. self.hp = self.GetChild("ValueHP")
  167. self.sp = self.GetChild("ValueMP")
  168. self.face = getObject("CharacterIcon")
  169. self.percent_hp = getObject("percent_hp")
  170. self.percent_sp = getObject("percent_sp")
  171. self.textLineTime = ui.TextLine()
  172. self.textLineTime.SetParent(self.board)
  173. self.textLineTime.SetPosition(408, 9)
  174. self.textLineTime.SetPackedFontColor(0xffdcf600)
  175. self.textLineTime.Hide()
  176. self.MoneyText = getObject("Money")
  177. self.MoneySlot = getObject("Money_Slot")
  178. self.MoneySlot.SetEvent(ui.__mem_func__(self.GetSlotMoney))
  179. self.checkBoxTable = {
  180. 0 : [uiPvP.CheckBox(self, 490, 50, lambda arg = 0: self.SetType(arg)), 0, self.SetText(377, 50, translate.DUEL_BLOCK_CHANGE_ITEM)],
  181. 1 : [uiPvP.CheckBox(self, 490, 50+25, lambda arg = 1: self.SetType(arg)), 0, self.SetText(377, 50+25, translate.DUEL_BLOCK_BUFF)],
  182. 2 : [uiPvP.CheckBox(self, 490, 50+25+25, lambda arg = 2: self.SetType(arg)), 0, self.SetText(377, 50+25+25, translate.DUEL_BLOCK_POTION_RED)],
  183. 3 : [uiPvP.CheckBox(self, 490, 50+25+25+25, lambda arg = 3: self.SetType(arg)), 0, self.SetText(377, 50+25+25+25, translate.DUEL_BLOCK_HORSE_MOUNT)],
  184. 4 : [uiPvP.CheckBox(self, 490, 50+25+25+25+25, lambda arg = 4: self.SetType(arg)), 0, self.SetText(377, 50+25+25+25+25, translate.DUEL_BLOCK_PET)],
  185. 5 : [uiPvP.CheckBox(self, 490, 50+25+25+25+25+25, lambda arg = 5: self.SetType(arg)), 0, self.SetText(377, 50+25+25+25+25+25, translate.DUEL_BLOCK_POLY)],
  186. 6 : [uiPvP.CheckBox(self, 490, 50+25+25+25+25+25+25, lambda arg = 6: self.SetType(arg)), 0, self.SetText(377, 50+25+25+25+25+25+25, translate.DUEL_BLOCK_PARTY)],
  187. 7 : [uiPvP.CheckBox(self, 490, 50+25+25+25+25+25+25+25, lambda arg = 7: self.SetType(arg)), 0, self.SetText(377, 50+25+25+25+25+25+25+25, translate.DUEL_BLOCK_EXCHANGE)]
  188. }
  189. if self.acceptButton:
  190. self.acceptButton.SetEvent(ui.__mem_func__(self.ApplyRequest))
  191. if self.declineButton:
  192. self.declineButton.SetEvent(ui.__mem_func__(self.Close))
  193. self.percent_hp.SetPercentage(100, 100)
  194. self.percent_sp.SetPercentage(100, 100)
  195. self.SetCenterPosition()
  196. def OpenDialog(self, VID, Name, Guild, Level, Race, PlayTime, HP, SP):
  197. self.VID = int(VID)
  198. self.Name = Name
  199. self.Guild = Guild
  200. self.Level = str(Level)
  201. self.Race = int(Race)
  202. self.PlayTime = int(PlayTime)
  203. self.HP = str(HP)
  204. self.SP = str(SP)
  205. self.SetTitle(translate.DUEL_TARGET_NAME + Name)
  206. self.name.SetText(Name)
  207. self.guild.SetText(self.Guild)
  208. self.level.SetText(self.Level)
  209. self.playtime.SetText(translate.FormatTime(self.PlayTime))
  210. self.hp.SetText(self.HP)
  211. self.sp.SetText(self.SP)
  212. self.face.LoadImage(FACE_IMAGE_DICT[self.Race])
  213. self.Show()
  214. def Selected(self, value):
  215. for i in xrange(8):
  216. self.checkBoxTable[i][0].SetCheck((int(value[i])))
  217. self.MoneyText.SetText(translate.NumberToMoneyString(str(value[8])))
  218. global mCheck
  219. mCheck = 1
  220. self.textLineTime.Show()
  221. self.leftTime = app.GetGlobalTimeStamp() + 30
  222. def SetType(self, arg):
  223. global mCheck
  224. if mCheck == 1:
  225. chat.AppendChat(chat.CHAT_TYPE_INFO, translate.DUEL_VICTIM_ERROR)
  226. return
  227. else:
  228. for index in xrange(len(BINARY_DUEL_GET_["selected"])):
  229. if arg == index and mCheck != 1:
  230. if BINARY_DUEL_GET_["selected"][arg] == 1:
  231. self.checkBoxTable[arg][0].SetCheck(0)
  232. BINARY_DUEL_GET_["selected"][arg] = 0
  233. else:
  234. self.checkBoxTable[arg][0].SetCheck(1)
  235. BINARY_DUEL_GET_["selected"][arg] = 1
  236. def ApplyRequest(self):
  237. global mCheck
  238. if mCheck == 1:
  239. commandServer.SendChatPacket("/pvp %d accept" % (self.VID))
  240. else:
  241. commandServer.SendChatPacket("/pvp %d %d %d %d %d %d %d %d %d %d" % ((self.VID), (int(BINARY_DUEL_GET_["selected"][0])), (int(BINARY_DUEL_GET_["selected"][1])), (int(BINARY_DUEL_GET_["selected"][2])), (int(BINARY_DUEL_GET_["selected"][3])), (int(BINARY_DUEL_GET_["selected"][4])), (int(BINARY_DUEL_GET_["selected"][5])), (int(BINARY_DUEL_GET_["selected"][6])), (int(BINARY_DUEL_GET_["selected"][7])), (int(BINARY_DUEL_GET_["amount"][0]))))
  242. self.Remove()
  243. pvp.DUEL_IS_SHOW_EQUIP = 1
  244. def Remove(self):
  245. global mCheck
  246. mCheck = 0
  247. for index in xrange(len(BINARY_DUEL_GET_["selected"])):
  248. self.checkBoxTable[index][0].SetCheck(0)
  249. BINARY_DUEL_GET_["selected"][index] = 0
  250. BINARY_DUEL_GET_["amount"][0] = 0
  251. self.Hide()
  252. self.MoneyText.SetText("")
  253. def SetText(self, x, y, text):
  254. self.textLine = ui.TextLine()
  255. self.textLine.SetParent(self)
  256. self.textLine.SetPosition(x, y)
  257. self.textLine.SetText(text)
  258. self.textLine.Show()
  259. return self.textLine
  260. def SetTitle(self, name):
  261. self.board.SetTitleName(name)
  262. def Close(self):
  263. commandServer.SendChatPacket("/decline_pvp %d" % (self.VID))
  264. self.Remove()
  265. pvp.DUEL_IS_SHOW_EQUIP = 1
  266. def GetSlotMoney(self):
  267. global mCheck
  268. if mCheck == 1:
  269. chat.AppendChat(chat.CHAT_TYPE_INFO, translate.DUEL_VICTIM_ERROR)
  270. return
  271. else:
  272. self.inputDialog = message.Duel_InputMoneyBet()
  273. self.inputDialog.SetMaxLength(9)
  274. self.inputDialog.SetAcceptEvent(lambda arg = TRUE: self.SetMoney())
  275. self.inputDialog.SetCancelEvent(ui.__mem_func__(self.Cancel))
  276. self.inputDialog.SetAcceptText(translate.DUEL_MONEY_ADD)
  277. self.inputDialog.SetCancelText(translate.DUEL_MONEY_CANCEL)
  278. self.inputDialog.SetTitle(translate.DUEL_MONEY_TITLE)
  279. self.inputDialog.SetDescription(translate.DUEL_MONEY_CURRENT + translate.NumberToMoneyString(str(ch.GetElk())))
  280. self.inputDialog.Open()
  281. def SetMoney(self):
  282. if not self.inputDialog:
  283. return True
  284. updateMoney = self.inputDialog.GetText()
  285. currentMoney = ch.GetElk()
  286. if not updateMoney:
  287. return True
  288. if not updateMoney.isdigit():
  289. chat.AppendChat(chat.CHAT_TYPE_INFO, translate.DUEL_MONEY_ERROR_1)
  290. return True
  291. if int(updateMoney) <= 0:
  292. chat.AppendChat(chat.CHAT_TYPE_INFO, translate.DUEL_MONEY_ERROR_2)
  293. return True
  294. if len(updateMoney) < 0:
  295. return True
  296. if updateMoney < 0:
  297. return True
  298. global mCheck
  299. if updateMoney.isdigit() and mCheck != 1:
  300. if int(updateMoney) <= int(currentMoney):
  301. self.MoneyText.SetText(translate.NumberToMoneyString(str(updateMoney)))
  302. BINARY_DUEL_GET_["amount"][0] = (int(updateMoney))
  303. self.inputDialog.Hide()
  304. else:
  305. chat.AppendChat(chat.CHAT_TYPE_INFO, translate.DUEL_MONEY_ERROR_3)
  306. return True
  307. def Cancel(self):
  308. self.inputDialog.Hide()
  309. def SetTime(self, iLeft):
  310. leftTime = iLeft - app.GetGlobalTimeStamp()
  311. if leftTime <= 0:
  312. leftTime = 0
  313. self.Close()
  314. self.textLineTime.SetText("Kalan Süre: [%s]" % (CalculateTimeLeft(leftTime)))
  315. def OnUpdate(self):
  316. global mCheck
  317. if mCheck == 1:
  318. self.SetTime(int(self.leftTime))