Probleme mit Wizard

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
marlboro1980
User
Beiträge: 12
Registriert: Donnerstag 22. November 2007, 14:30

Probleme mit Wizard

Beitragvon marlboro1980 » Dienstag 2. Dezember 2008, 20:23

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]
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Dienstag 2. Dezember 2008, 21:08

Der Code ist direkt von dem Spiel?
Dann weiß ich nicht, ob es ne gute Idee ist, den Code hier zu posten....
marlboro1980
User
Beiträge: 12
Registriert: Donnerstag 22. November 2007, 14:30

Beitragvon marlboro1980 » Mittwoch 3. Dezember 2008, 10:29

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: 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
[/code]
marlboro1980
User
Beiträge: 12
Registriert: Donnerstag 22. November 2007, 14:30

Beitragvon marlboro1980 » Donnerstag 4. Dezember 2008, 09:44

Hat keiner einen Ansatz wie ich die Schleife rausnehmen kann und die 2 Variablen fest definieren kann ?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder