Hallo,
mein Problem ist das folgende:
Ich spiele auf dedicated servern Civ4, diese werden über eine .exe gestartet die wiederrum auf ein .py zugreift. Nur leider gibt es etliche Probleme mit den Server, was es notwendig macht sie regelmäßig neuzustarten. Das geht aber nur manuell über einen Wizard. Ziel ist es die .py insoweit umzuschreiben das er nach ausführung der .exe automatisch das ensprechende Savegame lädt.
Ich bin leider immer noch nicht wirklich bewandert in python, aber
Im folgenden Code habe ich zumindest die Currpage auf loadselect gesetzt womit der Wizard in dieser Stelle startet. Da der Wizard nachdem man auf Spiel laden geklickt hat alle weiteren Schritte überspringt ist nur die Klasse loadselect relevant.
So die für mich weiteren Schritte wäre jetzt:
1. Die Variable path einen festen wert zu Übergeben "c:\test.save" ohne den fileDialog
2. Dem Passwort einen festen Wert zu übergeben "test" ohne die box
3. den Ladevorgang zu initieren ohne auf next klicken zu müssen damit ich nur noch die .exe ausführen muss.
Nur jedesmal wenn ich Anfange und die dialogboxen durch feste Werte ersetze bricht die Bearbeitung ab, vermutlich wegen diverser Syntaxfehler bzw. falsch übergebener Werte.
Wie ich den Eventhandler umgehe damit ich nicht auf next klicken muss ist mir erlichgesagt nicht ersichtlich
[Edit (Leonidas): 1452 Zeilen fürchterlichen Code ausgelagert]
Probleme mit Wizard
-
- User
- Beiträge: 12
- Registriert: Donnerstag 22. November 2007, 14:30
Danke erstmal fürs auslagern, auf den ersten Blick sah es nicht nach soviel aus.
@ Über mir: Civ4 wurde extra so programmiert das modifizierbar ist, ein großteil des Spiels ist in XML und Python, zudem kannst du dir den Code + die .exe auf der Homepage downloaden.
Das dürfte der relevante Teil sein. Ich habe nochmal weiter rumprobiert bin aber nicht wirklich weitergekommen
[/code]
@ Über mir: Civ4 wurde extra so programmiert das modifizierbar ist, ein großteil des Spiels ist in XML und Python, zudem kannst du dir den Code + die .exe auf der Homepage downloaden.
Das dürfte der relevante Teil sein. Ich habe nochmal weiter rumprobiert bin aber nicht wirklich weitergekommen
Code: Alles auswählen
class LoadSelectPage(wx.wizard.PyWizardPage):
def __init__(self, parent):
wx.wizard.PyWizardPage.__init__(self, parent)
self.next = self.prev = None
self.myParent = parent
# Place the radio buttons
selections = [localText.getText("TXT_KEY_PITBOSS_NEWGAME", ()), localText.getText("TXT_KEY_PITBOSS_SCENARIO", ()), localText.getText("TXT_KEY_PITBOSS_LOADGAME", ())]
sizer = wx.BoxSizer(wx.VERTICAL)
self.rb = wx.RadioBox(
self, -1, (localText.getText("TXT_KEY_PITBOSS_SELECT_INIT", ())), wx.DefaultPosition, wx.DefaultSize,
selections, 1, wx.RA_SPECIFY_COLS
)
self.rb.SetToolTip(wx.ToolTip((localText.getText("TXT_KEY_PITBOSS_SELECT_INIT_HELP", ()))))
sizer.Add(self.rb, 0, wx.ALL, 5)
self.SetSizer(sizer)
self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGED, self.OnPageChanged)
self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
def enableButtons(self):
# If the patch state is ok, enable appropriate buttons
global bPatchConfirmed
self.myParent.FindWindowById(wx.ID_FORWARD).Enable(bPatchConfirmed)
self.myParent.FindWindowById(wx.ID_BACKWARD).Enable(bPatchConfirmed)
Code: Alles auswählen
def OnPageChanged(self, event):
global curPage
# If we haven't already, check for a patch
global bPatchConfirmed
if (not bPatchConfirmed):
if (not PB.checkPatch()):
# Error in checking for a patch
msg = wx.MessageBox(localText.getText("TXT_KEY_PITBOSS_PATCH_CHECK_ERROR_DESC", ()), localText.getText("TXT_KEY_PITBOSS_PATCH_CHECK_ERROR_TITLE", ()), wx.ICON_ERROR)
bPatchConfirmed = true
# Determine what buttons should be enabled
self.enableButtons()
curPage = self
def SetNext(self, next):
self.next = next
def SetPrev(self, prev):
self.prev = prev
def GetNext(self):
"Determine which page to display next"
next = self.next
if (self.rb.GetSelection() == 0):
# If it's a new game, skip the scenario selector
next = next.GetNext()
if (self.rb.GetSelection() == 2):
# If it's a loaded game, launch now
next = None
return next
def GetPrev(self):
return self.prev
def OnPageChanging(self, event):
global bSaved
global bScenario
# Check direction
if event.GetDirection():
# We are trying to move forward - are we trying to init'ing or loading game?
if (self.rb.GetSelection() == 2):
# Loading a game - popup the file browser
bScenario = false
dlg = wx.FileDialog(
self, message=(localText.getText("TXT_KEY_PITBOSS_CHOOSE_SAVE", ())), defaultDir=".\saves\multi",
defaultFile="", wildcard=localText.getText("TXT_KEY_PITBOSS_SAVE_FILES", ("(*.Civ4SavedGame)|*.Civ4SavedGame", )), style=wx.OPEN
)
# Show the modal dialog and get the response
if dlg.ShowModal() == wx.ID_OK:
# Get the file name
path = dlg.GetPath()
if (path != ""):
# Prompt for admin password
dlg = wx.TextEntryDialog(
self, localText.getText("TXT_KEY_MAIN_MENU_CIV_ADMINPWD_DESC", ()),
localText.getText("TXT_MAIN_MENU_CIV_PASSWORD_TITLEBAR", ()))
# Show the modal dialog and get the response
if dlg.ShowModal() == wx.ID_OK:
# Check the game name
adminPwd = dlg.GetValue()
# We got a save file - try to load the setup info
iResult = PB.load(path, adminPwd)
if ( iResult != 0 ):
# Loading setup info failed. Clean up and exit
if (iResult == 1):
msg = wx.MessageBox((localText.getText("TXT_KEY_PITBOSS_ERROR_LOADING", ())), (localText.getText("TXT_KEY_PITBOSS_LOAD_ERROR", ())), wx.ICON_ERROR )
elif (iResult == -1):
msg = wx.MessageBox((localText.getText("TXT_MAIN_MENU_CIV_PASSWORD_RETRY_DESC", ())), (localText.getText("TXT_KEY_BAD_PASSWORD_TITLE", ())), wx.ICON_ERROR )
PB.reset()
event.Veto()
else:
# Successfully loaded, try hosting
PB.setLoadFileName(path)
if ( not PB.host(bPublic, bScenario) ):
msg = wx.MessageBox( (localText.getText("TXT_KEY_PITBOSS_ERROR_HOSTING", ())), (localText.getText("TXT_KEY_PITBOSS_HOST_ERROR", ())), wx.ICON_ERROR )
PB.reset()
event.Veto()
else:
bSaved = True
else:
# User cancelled admin password
PB.reset()
event.Veto()
else:
# Didn't get a save file - veto the page change
event.Veto()
else:
#User hit cancel - veto the page change
event.Veto()
# Destroy the dialog
dlg.Destroy()
else:
bSaved = false
-
- User
- Beiträge: 12
- Registriert: Donnerstag 22. November 2007, 14:30
Hat keiner einen Ansatz wie ich die Schleife rausnehmen kann und die 2 Variablen fest definieren kann ?