Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.63 KB | None | 0 0
  1. #!/usr/bin/python
  2. #-*- coding: iso-8859-1 -*-
  3. import ui
  4. import uiScriptLocale
  5. import wndMgr
  6. import player
  7. import miniMap
  8. import localeInfo
  9. import net
  10. import app
  11. import colorInfo
  12. import constInfo
  13. import background
  14. import dbg
  15. import time
  16. import chr
  17.  
  18. spoty_state=0
  19.  
  20. class MapTextToolTip(ui.Window):
  21. def __init__(self):
  22. ui.Window.__init__(self)
  23.  
  24. textLine = ui.TextLine()
  25. textLine.SetParent(self)
  26. textLine.SetHorizontalAlignCenter()
  27. textLine.SetOutline()
  28. textLine.SetHorizontalAlignRight()
  29. textLine.Show()
  30. self.textLine = textLine
  31.  
  32. def __del__(self):
  33. ui.Window.__del__(self)
  34.  
  35. def SetText(self, text):
  36. self.textLine.SetText(text)
  37.  
  38. def SetTooltipPosition(self, PosX, PosY):
  39. if localeInfo.IsARABIC():
  40. w, h = self.textLine.GetTextSize()
  41. self.textLine.SetPosition(PosX - w - 5, PosY)
  42. else:
  43. self.textLine.SetPosition(PosX - 5, PosY)
  44.  
  45. def SetTextColor(self, TextColor):
  46. self.textLine.SetPackedFontColor(TextColor)
  47.  
  48. def GetTextSize(self):
  49. return self.textLine.GetTextSize()
  50.  
  51. class AtlasWindow(ui.ScriptWindow):
  52.  
  53. class AtlasRenderer(ui.Window):
  54. def __init__(self):
  55. ui.Window.__init__(self)
  56. self.AddFlag("not_pick")
  57.  
  58. def OnUpdate(self):
  59. miniMap.UpdateAtlas()
  60.  
  61. def OnRender(self):
  62. (x, y) = self.GetGlobalPosition()
  63. fx = float(x)
  64. fy = float(y)
  65. miniMap.RenderAtlas(fx, fy)
  66.  
  67. def HideAtlas(self):
  68. miniMap.HideAtlas()
  69.  
  70. def ShowAtlas(self):
  71. miniMap.ShowAtlas()
  72.  
  73. def __init__(self):
  74. self.tooltipInfo = MapTextToolTip()
  75. self.tooltipInfo.Hide()
  76. self.infoGuildMark = ui.MarkBox()
  77. self.infoGuildMark.Hide()
  78. self.AtlasMainWindow = None
  79. self.mapName = ""
  80. self.board = 0
  81.  
  82. ui.ScriptWindow.__init__(self)
  83.  
  84. def __del__(self):
  85. ui.ScriptWindow.__del__(self)
  86.  
  87. def SetMapName(self, mapName):
  88. self.board.SetTitleName(localeInfo.MINIMAP_ZONE_NAME_DICT.get(mapName, uiScriptLocale.ZONE_MAP))
  89.  
  90. def LoadWindow(self):
  91. try:
  92. pyScrLoader = ui.PythonScriptLoader()
  93. pyScrLoader.LoadScriptFile(self, "UIScript/AtlasWindow.py")
  94. except:
  95. import exception
  96. exception.Abort("AtlasWindow.LoadWindow.LoadScript")
  97.  
  98. try:
  99. self.board = self.GetChild("board")
  100. self.bigspot_img = self.GetChild("bigspot_img")
  101. self.bigspot_img.Hide()
  102. self.bigspot = self.GetChild("bigspot")
  103. self.bigspot.SetEvent(ui.__mem_func__(self.SetSpot))
  104.  
  105. except:
  106. import exception
  107. exception.Abort("AtlasWindow.LoadWindow.BindObject")
  108.  
  109. self.AtlasMainWindow = self.AtlasRenderer()
  110. self.board.SetCloseEvent(self.Hide)
  111. self.AtlasMainWindow.SetParent(self.board)
  112. self.AtlasMainWindow.SetPosition(7, 30)
  113. self.tooltipInfo.SetParent(self.board)
  114. self.infoGuildMark.SetParent(self.board)
  115. self.SetPosition(wndMgr.GetScreenWidth() - 136 - 256 - 10, 0)
  116. self.board.SetMouseLeftButtonUpEvent(ui.__mem_func__(self.GoToLocalPosition))
  117. self.Hide()
  118.  
  119. miniMap.RegisterAtlasWindow(self)
  120.  
  121. def Destroy(self):
  122. miniMap.UnregisterAtlasWindow()
  123. self.ClearDictionary()
  124. self.AtlasMainWindow = None
  125. self.tooltipAtlasClose = 0
  126. self.tooltipInfo = None
  127. self.infoGuildMark = None
  128. self.board = None
  129. global spoty_state
  130. spoty_state=0
  131.  
  132. def IsMapSpot(self, map_name):
  133. maps=[
  134. "metin2_map_kain",
  135. "map_setao",
  136. "metin2_map_zielona",
  137. "metin2_map_dreikon1",
  138. "metin2_daim_map",
  139. "metin2_arianea_3",
  140. "metin2_duester_map",
  141. ]
  142. if map_name in maps:
  143. return int(maps.index(map_name))
  144. return -1
  145.  
  146. def SetSpot(self):
  147. try:
  148. global spoty_state
  149. if spoty_state == 0:
  150. map_name = background.GetCurrentMapName()
  151. map_id = self.IsMapSpot(map_name)
  152. if map_id >= 0:
  153. spoty_state=1
  154. self.bigspot_img.LoadImage("spoty/"+str(map_id)+".tga")
  155. else:
  156. spoty_state=0
  157. else:
  158. spoty_state=0
  159. except:
  160. pass
  161.  
  162. def OnUpdate(self):
  163.  
  164. if spoty_state == 0:
  165. self.bigspot_img.Hide()
  166. self.bigspot.SetText("Spoty")
  167. else:
  168. self.bigspot_img.Show()
  169. self.bigspot.SetText("Spoty")
  170.  
  171. if not self.tooltipInfo:
  172. return
  173.  
  174. if not self.infoGuildMark:
  175. return
  176.  
  177. self.infoGuildMark.Hide()
  178. self.tooltipInfo.Hide()
  179.  
  180. if FALSE == self.board.IsIn():
  181. return
  182.  
  183. (mouseX, mouseY) = wndMgr.GetMousePosition()
  184. (bFind, sName, iPosX, iPosY, dwTextColor, dwGuildID) = miniMap.GetAtlasInfo(mouseX, mouseY)
  185.  
  186. if FALSE == bFind:
  187. return
  188. if chr.IsGameMaster(player.GetMainCharacterIndex()):
  189. (iPosX, iPosY) = miniMap.MousePosToAtlasPos(mouseX, mouseY)
  190. dwTextColor = 0xffffffff
  191. else:
  192. return
  193.  
  194. if "empty_guild_area" == sName:
  195. sName = localeInfo.GUILD_EMPTY_AREA
  196.  
  197. if bFind == False:
  198. self.tooltipInfo.SetText("(%d, %d)" % (iPosX, iPosY))
  199. elif localeInfo.IsARABIC() and sName[-1].isalnum():
  200. self.tooltipInfo.SetText("(%s)%d, %d" % (sName, iPosX, iPosY))
  201. else:
  202. self.tooltipInfo.SetText("%s(%d, %d)" % (sName, iPosX, iPosY))
  203.  
  204. if spoty_state != 1:
  205. (x, y) = self.GetGlobalPosition()
  206. self.tooltipInfo.SetTooltipPosition(mouseX - x, mouseY - y)
  207. self.tooltipInfo.SetTextColor(dwTextColor)
  208. self.tooltipInfo.Show()
  209. self.tooltipInfo.SetTop()
  210.  
  211. if 0 != dwGuildID:
  212. textWidth, textHeight = self.tooltipInfo.GetTextSize()
  213. self.infoGuildMark.SetIndex(dwGuildID)
  214. self.infoGuildMark.SetPosition(mouseX - x - textWidth - 18 - 5, mouseY - y)
  215. self.infoGuildMark.Show()
  216.  
  217. def GoToLocalPosition(self):
  218. if False == self.board.IsIn() or False == chr.IsGameMaster(player.GetMainCharacterIndex()):
  219. return
  220.  
  221. (mouseX, mouseY) = wndMgr.GetMousePosition()
  222. (iPosX, iPosY) = miniMap.MousePosToAtlasPos(mouseX, mouseY)
  223. net.SendChatPacket("/goto %d %d" % (iPosX, iPosY))
  224.  
  225. def Hide(self):
  226. global spoty_state
  227. spoty_state=0
  228. if self.AtlasMainWindow:
  229. self.AtlasMainWindow.HideAtlas()
  230. self.AtlasMainWindow.Hide()
  231. ui.ScriptWindow.Hide(self)
  232.  
  233. def Show(self):
  234. if self.AtlasMainWindow:
  235. (bGet, iSizeX, iSizeY) = miniMap.GetAtlasSize()
  236. if bGet:
  237. self.SetSize(iSizeX + 15, iSizeY + 38)
  238.  
  239. if localeInfo.IsARABIC():
  240. self.board.SetPosition(iSizeX+15, 0)
  241.  
  242. if self.IsMapSpot(background.GetCurrentMapName()) >=0:
  243. self.bigspot_img.Show()
  244. self.bigspot.Show()
  245. else:
  246. self.bigspot_img.Hide()
  247. self.bigspot.Hide()
  248.  
  249. self.board.SetSize(iSizeX + 15, iSizeY + 38)
  250. self.AtlasMainWindow.ShowAtlas()
  251. self.AtlasMainWindow.Show()
  252. ui.ScriptWindow.Show(self)
  253.  
  254. def SetCenterPositionAdjust(self, x, y):
  255. self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) / 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) / 2 + y)
  256.  
  257. def OnPressEscapeKey(self):
  258. self.Hide()
  259. return TRUE
  260.  
  261. def __RegisterMiniMapColor(type, rgb):
  262. miniMap.RegisterColor(type, rgb[0], rgb[1], rgb[2])
  263.  
  264. class MiniMap(ui.ScriptWindow):
  265.  
  266. CANNOT_SEE_INFO_MAP_DICT = {
  267. "metin2_map_monkeydungeon" : FALSE,
  268. "metin2_map_monkeydungeon_02" : FALSE,
  269. "metin2_map_monkeydungeon_03" : FALSE,
  270. "metin2_map_devilsCatacomb" : FALSE,
  271. }
  272.  
  273. def __init__(self):
  274. ui.ScriptWindow.__init__(self)
  275.  
  276. self.__Initialize()
  277.  
  278. miniMap.Create()
  279. miniMap.SetScale(2.0)
  280.  
  281. self.AtlasWindow = AtlasWindow()
  282. self.AtlasWindow.LoadWindow()
  283. self.AtlasWindow.Hide()
  284.  
  285. self.tooltipMiniMapOpen = MapTextToolTip()
  286. self.tooltipMiniMapOpen.SetText(localeInfo.MINIMAP)
  287. self.tooltipMiniMapOpen.Show()
  288. self.tooltipMiniMapClose = MapTextToolTip()
  289. self.tooltipMiniMapClose.SetText(localeInfo.UI_CLOSE)
  290. self.tooltipMiniMapClose.Show()
  291. self.tooltipScaleUp = MapTextToolTip()
  292. self.tooltipScaleUp.SetText(localeInfo.MINIMAP_INC_SCALE)
  293. self.tooltipScaleUp.Show()
  294. self.tooltipScaleDown = MapTextToolTip()
  295. self.tooltipScaleDown.SetText(localeInfo.MINIMAP_DEC_SCALE)
  296. self.tooltipScaleDown.Show()
  297. self.tooltipAtlasOpen = MapTextToolTip()
  298. self.tooltipAtlasOpen.SetText(localeInfo.MINIMAP_SHOW_AREAMAP)
  299. self.tooltipAtlasOpen.Show()
  300. self.tooltipInfo = MapTextToolTip()
  301. self.tooltipInfo.Show()
  302.  
  303. if miniMap.IsAtlas():
  304. self.tooltipAtlasOpen.SetText(localeInfo.MINIMAP_SHOW_AREAMAP)
  305. else:
  306. self.tooltipAtlasOpen.SetText(localeInfo.MINIMAP_CAN_NOT_SHOW_AREAMAP)
  307.  
  308. self.tooltipInfo = MapTextToolTip()
  309. self.tooltipInfo.Show()
  310.  
  311. self.mapName = ""
  312.  
  313. self.isLoaded = 0
  314. self.canSeeInfo = TRUE
  315.  
  316. # AUTOBAN
  317. self.imprisonmentDuration = 0
  318. self.imprisonmentEndTime = 0
  319. self.imprisonmentEndTimeText = ""
  320. # END_OF_AUTOBAN
  321.  
  322. def __del__(self):
  323. miniMap.Destroy()
  324. ui.ScriptWindow.__del__(self)
  325.  
  326. def __Initialize(self):
  327. self.positionInfo = 0
  328. self.observerCount = 0
  329.  
  330. self.OpenWindow = 0
  331. self.CloseWindow = 0
  332. self.ScaleUpButton = 0
  333. self.ScaleDownButton = 0
  334. self.MiniMapHideButton = 0
  335. self.MiniMapShowButton = 0
  336. self.AtlasShowButton = 0
  337.  
  338. self.tooltipMiniMapOpen = 0
  339. self.tooltipMiniMapClose = 0
  340. self.tooltipScaleUp = 0
  341. self.tooltipScaleDown = 0
  342. self.tooltipAtlasOpen = 0
  343. self.tooltipInfo = None
  344. self.serverInfo = None
  345. self.timeInfo = None
  346. self.dateInfo = None
  347.  
  348. def SetMapName(self, mapName):
  349. self.mapName=mapName
  350. self.AtlasWindow.SetMapName(mapName)
  351. if app.TOURNAMENT_PVP_SYSTEM:
  352. if player.IsTournamentMap():
  353. self.canSeeInfo = FALSE
  354. self.HideMiniMap()
  355. ui.ScriptWindow.Hide(self)
  356.  
  357. if self.CANNOT_SEE_INFO_MAP_DICT.has_key(mapName):
  358. self.canSeeInfo = FALSE
  359. self.HideMiniMap()
  360. self.tooltipMiniMapOpen.SetText(localeInfo.MINIMAP_CANNOT_SEE)
  361. else:
  362. self.canSeeInfo = TRUE
  363. self.ShowMiniMap()
  364. self.tooltipMiniMapOpen.SetText(localeInfo.MINIMAP)
  365.  
  366. # AUTOBAN
  367. def SetImprisonmentDuration(self, duration):
  368. self.imprisonmentDuration = duration
  369. self.imprisonmentEndTime = app.GetGlobalTimeStamp() + duration
  370.  
  371. self.__UpdateImprisonmentDurationText()
  372.  
  373. def __UpdateImprisonmentDurationText(self):
  374. restTime = max(self.imprisonmentEndTime - app.GetGlobalTimeStamp(), 0)
  375.  
  376. imprisonmentEndTimeText = localeInfo.SecondToDHM(restTime)
  377. if imprisonmentEndTimeText != self.imprisonmentEndTimeText:
  378. self.imprisonmentEndTimeText = imprisonmentEndTimeText
  379. self.serverInfo.SetText("%s: %s" % (uiScriptLocale.AUTOBAN_QUIZ_REST_TIME, self.imprisonmentEndTimeText))
  380. # END_OF_AUTOBAN
  381.  
  382. def Show(self):
  383. self.__LoadWindow()
  384.  
  385. ui.ScriptWindow.Show(self)
  386.  
  387. def __LoadWindow(self):
  388. if self.isLoaded == 1:
  389. return
  390.  
  391. self.isLoaded = 1
  392.  
  393. try:
  394. pyScrLoader = ui.PythonScriptLoader()
  395. pyScrLoader.LoadScriptFile(self, "UIScript/MiniMap.py")
  396. except:
  397. import exception
  398. exception.Abort("MiniMap.LoadWindow.LoadScript")
  399.  
  400. try:
  401. self.OpenWindow = self.GetChild("OpenWindow")
  402. self.MiniMapWindow = self.GetChild("MiniMapWindow")
  403. self.ScaleUpButton = self.GetChild("ScaleUpButton")
  404. self.ScaleDownButton = self.GetChild("ScaleDownButton")
  405. self.MiniMapHideButton = self.GetChild("MiniMapHideButton")
  406. self.AtlasShowButton = self.GetChild("AtlasShowButton")
  407. self.CloseWindow = self.GetChild("CloseWindow")
  408. self.MiniMapShowButton = self.GetChild("MiniMapShowButton")
  409. self.positionInfo = self.GetChild("PositionInfo")
  410. self.observerCount = self.GetChild("ObserverCount")
  411. self.serverInfo = self.GetChild("ServerInfo")
  412. self.timeInfo = self.GetChild("TimeInfo")
  413. self.dateInfo = self.GetChild("DateInfo")
  414. except:
  415. import exception
  416. exception.Abort("MiniMap.LoadWindow.Bind")
  417.  
  418. if constInfo.MINIMAP_POSITIONINFO_ENABLE==0:
  419. self.positionInfo.Hide()
  420.  
  421. self.serverInfo.SetText(net.GetServerInfo())
  422. self.timeInfo.SetText(time.strftime("%Y.%m.%d"))
  423. self.dateInfo.SetText("["+time.strftime("%H:%M:%S")+"]")
  424. self.ScaleUpButton.SetEvent(ui.__mem_func__(self.ScaleUp))
  425. self.ScaleDownButton.SetEvent(ui.__mem_func__(self.ScaleDown))
  426. self.MiniMapHideButton.SetEvent(ui.__mem_func__(self.HideMiniMap))
  427. self.MiniMapShowButton.SetEvent(ui.__mem_func__(self.ShowMiniMap))
  428.  
  429. if miniMap.IsAtlas():
  430. self.AtlasShowButton.SetEvent(ui.__mem_func__(self.ShowAtlas))
  431.  
  432. (ButtonPosX, ButtonPosY) = self.MiniMapShowButton.GetGlobalPosition()
  433. self.tooltipMiniMapOpen.SetTooltipPosition(ButtonPosX, ButtonPosY)
  434.  
  435. (ButtonPosX, ButtonPosY) = self.MiniMapHideButton.GetGlobalPosition()
  436. self.tooltipMiniMapClose.SetTooltipPosition(ButtonPosX, ButtonPosY)
  437.  
  438. (ButtonPosX, ButtonPosY) = self.ScaleUpButton.GetGlobalPosition()
  439. self.tooltipScaleUp.SetTooltipPosition(ButtonPosX, ButtonPosY)
  440.  
  441. (ButtonPosX, ButtonPosY) = self.ScaleDownButton.GetGlobalPosition()
  442. self.tooltipScaleDown.SetTooltipPosition(ButtonPosX, ButtonPosY)
  443.  
  444. (ButtonPosX, ButtonPosY) = self.AtlasShowButton.GetGlobalPosition()
  445. self.tooltipAtlasOpen.SetTooltipPosition(ButtonPosX, ButtonPosY)
  446.  
  447. self.ShowMiniMap()
  448.  
  449. def Destroy(self):
  450. self.HideMiniMap()
  451.  
  452. self.AtlasWindow.Destroy()
  453. self.AtlasWindow = None
  454.  
  455. self.ClearDictionary()
  456.  
  457. self.__Initialize()
  458.  
  459. def UpdateObserverCount(self, observerCount):
  460. if observerCount>0:
  461. self.observerCount.Show()
  462. elif observerCount<=0:
  463. self.observerCount.Hide()
  464.  
  465. self.observerCount.SetText(localeInfo.MINIMAP_OBSERVER_COUNT % observerCount)
  466.  
  467. def OnUpdate(self):
  468. (x, y, z) = player.GetMainCharacterPosition()
  469. miniMap.Update(x, y)
  470.  
  471. self.positionInfo.SetText("(%.0f, %.0f)" % (x/100, y/100))
  472. self.timeInfo.SetText(time.strftime("%Y.%m.%d"))
  473. self.dateInfo.SetText("["+time.strftime("%H:%M:%S")+"]")
  474.  
  475. if self.tooltipInfo:
  476. if TRUE == self.MiniMapWindow.IsIn():
  477. (mouseX, mouseY) = wndMgr.GetMousePosition()
  478. (bFind, sName, iPosX, iPosY, dwTextColor) = miniMap.GetInfo(mouseX, mouseY)
  479. if bFind == 0:
  480. self.tooltipInfo.Hide()
  481. elif not self.canSeeInfo:
  482. self.tooltipInfo.SetText("%s(%s)" % (sName, localeInfo.UI_POS_UNKNOWN))
  483. self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
  484. self.tooltipInfo.SetTextColor(dwTextColor)
  485. self.tooltipInfo.Show()
  486. else:
  487. if localeInfo.IsARABIC() and sName[-1].isalnum():
  488. self.tooltipInfo.SetText("(%s)%d, %d" % (sName, iPosX, iPosY))
  489. else:
  490. self.tooltipInfo.SetText("%s(%d, %d)" % (sName, iPosX, iPosY))
  491. self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
  492. self.tooltipInfo.SetTextColor(dwTextColor)
  493. self.tooltipInfo.Show()
  494. else:
  495. self.tooltipInfo.Hide()
  496.  
  497. # AUTOBAN
  498. if self.imprisonmentDuration:
  499. self.__UpdateImprisonmentDurationText()
  500. # END_OF_AUTOBAN
  501.  
  502. if TRUE == self.MiniMapShowButton.IsIn():
  503. self.tooltipMiniMapOpen.Show()
  504. else:
  505. self.tooltipMiniMapOpen.Hide()
  506.  
  507. if TRUE == self.MiniMapHideButton.IsIn():
  508. self.tooltipMiniMapClose.Show()
  509. else:
  510. self.tooltipMiniMapClose.Hide()
  511.  
  512. if TRUE == self.ScaleUpButton.IsIn():
  513. self.tooltipScaleUp.Show()
  514. else:
  515. self.tooltipScaleUp.Hide()
  516.  
  517. if TRUE == self.ScaleDownButton.IsIn():
  518. self.tooltipScaleDown.Show()
  519. else:
  520. self.tooltipScaleDown.Hide()
  521.  
  522. if TRUE == self.AtlasShowButton.IsIn():
  523. self.tooltipAtlasOpen.Show()
  524. else:
  525. self.tooltipAtlasOpen.Hide()
  526.  
  527. def OnRender(self):
  528. (x, y) = self.GetGlobalPosition()
  529. fx = float(x)
  530. fy = float(y)
  531. miniMap.Render(fx + 4.0, fy + 5.0)
  532.  
  533. def Close(self):
  534. self.HideMiniMap()
  535.  
  536. def HideMiniMap(self):
  537. miniMap.Hide()
  538. self.OpenWindow.Hide()
  539. self.CloseWindow.Show()
  540.  
  541. def ShowMiniMap(self):
  542. if not self.canSeeInfo:
  543. return
  544.  
  545. miniMap.Show()
  546. self.OpenWindow.Show()
  547. self.CloseWindow.Hide()
  548.  
  549. def isShowMiniMap(self):
  550. return miniMap.isShow()
  551.  
  552. def ScaleUp(self):
  553. miniMap.ScaleUp()
  554.  
  555. def ScaleDown(self):
  556. miniMap.ScaleDown()
  557.  
  558. def ShowAtlas(self):
  559. if not miniMap.IsAtlas():
  560. return
  561. if not self.AtlasWindow.IsShow():
  562. self.AtlasWindow.Show()
  563.  
  564. def ToggleAtlasWindow(self):
  565. if not miniMap.IsAtlas():
  566. return
  567. if self.AtlasWindow.IsShow():
  568. self.AtlasWindow.Hide()
  569. else:
  570. self.AtlasWindow.Show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement