Marty-v58/client/pack/root/introcreate.py
2024-10-25 00:07:46 -05:00

719 lines
21 KiB
Python

import chr
import grp
import app
import net
import snd
import wndMgr
import event
import systemSetting
import localeInfo
import ui
import networkModule
import math
import snd
import musicInfo
import playerSettingModule
import uiScriptLocale
import uiToolTip
LOCALE_PATH = "uiscript/"+uiScriptLocale.CODEPAGE+"_"
MAN = 0
WOMAN = 1
GENDER_LIST = (MAN, WOMAN)
SHAPE0 = 0
SHAPE1 = 1
PAGE_COUNT = 2
USE_WOLFMAN_CHARACTER = app.ENABLE_WOLFMAN_CHARACTER and not app.DISABLE_WOLFMAN_ON_CREATE
if USE_WOLFMAN_CHARACTER:
SLOT_COUNT = (5, 4)
else:
SLOT_COUNT = (4, 4)
BASE_CHR_ID = 3
def GetRealID(page):
realIdx = 0
for i in xrange(len(SLOT_COUNT)):
if i>=page:
break
realIdx+=SLOT_COUNT[i]
return realIdx
def GetRealIDnSlot(page, slot):
realIdx = 0
for i in xrange(len(SLOT_COUNT)):
if i>=page:
break
realIdx+=SLOT_COUNT[i]
# import dbg
# dbg.TraceError("page(%d) slot(%d)=real(%d)+=%d"%(page, slot, realIdx, realIdx+slot))
return realIdx + slot
class CreateCharacterWindow(ui.Window):
if USE_WOLFMAN_CHARACTER:
SLOT_ROTATION = [[135.0, 207.0, 279.0, 351.0, 63.0], [135.0, 225.0, 315.0, 45.0]]
else:
SLOT_ROTATION = [[135.0, 225.0, 315.0, 45.0], [135.0, 225.0, 315.0, 45.0]]
CREATE_STAT_POINT = 0
STAT_CON = 0
STAT_INT = 1
STAT_STR = 2
STAT_DEX = 3
STAT_DESCRIPTION = {
STAT_CON : localeInfo.STAT_TOOLTIP_CON,
STAT_INT : localeInfo.STAT_TOOLTIP_INT,
STAT_STR : localeInfo.STAT_TOOLTIP_STR,
STAT_DEX : localeInfo.STAT_TOOLTIP_DEX,
}
START_STAT = ( ## CON INT STR DEX
[ 4, 3, 6, 3, ], ## Warrior
[ 3, 3, 4, 6, ], ## Assassin
[ 3, 5, 5, 3, ], ## Sura
[ 4, 6, 3, 3, ], ## Shaman
[ 4, 3, 6, 3, ], ## Warrior
[ 3, 3, 4, 6, ], ## Assassin
[ 3, 5, 5, 3, ], ## Sura
[ 4, 6, 3, 3, ], ## Shaman
)
if USE_WOLFMAN_CHARACTER:
tmpStartStat = list(START_STAT)
tmpStartStat.insert(GetRealIDnSlot(MAN, 5-1), [ 6, 2, 2, 6, ])
START_STAT = tuple(tmpStartStat)
DESCRIPTION_FILE_NAME = (
uiScriptLocale.JOBDESC_WARRIOR_PATH,
uiScriptLocale.JOBDESC_ASSASSIN_PATH,
uiScriptLocale.JOBDESC_SURA_PATH,
uiScriptLocale.JOBDESC_SHAMAN_PATH,
)
if USE_WOLFMAN_CHARACTER:
DESCRIPTION_FILE_NAME += (uiScriptLocale.JOBDESC_WOLFMAN_PATH,)
if app.__BL_MULTI_LANGUAGE__:
@staticmethod
def ReloadVariables():
global LOCALE_PATH
LOCALE_PATH = "uiscript/"+uiScriptLocale.CODEPAGE+"_"
CreateCharacterWindow.STAT_DESCRIPTION = {
CreateCharacterWindow.STAT_CON : localeInfo.STAT_TOOLTIP_CON,
CreateCharacterWindow.STAT_INT : localeInfo.STAT_TOOLTIP_INT,
CreateCharacterWindow.STAT_STR : localeInfo.STAT_TOOLTIP_STR,
CreateCharacterWindow.STAT_DEX : localeInfo.STAT_TOOLTIP_DEX,
}
CreateCharacterWindow.DESCRIPTION_FILE_NAME = (
uiScriptLocale.JOBDESC_WARRIOR_PATH,
uiScriptLocale.JOBDESC_ASSASSIN_PATH,
uiScriptLocale.JOBDESC_SURA_PATH,
uiScriptLocale.JOBDESC_SHAMAN_PATH,
)
if USE_WOLFMAN_CHARACTER:
CreateCharacterWindow.DESCRIPTION_FILE_NAME += (uiScriptLocale.JOBDESC_WOLFMAN_PATH,)
class DescriptionBox(ui.Window):
def __init__(self):
ui.Window.__init__(self)
self.descIndex = 0
def __del__(self):
ui.Window.__del__(self)
def SetIndex(self, index):
self.descIndex = index
def OnRender(self):
event.RenderEventSet(self.descIndex)
class CharacterRenderer(ui.Window):
def OnRender(self):
grp.ClearDepthBuffer()
grp.SetGameRenderState()
grp.PushState()
grp.SetOmniLight()
screenWidth = wndMgr.GetScreenWidth()
screenHeight = wndMgr.GetScreenHeight()
newScreenWidth = float(screenWidth - 270)
newScreenHeight = float(screenHeight)
grp.SetViewport(270.0/screenWidth, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)
app.SetCenterPosition(0.0, 0.0, 0.0)
app.SetCamera(1550.0, 15.0, 180.0, 95.0)
grp.SetPerspective(10.0, newScreenWidth/newScreenHeight, 1000.0, 3000.0)
(x, y) = app.GetCursorPosition()
grp.SetCursorPosition(x, y)
chr.Deform()
chr.Render()
grp.RestoreViewport()
grp.PopState()
grp.SetInterfaceRenderState()
def __init__(self, stream):
print "NEW CREATE WINDOW ----------------------------------------------------------------------------"
ui.Window.__init__(self)
net.SetPhaseWindow(net.PHASE_WINDOW_CREATE, self)
self.stream=stream
def __del__(self):
print "---------------------------------------------------------------------------- DELETE CREATE WINDOW"
net.SetPhaseWindow(net.PHASE_WINDOW_CREATE, 0)
ui.Window.__del__(self)
def Open(self):
print "OPEN CREATE WINDOW ----------------------------------------------------------------------------"
playerSettingModule.LoadGameData("INIT")
self.reservingRaceIndex = -1
self.reservingShapeIndex = -1
self.reservingStartTime = 0
self.stat = [0, 0, 0, 0]
self.gender = 0
self.slot = -1
#
self.instanceIDs = []
if USE_WOLFMAN_CHARACTER:
self.shapeList = [
[0, 0, 0, 0, 0],
[0, 0, 0, 0]]
else:
self.shapeList = [
[0, 0, 0, 0],
[0, 0, 0, 0]]
self.descIndex = 0
try:
dlgBoard = ui.ScriptWindow()
pythonScriptLoader = ui.PythonScriptLoader()
pythonScriptLoader.LoadScriptFile(dlgBoard, uiScriptLocale.LOCALE_UISCRIPT_PATH + "createcharacterwindow.py")
except:
import exception
exception.Abort("CreateCharacterWindow.Open.LoadObject")
try:
getChild = dlgBoard.GetChild
self.NameList = {}
self.NameList[MAN] = []
self.NameList[MAN].append(getChild("name_warrior"))
self.NameList[MAN].append(getChild("name_assassin"))
self.NameList[MAN].append(getChild("name_sura"))
self.NameList[MAN].append(getChild("name_shaman"))
if USE_WOLFMAN_CHARACTER:
self.NameList[MAN].append(getChild("name_wolfman"))
self.NameList[WOMAN] = []
self.NameList[WOMAN].append(getChild("name_warrior"))
self.NameList[WOMAN].append(getChild("name_assassin"))
self.NameList[WOMAN].append(getChild("name_sura"))
self.NameList[WOMAN].append(getChild("name_shaman"))
self.GaugeList = []
self.GaugeList.append(getChild("hth_gauge"))
self.GaugeList.append(getChild("int_gauge"))
self.GaugeList.append(getChild("str_gauge"))
self.GaugeList.append(getChild("dex_gauge"))
self.btnCreate = getChild("create_button")
self.btnCancel = getChild("cancel_button")
self.btnPrev = getChild("prev_button")
self.btnNext = getChild("next_button")
self.btnLeft = getChild("left_button")
self.btnRight = getChild("right_button")
self.textBoard = getChild("text_board")
self.genderButtonList = []
self.genderButtonList.append(getChild("gender_button_01"))
self.genderButtonList.append(getChild("gender_button_02"))
self.shapeButtonList = []
self.shapeButtonList.append(getChild("shape_button_01"))
self.shapeButtonList.append(getChild("shape_button_02"))
self.editCharacterName = getChild("character_name_value")
self.statValue = []
self.statValue.append(getChild("hth_value"))
self.statValue.append(getChild("int_value"))
self.statValue.append(getChild("str_value"))
self.statValue.append(getChild("dex_value"))
getChild("hth_button").ShowToolTip = lambda arg=self.STAT_CON: self.OverInStatButton(arg)
getChild("hth_button").HideToolTip = lambda arg=self.STAT_CON: self.OverOutStatButton()
getChild("int_button").ShowToolTip = lambda arg=self.STAT_INT: self.OverInStatButton(arg)
getChild("int_button").HideToolTip = lambda arg=self.STAT_INT: self.OverOutStatButton()
getChild("str_button").ShowToolTip = lambda arg=self.STAT_STR: self.OverInStatButton(arg)
getChild("str_button").HideToolTip = lambda arg=self.STAT_STR: self.OverOutStatButton()
getChild("dex_button").ShowToolTip = lambda arg=self.STAT_DEX: self.OverInStatButton(arg)
getChild("dex_button").HideToolTip = lambda arg=self.STAT_DEX: self.OverOutStatButton()
getChild("hth_button").Hide()
getChild("int_button").Hide()
getChild("str_button").Hide()
getChild("dex_button").Hide()
self.backGround = getChild("BackGround")
except:
import exception
exception.Abort("CreateCharacterWindow.Open.BindObject")
self.btnCreate.SetEvent(ui.__mem_func__(self.CreateCharacter))
self.btnCancel.SetEvent(ui.__mem_func__(self.CancelCreate))
self.btnPrev.SetEvent(ui.__mem_func__(self.PrevDescriptionPage))
self.btnNext.SetEvent(ui.__mem_func__(self.NextDescriptionPage))
self.btnLeft.SetEvent(ui.__mem_func__(self.__DecreaseSlotIndex))
self.btnRight.SetEvent(ui.__mem_func__(self.__IncreaseSlotIndex))
self.genderButtonList[0].SetEvent(ui.__mem_func__(self.__SelectGender), MAN)
self.genderButtonList[1].SetEvent(ui.__mem_func__(self.__SelectGender), WOMAN)
self.shapeButtonList[0].SetEvent(ui.__mem_func__(self.__SelectShape), SHAPE0)
self.shapeButtonList[1].SetEvent(ui.__mem_func__(self.__SelectShape), SHAPE1)
self.editCharacterName.SetReturnEvent(ui.__mem_func__(self.CreateCharacter))
self.editCharacterName.SetEscapeEvent(ui.__mem_func__(self.CancelCreate))
self.dlgBoard = dlgBoard
self.curRotation = [] + self.SLOT_ROTATION[self.gender]
self.destRotation = [] + self.SLOT_ROTATION[self.gender]
self.curNameAlpha = [0.0, 0.0, 0.0, 0.0, 0.0]
self.destNameAlpha = [0.0, 0.0, 0.0, 0.0, 0.0]
self.curGauge = [0.0, 0.0, 0.0, 0.0]
self.destGauge = [0.0, 0.0, 0.0, 0.0]
self.descriptionBox = self.DescriptionBox()
self.descriptionBox.Show()
self.chrRenderer = self.CharacterRenderer()
self.chrRenderer.SetParent(self.backGround)
self.chrRenderer.Show()
self.toolTip = uiToolTip.ToolTip()
self.toolTip.ClearToolTip()
self.editCharacterName.SetText("")
self.EnableWindow()
self.__SelectSlot(0)
app.SetCamera(500.0, 10.0, 180.0, 95.0)
self.__MakeCharacter(MAN, 0, playerSettingModule.RACE_WARRIOR_M)
self.__MakeCharacter(MAN, 1, playerSettingModule.RACE_ASSASSIN_M)
self.__MakeCharacter(MAN, 2, playerSettingModule.RACE_SURA_M)
self.__MakeCharacter(MAN, 3, playerSettingModule.RACE_SHAMAN_M)
if USE_WOLFMAN_CHARACTER:
self.__MakeCharacter(MAN, 4, playerSettingModule.RACE_WOLFMAN_M)
self.__MakeCharacter(WOMAN, 0, playerSettingModule.RACE_WARRIOR_W)
self.__MakeCharacter(WOMAN, 1, playerSettingModule.RACE_ASSASSIN_W)
self.__MakeCharacter(WOMAN, 2, playerSettingModule.RACE_SURA_W)
self.__MakeCharacter(WOMAN, 3, playerSettingModule.RACE_SHAMAN_W)
self.__SelectGender(app.GetRandom(MAN, WOMAN))
self.__SelectShape(0)
self.__SelectSlot(app.GetRandom(0, SLOT_COUNT[self.gender]-1))
self.dlgBoard.Show()
self.Show()
if musicInfo.createMusic != "":
snd.SetMusicVolume(systemSetting.GetMusicVolume())
snd.FadeInMusic("BGM/"+musicInfo.createMusic)
app.ShowCursor()
def Close(self):
print "---------------------------------------------------------------------------- CLOSE CREATE WINDOW"
self.editCharacterName.Enable()
self.dlgBoard.ClearDictionary()
self.stream=0
self.shapeButtonList = []
self.genderButtonList = []
self.btnCreate = 0
self.btnCancel = 0
self.btnPrev = 0
self.btnNext = 0
self.btnLeft = 0
self.btnRight = 0
self.textBoard = 0
self.editCharacterName = 0
self.backGround = None
if musicInfo.createMusic != "":
snd.FadeOutMusic("BGM/"+musicInfo.createMusic)
for id in self.instanceIDs:
chr.DeleteInstance(id)
self.dlgBoard.Hide()
self.Hide()
app.HideCursor()
event.Destroy()
def EnableWindow(self):
self.reservingRaceIndex = -1
self.reservingShapeIndex = -1
self.btnCreate.Enable()
self.btnCancel.Enable()
self.btnPrev.Enable()
self.btnNext.Enable()
self.btnLeft.Enable()
self.btnRight.Enable()
self.editCharacterName.SetFocus()
self.editCharacterName.Enable()
for page in xrange(PAGE_COUNT):
for slot in xrange(SLOT_COUNT[page]):
chr_id = self.__GetSlotChrID(page, slot)
chr.SelectInstance(chr_id)
chr.BlendLoopMotion(chr.MOTION_INTRO_WAIT, 0.1)
def DisableWindow(self):
self.btnCreate.Disable()
self.btnCancel.Disable()
self.btnPrev.Disable()
self.btnNext.Disable()
self.btnLeft.Disable()
self.btnRight.Disable()
self.editCharacterName.Disable()
self.btnCreate.SetUp()
## Manage Character
def __GetSlotChrID(self, page, slot):
return BASE_CHR_ID + GetRealIDnSlot(page, slot)
def __MakeCharacter(self, page, slot, race):
chr_id = self.__GetSlotChrID(page, slot)
chr.CreateInstance(chr_id)
chr.SelectInstance(chr_id)
chr.SetVirtualID(chr_id)
#
self.instanceIDs.append(chr_id)
chr.SetRace(race)
chr.SetArmor(0)
chr.SetHair(0)
chr.Refresh()
chr.SetMotionMode(chr.MOTION_MODE_GENERAL)
chr.SetLoopMotion(chr.MOTION_INTRO_WAIT)
chr.SetRotation(0.0)
chr.Hide()
def __SelectGender(self, gender):
for button in self.genderButtonList:
button.SetUp()
self.genderButtonList[gender].Down()
old_gender = self.gender
self.gender = gender
for v1 in GENDER_LIST:
for i in xrange(SLOT_COUNT[v1]):
chr.SelectInstance(self.__GetSlotChrID(v1, i))
if v1==self.gender:
chr.Show()
else:
chr.Hide()
self.__ResetNameList(old_gender)
if self.slot >= SLOT_COUNT[self.gender]:
# self.NameList[self.slot].SetAlpha(0.0)
self.__SelectSlot(app.GetRandom(0, SLOT_COUNT[self.gender]-1))
return # the scene will be already updated, so return or double updated scene
self.__UpdateScene()
def __SelectShape(self, shape):
self.shapeList[self.gender][self.slot] = shape
for button in self.shapeButtonList:
button.SetUp()
self.shapeButtonList[shape].Down()
chr_id = self.__GetSlotChrID(self.gender, self.slot)
chr.SelectInstance(chr_id)
chr.ChangeShape(shape)
chr.SetMotionMode(chr.MOTION_MODE_GENERAL)
chr.SetLoopMotion(chr.MOTION_INTRO_WAIT)
def GetSlotIndex(self):
return self.slot
def RefreshStat(self):
statSummary = self.stat[0] + self.stat[1] + self.stat[2] + self.stat[3]
self.destGauge = (
float(self.stat[0])/float(statSummary),
float(self.stat[1])/float(statSummary),
float(self.stat[2])/float(statSummary),
float(self.stat[3])/float(statSummary),
)
for i in xrange(4):
self.statValue[i].SetText(str(self.stat[i]))
def __ResetNameList(self, old_gender):
for i in xrange(SLOT_COUNT[old_gender]):
self.destNameAlpha[i] = 0.0
# self.curNameAlpha[i] += (self.destNameAlpha[i] - self.curNameAlpha[i]) / 10.0
self.NameList[old_gender][i].SetAlpha(0.0)
def __UpdateScene(self):
for i in xrange(SLOT_COUNT[self.gender]):
self.destNameAlpha[i] = 0.0
self.destNameAlpha[self.slot] = 1.0
for i in xrange(SLOT_COUNT[self.gender]):
self.destRotation[(i+self.slot)%SLOT_COUNT[self.gender]] = self.SLOT_ROTATION[self.gender][i]
if self.IsShow():
snd.PlaySound("sound/ui/click.wav")
event.ClearEventSet(self.descIndex)
self.descIndex = event.RegisterEventSet(self.DESCRIPTION_FILE_NAME[self.slot])
if localeInfo.IsARABIC():
event.SetEventSetWidth(self.descIndex, 170)
chr_id = self.__GetSlotChrID(self.gender, self.slot)
if chr.HasInstance(chr_id):
chr.SelectInstance(chr_id)
self.__SelectShape(self.shapeList[self.gender][self.slot])
def __SelectSlot(self, slot):
if slot < 0:
return
if slot >= SLOT_COUNT[self.gender]:
return
if self.slot == slot:
return
self.slot = slot
self.ResetStat()
#
self.__UpdateScene()
def CreateCharacter(self):
if -1 != self.reservingRaceIndex:
return
textName = self.editCharacterName.GetText()
if False == self.__CheckCreateCharacter(textName):
return
if musicInfo.selectMusic != "":
snd.FadeLimitOutMusic("BGM/"+musicInfo.selectMusic, systemSetting.GetMusicVolume()*0.05)
self.DisableWindow()
chr_id = self.__GetSlotChrID(self.gender, self.slot)
chr.SelectInstance(chr_id)
self.reservingRaceIndex = chr.GetRace()
self.reservingShapeIndex = self.shapeList[self.gender][self.slot]
self.reservingStartTime = app.GetTime()
for eachSlot in xrange(SLOT_COUNT[self.gender]):
sel_id = self.__GetSlotChrID(self.gender, eachSlot)
chr.SelectInstance(sel_id)
if eachSlot == self.slot:
chr.PushOnceMotion(chr.MOTION_INTRO_SELECTED)
else:
chr.PushOnceMotion(chr.MOTION_INTRO_NOT_SELECTED)
def CancelCreate(self):
self.stream.SetSelectCharacterPhase()
def __DecreaseSlotIndex(self):
slotIndex = (self.GetSlotIndex() - 1 + SLOT_COUNT[self.gender]) % SLOT_COUNT[self.gender]
self.__SelectSlot(slotIndex)
def __IncreaseSlotIndex(self):
slotIndex = (self.GetSlotIndex() + 1) % SLOT_COUNT[self.gender]
self.__SelectSlot(slotIndex)
def PrevDescriptionPage(self):
if True == event.IsWait(self.descIndex):
if event.GetVisibleStartLine(self.descIndex)-event.BOX_VISIBLE_LINE_COUNT >= 0:
event.SetVisibleStartLine(self.descIndex, event.GetVisibleStartLine(self.descIndex)-event.BOX_VISIBLE_LINE_COUNT)
event.Skip(self.descIndex)
else:
event.Skip(self.descIndex)
def NextDescriptionPage(self):
if True == event.IsWait(self.descIndex):
event.SetVisibleStartLine(self.descIndex, event.GetVisibleStartLine(self.descIndex)+event.BOX_VISIBLE_LINE_COUNT)
event.Skip(self.descIndex)
else:
event.Skip(self.descIndex)
def __CheckCreateCharacter(self, name):
if len(name) == 0:
self.PopupMessage(localeInfo.CREATE_INPUT_NAME, self.EnableWindow)
return False
if name.find(localeInfo.CREATE_GM_NAME)!=-1:
self.PopupMessage(localeInfo.CREATE_ERROR_GM_NAME, self.EnableWindow)
return False
if net.IsInsultIn(name):
self.PopupMessage(localeInfo.CREATE_ERROR_INSULT_NAME, self.EnableWindow)
return False
return True
def ResetStat(self):
realIdx = GetRealIDnSlot(self.gender, self.slot)
for i in xrange(4):
self.stat[i] = self.START_STAT[realIdx][i]
self.lastStatPoint = self.CREATE_STAT_POINT
self.RefreshStat()
## Event
def OnCreateSuccess(self):
self.stream.SetSelectCharacterPhase()
def OnCreateFailure(self, type):
if 1 == type:
self.PopupMessage(localeInfo.CREATE_EXIST_SAME_NAME, self.EnableWindow)
else:
self.PopupMessage(localeInfo.CREATE_FAILURE, self.EnableWindow)
def OnKeyDown(self, key):
for i in xrange(SLOT_COUNT[self.gender]):
if key == 2+i:
self.__SelectSlot(i)
if 203 == key:
self.__DecreaseSlotIndex()
if 205 == key:
self.__IncreaseSlotIndex()
if 59 == key:
self.__SelectGender(MAN)
if 60 == key:
self.__SelectGender(WOMAN)
return True
def OnUpdate(self):
chr.Update()
(xposEventSet, yposEventSet) = self.textBoard.GetGlobalPosition()
event.UpdateEventSet(self.descIndex, xposEventSet+7, -(yposEventSet+7))
self.descriptionBox.SetIndex(self.descIndex)
for i in xrange(SLOT_COUNT[self.gender]):
self.curNameAlpha[i] += (self.destNameAlpha[i] - self.curNameAlpha[i]) / 10.0
self.NameList[self.gender][i].SetAlpha(self.curNameAlpha[i])
for i in xrange(4):
self.curGauge[i] += (self.destGauge[i] - self.curGauge[i]) / 10.0
if abs(self.curGauge[i] - self.destGauge[i]) < 0.005:
self.curGauge[i] = self.destGauge[i]
self.GaugeList[i].SetPercentage(self.curGauge[i], 1.0)
for page in xrange(PAGE_COUNT):
for i in xrange(SLOT_COUNT[page]):
chr.SelectInstance(self.__GetSlotChrID(page, i))
distance = 50.0
rotRadian = self.curRotation[i] * (math.pi*2) / 360.0
x = distance*math.sin(rotRadian) + distance*math.cos(rotRadian)
y = distance*math.cos(rotRadian) - distance*math.sin(rotRadian)
chr.SetPixelPosition(int(x), int(y), 30)
if abs(self.destRotation[i] - self.curRotation[i]) < 1.0:
self.curRotation[i] = self.destRotation[i]
dir = app.GetRotatingDirection(self.destRotation[i], self.curRotation[i])
rot = app.GetDegreeDifference(self.destRotation[i], self.curRotation[i])
if app.DEGREE_DIRECTION_RIGHT == dir:
self.curRotation[i] += rot / 10.0
elif app.DEGREE_DIRECTION_LEFT == dir:
self.curRotation[i] -= rot / 10.0
self.curRotation[i] = (self.curRotation[i] + 360.0) % 360.0
###########################################################
if -1 != self.reservingRaceIndex:
if app.GetTime() - self.reservingStartTime >= 1.5:
chrSlot=self.stream.GetCharacterSlot()
textName = self.editCharacterName.GetText()
raceIndex = self.reservingRaceIndex
shapeIndex = self.reservingShapeIndex
startStat = self.START_STAT[self.reservingRaceIndex]
statCon = self.stat[0] - startStat[0]
statInt = self.stat[1] - startStat[1]
statStr = self.stat[2] - startStat[2]
statDex = self.stat[3] - startStat[3]
net.SendCreateCharacterPacket(chrSlot, textName, raceIndex, shapeIndex, statCon, statInt, statStr, statDex)
self.reservingRaceIndex = -1
###########################################################
def EmptyFunc(self):
pass
def PopupMessage(self, msg, func=0):
if not func:
func=self.EmptyFunc
self.stream.popupWindow.Close()
self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)
def OnPressExitKey(self):
self.CancelCreate()
return True
def OverInStatButton(self, stat):
if not self.STAT_DESCRIPTION.has_key(stat):
return
self.toolTip.ClearToolTip()
self.toolTip.AppendTextLine(self.STAT_DESCRIPTION[stat])
self.toolTip.Show()
def OverOutStatButton(self):
self.toolTip.Hide()