Register for your free account! | Forgot your password?

You last visited: Today at 01:37

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Python BonusBoard

Discussion on Python BonusBoard within the Metin2 Private Server forum part of the Metin2 category.

Reply
 
Old   #1
 
Mr.Xhater's Avatar
 
elite*gold: 0
Join Date: Nov 2013
Posts: 401
Received Thanks: 132
Python BonusBoard

Guten Mittag,
Mein Problem ich drücke Ingame F7 doch das Bonusboard erscheint nicht.

Syser
PHP Code:
0210 16:40:53019 :: NameError
0210 16
:40:53019 :: : 
0210 16:40:53019 :: global name 'BPisLoaded' is not defined
0210 16
:40:53019 :: 

0210 16:40:53019 :: Traceback (most recent call last):

0210 16:40:53020 ::   File "game.py"line 1178in OnKeyDown

0210 16
:40:53020 ::   File "game.py"line 327in <lambda>

0210 16:40:53020 ::   File "game.py"line 2137in __BonusPage

0210 16
:40:53020 :: NameError
0210 16
:40:53020 :: : 
0210 16:40:53020 :: global name 'BPisLoaded' is not defined
0210 16
:40:53020 :: 
Game.py

PHP Code:
import 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 locale
import constInfo
import exchange
import ime

import ui
import uiCommon
import uiPhaseCurtain
import uiMapNameShower
import uiAffectShower
import uiPlayerGauge
import uiCharacter
import uiTarget

# PRIVATE_SHOP_PRICE_LIST
import uiPrivateShopBuilder
# END_OF_PRIVATE_SHOP_PRICE_LIST

import mouseModule
import consoleModule
import locale

import playerSettingModule
import interfaceModule

import musicInfo
import debugInfo
import stringCommander

from _weakref import proxy

# TEXTTAIL_LIVINGTIME_CONTROL
#if locale.IsJAPAN():
#    app.SetTextTailLivingTime(8.0)
# END_OF_TEXTTAIL_LIVINGTIME_CONTROL

# SCREENSHOT_CWDSAVE
SCREENSHOT_CWDSAVE FALSE
SCREENSHOT_DIR 
None

if locale.IsEUROPE():
    
SCREENSHOT_CWDSAVE TRUE

if locale.IsCIBN10():
    
SCREENSHOT_CWDSAVE FALSE
        SCREENSHOT_DIR 
"YT2W"

cameraDistance 1550.0
cameraPitch 
27.0
cameraRotation 
0.0
cameraHeight 
100.0

testAlignment 
0

class GameWindow(ui.ScriptWindow):
    
def __init__(selfstream):
        
ui.ScriptWindow.__init__(self"GAME")
        
self.SetWindowName("game")
        
net.SetPhaseWindow(net.PHASE_WINDOW_GAMEself)
        
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()

        
self.__SetQuickSlotMode()

        
self.__ServerCommand_Build()
        
self.__ProcessPreservedServerCommand()

    
def __del__(self):
        
player.SetGameWindow(0)
        
net.ClearPhaseWindow(net.PHASE_WINDOW_GAMEself)
        
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 cameraDistancecameraPitchcameraRotationcameraHeight

        app
.SetCamera(cameraDistancecameraPitchcameraRotationcameraHeight)

        
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(locale.UI_LEFT_TIME)

        
textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE)

        if 
constInfo.PVPMODE_TEST_ENABLE:
            
self.testPKMode ui.TextLine()
            
self.testPKMode.SetFontName(locale.UI_DEF_FONT)
            
self.testPKMode.SetPosition(015)
            
self.testPKMode.SetWindowHorizontalAlignCenter()
            
self.testPKMode.SetHorizontalAlignCenter()
            
self.testPKMode.SetFeather()
            
self.testPKMode.SetOutline()
            
self.testPKMode.Show()

            
self.testAlignment ui.TextLine()
            
self.testAlignment.SetFontName(locale.UI_DEF_FONT)
            
self.testAlignment.SetPosition(035)
            
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
        
self.cubeInformation = {}
        
self.currentCubeNPC 0

    def Close
(self):
        
self.Hide()

        global 
cameraDistancecameraPitchcameraRotationcameraHeight
        
(cameraDistancecameraPitchcameraRotationcameraHeight) = 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
.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.__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()

        
#ij¸¯ÅÍ À̵¿Å°
        
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]            = lambdaapp.RotateCamera(app.CAMERA_TO_POSITIVE)
        
onPressKeyDict[app.DIK_R]            = lambdaapp.ZoomCamera(app.CAMERA_TO_NEGATIVE)
        
#onPressKeyDict[app.DIK_F]            = lambda: app.ZoomCamera(app.CAMERA_TO_POSITIVE)
        
onPressKeyDict[app.DIK_T]            = lambdaapp.PitchCamera(app.CAMERA_TO_NEGATIVE)
        
onPressKeyDict[app.DIK_G]            = self.__PressGKey
        onPressKeyDict
[app.DIK_Q]            = self.__PressQKey

        onPressKeyDict
[app.DIK_NUMPAD9]        = lambdaapp.MovieResetCamera()
        
onPressKeyDict[app.DIK_NUMPAD4]        = lambdaapp.MovieRotateCamera(app.CAMERA_TO_NEGATIVE)
        
onPressKeyDict[app.DIK_NUMPAD6]        = lambdaapp.MovieRotateCamera(app.CAMERA_TO_POSITIVE)
        
onPressKeyDict[app.DIK_PGUP]        = lambdaapp.MovieZoomCamera(app.CAMERA_TO_NEGATIVE)
        
onPressKeyDict[app.DIK_PGDN]        = lambdaapp.MovieZoomCamera(app.CAMERA_TO_POSITIVE)
        
onPressKeyDict[app.DIK_NUMPAD8]        = lambdaapp.MoviePitchCamera(app.CAMERA_TO_NEGATIVE)
        
onPressKeyDict[app.DIK_NUMPAD2]        = lambdaapp.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_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] = lambdaapp.RotateCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_E] = lambdaapp.RotateCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_R] = lambdaapp.ZoomCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_F] = lambdaapp.ZoomCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_T] = lambdaapp.PitchCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_G] = lambdaself.__ReleaseGKey()
        
onClickKeyDict[app.DIK_NUMPAD4] = lambdaapp.MovieRotateCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_NUMPAD6] = lambdaapp.MovieRotateCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_PGUP] = lambdaapp.MovieZoomCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_PGDN] = lambdaapp.MovieZoomCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_NUMPAD8] = lambdaapp.MoviePitchCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_NUMPAD2] = lambdaapp.MoviePitchCamera(app.CAMERA_STOP)
        
onClickKeyDict[app.DIK_LALT] = lambdaself.HideName()
        
onClickKeyDict[app.DIK_LCONTROL] = lambdaself.HideMouseImage()
        
onClickKeyDict[app.DIK_LSHIFT] = lambdaself.__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 >= and num <= 9:
                if(
chrmgr.IsPossibleEmoticon(-1)):                
                    
chrmgr.SetEmoticon(-1,int(num)-1)
                    
net.SendEmoticon(int(num)-1)
        else:
            if 
num >= 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(iin (71114711167111871120):
                            
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(selflocalSlotIndex):
        
player.RequestUseLocalQuickSlot(localSlotIndex)

    
def __SelectQuickPage(selfpageIndex):
        
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()
        else:
            
self.PrintCoord.Hide()
            
self.FrameRate.Hide()
            
self.Pitch.Hide()
            
self.Splat.Hide()
            
self.TextureNum.Hide()
            
self.ObjectNum.Hide()
            
self.ViewDistance.Hide()

    
def __BuildDebugInfo(self):
        
## Character Position Coordinate
        
self.PrintCoord ui.TextLine()
        
self.PrintCoord.SetFontName(locale.UI_DEF_FONT)
        
self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 2700)

        
## Frame Rate
        
self.FrameRate ui.TextLine()
        
