da hier in der Metin2 Section immer darum geht etwas zu haben, was der andere nicht hat! Versuche ich mal ein Projekt zu starten, dass auf Zusammenarbeit beruht und nicht auf Geiz! Jeder kann etwas dazu steuern und besitzt die Möglichkeit etwas bereitzustellen und Informationen auszutauschen.
Also ich fange mal mit ein paar Informationen über den Gildenland Editor von Metin2 an.
Der eigentlich Editor befindet sich in der uiguild in der root.epk
HTML Code:
import app import ui import guild import net import wndMgr import grp import grpText import uiPickMoney import locale import player import skill import mouseModule import uiUploadMark import uiCommon import uiToolTip import playerSettingModule import constInfo import background import miniMap import chr import uiScriptLocale from _weakref import proxy DISABLE_GUILD_SKILL = FALSE DISABLE_DECLARE_WAR = FALSE def NumberToMoneyString(n): return locale.NumberToMoneyString(n) if (locale.IsEUROPE() and app.GetLocalePath() != "locale/br"): def NumberToMoneyString(n): if n <= 0 : return "0" 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 ])) MATERIAL_STONE_INDEX = 0 MATERIAL_LOG_INDEX = 1 MATERIAL_PLYWOOD_INDEX = 2 MATERIAL_STONE_ID = 90010 MATERIAL_LOG_ID = 90011 MATERIAL_PLYWOOD_ID = 90012 BUILDING_DATA_LIST = [] def GetGVGKey(srcGuildID, dstGuildID): minID = min(srcGuildID, dstGuildID) maxID = max(srcGuildID, dstGuildID) return minID*1000 + maxID class DeclareGuildWarDialog(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.type=0 self.__CreateDialog() def __del__(self): ui.ScriptWindow.__del__(self) def Open(self): self.inputValue.SetFocus() self.SetCenterPosition() self.SetTop() self.Show() def Close(self): self.ClearDictionary() self.board = None self.acceptButton = None self.cancelButton = None self.inputSlot = None self.inputValue = None self.Hide() def __CreateDialog(self): try: pyScrLoader = ui.PythonScriptLoader() if locale.IsVIETNAM() : pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "declareguildwardialog.py") else: pyScrLoader.LoadScriptFile(self, "uiscript/declareguildwardialog.py") except: import exception exception.Abort("DeclareGuildWarWindow.__CreateDialog - LoadScript") try: getObject = self.GetChild self.board = getObject("Board") self.typeButtonList=[] self.typeButtonList.append(getObject("NormalButton")) self.typeButtonList.append(getObject("WarpButton")) self.typeButtonList.append(getObject("CTFButton")) self.acceptButton = getObject("AcceptButton") self.cancelButton = getObject("CancelButton") self.inputSlot = getObject("InputSlot") self.inputValue = getObject("InputValue") gameType=getObject("GameType") except: import exception exception.Abort("DeclareGuildWarWindow.__CreateDialog - BindObject") if constInfo.GUILD_WAR_TYPE_SELECT_ENABLE==0: gameType.Hide() self.typeButtonList[0].SAFE_SetEvent(self.__OnClickTypeButtonNormal) self.typeButtonList[1].SAFE_SetEvent(self.__OnClickTypeButtonWarp) self.typeButtonList[2].SAFE_SetEvent(self.__OnClickTypeButtonCTF) self.typeButtonList[0].SetToolTipWindow(self.__CreateGameTypeToolTip(locale.GUILDWAR_NORMAL_TITLE, locale.GUILDWAR_NORMAL_DESCLIST)) self.typeButtonList[1].SetToolTipWindow(self.__CreateGameTypeToolTip(locale.GUILDWAR_WARP_TITLE, locale.GUILDWAR_WARP_DESCLIST)) self.typeButtonList[2].SetToolTipWindow(self.__CreateGameTypeToolTip(locale.GUILDWAR_CTF_TITLE, locale.GUILDWAR_CTF_DESCLIST)) self.__ClickRadioButton(self.typeButtonList, 0) self.SetAcceptEvent(ui.__mem_func__(self.__OnOK)) self.SetCancelEvent(ui.__mem_func__(self.__OnCancel)) def __OnOK(self): text = self.GetText() type = self.GetType() if ""==text: return net.SendChatPacket("/war %s %d" % (text, type)) self.Close() return 1 def __OnCancel(self): self.Close() return 1 def __OnClickTypeButtonNormal(self): self.__ClickTypeRadioButton(0) def __OnClickTypeButtonWarp(self): self.__ClickTypeRadioButton(1) def __OnClickTypeButtonCTF(self): self.__ClickTypeRadioButton(2) def __ClickTypeRadioButton(self, type): self.__ClickRadioButton(self.typeButtonList, type) self.type=type def __ClickRadioButton(self, buttonList, buttonIndex): try: selButton=buttonList[buttonIndex] except IndexError: return for eachButton in buttonList: eachButton.SetUp() selButton.Down() def SetTitle(self, name): self.board.SetTitleName(name) def SetNumberMode(self): self.inputValue.SetNumberMode() def SetSecretMode(self): self.inputValue.SetSecret() def SetFocus(self): self.inputValue.SetFocus() def SetMaxLength(self, length): width = length * 6 + 10 self.inputValue.SetMax(length) self.SetSlotWidth(width) self.SetBoardWidth(max(width + 50, 160)) def SetSlotWidth(self, width): self.inputSlot.SetSize(width, self.inputSlot.GetHeight()) self.inputValue.SetSize(width, self.inputValue.GetHeight()) def SetBoardWidth(self, width): self.board.SetSize(max(width + 50, 160), self.GetHeight()) self.SetSize(max(width + 50, 160), self.GetHeight()) self.UpdateRect() def SetAcceptEvent(self, event): self.acceptButton.SetEvent(event) self.inputValue.OnIMEReturn = event def SetCancelEvent(self, event): self.board.SetCloseEvent(event) self.cancelButton.SetEvent(event) self.inputValue.OnPressEscapeKey = event def GetType(self): return self.type def GetText(self): return self.inputValue.GetText() def __CreateGameTypeToolTip(self, title, descList): toolTip = uiToolTip.ToolTip() toolTip.SetTitle(title) toolTip.AppendSpace(5) for desc in descList: toolTip.AutoAppendTextLine(desc) toolTip.AlignHorizonalCenter() return toolTip class AcceptGuildWarDialog(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.type=0 self.__CreateDialog() def __del__(self): print "---------------------------------------------------------------------------- DELETE AcceptGuildWarDialog" ui.ScriptWindow.__del__(self) def Open(self, guildName, warType): self.guildName=guildName self.warType=warType self.__ClickSelectedTypeRadioButton() self.inputValue.SetText(guildName) self.SetCenterPosition() self.SetTop() self.Show() def GetGuildName(self): return self.guildName def Close(self): self.ClearDictionary() self.board = None self.acceptButton = None self.cancelButton = None self.inputSlot = None self.inputValue = None self.Hide() def __ClickSelectedTypeRadioButton(self): self.__ClickTypeRadioButton(self.warType) def __CreateDialog(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/acceptguildwardialog.py") except: import exception exception.Abort("DeclareGuildWarWindow.__CreateDialog - LoadScript") try: getObject = self.GetChild self.board = getObject("Board") self.typeButtonList=[] self.typeButtonList.append(getObject("NormalButton")) self.typeButtonList.append(getObject("WarpButton")) self.typeButtonList.append(getObject("CTFButton")) self.acceptButton = getObject("AcceptButton") self.cancelButton = getObject("CancelButton") self.inputSlot = getObject("InputSlot") self.inputValue = getObject("InputValue") gameType=getObject("GameType") except: import exception exception.Abort("DeclareGuildWarWindow.__CreateDialog - BindObject") if constInfo.GUILD_WAR_TYPE_SELECT_ENABLE==0: gameType.Hide() self.typeButtonList[0].SAFE_SetEvent(self.__OnClickTypeButtonNormal) self.typeButtonList[1].SAFE_SetEvent(self.__OnClickTypeButtonWarp) self.typeButtonList[2].SAFE_SetEvent(self.__OnClickTypeButtonCTF) self.typeButtonList[0].SetToolTipWindow(self.__CreateGameTypeToolTip(locale.GUILDWAR_NORMAL_TITLE, locale.GUILDWAR_NORMAL_DESCLIST)) self.typeButtonList[1].SetToolTipWindow(self.__CreateGameTypeToolTip(locale.GUILDWAR_WARP_TITLE, locale.GUILDWAR_WARP_DESCLIST)) self.typeButtonList[2].SetToolTipWindow(self.__CreateGameTypeToolTip(locale.GUILDWAR_CTF_TITLE, locale.GUILDWAR_CTF_DESCLIST)) self.__ClickRadioButton(self.typeButtonList, 0) def __OnClickTypeButtonNormal(self): self.__ClickSelectedTypeRadioButton() def __OnClickTypeButtonWarp(self): self.__ClickSelectedTypeRadioButton() def __OnClickTypeButtonCTF(self): self.__ClickSelectedTypeRadioButton() def __ClickTypeRadioButton(self, type): self.__ClickRadioButton(self.typeButtonList, type) self.type=type def __ClickRadioButton(self, buttonList, buttonIndex): try: selButton=buttonList[buttonIndex] except IndexError: return for eachButton in buttonList: eachButton.SetUp() selButton.Down() def SetTitle(self, name): self.board.SetTitleName(name) def SetNumberMode(self): self.inputValue.SetNumberMode() def SetSecretMode(self): self.inputValue.SetSecret() def SetFocus(self): self.inputValue.SetFocus() def SetMaxLength(self, length): width = length * 6 + 10 self.inputValue.SetMax(length) self.SetSlotWidth(width) self.SetBoardWidth(max(width + 50, 160)) def SetSlotWidth(self, width): self.inputSlot.SetSize(width, self.inputSlot.GetHeight()) self.inputValue.SetSize(width, self.inputValue.GetHeight()) def SetBoardWidth(self, width): self.board.SetSize(max(width + 50, 160), self.GetHeight()) self.SetSize(max(width + 50, 160), self.GetHeight()) self.UpdateRect() def SAFE_SetAcceptEvent(self, event): self.SetAcceptEvent(ui.__mem_func__(event)) def SAFE_SetCancelEvent(self, event): self.SetCancelEvent(ui.__mem_func__(event)) def SetAcceptEvent(self, event): self.acceptButton.SetEvent(event) self.inputValue.OnIMEReturn = event def SetCancelEvent(self, event): self.board.SetCloseEvent(event) self.cancelButton.SetEvent(event) self.inputValue.OnPressEscapeKey = event def GetType(self): return self.type def GetText(self): return self.inputValue.GetText() def __CreateGameTypeToolTip(self, title, descList): toolTip = uiToolTip.ToolTip() toolTip.SetTitle(title) toolTip.AppendSpace(5) for desc in descList: toolTip.AutoAppendTextLine(desc) toolTip.AlignHorizonalCenter() return toolTip class GuildWarScoreBoard(ui.ThinBoard): def __init__(self): ui.ThinBoard.__init__(self) self.Initialize() def __del__(self): ui.ThinBoard.__del__(self) def Initialize(self): self.allyGuildID = 0 self.enemyGuildID = 0 self.allyDataDict = {} self.enemyDataDict = {} def Open(self, allyGuildID, enemyGuildID): self.allyGuildID = allyGuildID self.enemyGuildID = enemyGuildID self.SetPosition(10, wndMgr.GetScreenHeight() - 100) mark = ui.MarkBox() mark.SetParent(self) mark.SetIndex(allyGuildID) mark.SetPosition(10, 10 + 18*0) mark.Show() scoreText = ui.TextLine() scoreText.SetParent(self) scoreText.SetPosition(30, 10 + 18*0) scoreText.SetHorizontalAlignLeft() scoreText.Show() self.allyDataDict["NAME"] = guild.GetGuildName(allyGuildID) self.allyDataDict["SCORE"] = 0 self.allyDataDict["MEMBER_COUNT"] = -1 self.allyDataDict["MARK"] = mark self.allyDataDict["TEXT"] = scoreText mark = ui.MarkBox() mark.SetParent(self) mark.SetIndex(enemyGuildID) mark.SetPosition(10, 10 + 18*1) mark.Show() scoreText = ui.TextLine() scoreText.SetParent(self) scoreText.SetPosition(30, 10 + 18*1) scoreText.SetHorizontalAlignLeft() scoreText.Show() self.enemyDataDict["NAME"] = guild.GetGuildName(enemyGuildID) self.enemyDataDict["SCORE"] = 0 self.enemyDataDict["MEMBER_COUNT"] = -1 self.enemyDataDict["MARK"] = mark self.enemyDataDict["TEXT"] = scoreText self.__RefreshName() self.Show() def __GetDataDict(self, ID): if self.allyGuildID == ID: return self.allyDataDict if self.enemyGuildID == ID: return self.enemyDataDict return None def SetScore(self, gainGuildID, opponetGuildID, point): dataDict = self.__GetDataDict(gainGuildID) if not dataDict: return dataDict["SCORE"] = point self.__RefreshName() def UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2): dataDict1 = self.__GetDataDict(guildID1) dataDict2 = self.__GetDataDict(guildID2) if dataDict1: dataDict1["MEMBER_COUNT"] = memberCount1 if dataDict2: dataDict2["MEMBER_COUNT"] = memberCount2 self.__RefreshName() def __RefreshName(self): nameMaxLen = max(len(self.allyDataDict["NAME"]), len(self.enemyDataDict["NAME"])) if -1 == self.allyDataDict["MEMBER_COUNT"] or -1 == self.enemyDataDict["MEMBER_COUNT"]: self.SetSize(30+nameMaxLen*6+8*5, 50) self.allyDataDict["TEXT"].SetText("%s %d" % (self.allyDataDict["NAME"], self.allyDataDict["SCORE"])) self.enemyDataDict["TEXT"].SetText("%s %d" % (self.enemyDataDict["NAME"], self.enemyDataDict["SCORE"])) else: self.SetSize(30+nameMaxLen*6+8*5+15, 50) self.allyDataDict["TEXT"].SetText("%s(%d) %d" % (self.allyDataDict["NAME"], self.allyDataDict["MEMBER_COUNT"], self.allyDataDict["SCORE"])) self.enemyDataDict["TEXT"].SetText("%s(%d) %d" % (self.enemyDataDict["NAME"], self.enemyDataDict["MEMBER_COUNT"], self.enemyDataDict["SCORE"])) class MouseReflector(ui.Window): def __init__(self, parent): ui.Window.__init__(self) self.SetParent(parent) self.AddFlag("not_pick") self.width = self.height = 0 self.isDown = FALSE def Down(self): self.isDown = TRUE def Up(self): self.isDown = FALSE def OnRender(self): if self.isDown: grp.SetColor(ui.WHITE_COLOR) else: grp.SetColor(ui.HALF_WHITE_COLOR) x, y = self.GetGlobalPosition() grp.RenderBar(x+2, y+2, self.GetWidth()-4, self.GetHeight()-4) class EditableTextSlot(ui.ImageBox): def __init__(self, parent, x, y): ui.ImageBox.__init__(self) self.SetParent(parent) self.SetPosition(x, y) self.LoadImage("d:/ymir work/ui/public/Parameter_Slot_02.sub") self.mouseReflector = MouseReflector(self) self.mouseReflector.SetSize(self.GetWidth(), self.GetHeight()) self.Enable = TRUE self.textLine = ui.MakeTextLine(self) self.event = lambda *arg: None self.arg = 0 self.Show() self.mouseReflector.UpdateRect() def __del__(self): ui.ImageBox.__del__(self) def SetText(self, text): self.textLine.SetText(text) def SetEvent(self, event, arg): self.event = event self.arg = arg def Disable(self): self.Enable = FALSE def OnMouseOverIn(self): if not self.Enable: return self.mouseReflector.Show() def OnMouseOverOut(self): if not self.Enable: return self.mouseReflector.Hide() def OnMouseLeftButtonDown(self): if not self.Enable: return self.mouseReflector.Down() def OnMouseLeftButtonUp(self): if not self.Enable: return self.mouseReflector.Up() self.event(self.arg) class CheckBox(ui.ImageBox): def __init__(self, parent, x, y, event, filename = "d:/ymir work/ui/public/Parameter_Slot_01.sub"): ui.ImageBox.__init__(self) self.SetParent(parent) self.SetPosition(x, y) self.LoadImage(filename) self.mouseReflector = MouseReflector(self) self.mouseReflector.SetSize(self.GetWidth(), self.GetHeight()) image = ui.MakeImageBox(self, "d:/ymir work/ui/public/check_image.sub", 0, 0) image.AddFlag("not_pick") image.SetWindowHorizontalAlignCenter() image.SetWindowVerticalAlignCenter() image.Hide() self.Enable = TRUE self.image = image self.event = event self.Show() self.mouseReflector.UpdateRect() def __del__(self): ui.ImageBox.__del__(self) def SetCheck(self, flag): if flag: self.image.Show() else: self.image.Hide() def Disable(self): self.Enable = FALSE def OnMouseOverIn(self): if not self.Enable: return self.mouseReflector.Show() def OnMouseOverOut(self): if not self.Enable: return self.mouseReflector.Hide() def OnMouseLeftButtonDown(self): if not self.Enable: return self.mouseReflector.Down() def OnMouseLeftButtonUp(self): if not self.Enable: return self.mouseReflector.Up() self.event() class ChangeGradeNameDialog(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) def Open(self): self.gradeNameSlot.SetText("") self.gradeNameSlot.SetFocus() xMouse, yMouse = wndMgr.GetMousePosition() self.SetPosition(xMouse - self.GetWidth()/2, yMouse + 50) self.SetTop() self.Show() def Close(self): self.gradeNameSlot.KillFocus() self.Hide() return TRUE def SetGradeNumber(self, gradeNumber): self.gradeNumber = gradeNumber def GetGradeNumber(self): return self.gradeNumber def GetGradeName(self): return self.gradeNameSlot.GetText() def OnPressEscapeKey(self): self.Close() return TRUE class CommentSlot(ui.Window): TEXT_LIMIT = 35 def __init__(self): ui.Window.__init__(self) self.slotImage = ui.MakeImageBox(self, "d:/ymir work/ui/public/Parameter_Slot_06.sub", 0, 0) self.slotImage.AddFlag("not_pick") self.slotSimpleText = ui.MakeTextLine(self) self.slotSimpleText.SetPosition(2, 0) self.slotSimpleText.SetWindowHorizontalAlignLeft() self.slotSimpleText.SetHorizontalAlignLeft() self.bar = ui.SlotBar() self.bar.SetParent(self) self.bar.AddFlag("not_pick") self.bar.Hide() self.slotFullText = ui.MakeTextLine(self) self.slotFullText.SetPosition(2, 0) self.slotFullText.SetWindowHorizontalAlignLeft() self.slotFullText.SetHorizontalAlignLeft() self.SetSize(self.slotImage.GetWidth(), self.slotImage.GetHeight()) self.len = 0 def SetText(self, text): self.len = len(text) if len(text) > self.TEXT_LIMIT: limitText = grpText.GetSplitingTextLine(text, self.TEXT_LIMIT-3, 0) self.slotSimpleText.SetText(limitText + "...") self.bar.SetSize(self.len * 6 + 5, 17) else: self.slotSimpleText.SetText(text) self.slotFullText.SetText(text) self.slotFullText.SetPosition(2, 0) self.slotFullText.Hide() def OnMouseOverIn(self): if self.len > self.TEXT_LIMIT: self.bar.Show() self.slotFullText.Show() def OnMouseOverOut(self): if self.len > self.TEXT_LIMIT: self.bar.Hide() self.slotFullText.Hide() class GuildWindow(ui.ScriptWindow): JOB_NAME = { 0 : locale.JOB_WARRIOR, 1 : locale.JOB_ASSASSIN, 2 : locale.JOB_SURA, 3 : locale.JOB_SHAMAN, } GUILD_SKILL_PASSIVE_SLOT = 0 GUILD_SKILL_ACTIVE_SLOT = 1 GUILD_SKILL_AFFECT_SLOT = 2 GRADE_SLOT_NAME = 0 GRADE_ADD_MEMBER_AUTHORITY = 1 GRADE_REMOVE_MEMBER_AUTHORITY = 2 GRADE_NOTICE_AUTHORITY = 3 GRADE_SKILL_AUTHORITY = 4 MEMBER_LINE_COUNT = 13 class PageWindow(ui.ScriptWindow): def __init__(self, parent, filename): ui.ScriptWindow.__init__(self) self.SetParent(parent) self.filename = filename def GetScriptFileName(self): return self.filename def __init__(self): ui.ScriptWindow.__init__(self) self.isLoaded=0 self.__Initialize() def __del__(self): ui.ScriptWindow.__del__(self) print " ==================================== DESTROIED GUILD WINDOW" def __Initialize(self): self.board = None self.pageName = None self.tabDict = None self.tabButtonDict = None self.pickDialog = None self.questionDialog = None self.offerDialog = None self.popupDialog = None self.moneyDialog = None self.changeGradeNameDialog = None self.popup = None self.popupMessage = None self.commentSlot = None self.pageWindow = None self.tooltipSkill = None self.memberLinePos = 0 self.enemyGuildNameList = [] def Open(self): self.Show() self.SetTop() guildID = net.GetGuildID() self.largeMarkBox.SetIndex(guildID) self.largeMarkBox.SetScale(3) def Close(self): self.__CloseAllGuildMemberPageGradeComboBox() self.offerDialog.Close() self.popupDialog.Hide() self.changeGradeNameDialog.Hide() self.tooltipSkill.Hide() self.Hide() self.pickDialog = None self.questionDialog = None self.popup = None def Destroy(self): self.ClearDictionary() if self.offerDialog: self.offerDialog.Destroy() if self.popupDialog: self.popupDialog.ClearDictionary() if self.changeGradeNameDialog: self.changeGradeNameDialog.ClearDictionary() if self.pageWindow: for window in self.pageWindow.values(): window.ClearDictionary() self.__Initialize() def Show(self): if self.isLoaded==0: self.isLoaded=1 self.__LoadWindow() self.RefreshGuildInfoPage() self.RefreshGuildBoardPage() self.RefreshGuildMemberPage() self.RefreshGuildSkillPage() self.RefreshGuildGradePage() ui.ScriptWindow.Show(self) def __LoadWindow(self): global DISABLE_GUILD_SKILL try: pyScrLoader = ui.PythonScriptLoader() if locale.IsARABIC() : pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow.py") else: pyScrLoader.LoadScriptFile(self, "uiscript/guildwindow.py") self.popupDialog = ui.ScriptWindow() pyScrLoader.LoadScriptFile(self.popupDialog, "UIScript/PopupDialog.py") self.changeGradeNameDialog = ChangeGradeNameDialog() pyScrLoader.LoadScriptFile(self.changeGradeNameDialog, "uiscript/changegradenamedialog.py") if locale.IsARABIC(): self.pageWindow = { "GUILD_INFO" : self.PageWindow(self, "uiscript/guildwindow_guildinfopage_eu.py"), "BOARD" : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"), "MEMBER" : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"), "BASE_INFO" : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"), "SKILL" : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_guildskillpage.py"), "GRADE" : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"), } elif locale.IsJAPAN() : self.pageWindow = { "GUILD_INFO" : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_guildinfopage.py"), "BOARD" : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_boardpage.py"), "MEMBER" : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_memberpage.py"), "BASE_INFO" : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"), "SKILL" : self.PageWindow(self, "uiscript/guildwindow_guildskillpage.py"), "GRADE" : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"), } elif locale.IsVIETNAM() : # ´ÙÇ¥½Ã self.pageWindow = { "GUILD_INFO" : self.PageWindow(self, "uiscript/guildwindow_guildinfopage_eu.py"), "BOARD" : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"), "MEMBER" : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"), "BASE_INFO" : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"), "SKILL" : self.PageWindow(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "guildwindow_guildskillpage.py"), "GRADE" : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"), } elif locale.IsEUROPE() and not app.GetLocalePath() == "locale/ca" : self.pageWindow = { "GUILD_INFO" : self.PageWindow(self, "uiscript/guildwindow_guildinfopage_eu.py"), "BOARD" : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"), "MEMBER" : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"), "BASE_INFO" : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"), "SKILL" : self.PageWindow(self, "uiscript/guildwindow_guildskillpage.py"), "GRADE" : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"), } else: self.pageWindow = { "GUILD_INFO" : self.PageWindow(self, "uiscript/guildwindow_guildinfopage.py"), "BOARD" : self.PageWindow(self, "uiscript/guildwindow_boardpage.py"), "MEMBER" : self.PageWindow(self, "uiscript/guildwindow_memberpage.py"), "BASE_INFO" : self.PageWindow(self, "uiscript/guildwindow_baseinfopage.py"), "SKILL" : self.PageWindow(self, "uiscript/guildwindow_guildskillpage.py"), "GRADE" : self.PageWindow(self, "uiscript/guildwindow_gradepage.py"), } for window in self.pageWindow.values(): pyScrLoader.LoadScriptFile(window, window.GetScriptFileName()) except: import exception exception.Abort("GuildWindow.__LoadWindow.LoadScript") try: getObject = self.GetChild self.board = getObject("Board") self.pageName = { "GUILD_INFO" : locale.GUILD_TILE_INFO, "BOARD" : locale.GUILD_TILE_BOARD, "MEMBER" : locale.GUILD_TILE_MEMBER, "BASE_INFO" : locale.GUILD_TILE_BASEINFO, "SKILL" : locale.GUILD_TILE_SKILL, "GRADE" : locale.GUILD_TILE_GRADE, } self.tabDict = { "GUILD_INFO" : getObject("Tab_01"), "BOARD" : getObject("Tab_02"), "MEMBER" : getObject("Tab_03"), "BASE_INFO" : getObject("Tab_04"), "SKILL" : getObject("Tab_05"), "GRADE" : getObject("Tab_06"), } self.tabButtonDict = { "GUILD_INFO" : getObject("Tab_Button_01"), "BOARD" : getObject("Tab_Button_02"), "MEMBER" : getObject("Tab_Button_03"), "BASE_INFO" : getObject("Tab_Button_04"), "SKILL" : getObject("Tab_Button_05"), "GRADE" : getObject("Tab_Button_06"), } ## QuestionDialog self.popupMessage = self.popupDialog.GetChild("message") self.popupDialog.GetChild("accept").SetEvent(ui.__mem_func__(self.popupDialog.Hide)) ## ChangeGradeName self.changeGradeNameDialog.GetChild("AcceptButton").SetEvent(ui.__mem_func__(self.OnChangeGradeName)) self.changeGradeNameDialog.GetChild("CancelButton").SetEvent(ui.__mem_func__(self.changeGradeNameDialog.Hide)) self.changeGradeNameDialog.GetChild("Board").SetCloseEvent(ui.__mem_func__(self.changeGradeNameDialog.Hide)) self.changeGradeNameDialog.gradeNameSlot = self.changeGradeNameDialog.GetChild("GradeNameValue") self.changeGradeNameDialog.gradeNameSlot.OnIMEReturn = ui.__mem_func__(self.OnChangeGradeName) self.changeGradeNameDialog.gradeNameSlot.OnPressEscapeKey = ui.__mem_func__(self.changeGradeNameDialog.Close) ## Comment self.commentSlot = self.pageWindow["BOARD"].GetChild("CommentValue") self.commentSlot.OnIMEReturn = ui.__mem_func__(self.OnPostComment) #self.commentSlot.OnKeyDown = ui.__mem_func__(self.OnKeyDownInBoardPage) self.commentSlot.OnKeyDown = lambda key, argSelf=self: argSelf.OnKeyDownInBoardPage(key) ## RefreshButton self.pageWindow["BOARD"].GetChild("RefreshButton").SetEvent(ui.__mem_func__(self.OnRefreshComments)) ## ScrollBar scrollBar = self.pageWindow["MEMBER"].GetChild("ScrollBar") scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScrollMemberLine)) self.pageWindow["MEMBER"].scrollBar = scrollBar except: import exception exception.Abort("GuildWindow.__LoadWindow.BindObject") self.__MakeInfoPage() self.__MakeBoardPage() self.__MakeMemberPage() self.__MakeBaseInfoPage() self.__MakeSkillPage() self.__MakeGradePage() for page in self.pageWindow.values(): page.UpdateRect() for key, btn in self.tabButtonDict.items(): btn.SetEvent(self.SelectPage, key) self.tabButtonDict["BASE_INFO"].Disable() if DISABLE_GUILD_SKILL: self.tabButtonDict["SKILL"].Disable() self.board.SetCloseEvent(ui.__mem_func__(self.Close)) self.board.SetTitleColor(0xffffffff) self.SelectPage("GUILD_INFO") self.offerDialog = uiPickMoney.PickMoneyDialog() self.offerDialog.LoadDialog() self.offerDialog.SetMax(9) self.offerDialog.SetTitleName(locale.GUILD_OFFER_EXP) self.offerDialog.SetAcceptEvent(ui.__mem_func__(self.OnOffer)) def __MakeInfoPage(self): page = self.pageWindow["GUILD_INFO"] try: page.nameSlot = page.GetChild("GuildNameValue") page.masterNameSlot = page.GetChild("GuildMasterNameValue") page.guildLevelSlot = page.GetChild("GuildLevelValue") page.curExpSlot = page.GetChild("CurrentExperienceValue") page.lastExpSlot = page.GetChild("LastExperienceValue") page.memberCountSlot = page.GetChild("GuildMemberCountValue") page.levelAverageSlot = page.GetChild("GuildMemberLevelAverageValue") page.uploadMarkButton = page.GetChild("UploadGuildMarkButton") page.uploadSymbolButton = page.GetChild("UploadGuildSymbolButton") page.declareWarButton = page.GetChild("DeclareWarButton") try: page.guildMoneySlot = page.GetChild("GuildMoneyValue") except KeyError: page.guildMoneySlot = None try: page.GetChild("DepositButton").SetEvent(ui.__mem_func__(self.__OnClickDepositButton)) page.GetChild("WithdrawButton").SetEvent(ui.__mem_func__(self.__OnClickWithdrawButton)) except KeyError: pass page.uploadMarkButton.SetEvent(ui.__mem_func__(self.__OnClickSelectGuildMarkButton)) page.uploadSymbolButton.SetEvent(ui.__mem_func__(self.__OnClickSelectGuildSymbolButton)) page.declareWarButton.SetEvent(ui.__mem_func__(self.__OnClickDeclareWarButton)) page.GetChild("OfferButton").SetEvent(ui.__mem_func__(self.__OnClickOfferButton)) page.GetChild("EnemyGuildCancel1").Hide() page.GetChild("EnemyGuildCancel2").Hide() page.GetChild("EnemyGuildCancel3").Hide() page.GetChild("EnemyGuildCancel4").Hide() page.GetChild("EnemyGuildCancel5").Hide() page.GetChild("EnemyGuildCancel6").Hide() self.enemyGuildNameList.append(page.GetChild("EnemyGuildName1")) self.enemyGuildNameList.append(page.GetChild("EnemyGuildName2")) self.enemyGuildNameList.append(page.GetChild("EnemyGuildName3")) self.enemyGuildNameList.append(page.GetChild("EnemyGuildName4")) self.enemyGuildNameList.append(page.GetChild("EnemyGuildName5")) self.enemyGuildNameList.append(page.GetChild("EnemyGuildName6")) self.largeMarkBox = page.GetChild("LargeGuildMark") except: import exception exception.Abort("GuildWindow.__MakeInfoPage") self.largeMarkBox.AddFlag("not_pick") self.markSelectDialog=uiUploadMark.MarkSelectDialog() self.markSelectDialog.SAFE_SetSelectEvent(self.__OnSelectMark) self.symbolSelectDialog=uiUploadMark.SymbolSelectDialog() self.symbolSelectDialog.SAFE_SetSelectEvent(self.__OnSelectSymbol) def __MakeBoardPage(self): i = 0 lineStep = 20 page = self.pageWindow["BOARD"] page.boardDict = {} for i in xrange(12): yPos = 25 + i * lineStep ## NoticeMark if locale.IsJAPAN(): noticeMarkImage = ui.MakeImageBox(page, "d:/ymir work/ui/game/guild/notice_mark.sub", 15, yPos+3) else: noticeMarkImage = ui.MakeImageBox(page, "d:/ymir work/ui/game/guild/notice_mark.sub", 5, yPos+3) noticeMarkImage.Hide() page.Children.append(noticeMarkImage) ## Name if locale.IsJAPAN(): nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_100x18.sub", 9, yPos) else: nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_03.sub", 15, yPos) nameSlot = ui.MakeTextLine(nameSlotImage) page.Children.append(nameSlotImage) page.Children.append(nameSlot) ## Delete Button deleteButton = ui.MakeButton(page, 340, yPos + 3, locale.GUILD_DELETE, "d:/ymir work/ui/public/", "close_button_01.sub", "close_button_02.sub", "close_button_03.sub") deleteButton.SetEvent(ui.__mem_func__(self.OnDeleteComment), i) page.Children.append(deleteButton) ## Comment commentSlot = CommentSlot() commentSlot.SetParent(page) commentSlot.SetPosition(114, yPos) commentSlot.Show() page.Children.append(commentSlot) boardSlotList = [] boardSlotList.append(noticeMarkImage) boardSlotList.append(nameSlot) boardSlotList.append(commentSlot) page.boardDict[i] = boardSlotList ## PostComment - Have to make this here for that fit tooltip's position. postCommentButton = ui.MakeButton(page, 337, 273, locale.GUILD_COMMENT, "d:/ymir work/ui/game/taskbar/", "Send_Chat_Button_01.sub", "Send_Chat_Button_02.sub", "Send_Chat_Button_03.sub") postCommentButton.SetEvent(ui.__mem_func__(self.OnPostComment)) page.Children.append(postCommentButton) def __MakeMemberPage(self): page = self.pageWindow["MEMBER"] lineStep = 20 page.memberDict = {} for i in xrange(self.MEMBER_LINE_COUNT): inverseLineIndex = self.MEMBER_LINE_COUNT - i - 1 yPos = 28 + inverseLineIndex*lineStep ## Name if locale.IsJAPAN(): nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_100x18.sub", 15, yPos) else: nameSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_03.sub", 10, yPos) nameSlot = ui.MakeTextLine(nameSlotImage) page.Children.append(nameSlotImage) page.Children.append(nameSlot) ## Grade gradeSlot = ui.ComboBox() gradeSlot.SetParent(page) if locale.IsJAPAN(): gradeSlot.SetPosition(117, yPos-1) else: gradeSlot.SetPosition(101, yPos-1) gradeSlot.SetSize(61, 18) gradeSlot.SetEvent(lambda gradeNumber, lineIndex=inverseLineIndex, argSelf=proxy(self): argSelf.OnChangeMemberGrade(lineIndex, gradeNumber)) gradeSlot.Show() page.Children.append(gradeSlot) ## Job if locale.IsJAPAN(): jobSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 181, yPos) else: jobSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 170, yPos) jobSlot = ui.MakeTextLine(jobSlotImage) page.Children.append(jobSlotImage) page.Children.append(jobSlot) ## Level if locale.IsJAPAN(): levelSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 221, yPos) else: levelSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 210, yPos) levelSlot = ui.MakeTextLine(levelSlotImage) page.Children.append(levelSlotImage) page.Children.append(levelSlot) ## Offer if locale.IsJAPAN(): offerSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 261, yPos) else: offerSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 250, yPos) offerSlot = ui.MakeTextLine(offerSlotImage) page.Children.append(offerSlotImage) page.Children.append(offerSlot) ## General Enable event = lambda argSelf=proxy(self), argIndex=inverseLineIndex: apply(argSelf.OnEnableGeneral, (argIndex,)) if locale.IsJAPAN(): generalEnableCheckBox = CheckBox(page, 307, yPos, event, "d:/ymir work/ui/public/Parameter_Slot_00.sub") else: generalEnableCheckBox = CheckBox(page, 297, yPos, event, "d:/ymir work/ui/public/Parameter_Slot_00.sub") page.Children.append(generalEnableCheckBox) memberSlotList = [] memberSlotList.append(nameSlot) memberSlotList.append(gradeSlot) memberSlotList.append(jobSlot) memberSlotList.append(levelSlot) memberSlotList.append(offerSlot) memberSlotList.append(generalEnableCheckBox) page.memberDict[inverseLineIndex] = memberSlotList def __MakeBaseInfoPage(self): page = self.pageWindow["BASE_INFO"] page.buildingDataDict = {} lineStep = 20 GUILD_BUILDING_MAX_NUM = 7 yPos = 95 + 35 for i in xrange(GUILD_BUILDING_MAX_NUM): nameSlotImage = ui.MakeSlotBar(page, 15, yPos, 78, 17) nameSlot = ui.MakeTextLine(nameSlotImage) page.Children.append(nameSlotImage) page.Children.append(nameSlot) nameSlot.SetText(locale.GUILD_BUILDING_NAME) gradeSlotImage = ui.MakeSlotBar(page, 99, yPos, 26, 17) gradeSlot = ui.MakeTextLine(gradeSlotImage) page.Children.append(gradeSlotImage) page.Children.append(gradeSlot) gradeSlot.SetText(locale.GUILD_BUILDING_GRADE) RESOURCE_MAX_NUM = 6 for j in xrange(RESOURCE_MAX_NUM): resourceSlotImage = ui.MakeSlotBar(page, 131 + 29*j, yPos, 26, 17) resourceSlot = ui.MakeTextLine(resourceSlotImage) page.Children.append(resourceSlotImage) page.Children.append(resourceSlot) resourceSlot.SetText(locale.GUILD_GEM) event = lambda *arg: None powerSlot = CheckBox(page, 308, yPos, event, "d:/ymir work/ui/public/Parameter_Slot_00.sub") page.Children.append(powerSlot) yPos += lineStep def __MakeSkillPage(self): page = self.pageWindow["SKILL"] page.skillPoint = page.GetChild("Skill_Plus_Value") page.passiveSlot = page.GetChild("Passive_Skill_Slot_Table") page.activeSlot = page.GetChild("Active_Skill_Slot_Table") page.affectSlot = page.GetChild("Affect_Slot_Table") page.gpGauge = page.GetChild("Dragon_God_Power_Gauge") page.gpValue = page.GetChild("Dragon_God_Power_Value") page.btnHealGSP = page.GetChild("Heal_GSP_Button") page.activeSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE) page.activeSlot.SetOverInItemEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OverInItem(slotNumber, type)) page.activeSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) page.activeSlot.SetSelectItemSlotEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OnPickUpGuildSkill(slotNumber, type)) page.activeSlot.SetUnselectItemSlotEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OnUseGuildSkill(slotNumber, type)) page.activeSlot.SetPressedSlotButtonEvent(lambda slotNumber, type=self.GUILD_SKILL_ACTIVE_SLOT: self.OnUpGuildSkill(slotNumber, type)) page.activeSlot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\ "d:/ymir work/ui/game/windows/btn_plus_over.sub",\ "d:/ymir work/ui/game/windows/btn_plus_down.sub") page.passiveSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE) page.passiveSlot.SetOverInItemEvent(lambda slotNumber, type=self.GUILD_SKILL_PASSIVE_SLOT: self.OverInItem(slotNumber, type)) page.passiveSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) page.passiveSlot.SetPressedSlotButtonEvent(lambda slotNumber, type=self.GUILD_SKILL_PASSIVE_SLOT: self.OnUpGuildSkill(slotNumber, type)) page.passiveSlot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\ "d:/ymir work/ui/game/windows/btn_plus_over.sub",\ "d:/ymir work/ui/game/windows/btn_plus_down.sub") page.affectSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE) page.affectSlot.SetOverInItemEvent(lambda slotNumber, type=self.GUILD_SKILL_AFFECT_SLOT: self.OverInItem(slotNumber, type)) page.affectSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) page.btnHealGSP.SetEvent(ui.__mem_func__(self.__OnOpenHealGSPBoard)) ## Passive """ for i in xrange(len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)): slotIndex = page.passiveSlot.GetStartIndex()+i skillIndex = playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST[i] page.passiveSlot.SetSkillSlot(slotIndex, skillIndex, 0) page.passiveSlot.RefreshSlot() guild.SetSkillIndex(slotIndex, i) """ ## Active for i in xrange(len(playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST)): slotIndex = page.activeSlot.GetStartIndex()+i skillIndex = playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST[i] page.activeSlot.SetSkillSlot(slotIndex, skillIndex, 0) page.activeSlot.SetCoverButton(slotIndex) page.activeSlot.RefreshSlot() guild.SetSkillIndex(slotIndex, len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)+i) def __MakeGradePage(self): lineStep = 18 page = self.pageWindow["GRADE"] page.gradeDict = {} for i in xrange(15): yPos = 22 + i*lineStep index = i+1 ## GradeNumber gradeNumberSlotImage = ui.MakeImageBox(page, "d:/ymir work/ui/public/Parameter_Slot_00.sub", 14, yPos) gradeNumberSlot = ui.MakeTextLine(gradeNumberSlotImage) gradeNumberSlot.SetText(str(i+1)) page.Children.append(gradeNumberSlotImage) page.Children.append(gradeNumberSlot) ## GradeName gradeNameSlot = EditableTextSlot(page, 58, yPos) gradeNameSlot.SetEvent(ui.__mem_func__(self.OnOpenChangeGradeName), index) page.Children.append(gradeNameSlot) ## Invite Authority event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<0: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority)) inviteAuthorityCheckBox = CheckBox(page, 124, yPos, event) page.Children.append(inviteAuthorityCheckBox) ## DriveOut Authority event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<1: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority)) driveoutAuthorityCheckBox = CheckBox(page, 181, yPos, event) page.Children.append(driveoutAuthorityCheckBox) ## Notice Authority event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<2: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority)) noticeAuthorityCheckBox = CheckBox(page, 238, yPos, event) page.Children.append(noticeAuthorityCheckBox) ## Skill Authority event = lambda argSelf=proxy(self), argIndex=index, argAuthority=1<<3: apply(argSelf.OnCheckAuthority, (argIndex,argAuthority)) skillAuthorityCheckBox = CheckBox(page, 295, yPos, event) page.Children.append(skillAuthorityCheckBox) gradeSlotList = [] gradeSlotList.append(gradeNameSlot) gradeSlotList.append(inviteAuthorityCheckBox) gradeSlotList.append(driveoutAuthorityCheckBox) gradeSlotList.append(noticeAuthorityCheckBox) gradeSlotList.append(skillAuthorityCheckBox) page.gradeDict[index] = gradeSlotList masterSlotList = page.gradeDict[1] for slot in masterSlotList: slot.Disable() def CanOpen(self): return guild.IsGuildEnable() def Open(self): self.Show() self.SetTop() guildID = net.GetGuildID() self.largeMarkBox.SetIndex(guildID) self.largeMarkBox.SetScale(3) def Close(self): self.__CloseAllGuildMemberPageGradeComboBox() self.offerDialog.Close() self.popupDialog.Hide() self.changeGradeNameDialog.Hide() self.Hide() if self.tooltipSkill: self.tooltipSkill.Hide() self.pickDialog = None self.questionDialog = None self.moneyDialog = None def Destroy(self): self.ClearDictionary() self.board = None self.pageName = None self.tabDict = None self.tabButtonDict = None self.pickDialog = None self.questionDialog = None self.markSelectDialog = None self.symbolSelectDialog = None if self.offerDialog: self.offerDialog.Destroy() self.offerDialog = None if self.popupDialog: self.popupDialog.ClearDictionary() self.popupDialog = None if self.changeGradeNameDialog: self.changeGradeNameDialog.ClearDictionary() self.changeGradeNameDialog = None self.popupMessage = None self.commentSlot = None if self.pageWindow: for window in self.pageWindow.values(): window.ClearDictionary() self.pageWindow = None self.tooltipSkill = None self.moneyDialog = None self.enemyGuildNameList = [] def DeleteGuild(self): self.RefreshGuildInfoPage() self.RefreshGuildBoardPage() self.RefreshGuildMemberPage() self.RefreshGuildSkillPage() self.RefreshGuildGradePage() self.Hide() def SetSkillToolTip(self, tooltipSkill): self.tooltipSkill = tooltipSkill def SelectPage(self, arg): if "BOARD" == arg: self.OnRefreshComments() for key, btn in self.tabButtonDict.items(): if arg != key: btn.SetUp() for key, img in self.tabDict.items(): if arg == key: img.Show() else: img.Hide() for key, page in self.pageWindow.items(): if arg == key: page.Show() else: page.Hide() self.board.SetTitleName(self.pageName[arg]) self.__CloseAllGuildMemberPageGradeComboBox() def __CloseAllGuildMemberPageGradeComboBox(self): page = self.pageWindow["MEMBER"] for key, slotList in page.memberDict.items(): slotList[1].CloseListBox() def RefreshGuildInfoPage(self): if self.isLoaded==0: return global DISABLE_DECLARE_WAR page = self.pageWindow["GUILD_INFO"] page.nameSlot.SetText(guild.GetGuildName()) page.masterNameSlot.SetText(guild.GetGuildMasterName()) page.guildLevelSlot.SetText(str(guild.GetGuildLevel())) if page.guildMoneySlot: page.guildMoneySlot.SetText(str(guild.GetGuildMoney())) curExp, lastExp = guild.GetGuildExperience() curExp *= 100 lastExp *= 100 page.curExpSlot.SetText(str(curExp)) page.lastExpSlot.SetText(str(lastExp)) curMemberCount, maxMemberCount = guild.GetGuildMemberCount() if maxMemberCount== 0xffff: page.memberCountSlot.SetText("%d / %s " % (curMemberCount, locale.GUILD_MEMBER_COUNT_INFINITY)) else: page.memberCountSlot.SetText("%d / %d" % (curMemberCount, maxMemberCount)) page.levelAverageSlot.SetText(str(guild.GetGuildMemberLevelAverage())) ## ±æµåÀ常 ±æµå ¸¶Å©¿Í ±æµåÀü ½Åû ¹öÆ°À» º¼ ¼ö ÀÖÀ½ mainCharacterName = player.GetMainCharacterName() masterName = guild.GetGuildMasterName() if mainCharacterName == masterName: page.uploadMarkButton.Show() if DISABLE_DECLARE_WAR: page.declareWarButton.Hide() else: page.declareWarButton.Show() if guild.HasGuildLand(): page.uploadSymbolButton.Show() else: page.uploadSymbolButton.Hide() else: page.uploadMarkButton.Hide() page.declareWarButton.Hide() page.uploadSymbolButton.Hide() ## Refresh ½Ã¿¡ ±æµåÀü Á¤º¸ ¾÷µ¥ÀÌÆ® for i in xrange(guild.ENEMY_GUILD_SLOT_MAX_COUNT): name = guild.GetEnemyGuildName(i) nameTextLine = self.enemyGuildNameList[i] if name: nameTextLine.SetText(name) else: nameTextLine.SetText(locale.GUILD_INFO_ENEMY_GUILD_EMPTY) def __GetGuildBoardCommentData(self, index): commentID, chrName, comment = guild.GetGuildBoardCommentData(index) if 0==commentID: if ""==chrName: chrName=locale.UI_NONAME if ""==comment: comment=locale.UI_NOCONTENTS return commentID, chrName, comment def RefreshGuildBoardPage(self): if self.isLoaded==0: return page = self.pageWindow["BOARD"] self.BOARD_LINE_MAX_NUM = 12 lineIndex = 0 commentCount = guild.GetGuildBoardCommentCount() for i in xrange(commentCount): commentID, chrName, comment = self.__GetGuildBoardCommentData(i) if not comment: continue slotList = page.boardDict[lineIndex] if "!" == comment[0]: slotList[0].Show() slotList[1].SetText(chrName) slotList[2].SetText(comment[1:]) else: slotList[0].Hide() slotList[1].SetText(chrName) slotList[2].SetText(comment) lineIndex += 1 for i in xrange(self.BOARD_LINE_MAX_NUM - lineIndex): slotList = page.boardDict[lineIndex+i] slotList[0].Hide() slotList[1].SetText("") slotList[2].SetText("") def RefreshGuildMemberPage(self): if self.isLoaded==0: return page = self.pageWindow["MEMBER"] ## ScrollBar count = guild.GetMemberCount() if count > self.MEMBER_LINE_COUNT: page.scrollBar.SetMiddleBarSize(float(self.MEMBER_LINE_COUNT) / float(count)) page.scrollBar.Show() else: page.scrollBar.Hide() self.RefreshGuildMemberPageGradeComboBox() self.RefreshGuildMemberPageMemberList() def RefreshGuildMemberPageMemberList(self): if self.isLoaded==0: return page = self.pageWindow["MEMBER"] for line, slotList in page.memberDict.items(): gradeComboBox = slotList[1] gradeComboBox.Disable() if not guild.IsMember(line): slotList[0].SetText("") slotList[2].SetText("") slotList[3].SetText("") slotList[4].SetText("") slotList[5].SetCheck(FALSE) continue pid, name, grade, race, level, offer, general = self.GetMemberData(line) if pid < 0: continue job = chr.RaceToJob(race) guildExperienceSummary = guild.GetGuildExperienceSummary() offerPercentage = 0 if guildExperienceSummary > 0: offerPercentage = int(float(offer) / float(guildExperienceSummary) * 100.0) slotList[0].SetText(name) slotList[2].SetText(self.JOB_NAME.get(job, "?")) slotList[3].SetText(str(level)) slotList[4].SetText(str(offerPercentage) + "%") slotList[5].SetCheck(general) gradeComboBox.SetCurrentItem(guild.GetGradeName(grade)) if 1 != grade: gradeComboBox.Enable() def RefreshGuildMemberPageGradeComboBox(self): if self.isLoaded==0: return page = self.pageWindow["MEMBER"] self.CAN_CHANGE_GRADE_COUNT = 15 - 1 for key, slotList in page.memberDict.items(): gradeComboBox = slotList[1] gradeComboBox.Disable() if not guild.IsMember(key): continue pid, name, grade, job, level, offer, general = self.GetMemberData(key) if pid < 0: continue gradeComboBox.ClearItem() for i in xrange(self.CAN_CHANGE_GRADE_COUNT): gradeComboBox.InsertItem(i+2, guild.GetGradeName(i+2)) gradeComboBox.SetCurrentItem(guild.GetGradeName(grade)) if 1 != grade: gradeComboBox.Enable() def RefreshGuildSkillPage(self): if self.isLoaded==0: return page = self.pageWindow["SKILL"] curPoint, maxPoint = guild.GetDragonPowerPoint() maxPoint = max(maxPoint, 1) page.gpValue.SetText(str(curPoint) + " / " + str(maxPoint)) percentage = (float(curPoint) / float(maxPoint) * 100) * (float(173) / float(95)) page.gpGauge.SetPercentage(int(percentage), 100) skillPoint = guild.GetGuildSkillPoint() page.skillPoint.SetText(str(skillPoint)) page.passiveSlot.HideAllSlotButton() page.activeSlot.HideAllSlotButton() ## Passive """ for i in xrange(len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)): slotIndex = page.passiveSlot.GetStartIndex()+i skillIndex = playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST[i] skillLevel = guild.GetSkillLevel(slotIndex) skillMaxLevel = skill.GetSkillMaxLevel(skillIndex) page.passiveSlot.SetSlotCount(slotIndex, skillLevel) if skillPoint > 0: if skillLevel < skillMaxLevel: page.passiveSlot.ShowSlotButton(slotIndex) """ ## Active for i in xrange(len(playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST)): slotIndex = page.activeSlot.GetStartIndex()+i skillIndex = playerSettingModule.ACTIVE_GUILD_SKILL_INDEX_LIST[i] skillLevel = guild.GetSkillLevel(slotIndex) skillMaxLevel = skill.GetSkillMaxLevel(skillIndex) page.activeSlot.SetSlotCount(slotIndex, skillLevel) if skillLevel <= 0: page.activeSlot.DisableCoverButton(slotIndex) else: page.activeSlot.EnableCoverButton(slotIndex) if skillPoint > 0: if skillLevel < skillMaxLevel: page.activeSlot.ShowSlotButton(slotIndex) def RefreshGuildGradePage(self): if self.isLoaded==0: return page = self.pageWindow["GRADE"] for key, slotList in page.gradeDict.items(): name, authority = guild.GetGradeData(int(key)) slotList[self.GRADE_SLOT_NAME].SetText(name) slotList[self.GRADE_ADD_MEMBER_AUTHORITY].SetCheck(authority & guild.AUTH_ADD_MEMBER) slotList[self.GRADE_REMOVE_MEMBER_AUTHORITY].SetCheck(authority & guild.AUTH_REMOVE_MEMBER) slotList[self.GRADE_NOTICE_AUTHORITY].SetCheck(authority & guild.AUTH_NOTICE) slotList[self.GRADE_SKILL_AUTHORITY].SetCheck(authority & guild.AUTH_SKILL) ## GuildInfo def __PopupMessage(self, msg): self.popupMessage.SetText(msg) self.popupDialog.SetTop() self.popupDialog.Show() def __OnClickSelectGuildMarkButton(self): if guild.GetGuildLevel() < int(locale.GUILD_MARK_MIN_LEVEL): self.__PopupMessage(locale.GUILD_MARK_NOT_ENOUGH_LEVEL) elif not guild.MainPlayerHasAuthority(guild.AUTH_NOTICE): self.__PopupMessage(locale.GUILD_NO_NOTICE_PERMISSION) else: self.markSelectDialog.Open() def __OnClickSelectGuildSymbolButton(self): if guild.MainPlayerHasAuthority(guild.AUTH_NOTICE): self.symbolSelectDialog.Open() else: self.__PopupMessage(locale.GUILD_NO_NOTICE_PERMISSION) def __OnClickDeclareWarButton(self): inputDialog = DeclareGuildWarDialog() inputDialog.Open() self.inputDialog = inputDialog def __OnSelectMark(self, markFileName): ret = net.UploadMark("upload/"+markFileName) # MARK_BUG_FIX if net.ERROR_MARK_UPLOAD_NEED_RECONNECT == ret: self.__PopupMessage(locale.UPLOAD_MARK_UPLOAD_NEED_RECONNECT); return ret # END_OF_MARK_BUG_FIX def __OnSelectSymbol(self, symbolFileName): net.UploadSymbol("upload/"+symbolFileName) def __OnClickOfferButton(self): curEXP = player.GetStatus(player.EXP) if curEXP <= 100: self.__PopupMessage(locale.GUILD_SHORT_EXP); return self.offerDialog.Open(curEXP, 100) def __OnClickDepositButton(self): moneyDialog = uiPickMoney.PickMoneyDialog() moneyDialog.LoadDialog() moneyDialog.SetMax(6) moneyDialog.SetTitleName(locale.GUILD_DEPOSIT) moneyDialog.SetAcceptEvent(ui.__mem_func__(self.OnDeposit)) moneyDialog.Open(player.GetMoney()) self.moneyDialog = moneyDialog def __OnClickWithdrawButton(self): moneyDialog = uiPickMoney.PickMoneyDialog() moneyDialog.LoadDialog() moneyDialog.SetMax(6) moneyDialog.SetTitleName(locale.GUILD_WITHDRAW) moneyDialog.SetAcceptEvent(ui.__mem_func__(self.OnWithdraw)) moneyDialog.Open(guild.GetGuildMoney()) self.moneyDialog = moneyDialog def __OnBlock(self): popup = uiCommon.PopupDialog() popup.SetText(locale.NOT_YET_SUPPORT) popup.SetAcceptEvent(self.__OnClosePopupDialog) popup.Open() self.popup = popup def __OnClosePopupDialog(self): self.popup = None def OnDeposit(self, money): net.SendGuildDepositMoneyPacket(money) def OnWithdraw(self, money): net.SendGuildWithdrawMoneyPacket(money) def OnOffer(self, exp): net.SendGuildOfferPacket(exp) ## Board def OnPostComment(self): text = self.commentSlot.GetText() if not text: return FALSE net.SendGuildPostCommentPacket(text[:50]) self.commentSlot.SetText("") return TRUE def OnDeleteComment(self, index): commentID, chrName, comment = self.__GetGuildBoardCommentData(index) net.SendGuildDeleteCommentPacket(commentID) def OnRefreshComments(self): net.SendGuildRefreshCommentsPacket(0) def OnKeyDownInBoardPage(self, key): if key == 63: self.OnRefreshComments() return TRUE ## Member ## OnEnableGeneral def OnChangeMemberGrade(self, lineIndex, gradeNumber): PID = guild.MemberIndexToPID(lineIndex + self.memberLinePos) net.SendGuildChangeMemberGradePacket(PID, gradeNumber) def OnEnableGeneral(self, lineIndex): if not guild.IsMember(lineIndex): return pid, name, grade, job, level, offer, general = self.GetMemberData(lineIndex) if pid < 0: return net.SendGuildChangeMemberGeneralPacket(pid, 1 - general) ## Grade def OnOpenChangeGradeName(self, arg): self.changeGradeNameDialog.SetGradeNumber(arg) self.changeGradeNameDialog.Open() def OnChangeGradeName(self): self.changeGradeNameDialog.Hide() gradeNumber = self.changeGradeNameDialog.GetGradeNumber() gradeName = self.changeGradeNameDialog.GetGradeName() if len(gradeName) == 0: gradeName = locale.GUILD_DEFAULT_GRADE net.SendGuildChangeGradeNamePacket(gradeNumber, gradeName) return TRUE def OnCheckAuthority(self, argIndex, argAuthority): name, authority = guild.GetGradeData(argIndex) net.SendGuildChangeGradeAuthorityPacket(argIndex, authority ^ argAuthority) def OnScrollMemberLine(self): scrollBar = self.pageWindow["MEMBER"].scrollBar pos = scrollBar.GetPos() count = guild.GetMemberCount() newLinePos = int(float(count - self.MEMBER_LINE_COUNT) * pos) if newLinePos != self.memberLinePos: self.memberLinePos = newLinePos self.RefreshGuildMemberPageMemberList() self.__CloseAllGuildMemberPageGradeComboBox() def GetMemberData(self, localPos): return guild.GetMemberData(localPos + self.memberLinePos) ## Guild Skill def __OnOpenHealGSPBoard(self): curPoint, maxPoint = guild.GetDragonPowerPoint() if maxPoint - curPoint <= 0: self.__PopupMessage(locale.GUILD_CANNOT_HEAL_GSP_ANYMORE) return pickDialog = uiPickMoney.PickMoneyDialog() pickDialog.LoadDialog() pickDialog.SetMax(9) pickDialog.SetTitleName(locale.GUILD_HEAL_GSP) pickDialog.SetAcceptEvent(ui.__mem_func__(self.__OnOpenHealGSPQuestionDialog)) pickDialog.Open(maxPoint - curPoint, 1) self.pickDialog = pickDialog def __OnOpenHealGSPQuestionDialog(self, healGSP): money = healGSP * constInfo.GUILD_MONEY_PER_GSP questionDialog = uiCommon.QuestionDialog() questionDialog.SetText(locale.GUILD_DO_YOU_HEAL_GSP % (money, healGSP)) questionDialog.SetAcceptEvent(ui.__mem_func__(self.__OnHealGSP)) questionDialog.SetCancelEvent(ui.__mem_func__(self.__OnCloseQuestionDialog)) questionDialog.SetWidth(400) questionDialog.Open() questionDialog.healGSP = healGSP self.questionDialog = questionDialog def __OnHealGSP(self): net.SendGuildChargeGSPPacket(self.questionDialog.healGSP) self.__OnCloseQuestionDialog() def __OnCloseQuestionDialog(self): if self.questionDialog: self.questionDialog.Close() self.questionDialog = None def OnPickUpGuildSkill(self, skillSlotIndex, type): mouseController = mouseModule.mouseController if FALSE == mouseController.isAttached(): skillIndex = player.GetSkillIndex(skillSlotIndex) skillLevel = guild.GetSkillLevel(skillSlotIndex) if skill.CanUseSkill(skillIndex) and skillLevel > 0: if app.IsPressed(app.DIK_LCONTROL): player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, skillSlotIndex) return mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, skillSlotIndex, skillIndex) else: mouseController.DeattachObject() def OnUseGuildSkill(self, slotNumber, type): skillIndex = player.GetSkillIndex(slotNumber) skillLevel = guild.GetSkillLevel(slotNumber) if skillLevel <= 0: return player.UseGuildSkill(slotNumber) def OnUpGuildSkill(self, slotNumber, type): skillIndex = player.GetSkillIndex(slotNumber) net.SendChatPacket("/gskillup " + str(skillIndex)) def OnUseSkill(self, slotNumber, coolTime): if self.isLoaded==0: return page = self.pageWindow["SKILL"] if page.activeSlot.HasSlot(slotNumber): page.activeSlot.SetSlotCoolTime(slotNumber, coolTime) def OnStartGuildWar(self, guildSelf, guildOpp): if self.isLoaded==0: return if guild.GetGuildID() != guildSelf: return guildName = guild.GetGuildName(guildOpp) for guildNameTextLine in self.enemyGuildNameList: if locale.GUILD_INFO_ENEMY_GUILD_EMPTY == guildNameTextLine.GetText(): guildNameTextLine.SetText(guildName) return def OnEndGuildWar(self, guildSelf, guildOpp): if self.isLoaded==0: return if guild.GetGuildID() != guildSelf: return guildName = guild.GetGuildName(guildOpp) for guildNameTextLine in self.enemyGuildNameList: if guildName == guildNameTextLine.GetText(): guildNameTextLine.SetText(locale.GUILD_INFO_ENEMY_GUILD_EMPTY) return ## ToolTip def OverInItem(self, slotNumber, type): if mouseModule.mouseController.isAttached(): return if None != self.tooltipSkill: skillIndex = player.GetSkillIndex(slotNumber) skillLevel = guild.GetSkillLevel(slotNumber) self.tooltipSkill.SetSkill(skillIndex, skillLevel) def OverOutItem(self): if None != self.tooltipSkill: self.tooltipSkill.HideToolTip() def OnPressEscapeKey(self): self.Close() return TRUE class BuildGuildBuildingWindow(ui.ScriptWindow): if locale.IsJAPAN(): GUILD_CATEGORY_LIST = ( ("HEADQUARTER", "Šî‘bŒš’z•¨"), ("FACILITY", "Šg’£Œš’z•¨"), ("OBJECT", "‚»‚Ì‘¼"), ) elif locale.IsYMIR(): GUILD_CATEGORY_LIST = ( ("HEADQUARTER", "º»°Ç¹°"), ("FACILITY", "±â´É°Ç¹°"), ("OBJECT", "Á¶°æ¹°"), ) elif locale.IsEUROPE() or locale.IsHONGKONG(): GUILD_CATEGORY_LIST = ( ("HEADQUARTER", locale.GUILD_HEADQUARTER), ("FACILITY", locale.GUILD_FACILITY), ("OBJECT", locale.GUILD_OBJECT), ) else: GUILD_CATEGORY_LIST = ( ("HEADQUARTER", "Main Building"), ("FACILITY", "Facility"), ("OBJECT", "Object"), ) MODE_VIEW = 0 MODE_POSITIONING = 1 MODE_PREVIEW = 2 BUILDING_ALPHA = 0.55 ENABLE_COLOR = grp.GenerateColor(0.7607, 0.7607, 0.7607, 1.0) DISABLE_COLOR = grp.GenerateColor(0.9, 0.4745, 0.4627, 1.0) START_INSTANCE_INDEX = 123450 #WALL_SET_INSTANCE = 14105 def __init__(self): ui.ScriptWindow.__init__(self) self.__LoadWindow() self.closeEvent = None self.popup = None self.mode = self.MODE_VIEW self.race = 0 self.type = None self.x = 0 self.y = 0 self.z = 0 self.rot_x = 0 self.rot_y = 0 self.rot_z = 0 self.rot_x_limit = 0 self.rot_y_limit = 0 self.rot_z_limit = 0 self.needMoney = 0 self.needStoneCount = 0 self.needLogCount = 0 self.needPlywoodCount = 0 #self.index = 0 self.indexList = [] self.raceList = [] self.posList = [] self.rotList = [] index = 0 for category in self.GUILD_CATEGORY_LIST: self.categoryList.InsertItem(index, category[1]) index += 1 def __del__(self): ui.ScriptWindow.__del__(self) def __LoadWindow(self): try: pyScrLoader = ui.PythonScriptLoader() if locale.IsARABIC(): pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "buildguildbuildingwindow.py") elif locale.IsVIETNAM(): pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "buildguildbuildingwindow.py") else: pyScrLoader.LoadScriptFile(self, "uiscript/buildguildbuildingwindow.py") except: import exception exception.Abort("DeclareGuildWarWindow.__CreateDialog - LoadScript") try: getObject = self.GetChild self.board = getObject("Board") self.categoryList = getObject("CategoryList") self.buildingList = getObject("BuildingList") self.listScrollBar = getObject("ListScrollBar") self.positionButton = getObject("PositionButton") self.previewButton = getObject("PreviewButton") self.posValueX = getObject("BuildingPositionXValue") self.posValueY = getObject("BuildingPositionYValue") self.ctrlRotationX = getObject("BuildingRotationX") self.ctrlRotationY = getObject("BuildingRotationY") self.ctrlRotationZ = getObject("BuildingRotationZ") self.buildingPriceValue = getObject("BuildingPriceValue") self.buildingMaterialStoneValue = getObject("BuildingMaterialStoneValue") self.buildingMaterialLogValue = getObject("BuildingMaterialLogValue") self.buildingMaterialPlywoodValue = getObject("BuildingMaterialPlywoodValue") self.positionButton.SetEvent(ui.__mem_func__(self.__OnSelectPositioningMode)) self.previewButton.SetToggleDownEvent(ui.__mem_func__(self.__OnEnterPreviewMode)) self.previewButton.SetToggleUpEvent(ui.__mem_func__(self.__OnLeavePreviewMode)) self.ctrlRotationX.SetEvent(ui.__mem_func__(self.__OnChangeRotation)) self.ctrlRotationY.SetEvent(ui.__mem_func__(self.__OnChangeRotation)) self.ctrlRotationZ.SetEvent(ui.__mem_func__(self.__OnChangeRotation)) self.listScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollBuildingList)) getObject("CategoryList").SetEvent(ui.__mem_func__(self.__OnSelectCategory)) getObject("BuildingList").SetEvent(ui.__mem_func__(self.__OnSelectBuilding)) getObject("AcceptButton").SetEvent(ui.__mem_func__(self.Build)) getObject("CancelButton").SetEvent(ui.__mem_func__(self.Close)) self.board.SetCloseEvent(ui.__mem_func__(self.Close)) except: import exception exception.Abort("BuildGuildBuildingWindow.__LoadWindow - BindObject") def __CreateWallBlock(self, race, x, y, rot=0.0 ): idx = self.START_INSTANCE_INDEX + len(self.indexList) self.indexList.append(idx) self.raceList.append(race) self.posList.append((x, y)) self.rotList.append(rot) chr.CreateInstance(idx) chr.SelectInstance(idx) chr.SetVirtualID(idx) chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT) chr.SetRace(race) chr.SetArmor(0) chr.Refresh() chr.SetLoopMotion(chr.MOTION_WAIT) chr.SetBlendRenderMode(idx, self.BUILDING_ALPHA) chr.SetRotationAll(0.0, 0.0, rot) self.ctrlRotationX.SetSliderPos(0.5) self.ctrlRotationY.SetSliderPos(0.5) self.ctrlRotationZ.SetSliderPos(0.5) def __GetObjectSize(self, race): idx = self.START_INSTANCE_INDEX + 1000 chr.CreateInstance(idx) chr.SelectInstance(idx) chr.SetVirtualID(idx) chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT) chr.SetRace(race) chr.SetArmor(0) chr.Refresh() chr.SetLoopMotion(chr.MOTION_WAIT) sx, sy, ex, ey = chr.GetBoundBoxOnlyXY(idx) chr.DeleteInstance(idx) return sx, sy, ex, ey def __GetBuildInPosition(self): zList = [] zList.append( background.GetHeight(self.x+self.sxPos, self.y+self.syPos) ) zList.append( background.GetHeight(self.x+self.sxPos, self.y+self.eyPos) ) zList.append( background.GetHeight(self.x+self.exPos, self.y+self.syPos) ) zList.append( background.GetHeight(self.x+self.exPos, self.y+self.eyPos) ) zList.append( background.GetHeight(self.x+(self.exPos+self.sxPos)/2, self.y+(self.eyPos+self.syPos)/2) ) zList.sort() return zList[3] def __CreateBuildInInstance(self,race): self.__DeleteInstance() object_base = race - race%10 door_minX, door_minY, door_maxX, door_maxY = self.__GetObjectSize(object_base+4) corner_minX, corner_minY, corner_maxX, corner_maxY = self.__GetObjectSize(object_base+1) line_minX, line_minY, line_maxX, line_maxY = self.__GetObjectSize(object_base+2) line_width = line_maxX - line_minX line_width_half = line_width / 2 X_SIZE_STEP = 2 * 2 ## 2ÀÇ ´ÜÀ§·Î¸¸ Áõ°¡ÇØ¾ß ÇÔ Y_SIZE_STEP = 8 sxPos = door_maxX - corner_minX + (line_width_half*X_SIZE_STEP) exPos = -sxPos syPos = 0 eyPos = -(corner_maxY*2 + line_width*Y_SIZE_STEP) self.sxPos = sxPos self.syPos = syPos self.exPos = exPos self.eyPos = eyPos z = self.__GetBuildInPosition() ## Door self.__CreateWallBlock(object_base+4, 0.0, syPos) ## Corner self.__CreateWallBlock(object_base+1, sxPos, syPos) self.__CreateWallBlock(object_base+1, exPos, syPos, 270.0) self.__CreateWallBlock(object_base+1, sxPos, eyPos, 90.0) self.__CreateWallBlock(object_base+1, exPos, eyPos,180.0 ) ## Line lineBlock = object_base+2 line_startX = -door_maxX - line_minX - (line_width_half*X_SIZE_STEP) self.__CreateWallBlock(lineBlock, line_startX, eyPos) self.__CreateWallBlock(lineBlock, line_startX+line_width*1, eyPos) self.__CreateWallBlock(lineBlock, line_startX+line_width*2, eyPos) self.__CreateWallBlock(lineBlock, line_startX+line_width*3, eyPos) for i in xrange(X_SIZE_STEP): self.__CreateWallBlock(lineBlock, line_startX+line_width*(3+i+1), eyPos) for i in xrange(X_SIZE_STEP/2): self.__CreateWallBlock(lineBlock, door_minX - line_maxX - line_width*i, syPos) self.__CreateWallBlock(lineBlock, door_maxX - line_minX + line_width*i, syPos) for i in xrange(Y_SIZE_STEP): self.__CreateWallBlock(lineBlock, sxPos, line_minX + corner_minX - line_width*i, 90.0) self.__CreateWallBlock(lineBlock, exPos, line_minX + corner_minX - line_width*i, 90.0) self.SetBuildingPosition(int(self.x), int(self.y), self.__GetBuildInPosition()) def __DeleteInstance(self): if not self.indexList: return for index in self.indexList: chr.DeleteInstance(index) self.indexList = [] self.raceList = [] self.posList = [] self.rotList = [] def __CreateInstance(self, race): self.__DeleteInstance() self.race = race idx = self.START_INSTANCE_INDEX self.indexList.append(idx) self.posList.append((0, 0)) self.rotList.append(0) chr.CreateInstance(idx) chr.SelectInstance(idx) chr.SetVirtualID(idx) chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT) chr.SetRace(race) chr.SetArmor(0) chr.Refresh() chr.SetLoopMotion(chr.MOTION_WAIT) chr.SetBlendRenderMode(idx, self.BUILDING_ALPHA) self.SetBuildingPosition(int(self.x), int(self.y), 0) self.ctrlRotationX.SetSliderPos(0.5) self.ctrlRotationY.SetSliderPos(0.5) self.ctrlRotationZ.SetSliderPos(0.5) def Build(self): if not self.__IsEnoughMoney(): self.__PopupDialog(locale.GUILD_NOT_ENOUGH_MONEY) return if not self.__IsEnoughMaterialStone(): self.__PopupDialog(locale.GUILD_NOT_ENOUGH_MATERIAL) return if not self.__IsEnoughMaterialLog(): self.__PopupDialog(locale.GUILD_NOT_ENOUGH_MATERIAL) return if not self.__IsEnoughMaterialPlywood(): self.__PopupDialog(locale.GUILD_NOT_ENOUGH_MATERIAL) return ## /build c vnum x y x_rot y_rot z_rot ## /build d vnum if "BUILDIN" == self.type: for i in xrange(len(self.raceList)): race = self.raceList[i] xPos, yPos = self.posList[i] rot = self.rotList[i] 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)) else: 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)) self.Close() def Open(self): x, y, z = player.GetMainCharacterPosition() app.SetCameraSetting(int(x), int(-y), int(z), 3000, 0, 30) background.VisibleGuildArea() self.x = x self.y = y self.z = z self.categoryList.SelectItem(0) self.buildingList.SelectItem(0) self.SetTop() self.Show() self.__DisablePCBlocker() import debugInfo if debugInfo.IsDebugMode(): self.categoryList.SelectItem(2) self.buildingList.SelectItem(0) def Close(self): self.__DeleteInstance() background.DisableGuildArea() self.Hide() self.__OnClosePopupDialog() self.__EnablePCBlocker() self.__UnlockCameraMoving() if self.closeEvent: self.closeEvent() def Destory(self): self.Close() self.ClearDictionary() self.board = None self.categoryList = None self.buildingList = None self.listScrollBar = None self.positionButton = None self.previewButton = None self.posValueX = None self.posValueY = None self.ctrlRotationX = None self.ctrlRotationY = None self.ctrlRotationZ = None self.buildingPriceValue = None self.buildingMaterialStoneValue = None self.buildingMaterialLogValue = None self.buildingMaterialPlywoodValue = None self.closeEvent = None def SetCloseEvent(self, event): self.closeEvent = event def __PopupDialog(self, text): popup = uiCommon.PopupDialog() popup.SetText(text) popup.SetAcceptEvent(self.__OnClosePopupDialog) popup.Open() self.popup = popup def __OnClosePopupDialog(self): self.popup = None def __EnablePCBlocker(self): ## PC Blocker 󸮸¦ ÄÒ´Ù. (Åõ¸íÇØÁü) chr.SetInstanceType(chr.INSTANCE_TYPE_BUILDING) for idx in self.indexList: chr.SetBlendRenderMode(idx, 1.0) def __DisablePCBlocker(self): ## PC Blocker 󸮸¦ ²ö´Ù. (¾ÈÅõ¸íÇØÁü) chr.SetInstanceType(chr.INSTANCE_TYPE_OBJECT) for idx in self.indexList: chr.SetBlendRenderMode(idx, self.BUILDING_ALPHA) def __OnSelectPositioningMode(self): if self.MODE_PREVIEW == self.mode: self.positionButton.SetUp() return self.mode = self.MODE_POSITIONING self.Hide() def __OnEnterPreviewMode(self): if self.MODE_POSITIONING == self.mode: self.previewButton.SetUp() return self.mode = self.MODE_PREVIEW self.positionButton.SetUp() self.__UnlockCameraMoving() self.__EnablePCBlocker() def __OnLeavePreviewMode(self): self.__RestoreViewMode() def __RestoreViewMode(self): self.__DisablePCBlocker() self.__LockCameraMoving() self.mode = self.MODE_VIEW self.positionButton.SetUp() self.previewButton.SetUp() def __IsEnoughMoney(self): if app.IsEnableTestServerFlag(): return TRUE curMoney = player.GetMoney() if curMoney < self.needMoney: return FALSE return TRUE def __IsEnoughMaterialStone(self): if app.IsEnableTestServerFlag(): return TRUE curStoneCount = player.GetItemCountByVnum(MATERIAL_STONE_ID) if curStoneCount < self.needStoneCount: return FALSE return TRUE def __IsEnoughMaterialLog(self): if app.IsEnableTestServerFlag(): return TRUE curLogCount = player.GetItemCountByVnum(MATERIAL_LOG_ID) if curLogCount < self.needLogCount: return FALSE return TRUE def __IsEnoughMaterialPlywood(self): if app.IsEnableTestServerFlag(): return TRUE curPlywoodCount = player.GetItemCountByVnum(MATERIAL_PLYWOOD_ID) if curPlywoodCount < self.needPlywoodCount: return FALSE return TRUE def __OnSelectCategory(self): self.listScrollBar.SetPos(0.0) self.__RefreshItem() def __SetBuildingData(self, data): self.buildingPriceValue.SetText(NumberToMoneyString(data["PRICE"])) self.needMoney = int(data["PRICE"]) materialList = data["MATERIAL"] self.needStoneCount = int(materialList[MATERIAL_STONE_INDEX]) self.needLogCount = int(materialList[MATERIAL_LOG_INDEX]) self.needPlywoodCount = int(materialList[MATERIAL_PLYWOOD_INDEX]) if (locale.IsEUROPE() and app.GetLocalePath() != "locale/ca") and (locale.IsEUROPE() and app.GetLocalePath() != "locale/br"): self.buildingMaterialStoneValue.SetText(materialList[MATERIAL_STONE_INDEX]) self.buildingMaterialLogValue.SetText(materialList[MATERIAL_LOG_INDEX] ) self.buildingMaterialPlywoodValue.SetText(materialList[MATERIAL_PLYWOOD_INDEX]) else: self.buildingMaterialStoneValue.SetText(materialList[MATERIAL_STONE_INDEX] + locale.THING_COUNT) self.buildingMaterialLogValue.SetText(materialList[MATERIAL_LOG_INDEX] + locale.THING_COUNT) self.buildingMaterialPlywoodValue.SetText(materialList[MATERIAL_PLYWOOD_INDEX] + locale.THING_COUNT) if self.__IsEnoughMoney(): self.buildingPriceValue.SetPackedFontColor(self.ENABLE_COLOR) else: self.buildingPriceValue.SetPackedFontColor(self.DISABLE_COLOR) if self.__IsEnoughMaterialStone(): self.buildingMaterialStoneValue.SetPackedFontColor(self.ENABLE_COLOR) else: self.buildingMaterialStoneValue.SetPackedFontColor(self.DISABLE_COLOR) if self.__IsEnoughMaterialLog(): self.buildingMaterialLogValue.SetPackedFontColor(self.ENABLE_COLOR) else: self.buildingMaterialLogValue.SetPackedFontColor(self.DISABLE_COLOR) if self.__IsEnoughMaterialPlywood(): self.buildingMaterialPlywoodValue.SetPackedFontColor(self.ENABLE_COLOR) else: self.buildingMaterialPlywoodValue.SetPackedFontColor(self.DISABLE_COLOR) self.rot_x_limit = data["X_ROT_LIMIT"] self.rot_y_limit = data["Y_ROT_LIMIT"] self.rot_z_limit = data["Z_ROT_LIMIT"] self.ctrlRotationX.Enable() self.ctrlRotationY.Enable() self.ctrlRotationZ.Enable() if 0 == self.rot_x_limit: self.ctrlRotationX.Disable() if 0 == self.rot_y_limit: self.ctrlRotationY.Disable() if 0 == self.rot_z_limit: self.ctrlRotationZ.Disable() def __OnSelectBuilding(self): buildingIndex = self.buildingList.GetSelectedItem() if buildingIndex >= len(BUILDING_DATA_LIST): return categoryIndex = self.categoryList.GetSelectedItem() if categoryIndex >= len(self.GUILD_CATEGORY_LIST): return selectedType = self.GUILD_CATEGORY_LIST[categoryIndex][0] index = 0 for data in BUILDING_DATA_LIST: type = data["TYPE"] vnum = data["VNUM"] if selectedType != type: continue if index == buildingIndex: self.type = type if "BUILDIN" == self.type: self.__CreateBuildInInstance(vnum) else: self.__CreateInstance(vnum) self.__SetBuildingData(data) index += 1 def __OnScrollBuildingList(self): viewItemCount = self.buildingList.GetViewItemCount() itemCount = self.buildingList.GetItemCount() pos = self.listScrollBar.GetPos() * (itemCount-viewItemCount) self.buildingList.SetBasePos(int(pos)) def __OnChangeRotation(self): self.rot_x = self.ctrlRotationX.GetSliderPos() * self.rot_x_limit - self.rot_x_limit/2 self.rot_y = self.ctrlRotationY.GetSliderPos() * self.rot_y_limit - self.rot_y_limit/2 self.rot_z = (self.ctrlRotationZ.GetSliderPos() * 360 + 180) % 360 if "BUILDIN" == self.type: chr.SetRotationAll(self.rot_x, self.rot_y, self.rot_z) else: chr.SetRotationAll(self.rot_x, self.rot_y, self.rot_z) def __LockCameraMoving(self): app.SetCameraSetting(int(self.x), int(-self.y), int(self.z), 3000, 0, 30) def __UnlockCameraMoving(self): app.SetDefaultCamera() def __RefreshItem(self): self.buildingList.ClearItem() categoryIndex = self.categoryList.GetSelectedItem() if categoryIndex >= len(self.GUILD_CATEGORY_LIST): return selectedType = self.GUILD_CATEGORY_LIST[categoryIndex][0] index = 0 for data in BUILDING_DATA_LIST: if selectedType != data["TYPE"]: continue if data["SHOW"]: self.buildingList.InsertItem(index, data["LOCAL_NAME"]) index += 1 self.buildingList.SelectItem(0) if self.buildingList.GetItemCount() < self.buildingList.GetViewItemCount(): self.buildingList.SetSize(120, self.buildingList.GetHeight()) self.buildingList.LocateItem() self.listScrollBar.Hide() else: self.buildingList.SetSize(105, self.buildingList.GetHeight()) self.buildingList.LocateItem() self.listScrollBar.Show() def SettleCurrentPosition(self): guildID = miniMap.GetGuildAreaID(self.x, self.y) import debugInfo if debugInfo.IsDebugMode(): guildID = player.GetGuildID() if guildID != player.GetGuildID(): return self.__RestoreViewMode() self.__LockCameraMoving() self.Show() def SetBuildingPosition(self, x, y, z): self.x = x self.y = y self.posValueX.SetText(str(int(x))) self.posValueY.SetText(str(int(y))) for i in xrange(len(self.indexList)): idx = self.indexList[i] xPos, yPos = self.posList[i] chr.SelectInstance(idx) if 0 != z: self.z = z chr.SetPixelPosition(int(x+xPos), int(y+yPos), int(z)) else: chr.SetPixelPosition(int(x+xPos), int(y+yPos)) def IsPositioningMode(self): if self.MODE_POSITIONING == self.mode: return TRUE return FALSE def IsPreviewMode(self): if self.MODE_PREVIEW == self.mode: return TRUE return FALSE def OnPressEscapeKey(self): self.Close() return TRUE """ - ÇÁ·ÎÅäÄÝ °ÔÀÓµ¹ÀÔ½Ã: RecvLandPacket: CPythonMiniMap::RegisterGuildArea °ÔÀÓÀ̵¿Áß: PythonPlayer::Update() CPythonPlayer::__Update_NotifyGuildAreaEvent() game.py.BINARY_Guild_EnterGuildArea uigameButton.GameButtonWindow.ShowBuildButton() game.py.BINARY_Guild_ExitGuildArea uigameButton.GameButtonWindow.HideBuildButton() BuildButton: !±æµåÀåÀÎÁö ó¸® ¾øÀ½ !°Ç¹°ÀÌ À־ Áþ±â ¹öÆ°Àº ÀÖÀ½ !°Ç¹°ÀÌ Àӽ÷Π»ç¿ëÇÏ´Â VID ´Â ¼*¹ö°¡ º¸³»ÁÖ´Â °Í°ú È¥µ¿µÉ ¿°·Á°¡ ÀÖÀ½ !°Ç¹° VNUM Àº BuildGuildBuildingWindow.BUILDING_VNUM_LIST ¸¦ ÀÌ¿ëÇØ º¯È¯ !°Ç¹° ÁöÀ»¶§´Â /build c(reate) !°Ç¹° ºÎ¼ú¶§´Â /build d(estroy) !rotation ÀÇ ´ÜÀ§´Â degree interfaceModule.interface.__OnClickBuildButton: interfaceModule.interface.BUILD_OpenWindow: AcceptButton: BuildGuildBuildingWindow.Build: net.SendChatPacket("/build c vnum x y x_rot y_rot z_rot") PreviewButton: __OnPreviewMode: __RestoreViewMode: °Ç¹° ºÎ¼ö±â: uiTarget.TargetBoard.__OnDestroyBuilding net.SendChatPacket("/build d vid") """ if __name__ == "__main__": import app import wndMgr import systemSetting import mouseModule import grp import ui #wndMgr.SetOutlineFlag(TRUE) app.SetMouseHandler(mouseModule.mouseController) app.SetHairColorEnable(TRUE) wndMgr.SetMouseHandler(mouseModule.mouseController) wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight()) app.Create("METIN2 CLOSED BETA", systemSetting.GetWidth(), systemSetting.GetHeight(), 1) mouseModule.mouseController.Create() import chrmgr chrmgr.CreateRace(0) chrmgr.SelectRace(0) chrmgr.SetPathName("d:/ymir Work/pc/warrior/") chrmgr.LoadRaceData("warrior.msm") chrmgr.SetPathName("d:/ymir work/pc/warrior/general/") chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL) chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "wait.msa") chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_RUN, "run.msa") def LoadGuildBuildingList(filename): handle = app.OpenTextFile(filename) count = app.GetTextFileLineCount(handle) for i in xrange(count): line = app.GetTextFileLine(handle, i) tokens = line.split("\t") TOKEN_VNUM = 0 TOKEN_TYPE = 1 TOKEN_NAME = 2 TOKEN_LOCAL_NAME = 3 NO_USE_TOKEN_SIZE_1 = 4 NO_USE_TOKEN_SIZE_2 = 5 NO_USE_TOKEN_SIZE_3 = 6 NO_USE_TOKEN_SIZE_4 = 7 TOKEN_X_ROT_LIMIT = 8 TOKEN_Y_ROT_LIMIT = 9 TOKEN_Z_ROT_LIMIT = 10 TOKEN_PRICE = 11 TOKEN_MATERIAL = 12 TOKEN_NPC = 13 TOKEN_GROUP = 14 TOKEN_DEPEND_GROUP = 15 TOKEN_ENABLE_FLAG = 16 LIMIT_TOKEN_COUNT = 17 if not tokens[TOKEN_VNUM].isdigit(): continue if not int(tokens[TOKEN_ENABLE_FLAG]): continue if len(tokens) < LIMIT_TOKEN_COUNT: import dbg dbg.TraceError("Strange token count [%d/%d] [%s]" % (len(tokens), TOKEN_COUNT, line)) continue ENABLE_FLAG_TYPE_NOT_USE = FALSE ENABLE_FLAG_TYPE_USE = TRUE ENABLE_FLAG_TYPE_USE_BUT_HIDE = 2 if ENABLE_FLAG_TYPE_NOT_USE == int(tokens[TOKEN_ENABLE_FLAG]): continue vnum = int(tokens[TOKEN_VNUM]) type = tokens[TOKEN_TYPE] name = tokens[TOKEN_NAME] localName = tokens[TOKEN_LOCAL_NAME] xRotLimit = int(tokens[TOKEN_X_ROT_LIMIT]) yRotLimit = int(tokens[TOKEN_Y_ROT_LIMIT]) zRotLimit = int(tokens[TOKEN_Z_ROT_LIMIT]) price = tokens[TOKEN_PRICE] material = tokens[TOKEN_MATERIAL] folderName = "" if "HEADQUARTER" == type: folderName = "headquarter" elif "FACILITY" == type: folderName = "facility" elif "OBJECT" == type: folderName = "object" ##"BuildIn" Is made by exist instance. materialList = ["0", "0", "0"] if material[0] == "\"": material = material[1:] if material[-1] == "\"": material = material[:-1] for one in material.split("/"): data = one.split(",") if 2 != len(data): continue itemID = int(data[0]) count = data[1] if itemID == MATERIAL_STONE_ID: materialList[MATERIAL_STONE_INDEX] = count elif itemID == MATERIAL_LOG_ID: materialList[MATERIAL_LOG_INDEX] = count elif itemID == MATERIAL_PLYWOOD_ID: materialList[MATERIAL_PLYWOOD_INDEX] = count import chrmgr chrmgr.RegisterRaceSrcName(name, folderName) chrmgr.RegisterRaceName(vnum, name) appendingData = { "VNUM":vnum, "TYPE":type, "NAME":name, "LOCAL_NAME":localName, "X_ROT_LIMIT":xRotLimit, "Y_ROT_LIMIT":yRotLimit, "Z_ROT_LIMIT":zRotLimit, "PRICE":price, "MATERIAL":materialList, "SHOW" : TRUE } if ENABLE_FLAG_TYPE_USE_BUT_HIDE == int(tokens[TOKEN_ENABLE_FLAG]): appendingData["SHOW"] = FALSE BUILDING_DATA_LIST.append(appendingData) app.CloseTextFile(handle) LoadGuildBuildingList(app.GetLocalePath()+"/GuildBuildingList.txt") class TestGame(ui.Window): def __init__(self): ui.Window.__init__(self) x = 30000 y = 40000 self.wndGuildBuilding = None self.onClickKeyDict = {} self.onClickKeyDict[app.DIK_SPACE] = lambda: self.OpenBuildGuildBuildingWindow() background.Initialize() background.LoadMap("metin2_map_a1", x, y, 0) background.SetShadowLevel(background.SHADOW_ALL) self.MakeCharacter(1, 0, x, y) player.SetMainCharacterIndex(1) chr.SelectInstance(1) def __del__(self): ui.Window.__del__(self) def MakeCharacter(self, index, race, x, y): chr.CreateInstance(index) chr.SelectInstance(index) chr.SetVirtualID(index) chr.SetInstanceType(chr.INSTANCE_TYPE_PLAYER) chr.SetRace(race) chr.SetArmor(0) chr.SetHair(0) chr.Refresh() chr.SetMotionMode(chr.MOTION_MODE_GENERAL) chr.SetLoopMotion(chr.MOTION_WAIT) chr.SetPixelPosition(x, y) chr.SetDirection(chr.DIR_NORTH) def OpenBuildGuildBuildingWindow(self): self.wndGuildBuilding = BuildGuildBuildingWindow() self.wndGuildBuilding.Open() self.wndGuildBuilding.SetParent(self) self.wndGuildBuilding.SetTop() def OnKeyUp(self, key): if key in self.onClickKeyDict: self.onClickKeyDict[key]() return TRUE def OnMouseLeftButtonDown(self): if self.wndGuildBuilding: if self.wndGuildBuilding.IsPositioningMode(): self.wndGuildBuilding.SettleCurrentPosition() return player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS); return TRUE def OnMouseLeftButtonUp(self): if self.wndGuildBuilding: return player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK) return TRUE def OnMouseRightButtonDown(self): player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS); return TRUE def OnMouseRightButtonUp(self): player.SetMouseState(player.MBT_RIGHT, player.MBS_CLICK); return TRUE def OnMouseMiddleButtonDown(self): player.SetMouseMiddleButtonState(player.MBS_PRESS) def OnMouseMiddleButtonUp(self): player.SetMouseMiddleButtonState(player.MBS_CLICK) def OnUpdate(self): app.UpdateGame() if self.wndGuildBuilding: if self.wndGuildBuilding.IsPositioningMode(): x, y, z = background.GetPickingPoint() self.wndGuildBuilding.SetBuildingPosition(x, y, z) def OnRender(self): app.RenderGame() grp.PopState() grp.SetInterfaceRenderState() game = TestGame() game.SetSize(systemSetting.GetWidth(), systemSetting.GetHeight()) game.Show() wndGuildBuilding = BuildGuildBuildingWindow() wndGuildBuilding.Open() wndGuildBuilding.SetTop() app.Loop() """ - ÇÁ·ÎÅäÄÝ °ÔÀÓµ¹ÀÔ½Ã: RecvLandPacket: CPythonMiniMap::RegisterGuildArea °ÔÀÓÀ̵¿Áß: PythonPlayer::Update() CPythonPlayer::__Update_NotifyGuildAreaEvent() game.py.BINARY_Guild_EnterGuildArea uigameButton.GameButtonWindow.ShowBuildButton() game.py.BINARY_Guild_ExitGuildArea uigameButton.GameButtonWindow.HideBuildButton() BuildButton: !±æµåÀåÀÎÁö ó¸® ¾øÀ½ !°Ç¹°ÀÌ À־ Áþ±â ¹öÆ°Àº ÀÖÀ½ !°Ç¹°ÀÌ Àӽ÷Π»ç¿ëÇÏ´Â VID ´Â ¼*¹ö°¡ º¸³»ÁÖ´Â °Í°ú È¥µ¿µÉ ¿°·Á°¡ ÀÖÀ½ !°Ç¹° VNUM Àº BuildGuildBuildingWindow.BUILDING_VNUM_LIST ¸¦ ÀÌ¿ëÇØ º¯È¯ !°Ç¹° ÁöÀ»¶§´Â /build c(reate) !°Ç¹° ºÎ¼ú¶§´Â /build d(estroy) !rotation ÀÇ ´ÜÀ§´Â degree interfaceModule.interface.__OnClickBuildButton: interfaceModule.interface.BUILD_OpenWindow: AcceptButton: BuildGuildBuildingWindow.Build: net.SendChatPacket("/build c vnum x y x_rot y_rot z_rot") x_rot, y_rot ´Â AffectContainer¿¡ ÀúÀå PreviewButton: __OnPreviewMode: __RestoreViewMode: °Ç¹° ºÎ¼ö±â: uiTarget.TargetBoard.__OnDestroyBuilding net.SendChatPacket("/build d vid") """
Er läd die Objekte aus der guildbuildinglist in der locale_de.epk
Code:
VNUM TYPE MODEL NAME REG_1 REG_2 REG_3 REG_4 XROT_LIMIT YROT_LIMIT ZROT_LIMIT PRICE MATERIALS NPC GROUP DEPEND_GROUP ??????? 14013 FACILITY jedan Waffenschmiede -525 -525 525 525 0 0 360 20000000 90010,20/90011,30/90012,20 20044 2 1 1 14014 FACILITY jedan Rüstungsschmiede -525 -525 525 525 0 0 360 20000000 90010,20/90011,30/90012,20 20045 2 1 1 14015 FACILITY jedan Juwelier -525 -525 525 525 0 0 360 20000000 90010,20/90011,30/90012,20 20046 2 1 1 14033 FACILITY suryeonjang Trainings-Center -832.57 -472.99 832.57 472.99 0 0 360 20000000 90010,25/90011,25/90012,25 0 0 0 2 14043 FACILITY yonggwangro Diamantofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20060 3 1 1 14045 FACILITY yonggwangro Fossilholzofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20062 3 1 1 14046 FACILITY yonggwangro Kupferofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20063 3 1 1 14047 FACILITY yonggwangro Silberofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20064 3 1 1 14048 FACILITY yonggwangro Goldofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20065 3 1 1 14049 FACILITY yonggwangro Jadeofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20066 3 1 1 14050 FACILITY yonggwangro Ebenholzofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20067 3 1 1 14051 FACILITY yonggwangro Perlenofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20068 3 1 1 14052 FACILITY yonggwangro Weißgoldofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20069 3 1 1 14053 FACILITY yonggwangro Kristallofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20070 3 1 1 14054 FACILITY yonggwangro Quarzofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20071 3 1 1 14055 FACILITY yonggwangro Himmelstränenofen -179.63 -199.89 179.63 199.89 0 0 360 20000000 90010,15/90011,20/90012,25 20072 3 1 1 14061 FACILITY himuijedan_01 Altar der Kraft -523.91 -995.84 527.55 750.99 0 0 360 25000000 90010,25/90011,25/90012,25 20077 4 1 1 14062 FACILITY himuijedan_02 Altar der Kraft -586.17 -995.84 587.18 818.56 0 0 360 500000000 90010,50/90011,50/90012,50 20078 4 4 2 14063 FACILITY himuijedan_03 Altar der Kraft -664.7 -995.84 665.7 896.57 0 0 360 750000000 90010,75/90011,75/90012,75 20079 4 4 2 14100 HEADQUARTER a1-011-workhouse Haus (1) -676.52 -894.26 690.18 749.32 0 0 360 20000000 90010,20/90011,30/90012,25 0 1 0 1 14101 OBJECT a1-038-wall-corner Steinmauer (1-1) -400 -153.53 156.48 400 0 0 360 2000000 90010,15/90011,5/90012,5 0 5 0 2 14102 OBJECT a1-038-wall-lin Steinmauer (1-2) -200 -106.73 300 106.73 0 0 360 1000000 90010,15/90011,5/90012,5 0 5 0 2 14103 OBJECT a1-038-wall-lin2 Steinmauer (1-3) -500 -106.73 500 106.73 0 0 360 1000000 90010,15/90011,5/90012,5 0 5 0 2 14104 OBJECT a1-038-wall-door Tor (1) -1000 -274.73 1000 274.73 0 0 360 2500000 90010,5/90011,15/90012,10 0 5 0 2 14105 BUILDIN a1-set Mauer (1) -1000 -274.73 1000 274.73 0 0 360 2500000 90010,5/90011,15/90012,10 0 5 0 1 14110 HEADQUARTER b1-011-workhouse Haus (2) -678.76 -894.26 687.94 749.32 0 0 360 20000000 90010,20/90011,30/90012,25 0 1 0 1 14111 OBJECT b1-038-wall-corner Steinmauer (2-1) -400 -153.53 156.48 400 0 0 360 2000000 90010,15/90011,5/90012,5 0 5 0 2 14112 OBJECT b1-038-wall-lin Steinmauer (2-2) -200 -106.73 300 106.73 0 0 360 1000000 90010,15/90011,5/90012,5 0 5 0 2 14113 OBJECT b1-038-wall-lin2 Steinmauer (2-3) -500 -106.73 500 106.73 0 0 360 1000000 90010,15/90011,5/90012,5 0 5 0 2 14114 OBJECT b1-038-wall-door Tor (2) -1000 -274.73 1000 274.73 0 0 360 2500000 90010,5/90011,15/90012,10 0 5 0 2 14115 BUILDIN b1-set Mauer (2) -1000 -274.73 1000 274.73 0 0 360 2500000 90010,5/90011,15/90012,10 0 5 0 1 14120 HEADQUARTER c1-011-workhouse Haus (3) -676.52 -894.26 690.18 749.32 0 0 360 20000000 90010,20/90011,30/90012,25 0 1 0 1 14121 OBJECT c1-038-wall-corner Steinmauer (3-1) -400 -153.53 156.48 400 0 0 360 2000000 90010,15/90011,5/90012,5 0 5 0 2 14122 OBJECT c1-038-wall-lin Steinmauer (3-2) -200 -106.73 300 106.73 0 0 360 1000000 90010,15/90011,5/90012,5 0 5 0 2 14123 OBJECT c1-038-wall-lin2 Steinmauer (3-3) -500 -106.73 500 106.73 0 0 360 1000000 90010,15/90011,5/90012,5 0 5 0 2 14124 OBJECT c1-038-wall-door Tor (3) -1000 -274.73 1000 274.73 0 0 360 2500000 90010,5/90011,15/90012,10 0 5 0 2 14125 BUILDIN c1-set Mauer (3) -1000 -274.73 1000 274.73 0 0 360 2500000 90010,5/90011,15/90012,10 0 5 0 1 14200 OBJECT guild_symbol Gildensymbol -45.9 -9.44 42.68 40.13 0 0 360 3000000 90011,5/90012,5 0 0 1 1 14201 WALL fence01_door01 Wandvorderseite -1000 -54 1000 20 0 0 360 3000000 "90010.50" 0 0 1 1 14202 WALL fence01_back01 Wandrückseite -1000 -18 1000 18 0 0 360 3000000 "90010.50" 0 0 1 1 14203 WALL fence01_left01 Wand links -19 -1362 19 1362 0 0 360 3000000 "90010.50" 0 0 1 1 14204 WALL fence01_right01 Wand rechts -18 -1362 18 1362 0 0 360 3000000 "90010.50" 0 0 1 1 14300 OBJECT general_obj_stone01 Stein1 -116.04 -118.44 116.04 118.44 0 0 360 300000 90010,5 0 0 0 1 14301 OBJECT general_obj_stone02 Stein2 -118.05 -132.67 118.05 132.67 0 0 360 300000 90010,5 0 0 0 1 14302 OBJECT general_obj_stone03 Stein3 -133.43 -102.96 133.43 102.96 0 0 360 300000 90010,7 0 0 0 1 14303 OBJECT general_obj_stone04 Stein4 -104.21 -117.82 104.21 117.82 0 0 360 300000 90010,7 0 0 0 1 14304 OBJECT general_obj_stone05 Stein5 -171.59 -145.52 171.59 145.52 0 0 360 300000 90010,7 0 0 0 1 14305 OBJECT general_obj_stone06 Stein6 -192.74 -201.58 192.74 201.58 0 0 360 300000 90010,8 0 0 0 1 14306 OBJECT general_obj_stone07 Stein7 -183.58 -184.01 183.58 184.01 0 0 360 300000 90010,8 0 0 0 1 14307 OBJECT general_obj_stone08 Stein8 -66.89 -56.67 66.89 56.67 0 0 360 300000 90010,8 0 0 0 1 14308 OBJECT general_obj_stone09 Stein9 -65.87 -53.47 65.87 53.47 0 0 360 300000 90010,9 0 0 0 1 14309 OBJECT general_obj_stone10 Stein10 -182.17 -123.03 182.17 123.03 0 0 360 300000 90010,9 0 0 0 1 14400 OBJECT B1_PagodaTree_RT Baum1 0 0 360 2000000 90011,5 0 0 0 1 14401 OBJECT B1_PagodaTree_RT3 Baum2 0 0 360 2000000 90011,5 0 0 0 1 14402 OBJECT B1_Sassafras_RT_Fall Baum3 0 0 360 2000000 90011,7 0 0 0 1 14403 OBJECT B1_Sassafras_RT_Fall2 Baum4 0 0 360 2000000 90011,7 0 0 0 1 14404 OBJECT B3_ShingleOak_RT2 Baum5 0 0 360 2000000 90011,7 0 0 0 1 14405 OBJECT B2_IvySpy_RT Baum6 0 0 360 2000000 90011,9 0 0 0 1 14406 OBJECT B2_IvySpy_RT4 Baum7 0 0 360 2000000 90011,9 0 0 0 1 14407 OBJECT B2_JapaneseMaple_RT_Fall Baum8 0 0 360 2000000 90011,9 0 0 0 1 14408 OBJECT B2_JapaneseMaple_RT_Fall2 Baum9 0 0 360 2000000 90011,9 0 0 0 1
In der Datenbank werden die erstellten Objekte unter Player-> objekt gespeichert!