Guest User

Untitled

a guest
May 11th, 2020
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.78 KB | None | 0 0
  1. #
  2. # Copyright (c) 2017 by Adams
  3. #
  4. # Niniejszy kod jest chroniony prawem autorskim.
  5. # Wszelkie kopiowanie oraz u�ytkowanie bez zgody autora
  6. # zabronione pod piecz� Kodeksu Karnego - ustaw o prawie autorskim.
  7. #
  8.  
  9. import ui
  10. import net
  11. import grp
  12. import uiToolTip
  13. import component
  14. import constInfo
  15. import item
  16. import player
  17. import chr
  18. import chat
  19. import localeInfo
  20.  
  21. BOARD_WIDTH = 465
  22. PLAYER_LIMIT = 10
  23.  
  24. class GuildWarPlayer(ui.Window):
  25.  
  26. NEGATIVE_COLOR = grp.GenerateColor(0.9, 0.4745, 0.4627, 1.0)
  27. POSITIVE_COLOR = grp.GenerateColor(0.5411, 0.7254, 0.5568, 1.0)
  28. TITLE_COLOR = grp.GenerateColor(0.9490, 0.9058, 0.7568, 1.0)
  29. SPECIAL_POSITIVE_COLOR = grp.GenerateColor(0.8824, 0.9804, 0.8824, 1.0)
  30.  
  31. def __init__(self):
  32. ui.Window.__init__(self)
  33.  
  34. self.name = ""
  35. self.kills = 0
  36. self.deaths = 0
  37. self.balance = 0
  38. self.damage = "0"
  39. self.level = 0
  40.  
  41. self.__BuildWindow()
  42.  
  43. def __del(self):
  44. ui.Window.__del__(self)
  45.  
  46. def __TextLine(self, text, x, color = None, centered = False):
  47. element = self.component.TextLine(self, "", x, 0, None)
  48. element.SetFontName("Tahoma:14")
  49. element.SetText(text)
  50.  
  51. if centered:
  52. element.SetHorizontalAlignCenter()
  53.  
  54. if color:
  55. element.SetPackedFontColor(color)
  56.  
  57. return element
  58.  
  59. def __BuildWindow(self):
  60. c = component.Component()
  61. self.component = c
  62.  
  63. self.nameLine = self.__TextLine(self.GetName(), 5)
  64. self.killsLine = self.__TextLine(self.GetKills(), 126, self.POSITIVE_COLOR, True)
  65. self.deathsLine = self.__TextLine(self.GetDeaths(), 185, self.NEGATIVE_COLOR, True)
  66. self.levelLine = self.__TextLine(self.GetLevel(), 239, None, True)
  67. self.damageLine = self.__TextLine(self.GetDamage(), 358, None, True)
  68.  
  69. self.Show()
  70.  
  71. def SetName(self, name):
  72. self.name = str(name)
  73.  
  74. def GetName(self):
  75. return self.name
  76.  
  77. def SetKills(self, kills):
  78. self.kills = int(kills)
  79. self.CalculateBalance()
  80.  
  81. def GetKills(self):
  82. return self.kills
  83.  
  84. def SetDeaths(self, deaths):
  85. self.deaths = int(deaths)
  86. self.CalculateBalance()
  87.  
  88. def GetDeaths(self):
  89. return self.deaths
  90.  
  91. def CalculateBalance(self):
  92. self.balance = max(0, int(self.GetKills() - self.GetDeaths()))
  93.  
  94. def GetBalance(self):
  95. return self.balance
  96.  
  97. def SetDamage(self, damage):
  98. self.damage = int(damage)
  99.  
  100. def GetDamage(self):
  101. return self.damage
  102.  
  103. def SetLevel(self, level):
  104. self.level = int(level)
  105.  
  106. def GetLevel(self):
  107. return self.level
  108.  
  109. def Render(self):
  110. name = self.GetName()
  111. self.killsLine.SetText(str(self.GetKills()))
  112. self.deathsLine.SetText(str(self.GetDeaths()))
  113. self.levelLine.SetText(str(self.GetLevel()))
  114.  
  115. n = self.GetDamage()
  116. self.damageLine.SetText("%s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ])))
  117.  
  118. if player.GetName() == name:
  119. self.nameLine.SetText("> %s <" % name)
  120. self.nameLine.SetPackedFontColor(self.SPECIAL_POSITIVE_COLOR)
  121. else:
  122. self.nameLine.SetText(name)
  123. self.nameLine.SetPackedFontColor(self.TITLE_COLOR)
  124.  
  125. class GuildWarBoard(ui.Window):
  126.  
  127. GOLD_COLOR = grp.GenerateColor(1.0, 0.7843, 0.0, 1.0)
  128.  
  129. def __init__(self, parent):
  130. self.players = []
  131. self.guild_id = 0
  132. self.guild_name = "Guild"
  133.  
  134. ui.Window.__init__(self)
  135. self.SetParent(parent)
  136. self.__BuildWindow()
  137.  
  138. def __del__(self):
  139. ui.Window.__del__(self)
  140.  
  141. def SetGuildName(self, name):
  142. self.guild_name = name
  143. self.title.SetText("%s" % name)
  144.  
  145. def GetGuildName(self):
  146. return self.guild_name
  147.  
  148. def SetGuildId(self, id):
  149. self.guild_id = int(id)
  150.  
  151. if self.mark:
  152. self.mark.SetIndex(id)
  153.  
  154. def GetGuildId(self):
  155. return self.guild_id
  156.  
  157. def __CreatePlayer(self, name):
  158. for player in self.players:
  159. if player.GetName() == name:
  160. return player
  161.  
  162. player = GuildWarPlayer()
  163. player.SetParent(self)
  164. player.SetName(name)
  165. player.Show()
  166.  
  167. self.players.append(player)
  168. return player
  169.  
  170. def AddPlayer(self, name, kills = 0, deaths = 0, level = 0, damage = 0):
  171. player = self.__CreatePlayer(name)
  172.  
  173. player.SetKills(kills)
  174. player.SetDeaths(deaths)
  175. player.SetLevel(level)
  176. player.SetDamage(damage)
  177.  
  178. self.Render()
  179.  
  180. def ClearPlayers(self):
  181. self.players = []
  182.  
  183. def GetMVP(self):
  184. players = sorted(self.players, key = lambda player: (player.balance, player.damage), reverse = True)
  185.  
  186. if len(players) == 0:
  187. return "~"
  188.  
  189. return players[0].GetName()
  190.  
  191. def GetTotalKills(self):
  192. x = 0
  193. for player in self.players:
  194. x += player.GetKills()
  195. return x
  196.  
  197. def Render(self):
  198. players = sorted(self.players, key = lambda player: (player.balance, player.damage), reverse = True)
  199. players = players[:PLAYER_LIMIT]
  200.  
  201. y = 29
  202.  
  203. for player in players:
  204. player.SetPosition(0, y)
  205. player.Render()
  206. y += 20
  207.  
  208. self.SetSize(BOARD_WIDTH - 22, y + 5)
  209.  
  210. def __BuildWindow(self):
  211. c = component.Component()
  212. self.SetPosition(11, 15)
  213.  
  214. mark = ui.MarkBox()
  215. mark.SetParent(self)
  216. mark.SetPosition(3, 3)
  217. mark.SetIndex(self.guild_id)
  218. mark.SetScale(1)
  219. mark.Show()
  220. self.mark = mark
  221.  
  222. title = c.TextLine(self, "", 22, 0, None)
  223. title.SetPackedFontColor(self.GOLD_COLOR)
  224. title.SetFontName("Tahoma:14")
  225. title.SetText("")
  226. self.title = title
  227.  
  228. kills = c.TextLine(self, "", 100, 0, None)
  229. kills.SetFontName("Tahoma:14")
  230. kills.SetText("Kills")
  231. self.kills = kills
  232.  
  233. deaths = c.TextLine(self, "", 170, 0, None)
  234. deaths.SetFontName("Tahoma:14")
  235. deaths.SetText("Death")
  236. self.deaths = deaths
  237.  
  238. level = c.TextLine(self, "", 223, 0, None)
  239. level.SetFontName("Tahoma:14")
  240. level.SetText("Level")
  241. self.level = level
  242.  
  243. damage = c.TextLine(self, "", 310, 0, None)
  244. damage.SetFontName("Tahoma:14")
  245. damage.SetText("Total Damage")
  246. self.damage = damage
  247.  
  248. separator = ui.Line()
  249. separator.SetParent(self)
  250. separator.SetPosition(0, 25)
  251. separator.SetColor(-1124073473)
  252. separator.SetSize(BOARD_WIDTH - 22, 0)
  253. separator.Show()
  254. self.separator = separator
  255.  
  256. self.Render()
  257.  
  258. self.component = c
  259. self.Show()
  260.  
  261. class WarVersusBox(ui.Window):
  262.  
  263. GOLD_COLOR = grp.GenerateColor(1.0, 0.7843, 0.0, 1.0)
  264. POSITIVE_COLOR = grp.GenerateColor(0.5411, 0.7254, 0.5568, 1.0)
  265.  
  266. def __init__(self):
  267. self.boards = []
  268. self.marks = []
  269. self.names = []
  270. self.mvps = []
  271.  
  272. ui.Window.__init__(self)
  273. self.__BuildWindow()
  274.  
  275. def __del__(self):
  276. del self.boards
  277. del self.marks
  278. del self.names
  279. del self.mvps
  280.  
  281. ui.Window.__del__(self)
  282.  
  283. def __MarkBox(self, x):
  284. mark = ui.MarkBox()
  285. mark.SetParent(self)
  286. mark.SetPosition(x, 0)
  287. mark.SetIndex(0)
  288. mark.SetScale(3)
  289. mark.Show()
  290.  
  291. self.marks.append(mark)
  292.  
  293. def __TextLine(self, text, x, color = None, centered = False):
  294. element = self.component.TextLine(self, "", x, 0, None)
  295. element.SetFontName("Tahoma:14")
  296. element.SetText(text)
  297.  
  298. if centered:
  299. element.SetHorizontalAlignCenter()
  300.  
  301. if color:
  302. element.SetPackedFontColor(color)
  303.  
  304. return element
  305.  
  306. def __BuildWindow(self):
  307. c = component.Component()
  308.  
  309. self.__MarkBox(16)
  310. self.__MarkBox(237)
  311.  
  312. self.names.append(c.TextLine(self, "", 68, 1, None))
  313. self.names.append(c.TextLine(self, "", 289, 1, None))
  314.  
  315. for name in self.names:
  316. name.SetPackedFontColor(self.GOLD_COLOR)
  317. name.SetFontName("Tahoma:14")
  318.  
  319. self.mvps.append(c.TextLine(self, "", 68, 17, None))
  320. self.mvps.append(c.TextLine(self, "", 289, 17, None))
  321.  
  322. for mvp in self.mvps:
  323. mvp.SetPackedFontColor(self.POSITIVE_COLOR)
  324. mvp.SetFontName("Tahoma:14")
  325.  
  326. self.component = c
  327. self.Show()
  328.  
  329. def Render(self, y):
  330. self.SetPosition(0, y)
  331.  
  332. for i, board in enumerate(self.boards):
  333. self.marks[i].SetIndex(board.GetGuildId())
  334. self.marks[i].SetScale(3)
  335. self.names[i].SetText("%s (%d kills)" % (board.GetGuildName(), board.GetTotalKills()))
  336. self.mvps[i].SetText("MVP: %s" % board.GetMVP())
  337.  
  338. def SetBoards(self, boards):
  339. self.boards = boards
  340.  
  341. class WarBoardWindow(ui.ThinBoard):
  342.  
  343. def __init__(self):
  344. ui.ThinBoard.__init__(self)
  345. self.__BuildWindow()
  346.  
  347. self.toggle = False
  348.  
  349. def __del__(self):
  350. ui.ThinBoard.__del__(self)
  351.  
  352. def __BuildWindow(self):
  353. self.boards = []
  354.  
  355. self.boards.append(GuildWarBoard(self))
  356. self.boards.append(GuildWarBoard(self))
  357.  
  358. versus = WarVersusBox()
  359. versus.SetParent(self)
  360. versus.SetBoards(self.boards)
  361. self.versus = versus
  362.  
  363. self.Render()
  364.  
  365. def Render(self):
  366. y = self.boards[0].GetHeight()
  367. self.boards[1].SetPosition(11, 15 + y + 5)
  368.  
  369. height = y + self.boards[1].GetHeight() + 20
  370. self.versus.Render(height)
  371.  
  372. height += 15 * 2 + 15
  373. self.SetSize(BOARD_WIDTH, height)
  374.  
  375. def AddPlayer(self, guildId, player):
  376. for board in self.boards:
  377. if board.GetGuildId() == guildId:
  378. board.AddPlayer(*player)
  379. return
  380.  
  381. def Handle(self, input):
  382. input = input.split("|")
  383.  
  384. if len(input) == 0:
  385. return
  386.  
  387. if input[0] == "toggle":
  388. self.toggle = bool(input[1])
  389. return
  390.  
  391. if input[0] == "versus":
  392. self.boards[0].SetGuildId(int(input[1]))
  393. self.boards[0].SetGuildName(input[2])
  394. self.boards[1].SetGuildId(int(input[3]))
  395. self.boards[1].SetGuildName(input[4])
  396. self.versus.SetBoards(self.boards)
  397.  
  398. for board in self.boards:
  399. board.ClearPlayers()
  400.  
  401. self.Render()
  402. return
  403.  
  404. if input[0] == "update":
  405. self.AddPlayer(int(input[1]), input[2:])
  406. self.Render()
  407. return
  408.  
  409. def IsOnWar(self):
  410. return self.toggle
  411.  
  412. def Open(self):
  413. if not self.IsOnWar():
  414. return False
  415.  
  416. self.SetTop()
  417. self.SetCenterPosition()
  418. self.Show()
  419. return True
  420.  
  421. def Close(self):
  422. if not self.IsShow():
  423. return False
  424.  
  425. self.Hide()
  426. return True
  427.  
  428. def OnPressEscapeKey(self):
  429. self.Close()
  430. return True
Add Comment
Please, Sign In to add comment