Francisco Afonso
-
Content Count
94 -
Joined
-
Last visited
Posts posted by Francisco Afonso
-
-
Boas,
Estava interessado em implementar um contador de players online mas em vez de ser no site do servidor queria implementar no proprio cliente da mesma forma que fizeram neste : https://prnt.sc/xm9r1g
Saquei o cliente desse mesmo servidor , não sei se posso meter o link no youtube por isso quem tiver interesse basta procurar : "SERVER FILES HOVSA V1 (Serverfile + Source)"
Tentei implementar porém sempre sem sucesso, agradecia a quem percebesse do assunto tentar ajudar-me a mim e também á comunidade visto que muitos podem querer esta funcionalidade no seu cliente e não encontrei nada sobre tal.
Cumprimentos, fiquem em casa :) -
6 horas atrás, Karbust disse:Agradeço, porém não é essa a espada que estou à procura, gostava da mais recente (a azul) como meti nos prints.
1 hora atrás, Karbust disse:Peço desculpa, nem sabia que a espada tinha mudado...
https://mega.nz/file/tc5hUCJZ#whg9EuvSET4lxP8vqtJYCKHFFqloGPfAfZEyVvdqArU
É mesmo isso, obrigado!
-
Em primeiro lugar, boa noite :D
Em segundo lugar, gostaria de encontrar a "famosa" Espada Div. Ultimate" do EliteMt2 (não é a dourada, atualmente é a azul como vou deixar nos prints abaixo) para poder implementar no meu servidor, tentei procurar porém n encontrei e o EliteMt2 v4 não tem essa espada porque só foi implementada depois.. sei que é como encontrar uma agulha num palheiro mas pode ser que tenha sorte :p
Agradecia que se alguem souber algum cliente ou site para poder descarregar me diga :D
Print da arma:
https://ibb.co/w4dsLwn
https://ibb.co/g3zPG9t
Obrigado e abraço a todos. -
36 minutos atrás, Karbust disse:Tu metes-te o IP em .100 porquê? Estás em com o loopback ou estás em bridge com a placa do pc?
Penso que sempre fiz assim e deu º-º Já no navicat , etc tenho em 100 e sempre deu
Uso em Bridge
Já consegui , deixei o FileZilla e instalei o WinSCP, funcionou xD -
15 minutos atrás, Karbust disse:Primeira coisa, essa VM instalas-te de raíz ou já a sacas-te assim?
Se foste tu a instalar, já ativas-te o acesso SFTP externo? Ele vem desativado por default.
Eu só saquei os ficheiros, iniciei o virtualbox e configurei o ip ... Ja tive a traduzir algumas coisas no cliente agora queria ir ao FileZilla ver como é que aquilo está ... Se´ra que mesmo assim pode estar desativado? -
Boas,
Estava a tentar connectar ao FileZilla pela primeira vez nestas files e deparei-me com um erro que nunca me tinha acontecido... Já procurei aqui na cybergamers e google porém não arranjei uma resposta.. Do que poderá ser?
Estou a usar os seguintes ficheiros:
FileZilla:
Erro: FATAL ERROR: Remote side unexpectedly closed network connection
Erro: Não foi possível ligar ao servidor
VirtualBox:
fatal: matching cipher is not supported: [email protected]
Deixo aqui um print da tela..
https://prnt.sc/ssf4cw
Agradeço resposta
Obrigado -
-
-
Boas
Utilizo files Maxmi 4.1 - Lycan -> Eu decidi mudar o nivel máximo do meu servidor para 250 (o original era 105) mas dps de editar os "MAX_LEVEL" no filezilla dos ficheiros "CONFIG" encontrados nas pastas "channel1"; "channel2"; "channel3"; "channel4" e "game99" o servidor deixou de funcionar?
Nesses mesmos ficheiros também tem uma linha que diz "MAX_LEVEL_STATUS: 250" apaguei essa mesma linha para ver de dava e não resolveu :/
Alguém me pode ajudar?
Agradeço resposta
Cumprimentos -
@NewWars
Agradeço desde dá a disbonibilidade e a tentativa de ajudar, fiz todos os procedimentos mas infelizmente o cliente fica tipo carregamento infinito...
Syserr
Spoiler0105 12:26:22585 :: Traceback (most recent call last):
0105 12:26:22586 :: File "networkModule.py", line 247, in SetGamePhase
0105 12:26:22586 :: File "game.py", line 100, in __init__
0105 12:26:22586 :: File "interfaceModule.py", line 292, in MakeInterface
0105 12:26:22587 :: File "interfaceModule.py", line 118, in __MakeChatWindow
0105 12:26:22587 :: File "uiChat.py", line 561, in __init__
0105 12:26:22587 :: File "uiChat.py", line 649, in __RegisterChatColorDict
0105 12:26:22587 :: SystemError
0105 12:26:22588 :: :
0105 12:26:22588 :: D:\Documents and Settings\Administrator\Desktop\´Ù¿î·Îµå\python-2.2\Python-2.2\Objects\longobject.c:188: bad argument to internal function
0105 12:26:22588 ::
Ficheiros editados :
game.py
Spoilerimport os import app import dbg import grp import item import background import chr import chrmgr import player import snd import chat import textTail import snd import net import effect import wndMgr import fly import systemSetting import quest import guild import skill import messenger import localeInfo import constInfo import exchange import ime import ui import uiCommon import uiPhaseCurtain import uiMapNameShower import uiAffectShower import uiPlayerGauge import uiCharacter import uiTarget import time # PRIVATE_SHOP_PRICE_LIST import uiPrivateShopBuilder # END_OF_PRIVATE_SHOP_PRICE_LIST import mouseModule import consoleModule import localeInfo import playerSettingModule import interfaceModule import musicInfo import debugInfo import stringCommander from _weakref import proxy # TEXTTAIL_LIVINGTIME_CONTROL #if localeInfo.IsJAPAN(): # app.SetTextTailLivingTime(8.0) # END_OF_TEXTTAIL_LIVINGTIME_CONTROL # SCREENSHOT_CWDSAVE SCREENSHOT_CWDSAVE = FALSE SCREENSHOT_DIR = None if localeInfo.IsEUROPE(): SCREENSHOT_CWDSAVE = TRUE if localeInfo.IsCIBN10(): SCREENSHOT_CWDSAVE = FALSE SCREENSHOT_DIR = "YT2W" cameraDistance = 1550.0 cameraPitch = 27.0 cameraRotation = 0.0 cameraHeight = 100.0 testAlignment = 0 BPisLodaded = 0 class GameWindow(ui.ScriptWindow): def __init__(self, stream): ui.ScriptWindow.__init__(self, "GAME") self.SetWindowName("game") net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self) player.SetGameWindow(self) self.quickSlotPageIndex = 0 self.lastPKModeSendedTime = 0 self.pressNumber = None self.guildWarQuestionDialog = None self.interface = None self.targetBoard = None self.console = None self.mapNameShower = None self.affectShower = None self.playerGauge = None self.stream=stream self.interface = interfaceModule.Interface() self.interface.MakeInterface() self.interface.ShowDefaultWindows() self.curtain = uiPhaseCurtain.PhaseCurtain() self.curtain.speed = 0.03 self.curtain.Hide() self.targetBoard = uiTarget.TargetBoard() self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog)) self.targetBoard.Hide() self.console = consoleModule.ConsoleWindow() self.console.BindGameClass(self) self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200) self.console.Hide() self.mapNameShower = uiMapNameShower.MapNameShower() self.affectShower = uiAffectShower.AffectShower() self.playerGauge = uiPlayerGauge.PlayerGauge(self) self.playerGauge.Hide() #wj 2014.1.2. ESC키를 누를 시 우선적으로 DropQuestionDialog를 끄도록 만들었다. 하지만 처음에 itemDropQuestionDialog가 선언되어 있지 않아 ERROR가 발생하여 init에서 선언과 동시에 초기화 시킴. self.itemDropQuestionDialog = None self.__SetQuickSlotMode() self.__ServerCommand_Build() self.__ProcessPreservedServerCommand() self.timeLine = ui.TextLine() self.timeLine.SetFontName(localeInfo.UI_DEF_FONT) self.timeLine.SetFontColor( 255, 045, 0) self.timeLine.SetPosition((wndMgr.GetScreenWidth() - 130) / 2, 180) def __del__(self): player.SetGameWindow(0) net.ClearPhaseWindow(net.PHASE_WINDOW_GAME, self) ui.ScriptWindow.__del__(self) def Open(self): app.SetFrameSkip(1) self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) self.quickSlotPageIndex = 0 self.PickingCharacterIndex = -1 self.PickingItemIndex = -1 self.consoleEnable = FALSE self.isShowDebugInfo = FALSE self.ShowNameFlag = FALSE self.enableXMasBoom = FALSE self.startTimeXMasBoom = 0.0 self.indexXMasBoom = 0 global cameraDistance, cameraPitch, cameraRotation, cameraHeight app.SetCamera(cameraDistance, cameraPitch, cameraRotation, cameraHeight) constInfo.SET_DEFAULT_CAMERA_MAX_DISTANCE() constInfo.SET_DEFAULT_CHRNAME_COLOR() constInfo.SET_DEFAULT_FOG_LEVEL() constInfo.SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE() constInfo.SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS() constInfo.SET_DEFAULT_USE_SKILL_EFFECT_ENABLE() # TWO_HANDED_WEAPON_ATTACK_SPEED_UP constInfo.SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE() # END_OF_TWO_HANDED_WEAPON_ATTACK_SPEED_UP import event event.SetLeftTimeString(localeInfo.UI_LEFT_TIME) textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE) if constInfo.PVPMODE_TEST_ENABLE: self.testPKMode = ui.TextLine() self.testPKMode.SetFontName(localeInfo.UI_DEF_FONT) self.testPKMode.SetPosition(0, 15) self.testPKMode.SetWindowHorizontalAlignCenter() self.testPKMode.SetHorizontalAlignCenter() self.testPKMode.SetFeather() self.testPKMode.SetOutline() self.testPKMode.Show() self.testAlignment = ui.TextLine() self.testAlignment.SetFontName(localeInfo.UI_DEF_FONT) self.testAlignment.SetPosition(0, 35) self.testAlignment.SetWindowHorizontalAlignCenter() self.testAlignment.SetHorizontalAlignCenter() self.testAlignment.SetFeather() self.testAlignment.SetOutline() self.testAlignment.Show() self.__BuildKeyDict() self.__BuildDebugInfo() # PRIVATE_SHOP_PRICE_LIST uiPrivateShopBuilder.Clear() # END_OF_PRIVATE_SHOP_PRICE_LIST # UNKNOWN_UPDATE exchange.InitTrading() # END_OF_UNKNOWN_UPDATE if debugInfo.IsDebugMode(): self.ToggleDebugInfo() ## Sound snd.SetMusicVolume(systemSetting.GetMusicVolume()*net.GetFieldMusicVolume()) snd.SetSoundVolume(systemSetting.GetSoundVolume()) netFieldMusicFileName = net.GetFieldMusicFileName() if netFieldMusicFileName: snd.FadeInMusic("BGM/" + netFieldMusicFileName) elif musicInfo.fieldMusic != "": snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) self.__SetQuickSlotMode() self.__SelectQuickPage(self.quickSlotPageIndex) self.SetFocus() self.Show() app.ShowCursor() net.SendEnterGamePacket() # START_GAME_ERROR_EXIT try: self.StartGame() except: import exception exception.Abort("GameWindow.Open") # END_OF_START_GAME_ERROR_EXIT # NPC가 큐브시스템으로 만들 수 있는 아이템들의 목록을 캐싱 # ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ] self.cubeInformation = {} self.currentCubeNPC = 0 def Close(self): self.Hide() global cameraDistance, cameraPitch, cameraRotation, cameraHeight (cameraDistance, cameraPitch, cameraRotation, cameraHeight) = app.GetCamera() if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic) self.onPressKeyDict = None self.onClickKeyDict = None chat.Close() snd.StopAllSound() grp.InitScreenEffect() chr.Destroy() textTail.Clear() quest.Clear() background.Destroy() guild.Destroy() messenger.Destroy() skill.ClearSkillData() wndMgr.Unlock() mouseModule.mouseController.DeattachObject() if self.guildWarQuestionDialog: self.guildWarQuestionDialog.Close() self.guildNameBoard = None self.partyRequestQuestionDialog = None self.partyInviteQuestionDialog = None self.guildInviteQuestionDialog = None self.guildWarQuestionDialog = None self.messengerAddFriendQuestion = None # UNKNOWN_UPDATE self.itemDropQuestionDialog = None # END_OF_UNKNOWN_UPDATE # QUEST_CONFIRM self.confirmDialog = None # END_OF_QUEST_CONFIRM self.PrintCoord = None self.FrameRate = None self.Pitch = None self.Splat = None self.TextureNum = None self.ObjectNum = None self.ViewDistance = None self.PrintMousePos = None self.ClearDictionary() self.playerGauge = None self.mapNameShower = None self.affectShower = None if self.console: self.console.BindGameClass(0) self.console.Close() self.console=None if self.targetBoard: self.targetBoard.Destroy() self.targetBoard = None if self.interface: self.interface.HideAllWindows() self.interface.Close() self.interface=None player.ClearSkillDict() player.ResetCameraRotation() self.KillFocus() app.HideCursor() print "---------------------------------------------------------------------------- CLOSE GAME WINDOW" def __BuildKeyDict(self): onPressKeyDict = {} ##PressKey 는 누르고 있는 동안 계속 적용되는 키이다. ## 숫자 단축키 퀵슬롯에 이용된다.(이후 숫자들도 퀵 슬롯용 예약) ## F12 는 클라 디버그용 키이므로 쓰지 않는 게 좋다. onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1) onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2) onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3) onPressKeyDict[app.DIK_4] = lambda : self.__PressNumKey(4) onPressKeyDict[app.DIK_5] = lambda : self.__PressNumKey(5) onPressKeyDict[app.DIK_6] = lambda : self.__PressNumKey(6) onPressKeyDict[app.DIK_7] = lambda : self.__PressNumKey(7) onPressKeyDict[app.DIK_8] = lambda : self.__PressNumKey(8) onPressKeyDict[app.DIK_9] = lambda : self.__PressNumKey(9) onPressKeyDict[app.DIK_F1] = lambda : self.__PressQuickSlot(4) onPressKeyDict[app.DIK_F2] = lambda : self.__PressQuickSlot(5) onPressKeyDict[app.DIK_F3] = lambda : self.__PressQuickSlot(6) onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) onPressKeyDict[app.DIK_F6] = lambda : self.__quikeqchange() onPressKeyDict[app.DIK_X] = lambda : self.__BonusPage() onPressKeyDict[app.DIK_LALT] = lambda : self.ShowName() onPressKeyDict[app.DIK_LCONTROL] = lambda : self.ShowMouseImage() onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen() onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack() #캐릭터 이동키 onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp() onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown() onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft() onPressKeyDict[app.DIK_RIGHT] = lambda : self.MoveRight() onPressKeyDict[app.DIK_W] = lambda : self.MoveUp() onPressKeyDict[app.DIK_S] = lambda : self.MoveDown() onPressKeyDict[app.DIK_A] = lambda : self.MoveLeft() onPressKeyDict[app.DIK_D] = lambda : self.MoveRight() onPressKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_TO_NEGATIVE) #onPressKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_G] = self.__PressGKey onPressKeyDict[app.DIK_Q] = self.__PressQKey onPressKeyDict[app.DIK_NUMPAD9] = lambda: app.MovieResetCamera() onPressKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_GRAVE] = lambda : self.PickUpItem() onPressKeyDict[app.DIK_Z] = lambda : self.PickUpItem() onPressKeyDict[app.DIK_C] = lambda state = "STATUS": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_V] = lambda state = "SKILL": self.interface.ToggleCharacterWindow(state) #onPressKeyDict[app.DIK_B] = lambda state = "EMOTICON": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_N] = lambda state = "QUEST": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_I] = lambda : self.interface.ToggleInventoryWindow() onPressKeyDict[app.DIK_O] = lambda : self.interface.ToggleDragonSoulWindowWithNoInfo() onPressKeyDict[app.DIK_M] = lambda : self.interface.PressMKey() #onPressKeyDict[app.DIK_H] = lambda : self.interface.OpenHelpWindow() onPressKeyDict[app.DIK_ADD] = lambda : self.interface.MiniMapScaleUp() onPressKeyDict[app.DIK_SUBTRACT] = lambda : self.interface.MiniMapScaleDown() onPressKeyDict[app.DIK_L] = lambda : self.interface.ToggleChatLogWindow() onPressKeyDict[app.DIK_COMMA] = lambda : self.ShowConsole() # "`" key onPressKeyDict[app.DIK_LSHIFT] = lambda : self.__SetQuickPageMode() onPressKeyDict[app.DIK_J] = lambda : self.__PressJKey() onPressKeyDict[app.DIK_H] = lambda : self.__PressHKey() onPressKeyDict[app.DIK_B] = lambda : self.__PressBKey() onPressKeyDict[app.DIK_F] = lambda : self.__PressFKey() # CUBE_TEST #onPressKeyDict[app.DIK_K] = lambda : self.interface.OpenCubeWindow() # CUBE_TEST_END self.onPressKeyDict = onPressKeyDict onClickKeyDict = {} onClickKeyDict[app.DIK_UP] = lambda : self.StopUp() onClickKeyDict[app.DIK_DOWN] = lambda : self.StopDown() onClickKeyDict[app.DIK_LEFT] = lambda : self.StopLeft() onClickKeyDict[app.DIK_RIGHT] = lambda : self.StopRight() onClickKeyDict[app.DIK_SPACE] = lambda : self.EndAttack() onClickKeyDict[app.DIK_W] = lambda : self.StopUp() onClickKeyDict[app.DIK_S] = lambda : self.StopDown() onClickKeyDict[app.DIK_A] = lambda : self.StopLeft() onClickKeyDict[app.DIK_D] = lambda : self.StopRight() onClickKeyDict[app.DIK_Q] = lambda: app.RotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_G] = lambda: self.__ReleaseGKey() onClickKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_LALT] = lambda: self.HideName() onClickKeyDict[app.DIK_LCONTROL] = lambda: self.HideMouseImage() onClickKeyDict[app.DIK_LSHIFT] = lambda: self.__SetQuickSlotMode() #if constInfo.PVPMODE_ACCELKEY_ENABLE: # onClickKeyDict[app.DIK_B] = lambda: self.ChangePKMode() self.onClickKeyDict=onClickKeyDict def __PressNumKey(self,num): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if num >= 1 and num <= 9: if(chrmgr.IsPossibleEmoticon(-1)): chrmgr.SetEmoticon(-1,int(num)-1) net.SendEmoticon(int(num)-1) else: if num >= 1 and num <= 4: self.pressNumber(num-1) def __ClickBKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): return else: if constInfo.PVPMODE_ACCELKEY_ENABLE: self.ChangePKMode() def __PressJKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if player.IsMountingHorse(): net.SendChatPacket("/unmount") else: #net.SendChatPacket("/user_horse_ride") if not uiPrivateShopBuilder.IsBuildingPrivateShop(): for i in xrange(player.INVENTORY_PAGE_SIZE): if player.GetItemIndex(i) in (71114, 71116, 71118, 71120): net.SendItemUsePacket(i) break def __PressHKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_ride") else: self.interface.OpenHelpWindow() def __PressBKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_back") else: state = "EMOTICON" self.interface.ToggleCharacterWindow(state) def __PressFKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_feed") else: app.ZoomCamera(app.CAMERA_TO_POSITIVE) def __PressGKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/ride") else: if self.ShowNameFlag: self.interface.ToggleGuildWindow() else: app.PitchCamera(app.CAMERA_TO_POSITIVE) def __ReleaseGKey(self): app.PitchCamera(app.CAMERA_STOP) def __PressQKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if 0==interfaceModule.IsQBHide: interfaceModule.IsQBHide = 1 self.interface.HideAllQuestButton() else: interfaceModule.IsQBHide = 0 self.interface.ShowAllQuestButton() else: app.RotateCamera(app.CAMERA_TO_NEGATIVE) def __SetQuickSlotMode(self): self.pressNumber=ui.__mem_func__(self.__PressQuickSlot) def __SetQuickPageMode(self): self.pressNumber=ui.__mem_func__(self.__SelectQuickPage) def __PressQuickSlot(self, localSlotIndex): if localeInfo.IsARABIC(): if 0 <= localSlotIndex and localSlotIndex < 4: player.RequestUseLocalQuickSlot(3-localSlotIndex) else: player.RequestUseLocalQuickSlot(11-localSlotIndex) else: player.RequestUseLocalQuickSlot(localSlotIndex) def __SelectQuickPage(self, pageIndex): self.quickSlotPageIndex = pageIndex player.SetQuickPage(pageIndex) def ToggleDebugInfo(self): self.isShowDebugInfo = not self.isShowDebugInfo if self.isShowDebugInfo: self.PrintCoord.Show() self.FrameRate.Show() self.Pitch.Show() self.Splat.Show() self.TextureNum.Show() self.ObjectNum.Show() self.ViewDistance.Show() self.PrintMousePos.Show() else: self.PrintCoord.Hide() self.FrameRate.Hide() self.Pitch.Hide() self.Splat.Hide() self.TextureNum.Hide() self.ObjectNum.Hide() self.ViewDistance.Hide() self.PrintMousePos.Hide() def __BuildDebugInfo(self): ## Character Position Coordinate self.PrintCoord = ui.TextLine() self.PrintCoord.SetFontName(localeInfo.UI_DEF_FONT) self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 270, 0) ## Frame Rate self.FrameRate = ui.TextLine() self.FrameRate.SetFontName(localeInfo.UI_DEF_FONT) self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 270, 20) ## Camera Pitch self.Pitch = ui.TextLine() self.Pitch.SetFontName(localeInfo.UI_DEF_FONT) self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 270, 40) ## Splat self.Splat = ui.TextLine() self.Splat.SetFontName(localeInfo.UI_DEF_FONT) self.Splat.SetPosition(wndMgr.GetScreenWidth() - 270, 60) ## self.PrintMousePos = ui.TextLine() self.PrintMousePos.SetFontName(localeInfo.UI_DEF_FONT) self.PrintMousePos.SetPosition(wndMgr.GetScreenWidth() - 270, 80) # TextureNum self.TextureNum = ui.TextLine() self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT) self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100) # 오브젝트 그리는 개수 self.ObjectNum = ui.TextLine() self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT) self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120) # 시야거리 self.ViewDistance = ui.TextLine() self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT) self.ViewDistance.SetPosition(0, 0) #Saat self.timeLine.SetWindowHorizontalAlignCenter() self.timeLine.SetHorizontalAlignCenter() self.timeLine.SetFeather() self.timeLine.SetOutline() self.timeLine.Show() def __NotifyError(self, msg): chat.AppendChat(chat.CHAT_TYPE_INFO, msg) def ChangePKMode(self): if not app.IsPressed(app.DIK_LCONTROL): return if player.GetStatus(player.LEVEL)<constInfo.PVPMODE_PROTECTED_LEVEL: self.__NotifyError(localeInfo.OPTION_PVPMODE_PROTECT % (constInfo.PVPMODE_PROTECTED_LEVEL)) return curTime = app.GetTime() if curTime - self.lastPKModeSendedTime < constInfo.PVPMODE_ACCELKEY_DELAY: return self.lastPKModeSendedTime = curTime curPKMode = player.GetPKMode() nextPKMode = curPKMode + 1 if nextPKMode == player.PK_MODE_PROTECT: if 0 == player.GetGuildID(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OPTION_PVPMODE_CANNOT_SET_GUILD_MODE) nextPKMode = 0 else: nextPKMode = player.PK_MODE_GUILD elif nextPKMode == player.PK_MODE_MAX_NUM: nextPKMode = 0 net.SendChatPacket("/PKMode " + str(nextPKMode)) print "/PKMode " + str(nextPKMode) def OnChangePKMode(self): self.interface.OnChangePKMode() try: self.__NotifyError(localeInfo.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()]) except KeyError: print "UNKNOWN PVPMode[%d]" % (player.GetPKMode()) if constInfo.PVPMODE_TEST_ENABLE: curPKMode = player.GetPKMode() alignment, grade = chr.testGetPKData() self.pkModeNameDict = { 0 : "PEACE", 1 : "REVENGE", 2 : "FREE", 3 : "PROTECT", } self.testPKMode.SetText("Current PK Mode : " + self.pkModeNameDict.get(curPKMode, "UNKNOWN")) self.testAlignment.SetText("Current Alignment : " + str(alignment) + " (" + localeInfo.TITLE_NAME_LIST[grade] + ")") ############################################################################################### ############################################################################################### ## Game Callback Functions # Start def StartGame(self): self.RefreshInventory() self.RefreshEquipment() self.RefreshCharacter() self.RefreshSkill() # Refresh def CheckGameButton(self): if self.interface: self.interface.CheckGameButton() def RefreshAlignment(self): self.interface.RefreshAlignment() def RefreshStatus(self): self.CheckGameButton() if self.interface: self.interface.RefreshStatus() if self.playerGauge: self.playerGauge.RefreshGauge() def RefreshStamina(self): self.interface.RefreshStamina() def RefreshSkill(self): self.CheckGameButton() if self.interface: self.interface.RefreshSkill() def RefreshQuest(self): self.interface.RefreshQuest() def RefreshMessenger(self): self.interface.RefreshMessenger() def RefreshGuildInfoPage(self): self.interface.RefreshGuildInfoPage() def RefreshGuildBoardPage(self): self.interface.RefreshGuildBoardPage() def RefreshGuildMemberPage(self): self.interface.RefreshGuildMemberPage() def RefreshGuildMemberPageGradeComboBox(self): self.interface.RefreshGuildMemberPageGradeComboBox() def RefreshGuildSkillPage(self): self.interface.RefreshGuildSkillPage() def RefreshGuildGradePage(self): self.interface.RefreshGuildGradePage() def RefreshMobile(self): if self.interface: self.interface.RefreshMobile() def OnMobileAuthority(self): self.interface.OnMobileAuthority() def OnBlockMode(self, mode): self.interface.OnBlockMode(mode) def OpenQuestWindow(self, skin, idx): self.interface.OpenQuestWindow(skin, idx) def AskGuildName(self): guildNameBoard = uiCommon.InputDialog() guildNameBoard.SetTitle(localeInfo.GUILD_NAME) guildNameBoard.SetAcceptEvent(ui.__mem_func__(self.ConfirmGuildName)) guildNameBoard.SetCancelEvent(ui.__mem_func__(self.CancelGuildName)) guildNameBoard.Open() self.guildNameBoard = guildNameBoard def ConfirmGuildName(self): guildName = self.guildNameBoard.GetText() if not guildName: return if net.IsInsultIn(guildName): self.PopupMessage(localeInfo.GUILD_CREATE_ERROR_INSULT_NAME) return net.SendAnswerMakeGuildPacket(guildName) self.guildNameBoard.Close() self.guildNameBoard = None return TRUE def CancelGuildName(self): self.guildNameBoard.Close() self.guildNameBoard = None return TRUE ## Refine def PopupMessage(self, msg): self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK) def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type=0): self.interface.OpenRefineDialog(targetItemPos, nextGradeItemVnum, cost, prob, type) def AppendMaterialToRefineDialog(self, vnum, count): self.interface.AppendMaterialToRefineDialog(vnum, count) def RunUseSkillEvent(self, slotIndex, coolTime): self.interface.OnUseSkill(slotIndex, coolTime) def ClearAffects(self): self.affectShower.ClearAffects() def SetAffect(self, affect): self.affectShower.SetAffect(affect) def ResetAffect(self, affect): self.affectShower.ResetAffect(affect) # UNKNOWN_UPDATE def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration): self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1) elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type: self.BINARY_DragonSoulGiveQuilification() def BINARY_NEW_RemoveAffect(self, type, pointIdx): self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulDeactivate() # END_OF_UNKNOWN_UPDATE def ActivateSkillSlot(self, slotIndex): if self.interface: self.interface.OnActivateSkill(slotIndex) def DeactivateSkillSlot(self, slotIndex): if self.interface: self.interface.OnDeactivateSkill(slotIndex) def RefreshEquipment(self): if self.interface: self.interface.RefreshInventory() def RefreshInventory(self): if self.interface: self.interface.RefreshInventory() def RefreshCharacter(self): if self.interface: self.interface.RefreshCharacter() def OnGameOver(self): self.CloseTargetBoard() self.OpenRestartDialog() def OpenRestartDialog(self): self.interface.OpenRestartDialog() def ChangeCurrentSkill(self, skillSlotNumber): self.interface.OnChangeCurrentSkill(skillSlotNumber) ## TargetBoard def SetPCTargetBoard(self, vid, name): self.targetBoard.Open(vid, name) if app.IsPressed(app.DIK_LCONTROL): if not player.IsSameEmpire(vid): return if player.IsMainCharacterIndex(vid): return elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(vid): return self.interface.OpenWhisperDialog(name) def RefreshTargetBoardByVID(self, vid): self.targetBoard.RefreshByVID(vid) def RefreshTargetBoardByName(self, name): self.targetBoard.RefreshByName(name) def __RefreshTargetBoard(self): self.targetBoard.Refresh() def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() def CloseTargetBoardIfDifferent(self, vid): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.Close() def CloseTargetBoard(self): self.targetBoard.Close() ## View Equipment def OpenEquipmentDialog(self, vid): self.interface.OpenEquipmentDialog(vid) def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count): self.interface.SetEquipmentDialogItem(vid, slotIndex, vnum, count) def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value): self.interface.SetEquipmentDialogSocket(vid, slotIndex, socketIndex, value) def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value): self.interface.SetEquipmentDialogAttr(vid, slotIndex, attrIndex, type, value) # SHOW_LOCAL_MAP_NAME def ShowMapName(self, mapName, x, y): if self.mapNameShower: self.mapNameShower.ShowMapName(mapName, x, y) if self.interface: self.interface.SetMapName(mapName) # END_OF_SHOW_LOCAL_MAP_NAME def BINARY_OpenAtlasWindow(self): self.interface.BINARY_OpenAtlasWindow() ## Chat def OnRecvWhisper(self, mode, name, line): if mode == chat.WHISPER_TYPE_GM: self.interface.RegisterGameMasterName(name) chat.AppendWhisper(mode, name, line) self.interface.RecvWhisper(name) def OnRecvWhisperSystemMessage(self, mode, name, line): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line) self.interface.RecvWhisper(name) def OnRecvWhisperError(self, mode, name, line): if localeInfo.WHISPER_ERROR.has_key(mode): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, localeInfo.WHISPER_ERROR[mode](name)) else: chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, "Whisper Unknown Error(mode=%d, name=%s)" % (mode, name)) self.interface.RecvWhisper(name) def RecvWhisper(self, name): self.interface.RecvWhisper(name) def OnPickMoney(self, money): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_PICK_MONEY % (money)) def OnShopError(self, type): try: self.PopupMessage(localeInfo.SHOP_ERROR_DICT[type]) except KeyError: self.PopupMessage(localeInfo.SHOP_ERROR_UNKNOWN % (type)) def OnSafeBoxError(self): self.PopupMessage(localeInfo.SAFEBOX_ERROR) def OnFishingSuccess(self, isFish, fishName): chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_SUCCESS(isFish, fishName), 2000) # ADD_FISHING_MESSAGE def OnFishingNotifyUnknown(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_UNKNOWN) def OnFishingWrongPlace(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_WRONG_PLACE) # END_OF_ADD_FISHING_MESSAGE def OnFishingNotify(self, isFish, fishName): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_NOTIFY(isFish, fishName)) def OnFishingFailure(self): chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_FAILURE, 2000) def OnCannotPickItem(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_PICK_ITEM) # MINING def OnCannotMining(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_MINING) # END_OF_MINING def OnCannotUseSkill(self, vid, type): if localeInfo.USE_SKILL_ERROR_TAIL_DICT.has_key(type): textTail.RegisterInfoTail(vid, localeInfo.USE_SKILL_ERROR_TAIL_DICT[type]) if localeInfo.USE_SKILL_ERROR_CHAT_DICT.has_key(type): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_SKILL_ERROR_CHAT_DICT[type]) def OnCannotShotError(self, vid, type): textTail.RegisterInfoTail(vid, localeInfo.SHOT_ERROR_TAIL_DICT.get(type, localeInfo.SHOT_ERROR_UNKNOWN % (type))) ## PointReset def StartPointReset(self): self.interface.OpenPointResetDialog() ## Shop def StartShop(self, vid): self.interface.OpenShopDialog(vid) def EndShop(self): self.interface.CloseShopDialog() def RefreshShop(self): self.interface.RefreshShopDialog() def SetShopSellingPrice(self, Price): pass ## Exchange def StartExchange(self): self.interface.StartExchange() def EndExchange(self): self.interface.EndExchange() def RefreshExchange(self): self.interface.RefreshExchange() ## Party def RecvPartyInviteQuestion(self, leaderVID, leaderName): partyInviteQuestionDialog = uiCommon.QuestionDialog() partyInviteQuestionDialog.SetText(leaderName + localeInfo.PARTY_DO_YOU_JOIN) partyInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.Open() partyInviteQuestionDialog.partyLeaderVID = leaderVID self.partyInviteQuestionDialog = partyInviteQuestionDialog def AnswerPartyInvite(self, answer): if not self.partyInviteQuestionDialog: return partyLeaderVID = self.partyInviteQuestionDialog.partyLeaderVID distance = player.GetCharacterDistance(partyLeaderVID) if distance < 0.0 or distance > 5000: answer = FALSE net.SendPartyInviteAnswerPacket(partyLeaderVID, answer) self.partyInviteQuestionDialog.Close() self.partyInviteQuestionDialog = None def AddPartyMember(self, pid, name): self.interface.AddPartyMember(pid, name) def UpdatePartyMemberInfo(self, pid): self.interface.UpdatePartyMemberInfo(pid) def RemovePartyMember(self, pid): self.interface.RemovePartyMember(pid) self.__RefreshTargetBoard() def LinkPartyMember(self, pid, vid): self.interface.LinkPartyMember(pid, vid) def UnlinkPartyMember(self, pid): self.interface.UnlinkPartyMember(pid) def UnlinkAllPartyMember(self): self.interface.UnlinkAllPartyMember() def ExitParty(self): self.interface.ExitParty() self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID()) def ChangePartyParameter(self, distributionMode): self.interface.ChangePartyParameter(distributionMode) ## Messenger def OnMessengerAddFriendQuestion(self, name): messengerAddFriendQuestion = uiCommon.QuestionDialog2() messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 % (name)) messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2) messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend)) messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend)) messengerAddFriendQuestion.Open() messengerAddFriendQuestion.name = name self.messengerAddFriendQuestion = messengerAddFriendQuestion def OnAcceptAddFriend(self): name = self.messengerAddFriendQuestion.name net.SendChatPacket("/messenger_auth y " + name) self.OnCloseAddFriendQuestionDialog() return TRUE def OnDenyAddFriend(self): name = self.messengerAddFriendQuestion.name net.SendChatPacket("/messenger_auth n " + name) self.OnCloseAddFriendQuestionDialog() return TRUE def OnCloseAddFriendQuestionDialog(self): self.messengerAddFriendQuestion.Close() self.messengerAddFriendQuestion = None return TRUE ## SafeBox def OpenSafeboxWindow(self, size): self.interface.OpenSafeboxWindow(size) def RefreshSafebox(self): self.interface.RefreshSafebox() def RefreshSafeboxMoney(self): self.interface.RefreshSafeboxMoney() # ITEM_MALL def OpenMallWindow(self, size): self.interface.OpenMallWindow(size) def RefreshMall(self): self.interface.RefreshMall() # END_OF_ITEM_MALL ## Guild def RecvGuildInviteQuestion(self, guildID, guildName): guildInviteQuestionDialog = uiCommon.QuestionDialog() guildInviteQuestionDialog.SetText(guildName + localeInfo.GUILD_DO_YOU_JOIN) guildInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerGuildInvite(arg)) guildInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerGuildInvite(arg)) guildInviteQuestionDialog.Open() guildInviteQuestionDialog.guildID = guildID self.guildInviteQuestionDialog = guildInviteQuestionDialog def AnswerGuildInvite(self, answer): if not self.guildInviteQuestionDialog: return guildLeaderVID = self.guildInviteQuestionDialog.guildID net.SendGuildInviteAnswerPacket(guildLeaderVID, answer) self.guildInviteQuestionDialog.Close() self.guildInviteQuestionDialog = None def DeleteGuild(self): self.interface.DeleteGuild() ## Clock def ShowClock(self, second): self.interface.ShowClock(second) def HideClock(self): self.interface.HideClock() ## Emotion def BINARY_ActEmotion(self, emotionIndex): if self.interface.wndCharacter: self.interface.wndCharacter.ActEmotion(emotionIndex) ############################################################################################### ############################################################################################### ## Keyboard Functions def CheckFocus(self): if FALSE == self.IsFocus(): if TRUE == self.interface.IsOpenChat(): self.interface.ToggleChat() self.SetFocus() def SaveScreen(self): print "save screen" # SCREENSHOT_CWDSAVE if SCREENSHOT_CWDSAVE: if not os.path.exists(os.getcwd()+os.sep+"screenshot"): os.mkdir(os.getcwd()+os.sep+"screenshot") (succeeded, name) = grp.SaveScreenShotToPath(os.getcwd()+os.sep+"screenshot"+os.sep) elif SCREENSHOT_DIR: (succeeded, name) = grp.SaveScreenShot(SCREENSHOT_DIR) else: (succeeded, name) = grp.SaveScreenShot() # END_OF_SCREENSHOT_CWDSAVE if succeeded: pass """ chat.AppendChat(chat.CHAT_TYPE_INFO, name + localeInfo.SCREENSHOT_SAVE1) chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE2) """ else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE_FAILURE) def ShowConsole(self): if debugInfo.IsDebugMode() or TRUE == self.consoleEnable: player.EndKeyWalkingImmediately() self.console.OpenWindow() def ShowName(self): self.ShowNameFlag = TRUE self.playerGauge.EnableShowAlways() player.SetQuickPage(self.quickSlotPageIndex+1) # ADD_ALWAYS_SHOW_NAME def __IsShowName(self): if systemSetting.IsAlwaysShowName(): return TRUE if self.ShowNameFlag: return TRUE return FALSE # END_OF_ADD_ALWAYS_SHOW_NAME def HideName(self): self.ShowNameFlag = FALSE self.playerGauge.DisableShowAlways() player.SetQuickPage(self.quickSlotPageIndex) def ShowMouseImage(self): self.interface.ShowMouseImage() def HideMouseImage(self): self.interface.HideMouseImage() def StartAttack(self): player.SetAttackKeyState(TRUE) def EndAttack(self): player.SetAttackKeyState(FALSE) def MoveUp(self): player.SetSingleDIKKeyState(app.DIK_UP, TRUE) def MoveDown(self): player.SetSingleDIKKeyState(app.DIK_DOWN, TRUE) def MoveLeft(self): player.SetSingleDIKKeyState(app.DIK_LEFT, TRUE) def MoveRight(self): player.SetSingleDIKKeyState(app.DIK_RIGHT, TRUE) def StopUp(self): player.SetSingleDIKKeyState(app.DIK_UP, FALSE) def StopDown(self): player.SetSingleDIKKeyState(app.DIK_DOWN, FALSE) def StopLeft(self): player.SetSingleDIKKeyState(app.DIK_LEFT, FALSE) def StopRight(self): player.SetSingleDIKKeyState(app.DIK_RIGHT, FALSE) def PickUpItem(self): player.PickCloseItem() ############################################################################################### ############################################################################################### ## Event Handler def OnKeyDown(self, key): if self.interface.wndWeb and self.interface.wndWeb.IsShow(): return if key == app.DIK_ESC: self.RequestDropItem(FALSE) constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) try: self.onPressKeyDict[key]() except KeyError: pass except: raise return TRUE def OnKeyUp(self, key): try: self.onClickKeyDict[key]() except KeyError: pass except: raise return TRUE def OnMouseLeftButtonDown(self): if self.interface.BUILD_OnMouseLeftButtonDown(): return if mouseModule.mouseController.isAttached(): self.CheckFocus() else: hyperlink = ui.GetHyperlink() if hyperlink: return else: self.CheckFocus() player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS); return TRUE def OnMouseLeftButtonUp(self): if self.interface.BUILD_OnMouseLeftButtonUp(): return if mouseModule.mouseController.isAttached(): attachedType = mouseModule.mouseController.GetAttachedType() attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex() attachedItemSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemCount = mouseModule.mouseController.GetAttachedItemCount() ## QuickSlot if player.SLOT_TYPE_QUICK_SLOT == attachedType: player.RequestDeleteGlobalQuickSlot(attachedItemSlotPos) ## Inventory elif player.SLOT_TYPE_INVENTORY == attachedType: if player.ITEM_MONEY == attachedItemIndex: self.__PutMoney(attachedType, attachedItemCount, self.PickingCharacterIndex) else: self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex) ## DragonSoul elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex) mouseModule.mouseController.DeattachObject() else: hyperlink = ui.GetHyperlink() if hyperlink: if app.IsPressed(app.DIK_LALT): link = chat.GetLinkFromHyperlink(hyperlink) ime.PasteString(link) else: self.interface.MakeHyperlinkTooltip(hyperlink) return else: player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK) #player.EndMouseWalking() return TRUE def __PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID): if player.SLOT_TYPE_INVENTORY == attachedType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: attachedInvenType = player.SlotTypeToInvenType(attachedType) if TRUE == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID: if player.IsEquipmentSlot(attachedItemSlotPos) and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedType: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.EXCHANGE_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if chr.IsNPC(dstChrID): net.SendGiveItemPacket(dstChrID, attachedInvenType, attachedItemSlotPos, attachedItemCount) else: net.SendExchangeStartPacket(dstChrID) net.SendExchangeItemAddPacket(attachedInvenType, attachedItemSlotPos, 0) else: self.__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount) def __PutMoney(self, attachedType, attachedMoney, dstChrID): if TRUE == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID: net.SendExchangeStartPacket(dstChrID) net.SendExchangeElkAddPacket(attachedMoney) else: self.__DropMoney(attachedType, attachedMoney) def __DropMoney(self, attachedType, attachedMoney): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if attachedMoney>=1000: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_MONEY_FAILURE_1000_OVER, 0, localeInfo.UI_OK) return itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(localeInfo.DO_YOU_DROP_MONEY % (attachedMoney)) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropCount = attachedMoney itemDropQuestionDialog.dropNumber = player.ITEM_MONEY self.itemDropQuestionDialog = itemDropQuestionDialog def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if player.SLOT_TYPE_INVENTORY == attachedType and player.IsEquipmentSlot(attachedItemSlotPos): self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_ITEM_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if player.SLOT_TYPE_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) def RequestDropItem(self, answer): if not self.itemDropQuestionDialog: return if answer: dropType = self.itemDropQuestionDialog.dropType dropCount = self.itemDropQuestionDialog.dropCount dropNumber = self.itemDropQuestionDialog.dropNumber if player.SLOT_TYPE_INVENTORY == dropType: if dropNumber == player.ITEM_MONEY: net.SendGoldDropPacketNew(dropCount) snd.PlaySound("sound/ui/money.wav") else: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == dropType: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount, player.DRAGON_SOUL_INVENTORY) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP self.itemDropQuestionDialog.Close() self.itemDropQuestionDialog = None constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) # PRIVATESHOP_DISABLE_ITEM_DROP def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY): if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemDropPacketNew(itemInvenType, itemVNum, itemCount) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP def OnMouseRightButtonDown(self): self.CheckFocus() if TRUE == mouseModule.mouseController.isAttached(): mouseModule.mouseController.DeattachObject() else: player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS) return TRUE def OnMouseRightButtonUp(self): if TRUE == mouseModule.mouseController.isAttached(): return TRUE 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.mapNameShower.IsShow(): self.mapNameShower.Update() if self.isShowDebugInfo: self.UpdateDebugInfo() if self.enableXMasBoom: self.__XMasBoom_Update() if 1 == constInfo.AUTO_PICK_UP: self.PickUpItem() if int(int(self.interface.LastContactTimeStamp) + self.interface.WaitTime) < int(app.GetTime()) and self.interface.State == "Kapali": self.interface.State = "Acik" self.interface.BUILD_OnUpdate() localtime = localtime = time.strftime("%d.%m.%y %H:%M:%S") self.timeLine.SetText(localtime) self.timeLine.Show() def UpdateDebugInfo(self): # # 캐릭터 좌표 및 FPS 출력 (x, y, z) = player.GetMainCharacterPosition() nUpdateTime = app.GetUpdateTime() nUpdateFPS = app.GetUpdateFPS() nRenderFPS = app.GetRenderFPS() nFaceCount = app.GetFaceCount() fFaceSpeed = app.GetFaceSpeed() nST=background.GetRenderShadowTime() (fAveRT, nCurRT) = app.GetRenderTime() (iNum, fFogStart, fFogEnd, fFarCilp) = background.GetDistanceSetInfo() (iPatch, iSplat, fSplatRatio, sTextureNum) = background.GetRenderedSplatNum() if iPatch == 0: iPatch = 1 #(dwRenderedThing, dwRenderedCRC) = background.GetRenderedGraphicThingInstanceNum() #self.PrintCoord.SetText("Coordinate: %.2f %.2f %.2f ATM: %d" % (x, y, z, app.GetAvailableTextureMemory()/(1024*1024))) #xMouse, yMouse = wndMgr.GetMousePosition() #self.PrintMousePos.SetText("MousePosition: %d %d" % (xMouse, yMouse)) #self.FrameRate.SetText("UFPS: %3d UT: %3d FS %.2f" % (nUpdateFPS, nUpdateTime, fFaceSpeed)) #if fAveRT>1.0: #self.Pitch.SetText("RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) " % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount/fAveRT)) #self.Splat.SetText("PATCH: %d SPLAT: %d BAD(%.2f)" % (iPatch, iSplat, fSplatRatio)) #self.Pitch.SetText("Pitch: %.2f" % (app.GetCameraPitch()) #self.TextureNum.SetText("TN : %s" % (sTextureNum)) #self.ObjectNum.SetText("GTI : %d, CRC : %d" % (dwRenderedThing, dwRenderedCRC)) #self.ViewDistance.SetText("Num : %d, FS : %f, FE : %f, FC : %f" % (iNum, fFogStart, fFogEnd, fFarCilp)) def OnRender(self): app.RenderGame() if self.console.Console.collision: background.RenderCollision() chr.RenderCollision() (x, y) = app.GetCursorPosition() ######################## # Picking ######################## textTail.UpdateAllTextTail() if TRUE == wndMgr.IsPickedWindow(self.hWnd): self.PickingCharacterIndex = chr.Pick() if -1 != self.PickingCharacterIndex: textTail.ShowCharacterTextTail(self.PickingCharacterIndex) if 0 != self.targetBoard.GetTargetVID(): textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID()) # ADD_ALWAYS_SHOW_NAME if not self.__IsShowName(): self.PickingItemIndex = item.Pick() if -1 != self.PickingItemIndex: textTail.ShowItemTextTail(self.PickingItemIndex) # END_OF_ADD_ALWAYS_SHOW_NAME ## Show all name in the range # ADD_ALWAYS_SHOW_NAME if self.__IsShowName(): textTail.ShowAllTextTail() self.PickingItemIndex = textTail.Pick(x, y) # END_OF_ADD_ALWAYS_SHOW_NAME textTail.UpdateShowingTextTail() textTail.ArrangeTextTail() if -1 != self.PickingItemIndex: textTail.SelectItemName(self.PickingItemIndex) grp.PopState() grp.SetInterfaceRenderState() textTail.Render() textTail.HideAllTextTail() def OnPressEscapeKey(self): if app.TARGET == app.GetCursor(): app.SetCursor(app.NORMAL) elif TRUE == mouseModule.mouseController.isAttached(): mouseModule.mouseController.DeattachObject() else: self.interface.OpenSystemDialog() return TRUE def OnIMEReturn(self): if app.IsPressed(app.DIK_LSHIFT): self.interface.OpenWhisperDialogWithoutTarget() else: self.interface.ToggleChat() return TRUE def OnPressExitKey(self): self.interface.ToggleSystemDialog() return TRUE ## BINARY CALLBACK ###################################################################################### # WEDDING def BINARY_LoverInfo(self, name, lovePoint): if self.interface.wndMessenger: self.interface.wndMessenger.OnAddLover(name, lovePoint) if self.affectShower: self.affectShower.SetLoverInfo(name, lovePoint) def BINARY_UpdateLovePoint(self, lovePoint): if self.interface.wndMessenger: self.interface.wndMessenger.OnUpdateLovePoint(lovePoint) if self.affectShower: self.affectShower.OnUpdateLovePoint(lovePoint) # END_OF_WEDDING # QUEST_CONFIRM def BINARY_OnQuestConfirm(self, msg, timeout, pid): confirmDialog = uiCommon.QuestionDialogWithTimeLimit() confirmDialog.Open(msg, timeout) confirmDialog.SetAcceptEvent(lambda answer=TRUE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) confirmDialog.SetCancelEvent(lambda answer=FALSE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) self.confirmDialog = confirmDialog # END_OF_QUEST_CONFIRM # GIFT command def Gift_Show(self): self.interface.ShowGift() # CUBE def BINARY_Cube_Open(self, npcVNUM): self.currentCubeNPC = npcVNUM self.interface.OpenCubeWindow() if npcVNUM not in self.cubeInformation: net.SendChatPacket("/cube r_info") else: cubeInfoList = self.cubeInformation[npcVNUM] i = 0 for cubeInfo in cubeInfoList: self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"]) j = 0 for materialList in cubeInfo["materialList"]: for materialInfo in materialList: itemVnum, itemCount = materialInfo self.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount) j = j + 1 i = i + 1 self.interface.wndCube.Refresh() def BINARY_Cube_Close(self): self.interface.CloseCubeWindow() # 제작에 필요한 골드, 예상되는 완성품의 VNUM과 개수 정보 update def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count): self.interface.UpdateCubeInfo(gold, itemVnum, count) def BINARY_Cube_Succeed(self, itemVnum, count): print "큐브 제작 성공" self.interface.SucceedCubeWork(itemVnum, count) pass def BINARY_Cube_Failed(self): print "큐브 제작 실패" self.interface.FailedCubeWork() pass def BINARY_Cube_ResultList(self, npcVNUM, listText): # ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 이런식으로 "/" 문자로 구분된 리스트를 줌 #print listText if npcVNUM == 0: npcVNUM = self.currentCubeNPC self.cubeInformation[npcVNUM] = [] try: for eachInfoText in listText.split("/"): eachInfo = eachInfoText.split(",") itemVnum = int(eachInfo[0]) itemCount = int(eachInfo[1]) self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount}) self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount) resultCount = len(self.cubeInformation[npcVNUM]) requestCount = 7 modCount = resultCount % requestCount splitCount = resultCount / requestCount for i in xrange(splitCount): #print("/cube r_info %d %d" % (i * requestCount, requestCount)) net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount)) if 0 < modCount: #print("/cube r_info %d %d" % (splitCount * requestCount, modCount)) net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount)) except RuntimeError, msg: dbg.TraceError(msg) return 0 pass def BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText): # Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000 try: #print listText if 3 > len(listText): dbg.TraceError("Wrong Cube Material Infomation") return 0 eachResultList = listText.split("@") cubeInfo = self.cubeInformation[self.currentCubeNPC] itemIndex = 0 for eachResultText in eachResultList: cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []] materialList = cubeInfo[startIndex + itemIndex]["materialList"] gold = 0 splitResult = eachResultText.split("/") if 1 < len(splitResult): gold = int(splitResult[1]) #print "splitResult : ", splitResult eachMaterialList = splitResult[0].split("&") i = 0 for eachMaterialText in eachMaterialList: complicatedList = eachMaterialText.split("|") if 0 < len(complicatedList): for complicatedText in complicatedList: (itemVnum, itemCount) = complicatedText.split(",") itemVnum = int(itemVnum) itemCount = int(itemCount) self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount) materialList[i].append((itemVnum, itemCount)) else: itemVnum, itemCount = eachMaterialText.split(",") itemVnum = int(itemVnum) itemCount = int(itemCount) self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount) materialList[i].append((itemVnum, itemCount)) i = i + 1 itemIndex = itemIndex + 1 self.interface.wndCube.Refresh() except RuntimeError, msg: dbg.TraceError(msg) return 0 pass # END_OF_CUBE # 용혼석 def BINARY_Highlight_Item(self, inven_type, inven_pos): self.interface.Highligt_Item(inven_type, inven_pos) def BINARY_DragonSoulGiveQuilification(self): self.interface.DragonSoulGiveQuilification() def BINARY_DragonSoulRefineWindow_Open(self): self.interface.OpenDragonSoulRefineWindow() def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos): self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos) def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos): self.interface.SucceedDragonSoulRefine(inven_type, inven_pos) # END of DRAGON SOUL REFINE WINDOW def BINARY_SetBigMessage(self, message): self.interface.bigBoard.SetTip(message) def BINARY_SetTipMessage(self, message): self.interface.tipBoard.SetTip(message) def BINARY_AppendNotifyMessage(self, type): if not type in localeInfo.NOTIFY_MESSAGE: return chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.NOTIFY_MESSAGE[type]) def BINARY_Guild_EnterGuildArea(self, areaID): self.interface.BULID_EnterGuildArea(areaID) def BINARY_Guild_ExitGuildArea(self, areaID): self.interface.BULID_ExitGuildArea(areaID) def BINARY_GuildWar_OnSendDeclare(self, guildID): pass def BINARY_GuildWar_OnRecvDeclare(self, guildID, warType): mainCharacterName = player.GetMainCharacterName() masterName = guild.GetGuildMasterName() if mainCharacterName == masterName: self.__GuildWar_OpenAskDialog(guildID, warType) def BINARY_GuildWar_OnRecvPoint(self, gainGuildID, opponentGuildID, point): self.interface.OnRecvGuildWarPoint(gainGuildID, opponentGuildID, point) def BINARY_GuildWar_OnStart(self, guildSelf, guildOpp): self.interface.OnStartGuildWar(guildSelf, guildOpp) def BINARY_GuildWar_OnEnd(self, guildSelf, guildOpp): self.interface.OnEndGuildWar(guildSelf, guildOpp) def BINARY_BettingGuildWar_SetObserverMode(self, isEnable): self.interface.BINARY_SetObserverMode(isEnable) def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount): self.interface.wndMiniMap.UpdateObserverCount(observerCount) def __GuildWar_UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2, observerCount): guildID1 = int(guildID1) guildID2 = int(guildID2) memberCount1 = int(memberCount1) memberCount2 = int(memberCount2) observerCount = int(observerCount) self.interface.UpdateMemberCount(guildID1, memberCount1, guildID2, memberCount2) self.interface.wndMiniMap.UpdateObserverCount(observerCount) def __GuildWar_OpenAskDialog(self, guildID, warType): guildName = guild.GetGuildName(guildID) # REMOVED_GUILD_BUG_FIX if "Noname" == guildName: return # END_OF_REMOVED_GUILD_BUG_FIX import uiGuild questionDialog = uiGuild.AcceptGuildWarDialog() questionDialog.SAFE_SetAcceptEvent(self.__GuildWar_OnAccept) questionDialog.SAFE_SetCancelEvent(self.__GuildWar_OnDecline) questionDialog.Open(guildName, warType) self.guildWarQuestionDialog = questionDialog def __GuildWar_CloseAskDialog(self): self.guildWarQuestionDialog.Close() self.guildWarQuestionDialog = None def __GuildWar_OnAccept(self): guildName = self.guildWarQuestionDialog.GetGuildName() net.SendChatPacket("/war " + guildName) self.__GuildWar_CloseAskDialog() return 1 def __GuildWar_OnDecline(self): guildName = self.guildWarQuestionDialog.GetGuildName() net.SendChatPacket("/nowar " + guildName) self.__GuildWar_CloseAskDialog() return 1 ## BINARY CALLBACK ###################################################################################### def __ServerCommand_Build(self): serverCommandList={ "ConsoleEnable" : self.__Console_Enable, "DayMode" : self.__DayMode_Update, "PRESERVE_DayMode" : self.__PRESERVE_DayMode_Update, "CloseRestartWindow" : self.__RestartDialog_Close, "OpenPrivateShop" : self.__PrivateShop_Open, "PartyHealReady" : self.PartyHealReady, "ShowMeSafeboxPassword" : self.AskSafeboxPassword, "CloseSafebox" : self.CommandCloseSafebox, # ITEM_MALL "CloseMall" : self.CommandCloseMall, "ShowMeMallPassword" : self.AskMallPassword, "item_mall" : self.__ItemMall_Open, # END_OF_ITEM_MALL "RefineSuceeded" : self.RefineSuceededMessage, "RefineFailed" : self.RefineFailedMessage, "xmas_snow" : self.__XMasSnow_Enable, "xmas_boom" : self.__XMasBoom_Enable, "xmas_song" : self.__XMasSong_Enable, "xmas_tree" : self.__XMasTree_Enable, "newyear_boom" : self.__XMasBoom_Enable, "PartyRequest" : self.__PartyRequestQuestion, "PartyRequestDenied" : self.__PartyRequestDenied, "horse_state" : self.__Horse_UpdateState, "hide_horse_state" : self.__Horse_HideState, "WarUC" : self.__GuildWar_UpdateMemberCount, "test_server" : self.__EnableTestServerFlag, "mall" : self.__InGameShop_Show, # WEDDING "lover_login" : self.__LoginLover, "lover_logout" : self.__LogoutLover, "lover_near" : self.__LoverNear, "lover_far" : self.__LoverFar, "lover_divorce" : self.__LoverDivorce, "PlayMusic" : self.__PlayMusic, # END_OF_WEDDING # PRIVATE_SHOP_PRICE_LIST "MyShopPriceList" : self.__PrivateShop_PriceList, # END_OF_PRIVATE_SHOP_PRICE_LIST } self.serverCommander=stringCommander.Analyzer() for serverCommandItem in serverCommandList.items(): self.serverCommander.SAFE_RegisterCallBack( serverCommandItem[0], serverCommandItem[1] ) def BINARY_ServerCommand_Run(self, line): #dbg.TraceError(line) try: #print " BINARY_ServerCommand_Run", line return self.serverCommander.Run(line) except RuntimeError, msg: dbg.TraceError(msg) return 0 def __ProcessPreservedServerCommand(self): try: command = net.GetPreservedServerCommand() while command: print " __ProcessPreservedServerCommand", command self.serverCommander.Run(command) command = net.GetPreservedServerCommand() except RuntimeError, msg: dbg.TraceError(msg) return 0 def PartyHealReady(self): self.interface.PartyHealReady() def AskSafeboxPassword(self): self.interface.AskSafeboxPassword() # ITEM_MALL def AskMallPassword(self): self.interface.AskMallPassword() def __ItemMall_Open(self): self.interface.OpenItemMall(); def CommandCloseMall(self): self.interface.CommandCloseMall() # END_OF_ITEM_MALL def RefineSuceededMessage(self): snd.PlaySound("sound/ui/make_soket.wav") self.PopupMessage(localeInfo.REFINE_SUCCESS) def RefineFailedMessage(self): snd.PlaySound("sound/ui/jaeryun_fail.wav") self.PopupMessage(localeInfo.REFINE_FAILURE) def CommandCloseSafebox(self): self.interface.CommandCloseSafebox() # PRIVATE_SHOP_PRICE_LIST def __PrivateShop_PriceList(self, itemVNum, itemPrice): uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice) # END_OF_PRIVATE_SHOP_PRICE_LIST def __Horse_HideState(self): self.affectShower.SetHorseState(0, 0, 0) def __Horse_UpdateState(self, level, health, battery): self.affectShower.SetHorseState(int(level), int(health), int(battery)) def __IsXMasMap(self): mapDict = ( "metin2_map_n_flame_01", "metin2_map_n_desert_01", "metin2_map_spiderdungeon", "metin2_map_deviltower1", ) if background.GetCurrentMapName() in mapDict: return FALSE return TRUE def __XMasSnow_Enable(self, mode): self.__XMasSong_Enable(mode) if "1"==mode: if not self.__IsXMasMap(): return print "XMAS_SNOW ON" background.EnableSnow(1) else: print "XMAS_SNOW OFF" background.EnableSnow(0) def __XMasBoom_Enable(self, mode): if "1"==mode: if not self.__IsXMasMap(): return print "XMAS_BOOM ON" self.__DayMode_Update("dark") self.enableXMasBoom = TRUE self.startTimeXMasBoom = app.GetTime() else: print "XMAS_BOOM OFF" self.__DayMode_Update("light") self.enableXMasBoom = FALSE def __XMasTree_Enable(self, grade): print "XMAS_TREE ", grade background.SetXMasTree(int(grade)) def __XMasSong_Enable(self, mode): if "1"==mode: print "XMAS_SONG ON" XMAS_BGM = "xmas.mp3" if app.IsExistFile("BGM/" + XMAS_BGM)==1: if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=XMAS_BGM snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) else: print "XMAS_SONG OFF" if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=musicInfo.METIN2THEMA snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) def __RestartDialog_Close(self): self.interface.CloseRestartDialog() def __Console_Enable(self): constInfo.CONSOLE_ENABLE = TRUE self.consoleEnable = TRUE app.EnableSpecialCameraMode() ui.EnablePaste(TRUE) ## PrivateShop def __PrivateShop_Open(self): self.interface.OpenPrivateShopInputNameDialog() def BINARY_PrivateShop_Appear(self, vid, text): self.interface.AppearPrivateShop(vid, text) def BINARY_PrivateShop_Disappear(self, vid): self.interface.DisappearPrivateShop(vid) ## DayMode def __PRESERVE_DayMode_Update(self, mode): if "light"==mode: background.SetEnvironmentData(0) elif "dark"==mode: if not self.__IsXMasMap(): return background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) def __DayMode_Update(self, mode): if "light"==mode: self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToLight) elif "dark"==mode: if not self.__IsXMasMap(): return self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToDark) def __DayMode_OnCompleteChangeToLight(self): background.SetEnvironmentData(0) self.curtain.FadeIn() def __DayMode_OnCompleteChangeToDark(self): background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) self.curtain.FadeIn() ## XMasBoom def __XMasBoom_Update(self): self.BOOM_DATA_LIST = ( (2, 5), (5, 2), (7, 3), (10, 3), (20, 5) ) if self.indexXMasBoom >= len(self.BOOM_DATA_LIST): return boomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0] boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1] if app.GetTime() - self.startTimeXMasBoom > boomTime: self.indexXMasBoom += 1 for i in xrange(boomCount): self.__XMasBoom_Boom() def __XMasBoom_Boom(self): x, y, z = player.GetMainCharacterPosition() randX = app.GetRandom(-150, 150) randY = app.GetRandom(-150, 150) snd.PlaySound3D(x+randX, -y+randY, z, "sound/common/etc/salute.mp3") def __PartyRequestQuestion(self, vid): vid = int(vid) partyRequestQuestionDialog = uiCommon.QuestionDialog() partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + localeInfo.PARTY_DO_YOU_ACCEPT) partyRequestQuestionDialog.SetAcceptText(localeInfo.UI_ACCEPT) partyRequestQuestionDialog.SetCancelText(localeInfo.UI_DENY) partyRequestQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.__AnswerPartyRequest(arg)) partyRequestQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.__AnswerPartyRequest(arg)) partyRequestQuestionDialog.Open() partyRequestQuestionDialog.vid = vid self.partyRequestQuestionDialog = partyRequestQuestionDialog def __AnswerPartyRequest(self, answer): if not self.partyRequestQuestionDialog: return vid = self.partyRequestQuestionDialog.vid if answer: net.SendChatPacket("/party_request_accept " + str(vid)) else: net.SendChatPacket("/party_request_deny " + str(vid)) self.partyRequestQuestionDialog.Close() self.partyRequestQuestionDialog = None def __PartyRequestDenied(self): self.PopupMessage(localeInfo.PARTY_REQUEST_DENIED) def __EnableTestServerFlag(self): app.EnableTestServerFlag() def __InGameShop_Show(self, url): if constInfo.IN_GAME_SHOP_ENABLE: self.interface.OpenWebWindow(url) # WEDDING def __LoginLover(self): if self.interface.wndMessenger: self.interface.wndMessenger.OnLoginLover() def __LogoutLover(self): if self.interface.wndMessenger: self.interface.wndMessenger.OnLogoutLover() if self.affectShower: self.affectShower.HideLoverState() def __LoverNear(self): if self.affectShower: self.affectShower.ShowLoverState() def __LoverFar(self): if self.affectShower: self.affectShower.HideLoverState() def __LoverDivorce(self): if self.interface.wndMessenger: self.interface.wndMessenger.ClearLoverInfo() if self.affectShower: self.affectShower.ClearLoverState() def __PlayMusic(self, flag, filename): flag = int(flag) if flag: snd.FadeOutAllMusic() musicInfo.SaveLastPlayFieldMusic() snd.FadeInMusic("BGM/" + filename) else: snd.FadeOutAllMusic() musicInfo.LoadLastPlayFieldMusic() snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) # END_OF_WEDDING def __quikeqchange(self): import uifastequip self.uuifastequipDlg = uifastequip.changeequip() self.uuifastequipDlg.Show() # def __BonusPage(self): import PaginaBonusuri global BPisLodaded try: if BPisLodaded == 0: BPisLodaded = 1 exec 'PaginaBonusuri.BonusBoardDialog().Show()' else: exec 'PaginaBonusuri.BonusBoardDialog().Hide()' BPisLodaded = 0 except ImportError: import dbg,app dbg.Trace('PaginaBonusuri.py Importing error') app.Abort
Desculpem o double post mas dava sempre erro ao responder , não sei se era por ter demasiados caracteres mas pronto : https://prnt.sc/qjllou
interfacemodule.pySpoiler## ## Interface ## import constInfo import systemSetting import wndMgr import chat import app import player import uiTaskBar import uiCharacter import uiInventory import uiDragonSoul import uiChat import uiMessenger import guild import ui import uiHelp import uiWhisper import uiPointReset import uiShop import uiExchange import uiSystem import uiRestart import uiToolTip import uiMiniMap import uiParty import uiSafebox import uiGuild import uiQuest import uiPrivateShopBuilder import uiCommon import uiRefine import uiEquipmentDialog import uiGameButton import uiTip import uiCube import miniMap # ACCESSORY_REFINE_ADD_METIN_STONE import uiselectitem # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE import uiScriptLocale import event import localeInfo from switchbot import Bot IsQBHide = 0 class Interface(object): CHARACTER_STATUS_TAB = 1 CHARACTER_SKILL_TAB = 2 LastContactTimeStamp = app.GetTime() - 5 WaitTime = 12 State = "Kapali" def __init__(self): systemSetting.SetInterfaceHandler(self) self.windowOpenPosition = 0 self.dlgWhisperWithoutTarget = None self.inputDialog = None self.tipBoard = None self.bigBoard = None # ITEM_MALL self.mallPageDlg = None # END_OF_ITEM_MALL self.wndWeb = None self.wndTaskBar = None self.wndCharacter = None self.wndInventory = None self.wndExpandedTaskBar = None self.wndDragonSoul = None self.wndDragonSoulRefine = None self.wndChat = None self.wndMessenger = None self.wndMiniMap = None self.wndGuild = None self.wndGuildBuilding = None self.listGMName = {} self.wndQuestWindow = {} self.wndQuestWindowNewKey = 0 self.privateShopAdvertisementBoardDict = {} self.guildScoreBoardDict = {} self.equipmentDialogDict = {} event.SetInterfaceWindow(self) self.switchbot = Bot() self.switchbot.Hide() def __del__(self): systemSetting.DestroyInterfaceHandler() event.SetInterfaceWindow(None) ################################ ## Make Windows & Dialogs def __MakeUICurtain(self): wndUICurtain = ui.Bar("TOP_MOST") wndUICurtain.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) wndUICurtain.SetColor(0x77000000) wndUICurtain.Hide() self.wndUICurtain = wndUICurtain def __MakeMessengerWindow(self): self.wndMessenger = uiMessenger.MessengerWindow() from _weakref import proxy self.wndMessenger.SetWhisperButtonEvent(lambda n,i=proxy(self):i.OpenWhisperDialog(n)) self.wndMessenger.SetGuildButtonEvent(ui.__mem_func__(self.ToggleGuildWindow)) def __MakeGuildWindow(self): self.wndGuild = uiGuild.GuildWindow() def __MakeChatWindow(self): wndChat = uiChat.ChatWindow() wndChat.SetSize(wndChat.CHAT_WINDOW_WIDTH, 0) wndChat.SetPosition(wndMgr.GetScreenWidth()/2 - wndChat.CHAT_WINDOW_WIDTH/2, wndMgr.GetScreenHeight() - wndChat.EDIT_LINE_HEIGHT - 37) wndChat.SetHeight(200) wndChat.Refresh() wndChat.Show() self.wndChat = wndChat self.wndChat.BindInterface(self) self.wndChat.SetSendWhisperEvent(ui.__mem_func__(self.OpenWhisperDialogWithoutTarget)) self.wndChat.SetOpenChatLogEvent(ui.__mem_func__(self.ToggleChatLogWindow)) def __MakeTaskBar(self): wndTaskBar = uiTaskBar.TaskBar() wndTaskBar.LoadWindow() self.wndTaskBar = wndTaskBar self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_CHARACTER, ui.__mem_func__(self.ToggleCharacterWindowStatusPage)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_INVENTORY, ui.__mem_func__(self.ToggleInventoryWindow)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_MESSENGER, ui.__mem_func__(self.ToggleMessenger)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_SYSTEM, ui.__mem_func__(self.ToggleSystemDialog)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_VECTORS, ui.__mem_func__(self.Vectors)) if uiTaskBar.TaskBar.IS_EXPANDED: self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_EXPAND, ui.__mem_func__(self.ToggleExpandedButton)) self.wndExpandedTaskBar = uiTaskBar.ExpandedTaskBar() self.wndExpandedTaskBar.LoadWindow() self.wndExpandedTaskBar.SetToggleButtonEvent(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, ui.__mem_func__(self.ToggleDragonSoulWindow)) else: self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_CHAT, ui.__mem_func__(self.ToggleChat)) self.wndEnergyBar = None import app if app.ENABLE_ENERGY_SYSTEM: wndEnergyBar = uiTaskBar.EnergyBar() wndEnergyBar.LoadWindow() self.wndEnergyBar = wndEnergyBar def __MakeParty(self): wndParty = uiParty.PartyWindow() wndParty.Hide() self.wndParty = wndParty def __MakeGameButtonWindow(self): wndGameButton = uiGameButton.GameButtonWindow() wndGameButton.SetTop() wndGameButton.Show() wndGameButton.SetButtonEvent("STATUS", ui.__mem_func__(self.__OnClickStatusPlusButton)) wndGameButton.SetButtonEvent("SKILL", ui.__mem_func__(self.__OnClickSkillPlusButton)) wndGameButton.SetButtonEvent("QUEST", ui.__mem_func__(self.__OnClickQuestButton)) wndGameButton.SetButtonEvent("HELP", ui.__mem_func__(self.__OnClickHelpButton)) wndGameButton.SetButtonEvent("BUILD", ui.__mem_func__(self.__OnClickBuildButton)) self.wndGameButton = wndGameButton def __IsChatOpen(self): return TRUE def __MakeWindows(self): wndCharacter = uiCharacter.CharacterWindow() wndInventory = uiInventory.InventoryWindow() wndInventory.BindInterfaceClass(self) if app.ENABLE_DRAGON_SOUL_SYSTEM: wndDragonSoul = uiDragonSoul.DragonSoulWindow() wndDragonSoulRefine = uiDragonSoul.DragonSoulRefineWindow() else: wndDragonSoul = None wndDragonSoulRefine = None wndMiniMap = uiMiniMap.MiniMap() wndSafebox = uiSafebox.SafeboxWindow() # ITEM_MALL wndMall = uiSafebox.MallWindow() self.wndMall = wndMall # END_OF_ITEM_MALL wndChatLog = uiChat.ChatLogWindow() wndChatLog.BindInterface(self) self.wndCharacter = wndCharacter self.wndInventory = wndInventory self.wndDragonSoul = wndDragonSoul self.wndDragonSoulRefine = wndDragonSoulRefine self.wndMiniMap = wndMiniMap self.wndSafebox = wndSafebox self.wndChatLog = wndChatLog if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.SetDragonSoulRefineWindow(self.wndDragonSoulRefine) self.wndDragonSoulRefine.SetInventoryWindows(self.wndInventory, self.wndDragonSoul) self.wndInventory.SetDragonSoulRefineWindow(self.wndDragonSoulRefine) def __MakeDialogs(self): self.dlgExchange = uiExchange.ExchangeDialog() self.dlgExchange.LoadDialog() self.dlgExchange.SetCenterPosition() self.dlgExchange.Hide() self.dlgPointReset = uiPointReset.PointResetDialog() self.dlgPointReset.LoadDialog() self.dlgPointReset.Hide() self.dlgShop = uiShop.ShopDialog() self.dlgShop.LoadDialog() self.dlgShop.Hide() self.dlgRestart = uiRestart.RestartDialog() self.dlgRestart.LoadDialog() self.dlgRestart.Hide() self.dlgSystem = uiSystem.SystemDialog() self.dlgSystem.LoadDialog() self.dlgSystem.SetOpenHelpWindowEvent(ui.__mem_func__(self.OpenHelpWindow)) self.dlgSystem.Hide() self.dlgPassword = uiSafebox.PasswordDialog() self.dlgPassword.Hide() self.hyperlinkItemTooltip = uiToolTip.HyperlinkItemToolTip() self.hyperlinkItemTooltip.Hide() self.tooltipItem = uiToolTip.ItemToolTip() self.tooltipItem.Hide() self.tooltipSkill = uiToolTip.SkillToolTip() self.tooltipSkill.Hide() self.privateShopBuilder = uiPrivateShopBuilder.PrivateShopBuilder() self.privateShopBuilder.Hide() self.dlgRefineNew = uiRefine.RefineDialogNew() self.dlgRefineNew.Hide() def __MakeHelpWindow(self): self.wndHelp = uiHelp.HelpWindow() self.wndHelp.LoadDialog() self.wndHelp.SetCloseEvent(ui.__mem_func__(self.CloseHelpWindow)) self.wndHelp.Hide() def __MakeTipBoard(self): self.tipBoard = uiTip.TipBoard() self.tipBoard.Hide() self.bigBoard = uiTip.BigBoard() self.bigBoard.Hide() def __MakeWebWindow(self): if constInfo.IN_GAME_SHOP_ENABLE: import uiWeb self.wndWeb = uiWeb.WebWindow() self.wndWeb.LoadWindow() self.wndWeb.Hide() def __MakeCubeWindow(self): self.wndCube = uiCube.CubeWindow() self.wndCube.LoadWindow() self.wndCube.Hide() def __MakeCubeResultWindow(self): self.wndCubeResult = uiCube.CubeResultWindow() self.wndCubeResult.LoadWindow() self.wndCubeResult.Hide() # ACCESSORY_REFINE_ADD_METIN_STONE def __MakeItemSelectWindow(self): self.wndItemSelect = uiselectitem.SelectItemWindow() self.wndItemSelect.Hide() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE def MakeInterface(self): self.__MakeMessengerWindow() self.__MakeGuildWindow() self.__MakeChatWindow() self.__MakeParty() self.__MakeWindows() self.__MakeDialogs() self.__MakeUICurtain() self.__MakeTaskBar() self.__MakeGameButtonWindow() self.__MakeHelpWindow() self.__MakeTipBoard() self.__MakeWebWindow() self.__MakeCubeWindow() self.__MakeCubeResultWindow() # ACCESSORY_REFINE_ADD_METIN_STONE self.__MakeItemSelectWindow() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE self.questButtonList = [] self.whisperButtonList = [] self.whisperDialogDict = {} self.privateShopAdvertisementBoardDict = {} self.wndInventory.SetItemToolTip(self.tooltipItem) if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.SetItemToolTip(self.tooltipItem) self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem) self.wndSafebox.SetItemToolTip(self.tooltipItem) self.wndCube.SetItemToolTip(self.tooltipItem) self.wndCubeResult.SetItemToolTip(self.tooltipItem) # ITEM_MALL self.wndMall.SetItemToolTip(self.tooltipItem) # END_OF_ITEM_MALL self.wndCharacter.SetSkillToolTip(self.tooltipSkill) self.wndTaskBar.SetItemToolTip(self.tooltipItem) self.wndTaskBar.SetSkillToolTip(self.tooltipSkill) self.wndGuild.SetSkillToolTip(self.tooltipSkill) # ACCESSORY_REFINE_ADD_METIN_STONE self.wndItemSelect.SetItemToolTip(self.tooltipItem) # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE self.dlgShop.SetItemToolTip(self.tooltipItem) self.dlgExchange.SetItemToolTip(self.tooltipItem) self.privateShopBuilder.SetItemToolTip(self.tooltipItem) self.__InitWhisper() self.DRAGON_SOUL_IS_QUALIFIED = FALSE def MakeHyperlinkTooltip(self, hyperlink): tokens = hyperlink.split(":") if tokens and len(tokens): type = tokens[0] if "item" == type: self.hyperlinkItemTooltip.SetHyperlinkItem(tokens) ## Make Windows & Dialogs ################################ def Close(self): if self.dlgWhisperWithoutTarget: self.dlgWhisperWithoutTarget.Destroy() del self.dlgWhisperWithoutTarget if uiQuest.QuestDialog.__dict__.has_key("QuestCurtain"): uiQuest.QuestDialog.QuestCurtain.Close() if self.wndQuestWindow: for key, eachQuestWindow in self.wndQuestWindow.items(): eachQuestWindow.nextCurtainMode = -1 eachQuestWindow.CloseSelf() eachQuestWindow = None self.wndQuestWindow = {} if self.wndChat: self.wndChat.Destroy() if self.wndTaskBar: self.wndTaskBar.Destroy() if self.wndExpandedTaskBar: self.wndExpandedTaskBar.Destroy() if self.wndEnergyBar: self.wndEnergyBar.Destroy() if self.wndCharacter: self.wndCharacter.Destroy() if self.wndInventory: self.wndInventory.Destroy() if self.wndDragonSoul: self.wndDragonSoul.Destroy() if self.wndDragonSoulRefine: self.wndDragonSoulRefine.Destroy() if self.dlgExchange: self.dlgExchange.Destroy() if self.dlgPointReset: self.dlgPointReset.Destroy() if self.dlgShop: self.dlgShop.Destroy() if self.dlgRestart: self.dlgRestart.Destroy() if self.dlgSystem: self.dlgSystem.Destroy() if self.dlgPassword: self.dlgPassword.Destroy() if self.wndMiniMap: self.wndMiniMap.Destroy() if self.wndSafebox: self.wndSafebox.Destroy() if self.wndWeb: self.wndWeb.Destroy() self.wndWeb = None if self.wndMall: self.wndMall.Destroy() if self.wndParty: self.wndParty.Destroy() if self.wndHelp: self.wndHelp.Destroy() if self.wndCube: self.wndCube.Destroy() if self.wndCubeResult: self.wndCubeResult.Destroy() if self.wndMessenger: self.wndMessenger.Destroy() if self.wndGuild: self.wndGuild.Destroy() if self.privateShopBuilder: self.privateShopBuilder.Destroy() if self.dlgRefineNew: self.dlgRefineNew.Destroy() if self.wndGuildBuilding: self.wndGuildBuilding.Destroy() if self.wndGameButton: self.wndGameButton.Destroy() # ITEM_MALL if self.mallPageDlg: self.mallPageDlg.Destroy() # END_OF_ITEM_MALL # ACCESSORY_REFINE_ADD_METIN_STONE if self.wndItemSelect: self.wndItemSelect.Destroy() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE self.wndChatLog.Destroy() for btn in self.questButtonList: btn.SetEvent(0) for btn in self.whisperButtonList: btn.SetEvent(0) for dlg in self.whisperDialogDict.itervalues(): dlg.Destroy() for brd in self.guildScoreBoardDict.itervalues(): brd.Destroy() for dlg in self.equipmentDialogDict.itervalues(): dlg.Destroy() # ITEM_MALL del self.mallPageDlg # END_OF_ITEM_MALL del self.wndGuild del self.wndMessenger del self.wndUICurtain del self.wndChat del self.wndTaskBar if self.wndExpandedTaskBar: del self.wndExpandedTaskBar del self.wndEnergyBar del self.wndCharacter del self.wndInventory if self.wndDragonSoul: del self.wndDragonSoul if self.wndDragonSoulRefine: del self.wndDragonSoulRefine del self.dlgExchange del self.dlgPointReset del self.dlgShop del self.dlgRestart del self.dlgSystem del self.dlgPassword del self.hyperlinkItemTooltip del self.tooltipItem del self.tooltipSkill del self.wndMiniMap del self.wndSafebox del self.wndMall del self.wndParty del self.wndHelp del self.wndCube del self.wndCubeResult del self.privateShopBuilder del self.inputDialog del self.wndChatLog del self.dlgRefineNew del self.wndGuildBuilding del self.wndGameButton del self.tipBoard del self.bigBoard del self.wndItemSelect self.questButtonList = [] self.whisperButtonList = [] self.whisperDialogDict = {} self.privateShopAdvertisementBoardDict = {} self.guildScoreBoardDict = {} self.equipmentDialogDict = {} uiChat.DestroyChatInputSetWindow() self.switchbot.Destroy() del self.switchbot ## Skill def OnUseSkill(self, slotIndex, coolTime): self.wndCharacter.OnUseSkill(slotIndex, coolTime) self.wndTaskBar.OnUseSkill(slotIndex, coolTime) self.wndGuild.OnUseSkill(slotIndex, coolTime) def OnActivateSkill(self, slotIndex): self.wndCharacter.OnActivateSkill(slotIndex) self.wndTaskBar.OnActivateSkill(slotIndex) def OnDeactivateSkill(self, slotIndex): self.wndCharacter.OnDeactivateSkill(slotIndex) self.wndTaskBar.OnDeactivateSkill(slotIndex) def OnChangeCurrentSkill(self, skillSlotNumber): self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber) def SelectMouseButtonEvent(self, dir, event): self.wndTaskBar.SelectMouseButtonEvent(dir, event) ## Refresh def RefreshAlignment(self): self.wndCharacter.RefreshAlignment() def RefreshStatus(self): self.wndTaskBar.RefreshStatus() self.wndCharacter.RefreshStatus() self.wndInventory.RefreshStatus() if self.wndEnergyBar: self.wndEnergyBar.RefreshStatus() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.RefreshStatus() def RefreshStamina(self): self.wndTaskBar.RefreshStamina() def RefreshSkill(self): self.wndCharacter.RefreshSkill() self.wndTaskBar.RefreshSkill() def RefreshInventory(self): self.wndTaskBar.RefreshQuickSlot() self.wndInventory.RefreshItemSlot() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.RefreshItemSlot() def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh self.wndCharacter.RefreshCharacter() self.wndTaskBar.RefreshQuickSlot() def RefreshQuest(self): self.wndCharacter.RefreshQuest() def RefreshSafebox(self): self.wndSafebox.RefreshSafebox() # ITEM_MALL def RefreshMall(self): self.wndMall.RefreshMall() def OpenItemMall(self): if not self.mallPageDlg: self.mallPageDlg = uiShop.MallPageDialog() self.mallPageDlg.Open() # END_OF_ITEM_MALL def RefreshMessenger(self): self.wndMessenger.RefreshMessenger() def RefreshGuildInfoPage(self): self.wndGuild.RefreshGuildInfoPage() def RefreshGuildBoardPage(self): self.wndGuild.RefreshGuildBoardPage() def RefreshGuildMemberPage(self): self.wndGuild.RefreshGuildMemberPage() def RefreshGuildMemberPageGradeComboBox(self): self.wndGuild.RefreshGuildMemberPageGradeComboBox() def RefreshGuildSkillPage(self): self.wndGuild.RefreshGuildSkillPage() def RefreshGuildGradePage(self): self.wndGuild.RefreshGuildGradePage() def DeleteGuild(self): self.wndMessenger.ClearGuildMember() self.wndGuild.DeleteGuild() def RefreshMobile(self): self.dlgSystem.RefreshMobile() def OnMobileAuthority(self): self.dlgSystem.OnMobileAuthority() def OnBlockMode(self, mode): self.dlgSystem.OnBlockMode(mode) ## Calling Functions # PointReset def OpenPointResetDialog(self): self.dlgPointReset.Show() self.dlgPointReset.SetTop() def ClosePointResetDialog(self): self.dlgPointReset.Close() # Shop def OpenShopDialog(self, vid): self.wndInventory.Show() self.wndInventory.SetTop() self.dlgShop.Open(vid) self.dlgShop.SetTop() def CloseShopDialog(self): self.dlgShop.Close() def RefreshShopDialog(self): self.dlgShop.Refresh() ## Quest def OpenCharacterWindowQuestPage(self): self.wndCharacter.Show() self.wndCharacter.SetState("QUEST") def OpenQuestWindow(self, skin, idx): wnds = () q = uiQuest.QuestDialog(skin, idx) q.SetWindowName("QuestWindow" + str(idx)) q.Show() if skin: q.Lock() wnds = self.__HideWindows() # UNKNOWN_UPDATE q.AddOnDoneEvent(lambda tmp_self, args=wnds: self.__ShowWindows(args)) # END_OF_UNKNOWN_UPDATE if skin: q.AddOnCloseEvent(q.Unlock) q.AddOnCloseEvent(lambda key = self.wndQuestWindowNewKey:ui.__mem_func__(self.RemoveQuestDialog)(key)) self.wndQuestWindow[self.wndQuestWindowNewKey] = q self.wndQuestWindowNewKey = self.wndQuestWindowNewKey + 1 # END_OF_UNKNOWN_UPDATE def RemoveQuestDialog(self, key): del self.wndQuestWindow[key] ## Exchange def StartExchange(self): self.dlgExchange.OpenDialog() self.dlgExchange.Refresh() def EndExchange(self): self.dlgExchange.CloseDialog() def RefreshExchange(self): self.dlgExchange.Refresh() ## Party def AddPartyMember(self, pid, name): self.wndParty.AddPartyMember(pid, name) self.__ArrangeQuestButton() def UpdatePartyMemberInfo(self, pid): self.wndParty.UpdatePartyMemberInfo(pid) def RemovePartyMember(self, pid): self.wndParty.RemovePartyMember(pid) ##!! 20061026.levites.퀘스트_위치_보정 self.__ArrangeQuestButton() def LinkPartyMember(self, pid, vid): self.wndParty.LinkPartyMember(pid, vid) def UnlinkPartyMember(self, pid): self.wndParty.UnlinkPartyMember(pid) def UnlinkAllPartyMember(self): self.wndParty.UnlinkAllPartyMember() def ExitParty(self): self.wndParty.ExitParty() ##!! 20061026.levites.퀘스트_위치_보정 self.__ArrangeQuestButton() def PartyHealReady(self): self.wndParty.PartyHealReady() def ChangePartyParameter(self, distributionMode): self.wndParty.ChangePartyParameter(distributionMode) ## Safebox def AskSafeboxPassword(self): if self.wndSafebox.IsShow(): return # SAFEBOX_PASSWORD self.dlgPassword.SetTitle(localeInfo.PASSWORD_TITLE) self.dlgPassword.SetSendMessage("/safebox_password ") # END_OF_SAFEBOX_PASSWORD self.dlgPassword.ShowDialog() def OpenSafeboxWindow(self, size): self.dlgPassword.CloseDialog() self.wndSafebox.ShowWindow(size) def RefreshSafeboxMoney(self): self.wndSafebox.RefreshSafeboxMoney() def CommandCloseSafebox(self): self.wndSafebox.CommandCloseSafebox() # ITEM_MALL def AskMallPassword(self): if self.wndMall.IsShow(): return self.dlgPassword.SetTitle(localeInfo.MALL_PASSWORD_TITLE) self.dlgPassword.SetSendMessage("/mall_password ") self.dlgPassword.ShowDialog() def OpenMallWindow(self, size): self.dlgPassword.CloseDialog() self.wndMall.ShowWindow(size) def CommandCloseMall(self): self.wndMall.CommandCloseMall() # END_OF_ITEM_MALL ## Guild def OnStartGuildWar(self, guildSelf, guildOpp): self.wndGuild.OnStartGuildWar(guildSelf, guildOpp) guildWarScoreBoard = uiGuild.GuildWarScoreBoard() guildWarScoreBoard.Open(guildSelf, guildOpp) guildWarScoreBoard.Show() self.guildScoreBoardDict[uiGuild.GetGVGKey(guildSelf, guildOpp)] = guildWarScoreBoard def OnEndGuildWar(self, guildSelf, guildOpp): self.wndGuild.OnEndGuildWar(guildSelf, guildOpp) key = uiGuild.GetGVGKey(guildSelf, guildOpp) if not self.guildScoreBoardDict.has_key(key): return self.guildScoreBoardDict[key].Destroy() del self.guildScoreBoardDict[key] # GUILDWAR_MEMBER_COUNT def UpdateMemberCount(self, gulidID1, memberCount1, guildID2, memberCount2): key = uiGuild.GetGVGKey(gulidID1, guildID2) if not self.guildScoreBoardDict.has_key(key): return self.guildScoreBoardDict[key].UpdateMemberCount(gulidID1, memberCount1, guildID2, memberCount2) # END_OF_GUILDWAR_MEMBER_COUNT def OnRecvGuildWarPoint(self, gainGuildID, opponentGuildID, point): key = uiGuild.GetGVGKey(gainGuildID, opponentGuildID) if not self.guildScoreBoardDict.has_key(key): return guildBoard = self.guildScoreBoardDict[key] guildBoard.SetScore(gainGuildID, opponentGuildID, point) ## PK Mode def OnChangePKMode(self): self.wndCharacter.RefreshAlignment() self.dlgSystem.OnChangePKMode() ## Refine def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type): self.dlgRefineNew.Open(targetItemPos, nextGradeItemVnum, cost, prob, type) def AppendMaterialToRefineDialog(self, vnum, count): self.dlgRefineNew.AppendMaterial(vnum, count) ## Show & Hide def ShowDefaultWindows(self): self.wndTaskBar.Show() self.wndMiniMap.Show() self.wndMiniMap.ShowMiniMap() if self.wndEnergyBar: self.wndEnergyBar.Show() def ShowAllWindows(self): self.wndTaskBar.Show() self.wndCharacter.Show() self.wndInventory.Show() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.Show() self.wndDragonSoulRefine.Show() self.wndChat.Show() self.wndMiniMap.Show() if self.wndEnergyBar: self.wndEnergyBar.Show() if self.wndExpandedTaskBar: self.wndExpandedTaskBar.Show() self.wndExpandedTaskBar.SetTop() def HideAllWindows(self): if self.wndTaskBar: self.wndTaskBar.Hide() if self.wndEnergyBar: self.wndEnergyBar.Hide() if self.wndCharacter: self.wndCharacter.Hide() if self.wndInventory: self.wndInventory.Hide() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.Hide() self.wndDragonSoulRefine.Hide() if self.wndChat: self.wndChat.Hide() if self.wndMiniMap: self.wndMiniMap.Hide() if self.wndMessenger: self.wndMessenger.Hide() if self.wndGuild: self.wndGuild.Hide() if self.wndExpandedTaskBar: self.wndExpandedTaskBar.Hide() def ShowMouseImage(self): self.wndTaskBar.ShowMouseImage() def HideMouseImage(self): self.wndTaskBar.HideMouseImage() def ToggleChat(self): if TRUE == self.wndChat.IsEditMode(): self.wndChat.CloseChat() else: # 웹페이지가 열렸을때는 채팅 입력이 안됨 if self.wndWeb and self.wndWeb.IsShow(): pass else: self.wndChat.OpenChat() def IsOpenChat(self): return self.wndChat.IsEditMode() def SetChatFocus(self): self.wndChat.SetChatFocus() def OpenRestartDialog(self): self.dlgRestart.OpenDialog() self.dlgRestart.SetTop() def CloseRestartDialog(self): self.dlgRestart.Close() def ToggleSystemDialog(self): if FALSE == self.dlgSystem.IsShow(): self.dlgSystem.OpenDialog() self.dlgSystem.SetTop() else: self.dlgSystem.Close() def OpenSystemDialog(self): self.dlgSystem.OpenDialog() self.dlgSystem.SetTop() def ToggleMessenger(self): if self.wndMessenger.IsShow(): self.wndMessenger.Hide() else: self.wndMessenger.SetTop() self.wndMessenger.Show() def ToggleMiniMap(self): if app.IsPressed(app.DIK_LSHIFT) or app.IsPressed(app.DIK_RSHIFT): if FALSE == self.wndMiniMap.isShowMiniMap(): self.wndMiniMap.ShowMiniMap() self.wndMiniMap.SetTop() else: self.wndMiniMap.HideMiniMap() else: self.wndMiniMap.ToggleAtlasWindow() def PressMKey(self): if app.IsPressed(app.DIK_LALT) or app.IsPressed(app.DIK_RALT): self.ToggleMessenger() else: self.ToggleMiniMap() def SetMapName(self, mapName): self.wndMiniMap.SetMapName(mapName) def MiniMapScaleUp(self): self.wndMiniMap.ScaleUp() def MiniMapScaleDown(self): self.wndMiniMap.ScaleDown() def ToggleCharacterWindow(self, state): if FALSE == player.IsObserverMode(): if FALSE == self.wndCharacter.IsShow(): self.OpenCharacterWindowWithState(state) else: if state == self.wndCharacter.GetState(): self.wndCharacter.OverOutItem() self.wndCharacter.Hide() else: self.wndCharacter.SetState(state) def OpenCharacterWindowWithState(self, state): if FALSE == player.IsObserverMode(): self.wndCharacter.SetState(state) self.wndCharacter.Show() self.wndCharacter.SetTop() def ToggleCharacterWindowStatusPage(self): self.ToggleCharacterWindow("STATUS") def Vectors(self): if self.switchbot.bot_shown == 1: self.switchbot.Hide() else: self.switchbot.Show() def ToggleInventoryWindow(self): if self.State == "Kapali": chat.AppendChat(chat.CHAT_TYPE_INFO, "Envanteri a?bilmek icin " + str(int(int(self.LastContactTimeStamp) + self.WaitTime) - int(app.GetTime())) + " saniye beklemelisin.") return else: if FALSE == player.IsObserverMode(): if FALSE == self.wndInventory.IsShow(): self.wndInventory.Show() self.wndInventory.SetTop() else: self.wndInventory.OverOutItem() self.wndInventory.Close() def ToggleExpandedButton(self): if FALSE == player.IsObserverMode(): if FALSE == self.wndExpandedTaskBar.IsShow(): self.wndExpandedTaskBar.Show() self.wndExpandedTaskBar.SetTop() else: self.wndExpandedTaskBar.Close() # 용혼석 def DragonSoulActivate(self, deck): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.ActivateDragonSoulByExtern(deck) def DragonSoulDeactivate(self): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.DeactivateDragonSoul() def Highligt_Item(self, inven_type, inven_pos): if player.DRAGON_SOUL_INVENTORY == inven_type: if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.HighlightSlot(inven_pos) def DragonSoulGiveQuilification(self): self.DRAGON_SOUL_IS_QUALIFIED = TRUE self.wndExpandedTaskBar.SetToolTipText(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, uiScriptLocale.TASKBAR_DRAGON_SOUL) def ToggleDragonSoulWindow(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if FALSE == self.wndDragonSoul.IsShow(): if self.DRAGON_SOUL_IS_QUALIFIED: self.wndDragonSoul.Show() else: try: self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED) self.wndPopupDialog.Open() except: self.wndPopupDialog = uiCommon.PopupDialog() self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED) self.wndPopupDialog.Open() else: self.wndDragonSoul.Close() def ToggleDragonSoulWindowWithNoInfo(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if FALSE == self.wndDragonSoul.IsShow(): if self.DRAGON_SOUL_IS_QUALIFIED: self.wndDragonSoul.Show() else: self.wndDragonSoul.Close() def FailDragonSoulRefine(self, reason, inven_type, inven_pos): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if TRUE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.RefineFail(reason, inven_type, inven_pos) def SucceedDragonSoulRefine(self, inven_type, inven_pos): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if TRUE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.RefineSucceed(inven_type, inven_pos) def OpenDragonSoulRefineWindow(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if FALSE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.Show() if None != self.wndDragonSoul: if FALSE == self.wndDragonSoul.IsShow(): self.wndDragonSoul.Show() def CloseDragonSoulRefineWindow(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if TRUE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.Close() # 용혼석 끝 def ToggleGuildWindow(self): if not self.wndGuild.IsShow(): if self.wndGuild.CanOpen(): self.wndGuild.Open() else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GUILD_YOU_DO_NOT_JOIN) else: self.wndGuild.OverOutItem() self.wndGuild.Hide() def ToggleChatLogWindow(self): if self.wndChatLog.IsShow(): self.wndChatLog.Hide() else: self.wndChatLog.Show() def CheckGameButton(self): if self.wndGameButton: self.wndGameButton.CheckGameButton() def __OnClickStatusPlusButton(self): self.ToggleCharacterWindow("STATUS") def __OnClickSkillPlusButton(self): self.ToggleCharacterWindow("SKILL") def __OnClickQuestButton(self): self.ToggleCharacterWindow("QUEST") def __OnClickHelpButton(self): player.SetPlayTime(1) self.CheckGameButton() self.OpenHelpWindow() def __OnClickBuildButton(self): self.BUILD_OpenWindow() def OpenHelpWindow(self): self.wndUICurtain.Show() self.wndHelp.Open() def CloseHelpWindow(self): self.wndUICurtain.Hide() self.wndHelp.Close() def OpenWebWindow(self, url): self.wndWeb.Open(url) # 웹페이지를 열면 채팅을 닫는다 self.wndChat.CloseChat() # show GIFT def ShowGift(self): self.wndTaskBar.ShowGift() def CloseWbWindow(self): self.wndWeb.Close() def OpenCubeWindow(self): self.wndCube.Open() if FALSE == self.wndInventory.IsShow(): self.wndInventory.Show() def UpdateCubeInfo(self, gold, itemVnum, count): self.wndCube.UpdateInfo(gold, itemVnum, count) def CloseCubeWindow(self): self.wndCube.Close() def FailedCubeWork(self): self.wndCube.Refresh() def SucceedCubeWork(self, itemVnum, count): self.wndCube.Clear() print "큐브 제작 성공! [%d:%d]" % (itemVnum, count) if 0: # 결과 메시지 출력은 생략 한다 self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition()) self.wndCubeResult.SetCubeResultItem(itemVnum, count) self.wndCubeResult.Open() self.wndCubeResult.SetTop() def __HideWindows(self): hideWindows = self.wndTaskBar,\ self.wndCharacter,\ self.wndInventory,\ self.wndMiniMap,\ self.wndGuild,\ self.wndMessenger,\ self.wndChat,\ self.wndParty,\ self.wndGameButton, if self.wndEnergyBar: hideWindows += self.wndEnergyBar, if self.wndExpandedTaskBar: hideWindows += self.wndExpandedTaskBar, if app.ENABLE_DRAGON_SOUL_SYSTEM: hideWindows += self.wndDragonSoul,\ self.wndDragonSoulRefine, hideWindows = filter(lambda x:x.IsShow(), hideWindows) map(lambda x:x.Hide(), hideWindows) import sys self.HideAllQuestButton() self.HideAllWhisperButton() if self.wndChat.IsEditMode(): self.wndChat.CloseChat() return hideWindows def __ShowWindows(self, wnds): import sys map(lambda x:x.Show(), wnds) global IsQBHide if not IsQBHide: self.ShowAllQuestButton() else: self.HideAllQuestButton() self.ShowAllWhisperButton() def BINARY_OpenAtlasWindow(self): if self.wndMiniMap: self.wndMiniMap.ShowAtlas() def BINARY_SetObserverMode(self, flag): self.wndGameButton.SetObserverMode(flag) # ACCESSORY_REFINE_ADD_METIN_STONE def BINARY_OpenSelectItemWindow(self): self.wndItemSelect.Open() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE ##################################################################################### ### Private Shop ### def OpenPrivateShopInputNameDialog(self): #if player.IsInSafeArea(): # chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CANNOT_OPEN_PRIVATE_SHOP_IN_SAFE_AREA) # return inputDialog = uiCommon.InputDialog() inputDialog.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_NAME_DIALOG_TITLE) inputDialog.SetMaxLength(32) inputDialog.SetAcceptEvent(ui.__mem_func__(self.OpenPrivateShopBuilder)) inputDialog.SetCancelEvent(ui.__mem_func__(self.ClosePrivateShopInputNameDialog)) inputDialog.Open() self.inputDialog = inputDialog def ClosePrivateShopInputNameDialog(self): self.inputDialog = None return TRUE def OpenPrivateShopBuilder(self): if not self.inputDialog: return TRUE if not len(self.inputDialog.GetText()): return TRUE self.privateShopBuilder.Open(self.inputDialog.GetText()) self.ClosePrivateShopInputNameDialog() return TRUE def AppearPrivateShop(self, vid, text): board = uiPrivateShopBuilder.PrivateShopAdvertisementBoard() board.Open(vid, text) self.privateShopAdvertisementBoardDict[vid] = board def DisappearPrivateShop(self, vid): if not self.privateShopAdvertisementBoardDict.has_key(vid): return del self.privateShopAdvertisementBoardDict[vid] uiPrivateShopBuilder.DeleteADBoard(vid) ##################################################################################### ### Equipment ### def OpenEquipmentDialog(self, vid): dlg = uiEquipmentDialog.EquipmentDialog() dlg.SetItemToolTip(self.tooltipItem) dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog)) dlg.Open(vid) self.equipmentDialogDict[vid] = dlg def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count): if not vid in self.equipmentDialogDict: return self.equipmentDialogDict[vid].SetEquipmentDialogItem(slotIndex, vnum, count) def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value): if not vid in self.equipmentDialogDict: return self.equipmentDialogDict[vid].SetEquipmentDialogSocket(slotIndex, socketIndex, value) def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value): if not vid in self.equipmentDialogDict: return self.equipmentDialogDict[vid].SetEquipmentDialogAttr(slotIndex, attrIndex, type, value) def CloseEquipmentDialog(self, vid): if not vid in self.equipmentDialogDict: return del self.equipmentDialogDict[vid] ##################################################################################### ##################################################################################### ### Quest ### def BINARY_ClearQuest(self, index): btn = self.__FindQuestButton(index) if 0 != btn: self.__DestroyQuestButton(btn) def RecvQuest(self, index, name): # QUEST_LETTER_IMAGE self.BINARY_RecvQuest(index, name, "file", localeInfo.GetLetterImageName()) # END_OF_QUEST_LETTER_IMAGE def BINARY_RecvQuest(self, index, name, iconType, iconName): btn = self.__FindQuestButton(index) if 0 != btn: self.__DestroyQuestButton(btn) btn = uiWhisper.WhisperButton() # QUEST_LETTER_IMAGE ##!! 20061026.levites.퀘스트_이미지_교체 import item if "item"==iconType: item.SelectItem(int(iconName)) buttonImageFileName=item.GetIconImageFileName() else: buttonImageFileName=iconName if localeInfo.IsEUROPE(): if "highlight" == iconType: btn.SetUpVisual("locale/ymir_ui/highlighted_quest.tga") btn.SetOverVisual("locale/ymir_ui/highlighted_quest_r.tga") btn.SetDownVisual("locale/ymir_ui/highlighted_quest_r.tga") else: btn.SetUpVisual(localeInfo.GetLetterCloseImageName()) btn.SetOverVisual(localeInfo.GetLetterOpenImageName()) btn.SetDownVisual(localeInfo.GetLetterOpenImageName()) else: btn.SetUpVisual(buttonImageFileName) btn.SetOverVisual(buttonImageFileName) btn.SetDownVisual(buttonImageFileName) btn.Flash() # END_OF_QUEST_LETTER_IMAGE if localeInfo.IsARABIC(): btn.SetToolTipText(name, 0, 35) btn.ToolTipText.SetHorizontalAlignCenter() else: btn.SetToolTipText(name, -20, 35) btn.ToolTipText.SetHorizontalAlignLeft() btn.SetEvent(ui.__mem_func__(self.__StartQuest), btn) btn.Show() btn.index = index btn.name = name self.questButtonList.insert(0, btn) self.__ArrangeQuestButton() #chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND) def __ArrangeQuestButton(self): screenWidth = wndMgr.GetScreenWidth() screenHeight = wndMgr.GetScreenHeight() ##!! 20061026.levites.퀘스트_위치_보정 if self.wndParty.IsShow(): xPos = 100 + 30 else: xPos = 20 if localeInfo.IsARABIC(): xPos = xPos + 15 yPos = 170 * screenHeight / 600 yCount = (screenHeight - 330) / 63 count = 0 for btn in self.questButtonList: btn.SetPosition(xPos + (int(count/yCount) * 100), yPos + (count%yCount * 63)) count += 1 global IsQBHide if IsQBHide: btn.Hide() else: btn.Show() def __StartQuest(self, btn): event.QuestButtonClick(btn.index) self.__DestroyQuestButton(btn) def __FindQuestButton(self, index): for btn in self.questButtonList: if btn.index == index: return btn return 0 def __DestroyQuestButton(self, btn): btn.SetEvent(0) self.questButtonList.remove(btn) self.__ArrangeQuestButton() def HideAllQuestButton(self): for btn in self.questButtonList: btn.Hide() def ShowAllQuestButton(self): for btn in self.questButtonList: btn.Show() ##################################################################################### ##################################################################################### ### Whisper ### def __InitWhisper(self): chat.InitWhisper(self) ## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수 ## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다. def OpenWhisperDialogWithoutTarget(self): if not self.dlgWhisperWithoutTarget: dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog) dlgWhisper.BindInterface(self) dlgWhisper.LoadDialog() dlgWhisper.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog) dlgWhisper.SetPosition(self.windowOpenPosition*30,self.windowOpenPosition*30) dlgWhisper.Show() self.dlgWhisperWithoutTarget = dlgWhisper self.windowOpenPosition = (self.windowOpenPosition+1) % 5 else: self.dlgWhisperWithoutTarget.SetTop() self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog) ## 이름 없는 대화창에서 이름을 결정했을때 WhisperDialogDict에 창을 넣어주는 함수 def RegisterTemporaryWhisperDialog(self, name): if not self.dlgWhisperWithoutTarget: return btn = self.__FindWhisperButton(name) if 0 != btn: self.__DestroyWhisperButton(btn) elif self.whisperDialogDict.has_key(name): oldDialog = self.whisperDialogDict[name] oldDialog.Destroy() del self.whisperDialogDict[name] self.whisperDialogDict[name] = self.dlgWhisperWithoutTarget self.dlgWhisperWithoutTarget.OpenWithTarget(name) self.dlgWhisperWithoutTarget = None self.__CheckGameMaster(name) ## 캐릭터 메뉴의 1:1 대화 하기를 눌렀을때 이름을 가지고 바로 창을 여는 함수 def OpenWhisperDialog(self, name): if not self.whisperDialogDict.has_key(name): dlg = self.__MakeWhisperDialog(name) dlg.OpenWithTarget(name) dlg.chatLine.SetFocus() dlg.Show() self.__CheckGameMaster(name) btn = self.__FindWhisperButton(name) if 0 != btn: self.__DestroyWhisperButton(btn) ## 다른 캐릭터로부터 메세지를 받았을때 일단 버튼만 띄워 두는 함수 def RecvWhisper(self, name): if not self.whisperDialogDict.has_key(name): btn = self.__FindWhisperButton(name) if 0 == btn: btn = self.__MakeWhisperButton(name) btn.Flash() chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.RECEIVE_MESSAGE % (name)) else: btn.Flash() elif self.IsGameMasterName(name): dlg = self.whisperDialogDict[name] dlg.SetGameMasterLook() def MakeWhisperButton(self, name): self.__MakeWhisperButton(name) ## 버튼을 눌렀을때 창을 여는 함수 def ShowWhisperDialog(self, btn): try: self.__MakeWhisperDialog(btn.name) dlgWhisper = self.whisperDialogDict[btn.name] dlgWhisper.OpenWithTarget(btn.name) dlgWhisper.Show() self.__CheckGameMaster(btn.name) except: import dbg dbg.TraceError("interface.ShowWhisperDialog - Failed to find key") ## 버튼 초기화 self.__DestroyWhisperButton(btn) ## WhisperDialog 창에서 최소화 명령을 수행했을때 호출되는 함수 ## 창을 최소화 합니다. def MinimizeWhisperDialog(self, name): if 0 != name: self.__MakeWhisperButton(name) self.CloseWhisperDialog(name) ## WhisperDialog 창에서 닫기 명령을 수행했을때 호출되는 함수 ## 창을 지웁니다. def CloseWhisperDialog(self, name): if 0 == name: if self.dlgWhisperWithoutTarget: self.dlgWhisperWithoutTarget.Destroy() self.dlgWhisperWithoutTarget = None return try: dlgWhisper = self.whisperDialogDict[name] dlgWhisper.Destroy() del self.whisperDialogDict[name] except: import dbg dbg.TraceError("interface.CloseWhisperDialog - Failed to find key") ## 버튼의 개수가 바뀌었을때 버튼을 재정렬 하는 함수 def __ArrangeWhisperButton(self): screenWidth = wndMgr.GetScreenWidth() screenHeight = wndMgr.GetScreenHeight() xPos = screenWidth - 70 yPos = 170 * screenHeight / 600 yCount = (screenHeight - 330) / 63 #yCount = (screenHeight - 285) / 63 count = 0 for button in self.whisperButtonList: button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63)) count += 1 ## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수 ## 버튼은 딕셔너리로 하지 않는 것은 정렬 되어 버려 순서가 유지 되지 않으며 ## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다. def __FindWhisperButton(self, name): for button in self.whisperButtonList: if button.name == name: return button return 0 ## 창을 만듭니다. def __MakeWhisperDialog(self, name): dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog) dlgWhisper.BindInterface(self) dlgWhisper.LoadDialog() dlgWhisper.SetPosition(self.windowOpenPosition*30,self.windowOpenPosition*30) self.whisperDialogDict[name] = dlgWhisper self.windowOpenPosition = (self.windowOpenPosition+1) % 5 return dlgWhisper ## 버튼을 만듭니다. def __MakeWhisperButton(self, name): whisperButton = uiWhisper.WhisperButton() whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") whisperButton.SetOverVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") whisperButton.SetDownVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") if self.IsGameMasterName(name): whisperButton.SetToolTipTextWithColor(name, 0xffffa200) else: whisperButton.SetToolTipText(name) whisperButton.ToolTipText.SetHorizontalAlignCenter() whisperButton.SetEvent(ui.__mem_func__(self.ShowWhisperDialog), whisperButton) whisperButton.Show() whisperButton.name = name self.whisperButtonList.insert(0, whisperButton) self.__ArrangeWhisperButton() return whisperButton def __DestroyWhisperButton(self, button): button.SetEvent(0) self.whisperButtonList.remove(button) self.__ArrangeWhisperButton() def HideAllWhisperButton(self): for btn in self.whisperButtonList: btn.Hide() def ShowAllWhisperButton(self): for btn in self.whisperButtonList: btn.Show() def __CheckGameMaster(self, name): if not self.listGMName.has_key(name): return if self.whisperDialogDict.has_key(name): dlg = self.whisperDialogDict[name] dlg.SetGameMasterLook() def RegisterGameMasterName(self, name): if self.listGMName.has_key(name): return self.listGMName[name] = "GM" def IsGameMasterName(self, name): if self.listGMName.has_key(name): return TRUE else: return FALSE ##################################################################################### ##################################################################################### ### Guild Building ### def BUILD_OpenWindow(self): self.wndGuildBuilding = uiGuild.BuildGuildBuildingWindow() self.wndGuildBuilding.Open() self.wndGuildBuilding.wnds = self.__HideWindows() self.wndGuildBuilding.SetCloseEvent(ui.__mem_func__(self.BUILD_CloseWindow)) def BUILD_CloseWindow(self): self.__ShowWindows(self.wndGuildBuilding.wnds) self.wndGuildBuilding = None def BUILD_OnUpdate(self): if not self.wndGuildBuilding: return if self.wndGuildBuilding.IsPositioningMode(): import background x, y, z = background.GetPickingPoint() self.wndGuildBuilding.SetBuildingPosition(x, y, z) def BUILD_OnMouseLeftButtonDown(self): if not self.wndGuildBuilding: return # GUILD_BUILDING if self.wndGuildBuilding.IsPositioningMode(): self.wndGuildBuilding.SettleCurrentPosition() return TRUE elif self.wndGuildBuilding.IsPreviewMode(): pass else: return TRUE # END_OF_GUILD_BUILDING return FALSE def BUILD_OnMouseLeftButtonUp(self): if not self.wndGuildBuilding: return if not self.wndGuildBuilding.IsPreviewMode(): return TRUE return FALSE def BULID_EnterGuildArea(self, areaID): # GUILD_BUILDING mainCharacterName = player.GetMainCharacterName() masterName = guild.GetGuildMasterName() if mainCharacterName != masterName: return if areaID != player.GetGuildID(): return # END_OF_GUILD_BUILDING self.wndGameButton.ShowBuildButton() def BULID_ExitGuildArea(self, areaID): self.wndGameButton.HideBuildButton() ##################################################################################### def IsEditLineFocus(self): if self.ChatWindow.chatLine.IsFocus(): return 1 if self.ChatWindow.chatToLine.IsFocus(): return 1 return 0 def EmptyFunction(self): pass if __name__ == "__main__": import app import wndMgr import systemSetting import mouseModule import grp import ui import localeInfo app.SetMouseHandler(mouseModule.mouseController) app.SetHairColorEnable(TRUE) wndMgr.SetMouseHandler(mouseModule.mouseController) wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight()) app.Create(localeInfo.APP_TITLE, systemSetting.GetWidth(), systemSetting.GetHeight(), 1) mouseModule.mouseController.Create() class TestGame(ui.Window): def __init__(self): ui.Window.__init__(self) localeInfo.LoadLocaleData() player.SetItemData(0, 27001, 10) player.SetItemData(1, 27004, 10) self.interface = Interface() self.interface.MakeInterface() self.interface.ShowDefaultWindows() self.interface.RefreshInventory() #self.interface.OpenCubeWindow() def __del__(self): ui.Window.__del__(self) def OnUpdate(self): app.UpdateGame() def OnRender(self): app.RenderGame() grp.PopState() grp.SetInterfaceRenderState() game = TestGame() game.SetSize(systemSetting.GetWidth(), systemSetting.GetHeight()) game.Show() app.Loop()
costinfo.pySpoiler# option IN_GAME_SHOP_ENABLE = 1 CONSOLE_ENABLE = 0 AUTO_PICK_UP = 0 FAST_PAGE = 1 FAST_EQUIP = 0 WOLF_MAN = "ENABLED" # ENABLED/DISABLED WOLF_WOMEN = "DISABLED" # ENABLED/DISABLED PVPMODE_ENABLE = 1 PVPMODE_TEST_ENABLE = 0 PVPMODE_ACCELKEY_ENABLE = 1 PVPMODE_ACCELKEY_DELAY = 0.5 PVPMODE_PROTECTED_LEVEL = 30 FOG_LEVEL0 = 4800.0 FOG_LEVEL1 = 9600.0 FOG_LEVEL2 = 12800.0 FOG_LEVEL = FOG_LEVEL0 FOG_LEVEL_LIST=[FOG_LEVEL0, FOG_LEVEL1, FOG_LEVEL2] CAMERA_MAX_DISTANCE_SHORT = 2500.0 CAMERA_MAX_DISTANCE_LONG = 3500.0 CAMERA_MAX_DISTANCE_LIST=[CAMERA_MAX_DISTANCE_SHORT, CAMERA_MAX_DISTANCE_LONG] CAMERA_MAX_DISTANCE = CAMERA_MAX_DISTANCE_SHORT CHRNAME_COLOR_INDEX = 0 ENVIRONMENT_NIGHT="d:/ymir work/environment/moonlight04.msenv" # constant HIGH_PRICE = 500000 MIDDLE_PRICE = 50000 ERROR_METIN_STONE = 28960 SUB2_LOADING_ENABLE = 1 EXPANDED_COMBO_ENABLE = 1 CONVERT_EMPIRE_LANGUAGE_ENABLE = 1 USE_ITEM_WEAPON_TABLE_ATTACK_BONUS = 0 ADD_DEF_BONUS_ENABLE = 1 LOGIN_COUNT_LIMIT_ENABLE = 0 USE_SKILL_EFFECT_UPGRADE_ENABLE = 1 VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD = 1 GUILD_MONEY_PER_GSP = 100 GUILD_WAR_TYPE_SELECT_ENABLE = 1 TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE = 0 HAIR_COLOR_ENABLE = 1 ARMOR_SPECULAR_ENABLE = 1 WEAPON_SPECULAR_ENABLE = 1 SEQUENCE_PACKET_ENABLE = 1 KEEP_ACCOUNT_CONNETION_ENABLE = 1 MINIMAP_POSITIONINFO_ENABLE = 1 CONVERT_EMPIRE_LANGUAGE_ENABLE = 0 USE_ITEM_WEAPON_TABLE_ATTACK_BONUS = 0 ADD_DEF_BONUS_ENABLE = 0 LOGIN_COUNT_LIMIT_ENABLE = 0 PVPMODE_PROTECTED_LEVEL = 15 TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE = 10 isItemQuestionDialog = 0 def GET_ITEM_QUESTION_DIALOG_STATUS(): global isItemQuestionDialog return isItemQuestionDialog def SET_ITEM_QUESTION_DIALOG_STATUS(flag): global isItemQuestionDialog isItemQuestionDialog = flag import app import net ######################## def SET_DEFAULT_FOG_LEVEL(): global FOG_LEVEL app.SetMinFog(FOG_LEVEL) def SET_FOG_LEVEL_INDEX(index): global FOG_LEVEL global FOG_LEVEL_LIST try: FOG_LEVEL=FOG_LEVEL_LIST[index] except IndexError: FOG_LEVEL=FOG_LEVEL_LIST[0] app.SetMinFog(FOG_LEVEL) def GET_FOG_LEVEL_INDEX(): global FOG_LEVEL global FOG_LEVEL_LIST return FOG_LEVEL_LIST.index(FOG_LEVEL) ######################## def SET_DEFAULT_CAMERA_MAX_DISTANCE(): global CAMERA_MAX_DISTANCE app.SetCameraMaxDistance(CAMERA_MAX_DISTANCE) def SET_CAMERA_MAX_DISTANCE_INDEX(index): global CAMERA_MAX_DISTANCE global CAMERA_MAX_DISTANCE_LIST try: CAMERA_MAX_DISTANCE=CAMERA_MAX_DISTANCE_LIST[index] except: CAMERA_MAX_DISTANCE=CAMERA_MAX_DISTANCE_LIST[0] app.SetCameraMaxDistance(CAMERA_MAX_DISTANCE) def GET_CAMERA_MAX_DISTANCE_INDEX(): global CAMERA_MAX_DISTANCE global CAMERA_MAX_DISTANCE_LIST return CAMERA_MAX_DISTANCE_LIST.index(CAMERA_MAX_DISTANCE) ######################## import chrmgr import player import app def SET_DEFAULT_CHRNAME_COLOR(): global CHRNAME_COLOR_INDEX chrmgr.SetEmpireNameMode(CHRNAME_COLOR_INDEX) def SET_CHRNAME_COLOR_INDEX(index): global CHRNAME_COLOR_INDEX CHRNAME_COLOR_INDEX=index chrmgr.SetEmpireNameMode(index) def GET_CHRNAME_COLOR_INDEX(): global CHRNAME_COLOR_INDEX return CHRNAME_COLOR_INDEX def SET_VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD(index): global VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD = index def GET_VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD(): global VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD return VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD def SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE(): global CONVERT_EMPIRE_LANGUAGE_ENABLE net.SetEmpireLanguageMode(CONVERT_EMPIRE_LANGUAGE_ENABLE) def SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS(): global USE_ITEM_WEAPON_TABLE_ATTACK_BONUS player.SetWeaponAttackBonusFlag(USE_ITEM_WEAPON_TABLE_ATTACK_BONUS) def SET_DEFAULT_USE_SKILL_EFFECT_ENABLE(): global USE_SKILL_EFFECT_UPGRADE_ENABLE app.SetSkillEffectUpgradeEnable(USE_SKILL_EFFECT_UPGRADE_ENABLE) def SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE(): global TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE app.SetTwoHandedWeaponAttSpeedDecreaseValue(TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE) ######################## import item ACCESSORY_MATERIAL_LIST = [50623, 50624, 50625, 50626, 50627, 50628, 50629, 50630, 50631, 50632, 50633, 50634, 50635, 50636, 50637, 50638] #ACCESSORY_MATERIAL_LIST = [50623, 50623, 50624, 50624, 50625, 50625, 50626, 50627, 50628, 50629, 50630, 50631, 50632, 50633, # 50623, 50623, 50624, 50624, ] JewelAccessoryInfos = [ # jewel wrist neck ear [ 50634, 14420, 16220, 17220 ], [ 50635, 14500, 16500, 17500 ], [ 50636, 14520, 16520, 17520 ], [ 50637, 14540, 16540, 17540 ], [ 50638, 14560, 16560, 17560 ], ] def GET_ACCESSORY_MATERIAL_VNUM(vnum, subType): ret = vnum item_base = (vnum / 10) * 10 for info in JewelAccessoryInfos: if item.ARMOR_WRIST == subType: if info[1] == item_base: return info[0] elif item.ARMOR_NECK == subType: if info[2] == item_base: return info[0] elif item.ARMOR_EAR == subType: if info[3] == item_base: return info[0] if vnum >= 16210 and vnum <= 16219: return 50625 if item.ARMOR_WRIST == subType: WRIST_ITEM_VNUM_BASE = 14000 ret -= WRIST_ITEM_VNUM_BASE elif item.ARMOR_NECK == subType: NECK_ITEM_VNUM_BASE = 16000 ret -= NECK_ITEM_VNUM_BASE elif item.ARMOR_EAR == subType: EAR_ITEM_VNUM_BASE = 17000 ret -= EAR_ITEM_VNUM_BASE type = ret/20 if type<0 or type>=len(ACCESSORY_MATERIAL_LIST): type = (ret-170) / 20 if type<0 or type>=len(ACCESSORY_MATERIAL_LIST): return 0 return ACCESSORY_MATERIAL_LIST[type] ################################################################## ## 새로 추가된 '벨트' 아이템 타입과, 벨트의 소켓에 꽂을 아이템 관련.. ## 벨트의 소켓시스템은 악세서리와 동일하기 때문에, 위 악세서리 관련 하드코딩처럼 이런식으로 할 수밖에 없다.. def GET_BELT_MATERIAL_VNUM(vnum, subType = 0): # 현재는 모든 벨트에는 하나의 아이템(#18900)만 삽입 가능 return 18900 ################################################################## ## 자동물약 (HP: #72723 ~ #72726, SP: #72727 ~ #72730) # 해당 vnum이 자동물약인가? def IS_AUTO_POTION(itemVnum): return IS_AUTO_POTION_HP(itemVnum) or IS_AUTO_POTION_SP(itemVnum) # 해당 vnum이 HP 자동물약인가? def IS_AUTO_POTION_HP(itemVnum): if 72723 <= itemVnum and 72726 >= itemVnum: return 1 elif itemVnum >= 76021 and itemVnum <= 76022: ## 새로 들어간 선물용 화룡의 축복 return 1 elif itemVnum == 79012: return 1 return 0 # 해당 vnum이 SP 자동물약인가? def IS_AUTO_POTION_SP(itemVnum): if 72727 <= itemVnum and 72730 >= itemVnum: return 1 elif itemVnum >= 76004 and itemVnum <= 76005: ## 새로 들어간 선물용 수룡의 축복 return 1 elif itemVnum == 79013: return 1 return 0
Obrigado +1 vez
Cumprimentos -
16 minutos atrás, NewWars disse:Mete ai o interfacemodule.py pls
Com <code>Spoiler## ## Interface ## import constInfo import systemSetting import wndMgr import chat import app import player import uiTaskBar import uiCharacter import uiInventory import uiDragonSoul import uiChat import uiMessenger import guild import ui import uiHelp import uiWhisper import uiPointReset import uiShop import uiExchange import uiSystem import uiRestart import uiToolTip import uiMiniMap import uiParty import uiSafebox import uiGuild import uiQuest import uiPrivateShopBuilder import uiCommon import uiRefine import uiEquipmentDialog import uiGameButton import uiTip import uiCube import miniMap # ACCESSORY_REFINE_ADD_METIN_STONE import uiselectitem # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE import uiScriptLocale import event import localeInfo IsQBHide = 0 class Interface(object): CHARACTER_STATUS_TAB = 1 CHARACTER_SKILL_TAB = 2 LastContactTimeStamp = app.GetTime() - 5 WaitTime = 12 State = "Kapali" def __init__(self): systemSetting.SetInterfaceHandler(self) self.windowOpenPosition = 0 self.dlgWhisperWithoutTarget = None self.inputDialog = None self.tipBoard = None self.bigBoard = None # ITEM_MALL self.mallPageDlg = None # END_OF_ITEM_MALL self.wndWeb = None self.wndTaskBar = None self.wndCharacter = None self.wndInventory = None self.wndExpandedTaskBar = None self.wndDragonSoul = None self.wndDragonSoulRefine = None self.wndChat = None self.wndMessenger = None self.wndMiniMap = None self.wndGuild = None self.wndGuildBuilding = None self.listGMName = {} self.wndQuestWindow = {} self.wndQuestWindowNewKey = 0 self.privateShopAdvertisementBoardDict = {} self.guildScoreBoardDict = {} self.equipmentDialogDict = {} event.SetInterfaceWindow(self) def __del__(self): systemSetting.DestroyInterfaceHandler() event.SetInterfaceWindow(None) ################################ ## Make Windows & Dialogs def __MakeUICurtain(self): wndUICurtain = ui.Bar("TOP_MOST") wndUICurtain.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) wndUICurtain.SetColor(0x77000000) wndUICurtain.Hide() self.wndUICurtain = wndUICurtain def __MakeMessengerWindow(self): self.wndMessenger = uiMessenger.MessengerWindow() from _weakref import proxy self.wndMessenger.SetWhisperButtonEvent(lambda n,i=proxy(self):i.OpenWhisperDialog(n)) self.wndMessenger.SetGuildButtonEvent(ui.__mem_func__(self.ToggleGuildWindow)) def __MakeGuildWindow(self): self.wndGuild = uiGuild.GuildWindow() def __MakeChatWindow(self): wndChat = uiChat.ChatWindow() wndChat.SetSize(wndChat.CHAT_WINDOW_WIDTH, 0) wndChat.SetPosition(wndMgr.GetScreenWidth()/2 - wndChat.CHAT_WINDOW_WIDTH/2, wndMgr.GetScreenHeight() - wndChat.EDIT_LINE_HEIGHT - 37) wndChat.SetHeight(200) wndChat.Refresh() wndChat.Show() self.wndChat = wndChat self.wndChat.BindInterface(self) self.wndChat.SetSendWhisperEvent(ui.__mem_func__(self.OpenWhisperDialogWithoutTarget)) self.wndChat.SetOpenChatLogEvent(ui.__mem_func__(self.ToggleChatLogWindow)) def __MakeTaskBar(self): wndTaskBar = uiTaskBar.TaskBar() wndTaskBar.LoadWindow() self.wndTaskBar = wndTaskBar self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_CHARACTER, ui.__mem_func__(self.ToggleCharacterWindowStatusPage)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_INVENTORY, ui.__mem_func__(self.ToggleInventoryWindow)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_MESSENGER, ui.__mem_func__(self.ToggleMessenger)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_SYSTEM, ui.__mem_func__(self.ToggleSystemDialog)) self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_VECTORS, ui.__mem_func__(self.Vectors)) if uiTaskBar.TaskBar.IS_EXPANDED: self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_EXPAND, ui.__mem_func__(self.ToggleExpandedButton)) self.wndExpandedTaskBar = uiTaskBar.ExpandedTaskBar() self.wndExpandedTaskBar.LoadWindow() self.wndExpandedTaskBar.SetToggleButtonEvent(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, ui.__mem_func__(self.ToggleDragonSoulWindow)) else: self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_CHAT, ui.__mem_func__(self.ToggleChat)) self.wndEnergyBar = None import app if app.ENABLE_ENERGY_SYSTEM: wndEnergyBar = uiTaskBar.EnergyBar() wndEnergyBar.LoadWindow() self.wndEnergyBar = wndEnergyBar def __MakeParty(self): wndParty = uiParty.PartyWindow() wndParty.Hide() self.wndParty = wndParty def __MakeGameButtonWindow(self): wndGameButton = uiGameButton.GameButtonWindow() wndGameButton.SetTop() wndGameButton.Show() wndGameButton.SetButtonEvent("STATUS", ui.__mem_func__(self.__OnClickStatusPlusButton)) wndGameButton.SetButtonEvent("SKILL", ui.__mem_func__(self.__OnClickSkillPlusButton)) wndGameButton.SetButtonEvent("QUEST", ui.__mem_func__(self.__OnClickQuestButton)) wndGameButton.SetButtonEvent("HELP", ui.__mem_func__(self.__OnClickHelpButton)) wndGameButton.SetButtonEvent("BUILD", ui.__mem_func__(self.__OnClickBuildButton)) self.wndGameButton = wndGameButton def __IsChatOpen(self): return TRUE def __MakeWindows(self): wndCharacter = uiCharacter.CharacterWindow() wndInventory = uiInventory.InventoryWindow() wndInventory.BindInterfaceClass(self) if app.ENABLE_DRAGON_SOUL_SYSTEM: wndDragonSoul = uiDragonSoul.DragonSoulWindow() wndDragonSoulRefine = uiDragonSoul.DragonSoulRefineWindow() else: wndDragonSoul = None wndDragonSoulRefine = None wndMiniMap = uiMiniMap.MiniMap() wndSafebox = uiSafebox.SafeboxWindow() # ITEM_MALL wndMall = uiSafebox.MallWindow() self.wndMall = wndMall # END_OF_ITEM_MALL wndChatLog = uiChat.ChatLogWindow() wndChatLog.BindInterface(self) self.wndCharacter = wndCharacter self.wndInventory = wndInventory self.wndDragonSoul = wndDragonSoul self.wndDragonSoulRefine = wndDragonSoulRefine self.wndMiniMap = wndMiniMap self.wndSafebox = wndSafebox self.wndChatLog = wndChatLog if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.SetDragonSoulRefineWindow(self.wndDragonSoulRefine) self.wndDragonSoulRefine.SetInventoryWindows(self.wndInventory, self.wndDragonSoul) self.wndInventory.SetDragonSoulRefineWindow(self.wndDragonSoulRefine) def __MakeDialogs(self): self.dlgExchange = uiExchange.ExchangeDialog() self.dlgExchange.LoadDialog() self.dlgExchange.SetCenterPosition() self.dlgExchange.Hide() self.dlgPointReset = uiPointReset.PointResetDialog() self.dlgPointReset.LoadDialog() self.dlgPointReset.Hide() self.dlgShop = uiShop.ShopDialog() self.dlgShop.LoadDialog() self.dlgShop.Hide() self.dlgRestart = uiRestart.RestartDialog() self.dlgRestart.LoadDialog() self.dlgRestart.Hide() self.dlgSystem = uiSystem.SystemDialog() self.dlgSystem.LoadDialog() self.dlgSystem.SetOpenHelpWindowEvent(ui.__mem_func__(self.OpenHelpWindow)) self.dlgSystem.Hide() self.dlgPassword = uiSafebox.PasswordDialog() self.dlgPassword.Hide() self.hyperlinkItemTooltip = uiToolTip.HyperlinkItemToolTip() self.hyperlinkItemTooltip.Hide() self.tooltipItem = uiToolTip.ItemToolTip() self.tooltipItem.Hide() self.tooltipSkill = uiToolTip.SkillToolTip() self.tooltipSkill.Hide() self.privateShopBuilder = uiPrivateShopBuilder.PrivateShopBuilder() self.privateShopBuilder.Hide() self.dlgRefineNew = uiRefine.RefineDialogNew() self.dlgRefineNew.Hide() def __MakeHelpWindow(self): self.wndHelp = uiHelp.HelpWindow() self.wndHelp.LoadDialog() self.wndHelp.SetCloseEvent(ui.__mem_func__(self.CloseHelpWindow)) self.wndHelp.Hide() def __MakeTipBoard(self): self.tipBoard = uiTip.TipBoard() self.tipBoard.Hide() self.bigBoard = uiTip.BigBoard() self.bigBoard.Hide() def __MakeWebWindow(self): if constInfo.IN_GAME_SHOP_ENABLE: import uiWeb self.wndWeb = uiWeb.WebWindow() self.wndWeb.LoadWindow() self.wndWeb.Hide() def __MakeCubeWindow(self): self.wndCube = uiCube.CubeWindow() self.wndCube.LoadWindow() self.wndCube.Hide() def __MakeCubeResultWindow(self): self.wndCubeResult = uiCube.CubeResultWindow() self.wndCubeResult.LoadWindow() self.wndCubeResult.Hide() # ACCESSORY_REFINE_ADD_METIN_STONE def __MakeItemSelectWindow(self): self.wndItemSelect = uiselectitem.SelectItemWindow() self.wndItemSelect.Hide() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE def MakeInterface(self): self.__MakeMessengerWindow() self.__MakeGuildWindow() self.__MakeChatWindow() self.__MakeParty() self.__MakeWindows() self.__MakeDialogs() self.__MakeUICurtain() self.__MakeTaskBar() self.__MakeGameButtonWindow() self.__MakeHelpWindow() self.__MakeTipBoard() self.__MakeWebWindow() self.__MakeCubeWindow() self.__MakeCubeResultWindow() # ACCESSORY_REFINE_ADD_METIN_STONE self.__MakeItemSelectWindow() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE self.questButtonList = [] self.whisperButtonList = [] self.whisperDialogDict = {} self.privateShopAdvertisementBoardDict = {} self.wndInventory.SetItemToolTip(self.tooltipItem) if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.SetItemToolTip(self.tooltipItem) self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem) self.wndSafebox.SetItemToolTip(self.tooltipItem) self.wndCube.SetItemToolTip(self.tooltipItem) self.wndCubeResult.SetItemToolTip(self.tooltipItem) # ITEM_MALL self.wndMall.SetItemToolTip(self.tooltipItem) # END_OF_ITEM_MALL self.wndCharacter.SetSkillToolTip(self.tooltipSkill) self.wndTaskBar.SetItemToolTip(self.tooltipItem) self.wndTaskBar.SetSkillToolTip(self.tooltipSkill) self.wndGuild.SetSkillToolTip(self.tooltipSkill) # ACCESSORY_REFINE_ADD_METIN_STONE self.wndItemSelect.SetItemToolTip(self.tooltipItem) # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE self.dlgShop.SetItemToolTip(self.tooltipItem) self.dlgExchange.SetItemToolTip(self.tooltipItem) self.privateShopBuilder.SetItemToolTip(self.tooltipItem) self.__InitWhisper() self.DRAGON_SOUL_IS_QUALIFIED = FALSE def MakeHyperlinkTooltip(self, hyperlink): tokens = hyperlink.split(":") if tokens and len(tokens): type = tokens[0] if "item" == type: self.hyperlinkItemTooltip.SetHyperlinkItem(tokens) ## Make Windows & Dialogs ################################ def Close(self): if self.dlgWhisperWithoutTarget: self.dlgWhisperWithoutTarget.Destroy() del self.dlgWhisperWithoutTarget if uiQuest.QuestDialog.__dict__.has_key("QuestCurtain"): uiQuest.QuestDialog.QuestCurtain.Close() if self.wndQuestWindow: for key, eachQuestWindow in self.wndQuestWindow.items(): eachQuestWindow.nextCurtainMode = -1 eachQuestWindow.CloseSelf() eachQuestWindow = None self.wndQuestWindow = {} if self.wndChat: self.wndChat.Destroy() if self.wndTaskBar: self.wndTaskBar.Destroy() if self.wndExpandedTaskBar: self.wndExpandedTaskBar.Destroy() if self.wndEnergyBar: self.wndEnergyBar.Destroy() if self.wndCharacter: self.wndCharacter.Destroy() if self.wndInventory: self.wndInventory.Destroy() if self.wndDragonSoul: self.wndDragonSoul.Destroy() if self.wndDragonSoulRefine: self.wndDragonSoulRefine.Destroy() if self.dlgExchange: self.dlgExchange.Destroy() if self.dlgPointReset: self.dlgPointReset.Destroy() if self.dlgShop: self.dlgShop.Destroy() if self.dlgRestart: self.dlgRestart.Destroy() if self.dlgSystem: self.dlgSystem.Destroy() if self.dlgPassword: self.dlgPassword.Destroy() if self.wndMiniMap: self.wndMiniMap.Destroy() if self.wndSafebox: self.wndSafebox.Destroy() if self.wndWeb: self.wndWeb.Destroy() self.wndWeb = None if self.wndMall: self.wndMall.Destroy() if self.wndParty: self.wndParty.Destroy() if self.wndHelp: self.wndHelp.Destroy() if self.wndCube: self.wndCube.Destroy() if self.wndCubeResult: self.wndCubeResult.Destroy() if self.wndMessenger: self.wndMessenger.Destroy() if self.wndGuild: self.wndGuild.Destroy() if self.privateShopBuilder: self.privateShopBuilder.Destroy() if self.dlgRefineNew: self.dlgRefineNew.Destroy() if self.wndGuildBuilding: self.wndGuildBuilding.Destroy() if self.wndGameButton: self.wndGameButton.Destroy() # ITEM_MALL if self.mallPageDlg: self.mallPageDlg.Destroy() # END_OF_ITEM_MALL # ACCESSORY_REFINE_ADD_METIN_STONE if self.wndItemSelect: self.wndItemSelect.Destroy() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE self.wndChatLog.Destroy() for btn in self.questButtonList: btn.SetEvent(0) for btn in self.whisperButtonList: btn.SetEvent(0) for dlg in self.whisperDialogDict.itervalues(): dlg.Destroy() for brd in self.guildScoreBoardDict.itervalues(): brd.Destroy() for dlg in self.equipmentDialogDict.itervalues(): dlg.Destroy() # ITEM_MALL del self.mallPageDlg # END_OF_ITEM_MALL del self.wndGuild del self.wndMessenger del self.wndUICurtain del self.wndChat del self.wndTaskBar if self.wndExpandedTaskBar: del self.wndExpandedTaskBar del self.wndEnergyBar del self.wndCharacter del self.wndInventory if self.wndDragonSoul: del self.wndDragonSoul if self.wndDragonSoulRefine: del self.wndDragonSoulRefine del self.dlgExchange del self.dlgPointReset del self.dlgShop del self.dlgRestart del self.dlgSystem del self.dlgPassword del self.hyperlinkItemTooltip del self.tooltipItem del self.tooltipSkill del self.wndMiniMap del self.wndSafebox del self.wndMall del self.wndParty del self.wndHelp del self.wndCube del self.wndCubeResult del self.privateShopBuilder del self.inputDialog del self.wndChatLog del self.dlgRefineNew del self.wndGuildBuilding del self.wndGameButton del self.tipBoard del self.bigBoard del self.wndItemSelect self.questButtonList = [] self.whisperButtonList = [] self.whisperDialogDict = {} self.privateShopAdvertisementBoardDict = {} self.guildScoreBoardDict = {} self.equipmentDialogDict = {} uiChat.DestroyChatInputSetWindow() ## Skill def OnUseSkill(self, slotIndex, coolTime): self.wndCharacter.OnUseSkill(slotIndex, coolTime) self.wndTaskBar.OnUseSkill(slotIndex, coolTime) self.wndGuild.OnUseSkill(slotIndex, coolTime) def OnActivateSkill(self, slotIndex): self.wndCharacter.OnActivateSkill(slotIndex) self.wndTaskBar.OnActivateSkill(slotIndex) def OnDeactivateSkill(self, slotIndex): self.wndCharacter.OnDeactivateSkill(slotIndex) self.wndTaskBar.OnDeactivateSkill(slotIndex) def OnChangeCurrentSkill(self, skillSlotNumber): self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber) def SelectMouseButtonEvent(self, dir, event): self.wndTaskBar.SelectMouseButtonEvent(dir, event) ## Refresh def RefreshAlignment(self): self.wndCharacter.RefreshAlignment() def RefreshStatus(self): self.wndTaskBar.RefreshStatus() self.wndCharacter.RefreshStatus() self.wndInventory.RefreshStatus() if self.wndEnergyBar: self.wndEnergyBar.RefreshStatus() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.RefreshStatus() def RefreshStamina(self): self.wndTaskBar.RefreshStamina() def RefreshSkill(self): self.wndCharacter.RefreshSkill() self.wndTaskBar.RefreshSkill() def RefreshInventory(self): self.wndTaskBar.RefreshQuickSlot() self.wndInventory.RefreshItemSlot() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.RefreshItemSlot() def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh self.wndCharacter.RefreshCharacter() self.wndTaskBar.RefreshQuickSlot() def RefreshQuest(self): self.wndCharacter.RefreshQuest() def RefreshSafebox(self): self.wndSafebox.RefreshSafebox() # ITEM_MALL def RefreshMall(self): self.wndMall.RefreshMall() def OpenItemMall(self): if not self.mallPageDlg: self.mallPageDlg = uiShop.MallPageDialog() self.mallPageDlg.Open() # END_OF_ITEM_MALL def RefreshMessenger(self): self.wndMessenger.RefreshMessenger() def RefreshGuildInfoPage(self): self.wndGuild.RefreshGuildInfoPage() def RefreshGuildBoardPage(self): self.wndGuild.RefreshGuildBoardPage() def RefreshGuildMemberPage(self): self.wndGuild.RefreshGuildMemberPage() def RefreshGuildMemberPageGradeComboBox(self): self.wndGuild.RefreshGuildMemberPageGradeComboBox() def RefreshGuildSkillPage(self): self.wndGuild.RefreshGuildSkillPage() def RefreshGuildGradePage(self): self.wndGuild.RefreshGuildGradePage() def DeleteGuild(self): self.wndMessenger.ClearGuildMember() self.wndGuild.DeleteGuild() def RefreshMobile(self): self.dlgSystem.RefreshMobile() def OnMobileAuthority(self): self.dlgSystem.OnMobileAuthority() def OnBlockMode(self, mode): self.dlgSystem.OnBlockMode(mode) ## Calling Functions # PointReset def OpenPointResetDialog(self): self.dlgPointReset.Show() self.dlgPointReset.SetTop() def ClosePointResetDialog(self): self.dlgPointReset.Close() # Shop def OpenShopDialog(self, vid): self.wndInventory.Show() self.wndInventory.SetTop() self.dlgShop.Open(vid) self.dlgShop.SetTop() def CloseShopDialog(self): self.dlgShop.Close() def RefreshShopDialog(self): self.dlgShop.Refresh() ## Quest def OpenCharacterWindowQuestPage(self): self.wndCharacter.Show() self.wndCharacter.SetState("QUEST") def OpenQuestWindow(self, skin, idx): wnds = () q = uiQuest.QuestDialog(skin, idx) q.SetWindowName("QuestWindow" + str(idx)) q.Show() if skin: q.Lock() wnds = self.__HideWindows() # UNKNOWN_UPDATE q.AddOnDoneEvent(lambda tmp_self, args=wnds: self.__ShowWindows(args)) # END_OF_UNKNOWN_UPDATE if skin: q.AddOnCloseEvent(q.Unlock) q.AddOnCloseEvent(lambda key = self.wndQuestWindowNewKey:ui.__mem_func__(self.RemoveQuestDialog)(key)) self.wndQuestWindow[self.wndQuestWindowNewKey] = q self.wndQuestWindowNewKey = self.wndQuestWindowNewKey + 1 # END_OF_UNKNOWN_UPDATE def RemoveQuestDialog(self, key): del self.wndQuestWindow[key] ## Exchange def StartExchange(self): self.dlgExchange.OpenDialog() self.dlgExchange.Refresh() def EndExchange(self): self.dlgExchange.CloseDialog() def RefreshExchange(self): self.dlgExchange.Refresh() ## Party def AddPartyMember(self, pid, name): self.wndParty.AddPartyMember(pid, name) self.__ArrangeQuestButton() def UpdatePartyMemberInfo(self, pid): self.wndParty.UpdatePartyMemberInfo(pid) def RemovePartyMember(self, pid): self.wndParty.RemovePartyMember(pid) ##!! 20061026.levites.퀘스트_위치_보정 self.__ArrangeQuestButton() def LinkPartyMember(self, pid, vid): self.wndParty.LinkPartyMember(pid, vid) def UnlinkPartyMember(self, pid): self.wndParty.UnlinkPartyMember(pid) def UnlinkAllPartyMember(self): self.wndParty.UnlinkAllPartyMember() def ExitParty(self): self.wndParty.ExitParty() ##!! 20061026.levites.퀘스트_위치_보정 self.__ArrangeQuestButton() def PartyHealReady(self): self.wndParty.PartyHealReady() def ChangePartyParameter(self, distributionMode): self.wndParty.ChangePartyParameter(distributionMode) ## Safebox def AskSafeboxPassword(self): if self.wndSafebox.IsShow(): return # SAFEBOX_PASSWORD self.dlgPassword.SetTitle(localeInfo.PASSWORD_TITLE) self.dlgPassword.SetSendMessage("/safebox_password ") # END_OF_SAFEBOX_PASSWORD self.dlgPassword.ShowDialog() def OpenSafeboxWindow(self, size): self.dlgPassword.CloseDialog() self.wndSafebox.ShowWindow(size) def RefreshSafeboxMoney(self): self.wndSafebox.RefreshSafeboxMoney() def CommandCloseSafebox(self): self.wndSafebox.CommandCloseSafebox() # ITEM_MALL def AskMallPassword(self): if self.wndMall.IsShow(): return self.dlgPassword.SetTitle(localeInfo.MALL_PASSWORD_TITLE) self.dlgPassword.SetSendMessage("/mall_password ") self.dlgPassword.ShowDialog() def OpenMallWindow(self, size): self.dlgPassword.CloseDialog() self.wndMall.ShowWindow(size) def CommandCloseMall(self): self.wndMall.CommandCloseMall() # END_OF_ITEM_MALL ## Guild def OnStartGuildWar(self, guildSelf, guildOpp): self.wndGuild.OnStartGuildWar(guildSelf, guildOpp) guildWarScoreBoard = uiGuild.GuildWarScoreBoard() guildWarScoreBoard.Open(guildSelf, guildOpp) guildWarScoreBoard.Show() self.guildScoreBoardDict[uiGuild.GetGVGKey(guildSelf, guildOpp)] = guildWarScoreBoard def OnEndGuildWar(self, guildSelf, guildOpp): self.wndGuild.OnEndGuildWar(guildSelf, guildOpp) key = uiGuild.GetGVGKey(guildSelf, guildOpp) if not self.guildScoreBoardDict.has_key(key): return self.guildScoreBoardDict[key].Destroy() del self.guildScoreBoardDict[key] # GUILDWAR_MEMBER_COUNT def UpdateMemberCount(self, gulidID1, memberCount1, guildID2, memberCount2): key = uiGuild.GetGVGKey(gulidID1, guildID2) if not self.guildScoreBoardDict.has_key(key): return self.guildScoreBoardDict[key].UpdateMemberCount(gulidID1, memberCount1, guildID2, memberCount2) # END_OF_GUILDWAR_MEMBER_COUNT def OnRecvGuildWarPoint(self, gainGuildID, opponentGuildID, point): key = uiGuild.GetGVGKey(gainGuildID, opponentGuildID) if not self.guildScoreBoardDict.has_key(key): return guildBoard = self.guildScoreBoardDict[key] guildBoard.SetScore(gainGuildID, opponentGuildID, point) ## PK Mode def OnChangePKMode(self): self.wndCharacter.RefreshAlignment() self.dlgSystem.OnChangePKMode() ## Refine def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type): self.dlgRefineNew.Open(targetItemPos, nextGradeItemVnum, cost, prob, type) def AppendMaterialToRefineDialog(self, vnum, count): self.dlgRefineNew.AppendMaterial(vnum, count) ## Show & Hide def ShowDefaultWindows(self): self.wndTaskBar.Show() self.wndMiniMap.Show() self.wndMiniMap.ShowMiniMap() if self.wndEnergyBar: self.wndEnergyBar.Show() def ShowAllWindows(self): self.wndTaskBar.Show() self.wndCharacter.Show() self.wndInventory.Show() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.Show() self.wndDragonSoulRefine.Show() self.wndChat.Show() self.wndMiniMap.Show() if self.wndEnergyBar: self.wndEnergyBar.Show() if self.wndExpandedTaskBar: self.wndExpandedTaskBar.Show() self.wndExpandedTaskBar.SetTop() def HideAllWindows(self): if self.wndTaskBar: self.wndTaskBar.Hide() if self.wndEnergyBar: self.wndEnergyBar.Hide() if self.wndCharacter: self.wndCharacter.Hide() if self.wndInventory: self.wndInventory.Hide() if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.Hide() self.wndDragonSoulRefine.Hide() if self.wndChat: self.wndChat.Hide() if self.wndMiniMap: self.wndMiniMap.Hide() if self.wndMessenger: self.wndMessenger.Hide() if self.wndGuild: self.wndGuild.Hide() if self.wndExpandedTaskBar: self.wndExpandedTaskBar.Hide() def ShowMouseImage(self): self.wndTaskBar.ShowMouseImage() def HideMouseImage(self): self.wndTaskBar.HideMouseImage() def ToggleChat(self): if TRUE == self.wndChat.IsEditMode(): self.wndChat.CloseChat() else: # 웹페이지가 열렸을때는 채팅 입력이 안됨 if self.wndWeb and self.wndWeb.IsShow(): pass else: self.wndChat.OpenChat() def IsOpenChat(self): return self.wndChat.IsEditMode() def SetChatFocus(self): self.wndChat.SetChatFocus() def OpenRestartDialog(self): self.dlgRestart.OpenDialog() self.dlgRestart.SetTop() def CloseRestartDialog(self): self.dlgRestart.Close() def ToggleSystemDialog(self): if FALSE == self.dlgSystem.IsShow(): self.dlgSystem.OpenDialog() self.dlgSystem.SetTop() else: self.dlgSystem.Close() def OpenSystemDialog(self): self.dlgSystem.OpenDialog() self.dlgSystem.SetTop() def ToggleMessenger(self): if self.wndMessenger.IsShow(): self.wndMessenger.Hide() else: self.wndMessenger.SetTop() self.wndMessenger.Show() def ToggleMiniMap(self): if app.IsPressed(app.DIK_LSHIFT) or app.IsPressed(app.DIK_RSHIFT): if FALSE == self.wndMiniMap.isShowMiniMap(): self.wndMiniMap.ShowMiniMap() self.wndMiniMap.SetTop() else: self.wndMiniMap.HideMiniMap() else: self.wndMiniMap.ToggleAtlasWindow() def PressMKey(self): if app.IsPressed(app.DIK_LALT) or app.IsPressed(app.DIK_RALT): self.ToggleMessenger() else: self.ToggleMiniMap() def SetMapName(self, mapName): self.wndMiniMap.SetMapName(mapName) def MiniMapScaleUp(self): self.wndMiniMap.ScaleUp() def MiniMapScaleDown(self): self.wndMiniMap.ScaleDown() def ToggleCharacterWindow(self, state): if FALSE == player.IsObserverMode(): if FALSE == self.wndCharacter.IsShow(): self.OpenCharacterWindowWithState(state) else: if state == self.wndCharacter.GetState(): self.wndCharacter.OverOutItem() self.wndCharacter.Hide() else: self.wndCharacter.SetState(state) def OpenCharacterWindowWithState(self, state): if FALSE == player.IsObserverMode(): self.wndCharacter.SetState(state) self.wndCharacter.Show() self.wndCharacter.SetTop() def ToggleCharacterWindowStatusPage(self): self.ToggleCharacterWindow("STATUS") def Vectors(self): if 0==constInfo.VectorsEfsunTaskbar: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "efsunbot.pyc") def ToggleInventoryWindow(self): if self.State == "Kapali": chat.AppendChat(chat.CHAT_TYPE_INFO, "Envanteri a?bilmek icin " + str(int(int(self.LastContactTimeStamp) + self.WaitTime) - int(app.GetTime())) + " saniye beklemelisin.") return else: if FALSE == player.IsObserverMode(): if FALSE == self.wndInventory.IsShow(): self.wndInventory.Show() self.wndInventory.SetTop() else: self.wndInventory.OverOutItem() self.wndInventory.Close() def ToggleExpandedButton(self): if FALSE == player.IsObserverMode(): if FALSE == self.wndExpandedTaskBar.IsShow(): self.wndExpandedTaskBar.Show() self.wndExpandedTaskBar.SetTop() else: self.wndExpandedTaskBar.Close() # 용혼석 def DragonSoulActivate(self, deck): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.ActivateDragonSoulByExtern(deck) def DragonSoulDeactivate(self): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.DeactivateDragonSoul() def Highligt_Item(self, inven_type, inven_pos): if player.DRAGON_SOUL_INVENTORY == inven_type: if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.HighlightSlot(inven_pos) def DragonSoulGiveQuilification(self): self.DRAGON_SOUL_IS_QUALIFIED = TRUE self.wndExpandedTaskBar.SetToolTipText(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, uiScriptLocale.TASKBAR_DRAGON_SOUL) def ToggleDragonSoulWindow(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if FALSE == self.wndDragonSoul.IsShow(): if self.DRAGON_SOUL_IS_QUALIFIED: self.wndDragonSoul.Show() else: try: self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED) self.wndPopupDialog.Open() except: self.wndPopupDialog = uiCommon.PopupDialog() self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED) self.wndPopupDialog.Open() else: self.wndDragonSoul.Close() def ToggleDragonSoulWindowWithNoInfo(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if FALSE == self.wndDragonSoul.IsShow(): if self.DRAGON_SOUL_IS_QUALIFIED: self.wndDragonSoul.Show() else: self.wndDragonSoul.Close() def FailDragonSoulRefine(self, reason, inven_type, inven_pos): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if TRUE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.RefineFail(reason, inven_type, inven_pos) def SucceedDragonSoulRefine(self, inven_type, inven_pos): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if TRUE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.RefineSucceed(inven_type, inven_pos) def OpenDragonSoulRefineWindow(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if FALSE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.Show() if None != self.wndDragonSoul: if FALSE == self.wndDragonSoul.IsShow(): self.wndDragonSoul.Show() def CloseDragonSoulRefineWindow(self): if FALSE == player.IsObserverMode(): if app.ENABLE_DRAGON_SOUL_SYSTEM: if TRUE == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.Close() # 용혼석 끝 def ToggleGuildWindow(self): if not self.wndGuild.IsShow(): if self.wndGuild.CanOpen(): self.wndGuild.Open() else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GUILD_YOU_DO_NOT_JOIN) else: self.wndGuild.OverOutItem() self.wndGuild.Hide() def ToggleChatLogWindow(self): if self.wndChatLog.IsShow(): self.wndChatLog.Hide() else: self.wndChatLog.Show() def CheckGameButton(self): if self.wndGameButton: self.wndGameButton.CheckGameButton() def __OnClickStatusPlusButton(self): self.ToggleCharacterWindow("STATUS") def __OnClickSkillPlusButton(self): self.ToggleCharacterWindow("SKILL") def __OnClickQuestButton(self): self.ToggleCharacterWindow("QUEST") def __OnClickHelpButton(self): player.SetPlayTime(1) self.CheckGameButton() self.OpenHelpWindow() def __OnClickBuildButton(self): self.BUILD_OpenWindow() def OpenHelpWindow(self): self.wndUICurtain.Show() self.wndHelp.Open() def CloseHelpWindow(self): self.wndUICurtain.Hide() self.wndHelp.Close() def OpenWebWindow(self, url): self.wndWeb.Open(url) # 웹페이지를 열면 채팅을 닫는다 self.wndChat.CloseChat() # show GIFT def ShowGift(self): self.wndTaskBar.ShowGift() def CloseWbWindow(self): self.wndWeb.Close() def OpenCubeWindow(self): self.wndCube.Open() if FALSE == self.wndInventory.IsShow(): self.wndInventory.Show() def UpdateCubeInfo(self, gold, itemVnum, count): self.wndCube.UpdateInfo(gold, itemVnum, count) def CloseCubeWindow(self): self.wndCube.Close() def FailedCubeWork(self): self.wndCube.Refresh() def SucceedCubeWork(self, itemVnum, count): self.wndCube.Clear() print "큐브 제작 성공! [%d:%d]" % (itemVnum, count) if 0: # 결과 메시지 출력은 생략 한다 self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition()) self.wndCubeResult.SetCubeResultItem(itemVnum, count) self.wndCubeResult.Open() self.wndCubeResult.SetTop() def __HideWindows(self): hideWindows = self.wndTaskBar,\ self.wndCharacter,\ self.wndInventory,\ self.wndMiniMap,\ self.wndGuild,\ self.wndMessenger,\ self.wndChat,\ self.wndParty,\ self.wndGameButton, if self.wndEnergyBar: hideWindows += self.wndEnergyBar, if self.wndExpandedTaskBar: hideWindows += self.wndExpandedTaskBar, if app.ENABLE_DRAGON_SOUL_SYSTEM: hideWindows += self.wndDragonSoul,\ self.wndDragonSoulRefine, hideWindows = filter(lambda x:x.IsShow(), hideWindows) map(lambda x:x.Hide(), hideWindows) import sys self.HideAllQuestButton() self.HideAllWhisperButton() if self.wndChat.IsEditMode(): self.wndChat.CloseChat() return hideWindows def __ShowWindows(self, wnds): import sys map(lambda x:x.Show(), wnds) global IsQBHide if not IsQBHide: self.ShowAllQuestButton() else: self.HideAllQuestButton() self.ShowAllWhisperButton() def BINARY_OpenAtlasWindow(self): if self.wndMiniMap: self.wndMiniMap.ShowAtlas() def BINARY_SetObserverMode(self, flag): self.wndGameButton.SetObserverMode(flag) # ACCESSORY_REFINE_ADD_METIN_STONE def BINARY_OpenSelectItemWindow(self): self.wndItemSelect.Open() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE ##################################################################################### ### Private Shop ### def OpenPrivateShopInputNameDialog(self): #if player.IsInSafeArea(): # chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CANNOT_OPEN_PRIVATE_SHOP_IN_SAFE_AREA) # return inputDialog = uiCommon.InputDialog() inputDialog.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_NAME_DIALOG_TITLE) inputDialog.SetMaxLength(32) inputDialog.SetAcceptEvent(ui.__mem_func__(self.OpenPrivateShopBuilder)) inputDialog.SetCancelEvent(ui.__mem_func__(self.ClosePrivateShopInputNameDialog)) inputDialog.Open() self.inputDialog = inputDialog def ClosePrivateShopInputNameDialog(self): self.inputDialog = None return TRUE def OpenPrivateShopBuilder(self): if not self.inputDialog: return TRUE if not len(self.inputDialog.GetText()): return TRUE self.privateShopBuilder.Open(self.inputDialog.GetText()) self.ClosePrivateShopInputNameDialog() return TRUE def AppearPrivateShop(self, vid, text): board = uiPrivateShopBuilder.PrivateShopAdvertisementBoard() board.Open(vid, text) self.privateShopAdvertisementBoardDict[vid] = board def DisappearPrivateShop(self, vid): if not self.privateShopAdvertisementBoardDict.has_key(vid): return del self.privateShopAdvertisementBoardDict[vid] uiPrivateShopBuilder.DeleteADBoard(vid) ##################################################################################### ### Equipment ### def OpenEquipmentDialog(self, vid): dlg = uiEquipmentDialog.EquipmentDialog() dlg.SetItemToolTip(self.tooltipItem) dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog)) dlg.Open(vid) self.equipmentDialogDict[vid] = dlg def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count): if not vid in self.equipmentDialogDict: return self.equipmentDialogDict[vid].SetEquipmentDialogItem(slotIndex, vnum, count) def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value): if not vid in self.equipmentDialogDict: return self.equipmentDialogDict[vid].SetEquipmentDialogSocket(slotIndex, socketIndex, value) def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value): if not vid in self.equipmentDialogDict: return self.equipmentDialogDict[vid].SetEquipmentDialogAttr(slotIndex, attrIndex, type, value) def CloseEquipmentDialog(self, vid): if not vid in self.equipmentDialogDict: return del self.equipmentDialogDict[vid] ##################################################################################### ##################################################################################### ### Quest ### def BINARY_ClearQuest(self, index): btn = self.__FindQuestButton(index) if 0 != btn: self.__DestroyQuestButton(btn) def RecvQuest(self, index, name): # QUEST_LETTER_IMAGE self.BINARY_RecvQuest(index, name, "file", localeInfo.GetLetterImageName()) # END_OF_QUEST_LETTER_IMAGE def BINARY_RecvQuest(self, index, name, iconType, iconName): btn = self.__FindQuestButton(index) if 0 != btn: self.__DestroyQuestButton(btn) btn = uiWhisper.WhisperButton() # QUEST_LETTER_IMAGE ##!! 20061026.levites.퀘스트_이미지_교체 import item if "item"==iconType: item.SelectItem(int(iconName)) buttonImageFileName=item.GetIconImageFileName() else: buttonImageFileName=iconName if localeInfo.IsEUROPE(): if "highlight" == iconType: btn.SetUpVisual("locale/ymir_ui/highlighted_quest.tga") btn.SetOverVisual("locale/ymir_ui/highlighted_quest_r.tga") btn.SetDownVisual("locale/ymir_ui/highlighted_quest_r.tga") else: btn.SetUpVisual(localeInfo.GetLetterCloseImageName()) btn.SetOverVisual(localeInfo.GetLetterOpenImageName()) btn.SetDownVisual(localeInfo.GetLetterOpenImageName()) else: btn.SetUpVisual(buttonImageFileName) btn.SetOverVisual(buttonImageFileName) btn.SetDownVisual(buttonImageFileName) btn.Flash() # END_OF_QUEST_LETTER_IMAGE if localeInfo.IsARABIC(): btn.SetToolTipText(name, 0, 35) btn.ToolTipText.SetHorizontalAlignCenter() else: btn.SetToolTipText(name, -20, 35) btn.ToolTipText.SetHorizontalAlignLeft() btn.SetEvent(ui.__mem_func__(self.__StartQuest), btn) btn.Show() btn.index = index btn.name = name self.questButtonList.insert(0, btn) self.__ArrangeQuestButton() #chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND) def __ArrangeQuestButton(self): screenWidth = wndMgr.GetScreenWidth() screenHeight = wndMgr.GetScreenHeight() ##!! 20061026.levites.퀘스트_위치_보정 if self.wndParty.IsShow(): xPos = 100 + 30 else: xPos = 20 if localeInfo.IsARABIC(): xPos = xPos + 15 yPos = 170 * screenHeight / 600 yCount = (screenHeight - 330) / 63 count = 0 for btn in self.questButtonList: btn.SetPosition(xPos + (int(count/yCount) * 100), yPos + (count%yCount * 63)) count += 1 global IsQBHide if IsQBHide: btn.Hide() else: btn.Show() def __StartQuest(self, btn): event.QuestButtonClick(btn.index) self.__DestroyQuestButton(btn) def __FindQuestButton(self, index): for btn in self.questButtonList: if btn.index == index: return btn return 0 def __DestroyQuestButton(self, btn): btn.SetEvent(0) self.questButtonList.remove(btn) self.__ArrangeQuestButton() def HideAllQuestButton(self): for btn in self.questButtonList: btn.Hide() def ShowAllQuestButton(self): for btn in self.questButtonList: btn.Show() ##################################################################################### ##################################################################################### ### Whisper ### def __InitWhisper(self): chat.InitWhisper(self) ## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수 ## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다. def OpenWhisperDialogWithoutTarget(self): if not self.dlgWhisperWithoutTarget: dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog) dlgWhisper.BindInterface(self) dlgWhisper.LoadDialog() dlgWhisper.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog) dlgWhisper.SetPosition(self.windowOpenPosition*30,self.windowOpenPosition*30) dlgWhisper.Show() self.dlgWhisperWithoutTarget = dlgWhisper self.windowOpenPosition = (self.windowOpenPosition+1) % 5 else: self.dlgWhisperWithoutTarget.SetTop() self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog) ## 이름 없는 대화창에서 이름을 결정했을때 WhisperDialogDict에 창을 넣어주는 함수 def RegisterTemporaryWhisperDialog(self, name): if not self.dlgWhisperWithoutTarget: return btn = self.__FindWhisperButton(name) if 0 != btn: self.__DestroyWhisperButton(btn) elif self.whisperDialogDict.has_key(name): oldDialog = self.whisperDialogDict[name] oldDialog.Destroy() del self.whisperDialogDict[name] self.whisperDialogDict[name] = self.dlgWhisperWithoutTarget self.dlgWhisperWithoutTarget.OpenWithTarget(name) self.dlgWhisperWithoutTarget = None self.__CheckGameMaster(name) ## 캐릭터 메뉴의 1:1 대화 하기를 눌렀을때 이름을 가지고 바로 창을 여는 함수 def OpenWhisperDialog(self, name): if not self.whisperDialogDict.has_key(name): dlg = self.__MakeWhisperDialog(name) dlg.OpenWithTarget(name) dlg.chatLine.SetFocus() dlg.Show() self.__CheckGameMaster(name) btn = self.__FindWhisperButton(name) if 0 != btn: self.__DestroyWhisperButton(btn) ## 다른 캐릭터로부터 메세지를 받았을때 일단 버튼만 띄워 두는 함수 def RecvWhisper(self, name): if not self.whisperDialogDict.has_key(name): btn = self.__FindWhisperButton(name) if 0 == btn: btn = self.__MakeWhisperButton(name) btn.Flash() chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.RECEIVE_MESSAGE % (name)) else: btn.Flash() elif self.IsGameMasterName(name): dlg = self.whisperDialogDict[name] dlg.SetGameMasterLook() def MakeWhisperButton(self, name): self.__MakeWhisperButton(name) ## 버튼을 눌렀을때 창을 여는 함수 def ShowWhisperDialog(self, btn): try: self.__MakeWhisperDialog(btn.name) dlgWhisper = self.whisperDialogDict[btn.name] dlgWhisper.OpenWithTarget(btn.name) dlgWhisper.Show() self.__CheckGameMaster(btn.name) except: import dbg dbg.TraceError("interface.ShowWhisperDialog - Failed to find key") ## 버튼 초기화 self.__DestroyWhisperButton(btn) ## WhisperDialog 창에서 최소화 명령을 수행했을때 호출되는 함수 ## 창을 최소화 합니다. def MinimizeWhisperDialog(self, name): if 0 != name: self.__MakeWhisperButton(name) self.CloseWhisperDialog(name) ## WhisperDialog 창에서 닫기 명령을 수행했을때 호출되는 함수 ## 창을 지웁니다. def CloseWhisperDialog(self, name): if 0 == name: if self.dlgWhisperWithoutTarget: self.dlgWhisperWithoutTarget.Destroy() self.dlgWhisperWithoutTarget = None return try: dlgWhisper = self.whisperDialogDict[name] dlgWhisper.Destroy() del self.whisperDialogDict[name] except: import dbg dbg.TraceError("interface.CloseWhisperDialog - Failed to find key") ## 버튼의 개수가 바뀌었을때 버튼을 재정렬 하는 함수 def __ArrangeWhisperButton(self): screenWidth = wndMgr.GetScreenWidth() screenHeight = wndMgr.GetScreenHeight() xPos = screenWidth - 70 yPos = 170 * screenHeight / 600 yCount = (screenHeight - 330) / 63 #yCount = (screenHeight - 285) / 63 count = 0 for button in self.whisperButtonList: button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63)) count += 1 ## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수 ## 버튼은 딕셔너리로 하지 않는 것은 정렬 되어 버려 순서가 유지 되지 않으며 ## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다. def __FindWhisperButton(self, name): for button in self.whisperButtonList: if button.name == name: return button return 0 ## 창을 만듭니다. def __MakeWhisperDialog(self, name): dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog) dlgWhisper.BindInterface(self) dlgWhisper.LoadDialog() dlgWhisper.SetPosition(self.windowOpenPosition*30,self.windowOpenPosition*30) self.whisperDialogDict[name] = dlgWhisper self.windowOpenPosition = (self.windowOpenPosition+1) % 5 return dlgWhisper ## 버튼을 만듭니다. def __MakeWhisperButton(self, name): whisperButton = uiWhisper.WhisperButton() whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") whisperButton.SetOverVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") whisperButton.SetDownVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") if self.IsGameMasterName(name): whisperButton.SetToolTipTextWithColor(name, 0xffffa200) else: whisperButton.SetToolTipText(name) whisperButton.ToolTipText.SetHorizontalAlignCenter() whisperButton.SetEvent(ui.__mem_func__(self.ShowWhisperDialog), whisperButton) whisperButton.Show() whisperButton.name = name self.whisperButtonList.insert(0, whisperButton) self.__ArrangeWhisperButton() return whisperButton def __DestroyWhisperButton(self, button): button.SetEvent(0) self.whisperButtonList.remove(button) self.__ArrangeWhisperButton() def HideAllWhisperButton(self): for btn in self.whisperButtonList: btn.Hide() def ShowAllWhisperButton(self): for btn in self.whisperButtonList: btn.Show() def __CheckGameMaster(self, name): if not self.listGMName.has_key(name): return if self.whisperDialogDict.has_key(name): dlg = self.whisperDialogDict[name] dlg.SetGameMasterLook() def RegisterGameMasterName(self, name): if self.listGMName.has_key(name): return self.listGMName[name] = "GM" def IsGameMasterName(self, name): if self.listGMName.has_key(name): return TRUE else: return FALSE ##################################################################################### ##################################################################################### ### Guild Building ### def BUILD_OpenWindow(self): self.wndGuildBuilding = uiGuild.BuildGuildBuildingWindow() self.wndGuildBuilding.Open() self.wndGuildBuilding.wnds = self.__HideWindows() self.wndGuildBuilding.SetCloseEvent(ui.__mem_func__(self.BUILD_CloseWindow)) def BUILD_CloseWindow(self): self.__ShowWindows(self.wndGuildBuilding.wnds) self.wndGuildBuilding = None def BUILD_OnUpdate(self): if not self.wndGuildBuilding: return if self.wndGuildBuilding.IsPositioningMode(): import background x, y, z = background.GetPickingPoint() self.wndGuildBuilding.SetBuildingPosition(x, y, z) def BUILD_OnMouseLeftButtonDown(self): if not self.wndGuildBuilding: return # GUILD_BUILDING if self.wndGuildBuilding.IsPositioningMode(): self.wndGuildBuilding.SettleCurrentPosition() return TRUE elif self.wndGuildBuilding.IsPreviewMode(): pass else: return TRUE # END_OF_GUILD_BUILDING return FALSE def BUILD_OnMouseLeftButtonUp(self): if not self.wndGuildBuilding: return if not self.wndGuildBuilding.IsPreviewMode(): return TRUE return FALSE def BULID_EnterGuildArea(self, areaID): # GUILD_BUILDING mainCharacterName = player.GetMainCharacterName() masterName = guild.GetGuildMasterName() if mainCharacterName != masterName: return if areaID != player.GetGuildID(): return # END_OF_GUILD_BUILDING self.wndGameButton.ShowBuildButton() def BULID_ExitGuildArea(self, areaID): self.wndGameButton.HideBuildButton() ##################################################################################### def IsEditLineFocus(self): if self.ChatWindow.chatLine.IsFocus(): return 1 if self.ChatWindow.chatToLine.IsFocus(): return 1 return 0 def EmptyFunction(self): pass if __name__ == "__main__": import app import wndMgr import systemSetting import mouseModule import grp import ui import localeInfo app.SetMouseHandler(mouseModule.mouseController) app.SetHairColorEnable(TRUE) wndMgr.SetMouseHandler(mouseModule.mouseController) wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight()) app.Create(localeInfo.APP_TITLE, systemSetting.GetWidth(), systemSetting.GetHeight(), 1) mouseModule.mouseController.Create() class TestGame(ui.Window): def __init__(self): ui.Window.__init__(self) localeInfo.LoadLocaleData() player.SetItemData(0, 27001, 10) player.SetItemData(1, 27004, 10) self.interface = Interface() self.interface.MakeInterface() self.interface.ShowDefaultWindows() self.interface.RefreshInventory() #self.interface.OpenCubeWindow() def __del__(self): ui.Window.__del__(self) def OnUpdate(self): app.UpdateGame() def OnRender(self): app.RenderGame() grp.PopState() grp.SetInterfaceRenderState() game = TestGame() game.SetSize(systemSetting.GetWidth(), systemSetting.GetHeight()) game.Show() app.Loop()
Sem <code>Spoiler##
## Interface
##
import constInfo
import systemSetting
import wndMgr
import chat
import app
import player
import uiTaskBar
import uiCharacter
import uiInventory
import uiDragonSoul
import uiChat
import uiMessenger
import guildimport ui
import uiHelp
import uiWhisper
import uiPointReset
import uiShop
import uiExchange
import uiSystem
import uiRestart
import uiToolTip
import uiMiniMap
import uiParty
import uiSafebox
import uiGuild
import uiQuest
import uiPrivateShopBuilder
import uiCommon
import uiRefine
import uiEquipmentDialog
import uiGameButton
import uiTip
import uiCube
import miniMap
# ACCESSORY_REFINE_ADD_METIN_STONE
import uiselectitem
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONE
import uiScriptLocaleimport event
import localeInfoIsQBHide = 0
class Interface(object):
CHARACTER_STATUS_TAB = 1
CHARACTER_SKILL_TAB = 2
LastContactTimeStamp = app.GetTime() - 5
WaitTime = 12
State = "Kapali"
def __init__(self):
systemSetting.SetInterfaceHandler(self)
self.windowOpenPosition = 0
self.dlgWhisperWithoutTarget = None
self.inputDialog = None
self.tipBoard = None
self.bigBoard = None# ITEM_MALL
self.mallPageDlg = None
# END_OF_ITEM_MALLself.wndWeb = None
self.wndTaskBar = None
self.wndCharacter = None
self.wndInventory = None
self.wndExpandedTaskBar = None
self.wndDragonSoul = None
self.wndDragonSoulRefine = None
self.wndChat = None
self.wndMessenger = None
self.wndMiniMap = None
self.wndGuild = None
self.wndGuildBuilding = Noneself.listGMName = {}
self.wndQuestWindow = {}
self.wndQuestWindowNewKey = 0
self.privateShopAdvertisementBoardDict = {}
self.guildScoreBoardDict = {}
self.equipmentDialogDict = {}
event.SetInterfaceWindow(self)def __del__(self):
systemSetting.DestroyInterfaceHandler()
event.SetInterfaceWindow(None)################################
## Make Windows & Dialogs
def __MakeUICurtain(self):
wndUICurtain = ui.Bar("TOP_MOST")
wndUICurtain.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
wndUICurtain.SetColor(0x77000000)
wndUICurtain.Hide()
self.wndUICurtain = wndUICurtaindef __MakeMessengerWindow(self):
self.wndMessenger = uiMessenger.MessengerWindow()from _weakref import proxy
self.wndMessenger.SetWhisperButtonEvent(lambda n,i=proxy(self):i.OpenWhisperDialog(n))
self.wndMessenger.SetGuildButtonEvent(ui.__mem_func__(self.ToggleGuildWindow))def __MakeGuildWindow(self):
self.wndGuild = uiGuild.GuildWindow()def __MakeChatWindow(self):
wndChat = uiChat.ChatWindow()
wndChat.SetSize(wndChat.CHAT_WINDOW_WIDTH, 0)
wndChat.SetPosition(wndMgr.GetScreenWidth()/2 - wndChat.CHAT_WINDOW_WIDTH/2, wndMgr.GetScreenHeight() - wndChat.EDIT_LINE_HEIGHT - 37)
wndChat.SetHeight(200)
wndChat.Refresh()
wndChat.Show()self.wndChat = wndChat
self.wndChat.BindInterface(self)
self.wndChat.SetSendWhisperEvent(ui.__mem_func__(self.OpenWhisperDialogWithoutTarget))
self.wndChat.SetOpenChatLogEvent(ui.__mem_func__(self.ToggleChatLogWindow))def __MakeTaskBar(self):
wndTaskBar = uiTaskBar.TaskBar()
wndTaskBar.LoadWindow()
self.wndTaskBar = wndTaskBar
self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_CHARACTER, ui.__mem_func__(self.ToggleCharacterWindowStatusPage))
self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_INVENTORY, ui.__mem_func__(self.ToggleInventoryWindow))
self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_MESSENGER, ui.__mem_func__(self.ToggleMessenger))
self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_SYSTEM, ui.__mem_func__(self.ToggleSystemDialog))
self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_VECTORS, ui.__mem_func__(self.Vectors))
if uiTaskBar.TaskBar.IS_EXPANDED:
self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_EXPAND, ui.__mem_func__(self.ToggleExpandedButton))
self.wndExpandedTaskBar = uiTaskBar.ExpandedTaskBar()
self.wndExpandedTaskBar.LoadWindow()
self.wndExpandedTaskBar.SetToggleButtonEvent(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, ui.__mem_func__(self.ToggleDragonSoulWindow))else:
self.wndTaskBar.SetToggleButtonEvent(uiTaskBar.TaskBar.BUTTON_CHAT, ui.__mem_func__(self.ToggleChat))
self.wndEnergyBar = None
import app
if app.ENABLE_ENERGY_SYSTEM:
wndEnergyBar = uiTaskBar.EnergyBar()
wndEnergyBar.LoadWindow()
self.wndEnergyBar = wndEnergyBardef __MakeParty(self):
wndParty = uiParty.PartyWindow()
wndParty.Hide()
self.wndParty = wndPartydef __MakeGameButtonWindow(self):
wndGameButton = uiGameButton.GameButtonWindow()
wndGameButton.SetTop()
wndGameButton.Show()
wndGameButton.SetButtonEvent("STATUS", ui.__mem_func__(self.__OnClickStatusPlusButton))
wndGameButton.SetButtonEvent("SKILL", ui.__mem_func__(self.__OnClickSkillPlusButton))
wndGameButton.SetButtonEvent("QUEST", ui.__mem_func__(self.__OnClickQuestButton))
wndGameButton.SetButtonEvent("HELP", ui.__mem_func__(self.__OnClickHelpButton))
wndGameButton.SetButtonEvent("BUILD", ui.__mem_func__(self.__OnClickBuildButton))self.wndGameButton = wndGameButton
def __IsChatOpen(self):
return TRUE
def __MakeWindows(self):
wndCharacter = uiCharacter.CharacterWindow()
wndInventory = uiInventory.InventoryWindow()
wndInventory.BindInterfaceClass(self)
if app.ENABLE_DRAGON_SOUL_SYSTEM:
wndDragonSoul = uiDragonSoul.DragonSoulWindow()
wndDragonSoulRefine = uiDragonSoul.DragonSoulRefineWindow()
else:
wndDragonSoul = None
wndDragonSoulRefine = None
wndMiniMap = uiMiniMap.MiniMap()
wndSafebox = uiSafebox.SafeboxWindow()
# ITEM_MALL
wndMall = uiSafebox.MallWindow()
self.wndMall = wndMall
# END_OF_ITEM_MALLwndChatLog = uiChat.ChatLogWindow()
wndChatLog.BindInterface(self)
self.wndCharacter = wndCharacter
self.wndInventory = wndInventory
self.wndDragonSoul = wndDragonSoul
self.wndDragonSoulRefine = wndDragonSoulRefine
self.wndMiniMap = wndMiniMap
self.wndSafebox = wndSafebox
self.wndChatLog = wndChatLog
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.SetDragonSoulRefineWindow(self.wndDragonSoulRefine)
self.wndDragonSoulRefine.SetInventoryWindows(self.wndInventory, self.wndDragonSoul)
self.wndInventory.SetDragonSoulRefineWindow(self.wndDragonSoulRefine)def __MakeDialogs(self):
self.dlgExchange = uiExchange.ExchangeDialog()
self.dlgExchange.LoadDialog()
self.dlgExchange.SetCenterPosition()
self.dlgExchange.Hide()self.dlgPointReset = uiPointReset.PointResetDialog()
self.dlgPointReset.LoadDialog()
self.dlgPointReset.Hide()self.dlgShop = uiShop.ShopDialog()
self.dlgShop.LoadDialog()
self.dlgShop.Hide()self.dlgRestart = uiRestart.RestartDialog()
self.dlgRestart.LoadDialog()
self.dlgRestart.Hide()self.dlgSystem = uiSystem.SystemDialog()
self.dlgSystem.LoadDialog()
self.dlgSystem.SetOpenHelpWindowEvent(ui.__mem_func__(self.OpenHelpWindow))self.dlgSystem.Hide()
self.dlgPassword = uiSafebox.PasswordDialog()
self.dlgPassword.Hide()self.hyperlinkItemTooltip = uiToolTip.HyperlinkItemToolTip()
self.hyperlinkItemTooltip.Hide()self.tooltipItem = uiToolTip.ItemToolTip()
self.tooltipItem.Hide()self.tooltipSkill = uiToolTip.SkillToolTip()
self.tooltipSkill.Hide()self.privateShopBuilder = uiPrivateShopBuilder.PrivateShopBuilder()
self.privateShopBuilder.Hide()self.dlgRefineNew = uiRefine.RefineDialogNew()
self.dlgRefineNew.Hide()def __MakeHelpWindow(self):
self.wndHelp = uiHelp.HelpWindow()
self.wndHelp.LoadDialog()
self.wndHelp.SetCloseEvent(ui.__mem_func__(self.CloseHelpWindow))
self.wndHelp.Hide()def __MakeTipBoard(self):
self.tipBoard = uiTip.TipBoard()
self.tipBoard.Hide()self.bigBoard = uiTip.BigBoard()
self.bigBoard.Hide()def __MakeWebWindow(self):
if constInfo.IN_GAME_SHOP_ENABLE:
import uiWeb
self.wndWeb = uiWeb.WebWindow()
self.wndWeb.LoadWindow()
self.wndWeb.Hide()def __MakeCubeWindow(self):
self.wndCube = uiCube.CubeWindow()
self.wndCube.LoadWindow()
self.wndCube.Hide()def __MakeCubeResultWindow(self):
self.wndCubeResult = uiCube.CubeResultWindow()
self.wndCubeResult.LoadWindow()
self.wndCubeResult.Hide()# ACCESSORY_REFINE_ADD_METIN_STONE
def __MakeItemSelectWindow(self):
self.wndItemSelect = uiselectitem.SelectItemWindow()
self.wndItemSelect.Hide()
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONE
def MakeInterface(self):
self.__MakeMessengerWindow()
self.__MakeGuildWindow()
self.__MakeChatWindow()
self.__MakeParty()
self.__MakeWindows()
self.__MakeDialogs()self.__MakeUICurtain()
self.__MakeTaskBar()
self.__MakeGameButtonWindow()
self.__MakeHelpWindow()
self.__MakeTipBoard()
self.__MakeWebWindow()
self.__MakeCubeWindow()
self.__MakeCubeResultWindow()
# ACCESSORY_REFINE_ADD_METIN_STONE
self.__MakeItemSelectWindow()
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONEself.questButtonList = []
self.whisperButtonList = []
self.whisperDialogDict = {}
self.privateShopAdvertisementBoardDict = {}self.wndInventory.SetItemToolTip(self.tooltipItem)
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.SetItemToolTip(self.tooltipItem)
self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem)
self.wndSafebox.SetItemToolTip(self.tooltipItem)
self.wndCube.SetItemToolTip(self.tooltipItem)
self.wndCubeResult.SetItemToolTip(self.tooltipItem)# ITEM_MALL
self.wndMall.SetItemToolTip(self.tooltipItem)
# END_OF_ITEM_MALLself.wndCharacter.SetSkillToolTip(self.tooltipSkill)
self.wndTaskBar.SetItemToolTip(self.tooltipItem)
self.wndTaskBar.SetSkillToolTip(self.tooltipSkill)
self.wndGuild.SetSkillToolTip(self.tooltipSkill)# ACCESSORY_REFINE_ADD_METIN_STONE
self.wndItemSelect.SetItemToolTip(self.tooltipItem)
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONEself.dlgShop.SetItemToolTip(self.tooltipItem)
self.dlgExchange.SetItemToolTip(self.tooltipItem)
self.privateShopBuilder.SetItemToolTip(self.tooltipItem)self.__InitWhisper()
self.DRAGON_SOUL_IS_QUALIFIED = FALSEdef MakeHyperlinkTooltip(self, hyperlink):
tokens = hyperlink.split(":")
if tokens and len(tokens):
type = tokens[0]
if "item" == type:
self.hyperlinkItemTooltip.SetHyperlinkItem(tokens)## Make Windows & Dialogs
################################def Close(self):
if self.dlgWhisperWithoutTarget:
self.dlgWhisperWithoutTarget.Destroy()
del self.dlgWhisperWithoutTargetif uiQuest.QuestDialog.__dict__.has_key("QuestCurtain"):
uiQuest.QuestDialog.QuestCurtain.Close()if self.wndQuestWindow:
for key, eachQuestWindow in self.wndQuestWindow.items():
eachQuestWindow.nextCurtainMode = -1
eachQuestWindow.CloseSelf()
eachQuestWindow = None
self.wndQuestWindow = {}if self.wndChat:
self.wndChat.Destroy()if self.wndTaskBar:
self.wndTaskBar.Destroy()
if self.wndExpandedTaskBar:
self.wndExpandedTaskBar.Destroy()
if self.wndEnergyBar:
self.wndEnergyBar.Destroy()if self.wndCharacter:
self.wndCharacter.Destroy()if self.wndInventory:
self.wndInventory.Destroy()
if self.wndDragonSoul:
self.wndDragonSoul.Destroy()if self.wndDragonSoulRefine:
self.wndDragonSoulRefine.Destroy()if self.dlgExchange:
self.dlgExchange.Destroy()if self.dlgPointReset:
self.dlgPointReset.Destroy()if self.dlgShop:
self.dlgShop.Destroy()if self.dlgRestart:
self.dlgRestart.Destroy()if self.dlgSystem:
self.dlgSystem.Destroy()if self.dlgPassword:
self.dlgPassword.Destroy()if self.wndMiniMap:
self.wndMiniMap.Destroy()if self.wndSafebox:
self.wndSafebox.Destroy()if self.wndWeb:
self.wndWeb.Destroy()
self.wndWeb = Noneif self.wndMall:
self.wndMall.Destroy()if self.wndParty:
self.wndParty.Destroy()if self.wndHelp:
self.wndHelp.Destroy()if self.wndCube:
self.wndCube.Destroy()
if self.wndCubeResult:
self.wndCubeResult.Destroy()if self.wndMessenger:
self.wndMessenger.Destroy()if self.wndGuild:
self.wndGuild.Destroy()if self.privateShopBuilder:
self.privateShopBuilder.Destroy()if self.dlgRefineNew:
self.dlgRefineNew.Destroy()if self.wndGuildBuilding:
self.wndGuildBuilding.Destroy()if self.wndGameButton:
self.wndGameButton.Destroy()# ITEM_MALL
if self.mallPageDlg:
self.mallPageDlg.Destroy()
# END_OF_ITEM_MALL# ACCESSORY_REFINE_ADD_METIN_STONE
if self.wndItemSelect:
self.wndItemSelect.Destroy()
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONEself.wndChatLog.Destroy()
for btn in self.questButtonList:
btn.SetEvent(0)
for btn in self.whisperButtonList:
btn.SetEvent(0)
for dlg in self.whisperDialogDict.itervalues():
dlg.Destroy()
for brd in self.guildScoreBoardDict.itervalues():
brd.Destroy()
for dlg in self.equipmentDialogDict.itervalues():
dlg.Destroy()# ITEM_MALL
del self.mallPageDlg
# END_OF_ITEM_MALLdel self.wndGuild
del self.wndMessenger
del self.wndUICurtain
del self.wndChat
del self.wndTaskBar
if self.wndExpandedTaskBar:
del self.wndExpandedTaskBar
del self.wndEnergyBar
del self.wndCharacter
del self.wndInventory
if self.wndDragonSoul:
del self.wndDragonSoul
if self.wndDragonSoulRefine:
del self.wndDragonSoulRefine
del self.dlgExchange
del self.dlgPointReset
del self.dlgShop
del self.dlgRestart
del self.dlgSystem
del self.dlgPassword
del self.hyperlinkItemTooltip
del self.tooltipItem
del self.tooltipSkill
del self.wndMiniMap
del self.wndSafebox
del self.wndMall
del self.wndParty
del self.wndHelp
del self.wndCube
del self.wndCubeResult
del self.privateShopBuilder
del self.inputDialog
del self.wndChatLog
del self.dlgRefineNew
del self.wndGuildBuilding
del self.wndGameButton
del self.tipBoard
del self.bigBoard
del self.wndItemSelectself.questButtonList = []
self.whisperButtonList = []
self.whisperDialogDict = {}
self.privateShopAdvertisementBoardDict = {}
self.guildScoreBoardDict = {}
self.equipmentDialogDict = {}uiChat.DestroyChatInputSetWindow()
## Skill
def OnUseSkill(self, slotIndex, coolTime):
self.wndCharacter.OnUseSkill(slotIndex, coolTime)
self.wndTaskBar.OnUseSkill(slotIndex, coolTime)
self.wndGuild.OnUseSkill(slotIndex, coolTime)def OnActivateSkill(self, slotIndex):
self.wndCharacter.OnActivateSkill(slotIndex)
self.wndTaskBar.OnActivateSkill(slotIndex)def OnDeactivateSkill(self, slotIndex):
self.wndCharacter.OnDeactivateSkill(slotIndex)
self.wndTaskBar.OnDeactivateSkill(slotIndex)def OnChangeCurrentSkill(self, skillSlotNumber):
self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber)def SelectMouseButtonEvent(self, dir, event):
self.wndTaskBar.SelectMouseButtonEvent(dir, event)## Refresh
def RefreshAlignment(self):
self.wndCharacter.RefreshAlignment()def RefreshStatus(self):
self.wndTaskBar.RefreshStatus()
self.wndCharacter.RefreshStatus()
self.wndInventory.RefreshStatus()
if self.wndEnergyBar:
self.wndEnergyBar.RefreshStatus()
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.RefreshStatus()def RefreshStamina(self):
self.wndTaskBar.RefreshStamina()def RefreshSkill(self):
self.wndCharacter.RefreshSkill()
self.wndTaskBar.RefreshSkill()def RefreshInventory(self):
self.wndTaskBar.RefreshQuickSlot()
self.wndInventory.RefreshItemSlot()
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.RefreshItemSlot()def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh
self.wndCharacter.RefreshCharacter()
self.wndTaskBar.RefreshQuickSlot()def RefreshQuest(self):
self.wndCharacter.RefreshQuest()def RefreshSafebox(self):
self.wndSafebox.RefreshSafebox()# ITEM_MALL
def RefreshMall(self):
self.wndMall.RefreshMall()def OpenItemMall(self):
if not self.mallPageDlg:
self.mallPageDlg = uiShop.MallPageDialog()self.mallPageDlg.Open()
# END_OF_ITEM_MALLdef RefreshMessenger(self):
self.wndMessenger.RefreshMessenger()def RefreshGuildInfoPage(self):
self.wndGuild.RefreshGuildInfoPage()def RefreshGuildBoardPage(self):
self.wndGuild.RefreshGuildBoardPage()def RefreshGuildMemberPage(self):
self.wndGuild.RefreshGuildMemberPage()def RefreshGuildMemberPageGradeComboBox(self):
self.wndGuild.RefreshGuildMemberPageGradeComboBox()def RefreshGuildSkillPage(self):
self.wndGuild.RefreshGuildSkillPage()def RefreshGuildGradePage(self):
self.wndGuild.RefreshGuildGradePage()def DeleteGuild(self):
self.wndMessenger.ClearGuildMember()
self.wndGuild.DeleteGuild()def RefreshMobile(self):
self.dlgSystem.RefreshMobile()def OnMobileAuthority(self):
self.dlgSystem.OnMobileAuthority()def OnBlockMode(self, mode):
self.dlgSystem.OnBlockMode(mode)## Calling Functions
# PointReset
def OpenPointResetDialog(self):
self.dlgPointReset.Show()
self.dlgPointReset.SetTop()def ClosePointResetDialog(self):
self.dlgPointReset.Close()# Shop
def OpenShopDialog(self, vid):
self.wndInventory.Show()
self.wndInventory.SetTop()
self.dlgShop.Open(vid)
self.dlgShop.SetTop()def CloseShopDialog(self):
self.dlgShop.Close()def RefreshShopDialog(self):
self.dlgShop.Refresh()## Quest
def OpenCharacterWindowQuestPage(self):
self.wndCharacter.Show()
self.wndCharacter.SetState("QUEST")def OpenQuestWindow(self, skin, idx):
wnds = ()
q = uiQuest.QuestDialog(skin, idx)
q.SetWindowName("QuestWindow" + str(idx))
q.Show()
if skin:
q.Lock()
wnds = self.__HideWindows()# UNKNOWN_UPDATE
q.AddOnDoneEvent(lambda tmp_self, args=wnds: self.__ShowWindows(args))
# END_OF_UNKNOWN_UPDATEif skin:
q.AddOnCloseEvent(q.Unlock)
q.AddOnCloseEvent(lambda key = self.wndQuestWindowNewKey:ui.__mem_func__(self.RemoveQuestDialog)(key))
self.wndQuestWindow[self.wndQuestWindowNewKey] = qself.wndQuestWindowNewKey = self.wndQuestWindowNewKey + 1
# END_OF_UNKNOWN_UPDATE
def RemoveQuestDialog(self, key):
del self.wndQuestWindow[key]## Exchange
def StartExchange(self):
self.dlgExchange.OpenDialog()
self.dlgExchange.Refresh()def EndExchange(self):
self.dlgExchange.CloseDialog()def RefreshExchange(self):
self.dlgExchange.Refresh()## Party
def AddPartyMember(self, pid, name):
self.wndParty.AddPartyMember(pid, name)self.__ArrangeQuestButton()
def UpdatePartyMemberInfo(self, pid):
self.wndParty.UpdatePartyMemberInfo(pid)def RemovePartyMember(self, pid):
self.wndParty.RemovePartyMember(pid)##!! 20061026.levites.퀘스트_위치_보정
self.__ArrangeQuestButton()def LinkPartyMember(self, pid, vid):
self.wndParty.LinkPartyMember(pid, vid)def UnlinkPartyMember(self, pid):
self.wndParty.UnlinkPartyMember(pid)def UnlinkAllPartyMember(self):
self.wndParty.UnlinkAllPartyMember()def ExitParty(self):
self.wndParty.ExitParty()##!! 20061026.levites.퀘스트_위치_보정
self.__ArrangeQuestButton()def PartyHealReady(self):
self.wndParty.PartyHealReady()def ChangePartyParameter(self, distributionMode):
self.wndParty.ChangePartyParameter(distributionMode)## Safebox
def AskSafeboxPassword(self):
if self.wndSafebox.IsShow():
return# SAFEBOX_PASSWORD
self.dlgPassword.SetTitle(localeInfo.PASSWORD_TITLE)
self.dlgPassword.SetSendMessage("/safebox_password ")
# END_OF_SAFEBOX_PASSWORDself.dlgPassword.ShowDialog()
def OpenSafeboxWindow(self, size):
self.dlgPassword.CloseDialog()
self.wndSafebox.ShowWindow(size)def RefreshSafeboxMoney(self):
self.wndSafebox.RefreshSafeboxMoney()def CommandCloseSafebox(self):
self.wndSafebox.CommandCloseSafebox()# ITEM_MALL
def AskMallPassword(self):
if self.wndMall.IsShow():
return
self.dlgPassword.SetTitle(localeInfo.MALL_PASSWORD_TITLE)
self.dlgPassword.SetSendMessage("/mall_password ")
self.dlgPassword.ShowDialog()def OpenMallWindow(self, size):
self.dlgPassword.CloseDialog()
self.wndMall.ShowWindow(size)def CommandCloseMall(self):
self.wndMall.CommandCloseMall()
# END_OF_ITEM_MALL## Guild
def OnStartGuildWar(self, guildSelf, guildOpp):
self.wndGuild.OnStartGuildWar(guildSelf, guildOpp)guildWarScoreBoard = uiGuild.GuildWarScoreBoard()
guildWarScoreBoard.Open(guildSelf, guildOpp)
guildWarScoreBoard.Show()
self.guildScoreBoardDict[uiGuild.GetGVGKey(guildSelf, guildOpp)] = guildWarScoreBoarddef OnEndGuildWar(self, guildSelf, guildOpp):
self.wndGuild.OnEndGuildWar(guildSelf, guildOpp)key = uiGuild.GetGVGKey(guildSelf, guildOpp)
if not self.guildScoreBoardDict.has_key(key):
returnself.guildScoreBoardDict[key].Destroy()
del self.guildScoreBoardDict[key]# GUILDWAR_MEMBER_COUNT
def UpdateMemberCount(self, gulidID1, memberCount1, guildID2, memberCount2):
key = uiGuild.GetGVGKey(gulidID1, guildID2)if not self.guildScoreBoardDict.has_key(key):
returnself.guildScoreBoardDict[key].UpdateMemberCount(gulidID1, memberCount1, guildID2, memberCount2)
# END_OF_GUILDWAR_MEMBER_COUNTdef OnRecvGuildWarPoint(self, gainGuildID, opponentGuildID, point):
key = uiGuild.GetGVGKey(gainGuildID, opponentGuildID)
if not self.guildScoreBoardDict.has_key(key):
returnguildBoard = self.guildScoreBoardDict[key]
guildBoard.SetScore(gainGuildID, opponentGuildID, point)## PK Mode
def OnChangePKMode(self):
self.wndCharacter.RefreshAlignment()
self.dlgSystem.OnChangePKMode()## Refine
def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type):
self.dlgRefineNew.Open(targetItemPos, nextGradeItemVnum, cost, prob, type)def AppendMaterialToRefineDialog(self, vnum, count):
self.dlgRefineNew.AppendMaterial(vnum, count)## Show & Hide
def ShowDefaultWindows(self):
self.wndTaskBar.Show()
self.wndMiniMap.Show()
self.wndMiniMap.ShowMiniMap()
if self.wndEnergyBar:
self.wndEnergyBar.Show()def ShowAllWindows(self):
self.wndTaskBar.Show()
self.wndCharacter.Show()
self.wndInventory.Show()
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.Show()
self.wndDragonSoulRefine.Show()
self.wndChat.Show()
self.wndMiniMap.Show()
if self.wndEnergyBar:
self.wndEnergyBar.Show()
if self.wndExpandedTaskBar:
self.wndExpandedTaskBar.Show()
self.wndExpandedTaskBar.SetTop()def HideAllWindows(self):
if self.wndTaskBar:
self.wndTaskBar.Hide()
if self.wndEnergyBar:
self.wndEnergyBar.Hide()if self.wndCharacter:
self.wndCharacter.Hide()if self.wndInventory:
self.wndInventory.Hide()
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.Hide()
self.wndDragonSoulRefine.Hide()if self.wndChat:
self.wndChat.Hide()if self.wndMiniMap:
self.wndMiniMap.Hide()if self.wndMessenger:
self.wndMessenger.Hide()if self.wndGuild:
self.wndGuild.Hide()
if self.wndExpandedTaskBar:
self.wndExpandedTaskBar.Hide()
def ShowMouseImage(self):
self.wndTaskBar.ShowMouseImage()def HideMouseImage(self):
self.wndTaskBar.HideMouseImage()def ToggleChat(self):
if TRUE == self.wndChat.IsEditMode():
self.wndChat.CloseChat()
else:
# 웹페이지가 열렸을때는 채팅 입력이 안됨
if self.wndWeb and self.wndWeb.IsShow():
pass
else:
self.wndChat.OpenChat()def IsOpenChat(self):
return self.wndChat.IsEditMode()def SetChatFocus(self):
self.wndChat.SetChatFocus()def OpenRestartDialog(self):
self.dlgRestart.OpenDialog()
self.dlgRestart.SetTop()def CloseRestartDialog(self):
self.dlgRestart.Close()def ToggleSystemDialog(self):
if FALSE == self.dlgSystem.IsShow():
self.dlgSystem.OpenDialog()
self.dlgSystem.SetTop()
else:
self.dlgSystem.Close()def OpenSystemDialog(self):
self.dlgSystem.OpenDialog()
self.dlgSystem.SetTop()def ToggleMessenger(self):
if self.wndMessenger.IsShow():
self.wndMessenger.Hide()
else:
self.wndMessenger.SetTop()
self.wndMessenger.Show()def ToggleMiniMap(self):
if app.IsPressed(app.DIK_LSHIFT) or app.IsPressed(app.DIK_RSHIFT):
if FALSE == self.wndMiniMap.isShowMiniMap():
self.wndMiniMap.ShowMiniMap()
self.wndMiniMap.SetTop()
else:
self.wndMiniMap.HideMiniMap()else:
self.wndMiniMap.ToggleAtlasWindow()def PressMKey(self):
if app.IsPressed(app.DIK_LALT) or app.IsPressed(app.DIK_RALT):
self.ToggleMessenger()else:
self.ToggleMiniMap()def SetMapName(self, mapName):
self.wndMiniMap.SetMapName(mapName)def MiniMapScaleUp(self):
self.wndMiniMap.ScaleUp()def MiniMapScaleDown(self):
self.wndMiniMap.ScaleDown()def ToggleCharacterWindow(self, state):
if FALSE == player.IsObserverMode():
if FALSE == self.wndCharacter.IsShow():
self.OpenCharacterWindowWithState(state)
else:
if state == self.wndCharacter.GetState():
self.wndCharacter.OverOutItem()
self.wndCharacter.Hide()
else:
self.wndCharacter.SetState(state)def OpenCharacterWindowWithState(self, state):
if FALSE == player.IsObserverMode():
self.wndCharacter.SetState(state)
self.wndCharacter.Show()
self.wndCharacter.SetTop()def ToggleCharacterWindowStatusPage(self):
self.ToggleCharacterWindow("STATUS")def Vectors(self):
if 0==constInfo.VectorsEfsunTaskbar:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "efsunbot.pyc")def ToggleInventoryWindow(self):
if self.State == "Kapali":
chat.AppendChat(chat.CHAT_TYPE_INFO, "Envanteri a?bilmek icin " + str(int(int(self.LastContactTimeStamp) + self.WaitTime) - int(app.GetTime())) + " saniye beklemelisin.")
return
else:
if FALSE == player.IsObserverMode():
if FALSE == self.wndInventory.IsShow():
self.wndInventory.Show()
self.wndInventory.SetTop()
else:
self.wndInventory.OverOutItem()
self.wndInventory.Close()
def ToggleExpandedButton(self):
if FALSE == player.IsObserverMode():
if FALSE == self.wndExpandedTaskBar.IsShow():
self.wndExpandedTaskBar.Show()
self.wndExpandedTaskBar.SetTop()
else:
self.wndExpandedTaskBar.Close()
# 용혼석
def DragonSoulActivate(self, deck):
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)def DragonSoulDeactivate(self):
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.DeactivateDragonSoul()
def Highligt_Item(self, inven_type, inven_pos):
if player.DRAGON_SOUL_INVENTORY == inven_type:
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.HighlightSlot(inven_pos)
def DragonSoulGiveQuilification(self):
self.DRAGON_SOUL_IS_QUALIFIED = TRUE
self.wndExpandedTaskBar.SetToolTipText(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, uiScriptLocale.TASKBAR_DRAGON_SOUL)def ToggleDragonSoulWindow(self):
if FALSE == player.IsObserverMode():
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if FALSE == self.wndDragonSoul.IsShow():
if self.DRAGON_SOUL_IS_QUALIFIED:
self.wndDragonSoul.Show()
else:
try:
self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED)
self.wndPopupDialog.Open()
except:
self.wndPopupDialog = uiCommon.PopupDialog()
self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED)
self.wndPopupDialog.Open()
else:
self.wndDragonSoul.Close()
def ToggleDragonSoulWindowWithNoInfo(self):
if FALSE == player.IsObserverMode():
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if FALSE == self.wndDragonSoul.IsShow():
if self.DRAGON_SOUL_IS_QUALIFIED:
self.wndDragonSoul.Show()
else:
self.wndDragonSoul.Close()
def FailDragonSoulRefine(self, reason, inven_type, inven_pos):
if FALSE == player.IsObserverMode():
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if TRUE == self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.RefineFail(reason, inven_type, inven_pos)
def SucceedDragonSoulRefine(self, inven_type, inven_pos):
if FALSE == player.IsObserverMode():
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if TRUE == self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.RefineSucceed(inven_type, inven_pos)
def OpenDragonSoulRefineWindow(self):
if FALSE == player.IsObserverMode():
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if FALSE == self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.Show()
if None != self.wndDragonSoul:
if FALSE == self.wndDragonSoul.IsShow():
self.wndDragonSoul.Show()def CloseDragonSoulRefineWindow(self):
if FALSE == player.IsObserverMode():
if app.ENABLE_DRAGON_SOUL_SYSTEM:
if TRUE == self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.Close()# 용혼석 끝
def ToggleGuildWindow(self):
if not self.wndGuild.IsShow():
if self.wndGuild.CanOpen():
self.wndGuild.Open()
else:
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GUILD_YOU_DO_NOT_JOIN)
else:
self.wndGuild.OverOutItem()
self.wndGuild.Hide()def ToggleChatLogWindow(self):
if self.wndChatLog.IsShow():
self.wndChatLog.Hide()
else:
self.wndChatLog.Show()def CheckGameButton(self):
if self.wndGameButton:
self.wndGameButton.CheckGameButton()def __OnClickStatusPlusButton(self):
self.ToggleCharacterWindow("STATUS")def __OnClickSkillPlusButton(self):
self.ToggleCharacterWindow("SKILL")def __OnClickQuestButton(self):
self.ToggleCharacterWindow("QUEST")def __OnClickHelpButton(self):
player.SetPlayTime(1)
self.CheckGameButton()
self.OpenHelpWindow()def __OnClickBuildButton(self):
self.BUILD_OpenWindow()def OpenHelpWindow(self):
self.wndUICurtain.Show()
self.wndHelp.Open()def CloseHelpWindow(self):
self.wndUICurtain.Hide()
self.wndHelp.Close()def OpenWebWindow(self, url):
self.wndWeb.Open(url)# 웹페이지를 열면 채팅을 닫는다
self.wndChat.CloseChat()# show GIFT
def ShowGift(self):
self.wndTaskBar.ShowGift()
def CloseWbWindow(self):
self.wndWeb.Close()def OpenCubeWindow(self):
self.wndCube.Open()if FALSE == self.wndInventory.IsShow():
self.wndInventory.Show()def UpdateCubeInfo(self, gold, itemVnum, count):
self.wndCube.UpdateInfo(gold, itemVnum, count)def CloseCubeWindow(self):
self.wndCube.Close()def FailedCubeWork(self):
self.wndCube.Refresh()def SucceedCubeWork(self, itemVnum, count):
self.wndCube.Clear()
print "큐브 제작 성공! [%d:%d]" % (itemVnum, count)if 0: # 결과 메시지 출력은 생략 한다
self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition())
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
self.wndCubeResult.Open()
self.wndCubeResult.SetTop()def __HideWindows(self):
hideWindows = self.wndTaskBar,\
self.wndCharacter,\
self.wndInventory,\
self.wndMiniMap,\
self.wndGuild,\
self.wndMessenger,\
self.wndChat,\
self.wndParty,\
self.wndGameButton,if self.wndEnergyBar:
hideWindows += self.wndEnergyBar,
if self.wndExpandedTaskBar:
hideWindows += self.wndExpandedTaskBar,
if app.ENABLE_DRAGON_SOUL_SYSTEM:
hideWindows += self.wndDragonSoul,\
self.wndDragonSoulRefine,hideWindows = filter(lambda x:x.IsShow(), hideWindows)
map(lambda x:x.Hide(), hideWindows)
import sysself.HideAllQuestButton()
self.HideAllWhisperButton()if self.wndChat.IsEditMode():
self.wndChat.CloseChat()return hideWindows
def __ShowWindows(self, wnds):
import sys
map(lambda x:x.Show(), wnds)
global IsQBHide
if not IsQBHide:
self.ShowAllQuestButton()
else:
self.HideAllQuestButton()self.ShowAllWhisperButton()
def BINARY_OpenAtlasWindow(self):
if self.wndMiniMap:
self.wndMiniMap.ShowAtlas()def BINARY_SetObserverMode(self, flag):
self.wndGameButton.SetObserverMode(flag)# ACCESSORY_REFINE_ADD_METIN_STONE
def BINARY_OpenSelectItemWindow(self):
self.wndItemSelect.Open()
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONE#####################################################################################
### Private Shop ###def OpenPrivateShopInputNameDialog(self):
#if player.IsInSafeArea():
# chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CANNOT_OPEN_PRIVATE_SHOP_IN_SAFE_AREA)
# returninputDialog = uiCommon.InputDialog()
inputDialog.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_NAME_DIALOG_TITLE)
inputDialog.SetMaxLength(32)
inputDialog.SetAcceptEvent(ui.__mem_func__(self.OpenPrivateShopBuilder))
inputDialog.SetCancelEvent(ui.__mem_func__(self.ClosePrivateShopInputNameDialog))
inputDialog.Open()
self.inputDialog = inputDialogdef ClosePrivateShopInputNameDialog(self):
self.inputDialog = None
return TRUEdef OpenPrivateShopBuilder(self):
if not self.inputDialog:
return TRUEif not len(self.inputDialog.GetText()):
return TRUEself.privateShopBuilder.Open(self.inputDialog.GetText())
self.ClosePrivateShopInputNameDialog()
return TRUEdef AppearPrivateShop(self, vid, text):
board = uiPrivateShopBuilder.PrivateShopAdvertisementBoard()
board.Open(vid, text)self.privateShopAdvertisementBoardDict[vid] = board
def DisappearPrivateShop(self, vid):
if not self.privateShopAdvertisementBoardDict.has_key(vid):
returndel self.privateShopAdvertisementBoardDict[vid]
uiPrivateShopBuilder.DeleteADBoard(vid)#####################################################################################
### Equipment ###def OpenEquipmentDialog(self, vid):
dlg = uiEquipmentDialog.EquipmentDialog()
dlg.SetItemToolTip(self.tooltipItem)
dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog))
dlg.Open(vid)self.equipmentDialogDict[vid] = dlg
def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count):
if not vid in self.equipmentDialogDict:
return
self.equipmentDialogDict[vid].SetEquipmentDialogItem(slotIndex, vnum, count)def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value):
if not vid in self.equipmentDialogDict:
return
self.equipmentDialogDict[vid].SetEquipmentDialogSocket(slotIndex, socketIndex, value)def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value):
if not vid in self.equipmentDialogDict:
return
self.equipmentDialogDict[vid].SetEquipmentDialogAttr(slotIndex, attrIndex, type, value)def CloseEquipmentDialog(self, vid):
if not vid in self.equipmentDialogDict:
return
del self.equipmentDialogDict[vid]#####################################################################################
#####################################################################################
### Quest ###
def BINARY_ClearQuest(self, index):
btn = self.__FindQuestButton(index)
if 0 != btn:
self.__DestroyQuestButton(btn)
def RecvQuest(self, index, name):
# QUEST_LETTER_IMAGE
self.BINARY_RecvQuest(index, name, "file", localeInfo.GetLetterImageName())
# END_OF_QUEST_LETTER_IMAGEdef BINARY_RecvQuest(self, index, name, iconType, iconName):
btn = self.__FindQuestButton(index)
if 0 != btn:
self.__DestroyQuestButton(btn)btn = uiWhisper.WhisperButton()
# QUEST_LETTER_IMAGE
##!! 20061026.levites.퀘스트_이미지_교체
import item
if "item"==iconType:
item.SelectItem(int(iconName))
buttonImageFileName=item.GetIconImageFileName()
else:
buttonImageFileName=iconNameif localeInfo.IsEUROPE():
if "highlight" == iconType:
btn.SetUpVisual("locale/ymir_ui/highlighted_quest.tga")
btn.SetOverVisual("locale/ymir_ui/highlighted_quest_r.tga")
btn.SetDownVisual("locale/ymir_ui/highlighted_quest_r.tga")
else:
btn.SetUpVisual(localeInfo.GetLetterCloseImageName())
btn.SetOverVisual(localeInfo.GetLetterOpenImageName())
btn.SetDownVisual(localeInfo.GetLetterOpenImageName())
else:
btn.SetUpVisual(buttonImageFileName)
btn.SetOverVisual(buttonImageFileName)
btn.SetDownVisual(buttonImageFileName)
btn.Flash()
# END_OF_QUEST_LETTER_IMAGEif localeInfo.IsARABIC():
btn.SetToolTipText(name, 0, 35)
btn.ToolTipText.SetHorizontalAlignCenter()
else:
btn.SetToolTipText(name, -20, 35)
btn.ToolTipText.SetHorizontalAlignLeft()
btn.SetEvent(ui.__mem_func__(self.__StartQuest), btn)
btn.Show()btn.index = index
btn.name = nameself.questButtonList.insert(0, btn)
self.__ArrangeQuestButton()#chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND)
def __ArrangeQuestButton(self):
screenWidth = wndMgr.GetScreenWidth()
screenHeight = wndMgr.GetScreenHeight()##!! 20061026.levites.퀘스트_위치_보정
if self.wndParty.IsShow():
xPos = 100 + 30
else:
xPos = 20if localeInfo.IsARABIC():
xPos = xPos + 15yPos = 170 * screenHeight / 600
yCount = (screenHeight - 330) / 63count = 0
for btn in self.questButtonList:btn.SetPosition(xPos + (int(count/yCount) * 100), yPos + (count%yCount * 63))
count += 1
global IsQBHide
if IsQBHide:
btn.Hide()
else:
btn.Show()def __StartQuest(self, btn):
event.QuestButtonClick(btn.index)
self.__DestroyQuestButton(btn)def __FindQuestButton(self, index):
for btn in self.questButtonList:
if btn.index == index:
return btnreturn 0
def __DestroyQuestButton(self, btn):
btn.SetEvent(0)
self.questButtonList.remove(btn)
self.__ArrangeQuestButton()def HideAllQuestButton(self):
for btn in self.questButtonList:
btn.Hide()def ShowAllQuestButton(self):
for btn in self.questButtonList:
btn.Show()
##########################################################################################################################################################################
### Whisper ###def __InitWhisper(self):
chat.InitWhisper(self)## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수
## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다.
def OpenWhisperDialogWithoutTarget(self):
if not self.dlgWhisperWithoutTarget:
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
dlgWhisper.BindInterface(self)
dlgWhisper.LoadDialog()
dlgWhisper.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)
dlgWhisper.SetPosition(self.windowOpenPosition*30,self.windowOpenPosition*30)
dlgWhisper.Show()
self.dlgWhisperWithoutTarget = dlgWhisperself.windowOpenPosition = (self.windowOpenPosition+1) % 5
else:
self.dlgWhisperWithoutTarget.SetTop()
self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)## 이름 없는 대화창에서 이름을 결정했을때 WhisperDialogDict에 창을 넣어주는 함수
def RegisterTemporaryWhisperDialog(self, name):
if not self.dlgWhisperWithoutTarget:
returnbtn = self.__FindWhisperButton(name)
if 0 != btn:
self.__DestroyWhisperButton(btn)elif self.whisperDialogDict.has_key(name):
oldDialog = self.whisperDialogDict[name]
oldDialog.Destroy()
del self.whisperDialogDict[name]self.whisperDialogDict[name] = self.dlgWhisperWithoutTarget
self.dlgWhisperWithoutTarget.OpenWithTarget(name)
self.dlgWhisperWithoutTarget = None
self.__CheckGameMaster(name)## 캐릭터 메뉴의 1:1 대화 하기를 눌렀을때 이름을 가지고 바로 창을 여는 함수
def OpenWhisperDialog(self, name):
if not self.whisperDialogDict.has_key(name):
dlg = self.__MakeWhisperDialog(name)
dlg.OpenWithTarget(name)
dlg.chatLine.SetFocus()
dlg.Show()self.__CheckGameMaster(name)
btn = self.__FindWhisperButton(name)
if 0 != btn:
self.__DestroyWhisperButton(btn)## 다른 캐릭터로부터 메세지를 받았을때 일단 버튼만 띄워 두는 함수
def RecvWhisper(self, name):
if not self.whisperDialogDict.has_key(name):
btn = self.__FindWhisperButton(name)
if 0 == btn:
btn = self.__MakeWhisperButton(name)
btn.Flash()chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.RECEIVE_MESSAGE % (name))
else:
btn.Flash()
elif self.IsGameMasterName(name):
dlg = self.whisperDialogDict[name]
dlg.SetGameMasterLook()def MakeWhisperButton(self, name):
self.__MakeWhisperButton(name)## 버튼을 눌렀을때 창을 여는 함수
def ShowWhisperDialog(self, btn):
try:
self.__MakeWhisperDialog(btn.name)
dlgWhisper = self.whisperDialogDict[btn.name]
dlgWhisper.OpenWithTarget(btn.name)
dlgWhisper.Show()
self.__CheckGameMaster(btn.name)
except:
import dbg
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")## 버튼 초기화
self.__DestroyWhisperButton(btn)## WhisperDialog 창에서 최소화 명령을 수행했을때 호출되는 함수
## 창을 최소화 합니다.
def MinimizeWhisperDialog(self, name):if 0 != name:
self.__MakeWhisperButton(name)self.CloseWhisperDialog(name)
## WhisperDialog 창에서 닫기 명령을 수행했을때 호출되는 함수
## 창을 지웁니다.
def CloseWhisperDialog(self, name):if 0 == name:
if self.dlgWhisperWithoutTarget:
self.dlgWhisperWithoutTarget.Destroy()
self.dlgWhisperWithoutTarget = Nonereturn
try:
dlgWhisper = self.whisperDialogDict[name]
dlgWhisper.Destroy()
del self.whisperDialogDict[name]
except:
import dbg
dbg.TraceError("interface.CloseWhisperDialog - Failed to find key")## 버튼의 개수가 바뀌었을때 버튼을 재정렬 하는 함수
def __ArrangeWhisperButton(self):screenWidth = wndMgr.GetScreenWidth()
screenHeight = wndMgr.GetScreenHeight()xPos = screenWidth - 70
yPos = 170 * screenHeight / 600
yCount = (screenHeight - 330) / 63
#yCount = (screenHeight - 285) / 63count = 0
for button in self.whisperButtonList:button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
count += 1## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수
## 버튼은 딕셔너리로 하지 않는 것은 정렬 되어 버려 순서가 유지 되지 않으며
## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다.
def __FindWhisperButton(self, name):
for button in self.whisperButtonList:
if button.name == name:
return buttonreturn 0
## 창을 만듭니다.
def __MakeWhisperDialog(self, name):
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
dlgWhisper.BindInterface(self)
dlgWhisper.LoadDialog()
dlgWhisper.SetPosition(self.windowOpenPosition*30,self.windowOpenPosition*30)
self.whisperDialogDict[name] = dlgWhisperself.windowOpenPosition = (self.windowOpenPosition+1) % 5
return dlgWhisper
## 버튼을 만듭니다.
def __MakeWhisperButton(self, name):
whisperButton = uiWhisper.WhisperButton()
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
whisperButton.SetOverVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
whisperButton.SetDownVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
if self.IsGameMasterName(name):
whisperButton.SetToolTipTextWithColor(name, 0xffffa200)
else:
whisperButton.SetToolTipText(name)
whisperButton.ToolTipText.SetHorizontalAlignCenter()
whisperButton.SetEvent(ui.__mem_func__(self.ShowWhisperDialog), whisperButton)
whisperButton.Show()
whisperButton.name = nameself.whisperButtonList.insert(0, whisperButton)
self.__ArrangeWhisperButton()return whisperButton
def __DestroyWhisperButton(self, button):
button.SetEvent(0)
self.whisperButtonList.remove(button)
self.__ArrangeWhisperButton()def HideAllWhisperButton(self):
for btn in self.whisperButtonList:
btn.Hide()def ShowAllWhisperButton(self):
for btn in self.whisperButtonList:
btn.Show()def __CheckGameMaster(self, name):
if not self.listGMName.has_key(name):
return
if self.whisperDialogDict.has_key(name):
dlg = self.whisperDialogDict[name]
dlg.SetGameMasterLook()def RegisterGameMasterName(self, name):
if self.listGMName.has_key(name):
return
self.listGMName[name] = "GM"def IsGameMasterName(self, name):
if self.listGMName.has_key(name):
return TRUE
else:
return FALSE#####################################################################################
#####################################################################################
### Guild Building ###def BUILD_OpenWindow(self):
self.wndGuildBuilding = uiGuild.BuildGuildBuildingWindow()
self.wndGuildBuilding.Open()
self.wndGuildBuilding.wnds = self.__HideWindows()
self.wndGuildBuilding.SetCloseEvent(ui.__mem_func__(self.BUILD_CloseWindow))def BUILD_CloseWindow(self):
self.__ShowWindows(self.wndGuildBuilding.wnds)
self.wndGuildBuilding = Nonedef BUILD_OnUpdate(self):
if not self.wndGuildBuilding:
returnif self.wndGuildBuilding.IsPositioningMode():
import background
x, y, z = background.GetPickingPoint()
self.wndGuildBuilding.SetBuildingPosition(x, y, z)def BUILD_OnMouseLeftButtonDown(self):
if not self.wndGuildBuilding:
return# GUILD_BUILDING
if self.wndGuildBuilding.IsPositioningMode():
self.wndGuildBuilding.SettleCurrentPosition()
return TRUE
elif self.wndGuildBuilding.IsPreviewMode():
pass
else:
return TRUE
# END_OF_GUILD_BUILDING
return FALSEdef BUILD_OnMouseLeftButtonUp(self):
if not self.wndGuildBuilding:
returnif not self.wndGuildBuilding.IsPreviewMode():
return TRUEreturn FALSE
def BULID_EnterGuildArea(self, areaID):
# GUILD_BUILDING
mainCharacterName = player.GetMainCharacterName()
masterName = guild.GetGuildMasterName()if mainCharacterName != masterName:
returnif areaID != player.GetGuildID():
return
# END_OF_GUILD_BUILDINGself.wndGameButton.ShowBuildButton()
def BULID_ExitGuildArea(self, areaID):
self.wndGameButton.HideBuildButton()#####################################################################################
def IsEditLineFocus(self):
if self.ChatWindow.chatLine.IsFocus():
return 1if self.ChatWindow.chatToLine.IsFocus():
return 1return 0
def EmptyFunction(self):
passif __name__ == "__main__":
import app
import wndMgr
import systemSetting
import mouseModule
import grp
import ui
import localeInfoapp.SetMouseHandler(mouseModule.mouseController)
app.SetHairColorEnable(TRUE)
wndMgr.SetMouseHandler(mouseModule.mouseController)
wndMgr.SetScreenSize(systemSetting.GetWidth(), systemSetting.GetHeight())
app.Create(localeInfo.APP_TITLE, systemSetting.GetWidth(), systemSetting.GetHeight(), 1)
mouseModule.mouseController.Create()class TestGame(ui.Window):
def __init__(self):
ui.Window.__init__(self)localeInfo.LoadLocaleData()
player.SetItemData(0, 27001, 10)
player.SetItemData(1, 27004, 10)self.interface = Interface()
self.interface.MakeInterface()
self.interface.ShowDefaultWindows()
self.interface.RefreshInventory()
#self.interface.OpenCubeWindow()def __del__(self):
ui.Window.__del__(self)def OnUpdate(self):
app.UpdateGame()def OnRender(self):
app.RenderGame()
grp.PopState()
grp.SetInterfaceRenderState()game = TestGame()
game.SetSize(systemSetting.GetWidth(), systemSetting.GetHeight())
game.Show()app.Loop()
-
9 horas atrás, NewWars disse:mete aqui o game.py e uitaskbar.py do root
game.pySpoilerimport os import app import dbg import grp import item import background import chr import chrmgr import player import snd import chat import textTail import snd import net import effect import wndMgr import fly import systemSetting import quest import guild import skill import messenger import localeInfo import constInfo import exchange import ime import ui import uiCommon import uiPhaseCurtain import uiMapNameShower import uiAffectShower import uiPlayerGauge import uiCharacter import uiTarget import time # PRIVATE_SHOP_PRICE_LIST import uiPrivateShopBuilder # END_OF_PRIVATE_SHOP_PRICE_LIST import mouseModule import consoleModule import localeInfo import playerSettingModule import interfaceModule import musicInfo import debugInfo import stringCommander from _weakref import proxy from switchbot import Bot # TEXTTAIL_LIVINGTIME_CONTROL #if localeInfo.IsJAPAN(): # app.SetTextTailLivingTime(8.0) # END_OF_TEXTTAIL_LIVINGTIME_CONTROL # SCREENSHOT_CWDSAVE SCREENSHOT_CWDSAVE = FALSE SCREENSHOT_DIR = None if localeInfo.IsEUROPE(): SCREENSHOT_CWDSAVE = TRUE if localeInfo.IsCIBN10(): SCREENSHOT_CWDSAVE = FALSE SCREENSHOT_DIR = "YT2W" cameraDistance = 1550.0 cameraPitch = 27.0 cameraRotation = 0.0 cameraHeight = 100.0 testAlignment = 0 BPisLodaded = 0 class GameWindow(ui.ScriptWindow): def __init__(self, stream): ui.ScriptWindow.__init__(self, "GAME") self.SetWindowName("game") net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self) player.SetGameWindow(self) self.quickSlotPageIndex = 0 self.lastPKModeSendedTime = 0 self.pressNumber = None self.guildWarQuestionDialog = None self.interface = None self.targetBoard = None self.console = None self.mapNameShower = None self.affectShower = None self.playerGauge = None self.stream=stream self.interface = interfaceModule.Interface() self.interface.MakeInterface() self.interface.ShowDefaultWindows() self.curtain = uiPhaseCurtain.PhaseCurtain() self.curtain.speed = 0.03 self.curtain.Hide() self.targetBoard = uiTarget.TargetBoard() self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog)) self.targetBoard.Hide() self.console = consoleModule.ConsoleWindow() self.console.BindGameClass(self) self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200) self.console.Hide() self.mapNameShower = uiMapNameShower.MapNameShower() self.affectShower = uiAffectShower.AffectShower() self.playerGauge = uiPlayerGauge.PlayerGauge(self) self.playerGauge.Hide() #wj 2014.1.2. ESC키를 누를 시 우선적으로 DropQuestionDialog를 끄도록 만들었다. 하지만 처음에 itemDropQuestionDialog가 선언되어 있지 않아 ERROR가 발생하여 init에서 선언과 동시에 초기화 시킴. self.itemDropQuestionDialog = None self.__SetQuickSlotMode() self.__ServerCommand_Build() self.__ProcessPreservedServerCommand() self.switchbot = Bot() self.switchbot.Hide() self.timeLine = ui.TextLine() self.timeLine.SetFontName(localeInfo.UI_DEF_FONT) self.timeLine.SetFontColor( 255, 045, 0) self.timeLine.SetPosition((wndMgr.GetScreenWidth() - 130) / 2, 180) def __del__(self): player.SetGameWindow(0) net.ClearPhaseWindow(net.PHASE_WINDOW_GAME, self) ui.ScriptWindow.__del__(self) def Open(self): app.SetFrameSkip(1) self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight()) self.quickSlotPageIndex = 0 self.PickingCharacterIndex = -1 self.PickingItemIndex = -1 self.consoleEnable = FALSE self.isShowDebugInfo = FALSE self.ShowNameFlag = FALSE self.enableXMasBoom = FALSE self.startTimeXMasBoom = 0.0 self.indexXMasBoom = 0 global cameraDistance, cameraPitch, cameraRotation, cameraHeight app.SetCamera(cameraDistance, cameraPitch, cameraRotation, cameraHeight) constInfo.SET_DEFAULT_CAMERA_MAX_DISTANCE() constInfo.SET_DEFAULT_CHRNAME_COLOR() constInfo.SET_DEFAULT_FOG_LEVEL() constInfo.SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE() constInfo.SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS() constInfo.SET_DEFAULT_USE_SKILL_EFFECT_ENABLE() # TWO_HANDED_WEAPON_ATTACK_SPEED_UP constInfo.SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE() # END_OF_TWO_HANDED_WEAPON_ATTACK_SPEED_UP import event event.SetLeftTimeString(localeInfo.UI_LEFT_TIME) textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE) if constInfo.PVPMODE_TEST_ENABLE: self.testPKMode = ui.TextLine() self.testPKMode.SetFontName(localeInfo.UI_DEF_FONT) self.testPKMode.SetPosition(0, 15) self.testPKMode.SetWindowHorizontalAlignCenter() self.testPKMode.SetHorizontalAlignCenter() self.testPKMode.SetFeather() self.testPKMode.SetOutline() self.testPKMode.Show() self.testAlignment = ui.TextLine() self.testAlignment.SetFontName(localeInfo.UI_DEF_FONT) self.testAlignment.SetPosition(0, 35) self.testAlignment.SetWindowHorizontalAlignCenter() self.testAlignment.SetHorizontalAlignCenter() self.testAlignment.SetFeather() self.testAlignment.SetOutline() self.testAlignment.Show() self.__BuildKeyDict() self.__BuildDebugInfo() # PRIVATE_SHOP_PRICE_LIST uiPrivateShopBuilder.Clear() # END_OF_PRIVATE_SHOP_PRICE_LIST # UNKNOWN_UPDATE exchange.InitTrading() # END_OF_UNKNOWN_UPDATE if debugInfo.IsDebugMode(): self.ToggleDebugInfo() ## Sound snd.SetMusicVolume(systemSetting.GetMusicVolume()*net.GetFieldMusicVolume()) snd.SetSoundVolume(systemSetting.GetSoundVolume()) netFieldMusicFileName = net.GetFieldMusicFileName() if netFieldMusicFileName: snd.FadeInMusic("BGM/" + netFieldMusicFileName) elif musicInfo.fieldMusic != "": snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) self.__SetQuickSlotMode() self.__SelectQuickPage(self.quickSlotPageIndex) self.SetFocus() self.Show() app.ShowCursor() net.SendEnterGamePacket() # START_GAME_ERROR_EXIT try: self.StartGame() except: import exception exception.Abort("GameWindow.Open") # END_OF_START_GAME_ERROR_EXIT # NPC가 큐브시스템으로 만들 수 있는 아이템들의 목록을 캐싱 # ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ] self.cubeInformation = {} self.currentCubeNPC = 0 def Close(self): self.Hide() global cameraDistance, cameraPitch, cameraRotation, cameraHeight (cameraDistance, cameraPitch, cameraRotation, cameraHeight) = app.GetCamera() if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic) self.onPressKeyDict = None self.onClickKeyDict = None chat.Close() snd.StopAllSound() grp.InitScreenEffect() chr.Destroy() textTail.Clear() quest.Clear() background.Destroy() guild.Destroy() messenger.Destroy() skill.ClearSkillData() wndMgr.Unlock() mouseModule.mouseController.DeattachObject() if self.guildWarQuestionDialog: self.guildWarQuestionDialog.Close() self.guildNameBoard = None self.partyRequestQuestionDialog = None self.partyInviteQuestionDialog = None self.guildInviteQuestionDialog = None self.guildWarQuestionDialog = None self.messengerAddFriendQuestion = None # UNKNOWN_UPDATE self.itemDropQuestionDialog = None # END_OF_UNKNOWN_UPDATE # QUEST_CONFIRM self.confirmDialog = None # END_OF_QUEST_CONFIRM self.PrintCoord = None self.FrameRate = None self.Pitch = None self.Splat = None self.TextureNum = None self.ObjectNum = None self.ViewDistance = None self.PrintMousePos = None self.ClearDictionary() self.playerGauge = None self.mapNameShower = None self.affectShower = None if self.console: self.console.BindGameClass(0) self.console.Close() self.console=None if self.targetBoard: self.targetBoard.Destroy() self.targetBoard = None if self.interface: self.interface.HideAllWindows() self.interface.Close() self.interface=None player.ClearSkillDict() player.ResetCameraRotation() self.KillFocus() app.HideCursor() print "---------------------------------------------------------------------------- CLOSE GAME WINDOW" def __BuildKeyDict(self): onPressKeyDict = {} ##PressKey 는 누르고 있는 동안 계속 적용되는 키이다. ## 숫자 단축키 퀵슬롯에 이용된다.(이후 숫자들도 퀵 슬롯용 예약) ## F12 는 클라 디버그용 키이므로 쓰지 않는 게 좋다. onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1) onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2) onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3) onPressKeyDict[app.DIK_4] = lambda : self.__PressNumKey(4) onPressKeyDict[app.DIK_5] = lambda : self.__PressNumKey(5) onPressKeyDict[app.DIK_6] = lambda : self.__PressNumKey(6) onPressKeyDict[app.DIK_7] = lambda : self.__PressNumKey(7) onPressKeyDict[app.DIK_8] = lambda : self.__PressNumKey(8) onPressKeyDict[app.DIK_9] = lambda : self.__PressNumKey(9) onPressKeyDict[app.DIK_F1] = lambda : self.__PressQuickSlot(4) onPressKeyDict[app.DIK_F2] = lambda : self.__PressQuickSlot(5) onPressKeyDict[app.DIK_F3] = lambda : self.__PressQuickSlot(6) onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) onPressKeyDict[app.DIK_F5] = lambda : self.__toggleSwitchbot() onPressKeyDict[app.DIK_F6] = lambda : self.__quikeqchange() onPressKeyDict[app.DIK_X] = lambda : self.__BonusPage() onPressKeyDict[app.DIK_LALT] = lambda : self.ShowName() onPressKeyDict[app.DIK_LCONTROL] = lambda : self.ShowMouseImage() onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen() onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack() #캐릭터 이동키 onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp() onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown() onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft() onPressKeyDict[app.DIK_RIGHT] = lambda : self.MoveRight() onPressKeyDict[app.DIK_W] = lambda : self.MoveUp() onPressKeyDict[app.DIK_S] = lambda : self.MoveDown() onPressKeyDict[app.DIK_A] = lambda : self.MoveLeft() onPressKeyDict[app.DIK_D] = lambda : self.MoveRight() onPressKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_TO_NEGATIVE) #onPressKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_G] = self.__PressGKey onPressKeyDict[app.DIK_Q] = self.__PressQKey onPressKeyDict[app.DIK_NUMPAD9] = lambda: app.MovieResetCamera() onPressKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_TO_NEGATIVE) onPressKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_TO_POSITIVE) onPressKeyDict[app.DIK_GRAVE] = lambda : self.PickUpItem() onPressKeyDict[app.DIK_Z] = lambda : self.PickUpItem() onPressKeyDict[app.DIK_C] = lambda state = "STATUS": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_V] = lambda state = "SKILL": self.interface.ToggleCharacterWindow(state) #onPressKeyDict[app.DIK_B] = lambda state = "EMOTICON": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_N] = lambda state = "QUEST": self.interface.ToggleCharacterWindow(state) onPressKeyDict[app.DIK_I] = lambda : self.interface.ToggleInventoryWindow() onPressKeyDict[app.DIK_O] = lambda : self.interface.ToggleDragonSoulWindowWithNoInfo() onPressKeyDict[app.DIK_M] = lambda : self.interface.PressMKey() #onPressKeyDict[app.DIK_H] = lambda : self.interface.OpenHelpWindow() onPressKeyDict[app.DIK_ADD] = lambda : self.interface.MiniMapScaleUp() onPressKeyDict[app.DIK_SUBTRACT] = lambda : self.interface.MiniMapScaleDown() onPressKeyDict[app.DIK_L] = lambda : self.interface.ToggleChatLogWindow() onPressKeyDict[app.DIK_COMMA] = lambda : self.ShowConsole() # "`" key onPressKeyDict[app.DIK_LSHIFT] = lambda : self.__SetQuickPageMode() onPressKeyDict[app.DIK_J] = lambda : self.__PressJKey() onPressKeyDict[app.DIK_H] = lambda : self.__PressHKey() onPressKeyDict[app.DIK_B] = lambda : self.__PressBKey() onPressKeyDict[app.DIK_F] = lambda : self.__PressFKey() # CUBE_TEST #onPressKeyDict[app.DIK_K] = lambda : self.interface.OpenCubeWindow() # CUBE_TEST_END self.onPressKeyDict = onPressKeyDict onClickKeyDict = {} onClickKeyDict[app.DIK_UP] = lambda : self.StopUp() onClickKeyDict[app.DIK_DOWN] = lambda : self.StopDown() onClickKeyDict[app.DIK_LEFT] = lambda : self.StopLeft() onClickKeyDict[app.DIK_RIGHT] = lambda : self.StopRight() onClickKeyDict[app.DIK_SPACE] = lambda : self.EndAttack() onClickKeyDict[app.DIK_W] = lambda : self.StopUp() onClickKeyDict[app.DIK_S] = lambda : self.StopDown() onClickKeyDict[app.DIK_A] = lambda : self.StopLeft() onClickKeyDict[app.DIK_D] = lambda : self.StopRight() onClickKeyDict[app.DIK_Q] = lambda: app.RotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_G] = lambda: self.__ReleaseGKey() onClickKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_STOP) onClickKeyDict[app.DIK_LALT] = lambda: self.HideName() onClickKeyDict[app.DIK_LCONTROL] = lambda: self.HideMouseImage() onClickKeyDict[app.DIK_LSHIFT] = lambda: self.__SetQuickSlotMode() #if constInfo.PVPMODE_ACCELKEY_ENABLE: # onClickKeyDict[app.DIK_B] = lambda: self.ChangePKMode() self.onClickKeyDict=onClickKeyDict def __PressNumKey(self,num): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if num >= 1 and num <= 9: if(chrmgr.IsPossibleEmoticon(-1)): chrmgr.SetEmoticon(-1,int(num)-1) net.SendEmoticon(int(num)-1) else: if num >= 1 and num <= 4: self.pressNumber(num-1) def __ClickBKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): return else: if constInfo.PVPMODE_ACCELKEY_ENABLE: self.ChangePKMode() def __PressJKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if player.IsMountingHorse(): net.SendChatPacket("/unmount") else: #net.SendChatPacket("/user_horse_ride") if not uiPrivateShopBuilder.IsBuildingPrivateShop(): for i in xrange(player.INVENTORY_PAGE_SIZE): if player.GetItemIndex(i) in (71114, 71116, 71118, 71120): net.SendItemUsePacket(i) break def __PressHKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_ride") else: self.interface.OpenHelpWindow() def __PressBKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_back") else: state = "EMOTICON" self.interface.ToggleCharacterWindow(state) def __PressFKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/user_horse_feed") else: app.ZoomCamera(app.CAMERA_TO_POSITIVE) def __PressGKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): net.SendChatPacket("/ride") else: if self.ShowNameFlag: self.interface.ToggleGuildWindow() else: app.PitchCamera(app.CAMERA_TO_POSITIVE) def __ReleaseGKey(self): app.PitchCamera(app.CAMERA_STOP) def __PressQKey(self): if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL): if 0==interfaceModule.IsQBHide: interfaceModule.IsQBHide = 1 self.interface.HideAllQuestButton() else: interfaceModule.IsQBHide = 0 self.interface.ShowAllQuestButton() else: app.RotateCamera(app.CAMERA_TO_NEGATIVE) def __SetQuickSlotMode(self): self.pressNumber=ui.__mem_func__(self.__PressQuickSlot) def __SetQuickPageMode(self): self.pressNumber=ui.__mem_func__(self.__SelectQuickPage) def __PressQuickSlot(self, localSlotIndex): if localeInfo.IsARABIC(): if 0 <= localSlotIndex and localSlotIndex < 4: player.RequestUseLocalQuickSlot(3-localSlotIndex) else: player.RequestUseLocalQuickSlot(11-localSlotIndex) else: player.RequestUseLocalQuickSlot(localSlotIndex) def __SelectQuickPage(self, pageIndex): self.quickSlotPageIndex = pageIndex player.SetQuickPage(pageIndex) def ToggleDebugInfo(self): self.isShowDebugInfo = not self.isShowDebugInfo if self.isShowDebugInfo: self.PrintCoord.Show() self.FrameRate.Show() self.Pitch.Show() self.Splat.Show() self.TextureNum.Show() self.ObjectNum.Show() self.ViewDistance.Show() self.PrintMousePos.Show() else: self.PrintCoord.Hide() self.FrameRate.Hide() self.Pitch.Hide() self.Splat.Hide() self.TextureNum.Hide() self.ObjectNum.Hide() self.ViewDistance.Hide() self.PrintMousePos.Hide() def __BuildDebugInfo(self): ## Character Position Coordinate self.PrintCoord = ui.TextLine() self.PrintCoord.SetFontName(localeInfo.UI_DEF_FONT) self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 270, 0) ## Frame Rate self.FrameRate = ui.TextLine() self.FrameRate.SetFontName(localeInfo.UI_DEF_FONT) self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 270, 20) ## Camera Pitch self.Pitch = ui.TextLine() self.Pitch.SetFontName(localeInfo.UI_DEF_FONT) self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 270, 40) ## Splat self.Splat = ui.TextLine() self.Splat.SetFontName(localeInfo.UI_DEF_FONT) self.Splat.SetPosition(wndMgr.GetScreenWidth() - 270, 60) ## self.PrintMousePos = ui.TextLine() self.PrintMousePos.SetFontName(localeInfo.UI_DEF_FONT) self.PrintMousePos.SetPosition(wndMgr.GetScreenWidth() - 270, 80) # TextureNum self.TextureNum = ui.TextLine() self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT) self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100) # 오브젝트 그리는 개수 self.ObjectNum = ui.TextLine() self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT) self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120) # 시야거리 self.ViewDistance = ui.TextLine() self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT) self.ViewDistance.SetPosition(0, 0) #Saat self.timeLine.SetWindowHorizontalAlignCenter() self.timeLine.SetHorizontalAlignCenter() self.timeLine.SetFeather() self.timeLine.SetOutline() self.timeLine.Show() def __NotifyError(self, msg): chat.AppendChat(chat.CHAT_TYPE_INFO, msg) def ChangePKMode(self): if not app.IsPressed(app.DIK_LCONTROL): return if player.GetStatus(player.LEVEL)<constInfo.PVPMODE_PROTECTED_LEVEL: self.__NotifyError(localeInfo.OPTION_PVPMODE_PROTECT % (constInfo.PVPMODE_PROTECTED_LEVEL)) return curTime = app.GetTime() if curTime - self.lastPKModeSendedTime < constInfo.PVPMODE_ACCELKEY_DELAY: return self.lastPKModeSendedTime = curTime curPKMode = player.GetPKMode() nextPKMode = curPKMode + 1 if nextPKMode == player.PK_MODE_PROTECT: if 0 == player.GetGuildID(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OPTION_PVPMODE_CANNOT_SET_GUILD_MODE) nextPKMode = 0 else: nextPKMode = player.PK_MODE_GUILD elif nextPKMode == player.PK_MODE_MAX_NUM: nextPKMode = 0 net.SendChatPacket("/PKMode " + str(nextPKMode)) print "/PKMode " + str(nextPKMode) def OnChangePKMode(self): self.interface.OnChangePKMode() try: self.__NotifyError(localeInfo.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()]) except KeyError: print "UNKNOWN PVPMode[%d]" % (player.GetPKMode()) if constInfo.PVPMODE_TEST_ENABLE: curPKMode = player.GetPKMode() alignment, grade = chr.testGetPKData() self.pkModeNameDict = { 0 : "PEACE", 1 : "REVENGE", 2 : "FREE", 3 : "PROTECT", } self.testPKMode.SetText("Current PK Mode : " + self.pkModeNameDict.get(curPKMode, "UNKNOWN")) self.testAlignment.SetText("Current Alignment : " + str(alignment) + " (" + localeInfo.TITLE_NAME_LIST[grade] + ")") ############################################################################################### ############################################################################################### ## Game Callback Functions # Start def StartGame(self): self.RefreshInventory() self.RefreshEquipment() self.RefreshCharacter() self.RefreshSkill() # Refresh def CheckGameButton(self): if self.interface: self.interface.CheckGameButton() def RefreshAlignment(self): self.interface.RefreshAlignment() def RefreshStatus(self): self.CheckGameButton() if self.interface: self.interface.RefreshStatus() if self.playerGauge: self.playerGauge.RefreshGauge() def RefreshStamina(self): self.interface.RefreshStamina() def RefreshSkill(self): self.CheckGameButton() if self.interface: self.interface.RefreshSkill() def RefreshQuest(self): self.interface.RefreshQuest() def RefreshMessenger(self): self.interface.RefreshMessenger() def RefreshGuildInfoPage(self): self.interface.RefreshGuildInfoPage() def RefreshGuildBoardPage(self): self.interface.RefreshGuildBoardPage() def RefreshGuildMemberPage(self): self.interface.RefreshGuildMemberPage() def RefreshGuildMemberPageGradeComboBox(self): self.interface.RefreshGuildMemberPageGradeComboBox() def RefreshGuildSkillPage(self): self.interface.RefreshGuildSkillPage() def RefreshGuildGradePage(self): self.interface.RefreshGuildGradePage() def RefreshMobile(self): if self.interface: self.interface.RefreshMobile() def OnMobileAuthority(self): self.interface.OnMobileAuthority() def OnBlockMode(self, mode): self.interface.OnBlockMode(mode) def OpenQuestWindow(self, skin, idx): self.interface.OpenQuestWindow(skin, idx) def AskGuildName(self): guildNameBoard = uiCommon.InputDialog() guildNameBoard.SetTitle(localeInfo.GUILD_NAME) guildNameBoard.SetAcceptEvent(ui.__mem_func__(self.ConfirmGuildName)) guildNameBoard.SetCancelEvent(ui.__mem_func__(self.CancelGuildName)) guildNameBoard.Open() self.guildNameBoard = guildNameBoard def ConfirmGuildName(self): guildName = self.guildNameBoard.GetText() if not guildName: return if net.IsInsultIn(guildName): self.PopupMessage(localeInfo.GUILD_CREATE_ERROR_INSULT_NAME) return net.SendAnswerMakeGuildPacket(guildName) self.guildNameBoard.Close() self.guildNameBoard = None return TRUE def CancelGuildName(self): self.guildNameBoard.Close() self.guildNameBoard = None return TRUE ## Refine def PopupMessage(self, msg): self.stream.popupWindow.Close() self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK) def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type=0): self.interface.OpenRefineDialog(targetItemPos, nextGradeItemVnum, cost, prob, type) def AppendMaterialToRefineDialog(self, vnum, count): self.interface.AppendMaterialToRefineDialog(vnum, count) def RunUseSkillEvent(self, slotIndex, coolTime): self.interface.OnUseSkill(slotIndex, coolTime) def ClearAffects(self): self.affectShower.ClearAffects() def SetAffect(self, affect): self.affectShower.SetAffect(affect) def ResetAffect(self, affect): self.affectShower.ResetAffect(affect) # UNKNOWN_UPDATE def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration): self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1) elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type: self.BINARY_DragonSoulGiveQuilification() def BINARY_NEW_RemoveAffect(self, type, pointIdx): self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx) if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type: self.interface.DragonSoulDeactivate() # END_OF_UNKNOWN_UPDATE def ActivateSkillSlot(self, slotIndex): if self.interface: self.interface.OnActivateSkill(slotIndex) def DeactivateSkillSlot(self, slotIndex): if self.interface: self.interface.OnDeactivateSkill(slotIndex) def RefreshEquipment(self): if self.interface: self.interface.RefreshInventory() def RefreshInventory(self): if self.interface: self.interface.RefreshInventory() def RefreshCharacter(self): if self.interface: self.interface.RefreshCharacter() def OnGameOver(self): self.CloseTargetBoard() self.OpenRestartDialog() def OpenRestartDialog(self): self.interface.OpenRestartDialog() def ChangeCurrentSkill(self, skillSlotNumber): self.interface.OnChangeCurrentSkill(skillSlotNumber) ## TargetBoard def SetPCTargetBoard(self, vid, name): self.targetBoard.Open(vid, name) if app.IsPressed(app.DIK_LCONTROL): if not player.IsSameEmpire(vid): return if player.IsMainCharacterIndex(vid): return elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(vid): return self.interface.OpenWhisperDialog(name) def RefreshTargetBoardByVID(self, vid): self.targetBoard.RefreshByVID(vid) def RefreshTargetBoardByName(self, name): self.targetBoard.RefreshByName(name) def __RefreshTargetBoard(self): self.targetBoard.Refresh() def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() def CloseTargetBoardIfDifferent(self, vid): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.Close() def CloseTargetBoard(self): self.targetBoard.Close() ## View Equipment def OpenEquipmentDialog(self, vid): self.interface.OpenEquipmentDialog(vid) def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count): self.interface.SetEquipmentDialogItem(vid, slotIndex, vnum, count) def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value): self.interface.SetEquipmentDialogSocket(vid, slotIndex, socketIndex, value) def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value): self.interface.SetEquipmentDialogAttr(vid, slotIndex, attrIndex, type, value) # SHOW_LOCAL_MAP_NAME def ShowMapName(self, mapName, x, y): if self.mapNameShower: self.mapNameShower.ShowMapName(mapName, x, y) if self.interface: self.interface.SetMapName(mapName) # END_OF_SHOW_LOCAL_MAP_NAME def BINARY_OpenAtlasWindow(self): self.interface.BINARY_OpenAtlasWindow() ## Chat def OnRecvWhisper(self, mode, name, line): if mode == chat.WHISPER_TYPE_GM: self.interface.RegisterGameMasterName(name) chat.AppendWhisper(mode, name, line) self.interface.RecvWhisper(name) def OnRecvWhisperSystemMessage(self, mode, name, line): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line) self.interface.RecvWhisper(name) def OnRecvWhisperError(self, mode, name, line): if localeInfo.WHISPER_ERROR.has_key(mode): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, localeInfo.WHISPER_ERROR[mode](name)) else: chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, "Whisper Unknown Error(mode=%d, name=%s)" % (mode, name)) self.interface.RecvWhisper(name) def RecvWhisper(self, name): self.interface.RecvWhisper(name) def OnPickMoney(self, money): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_PICK_MONEY % (money)) def OnShopError(self, type): try: self.PopupMessage(localeInfo.SHOP_ERROR_DICT[type]) except KeyError: self.PopupMessage(localeInfo.SHOP_ERROR_UNKNOWN % (type)) def OnSafeBoxError(self): self.PopupMessage(localeInfo.SAFEBOX_ERROR) def OnFishingSuccess(self, isFish, fishName): chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_SUCCESS(isFish, fishName), 2000) # ADD_FISHING_MESSAGE def OnFishingNotifyUnknown(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_UNKNOWN) def OnFishingWrongPlace(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_WRONG_PLACE) # END_OF_ADD_FISHING_MESSAGE def OnFishingNotify(self, isFish, fishName): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_NOTIFY(isFish, fishName)) def OnFishingFailure(self): chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_FAILURE, 2000) def OnCannotPickItem(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_PICK_ITEM) # MINING def OnCannotMining(self): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_MINING) # END_OF_MINING def OnCannotUseSkill(self, vid, type): if localeInfo.USE_SKILL_ERROR_TAIL_DICT.has_key(type): textTail.RegisterInfoTail(vid, localeInfo.USE_SKILL_ERROR_TAIL_DICT[type]) if localeInfo.USE_SKILL_ERROR_CHAT_DICT.has_key(type): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_SKILL_ERROR_CHAT_DICT[type]) def OnCannotShotError(self, vid, type): textTail.RegisterInfoTail(vid, localeInfo.SHOT_ERROR_TAIL_DICT.get(type, localeInfo.SHOT_ERROR_UNKNOWN % (type))) ## PointReset def StartPointReset(self): self.interface.OpenPointResetDialog() ## Shop def StartShop(self, vid): self.interface.OpenShopDialog(vid) def EndShop(self): self.interface.CloseShopDialog() def RefreshShop(self): self.interface.RefreshShopDialog() def SetShopSellingPrice(self, Price): pass ## Exchange def StartExchange(self): self.interface.StartExchange() def EndExchange(self): self.interface.EndExchange() def RefreshExchange(self): self.interface.RefreshExchange() ## Party def RecvPartyInviteQuestion(self, leaderVID, leaderName): partyInviteQuestionDialog = uiCommon.QuestionDialog() partyInviteQuestionDialog.SetText(leaderName + localeInfo.PARTY_DO_YOU_JOIN) partyInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.Open() partyInviteQuestionDialog.partyLeaderVID = leaderVID self.partyInviteQuestionDialog = partyInviteQuestionDialog def AnswerPartyInvite(self, answer): if not self.partyInviteQuestionDialog: return partyLeaderVID = self.partyInviteQuestionDialog.partyLeaderVID distance = player.GetCharacterDistance(partyLeaderVID) if distance < 0.0 or distance > 5000: answer = FALSE net.SendPartyInviteAnswerPacket(partyLeaderVID, answer) self.partyInviteQuestionDialog.Close() self.partyInviteQuestionDialog = None def AddPartyMember(self, pid, name): self.interface.AddPartyMember(pid, name) def UpdatePartyMemberInfo(self, pid): self.interface.UpdatePartyMemberInfo(pid) def RemovePartyMember(self, pid): self.interface.RemovePartyMember(pid) self.__RefreshTargetBoard() def LinkPartyMember(self, pid, vid): self.interface.LinkPartyMember(pid, vid) def UnlinkPartyMember(self, pid): self.interface.UnlinkPartyMember(pid) def UnlinkAllPartyMember(self): self.interface.UnlinkAllPartyMember() def ExitParty(self): self.interface.ExitParty() self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID()) def ChangePartyParameter(self, distributionMode): self.interface.ChangePartyParameter(distributionMode) ## Messenger def OnMessengerAddFriendQuestion(self, name): messengerAddFriendQuestion = uiCommon.QuestionDialog2() messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 % (name)) messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2) messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend)) messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend)) messengerAddFriendQuestion.Open() messengerAddFriendQuestion.name = name self.messengerAddFriendQuestion = messengerAddFriendQuestion def OnAcceptAddFriend(self): name = self.messengerAddFriendQuestion.name net.SendChatPacket("/messenger_auth y " + name) self.OnCloseAddFriendQuestionDialog() return TRUE def OnDenyAddFriend(self): name = self.messengerAddFriendQuestion.name net.SendChatPacket("/messenger_auth n " + name) self.OnCloseAddFriendQuestionDialog() return TRUE def OnCloseAddFriendQuestionDialog(self): self.messengerAddFriendQuestion.Close() self.messengerAddFriendQuestion = None return TRUE ## SafeBox def OpenSafeboxWindow(self, size): self.interface.OpenSafeboxWindow(size) def RefreshSafebox(self): self.interface.RefreshSafebox() def RefreshSafeboxMoney(self): self.interface.RefreshSafeboxMoney() # ITEM_MALL def OpenMallWindow(self, size): self.interface.OpenMallWindow(size) def RefreshMall(self): self.interface.RefreshMall() # END_OF_ITEM_MALL ## Guild def RecvGuildInviteQuestion(self, guildID, guildName): guildInviteQuestionDialog = uiCommon.QuestionDialog() guildInviteQuestionDialog.SetText(guildName + localeInfo.GUILD_DO_YOU_JOIN) guildInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerGuildInvite(arg)) guildInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerGuildInvite(arg)) guildInviteQuestionDialog.Open() guildInviteQuestionDialog.guildID = guildID self.guildInviteQuestionDialog = guildInviteQuestionDialog def AnswerGuildInvite(self, answer): if not self.guildInviteQuestionDialog: return guildLeaderVID = self.guildInviteQuestionDialog.guildID net.SendGuildInviteAnswerPacket(guildLeaderVID, answer) self.guildInviteQuestionDialog.Close() self.guildInviteQuestionDialog = None def DeleteGuild(self): self.interface.DeleteGuild() ## Clock def ShowClock(self, second): self.interface.ShowClock(second) def HideClock(self): self.interface.HideClock() ## Emotion def BINARY_ActEmotion(self, emotionIndex): if self.interface.wndCharacter: self.interface.wndCharacter.ActEmotion(emotionIndex) ############################################################################################### ############################################################################################### ## Keyboard Functions def CheckFocus(self): if FALSE == self.IsFocus(): if TRUE == self.interface.IsOpenChat(): self.interface.ToggleChat() self.SetFocus() def SaveScreen(self): print "save screen" # SCREENSHOT_CWDSAVE if SCREENSHOT_CWDSAVE: if not os.path.exists(os.getcwd()+os.sep+"screenshot"): os.mkdir(os.getcwd()+os.sep+"screenshot") (succeeded, name) = grp.SaveScreenShotToPath(os.getcwd()+os.sep+"screenshot"+os.sep) elif SCREENSHOT_DIR: (succeeded, name) = grp.SaveScreenShot(SCREENSHOT_DIR) else: (succeeded, name) = grp.SaveScreenShot() # END_OF_SCREENSHOT_CWDSAVE if succeeded: pass """ chat.AppendChat(chat.CHAT_TYPE_INFO, name + localeInfo.SCREENSHOT_SAVE1) chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE2) """ else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE_FAILURE) def ShowConsole(self): if debugInfo.IsDebugMode() or TRUE == self.consoleEnable: player.EndKeyWalkingImmediately() self.console.OpenWindow() def ShowName(self): self.ShowNameFlag = TRUE self.playerGauge.EnableShowAlways() player.SetQuickPage(self.quickSlotPageIndex+1) # ADD_ALWAYS_SHOW_NAME def __IsShowName(self): if systemSetting.IsAlwaysShowName(): return TRUE if self.ShowNameFlag: return TRUE return FALSE # END_OF_ADD_ALWAYS_SHOW_NAME def HideName(self): self.ShowNameFlag = FALSE self.playerGauge.DisableShowAlways() player.SetQuickPage(self.quickSlotPageIndex) def ShowMouseImage(self): self.interface.ShowMouseImage() def HideMouseImage(self): self.interface.HideMouseImage() def StartAttack(self): player.SetAttackKeyState(TRUE) def EndAttack(self): player.SetAttackKeyState(FALSE) def MoveUp(self): player.SetSingleDIKKeyState(app.DIK_UP, TRUE) def MoveDown(self): player.SetSingleDIKKeyState(app.DIK_DOWN, TRUE) def MoveLeft(self): player.SetSingleDIKKeyState(app.DIK_LEFT, TRUE) def MoveRight(self): player.SetSingleDIKKeyState(app.DIK_RIGHT, TRUE) def StopUp(self): player.SetSingleDIKKeyState(app.DIK_UP, FALSE) def StopDown(self): player.SetSingleDIKKeyState(app.DIK_DOWN, FALSE) def StopLeft(self): player.SetSingleDIKKeyState(app.DIK_LEFT, FALSE) def StopRight(self): player.SetSingleDIKKeyState(app.DIK_RIGHT, FALSE) def PickUpItem(self): player.PickCloseItem() ############################################################################################### ############################################################################################### ## Event Handler def OnKeyDown(self, key): if self.interface.wndWeb and self.interface.wndWeb.IsShow(): return if key == app.DIK_ESC: self.RequestDropItem(FALSE) constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) try: self.onPressKeyDict[key]() except KeyError: pass except: raise return TRUE def OnKeyUp(self, key): try: self.onClickKeyDict[key]() except KeyError: pass except: raise return TRUE def OnMouseLeftButtonDown(self): if self.interface.BUILD_OnMouseLeftButtonDown(): return if mouseModule.mouseController.isAttached(): self.CheckFocus() else: hyperlink = ui.GetHyperlink() if hyperlink: return else: self.CheckFocus() player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS); return TRUE def OnMouseLeftButtonUp(self): if self.interface.BUILD_OnMouseLeftButtonUp(): return if mouseModule.mouseController.isAttached(): attachedType = mouseModule.mouseController.GetAttachedType() attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex() attachedItemSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedItemCount = mouseModule.mouseController.GetAttachedItemCount() ## QuickSlot if player.SLOT_TYPE_QUICK_SLOT == attachedType: player.RequestDeleteGlobalQuickSlot(attachedItemSlotPos) ## Inventory elif player.SLOT_TYPE_INVENTORY == attachedType: if player.ITEM_MONEY == attachedItemIndex: self.__PutMoney(attachedType, attachedItemCount, self.PickingCharacterIndex) else: self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex) ## DragonSoul elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex) mouseModule.mouseController.DeattachObject() else: hyperlink = ui.GetHyperlink() if hyperlink: if app.IsPressed(app.DIK_LALT): link = chat.GetLinkFromHyperlink(hyperlink) ime.PasteString(link) else: self.interface.MakeHyperlinkTooltip(hyperlink) return else: player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK) #player.EndMouseWalking() return TRUE def __PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID): if player.SLOT_TYPE_INVENTORY == attachedType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: attachedInvenType = player.SlotTypeToInvenType(attachedType) if TRUE == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID: if player.IsEquipmentSlot(attachedItemSlotPos) and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedType: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.EXCHANGE_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if chr.IsNPC(dstChrID): net.SendGiveItemPacket(dstChrID, attachedInvenType, attachedItemSlotPos, attachedItemCount) else: net.SendExchangeStartPacket(dstChrID) net.SendExchangeItemAddPacket(attachedInvenType, attachedItemSlotPos, 0) else: self.__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount) def __PutMoney(self, attachedType, attachedMoney, dstChrID): if TRUE == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID: net.SendExchangeStartPacket(dstChrID) net.SendExchangeElkAddPacket(attachedMoney) else: self.__DropMoney(attachedType, attachedMoney) def __DropMoney(self, attachedType, attachedMoney): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if attachedMoney>=1000: self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_MONEY_FAILURE_1000_OVER, 0, localeInfo.UI_OK) return itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(localeInfo.DO_YOU_DROP_MONEY % (attachedMoney)) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropCount = attachedMoney itemDropQuestionDialog.dropNumber = player.ITEM_MONEY self.itemDropQuestionDialog = itemDropQuestionDialog def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if player.SLOT_TYPE_INVENTORY == attachedType and player.IsEquipmentSlot(attachedItemSlotPos): self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_ITEM_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if player.SLOT_TYPE_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) def RequestDropItem(self, answer): if not self.itemDropQuestionDialog: return if answer: dropType = self.itemDropQuestionDialog.dropType dropCount = self.itemDropQuestionDialog.dropCount dropNumber = self.itemDropQuestionDialog.dropNumber if player.SLOT_TYPE_INVENTORY == dropType: if dropNumber == player.ITEM_MONEY: net.SendGoldDropPacketNew(dropCount) snd.PlaySound("sound/ui/money.wav") else: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == dropType: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount, player.DRAGON_SOUL_INVENTORY) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP self.itemDropQuestionDialog.Close() self.itemDropQuestionDialog = None constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) # PRIVATESHOP_DISABLE_ITEM_DROP def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY): if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemDropPacketNew(itemInvenType, itemVNum, itemCount) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP def OnMouseRightButtonDown(self): self.CheckFocus() if TRUE == mouseModule.mouseController.isAttached(): mouseModule.mouseController.DeattachObject() else: player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS) return TRUE def OnMouseRightButtonUp(self): if TRUE == mouseModule.mouseController.isAttached(): return TRUE 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.mapNameShower.IsShow(): self.mapNameShower.Update() if self.isShowDebugInfo: self.UpdateDebugInfo() if self.enableXMasBoom: self.__XMasBoom_Update() if 1 == constInfo.AUTO_PICK_UP: self.PickUpItem() if int(int(self.interface.LastContactTimeStamp) + self.interface.WaitTime) < int(app.GetTime()) and self.interface.State == "Kapali": self.interface.State = "Acik" self.interface.BUILD_OnUpdate() localtime = localtime = time.strftime("%d.%m.%y %H:%M:%S") self.timeLine.SetText(localtime) self.timeLine.Show() def UpdateDebugInfo(self): # # 캐릭터 좌표 및 FPS 출력 (x, y, z) = player.GetMainCharacterPosition() nUpdateTime = app.GetUpdateTime() nUpdateFPS = app.GetUpdateFPS() nRenderFPS = app.GetRenderFPS() nFaceCount = app.GetFaceCount() fFaceSpeed = app.GetFaceSpeed() nST=background.GetRenderShadowTime() (fAveRT, nCurRT) = app.GetRenderTime() (iNum, fFogStart, fFogEnd, fFarCilp) = background.GetDistanceSetInfo() (iPatch, iSplat, fSplatRatio, sTextureNum) = background.GetRenderedSplatNum() if iPatch == 0: iPatch = 1 #(dwRenderedThing, dwRenderedCRC) = background.GetRenderedGraphicThingInstanceNum() #self.PrintCoord.SetText("Coordinate: %.2f %.2f %.2f ATM: %d" % (x, y, z, app.GetAvailableTextureMemory()/(1024*1024))) #xMouse, yMouse = wndMgr.GetMousePosition() #self.PrintMousePos.SetText("MousePosition: %d %d" % (xMouse, yMouse)) #self.FrameRate.SetText("UFPS: %3d UT: %3d FS %.2f" % (nUpdateFPS, nUpdateTime, fFaceSpeed)) #if fAveRT>1.0: #self.Pitch.SetText("RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) " % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount/fAveRT)) #self.Splat.SetText("PATCH: %d SPLAT: %d BAD(%.2f)" % (iPatch, iSplat, fSplatRatio)) #self.Pitch.SetText("Pitch: %.2f" % (app.GetCameraPitch()) #self.TextureNum.SetText("TN : %s" % (sTextureNum)) #self.ObjectNum.SetText("GTI : %d, CRC : %d" % (dwRenderedThing, dwRenderedCRC)) #self.ViewDistance.SetText("Num : %d, FS : %f, FE : %f, FC : %f" % (iNum, fFogStart, fFogEnd, fFarCilp)) def OnRender(self): app.RenderGame() if self.console.Console.collision: background.RenderCollision() chr.RenderCollision() (x, y) = app.GetCursorPosition() ######################## # Picking ######################## textTail.UpdateAllTextTail() if TRUE == wndMgr.IsPickedWindow(self.hWnd): self.PickingCharacterIndex = chr.Pick() if -1 != self.PickingCharacterIndex: textTail.ShowCharacterTextTail(self.PickingCharacterIndex) if 0 != self.targetBoard.GetTargetVID(): textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID()) # ADD_ALWAYS_SHOW_NAME if not self.__IsShowName(): self.PickingItemIndex = item.Pick() if -1 != self.PickingItemIndex: textTail.ShowItemTextTail(self.PickingItemIndex) # END_OF_ADD_ALWAYS_SHOW_NAME ## Show all name in the range # ADD_ALWAYS_SHOW_NAME if self.__IsShowName(): textTail.ShowAllTextTail() self.PickingItemIndex = textTail.Pick(x, y) # END_OF_ADD_ALWAYS_SHOW_NAME textTail.UpdateShowingTextTail() textTail.ArrangeTextTail() if -1 != self.PickingItemIndex: textTail.SelectItemName(self.PickingItemIndex) grp.PopState() grp.SetInterfaceRenderState() textTail.Render() textTail.HideAllTextTail() def OnPressEscapeKey(self): if app.TARGET == app.GetCursor(): app.SetCursor(app.NORMAL) elif TRUE == mouseModule.mouseController.isAttached(): mouseModule.mouseController.DeattachObject() else: self.interface.OpenSystemDialog() return TRUE def OnIMEReturn(self): if app.IsPressed(app.DIK_LSHIFT): self.interface.OpenWhisperDialogWithoutTarget() else: self.interface.ToggleChat() return TRUE def OnPressExitKey(self): self.interface.ToggleSystemDialog() return TRUE ## BINARY CALLBACK ###################################################################################### # WEDDING def BINARY_LoverInfo(self, name, lovePoint): if self.interface.wndMessenger: self.interface.wndMessenger.OnAddLover(name, lovePoint) if self.affectShower: self.affectShower.SetLoverInfo(name, lovePoint) def BINARY_UpdateLovePoint(self, lovePoint): if self.interface.wndMessenger: self.interface.wndMessenger.OnUpdateLovePoint(lovePoint) if self.affectShower: self.affectShower.OnUpdateLovePoint(lovePoint) # END_OF_WEDDING # QUEST_CONFIRM def BINARY_OnQuestConfirm(self, msg, timeout, pid): confirmDialog = uiCommon.QuestionDialogWithTimeLimit() confirmDialog.Open(msg, timeout) confirmDialog.SetAcceptEvent(lambda answer=TRUE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) confirmDialog.SetCancelEvent(lambda answer=FALSE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) self.confirmDialog = confirmDialog # END_OF_QUEST_CONFIRM # GIFT command def Gift_Show(self): self.interface.ShowGift() # CUBE def BINARY_Cube_Open(self, npcVNUM): self.currentCubeNPC = npcVNUM self.interface.OpenCubeWindow() if npcVNUM not in self.cubeInformation: net.SendChatPacket("/cube r_info") else: cubeInfoList = self.cubeInformation[npcVNUM] i = 0 for cubeInfo in cubeInfoList: self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"]) j = 0 for materialList in cubeInfo["materialList"]: for materialInfo in materialList: itemVnum, itemCount = materialInfo self.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount) j = j + 1 i = i + 1 self.interface.wndCube.Refresh() def BINARY_Cube_Close(self): self.interface.CloseCubeWindow() # 제작에 필요한 골드, 예상되는 완성품의 VNUM과 개수 정보 update def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count): self.interface.UpdateCubeInfo(gold, itemVnum, count) def BINARY_Cube_Succeed(self, itemVnum, count): print "큐브 제작 성공" self.interface.SucceedCubeWork(itemVnum, count) pass def BINARY_Cube_Failed(self): print "큐브 제작 실패" self.interface.FailedCubeWork() pass def BINARY_Cube_ResultList(self, npcVNUM, listText): # ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 이런식으로 "/" 문자로 구분된 리스트를 줌 #print listText if npcVNUM == 0: npcVNUM = self.currentCubeNPC self.cubeInformation[npcVNUM] = [] try: for eachInfoText in listText.split("/"): eachInfo = eachInfoText.split(",") itemVnum = int(eachInfo[0]) itemCount = int(eachInfo[1]) self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount}) self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount) resultCount = len(self.cubeInformation[npcVNUM]) requestCount = 7 modCount = resultCount % requestCount splitCount = resultCount / requestCount for i in xrange(splitCount): #print("/cube r_info %d %d" % (i * requestCount, requestCount)) net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount)) if 0 < modCount: #print("/cube r_info %d %d" % (splitCount * requestCount, modCount)) net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount)) except RuntimeError, msg: dbg.TraceError(msg) return 0 pass def BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText): # Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000 try: #print listText if 3 > len(listText): dbg.TraceError("Wrong Cube Material Infomation") return 0 eachResultList = listText.split("@") cubeInfo = self.cubeInformation[self.currentCubeNPC] itemIndex = 0 for eachResultText in eachResultList: cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []] materialList = cubeInfo[startIndex + itemIndex]["materialList"] gold = 0 splitResult = eachResultText.split("/") if 1 < len(splitResult): gold = int(splitResult[1]) #print "splitResult : ", splitResult eachMaterialList = splitResult[0].split("&") i = 0 for eachMaterialText in eachMaterialList: complicatedList = eachMaterialText.split("|") if 0 < len(complicatedList): for complicatedText in complicatedList: (itemVnum, itemCount) = complicatedText.split(",") itemVnum = int(itemVnum) itemCount = int(itemCount) self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount) materialList[i].append((itemVnum, itemCount)) else: itemVnum, itemCount = eachMaterialText.split(",") itemVnum = int(itemVnum) itemCount = int(itemCount) self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount) materialList[i].append((itemVnum, itemCount)) i = i + 1 itemIndex = itemIndex + 1 self.interface.wndCube.Refresh() except RuntimeError, msg: dbg.TraceError(msg) return 0 pass # END_OF_CUBE # 용혼석 def BINARY_Highlight_Item(self, inven_type, inven_pos): self.interface.Highligt_Item(inven_type, inven_pos) def BINARY_DragonSoulGiveQuilification(self): self.interface.DragonSoulGiveQuilification() def BINARY_DragonSoulRefineWindow_Open(self): self.interface.OpenDragonSoulRefineWindow() def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos): self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos) def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos): self.interface.SucceedDragonSoulRefine(inven_type, inven_pos) # END of DRAGON SOUL REFINE WINDOW def BINARY_SetBigMessage(self, message): self.interface.bigBoard.SetTip(message) def BINARY_SetTipMessage(self, message): self.interface.tipBoard.SetTip(message) def BINARY_AppendNotifyMessage(self, type): if not type in localeInfo.NOTIFY_MESSAGE: return chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.NOTIFY_MESSAGE[type]) def BINARY_Guild_EnterGuildArea(self, areaID): self.interface.BULID_EnterGuildArea(areaID) def BINARY_Guild_ExitGuildArea(self, areaID): self.interface.BULID_ExitGuildArea(areaID) def BINARY_GuildWar_OnSendDeclare(self, guildID): pass def BINARY_GuildWar_OnRecvDeclare(self, guildID, warType): mainCharacterName = player.GetMainCharacterName() masterName = guild.GetGuildMasterName() if mainCharacterName == masterName: self.__GuildWar_OpenAskDialog(guildID, warType) def BINARY_GuildWar_OnRecvPoint(self, gainGuildID, opponentGuildID, point): self.interface.OnRecvGuildWarPoint(gainGuildID, opponentGuildID, point) def BINARY_GuildWar_OnStart(self, guildSelf, guildOpp): self.interface.OnStartGuildWar(guildSelf, guildOpp) def BINARY_GuildWar_OnEnd(self, guildSelf, guildOpp): self.interface.OnEndGuildWar(guildSelf, guildOpp) def BINARY_BettingGuildWar_SetObserverMode(self, isEnable): self.interface.BINARY_SetObserverMode(isEnable) def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount): self.interface.wndMiniMap.UpdateObserverCount(observerCount) def __GuildWar_UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2, observerCount): guildID1 = int(guildID1) guildID2 = int(guildID2) memberCount1 = int(memberCount1) memberCount2 = int(memberCount2) observerCount = int(observerCount) self.interface.UpdateMemberCount(guildID1, memberCount1, guildID2, memberCount2) self.interface.wndMiniMap.UpdateObserverCount(observerCount) def __GuildWar_OpenAskDialog(self, guildID, warType): guildName = guild.GetGuildName(guildID) # REMOVED_GUILD_BUG_FIX if "Noname" == guildName: return # END_OF_REMOVED_GUILD_BUG_FIX import uiGuild questionDialog = uiGuild.AcceptGuildWarDialog() questionDialog.SAFE_SetAcceptEvent(self.__GuildWar_OnAccept) questionDialog.SAFE_SetCancelEvent(self.__GuildWar_OnDecline) questionDialog.Open(guildName, warType) self.guildWarQuestionDialog = questionDialog def __GuildWar_CloseAskDialog(self): self.guildWarQuestionDialog.Close() self.guildWarQuestionDialog = None def __GuildWar_OnAccept(self): guildName = self.guildWarQuestionDialog.GetGuildName() net.SendChatPacket("/war " + guildName) self.__GuildWar_CloseAskDialog() return 1 def __GuildWar_OnDecline(self): guildName = self.guildWarQuestionDialog.GetGuildName() net.SendChatPacket("/nowar " + guildName) self.__GuildWar_CloseAskDialog() return 1 ## BINARY CALLBACK ###################################################################################### def __ServerCommand_Build(self): serverCommandList={ "ConsoleEnable" : self.__Console_Enable, "DayMode" : self.__DayMode_Update, "PRESERVE_DayMode" : self.__PRESERVE_DayMode_Update, "CloseRestartWindow" : self.__RestartDialog_Close, "OpenPrivateShop" : self.__PrivateShop_Open, "PartyHealReady" : self.PartyHealReady, "ShowMeSafeboxPassword" : self.AskSafeboxPassword, "CloseSafebox" : self.CommandCloseSafebox, # ITEM_MALL "CloseMall" : self.CommandCloseMall, "ShowMeMallPassword" : self.AskMallPassword, "item_mall" : self.__ItemMall_Open, # END_OF_ITEM_MALL "RefineSuceeded" : self.RefineSuceededMessage, "RefineFailed" : self.RefineFailedMessage, "xmas_snow" : self.__XMasSnow_Enable, "xmas_boom" : self.__XMasBoom_Enable, "xmas_song" : self.__XMasSong_Enable, "xmas_tree" : self.__XMasTree_Enable, "newyear_boom" : self.__XMasBoom_Enable, "PartyRequest" : self.__PartyRequestQuestion, "PartyRequestDenied" : self.__PartyRequestDenied, "horse_state" : self.__Horse_UpdateState, "hide_horse_state" : self.__Horse_HideState, "WarUC" : self.__GuildWar_UpdateMemberCount, "test_server" : self.__EnableTestServerFlag, "mall" : self.__InGameShop_Show, # WEDDING "lover_login" : self.__LoginLover, "lover_logout" : self.__LogoutLover, "lover_near" : self.__LoverNear, "lover_far" : self.__LoverFar, "lover_divorce" : self.__LoverDivorce, "PlayMusic" : self.__PlayMusic, # END_OF_WEDDING # PRIVATE_SHOP_PRICE_LIST "MyShopPriceList" : self.__PrivateShop_PriceList, # END_OF_PRIVATE_SHOP_PRICE_LIST } self.serverCommander=stringCommander.Analyzer() for serverCommandItem in serverCommandList.items(): self.serverCommander.SAFE_RegisterCallBack( serverCommandItem[0], serverCommandItem[1] ) def BINARY_ServerCommand_Run(self, line): #dbg.TraceError(line) try: #print " BINARY_ServerCommand_Run", line return self.serverCommander.Run(line) except RuntimeError, msg: dbg.TraceError(msg) return 0 def __ProcessPreservedServerCommand(self): try: command = net.GetPreservedServerCommand() while command: print " __ProcessPreservedServerCommand", command self.serverCommander.Run(command) command = net.GetPreservedServerCommand() except RuntimeError, msg: dbg.TraceError(msg) return 0 def PartyHealReady(self): self.interface.PartyHealReady() def AskSafeboxPassword(self): self.interface.AskSafeboxPassword() # ITEM_MALL def AskMallPassword(self): self.interface.AskMallPassword() def __ItemMall_Open(self): self.interface.OpenItemMall(); def CommandCloseMall(self): self.interface.CommandCloseMall() # END_OF_ITEM_MALL def RefineSuceededMessage(self): snd.PlaySound("sound/ui/make_soket.wav") self.PopupMessage(localeInfo.REFINE_SUCCESS) def RefineFailedMessage(self): snd.PlaySound("sound/ui/jaeryun_fail.wav") self.PopupMessage(localeInfo.REFINE_FAILURE) def CommandCloseSafebox(self): self.interface.CommandCloseSafebox() # PRIVATE_SHOP_PRICE_LIST def __PrivateShop_PriceList(self, itemVNum, itemPrice): uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice) # END_OF_PRIVATE_SHOP_PRICE_LIST def __Horse_HideState(self): self.affectShower.SetHorseState(0, 0, 0) def __Horse_UpdateState(self, level, health, battery): self.affectShower.SetHorseState(int(level), int(health), int(battery)) def __IsXMasMap(self): mapDict = ( "metin2_map_n_flame_01", "metin2_map_n_desert_01", "metin2_map_spiderdungeon", "metin2_map_deviltower1", ) if background.GetCurrentMapName() in mapDict: return FALSE return TRUE def __XMasSnow_Enable(self, mode): self.__XMasSong_Enable(mode) if "1"==mode: if not self.__IsXMasMap(): return print "XMAS_SNOW ON" background.EnableSnow(1) else: print "XMAS_SNOW OFF" background.EnableSnow(0) def __XMasBoom_Enable(self, mode): if "1"==mode: if not self.__IsXMasMap(): return print "XMAS_BOOM ON" self.__DayMode_Update("dark") self.enableXMasBoom = TRUE self.startTimeXMasBoom = app.GetTime() else: print "XMAS_BOOM OFF" self.__DayMode_Update("light") self.enableXMasBoom = FALSE def __XMasTree_Enable(self, grade): print "XMAS_TREE ", grade background.SetXMasTree(int(grade)) def __XMasSong_Enable(self, mode): if "1"==mode: print "XMAS_SONG ON" XMAS_BGM = "xmas.mp3" if app.IsExistFile("BGM/" + XMAS_BGM)==1: if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=XMAS_BGM snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) else: print "XMAS_SONG OFF" if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=musicInfo.METIN2THEMA snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) def __RestartDialog_Close(self): self.interface.CloseRestartDialog() def __Console_Enable(self): constInfo.CONSOLE_ENABLE = TRUE self.consoleEnable = TRUE app.EnableSpecialCameraMode() ui.EnablePaste(TRUE) ## PrivateShop def __PrivateShop_Open(self): self.interface.OpenPrivateShopInputNameDialog() def BINARY_PrivateShop_Appear(self, vid, text): self.interface.AppearPrivateShop(vid, text) def BINARY_PrivateShop_Disappear(self, vid): self.interface.DisappearPrivateShop(vid) ## DayMode def __PRESERVE_DayMode_Update(self, mode): if "light"==mode: background.SetEnvironmentData(0) elif "dark"==mode: if not self.__IsXMasMap(): return background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) def __DayMode_Update(self, mode): if "light"==mode: self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToLight) elif "dark"==mode: if not self.__IsXMasMap(): return self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToDark) def __DayMode_OnCompleteChangeToLight(self): background.SetEnvironmentData(0) self.curtain.FadeIn() def __DayMode_OnCompleteChangeToDark(self): background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) self.curtain.FadeIn() ## XMasBoom def __XMasBoom_Update(self): self.BOOM_DATA_LIST = ( (2, 5), (5, 2), (7, 3), (10, 3), (20, 5) ) if self.indexXMasBoom >= len(self.BOOM_DATA_LIST): return boomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0] boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1] if app.GetTime() - self.startTimeXMasBoom > boomTime: self.indexXMasBoom += 1 for i in xrange(boomCount): self.__XMasBoom_Boom() def __XMasBoom_Boom(self): x, y, z = player.GetMainCharacterPosition() randX = app.GetRandom(-150, 150) randY = app.GetRandom(-150, 150) snd.PlaySound3D(x+randX, -y+randY, z, "sound/common/etc/salute.mp3") def __PartyRequestQuestion(self, vid): vid = int(vid) partyRequestQuestionDialog = uiCommon.QuestionDialog() partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + localeInfo.PARTY_DO_YOU_ACCEPT) partyRequestQuestionDialog.SetAcceptText(localeInfo.UI_ACCEPT) partyRequestQuestionDialog.SetCancelText(localeInfo.UI_DENY) partyRequestQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.__AnswerPartyRequest(arg)) partyRequestQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.__AnswerPartyRequest(arg)) partyRequestQuestionDialog.Open() partyRequestQuestionDialog.vid = vid self.partyRequestQuestionDialog = partyRequestQuestionDialog def __AnswerPartyRequest(self, answer): if not self.partyRequestQuestionDialog: return vid = self.partyRequestQuestionDialog.vid if answer: net.SendChatPacket("/party_request_accept " + str(vid)) else: net.SendChatPacket("/party_request_deny " + str(vid)) self.partyRequestQuestionDialog.Close() self.partyRequestQuestionDialog = None def __PartyRequestDenied(self): self.PopupMessage(localeInfo.PARTY_REQUEST_DENIED) def __EnableTestServerFlag(self): app.EnableTestServerFlag() def __InGameShop_Show(self, url): if constInfo.IN_GAME_SHOP_ENABLE: self.interface.OpenWebWindow(url) # WEDDING def __LoginLover(self): if self.interface.wndMessenger: self.interface.wndMessenger.OnLoginLover() def __LogoutLover(self): if self.interface.wndMessenger: self.interface.wndMessenger.OnLogoutLover() if self.affectShower: self.affectShower.HideLoverState() def __LoverNear(self): if self.affectShower: self.affectShower.ShowLoverState() def __LoverFar(self): if self.affectShower: self.affectShower.HideLoverState() def __LoverDivorce(self): if self.interface.wndMessenger: self.interface.wndMessenger.ClearLoverInfo() if self.affectShower: self.affectShower.ClearLoverState() def __PlayMusic(self, flag, filename): flag = int(flag) if flag: snd.FadeOutAllMusic() musicInfo.SaveLastPlayFieldMusic() snd.FadeInMusic("BGM/" + filename) else: snd.FadeOutAllMusic() musicInfo.LoadLastPlayFieldMusic() snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) # END_OF_WEDDING def __toggleSwitchbot(self): if self.switchbot.bot_shown == 1: self.switchbot.Hide() else: self.switchbot.Show() # def __quikeqchange(self): import uifastequip self.uuifastequipDlg = uifastequip.changeequip() self.uuifastequipDlg.Show() # def __BonusPage(self): import PaginaBonusuri global BPisLodaded try: if BPisLodaded == 0: BPisLodaded = 1 exec 'PaginaBonusuri.BonusBoardDialog().Show()' else: exec 'PaginaBonusuri.BonusBoardDialog().Hide()' BPisLodaded = 0 except ImportError: import dbg,app dbg.Trace('PaginaBonusuri.py Importing error') app.Abort
uitaskbar.py
Spoilerimport ui import net import item import skill import localeInfo import wndMgr import player import constInfo import mouseModule import uiScriptLocale import app MOUSE_SETTINGS = [0, 0] def InitMouseButtonSettings(left, right): global MOUSE_SETTINGS MOUSE_SETTINGS = [left, right] def SetMouseButtonSetting(dir, event): global MOUSE_SETTINGS MOUSE_SETTINGS[dir] = event def GetMouseButtonSettings(): global MOUSE_SETTINGS return MOUSE_SETTINGS def SaveMouseButtonSettings(): global MOUSE_SETTINGS open("mouse.cfg", "w").write("%s\t%s" % tuple(MOUSE_SETTINGS)) def LoadMouseButtonSettings(): global MOUSE_SETTINGS tokens = open("mouse.cfg", "r").read().split() if len(tokens) != 2: raise RuntimeError, "MOUSE_SETTINGS_FILE_ERROR" MOUSE_SETTINGS[0] = int(tokens[0]) MOUSE_SETTINGS[1] = int(tokens[1]) def unsigned32(n): return n & 0xFFFFFFFFL #-------------------Giftbox Begin------------------------------ class GiftBox(ui.ScriptWindow): class TextToolTip(ui.Window): def __init__(self): ui.Window.__init__(self, "TOP_MOST") self.SetWindowName("GiftBox") textLine = ui.TextLine() textLine.SetParent(self) textLine.SetHorizontalAlignCenter() textLine.SetOutline() textLine.Show() self.textLine = textLine def __del__(self): ui.Window.__del__(self) def SetText(self, text): self.textLine.SetText(text) def OnRender(self): (mouseX, mouseY) = wndMgr.GetMousePosition() self.textLine.SetPosition(mouseX, mouseY - 15) def __init__(self): #print "NEW TASKBAR ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) self.tooltipGift = self.TextToolTip() self.tooltipGift.Show() def __del__(self): #print "---------------------------------------------------------------------------- DELETE TASKBAR" ui.ScriptWindow.__del__(self) def LoadWindow(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "giftbox.py") except: import exception exception.Abort("GiftBox.LoadWindow.LoadObject") self.giftBoxIcon = self.GetChild("GiftBox_Icon") self.giftBoxToolTip = self.GetChild("GiftBox_ToolTip") def Destroy(self): self.giftBoxIcon = 0 self.giftBoxToolTip = 0 #-------------------Giftbox End------------------------------ class EnergyBar(ui.ScriptWindow): class TextToolTip(ui.Window): def __init__(self): ui.Window.__init__(self, "TOP_MOST") self.SetWindowName("EnergyBar") textLine = ui.TextLine() textLine.SetParent(self) textLine.SetHorizontalAlignCenter() textLine.SetOutline() textLine.Show() self.textLine = textLine def __del__(self): ui.Window.__del__(self) def SetText(self, text): self.textLine.SetText(text) def OnRender(self): (mouseX, mouseY) = wndMgr.GetMousePosition() self.textLine.SetPosition(mouseX, mouseY - 15) def __init__(self): #print "NEW TASKBAR ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) self.tooltipEnergy = self.TextToolTip() self.tooltipEnergy.Show() def __del__(self): #print "---------------------------------------------------------------------------- DELETE TASKBAR" ui.ScriptWindow.__del__(self) def LoadWindow(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "EnergyBar.py") except: import exception exception.Abort("EnergyBar.LoadWindow.LoadObject") self.energyEmpty = self.GetChild("EnergyGauge_Empty") self.energyHungry = self.GetChild("EnergyGauge_Hungry") self.energyFull = self.GetChild("EnergyGauge_Full") self.energyGaugeBoard = self.GetChild("EnergyGauge_Board") self.energyGaugeToolTip = self.GetChild("EnergyGauge_ToolTip") def Destroy(self): self.energyEmpty = None self.energyHungry = None self.energyFull = None self.energyGaugeBoard = 0 self.energyGaugeToolTip = 0 self.tooltipEnergy = 0 ## Gauge def RefreshStatus(self): pointEnergy = player.GetStatus (player.ENERGY) leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp() # 충기환 지속 시간 = 2시간. self.SetEnergy (pointEnergy, leftTimeEnergy, 7200) def SetEnergy (self, point, leftTime, maxTime): leftTime = max (leftTime, 0) maxTime = max (maxTime, 0) self.energyEmpty.Hide() self.energyHungry.Hide() self.energyFull.Hide() if leftTime == 0: self.energyEmpty.Show() elif ((leftTime * 100) / maxTime) < 15: self.energyHungry.Show() else: self.energyFull.Show() self.tooltipEnergy.SetText("%s" % (localeInfo.TOOLTIP_ENERGY(point))) def OnUpdate(self): if TRUE == self.energyGaugeToolTip.IsIn(): self.RefreshStatus() self.tooltipEnergy.Show() else: self.tooltipEnergy.Hide() class ExpandedTaskBar(ui.ScriptWindow): BUTTON_DRAGON_SOUL = 0 def __init__(self): ui.Window.__init__(self) self.SetWindowName("ExpandedTaskBar") def LoadWindow(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "ExpandedTaskBar.py") except: import exception exception.Abort("ExpandedTaskBar.LoadWindow.LoadObject") self.expandedTaskBarBoard = self.GetChild("ExpanedTaskBar_Board") self.toggleButtonDict = {} self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL] = self.GetChild("DragonSoulButton") self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL].SetParent(self) def SetTop(self): super(ExpandedTaskBar, self).SetTop() for button in self.toggleButtonDict.values(): button.SetTop() def Show(self): ui.ScriptWindow.Show(self) def Close(self): self.Hide() def SetToolTipText(self, eButton, text): self.toggleButtonDict[eButton].SetToolTipText(text) def SetToggleButtonEvent(self, eButton, kEventFunc): self.toggleButtonDict[eButton].SetEvent(kEventFunc) def OnPressEscapeKey(self): self.Close() return TRUE class TaskBar(ui.ScriptWindow): BUTTON_CHARACTER = 0 BUTTON_INVENTORY = 1 BUTTON_MESSENGER = 2 BUTTON_SYSTEM = 3 BUTTON_CHAT = 4 BUTTON_VECTORS = 5 BUTTON_EXPAND = 4 IS_EXPANDED = FALSE MOUSE_BUTTON_LEFT = 0 MOUSE_BUTTON_RIGHT = 1 NONE = 255 EVENT_MOVE = 0 EVENT_ATTACK = 1 EVENT_MOVE_AND_ATTACK = 2 EVENT_CAMERA = 3 EVENT_SKILL = 4 EVENT_AUTO = 5 GAUGE_WIDTH = 95 GAUGE_HEIGHT = 13 QUICKPAGE_NUMBER_FILENAME = [ "d:/ymir work/ui/game/taskbar/1.sub", "d:/ymir work/ui/game/taskbar/2.sub", "d:/ymir work/ui/game/taskbar/3.sub", "d:/ymir work/ui/game/taskbar/4.sub", ] #gift icon show and hide def ShowGift(self): if not localeInfo.IsBRAZIL(): self.wndGiftBox.Show() def HideGift(self): self.wndGiftBox.Hide() class TextToolTip(ui.Window): def __init__(self): ui.Window.__init__(self, "TOP_MOST") textLine = ui.TextLine() textLine.SetParent(self) textLine.SetHorizontalAlignCenter() textLine.SetOutline() textLine.Show() self.textLine = textLine def __del__(self): ui.Window.__del__(self) def SetText(self, text): self.textLine.SetText(text) def OnRender(self): (mouseX, mouseY) = wndMgr.GetMousePosition() self.textLine.SetPosition(mouseX, mouseY - 15) class SkillButton(ui.SlotWindow): def __init__(self): ui.SlotWindow.__init__(self) self.event = 0 self.arg = 0 self.slotIndex = 0 self.skillIndex = 0 slotIndex = 0 wndMgr.SetSlotBaseImage(self.hWnd, "d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0) wndMgr.AppendSlot(self.hWnd, slotIndex, 0, 0, 32, 32) self.SetCoverButton(slotIndex, "d:/ymir work/ui/public/slot_cover_button_01.sub",\ "d:/ymir work/ui/public/slot_cover_button_02.sub",\ "d:/ymir work/ui/public/slot_cover_button_03.sub",\ "d:/ymir work/ui/public/slot_cover_button_04.sub", TRUE, FALSE) self.SetSize(32, 32) def __del__(self): ui.SlotWindow.__del__(self) def Destroy(self): if 0 != self.tooltipSkill: self.tooltipSkill.HideToolTip() def RefreshSkill(self): if 0 != self.slotIndex: self.SetSkill(self.slotIndex) def SetSkillToolTip(self, tooltip): self.tooltipSkill = tooltip def SetSkill(self, skillSlotNumber): slotNumber = 0 skillIndex = player.GetSkillIndex(skillSlotNumber) skillGrade = player.GetSkillGrade(skillSlotNumber) skillLevel = player.GetSkillLevel(skillSlotNumber) skillType = skill.GetSkillType(skillIndex) self.skillIndex = skillIndex if 0 == self.skillIndex: self.ClearSlot(slotNumber) return self.slotIndex = skillSlotNumber self.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel) self.SetSlotCountNew(slotNumber, skillGrade, skillLevel) ## NOTE : CoolTime 체크 if player.IsSkillCoolTime(skillSlotNumber): (coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber) self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime) ## NOTE : Activate 되어 있다면 아이콘도 업데이트 if player.IsSkillActive(skillSlotNumber): self.ActivateSlot(slotNumber) def SetSkillEvent(self, event, arg=0): self.event = event self.arg = arg def GetSkillIndex(self): return self.skillIndex def GetSlotIndex(self): return self.slotIndex def Activate(self, coolTime): self.SetSlotCoolTime(0, coolTime) if skill.IsToggleSkill(self.skillIndex): self.ActivateSlot(0) def Deactivate(self): if skill.IsToggleSkill(self.skillIndex): self.DeactivateSlot(0) def OnOverInItem(self, dummy): self.tooltipSkill.SetSkill(self.skillIndex) def OnOverOutItem(self): self.tooltipSkill.HideToolTip() def OnSelectItemSlot(self, dummy): if 0 != self.event: if 0 != self.arg: self.event(self.arg) else: self.event() def __init__(self): #print "NEW TASKBAR ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self, "TOP_MOST") self.quickPageNumImageBox = None self.tooltipItem = 0 self.tooltipSkill = 0 self.mouseModeButtonList = [ ui.ScriptWindow("TOP_MOST"), ui.ScriptWindow("TOP_MOST") ] self.tooltipHP = self.TextToolTip() self.tooltipHP.Show() self.tooltipSP = self.TextToolTip() self.tooltipSP.Show() self.tooltipST = self.TextToolTip() self.tooltipST.Show() self.tooltipEXP = self.TextToolTip() self.tooltipEXP.Show() self.skillCategoryNameList = [ "ACTIVE_1", "ACTIVE_2", "ACTIVE_3" ] self.skillPageStartSlotIndexDict = { "ACTIVE_1" : 1, "ACTIVE_2" : 21, "ACTIVE_3" : 41, } self.selectSkillButtonList = [] self.lastUpdateQuickSlot = 0 self.SetWindowName("TaskBar") def __del__(self): #print "---------------------------------------------------------------------------- DELETE TASKBAR" ui.ScriptWindow.__del__(self) def LoadWindow(self): try: pyScrLoader = ui.PythonScriptLoader() if constInfo.IN_GAME_SHOP_ENABLE: pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "TaskBar.py") else: pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py") pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT], "UIScript/MouseButtonWindow.py") pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT], "UIScript/RightMouseButtonWindow.py") except: import exception exception.Abort("TaskBar.LoadWindow.LoadObject") self.quickslot = [] self.quickslot.append(self.GetChild("quick_slot_1")) self.quickslot.append(self.GetChild("quick_slot_2")) for slot in self.quickslot: slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE) slot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyQuickSlot)) slot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemQuickSlot)) slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UnselectItemQuickSlot)) slot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) slot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) toggleButtonDict = {} toggleButtonDict[TaskBar.BUTTON_CHARACTER]=self.GetChild("CharacterButton") toggleButtonDict[TaskBar.BUTTON_VECTORS]=self.GetChild("VectorsEfsunButton") toggleButtonDict[TaskBar.BUTTON_INVENTORY]=self.GetChild("InventoryButton") toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton") toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton") # ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다. try: toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton") except: toggleButtonDict[TaskBar.BUTTON_EXPAND]=self.GetChild("ExpandButton") TaskBar.IS_EXPANDED = TRUE if localeInfo.IsARABIC(): systemButton = toggleButtonDict[TaskBar.BUTTON_SYSTEM] if systemButton.ToolTipText: tx, ty = systemButton.ToolTipText.GetLocalPosition() tw = systemButton.ToolTipText.GetWidth() systemButton.ToolTipText.SetPosition(-tw/2, ty) expGauge = [] expGauge.append(self.GetChild("EXPGauge_01")) expGauge.append(self.GetChild("EXPGauge_02")) expGauge.append(self.GetChild("EXPGauge_03")) expGauge.append(self.GetChild("EXPGauge_04")) for exp in expGauge: exp.SetSize(0, 0) self.quickPageNumImageBox=self.GetChild("QuickPageNumber") self.GetChild("QuickPageUpButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageUpButton)) self.GetChild("QuickPageDownButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageDownButton)) mouseLeftButtonModeButton = self.GetChild("LeftMouseButton") mouseRightButtonModeButton = self.GetChild("RightMouseButton") mouseLeftButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleLeftMouseButtonModeWindow)) mouseRightButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow)) self.curMouseModeButton = [ mouseLeftButtonModeButton, mouseRightButtonModeButton ] (xLocalRight, yLocalRight) = mouseRightButtonModeButton.GetLocalPosition() self.curSkillButton = self.SkillButton() self.curSkillButton.SetParent(self) self.curSkillButton.SetPosition(xLocalRight, 3) self.curSkillButton.SetSkillEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow)) self.curSkillButton.Hide() (xLeft, yLeft) = mouseLeftButtonModeButton.GetGlobalPosition() (xRight, yRight) = mouseRightButtonModeButton.GetGlobalPosition() leftModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT] leftModeButtonList.SetPosition(xLeft, yLeft - leftModeButtonList.GetHeight()-5) rightModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT] rightModeButtonList.SetPosition(xRight - rightModeButtonList.GetWidth() + 32, yRight - rightModeButtonList.GetHeight()-5) rightModeButtonList.GetChild("button_skill").SetEvent(lambda adir=self.MOUSE_BUTTON_RIGHT, aevent=self.EVENT_SKILL: self.SelectMouseButtonEvent(adir, aevent)) rightModeButtonList.GetChild("button_skill").Hide() mouseImage = ui.ImageBox("TOP_MOST") mouseImage.AddFlag("float") mouseImage.LoadImage("d:/ymir work/ui/game/taskbar/mouse_button_camera_01.sub") mouseImage.SetPosition(xRight, wndMgr.GetScreenHeight() - 34) mouseImage.Hide() self.mouseImage = mouseImage dir = self.MOUSE_BUTTON_LEFT wnd = self.mouseModeButtonList[dir] wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent)) wnd.GetChild("button_auto_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_AUTO: self.SelectMouseButtonEvent(adir, aevent)) wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent)) dir = self.MOUSE_BUTTON_RIGHT wnd = self.mouseModeButtonList[dir] wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent)) wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent)) self.toggleButtonDict = toggleButtonDict self.expGauge = expGauge if constInfo.IN_GAME_SHOP_ENABLE: self.rampageGauge1 = self.GetChild("RampageGauge") self.rampageGauge1.OnMouseOverIn = ui.__mem_func__(self.__RampageGauge_OverIn) self.rampageGauge2 = self.GetChild("RampageGauge2") self.rampageGauge2.OnMouseOverOut = ui.__mem_func__(self.__RampageGauge_OverOut) self.rampageGauge2.OnMouseLeftButtonUp = ui.__mem_func__(self.__RampageGauge_Click) print "[DEBUG]: constInfo.IN_GAME_SHOP_ENABLE / self.rampageGauge1",constInfo.IN_GAME_SHOP_ENABLE, self.rampageGauge1 self.__RampageGauge_OverOut() self.hpGauge = self.GetChild("HPGauge") self.mpGauge = self.GetChild("SPGauge") self.stGauge = self.GetChild("STGauge") self.hpRecoveryGaugeBar = self.GetChild("HPRecoveryGaugeBar") self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar") self.hpGaugeBoard=self.GetChild("HPGauge_Board") self.mpGaugeBoard=self.GetChild("SPGauge_Board") self.stGaugeBoard=self.GetChild("STGauge_Board") self.expGaugeBoard=self.GetChild("EXP_Gauge_Board") #giftbox object wndGiftBox = GiftBox() wndGiftBox.LoadWindow() self.wndGiftBox = wndGiftBox self.__LoadMouseSettings() self.RefreshStatus() self.RefreshQuickSlot() def __RampageGauge_OverIn(self): print "rampage_over_in" self.rampageGauge2.Show() self.rampageGauge1.Hide() def __RampageGauge_OverOut(self): print "rampage_over_out" self.rampageGauge2.Hide() self.rampageGauge1.Show() def __RampageGauge_Click(self): print "rampage_up" net.SendChatPacket("/in_game_mall") # gift icon hide when click mall icon self.wndGiftBox.Hide() def __LoadMouseSettings(self): try: LoadMouseButtonSettings() (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings() if not self.__IsInSafeMouseButtonSettingRange(mouseLeftButtonEvent) or not self.__IsInSafeMouseButtonSettingRange(mouseRightButtonEvent): raise RuntimeError, "INVALID_MOUSE_BUTTON_SETTINGS" except: InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA) (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings() try: self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT, mouseLeftButtonEvent) self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT, mouseRightButtonEvent) except: InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA) (mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings() self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT, mouseLeftButtonEvent) self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT, mouseRightButtonEvent) def __IsInSafeMouseButtonSettingRange(self, arg): return arg >= self.EVENT_MOVE and arg <= self.EVENT_AUTO def Destroy(self): SaveMouseButtonSettings() self.ClearDictionary() self.mouseModeButtonList[0].ClearDictionary() self.mouseModeButtonList[1].ClearDictionary() self.mouseModeButtonList = 0 self.curMouseModeButton = 0 self.curSkillButton = 0 self.selectSkillButtonList = 0 self.expGauge = None self.hpGauge = None self.mpGauge = None self.stGauge = None self.hpRecoveryGaugeBar = None self.spRecoveryGaugeBar = None self.tooltipItem = 0 self.tooltipSkill = 0 self.quickslot = 0 self.toggleButtonDict = 0 self.hpGaugeBoard = 0 self.mpGaugeBoard = 0 self.stGaugeBoard = 0 self.expGaugeBoard = 0 self.tooltipHP = 0 self.tooltipSP = 0 self.tooltipST = 0 self.tooltipEXP = 0 self.mouseImage = None def __OnClickQuickPageUpButton(self): player.SetQuickPage(player.GetQuickPage()-1) def __OnClickQuickPageDownButton(self): player.SetQuickPage(player.GetQuickPage()+1) def SetToggleButtonEvent(self, eButton, kEventFunc): self.toggleButtonDict[eButton].SetEvent(kEventFunc) def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem def SetSkillToolTip(self, tooltipSkill): self.tooltipSkill = tooltipSkill self.curSkillButton.SetSkillToolTip(self.tooltipSkill) ## Mouse Image def ShowMouseImage(self): self.mouseImage.SetTop() self.mouseImage.Show() def HideMouseImage(self): player.SetQuickCameraMode(FALSE) self.mouseImage.Hide() ## Gauge def RefreshStatus(self): curHP = player.GetStatus(player.HP) maxHP = player.GetStatus(player.MAX_HP) curSP = player.GetStatus(player.SP) maxSP = player.GetStatus(player.MAX_SP) curEXP = unsigned32(player.GetStatus(player.EXP)) nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP)) recoveryHP = player.GetStatus(player.HP_RECOVERY) recoverySP = player.GetStatus(player.SP_RECOVERY) self.RefreshStamina() self.SetHP(curHP, recoveryHP, maxHP) self.SetSP(curSP, recoverySP, maxSP) self.SetExperience(curEXP, nextEXP) def RefreshStamina(self): curST = player.GetStatus(player.STAMINA) maxST = player.GetStatus(player.MAX_STAMINA) self.SetST(curST, maxST) def RefreshSkill(self): self.curSkillButton.RefreshSkill() for button in self.selectSkillButtonList: button.RefreshSkill() def SetHP(self, curPoint, recoveryPoint, maxPoint): curPoint = min(curPoint, maxPoint) if maxPoint > 0: self.hpGauge.SetPercentage(curPoint, maxPoint) self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint)) if 0 == recoveryPoint: self.hpRecoveryGaugeBar.Hide() else: destPoint = min(maxPoint, curPoint + recoveryPoint) newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint))) self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT) self.hpRecoveryGaugeBar.Show() def SetSP(self, curPoint, recoveryPoint, maxPoint): curPoint = min(curPoint, maxPoint) if maxPoint > 0: self.mpGauge.SetPercentage(curPoint, maxPoint) self.tooltipSP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_SP, curPoint, maxPoint)) if 0 == recoveryPoint: self.spRecoveryGaugeBar.Hide() else: destPoint = min(maxPoint, curPoint + recoveryPoint) newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint))) self.spRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT) self.spRecoveryGaugeBar.Show() def SetST(self, curPoint, maxPoint): curPoint = min(curPoint, maxPoint) if maxPoint > 0: self.stGauge.SetPercentage(curPoint, maxPoint) self.tooltipST.SetText("%s : %d / %d" % (localeInfo.TASKBAR_ST, curPoint, maxPoint)) def SetExperience(self, curPoint, maxPoint): curPoint = min(curPoint, maxPoint) curPoint = max(curPoint, 0) maxPoint = max(maxPoint, 0) quarterPoint = maxPoint / 4 FullCount = 0 if 0 != quarterPoint: FullCount = min(4, curPoint / quarterPoint) for i in xrange(4): self.expGauge[i].Hide() for i in xrange(FullCount): self.expGauge[i].SetRenderingRect(0.0, 0.0, 0.0, 0.0) self.expGauge[i].Show() if 0 != quarterPoint: if FullCount < 4: Percentage = float(curPoint % quarterPoint) / quarterPoint - 1.0 self.expGauge[FullCount].SetRenderingRect(0.0, Percentage, 0.0, 0.0) self.expGauge[FullCount].Show() ##### self.tooltipEXP.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curPoint) / max(1, float(maxPoint)) * 100)) ## QuickSlot def RefreshQuickSlot(self): pageNum = player.GetQuickPage() try: self.quickPageNumImageBox.LoadImage(TaskBar.QUICKPAGE_NUMBER_FILENAME[pageNum]) except: pass startNumber = 0 for slot in self.quickslot: for i in xrange(4): slotNumber = i+startNumber (Type, Position) = player.GetLocalQuickSlot(slotNumber) if player.SLOT_TYPE_NONE == Type: slot.ClearSlot(slotNumber) continue if player.SLOT_TYPE_INVENTORY == Type: itemIndex = player.GetItemIndex(Position) itemCount = player.GetItemCount(Position) if itemCount <= 1: itemCount = 0 ## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo] if constInfo.IS_AUTO_POTION(itemIndex): # metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량 metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)] if 0 != int(metinSocket[0]): slot.ActivateSlot(slotNumber) else: slot.DeactivateSlot(slotNumber) slot.SetItemSlot(slotNumber, itemIndex, itemCount) elif player.SLOT_TYPE_SKILL == Type: skillIndex = player.GetSkillIndex(Position) if 0 == skillIndex: slot.ClearSlot(slotNumber) continue skillType = skill.GetSkillType(skillIndex) if skill.SKILL_TYPE_GUILD == skillType: import guild skillGrade = 0 skillLevel = guild.GetSkillLevel(Position) else: skillGrade = player.GetSkillGrade(Position) skillLevel = player.GetSkillLevel(Position) slot.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel) slot.SetSlotCountNew(slotNumber, skillGrade, skillLevel) slot.SetCoverButton(slotNumber) ## NOTE : CoolTime 체크 if player.IsSkillCoolTime(Position): (coolTime, elapsedTime) = player.GetSkillCoolTime(Position) slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime) ## NOTE : Activate 되어 있다면 아이콘도 업데이트 if player.IsSkillActive(Position): slot.ActivateSlot(slotNumber) elif player.SLOT_TYPE_EMOTION == Type: emotionIndex = Position slot.SetEmotionSlot(slotNumber, emotionIndex) slot.SetCoverButton(slotNumber) slot.SetSlotCount(slotNumber, 0) slot.RefreshSlot() startNumber += 4 def canAddQuickSlot(self, Type, slotNumber): if player.SLOT_TYPE_INVENTORY == Type: itemIndex = player.GetItemIndex(slotNumber) return item.CanAddToQuickSlotItem(itemIndex) return TRUE def AddQuickSlot(self, localSlotIndex): AttachedSlotType = mouseModule.mouseController.GetAttachedType() AttachedSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber() AttachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex() if player.SLOT_TYPE_QUICK_SLOT == AttachedSlotType: player.RequestMoveGlobalQuickSlotToLocalQuickSlot(AttachedSlotNumber, localSlotIndex) elif player.SLOT_TYPE_EMOTION == AttachedSlotType: player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedItemIndex) elif TRUE == self.canAddQuickSlot(AttachedSlotType, AttachedSlotNumber): ## Online Code player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedSlotNumber) mouseModule.mouseController.DeattachObject() self.RefreshQuickSlot() def SelectEmptyQuickSlot(self, slotIndex): if TRUE == mouseModule.mouseController.isAttached(): self.AddQuickSlot(slotIndex) def SelectItemQuickSlot(self, localQuickSlotIndex): if TRUE == mouseModule.mouseController.isAttached(): self.AddQuickSlot(localQuickSlotIndex) else: globalQuickSlotIndex=player.LocalQuickSlotIndexToGlobalQuickSlotIndex(localQuickSlotIndex) mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_QUICK_SLOT, globalQuickSlotIndex, globalQuickSlotIndex) def UnselectItemQuickSlot(self, localSlotIndex): if FALSE == mouseModule.mouseController.isAttached(): player.RequestUseLocalQuickSlot(localSlotIndex) return elif mouseModule.mouseController.isAttached(): mouseModule.mouseController.DeattachObject() return def OnUseSkill(self, usedSlotIndex, coolTime): QUICK_SLOT_SLOT_COUNT = 4 slotIndex = 0 ## Current Skill Button if usedSlotIndex == self.curSkillButton.GetSlotIndex(): self.curSkillButton.Activate(coolTime) ## Quick Slot for slotWindow in self.quickslot: for i in xrange(QUICK_SLOT_SLOT_COUNT): (Type, Position) = player.GetLocalQuickSlot(slotIndex) if Type == player.SLOT_TYPE_SKILL: if usedSlotIndex == Position: slotWindow.SetSlotCoolTime(slotIndex, coolTime) return slotIndex += 1 def OnActivateSkill(self, usedSlotIndex): slotIndex = 0 ## Current Skill Button if usedSlotIndex == self.curSkillButton.GetSlotIndex(): self.curSkillButton.Deactivate() ## Quick Slot for slotWindow in self.quickslot: for i in xrange(4): (Type, Position) = player.GetLocalQuickSlot(slotIndex) if Type == player.SLOT_TYPE_SKILL: if usedSlotIndex == Position: slotWindow.ActivateSlot(slotIndex) return slotIndex += 1 def OnDeactivateSkill(self, usedSlotIndex): slotIndex = 0 ## Current Skill Button if usedSlotIndex == self.curSkillButton.GetSlotIndex(): self.curSkillButton.Deactivate() ## Quick Slot for slotWindow in self.quickslot: for i in xrange(4): (Type, Position) = player.GetLocalQuickSlot(slotIndex) if Type == player.SLOT_TYPE_SKILL: if usedSlotIndex == Position: slotWindow.DeactivateSlot(slotIndex) return slotIndex += 1 ## ToolTip def OverInItem(self, slotNumber): if mouseModule.mouseController.isAttached(): return (Type, Position) = player.GetLocalQuickSlot(slotNumber) if player.SLOT_TYPE_INVENTORY == Type: self.tooltipItem.SetInventoryItem(Position) self.tooltipSkill.HideToolTip() elif player.SLOT_TYPE_SKILL == Type: skillIndex = player.GetSkillIndex(Position) skillType = skill.GetSkillType(skillIndex) if skill.SKILL_TYPE_GUILD == skillType: import guild skillGrade = 0 skillLevel = guild.GetSkillLevel(Position) else: skillGrade = player.GetSkillGrade(Position) skillLevel = player.GetSkillLevel(Position) self.tooltipSkill.SetSkillNew(Position, skillIndex, skillGrade, skillLevel) self.tooltipItem.HideToolTip() def OverOutItem(self): if 0 != self.tooltipItem: self.tooltipItem.HideToolTip() if 0 != self.tooltipSkill: self.tooltipSkill.HideToolTip() def OnUpdate(self): if app.GetGlobalTime() - self.lastUpdateQuickSlot > 500: self.lastUpdateQuickSlot = app.GetGlobalTime() self.RefreshQuickSlot() if TRUE == self.hpGaugeBoard.IsIn(): self.tooltipHP.Show() else: self.tooltipHP.Hide() if TRUE == self.mpGaugeBoard.IsIn(): self.tooltipSP.Show() else: self.tooltipSP.Hide() if TRUE == self.stGaugeBoard.IsIn(): self.tooltipST.Show() else: self.tooltipST.Hide() if TRUE == self.expGaugeBoard.IsIn(): self.tooltipEXP.Show() else: self.tooltipEXP.Hide() ## Skill def ToggleLeftMouseButtonModeWindow(self): wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT] if TRUE == wndMouseButtonMode.IsShow(): wndMouseButtonMode.Hide() else: wndMouseButtonMode.Show() def ToggleRightMouseButtonModeWindow(self): wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT] if TRUE == wndMouseButtonMode.IsShow(): wndMouseButtonMode.Hide() self.CloseSelectSkill() else: wndMouseButtonMode.Show() self.OpenSelectSkill() def OpenSelectSkill(self): PAGE_SLOT_COUNT = 6 (xSkillButton, y) = self.curSkillButton.GetGlobalPosition() y -= (37 + 32 + 1) for key in self.skillCategoryNameList: appendCount = 0 startNumber = self.skillPageStartSlotIndexDict[key] x = xSkillButton getSkillIndex=player.GetSkillIndex getSkillLevel=player.GetSkillLevel for i in xrange(PAGE_SLOT_COUNT): skillIndex = getSkillIndex(startNumber+i) skillLevel = getSkillLevel(startNumber+i) if 0 == skillIndex: continue if 0 == skillLevel: continue if skill.IsStandingSkill(skillIndex): continue ## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다. ## 이 부분은 시간을 나면 고치도록. - [levites] skillButton = self.SkillButton() skillButton.SetSkill(startNumber+i) skillButton.SetPosition(x, y) skillButton.SetSkillEvent(ui.__mem_func__(self.CloseSelectSkill), startNumber+i+1) skillButton.SetSkillToolTip(self.tooltipSkill) skillButton.SetTop() skillButton.Show() self.selectSkillButtonList.append(skillButton) appendCount += 1 x -= 32 if appendCount > 0: y -= 32 def CloseSelectSkill(self, slotIndex=-1): self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT].Hide() for button in self.selectSkillButtonList: button.Destroy() self.selectSkillButtonList = [] if -1 != slotIndex: self.curSkillButton.Show() self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide() player.SetMouseFunc(player.MBT_RIGHT, player.MBF_SKILL) player.ChangeCurrentSkillNumberOnly(slotIndex-1) else: self.curSkillButton.Hide() self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Show() def SelectMouseButtonEvent(self, dir, event): SetMouseButtonSetting(dir, event) self.CloseSelectSkill() self.mouseModeButtonList[dir].Hide() btn = 0 type = self.NONE func = self.NONE tooltip_text = "" if self.MOUSE_BUTTON_LEFT == dir: type = player.MBT_LEFT elif self.MOUSE_BUTTON_RIGHT == dir: type = player.MBT_RIGHT if self.EVENT_MOVE == event: btn = self.mouseModeButtonList[dir].GetChild("button_move") func = player.MBF_MOVE tooltip_text = localeInfo.TASKBAR_MOVE elif self.EVENT_ATTACK == event: btn = self.mouseModeButtonList[dir].GetChild("button_attack") func = player.MBF_ATTACK tooltip_text = localeInfo.TASKBAR_ATTACK elif self.EVENT_AUTO == event: btn = self.mouseModeButtonList[dir].GetChild("button_auto_attack") func = player.MBF_AUTO tooltip_text = localeInfo.TASKBAR_AUTO elif self.EVENT_MOVE_AND_ATTACK == event: btn = self.mouseModeButtonList[dir].GetChild("button_move_and_attack") func = player.MBF_SMART tooltip_text = localeInfo.TASKBAR_ATTACK elif self.EVENT_CAMERA == event: btn = self.mouseModeButtonList[dir].GetChild("button_camera") func = player.MBF_CAMERA tooltip_text = localeInfo.TASKBAR_CAMERA elif self.EVENT_SKILL == event: btn = self.mouseModeButtonList[dir].GetChild("button_skill") func = player.MBF_SKILL tooltip_text = localeInfo.TASKBAR_SKILL if 0 != btn: self.curMouseModeButton[dir].SetToolTipText(tooltip_text, 0, -18) self.curMouseModeButton[dir].SetUpVisual(btn.GetUpVisualFileName()) self.curMouseModeButton[dir].SetOverVisual(btn.GetOverVisualFileName()) self.curMouseModeButton[dir].SetDownVisual(btn.GetDownVisualFileName()) self.curMouseModeButton[dir].Show() player.SetMouseFunc(type, func) def OnChangeCurrentSkill(self, skillSlotNumber): self.curSkillButton.SetSkill(skillSlotNumber) self.curSkillButton.Show() self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
Não sabia se devia meter em code mas se quiseres deixo aqui sem o <code>
game.pySpoilerimport os
import app
import dbg
import grp
import item
import background
import chr
import chrmgr
import player
import snd
import chat
import textTail
import snd
import net
import effect
import wndMgr
import fly
import systemSetting
import quest
import guild
import skill
import messenger
import localeInfo
import constInfo
import exchange
import imeimport ui
import uiCommon
import uiPhaseCurtain
import uiMapNameShower
import uiAffectShower
import uiPlayerGauge
import uiCharacter
import uiTarget
import time# PRIVATE_SHOP_PRICE_LIST
import uiPrivateShopBuilder
# END_OF_PRIVATE_SHOP_PRICE_LISTimport mouseModule
import consoleModule
import localeInfoimport playerSettingModule
import interfaceModuleimport musicInfo
import debugInfo
import stringCommanderfrom _weakref import proxy
from switchbot import Bot# TEXTTAIL_LIVINGTIME_CONTROL
#if localeInfo.IsJAPAN():
# app.SetTextTailLivingTime(8.0)
# END_OF_TEXTTAIL_LIVINGTIME_CONTROL# SCREENSHOT_CWDSAVE
SCREENSHOT_CWDSAVE = FALSE
SCREENSHOT_DIR = Noneif localeInfo.IsEUROPE():
SCREENSHOT_CWDSAVE = TRUEif localeInfo.IsCIBN10():
SCREENSHOT_CWDSAVE = FALSE
SCREENSHOT_DIR = "YT2W"cameraDistance = 1550.0
cameraPitch = 27.0
cameraRotation = 0.0
cameraHeight = 100.0testAlignment = 0
BPisLodaded = 0class GameWindow(ui.ScriptWindow):
def __init__(self, stream):
ui.ScriptWindow.__init__(self, "GAME")
self.SetWindowName("game")
net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self)
player.SetGameWindow(self)self.quickSlotPageIndex = 0
self.lastPKModeSendedTime = 0
self.pressNumber = Noneself.guildWarQuestionDialog = None
self.interface = None
self.targetBoard = None
self.console = None
self.mapNameShower = None
self.affectShower = None
self.playerGauge = Noneself.stream=stream
self.interface = interfaceModule.Interface()
self.interface.MakeInterface()
self.interface.ShowDefaultWindows()self.curtain = uiPhaseCurtain.PhaseCurtain()
self.curtain.speed = 0.03
self.curtain.Hide()self.targetBoard = uiTarget.TargetBoard()
self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog))
self.targetBoard.Hide()self.console = consoleModule.ConsoleWindow()
self.console.BindGameClass(self)
self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200)
self.console.Hide()self.mapNameShower = uiMapNameShower.MapNameShower()
self.affectShower = uiAffectShower.AffectShower()self.playerGauge = uiPlayerGauge.PlayerGauge(self)
self.playerGauge.Hide()
#wj 2014.1.2. ESC키를 누를 시 우선적으로 DropQuestionDialog를 끄도록 만들었다. 하지만 처음에 itemDropQuestionDialog가 선언되어 있지 않아 ERROR가 발생하여 init에서 선언과 동시에 초기화 시킴.
self.itemDropQuestionDialog = Noneself.__SetQuickSlotMode()
self.__ServerCommand_Build()
self.__ProcessPreservedServerCommand()self.switchbot = Bot()
self.switchbot.Hide()self.timeLine = ui.TextLine()
self.timeLine.SetFontName(localeInfo.UI_DEF_FONT)
self.timeLine.SetFontColor( 255, 045, 0)
self.timeLine.SetPosition((wndMgr.GetScreenWidth() - 130) / 2, 180)def __del__(self):
player.SetGameWindow(0)
net.ClearPhaseWindow(net.PHASE_WINDOW_GAME, self)
ui.ScriptWindow.__del__(self)def Open(self):
app.SetFrameSkip(1)self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
self.quickSlotPageIndex = 0
self.PickingCharacterIndex = -1
self.PickingItemIndex = -1
self.consoleEnable = FALSE
self.isShowDebugInfo = FALSE
self.ShowNameFlag = FALSEself.enableXMasBoom = FALSE
self.startTimeXMasBoom = 0.0
self.indexXMasBoom = 0global cameraDistance, cameraPitch, cameraRotation, cameraHeight
app.SetCamera(cameraDistance, cameraPitch, cameraRotation, cameraHeight)
constInfo.SET_DEFAULT_CAMERA_MAX_DISTANCE()
constInfo.SET_DEFAULT_CHRNAME_COLOR()
constInfo.SET_DEFAULT_FOG_LEVEL()
constInfo.SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE()
constInfo.SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS()
constInfo.SET_DEFAULT_USE_SKILL_EFFECT_ENABLE()# TWO_HANDED_WEAPON_ATTACK_SPEED_UP
constInfo.SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE()
# END_OF_TWO_HANDED_WEAPON_ATTACK_SPEED_UPimport event
event.SetLeftTimeString(localeInfo.UI_LEFT_TIME)textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE)
if constInfo.PVPMODE_TEST_ENABLE:
self.testPKMode = ui.TextLine()
self.testPKMode.SetFontName(localeInfo.UI_DEF_FONT)
self.testPKMode.SetPosition(0, 15)
self.testPKMode.SetWindowHorizontalAlignCenter()
self.testPKMode.SetHorizontalAlignCenter()
self.testPKMode.SetFeather()
self.testPKMode.SetOutline()
self.testPKMode.Show()self.testAlignment = ui.TextLine()
self.testAlignment.SetFontName(localeInfo.UI_DEF_FONT)
self.testAlignment.SetPosition(0, 35)
self.testAlignment.SetWindowHorizontalAlignCenter()
self.testAlignment.SetHorizontalAlignCenter()
self.testAlignment.SetFeather()
self.testAlignment.SetOutline()
self.testAlignment.Show()self.__BuildKeyDict()
self.__BuildDebugInfo()# PRIVATE_SHOP_PRICE_LIST
uiPrivateShopBuilder.Clear()
# END_OF_PRIVATE_SHOP_PRICE_LIST# UNKNOWN_UPDATE
exchange.InitTrading()
# END_OF_UNKNOWN_UPDATEif debugInfo.IsDebugMode():
self.ToggleDebugInfo()## Sound
snd.SetMusicVolume(systemSetting.GetMusicVolume()*net.GetFieldMusicVolume())
snd.SetSoundVolume(systemSetting.GetSoundVolume())netFieldMusicFileName = net.GetFieldMusicFileName()
if netFieldMusicFileName:
snd.FadeInMusic("BGM/" + netFieldMusicFileName)
elif musicInfo.fieldMusic != "":
snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)self.__SetQuickSlotMode()
self.__SelectQuickPage(self.quickSlotPageIndex)self.SetFocus()
self.Show()
app.ShowCursor()net.SendEnterGamePacket()
# START_GAME_ERROR_EXIT
try:
self.StartGame()
except:
import exception
exception.Abort("GameWindow.Open")
# END_OF_START_GAME_ERROR_EXIT
# NPC가 큐브시스템으로 만들 수 있는 아이템들의 목록을 캐싱
# ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ]
self.cubeInformation = {}
self.currentCubeNPC = 0
def Close(self):
self.Hide()global cameraDistance, cameraPitch, cameraRotation, cameraHeight
(cameraDistance, cameraPitch, cameraRotation, cameraHeight) = app.GetCamera()if musicInfo.fieldMusic != "":
snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic)self.onPressKeyDict = None
self.onClickKeyDict = Nonechat.Close()
snd.StopAllSound()
grp.InitScreenEffect()
chr.Destroy()
textTail.Clear()
quest.Clear()
background.Destroy()
guild.Destroy()
messenger.Destroy()
skill.ClearSkillData()
wndMgr.Unlock()
mouseModule.mouseController.DeattachObject()if self.guildWarQuestionDialog:
self.guildWarQuestionDialog.Close()self.guildNameBoard = None
self.partyRequestQuestionDialog = None
self.partyInviteQuestionDialog = None
self.guildInviteQuestionDialog = None
self.guildWarQuestionDialog = None
self.messengerAddFriendQuestion = None# UNKNOWN_UPDATE
self.itemDropQuestionDialog = None
# END_OF_UNKNOWN_UPDATE# QUEST_CONFIRM
self.confirmDialog = None
# END_OF_QUEST_CONFIRMself.PrintCoord = None
self.FrameRate = None
self.Pitch = None
self.Splat = None
self.TextureNum = None
self.ObjectNum = None
self.ViewDistance = None
self.PrintMousePos = Noneself.ClearDictionary()
self.playerGauge = None
self.mapNameShower = None
self.affectShower = Noneif self.console:
self.console.BindGameClass(0)
self.console.Close()
self.console=None
if self.targetBoard:
self.targetBoard.Destroy()
self.targetBoard = None
if self.interface:
self.interface.HideAllWindows()
self.interface.Close()
self.interface=Noneplayer.ClearSkillDict()
player.ResetCameraRotation()self.KillFocus()
app.HideCursor()print "---------------------------------------------------------------------------- CLOSE GAME WINDOW"
def __BuildKeyDict(self):
onPressKeyDict = {}##PressKey 는 누르고 있는 동안 계속 적용되는 키이다.
## 숫자 단축키 퀵슬롯에 이용된다.(이후 숫자들도 퀵 슬롯용 예약)
## F12 는 클라 디버그용 키이므로 쓰지 않는 게 좋다.
onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1)
onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2)
onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3)
onPressKeyDict[app.DIK_4] = lambda : self.__PressNumKey(4)
onPressKeyDict[app.DIK_5] = lambda : self.__PressNumKey(5)
onPressKeyDict[app.DIK_6] = lambda : self.__PressNumKey(6)
onPressKeyDict[app.DIK_7] = lambda : self.__PressNumKey(7)
onPressKeyDict[app.DIK_8] = lambda : self.__PressNumKey(8)
onPressKeyDict[app.DIK_9] = lambda : self.__PressNumKey(9)
onPressKeyDict[app.DIK_F1] = lambda : self.__PressQuickSlot(4)
onPressKeyDict[app.DIK_F2] = lambda : self.__PressQuickSlot(5)
onPressKeyDict[app.DIK_F3] = lambda : self.__PressQuickSlot(6)
onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7)
onPressKeyDict[app.DIK_F5] = lambda : self.__toggleSwitchbot()
onPressKeyDict[app.DIK_F6] = lambda : self.__quikeqchange()
onPressKeyDict[app.DIK_X] = lambda : self.__BonusPage()onPressKeyDict[app.DIK_LALT] = lambda : self.ShowName()
onPressKeyDict[app.DIK_LCONTROL] = lambda : self.ShowMouseImage()
onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen()
onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack()#캐릭터 이동키
onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp()
onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown()
onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft()
onPressKeyDict[app.DIK_RIGHT] = lambda : self.MoveRight()
onPressKeyDict[app.DIK_W] = lambda : self.MoveUp()
onPressKeyDict[app.DIK_S] = lambda : self.MoveDown()
onPressKeyDict[app.DIK_A] = lambda : self.MoveLeft()
onPressKeyDict[app.DIK_D] = lambda : self.MoveRight()onPressKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_TO_POSITIVE)
onPressKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_TO_NEGATIVE)
#onPressKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_TO_POSITIVE)
onPressKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_TO_NEGATIVE)
onPressKeyDict[app.DIK_G] = self.__PressGKey
onPressKeyDict[app.DIK_Q] = self.__PressQKeyonPressKeyDict[app.DIK_NUMPAD9] = lambda: app.MovieResetCamera()
onPressKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_TO_NEGATIVE)
onPressKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_TO_POSITIVE)
onPressKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_TO_NEGATIVE)
onPressKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_TO_POSITIVE)
onPressKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_TO_NEGATIVE)
onPressKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_TO_POSITIVE)
onPressKeyDict[app.DIK_GRAVE] = lambda : self.PickUpItem()
onPressKeyDict[app.DIK_Z] = lambda : self.PickUpItem()
onPressKeyDict[app.DIK_C] = lambda state = "STATUS": self.interface.ToggleCharacterWindow(state)
onPressKeyDict[app.DIK_V] = lambda state = "SKILL": self.interface.ToggleCharacterWindow(state)
#onPressKeyDict[app.DIK_B] = lambda state = "EMOTICON": self.interface.ToggleCharacterWindow(state)
onPressKeyDict[app.DIK_N] = lambda state = "QUEST": self.interface.ToggleCharacterWindow(state)
onPressKeyDict[app.DIK_I] = lambda : self.interface.ToggleInventoryWindow()
onPressKeyDict[app.DIK_O] = lambda : self.interface.ToggleDragonSoulWindowWithNoInfo()
onPressKeyDict[app.DIK_M] = lambda : self.interface.PressMKey()
#onPressKeyDict[app.DIK_H] = lambda : self.interface.OpenHelpWindow()
onPressKeyDict[app.DIK_ADD] = lambda : self.interface.MiniMapScaleUp()
onPressKeyDict[app.DIK_SUBTRACT] = lambda : self.interface.MiniMapScaleDown()
onPressKeyDict[app.DIK_L] = lambda : self.interface.ToggleChatLogWindow()
onPressKeyDict[app.DIK_COMMA] = lambda : self.ShowConsole() # "`" key
onPressKeyDict[app.DIK_LSHIFT] = lambda : self.__SetQuickPageMode()onPressKeyDict[app.DIK_J] = lambda : self.__PressJKey()
onPressKeyDict[app.DIK_H] = lambda : self.__PressHKey()
onPressKeyDict[app.DIK_B] = lambda : self.__PressBKey()
onPressKeyDict[app.DIK_F] = lambda : self.__PressFKey()# CUBE_TEST
#onPressKeyDict[app.DIK_K] = lambda : self.interface.OpenCubeWindow()
# CUBE_TEST_ENDself.onPressKeyDict = onPressKeyDict
onClickKeyDict = {}
onClickKeyDict[app.DIK_UP] = lambda : self.StopUp()
onClickKeyDict[app.DIK_DOWN] = lambda : self.StopDown()
onClickKeyDict[app.DIK_LEFT] = lambda : self.StopLeft()
onClickKeyDict[app.DIK_RIGHT] = lambda : self.StopRight()
onClickKeyDict[app.DIK_SPACE] = lambda : self.EndAttack()onClickKeyDict[app.DIK_W] = lambda : self.StopUp()
onClickKeyDict[app.DIK_S] = lambda : self.StopDown()
onClickKeyDict[app.DIK_A] = lambda : self.StopLeft()
onClickKeyDict[app.DIK_D] = lambda : self.StopRight()
onClickKeyDict[app.DIK_Q] = lambda: app.RotateCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_E] = lambda: app.RotateCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_R] = lambda: app.ZoomCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_F] = lambda: app.ZoomCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_T] = lambda: app.PitchCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_G] = lambda: self.__ReleaseGKey()
onClickKeyDict[app.DIK_NUMPAD4] = lambda: app.MovieRotateCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_NUMPAD6] = lambda: app.MovieRotateCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_PGUP] = lambda: app.MovieZoomCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_PGDN] = lambda: app.MovieZoomCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_NUMPAD8] = lambda: app.MoviePitchCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_NUMPAD2] = lambda: app.MoviePitchCamera(app.CAMERA_STOP)
onClickKeyDict[app.DIK_LALT] = lambda: self.HideName()
onClickKeyDict[app.DIK_LCONTROL] = lambda: self.HideMouseImage()
onClickKeyDict[app.DIK_LSHIFT] = lambda: self.__SetQuickSlotMode()#if constInfo.PVPMODE_ACCELKEY_ENABLE:
# onClickKeyDict[app.DIK_B] = lambda: self.ChangePKMode()self.onClickKeyDict=onClickKeyDict
def __PressNumKey(self,num):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
if num >= 1 and num <= 9:
if(chrmgr.IsPossibleEmoticon(-1)):
chrmgr.SetEmoticon(-1,int(num)-1)
net.SendEmoticon(int(num)-1)
else:
if num >= 1 and num <= 4:
self.pressNumber(num-1)def __ClickBKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
return
else:
if constInfo.PVPMODE_ACCELKEY_ENABLE:
self.ChangePKMode()
def __PressJKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
if player.IsMountingHorse():
net.SendChatPacket("/unmount")
else:
#net.SendChatPacket("/user_horse_ride")
if not uiPrivateShopBuilder.IsBuildingPrivateShop():
for i in xrange(player.INVENTORY_PAGE_SIZE):
if player.GetItemIndex(i) in (71114, 71116, 71118, 71120):
net.SendItemUsePacket(i)
break
def __PressHKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket("/user_horse_ride")
else:
self.interface.OpenHelpWindow()def __PressBKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket("/user_horse_back")
else:
state = "EMOTICON"
self.interface.ToggleCharacterWindow(state)def __PressFKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket("/user_horse_feed")
else:
app.ZoomCamera(app.CAMERA_TO_POSITIVE)def __PressGKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket("/ride")
else:
if self.ShowNameFlag:
self.interface.ToggleGuildWindow()
else:
app.PitchCamera(app.CAMERA_TO_POSITIVE)def __ReleaseGKey(self):
app.PitchCamera(app.CAMERA_STOP)def __PressQKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
if 0==interfaceModule.IsQBHide:
interfaceModule.IsQBHide = 1
self.interface.HideAllQuestButton()
else:
interfaceModule.IsQBHide = 0
self.interface.ShowAllQuestButton()
else:
app.RotateCamera(app.CAMERA_TO_NEGATIVE)def __SetQuickSlotMode(self):
self.pressNumber=ui.__mem_func__(self.__PressQuickSlot)def __SetQuickPageMode(self):
self.pressNumber=ui.__mem_func__(self.__SelectQuickPage)def __PressQuickSlot(self, localSlotIndex):
if localeInfo.IsARABIC():
if 0 <= localSlotIndex and localSlotIndex < 4:
player.RequestUseLocalQuickSlot(3-localSlotIndex)
else:
player.RequestUseLocalQuickSlot(11-localSlotIndex)
else:
player.RequestUseLocalQuickSlot(localSlotIndex)def __SelectQuickPage(self, pageIndex):
self.quickSlotPageIndex = pageIndex
player.SetQuickPage(pageIndex)def ToggleDebugInfo(self):
self.isShowDebugInfo = not self.isShowDebugInfoif self.isShowDebugInfo:
self.PrintCoord.Show()
self.FrameRate.Show()
self.Pitch.Show()
self.Splat.Show()
self.TextureNum.Show()
self.ObjectNum.Show()
self.ViewDistance.Show()
self.PrintMousePos.Show()
else:
self.PrintCoord.Hide()
self.FrameRate.Hide()
self.Pitch.Hide()
self.Splat.Hide()
self.TextureNum.Hide()
self.ObjectNum.Hide()
self.ViewDistance.Hide()
self.PrintMousePos.Hide()def __BuildDebugInfo(self):
## Character Position Coordinate
self.PrintCoord = ui.TextLine()
self.PrintCoord.SetFontName(localeInfo.UI_DEF_FONT)
self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 270, 0)
## Frame Rate
self.FrameRate = ui.TextLine()
self.FrameRate.SetFontName(localeInfo.UI_DEF_FONT)
self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 270, 20)## Camera Pitch
self.Pitch = ui.TextLine()
self.Pitch.SetFontName(localeInfo.UI_DEF_FONT)
self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 270, 40)## Splat
self.Splat = ui.TextLine()
self.Splat.SetFontName(localeInfo.UI_DEF_FONT)
self.Splat.SetPosition(wndMgr.GetScreenWidth() - 270, 60)
##
self.PrintMousePos = ui.TextLine()
self.PrintMousePos.SetFontName(localeInfo.UI_DEF_FONT)
self.PrintMousePos.SetPosition(wndMgr.GetScreenWidth() - 270, 80)# TextureNum
self.TextureNum = ui.TextLine()
self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT)
self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100)# 오브젝트 그리는 개수
self.ObjectNum = ui.TextLine()
self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT)
self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120)# 시야거리
self.ViewDistance = ui.TextLine()
self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT)
self.ViewDistance.SetPosition(0, 0)#Saat
self.timeLine.SetWindowHorizontalAlignCenter()
self.timeLine.SetHorizontalAlignCenter()
self.timeLine.SetFeather()
self.timeLine.SetOutline()
self.timeLine.Show()def __NotifyError(self, msg):
chat.AppendChat(chat.CHAT_TYPE_INFO, msg)def ChangePKMode(self):
if not app.IsPressed(app.DIK_LCONTROL):
returnif player.GetStatus(player.LEVEL)<constInfo.PVPMODE_PROTECTED_LEVEL:
self.__NotifyError(localeInfo.OPTION_PVPMODE_PROTECT % (constInfo.PVPMODE_PROTECTED_LEVEL))
returncurTime = app.GetTime()
if curTime - self.lastPKModeSendedTime < constInfo.PVPMODE_ACCELKEY_DELAY:
returnself.lastPKModeSendedTime = curTime
curPKMode = player.GetPKMode()
nextPKMode = curPKMode + 1
if nextPKMode == player.PK_MODE_PROTECT:
if 0 == player.GetGuildID():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OPTION_PVPMODE_CANNOT_SET_GUILD_MODE)
nextPKMode = 0
else:
nextPKMode = player.PK_MODE_GUILDelif nextPKMode == player.PK_MODE_MAX_NUM:
nextPKMode = 0net.SendChatPacket("/PKMode " + str(nextPKMode))
print "/PKMode " + str(nextPKMode)def OnChangePKMode(self):
self.interface.OnChangePKMode()
try:
self.__NotifyError(localeInfo.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()])
except KeyError:
print "UNKNOWN PVPMode[%d]" % (player.GetPKMode())if constInfo.PVPMODE_TEST_ENABLE:
curPKMode = player.GetPKMode()
alignment, grade = chr.testGetPKData()
self.pkModeNameDict = { 0 : "PEACE", 1 : "REVENGE", 2 : "FREE", 3 : "PROTECT", }
self.testPKMode.SetText("Current PK Mode : " + self.pkModeNameDict.get(curPKMode, "UNKNOWN"))
self.testAlignment.SetText("Current Alignment : " + str(alignment) + " (" + localeInfo.TITLE_NAME_LIST[grade] + ")")###############################################################################################
###############################################################################################
## Game Callback Functions# Start
def StartGame(self):
self.RefreshInventory()
self.RefreshEquipment()
self.RefreshCharacter()
self.RefreshSkill()# Refresh
def CheckGameButton(self):
if self.interface:
self.interface.CheckGameButton()def RefreshAlignment(self):
self.interface.RefreshAlignment()def RefreshStatus(self):
self.CheckGameButton()if self.interface:
self.interface.RefreshStatus()if self.playerGauge:
self.playerGauge.RefreshGauge()def RefreshStamina(self):
self.interface.RefreshStamina()def RefreshSkill(self):
self.CheckGameButton()
if self.interface:
self.interface.RefreshSkill()def RefreshQuest(self):
self.interface.RefreshQuest()def RefreshMessenger(self):
self.interface.RefreshMessenger()def RefreshGuildInfoPage(self):
self.interface.RefreshGuildInfoPage()def RefreshGuildBoardPage(self):
self.interface.RefreshGuildBoardPage()def RefreshGuildMemberPage(self):
self.interface.RefreshGuildMemberPage()def RefreshGuildMemberPageGradeComboBox(self):
self.interface.RefreshGuildMemberPageGradeComboBox()def RefreshGuildSkillPage(self):
self.interface.RefreshGuildSkillPage()def RefreshGuildGradePage(self):
self.interface.RefreshGuildGradePage()def RefreshMobile(self):
if self.interface:
self.interface.RefreshMobile()def OnMobileAuthority(self):
self.interface.OnMobileAuthority()def OnBlockMode(self, mode):
self.interface.OnBlockMode(mode)def OpenQuestWindow(self, skin, idx):
self.interface.OpenQuestWindow(skin, idx)def AskGuildName(self):
guildNameBoard = uiCommon.InputDialog()
guildNameBoard.SetTitle(localeInfo.GUILD_NAME)
guildNameBoard.SetAcceptEvent(ui.__mem_func__(self.ConfirmGuildName))
guildNameBoard.SetCancelEvent(ui.__mem_func__(self.CancelGuildName))
guildNameBoard.Open()self.guildNameBoard = guildNameBoard
def ConfirmGuildName(self):
guildName = self.guildNameBoard.GetText()
if not guildName:
returnif net.IsInsultIn(guildName):
self.PopupMessage(localeInfo.GUILD_CREATE_ERROR_INSULT_NAME)
returnnet.SendAnswerMakeGuildPacket(guildName)
self.guildNameBoard.Close()
self.guildNameBoard = None
return TRUEdef CancelGuildName(self):
self.guildNameBoard.Close()
self.guildNameBoard = None
return TRUE## Refine
def PopupMessage(self, msg):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open(msg, 0, localeInfo.UI_OK)def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type=0):
self.interface.OpenRefineDialog(targetItemPos, nextGradeItemVnum, cost, prob, type)def AppendMaterialToRefineDialog(self, vnum, count):
self.interface.AppendMaterialToRefineDialog(vnum, count)def RunUseSkillEvent(self, slotIndex, coolTime):
self.interface.OnUseSkill(slotIndex, coolTime)def ClearAffects(self):
self.affectShower.ClearAffects()def SetAffect(self, affect):
self.affectShower.SetAffect(affect)def ResetAffect(self, affect):
self.affectShower.ResetAffect(affect)# UNKNOWN_UPDATE
def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):
self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration)
if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1)
elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type:
self.BINARY_DragonSoulGiveQuilification()def BINARY_NEW_RemoveAffect(self, type, pointIdx):
self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx)
if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
self.interface.DragonSoulDeactivate()
# END_OF_UNKNOWN_UPDATEdef ActivateSkillSlot(self, slotIndex):
if self.interface:
self.interface.OnActivateSkill(slotIndex)def DeactivateSkillSlot(self, slotIndex):
if self.interface:
self.interface.OnDeactivateSkill(slotIndex)def RefreshEquipment(self):
if self.interface:
self.interface.RefreshInventory()def RefreshInventory(self):
if self.interface:
self.interface.RefreshInventory()def RefreshCharacter(self):
if self.interface:
self.interface.RefreshCharacter()def OnGameOver(self):
self.CloseTargetBoard()
self.OpenRestartDialog()def OpenRestartDialog(self):
self.interface.OpenRestartDialog()def ChangeCurrentSkill(self, skillSlotNumber):
self.interface.OnChangeCurrentSkill(skillSlotNumber)## TargetBoard
def SetPCTargetBoard(self, vid, name):
self.targetBoard.Open(vid, name)
if app.IsPressed(app.DIK_LCONTROL):
if not player.IsSameEmpire(vid):
returnif player.IsMainCharacterIndex(vid):
return
elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(vid):
returnself.interface.OpenWhisperDialog(name)
def RefreshTargetBoardByVID(self, vid):
self.targetBoard.RefreshByVID(vid)def RefreshTargetBoardByName(self, name):
self.targetBoard.RefreshByName(name)
def __RefreshTargetBoard(self):
self.targetBoard.Refresh()
def SetHPTargetBoard(self, vid, hpPercentage):
if vid != self.targetBoard.GetTargetVID():
self.targetBoard.ResetTargetBoard()
self.targetBoard.SetEnemyVID(vid)self.targetBoard.SetHP(hpPercentage)
self.targetBoard.Show()def CloseTargetBoardIfDifferent(self, vid):
if vid != self.targetBoard.GetTargetVID():
self.targetBoard.Close()def CloseTargetBoard(self):
self.targetBoard.Close()## View Equipment
def OpenEquipmentDialog(self, vid):
self.interface.OpenEquipmentDialog(vid)def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count):
self.interface.SetEquipmentDialogItem(vid, slotIndex, vnum, count)def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value):
self.interface.SetEquipmentDialogSocket(vid, slotIndex, socketIndex, value)def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value):
self.interface.SetEquipmentDialogAttr(vid, slotIndex, attrIndex, type, value)# SHOW_LOCAL_MAP_NAME
def ShowMapName(self, mapName, x, y):if self.mapNameShower:
self.mapNameShower.ShowMapName(mapName, x, y)if self.interface:
self.interface.SetMapName(mapName)
# END_OF_SHOW_LOCAL_MAP_NAMEdef BINARY_OpenAtlasWindow(self):
self.interface.BINARY_OpenAtlasWindow()## Chat
def OnRecvWhisper(self, mode, name, line):
if mode == chat.WHISPER_TYPE_GM:
self.interface.RegisterGameMasterName(name)
chat.AppendWhisper(mode, name, line)
self.interface.RecvWhisper(name)def OnRecvWhisperSystemMessage(self, mode, name, line):
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line)
self.interface.RecvWhisper(name)def OnRecvWhisperError(self, mode, name, line):
if localeInfo.WHISPER_ERROR.has_key(mode):
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, localeInfo.WHISPER_ERROR[mode](name))
else:
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, "Whisper Unknown Error(mode=%d, name=%s)" % (mode, name))
self.interface.RecvWhisper(name)def RecvWhisper(self, name):
self.interface.RecvWhisper(name)def OnPickMoney(self, money):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_PICK_MONEY % (money))def OnShopError(self, type):
try:
self.PopupMessage(localeInfo.SHOP_ERROR_DICT[type])
except KeyError:
self.PopupMessage(localeInfo.SHOP_ERROR_UNKNOWN % (type))def OnSafeBoxError(self):
self.PopupMessage(localeInfo.SAFEBOX_ERROR)def OnFishingSuccess(self, isFish, fishName):
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_SUCCESS(isFish, fishName), 2000)# ADD_FISHING_MESSAGE
def OnFishingNotifyUnknown(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_UNKNOWN)def OnFishingWrongPlace(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_WRONG_PLACE)
# END_OF_ADD_FISHING_MESSAGEdef OnFishingNotify(self, isFish, fishName):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.FISHING_NOTIFY(isFish, fishName))def OnFishingFailure(self):
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, localeInfo.FISHING_FAILURE, 2000)def OnCannotPickItem(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_PICK_ITEM)# MINING
def OnCannotMining(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.GAME_CANNOT_MINING)
# END_OF_MININGdef OnCannotUseSkill(self, vid, type):
if localeInfo.USE_SKILL_ERROR_TAIL_DICT.has_key(type):
textTail.RegisterInfoTail(vid, localeInfo.USE_SKILL_ERROR_TAIL_DICT[type])if localeInfo.USE_SKILL_ERROR_CHAT_DICT.has_key(type):
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_SKILL_ERROR_CHAT_DICT[type])def OnCannotShotError(self, vid, type):
textTail.RegisterInfoTail(vid, localeInfo.SHOT_ERROR_TAIL_DICT.get(type, localeInfo.SHOT_ERROR_UNKNOWN % (type)))## PointReset
def StartPointReset(self):
self.interface.OpenPointResetDialog()## Shop
def StartShop(self, vid):
self.interface.OpenShopDialog(vid)def EndShop(self):
self.interface.CloseShopDialog()def RefreshShop(self):
self.interface.RefreshShopDialog()def SetShopSellingPrice(self, Price):
pass## Exchange
def StartExchange(self):
self.interface.StartExchange()def EndExchange(self):
self.interface.EndExchange()def RefreshExchange(self):
self.interface.RefreshExchange()## Party
def RecvPartyInviteQuestion(self, leaderVID, leaderName):
partyInviteQuestionDialog = uiCommon.QuestionDialog()
partyInviteQuestionDialog.SetText(leaderName + localeInfo.PARTY_DO_YOU_JOIN)
partyInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerPartyInvite(arg))
partyInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerPartyInvite(arg))
partyInviteQuestionDialog.Open()
partyInviteQuestionDialog.partyLeaderVID = leaderVID
self.partyInviteQuestionDialog = partyInviteQuestionDialogdef AnswerPartyInvite(self, answer):
if not self.partyInviteQuestionDialog:
returnpartyLeaderVID = self.partyInviteQuestionDialog.partyLeaderVID
distance = player.GetCharacterDistance(partyLeaderVID)
if distance < 0.0 or distance > 5000:
answer = FALSEnet.SendPartyInviteAnswerPacket(partyLeaderVID, answer)
self.partyInviteQuestionDialog.Close()
self.partyInviteQuestionDialog = Nonedef AddPartyMember(self, pid, name):
self.interface.AddPartyMember(pid, name)def UpdatePartyMemberInfo(self, pid):
self.interface.UpdatePartyMemberInfo(pid)def RemovePartyMember(self, pid):
self.interface.RemovePartyMember(pid)
self.__RefreshTargetBoard()def LinkPartyMember(self, pid, vid):
self.interface.LinkPartyMember(pid, vid)def UnlinkPartyMember(self, pid):
self.interface.UnlinkPartyMember(pid)def UnlinkAllPartyMember(self):
self.interface.UnlinkAllPartyMember()def ExitParty(self):
self.interface.ExitParty()
self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID())def ChangePartyParameter(self, distributionMode):
self.interface.ChangePartyParameter(distributionMode)## Messenger
def OnMessengerAddFriendQuestion(self, name):
messengerAddFriendQuestion = uiCommon.QuestionDialog2()
messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 % (name))
messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2)
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
messengerAddFriendQuestion.Open()
messengerAddFriendQuestion.name = name
self.messengerAddFriendQuestion = messengerAddFriendQuestiondef OnAcceptAddFriend(self):
name = self.messengerAddFriendQuestion.name
net.SendChatPacket("/messenger_auth y " + name)
self.OnCloseAddFriendQuestionDialog()
return TRUEdef OnDenyAddFriend(self):
name = self.messengerAddFriendQuestion.name
net.SendChatPacket("/messenger_auth n " + name)
self.OnCloseAddFriendQuestionDialog()
return TRUEdef OnCloseAddFriendQuestionDialog(self):
self.messengerAddFriendQuestion.Close()
self.messengerAddFriendQuestion = None
return TRUE## SafeBox
def OpenSafeboxWindow(self, size):
self.interface.OpenSafeboxWindow(size)def RefreshSafebox(self):
self.interface.RefreshSafebox()def RefreshSafeboxMoney(self):
self.interface.RefreshSafeboxMoney()# ITEM_MALL
def OpenMallWindow(self, size):
self.interface.OpenMallWindow(size)def RefreshMall(self):
self.interface.RefreshMall()
# END_OF_ITEM_MALL## Guild
def RecvGuildInviteQuestion(self, guildID, guildName):
guildInviteQuestionDialog = uiCommon.QuestionDialog()
guildInviteQuestionDialog.SetText(guildName + localeInfo.GUILD_DO_YOU_JOIN)
guildInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerGuildInvite(arg))
guildInviteQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerGuildInvite(arg))
guildInviteQuestionDialog.Open()
guildInviteQuestionDialog.guildID = guildID
self.guildInviteQuestionDialog = guildInviteQuestionDialogdef AnswerGuildInvite(self, answer):
if not self.guildInviteQuestionDialog:
returnguildLeaderVID = self.guildInviteQuestionDialog.guildID
net.SendGuildInviteAnswerPacket(guildLeaderVID, answer)self.guildInviteQuestionDialog.Close()
self.guildInviteQuestionDialog = None
def DeleteGuild(self):
self.interface.DeleteGuild()## Clock
def ShowClock(self, second):
self.interface.ShowClock(second)def HideClock(self):
self.interface.HideClock()## Emotion
def BINARY_ActEmotion(self, emotionIndex):
if self.interface.wndCharacter:
self.interface.wndCharacter.ActEmotion(emotionIndex)###############################################################################################
###############################################################################################
## Keyboard Functionsdef CheckFocus(self):
if FALSE == self.IsFocus():
if TRUE == self.interface.IsOpenChat():
self.interface.ToggleChat()self.SetFocus()
def SaveScreen(self):
print "save screen"# SCREENSHOT_CWDSAVE
if SCREENSHOT_CWDSAVE:
if not os.path.exists(os.getcwd()+os.sep+"screenshot"):
os.mkdir(os.getcwd()+os.sep+"screenshot")(succeeded, name) = grp.SaveScreenShotToPath(os.getcwd()+os.sep+"screenshot"+os.sep)
elif SCREENSHOT_DIR:
(succeeded, name) = grp.SaveScreenShot(SCREENSHOT_DIR)
else:
(succeeded, name) = grp.SaveScreenShot()
# END_OF_SCREENSHOT_CWDSAVEif succeeded:
pass
"""
chat.AppendChat(chat.CHAT_TYPE_INFO, name + localeInfo.SCREENSHOT_SAVE1)
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE2)
"""
else:
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SCREENSHOT_SAVE_FAILURE)def ShowConsole(self):
if debugInfo.IsDebugMode() or TRUE == self.consoleEnable:
player.EndKeyWalkingImmediately()
self.console.OpenWindow()def ShowName(self):
self.ShowNameFlag = TRUE
self.playerGauge.EnableShowAlways()
player.SetQuickPage(self.quickSlotPageIndex+1)# ADD_ALWAYS_SHOW_NAME
def __IsShowName(self):if systemSetting.IsAlwaysShowName():
return TRUEif self.ShowNameFlag:
return TRUEreturn FALSE
# END_OF_ADD_ALWAYS_SHOW_NAME
def HideName(self):
self.ShowNameFlag = FALSE
self.playerGauge.DisableShowAlways()
player.SetQuickPage(self.quickSlotPageIndex)def ShowMouseImage(self):
self.interface.ShowMouseImage()def HideMouseImage(self):
self.interface.HideMouseImage()def StartAttack(self):
player.SetAttackKeyState(TRUE)def EndAttack(self):
player.SetAttackKeyState(FALSE)def MoveUp(self):
player.SetSingleDIKKeyState(app.DIK_UP, TRUE)def MoveDown(self):
player.SetSingleDIKKeyState(app.DIK_DOWN, TRUE)def MoveLeft(self):
player.SetSingleDIKKeyState(app.DIK_LEFT, TRUE)def MoveRight(self):
player.SetSingleDIKKeyState(app.DIK_RIGHT, TRUE)def StopUp(self):
player.SetSingleDIKKeyState(app.DIK_UP, FALSE)def StopDown(self):
player.SetSingleDIKKeyState(app.DIK_DOWN, FALSE)def StopLeft(self):
player.SetSingleDIKKeyState(app.DIK_LEFT, FALSE)def StopRight(self):
player.SetSingleDIKKeyState(app.DIK_RIGHT, FALSE)def PickUpItem(self):
player.PickCloseItem()###############################################################################################
###############################################################################################
## Event Handlerdef OnKeyDown(self, key):
if self.interface.wndWeb and self.interface.wndWeb.IsShow():
returnif key == app.DIK_ESC:
self.RequestDropItem(FALSE)
constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)try:
self.onPressKeyDict[key]()
except KeyError:
pass
except:
raisereturn TRUE
def OnKeyUp(self, key):
try:
self.onClickKeyDict[key]()
except KeyError:
pass
except:
raisereturn TRUE
def OnMouseLeftButtonDown(self):
if self.interface.BUILD_OnMouseLeftButtonDown():
returnif mouseModule.mouseController.isAttached():
self.CheckFocus()
else:
hyperlink = ui.GetHyperlink()
if hyperlink:
return
else:
self.CheckFocus()
player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS);return TRUE
def OnMouseLeftButtonUp(self):
if self.interface.BUILD_OnMouseLeftButtonUp():
returnif mouseModule.mouseController.isAttached():
attachedType = mouseModule.mouseController.GetAttachedType()
attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
attachedItemSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()## QuickSlot
if player.SLOT_TYPE_QUICK_SLOT == attachedType:
player.RequestDeleteGlobalQuickSlot(attachedItemSlotPos)## Inventory
elif player.SLOT_TYPE_INVENTORY == attachedType:if player.ITEM_MONEY == attachedItemIndex:
self.__PutMoney(attachedType, attachedItemCount, self.PickingCharacterIndex)
else:
self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)## DragonSoul
elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:
self.__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)
mouseModule.mouseController.DeattachObject()else:
hyperlink = ui.GetHyperlink()
if hyperlink:
if app.IsPressed(app.DIK_LALT):
link = chat.GetLinkFromHyperlink(hyperlink)
ime.PasteString(link)
else:
self.interface.MakeHyperlinkTooltip(hyperlink)
return
else:
player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK)#player.EndMouseWalking()
return TRUEdef __PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID):
if player.SLOT_TYPE_INVENTORY == attachedType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:
attachedInvenType = player.SlotTypeToInvenType(attachedType)
if TRUE == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID:
if player.IsEquipmentSlot(attachedItemSlotPos) and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedType:
self.stream.popupWindow.Close()
self.stream.popupWindow.Open(localeInfo.EXCHANGE_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK)
else:
if chr.IsNPC(dstChrID):
net.SendGiveItemPacket(dstChrID, attachedInvenType, attachedItemSlotPos, attachedItemCount)
else:
net.SendExchangeStartPacket(dstChrID)
net.SendExchangeItemAddPacket(attachedInvenType, attachedItemSlotPos, 0)
else:
self.__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount)def __PutMoney(self, attachedType, attachedMoney, dstChrID):
if TRUE == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID:
net.SendExchangeStartPacket(dstChrID)
net.SendExchangeElkAddPacket(attachedMoney)
else:
self.__DropMoney(attachedType, attachedMoney)def __DropMoney(self, attachedType, attachedMoney):
# PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
return
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
if attachedMoney>=1000:
self.stream.popupWindow.Close()
self.stream.popupWindow.Open(localeInfo.DROP_MONEY_FAILURE_1000_OVER, 0, localeInfo.UI_OK)
returnitemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText(localeInfo.DO_YOU_DROP_MONEY % (attachedMoney))
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropCount = attachedMoney
itemDropQuestionDialog.dropNumber = player.ITEM_MONEY
self.itemDropQuestionDialog = itemDropQuestionDialogdef __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
# PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
return
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
if player.SLOT_TYPE_INVENTORY == attachedType and player.IsEquipmentSlot(attachedItemSlotPos):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open(localeInfo.DROP_ITEM_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK)else:
if player.SLOT_TYPE_INVENTORY == attachedType:
dropItemIndex = player.GetItemIndex(attachedItemSlotPos)item.SelectItem(dropItemIndex)
dropItemName = item.GetItemName()## Question Text
questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount)## Dialog
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText(questionText)
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropNumber = attachedItemSlotPos
itemDropQuestionDialog.dropCount = attachedItemCount
self.itemDropQuestionDialog = itemDropQuestionDialogconstInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType:
dropItemIndex = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, attachedItemSlotPos)item.SelectItem(dropItemIndex)
dropItemName = item.GetItemName()## Question Text
questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount)## Dialog
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText(questionText)
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropNumber = attachedItemSlotPos
itemDropQuestionDialog.dropCount = attachedItemCount
self.itemDropQuestionDialog = itemDropQuestionDialogconstInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)
def RequestDropItem(self, answer):
if not self.itemDropQuestionDialog:
returnif answer:
dropType = self.itemDropQuestionDialog.dropType
dropCount = self.itemDropQuestionDialog.dropCount
dropNumber = self.itemDropQuestionDialog.dropNumberif player.SLOT_TYPE_INVENTORY == dropType:
if dropNumber == player.ITEM_MONEY:
net.SendGoldDropPacketNew(dropCount)
snd.PlaySound("sound/ui/money.wav")
else:
# PRIVATESHOP_DISABLE_ITEM_DROP
self.__SendDropItemPacket(dropNumber, dropCount)
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == dropType:
# PRIVATESHOP_DISABLE_ITEM_DROP
self.__SendDropItemPacket(dropNumber, dropCount, player.DRAGON_SOUL_INVENTORY)
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROPself.itemDropQuestionDialog.Close()
self.itemDropQuestionDialog = NoneconstInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0)
# PRIVATESHOP_DISABLE_ITEM_DROP
def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY):
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
returnnet.SendItemDropPacketNew(itemInvenType, itemVNum, itemCount)
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROPdef OnMouseRightButtonDown(self):
self.CheckFocus()
if TRUE == mouseModule.mouseController.isAttached():
mouseModule.mouseController.DeattachObject()else:
player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS)return TRUE
def OnMouseRightButtonUp(self):
if TRUE == mouseModule.mouseController.isAttached():
return TRUEplayer.SetMouseState(player.MBT_RIGHT, player.MBS_CLICK)
return TRUEdef OnMouseMiddleButtonDown(self):
player.SetMouseMiddleButtonState(player.MBS_PRESS)def OnMouseMiddleButtonUp(self):
player.SetMouseMiddleButtonState(player.MBS_CLICK)def OnUpdate(self):
app.UpdateGame()
if self.mapNameShower.IsShow():
self.mapNameShower.Update()if self.isShowDebugInfo:
self.UpdateDebugInfo()if self.enableXMasBoom:
self.__XMasBoom_Update()if 1 == constInfo.AUTO_PICK_UP:
self.PickUpItem()if int(int(self.interface.LastContactTimeStamp) + self.interface.WaitTime) < int(app.GetTime()) and self.interface.State == "Kapali":
self.interface.State = "Acik"self.interface.BUILD_OnUpdate()
localtime = localtime = time.strftime("%d.%m.%y %H:%M:%S")
self.timeLine.SetText(localtime)
self.timeLine.Show()
def UpdateDebugInfo(self):
#
# 캐릭터 좌표 및 FPS 출력
(x, y, z) = player.GetMainCharacterPosition()
nUpdateTime = app.GetUpdateTime()
nUpdateFPS = app.GetUpdateFPS()
nRenderFPS = app.GetRenderFPS()
nFaceCount = app.GetFaceCount()
fFaceSpeed = app.GetFaceSpeed()
nST=background.GetRenderShadowTime()
(fAveRT, nCurRT) = app.GetRenderTime()
(iNum, fFogStart, fFogEnd, fFarCilp) = background.GetDistanceSetInfo()
(iPatch, iSplat, fSplatRatio, sTextureNum) = background.GetRenderedSplatNum()
if iPatch == 0:
iPatch = 1#(dwRenderedThing, dwRenderedCRC) = background.GetRenderedGraphicThingInstanceNum()
#self.PrintCoord.SetText("Coordinate: %.2f %.2f %.2f ATM: %d" % (x, y, z, app.GetAvailableTextureMemory()/(1024*1024)))
#xMouse, yMouse = wndMgr.GetMousePosition()
#self.PrintMousePos.SetText("MousePosition: %d %d" % (xMouse, yMouse))#self.FrameRate.SetText("UFPS: %3d UT: %3d FS %.2f" % (nUpdateFPS, nUpdateTime, fFaceSpeed))
#if fAveRT>1.0:
#self.Pitch.SetText("RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) " % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount/fAveRT))#self.Splat.SetText("PATCH: %d SPLAT: %d BAD(%.2f)" % (iPatch, iSplat, fSplatRatio))
#self.Pitch.SetText("Pitch: %.2f" % (app.GetCameraPitch())
#self.TextureNum.SetText("TN : %s" % (sTextureNum))
#self.ObjectNum.SetText("GTI : %d, CRC : %d" % (dwRenderedThing, dwRenderedCRC))
#self.ViewDistance.SetText("Num : %d, FS : %f, FE : %f, FC : %f" % (iNum, fFogStart, fFogEnd, fFarCilp))def OnRender(self):
app.RenderGame()
if self.console.Console.collision:
background.RenderCollision()
chr.RenderCollision()(x, y) = app.GetCursorPosition()
########################
# Picking
########################
textTail.UpdateAllTextTail()if TRUE == wndMgr.IsPickedWindow(self.hWnd):
self.PickingCharacterIndex = chr.Pick()
if -1 != self.PickingCharacterIndex:
textTail.ShowCharacterTextTail(self.PickingCharacterIndex)
if 0 != self.targetBoard.GetTargetVID():
textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID())# ADD_ALWAYS_SHOW_NAME
if not self.__IsShowName():
self.PickingItemIndex = item.Pick()
if -1 != self.PickingItemIndex:
textTail.ShowItemTextTail(self.PickingItemIndex)
# END_OF_ADD_ALWAYS_SHOW_NAME
## Show all name in the range
# ADD_ALWAYS_SHOW_NAME
if self.__IsShowName():
textTail.ShowAllTextTail()
self.PickingItemIndex = textTail.Pick(x, y)
# END_OF_ADD_ALWAYS_SHOW_NAMEtextTail.UpdateShowingTextTail()
textTail.ArrangeTextTail()
if -1 != self.PickingItemIndex:
textTail.SelectItemName(self.PickingItemIndex)grp.PopState()
grp.SetInterfaceRenderState()textTail.Render()
textTail.HideAllTextTail()def OnPressEscapeKey(self):
if app.TARGET == app.GetCursor():
app.SetCursor(app.NORMAL)elif TRUE == mouseModule.mouseController.isAttached():
mouseModule.mouseController.DeattachObject()else:
self.interface.OpenSystemDialog()return TRUE
def OnIMEReturn(self):
if app.IsPressed(app.DIK_LSHIFT):
self.interface.OpenWhisperDialogWithoutTarget()
else:
self.interface.ToggleChat()
return TRUEdef OnPressExitKey(self):
self.interface.ToggleSystemDialog()
return TRUE## BINARY CALLBACK
######################################################################################
# WEDDING
def BINARY_LoverInfo(self, name, lovePoint):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnAddLover(name, lovePoint)
if self.affectShower:
self.affectShower.SetLoverInfo(name, lovePoint)def BINARY_UpdateLovePoint(self, lovePoint):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnUpdateLovePoint(lovePoint)
if self.affectShower:
self.affectShower.OnUpdateLovePoint(lovePoint)
# END_OF_WEDDING
# QUEST_CONFIRM
def BINARY_OnQuestConfirm(self, msg, timeout, pid):
confirmDialog = uiCommon.QuestionDialogWithTimeLimit()
confirmDialog.Open(msg, timeout)
confirmDialog.SetAcceptEvent(lambda answer=TRUE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
confirmDialog.SetCancelEvent(lambda answer=FALSE, pid=pid: net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide())
self.confirmDialog = confirmDialog
# END_OF_QUEST_CONFIRM# GIFT command
def Gift_Show(self):
self.interface.ShowGift()# CUBE
def BINARY_Cube_Open(self, npcVNUM):
self.currentCubeNPC = npcVNUM
self.interface.OpenCubeWindow()
if npcVNUM not in self.cubeInformation:
net.SendChatPacket("/cube r_info")
else:
cubeInfoList = self.cubeInformation[npcVNUM]
i = 0
for cubeInfo in cubeInfoList:
self.interface.wndCube.AddCubeResultItem(cubeInfo["vnum"], cubeInfo["count"])
j = 0
for materialList in cubeInfo["materialList"]:
for materialInfo in materialList:
itemVnum, itemCount = materialInfo
self.interface.wndCube.AddMaterialInfo(i, j, itemVnum, itemCount)
j = j + 1
i = i + 1
self.interface.wndCube.Refresh()def BINARY_Cube_Close(self):
self.interface.CloseCubeWindow()# 제작에 필요한 골드, 예상되는 완성품의 VNUM과 개수 정보 update
def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
self.interface.UpdateCubeInfo(gold, itemVnum, count)
def BINARY_Cube_Succeed(self, itemVnum, count):
print "큐브 제작 성공"
self.interface.SucceedCubeWork(itemVnum, count)
passdef BINARY_Cube_Failed(self):
print "큐브 제작 실패"
self.interface.FailedCubeWork()
passdef BINARY_Cube_ResultList(self, npcVNUM, listText):
# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 이런식으로 "/" 문자로 구분된 리스트를 줌
#print listText
if npcVNUM == 0:
npcVNUM = self.currentCubeNPC
self.cubeInformation[npcVNUM] = []
try:
for eachInfoText in listText.split("/"):
eachInfo = eachInfoText.split(",")
itemVnum = int(eachInfo[0])
itemCount = int(eachInfo[1])self.cubeInformation[npcVNUM].append({"vnum": itemVnum, "count": itemCount})
self.interface.wndCube.AddCubeResultItem(itemVnum, itemCount)
resultCount = len(self.cubeInformation[npcVNUM])
requestCount = 7
modCount = resultCount % requestCount
splitCount = resultCount / requestCount
for i in xrange(splitCount):
#print("/cube r_info %d %d" % (i * requestCount, requestCount))
net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount))
if 0 < modCount:
#print("/cube r_info %d %d" % (splitCount * requestCount, modCount))
net.SendChatPacket("/cube r_info %d %d" % (splitCount * requestCount, modCount))except RuntimeError, msg:
dbg.TraceError(msg)
return 0
pass
def BINARY_Cube_MaterialInfo(self, startIndex, listCount, listText):
# Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000
try:
#print listText
if 3 > len(listText):
dbg.TraceError("Wrong Cube Material Infomation")
return 0
eachResultList = listText.split("@")cubeInfo = self.cubeInformation[self.currentCubeNPC]
itemIndex = 0
for eachResultText in eachResultList:
cubeInfo[startIndex + itemIndex]["materialList"] = [[], [], [], [], []]
materialList = cubeInfo[startIndex + itemIndex]["materialList"]
gold = 0
splitResult = eachResultText.split("/")
if 1 < len(splitResult):
gold = int(splitResult[1])
#print "splitResult : ", splitResult
eachMaterialList = splitResult[0].split("&")
i = 0
for eachMaterialText in eachMaterialList:
complicatedList = eachMaterialText.split("|")
if 0 < len(complicatedList):
for complicatedText in complicatedList:
(itemVnum, itemCount) = complicatedText.split(",")
itemVnum = int(itemVnum)
itemCount = int(itemCount)
self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)
materialList.append((itemVnum, itemCount))
else:
itemVnum, itemCount = eachMaterialText.split(",")
itemVnum = int(itemVnum)
itemCount = int(itemCount)
self.interface.wndCube.AddMaterialInfo(itemIndex + startIndex, i, itemVnum, itemCount)
materialList.append((itemVnum, itemCount))
i = i + 1
itemIndex = itemIndex + 1
self.interface.wndCube.Refresh()
except RuntimeError, msg:
dbg.TraceError(msg)
return 0
pass
# END_OF_CUBE
# 용혼석
def BINARY_Highlight_Item(self, inven_type, inven_pos):
self.interface.Highligt_Item(inven_type, inven_pos)
def BINARY_DragonSoulGiveQuilification(self):
self.interface.DragonSoulGiveQuilification()
def BINARY_DragonSoulRefineWindow_Open(self):
self.interface.OpenDragonSoulRefineWindow()def BINARY_DragonSoulRefineWindow_RefineFail(self, reason, inven_type, inven_pos):
self.interface.FailDragonSoulRefine(reason, inven_type, inven_pos)def BINARY_DragonSoulRefineWindow_RefineSucceed(self, inven_type, inven_pos):
self.interface.SucceedDragonSoulRefine(inven_type, inven_pos)
# END of DRAGON SOUL REFINE WINDOW
def BINARY_SetBigMessage(self, message):
self.interface.bigBoard.SetTip(message)def BINARY_SetTipMessage(self, message):
self.interface.tipBoard.SetTip(message)def BINARY_AppendNotifyMessage(self, type):
if not type in localeInfo.NOTIFY_MESSAGE:
return
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.NOTIFY_MESSAGE[type])def BINARY_Guild_EnterGuildArea(self, areaID):
self.interface.BULID_EnterGuildArea(areaID)def BINARY_Guild_ExitGuildArea(self, areaID):
self.interface.BULID_ExitGuildArea(areaID)def BINARY_GuildWar_OnSendDeclare(self, guildID):
passdef BINARY_GuildWar_OnRecvDeclare(self, guildID, warType):
mainCharacterName = player.GetMainCharacterName()
masterName = guild.GetGuildMasterName()
if mainCharacterName == masterName:
self.__GuildWar_OpenAskDialog(guildID, warType)def BINARY_GuildWar_OnRecvPoint(self, gainGuildID, opponentGuildID, point):
self.interface.OnRecvGuildWarPoint(gainGuildID, opponentGuildID, point)def BINARY_GuildWar_OnStart(self, guildSelf, guildOpp):
self.interface.OnStartGuildWar(guildSelf, guildOpp)def BINARY_GuildWar_OnEnd(self, guildSelf, guildOpp):
self.interface.OnEndGuildWar(guildSelf, guildOpp)def BINARY_BettingGuildWar_SetObserverMode(self, isEnable):
self.interface.BINARY_SetObserverMode(isEnable)def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount):
self.interface.wndMiniMap.UpdateObserverCount(observerCount)def __GuildWar_UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2, observerCount):
guildID1 = int(guildID1)
guildID2 = int(guildID2)
memberCount1 = int(memberCount1)
memberCount2 = int(memberCount2)
observerCount = int(observerCount)self.interface.UpdateMemberCount(guildID1, memberCount1, guildID2, memberCount2)
self.interface.wndMiniMap.UpdateObserverCount(observerCount)def __GuildWar_OpenAskDialog(self, guildID, warType):
guildName = guild.GetGuildName(guildID)
# REMOVED_GUILD_BUG_FIX
if "Noname" == guildName:
return
# END_OF_REMOVED_GUILD_BUG_FIXimport uiGuild
questionDialog = uiGuild.AcceptGuildWarDialog()
questionDialog.SAFE_SetAcceptEvent(self.__GuildWar_OnAccept)
questionDialog.SAFE_SetCancelEvent(self.__GuildWar_OnDecline)
questionDialog.Open(guildName, warType)self.guildWarQuestionDialog = questionDialog
def __GuildWar_CloseAskDialog(self):
self.guildWarQuestionDialog.Close()
self.guildWarQuestionDialog = Nonedef __GuildWar_OnAccept(self):
guildName = self.guildWarQuestionDialog.GetGuildName()
net.SendChatPacket("/war " + guildName)
self.__GuildWar_CloseAskDialog()return 1
def __GuildWar_OnDecline(self):
guildName = self.guildWarQuestionDialog.GetGuildName()
net.SendChatPacket("/nowar " + guildName)
self.__GuildWar_CloseAskDialog()return 1
## BINARY CALLBACK
######################################################################################def __ServerCommand_Build(self):
serverCommandList={
"ConsoleEnable" : self.__Console_Enable,
"DayMode" : self.__DayMode_Update,
"PRESERVE_DayMode" : self.__PRESERVE_DayMode_Update,
"CloseRestartWindow" : self.__RestartDialog_Close,
"OpenPrivateShop" : self.__PrivateShop_Open,
"PartyHealReady" : self.PartyHealReady,
"ShowMeSafeboxPassword" : self.AskSafeboxPassword,
"CloseSafebox" : self.CommandCloseSafebox,# ITEM_MALL
"CloseMall" : self.CommandCloseMall,
"ShowMeMallPassword" : self.AskMallPassword,
"item_mall" : self.__ItemMall_Open,
# END_OF_ITEM_MALL"RefineSuceeded" : self.RefineSuceededMessage,
"RefineFailed" : self.RefineFailedMessage,
"xmas_snow" : self.__XMasSnow_Enable,
"xmas_boom" : self.__XMasBoom_Enable,
"xmas_song" : self.__XMasSong_Enable,
"xmas_tree" : self.__XMasTree_Enable,
"newyear_boom" : self.__XMasBoom_Enable,
"PartyRequest" : self.__PartyRequestQuestion,
"PartyRequestDenied" : self.__PartyRequestDenied,
"horse_state" : self.__Horse_UpdateState,
"hide_horse_state" : self.__Horse_HideState,
"WarUC" : self.__GuildWar_UpdateMemberCount,
"test_server" : self.__EnableTestServerFlag,
"mall" : self.__InGameShop_Show,# WEDDING
"lover_login" : self.__LoginLover,
"lover_logout" : self.__LogoutLover,
"lover_near" : self.__LoverNear,
"lover_far" : self.__LoverFar,
"lover_divorce" : self.__LoverDivorce,
"PlayMusic" : self.__PlayMusic,
# END_OF_WEDDING# PRIVATE_SHOP_PRICE_LIST
"MyShopPriceList" : self.__PrivateShop_PriceList,
# END_OF_PRIVATE_SHOP_PRICE_LIST
}self.serverCommander=stringCommander.Analyzer()
for serverCommandItem in serverCommandList.items():
self.serverCommander.SAFE_RegisterCallBack(
serverCommandItem[0], serverCommandItem[1]
)def BINARY_ServerCommand_Run(self, line):
#dbg.TraceError(line)
try:
#print " BINARY_ServerCommand_Run", line
return self.serverCommander.Run(line)
except RuntimeError, msg:
dbg.TraceError(msg)
return 0def __ProcessPreservedServerCommand(self):
try:
command = net.GetPreservedServerCommand()
while command:
print " __ProcessPreservedServerCommand", command
self.serverCommander.Run(command)
command = net.GetPreservedServerCommand()
except RuntimeError, msg:
dbg.TraceError(msg)
return 0def PartyHealReady(self):
self.interface.PartyHealReady()def AskSafeboxPassword(self):
self.interface.AskSafeboxPassword()# ITEM_MALL
def AskMallPassword(self):
self.interface.AskMallPassword()def __ItemMall_Open(self):
self.interface.OpenItemMall();def CommandCloseMall(self):
self.interface.CommandCloseMall()
# END_OF_ITEM_MALLdef RefineSuceededMessage(self):
snd.PlaySound("sound/ui/make_soket.wav")
self.PopupMessage(localeInfo.REFINE_SUCCESS)def RefineFailedMessage(self):
snd.PlaySound("sound/ui/jaeryun_fail.wav")
self.PopupMessage(localeInfo.REFINE_FAILURE)def CommandCloseSafebox(self):
self.interface.CommandCloseSafebox()# PRIVATE_SHOP_PRICE_LIST
def __PrivateShop_PriceList(self, itemVNum, itemPrice):
uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice)
# END_OF_PRIVATE_SHOP_PRICE_LISTdef __Horse_HideState(self):
self.affectShower.SetHorseState(0, 0, 0)def __Horse_UpdateState(self, level, health, battery):
self.affectShower.SetHorseState(int(level), int(health), int(battery))def __IsXMasMap(self):
mapDict = ( "metin2_map_n_flame_01",
"metin2_map_n_desert_01",
"metin2_map_spiderdungeon",
"metin2_map_deviltower1", )if background.GetCurrentMapName() in mapDict:
return FALSEreturn TRUE
def __XMasSnow_Enable(self, mode):
self.__XMasSong_Enable(mode)
if "1"==mode:
if not self.__IsXMasMap():
returnprint "XMAS_SNOW ON"
background.EnableSnow(1)else:
print "XMAS_SNOW OFF"
background.EnableSnow(0)def __XMasBoom_Enable(self, mode):
if "1"==mode:if not self.__IsXMasMap():
returnprint "XMAS_BOOM ON"
self.__DayMode_Update("dark")
self.enableXMasBoom = TRUE
self.startTimeXMasBoom = app.GetTime()
else:
print "XMAS_BOOM OFF"
self.__DayMode_Update("light")
self.enableXMasBoom = FALSEdef __XMasTree_Enable(self, grade):
print "XMAS_TREE ", grade
background.SetXMasTree(int(grade))def __XMasSong_Enable(self, mode):
if "1"==mode:
print "XMAS_SONG ON"XMAS_BGM = "xmas.mp3"
if app.IsExistFile("BGM/" + XMAS_BGM)==1:
if musicInfo.fieldMusic != "":
snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic)musicInfo.fieldMusic=XMAS_BGM
snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)else:
print "XMAS_SONG OFF"if musicInfo.fieldMusic != "":
snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic)musicInfo.fieldMusic=musicInfo.METIN2THEMA
snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)def __RestartDialog_Close(self):
self.interface.CloseRestartDialog()def __Console_Enable(self):
constInfo.CONSOLE_ENABLE = TRUE
self.consoleEnable = TRUE
app.EnableSpecialCameraMode()
ui.EnablePaste(TRUE)## PrivateShop
def __PrivateShop_Open(self):
self.interface.OpenPrivateShopInputNameDialog()def BINARY_PrivateShop_Appear(self, vid, text):
self.interface.AppearPrivateShop(vid, text)def BINARY_PrivateShop_Disappear(self, vid):
self.interface.DisappearPrivateShop(vid)## DayMode
def __PRESERVE_DayMode_Update(self, mode):
if "light"==mode:
background.SetEnvironmentData(0)
elif "dark"==mode:if not self.__IsXMasMap():
returnbackground.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
background.SetEnvironmentData(1)def __DayMode_Update(self, mode):
if "light"==mode:
self.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToLight)
elif "dark"==mode:if not self.__IsXMasMap():
returnself.curtain.SAFE_FadeOut(self.__DayMode_OnCompleteChangeToDark)
def __DayMode_OnCompleteChangeToLight(self):
background.SetEnvironmentData(0)
self.curtain.FadeIn()def __DayMode_OnCompleteChangeToDark(self):
background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
background.SetEnvironmentData(1)
self.curtain.FadeIn()## XMasBoom
def __XMasBoom_Update(self):self.BOOM_DATA_LIST = ( (2, 5), (5, 2), (7, 3), (10, 3), (20, 5) )
if self.indexXMasBoom >= len(self.BOOM_DATA_LIST):
returnboomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0]
boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1]if app.GetTime() - self.startTimeXMasBoom > boomTime:
self.indexXMasBoom += 1
for i in xrange(boomCount):
self.__XMasBoom_Boom()def __XMasBoom_Boom(self):
x, y, z = player.GetMainCharacterPosition()
randX = app.GetRandom(-150, 150)
randY = app.GetRandom(-150, 150)snd.PlaySound3D(x+randX, -y+randY, z, "sound/common/etc/salute.mp3")
def __PartyRequestQuestion(self, vid):
vid = int(vid)
partyRequestQuestionDialog = uiCommon.QuestionDialog()
partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + localeInfo.PARTY_DO_YOU_ACCEPT)
partyRequestQuestionDialog.SetAcceptText(localeInfo.UI_ACCEPT)
partyRequestQuestionDialog.SetCancelText(localeInfo.UI_DENY)
partyRequestQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.__AnswerPartyRequest(arg))
partyRequestQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.__AnswerPartyRequest(arg))
partyRequestQuestionDialog.Open()
partyRequestQuestionDialog.vid = vid
self.partyRequestQuestionDialog = partyRequestQuestionDialogdef __AnswerPartyRequest(self, answer):
if not self.partyRequestQuestionDialog:
returnvid = self.partyRequestQuestionDialog.vid
if answer:
net.SendChatPacket("/party_request_accept " + str(vid))
else:
net.SendChatPacket("/party_request_deny " + str(vid))self.partyRequestQuestionDialog.Close()
self.partyRequestQuestionDialog = Nonedef __PartyRequestDenied(self):
self.PopupMessage(localeInfo.PARTY_REQUEST_DENIED)def __EnableTestServerFlag(self):
app.EnableTestServerFlag()def __InGameShop_Show(self, url):
if constInfo.IN_GAME_SHOP_ENABLE:
self.interface.OpenWebWindow(url)# WEDDING
def __LoginLover(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLoginLover()def __LogoutLover(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLogoutLover()
if self.affectShower:
self.affectShower.HideLoverState()def __LoverNear(self):
if self.affectShower:
self.affectShower.ShowLoverState()def __LoverFar(self):
if self.affectShower:
self.affectShower.HideLoverState()def __LoverDivorce(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.ClearLoverInfo()
if self.affectShower:
self.affectShower.ClearLoverState()def __PlayMusic(self, flag, filename):
flag = int(flag)
if flag:
snd.FadeOutAllMusic()
musicInfo.SaveLastPlayFieldMusic()
snd.FadeInMusic("BGM/" + filename)
else:
snd.FadeOutAllMusic()
musicInfo.LoadLastPlayFieldMusic()
snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)# END_OF_WEDDING
def __toggleSwitchbot(self):
if self.switchbot.bot_shown == 1:
self.switchbot.Hide()
else:
self.switchbot.Show()
#
def __quikeqchange(self):
import uifastequip
self.uuifastequipDlg = uifastequip.changeequip()
self.uuifastequipDlg.Show()#
def __BonusPage(self):
import PaginaBonusuri
global BPisLodaded
try:
if BPisLodaded == 0:
BPisLodaded = 1
exec 'PaginaBonusuri.BonusBoardDialog().Show()'
else:
exec 'PaginaBonusuri.BonusBoardDialog().Hide()'
BPisLodaded = 0
except ImportError:
import dbg,app
dbg.Trace('PaginaBonusuri.py Importing error')
app.Abort
uitaskbar.pySpoilerimport ui
import net
import item
import skill
import localeInfo
import wndMgr
import player
import constInfo
import mouseModule
import uiScriptLocale
import appMOUSE_SETTINGS = [0, 0]
def InitMouseButtonSettings(left, right):
global MOUSE_SETTINGS
MOUSE_SETTINGS = [left, right]def SetMouseButtonSetting(dir, event):
global MOUSE_SETTINGS
MOUSE_SETTINGS[dir] = event
def GetMouseButtonSettings():
global MOUSE_SETTINGS
return MOUSE_SETTINGSdef SaveMouseButtonSettings():
global MOUSE_SETTINGS
open("mouse.cfg", "w").write("%s\t%s" % tuple(MOUSE_SETTINGS))def LoadMouseButtonSettings():
global MOUSE_SETTINGS
tokens = open("mouse.cfg", "r").read().split()if len(tokens) != 2:
raise RuntimeError, "MOUSE_SETTINGS_FILE_ERROR"MOUSE_SETTINGS[0] = int(tokens[0])
MOUSE_SETTINGS[1] = int(tokens[1])def unsigned32(n):
return n & 0xFFFFFFFFL#-------------------Giftbox Begin------------------------------
class GiftBox(ui.ScriptWindow):
class TextToolTip(ui.Window):
def __init__(self):
ui.Window.__init__(self, "TOP_MOST")
self.SetWindowName("GiftBox")
textLine = ui.TextLine()
textLine.SetParent(self)
textLine.SetHorizontalAlignCenter()
textLine.SetOutline()
textLine.Show()
self.textLine = textLinedef __del__(self):
ui.Window.__del__(self)def SetText(self, text):
self.textLine.SetText(text)def OnRender(self):
(mouseX, mouseY) = wndMgr.GetMousePosition()
self.textLine.SetPosition(mouseX, mouseY - 15)def __init__(self):
#print "NEW TASKBAR ----------------------------------------------------------------------------"
ui.ScriptWindow.__init__(self)
self.tooltipGift = self.TextToolTip()
self.tooltipGift.Show()
def __del__(self):
#print "---------------------------------------------------------------------------- DELETE TASKBAR"
ui.ScriptWindow.__del__(self)def LoadWindow(self):
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "giftbox.py")
except:
import exception
exception.Abort("GiftBox.LoadWindow.LoadObject")self.giftBoxIcon = self.GetChild("GiftBox_Icon")
self.giftBoxToolTip = self.GetChild("GiftBox_ToolTip")
def Destroy(self):
self.giftBoxIcon = 0
self.giftBoxToolTip = 0
#-------------------Giftbox End------------------------------class EnergyBar(ui.ScriptWindow):
class TextToolTip(ui.Window):
def __init__(self):
ui.Window.__init__(self, "TOP_MOST")
self.SetWindowName("EnergyBar")
textLine = ui.TextLine()
textLine.SetParent(self)
textLine.SetHorizontalAlignCenter()
textLine.SetOutline()
textLine.Show()
self.textLine = textLinedef __del__(self):
ui.Window.__del__(self)def SetText(self, text):
self.textLine.SetText(text)def OnRender(self):
(mouseX, mouseY) = wndMgr.GetMousePosition()
self.textLine.SetPosition(mouseX, mouseY - 15)def __init__(self):
#print "NEW TASKBAR ----------------------------------------------------------------------------"
ui.ScriptWindow.__init__(self)
self.tooltipEnergy = self.TextToolTip()
self.tooltipEnergy.Show()
def __del__(self):
#print "---------------------------------------------------------------------------- DELETE TASKBAR"
ui.ScriptWindow.__del__(self)def LoadWindow(self):
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "EnergyBar.py")
except:
import exception
exception.Abort("EnergyBar.LoadWindow.LoadObject")self.energyEmpty = self.GetChild("EnergyGauge_Empty")
self.energyHungry = self.GetChild("EnergyGauge_Hungry")
self.energyFull = self.GetChild("EnergyGauge_Full")self.energyGaugeBoard = self.GetChild("EnergyGauge_Board")
self.energyGaugeToolTip = self.GetChild("EnergyGauge_ToolTip")
def Destroy(self):
self.energyEmpty = None
self.energyHungry = None
self.energyFull = None
self.energyGaugeBoard = 0
self.energyGaugeToolTip = 0
self.tooltipEnergy = 0## Gauge
def RefreshStatus(self):
pointEnergy = player.GetStatus (player.ENERGY)
leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
# 충기환 지속 시간 = 2시간.
self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
def SetEnergy (self, point, leftTime, maxTime):
leftTime = max (leftTime, 0)
maxTime = max (maxTime, 0)
self.energyEmpty.Hide()
self.energyHungry.Hide()
self.energyFull.Hide()
if leftTime == 0:
self.energyEmpty.Show()
elif ((leftTime * 100) / maxTime) < 15:
self.energyHungry.Show()
else:
self.energyFull.Show()
self.tooltipEnergy.SetText("%s" % (localeInfo.TOOLTIP_ENERGY(point)))def OnUpdate(self):
if TRUE == self.energyGaugeToolTip.IsIn():
self.RefreshStatus()
self.tooltipEnergy.Show()
else:
self.tooltipEnergy.Hide()class ExpandedTaskBar(ui.ScriptWindow):
BUTTON_DRAGON_SOUL = 0
def __init__(self):
ui.Window.__init__(self)
self.SetWindowName("ExpandedTaskBar")
def LoadWindow(self):
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "ExpandedTaskBar.py")
except:
import exception
exception.Abort("ExpandedTaskBar.LoadWindow.LoadObject")self.expandedTaskBarBoard = self.GetChild("ExpanedTaskBar_Board")
self.toggleButtonDict = {}
self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL] = self.GetChild("DragonSoulButton")
self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL].SetParent(self)
def SetTop(self):
super(ExpandedTaskBar, self).SetTop()
for button in self.toggleButtonDict.values():
button.SetTop()
def Show(self):
ui.ScriptWindow.Show(self)
def Close(self):
self.Hide()
def SetToolTipText(self, eButton, text):
self.toggleButtonDict[eButton].SetToolTipText(text)
def SetToggleButtonEvent(self, eButton, kEventFunc):
self.toggleButtonDict[eButton].SetEvent(kEventFunc)def OnPressEscapeKey(self):
self.Close()
return TRUE
class TaskBar(ui.ScriptWindow):BUTTON_CHARACTER = 0
BUTTON_INVENTORY = 1
BUTTON_MESSENGER = 2
BUTTON_SYSTEM = 3
BUTTON_CHAT = 4
BUTTON_VECTORS = 5
BUTTON_EXPAND = 4
IS_EXPANDED = FALSEMOUSE_BUTTON_LEFT = 0
MOUSE_BUTTON_RIGHT = 1
NONE = 255EVENT_MOVE = 0
EVENT_ATTACK = 1
EVENT_MOVE_AND_ATTACK = 2
EVENT_CAMERA = 3
EVENT_SKILL = 4
EVENT_AUTO = 5GAUGE_WIDTH = 95
GAUGE_HEIGHT = 13QUICKPAGE_NUMBER_FILENAME = [
"d:/ymir work/ui/game/taskbar/1.sub",
"d:/ymir work/ui/game/taskbar/2.sub",
"d:/ymir work/ui/game/taskbar/3.sub",
"d:/ymir work/ui/game/taskbar/4.sub",
]#gift icon show and hide
def ShowGift(self):
if not localeInfo.IsBRAZIL():
self.wndGiftBox.Show()
def HideGift(self):
self.wndGiftBox.Hide()class TextToolTip(ui.Window):
def __init__(self):
ui.Window.__init__(self, "TOP_MOST")textLine = ui.TextLine()
textLine.SetParent(self)
textLine.SetHorizontalAlignCenter()
textLine.SetOutline()
textLine.Show()
self.textLine = textLinedef __del__(self):
ui.Window.__del__(self)def SetText(self, text):
self.textLine.SetText(text)def OnRender(self):
(mouseX, mouseY) = wndMgr.GetMousePosition()
self.textLine.SetPosition(mouseX, mouseY - 15)class SkillButton(ui.SlotWindow):
def __init__(self):
ui.SlotWindow.__init__(self)self.event = 0
self.arg = 0self.slotIndex = 0
self.skillIndex = 0slotIndex = 0
wndMgr.SetSlotBaseImage(self.hWnd, "d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
wndMgr.AppendSlot(self.hWnd, slotIndex, 0, 0, 32, 32)
self.SetCoverButton(slotIndex, "d:/ymir work/ui/public/slot_cover_button_01.sub",\
"d:/ymir work/ui/public/slot_cover_button_02.sub",\
"d:/ymir work/ui/public/slot_cover_button_03.sub",\
"d:/ymir work/ui/public/slot_cover_button_04.sub", TRUE, FALSE)
self.SetSize(32, 32)def __del__(self):
ui.SlotWindow.__del__(self)def Destroy(self):
if 0 != self.tooltipSkill:
self.tooltipSkill.HideToolTip()def RefreshSkill(self):
if 0 != self.slotIndex:
self.SetSkill(self.slotIndex)def SetSkillToolTip(self, tooltip):
self.tooltipSkill = tooltipdef SetSkill(self, skillSlotNumber):
slotNumber = 0
skillIndex = player.GetSkillIndex(skillSlotNumber)
skillGrade = player.GetSkillGrade(skillSlotNumber)
skillLevel = player.GetSkillLevel(skillSlotNumber)
skillType = skill.GetSkillType(skillIndex)self.skillIndex = skillIndex
if 0 == self.skillIndex:
self.ClearSlot(slotNumber)
returnself.slotIndex = skillSlotNumber
self.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
self.SetSlotCountNew(slotNumber, skillGrade, skillLevel)## NOTE : CoolTime 체크
if player.IsSkillCoolTime(skillSlotNumber):
(coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)## NOTE : Activate 되어 있다면 아이콘도 업데이트
if player.IsSkillActive(skillSlotNumber):
self.ActivateSlot(slotNumber)def SetSkillEvent(self, event, arg=0):
self.event = event
self.arg = argdef GetSkillIndex(self):
return self.skillIndexdef GetSlotIndex(self):
return self.slotIndexdef Activate(self, coolTime):
self.SetSlotCoolTime(0, coolTime)if skill.IsToggleSkill(self.skillIndex):
self.ActivateSlot(0)def Deactivate(self):
if skill.IsToggleSkill(self.skillIndex):
self.DeactivateSlot(0)def OnOverInItem(self, dummy):
self.tooltipSkill.SetSkill(self.skillIndex)def OnOverOutItem(self):
self.tooltipSkill.HideToolTip()def OnSelectItemSlot(self, dummy):
if 0 != self.event:
if 0 != self.arg:
self.event(self.arg)
else:
self.event()def __init__(self):
#print "NEW TASKBAR ----------------------------------------------------------------------------"ui.ScriptWindow.__init__(self, "TOP_MOST")
self.quickPageNumImageBox = None
self.tooltipItem = 0
self.tooltipSkill = 0
self.mouseModeButtonList = [ ui.ScriptWindow("TOP_MOST"), ui.ScriptWindow("TOP_MOST") ]self.tooltipHP = self.TextToolTip()
self.tooltipHP.Show()
self.tooltipSP = self.TextToolTip()
self.tooltipSP.Show()
self.tooltipST = self.TextToolTip()
self.tooltipST.Show()
self.tooltipEXP = self.TextToolTip()
self.tooltipEXP.Show()
self.skillCategoryNameList = [ "ACTIVE_1", "ACTIVE_2", "ACTIVE_3" ]
self.skillPageStartSlotIndexDict = {
"ACTIVE_1" : 1,
"ACTIVE_2" : 21,
"ACTIVE_3" : 41,
}self.selectSkillButtonList = []
self.lastUpdateQuickSlot = 0
self.SetWindowName("TaskBar")def __del__(self):
#print "---------------------------------------------------------------------------- DELETE TASKBAR"
ui.ScriptWindow.__del__(self)def LoadWindow(self):
try:
pyScrLoader = ui.PythonScriptLoader()if constInfo.IN_GAME_SHOP_ENABLE:
pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "TaskBar.py")
else:
pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py")
pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT], "UIScript/MouseButtonWindow.py")
pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT], "UIScript/RightMouseButtonWindow.py")
except:
import exception
exception.Abort("TaskBar.LoadWindow.LoadObject")self.quickslot = []
self.quickslot.append(self.GetChild("quick_slot_1"))
self.quickslot.append(self.GetChild("quick_slot_2"))
for slot in self.quickslot:
slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
slot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyQuickSlot))
slot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemQuickSlot))
slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UnselectItemQuickSlot))
slot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
slot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))toggleButtonDict = {}
toggleButtonDict[TaskBar.BUTTON_CHARACTER]=self.GetChild("CharacterButton")
toggleButtonDict[TaskBar.BUTTON_VECTORS]=self.GetChild("VectorsEfsunButton")
toggleButtonDict[TaskBar.BUTTON_INVENTORY]=self.GetChild("InventoryButton")
toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
# ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다.
try:
toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
except:
toggleButtonDict[TaskBar.BUTTON_EXPAND]=self.GetChild("ExpandButton")
TaskBar.IS_EXPANDED = TRUE
if localeInfo.IsARABIC():
systemButton = toggleButtonDict[TaskBar.BUTTON_SYSTEM]
if systemButton.ToolTipText:
tx, ty = systemButton.ToolTipText.GetLocalPosition()
tw = systemButton.ToolTipText.GetWidth()
systemButton.ToolTipText.SetPosition(-tw/2, ty)
expGauge = []
expGauge.append(self.GetChild("EXPGauge_01"))
expGauge.append(self.GetChild("EXPGauge_02"))
expGauge.append(self.GetChild("EXPGauge_03"))
expGauge.append(self.GetChild("EXPGauge_04"))for exp in expGauge:
exp.SetSize(0, 0)
self.quickPageNumImageBox=self.GetChild("QuickPageNumber")self.GetChild("QuickPageUpButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageUpButton))
self.GetChild("QuickPageDownButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageDownButton))mouseLeftButtonModeButton = self.GetChild("LeftMouseButton")
mouseRightButtonModeButton = self.GetChild("RightMouseButton")
mouseLeftButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleLeftMouseButtonModeWindow))
mouseRightButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
self.curMouseModeButton = [ mouseLeftButtonModeButton, mouseRightButtonModeButton ](xLocalRight, yLocalRight) = mouseRightButtonModeButton.GetLocalPosition()
self.curSkillButton = self.SkillButton()
self.curSkillButton.SetParent(self)
self.curSkillButton.SetPosition(xLocalRight, 3)
self.curSkillButton.SetSkillEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
self.curSkillButton.Hide()(xLeft, yLeft) = mouseLeftButtonModeButton.GetGlobalPosition()
(xRight, yRight) = mouseRightButtonModeButton.GetGlobalPosition()
leftModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
leftModeButtonList.SetPosition(xLeft, yLeft - leftModeButtonList.GetHeight()-5)
rightModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
rightModeButtonList.SetPosition(xRight - rightModeButtonList.GetWidth() + 32, yRight - rightModeButtonList.GetHeight()-5)
rightModeButtonList.GetChild("button_skill").SetEvent(lambda adir=self.MOUSE_BUTTON_RIGHT, aevent=self.EVENT_SKILL: self.SelectMouseButtonEvent(adir, aevent))
rightModeButtonList.GetChild("button_skill").Hide()mouseImage = ui.ImageBox("TOP_MOST")
mouseImage.AddFlag("float")
mouseImage.LoadImage("d:/ymir work/ui/game/taskbar/mouse_button_camera_01.sub")
mouseImage.SetPosition(xRight, wndMgr.GetScreenHeight() - 34)
mouseImage.Hide()
self.mouseImage = mouseImagedir = self.MOUSE_BUTTON_LEFT
wnd = self.mouseModeButtonList[dir]
wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
wnd.GetChild("button_auto_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_AUTO: self.SelectMouseButtonEvent(adir, aevent))
wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))dir = self.MOUSE_BUTTON_RIGHT
wnd = self.mouseModeButtonList[dir]
wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))self.toggleButtonDict = toggleButtonDict
self.expGauge = expGaugeif constInfo.IN_GAME_SHOP_ENABLE:
self.rampageGauge1 = self.GetChild("RampageGauge")
self.rampageGauge1.OnMouseOverIn = ui.__mem_func__(self.__RampageGauge_OverIn)
self.rampageGauge2 = self.GetChild("RampageGauge2")
self.rampageGauge2.OnMouseOverOut = ui.__mem_func__(self.__RampageGauge_OverOut)
self.rampageGauge2.OnMouseLeftButtonUp = ui.__mem_func__(self.__RampageGauge_Click)
print "[DEBUG]: constInfo.IN_GAME_SHOP_ENABLE / self.rampageGauge1",constInfo.IN_GAME_SHOP_ENABLE, self.rampageGauge1
self.__RampageGauge_OverOut()self.hpGauge = self.GetChild("HPGauge")
self.mpGauge = self.GetChild("SPGauge")
self.stGauge = self.GetChild("STGauge")
self.hpRecoveryGaugeBar = self.GetChild("HPRecoveryGaugeBar")
self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar")self.hpGaugeBoard=self.GetChild("HPGauge_Board")
self.mpGaugeBoard=self.GetChild("SPGauge_Board")
self.stGaugeBoard=self.GetChild("STGauge_Board")
self.expGaugeBoard=self.GetChild("EXP_Gauge_Board")
#giftbox object
wndGiftBox = GiftBox()
wndGiftBox.LoadWindow()
self.wndGiftBox = wndGiftBox
self.__LoadMouseSettings()
self.RefreshStatus()
self.RefreshQuickSlot()def __RampageGauge_OverIn(self):
print "rampage_over_in"
self.rampageGauge2.Show()
self.rampageGauge1.Hide()def __RampageGauge_OverOut(self):
print "rampage_over_out"
self.rampageGauge2.Hide()
self.rampageGauge1.Show()def __RampageGauge_Click(self):
print "rampage_up"
net.SendChatPacket("/in_game_mall")
# gift icon hide when click mall icon
self.wndGiftBox.Hide()def __LoadMouseSettings(self):
try:
LoadMouseButtonSettings()
(mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
if not self.__IsInSafeMouseButtonSettingRange(mouseLeftButtonEvent) or not self.__IsInSafeMouseButtonSettingRange(mouseRightButtonEvent):
raise RuntimeError, "INVALID_MOUSE_BUTTON_SETTINGS"
except:
InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
(mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()try:
self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT, mouseLeftButtonEvent)
self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT, mouseRightButtonEvent)
except:
InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
(mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT, mouseLeftButtonEvent)
self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT, mouseRightButtonEvent)def __IsInSafeMouseButtonSettingRange(self, arg):
return arg >= self.EVENT_MOVE and arg <= self.EVENT_AUTOdef Destroy(self):
SaveMouseButtonSettings()self.ClearDictionary()
self.mouseModeButtonList[0].ClearDictionary()
self.mouseModeButtonList[1].ClearDictionary()
self.mouseModeButtonList = 0
self.curMouseModeButton = 0
self.curSkillButton = 0
self.selectSkillButtonList = 0
self.expGauge = None
self.hpGauge = None
self.mpGauge = None
self.stGauge = None
self.hpRecoveryGaugeBar = None
self.spRecoveryGaugeBar = None
self.tooltipItem = 0
self.tooltipSkill = 0
self.quickslot = 0
self.toggleButtonDict = 0self.hpGaugeBoard = 0
self.mpGaugeBoard = 0
self.stGaugeBoard = 0
self.expGaugeBoard = 0self.tooltipHP = 0
self.tooltipSP = 0
self.tooltipST = 0
self.tooltipEXP = 0self.mouseImage = None
def __OnClickQuickPageUpButton(self):
player.SetQuickPage(player.GetQuickPage()-1)def __OnClickQuickPageDownButton(self):
player.SetQuickPage(player.GetQuickPage()+1)def SetToggleButtonEvent(self, eButton, kEventFunc):
self.toggleButtonDict[eButton].SetEvent(kEventFunc)def SetItemToolTip(self, tooltipItem):
self.tooltipItem = tooltipItemdef SetSkillToolTip(self, tooltipSkill):
self.tooltipSkill = tooltipSkill
self.curSkillButton.SetSkillToolTip(self.tooltipSkill)## Mouse Image
def ShowMouseImage(self):
self.mouseImage.SetTop()
self.mouseImage.Show()def HideMouseImage(self):
player.SetQuickCameraMode(FALSE)
self.mouseImage.Hide()## Gauge
def RefreshStatus(self):
curHP = player.GetStatus(player.HP)
maxHP = player.GetStatus(player.MAX_HP)
curSP = player.GetStatus(player.SP)
maxSP = player.GetStatus(player.MAX_SP)
curEXP = unsigned32(player.GetStatus(player.EXP))
nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
recoveryHP = player.GetStatus(player.HP_RECOVERY)
recoverySP = player.GetStatus(player.SP_RECOVERY)
self.RefreshStamina()self.SetHP(curHP, recoveryHP, maxHP)
self.SetSP(curSP, recoverySP, maxSP)
self.SetExperience(curEXP, nextEXP)
def RefreshStamina(self):
curST = player.GetStatus(player.STAMINA)
maxST = player.GetStatus(player.MAX_STAMINA)
self.SetST(curST, maxST)def RefreshSkill(self):
self.curSkillButton.RefreshSkill()
for button in self.selectSkillButtonList:
button.RefreshSkill()def SetHP(self, curPoint, recoveryPoint, maxPoint):
curPoint = min(curPoint, maxPoint)
if maxPoint > 0:
self.hpGauge.SetPercentage(curPoint, maxPoint)
self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint))if 0 == recoveryPoint:
self.hpRecoveryGaugeBar.Hide()
else:
destPoint = min(maxPoint, curPoint + recoveryPoint)
newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
self.hpRecoveryGaugeBar.Show()def SetSP(self, curPoint, recoveryPoint, maxPoint):
curPoint = min(curPoint, maxPoint)
if maxPoint > 0:
self.mpGauge.SetPercentage(curPoint, maxPoint)
self.tooltipSP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_SP, curPoint, maxPoint))if 0 == recoveryPoint:
self.spRecoveryGaugeBar.Hide()
else:
destPoint = min(maxPoint, curPoint + recoveryPoint)
newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
self.spRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
self.spRecoveryGaugeBar.Show()def SetST(self, curPoint, maxPoint):
curPoint = min(curPoint, maxPoint)
if maxPoint > 0:
self.stGauge.SetPercentage(curPoint, maxPoint)
self.tooltipST.SetText("%s : %d / %d" % (localeInfo.TASKBAR_ST, curPoint, maxPoint))def SetExperience(self, curPoint, maxPoint):
curPoint = min(curPoint, maxPoint)
curPoint = max(curPoint, 0)
maxPoint = max(maxPoint, 0)quarterPoint = maxPoint / 4
FullCount = 0if 0 != quarterPoint:
FullCount = min(4, curPoint / quarterPoint)for i in xrange(4):
self.expGauge.Hide()for i in xrange(FullCount):
self.expGauge.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
self.expGauge.Show()if 0 != quarterPoint:
if FullCount < 4:
Percentage = float(curPoint % quarterPoint) / quarterPoint - 1.0
self.expGauge[FullCount].SetRenderingRect(0.0, Percentage, 0.0, 0.0)
self.expGauge[FullCount].Show()#####
self.tooltipEXP.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curPoint) / max(1, float(maxPoint)) * 100))
## QuickSlot
def RefreshQuickSlot(self):pageNum = player.GetQuickPage()
try:
self.quickPageNumImageBox.LoadImage(TaskBar.QUICKPAGE_NUMBER_FILENAME[pageNum])
except:
passstartNumber = 0
for slot in self.quickslot:for i in xrange(4):
slotNumber = i+startNumber
(Type, Position) = player.GetLocalQuickSlot(slotNumber)
if player.SLOT_TYPE_NONE == Type:
slot.ClearSlot(slotNumber)
continueif player.SLOT_TYPE_INVENTORY == Type:
itemIndex = player.GetItemIndex(Position)
itemCount = player.GetItemCount(Position)
if itemCount <= 1:
itemCount = 0
## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
if constInfo.IS_AUTO_POTION(itemIndex):
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
if 0 != int(metinSocket[0]):
slot.ActivateSlot(slotNumber)
else:
slot.DeactivateSlot(slotNumber)
slot.SetItemSlot(slotNumber, itemIndex, itemCount)elif player.SLOT_TYPE_SKILL == Type:
skillIndex = player.GetSkillIndex(Position)
if 0 == skillIndex:
slot.ClearSlot(slotNumber)
continueskillType = skill.GetSkillType(skillIndex)
if skill.SKILL_TYPE_GUILD == skillType:
import guild
skillGrade = 0
skillLevel = guild.GetSkillLevel(Position)else:
skillGrade = player.GetSkillGrade(Position)
skillLevel = player.GetSkillLevel(Position)slot.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
slot.SetSlotCountNew(slotNumber, skillGrade, skillLevel)
slot.SetCoverButton(slotNumber)## NOTE : CoolTime 체크
if player.IsSkillCoolTime(Position):
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)## NOTE : Activate 되어 있다면 아이콘도 업데이트
if player.IsSkillActive(Position):
slot.ActivateSlot(slotNumber)elif player.SLOT_TYPE_EMOTION == Type:
emotionIndex = Position
slot.SetEmotionSlot(slotNumber, emotionIndex)
slot.SetCoverButton(slotNumber)
slot.SetSlotCount(slotNumber, 0)slot.RefreshSlot()
startNumber += 4def canAddQuickSlot(self, Type, slotNumber):
if player.SLOT_TYPE_INVENTORY == Type:
itemIndex = player.GetItemIndex(slotNumber)
return item.CanAddToQuickSlotItem(itemIndex)return TRUE
def AddQuickSlot(self, localSlotIndex):
AttachedSlotType = mouseModule.mouseController.GetAttachedType()
AttachedSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
AttachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()if player.SLOT_TYPE_QUICK_SLOT == AttachedSlotType:
player.RequestMoveGlobalQuickSlotToLocalQuickSlot(AttachedSlotNumber, localSlotIndex)elif player.SLOT_TYPE_EMOTION == AttachedSlotType:
player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedItemIndex)
elif TRUE == self.canAddQuickSlot(AttachedSlotType, AttachedSlotNumber):
## Online Code
player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedSlotNumber)
mouseModule.mouseController.DeattachObject()
self.RefreshQuickSlot()def SelectEmptyQuickSlot(self, slotIndex):
if TRUE == mouseModule.mouseController.isAttached():
self.AddQuickSlot(slotIndex)def SelectItemQuickSlot(self, localQuickSlotIndex):
if TRUE == mouseModule.mouseController.isAttached():
self.AddQuickSlot(localQuickSlotIndex)else:
globalQuickSlotIndex=player.LocalQuickSlotIndexToGlobalQuickSlotIndex(localQuickSlotIndex)
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_QUICK_SLOT, globalQuickSlotIndex, globalQuickSlotIndex)def UnselectItemQuickSlot(self, localSlotIndex):
if FALSE == mouseModule.mouseController.isAttached():
player.RequestUseLocalQuickSlot(localSlotIndex)
returnelif mouseModule.mouseController.isAttached():
mouseModule.mouseController.DeattachObject()
return
def OnUseSkill(self, usedSlotIndex, coolTime):QUICK_SLOT_SLOT_COUNT = 4
slotIndex = 0## Current Skill Button
if usedSlotIndex == self.curSkillButton.GetSlotIndex():
self.curSkillButton.Activate(coolTime)## Quick Slot
for slotWindow in self.quickslot:for i in xrange(QUICK_SLOT_SLOT_COUNT):
(Type, Position) = player.GetLocalQuickSlot(slotIndex)
if Type == player.SLOT_TYPE_SKILL:
if usedSlotIndex == Position:
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
returnslotIndex += 1
def OnActivateSkill(self, usedSlotIndex):
slotIndex = 0## Current Skill Button
if usedSlotIndex == self.curSkillButton.GetSlotIndex():
self.curSkillButton.Deactivate()## Quick Slot
for slotWindow in self.quickslot:for i in xrange(4):
(Type, Position) = player.GetLocalQuickSlot(slotIndex)
if Type == player.SLOT_TYPE_SKILL:
if usedSlotIndex == Position:
slotWindow.ActivateSlot(slotIndex)
returnslotIndex += 1
def OnDeactivateSkill(self, usedSlotIndex):
slotIndex = 0## Current Skill Button
if usedSlotIndex == self.curSkillButton.GetSlotIndex():
self.curSkillButton.Deactivate()## Quick Slot
for slotWindow in self.quickslot:for i in xrange(4):
(Type, Position) = player.GetLocalQuickSlot(slotIndex)
if Type == player.SLOT_TYPE_SKILL:
if usedSlotIndex == Position:
slotWindow.DeactivateSlot(slotIndex)
returnslotIndex += 1
## ToolTip
def OverInItem(self, slotNumber):
if mouseModule.mouseController.isAttached():
return(Type, Position) = player.GetLocalQuickSlot(slotNumber)
if player.SLOT_TYPE_INVENTORY == Type:
self.tooltipItem.SetInventoryItem(Position)
self.tooltipSkill.HideToolTip()elif player.SLOT_TYPE_SKILL == Type:
skillIndex = player.GetSkillIndex(Position)
skillType = skill.GetSkillType(skillIndex)if skill.SKILL_TYPE_GUILD == skillType:
import guild
skillGrade = 0
skillLevel = guild.GetSkillLevel(Position)else:
skillGrade = player.GetSkillGrade(Position)
skillLevel = player.GetSkillLevel(Position)self.tooltipSkill.SetSkillNew(Position, skillIndex, skillGrade, skillLevel)
self.tooltipItem.HideToolTip()def OverOutItem(self):
if 0 != self.tooltipItem:
self.tooltipItem.HideToolTip()
if 0 != self.tooltipSkill:
self.tooltipSkill.HideToolTip()def OnUpdate(self):
if app.GetGlobalTime() - self.lastUpdateQuickSlot > 500:
self.lastUpdateQuickSlot = app.GetGlobalTime()
self.RefreshQuickSlot()if TRUE == self.hpGaugeBoard.IsIn():
self.tooltipHP.Show()
else:
self.tooltipHP.Hide()if TRUE == self.mpGaugeBoard.IsIn():
self.tooltipSP.Show()
else:
self.tooltipSP.Hide()if TRUE == self.stGaugeBoard.IsIn():
self.tooltipST.Show()
else:
self.tooltipST.Hide()
if TRUE == self.expGaugeBoard.IsIn():
self.tooltipEXP.Show()
else:
self.tooltipEXP.Hide()
## Skill
def ToggleLeftMouseButtonModeWindow(self):wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
if TRUE == wndMouseButtonMode.IsShow():
wndMouseButtonMode.Hide()
else:
wndMouseButtonMode.Show()def ToggleRightMouseButtonModeWindow(self):
wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
if TRUE == wndMouseButtonMode.IsShow():
wndMouseButtonMode.Hide()
self.CloseSelectSkill()else:
wndMouseButtonMode.Show()
self.OpenSelectSkill()def OpenSelectSkill(self):
PAGE_SLOT_COUNT = 6
(xSkillButton, y) = self.curSkillButton.GetGlobalPosition()
y -= (37 + 32 + 1)for key in self.skillCategoryNameList:
appendCount = 0
startNumber = self.skillPageStartSlotIndexDict[key]
x = xSkillButtongetSkillIndex=player.GetSkillIndex
getSkillLevel=player.GetSkillLevel
for i in xrange(PAGE_SLOT_COUNT):skillIndex = getSkillIndex(startNumber+i)
skillLevel = getSkillLevel(startNumber+i)if 0 == skillIndex:
continue
if 0 == skillLevel:
continue
if skill.IsStandingSkill(skillIndex):
continue## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다.
## 이 부분은 시간을 나면 고치도록. - [levites]
skillButton = self.SkillButton()
skillButton.SetSkill(startNumber+i)
skillButton.SetPosition(x, y)
skillButton.SetSkillEvent(ui.__mem_func__(self.CloseSelectSkill), startNumber+i+1)
skillButton.SetSkillToolTip(self.tooltipSkill)
skillButton.SetTop()
skillButton.Show()
self.selectSkillButtonList.append(skillButton)appendCount += 1
x -= 32if appendCount > 0:
y -= 32def CloseSelectSkill(self, slotIndex=-1):
self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT].Hide()
for button in self.selectSkillButtonList:
button.Destroy()self.selectSkillButtonList = []
if -1 != slotIndex:
self.curSkillButton.Show()
self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
player.SetMouseFunc(player.MBT_RIGHT, player.MBF_SKILL)
player.ChangeCurrentSkillNumberOnly(slotIndex-1)
else:
self.curSkillButton.Hide()
self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Show()def SelectMouseButtonEvent(self, dir, event):
SetMouseButtonSetting(dir, event)self.CloseSelectSkill()
self.mouseModeButtonList[dir].Hide()btn = 0
type = self.NONE
func = self.NONE
tooltip_text = ""
if self.MOUSE_BUTTON_LEFT == dir:
type = player.MBT_LEFTelif self.MOUSE_BUTTON_RIGHT == dir:
type = player.MBT_RIGHTif self.EVENT_MOVE == event:
btn = self.mouseModeButtonList[dir].GetChild("button_move")
func = player.MBF_MOVE
tooltip_text = localeInfo.TASKBAR_MOVE
elif self.EVENT_ATTACK == event:
btn = self.mouseModeButtonList[dir].GetChild("button_attack")
func = player.MBF_ATTACK
tooltip_text = localeInfo.TASKBAR_ATTACK
elif self.EVENT_AUTO == event:
btn = self.mouseModeButtonList[dir].GetChild("button_auto_attack")
func = player.MBF_AUTO
tooltip_text = localeInfo.TASKBAR_AUTO
elif self.EVENT_MOVE_AND_ATTACK == event:
btn = self.mouseModeButtonList[dir].GetChild("button_move_and_attack")
func = player.MBF_SMART
tooltip_text = localeInfo.TASKBAR_ATTACK
elif self.EVENT_CAMERA == event:
btn = self.mouseModeButtonList[dir].GetChild("button_camera")
func = player.MBF_CAMERA
tooltip_text = localeInfo.TASKBAR_CAMERA
elif self.EVENT_SKILL == event:
btn = self.mouseModeButtonList[dir].GetChild("button_skill")
func = player.MBF_SKILL
tooltip_text = localeInfo.TASKBAR_SKILLif 0 != btn:
self.curMouseModeButton[dir].SetToolTipText(tooltip_text, 0, -18)
self.curMouseModeButton[dir].SetUpVisual(btn.GetUpVisualFileName())
self.curMouseModeButton[dir].SetOverVisual(btn.GetOverVisualFileName())
self.curMouseModeButton[dir].SetDownVisual(btn.GetDownVisualFileName())
self.curMouseModeButton[dir].Show()player.SetMouseFunc(type, func)
def OnChangeCurrentSkill(self, skillSlotNumber):
self.curSkillButton.SetSkill(skillSlotNumber)
self.curSkillButton.Show()
self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
Obrigado
Espero que dê para ajudares :p
Cumprimentos -
-
Boas comunidade,
Passei a usar o cliente "Client Maxmi - Lycan" .
- Quando clico "f5" abre um bot de rodar (https://prnt.sc/qij7z1 este quero definitivo)
- Por baixo do inventario tem um icon de bot de rodar , eu clico e aparece outro (https://prnt.sc/qij8iq)
Eu gostava de meter o bot de rodar do "f5" a abrir quando clicasse no botão lá de baixo (botao esse que de momento está a abrir o outro bot de rodar que quero excluir).
Alguem me poderia ajudar?
Obrigado
Cumprimentos
Agradeço Resposta -
Up, continuo com as mesmas dúvidas...
Queria também dizer que na loja geral aparece que o item custa 0 yang mas não diz "gratis" como em certos servidores .. será disso? como resolvo? (vou deixar um print abaixo)
Spoiler
-
-
-
Db dumped - Totalmente inseguro , muito edit e "hack" de chat Caneta azul ou como se chama isso (
)
-
-
Boas,
Em relação aos penteados :
Implementei na loja geral do meu "servidor" os penteados com defesas... porém quando os equipo ocorre o seguinte (equipo porém nos disfarces não aparece nada.. é como se tivesse desaparecido) :Spoiler
Em relação aos vendedores :
Meti certos itens na loja geral (inclusive cabelos) e aparem a 0 yang (não fui eu que alterei) mas quando vou para comprar aparece : "Yang insuficiente", porque é que isto acontece ? como resolvo?
Já agr também gostava de saber como altero estes nomes das paginas que supostamente deviam ser "Seguinte" /"Anterior"... e se possível como desativar essa opção apenas nesta janela porque na página seguinte não tenho loja nenhuma...Spoiler
Obrigado pela atenção
Agradeço resposta
Cumprimentos -
9 minutos atrás, Karbust disse:Experimenta esta:
quest first_login begin state start begin when login with pc.getqf("firstlogin") == 0 begin ------------------------------------------------------- ---------------- Customization start ---------------- --local StartLevel = 45 --Player level --local StartKarma = 1000 --Player Karma local StartGold = 20000000 --Player Gold local HorseLevel = 30 --Horse level local HorseBookV = 50053 --Horse Book value local Items = { {299, 1, 4, 4, 0}, --Espada Lua Cheia+9 (Warrior) {299, 1, 4, 4, 2}, --Espada Lua Cheia+9 (Sura) {1179, 1, 4, 4, 1}, --Adaga Folha Negra+9 {2159, 1, 4, 4, 1}, --Arco de ARmação+9 {3219, 1, 4, 4, 0}, --Lâmina Ferro Vermelho+9 {7169, 1, 4, 4, 3}, --Leque Vento de Outono+9 {11259, 1, 0, 4, 0}, --Armadura Dragão+9 {11459, 1, 0, 4, 1}, --Quimono do Assassino+9 {11659, 1, 0, 4, 2}, --Armadura Mística+9 {11859, 1, 0,4, 3}, --Robe Solar+9 {12249, 1, 1, 4, 0}, --Elmo Máscara Fantasma+9 {12389, 1, 1, 4, 1}, --Capuz de Aço+9 {12529, 1, 1, 4, 2}, --Capacete Castelo+9 {12669, 1, 1, 4, 3}, --Chapéu da Luz do Sol+9 {13049, 1, 10, 4, 4}, --Escudo de Redondo Preto+9 {14149, 1, 3, 4, 4}, --Pulseira de Platina+9 {15149, 1, 2, 4, 4}, --Sapatos em Jade+9 {16149, 1, 5, 4, 4}, --Colar de Platina+9 {17149, 1, 6, 4, 4}, --Brincos de Platina+9 } local Items2 = { {27112, 50}, --Poção Verde(P) {27115, 50}, --Poção Roxa(P) {72723, 1}, --Elixir do Sol(P) {72727, 1}, --ELixir da Lua(P) {70038, 1}, --Capa de Bravura {72702, 1}, --Sapatos de Vento+ (N) {72001, 1}, --Anel de Experiência {71051, 18}, --Enfeitiçar Itens {71052, 50}, --Benção para Itens {71084, 100}, --Feitiço para Itens {71085, 36}, --Reforço para Itens {70024, 9}, --Mármore da Benção } ---------------- Customization end ---------------- ------------------------------------------------------- for i = 1, table.getn(Items), 1 do ItemValue = Items[i][1] --Retrieve Item Value. ItemCount = Items[i][2] --Retrieve Item Count. ItemSocket = Items[i][3] --Retrieve Item Socket. PgEmpire = Items[i][4] --Retrieve necessary Pg Empire. PgJob = Items[i][5] --Retrieve necessary Pg Job. if pc.get_job() == PgJob or PgJob == 4 then if pc.get_empire() == PgEmpire or PgEmpire == 4 then pc.give_item2(ItemValue, ItemCount) --item.equip(ItemSocket) end --End Empire check end --End check Pg Job end --End For loop. for i = 1, table.getn(Items2), 1 do ItemValue = Items2[i][1] --Retrieve Item Value. ItemCount = Items2[i][2] --Retrieve Item Count. pc.give_item2(ItemValue, ItemCount) end --End For loop. --[[while pc.get_level() < StartLevel do --While loop as long pg level is minor than selected level. pc.give_exp2(pc.get_next_exp()) end]]-- --pc.set_level(StartLevel) --pc.changealignment(StartKarma) --Set Player Karma. pc.changegold(StartGold) --Set Player Gold. pc.set_skill_level(130,30) pc.set_skill_level(131,49) pc.set_skill_level(132,20) pc.set_skill_level(137,20) pc.set_skill_level(138,20) pc.set_skill_level(139,20) horse.set_level(HorseLevel) --Set Horse level. pc.give_item2(HorseBookV) --Give horse book. pc.setqf("firstlogin", 1) --Set the quest flag "firstlogin" to 1. set_state("__EmptyState__") --Set a new empty state. end --End When end --End Main State state __EmptyState__ begin end --End Empty State end --End Quest
Tirei das minhas quests, muda o que quiseres.
Agredeçido @Karbust, vou editar e ver se dá certo haha -
Boas,
Esta foi a quest que tentei implementar no meu servidor, tirei daqui da cybergamers porém editei-a e quando a vou a meter não dá :/ "give_basic_weapon.quest:1:Error ocurred on compile give_basic_weapon.quest"
Eu já estou farto de tentar resolver o problema porém como n percebo mt de quests é provável que seja uma coisa básica... Já tive a ver muitas quests destas aqui na cybergamers mas mesmo assim não consigo identificar o erro... agradecia que me ajudassem
Esta é a quest:
quest give_basic_weapon begin state start begin when login with pc.getqf("inicio") == 0 begin pc.setqf("inicio","1") notice_all ("O jogador "..pc.get_name().." iniciou a sua aventura no CastleMt2") if pc.job == 0 then -- Guerreiro horse.unride() horse.set_level(30) horse.ride() pc.give_item2(469) pc.give_item2(3199) pc.give_item2(20009) pc.give_item2(12259) pc.give_item2(15089) pc.give_item2(13069) pc.give_item2(13089) pc.give_item2(13109) pc.give_item2(13129) pc.give_item2(14209) pc.give_item2(17109) pc.give_item2(16209) pc.give_item2(72726,200) pc.give_item2(72730,200) pc.give_item2(27003,200) pc.give_item2(27006,200) pc.give_item2(27102,200) pc.give_item2(27105,200) pc.give_item2(72701) elseif pc.job == 1 then -- Ninja horse.unride() horse.set_level(30) horse.ride() pc.give_item2(2379) pc.give_item2(1349) pc.give_item2(20259) pc.give_item2(12399) pc.give_item2(15089) pc.give_item2(13069) pc.give_item2(13089) pc.give_item2(13109) pc.give_item2(13129) pc.give_item2(14209) pc.give_item2(17169) pc.give_item2(16209) pc.give_item2(72726,200) pc.give_item2(72730,200) pc.give_item2(27003,200) pc.give_item2(27006,200) pc.give_item2(27102,200) pc.give_item2(27105,200) pc.give_item2(72701) elseif pc.job == 2 then -- Sura horse.unride() horse.set_level(30) horse.ride() pc.give_item2(479) pc.give_item2(469) pc.give_item2(20509) pc.give_item2(12539) pc.give_item2(15089) pc.give_item2(13069) pc.give_item2(13089) pc.give_item2(13109) pc.give_item2(13129) pc.give_item2(14209) pc.give_item2(17209) pc.give_item2(16209) pc.give_item2(72726,200) pc.give_item2(72730,200) pc.give_item2(27003,200) pc.give_item2(27006,200) pc.give_item2(27102,200) pc.give_item2(27105,200) pc.give_item2(72701) elseif pc.job == 3 then -- Shaman horse.unride() horse.set_level(30) horse.ride() pc.give_item2(5349) pc.give_item2(7379) pc.give_item2(20759) pc.give_item2(12679) pc.give_item2(15089) pc.give_item2(13069) pc.give_item2(13089) pc.give_item2(13109) pc.give_item2(13129) pc.give_item2(14209) pc.give_item2(17209) pc.give_item2(16209) pc.give_item2(72726,200) pc.give_item2(72730,200) pc.give_item2(27003,200) pc.give_item2(27006,200) pc.give_item2(27102,200) pc.give_item2(27105,200) pc.give_item2(72701) end end while pc.get_level() < 240 do pc.give_exp2(pc.get_next_exp()) end end end
Agradeço resposta :D Cumprimentos -
Boas,
Alguém me consegue safar o windows.dds traduzido em pt? Eu tentei copiar este mas como era de esperar em vez de transparente houveram partes que ficaram pretas :c
Agradeço resposta e cumprimentos :DEm 23/11/2015 at 01:33, Tyler Durden disse: -
1 hora atrás, Karbust disse:Em relação às armas, já houve casos em que era preciso colocar um TAB no fim da linha, nunca descobri um padrão, nunca ponha em tudo, mas algumas cenas só funcionavam assim...
96000 ARMOR icon/item/96000.tga 96001 ARMOR icon/item/96001.tga 96002 ARMOR icon/item/96002.tga 96003 ARMOR icon/item/96003.tga 96004 WEAPON icon/item/96004.tga d:/ymir work/item/weapon/96004.gr2 96005 WEAPON icon/item/96005.tga d:/ymir work/item/weapon/96005.gr2 96006 WEAPON icon/item/96006.tga d:/ymir work/item/weapon/96006.gr2 96007 WEAPON icon/item/96007.tga d:/ymir work/item/weapon/96007.gr2 96008 WEAPON icon/item/96008.tga d:/ymir work/item/weapon/96008.gr2 96009 WEAPON icon/item/96009.tga d:/ymir work/item/weapon/96009.gr2 96010 WEAPON icon/item/96010.tga d:/ymir work/item/weapon/96010.gr2
As armaduras, coloca aí as partes dos .msm.
Agradeço imenso a tentativa de ajudar mas já não é preciso, o cliente era bastante antigo então decidi sacar um novo que já tivesse tudo isso e mais alguns sistemas .
[PEDIDO] Contagem De Jogadores no Cliente
in Dúvidas & Pedidos
Posted
UP