self.FrameRate.SetFontName(locale.UI_DEF_FONT)
        
self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 27020)

        
## Camera Pitch
        
self.Pitch ui.TextLine()
        
self.Pitch.SetFontName(locale.UI_DEF_FONT)
        
self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 27040)

        
## Splat
        
self.Splat ui.TextLine()
        
self.Splat.SetFontName(locale.UI_DEF_FONT)
        
self.Splat.SetPosition(wndMgr.GetScreenWidth() - 27060)

        
# TextureNum
        
self.TextureNum ui.TextLine()
        
self.TextureNum.SetFontName(locale.UI_DEF_FONT)
        
self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 27080)

        
# ¿ÀºêÁ§Æ® ±×¸®´Â °³¼ö
        
self.ObjectNum ui.TextLine()
        
self.ObjectNum.SetFontName(locale.UI_DEF_FONT)
        
self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270100)

        
# ½Ã¾ß°Å¸®
        
self.ViewDistance ui.TextLine()
        
self.ViewDistance.SetFontName(locale.UI_DEF_FONT)
        
self.ViewDistance.SetPosition(00)

    
def __NotifyError(selfmsg):
        
chat.AppendChat(chat.CHAT_TYPE_INFOmsg)

    
def ChangePKMode(self):

        if 
not app.IsPressed(app.DIK_LCONTROL):
            return

        if 
player.GetStatus(player.LEVEL)<constInfo.PVPMODE_PROTECTED_LEVEL:
            
self.__NotifyError(locale.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 
== player.GetGuildID():
                
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.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(locale.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()])
        
except KeyError:
            print 
"UNKNOWN PVPMode[%d]" % (player.GetPKMode())

        if 
constInfo.PVPMODE_TEST_ENABLE:
            
curPKMode player.GetPKMode()
            
alignmentgrade chr.testGetPKData()
            
self.pkModeNameDict = { "PEACE""REVENGE""FREE""PROTECT", }
            
self.testPKMode.SetText("Current PK Mode : " self.pkModeNameDict.get(curPKMode"UNKNOWN"))
            
self.testAlignment.SetText("Current Alignment : " str(alignment) + " (" locale.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(selfmode):
        
self.interface.OnBlockMode(mode)

    
def OpenQuestWindow(selfskinidx):
        
self.interface.OpenQuestWindow(skinidx)

    
def AskGuildName(self):

        
guildNameBoard uiCommon.InputDialog()
        
guildNameBoard.SetTitle(locale.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(locale.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(selfmsg):
        
self.stream.popupWindow.Close()
        
self.stream.popupWindow.Open(msg0locale.UI_OK)

    
def OpenRefineDialog(selftargetItemPosnextGradeItemVnumcostprobtype=0):
        
self.interface.OpenRefineDialog(targetItemPosnextGradeItemVnumcostprobtype)

    
def AppendMaterialToRefineDialog(selfvnumcount):
        
self.interface.AppendMaterialToRefineDialog(vnumcount)

    
def RunUseSkillEvent(selfslotIndexcoolTime):
        
self.interface.OnUseSkill(slotIndexcoolTime)

    
def ClearAffects(self):
        
self.affectShower.ClearAffects()

    
def SetAffect(selfaffect):
        
self.affectShower.SetAffect(affect)

    
def ResetAffect(selfaffect):
        
self.affectShower.ResetAffect(affect)

    
# UNKNOWN_UPDATE
    
def BINARY_NEW_AddAffect(selftypepointIdxvalueduration):
        
self.affectShower.BINARY_NEW_AddAffect(typepointIdxvalueduration)

    
def BINARY_NEW_RemoveAffect(selftypepointIdx):
        
self.affectShower.BINARY_NEW_RemoveAffect(typepointIdx)
    
# END_OF_UNKNOWN_UPDATE

    
def ActivateSkillSlot(selfslotIndex):
        if 
self.interface:
            
self.interface.OnActivateSkill(slotIndex)

    
def DeactivateSkillSlot(selfslotIndex):
        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(selfskillSlotNumber):
        
self.interface.OnChangeCurrentSkill(skillSlotNumber)

    
## TargetBoard
    
def SetPCTargetBoard(selfvidname):
        
self.targetBoard.Open(vidname)
        
        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(selfvid):
        
self.targetBoard.RefreshByVID(vid)

    
def RefreshTargetBoardByName(selfname):
        
self.targetBoard.RefreshByName(name)
        
    
def __RefreshTargetBoard(self):
        
self.targetBoard.Refresh()
        
    
def SetHPTargetBoard(selfvidhpPercentage):
        if 
vid != self.targetBoard.GetTargetVID():
            
self.targetBoard.ResetTargetBoard()
            
self.targetBoard.SetEnemyVID(vid)

        
self.targetBoard.SetHP(hpPercentage)
        
self.targetBoard.Show()

    
def CloseTargetBoardIfDifferent(selfvid):
        if 
vid != self.targetBoard.GetTargetVID():
            
self.targetBoard.Close()

    
def CloseTargetBoard(self):
        
self.targetBoard.Close()

    
## View Equipment
    
def OpenEquipmentDialog(selfvid):
        
self.interface.OpenEquipmentDialog(vid)

    
def SetEquipmentDialogItem(selfvidslotIndexvnumcount):
        
self.interface.SetEquipmentDialogItem(vidslotIndexvnumcount)

    
def SetEquipmentDialogSocket(selfvidslotIndexsocketIndexvalue):
        
self.interface.SetEquipmentDialogSocket(vidslotIndexsocketIndexvalue)

    
def SetEquipmentDialogAttr(selfvidslotIndexattrIndextypevalue):
        
self.interface.SetEquipmentDialogAttr(vidslotIndexattrIndextypevalue)

    
# SHOW_LOCAL_MAP_NAME
    
def ShowMapName(selfmapNamexy):

        if 
self.mapNameShower:
            
self.mapNameShower.ShowMapName(mapNamexy)

        if 
self.interface:
            
self.interface.SetMapName(mapName)
    
# END_OF_SHOW_LOCAL_MAP_NAME    

    
def BINARY_OpenAtlasWindow(self):
        
self.interface.BINARY_OpenAtlasWindow()

    
## Chat
    
def OnRecvWhisper(selfmodenameline):
        if 
mode == chat.WHISPER_TYPE_GM:
            
self.interface.RegisterGameMasterName(name)
        
chat.AppendWhisper(modenameline)
        
self.interface.RecvWhisper(name)

    
def OnRecvWhisperSystemMessage(selfmodenameline):
        
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEMnameline)
        
self.interface.RecvWhisper(name)

    
def OnRecvWhisperError(selfmodenameline):
        if 
locale.WHISPER_ERROR.has_key(mode):
            
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEMnamelocale.WHISPER_ERROR[mode](name))
        else:
            
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEMname"Whisper Unknown Error(mode=%d, name=%s)" % (modename))
        
self.interface.RecvWhisper(name)

    
def RecvWhisper(selfname):
        
self.interface.RecvWhisper(name)

    
def OnPickMoney(selfmoney):
        
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.GAME_PICK_MONEY % (money))

    
def OnShopError(selftype):
        try:
            
self.PopupMessage(locale.SHOP_ERROR_DICT[type])
        
except KeyError:
            
self.PopupMessage(locale.SHOP_ERROR_UNKNOWN % (type))

    
def OnSafeBoxError(self):
        
self.PopupMessage(locale.SAFEBOX_ERROR)

    
def OnFishingSuccess(selfisFishfishName):
        
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFOlocale.FISHING_SUCCESS(isFishfishName), 2000)

    
# ADD_FISHING_MESSAGE
    
def OnFishingNotifyUnknown(self):
        
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.FISHING_UNKNOWN)

    
def OnFishingWrongPlace(self):
        
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.FISHING_WRONG_PLACE)
    
