Rev 216 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#pragma once#include "BaseFile.h"#include "spkdefines.h"class SPKEXPORT CSpkFile : public CBaseFile{public:enum {SCRIPTTYPE_CUSTOM,SCRIPTTYPE_OTHER,SCRIPTTYPE_NAVIGATION,SCRIPTTYPE_COMBAT,SCRIPTTYPE_MISSION,SCRIPTTYPE_ALPLUGIN,SCRIPTTYPE_HOTKEY,SCRIPTTYPE_SHIPUPGRADE,SCRIPTTYPE_SHIPCOMMAND,SCRIPTTYPE_STATIONCOMMAND,SCRIPTTYPE_FLEET,SCRIPTTYPE_TRADE,SCRIPTTYPE_PIRACY,SCRIPTTYPE_CHEAT,SCRIPTTYPE_EXTENSION,SCRIPTTYPE_REBALANCE,SCRIPTTYPE_FIX,SCRIPTTYPE_GENERALMOD,SCRIPTTYPE_TOTAL,SCRIPTTYPE_WINGCOMMAND,SCRIPTTYPE_MAX,SCRIPTTYPE_UNKNOWN,SCRIPTTYPE_LIBRARY,SCRIPTTYPE_UPDATE,SCRIPTTYPE_CUSTOMSTART,SCRIPTTYPE_PATCH,SCRIPTTYPE_FAKEPATCH,};private:enum {SETTING_INTEGER,SETTING_STRING,SETTING_CHECK};typedef struct SSettingString : public SSettingType {SSettingString () { iType = SETTING_STRING; }Utils::WString sValue;} SSettingString;typedef struct SSettingInteger : public SSettingType {SSettingInteger () : iValue(0) { iType = SETTING_INTEGER; }int iValue;} SSettingInteger;typedef struct SSettingCheck : public SSettingType {SSettingCheck () : bValue(false) { iType = SETTING_CHECK; }bool bValue ;} SSettingCheck;public:static int ConvertScriptType(const Utils::WString &sType);static Utils::WString GetScriptTypeStringStatic(int type, int iLang);static Utils::WString GetWareText(SWares *w, int lang);static Utils::WString GetWareDesc(SWares *w, int lang);// get functionsUtils::WString scriptTypeString(int lang) const;Utils::WString customScriptType () const { return m_sScriptType; }Utils::WString customScriptType (int lang) const;const Utils::WString &otherName() const { return m_sOtherName; }const Utils::WString &otherAuthor() const { return m_sOtherAuthor; }CLinkList<SWares> *GetWaresList() { return &m_lWares; }CLinkList<SSettingType> *settingsList() { return &m_lSettings; }bool CheckValidReadmes () const;bool IsCustomStart () const { return (m_iPackageType == PACKAGETYPE_CUSTOMSTART) ? true : false; }bool IsPackageUpdate () const { return (m_iPackageType == PACKAGETYPE_UPDATE) ? true : false; }bool IsPatch () const { return (m_iPackageType == PACKAGETYPE_PATCH) ? true: false; }bool IsLibrary () const { return (m_iPackageType == PACKAGETYPE_LIBRARY) ? true: false; }bool IsAnotherMod() const { if ((m_sOtherName.empty()) || (m_sOtherAuthor.empty())) return false; return true; }bool isAnotherMod() const { if ((m_sOtherName.empty()) || (m_sOtherAuthor.empty())) return false; return true; }bool IsForceProfile() const { return m_bForceProfile; }int GetScriptType() const { return m_iScriptType; }int GetPackageType() const { return m_iPackageType; }virtual bool readWares(int iLang, CLinkList<SWareEntry> &list, const Utils::WString &empWares);// Custom StartUtils::WString customStartName() const;// set functionsvoid setScriptType ( const Utils::WString &str ) { m_sScriptType = str; _changed(); }void setAnotherMod ( const Utils::WString &name, const Utils::WString &author ) { m_sOtherName = name; m_sOtherAuthor = author; _changed(); }void SetForceProfile ( bool p ) { m_bForceProfile = p; _changed(); }void SetPackageType(int i){m_iPackageType = i;if ( i == PACKAGETYPE_UPDATE ){if ( !this->findPackageNeeded(L"<package>", L"<author>") )this->addNeededLibrary(L"<package>", L"<author>", L"1.00");}elsethis->removePackageNeeded(L"<package>", L"<author>");_changed();}void SetPatch() { this->SetPackageType(PACKAGETYPE_PATCH); }void SetLibrary() { this->SetPackageType(PACKAGETYPE_LIBRARY); }void SetCustomStart() { this->SetPackageType(PACKAGETYPE_CUSTOMSTART); }void SetPackageUpdate() { this->SetPackageType(PACKAGETYPE_UPDATE); }void SetNormalPackage() { this->SetPackageType(PACKAGETYPE_NORMAL); }void setScriptType(int i) { SetNormalPackage(); m_iScriptType = i; _changed(); }virtual bool loadPackageData(const Utils::WString &sFirst, const Utils::WString &sRest, const Utils::WString &sMainGame, Utils::WStringList &otherGames, Utils::WStringList &gameAddons, CProgressInfo *progress = NULL) override;virtual bool GeneratePackagerScript(bool wildcard, Utils::WStringList *list, int game, const Utils::WStringList &gameAddons, bool datafile = false) override;CSpkFile();virtual ~CSpkFile();bool isMatchingMod(const Utils::WString &mod) const;/// reading of filesvirtual bool parseValueLine(const Utils::WString &line) override;// writing of filesvirtual Utils::WString createValuesLine() const override;bool writeHeader(CFileIO &file, int iHeader, int iLength) const override;SWares *findWare(const Utils::WString &id) const;void addWare(const Utils::WString &sWareLine);void addWareText(const Utils::WString &sText);void addWare(SWares *pWare);void addWareText(SWares *pWare, int iLang, const Utils::WString &sName, const Utils::WString &sDesc);void removeWare(const Utils::WString &sWare);void removeWareText(const Utils::WString &sName, int iLang);void clearWareText(SWares *pWare);void clearWareText(const Utils::WString &sWare);void clearWares ();bool anyWares() const { return !m_lWares.empty(); }int CheckValidCustomStart () const;virtual bool computeSigned(bool updateFiles) const override;SSettingType *addSetting(const Utils::WString &key, int type);void clearSettings ();void convertSetting(SSettingType *t, const Utils::WString &set) const;Utils::WString getSetting(SSettingType *t) const;bool anySettings() const { return !m_lSettings.empty(); }// installer usageconst Utils::WString &lastReadme () const { return m_sLastReadme; }const Utils::WString &customMap () const { return m_sCustomMap; }void setCustomMap ( const Utils::WString &map ) { m_sCustomMap = map; }void setLastReadme ( const Utils::WString &r ) { m_sLastReadme = r; }virtual int GetType () { return TYPE_SPK; }virtual BaseFileType type() const override { return BaseFileType::TYPE_SPK; }void MergePackage(CBaseFile *p);// old conversion functionsbool convertOld(const Utils::WString &sOldFilename);static CSpkFile *convertFromOld(const Utils::WString &sOldFilename);protected:virtual void Delete ();virtual void SetDefaults ();virtual bool _checkHeader(const Utils::WString &header) const override;// old conversion functionsunsigned char *_convert_uncompressFile(const Utils::WString &sOldFilename, int *pLen);void _convert_parse(const Utils::WString &sCmd, const Utils::WString &sRest);Utils::WString _convert_fileEndString(const Utils::WString &sFile);FileType _convert_fileType(const Utils::WString &sFile);Utils::WString _convert_parseFilename(const Utils::WString &sRest, float fVersion, Utils::WString *pDir);unsigned char *_convert_parseFile(const Utils::WString &s_Cmd, const Utils::WString &s_Rest, float fVersion, unsigned char *d);// variblesUtils::WString m_sOtherAuthor;Utils::WString m_sOtherName;Utils::WString m_sScriptType;bool m_bForceProfile;int m_iPackageType;int m_iScriptType;CLinkList<SWares> m_lWares;CLinkList<SSettingType> m_lSettings;SWares *m_pLastWare;// installer variblesUtils::WString m_sLastReadme;Utils::WString m_sCustomMap;};