904 lines
24 KiB
Python
904 lines
24 KiB
Python
import app
|
||
import grp
|
||
import wndMgr
|
||
import ui
|
||
import os
|
||
import sys
|
||
import stat
|
||
import chrmgr
|
||
import chr
|
||
import net
|
||
import background
|
||
import snd
|
||
import net
|
||
import player
|
||
import localeInfo
|
||
import uiScriptLocale
|
||
|
||
class Console(object):
|
||
def __init__(self, output):
|
||
self.dirNameList = []
|
||
self.fileNameList = []
|
||
|
||
self.output = output
|
||
self.curPathName = "D:\\Ymir Work\\"
|
||
self.collision = 0
|
||
|
||
self.bgPartDict = {
|
||
"terrain":background.PART_TERRAIN,
|
||
"object":background.PART_OBJECT,
|
||
"cloud":background.PART_CLOUD,
|
||
"tree":background.PART_TREE,
|
||
"water":background.PART_WATER,
|
||
"sky":background.PART_SKY,
|
||
}
|
||
|
||
self.bgSortDict = {
|
||
"distance":background.DISTANCE_SORT,
|
||
"texture":background.TEXTURE_SORT,
|
||
}
|
||
|
||
self.game = 0
|
||
|
||
def Close(self):
|
||
self.output = 0
|
||
|
||
def BindGameClass(self, game):
|
||
self.game = game
|
||
|
||
def Exit(self):
|
||
"Exit Program"
|
||
app.Exit()
|
||
|
||
def EnablePerformanceTime(self, mode, isEnable):
|
||
app.EnablePerformanceTime(mode, int(isEnable))
|
||
|
||
def ReloadLocale(self):
|
||
"Reload Locale"
|
||
reload(locale)
|
||
reload(uiScriptLocale)
|
||
self.Print("RELOAD LOCALE")
|
||
|
||
def ReloadDevel(self):
|
||
"ReloadDevel"
|
||
import consoleModule
|
||
import uiGuild
|
||
import uiInventory
|
||
reload(uiGuild)
|
||
self.Print("ReloadGuild")
|
||
reload(uiInventory)
|
||
self.Print("ReloadInventory")
|
||
|
||
def ShowPerformanceInfo(self):
|
||
"Shows Performance Info"
|
||
self.Print(app.GetInfo(app.INFO_ACTOR))
|
||
self.Print(app.GetInfo(app.INFO_ITEM))
|
||
self.Print(app.GetInfo(app.INFO_EFFECT))
|
||
self.Print(app.GetInfo(app.INFO_TEXTTAIL))
|
||
|
||
def Disconnect(self):
|
||
"Disconnect by sending unknown packet"
|
||
net.SendStrangePacket()
|
||
|
||
def ToggleActorDirectionLine(self):
|
||
"Shows character's direction line"
|
||
chrmgr.ToggleDirectionLine()
|
||
|
||
def RegisterCharacterEffect(self, effectType, effectFileName):
|
||
"Set character's effect state (state number, bone name, effect filename/number)"
|
||
if effectFileName.isdigit():
|
||
effectFileName = self.GetFileName(int(effectFileName))
|
||
|
||
effectFullPathFileName = self.GetFullPathName(effectFileName)
|
||
chrmgr.RegisterEffect(chrmgr.EFFECT_STATE+int(effectType), "", effectFullPathFileName)
|
||
self.Print("effect state %d: %s" % (int(effectType), effectFullPathFileName))
|
||
|
||
def SetCharacterAffect(self, affectType, isVisible):
|
||
"Set character's affect (number, visiblity 1|0)"
|
||
chrmgr.SetAffect(-1, int(affectType), int(isVisible))
|
||
self.Print("affect set %d: %d" % (int(affectType), int(isVisible)))
|
||
|
||
def SetCharacterEmoticon(self, EmoticonNum):
|
||
"Show emoticon (number)"
|
||
chrmgr.SetEmoticon(-1, int(EmoticonNum))
|
||
self.Print("Emoticon %d: %d" % (int(EmoticonNum), int(isVisible)))
|
||
|
||
def ShowPickedCharacterInfo(self):
|
||
"Show information of picked character"
|
||
vid=chrmgr.GetPickedVID()
|
||
info=chrmgr.GetVIDInfo(vid)
|
||
self.Print(info)
|
||
|
||
def ShowCharacterInfo(self, arg):
|
||
"Show information of character (vid)"
|
||
if arg.isdigit():
|
||
vid=int(arg)
|
||
else:
|
||
vid=0
|
||
|
||
info=chrmgr.GetVIDInfo(vid)
|
||
self.Print(info)
|
||
|
||
def SetWeaponTraceTexture(self, arg):
|
||
"Sets sword afterimage texture (filename)"
|
||
if arg.isdigit():
|
||
textureFileName = self.GetFileName(int(arg))
|
||
else:
|
||
textureFileName = arg
|
||
|
||
chr.WeaponTraceSetTexture(textureFileName)
|
||
|
||
def SetAutoCameraRotationSpeed(self, arg):
|
||
"Auto camera rotation speed (angle per sec)"
|
||
spd=float(arg)
|
||
player.SetAutoCameraRotationSpeed(spd)
|
||
|
||
self.Print("Auto camera rotation speed: %f" % (spd))
|
||
|
||
def SetWeaponTraceMode(self, *mode):
|
||
"Sword afterimage mode (0 = Use alpha, 1 = Use texture)"
|
||
if mode and mode[0].isdigit() and int(mode[0]):
|
||
chr.WeaponTraceUseTexture()
|
||
else:
|
||
chr.WeaponTraceUseAlpha()
|
||
|
||
def SetCollision(self, *mode):
|
||
"Show collison objects (0 | 1)"
|
||
if mode and mode[0].isdigit():
|
||
self.collision = int(mode[0])
|
||
else:
|
||
self.collision = not self.collision
|
||
|
||
def SetMovingSpeed(self, arg):
|
||
"Set walking speed"
|
||
chrmgr.SetMovingSpeed(int(arg))
|
||
|
||
def SetMusicVolume(self, arg):
|
||
"Set BGM volumn (0 ~ 1.0)"
|
||
snd.SetMusicVolume(float(arg))
|
||
|
||
def SetSoundVolume(self, arg):
|
||
"Set Effect sound volumn (0 ~ 5)"
|
||
snd.SetSoundVolume(int(arg))
|
||
|
||
def SetSoundScale(self, arg):
|
||
"3D Sound scale (default : 200)"
|
||
snd.SetSoundScale(int(arg))
|
||
|
||
def SetAmbienceSoundScale(self, arg):
|
||
"3D Ambience sound scale (default : 200)"
|
||
snd.SetAmbienceSoundScale(int(arg))
|
||
|
||
def SetCoolTime(self):
|
||
"Cooltime toggle"
|
||
flag = player.ToggleCoolTime()
|
||
if flag:
|
||
self.Print("Cooltime will be applied")
|
||
else:
|
||
self.Print("Cooltime disabled")
|
||
|
||
def SetLevelLimit(self):
|
||
"Sets Level limit"
|
||
flag = player.ToggleLevelLimit()
|
||
if flag:
|
||
self.Print("Level limit will be applied")
|
||
else:
|
||
self.Print("Level limit disabled")
|
||
|
||
def ShowCursor(self):
|
||
app.ShowCursor()
|
||
|
||
def HideCursor(self):
|
||
app.HideCursor()
|
||
|
||
def Print(self, msg):
|
||
self.output.Print(msg)
|
||
|
||
def RefreshPath(self):
|
||
self.SetPath(self.curPathName)
|
||
|
||
def SetPath(self, newPathName):
|
||
if '\\'!=newPathName[-1]:
|
||
newPathName=newPathName+'\\'
|
||
|
||
if os.access(newPathName, os.R_OK)==0:
|
||
self.Print(newPathName+" Cannot find path")
|
||
return
|
||
|
||
nameList=os.listdir(newPathName)
|
||
|
||
dirNameList=[]
|
||
fileNameList=[]
|
||
for sName in nameList:
|
||
mode=os.stat(newPathName+sName)[stat.ST_MODE]
|
||
if stat.S_ISDIR(mode):
|
||
dirNameList.append(sName)
|
||
else:
|
||
fileNameList.append(sName)
|
||
|
||
self.curPathName=newPathName
|
||
self.dirNameList=dirNameList
|
||
self.fileNameList=fileNameList
|
||
|
||
self.ShowPath()
|
||
|
||
def GetPath(self):
|
||
return self.curPathName
|
||
|
||
def GetDirName(self, iDir):
|
||
if (len(self.dirNameList)>iDir):
|
||
return self.dirNameList[iDir]
|
||
else:
|
||
print len(self.dirNameList)
|
||
return ""
|
||
|
||
def GetFileName(self, iFile):
|
||
if (len(self.fileNameList)>iFile):
|
||
return self.fileNameList[iFile]
|
||
else:
|
||
print len(self.fileNameList)
|
||
return ""
|
||
|
||
def MoveParentPath(self):
|
||
"Go to Parent directory"
|
||
newPathName=self.GetPath()
|
||
|
||
lastPos=-1
|
||
if '\\'==newPathName[-1]:
|
||
lastPos=-2
|
||
|
||
lastPos=newPathName.rfind('\\', 0, lastPos)
|
||
if 0>lastPos:
|
||
self.Print("Here is root")
|
||
return
|
||
|
||
newPathName=newPathName[0:lastPos]+'\\'
|
||
|
||
self.SetPath(newPathName)
|
||
|
||
def GetFullPathName(self, sPathName):
|
||
sParentPathName=self.GetPath()
|
||
|
||
if '\\'!=sParentPathName[-1]:
|
||
sParentPathName=sParentPathName+'\\'
|
||
|
||
return sParentPathName+sPathName
|
||
|
||
def MoveChildPath(self, directory):
|
||
"[Directory name/number] change to child directory"
|
||
if ""==directory:
|
||
self.Print("You need directory name or number")
|
||
return
|
||
|
||
if directory.isdigit():
|
||
directory=self.GetDirName(int(directory))
|
||
|
||
newPathName=self.GetFullPathName(directory)
|
||
|
||
self.SetPath(newPathName)
|
||
|
||
def SetHitEffect(self, arg):
|
||
"Sets hit effect"
|
||
if arg.isdigit():
|
||
effectFileName = self.GetFileName(int(arg))
|
||
else:
|
||
effectFileName = arg
|
||
|
||
effectFullPathFileName=self.GetFullPathName(EffectFileName)
|
||
chrmgr.RegisterEffect(chrmgr.EFFECT_HIT, "", effectFullPathFileName)
|
||
|
||
self.Print("Hit effect: "+effectFullPathFileName)
|
||
|
||
def SetStunEffect(self, arg):
|
||
"Sets stun effect"
|
||
if arg.isdigit():
|
||
effectFileName = self.GetFileName(int(arg))
|
||
else:
|
||
effectFileName = arg
|
||
|
||
effectFullPathFileName = self.GetFullPathName(effectFileName)
|
||
chrmgr.RegisterEffect(chrmgr.EFFECT_STUN, "Bip01 Head", effectFullPathFileName)
|
||
|
||
self.Print("Stun effect: "+effectFullPathFileName)
|
||
|
||
def SetDustEffect(self, arg):
|
||
"Sets dirt effect"
|
||
if arg.isdigit():
|
||
effectFileName = self.GetFileName(int(arg))
|
||
else:
|
||
effectFileName = arg
|
||
|
||
effectFullPathFileName = self.GetFullPathName(effectFileName)
|
||
chrmgr.RegisterEffect(chrmgr.EFFECT_DUST, "", effectFullPathFileName)
|
||
|
||
self.Print("Dirt effect: "+effectFullPathFileName)
|
||
|
||
def SetDustGap(self, arg):
|
||
"Sets dirt effect gap"
|
||
if arg.isdigit() == 0:
|
||
self.Print("Dirt effect gap argument must be a number")
|
||
else:
|
||
gap = int(arg)
|
||
chrmgr.SetDustGap(gap)
|
||
self.Print("Dirt effect gap: %d" % (gap))
|
||
|
||
def ShowBackgroundPart(self, arg):
|
||
"Show background part"
|
||
try:
|
||
background.SetVisiblePart(self.bgPartDict[arg], 1);
|
||
except KeyError:
|
||
self.Print("Unknown part: ", arg);
|
||
except:
|
||
raise
|
||
|
||
def HideBackgroundPart(self, arg):
|
||
"Hide background part"
|
||
try:
|
||
background.SetVisiblePart(self.bgPartDict[arg], 0);
|
||
except KeyError:
|
||
self.Print("Unknown part: ", arg);
|
||
except:
|
||
raise
|
||
|
||
def SetShadowLevel(self, arg):
|
||
"Shadow level setting (0~5)"
|
||
if arg.isdigit() == 0:
|
||
self.Print("Shadow setting must be a number")
|
||
else:
|
||
level = int(arg)
|
||
|
||
if level < 0 or level > 5:
|
||
self.Print("Shadow level range is 0~5")
|
||
else:
|
||
background.SetShadowLevel(level)
|
||
self.Print("Shadow level: %d" % (level))
|
||
|
||
def SetSplatLimit(self, arg):
|
||
"Splat number limit"
|
||
if arg.isdigit() == 0:
|
||
self.Print("Splat number limit must be a number")
|
||
else:
|
||
limit = int(arg)
|
||
|
||
background.SetSplatLimit(limit)
|
||
self.Print("Splat number limit: %d" % (limit))
|
||
|
||
def SelectViewDistanceNum(self, arg):
|
||
"View distance (0~4)"
|
||
if arg.isdigit() == 0:
|
||
self.Print("Enter between 0 to 4")
|
||
else:
|
||
settingnum = int(arg)
|
||
|
||
if settingnum < 0 or settingnum > 4:
|
||
self.Print("View distance range is 0 to 4")
|
||
|
||
else:
|
||
background.SelectViewDistanceNum(settingnum)
|
||
self.Print("View distance: %d" % (settingnum))
|
||
|
||
def SetBGLoading(self, bBGLoading):
|
||
"Background loading (0, 1)"
|
||
bResultBoolean = int(bBGLoading)
|
||
|
||
if bResultBoolean != 0 and bResultBoolean != 1:
|
||
self.Print("Enter 0 or 1")
|
||
else:
|
||
background.SetBGLoading(bResultBoolean)
|
||
self.Print("Background loading: %d" % (bResultBoolean))
|
||
|
||
def SetTerrainRenderSort(self, arg):
|
||
"Terrain rendering type"
|
||
try:
|
||
background.SetRenderSort(self.bgSortDict[arg]);
|
||
except KeyError:
|
||
self.Print("Unknown part: ", arg);
|
||
except:
|
||
raise
|
||
|
||
def SetTransparentTree(self, arg):
|
||
"Tree's leaf transparency"
|
||
bTransparent = int(arg)
|
||
try:
|
||
background.SetTransparentTree(bTransparent);
|
||
except KeyError:
|
||
self.Print("must be 0 or 1: ", bTransparent);
|
||
except:
|
||
raise
|
||
|
||
def WarpTest(self, warpX, warpY):
|
||
"WarpTest : warp dwX dwY"
|
||
iWarpX = int(warpX)
|
||
iWarpY = int(warpY)
|
||
try:
|
||
background.Destroy()
|
||
background.Initialize()
|
||
background.WarpTest(iWarpX, iWarpY);
|
||
background.RegisterEnvironmentData(0, "d:/ymir work/environment/b3.msenv")
|
||
background.SetEnvironmentData(0)
|
||
background.SetShadowLevel(background.SHADOW_ALL)
|
||
except:
|
||
import exception
|
||
exception.Abort("consoleModule.Console.WarpTest")
|
||
|
||
def ToggleDebugInfo(self):
|
||
"Show DebugInfo"
|
||
net.ToggleGameDebugInfo()
|
||
|
||
def ShowPath(self):
|
||
"Show current path"
|
||
self.Print("Current path is "+self.GetPath())
|
||
|
||
def ShowList(self):
|
||
"Show current path's list"
|
||
self.ShowDirList()
|
||
self.ShowFileList()
|
||
|
||
def ShowDirList(self):
|
||
"Show current path's child directories"
|
||
self.Print(self.GetPath()+" directories:")
|
||
self.ShowNameList(self.dirNameList)
|
||
self.Print("")
|
||
|
||
def ShowFileList(self, Filter=[]):
|
||
"Show current path's files (extension filter)"
|
||
self.Print(self.GetPath()+" files:")
|
||
self.ShowNameList(self.fileNameList, Filter)
|
||
self.Print("")
|
||
|
||
def ShowEffectList(self):
|
||
"Show current path's effect"
|
||
self.Print(self.GetPath()+" effects:")
|
||
self.ShowNameList(self.fileNameList, ["mse"])
|
||
self.Print("")
|
||
|
||
def ShowWeb(self):
|
||
"ShowWeb"
|
||
if app.IsWebPageMode():
|
||
app.HideWebPage()
|
||
else:
|
||
app.ShowWebPage("http://wiki.metin.co.kr/metin1help/01.htm", (0, 0, 320, 600))
|
||
|
||
def ShowUI(self):
|
||
"Shows UI"
|
||
self.game.CheckGameButton()
|
||
self.game.interface.ShowDefaultWindows()
|
||
self.game.interface.wndChat.Show()
|
||
|
||
def HideUI(self):
|
||
"Hides UI"
|
||
self.game.interface.HideAllWindows()
|
||
self.game.interface.wndChat.Hide()
|
||
|
||
def SetCameraSpeed(self, percentage):
|
||
"Sets camera speed (Default = 100)"
|
||
app.SetCameraSpeed(int(percentage))
|
||
|
||
def SaveCameraSetting(self, filename):
|
||
"Save current camera attributes (filename)"
|
||
app.SaveCameraSetting(filename)
|
||
|
||
def LoadCameraSetting(self, filename):
|
||
"Load camera attributes (filename)"
|
||
if not app.LoadCameraSetting(filename):
|
||
self.Print("Could not load camera attribute")
|
||
|
||
def SetDefaultCamera(self):
|
||
"Return to default camera attribute"
|
||
app.SetDefaultCamera()
|
||
|
||
def ShowClock(self, second):
|
||
self.game.ShowClock(int(second))
|
||
|
||
def HideClock(self):
|
||
self.game.HideClock()
|
||
|
||
def ShowNotice(self):
|
||
app.SetVisibleNotice(TRUE)
|
||
self.Print("Show Notice")
|
||
|
||
def HideNotice(self):
|
||
app.SetVisibleNotice(FALSE)
|
||
self.Print("Hide Notice")
|
||
|
||
def SetSight(self, range):
|
||
"Set Force Sight Range"
|
||
app.SetSightRange(int(range))
|
||
|
||
def SetComboType(self, type):
|
||
chr.testSetComboType(int(type))
|
||
|
||
def SetSkillGroupFake(self, index):
|
||
"""<EFBFBD><EFBFBD>Ʈ <20>ڵ<EFBFBD>"""
|
||
net.SetSkillGroupFake(int(index))
|
||
self.Print(" SetSkillGroupFake : %d" % int(index))
|
||
|
||
def SetEmpireLanguageMode(self, mode):
|
||
net.SetEmpireLanguageMode(int(mode))
|
||
self.Print(" SetEmpireLanguageMode : %d" % int(mode))
|
||
|
||
def SetCharacterRenderModeTypeAdd(self, color):
|
||
vid = player.GetTargetVID()
|
||
print " -> SetCharacterRenderModeTypeAdd", vid, color
|
||
chr.testSetAddRenderMode(vid, int(color,16))
|
||
|
||
def SetCharacterRenderModeTypeMod(self, color):
|
||
vid = player.GetTargetVID()
|
||
print " -> SetCharacterRenderModeTypeMod", vid, color, int(color,16)
|
||
chr.testSetModulateRenderMode(vid, int(color,16))
|
||
|
||
def SetCharacterRenderModeTypeAddRGB(self, r, g, b):
|
||
vid = player.GetTargetVID()
|
||
print " -> SetCharacterRenderModeTypeAddRGB", vid, r, g, b
|
||
chr.testSetAddRenderModeRGB(vid, float(r)/255.0, float(g)/255.0, float(b)/255.0)
|
||
|
||
def SetCharacterRenderModeTypeModRGB(self, r, g, b):
|
||
vid = player.GetTargetVID()
|
||
print " -> SetCharacterRenderModeTypeModRGB", vid, r, g, b
|
||
chr.testSetModulateRenderModeRGB(vid, float(r)/255.0, float(g)/255.0, float(b)/255.0)
|
||
|
||
def SetCharacterRenderModeSpecular(self, alpha):
|
||
vid = player.GetTargetVID()
|
||
print " -> SetCharacterRenderModeSpecular", vid, alpha
|
||
chr.testSetSpecularRenderMode(vid, float(alpha))
|
||
|
||
def RestoreCharacterRenderModeType(self):
|
||
vid = player.GetTargetVID()
|
||
chr.testRestoreRenderMode(vid)
|
||
|
||
|
||
def ShowNameList(self, lstsName, lstsFilter=None):
|
||
if len(lstsName)==0:
|
||
self.Print("None")
|
||
return
|
||
|
||
if lstsFilter:
|
||
isFilter=1
|
||
else:
|
||
isFilter=0
|
||
|
||
sLine=""
|
||
iCol=0
|
||
|
||
iName=0
|
||
for sName in lstsName:
|
||
if isFilter:
|
||
iDotPos=sName.rfind('.', 0, -1)
|
||
if iDotPos<0:
|
||
iName=iName+1
|
||
continue
|
||
|
||
if (sName[iDotPos+1:] in lstsFilter)==0:
|
||
iName=iName+1
|
||
continue
|
||
|
||
sLine=sLine+"%3d %-15s " % (iName, sName)
|
||
|
||
if iCol>4:
|
||
iCol=0
|
||
self.Print(sLine)
|
||
sLine=""
|
||
|
||
iCol=iCol+1
|
||
|
||
iName=iName+1
|
||
|
||
if ""!=sLine:
|
||
self.Print(sLine)
|
||
|
||
class ConsoleWindow(ui.Window):
|
||
|
||
BACK_GROUND_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.5)
|
||
EDIT_LINE_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 1.0)
|
||
BUTTON_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 1.0)
|
||
HEIGHT = 200
|
||
LINE_STEP = 15
|
||
MAX_LINE_COUNT = 50
|
||
|
||
class ConsoleEditLine(ui.EditLine):
|
||
def __init__(self):
|
||
ui.EditLine.__init__(self)
|
||
self.eventReturn = 0
|
||
self.eventEscape = 0
|
||
def __del__(self):
|
||
ui.EditLine.__del__(self)
|
||
|
||
def SetReturnEvent(self, event):
|
||
self.eventReturn = event
|
||
|
||
def SetEscapeEvent(self, event):
|
||
self.eventEscape = event
|
||
|
||
def OnIMEReturn(self):
|
||
text = self.GetText()
|
||
|
||
if len(text) > 0:
|
||
self.eventReturn(text)
|
||
|
||
else:
|
||
wndMgr.KillFocus()
|
||
self.eventEscape()
|
||
|
||
self.SetText("")
|
||
return TRUE
|
||
|
||
def OnPressEscapeKey(self):
|
||
self.SetText("")
|
||
wndMgr.KillFocus()
|
||
self.eventEscape()
|
||
return TRUE
|
||
|
||
class ResizingButton(ui.DragButton):
|
||
|
||
BUTTON_NORMAL_COLOR = grp.GenerateColor(0.3320, 0.2929, 0.2578, 1.0)
|
||
BUTTON_OVER_COLOR = grp.GenerateColor(0.5320, 0.4929, 0.4578, 1.0)
|
||
BUTTON_LIGHT_OUTLINE_COLOR = grp.GenerateColor(0.6666, 0.6509, 0.6313, 1.0)
|
||
BUTTON_DARK_OUTLINE_COLOR = grp.GenerateColor(0.1647, 0.1450, 0.1294, 1.0)
|
||
|
||
def __init__(self):
|
||
ui.DragButton.__init__(self)
|
||
self.AddFlag("limit")
|
||
self.AddFlag("restrict_x")
|
||
|
||
def __del__(self):
|
||
ui.DragButton.__del__(self)
|
||
|
||
def __init__(self):
|
||
ui.Window.__init__(self)
|
||
|
||
self.TextList = []
|
||
self.game = 0
|
||
self.Console = Console(self)
|
||
|
||
self.ResizingButton = self.ResizingButton()
|
||
self.ResizingButton.SetParent(self)
|
||
self.ResizingButton.SetSize(15, 15)
|
||
self.ResizingButton.SetPosition(100, 100)
|
||
self.ResizingButton.Show()
|
||
|
||
self.EditLine = self.ConsoleEditLine()
|
||
self.EditLine.SetParent(self)
|
||
self.EditLine.SetMax(100)
|
||
self.EditLine.SetFontName(localeInfo.UI_DEF_FONT)
|
||
self.EditLine.SetText("")
|
||
self.EditLine.Show()
|
||
|
||
from _weakref import ref
|
||
|
||
self.ResizingButton.SetMoveEvent(lambda s = ref(self): s().UpdatePosition())
|
||
self.EditLine.SetReturnEvent(lambda x,s = ref(self): s().ProcessCommand(x))
|
||
self.EditLine.SetEscapeEvent(lambda s = ref(self): s().CloseWindow())
|
||
|
||
self.UpdatePosition()
|
||
|
||
self.functionDict = {}
|
||
self.InitFunction()
|
||
|
||
def __del__(self):
|
||
ui.Window.__del__(self)
|
||
|
||
def BindGameClass(self, game):
|
||
self.Console.BindGameClass(game)
|
||
|
||
def Close(self):
|
||
self.Console.Close()
|
||
self.ResizingButton = 0
|
||
self.EditLine = 0
|
||
|
||
def SetConsoleSize(self, width, height):
|
||
self.ResizingButton.SetPosition(width-20, height-20)
|
||
self.UpdatePosition()
|
||
|
||
def OnRender(self):
|
||
grp.SetColor(self.BACK_GROUND_COLOR)
|
||
grp.RenderBar(self.gx, self.gy, self.width, self.height)
|
||
|
||
grp.SetColor(ConsoleWindow.EDIT_LINE_COLOR)
|
||
grp.RenderBar(self.gxEditLine-2, self.gyEditLine-3, self.width - 40, 17)
|
||
|
||
grp.SetColor(ConsoleWindow.BUTTON_COLOR)
|
||
grp.RenderBar(self.gxButton-2, self.gyButton-3, self.widthButton, self.heightButton)
|
||
|
||
def UpdatePosition(self):
|
||
|
||
self.width = self.GetWidth()
|
||
self.height = self.GetHeight()
|
||
self.widthButton = self.ResizingButton.GetWidth()
|
||
self.heightButton = self.ResizingButton.GetHeight()
|
||
(self.gx, self.gy) = self.GetGlobalPosition()
|
||
(self.gxButton, self.gyButton) = self.ResizingButton.GetGlobalPosition()
|
||
|
||
self.SetSize(self.gxButton - self.gx + 20, self.gyButton - self.gy + 20)
|
||
|
||
self.EditLine.SetSize(self.width-30, 16)
|
||
self.EditLine.SetPosition(7, self.height-20)
|
||
(self.gxEditLine, self.gyEditLine) = self.EditLine.GetGlobalPosition()
|
||
|
||
#####
|
||
|
||
yPosition = (self.height-20) - self.LINE_STEP
|
||
ItemCount = len(self.TextList)
|
||
|
||
for i in xrange(ItemCount):
|
||
TextLine = self.TextList[ItemCount-i-1]
|
||
|
||
TextLine.SetPosition(10, yPosition)
|
||
yPosition -= self.LINE_STEP
|
||
|
||
if yPosition < 0:
|
||
TextLine.Hide()
|
||
else:
|
||
TextLine.Show()
|
||
|
||
def OpenWindow(self):
|
||
|
||
self.EditLine.SetFocus()
|
||
|
||
self.Show()
|
||
self.Console.RefreshPath()
|
||
|
||
def CloseWindow(self):
|
||
self.Hide()
|
||
|
||
## NOTE : <20>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD> Command<6E><64> ó<><C3B3><EFBFBD>մϴ<D5B4> - [levites]
|
||
def ProcessCommand(self, text):
|
||
|
||
if '/' == text[0]:
|
||
net.SendChatPacket(text)
|
||
return
|
||
|
||
Console=self.Console
|
||
Console.Print(">> "+text)
|
||
|
||
lstsArg=text.split()
|
||
if len(lstsArg)==0:
|
||
return
|
||
|
||
sCmd=lstsArg[0]
|
||
|
||
if self.functionDict.has_key(sCmd):
|
||
try:
|
||
self.functionDict[sCmd](self.Console, *lstsArg[1:])
|
||
except Exception, e:
|
||
Console.Print(str(e))
|
||
#self.Console.Print(e)
|
||
#self.Console.Print(self.functionDict[sCmd].__doc__)
|
||
else:
|
||
if sCmd == 'help' or sCmd == 'h':
|
||
try:
|
||
k = lstsArg[1]
|
||
v = self.functionDict[k]
|
||
argcount = v.im_func.func_code.co_argcount - 1 # -1 for self
|
||
if v.im_func.func_code.co_flags & 4:
|
||
argcount+=1
|
||
argnames = v.im_func.func_code.co_varnames[1:argcount+1]
|
||
if argcount:
|
||
Console.Print("%s(%s) : %s" % (k,argcount, v.__doc__))
|
||
Console.Print(" arg : %s" % argnames)
|
||
else:
|
||
Console.Print("%s : %s" % (k,v.__doc__))
|
||
except:
|
||
for k,v in self.functionDict.iteritems():
|
||
argcount = v.im_func.func_code.co_argcount - 1 # -1 for self
|
||
if v.im_func.func_code.co_flags & 4:
|
||
argcount+=1
|
||
if argcount:
|
||
Console.Print("%s(%s) : %s" % (k,argcount, v.__doc__))
|
||
else:
|
||
Console.Print("%s : %s" % (k,v.__doc__))
|
||
Console.Print("? : All commands list")
|
||
Console.Print("h : Help for all commands")
|
||
Console.Print("h blah : Help for blah")
|
||
|
||
Console.Print("")
|
||
elif sCmd == '?':
|
||
list = self.functionDict.keys()
|
||
list.sort()
|
||
Console.ShowNameList(list)
|
||
pass
|
||
|
||
def InitFunction(self):
|
||
#self.AddFunction("help", Console.PrintHelp)
|
||
#self.AddFunction("?", Console.PrintHelp)
|
||
|
||
self.AddFunction("exit", Console.Exit)
|
||
self.AddFunction("mvol", Console.SetMusicVolume)
|
||
self.AddFunction("svol", Console.SetSoundVolume)
|
||
self.AddFunction("snds", Console.SetSoundScale)
|
||
self.AddFunction("asnds", Console.SetAmbienceSoundScale)
|
||
self.AddFunction("mspd", Console.SetMovingSpeed)
|
||
self.AddFunction("pwd", Console.ShowPath)
|
||
self.AddFunction("ls", Console.ShowList)
|
||
self.AddFunction("shadow", Console.SetShadowLevel)
|
||
self.AddFunction("splat", Console.SetSplatLimit)
|
||
self.AddFunction("distance", Console.SelectViewDistanceNum)
|
||
self.AddFunction("bgloading", Console.SetBGLoading)
|
||
self.AddFunction("terrainrender", Console.SetTerrainRenderSort)
|
||
self.AddFunction("transtree", Console.SetTransparentTree)
|
||
self.AddFunction("stune", Console.SetStunEffect)
|
||
self.AddFunction("duste", Console.SetDustEffect)
|
||
self.AddFunction("dustt", Console.SetDustGap)
|
||
self.AddFunction("hite", Console.SetHitEffect)
|
||
self.AddFunction("cd", Console.MoveChildPath)
|
||
self.AddFunction("up", Console.MoveParentPath)
|
||
self.AddFunction("lsd", Console.ShowDirList)
|
||
self.AddFunction("lsf", Console.ShowFileList)
|
||
self.AddFunction("lse", Console.ShowEffectList)
|
||
self.AddFunction("show", Console.ShowBackgroundPart)
|
||
self.AddFunction("hide", Console.HideBackgroundPart)
|
||
self.AddFunction("debuginfo", Console.ToggleDebugInfo)
|
||
|
||
self.AddFunction("collision", Console.SetCollision)
|
||
self.AddFunction("colli", Console.SetCollision)
|
||
|
||
#self.AddFunction("wt", Console.SetWeaponTrace)
|
||
self.AddFunction("wtt", Console.SetWeaponTraceTexture)
|
||
self.AddFunction("wtm", Console.SetWeaponTraceMode)
|
||
|
||
self.AddFunction("disconnect", Console.Disconnect)
|
||
self.AddFunction("autorot", Console.SetAutoCameraRotationSpeed)
|
||
|
||
self.AddFunction("dirline", Console.ToggleActorDirectionLine)
|
||
self.AddFunction("pickc", Console.ShowPickedCharacterInfo)
|
||
self.AddFunction("infoc", Console.ShowCharacterInfo)
|
||
self.AddFunction("regchre", Console.RegisterCharacterEffect)
|
||
self.AddFunction("setchra", Console.SetCharacterAffect)
|
||
self.AddFunction("emoticon", Console.SetCharacterEmoticon)
|
||
self.AddFunction("perfinfo", Console.ShowPerformanceInfo)
|
||
self.AddFunction("reload_locale", Console.ReloadLocale)
|
||
self.AddFunction("re", Console.ReloadDevel)
|
||
self.AddFunction("perftime", Console.EnablePerformanceTime)
|
||
self.AddFunction("cooltime", Console.SetCoolTime)
|
||
self.AddFunction("levellimit", Console.SetLevelLimit)
|
||
self.AddFunction("showcursor", Console.ShowCursor)
|
||
self.AddFunction("hidecursor", Console.HideCursor)
|
||
|
||
self.AddFunction("warp", Console.WarpTest)
|
||
self.AddFunction("web", Console.ShowWeb)
|
||
|
||
self.AddFunction("showui", Console.ShowUI)
|
||
self.AddFunction("hideui", Console.HideUI)
|
||
|
||
self.AddFunction("setcspd", Console.SetCameraSpeed)
|
||
self.AddFunction("savecmr", Console.SaveCameraSetting)
|
||
self.AddFunction("loadcmr", Console.LoadCameraSetting)
|
||
self.AddFunction("setdefcmr", Console.SetDefaultCamera)
|
||
|
||
self.AddFunction("showclock", Console.ShowClock)
|
||
self.AddFunction("hideclock", Console.HideClock)
|
||
|
||
self.AddFunction("setsight", Console.SetSight)
|
||
|
||
self.AddFunction("setcombotype", Console.SetComboType)
|
||
self.AddFunction("setsk_fake", Console.SetSkillGroupFake)
|
||
|
||
self.AddFunction("trans", Console.SetEmpireLanguageMode)
|
||
|
||
self.AddFunction("shownotice", Console.ShowNotice)
|
||
self.AddFunction("hidenotice", Console.HideNotice)
|
||
|
||
self.AddFunction("setrmadd", Console.SetCharacterRenderModeTypeAdd)
|
||
self.AddFunction("setrmmod", Console.SetCharacterRenderModeTypeMod)
|
||
self.AddFunction("setrmaddrgb", Console.SetCharacterRenderModeTypeAddRGB)
|
||
self.AddFunction("setrmmodrgb", Console.SetCharacterRenderModeTypeModRGB)
|
||
self.AddFunction("setspec", Console.SetCharacterRenderModeSpecular)
|
||
self.AddFunction("restorerm", Console.RestoreCharacterRenderModeType)
|
||
|
||
def AddFunction(self, cmd, func):
|
||
self.functionDict[cmd] = func
|
||
|
||
def Print(self, text):
|
||
TextLine = ui.TextLine()
|
||
TextLine.SetParent(self)
|
||
TextLine.SetFontName(localeInfo.UI_DEF_FONT)
|
||
TextLine.Show()
|
||
TextLine.SetText(text)
|
||
self.TextList.append(TextLine)
|
||
|
||
count = len(self.TextList)
|
||
if count > self.MAX_LINE_COUNT:
|
||
for i in xrange(count - self.MAX_LINE_COUNT):
|
||
del self.TextList[0]
|
||
|
||
self.UpdatePosition()
|