# END_OF_ADD_FISHING_MESSAGE

    
def OnFishingNotify(selfisFishfishName):
        
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.FISHING_NOTIFY(isFishfishName))

    
def OnFishingFailure(self):
        
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFOlocale.FISHING_FAILURE2000)

    
def OnCannotPickItem(self):
        
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.GAME_CANNOT_PICK_ITEM)

    
# MINING
    
def OnCannotMining(self):
        
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.GAME_CANNOT_MINING)
    
# END_OF_MINING

    
def OnCannotUseSkill(selfvidtype):
        if 
locale.USE_SKILL_ERROR_TAIL_DICT.has_key(type):
            
textTail.RegisterInfoTail(vidlocale.USE_SKILL_ERROR_TAIL_DICT[type])

        if 
locale.USE_SKILL_ERROR_CHAT_DICT.has_key(type):
            
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.USE_SKILL_ERROR_CHAT_DICT[type])

    
def    OnCannotShotError(selfvidtype):
        
textTail.RegisterInfoTail(vidlocale.SHOT_ERROR_TAIL_DICT.get(typelocale.SHOT_ERROR_UNKNOWN % (type)))

    
## PointReset
    
def StartPointReset(self):
        
self.interface.OpenPointResetDialog()

    
## Shop
    
def StartShop(selfvid):
        
self.interface.OpenShopDialog(vid)

    
def EndShop(self):
        
self.interface.CloseShopDialog()

    
def RefreshShop(self):
        
self.interface.RefreshShopDialog()

    
def SetShopSellingPrice(selfPrice):
        
pass

    
## Exchange
    
def StartExchange(self):
        
self.interface.StartExchange()

    
def EndExchange(self):
        
self.interface.EndExchange()

    
def RefreshExchange(self):
        
self.interface.RefreshExchange()

    
## Party
    
def RecvPartyInviteQuestion(selfleaderVIDleaderName):
        
partyInviteQuestionDialog uiCommon.QuestionDialog()
        
partyInviteQuestionDialog.SetText(leaderName locale.PARTY_DO_YOU_JOIN)
        
partyInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUEself.AnswerPartyInvite(arg))
        
partyInviteQuestionDialog.SetCancelEvent(lambda arg=FALSEself.AnswerPartyInvite(arg))
        
partyInviteQuestionDialog.Open()
        
partyInviteQuestionDialog.partyLeaderVID leaderVID
        self
.partyInviteQuestionDialog partyInviteQuestionDialog

    def AnswerPartyInvite
(selfanswer):

        if 
not self.partyInviteQuestionDialog:
            return

        
partyLeaderVID self.partyInviteQuestionDialog.partyLeaderVID

        distance 
player.GetCharacterDistance(partyLeaderVID)
        if 
distance 0.0 or distance 5000:
            
answer FALSE

        net
.SendPartyInviteAnswerPacket(partyLeaderVIDanswer)

        
self.partyInviteQuestionDialog.Close()
        
self.partyInviteQuestionDialog None

    def AddPartyMember
(selfpidname):
        
self.interface.AddPartyMember(pidname)

    
def UpdatePartyMemberInfo(selfpid):
        
self.interface.UpdatePartyMemberInfo(pid)

    
def RemovePartyMember(selfpid):
        
self.interface.RemovePartyMember(pid)
        
self.__RefreshTargetBoard()

    
def LinkPartyMember(selfpidvid):
        
self.interface.LinkPartyMember(pidvid)

    
def UnlinkPartyMember(selfpid):
        
self.interface.UnlinkPartyMember(pid)

    
def UnlinkAllPartyMember(self):
        
self.interface.UnlinkAllPartyMember()

    
def ExitParty(self):
        
self.interface.ExitParty()
        
self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID())

    
def ChangePartyParameter(selfdistributionMode):
        
self.interface.ChangePartyParameter(distributionMode)

    
## Messenger
    
def OnMessengerAddFriendQuestion(selfname):
        
messengerAddFriendQuestion uiCommon.QuestionDialog2()
        
messengerAddFriendQuestion.SetText1(locale.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 % (name))
        
messengerAddFriendQuestion.SetText2(locale.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(selfsize):
        
self.interface.OpenSafeboxWindow(size)

    
def RefreshSafebox(self):
        
self.interface.RefreshSafebox()

    
def RefreshSafeboxMoney(self):
        
self.interface.RefreshSafeboxMoney()

    
# ITEM_MALL
    
def OpenMallWindow(selfsize):
        
self.interface.OpenMallWindow(size)

    
def RefreshMall(self):
        
self.interface.RefreshMall()
    
# END_OF_ITEM_MALL

    ## Guild
    
def RecvGuildInviteQuestion(selfguildIDguildName):
        
guildInviteQuestionDialog uiCommon.QuestionDialog()
        
guildInviteQuestionDialog.SetText(guildName locale.GUILD_DO_YOU_JOIN)
        
guildInviteQuestionDialog.SetAcceptEvent(lambda arg=TRUEself.AnswerGuildInvite(arg))
        
guildInviteQuestionDialog.SetCancelEvent(lambda arg=FALSEself.AnswerGuildInvite(arg))
        
guildInviteQuestionDialog.Open()
        
guildInviteQuestionDialog.guildID guildID
        self
.guildInviteQuestionDialog guildInviteQuestionDialog

    def AnswerGuildInvite
(selfanswer):

        if 
not self.guildInviteQuestionDialog:
            return

        
guildLeaderVID self.guildInviteQuestionDialog.guildID
        net
.SendGuildInviteAnswerPacket(guildLeaderVIDanswer)

        
self.guildInviteQuestionDialog.Close()
        
self.guildInviteQuestionDialog None

    
    def DeleteGuild
(self):
        
self.interface.DeleteGuild()

    
## Clock
    
def ShowClock(selfsecond):
        
self.interface.ShowClock(second)

    
def HideClock(self):
        
self.interface.HideClock()

    
## Emotion
    
def BINARY_ActEmotion(selfemotionIndex):
        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")

            (
succeededname) = grp.SaveScreenShotToPath(os.getcwd()+os.sep+"screenshot"+os.sep)
        
elif SCREENSHOT_DIR:
            (
succeededname) = grp.SaveScreenShot(SCREENSHOT_DIR)
        else:
            (
succeededname) = grp.SaveScreenShot()
        
# END_OF_SCREENSHOT_CWDSAVE

        
if succeeded:
            
pass
            
"""
            chat.AppendChat(chat.CHAT_TYPE_INFO, name + locale.SCREENSHOT_SAVE1)
            chat.AppendChat(chat.CHAT_TYPE_INFO, locale.SCREENSHOT_SAVE2)
            """
        
else:
            
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.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_UPTRUE)

    
def MoveDown(self):
        
player.SetSingleDIKKeyState(app.DIK_DOWNTRUE)

    
def MoveLeft(self):
        
player.SetSingleDIKKeyState(app.DIK_LEFTTRUE)

    
def MoveRight(self):
        
player.SetSingleDIKKeyState(app.DIK_RIGHTTRUE)

    
def StopUp(self):
        
player.SetSingleDIKKeyState(app.DIK_UPFALSE)

    
def StopDown(self):
        
player.SetSingleDIKKeyState(app.DIK_DOWNFALSE)

    
def StopLeft(self):
        
player.SetSingleDIKKeyState(app.DIK_LEFTFALSE)

    
def StopRight(self):
        
player.SetSingleDIKKeyState(app.DIK_RIGHTFALSE)

    
def PickUpItem(self):
        
player.PickCloseItem()

    
###############################################################################################
    ###############################################################################################
    ## Event Handler

    
def OnKeyDown(selfkey):
        if 
self.interface.wndWeb and self.interface.wndWeb.IsShow():
            return

        
constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0)

        try:
            
self.onPressKeyDict[key]()
        
except KeyError:
            
pass
        except
:
            
raise

        
return TRUE

    def OnKeyUp
(selfkey):
        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_LEFTplayer.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(attachedTypeattachedItemCountself.PickingCharacterIndex)
                else:
                    
