Rev 6 | Rev 8 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#pragma once
#include "BaseFile.h"
tstruct SSettingType {
CyString sKey;
int iType;
} SSettingType;
typedef struct SWaresText {
int iLang;
CyString sName;
CyString sDesc;
} SWaresText;
typedef struct SWares {
CyString sID;
char cType;
long iPrice;
int iSize;
int iVolumn;
int iNotority;
bool bEnabled;
int iPosID;
int iDescID;
int iTextID;
int iTextPage;
CLinkList<SWaresText> lText;
int iUsed;
} SWares;
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
};
private:
enum {
SETTING_INTEGER,
SETTING_STRING,
SETTING_CHECK
};
typedef struct SSettingString : public SSettingType {
SSettingString () { iType = SETTING_STRING; }
CyString sValue;
} SSettingString;
typedef struct SSettingInteger : public SSettingType {
SSettingInteger () { iType = SETTING_INTEGER; }
int iValue;
} SSettingInteger;
typedef struct SSettingCheck : public SSettingType {
SSettingCheck () { iType = SETTING_CHECK; }
bool bValue ;
} SSettingCheck;
public:
static int ConvertScriptType(CyString sType);
static CyString GetScriptTypeStringStatic(int type);
static CyString GetWareText(SWares *w, int lang);
static CyString GetWareDesc(SWares *w, int lang);
// get functions
CyString GetScriptTypeString(int lang);
CyString GetCustomScriptType () { return m_sScriptType; }
CyString GetCustomScriptType (int lang);
CyString GetOtherName () { return m_sOtherName; }
CyString GetOtherAuthor () { return m_sOtherAuthor; }
CLinkList<SWares> *GetWaresList() { return &m_lWares; }
CLinkList<SSettingType> *GetSettingsList() { return &m_lSettings; }
bool CheckValidReadmes ();
bool IsCustomStart () { return (m_iPackageType == PACKAGETYPE_CUSTOMSTART) ? true : false; }
bool IsPackageUpdate () { return (m_iPackageType == PACKAGETYPE_UPDATE) ? true : false; }
bool IsPatch () { return (m_iPackageType == PACKAGETYPE_PATCH) ? true: false; }
bool IsLibrary () { return (m_iPackageType == PACKAGETYPE_LIBRARY) ? true: false; }
bool IsAnotherMod() { if ( (m_sOtherName.Empty()) || (m_sOtherAuthor.Empty()) ) return false; return true; }
bool IsForceProfile() { return m_bForceProfile; }
int GetScriptType() { return m_iScriptType; }
int GetPackageType() { return m_iPackageType; }
// Custom Start
CyString GetCustomStartName();
// set functions
void SetScriptType ( CyString str ) { m_sScriptType = str; m_bChanged = true; }
void SetAnotherMod ( CyString name, CyString author ) { m_sOtherName = name; m_sOtherAuthor = author; m_bChanged = true; }
void SetForceProfile ( bool p ) { m_bForceProfile = p; m_bChanged = true; }
void SetPackageType(int i)
{
m_iPackageType = i;
if ( i == PACKAGETYPE_UPDATE )
{
if ( !this->FindPackageNeeded("<package>", "<author>") )
this->AddNeededLibrary("<package>", "<author>", "1.00");
}
else
this->RemovePackageNeeded("<package>", "<author>");
m_bChanged = true;
}
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; m_bChanged = true; }
virtual bool LoadPackageData(CyString first, CyString rest);
virtual bool GeneratePackagerScript(bool wildcard, CyStringList *list, bool datafile = false);
CSpkFile();
virtual ~CSpkFile();
bool IsMatchingMod ( CyString mod );
/// reading of files
virtual bool ReadFileToMemory ( C_File *file );
virtual bool ParseValueLine ( CyString line );
// writing of files
CyString CreateValuesLine ();
bool WriteHeader ( FILE *id, int, int );
SWares *FindWare ( CyString id );
void AddWare ( CyString );
void AddWareText ( CyString );
void AddWare ( SWares * );
void AddWareText ( SWares *, int, CyString, CyString );
void RemoveWare ( CyString );
void RemoveWareText ( CyString, int );
void ClearWareText ( SWares * );
void ClearWareText ( CyString );
void ClearWares ();
bool AnyWares() { return !m_lWares.empty(); }
int CheckValidCustomStart ();
bool UpdateSigned (bool updateFiles);
SSettingType *AddSetting ( CyString key, int type );
void ClearSettings ();
void ConvertSetting ( SSettingType *t, CyString set );
CyString GetSetting ( SSettingType *t );
bool AnySettings() { return !m_lSettings.empty(); }
// installer usage
CyString GetLastReadme () { return m_sLastReadme; }
CyString GetCustomMap () { return m_sCustomMap; }
void SetCustomMap ( CyString map ) { m_sCustomMap = map; }
void SetLastReadme ( CyString r ) { m_sLastReadme = r; }
virtual int GetType () { return TYPE_SPK; }
void MergePackage(CBaseFile *p);
// old conversion functions
bool convertOld(CyString &sOldFilename);
unsigned char *uncompressOldFile(const CyString &sOldFilename, int *pLen);
protected:
virtual void Delete ();
virtual void SetDefaults ();
virtual bool CheckHeader(CyString header);
// old conversion functions
void _convert_parse(const CyString &sCmd, const CyString &sRest, bool bVerbose);
CyString _convert_fileEndString(const CyString &sFile);
int _convert_fileType(const CyString &sFile);
CyString _convert_parseFilename(const CyString &sRest, float fVersion, CyString *pDir);
unsigned char *_convert_parseFile(const CyString &s_Cmd, const CyString &s_Rest, float fVersion, unsigned char *d, bool bVerbose );
// varibles
CyString m_sOtherAuthor;
CyString m_sOtherName;
CyString m_sScriptType;
bool m_bForceProfile;
int m_iPackageType;
int m_iScriptType;
CLinkList<SWares> m_lWares;
CLinkList<SSettingType> m_lSettings;
SWares *m_pLastWare;
// installer varibles
CyString m_sLastReadme;
CyString m_sCustomMap;
};