Guest User

Untitled

a guest
May 26th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 89.50 KB | None | 0 0
  1. import app
  2. import ui
  3. import guild
  4. import net
  5. import wndMgr
  6. import grp
  7. import grpText
  8. import uiPickMoney
  9. import localeInfo
  10. import player
  11. import skill
  12. import mouseModule
  13. import uiUploadMark
  14. import uiCommon
  15. import uiToolTip
  16. import playerSettingModule
  17. import constInfo
  18. import background
  19. import miniMap
  20. import chr
  21. import uiScriptLocale
  22. from _weakref import proxy
  23.  
  24. if app.ENABLE_CHEQUE_SYSTEM:
  25.     import uiPickETC
  26.  
  27. DISABLE_GUILD_SKILL = False
  28. DISABLE_DECLARE_WAR = False
  29.  
  30. def NumberToMoneyString(n):
  31.     return localeInfo.NumberToMoneyString(n)
  32.  
  33. if (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/br"):
  34.     def NumberToMoneyString(n):
  35.         if n <= 0 :
  36.             return "0"
  37.  
  38.         return "%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 ]))
  39.  
  40. MATERIAL_STONE_INDEX = 0
  41. MATERIAL_LOG_INDEX = 1
  42. MATERIAL_PLYWOOD_INDEX = 2
  43.  
  44. MATERIAL_STONE_ID = 90010
  45. MATERIAL_LOG_ID = 90011
  46. MATERIAL_PLYWOOD_ID = 90012
  47.  
  48. BUILDING_DATA_LIST = []
  49.  
  50. def GetGVGKey(srcGuildID, dstGuildID):
  51.     minID = min(srcGuildID, dstGuildID)
  52.     maxID = max(srcGuildID, dstGuildID)
  53.     return minID*1000 + maxID
  54. def unsigned32(n):
  55.     return n & 0xFFFFFFFFL
  56.  
  57. class DeclareGuildWarDialog(ui.ScriptWindow):
  58.  
  59.     def __init__(self):
  60.         ui.ScriptWindow.__init__(self)
  61.  
  62.         self.type=0
  63.         self.__CreateDialog()
  64.  
  65.     def __del__(self):
  66.         ui.ScriptWindow.__del__(self)
  67.  
  68.     def Open(self):
  69.         self.inputValue.SetFocus()
  70.         self.SetCenterPosition()
  71.         self.SetTop()
  72.         self.Show()
  73.  
  74.     def Close(self):
  75.         self.ClearDictionary()
  76.         self.board = None
  77.         self.acceptButton = None
  78.         self.cancelButton = None
  79.         self.inputSlot = None
  80.         self.inputValue = None
  81.         self.Hide()
  82.  
  83.     def __CreateDialog(self):
  84.  
  85.         try:
  86.             pyScrLoader = ui.PythonScriptLoader()
  87.  
  88.             if localeInfo.IsVIETNAM() :
  89.                 pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "declareguildwardialog.py")
  90.             else:
  91.                 pyScrLoader.LoadScriptFile(self, "uiscript/declareguildwardialog.py")
  92.  
  93.         except:
  94.             import exception
  95.             exception.Abort("DeclareGuildWarWindow.__CreateDialog - LoadScript")
  96.  
  97.         try:
  98.             getObject = self.GetChild
  99.             self.board = getObject("Board")
  100.  
  101.             self.typeButtonList=[]
  102.             self.typeButtonList.append(getObject("NormalButton"))
  103.             self.typeButtonList.append(getObject("WarpButton"))
  104.             self.typeButtonList.append(getObject("CTFButton"))
  105.  
  106.             self.acceptButton = getObject("AcceptButton")
  107.             self.cancelButton = getObject("CancelButton")
  108.             self.inputSlot = getObject("InputSlot")
  109.             self.inputValue = getObject("InputValue")
  110.  
  111.             gameType=getObject("GameType")
  112.  
  113.         except:
  114.             import exception
  115.             exception.Abort("DeclareGuildWarWindow.__CreateDialog - BindObject")
  116.  
  117.         if constInfo.GUILD_WAR_TYPE_SELECT_ENABLE==0:
  118.             gameType.Hide()
  119.  
  120.         self.typeButtonList[0].SAFE_SetEvent(self.__OnClickTypeButtonNormal)
  121.         self.typeButtonList[1].SAFE_SetEvent(self.__OnClickTypeButtonWarp)
  122.         self.typeButtonList[2].SAFE_SetEvent(self.__OnClickTypeButtonCTF)
  123.  
  124.         self.typeButtonList[0].SetToolTipWindow(self.__CreateGameTypeToolTip(localeInfo.GUILDWAR_NORMAL_TITLE, localeInfo.GUILDWAR_NORMAL_DESCLIST))
  125.         self.typeButtonList[1].SetToolTipWindow(self.__CreateGameTypeToolTip(localeInfo.GUILDWAR_WARP_TITLE, localeInfo.GUILDWAR_WARP_DESCLIST))
  126.         self.typeButtonList[2].SetToolTipWindow(self.__CreateGameTypeToolTip(localeInfo.GUILDWAR_CTF_TITLE, localeInfo.GUILDWAR_CTF_DESCLIST))
  127.  
  128.         self.__ClickRadioButton(self.typeButtonList, 0)
  129.  
  130.         self.SetAcceptEvent(ui.__mem_func__(self.__OnOK))
  131.         self.SetCancelEvent(ui.__mem_func__(self.__OnCancel))
  132.  
  133.     def __OnOK(self):
  134.         text = self.GetText()
  135.         type = self.GetType()
  136.  
  137.         if ""==text:
  138.             return
  139.  
  140.         net.SendChatPacket("/war %s %d" % (text, type))
  141.         self.Close()
  142.  
  143.         return 1
  144.  
  145.     def __OnCancel(self):
  146.         self.Close()
  147.         return 1
  148.  
  149.     def __OnClickTypeButtonNormal(self):
  150.         self.__ClickTypeRadioButton(0)
  151.  
  152.     def __OnClickTypeButtonWarp(self):
  153.         self.__ClickTypeRadioButton(1)
  154.  
  155.     def __OnClickTypeButtonCTF(self):
  156.         self.__ClickTypeRadioButton(2)
  157.  
  158.     def __ClickTypeRadioButton(self, type):
  159.         self.__ClickRadioButton(self.typeButtonList, type)
  160.         self.type=type
  161.  
  162.     def __ClickRadioButton(self, buttonList, buttonIndex):
  163.         try:
  164.             selButton=buttonList[buttonIndex]
  165.         except IndexError:
  166.             return
  167.  
  168.         for eachButton in buttonList:
  169.             eachButton.SetUp()
  170.  
  171.         selButton.Down()
  172.  
  173.     def SetTitle(self, name):
  174.         self.board.SetTitleName(name)
  175.  
  176.     def SetNumberMode(self):
  177.         self.inputValue.SetNumberMode()
  178.  
  179.     def SetSecretMode(self):
  180.         self.inputValue.SetSecret()
  181.  
  182.     def SetFocus(self):
  183.         self.inputValue.SetFocus()
  184.  
  185.     def SetMaxLength(self, length):
  186.         width = length * 6 + 10
  187.         self.inputValue.SetMax(length)
  188.         self.SetSlotWidth(width)
  189.         self.SetBoardWidth(max(width + 50, 160))
  190.  
  191.     def SetSlotWidth(self, width):
  192.         self.inputSlot.SetSize(width, self.inputSlot.GetHeight())
  193.         self.inputValue.SetSize(width, self.inputValue.GetHeight())
  194.  
  195.     def SetBoardWidth(self, width):
  196.         self.board.SetSize(max(width + 50, 160), self.GetHeight())
  197.         self.SetSize(max(width + 50, 160), self.GetHeight())
  198.         self.UpdateRect()
  199.  
  200.     def SetAcceptEvent(self, event):
  201.         self.acceptButton.SetEvent(event)
  202.         self.inputValue.OnIMEReturn = event
  203.  
  204.     def SetCancelEvent(self, event):
  205.         self.board.SetCloseEvent(event)
  206.         self.cancelButton.SetEvent(event)
  207.         self.inputValue.OnPressEscapeKey = event
  208.  
  209.     def GetType(self):
  210.         return self.type
  211.  
  212.     def GetText(self):
  213.         return self.inputValue.GetText()
  214.  
  215.     def __CreateGameTypeToolTip(self, title, descList):
  216.         toolTip = uiToolTip.ToolTip()
  217.         toolTip.SetTitle(title)
  218.         toolTip.AppendSpace(5)
  219.  
  220.         for desc in descList:
  221.             toolTip.AutoAppendTextLine(desc)
  222.  
  223.         toolTip.AlignHorizonalCenter()
  224.         return toolTip
  225.  
  226.  
  227. class AcceptGuildWarDialog(ui.ScriptWindow):
  228.  
  229.     def __init__(self):
  230.         ui.ScriptWindow.__init__(self)
  231.  
  232.         self.type=0
  233.         self.__CreateDialog()
  234.  
  235.     def __del__(self):
  236.         print "---------------------------------------------------------------------------- DELETE AcceptGuildWarDialog"
  237.         ui.ScriptWindow.__del__(self)
  238.  
  239.     def Open(self, guildName, warType):
  240.         self.guildName=guildName
  241.         self.warType=warType
  242.         self.__ClickSelectedTypeRadioButton()
  243.         self.inputValue.SetText(guildName)
  244.         self.SetCenterPosition()
  245.         self.SetTop()
  246.         self.Show()
  247.  
  248.     def GetGuildName(self):
  249.         return self.guildName
  250.  
  251.     def Close(self):
  252.         self.ClearDictionary()
  253.         self.board = None
  254.         self.acceptButton = None
  255.         self.cancelButton = None
  256.         self.inputSlot = None
  257.         self.inputValue = None
  258.         self.Hide()
  259.  
  260.     def __ClickSelectedTypeRadioButton(self):
  261.         self.__ClickTypeRadioButton(self.warType)
  262.  
  263.     def __CreateDialog(self):
  264.  
  265.         try:
  266.             pyScrLoader = ui.PythonScriptLoader()
  267.             pyScrLoader.LoadScriptFile(self, "uiscript/acceptguildwardialog.py")
  268.         except:
  269.             import exception
  270.             exception.Abort("DeclareGuildWarWindow.__CreateDialog - LoadScript")
  271.  
  272.         try:
  273.             getObject = self.GetChild
  274.             self.board = getObject("Board")
  275.  
  276.             self.typeButtonList=[]
  277.             self.typeButtonList.append(getObject("NormalButton"))
  278.             self.typeButtonList.append(getObject("WarpButton"))
  279.             self.typeButtonList.append(getObject("CTFButton"))
  280.  
  281.             self.acceptButton = getObject("AcceptButton")
  282.             self.cancelButton = getObject("CancelButton")
  283.             self.inputSlot = getObject("InputSlot")
  284.             self.inputValue = getObject("InputValue")
  285.  
  286.             gameType=getObject("GameType")
  287.  
  288.         except:
  289.             import exception
  290.             exception.Abort("DeclareGuildWarWindow.__CreateDialog - BindObject")
  291.  
  292.         if constInfo.GUILD_WAR_TYPE_SELECT_ENABLE==0:
  293.             gameType.Hide()
  294.  
  295.         self.typeButtonList[0].SAFE_SetEvent(self.__OnClickTypeButtonNormal)
  296.         self.typeButtonList[1].SAFE_SetEvent(self.__OnClickTypeButtonWarp)
  297.         self.typeButtonList[2].SAFE_SetEvent(self.__OnClickTypeButtonCTF)
  298.  
  299.         self.typeButtonList[0].SetToolTipWindow(self.__CreateGameTypeToolTip(localeInfo.GUILDWAR_NORMAL_TITLE, localeInfo.GUILDWAR_NORMAL_DESCLIST))
  300.         self.typeButtonList[1].SetToolTipWindow(self.__CreateGameTypeToolTip(localeInfo.GUILDWAR_WARP_TITLE, localeInfo.GUILDWAR_WARP_DESCLIST))
  301.         self.typeButtonList[2].SetToolTipWindow(self.__CreateGameTypeToolTip(localeInfo.GUILDWAR_CTF_TITLE, localeInfo.GUILDWAR_CTF_DESCLIST))
  302.  
  303.         self.__ClickRadioButton(self.typeButtonList, 0)
  304.  
  305.     def __OnClickTypeButtonNormal(self):
  306.         self.__ClickSelectedTypeRadioButton()
  307.  
  308.     def __OnClickTypeButtonWarp(self):
  309.         self.__ClickSelectedTypeRadioButton()
  310.  
  311.     def __OnClickTypeButtonCTF(self):
  312.         self.__ClickSelectedTypeRadioButton()
  313.  
  314.     def __ClickTypeRadioButton(self, type):
  315.         self.__ClickRadioButton(self.typeButtonList, type)
  316.         self.type=type
  317.  
  318.     def __ClickRadioButton(self, buttonList, buttonIndex):
  319.         try:
  320.             selButton=buttonList[buttonIndex]
  321.         except IndexError:
  322.             return
  323.  
  324.         for eachButton in buttonList:
  325.             eachButton.SetUp()
  326.  
  327.         selButton.Down()
  328.  
  329.     def SetTitle(self, name):
  330.         self.board.SetTitleName(name)
  331.  
  332.     def SetNumberMode(self):
  333.         self.inputValue.SetNumberMode()
  334.  
  335.     def SetSecretMode(self):
  336.         self.inputValue.SetSecret()
  337.  
  338.     def SetFocus(self):
  339.         self.inputValue.SetFocus()
  340.  
  341.     def SetMaxLength(self, length):
  342.         width = length * 6 + 10
  343.         self.inputValue.SetMax(length)
  344.         self.SetSlotWidth(width)
  345.         self.SetBoardWidth(max(width + 50, 160))
  346.  
  347.     def SetSlotWidth(self, width):
  348.         self.inputSlot.SetSize(width, self.inputSlot.GetHeight())
  349.         self.inputValue.SetSize(width, self.inputValue.GetHeight())
  350.  
  351.     def SetBoardWidth(self, width):
  352.         self.board.SetSize(max(width + 50, 160), self.GetHeight())
  353.         self.SetSize(max(width + 50, 160), self.GetHeight())
  354.         self.UpdateRect()
  355.  
  356.     def SAFE_SetAcceptEvent(self, event):
  357.         self.SetAcceptEvent(ui.__mem_func__(event))
  358.  
  359.     def SAFE_SetCancelEvent(self, event):
  360.         self.SetCancelEvent(ui.__mem_func__(event))
  361.  
  362.     def SetAcceptEvent(self, event):
  363.         self.acceptButton.SetEvent(event)
  364.         self.inputValue.OnIMEReturn = event
  365.  
  366.     def SetCancelEvent(self, event):
  367.         self.board.SetCloseEvent(event)
  368.         self.cancelButton.SetEvent(event)
  369.         self.inputValue.OnPressEscapeKey = event
  370.  
  371.     def GetType(self):
  372.         return self.type
  373.  
  374.     def GetText(self):
  375.         return self.inputValue.GetText()
  376.  
  377.     def __CreateGameTypeToolTip(self, title, descList):
  378.         toolTip = uiToolTip.ToolTip()
  379.         toolTip.SetTitle(title)
  380.         toolTip.AppendSpace(5)
  381.  
  382.         for desc in descList:
  383.             toolTip.AutoAppendTextLine(desc)
  384.  
  385.         toolTip.AlignHorizonalCenter()
  386.         return toolTip
  387.  
  388.  
  389.  
  390. class GuildWarScoreBoard(ui.ThinBoard):
  391.  
  392.     def __init__(self):
  393.         ui.ThinBoard.__init__(self)
  394.         self.Initialize()
  395.  
  396.     def __del__(self):
  397.         ui.ThinBoard.__del__(self)
  398.  
  399.     def Initialize(self):
  400.         self.allyGuildID = 0
  401.         self.enemyGuildID = 0
  402.         self.allyDataDict = {}
  403.         self.enemyDataDict = {}
  404.  
  405.     def Open(self, allyGuildID, enemyGuildID):
  406.  
  407.         self.allyGuildID = allyGuildID
  408.         self.enemyGuildID = enemyGuildID
  409.  
  410.         self.SetPosition(10, wndMgr.GetScreenHeight() - 100)
  411.  
  412.         mark = ui.MarkBox()
  413.         mark.SetParent(self)
  414.         mark.SetIndex(allyGuildID)
  415.         mark.SetPosition(10, 10 + 18*0)
  416.         mark.Show()
  417.         scoreText = ui.TextLine()
  418.         scoreText.SetParent(self)
  419.         scoreText.SetPosition(30, 10 + 18*0)
  420.         scoreText.SetHorizontalAlignLeft()
  421.         scoreText.Show()
  422.         self.allyDataDict["NAME"] = guild.GetGuildName(allyGuildID)
  423.         self.allyDataDict["SCORE"] = 0
  424.         self.allyDataDict["MEMBER_COUNT"] = -1
  425.         self.allyDataDict["MARK"] = mark
  426.         self.allyDataDict["TEXT"] = scoreText
  427.  
  428.         mark = ui.MarkBox()
  429.         mark.SetParent(self)
  430.         mark.SetIndex(enemyGuildID)
  431.         mark.SetPosition(10, 10 + 18*1)
  432.         mark.Show()
  433.         scoreText = ui.TextLine()
  434.         scoreText.SetParent(self)
  435.         scoreText.SetPosition(30, 10 + 18*1)
  436.         scoreText.SetHorizontalAlignLeft()
  437.         scoreText.Show()
  438.         self.enemyDataDict["NAME"] = guild.GetGuildName(enemyGuildID)
  439.         self.enemyDataDict["SCORE"] = 0
  440.         self.enemyDataDict["MEMBER_COUNT"] = -1
  441.         self.enemyDataDict["MARK"] = mark
  442.         self.enemyDataDict["TEXT"] = scoreText
  443.  
  444.         self.__RefreshName()
  445.         self.Show()
  446.  
  447.     def __GetDataDict(self, ID):
  448.         if self.allyGuildID == ID:
  449.             return self.allyDataDict
  450.         if self.enemyGuildID == ID:
  451.             return self.enemyDataDict
  452.  
  453.         return None
  454.  
  455.     def SetScore(self, gainGuildID, opponetGuildID, point):
  456.         dataDict = self.__GetDataDict(gainGuildID)
  457.         if not dataDict:
  458.             return
  459.         dataDict["SCORE"] = point
  460.         self.__RefreshName()
  461.  
  462.     def UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2):
  463.         dataDict1 = self.__GetDataDict(guildID1)
  464.         dataDict2 = self.__GetDataDict(guildID2)
  465.         if dataDict1:
  466.             dataDict1["MEMBER_COUNT"] = memberCount1
  467.         if dataDict2:
  468.             dataDict2["MEMBER_COUNT"] = memberCount2
  469.         self.__RefreshName()
  470.  
  471.     def __RefreshName(self):
  472.         nameMaxLen = max(len(self.allyDataDict["NAME"]), len(self.enemyDataDict["NAME"]))
  473.  
  474.         if -1 == self.allyDataDict["MEMBER_COUNT"] or -1 == self.enemyDataDict["MEMBER_COUNT"]:
  475.             self.SetSize(30+nameMaxLen*6+8*5, 50)
  476.             self.allyDataDict["TEXT"].SetText("%s %d" % (self.allyDataDict["NAME"], self.allyDataDict["SCORE"]))
  477.             self.enemyDataDict["TEXT"].SetText("%s %d" % (self.enemyDataDict["NAME"], self.enemyDataDict["SCORE"]))
  478.  
  479.         else:
  480.             self.SetSize(30+nameMaxLen*6+8*5+15, 50)
  481.             self.allyDataDict["TEXT"].SetText("%s(%d) %d" % (self.allyDataDict["NAME"], self.allyDataDict["MEMBER_COUNT"], self.allyDataDict["SCORE"]))
  482.             self.enemyDataDict["TEXT"].SetText("%s(%d) %d" % (self.enemyDataDict["NAME"], self.enemyDataDict["MEMBER_COUNT"], self.enemyDataDict["SCORE"]))
  483.  
  484. class MouseReflector(ui.Window):
  485.     def __init__(self, parent):
  486.         ui.Window.__init__(self)
  487.         self.SetParent(parent)
  488.         self.AddFlag("not_pick")
  489.         self.width = self.height = 0
  490.         self.isDown = False
  491.  
  492.     def Down(self):
  493.         self.isDown = True
  494.  
  495.     def Up(self):
  496.         self.isDown = False
  497.  
  498.     def OnRender(self):
  499.  
  500.         if self.isDown:
  501.             grp.SetColor(ui.WHITE_COLOR)
  502.         else:
  503.             grp.SetColor(ui.HALF_WHITE_COLOR)
  504.  
  505.         x, y = self.GetGlobalPosition()
  506.         grp.RenderBar(x+2, y+2, self.GetWidth()-4, self.GetHeight()-4)
  507.  
  508. class EditableTextSlot(ui.ImageBox):
  509.     def __init__(self, parent, x, y):
  510.         ui.ImageBox.__init__(self)
  511.         self.SetParent(parent)
  512.         self.SetPosition(x, y)
  513.         self.LoadImage("d:/ymir work/ui/public/Parameter_Slot_02.sub")
  514.  
  515.         self.mouseReflector = MouseReflector(self)
  516.         self.mouseReflector.SetSize(self.GetWidth(), self.GetHeight())
  517.  
  518.         self.Enable = True
  519.         self.textLine = ui.MakeTextLine(self)
  520.         self.event = lambda *arg: None
  521.         self.arg = 0
  522.         self.Show()
  523.  
  524.         self.mouseReflector.UpdateRect()
  525.  
  526.     def __del__(self):
  527.         ui.ImageBox.__del__(self)
  528.  
  529.     def SetText(self, text):
  530.         self.textLine.SetText(text)
  531.  
  532.     def SetEvent(self, event, arg):
  533.         self.event = event
  534.         self.arg = arg
  535.  
  536.     def Disable(self):
  537.         self.Enable = False
  538.  
  539.     def OnMouseOverIn(self):
  540.         if not self.Enable:
  541.             return
  542.         self.mouseReflector.Show()
  543.  
  544.     def OnMouseOverOut(self):
  545.         if not self.Enable:
  546.             return
  547.         self.mouseReflector.Hide()
  548.  
  549.     def OnMouseLeftButtonDown(self):
  550.         if not self.Enable:
  551.             return
  552.         self.mouseReflector.Down()
  553.  
  554.     def OnMouseLeftButtonUp(self):
  555.         if not self.Enable:
  556.             return
  557.         self.mouseReflector.Up()
  558.         self.event(self.arg)
  559.  
  560. class CheckBox(ui.ImageBox):
  561.     def __init__(self, parent, x, y, event, filename = "d:/ymir work/ui/public/Parameter_Slot_01.sub"):
  562.         ui.ImageBox.__init__(self)
  563.         self.SetParent(parent)
  564.         self.SetPosition(x, y)
  565.         self.LoadImage(filename)
  566.  
  567.         self.mouseReflector = MouseReflector(self)
  568.         self.mouseReflector.SetSize(self.GetWidth(), self.GetHeight())
  569.  
  570.         image = ui.MakeImageBox(self, "d:/ymir work/ui/public/check_image.sub", 0, 0)
  571.         image.AddFlag("not_pick")
  572.         image.SetWindowHorizontalAlignCenter()
  573.         image.SetWindowVerticalAlignCenter()
  574.         image.Hide()
  575.         self.Enable = True
  576.         self.image = image
  577.         self.event = event
  578.         self.Show()
  579.  
  580.         self.mouseReflector.UpdateRect()
  581.  
  582.     def __del__(self):
  583.         ui.ImageBox.__del__(self)
  584.  
  585.     def SetCheck(self, flag):
  586.         if flag:
  587.             self.image.Show()
  588.         else:
  589.             self.image.Hide()
  590.  
  591.     def Disable(self):
  592.         self.Enable = False
  593.  
  594.     def OnMouseOverIn(self):
  595.         if not self.Enable:
  596.             return
  597.         self.mouseReflector.Show()
  598.  
  599.     def OnMouseOverOut(self):
  600.         if not self.Enable:
  601.             return
  602.         self.mouseReflector.Hide()
  603.  
  604.     def OnMouseLeftButtonDown(self):
  605.         if not self.Enable:
  606.             return
  607.         self.mouseReflector.Down()
  608.  
  609.     def OnMouseLeftButtonUp(self):
  610.         if not self.Enable:
  611.             return
  612.         self.mouseReflector.Up()
  613.         self.event()
  614.  
  615. class ChangeGradeNameDialog(ui.ScriptWindow):
  616.     def __init__(self):
  617.         ui.ScriptWindow.__init__(self)
  618.     def Open(self):
  619.         self.gradeNameSlot.SetText("")
  620.         self.gradeNameSlot.SetFocus()
  621.         xMouse, yMouse = wndMgr.GetMousePosition()
  622.         self.SetPosition(xMouse - self.GetWidth()/2, yMouse + 50)
  623.         self.SetTop()
  624.         self.Show()
  625.     def Close(self):
  626.         self.gradeNameSlot.KillFocus()
  627.         self.Hide()
  628.         return True
  629.  
  630.     def SetGradeNumber(self, gradeNumber):
  631.         self.gradeNumber = gradeNumber
  632.     def GetGradeNumber(self):
  633.         return self.gradeNumber
  634.     def GetGradeName(self):
  635.         return self.gradeNameSlot.GetText()
  636.  
  637.     def OnPressEscapeKey(self):
  638.         self.Close()
  639.         return True
  640.  
  641. class CommentSlot(ui.Window):
  642.  
  643.     TEXT_LIMIT = 35
  644.  
  645.     def __init__(self):
  646.         ui.Window.__init__(self)
  647.  
  648.         self.slotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_06.sub", 0, 0)
  649.         self.slotImage.AddFlag("not_pick")
  650.  
  651.         self.slotSimpleText = ui.MakeTextLine(self)
  652.         self.slotSimpleText.SetPosition(2, 0)
  653.         ## 13.12.02 ΎΖ¶ψΌφΑ¤
  654.         if localeInfo.IsARABIC() :
  655.             self.slotSimpleText.SetWindowHorizontalAlignCenter()
  656.             self.slotSimpleText.SetHorizontalAlignCenter()
  657.         else :
  658.             self.slotSimpleText.SetWindowHorizontalAlignLeft()
  659.             self.slotSimpleText.SetHorizontalAlignLeft()
  660.  
  661.         self.bar = ui.SlotBar()
  662.         self.bar.SetParent(self)
  663.         self.bar.AddFlag("not_pick")
  664.         self.bar.Hide()
  665.  
  666.         self.slotFullText = ui.MakeTextLine(self)
  667.         self.slotFullText.SetPosition(2, 0)
  668.         self.slotFullText.SetWindowHorizontalAlignLeft()
  669.         self.slotFullText.SetHorizontalAlignLeft()
  670.  
  671.         self.SetSize(self.slotImage.GetWidth(), self.slotImage.GetHeight())
  672.         self.len = 0
  673.  
  674.     def SetText(self, text):
  675.         self.len = len(text)
  676.         if len(text) > self.TEXT_LIMIT:
  677.             limitText = grpText.GetSplitingTextLine(text, self.TEXT_LIMIT-3, 0)
  678.             self.slotSimpleText.SetText(limitText + "...")
  679.             self.bar.SetSize(self.len * 6 + 5, 17)
  680.  
  681.         else:
  682.             self.slotSimpleText.SetText(text)
  683.  
  684.         self.slotFullText.SetText(text)
  685.         self.slotFullText.SetPosition(2, 0)
  686.         self.slotFullText.Hide()
  687.  
  688.     def OnMouseOverIn(self):
  689.         if self.len > self.TEXT_LIMIT:
  690.             self.bar.Show()
  691.             self.slotFullText.Show()
  692.  
  693.     def OnMouseOverOut(self):
  694.         if self.len > self.TEXT_LIMIT:
  695.             self.bar.Hide()
  696.             self.slotFullText.Hide()
  697.  
  698. class GuildWindow(ui.ScriptWindow):
  699.  
  700.     JOB_NAME = {    0 : localeInfo.JOB_WARRIOR,
  701.             1 : localeInfo.JOB_ASSASSIN,
  702.             2 : localeInfo.JOB_SURA,
  703.             3 : localeInfo.JOB_SHAMAN, }
  704.  
  705.     if app.ENABLE_WOLFMAN_CHARACTER:
  706.         JOB_NAME.update({4 : localeInfo.JOB_WOLFMAN,})
  707.  
  708.     GUILD_SKILL_PASSIVE_SLOT = 0
  709.     GUILD_SKILL_ACTIVE_SLOT = 1
  710.     GUILD_SKILL_AFFECT_SLOT = 2
  711.  
  712.     GRADE_SLOT_NAME = 0
  713.     GRADE_ADD_MEMBER_AUTHORITY = 1
  714.     GRADE_REMOVE_MEMBER_AUTHORITY = 2
  715.     GRADE_NOTICE_AUTHORITY = 3
  716.     GRADE_SKILL_AUTHORITY = 4
  717.  
  718.     MEMBER_LINE_COUNT = 13
  719.  
  720.     class PageWindow(ui.ScriptWindow):
  721.         def __init__(self, parent, filename):
  722.             ui.ScriptWindow.__init__(self)
  723.             self.SetParent(parent)
  724.             self.filename = filename
  725.         def GetScriptFileName(self):
  726.             return self.filename
  727.  
  728.     def __init__(self):
  729.         ui.ScriptWindow.__init__(self)
  730.         self.isLoaded=0
  731.  
  732.         self.__Initialize()
  733.  
  734.     def __del__(self):
  735.         ui.ScriptWindow.__del__(self)
  736.         print " ==================================== DESTROIED GUILD WINDOW"
  737.  
  738.     def __Initialize(self):
  739.  
  740.         self.board = None
  741.         self.pageName = None
  742.         self.tabDict = None
  743.         self.tabButtonDict = None
  744.         self.pickDialog = None
  745.         self.questionDialog = None
  746.         self.offerDialog = None
  747.         self.popupDialog = None
  748.         self.moneyDialog = None
  749.         self.changeGradeNameDialog = None
  750.         self.popup = None
  751.  
  752.         self.popupMessage = None
  753.         self.commentSlot = None
  754.  
  755.         self.pageWindow = None
  756.         self.tooltipSkill = None
  757.  
  758.         self.memberLinePos = 0
  759.  
  760.         self.enemyGuildNameList = []
  761.  
  762.     def Open(self):
  763.         self.Show()
  764.         self.SetTop()
  765.  
  766.         guildID = net.GetGuildID()
  767.         self.largeMarkBox.SetIndex(guildID)
  768.         self.largeMarkBox.SetScale(3)
  769.  
  770.     def Close(self):
  771.         self.__CloseAllGuildMemberPageGradeComboBox()
  772.         self.offerDialog.Close()
  773.         self.popupDialog.Hide()
  774.         self.changeGradeNameDialog.Hide()
  775.         self.tooltipSkill.Hide()
  776.         self.Hide()
  777.  
  778.         self.pickDialog = None
  779.         self.questionDialog = None
  780.         self.popup = None
  781.  
  782.     def Destroy(self):
  783.         self.ClearDictionary()
  784.  
  785.         if self.offerDialog:
  786.             self.offerDialog.Destroy()
  787.  
  788.         if self.popupDialog:
  789.             self.popupDialog.ClearDictionary()
  790.  
  791.         if self.changeGradeNameDialog:
  792.             self.changeGradeNameDialog.ClearDictionary()
  793.  
  794.         if self.pageWindow:
  795.             for window in self.pageWindow.values():
  796.                 window.ClearDictionary()
  797.  
  798.         self.__Initialize()
  799.  
  800.     def Show(self):
  801.         if self.isLoaded==0:
  802.             self.isLoaded=1
  803.  
  804.             self.__LoadWindow()
  805.  
  806.         self.RefreshGuildInfoPage()
  807.         self.RefreshGuildBoardPage()
  808.         self.RefreshGuildMemberPage()
  809.         self.RefreshGuildSkillPage()
  810.         self.RefreshGuildGradePage()
  811.  
  812.         ui.ScriptWindow.Show(self)
  813.  
  814.     def __LoadWindow(self):
  815.         global DISABLE_GUILD_SKILL
  816.         try:
  817.             pyScrLoader = ui.PythonScriptLoader()
  818.  
  819.             if localeInfo.IsARABIC() :
  820.                 pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow.py")
  821.             else:
  822.                 pyScrLoader.LoadScriptFile(self, "uiscript/guildwindow.py")
  823.  
  824.             self.popupDialog = ui.ScriptWindow()
  825.             pyScrLoader.LoadScriptFile(self.popupDialog, "UIScript/PopupDialog.py")
  826.  
  827.             self.changeGradeNameDialog = ChangeGradeNameDialog()
  828.             pyScrLoader.LoadScriptFile(self.changeGradeNameDialog, "uiscript/changegradenamedialog.py")
  829.  
  830.             if localeInfo.IsARABIC():
  831.                 self.pageWindow = {
  832.                     "GUILD_INFO"    : self.PageWindow(self, "uiscript/guildwindow_guildinfopage_eu.py"),
  833.                     "BOARD"         : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"),
  834.                     "MEMBER"        : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"),
  835.                     "BASE_INFO"     : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"),
  836.                     "SKILL"         : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_guildskillpage.py"),
  837.                     "GRADE"         : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"),
  838.                 }
  839.             elif localeInfo.IsJAPAN() :
  840.                 self.pageWindow = {
  841.                     "GUILD_INFO"    : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_guildinfopage.py"),
  842.                     "BOARD"         : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_boardpage.py"),
  843.                     "MEMBER"        : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_memberpage.py"),
  844.                     "BASE_INFO"     : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"),
  845.                     "SKILL"         : self.PageWindow(self, "uiscript/guildwindow_guildskillpage.py"),
  846.                     "GRADE"         : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"),
  847.                 }
  848.             elif localeInfo.IsVIETNAM() :   # ΄ΩΗ¥½Γ
  849.                 self.pageWindow = {
  850.                     "GUILD_INFO"    : self.PageWindow(self, "uiscript/guildwindow_guildinfopage_eu.py"),
  851.                     "BOARD"         : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"),
  852.                     "MEMBER"        : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"),
  853.                     "BASE_INFO"     : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"),
  854.                     "SKILL"         : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_guildskillpage.py"),
  855.                     "GRADE"         : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"),
  856.                 }
  857.             elif localeInfo.IsEUROPE() and not app.GetLocalePath() == "locale/ca" :
  858.                 self.pageWindow = {
  859.                     "GUILD_INFO"    : self.PageWindow(self, "uiscript/guildwindow_guildinfopage_eu.py"),
  860.                     "BOARD"         : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"),
  861.                     "MEMBER"        : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"),
  862.                     "BASE_INFO"     : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"),
  863.                     "SKILL"         : self.PageWindow(self, "uiscript/guildwindow_guildskillpage.py"),
  864.                     "GRADE"         : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"),
  865.                 }
  866.             else:
  867.                 self.pageWindow = {
  868.                     "GUILD_INFO"    : self.PageWindow(self, "uiscript/guildwindow_guildinfopage.py"),
  869.                     "BOARD"         : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"),
  870.                     "MEMBER"        : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"),
  871.                     "BASE_INFO"     : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"),
  872.                     "SKILL"         : self.PageWindow(self, "uiscript/guildwindow_guildskillpage.py"),
  873.                     "GRADE"         : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"),
  874.                 }
  875.  
  876.             for window in self.pageWindow.values():
  877.                 pyScrLoader.LoadScriptFile(window, window.GetScriptFileName())
  878.  
  879.         except:
  880.             import exception
  881.             exception.Abort("GuildWindow.__LoadWindow.LoadScript")
  882.  
  883.         try:
  884.             getObject = self.GetChild
  885.  
  886.             self.board = getObject("Board")
  887.             self.pageName = {
  888.                 "GUILD_INFO"    : localeInfo.GUILD_TILE_INFO,
  889.                 "BOARD"         : localeInfo.GUILD_TILE_BOARD,
  890.                 "MEMBER"        : localeInfo.GUILD_TILE_MEMBER,
  891.                 "BASE_INFO"     : localeInfo.GUILD_TILE_BASEINFO,
  892.                 "SKILL"         : localeInfo.GUILD_TILE_SKILL,
  893.                 "GRADE"         : localeInfo.GUILD_TILE_GRADE,
  894.             }
  895.  
  896.             self.tabDict = {
  897.                 "GUILD_INFO"    : getObject("Tab_01"),
  898.                 "BOARD"         : getObject("Tab_02"),
  899.                 "MEMBER"        : getObject("Tab_03"),
  900.                 "BASE_INFO"     : getObject("Tab_04"),
  901.                 "SKILL"         : getObject("Tab_05"),
  902.                 "GRADE"         : getObject("Tab_06"),
  903.             }
  904.             self.tabButtonDict = {
  905.                 "GUILD_INFO"    : getObject("Tab_Button_01"),
  906.                 "BOARD"         : getObject("Tab_Button_02"),
  907.                 "MEMBER"        : getObject("Tab_Button_03"),
  908.                 "BASE_INFO"     : getObject("Tab_Button_04"),
  909.                 "SKILL"         : getObject("Tab_Button_05"),
  910.                 "GRADE"         : getObject("Tab_Button_06"),
  911.             }
  912.  
  913.             ## QuestionDialog
  914.             self.popupMessage = self.popupDialog.GetChild("message")
  915.             self.popupDialog.GetChild("accept").SetEvent(ui.__mem_func__(self.popupDialog.Hide))
  916.  
  917.             ## ChangeGradeName
  918.             self.changeGradeNameDialog.GetChild("AcceptButton").SetEvent(ui.__mem_func__(self.OnChangeGradeName))
  919.             self.changeGradeNameDialog.GetChild("CancelButton").SetEvent(ui.__mem_func__(self.changeGradeNameDialog.Hide))
  920.             self.changeGradeNameDialog.GetChild("Board").SetCloseEvent(ui.__mem_func__(self.changeGradeNameDialog.Hide))
  921.             self.changeGradeNameDialog.gradeNameSlot = self.changeGradeNameDialog.GetChild("GradeNameValue")
  922.             self.changeGradeNameDialog.gradeNameSlot.OnIMEReturn = ui.__mem_func__(self.OnChangeGradeName)
  923.             self.changeGradeNameDialog.gradeNameSlot.OnPressEscapeKey = ui.__mem_func__(self.changeGradeNameDialog.Close)
  924.  
  925.             ## Comment
  926.             self.commentSlot = self.pageWindow["BOARD"].GetChild("CommentValue")
  927.             self.commentSlot.OnIMEReturn = ui.__mem_func__(self.OnPostComment)
  928.             #self.commentSlot.OnKeyDown = ui.__mem_func__(self.OnKeyDownInBoardPage)
  929.             self.commentSlot.OnKeyDown = lambda key, argSelf=self: argSelf.OnKeyDownInBoardPage(key)
  930.  
  931.             ## RefreshButton
  932.             self.pageWindow["BOARD"].GetChild("RefreshButton").SetEvent(ui.__mem_func__(self.OnRefreshComments))
  933.  
  934.             ## ScrollBar
  935.             scrollBar = self.pageWindow["MEMBER"].GetChild("ScrollBar")
  936.             scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScrollMemberLine))
  937.             self.pageWindow["MEMBER"].scrollBar = scrollBar
  938.  
  939.         except:
  940.             import exception
  941.             exception.Abort("GuildWindow.__LoadWindow.BindObject")
  942.  
  943.         self.__MakeInfoPage()
  944.         self.__MakeBoardPage()
  945.         self.__MakeMemberPage()
  946.         self.__MakeBaseInfoPage()
  947.         self.__MakeSkillPage()
  948.         self.__MakeGradePage()
  949.  
  950.         for page in self.pageWindow.values():
  951.             page.UpdateRect()
  952.  
  953.         for key, btn in self.tabButtonDict.items():
  954.             btn.SetEvent(self.SelectPage, key)
  955.  
  956.         self.tabButtonDict["BASE_INFO"].Disable()
  957.  
  958.         if DISABLE_GUILD_SKILL:
  959.             self.tabButtonDict["SKILL"].Disable()
  960.  
  961.         self.board.SetCloseEvent(ui.__mem_func__(self.Close))
  962.         self.board.SetTitleColor(0xffffffff)
  963.         self.SelectPage("GUILD_INFO")
  964.  
  965.         if app.ENABLE_CHEQUE_SYSTEM:
  966.             self.offerDialog = uiPickETC.PickETCDialog()
  967.         else:
  968.             self.offerDialog = uiPickMoney.PickMoneyDialog()
  969.         self.offerDialog.LoadDialog()
  970.         self.offerDialog.SetMax(9)
  971.         self.offerDialog.SetTitleName(localeInfo.GUILD_OFFER_EXP)
  972.         self.offerDialog.SetAcceptEvent(ui.__mem_func__(self.OnOffer))
  973.  
  974.     def __MakeInfoPage(self):
  975.         page = self.pageWindow["GUILD_INFO"]
  976.  
  977.         try:
  978.             page.nameSlot = page.GetChild("GuildNameValue")
  979.             page.masterNameSlot = page.GetChild("GuildMasterNameValue")
  980.             page.guildLevelSlot = page.GetChild("GuildLevelValue")
  981.             page.curExpSlot = page.GetChild("CurrentExperienceValue")
  982.             page.lastExpSlot = page.GetChild("LastExperienceValue")
  983.             page.memberCountSlot = page.GetChild("GuildMemberCountValue")
  984.             page.levelAverageSlot = page.GetChild("GuildMemberLevelAverageValue")
  985.             page.uploadMarkButton = page.GetChild("UploadGuildMarkButton")
  986.             page.uploadSymbolButton = page.GetChild("UploadGuildSymbolButton")
  987.             page.declareWarButton = page.GetChild("DeclareWarButton")
  988.  
  989.             try:
  990.                 page.guildMoneySlot = page.GetChild("GuildMoneyValue")
  991.             except KeyError:
  992.                 page.guildMoneySlot = None
  993.  
  994.             try:
  995.                 page.GetChild("DepositButton").SetEvent(ui.__mem_func__(self.__OnClickDepositButton))
  996.                 page.GetChild("WithdrawButton").SetEvent(ui.__mem_func__(self.__OnClickWithdrawButton))
  997.             except KeyError:
  998.                 pass
  999.  
  1000.             page.uploadMarkButton.SetEvent(ui.__mem_func__(self.__OnClickSelectGuildMarkButton))
  1001.             page.uploadSymbolButton.SetEvent(ui.__mem_func__(self.__OnClickSelectGuildSymbolButton))
  1002.             page.declareWarButton.SetEvent(ui.__mem_func__(self.__OnClickDeclareWarButton))
  1003.             page.GetChild("OfferButton").SetEvent(ui.__mem_func__(self.__OnClickOfferButton))
  1004.             page.GetChild("EnemyGuildCancel1").Hide()
  1005.             page.GetChild("EnemyGuildCancel2").Hide()
  1006.             page.GetChild("EnemyGuildCancel3").Hide()
  1007.             page.GetChild("EnemyGuildCancel4").Hide()
  1008.             page.GetChild("EnemyGuildCancel5").Hide()
  1009.             page.GetChild("EnemyGuildCancel6").Hide()
  1010.  
  1011.             self.enemyGuildNameList.append(page.GetChild("EnemyGuildName1"))
  1012.             self.enemyGuildNameList.append(page.GetChild("EnemyGuildName2"))
  1013.             self.enemyGuildNameList.append(page.GetChild("EnemyGuildName3"))
  1014.             self.enemyGuildNameList.append(page.GetChild("EnemyGuildName4"))
  1015.             self.enemyGuildNameList.append(page.GetChild("EnemyGuildName5"))
  1016.             self.enemyGuildNameList.append(page.GetChild("EnemyGuildName6"))
  1017.  
  1018.             self.largeMarkBox = page.GetChild("LargeGuildMark")
  1019.         except:
  1020.             import exception
  1021.             exception.Abort("GuildWindow.__MakeInfoPage")
  1022.  
  1023.         self.largeMarkBox.AddFlag("not_pick")
  1024.  
  1025.         self.markSelectDialog=uiUploadMark.MarkSelectDialog()
  1026.         self.markSelectDialog.SAFE_SetSelectEvent(self.__OnSelectMark)
  1027.  
  1028.         self.symbolSelectDialog=uiUploadMark.SymbolSelectDialog()
  1029.         self.symbolSelectDialog.SAFE_SetSelectEvent(self.__OnSelectSymbol)
  1030.  
  1031.  
  1032.     def __MakeBoardPage(self):
  1033.  
  1034.         i = 0
  1035.         lineStep = 20
  1036.         page = self.pageWindow["BOARD"]
  1037.  
  1038.         page.boardDict = {}
  1039.  
  1040.         for i in xrange(12):
  1041.  
  1042.             yPos = 25 + i * lineStep
  1043.  
  1044.             ## NoticeMark
  1045.             if localeInfo.IsJAPAN():
  1046.                 noticeMarkImage = ui.MakeImageBox(page, "d:/ymir work/ui/game/guild/notice_mark.sub", 15, yPos+3)
  1047.             else:
  1048.                 noticeMarkImage = ui.MakeImageBox(page, "d:/ymir work/ui/game/guild/notice_mark.sub", 5, yPos+3)
  1049.             noticeMarkImage.Hide()
  1050.             page.Children.append(noticeMarkImage)
  1051.  
  1052.             ## Name
  1053.             ## 13.12.02 ΎΖ¶ψΌφΑ¤
  1054.             if localeInfo.IsJAPAN():
  1055.                 nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_100x18.sub", 9, yPos)
  1056.             elif localeInfo.IsARABIC():
  1057.                 nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_03.sub", 255, yPos)
  1058.             else:
  1059.                 nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_03.sub", 15, yPos)
  1060.             nameSlot = ui.MakeTextLine(nameSlotImage)
  1061.             page.Children.append(nameSlotImage)
  1062.             page.Children.append(nameSlot)
  1063.  
  1064.             ## Delete Button
  1065.             if localeInfo.IsARABIC():
  1066.                 deleteButton = ui.MakeButton(page, 3, yPos + 3, localeInfo.GUILD_DELETE, "d:/ymir work/ui/public/", "close_button_01.sub", "close_button_02.sub", "close_button_03.sub")
  1067.             else:
  1068.                 deleteButton = ui.MakeButton(page, 340, yPos + 3, localeInfo.GUILD_DELETE, "d:/ymir work/ui/public/", "close_button_01.sub", "close_button_02.sub", "close_button_03.sub")
  1069.             deleteButton.SetEvent(ui.__mem_func__(self.OnDeleteComment), i)
  1070.             page.Children.append(deleteButton)
  1071.  
  1072.             ## Comment
  1073.             ## 13.12.02 ΎΖ¶ψΌφΑ¤
  1074.             commentSlot = CommentSlot()
  1075.             commentSlot.SetParent(page)
  1076.             if localeInfo.IsARABIC():
  1077.                 commentSlot.SetPosition(25, yPos)
  1078.             else:
  1079.                 commentSlot.SetPosition(114, yPos)
  1080.             commentSlot.Show()
  1081.             page.Children.append(commentSlot)
  1082.  
  1083.             boardSlotList = []
  1084.             boardSlotList.append(noticeMarkImage)
  1085.             boardSlotList.append(nameSlot)
  1086.             boardSlotList.append(commentSlot)
  1087.             page.boardDict[i] = boardSlotList
  1088.  
  1089.         ## PostComment - Have to make this here for that fit tooltip's position.
  1090.         ## 13.12.02 ΎΖ¶ψΌφΑ¤
  1091.         if localeInfo.IsARABIC():
  1092.             postCommentButton = ui.MakeButton(page, 3, 273, localeInfo.GUILD_COMMENT, "d:/ymir work/ui/game/taskbar/", "Send_Chat_Button_01.sub", "Send_Chat_Button_02.sub", "Send_Chat_Button_03.sub")
  1093.         else:
  1094.             postCommentButton = ui.MakeButton(page, 337, 273, localeInfo.GUILD_COMMENT, "d:/ymir work/ui/game/taskbar/", "Send_Chat_Button_01.sub", "Send_Chat_Button_02.sub", "Send_Chat_Button_03.sub")
  1095.         postCommentButton.SetEvent(ui.__mem_func__(self.OnPostComment))
  1096.         page.Children.append(postCommentButton)
  1097.  
  1098.     def __MakeMemberPage(self):
  1099.  
  1100.         page = self.pageWindow["MEMBER"]
  1101.  
  1102.         lineStep = 20
  1103.         page.memberDict = {}
  1104.  
  1105.         for i in xrange(self.MEMBER_LINE_COUNT):
  1106.  
  1107.             inverseLineIndex = self.MEMBER_LINE_COUNT - i - 1
  1108.             yPos = 28 + inverseLineIndex*lineStep
  1109.             ## 13.12.02 ΎΖ¶ψ ΌφΑ¤
  1110.             ## Name
  1111.             if localeInfo.IsJAPAN():
  1112.                 nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_100x18.sub", 15, yPos)
  1113.             elif localeInfo.IsARABIC():
  1114.                 nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_100x18.sub", 255, yPos)
  1115.             else:
  1116.                 nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_03.sub", 10, yPos)
  1117.             nameSlot = ui.MakeTextLine(nameSlotImage)
  1118.             page.Children.append(nameSlotImage)
  1119.             page.Children.append(nameSlot)
  1120.  
  1121.             ## Grade
  1122.             gradeSlot = ui.ComboBox()
  1123.             gradeSlot.SetParent(page)
  1124.             if localeInfo.IsJAPAN():
  1125.                 gradeSlot.SetPosition(117, yPos-1)
  1126.             elif localeInfo.IsARABIC():
  1127.                 gradeSlot.SetPosition(192, yPos-1)
  1128.             else:
  1129.                 gradeSlot.SetPosition(101, yPos-1)
  1130.             gradeSlot.SetSize(61, 18)
  1131.             gradeSlot.SetEvent(lambda gradeNumber, lineIndex=inverseLineIndex, argSelf=proxy(self): argSelf.OnChangeMemberGrade(lineIndex, gradeNumber))
  1132.             gradeSlot.Show()
  1133.             page.Children.append(gradeSlot)
  1134.  
  1135.             ## Job
  1136.             if localeInfo.IsJAPAN():
  1137.                 jobSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 181, yPos)
  1138.             elif localeInfo.IsARABIC():
  1139.                 jobSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 145, yPos)
  1140.             else:
  1141.                 jobSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 170, yPos)
  1142.             jobSlot = ui.MakeTextLine(jobSlotImage)
  1143.             page.Children.append(jobSlotImage)
  1144.             page.Children.append(jobSlot)
  1145.  
  1146.             ## Level
  1147.             if localeInfo.IsJAPAN():
  1148.                 levelSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 221, yPos)
  1149.             elif localeInfo.IsARABIC():
  1150.                 levelSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 106, yPos)
  1151.             else:
  1152.                 levelSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 210, yPos)
  1153.             levelSlot = ui.MakeTextLine(levelSlotImage)
  1154.             page.Children.append(levelSlotImage)
  1155.             page.Children.append(levelSlot)
  1156.  
  1157.             ## Offer
  1158.             if localeInfo.IsJAPAN():
  1159.                 offerSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 261, yPos)
  1160.             elif localeInfo.IsARABIC():
  1161.                 offerSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 66, yPos)
  1162.             else:
  1163.                 offerSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 250, yPos)
  1164.             offerSlot = ui.MakeTextLine(offerSlotImage)
  1165.             page.Children.append(offerSlotImage)
  1166.             page.Children.append(offerSlot)
  1167.  
  1168.             ## General Enable
  1169.             event = lambda argSelf=proxy(self), argIndex=inverseLineIndex: apply(argSelf.OnEnableGeneral, (argIndex,))
  1170.             if localeInfo.IsJAPAN():
  1171.                 generalEnableCheckBox = CheckBox(page, 307, yPos, event, "d:/ymir work/ui/public/Parameter_Slot_00.sub")
  1172.             elif localeInfo.IsARABIC():
  1173.                 generalEnableCheckBox = CheckBox(page, 22, yPos, event, "d:/ymir work/ui/public/Parameter_Slot_00.sub")
  1174.             else:
  1175.                 generalEnableCheckBox = CheckBox(page, 297, yPos, event, "d:/ymir work/ui/public/Parameter_Slot_00.sub")
  1176.             page.Children.append(generalEnableCheckBox)
  1177.  
  1178.             memberSlotList = []
  1179.             memberSlotList.append(nameSlot)
  1180.             memberSlotList.append(gradeSlot)
  1181.             memberSlotList.append(jobSlot)
  1182.             memberSlotList.append(levelSlot)
  1183.             memberSlotList.append(offerSlot)
  1184.             memberSlotList.append(generalEnableCheckBox)
  1185.             page.memberDict[inverseLineIndex] = memberSlotList
  1186.  
  1187.     def __MakeBaseInfoPage(self):
  1188.  
  1189.         page = self.pageWindow["BASE_INFO"]
  1190.  
  1191.         page.buildingDataDict = {}
  1192.  
  1193.         lineStep = 20
  1194.         GUILD_BUILDING_MAX_NUM = 7
  1195.  
  1196.         yPos = 95 + 35
  1197.  
  1198.         for i in xrange(GUILD_BUILDING_MAX_NUM):
  1199.  
  1200.             nameSlotImage = ui.MakeSlotBar(page, 15, yPos, 78, 17)
  1201.             nameSlot = ui.MakeTextLine(nameSlotImage)
  1202.             page.Children.append(nameSlotImage)
  1203.             page.Children.append(nameSlot)
  1204.             nameSlot.SetText(localeInfo.GUILD_BUILDING_NAME)
  1205.  
  1206.             gradeSlotImage = ui.MakeSlotBar(page, 99, yPos, 26, 17)
  1207.             gradeSlot = ui.MakeTextLine(gradeSlotImage)
  1208.             page.Children.append(gradeSlotImage)
  1209.             page.Children.append(gradeSlot)
  1210.             gradeSlot.SetText(localeInfo.GUILD_BUILDING_GRADE)
  1211.  
  1212.             RESOURCE_MAX_NUM = 6
  1213.             for j in xrange(RESOURCE_MAX_NUM):
  1214.                 resourceSlotImage = ui.MakeSlotBar(page, 131 + 29*j, yPos, 26, 17)
  1215.                 resourceSlot = ui.MakeTextLine(resourceSlotImage)
  1216.                 page.Children.append(resourceSlotImage)
  1217.                 page.Children.append(resourceSlot)
  1218.                 resourceSlot.SetText(localeInfo.GUILD_GEM)
  1219.  
  1220.             event = lambda *arg: None
  1221.             powerSlot = CheckBox(page, 308, yPos, event, "d:/ymir work/ui/public/Parameter_Slot_00.sub")
  1222.             page.Children.append(powerSlot)
  1223.  
  1224.             yPos += lineStep
  1225.  
  1226.     def __MakeSkillPage(self):
  1227.  
  1228.         page = self.pageWindow["SKILL"]
  1229.  
  1230.         page.skillPoint = page.GetChild("Skill_Plus_Value")
  1231.         page.passiveSlot = page.GetChild("Passive_Skill_Slot_Table")
  1232.         page.activeSlot = page.GetChild("Active_Skill_Slot_Table")
  1233.         page.affectSlot = page.GetChild("Affect_Slot_Table")
  1234.         page.gpGauge = page.GetChild("Dragon_God_Power_Gauge")
  1235.         page.gpValue = page.GetChild("Dragon_God_Power_Value")
  1236.         page.btnHealGSP = page.GetChild("Heal_GSP_Button")
  1237.  
  1238.         page.activeSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  1239.         page.activeSlot.SetOverInItemEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OverInItem(slotNumber, type))
  1240.         page.activeSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  1241.         page.activeSlot.SetSelectItemSlotEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OnPickUpGuildSkill(slotNumber, type))
  1242.         page.activeSlot.SetUnselectItemSlotEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OnUseGuildSkill(slotNumber, type))
  1243.         page.activeSlot.SetPressedSlotButtonEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OnUpGuildSkill(slotNumber, type))
  1244.         page.activeSlot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  1245.                                         "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  1246.                                         "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  1247.         page.passiveSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  1248.         page.passiveSlot.SetOverInItemEvent(lambda slotNumber, type=self.GUILD_SKILL_PASSIVE_SLOT: self.OverInItem(slotNumber, type))
  1249.         page.passiveSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  1250.         page.passiveSlot.SetPressedSlotButtonEvent(lambda slotNumber, type=self.GUILD_SKILL_PASSIVE_SLOT: self.OnUpGuildSkill(slotNumber, type))
  1251.         page.passiveSlot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
  1252.                                         "d:/ymir work/ui/game/windows/btn_plus_over.sub",\
  1253.                                         "d:/ymir work/ui/game/windows/btn_plus_down.sub")
  1254.         page.affectSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
  1255.         page.affectSlot.SetOverInItemEvent(lambda slotNumber, type=self.GUILD_SKILL_AFFECT_SLOT: self.OverInItem(slotNumber, type))
  1256.         page.affectSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  1257.         page.btnHealGSP.SetEvent(ui.__mem_func__(self.__OnOpenHealGSPBoard))
  1258.  
  1259.         ## Passive
  1260.         """
  1261.         for i in xrange(len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)):
  1262.  
  1263.             slotIndex = page.passiveSlot.GetStartIndex()+i
  1264.             skillIndex = playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST[i]
  1265.  
  1266.             page.passiveSlot.SetSkillSlot(slotIndex, skillIndex, 0)
  1267.             page.passiveSlot.RefreshSlot()
  1268.             guild.SetSkillIndex(slotIndex, i)
  1269.         """
  1270.  
  1271.         ## Active
  1272.         for i in xrange(len(playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST)):
  1273.  
  1274.             slotIndex = page.activeSlot.GetStartIndex()+i
  1275.             skillIndex = playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST[i]
  1276.  
  1277.             page.activeSlot.SetSkillSlot(slotIndex, skillIndex, 0)
  1278.             page.activeSlot.SetCoverButton(slotIndex)
  1279.             page.activeSlot.RefreshSlot()
  1280.             guild.SetSkillIndex(slotIndex, len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)+i)
  1281.  
  1282.     def __MakeGradePage(self):
  1283.  
  1284.         lineStep = 18
  1285.         page = self.pageWindow["GRADE"]
  1286.  
  1287.         page.gradeDict = {}
  1288.  
  1289.         for i in xrange(15):
  1290.  
  1291.             yPos = 22 + i*lineStep
  1292.             index = i+1
  1293.             ## 13.12.02 ΎΖ¶ψ ΌφΑ¤
  1294.             ## GradeNumber
  1295.             if localeInfo.IsARABIC():
  1296.                 gradeNumberSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 310, yPos)
  1297.             else:
  1298.                 gradeNumberSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 14, yPos)
  1299.             gradeNumberSlot = ui.MakeTextLine(gradeNumberSlotImage)
  1300.             gradeNumberSlot.SetText(str(i+1))
  1301.             page.Children.append(gradeNumberSlotImage)
  1302.             page.Children.append(gradeNumberSlot)
  1303.  
  1304.             ## GradeName
  1305.             if localeInfo.IsARABIC():
  1306.                 gradeNameSlot = EditableTextSlot(page, 242, yPos)
  1307.             else:
  1308.                 gradeNameSlot = EditableTextSlot(page, 58, yPos)
  1309.             gradeNameSlot.SetEvent(ui.__mem_func__(self.OnOpenChangeGradeName), index)
  1310.             page.Children.append(gradeNameSlot)
  1311.  
  1312.             ## Invite Authority
  1313.             event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<0: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority))
  1314.             if localeInfo.IsARABIC():
  1315.                 inviteAuthorityCheckBox = CheckBox(page, 185, yPos, event)
  1316.             else:
  1317.                 inviteAuthorityCheckBox = CheckBox(page, 124, yPos, event)
  1318.             page.Children.append(inviteAuthorityCheckBox)
  1319.  
  1320.             ## DriveOut Authority
  1321.             event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<1: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority))
  1322.             if localeInfo.IsARABIC():
  1323.                 driveoutAuthorityCheckBox = CheckBox(page, 128, yPos, event)
  1324.             else:
  1325.                 driveoutAuthorityCheckBox = CheckBox(page, 181, yPos, event)
  1326.             page.Children.append(driveoutAuthorityCheckBox)
  1327.  
  1328.             ## Notice Authority
  1329.             event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<2: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority))
  1330.             if localeInfo.IsARABIC():
  1331.                 noticeAuthorityCheckBox = CheckBox(page, 71, yPos, event)
  1332.             else:
  1333.                 noticeAuthorityCheckBox = CheckBox(page, 238, yPos, event)
  1334.             page.Children.append(noticeAuthorityCheckBox)
  1335.  
  1336.             ## Skill Authority
  1337.             event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<3: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority))
  1338.             if localeInfo.IsARABIC():
  1339.                 skillAuthorityCheckBox = CheckBox(page, 14, yPos, event)
  1340.             else:
  1341.                 skillAuthorityCheckBox = CheckBox(page, 295, yPos, event)
  1342.             page.Children.append(skillAuthorityCheckBox)
  1343.  
  1344.             gradeSlotList = []
  1345.             gradeSlotList.append(gradeNameSlot)
  1346.             gradeSlotList.append(inviteAuthorityCheckBox)
  1347.             gradeSlotList.append(driveoutAuthorityCheckBox)
  1348.             gradeSlotList.append(noticeAuthorityCheckBox)
  1349.             gradeSlotList.append(skillAuthorityCheckBox)
  1350.             page.gradeDict[index] = gradeSlotList
  1351.  
  1352.         masterSlotList = page.gradeDict[1]
  1353.         for slot in masterSlotList:
  1354.             slot.Disable()
  1355.  
  1356.     def CanOpen(self):
  1357.         return guild.IsGuildEnable()
  1358.  
  1359.     def Open(self):
  1360.         self.Show()
  1361.         self.SetTop()
  1362.  
  1363.         guildID = net.GetGuildID()
  1364.         self.largeMarkBox.SetIndex(guildID)
  1365.         self.largeMarkBox.SetScale(3)
  1366.         ## 13.12.02 ΎΖ¶ψΌφΑ¤
  1367.         if localeInfo.IsARABIC():
  1368.             self.largeMarkBox.SetPosition(self.largeMarkBox.GetWidth()+32,1)
  1369.  
  1370.     def Close(self):
  1371.         self.__CloseAllGuildMemberPageGradeComboBox()
  1372.         self.offerDialog.Close()
  1373.         self.popupDialog.Hide()
  1374.         self.changeGradeNameDialog.Hide()
  1375.         self.Hide()
  1376.  
  1377.         if self.tooltipSkill:
  1378.             self.tooltipSkill.Hide()
  1379.  
  1380.         self.pickDialog = None
  1381.         self.questionDialog = None
  1382.         self.moneyDialog = None
  1383.  
  1384.     def Destroy(self):
  1385.         self.ClearDictionary()
  1386.         self.board = None
  1387.         self.pageName = None
  1388.         self.tabDict = None
  1389.         self.tabButtonDict = None
  1390.         self.pickDialog = None
  1391.         self.questionDialog = None
  1392.         self.markSelectDialog = None
  1393.         self.symbolSelectDialog = None
  1394.  
  1395.         if self.offerDialog:
  1396.             self.offerDialog.Destroy()
  1397.             self.offerDialog = None
  1398.  
  1399.         if self.popupDialog:
  1400.             self.popupDialog.ClearDictionary()
  1401.             self.popupDialog = None
  1402.  
  1403.         if self.changeGradeNameDialog:
  1404.             self.changeGradeNameDialog.ClearDictionary()
  1405.             self.changeGradeNameDialog = None
  1406.  
  1407.         self.popupMessage = None
  1408.         self.commentSlot = None
  1409.  
  1410.         if self.pageWindow:
  1411.             for window in self.pageWindow.values():
  1412.                 window.ClearDictionary()
  1413.  
  1414.         self.pageWindow = None
  1415.         self.tooltipSkill = None
  1416.         self.moneyDialog = None
  1417.  
  1418.         self.enemyGuildNameList = []
  1419.  
  1420.     def DeleteGuild(self):
  1421.         self.RefreshGuildInfoPage()
  1422.         self.RefreshGuildBoardPage()
  1423.         self.RefreshGuildMemberPage()
  1424.         self.RefreshGuildSkillPage()
  1425.         self.RefreshGuildGradePage()
  1426.         self.Hide()
  1427.  
  1428.     def SetSkillToolTip(self, tooltipSkill):
  1429.         self.tooltipSkill = tooltipSkill
  1430.  
  1431.     def SelectPage(self, arg):
  1432.  
  1433.         if "BOARD" == arg:
  1434.             self.OnRefreshComments()
  1435.  
  1436.         for key, btn in self.tabButtonDict.items():
  1437.             if arg != key:
  1438.                 btn.SetUp()
  1439.         for key, img in self.tabDict.items():
  1440.             if arg == key:
  1441.                 img.Show()
  1442.             else:
  1443.                 img.Hide()
  1444.         for key, page in self.pageWindow.items():
  1445.             if arg == key:
  1446.                 page.Show()
  1447.             else:
  1448.                 page.Hide()
  1449.         self.board.SetTitleName(self.pageName[arg])
  1450.         self.__CloseAllGuildMemberPageGradeComboBox()
  1451.  
  1452.     def __CloseAllGuildMemberPageGradeComboBox(self):
  1453.  
  1454.         page = self.pageWindow["MEMBER"]
  1455.         for key, slotList in page.memberDict.items():
  1456.             slotList[1].CloseListBox()
  1457.  
  1458.     def RefreshGuildInfoPage(self):
  1459.  
  1460.         if self.isLoaded==0:
  1461.             return
  1462.  
  1463.         global DISABLE_DECLARE_WAR
  1464.         page = self.pageWindow["GUILD_INFO"]
  1465.         page.nameSlot.SetText(guild.GetGuildName())
  1466.         page.masterNameSlot.SetText(guild.GetGuildMasterName())
  1467.         page.guildLevelSlot.SetText(str(guild.GetGuildLevel()))
  1468.         if page.guildMoneySlot:
  1469.             page.guildMoneySlot.SetText(str(guild.GetGuildMoney()))
  1470.  
  1471.         curExp, lastExp = guild.GetGuildExperience()
  1472.         curExp *= 100
  1473.         lastExp *= 100
  1474.         page.curExpSlot.SetText(str(curExp))
  1475.         page.lastExpSlot.SetText(str(lastExp))
  1476.  
  1477.         curMemberCount, maxMemberCount = guild.GetGuildMemberCount()
  1478.         if maxMemberCount== 0xffff:
  1479.             page.memberCountSlot.SetText("%d / %s " % (curMemberCount, localeInfo.GUILD_MEMBER_COUNT_INFINITY))
  1480.         else:
  1481.             page.memberCountSlot.SetText("%d / %d" % (curMemberCount, maxMemberCount))
  1482.  
  1483.         page.levelAverageSlot.SetText(str(guild.GetGuildMemberLevelAverage()))
  1484.  
  1485.         ## ±ζµεΐεΈΈ ±ζµε Έ¶Ε©ΏΝ ±ζµεΐό ½ΕΓ» ΉφΖ°ΐ» ΊΌ Όφ ΐΦΐ½
  1486.         mainCharacterName = player.GetMainCharacterName()
  1487.         masterName = guild.GetGuildMasterName()
  1488.  
  1489.         if mainCharacterName == masterName:
  1490.             page.uploadMarkButton.Show()
  1491.  
  1492.             if DISABLE_DECLARE_WAR:
  1493.                 page.declareWarButton.Hide()
  1494.             else:
  1495.                 page.declareWarButton.Show()
  1496.  
  1497.             if guild.HasGuildLand():
  1498.                 page.uploadSymbolButton.Show()
  1499.             else:
  1500.                 page.uploadSymbolButton.Hide()
  1501.         else:
  1502.             page.uploadMarkButton.Hide()
  1503.             page.declareWarButton.Hide()
  1504.             page.uploadSymbolButton.Hide()
  1505.  
  1506.         ## Refresh ½ΓΏ΅ ±ζµεΐό Α¤ΊΈ Ύχµ¥ΐΜΖ®
  1507.         for i in xrange(guild.ENEMY_GUILD_SLOT_MAX_COUNT):
  1508.             name = guild.GetEnemyGuildName(i)
  1509.             nameTextLine = self.enemyGuildNameList[i]
  1510.             if name:
  1511.                 nameTextLine.SetText(name)
  1512.             else:
  1513.                 nameTextLine.SetText(localeInfo.GUILD_INFO_ENEMY_GUILD_EMPTY)
  1514.  
  1515.     def __GetGuildBoardCommentData(self, index):
  1516.         commentID, chrName, comment = guild.GetGuildBoardCommentData(index)
  1517.         if 0==commentID:
  1518.             if ""==chrName:
  1519.                 chrName=localeInfo.UI_NONAME
  1520.             if ""==comment:
  1521.                 comment=localeInfo.UI_NOCONTENTS
  1522.  
  1523.         return commentID, chrName, comment
  1524.  
  1525.     def RefreshGuildBoardPage(self):
  1526.  
  1527.         if self.isLoaded==0:
  1528.             return
  1529.  
  1530.         page = self.pageWindow["BOARD"]
  1531.  
  1532.         self.BOARD_LINE_MAX_NUM = 12
  1533.         lineIndex = 0
  1534.  
  1535.         commentCount = guild.GetGuildBoardCommentCount()
  1536.         for i in xrange(commentCount):
  1537.  
  1538.             commentID, chrName, comment = self.__GetGuildBoardCommentData(i)
  1539.  
  1540.             if not comment:
  1541.                 continue
  1542.  
  1543.             slotList = page.boardDict[lineIndex]
  1544.  
  1545.             if "!" == comment[0]:
  1546.                 slotList[0].Show()
  1547.                 slotList[1].SetText(chrName)
  1548.                 slotList[2].SetText(comment[1:])
  1549.  
  1550.             else:
  1551.                 slotList[0].Hide()
  1552.                 slotList[1].SetText(chrName)
  1553.                 slotList[2].SetText(comment)
  1554.  
  1555.             lineIndex += 1
  1556.  
  1557.         for i in xrange(self.BOARD_LINE_MAX_NUM - lineIndex):
  1558.             slotList = page.boardDict[lineIndex+i]
  1559.             slotList[0].Hide()
  1560.             slotList[1].SetText("")
  1561.             slotList[2].SetText("")
  1562.  
  1563.     def RefreshGuildMemberPage(self):
  1564.  
  1565.         if self.isLoaded==0:
  1566.             return
  1567.  
  1568.         page = self.pageWindow["MEMBER"]
  1569.  
  1570.         ## ScrollBar
  1571.         count = guild.GetMemberCount()
  1572.         if count > self.MEMBER_LINE_COUNT:
  1573.             page.scrollBar.SetMiddleBarSize(float(self.MEMBER_LINE_COUNT) / float(count))
  1574.             page.scrollBar.Show()
  1575.         else:
  1576.             page.scrollBar.Hide()
  1577.         self.RefreshGuildMemberPageGradeComboBox()
  1578.         self.RefreshGuildMemberPageMemberList()
  1579.  
  1580.     def RefreshGuildMemberPageMemberList(self):
  1581.  
  1582.         if self.isLoaded==0:
  1583.             return
  1584.  
  1585.         page = self.pageWindow["MEMBER"]
  1586.  
  1587.         for line, slotList in page.memberDict.items():
  1588.  
  1589.             gradeComboBox = slotList[1]
  1590.             gradeComboBox.Disable()
  1591.  
  1592.             if not guild.IsMember(line):
  1593.                 slotList[0].SetText("")
  1594.                 slotList[2].SetText("")
  1595.                 slotList[3].SetText("")
  1596.                 slotList[4].SetText("")
  1597.                 slotList[5].SetCheck(False)
  1598.                 continue
  1599.  
  1600.             pid, name, grade, race, level, offer, general = self.GetMemberData(line)
  1601.             if pid < 0:
  1602.                 continue
  1603.  
  1604.             job = chr.RaceToJob(race)
  1605.  
  1606.             guildExperienceSummary = guild.GetGuildExperienceSummary()
  1607.  
  1608.             offerPercentage = 0
  1609.             if guildExperienceSummary > 0:
  1610.                 offerPercentage = int(float(offer) / float(guildExperienceSummary) * 100.0)
  1611.  
  1612.             slotList[0].SetText(name)
  1613.             slotList[2].SetText(self.JOB_NAME.get(job, "?"))
  1614.             slotList[3].SetText(str(level))
  1615.             slotList[4].SetText(str(offerPercentage) + "%")
  1616.             slotList[5].SetCheck(general)
  1617.             gradeComboBox.SetCurrentItem(guild.GetGradeName(grade))
  1618.             if 1 != grade:
  1619.                 gradeComboBox.Enable()
  1620.  
  1621.     def RefreshGuildMemberPageGradeComboBox(self):
  1622.  
  1623.         if self.isLoaded==0:
  1624.             return
  1625.  
  1626.         page = self.pageWindow["MEMBER"]
  1627.  
  1628.         self.CAN_CHANGE_GRADE_COUNT = 15 - 1
  1629.         for key, slotList in page.memberDict.items():
  1630.  
  1631.             gradeComboBox = slotList[1]
  1632.             gradeComboBox.Disable()
  1633.  
  1634.             if not guild.IsMember(key):
  1635.                 continue
  1636.  
  1637.             pid, name, grade, job, level, offer, general = self.GetMemberData(key)
  1638.             if pid < 0:
  1639.                 continue
  1640.  
  1641.             gradeComboBox.ClearItem()
  1642.             for i in xrange(self.CAN_CHANGE_GRADE_COUNT):
  1643.                 gradeComboBox.InsertItem(i+2, guild.GetGradeName(i+2))
  1644.             gradeComboBox.SetCurrentItem(guild.GetGradeName(grade))
  1645.             if 1 != grade:
  1646.                 gradeComboBox.Enable()
  1647.  
  1648.     def RefreshGuildSkillPage(self):
  1649.  
  1650.         if self.isLoaded==0:
  1651.             return
  1652.  
  1653.         page = self.pageWindow["SKILL"]
  1654.  
  1655.         curPoint, maxPoint = guild.GetDragonPowerPoint()
  1656.         maxPoint = max(maxPoint, 1)
  1657.         page.gpValue.SetText(str(curPoint) + " / " + str(maxPoint))
  1658.  
  1659.         percentage = (float(curPoint) / float(maxPoint) * 100) * (float(173) / float(95))
  1660.         page.gpGauge.SetPercentage(int(percentage), 100)
  1661.  
  1662.         skillPoint = guild.GetGuildSkillPoint()
  1663.         page.skillPoint.SetText(str(skillPoint))
  1664.  
  1665.         page.passiveSlot.HideAllSlotButton()
  1666.         page.activeSlot.HideAllSlotButton()
  1667.  
  1668.         ## Passive
  1669.         """
  1670.         for i in xrange(len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)):
  1671.  
  1672.             slotIndex = page.passiveSlot.GetStartIndex()+i
  1673.             skillIndex = playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST[i]
  1674.             skillLevel = guild.GetSkillLevel(slotIndex)
  1675.             skillMaxLevel = skill.GetSkillMaxLevel(skillIndex)
  1676.  
  1677.             page.passiveSlot.SetSlotCount(slotIndex, skillLevel)
  1678.             if skillPoint > 0:
  1679.                 if skillLevel < skillMaxLevel:
  1680.                     page.passiveSlot.ShowSlotButton(slotIndex)
  1681.         """
  1682.  
  1683.         ## Active
  1684.         for i in xrange(len(playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST)):
  1685.  
  1686.             slotIndex = page.activeSlot.GetStartIndex()+i
  1687.             skillIndex = playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST[i]
  1688.             skillLevel = guild.GetSkillLevel(slotIndex)
  1689.             skillMaxLevel = skill.GetSkillMaxLevel(skillIndex)
  1690.  
  1691.             page.activeSlot.SetSlotCount(slotIndex, skillLevel)
  1692.  
  1693.             if skillLevel <= 0:
  1694.                 page.activeSlot.DisableCoverButton(slotIndex)
  1695.             else:
  1696.                 page.activeSlot.EnableCoverButton(slotIndex)
  1697.  
  1698.             if skillPoint > 0:
  1699.                 if skillLevel < skillMaxLevel:
  1700.                     page.activeSlot.ShowSlotButton(slotIndex)
  1701.  
  1702.     def RefreshGuildGradePage(self):
  1703.  
  1704.         if self.isLoaded==0:
  1705.             return
  1706.  
  1707.         page = self.pageWindow["GRADE"]
  1708.  
  1709.         for key, slotList in page.gradeDict.items():
  1710.             name, authority = guild.GetGradeData(int(key))
  1711.  
  1712.             slotList[self.GRADE_SLOT_NAME].SetText(name)
  1713.             slotList[self.GRADE_ADD_MEMBER_AUTHORITY].SetCheck(authority & guild.AUTH_ADD_MEMBER)
  1714.             slotList[self.GRADE_REMOVE_MEMBER_AUTHORITY].SetCheck(authority & guild.AUTH_REMOVE_MEMBER)
  1715.             slotList[self.GRADE_NOTICE_AUTHORITY].SetCheck(authority & guild.AUTH_NOTICE)
  1716.             slotList[self.GRADE_SKILL_AUTHORITY].SetCheck(authority & guild.AUTH_SKILL)
  1717.  
  1718.     ## GuildInfo
  1719.  
  1720.     def __PopupMessage(self, msg):
  1721.         self.popupMessage.SetText(msg)
  1722.         self.popupDialog.SetTop()
  1723.         self.popupDialog.Show()
  1724.  
  1725.     def __OnClickSelectGuildMarkButton(self):
  1726.         if guild.GetGuildLevel() < int(localeInfo.GUILD_MARK_MIN_LEVEL):
  1727.             self.__PopupMessage(localeInfo.GUILD_MARK_NOT_ENOUGH_LEVEL)
  1728.         elif not guild.MainPlayerHasAuthority(guild.AUTH_NOTICE):
  1729.             self.__PopupMessage(localeInfo.GUILD_NO_NOTICE_PERMISSION)
  1730.         else:
  1731.             self.markSelectDialog.Open()
  1732.  
  1733.     def __OnClickSelectGuildSymbolButton(self):
  1734.         if guild.MainPlayerHasAuthority(guild.AUTH_NOTICE):
  1735.             self.symbolSelectDialog.Open()
  1736.         else:
  1737.             self.__PopupMessage(localeInfo.GUILD_NO_NOTICE_PERMISSION)
  1738.  
  1739.     def __OnClickDeclareWarButton(self):
  1740.         inputDialog = DeclareGuildWarDialog()
  1741.         inputDialog.Open()
  1742.         self.inputDialog = inputDialog
  1743.  
  1744.     def __OnSelectMark(self, markFileName):
  1745.         ret = net.UploadMark("upload/"+markFileName)
  1746.  
  1747.         # MARK_BUG_FIX
  1748.         if net.ERROR_MARK_UPLOAD_NEED_RECONNECT == ret:
  1749.             self.__PopupMessage(localeInfo.UPLOAD_MARK_UPLOAD_NEED_RECONNECT);
  1750.  
  1751.         return ret
  1752.         # END_OF_MARK_BUG_FIX
  1753.  
  1754.     def __OnSelectSymbol(self, symbolFileName):
  1755.         net.UploadSymbol("upload/"+symbolFileName)
  1756.  
  1757.     def __OnClickOfferButton(self):
  1758.  
  1759.         curEXP = unsigned32(player.GetStatus(player.EXP))
  1760.  
  1761.         if curEXP <= 100:
  1762.             self.__PopupMessage(localeInfo.GUILD_SHORT_EXP);
  1763.             return
  1764.  
  1765.         self.offerDialog.Open(curEXP, 100)
  1766.  
  1767.     def __OnClickDepositButton(self):
  1768.         moneyDialog = uiPickMoney.PickMoneyDialog()
  1769.         moneyDialog.LoadDialog()
  1770.         moneyDialog.SetMax(6)
  1771.         moneyDialog.SetTitleName(localeInfo.GUILD_DEPOSIT)
  1772.         moneyDialog.SetAcceptEvent(ui.__mem_func__(self.OnDeposit))
  1773.         moneyDialog.Open(player.GetMoney())
  1774.         self.moneyDialog = moneyDialog
  1775.  
  1776.     def __OnClickWithdrawButton(self):
  1777.         moneyDialog = uiPickMoney.PickMoneyDialog()
  1778.         moneyDialog.LoadDialog()
  1779.         moneyDialog.SetMax(6)
  1780.         moneyDialog.SetTitleName(localeInfo.GUILD_WITHDRAW)
  1781.         moneyDialog.SetAcceptEvent(ui.__mem_func__(self.OnWithdraw))
  1782.         moneyDialog.Open(guild.GetGuildMoney())
  1783.         self.moneyDialog = moneyDialog
  1784.  
  1785.     def __OnBlock(self):
  1786.         popup = uiCommon.PopupDialog()
  1787.         popup.SetText(localeInfo.NOT_YET_SUPPORT)
  1788.         popup.SetAcceptEvent(self.__OnClosePopupDialog)
  1789.         popup.Open()
  1790.         self.popup = popup
  1791.  
  1792.     def __OnClosePopupDialog(self):
  1793.         self.popup = None
  1794.  
  1795.     def OnDeposit(self, money):
  1796.         net.SendGuildDepositMoneyPacket(money)
  1797.  
  1798.     def OnWithdraw(self, money):
  1799.         net.SendGuildWithdrawMoneyPacket(money)
  1800.  
  1801.     def OnOffer(self, exp):
  1802.         net.SendGuildOfferPacket(exp)
  1803.  
  1804.     ## Board
  1805.     def OnPostComment(self):
  1806.  
  1807.         text = self.commentSlot.GetText()
  1808.         if not text:
  1809.             return False
  1810.  
  1811.         net.SendGuildPostCommentPacket(text[:50])
  1812.         self.commentSlot.SetText("")
  1813.         return True
  1814.  
  1815.     def OnDeleteComment(self, index):
  1816.  
  1817.         commentID, chrName, comment = self.__GetGuildBoardCommentData(index)
  1818.         net.SendGuildDeleteCommentPacket(commentID)
  1819.  
  1820.     def OnRefreshComments(self):
  1821.         net.SendGuildRefreshCommentsPacket(0)
  1822.  
  1823.     def OnKeyDownInBoardPage(self, key):
  1824.         if key == 63:
  1825.             self.OnRefreshComments()
  1826.         return True
  1827.  
  1828.     ## Member
  1829.     ## OnEnableGeneral
  1830.     def OnChangeMemberGrade(self, lineIndex, gradeNumber):
  1831.         PID = guild.MemberIndexToPID(lineIndex + self.memberLinePos)
  1832.         net.SendGuildChangeMemberGradePacket(PID, gradeNumber)
  1833.  
  1834.     def OnEnableGeneral(self, lineIndex):
  1835.         if not guild.IsMember(lineIndex):
  1836.             return
  1837.  
  1838.         pid, name, grade, job, level, offer, general = self.GetMemberData(lineIndex)
  1839.         if pid < 0:
  1840.             return
  1841.  
  1842.         net.SendGuildChangeMemberGeneralPacket(pid, 1 - general)
  1843.  
  1844.     ## Grade
  1845.     def OnOpenChangeGradeName(self, arg):
  1846.         self.changeGradeNameDialog.SetGradeNumber(arg)
  1847.         self.changeGradeNameDialog.Open()
  1848.  
  1849.     def OnChangeGradeName(self):
  1850.         self.changeGradeNameDialog.Hide()
  1851.         gradeNumber = self.changeGradeNameDialog.GetGradeNumber()
  1852.         gradeName = self.changeGradeNameDialog.GetGradeName()
  1853.  
  1854.         if len(gradeName) == 0:
  1855.             gradeName = localeInfo.GUILD_DEFAULT_GRADE
  1856.  
  1857.         net.SendGuildChangeGradeNamePacket(gradeNumber, gradeName)
  1858.         return True
  1859.  
  1860.     def OnCheckAuthority(self, argIndex, argAuthority):
  1861.         name, authority = guild.GetGradeData(argIndex)
  1862.         net.SendGuildChangeGradeAuthorityPacket(argIndex, authority ^ argAuthority)
  1863.  
  1864.     def OnScrollMemberLine(self):
  1865.         scrollBar = self.pageWindow["MEMBER"].scrollBar
  1866.         pos = scrollBar.GetPos()
  1867.  
  1868.         count = guild.GetMemberCount()
  1869.         newLinePos = int(float(count - self.MEMBER_LINE_COUNT) * pos)
  1870.  
  1871.         if newLinePos != self.memberLinePos:
  1872.             self.memberLinePos = newLinePos
  1873.             self.RefreshGuildMemberPageMemberList()
  1874.             self.__CloseAllGuildMemberPageGradeComboBox()
  1875.  
  1876.     def GetMemberData(self, localPos):
  1877.         return guild.GetMemberData(localPos + self.memberLinePos)
  1878.  
  1879.     ## Guild Skill
  1880.     def __OnOpenHealGSPBoard(self):
  1881.  
  1882.         curPoint, maxPoint = guild.GetDragonPowerPoint()
  1883.  
  1884.         if maxPoint - curPoint <= 0:
  1885.             self.__PopupMessage(localeInfo.GUILD_CANNOT_HEAL_GSP_ANYMORE)
  1886.             return
  1887.  
  1888.         if app.ENABLE_CHEQUE_SYSTEM:
  1889.             pickDialog = uiPickETC.PickETCDialog()
  1890.         else:
  1891.             pickDialog = uiPickMoney.PickMoneyDialog()
  1892.         pickDialog.LoadDialog()
  1893.         pickDialog.SetMax(9)
  1894.         pickDialog.SetTitleName(localeInfo.GUILD_HEAL_GSP)
  1895.         pickDialog.SetAcceptEvent(ui.__mem_func__(self.__OnOpenHealGSPQuestionDialog))
  1896.         pickDialog.Open(maxPoint - curPoint, 1)
  1897.         self.pickDialog = pickDialog
  1898.  
  1899.     def __OnOpenHealGSPQuestionDialog(self, healGSP):
  1900.  
  1901.         money = healGSP * constInfo.GUILD_MONEY_PER_GSP
  1902.  
  1903.         questionDialog = uiCommon.QuestionDialog()
  1904.         questionDialog.SetText(localeInfo.GUILD_DO_YOU_HEAL_GSP % (money, healGSP))
  1905.         questionDialog.SetAcceptEvent(ui.__mem_func__(self.__OnHealGSP))
  1906.         questionDialog.SetCancelEvent(ui.__mem_func__(self.__OnCloseQuestionDialog))
  1907.         questionDialog.SetWidth(400)
  1908.         questionDialog.Open()
  1909.         questionDialog.healGSP = healGSP
  1910.         self.questionDialog = questionDialog
  1911.  
  1912.     def __OnHealGSP(self):
  1913.         net.SendGuildChargeGSPPacket(self.questionDialog.healGSP)
  1914.         self.__OnCloseQuestionDialog()
  1915.  
  1916.     def __OnCloseQuestionDialog(self):
  1917.         if self.questionDialog:
  1918.             self.questionDialog.Close()
  1919.         self.questionDialog = None
  1920.  
  1921.     def OnPickUpGuildSkill(self, skillSlotIndex, type):
  1922.  
  1923.         mouseController = mouseModule.mouseController
  1924.  
  1925.         if False == mouseController.isAttached():
  1926.  
  1927.             skillIndex = player.GetSkillIndex(skillSlotIndex)
  1928.             skillLevel = guild.GetSkillLevel(skillSlotIndex)
  1929.  
  1930.             if skill.CanUseSkill(skillIndex) and skillLevel > 0:
  1931.  
  1932.                 if app.IsPressed(app.DIK_LCONTROL):
  1933.  
  1934.                     player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, skillSlotIndex)
  1935.                     return
  1936.  
  1937.                 mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, skillSlotIndex, skillIndex)
  1938.  
  1939.         else:
  1940.             mouseController.DeattachObject()
  1941.  
  1942.     def OnUseGuildSkill(self, slotNumber, type):
  1943.         skillIndex = player.GetSkillIndex(slotNumber)
  1944.         skillLevel = guild.GetSkillLevel(slotNumber)
  1945.  
  1946.         if skillLevel <= 0:
  1947.             return
  1948.  
  1949.         player.UseGuildSkill(slotNumber)
  1950.  
  1951.     def OnUpGuildSkill(self, slotNumber, type):
  1952.         skillIndex = player.GetSkillIndex(slotNumber)
  1953.         net.SendChatPacket("/gskillup " + str(skillIndex))
  1954.  
  1955.     def OnUseSkill(self, slotNumber, coolTime):
  1956.  
  1957.         if self.isLoaded==0:
  1958.             return
  1959.  
  1960.         page = self.pageWindow["SKILL"]
  1961.  
  1962.         if page.activeSlot.HasSlot(slotNumber):
  1963.             page.activeSlot.SetSlotCoolTime(slotNumber, coolTime)
  1964.  
  1965.     def OnStartGuildWar(self, guildSelf, guildOpp):
  1966.  
  1967.         if self.isLoaded==0:
  1968.             return
  1969.  
  1970.         if guild.GetGuildID() != guildSelf:
  1971.             return
  1972.  
  1973.         guildName = guild.GetGuildName(guildOpp)
  1974.         for guildNameTextLine in self.enemyGuildNameList:
  1975.             if localeInfo.GUILD_INFO_ENEMY_GUILD_EMPTY == guildNameTextLine.GetText():
  1976.                 guildNameTextLine.SetText(guildName)
  1977.                 return
  1978.  
  1979.     def OnEndGuildWar(self, guildSelf, guildOpp):
  1980.  
  1981.         if self.isLoaded==0:
  1982.             return
  1983.  
  1984.         if guild.GetGuildID() != guildSelf:
  1985.             return
  1986.  
  1987.         guildName = guild.GetGuildName(guildOpp)
  1988.         for guildNameTextLine in self.enemyGuildNameList:
  1989.             if guildName == guildNameTextLine.GetText():
  1990.                 guildNameTextLine.SetText(localeInfo.GUILD_INFO_ENEMY_GUILD_EMPTY)
  1991.                 return
  1992.  
  1993.     ## ToolTip
  1994.     def OverInItem(self, slotNumber, type):
  1995.  
  1996.         if mouseModule.mouseController.isAttached():
  1997.             return
  1998.  
  1999.         if None != self.tooltipSkill:
  2000.             skillIndex = player.GetSkillIndex(slotNumber)
  2001.             skillLevel = guild.GetSkillLevel(slotNumber)
  2002.  
  2003.             self.tooltipSkill.SetSkill(skillIndex, skillLevel)
  2004.  
  2005.     def OverOutItem(self):
  2006.         if None != self.tooltipSkill:
  2007.             self.tooltipSkill.HideToolTip()
  2008.  
  2009.     def OnPressEscapeKey(self):
  2010.         self.Close()
  2011.         return True
  2012.  
  2013.  
  2014. class BuildGuildBuildingWindow(ui.ScriptWindow):
  2015.  
  2016.     if localeInfo.IsJAPAN():
  2017.         GUILD_CATEGORY_LIST = (
  2018.                 ("HEADQUARTER", "Šξ‘bŒš’z•¨"),
  2019.                 ("FACILITY", "Šg’£Œš’z•¨"),
  2020.                 ("OBJECT", "‚»‚Μ‘Ό"),
  2021.             )
  2022.     elif localeInfo.IsYMIR() or localeInfo.IsWE_KOREA():
  2023.         GUILD_CATEGORY_LIST = (
  2024.                 ("HEADQUARTER", "Ί»°ΗΉ°"),
  2025.                 ("FACILITY", "±β΄Ι°ΗΉ°"),
  2026.                 ("OBJECT", "Α¶°ζΉ°"),
  2027.             )
  2028.     elif localeInfo.IsEUROPE() or localeInfo.IsHONGKONG():
  2029.         GUILD_CATEGORY_LIST = (
  2030.                 ("HEADQUARTER", localeInfo.GUILD_HEADQUARTER),
  2031.                 ("FACILITY",    localeInfo.GUILD_FACILITY),
  2032.                 ("OBJECT",  localeInfo.GUILD_OBJECT),
  2033.             )
  2034.     else:
  2035.         try :
  2036.             GUILD_CATEGORY_LIST = (
  2037.                     ("HEADQUARTER", localeInfo.GUILD_HEADQUARTER),
  2038.                     ("FACILITY",    localeInfo.GUILD_FACILITY),
  2039.                     ("OBJECT",  localeInfo.GUILD_OBJECT),
  2040.                 )
  2041.         except:
  2042.             GUILD_CATEGORY_LIST = (
  2043.                     ("HEADQUARTER", "Main Building"),
  2044.                     ("FACILITY", "Facility"),
  2045.                     ("OBJECT", "Object"),
  2046.                 )
  2047.  
  2048.     MODE_VIEW = 0
  2049.     MODE_POSITIONING = 1
  2050.     MODE_PREVIEW = 2
  2051.  
  2052.     BUILDING_ALPHA = 0.55
  2053.  
  2054.     ENABLE_COLOR = grp.GenerateColor(0.7607, 0.7607, 0.7607, 1.0)
  2055.     DISABLE_COLOR = grp.GenerateColor(0.9, 0.4745, 0.4627, 1.0)
  2056.  
  2057.     START_INSTANCE_INDEX = 123450
  2058.     #WALL_SET_INSTANCE = 14105
  2059.  
  2060.     def __init__(self):
  2061.         ui.ScriptWindow.__init__(self)
  2062.         self.__LoadWindow()
  2063.  
  2064.         self.closeEvent = None
  2065.         self.popup = None
  2066.         self.mode = self.MODE_VIEW
  2067.         self.race = 0
  2068.         self.type = None
  2069.         self.x = 0
  2070.         self.y = 0
  2071.         self.z = 0
  2072.         self.rot_x = 0
  2073.         self.rot_y = 0
  2074.         self.rot_z = 0
  2075.         self.rot_x_limit = 0
  2076.         self.rot_y_limit = 0
  2077.         self.rot_z_limit = 0
  2078.         self.needMoney = 0
  2079.         self.needStoneCount = 0
  2080.         self.needLogCount = 0
  2081.         self.needPlywoodCount = 0
  2082.  
  2083.         #self.index = 0
  2084.         self.indexList = []
  2085.         self.raceList = []
  2086.         self.posList = []
  2087.         self.rotList = []
  2088.  
  2089.         index = 0
  2090.         for category in self.GUILD_CATEGORY_LIST:
  2091.             self.categoryList.InsertItem(index, category[1])
  2092.             index += 1
  2093.  
  2094.     def __del__(self):
  2095.         ui.ScriptWindow.__del__(self)
  2096.  
  2097.     def __LoadWindow(self):
  2098.  
  2099.         try:
  2100.             pyScrLoader = ui.PythonScriptLoader()
  2101.             if localeInfo.IsARABIC():
  2102.                 pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "buildguildbuildingwindow.py")
  2103.             elif localeInfo.IsVIETNAM():
  2104.                 pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "buildguildbuildingwindow.py")
  2105.             else:
  2106.                 pyScrLoader.LoadScriptFile(self, "uiscript/buildguildbuildingwindow.py")
  2107.         except:
  2108.             import exception
  2109.             exception.Abort("DeclareGuildWarWindow.__CreateDialog - LoadScript")
  2110.  
  2111.         try:
  2112.             getObject = self.GetChild
  2113.             self.board = getObject("Board")
  2114.             self.categoryList = getObject("CategoryList")
  2115.             self.buildingList = getObject("BuildingList")
  2116.             self.listScrollBar = getObject("ListScrollBar")
  2117.             self.positionButton = getObject("PositionButton")
  2118.             self.previewButton = getObject("PreviewButton")
  2119.             self.posValueX = getObject("BuildingPositionXValue")
  2120.             self.posValueY = getObject("BuildingPositionYValue")
  2121.             self.ctrlRotationX = getObject("BuildingRotationX")
  2122.             self.ctrlRotationY = getObject("BuildingRotationY")
  2123.             self.ctrlRotationZ = getObject("BuildingRotationZ")
  2124.             self.buildingPriceValue = getObject("BuildingPriceValue")
  2125.             self.buildingMaterialStoneValue = getObject("BuildingMaterialStoneValue")
  2126.             self.buildingMaterialLogValue = getObject("BuildingMaterialLogValue")
  2127.             self.buildingMaterialPlywoodValue = getObject("BuildingMaterialPlywoodValue")
  2128.  
  2129.             self.positionButton.SetEvent(ui.__mem_func__(self.__OnSelectPositioningMode))
  2130.             self.previewButton.SetToggleDownEvent(ui.__mem_func__(self.__OnEnterPreviewMode))
  2131.             self.previewButton.SetToggleUpEvent(ui.__mem_func__(self.__OnLeavePreviewMode))
  2132.             self.ctrlRotationX.SetEvent(ui.__mem_func__(self.__OnChangeRotation))
  2133.             self.ctrlRotationY.SetEvent(ui.__mem_func__(self.__OnChangeRotation))
  2134.             self.ctrlRotationZ.SetEvent(ui.__mem_func__(self.__OnChangeRotation))
  2135.             self.listScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollBuildingList))
  2136.  
  2137.             getObject("CategoryList").SetEvent(ui.__mem_func__(self.__OnSelectCategory))
  2138.             getObject("BuildingList").SetEvent(ui.__mem_func__(self.__OnSelectBuilding))
  2139.             getObject("AcceptButton").SetEvent(ui.__mem_func__(self.Build))
  2140.             getObject("CancelButton").SetEvent(ui.__mem_func__(self.Close))
  2141.             self.board.SetCloseEvent(ui.__mem_func__(self.Close))
  2142.  
  2143.         except:
  2144.             import exception
  2145.             exception.Abort("BuildGuildBuildingWindow.__LoadWindow - BindObject")
  2146.  
  2147.     def __CreateWallBlock(self, race, x, y, rot=0.0 ):
  2148.         idx = self.START_INSTANCE_INDEX + len(self.indexList)
  2149.         self.indexList.append(idx)
  2150.         self.raceList.append(race)
  2151.         self.posList.append((x, y))
  2152.         self.rotList.append(rot)
  2153.         chr.CreateInstance(idx)
  2154.         chr.SelectInstance(idx)
  2155.         chr.SetVirtualID(idx)
  2156.         chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT)
  2157.  
  2158.         chr.SetRace(race)
  2159.         chr.SetArmor(0)
  2160.         chr.Refresh()
  2161.         chr.SetLoopMotion(chr.MOTION_WAIT)
  2162.         chr.SetBlendRenderMode(idx, self.BUILDING_ALPHA)
  2163.         chr.SetRotationAll(0.0, 0.0, rot)
  2164.  
  2165.         self.ctrlRotationX.SetSliderPos(0.5)
  2166.         self.ctrlRotationY.SetSliderPos(0.5)
  2167.         self.ctrlRotationZ.SetSliderPos(0.5)
  2168.  
  2169.     def __GetObjectSize(self, race):
  2170.         idx = self.START_INSTANCE_INDEX + 1000
  2171.         chr.CreateInstance(idx)
  2172.         chr.SelectInstance(idx)
  2173.         chr.SetVirtualID(idx)
  2174.         chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT)
  2175.  
  2176.         chr.SetRace(race)
  2177.         chr.SetArmor(0)
  2178.         chr.Refresh()
  2179.         chr.SetLoopMotion(chr.MOTION_WAIT)
  2180.         sx, sy, ex, ey = chr.GetBoundBoxOnlyXY(idx)
  2181.         chr.DeleteInstance(idx)
  2182.         return sx, sy, ex, ey
  2183.  
  2184.     def __GetBuildInPosition(self):
  2185.  
  2186.         zList = []
  2187.         zList.append( background.GetHeight(self.x+self.sxPos, self.y+self.syPos) )
  2188.         zList.append( background.GetHeight(self.x+self.sxPos, self.y+self.eyPos) )
  2189.         zList.append( background.GetHeight(self.x+self.exPos, self.y+self.syPos) )
  2190.         zList.append( background.GetHeight(self.x+self.exPos, self.y+self.eyPos) )
  2191.         zList.append( background.GetHeight(self.x+(self.exPos+self.sxPos)/2, self.y+(self.eyPos+self.syPos)/2) )
  2192.         zList.sort()
  2193.         return zList[3]
  2194.  
  2195.     def __CreateBuildInInstance(self,race):
  2196.  
  2197.         self.__DeleteInstance()
  2198.  
  2199.         object_base = race - race%10
  2200.  
  2201.         door_minX, door_minY, door_maxX, door_maxY = self.__GetObjectSize(object_base+4)
  2202.         corner_minX, corner_minY, corner_maxX, corner_maxY = self.__GetObjectSize(object_base+1)
  2203.         line_minX, line_minY, line_maxX, line_maxY = self.__GetObjectSize(object_base+2)
  2204.         line_width = line_maxX - line_minX
  2205.         line_width_half = line_width / 2
  2206.  
  2207.         X_SIZE_STEP = 2 * 2 ## 2ΐΗ ΄άΐ§·ΞΈΈ Αυ°΅ΗΨΎί ΗΤ
  2208.         Y_SIZE_STEP = 8
  2209.         sxPos = door_maxX - corner_minX + (line_width_half*X_SIZE_STEP)
  2210.         exPos = -sxPos
  2211.         syPos = 0
  2212.         eyPos = -(corner_maxY*2 + line_width*Y_SIZE_STEP)
  2213.  
  2214.         self.sxPos = sxPos
  2215.         self.syPos = syPos
  2216.         self.exPos = exPos
  2217.         self.eyPos = eyPos
  2218.  
  2219.         z = self.__GetBuildInPosition()
  2220.  
  2221.         ## Door
  2222.         self.__CreateWallBlock(object_base+4, 0.0, syPos)
  2223.  
  2224.         ## Corner
  2225.         self.__CreateWallBlock(object_base+1, sxPos, syPos)
  2226.         self.__CreateWallBlock(object_base+1, exPos, syPos, 270.0)
  2227.         self.__CreateWallBlock(object_base+1, sxPos, eyPos, 90.0)
  2228.         self.__CreateWallBlock(object_base+1, exPos, eyPos,180.0 )
  2229.  
  2230.         ## Line
  2231.         lineBlock = object_base+2
  2232.         line_startX = -door_maxX - line_minX - (line_width_half*X_SIZE_STEP)
  2233.         self.__CreateWallBlock(lineBlock, line_startX, eyPos)
  2234.         self.__CreateWallBlock(lineBlock, line_startX+line_width*1, eyPos)
  2235.         self.__CreateWallBlock(lineBlock, line_startX+line_width*2, eyPos)
  2236.         self.__CreateWallBlock(lineBlock, line_startX+line_width*3, eyPos)
  2237.         for i in xrange(X_SIZE_STEP):
  2238.             self.__CreateWallBlock(lineBlock, line_startX+line_width*(3+i+1), eyPos)
  2239.         for i in xrange(X_SIZE_STEP/2):
  2240.             self.__CreateWallBlock(lineBlock, door_minX - line_maxX - line_width*i, syPos)
  2241.             self.__CreateWallBlock(lineBlock, door_maxX - line_minX + line_width*i, syPos)
  2242.         for i in xrange(Y_SIZE_STEP):
  2243.             self.__CreateWallBlock(lineBlock, sxPos, line_minX + corner_minX - line_width*i, 90.0)
  2244.             self.__CreateWallBlock(lineBlock, exPos, line_minX + corner_minX - line_width*i, 90.0)
  2245.  
  2246.         self.SetBuildingPosition(int(self.x), int(self.y), self.__GetBuildInPosition())
  2247.  
  2248.     def __DeleteInstance(self):
  2249.         if not self.indexList:
  2250.             return
  2251.  
  2252.         for index in self.indexList:
  2253.             chr.DeleteInstance(index)
  2254.  
  2255.         self.indexList = []
  2256.         self.raceList = []
  2257.         self.posList = []
  2258.         self.rotList = []
  2259.  
  2260.     def __CreateInstance(self, race):
  2261.  
  2262.         self.__DeleteInstance()
  2263.  
  2264.         self.race = race
  2265.  
  2266.         idx = self.START_INSTANCE_INDEX
  2267.         self.indexList.append(idx)
  2268.         self.posList.append((0, 0))
  2269.         self.rotList.append(0)
  2270.  
  2271.         chr.CreateInstance(idx)
  2272.         chr.SelectInstance(idx)
  2273.         chr.SetVirtualID(idx)
  2274.         chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT)
  2275.  
  2276.         chr.SetRace(race)
  2277.         chr.SetArmor(0)
  2278.         chr.Refresh()
  2279.         chr.SetLoopMotion(chr.MOTION_WAIT)
  2280.         chr.SetBlendRenderMode(idx, self.BUILDING_ALPHA)
  2281.  
  2282.         self.SetBuildingPosition(int(self.x), int(self.y), 0)
  2283.         self.ctrlRotationX.SetSliderPos(0.5)
  2284.         self.ctrlRotationY.SetSliderPos(0.5)
  2285.         self.ctrlRotationZ.SetSliderPos(0.5)
  2286.  
  2287.     def Build(self):
  2288.  
  2289.         if not self.__IsEnoughMoney():
  2290.             self.__PopupDialog(localeInfo.GUILD_NOT_ENOUGH_MONEY)
  2291.             return
  2292.         if not self.__IsEnoughMaterialStone():
  2293.             self.__PopupDialog(localeInfo.GUILD_NOT_ENOUGH_MATERIAL)
  2294.             return
  2295.         if not self.__IsEnoughMaterialLog():
  2296.             self.__PopupDialog(localeInfo.GUILD_NOT_ENOUGH_MATERIAL)
  2297.             return
  2298.         if not self.__IsEnoughMaterialPlywood():
  2299.             self.__PopupDialog(localeInfo.GUILD_NOT_ENOUGH_MATERIAL)
  2300.             return
  2301.  
  2302.         ## /build c vnum x y x_rot y_rot z_rot
  2303.         ## /build d vnum
  2304.         if "BUILDIN" == self.type:
  2305.             for i in xrange(len(self.raceList)):
  2306.                 race = self.raceList[i]
  2307.                 xPos, yPos = self.posList[i]
  2308.                 rot = self.rotList[i]
  2309.                 net.SendChatPacket("/build c %d %d %d %d %d %d" % (race, int(self.x+xPos), int(self.y+yPos), self.rot_x, self.rot_y, rot))
  2310.         else:
  2311.             net.SendChatPacket("/build c %d %d %d %d %d %d" % (self.race, int(self.x), int(self.y), self.rot_x, self.rot_y, self.rot_z))
  2312.  
  2313.         self.Close()
  2314.  
  2315.     def Open(self):
  2316.         x, y, z = player.GetMainCharacterPosition()
  2317.         app.SetCameraSetting(int(x), int(-y), int(z), 3000, 0, 30)
  2318.  
  2319.         background.VisibleGuildArea()
  2320.  
  2321.         self.x = x
  2322.         self.y = y
  2323.         self.z = z
  2324.         self.categoryList.SelectItem(0)
  2325.         self.buildingList.SelectItem(0)
  2326.         self.SetTop()
  2327.         self.Show()
  2328.         self.__DisablePCBlocker()
  2329.  
  2330.         import debugInfo
  2331.         if debugInfo.IsDebugMode():
  2332.             self.categoryList.SelectItem(2)
  2333.             self.buildingList.SelectItem(0)
  2334.  
  2335.     def Close(self):
  2336.  
  2337.         self.__DeleteInstance()
  2338.  
  2339.         background.DisableGuildArea()
  2340.  
  2341.         self.Hide()
  2342.         self.__OnClosePopupDialog()
  2343.         self.__EnablePCBlocker()
  2344.         self.__UnlockCameraMoving()
  2345.         if self.closeEvent:
  2346.             self.closeEvent()
  2347.  
  2348.     def Destory(self):
  2349.         self.Close()
  2350.  
  2351.         self.ClearDictionary()
  2352.         self.board = None
  2353.         self.categoryList = None
  2354.         self.buildingList = None
  2355.         self.listScrollBar = None
  2356.         self.positionButton = None
  2357.         self.previewButton = None
  2358.         self.posValueX = None
  2359.         self.posValueY = None
  2360.         self.ctrlRotationX = None
  2361.         self.ctrlRotationY = None
  2362.         self.ctrlRotationZ = None
  2363.         self.buildingPriceValue = None
  2364.         self.buildingMaterialStoneValue = None
  2365.         self.buildingMaterialLogValue = None
  2366.         self.buildingMaterialPlywoodValue = None
  2367.         self.closeEvent = None
  2368.  
  2369.     def SetCloseEvent(self, event):
  2370.         self.closeEvent = event
  2371.  
  2372.     def __PopupDialog(self, text):
  2373.         popup = uiCommon.PopupDialog()
  2374.         popup.SetText(text)
  2375.         popup.SetAcceptEvent(self.__OnClosePopupDialog)
  2376.         popup.Open()
  2377.         self.popup = popup
  2378.  
  2379.     def __OnClosePopupDialog(self):
  2380.         self.popup = None
  2381.  
  2382.     def __EnablePCBlocker(self):
  2383.         ## PC Blocker Γ³Έ®Έ¦ Δ΄Ω. (ΕυΈνΗΨΑό)
  2384.         chr.SetInstanceType(chr.INSTANCE_TYPE_BUILDING)
  2385.  
  2386.         for idx in self.indexList:
  2387.             chr.SetBlendRenderMode(idx, 1.0)
  2388.  
  2389.     def __DisablePCBlocker(self):
  2390.         ## PC Blocker Γ³Έ®Έ¦ ²φ΄Ω. (ΎΘΕυΈνΗΨΑό)
  2391.         chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT)
  2392.  
  2393.         for idx in self.indexList:
  2394.             chr.SetBlendRenderMode(idx, self.BUILDING_ALPHA)
  2395.  
  2396.     def __OnSelectPositioningMode(self):
  2397.         if self.MODE_PREVIEW == self.mode:
  2398.             self.positionButton.SetUp()
  2399.             return
  2400.  
  2401.         self.mode = self.MODE_POSITIONING
  2402.         self.Hide()
  2403.  
  2404.     def __OnEnterPreviewMode(self):
  2405.  
  2406.         if self.MODE_POSITIONING == self.mode:
  2407.             self.previewButton.SetUp()
  2408.             return
  2409.  
  2410.         self.mode = self.MODE_PREVIEW
  2411.         self.positionButton.SetUp()
  2412.         self.__UnlockCameraMoving()
  2413.         self.__EnablePCBlocker()
  2414.  
  2415.     def __OnLeavePreviewMode(self):
  2416.         self.__RestoreViewMode()
  2417.  
  2418.     def __RestoreViewMode(self):
  2419.         self.__DisablePCBlocker()
  2420.         self.__LockCameraMoving()
  2421.         self.mode = self.MODE_VIEW
  2422.         self.positionButton.SetUp()
  2423.         self.previewButton.SetUp()
  2424.  
  2425.     def __IsEnoughMoney(self):
  2426.  
  2427.         if app.IsEnableTestServerFlag():
  2428.             return True
  2429.  
  2430.         curMoney = player.GetMoney()
  2431.         if curMoney < self.needMoney:
  2432.             return False
  2433.         return True
  2434.  
  2435.     def __IsEnoughMaterialStone(self):
  2436.  
  2437.         if app.IsEnableTestServerFlag():
  2438.             return True
  2439.  
  2440.         curStoneCount = player.GetItemCountByVnum(MATERIAL_STONE_ID)
  2441.         if curStoneCount < self.needStoneCount:
  2442.             return False
  2443.         return True
  2444.  
  2445.     def __IsEnoughMaterialLog(self):
  2446.  
  2447.         if app.IsEnableTestServerFlag():
  2448.             return True
  2449.  
  2450.         curLogCount = player.GetItemCountByVnum(MATERIAL_LOG_ID)
  2451.         if curLogCount < self.needLogCount:
  2452.             return False
  2453.         return True
  2454.  
  2455.     def __IsEnoughMaterialPlywood(self):
  2456.  
  2457.         if app.IsEnableTestServerFlag():
  2458.             return True
  2459.  
  2460.         curPlywoodCount = player.GetItemCountByVnum(MATERIAL_PLYWOOD_ID)
  2461.         if curPlywoodCount < self.needPlywoodCount:
  2462.             return False
  2463.         return True
  2464.  
  2465.     def __OnSelectCategory(self):
  2466.         self.listScrollBar.SetPos(0.0)
  2467.         self.__RefreshItem()
  2468.  
  2469.     def __SetBuildingData(self, data):
  2470.         self.buildingPriceValue.SetText(NumberToMoneyString(data["PRICE"]))
  2471.  
  2472.         self.needMoney = int(data["PRICE"])
  2473.  
  2474.         materialList = data["MATERIAL"]
  2475.         self.needStoneCount = int(materialList[MATERIAL_STONE_INDEX])
  2476.         self.needLogCount = int(materialList[MATERIAL_LOG_INDEX])
  2477.         self.needPlywoodCount = int(materialList[MATERIAL_PLYWOOD_INDEX])
  2478.  
  2479.         if (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/ca") and (localeInfo.IsEUROPE() and app.GetLocalePath() != "locale/br"):
  2480.             self.buildingMaterialStoneValue.SetText(materialList[MATERIAL_STONE_INDEX])
  2481.             self.buildingMaterialLogValue.SetText(materialList[MATERIAL_LOG_INDEX] )
  2482.             self.buildingMaterialPlywoodValue.SetText(materialList[MATERIAL_PLYWOOD_INDEX])
  2483.         else:
  2484.             self.buildingMaterialStoneValue.SetText(materialList[MATERIAL_STONE_INDEX] + localeInfo.THING_COUNT)
  2485.             self.buildingMaterialLogValue.SetText(materialList[MATERIAL_LOG_INDEX] + localeInfo.THING_COUNT)
  2486.             self.buildingMaterialPlywoodValue.SetText(materialList[MATERIAL_PLYWOOD_INDEX] + localeInfo.THING_COUNT)
  2487.         if self.__IsEnoughMoney():
  2488.             self.buildingPriceValue.SetPackedFontColor(self.ENABLE_COLOR)
  2489.         else:
  2490.             self.buildingPriceValue.SetPackedFontColor(self.DISABLE_COLOR)
  2491.  
  2492.         if self.__IsEnoughMaterialStone():
  2493.             self.buildingMaterialStoneValue.SetPackedFontColor(self.ENABLE_COLOR)
  2494.         else:
  2495.             self.buildingMaterialStoneValue.SetPackedFontColor(self.DISABLE_COLOR)
  2496.  
  2497.         if self.__IsEnoughMaterialLog():
  2498.             self.buildingMaterialLogValue.SetPackedFontColor(self.ENABLE_COLOR)
  2499.         else:
  2500.             self.buildingMaterialLogValue.SetPackedFontColor(self.DISABLE_COLOR)
  2501.  
  2502.         if self.__IsEnoughMaterialPlywood():
  2503.             self.buildingMaterialPlywoodValue.SetPackedFontColor(self.ENABLE_COLOR)
  2504.         else:
  2505.             self.buildingMaterialPlywoodValue.SetPackedFontColor(self.DISABLE_COLOR)
  2506.  
  2507.         self.rot_x_limit = data["X_ROT_LIMIT"]
  2508.         self.rot_y_limit = data["Y_ROT_LIMIT"]
  2509.         self.rot_z_limit = data["Z_ROT_LIMIT"]
  2510.         self.ctrlRotationX.Enable()
  2511.         self.ctrlRotationY.Enable()
  2512.         self.ctrlRotationZ.Enable()
  2513.         if 0 == self.rot_x_limit:
  2514.             self.ctrlRotationX.Disable()
  2515.         if 0 == self.rot_y_limit:
  2516.             self.ctrlRotationY.Disable()
  2517.         if 0 == self.rot_z_limit:
  2518.             self.ctrlRotationZ.Disable()
  2519.  
  2520.     def __OnSelectBuilding(self):
  2521.         buildingIndex = self.buildingList.GetSelectedItem()
  2522.         if buildingIndex >= len(BUILDING_DATA_LIST):
  2523.             return
  2524.  
  2525.         categoryIndex = self.categoryList.GetSelectedItem()
  2526.         if categoryIndex >= len(self.GUILD_CATEGORY_LIST):
  2527.             return
  2528.         selectedType = self.GUILD_CATEGORY_LIST[categoryIndex][0]
  2529.  
  2530.         index = 0
  2531.         for data in BUILDING_DATA_LIST:
  2532.             type = data["TYPE"]
  2533.             vnum = data["VNUM"]
  2534.             if selectedType != type:
  2535.                 continue
  2536.  
  2537.             if index == buildingIndex:
  2538.                 self.type = type
  2539.                 if "BUILDIN" == self.type:
  2540.                     self.__CreateBuildInInstance(vnum)
  2541.                 else:
  2542.                     self.__CreateInstance(vnum)
  2543.  
  2544.                 self.__SetBuildingData(data)
  2545.  
  2546.             index += 1
  2547.  
  2548.     def __OnScrollBuildingList(self):
  2549.         viewItemCount = self.buildingList.GetViewItemCount()
  2550.         itemCount = self.buildingList.GetItemCount()
  2551.         pos = self.listScrollBar.GetPos() * (itemCount-viewItemCount)
  2552.         self.buildingList.SetBasePos(int(pos))
  2553.  
  2554.     def __OnChangeRotation(self):
  2555.         self.rot_x = self.ctrlRotationX.GetSliderPos() * self.rot_x_limit - self.rot_x_limit/2
  2556.         self.rot_y = self.ctrlRotationY.GetSliderPos() * self.rot_y_limit - self.rot_y_limit/2
  2557.         self.rot_z = (self.ctrlRotationZ.GetSliderPos() * 360 + 180) % 360
  2558.         if "BUILDIN" == self.type:
  2559.             chr.SetRotationAll(self.rot_x, self.rot_y, self.rot_z)
  2560.         else:
  2561.             chr.SetRotationAll(self.rot_x, self.rot_y, self.rot_z)
  2562.  
  2563.     def __LockCameraMoving(self):
  2564.         app.SetCameraSetting(int(self.x), int(-self.y), int(self.z), 3000, 0, 30)
  2565.  
  2566.     def __UnlockCameraMoving(self):
  2567.         app.SetDefaultCamera()
  2568.  
  2569.     def __RefreshItem(self):
  2570.  
  2571.         self.buildingList.ClearItem()
  2572.  
  2573.         categoryIndex = self.categoryList.GetSelectedItem()
  2574.         if categoryIndex >= len(self.GUILD_CATEGORY_LIST):
  2575.             return
  2576.         selectedType = self.GUILD_CATEGORY_LIST[categoryIndex][0]
  2577.  
  2578.         index = 0
  2579.         for data in BUILDING_DATA_LIST:
  2580.             if selectedType != data["TYPE"]:
  2581.                 continue
  2582.  
  2583.             if data["SHOW"]:
  2584.                 self.buildingList.InsertItem(index, data["LOCAL_NAME"])
  2585.  
  2586.             index += 1
  2587.  
  2588.         self.buildingList.SelectItem(0)
  2589.  
  2590.         if self.buildingList.GetItemCount() < self.buildingList.GetViewItemCount():
  2591.             self.buildingList.SetSize(120, self.buildingList.GetHeight())
  2592.             self.buildingList.LocateItem()
  2593.             self.listScrollBar.Hide()
  2594.         else:
  2595.             self.buildingList.SetSize(105, self.buildingList.GetHeight())
  2596.             self.buildingList.LocateItem()
  2597.             self.listScrollBar.Show()
  2598.  
  2599.     def SettleCurrentPosition(self):
  2600.         guildID = miniMap.GetGuildAreaID(self.x, self.y)
  2601.  
  2602.         import debugInfo
  2603.         if debugInfo.IsDebugMode():
  2604.             guildID = player.GetGuildID()
  2605.  
  2606.         if guildID != player.GetGuildID():
  2607.             return
  2608.  
  2609.         self.__RestoreViewMode()
  2610.         self.__LockCameraMoving()
  2611.         self.Show()
  2612.  
  2613.     def SetBuildingPosition(self, x, y, z):
  2614.         self.x = x
  2615.         self.y = y
  2616.         self.posValueX.SetText(str(int(x)))
  2617.         self.posValueY.SetText(str(int(y)))
  2618.  
  2619.         for i in xrange(len(self.indexList)):
  2620.             idx = self.indexList[i]
  2621.             xPos, yPos = self.posList[i]
  2622.  
  2623.             chr.SelectInstance(idx)
  2624.             if 0 != z:
  2625.                 self.z = z
  2626.                 chr.SetPixelPosition(int(x+xPos), int(y+yPos), int(z))
  2627.             else:
  2628.                 chr.SetPixelPosition(int(x+xPos), int(y+yPos))
  2629.  
  2630.     def IsPositioningMode(self):
  2631.         if self.MODE_POSITIONING == self.mode:
  2632.             return True
  2633.         return False
  2634.  
  2635.     def IsPreviewMode(self):
  2636.         if self.MODE_PREVIEW == self.mode:
  2637.             return True
  2638.         return False
  2639.  
  2640.     def OnPressEscapeKey(self):
  2641.         self.Close()
  2642.         return True
  2643.  
  2644. """
  2645. - ΗΑ·ΞΕδΔέ
  2646.  
  2647. °ΤΐΣµΉΐΤ½Γ:
  2648.     RecvLandPacket:
  2649.         CPythonMiniMap::RegisterGuildArea
  2650.  
  2651. °ΤΐΣΐΜµΏΑί:
  2652.     PythonPlayer::Update()
  2653.         CPythonPlayer::__Update_NotifyGuildAreaEvent()
  2654.             game.py.BINARY_Guild_EnterGuildArea
  2655.                 uigameButton.GameButtonWindow.ShowBuildButton()
  2656.             game.py.BINARY_Guild_ExitGuildArea
  2657.                 uigameButton.GameButtonWindow.HideBuildButton()
  2658.  
  2659. BuildButton:
  2660. !±ζµεΐεΐΞΑφ Γ³Έ® Ύψΐ½
  2661. !°ΗΉ°ΐΜ ΐΦΎξµµ Αώ±β ΉφΖ°ΐΊ ΐΦΐ½
  2662.  
  2663. !°ΗΉ°ΐΜ ΐΣ½Γ·Ξ »ηΏλΗϴ VID ΄Β Ό­Ήφ°΅ ΊΈ³»ΑΦ΄Β °Ν°ϊ Θ¥µΏµΙ Ώ°·Α°΅ ΐΦΐ½
  2664. !°ΗΉ° VNUM ΐΊ BuildGuildBuildingWindow.BUILDING_VNUM_LIST Έ¦ ΐΜΏλΗΨ Ί―Θ―
  2665.  
  2666. !°ΗΉ° Αφΐ»¶§΄Β /build c(reate)
  2667. !°ΗΉ° ΊΞΌϊ¶§΄Β /build d(estroy)
  2668. !rotation ΐΗ ΄άΐ§΄Β degree
  2669.  
  2670.     interfaceModule.interface.__OnClickBuildButton:
  2671.         interfaceModule.interface.BUILD_OpenWindow:
  2672.  
  2673. AcceptButton:
  2674.     BuildGuildBuildingWindow.Build:
  2675.         net.SendChatPacket("/build c vnum x y x_rot y_rot z_rot")
  2676.  
  2677. PreviewButton:
  2678.     __OnPreviewMode:
  2679.     __RestoreViewMode:
  2680.  
  2681. °ΗΉ° ΊΞΌφ±β:
  2682.     uiTarget.TargetBoard.__OnDestroyBuilding
  2683.         net.SendChatPacket("/build d vid")
  2684. """
  2685.  
  2686. if __name__ == "__main__":
  2687.  
  2688.     import app
  2689.     import wndMgr
  2690.     import systemSetting
  2691.     import mouseModule
  2692.     import grp
  2693.     import ui
  2694.  
  2695.     #wndMgr.SetOutlineFlag(True)
  2696.  
  2697.     app.SetMouseHandler(mouseModule.mouseController)
  2698.     app.SetHairColorEnable(True)
  2699.     wndMgr.SetMouseHandler(mouseModule.mouseController)
  2700.     wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())
  2701.     app.Create("METIN2 CLOSED BETA", systemSetting.GetWidth(), systemSetting.GetHeight(), 1)
  2702.     mouseModule.mouseController.Create()
  2703.  
  2704.     import chrmgr
  2705.     chrmgr.CreateRace(0)
  2706.     chrmgr.SelectRace(0)
  2707.     chrmgr.SetPathName("d:/ymir Work/pc/warrior/")
  2708.     chrmgr.LoadRaceData("warrior.msm")
  2709.     chrmgr.SetPathName("d:/ymir work/pc/warrior/general/")
  2710.     chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL)
  2711.     chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "wait.msa")
  2712.     chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_RUN, "run.msa")
  2713.  
  2714.     def LoadGuildBuildingList(filename):
  2715.         handle = app.OpenTextFile(filename)
  2716.         count = app.GetTextFileLineCount(handle)
  2717.         for i in xrange(count):
  2718.             line = app.GetTextFileLine(handle, i)
  2719.             tokens = line.split("\t")
  2720.  
  2721.             TOKEN_VNUM = 0
  2722.             TOKEN_TYPE = 1
  2723.             TOKEN_NAME = 2
  2724.             TOKEN_LOCAL_NAME = 3
  2725.             NO_USE_TOKEN_SIZE_1 = 4
  2726.             NO_USE_TOKEN_SIZE_2 = 5
  2727.             NO_USE_TOKEN_SIZE_3 = 6
  2728.             NO_USE_TOKEN_SIZE_4 = 7
  2729.             TOKEN_X_ROT_LIMIT = 8
  2730.             TOKEN_Y_ROT_LIMIT = 9
  2731.             TOKEN_Z_ROT_LIMIT = 10
  2732.             TOKEN_PRICE = 11
  2733.             TOKEN_MATERIAL = 12
  2734.             TOKEN_NPC = 13
  2735.             TOKEN_GROUP = 14
  2736.             TOKEN_DEPEND_GROUP = 15
  2737.             TOKEN_ENABLE_FLAG = 16
  2738.             LIMIT_TOKEN_COUNT = 17
  2739.  
  2740.             if not tokens[TOKEN_VNUM].isdigit():
  2741.                 continue
  2742.  
  2743.             if not int(tokens[TOKEN_ENABLE_FLAG]):
  2744.                 continue
  2745.  
  2746.             if len(tokens) < LIMIT_TOKEN_COUNT:
  2747.                 import dbg
  2748.                 dbg.TraceError("Strange token count [%d/%d] [%s]" % (len(tokens), LIMIT_TOKEN_COUNT, line))
  2749.                 continue
  2750.  
  2751.             ENABLE_FLAG_TYPE_NOT_USE = False
  2752.             ENABLE_FLAG_TYPE_USE = True
  2753.             ENABLE_FLAG_TYPE_USE_BUT_HIDE = 2
  2754.  
  2755.             if ENABLE_FLAG_TYPE_NOT_USE == int(tokens[TOKEN_ENABLE_FLAG]):
  2756.                 continue
  2757.  
  2758.             vnum = int(tokens[TOKEN_VNUM])
  2759.             type = tokens[TOKEN_TYPE]
  2760.             name = tokens[TOKEN_NAME]
  2761.             localName = tokens[TOKEN_LOCAL_NAME]
  2762.             xRotLimit = int(tokens[TOKEN_X_ROT_LIMIT])
  2763.             yRotLimit = int(tokens[TOKEN_Y_ROT_LIMIT])
  2764.             zRotLimit = int(tokens[TOKEN_Z_ROT_LIMIT])
  2765.             price = tokens[TOKEN_PRICE]
  2766.             material = tokens[TOKEN_MATERIAL]
  2767.  
  2768.             folderName = ""
  2769.             if "HEADQUARTER" == type:
  2770.                 folderName = "headquarter"
  2771.             elif "FACILITY" == type:
  2772.                 folderName = "facility"
  2773.             elif "OBJECT" == type:
  2774.                 folderName = "object"
  2775.             ##"BuildIn" Is made by exist instance.
  2776.  
  2777.             materialList = ["0", "0", "0"]
  2778.             if material[0] == "\"":
  2779.                 material = material[1:]
  2780.             if material[-1] == "\"":
  2781.                 material = material[:-1]
  2782.             for one in material.split("/"):
  2783.                 data = one.split(",")
  2784.                 if 2 != len(data):
  2785.                     continue
  2786.                 itemID = int(data[0])
  2787.                 count = data[1]
  2788.  
  2789.                 if itemID == MATERIAL_STONE_ID:
  2790.                     materialList[MATERIAL_STONE_INDEX] = count
  2791.                 elif itemID == MATERIAL_LOG_ID:
  2792.                     materialList[MATERIAL_LOG_INDEX] = count
  2793.                 elif itemID == MATERIAL_PLYWOOD_ID:
  2794.                     materialList[MATERIAL_PLYWOOD_INDEX] = count
  2795.  
  2796.             import chrmgr
  2797.             chrmgr.RegisterRaceSrcName(name, folderName)
  2798.             chrmgr.RegisterRaceName(vnum, name)
  2799.  
  2800.             appendingData = { "VNUM":vnum,
  2801.                               "TYPE":type,
  2802.                               "NAME":name,
  2803.                               "LOCAL_NAME":localName,
  2804.                               "X_ROT_LIMIT":xRotLimit,
  2805.                               "Y_ROT_LIMIT":yRotLimit,
  2806.                               "Z_ROT_LIMIT":zRotLimit,
  2807.                               "PRICE":price,
  2808.                               "MATERIAL":materialList,
  2809.                               "SHOW" : True }
  2810.  
  2811.             if ENABLE_FLAG_TYPE_USE_BUT_HIDE == int(tokens[TOKEN_ENABLE_FLAG]):
  2812.                 appendingData["SHOW"] = False
  2813.  
  2814.             BUILDING_DATA_LIST.append(appendingData)
  2815.  
  2816.         app.CloseTextFile(handle)
  2817.  
  2818.     LoadGuildBuildingList(app.GetLocalePath()+"/GuildBuildingList.txt")
  2819.  
  2820.     class TestGame(ui.Window):
  2821.         def __init__(self):
  2822.             ui.Window.__init__(self)
  2823.  
  2824.             x = 30000
  2825.             y = 40000
  2826.  
  2827.             self.wndGuildBuilding = None
  2828.             self.onClickKeyDict = {}
  2829.             self.onClickKeyDict[app.DIK_SPACE] = lambda: self.OpenBuildGuildBuildingWindow()
  2830.  
  2831.             background.Initialize()
  2832.             background.LoadMap("metin2_map_a1", x, y, 0)
  2833.             background.SetShadowLevel(background.SHADOW_ALL)
  2834.  
  2835.             self.MakeCharacter(1, 0, x, y)
  2836.             player.SetMainCharacterIndex(1)
  2837.             chr.SelectInstance(1)
  2838.  
  2839.         def __del__(self):
  2840.             ui.Window.__del__(self)
  2841.  
  2842.         def MakeCharacter(self, index, race, x, y):
  2843.             chr.CreateInstance(index)
  2844.             chr.SelectInstance(index)
  2845.             chr.SetVirtualID(index)
  2846.             chr.SetInstanceType(chr.INSTANCE_TYPE_PLAYER)
  2847.  
  2848.             chr.SetRace(race)
  2849.             chr.SetArmor(0)
  2850.             chr.SetHair(0)
  2851.             chr.Refresh()
  2852.             chr.SetMotionMode(chr.MOTION_MODE_GENERAL)
  2853.             chr.SetLoopMotion(chr.MOTION_WAIT)
  2854.  
  2855.             chr.SetPixelPosition(x, y)
  2856.             chr.SetDirection(chr.DIR_NORTH)
  2857.  
  2858.         def OpenBuildGuildBuildingWindow(self):
  2859.             self.wndGuildBuilding = BuildGuildBuildingWindow()
  2860.             self.wndGuildBuilding.Open()
  2861.             self.wndGuildBuilding.SetParent(self)
  2862.             self.wndGuildBuilding.SetTop()
  2863.  
  2864.         def OnKeyUp(self, key):
  2865.             if key in self.onClickKeyDict:
  2866.                 self.onClickKeyDict[key]()
  2867.             return True
  2868.  
  2869.         def OnMouseLeftButtonDown(self):
  2870.             if self.wndGuildBuilding:
  2871.                 if self.wndGuildBuilding.IsPositioningMode():
  2872.                     self.wndGuildBuilding.SettleCurrentPosition()
  2873.                     return
  2874.  
  2875.             player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS);
  2876.             return True
  2877.  
  2878.         def OnMouseLeftButtonUp(self):
  2879.             if self.wndGuildBuilding:
  2880.                 return
  2881.  
  2882.             player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK)
  2883.             return True
  2884.  
  2885.         def OnMouseRightButtonDown(self):
  2886.             player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS);
  2887.             return True
  2888.  
  2889.         def OnMouseRightButtonUp(self):
  2890.             player.SetMouseState(player.MBT_RIGHT, player.MBS_CLICK);
  2891.             return True
  2892.  
  2893.         def OnMouseMiddleButtonDown(self):
  2894.             player.SetMouseMiddleButtonState(player.MBS_PRESS)
  2895.  
  2896.         def OnMouseMiddleButtonUp(self):
  2897.             player.SetMouseMiddleButtonState(player.MBS_CLICK)
  2898.  
  2899.         def OnUpdate(self):
  2900.             app.UpdateGame()
  2901.  
  2902.             if self.wndGuildBuilding:
  2903.                 if self.wndGuildBuilding.IsPositioningMode():
  2904.                     x, y, z = background.GetPickingPoint()
  2905.                     self.wndGuildBuilding.SetBuildingPosition(x, y, z)
  2906.  
  2907.         def OnRender(self):
  2908.             app.RenderGame()
  2909.             grp.PopState()
  2910.             grp.SetInterfaceRenderState()
  2911.  
  2912.     game = TestGame()
  2913.     game.SetSize(systemSetting.GetWidth(), systemSetting.GetHeight())
  2914.     game.Show()
  2915.  
  2916.     wndGuildBuilding = BuildGuildBuildingWindow()
  2917.     wndGuildBuilding.Open()
  2918.     wndGuildBuilding.SetTop()
  2919.  
  2920.     app.Loop()
  2921.  
  2922.     """
  2923.     - ΗΑ·ΞΕδΔέ
  2924.  
  2925. °ΤΐΣµΉΐΤ½Γ:
  2926.     RecvLandPacket:
  2927.         CPythonMiniMap::RegisterGuildArea
  2928.  
  2929. °ΤΐΣΐΜµΏΑί:
  2930.     PythonPlayer::Update()
  2931.         CPythonPlayer::__Update_NotifyGuildAreaEvent()
  2932.             game.py.BINARY_Guild_EnterGuildArea
  2933.                 uigameButton.GameButtonWindow.ShowBuildButton()
  2934.             game.py.BINARY_Guild_ExitGuildArea
  2935.                 uigameButton.GameButtonWindow.HideBuildButton()
  2936.  
  2937. BuildButton:
  2938. !±ζµεΐεΐΞΑφ Γ³Έ® Ύψΐ½
  2939. !°ΗΉ°ΐΜ ΐΦΎξµµ Αώ±β ΉφΖ°ΐΊ ΐΦΐ½
  2940.  
  2941. !°ΗΉ°ΐΜ ΐΣ½Γ·Ξ »ηΏλΗϴ VID ΄Β Ό­Ήφ°΅ ΊΈ³»ΑΦ΄Β °Ν°ϊ Θ¥µΏµΙ Ώ°·Α°΅ ΐΦΐ½
  2942. !°ΗΉ° VNUM ΐΊ BuildGuildBuildingWindow.BUILDING_VNUM_LIST Έ¦ ΐΜΏλΗΨ Ί―Θ―
  2943.  
  2944. !°ΗΉ° Αφΐ»¶§΄Β /build c(reate)
  2945. !°ΗΉ° ΊΞΌϊ¶§΄Β /build d(estroy)
  2946. !rotation ΐΗ ΄άΐ§΄Β degree
  2947.  
  2948.     interfaceModule.interface.__OnClickBuildButton:
  2949.         interfaceModule.interface.BUILD_OpenWindow:
  2950.  
  2951. AcceptButton:
  2952.     BuildGuildBuildingWindow.Build:
  2953.         net.SendChatPacket("/build c vnum x y x_rot y_rot z_rot")
  2954.  
  2955.     x_rot, y_rot ΄Β AffectContainerΏ΅ ΐϊΐε
  2956.  
  2957. PreviewButton:
  2958.     __OnPreviewMode:
  2959.     __RestoreViewMode:
  2960.  
  2961. °ΗΉ° ΊΞΌφ±β:
  2962.     uiTarget.TargetBoard.__OnDestroyBuilding
  2963.         net.SendChatPacket("/build d vid")
  2964.     """
Add Comment
Please, Sign In to add comment