self.__PutItem(attachedTypeattachedItemIndexattachedItemSlotPosattachedItemCountself.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_LEFTplayer.MBS_CLICK)

        
#player.EndMouseWalking()
        
return TRUE

    def __PutItem
(selfattachedTypeattachedItemIndexattachedItemSlotPosattachedItemCountdstChrID):
        if 
TRUE == chr.HasInstance(self.PickingCharacterIndex) and player.GetMainCharacterIndex() != dstChrID:
            if 
player.IsEquipmentSlot(attachedItemSlotPos):
                
self.stream.popupWindow.Close()
                
self.stream.popupWindow.Open(locale.EXCHANGE_FAILURE_EQUIP_ITEM0locale.UI_OK)
            else:
                if 
chr.IsNPC(dstChrID):
                    
net.SendGiveItemPacket(dstChrIDattachedItemSlotPosattachedItemCount)
                else:
                    
net.SendExchangeStartPacket(dstChrID)
                    
net.SendExchangeItemAddPacket(attachedItemSlotPos0)
        else:
            
self.__DropItem(attachedTypeattachedItemIndexattachedItemSlotPosattachedItemCount)

    
def __PutMoney(selfattachedTypeattachedMoneydstChrID):
        if 
TRUE == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID:
            
net.SendExchangeStartPacket(dstChrID)
            
net.SendExchangeElkAddPacket(attachedMoney)
        else:
            
self.__DropMoney(attachedTypeattachedMoney)

    
def __DropMoney(selfattachedTypeattachedMoney):
        
# PRIVATESHOP_DISABLE_ITEM_DROP - °³ÀλóÁ¡ ¿*°í Àִ µ¿¾È ¾ÆÀÌÅÛ ¹ö¸² ¹æÁö
        
if uiPrivateShopBuilder.IsBuildingPrivateShop():            
            
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.DROP_ITEM_FAILURE_PRIVATE_SHOP)
            return
        
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
        
        
if attachedMoney>=1000:
            
self.stream.popupWindow.Close()
            
self.stream.popupWindow.Open(locale.DROP_MONEY_FAILURE_1000_OVER0locale.UI_OK)
            return

        
itemDropQuestionDialog uiCommon.QuestionDialog()
        
itemDropQuestionDialog.SetText(locale.DO_YOU_DROP_MONEY % (attachedMoney))
        
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUEself.RequestDropItem(arg))
        
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSEself.RequestDropItem(arg))
        
itemDropQuestionDialog.Open()
        
itemDropQuestionDialog.dropType attachedType
        itemDropQuestionDialog
.dropCount attachedMoney
        itemDropQuestionDialog
.dropNumber player.ITEM_MONEY
        self
.itemDropQuestionDialog itemDropQuestionDialog

    def __DropItem
(selfattachedTypeattachedItemIndexattachedItemSlotPosattachedItemCount):
        
# PRIVATESHOP_DISABLE_ITEM_DROP - °³ÀλóÁ¡ ¿*°í Àִ µ¿¾È ¾ÆÀÌÅÛ ¹ö¸² ¹æÁö
        
if uiPrivateShopBuilder.IsBuildingPrivateShop():            
            
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.DROP_ITEM_FAILURE_PRIVATE_SHOP)
            return
        
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROP
        
        
if player.IsEquipmentSlot(attachedItemSlotPos):
            
self.stream.popupWindow.Close()
            
self.stream.popupWindow.Open(locale.DROP_ITEM_FAILURE_EQUIP_ITEM0locale.UI_OK)

        else:
            
dropItemIndex player.GetItemIndex(attachedItemSlotPos)

            
item.SelectItem(dropItemIndex)
            
dropItemName item.GetItemName()

            
## Question Text
            
questionText locale.HOW_MANY_ITEM_DO_YOU_DROP(dropItemNameattachedItemCount)

            
## Dialog
            
itemDropQuestionDialog uiCommon.QuestionDialog()
            
itemDropQuestionDialog.SetText(questionText)
            
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUEself.RequestDropItem(arg))
            
itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSEself.RequestDropItem(arg))
            
itemDropQuestionDialog.Open()
            
itemDropQuestionDialog.dropType attachedType
            itemDropQuestionDialog
.dropNumber attachedItemSlotPos
            itemDropQuestionDialog
.dropCount attachedItemCount
            self
.itemDropQuestionDialog itemDropQuestionDialog

            constInfo
.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(1)

    
def RequestDropItem(selfanswer):
        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(dropNumberdropCount)
                    
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROP

        
self.itemDropQuestionDialog.Close()
        
self.itemDropQuestionDialog None

        constInfo
.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0)

    
# PRIVATESHOP_DISABLE_ITEM_DROP
    
def __SendDropItemPacket(selfitemVNumitemCount):
        if 
uiPrivateShopBuilder.IsBuildingPrivateShop():
            
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.DROP_ITEM_FAILURE_PRIVATE_SHOP)
            return

        
net.SendItemDropPacketNew(itemVNumitemCount)
    
# END_OF_PRIVATESHOP_DISABLE_ITEM_DROP

    
def OnMouseRightButtonDown(self):

        
self.CheckFocus()

        if 
TRUE == mouseModule.mouseController.isAttached():
            
mouseModule.mouseController.DeattachObject()

        else:
            
player.SetMouseState(player.MBT_RIGHTplayer.MBS_PRESS)

        return 
TRUE

    def OnMouseRightButtonUp
(self):
        if 
TRUE == mouseModule.mouseController.isAttached():
            return 
TRUE

        player
.SetMouseState(player.MBT_RIGHTplayer.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()

        
self.interface.BUILD_OnUpdate()
        
        
    
def UpdateDebugInfo(self):
        
#
        # Ä³¸¯ÅÍ ÁÂÇ¥ ¹× FPS Ãâ·Â
        
(xyz) = player.GetMainCharacterPosition()
        
nUpdateTime app.GetUpdateTime()
        
nUpdateFPS app.GetUpdateFPS()
        
nRenderFPS app.GetRenderFPS()
        
nFaceCount app.GetFaceCount()
        
fFaceSpeed app.GetFaceSpeed()
        
nST=background.GetRenderShadowTime()
        (
fAveRTnCurRT) =  app.GetRenderTime()
        (
iNumfFogStartfFogEndfFarCilp) = background.GetDistanceSetInfo()
        (
iPatchiSplatfSplatRatiosTextureNum) = background.GetRenderedSplatNum()
        if 
iPatch == 0:
            
iPatch 1

        
#(dwRenderedThing, dwRenderedCRC) = background.GetRenderedGraphicThingInstanceNum()

        
self.PrintCoord.SetText("Coordinate: %.2f %.2f %.2f ATM: %d" % (xyzapp.GetAvailableTextureMemory()/(1024*1024)))            

        
self.FrameRate.SetText("UFPS: %3d UT: %3d FS %.2f" % (nUpdateFPSnUpdateTimefFaceSpeed))

        if 
fAveRT>1.0:
            
self.Pitch.SetText("RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) " % (nRenderFPSfAveRTnCurRTnFaceCountnFaceCount/fAveRT))

        
self.Splat.SetText("PATCH: %d SPLAT: %d BAD(%.2f)" % (iPatchiSplatfSplatRatio))
        
#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" % (iNumfFogStartfFogEndfFarCilp))

    
def OnRender(self):
        
app.RenderGame()
        
        if 
self.console.Console.collision:
            
background.RenderCollision()
            
chr.RenderCollision()

        (
xy) = app.GetCursorPosition()

        
########################
        # Picking
        ########################
        
textTail.UpdateAllTextTail()

        if 
TRUE == wndMgr.IsPickedWindow(self.hWnd):

            
self.PickingCharacterIndex chr.Pick()

            if -
!= self.PickingCharacterIndex:
                
textTail.ShowCharacterTextTail(self.PickingCharacterIndex)
            if 
!= self.targetBoard.GetTargetVID():
                
textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID())

            
# ADD_ALWAYS_SHOW_NAME
            
