Seite 42 von 53 ErsteErste ... 3238394041424344454652 ... LetzteLetzte
Ergebnis 616 bis 630 von 784

Thema: Mod für PB-Spiele: PB Mod_v1

  1. #616
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    *entstaub*

    Falls jemand in den nächsten Abenden mal Zeit hat: Ich suche einen Freiwilligen zum Testen einer neuen Version des BTS_Wrappers
    Die neue Version unterstützt das Schnellladen von Saves auch bei normalen Internetspielen (Direct IP). Bisher konnte ich es aber nur im LAN testen. Nachdem ich vor ein paar Tagen schon verfrüht bei den Civfanatics postete will ich diesmal lieber nochmal testen

    Download + weitere Informationen habe ich hier gepostet: https://www.civforum.de/showthread.p...=1#post7576309

    ___________
    PBs können mit der neuen Version wie gewohnt betreten werden. Falls nicht, ist hier noch mal ein Link auf die ältere Version.

  2. #617
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ich habe am WE mit einer kleinen Verbesserung begonnen und Civ4 mit einer kleinen Shell ausgestattet
    Das erleichtet einige Administrationsarbeiten, da ich nun nicht mehr die Server neu starten muss, um Code auszuführen. Außerdem kann man damit, das ist vor allem für Mods interessant, sich die Interface-Definitionen der Boost:ython (Cy*Interface.cpp) Klassen ausgeben lassen.

    Beispiel für die recht schlecht Dokumentierte CyPitboss-Klasse:
    Code:
    >import pydoc
    >pydoc.doc(CyPitboss.consoleOut)
        load_module pydoc
        
        Python Library Documentation: method consoleOut
        
        consoleOut(...) unbound CvPythonExtensions.CyPitboss method
            prints the given string to the console
    
    Im Spoiler poste ich mal die komplette Angabe für CyPitboss
    Achtung Spoiler:
    Code:
    Python Library Documentation: class CyPitboss in module CvPythonExtensions
    
    class CyPitboss(Boost.Python.instance)
     |  Method resolution order:
     |      CyPitboss
     |      Boost.Python.instance
     |      __builtin__.object
     |
     |  Methods defined here:
     |
     |  __init__(...)
     |
     |  cancelPatchDownload(...)
     |      cancels the download for the current patch
     |
     |  checkPatch(...)
     |      checks for updates
     |
     |  consoleOut(...)
     |      prints the given string to the console
     |
     |  customMapOptionChanged(...)
     |      handles changes made by Pitboss admin to custom map options
     |
     |  downloadPatch(...)
     |      downloads the specified patch
     |
     |  forceAdvancedStart(...)
     |      bool () - returns whether advanced start should be used
     |
     |  forceCityElimination(...)
     |      bool () - returns whether the city elim value should be locked
     |
     |  forceDifficulty(...)
     |      bool () - returns whether the player handicap should be locked
     |
     |  forceMaxTurns(...)
     |      bool () - returns whether the max turns value should be locked
     |
     |  forceOptions(...)
     |      bool () - returns whether the game options values should be locked
     |
     |  forceSpeed(...)
     |      bool () - returns whether the gamespeed value should be locked
     |
     |  forceVictories(...)
     |      bool () - returns whether the victory conditions should be locked
     |
     |  gameOptionChanged(...)
     |      handles changes made by Pitboss admin to game options
     |
     |  gameParamChanged(...)
     |      handles changes made by Pitboss admin to game setup
     |
     |  getCiv(...)
     |      int() - returns Civ choice of given row
     |
     |  getCivAt(...)
     |      string () - returns the name of the Civ with the given ID
     |
     |  getCivLeaderAt(...)
     |      string () - returns the name of the leader with the given index within the given civ
     |
     |  getCivLeaderIndex(...)
     |      int() - returns index of Leader choice within its Civ
     |
     |  getClimate(...)
     |      int () - returns the index of the chosen climate
     |
     |  getClimateAt(...)
     |      string () - returns the name of the climate with the given index
     |
     |  getCustomMapOptionDescAt(...)
     |      string () - returns description of this option
     |
     |  getCustomMapOptionName(...)
     |      string () - returns the name of this user-defined setting
     |
     |  getDifficulty(...)
     |      int() - returns Difficulty choice of given row
     |
     |  getDone(...)
     |      bool () - determines if the game is quitting
     |
     |  getEmail(...)
     |      string () - returns the e-mail address from which Pitboss will send reminders
     |
     |  getEra(...)
     |      int () - returns the index of the chosen era
     |
     |  getEraAt(...)
     |      string () - returns the name of the era with the given index
     |
     |  getGameSetupData(...)
     |      PBGameSetupData() - returns structure of game setup data
     |
     |  getGamedate(...)
     |      string () - returns the gamedate
     |
     |  getGamename(...)
     |      string () - returns the gamename
     |
     |  getGameturn(...)
     |      int () - returns the gameturn
     |
     |  getGlobalLeaderIndex(...)
     |      int() - returns index of Leader choice within global scope
     |
     |  getHandicapAt(...)
     |      string () - returns the name of the Handicap with the given ID
     |
     |  getLeader(...)
     |      int() - returns Leader choice of given row
     |
     |  getMPOption(...)
     |      bool () - returns the mp option flag at the given index
     |
     |  getMPOptionDescAt(...)
     |      string () - returns the name of the multiplayer option with the given index
     |
     |  getMapName(...)
     |      string () - returns the name of the chosen map script
     |
     |  getMapNameAt(...)
     |      string () - returns the name of the map with the given index
     |
     |  getModAt(...)
     |      string() - returns the name of the mod at the given index
     |
     |  getModName(...)
     |      string () - returns the name of the currently loaded mod
     |
     |  getName(...)
     |      string () - returns Player Name of given row
     |
     |  getNoPlayersScenario(...)
     |      bool () - returns whether this scenario has no player data defined
     |
     |  getNumCivs(...)
     |      int () - returns the number of different Civs
     |
     |  getNumClimates(...)
     |      int () - returns the number of selectable climates
     |
     |  getNumCustomMapOptionValues(...)
     |      int () - returns number of options for this setting
     |
     |  getNumCustomMapOptions(...)
     |      int () - returns number of different user-defined settings
     |
     |  getNumEras(...)
     |      int () - returns the number of selectable eras
     |
     |  getNumHandicaps(...)
     |      int () - returns the number of different Handicaps
     |
     |  getNumLeaders(...)
     |      int () - returns the number of leaders for the chosen civ
     |
     |  getNumMPOptions(...)
     |      int () - returns the number of different multiplayer options
     |
     |  getNumMapScripts(...)
     |      int () - returns the number of selectable map scripts
     |
     |  getNumMods(...)
     |      int () - returns the number of mods available for load
     |
     |  getNumOptions(...)
     |      int () - returns the number of different game options
     |
     |  getNumScenarios(...)
     |      int () - returns the number of selectable scenarios
     |
     |  getNumSeaLevels(...)
     |      int () - returns the number of selectable sealevels
     |
     |  getNumSizes(...)
     |      int () - returns the number of selectable world sizes
     |
     |  getNumSpeeds(...)
     |      int () - returns the number of selectable game speeds
     |
     |  getNumVictories(...)
     |      int () - returns the number of different victory conditions
     |
     |  getOption(...)
     |      bool () - returns the option flag at given index
     |
     |  getOptionDescAt(...)
     |      string () - returns the name of the option with the given index
     |
     |  getPing(...)
     |      string() - gets ping status of given row
     |
     |  getPlayerAdminData(...)
     |      PBPlayerAdminData() - returns structure of player admin data of given row
     |
     |  getPlayerSetupData(...)
     |      PBPlayerSetupData() - returns structure of player setup data of given row
     |
     |  getReady(...)
     |      bool() - returns Ready status of given row
     |
     |  getSMTPHost(...)
     |      string () - returns the SMTP server host value
     |
     |  getSMTPLogin(...)
     |      string () - returns ths SMTP server login value
     |
     |  getScenarioAt(...)
     |      string () - returns the name of the scenario with the given index
     |
     |  getScore(...)
     |      string() - gets score of given row
     |
     |  getSeaLevel(...)
     |      int () - returns the index of the chosen sealevel
     |
     |  getSeaLevelAt(...)
     |      string () - returns the name of the sealevel with the given index
     |
     |  getSize(...)
     |      int () - returns the index of the chosen world size
     |
     |  getSizeAt(...)
     |      string () - returns the name of the world size with the given index
     |
     |  getSpeed(...)
     |      int () - returns the index of the chosen game speed
     |
     |  getSpeedAt(...)
     |      string () - returns the name of the game speed with the given index
     |
     |  getStatusText(...)
     |      string() - returns status text of given row
     |
     |  getTeam(...)
     |      int() - returns Team choice of given row
     |
     |  getTurnTimeLeft(...)
     |      int () - returns the number of slices left for this turn
     |
     |  getTurnTimer(...)
     |      bool () - returns whether we are using a turn timer
     |
     |  getVersion(...)
     |      string() - returns the version string
     |
     |  getVictory(...)
     |      bool () - returns the victory flag at the given index
     |
     |  getVictoryDescAt(...)
     |      string () - returns the name of the victory condition with the given index
     |
     |  getWho(...)
     |      int() - returns Slot Status of given row
     |
     |  handleMessages(...)
     |      handles incoming network messages
     |
     |  host(...)
     |      bool () - attempt to create a network game
     |
     |  installPatch(...)
     |      shuts down the app and installs the patch
     |
     |  isAdminPwdEmpty(...)
     |      bool () - returns whether there is an admin password
     |
     |  isClaimed(...)
     |      bool() - returns whether civ has been claimed
     |
     |  isCurrentMod(...)
     |      bool() - returns whether the mod at the given index is loaded
     |
     |  isHuman(...)
     |      bool() - returns whether player is human
     |
     |  isOptionValid(...)
     |      bool ()
     |
     |  isPendingInit(...)
     |      bool()
     |
     |  isPermanentVictory(...)
     |      bool () - returns whether this victory condition can be disabled
     |
     |  isPlayableCiv(...)
     |      bool () - returns whether this Civ is playable
     |
     |  isTurnActive(...)
     |      bool() - returns whether players turn is active
     |
     |  kick(...)
     |      removes a player from the game
     |
     |  launch(...)
     |      launches the game
     |
     |  load(...)
     |      int () - loads setup information for a saved game
     |
     |  loadMod(...)
     |      Loads the mod based on the given index
     |
     |  loadScenarioInfo(...)
     |      bool () - reads in the game info from the given scenario
     |
     |  login(...)
     |      bool () - attempts login to GameSpy, returns result
     |
     |  logout(...)
     |      logs out of GameSpy
     |
     |  mpOptionChanged(...)
     |      handles changes made by Pitboss admin to multiplayer options
     |
     |  playerParamChanged(...)
     |      handles changes made by Pitboss admin to player setup
     |
     |  quit(...)
     |      quits the game
     |
     |  reset(...)
     |      resets the network resources
     |
     |  resetAdvancedStartPoints(...)
     |      void
     |
     |  save(...)
     |      bool () - attempt to save a game
     |
     |  sendChat(...)
     |      sends a chat message to everyone
     |
     |  setGamePassword(...)
     |      sets the game password in the init structure
     |
     |  setGamename(...)
     |      sets the gamename in the init structure
     |
     |  setLoadFileName(...)
     |      sets the filename to load in the init structure
     |
     |  setSMTPValues(...)
     |      sets the SMTP server host, username, and password values
     |
     |  suggestPlayerSetup(...)
     |      Suggests number of players based on world size
     |
     |  turnTimerChanged(...)
     |      handles changes made by Pitboss admin to turn timer
     |
     |  victoriesChanged(...)
     |      handles changes made by Pitboss admin to victory conditions
     |
     |  ----------------------------------------------------------------------
     |  Data and other attributes defined here:
     |
     |  __instance_size__ = 36
     |
     |  ----------------------------------------------------------------------
     |  Data and other attributes inherited from Boost.Python.instance:
     |
     |  __dict__ = <dictproxy object>
     |
     |
     |  __new__ = <built-in method __new__ of Boost.Python.class object>
     |      T.__new__(S, ...) -> a new object with type S, a subtype of T
     |
     |  __weakref__ = <member '__weakref__' of 'Boost.Python.instance' objects...


    Wie man sieht, fehlen leider die Angaben über die Argumente der Funktionen, da dort immer nur (...) steht.
    Daher hier noch meine per Hand zusammengetragene Liste der CyPitboss-Methoden (incl. Argumenten).

    Achtung Spoiler:

    Code:
    class CyPitboss:
        # Extracted from PBWizard.py and PBAdmin.py
        def getModName():
            return str()
    
        def getNumSizes():
            return int()
    
        def getSizeAt(iIndex):
            return str()
    
        def getNumClimates():
            return int()
    
        def getClimateAt(iIndex):
            return str()
    
        def getNumSeaLevels():
            return int()
    
        def getSeaLevelAt(iIndex):
            return str()
    
        def getNumEras():
            return int()
    
        def getEraAt(iIndex):
            return str()
    
        def getNumSpeeds():
            return int()
    
        def getSpeedAt(iIndex):
            return str()
    
        def getNumMods():
            return int()
    
        def getModAt(iIndex):
            return str()
    
        def getNumMapScripts():
            return int()
    
        def getMapNameAt(iIndex):
            return str()
    
        def getNumScenarios():
            return int()
    
        def getScenarioAt(iIndex):
            return str()
    
        def getNumCivs():
            return int()
    
        def getCivAt(iIndex):
            return str()
    
        def getNumHandicaps():
            return int()
    
        def getHandicapAt(iIndex):
            return str()
    
        def getNumOptions():
            return int()
    
        def getOptionDescAt(iIndex):
            return str()
    
        def getNumMPOptions():
            return int()
    
        def getMPOptionDescAt(iIndex):
            return str()
    
        def getNumVictories():
            return int()
    
        def getVictoryDescAt(iIndex):
            return str()
    
        def getSMTPLogin():
            return str()
    
        def getEmail():
            return str()
    
        def getSMTPHost():
            return str()
    
        def setSMTPValues(sHost, sUser, sPassword, sEmail):
            pass
    
        def checkPatch():
            return bool()  # ?
    
        def downloadPatch(sPatchName, sPatchUrl):
            return bool()
    
        def installPatch(sPatchName):
            pass
    
        def login(sUser, sPassword):
            return bool()
            pass
    
        def load(sPath, sAdminPwd):
            return int()
    
        def reset():
            pass
    
        def logout():
            pass
    
        def setLoadFileName(sPath):
            pass
    
        def host(bPublic, bScenario):
            return bool()
            pass
    
        def setGamename(sGamename):
            pass
    
        def setGamePassword(sPassword):
            pass
    
        def loadScenarioInfo(iIndex):
            return bool()
    
        def isPendingInit():
            return bool()
    
        def getGameSetupData():
            return PBGameSetupData()
    
        def getPlayerSetupData(iPlayer):
            return PBPlayerSetupData()
    
        def getPlayerAdminData(iPlayer):
            return PBPlayerAdminData()
    
        def getGlobalLeaderIndex(iCiv, iLeader):
            return int()
    
        def gameParamChanged(sMap, iSize, iClimate, iEra,
                             iSpeed, iMaxTurns, bCityElimination,
                             iTurnTimer, sAdminPassword):
            pass
    
        def playerParamChanged(iSlot, iWho, iCiv, iTeam,
                              iDifficulty, iGlobalLeaderID):
            # iWho is slot status 
            pass
    
        def gameOptionChanged( iVictoryID, iValue):
            pass
    
        def mpOptionChanged( iVictoryID, iValue):
            pass
    
        def customMapOptionChanged( iOptionID, iValue):
            pass
    
        def victoriesChanged( iVictoryID, iValue):
            pass
    
        def getTurnTimer():
            return bool()
    
        def turnTimerChanged(iChange):
            pass
    
        def getTurnTimeLeft():
            return int()
    
        def kick(iPlayer):
            pass
    
        def save(sPath):
            return bool()
    
        def quit():
            pass
    
        def consoleOut(sMsg):
            pass
    
        def sendChat(sMsg):
            pass
    
        def getGamename():
            return str()
    
        def getGamedate(bUnknownFlag):
            return str()
    
        def getGameturn():
            return int()
    
        def getVersion():
            return str()  # ?
    
        def getNoPlayersScenario():
            return bool()
    
        def getWho(iSlot):
            return int()  # iStatus (AI, Human, ...)
    
        def getCiv(iSlot):
            return int()  # iCiv
    
        def forceSpeed():
            return bool()
    
        def forceMaxTurns():
            return bool()
    
        def forceCityElimination():
            return bool()
    
        def forceOptions():
            return bool()
    
        def forceVictories():
            return bool()
    
        def forceDifficulty():
            return bool()
    
        def isPermanentVictory(iRow):
            return bool()
    
        def isPlayableCiv(iRow):
            return bool()
    
        def suggestPlayerSetup():
            pass
    
        def getCivLeaderIndex(iCiv, iLeader):
            return int()
    
        def getReady(iSlot):
            return bool()
    
        def getDone():
            return bool()
    
        def launch():
            pass
    
        def handleMessages():
            pass
    
        def cancelPatchDownload():
            pass


    =======================================

    Eine andere schöne Anwendung der Shell wäre ein Umschreiben des Startprozesses von PB-Spielen. Damit könnte man den PB-Server starten ohne einen Spielstand zu laden und diesen dann später über die Shell auswählen.
    Das Skript wäre besser für die Windows-Leute, da die mit unserem unübersichtlichen Bash-Skript nicht so ne Freude haben.

  3. #618
    Stoppt Spahn jetzt! Avatar von CocoRico
    Registriert seit
    02.06.11
    Beiträge
    7.451
    Ich verstehe zwar überhaupt nicht, worum's geht, spendiere dir aber mal für deine Mühen eine Tüte

    Noch ein kühles dazu?
    The law is no substitute for morality. E.Snowden, Dez 2016

    Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier. Gandhi

    Meine PB-Geschichten:
    Achtung Spoiler:
    PB 88 Coco in Babylon läuft
    PB 86 Coco in Athen läuft
    PB 82 Pyramiden für den Pharao überlebt
    PB 75 Mit Isabella bei den Gringos Sieg!
    PB 73 Ein Königreich für Schokolade! überlebt
    PB 68 Simba Zulus Sieg!
    PB 60 Indien überlebt
    PB 53 Von Wölfen und Göttern überlebt

  4. #619
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Immer her damit

    Zitat Zitat von CocoRico Beitrag anzeigen
    Ich verstehe zwar überhaupt nicht, worum's geht, spendiere dir aber mal für deine Mühen eine Tüte

    Noch ein kühles dazu?
    Um dir im Spiel ein Goldstück zu überweisen (für das Bier!) musste ich bisher den Quelltext des Spiels (auf dem Server) ändern. Jetzt kann ich
    im Terminal einfach gc.getPlayer(1).changeGold(1) eingeben.

    Da sieht man dann auch gleich das Missbrauchspotential^^. Gedacht ist das Tool eher zum Debuggen und die Verwendung in der PB-Mod eine nützliche Zweitverwertung.

  5. #620
    Stoppt Spahn jetzt! Avatar von CocoRico
    Registriert seit
    02.06.11
    Beiträge
    7.451
    Das ist ja fantastisch!

    Also dass das mit 1 Gold funktioniert, geschenkt. Ich hege aber große Zweifel, dass das auch mit 1000 Gold geht! Lass uns das doch mal eben im 80er testen, meine PlayerID haste ja
    The law is no substitute for morality. E.Snowden, Dez 2016

    Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier. Gandhi

    Meine PB-Geschichten:
    Achtung Spoiler:
    PB 88 Coco in Babylon läuft
    PB 86 Coco in Athen läuft
    PB 82 Pyramiden für den Pharao überlebt
    PB 75 Mit Isabella bei den Gringos Sieg!
    PB 73 Ein Königreich für Schokolade! überlebt
    PB 68 Simba Zulus Sieg!
    PB 60 Indien überlebt
    PB 53 Von Wölfen und Göttern überlebt

  6. #621
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Um die nervigen (sorry) Nachfragen beim Updaten der Mod zu vermeiden will ich als nächstes eine Autoupdate-Funktion einbauen. Ich hatte überlegt es als Pythonskript beizulegen, aber die meisten werden Python nicht so installiert haben, dass man es einfach so starten kann. Wenn man es aber im Spiel direkt startet hat man zumindest Zugriff auf (die total veraltete) Python-2.4-Laufzeitumgebung .

    Dann braucht man nur noch einen Webserver und packt seine Updates dort in eine Reihe von Zip's, die dann der Reihe nach in den Mod-Ordner entpackt werden. Nicht mit Git zu vergleichen, aber zumindest sollte das dann bei allen laufen, sofern man Schreibrechte im Mod-Ordner hat und den Pfad kennt

  7. #622
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Um die nervigen (sorry) Nachfragen beim Updaten der Mod zu vermeiden will ich als nächstes eine Autoupdate-Funktion einbauen. Ich hatte überlegt es als Pythonskript beizulegen, aber die meisten werden Python nicht so installiert haben, dass man es einfach so starten kann. Wenn man es aber im Spiel direkt startet hat man zumindest Zugriff auf (die total veraltete) Python-2.4-Laufzeitumgebung .

    Dann braucht man nur noch einen Webserver und packt seine Updates dort in eine Reihe von Zip's, die dann der Reihe nach in den Mod-Ordner entpackt werden. Nicht mit Git zu vergleichen, aber zumindest sollte das dann bei allen laufen, sofern man Schreibrechte im Mod-Ordner hat und den Pfad kennt
    Ich glaub das macht mehr Probleme als es loest.

  8. #623
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901
    Zitat Zitat von Zulan Beitrag anzeigen
    Ich glaub das macht mehr Probleme als es loest.
    Das war ein bisschen knapp formuliert. Ich hab einfach schon so viele Auto-Updates gesehen die nicht funktionieren, dass ich mich nicht trauen wuerde das reibungsfrei hinzubekommen. Wenn dann sollte es auch sicher sein was mit so ner alten python

    Version schiwerig werden koennte. Dann die Frage ob da diverse Virenscanner / Sicherheitsmechanismen gegen spielen.

  9. #624
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    In dem kleinen Rahmen, in dem ich mir das vorschwebt habe ich es ungefähr zu 50% fertig. Letztlich ist es nur die Automatisierung des Unzip-Vorgangs der leider immer noch ständig Nachfragen produziert und ich nicht mehr „Remote Total Commander“ spielen will.
    Beim PAE-PB wird es sicher noch einige Updates geben so dass es später vielleicht sogar was bringt.

    Die alte Python-Version scheint bzgl. der benötigten Module, noch nicht kritisch zu sein, wobei ich es mit einem https-Server noch nicht probiert habe. Beim Sicherheitsaspekt hast du nat. Recht. Aber bei der theoretischen Überlegung wäre ich ja der Angreifer und dann könnte ich auch einfachere Wege beschreiten

    Die großen Probleme sind der von dir angesprochene Virenscanner und das Problem, dass man unter Windows keine DLL-Datei schreiben kann, die gerade offen ist. Unter WINE ist das kein Problem, aber ich kann mich daran erinnern, dass es unter Windows nicht ging

    Wenn man sich auf Mod-Updates einschränkt, welche die DLL nicht ersetzen, sollte es aber funktionieren.
    Und die Virenscanner-Problematik hat man auch beim manuellen Entpacken, wie Jesper gerade im PB85 erleben musste (Panda Schlangenöl). Der Witz ist, dass ja unsignierte DLLs nicht blockiert werden solange sie vor dem Antivirenprogramm auf dem System vorhanden sind. Nur beim neuen Schreiben dieser Dateien machen die Programme den User verrückt.

    Wahrscheinlich wären die Antivirenprogramme schon zufrieden wenn man irgend eine beliebige Signatur verwendet. Letztlich können sie es eh nicht nachvollziehen
    Liege ich mit der Einschätzung deiner Meinung nach richtig?


    Edit: Auf Civ4-Modding-Seite gibt es noch das Problem, dass es keinen Eventhandler gibt, der feuert sobald das Hauptmenü angezeigt wird. (OnInit feuert zu früh, OnUpdate erst nach dem Laden eines Spielstandes!)
    Geändert von Ramkhamhaeng (26. Juni 2018 um 00:13 Uhr)

  10. #625
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.397
    Die paar Mitspieler können gefälligst lernen, wie man einen Ordner entzippt

  11. #626
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Verdammt, Der Python2.4-Variante fehlt doch ein Modul Emoticon: polly
    Code:
    Unzipping of Mods\PB Mod_v7\pbmod_update002.zip failed. Error: De-compression requires the (missing) zlib module
    Zitat Zitat von Flunky Beitrag anzeigen
    Die paar Mitspieler können gefälligst lernen, wie man einen Ordner entzippt
    In dem Moment, in dem man das geschafft hat, wählt sich ein frischer Ersatzspieler das erste Mal ins Spiel

  12. #627
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    In den letzten Tagen habe ich zwischendurch immer mal an diesem Update-Feature gearbeitet. Ich will kurz ein lustiges Fehlerverhalten beschreiben, dessen Aufspüren mich einige Nerven gekostet hat

    Und zwar ist mir das Programm beim Starten immer mal wieder mit einem CtD und damit ohne Fehlermeldung abgestürzt. Da ich in meinem neuen Feature einen neuen Thread starten muss, um ohne Blockierung des Hauptthreads ein paar Sekunden zu warten, war relativ schnell klar dass es an zwei konkurrierenden Threads liegen muss, die gleichzeitig die Zeichenroutinen benutzen.
    Nen Mutex kann ich nicht vorschalten, da ich ohne weiteres nicht herausfinden kann wann die Exe irgendetwas zeichnet.

    Nur leider war mir nicht klar was genau passiert und wie ich den Crash vermeiden kann…
    Heute habe ich dann festgestellt, dass es irgendwie mit dem Mauszeiger zu tun haben muss. Bewege ich den zwischen dem Programmfenster und der Umgebung mittig auf dem Bildschirm hin und her, kommt der Crash.
    Damit müsste ich es aber gefunden haben, denn was passiert beim Bewegen des Mauszeigers in der Mitte? Es wird ein anderer Eintrag im Hauptmenü mit den Pfeilen dekoriert!
    Hoffe der Crash verschwindet, wenn ich die Position des Mauszeigers berücksichtige und nur in unkritischen Bereichen (Cursor weit oben oder unten) zeichne. Bliebe noch die Steuerung per Tastatur, verdammt

  13. #628
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.901




    Klingt ungefaehr so wie ich mir das vorgestellt hatte

  14. #629
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Nach ein paar Experimenten, habe ich nun eine Lösung bei der ich keine Abstürze mehr provozieren konnte. Lösung war es das "Rennen" um den ersten Redraw zu gewinnen. Sobald die getMousePos()-Routine einen Wert != (0,0) liefert kann man zeichnen und das wird jetzt probiert

    Probiere das nun mal bei den PAElern aus.

  15. #630
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zulan, erinnerst du dich noch an die Save-Ladeproblematik durch die manchmal falsch berechnete Prüfsumme?

    Das Problem scheint nun leider auch auf die Windows-Clients herübergeschwappt zu sein :-( (Oder der Server produziert die falsche Prüfsumme.)

    Im PB85 (Mit PAE-Mod) sind die Spielstände ungefähr 1,6 MB groß. Diese werden zwar komplett übertragen, aber sind vom Client nicht ladbar. Ich habe nun auch schon zwei Testsaves, von denen ich eins nicht über MP->DirectIP->Spielstand laden öffnen kann. Damit könnte man die Sache genauer untersuchen.

    Meine Hoffnung wäre, dass man auf dem Server eine DLL austauschen kann und dann die Prüfsummen-Berechnung mit der der Clients immer übereinstimmt. Hast du zu der Sache noch ein paar Ideen/ eine Meinung?

Seite 42 von 53 ErsteErste ... 3238394041424344454652 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •