home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 January / Gamestar_80_2006-01_dvd.iso / Dema / Civilization4 / data1.cab / Civ4DemoComponent / Assets / Python / EntryPoints / CvAppInterface.py next >
Encoding:
Python Source  |  2005-11-09  |  6.0 KB  |  180 lines

  1. # Sid Meier's Civilization 4
  2. # Copyright Firaxis Games 2005
  3. #
  4. # CvAppInterface.py
  5. #
  6. # These functions are App Entry Points from C++
  7. # WARNING: These function names should not be changed
  8. # WARNING: These functions can not be placed into a class
  9. #
  10. # No other modules should import this
  11. #
  12. # DONT ADD ANY MORE IMPORTS HERE - Moose
  13. import sys
  14. import os
  15. import CvUtil
  16. #
  17.  
  18. from CvPythonExtensions import *
  19.  
  20. # globals
  21. gc = CyGlobalContext()
  22.  
  23. # don't make this an event - Moose
  24. def init():
  25.     # for PythonExtensions Help File
  26.     PythonHelp = 0        # doesn't work on systems which haven't installed Python
  27.             
  28.     # dump Civ python module directory
  29.     if PythonHelp:        
  30.         import CvPythonExtensions
  31.         helpFile=file("log\CvPythonExtensions.hlp.txt", "w")
  32.         sys.stdout=helpFile
  33.         help(CvPythonExtensions)
  34.         helpFile.close()
  35.     
  36.     sys.stderr=CvUtil.RedirectError()
  37.     sys.excepthook = CvUtil.myExceptHook
  38.     sys.stdout=CvUtil.RedirectDebug()
  39.  
  40. def onSave():
  41.     'Here is your chance to save data.  This function should return a string'
  42.     import CvWBDesc
  43.     import pickle    
  44.     import CvEventInterface
  45.     # if the tutorial is active, it will save out the Shown Messages list
  46.     saveDataStr = pickle.dumps( CvEventInterface.onEvent( ('OnSave',0,0,0,0,0 ) ) )
  47.     return saveDataStr
  48.     
  49. def onLoad(argsList):
  50.     'Called when a file is loaded'
  51.     import pickle    
  52.     import CvEventInterface
  53.     loadDataStr=argsList[0]    
  54.     if len(loadDataStr):
  55.         CvEventInterface.onEvent( ('OnLoad',pickle.loads(loadDataStr),0,0,0,0,0 ) )    
  56.  
  57. def preGameStart():
  58.     import CvScreensInterface
  59.     
  60.     if not CyGame().isPitbossHost():
  61.         NiTextOut("Initializing font icons")
  62.         # Load dynamic font icons into the icon map
  63.         CvUtil.initDynamicFontIcons()
  64.  
  65.     # Preload the tech chooser..., only do this release builds, in debug build we may not be raising the tech chooser
  66.     if (not gc.isDebugBuild()):
  67.         NiTextOut("Preloading tech chooser")
  68.         CvScreensInterface.showTechChooser()
  69.         CvScreensInterface.techChooser.hideScreen()
  70.         
  71.     NiTextOut("Loading main interface...")
  72.     CvScreensInterface.showMainInterface()    
  73.  
  74. def onPbemSend(argsList):
  75.     import sys, smtplib, MimeWriter, base64, StringIO
  76.             
  77.     szToAddr = argsList[0]    
  78.     szFromAddr = argsList[1]    
  79.     szSubject = argsList[2]    
  80.     szPath = argsList[3]
  81.     szFilename = argsList[4]
  82.     szHost = argsList[5]
  83.     szUser = argsList[6]
  84.     szPassword = argsList[7]
  85.     
  86.     #print 'sending e-mail'
  87.     #print 'To:', szToAddr
  88.     #print 'From:', szFromAddr
  89.     #print 'Subject:', szSubject
  90.     #print 'Path:', szPath
  91.     #print 'File:', szFilename
  92.     #print 'Server:', szHost
  93.     #print 'User:', szUser
  94.     
  95.     if len(szFromAddr) == 0 or len(szHost) == 0:
  96.         #print 'host or address empty'
  97.         return 1
  98.  
  99.     message = StringIO.StringIO()
  100.     writer = MimeWriter.MimeWriter(message)
  101.  
  102.     writer.addheader('To', szToAddr)
  103.     writer.addheader('From', szFromAddr)
  104.     writer.addheader('Subject', szSubject)
  105.     writer.addheader('MIME-Version', '1.0')
  106.     writer.startmultipartbody('mixed')
  107.  
  108.     part = writer.nextpart()
  109.     body = part.startbody('text/plain')
  110.     body.write('CIV4 PBEM save attached')
  111.  
  112.     part = writer.nextpart()
  113.     part.addheader('Content-Transfer-Encoding', 'base64')
  114.     szStartBody = "application/Civ4SavedGame; name=%s" % szFilename
  115.     body = part.startbody(szStartBody)
  116.     base64.encode(open(szPath+szFilename, 'rb'), body)
  117.  
  118.     # finish off
  119.     writer.lastpart()
  120.  
  121.     # send the mail
  122.     try:
  123.         smtp = smtplib.SMTP(szHost)
  124.         if len(szUser) > 0:
  125.             smtp.login(szUser, szPassword)
  126.         smtp.sendmail(szFromAddr, szToAddr, message.getvalue())
  127.         smtp.quit()
  128.     except smtplib.SMTPAuthenticationError, e:
  129.         CyInterface().addImmediateMessage("Authentication Error: The server didn't accept the username/password combination provided.", "")    
  130.         CyInterface().addImmediateMessage("Error %d: %s" % (e.smtp_code, e.smtp_error), "")    
  131.         return 1
  132.     except smtplib.SMTPHeloError, e:
  133.         CyInterface().addImmediateMessage("The server refused our HELO reply.", "")    
  134.         CyInterface().addImmediateMessage("Error %d: %s" % (e.smtp_code, e.smtp_error), "")    
  135.         return 1
  136.     except smtplib.SMTPConnectError, e:
  137.         CyInterface().addImmediateMessage("Error establishing connection.", "")    
  138.         CyInterface().addImmediateMessage("Error %d: %s" % (e.smtp_code, e.smtp_error), "")    
  139.         return 1
  140.     except smtplib.SMTPDataError, e:
  141.         CyInterface().addImmediateMessage("The SMTP server didn't accept the data.", "")    
  142.         CyInterface().addImmediateMessage("Error %d: %s" % (e.smtp_code, e.smtp_error), "")    
  143.         return 1
  144.     except smtplib.SMTPRecipientsRefused, e:
  145.         CyInterface().addImmediateMessage("All recipient addresses refused.", "")    
  146.         return 1
  147.     except smtplib.SMTPSenderRefused, e:
  148.         CyInterface().addImmediateMessage("Sender address refused.", "")    
  149.         CyInterface().addImmediateMessage("Error %d: %s" % (e.smtp_code, e.smtp_error), "")    
  150.         return 1
  151.     except smtplib.SMTPResponseException, e:
  152.         CyInterface().addImmediateMessage("Error %d: %s" % (e.smtp_code, e.smtp_error), "")    
  153.         return 1
  154.     except smtplib.SMTPServerDisconnected:
  155.         CyInterface().addImmediateMessage("Not connected to any SMTP server", "")    
  156.         return 1
  157.     except:
  158.         return 1
  159.     return 0
  160.  
  161. #####################################33
  162. ## INTERNAL USE ONLY
  163. #####################################33
  164. def normalizePath(argsList):
  165.     CvUtil.pyPrint("PathName in = %s" %(argsList[0],))
  166.     pathOut=os.path.normpath(argsList[0])
  167.     CvUtil.pyPrint("PathName out = %s" %(pathOut,))
  168.     return pathOut
  169.  
  170. def getConsoleMacro(argsList):
  171.     'return a string macro that is used by the in-game python console, fxnKey goes from 1 to 10'
  172.     fxnKey = argsList[0]
  173.     if (fxnKey==1): return "player = gc.getPlayer(0)"
  174.     if (fxnKey==2): return "import CvCameraControls"
  175.     if (fxnKey==3): return "CvCameraControls.g_CameraControls.resetCameraControls()"
  176.     if (fxnKey==4): return "CvCameraControls.g_CameraControls.doRotateCamera(360, 45.0)"
  177.     if (fxnKey==5): return "CvCameraControls.g_CameraControls.doZoomCamera(0.2, 0.5)"
  178.     if (fxnKey==6): return "CvCameraControls.g_CameraControls.doZoomCamera(0.5, 0.15)"
  179.     if (fxnKey==7): return "CvCameraControls.g_CameraControls.doPitchCamera(0.5, 0.5)"
  180.     return ""