if not self.__IsShowName():
                
self.PickingItemIndex item.Pick()
                if -
!= 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(xy)
        
# END_OF_ADD_ALWAYS_SHOW_NAME

        
textTail.UpdateShowingTextTail()
        
textTail.ArrangeTextTail()
        if -
!= 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(selfnamelovePoint):
        if 
self.interface.wndMessenger:
            
self.interface.wndMessenger.OnAddLover(namelovePoint)
        if 
self.affectShower:
            
self.affectShower.SetLoverInfo(namelovePoint)

    
def BINARY_UpdateLovePoint(selflovePoint):
        if 
self.interface.wndMessenger:
            
self.interface.wndMessenger.OnUpdateLovePoint(lovePoint)
        if 
self.affectShower:
            
self.affectShower.OnUpdateLovePoint(lovePoint)
    
# END_OF_WEDDING
    
    # QUEST_CONFIRM
    
def BINARY_OnQuestConfirm(selfmsgtimeoutpid):
        
confirmDialog uiCommon.QuestionDialogWithTimeLimit()
        
confirmDialog.Open(msgtimeout)
        
confirmDialog.SetAcceptEvent(lambda answer=TRUEpid=pidnet.SendQuestConfirmPacket(answerpid) or self.confirmDialog.Hide())
        
confirmDialog.SetCancelEvent(lambda answer=FALSEpid=pidnet.SendQuestConfirmPacket(answerpid) or self.confirmDialog.Hide())
        
self.confirmDialog confirmDialog
    
# END_OF_QUEST_CONFIRM

    # GIFT command
    
def Gift_Show(self):
        
self.interface.ShowGift()

    
# CUBE by xGr33n & Lordechen
    
def BINARY_Cube_Open(self):
        
#constInfo.CRAFTING_NPC_ID_OLD = constInfo.CRAFTING_NPC_ID
        
self.interface.OpenCubeWindow()

        
        
#if constInfo.CRAFTING_NPC_ID != constInfo.CRAFTING_NPC_ID_OLD:
        
self.BINARY_Cube_ResultList()
        
self.BINARY_Cube_MaterialInfo()
        
self.interface.wndCube.Refresh()
        
#constInfo.CRAFTING_NPC_ID_OLD = constInfo.CRAFTING_NPC_ID
        #else:
        #    cubeInfoList = self.cubeInformation[constInfo.CRAFTING_NPC_ID]
        #    
        #    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.AddMaterialInfo(i, j, itemVnum, itemCount)
        #    self.interface.wndCube.Refresh()

    
def BINARY_Cube_Close(self):
        
self.interface.CloseCubeWindow()

    
# Á¦ÀÛ¿¡ ÇÊ¿äÇÑ °ñµå, ¿¹»óµÇ´Â ¿Ï¼ºÇ°ÀÇ VNUM°ú °³¼ö Á¤º¸ update
    
def BINARY_Cube_UpdateInfo(selfgolditemVnumcount):
        
self.interface.UpdateCubeInfo(golditemVnumcount)
        
    
def BINARY_Cube_Succeed(selfitemVnumcount):
        print 
"Å¥ºê Á¦ÀÛ ¼º°ø"
        
self.interface.SucceedCubeWork(itemVnumcount)
        
pass

    def BINARY_Cube_Failed
(self):
        print 
"Å¥ºê Á¦ÀÛ ½ÇÆÐ"
        
self.interface.FailedCubeWork()
        
pass

    def BINARY_Cube_ResultList
(self):
        
# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5  ÀÌ·±½ÄÀ¸·Î "/" ¹®ÀڷΠ±¸ºÐµÈ ¸®½ºÆ®¸¦ ÁÜ
        #print listText
        
listText constInfo.CRAFTING_RESULT
        self
.cubeInformation[constInfo.CRAFTING_NPC_ID] = []
        
        try:
            for 
eachInfoText in listText.split("/"):
                
eachInfo eachInfoText.split(",")
                
itemVnum    int(eachInfo[0])
                
itemCount    int(eachInfo[1])

                
self.cubeInformation[constInfo.CRAFTING_NPC_ID].append({"vnum"itemVnum"count"itemCount})
                
self.interface.wndCube.AddCubeResultItem(itemVnumitemCount)
            
            
resultCount len(self.cubeInformation[constInfo.CRAFTING_NPC_ID])
            
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" % (requestCountrequestCount))
                
            if 
modCount:
                
#print("/cube r_info %d %d" % (splitCount * requestCount, modCount))                
                
net.SendChatPacket("/cube r_info %d %d" % (splitCount requestCountmodCount))

        
except RuntimeErrormsg:
            
dbg.TraceError(msg)
            return 
0
            
        pass
        
    def BINARY_Cube_MaterialInfo
(self):
        
# Material Text Format : 125,1|126,2|127,2|123,5&555,5&555,4/120000
        
try:
            
#print listText
            
listText constInfo.CRAFTING_NEED
            startIndex 
0
            
if len(listText):
                
dbg.TraceError("Wrong Cube Material Infomation")
                return 
0

            
            
            eachResultList 
listText.split("@")

            
            
cubeInfo self.cubeInformation[constInfo.CRAFTING_NPC_ID]            
            
            
itemIndex 0
            
for eachResultText in eachResultList:
                
cubeInfo[startIndex itemIndex]["materialList"] = [[], [], [], [], []]
                
materialList cubeInfo[startIndex itemIndex]["materialList"]
                
                
gold 0
                splitResult 
eachResultText.split("/")
                if 
len(splitResult):
                    
gold int(splitResult[1])
                    
                
#print "splitResult : ", splitResult
                
eachMaterialList splitResult[0].split("&")
                
                
0
                
for eachMaterialText in eachMaterialList:
                    
complicatedList eachMaterialText.split("|")
                    
                    if 
len(complicatedList):
                        for 
complicatedText in complicatedList:
                            (
itemVnumitemCount) = complicatedText.split(",")
                            
itemVnum int(itemVnum)
                            
itemCount int(itemCount)
                            
self.interface.wndCube.AddMaterialInfo(itemIndex startIndexiitemVnumitemCount)
                            
                            
materialList[i].append((itemVnumitemCount))
                            
                    else:
                        
itemVnumitemCount eachMaterialText.split(",")
                        
itemVnum int(itemVnum)
                        
itemCount int(itemCount)
                        
self.interface.wndCube.AddMaterialInfo(itemIndex startIndexiitemVnumitemCount)
                        
                        
materialList[i].append((itemVnumitemCount))
                        
                    
1
                    
                    
                    
                itemIndex 
itemIndex 1
                
            
#self.interface.wndCube.Refresh()
            
            
self.interface.wndCube.SetScrollStep(itemIndex)
        
except RuntimeErrormsg:
            
dbg.TraceError(msg)
            return 
0
            
        pass
    
    
# END_OF_CUBE
    
    
def BINARY_SetBigMessage(selfmessage):
        
self.interface.bigBoard.SetTip(message)

    
def BINARY_SetTipMessage(selfmessage):
        
self.interface.tipBoard.SetTip(message)        

    
def BINARY_AppendNotifyMessage(selftype):
        if 
not type in locale.NOTIFY_MESSAGE:
            return
        
chat.AppendChat(chat.CHAT_TYPE_INFOlocale.NOTIFY_MESSAGE[type])

    
def BINARY_Guild_EnterGuildArea(selfareaID):
        
self.interface.BULID_EnterGuildArea(areaID)

    
def BINARY_Guild_ExitGuildArea(selfareaID):
        
self.interface.BULID_ExitGuildArea(areaID)

    
def BINARY_GuildWar_OnSendDeclare(selfguildID):
        
pass

    def BINARY_GuildWar_OnRecvDeclare
(selfguildIDwarType):
        
mainCharacterName player.GetMainCharacterName()
        
masterName guild.GetGuildMasterName()
        if 
mainCharacterName == masterName:
            
self.__GuildWar_OpenAskDialog(guildIDwarType)

    
def BINARY_GuildWar_OnRecvPoint(selfgainGuildIDopponentGuildIDpoint):
        
self.interface.OnRecvGuildWarPoint(gainGuildIDopponentGuildIDpoint)    

    
def BINARY_GuildWar_OnStart(selfguildSelfguildOpp):
        
self.interface.OnStartGuildWar(guildSelfguildOpp)

    
def BINARY_GuildWar_OnEnd(selfguildSelfguildOpp):
        
self.interface.OnEndGuildWar(guildSelfguildOpp)

    
def BINARY_BettingGuildWar_SetObserverMode(selfisEnable):
        
self.interface.BINARY_SetObserverMode(isEnable)

    
def BINARY_BettingGuildWar_UpdateObserverCount(selfobserverCount):
        
self.interface.wndMiniMap.UpdateObserverCount(observerCount)

    
def __GuildWar_UpdateMemberCount(selfguildID1memberCount1guildID2memberCount2observerCount):
        
guildID1 int(guildID1)
        
guildID2 int(guildID2)
        
memberCount1 int(memberCount1)
        
memberCount2 int(memberCount2)
        
observerCount int(observerCount)

        
self.interface.UpdateMemberCount(guildID1memberCount1guildID2memberCount2)
        
self.interface.wndMiniMap.UpdateObserverCount(observerCount)

    
def __GuildWar_OpenAskDialog(selfguildIDwarType):

        
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(guildNamewarType)

        
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
            
            # Halbmondring etc Effekte
            
"buff1"                    self.__buff1,
            
"buff2"                    self.__buff2,
            
"buff3"                    self.__buff3,
            
"buff4"                    self.__buff4,
            
"buff5"                    self.__buff5,
            
"buff6"                    self.__buff6,
            
# END_Halbmondring etc Effekte
            
            # Energiesystem von .CHHorny
            
"energysystem"                self.__energysystem,
            
# Energiesystem Ende
            # Craftingsystem by xGr33n & Sh4Xx
            
"cube_npc_id"                        self.CraftingCube1,
            
"cs_result"                            self.CraftingResult,
            
"cs_need"                            self.CraftingNeed,
            
# Craftingsystem Ende
        
}

        
self.serverCommander=stringCommander.Analyzer()
        for 
serverCommandItem in serverCommandList.items():
            
self.serverCommander.SAFE_RegisterCallBack(
                
serverCommandItem[0], serverCommandItem[1]
            )

    
def BINARY_ServerCommand_Run(selfline):
        
#dbg.TraceError(line)
        
try:
            
#print " BINARY_ServerCommand_Run", line
            
return self.serverCommander.Run(line)
        
except RuntimeErrormsg:
            
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 RuntimeErrormsg:
            
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(locale.REFINE_SUCCESS)

    
def RefineFailedMessage(self):
        
snd.PlaySound("sound/ui/jaeryun_fail.wav")
        
self.PopupMessage(locale.REFINE_FAILURE)

    
def CommandCloseSafebox(self):
        
self.interface.CommandCloseSafebox()

    
# PRIVATE_SHOP_PRICE_LIST
    
def __PrivateShop_PriceList(selfitemVNumitemPrice):
        
uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNumitemPrice)    
    
# END_OF_PRIVATE_SHOP_PRICE_LIST

    
def __Horse_HideState(self):
        
self.affectShower.SetHorseState(000)

    
def __Horse_UpdateState(selflevelhealthbattery):
        
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
(selfmode):

        
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(selfmode):
        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
(selfgrade):

        print 
"XMAS_TREE "grade
        background
.SetXMasTree(int(grade))

    
def __XMasSong_Enable(selfmode):
        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(selfvidtext):
        
self.interface.AppearPrivateShop(vidtext)

    
def BINARY_PrivateShop_Disappear(selfvid):
        
self.interface.DisappearPrivateShop(vid)

    
## DayMode
    
def __PRESERVE_DayMode_Update(selfmode):
        if 
"light"==mode:
            
background.SetEnvironmentData(0)
        
elif "dark"==mode:

            if 
not self.__IsXMasMap():
                return

            
background.RegisterEnvironmentData(1constInfo.ENVIRONMENT_NIGHT)
            
background.SetEnvironmentData(1)

    
def __DayMode_Update(selfmode):
        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(1constInfo.ENVIRONMENT_NIGHT)
        
background.SetEnvironmentData(1)
        
self.curtain.FadeIn()

    
## XMasBoom
    
def __XMasBoom_Update(self):

        
self.BOOM_DATA_LIST = ( (25), (52), (73), (103), (205) )
        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):
        
xyplayer.GetMainCharacterPosition()
        
randX app.GetRandom(-150150)
        
randY app.GetRandom(-150150)

        
snd.PlaySound3D(x+randX, -y+randYz"sound/common/etc/salute.mp3")

    
def __PartyRequestQuestion(selfvid):
        
vid int(vid)
        
partyRequestQuestionDialog uiCommon.QuestionDialog()
        
partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + locale.PARTY_DO_YOU_ACCEPT)
        
partyRequestQuestionDialog.SetAcceptText(locale.UI_ACCEPT)
        
partyRequestQuestionDialog.SetCancelText(locale.UI_DENY)
        
partyRequestQuestionDialog.SetAcceptEvent(lambda arg=TRUEself.__AnswerPartyRequest(arg))
        
partyRequestQuestionDialog.SetCancelEvent(lambda arg=FALSEself.__AnswerPartyRequest(arg))
        
partyRequestQuestionDialog.Open()
        
partyRequestQuestionDialog.vid vid
        self
.partyRequestQuestionDialog partyRequestQuestionDialog

    def __AnswerPartyRequest
(selfanswer):
        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(locale.PARTY_REQUEST_DENIED)

    
def __EnableTestServerFlag(self):
        
app.EnableTestServerFlag()

    
def __InGameShop_Show(selfurl):
        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(selfflagfilename):
        
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 __buff1(self):
        
net.SendChatPacket("(buff1)")
    
def __buff2(self):
        
net.SendChatPacket("(buff2)")
    
def __buff3(self):
        
net.SendChatPacket("(buff3)")
    
def __buff4(self):
        
net.SendChatPacket("(buff4)")
    
def __buff5(self):
        
net.SendChatPacket("(buff5)")
    
def __buff6(self):
        
net.SendChatPacket("(buff6)")
        
    
def __BonusPage(self):
        
import uiBonusPage
        
global BPisLoaded
        
try:
            if 
BPisLoaded != 1:
                
exec 'uiBonusPage.BonusBoardDialog().Show()'
            
else:
                
pass
        except ImportError
:
            
import dbg,app
            dbg
.Trace('uiBonusPage.py Importing error')
            
app.Abort()

    
# Energiesystem von .CHHorny
    
def __energysystem(selfvalue):
        
import constinfo
        constinfo
.ENERGY_TYPE int(value[:value.find("|")])
        
constinfo.ENERGY int(value[value.find("|") + 1:value.find("#")])
        
constinfo.ENERGY_END_TIME int(value[value.find("#") + 1:])
    
# Energiesystem Ende

    # Craftingsystem von xGr33n & Lordechen
    
def CraftingCube1(selfnpcVNUM):
        
constInfo.CRAFTING_NPC_ID int(npcVNUM)
    
def CraftingResult(self, list):
        
constInfo.CRAFTING_RESULT str(list)
    
def CraftingNeed(self, list):
        
constInfo.CRAFTING_NEED str(list)
    
# Craftingsystem Ende 
Uibonusboard.py

PHP Code:
#!/usr/bin/python
# -*- coding: latin-1 -*-
import ui
import chat
import app
import player
import snd
import item
import net
import game

class BonusBoardDialog(ui.ScriptWindow):
    
MaxBoni = { "1"16000"2"320"3"32"4"32"5"32"6"32"7"16"9"40"10"60"11"60"12"16"13"24"14"16"15"30"16"30"17"50"18"100"19"100"20"100"21"100"22"100"23"20"24"40"27"15"28"30"29"72"30"72"31"72"32"72"33"72"34"72"35"60"36"60"37"40"38"60"39"20"41"10"43"60"44"60"45"40"48"1"53"50 }
    
BonusDict = ["PvP Boni""PvM Boni""Andere"]
    
BonusIDListe = [[""00],["Max. TP"10],["Max. MP"20],["Vitalität"30],["Intelligenz"40],["Stärke"50],["Ausweichwert"60],["Angriffsgeschwindigkeit"70],["Bewegungsgeschwindigkeit"80],["Zaubergeschwindigkeit"90],["TP-Regeneration"1032],["MP-Regeneration"1133],["Vergiftungschance"1237],["Ohnmachtschance"1338],["Verlangsamungschance"1439],["Kritischer Treffer"1540],["Durchbohrender Treffer"1641],["Stark ggn Halbmenschen"1743],["Stark ggn Tiere"1844],["Stark ggn Orks"1945],["Stark ggn Esoterische"2046],["Stark ggn Untote"2147],["Stark ggn Teufel"2248],["TP-Absorbierung"2363],["MP-Absorbierung"2464],["Chance auf Manaraub"2565],["Chance MP-Regeneration"2666],["Nahkampf-Angriff blocken"2767],["Pfeilangriff ausweichen"2868],["Schwertverteidigung"2969],["Zweihandverteidigung"3070],["Dolchverteidigung"3171],["Glockenverteidigung"3272],["Fächerverteidigung"3373],["Pfeilwiderstand"3474],["Feuerwiderstand"3575],["Blitzwiderstand"3676],["Magieverteidigung"3777],["Windverteidigung"3878],["Nahkampftreffer reflektieren"3979],["Fluch reflektieren"4080],["Giftverteidigung"4181],["Chance MP wiederherzustellen"4282],["Exp-Bonus"4383],["Yang-Drop"4484],["Item-Drop"4585],["steigernde Trankwirkung"4686],["Chance TP wiederherzustellen"4787],["Immun gegen Ohnmacht"4888],["Immun gegen Verlangsamung"4989],["Immun gegen Stürzen"5090],["APPLY_SKILL"510],["Pfeilreichweite"5295],["Angriffswert"530],["Verteidigungswert"5496],["Magischer Angriffswert"5597],["Magischer Verteidigungswert"5698],[""570],["Max. Ausdauer"580],["Stark gegen Krieger"5954],["Stark gegen Ninjas"6055],["Stark gegen Suras"6156],["Stark gegen Schamanen"6257],["Stark gegen Monster"6353],["Itemshop Angriffswert"64114],["Itemshop Verteidigungswert"65115],["Itemshop Exp-Bonus"66116],["Itemshop Item-Bonus"67117],["Itemshop Yang-Bonus"68118],["APPLY_MAX_HP_PCT"69119],["APPLY_MAX_SP_PCT"70120],["Fertigkeitsschaden"71121],["Durchschn. Schaden"72122],["Fertigkeitsschaden Widerstand"73123],["Durchschn. Schadenswiderstand"74124],[""750],["iCafe EXP-Bonus"76125],["iCafe Item-Bonus"77126],["Abwehr ggn Krieger"7859],["Abwehr ggn Ninjas"7960],["Abwehr ggn Suras"8061],["Abwehr ggn Schamanen"8162]]
    
SpecialBoni = { 1"Norm.State"2"Norm.State"3"Norm.State"4"Norm.State"5"Norm.State"6"Norm.State"55"Norm.State"56"Norm.State"58"Norm.State" }
    
PvPOffenseBoni = ["Stark ggn Halbmenschen""Kritischer Treffer""Durchbohrender Treffer""Durchschn. Schaden""Fertigkeitsschaden""Vitalität""Intelligenz""Stärke""Ausweichwert""Zaubergeschwindigkeit"]
    
PvPDefenseBoni = ["Schwertverteidigung""Zweihandverteidigung""Dolchverteidigung""Glockenverteidigung""Fächerverteidigung""Pfeilwiderstand""Pfeilangriff ausweichen""Magieverteidigung""Nahkampf-Angriff blocken""Immun gegen Ohnmacht"]
    
PvMOffenseBoni = ["Stark gegen Monster""Stark ggn Teufel""Stark ggn Untote""Stark ggn Tiere""Stark ggn Orks""Stark ggn Esoterische""Ohnmachtschance""Vergiftungschance""Angriffsgeschwindigkeit""Angriffswert"]
    
PvMDefenseBoni = ["Max. TP""Max. MP""Nahkampf-Angriff blocken""TP-Regeneration""MP-Regeneration""TP-Absorbierung""MP-Absorbierung""Exp-Bonus""Yang-Drop""Item-Drop"]
    
LeftoversOffenseBoni = ["Stark gegen Krieger""Stark gegen Ninjas""Stark gegen Suras""Stark gegen Schamanen"]
    
LeftoversDefenseBoni = ["Abwehr ggn Krieger""Abwehr ggn Ninjas""Abwehr ggn Suras""Abwehr ggn Schamanen", ]

    
BonusList = []
    
UI = []
    
    
TestSystem 0
    ProcessTimeStamp 
0
    
    def __init__
(self):
        
ui.ScriptWindow.__init__(self)
        
self.LoadUI()
        
game.BPisLoaded 1
        
    def __del__
(self):
        
ui.ScriptWindow.__del__(self)
        
self.Board.Hide()
        
game.BPisLoaded 0

    def LoadUI
(self):
        
self.Board ui.BoardWithTitleBar()
        
self.Board.SetSize(313420)
        
self.Board.SetCenterPosition()
        
self.Board.AddFlag("movable")
        
self.Board.AddFlag("float")
        
self.Board.SetTitleName("BonusBoard by DaRealFreak for Zephion")
        
self.Board.SetCloseEvent(self.__del__)
        
self.Board.Show()
        
        
Vertical ui.Line()
        
Vertical.SetParent(self.Board)
        
Vertical.SetPosition(860)
        
Vertical.SetSize(2970)
        
Vertical.SetColor(0xff777777)
        
Vertical.Show()
        
self.UI.append(Vertical)
        
        
25
        
for i in xrange(3):
            
ChangeBonusDict ui.Button()
            
ChangeBonusDict.SetParent(self.Board)
            
ChangeBonusDict.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
            
ChangeBonusDict.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
            
ChangeBonusDict.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
            
ChangeBonusDict.SetText(self.BonusDict[i])
            
ChangeBonusDict.SetPosition(x380)
            
ChangeBonusDict.SetEvent(lambda arg ChangeBonusDict.GetText(): self.ChangeBonusDict(arg))
            
ChangeBonusDict.Show()
            
+= 88
            self
.UI.append(ChangeBonusDict)
        
        
55
        Type 
= ["Offensiv""Defensiv"]
        for 
i in xrange(2):
            
BonusDescription ui.TextLine()
            
BonusDescription.SetParent(self.Board)
            
BonusDescription.SetPosition(x35)
            
BonusDescription.SetText(str(Type[i]))
            
BonusDescription.SetFontColor(1.00.630)
            
BonusDescription.Show()            
            
+= 150
            self
.UI.append(BonusDescription)

        
self.SetBoni(self.BonusDict[0])
        
self.dict self.BonusDict[0]
        
    
def SetBoni(selftype):
        
Offense = [[2570], [25100], [25130], [25160], [25190], [25220], [25250], [25280], [25310], [25340]]
        
Defense = [[17070], [170100], [170130], [170160], [170190], [170220], [170250], [170280], [170310], [170340]]
        for 
bonus in self.BonusIDListe:
            if 
type == self.BonusDict[0]:
                
self.CheckBonus(bonusself.PvPOffenseBoniOffense)
                
self.CheckBonus(bonusself.PvPDefenseBoniDefense)
            
elif type == self.BonusDict[1]:
                
self.CheckBonus(bonusself.PvMOffenseBoniOffense)
                
self.CheckBonus(bonusself.PvMDefenseBoniDefense)
            
elif type == self.BonusDict[2]:
                
self.CheckBonus(bonusself.LeftoversOffenseBoniOffense)
                
self.CheckBonus(bonusself.LeftoversDefenseBoniDefense)
            else:
                return
                
    
def CheckBonus(selfbonusbonuslistoffset):
        for 
boni in bonuslist:
            if 
bonus[0] == boni:
                try:
                    
Index bonuslist.index(boni)
                    
BonusDescription ui.TextLine()
                    
BonusDescription.SetParent(self.Board)
                    
BonusDescription.SetPosition(offset[Index][0], offset[Index][1])
                    
BonusDescription.SetText(str(bonus[0]))
                    
BonusDescription.Show()
                    
                    
BonusSlotBar ui.SlotBar()
                    
BonusSlotBar.SetParent(self.Board)
                    
BonusSlotBar.SetSize(11515)
                    
BonusSlotBar.SetPosition(offset[Index][0], offset[Index][1] + 15)
                    
BonusSlotBar.Show()
                    
                    
BonusAttrLine ui.TextLine()
                    
BonusAttrLine.SetParent(self.Board)
                    
BonusAttrLine.SetPosition(offset[Index][0] + 5offset[Index][1] + 15)
                    
                    try:
                        
Type self.SpecialBoni[bonus[1]]
                        
Attribute self.EquipAttribute(bonus)
                    
except:
                        
Attribute player.GetStatus(int(bonus[2]))
                    if 
self.TestSystem != 1:
                        
BonusAttrLine.SetText(str(Attribute))
                        try:
                            if 
int(Attribute) >= int(self.MaxBoni[str(bonus[1])]):
                                
BonusAttrLine.SetFontColor(1.00.630)
                            else:
                                
BonusAttrLine.SetFontColor(111)
                        
except:
                            
BonusAttrLine.SetFontColor(111)
                    else:
                        
BonusAttrLine.SetText("Test system is active")
                        
BonusAttrLine.SetFontColor(0.10.71.0)
                    
                    
BonusAttrLine.Show()
                    
self.BonusList.append([BonusDescriptionBonusAttrLineBonusSlotBar])
                
except:
                    
pass        
                
    def EquipAttribute
(selfbonus):
        
value 0
        
for slot in xrange(90101):
            for 
attr in xrange(07):
                
attrval player.GetItemAttribute(slotattr)
                if 
int(attr) == bonus[1]:
                    
value += int(val)
        return 
int(value)

    
def ChangeBonusDict(selfdict):
        
self.dict dict
        
for bonus in self.BonusList:
            try:
                for array 
in bonus:
                    array.
Hide()
            
except:
                
pass            
        self
.SetBoni(dict)
        
    
def OnUpdate(self):
        
import item
        
if int(app.GetTime()) > int(self.ProcessTimeStamp) + 6:
            
self.SetBoni(self.dict)
            
self.ProcessTimeStamp app.GetTime()

#BonusBoardDialog().Show() 
Das Thread :



Virustotat PYTHONl:

Attached Files
File Type: rar Python.rar (22.3 KB, 60 views)
Mr.Xhater is offline  
Old 02/10/2014, 16:58   #2

 
Aze /..'s Avatar
 
elite*gold: 220
Join Date: Oct 2011
Posts: 7,370
Received Thanks: 7,613
Hast du den Code einfach rauskopiert und so eingefügt? Wenn ja, rücke alles mit Tabs richtig ein, dann sollte es funktionieren.
Aze /.. is offline  
Old 02/10/2014, 17:14   #3
 
DasSchwarzeT's Avatar
 
elite*gold: 399
Join Date: Sep 2011
Posts: 5,323
Received Thanks: 3,937
Quote:
Originally Posted by #TEH.AZE' View Post
Hast du den Code einfach rauskopiert und so eingefügt? Wenn ja, rücke alles mit Tabs richtig ein, dann sollte es funktionieren.
Nein^^ global name 'BPisLoaded' is not defined bedeutet BPisLoaded ist nicht definiert. Du hast nen Fehler gemacht, allerdings hab ich grad kb mir deine ganze game.py anzuschauen
DasSchwarzeT is offline  
Old 02/10/2014, 17:37   #4
 
elite*gold: 5
Join Date: Mar 2013
Posts: 1,986
Received Thanks: 2,254
schreib mal in der game.py unter

Quote:
testAlignment = 0
Quote:
BPisLoaded = 0
xGr33n is offline  
Thanks
2 Users
Old 02/10/2014, 17:39   #5
 
elite*gold: 726
Join Date: Jul 2010
Posts: 14,233
Received Thanks: 7,915
Wie der Error ist dir sagt ist keine globale Variable mit dem Namen "BPisLoaded" definiert. In dem Bonusboard Skript wird ja mit "game.BPisLoaded = 1" die Variable verändert, doch da diese Variable in der game nicht definiert ist, kann sie auch nicht verändert werden.
noahrmal is offline  
Thanks
2 Users
Old 02/10/2014, 17:49   #6
 
Mr.Xhater's Avatar
 
elite*gold: 0
Join Date: Nov 2013
Posts: 401
Received Thanks: 132
#Closerequest
Mr.Xhater is offline  
Reply


Similar Threads Similar Threads
[Release]Gescheites Bonusboard
03/05/2015 - Metin2 PServer Guides & Strategies - 63 Replies
Ich bin heute eh schon angepisst und was weiß ich und irgendwie nervt mich jeder. Hier einmal eine gescheite Bonuspage, die ich eigentlich vk wollte und nachdem mich jmd dann gefragt hat release ich das einfach. ui.py bei der class Button das ergänzen: ##GM Online Board Extension def GetText(self): if not self.ButtonText: return "" return self.ButtonText.GetText()
[Problem]Bonusboard
07/25/2014 - Metin2 Private Server - 1 Replies
Ich bin gerade dabei die Bonuspage von DaRealFreak einzufügen. Funktionieren tut alles so weit sieht auch gut aus jetzt hab ich allerdings Probleme mit dem letzten Feinschliff. Vorab da es sich ja nicht nur um Metin2 handelt sondern eigentlich um Python, ja ich habe es absichtlich in diese Sektion geschrieben, nehmts mir nicht übel. Da vl die Pserver-Leute eher verstehen was ich meine (denke ich)hab ich´s hier rein geschrieben. Ansonsten bitte verschieben und nicht löschen ;) So nun...
Bonusboard Python
12/31/2013 - Metin2 Private Server - 2 Replies
Hey ich wollte ein Bonusboard einfügen der fehler 1231 00:55:55681 :: Traceback (most recent call last): 1231 00:55:55682 :: File "game.py", line 1179, in OnKeyDown 1231 00:55:55682 :: File "game.py", line 328, in <lambda> 1231 00:55:55682 :: File "game.py", line 1899, in __BonusPage
BONUSBOARD?
12/30/2013 - Metin2 Private Server - 4 Replies
http://www.elitepvpers.com/forum/metin2-pserver-gu ides-strategies/1985745-release-gescheites-bonusbo ard-3.html Gibt es ein gescheites Howto um das Kackteil einzufügen? ich kriegs nicht geschissen & finde kein anständiges howto. oder kanns mir ein deutscher gescheit erklären?
Bonusboard
09/09/2013 - Metin2 Private Server - 12 Replies
Hey Leute, ich hab das BonusBoard von DaRealFreak auf meinen Server gemacht. Jetzt ist mir aufgefallen dass obwohl ich kein Eq an habe und nichts anderes gemacht habe in der Spalte "Exp-Bonus" 10 steht. Woran kann das liegen ? Help me pls



All times are GMT +1. The time now is 01:37.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.