Subversion Repositories spk

Rev

Rev 126 | Rev 133 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#pragma once
6 cycrow 2
#include "BaseFile.h"
94 cycrow 3
#include "spkdefines.h"
1 cycrow 4
 
6 cycrow 5
class SPKEXPORT CSpkFile : public CBaseFile
1 cycrow 6
{
7
public:
6 cycrow 8
	enum {
9
		SCRIPTTYPE_CUSTOM,
10
		SCRIPTTYPE_OTHER,
11
		SCRIPTTYPE_NAVIGATION,
12
		SCRIPTTYPE_COMBAT,
13
		SCRIPTTYPE_MISSION,
14
		SCRIPTTYPE_ALPLUGIN,
15
		SCRIPTTYPE_HOTKEY,
16
		SCRIPTTYPE_SHIPUPGRADE,
17
		SCRIPTTYPE_SHIPCOMMAND,
18
		SCRIPTTYPE_STATIONCOMMAND,
19
		SCRIPTTYPE_FLEET,
20
		SCRIPTTYPE_TRADE,
21
		SCRIPTTYPE_PIRACY,
22
		SCRIPTTYPE_CHEAT,
23
		SCRIPTTYPE_EXTENSION,
24
		SCRIPTTYPE_REBALANCE,
25
		SCRIPTTYPE_FIX,
26
		SCRIPTTYPE_GENERALMOD,
27
		SCRIPTTYPE_TOTAL,
28
		SCRIPTTYPE_WINGCOMMAND,
29
		SCRIPTTYPE_MAX
30
	};
1 cycrow 31
 
6 cycrow 32
private:
33
	enum {
34
		SETTING_INTEGER,
35
		SETTING_STRING,
36
		SETTING_CHECK
37
	};
1 cycrow 38
 
6 cycrow 39
	typedef struct SSettingString : public SSettingType {
40
		SSettingString () { iType = SETTING_STRING; }
10 cycrow 41
		Utils::String sValue;
6 cycrow 42
	} SSettingString;
1 cycrow 43
 
6 cycrow 44
	typedef struct SSettingInteger : public SSettingType {
45
		SSettingInteger () { iType = SETTING_INTEGER; }
46
		int iValue;
47
	} SSettingInteger;
1 cycrow 48
 
6 cycrow 49
	typedef struct SSettingCheck : public SSettingType {
50
		SSettingCheck () { iType = SETTING_CHECK; }
51
		bool bValue ;
52
	} SSettingCheck;
1 cycrow 53
 
13 cycrow 54
 
1 cycrow 55
public:
10 cycrow 56
	static int ConvertScriptType(const Utils::String &sType);
57
	static Utils::String GetScriptTypeStringStatic(int type);
58
	static Utils::String GetWareText(SWares *w, int lang);
59
	static Utils::String GetWareDesc(SWares *w, int lang);
1 cycrow 60
 
61
	// get functions
13 cycrow 62
	Utils::String GetScriptTypeString(int lang) const;
63
	Utils::String GetCustomScriptType () const { return m_sScriptType; }
64
	Utils::String GetCustomScriptType (int lang) const;
65
	Utils::String GetOtherName () const	{ return m_sOtherName; }
66
	Utils::String GetOtherAuthor ()	const { return m_sOtherAuthor; }
1 cycrow 67
	CLinkList<SWares> *GetWaresList() { return &m_lWares; }
68
	CLinkList<SSettingType> *GetSettingsList() { return &m_lSettings; }
69
 
13 cycrow 70
	bool CheckValidReadmes () const;
1 cycrow 71
 
13 cycrow 72
	bool   IsCustomStart () const	{ return (m_iPackageType == PACKAGETYPE_CUSTOMSTART) ? true : false;  }
73
	bool   IsPackageUpdate () const { return (m_iPackageType == PACKAGETYPE_UPDATE) ? true : false; }
74
	bool   IsPatch () const			{ return (m_iPackageType == PACKAGETYPE_PATCH) ? true: false; }
75
	bool   IsLibrary ()	const		{ return (m_iPackageType == PACKAGETYPE_LIBRARY) ? true: false; }
76
	bool   IsAnotherMod() const		{ if ( (m_sOtherName.empty()) || (m_sOtherAuthor.empty()) ) return false; return true; }
77
	bool   IsForceProfile() const	{ return m_bForceProfile; }
78
	int		GetScriptType() const	{ return m_iScriptType; }
79
	int		GetPackageType() const	{ return m_iPackageType; }
1 cycrow 80
 
88 cycrow 81
	virtual bool readWares(int iLang, CLinkList<SWareEntry> &list, const Utils::String &empWares);
82
 
1 cycrow 83
	// Custom Start
13 cycrow 84
	Utils::String GetCustomStartName() const;
1 cycrow 85
 
86
	// set functions
50 cycrow 87
	void SetScriptType	 ( const Utils::String &str ) { m_sScriptType = str; _changed(); }
88
	void SetAnotherMod   ( const Utils::String &name, const Utils::String &author ) { m_sOtherName = name; m_sOtherAuthor = author; _changed(); }
89
	void SetForceProfile ( bool p ) { m_bForceProfile = p; _changed(); }
1 cycrow 90
 
91
	void SetPackageType(int i)
92
	{
93
		m_iPackageType = i;
94
		if ( i == PACKAGETYPE_UPDATE )
95
		{
96
			if ( !this->FindPackageNeeded("<package>", "<author>") )
97
				this->AddNeededLibrary("<package>", "<author>", "1.00");
98
		}
99
		else
100
			this->RemovePackageNeeded("<package>", "<author>");
50 cycrow 101
		_changed();
1 cycrow 102
	}
103
	void SetPatch() { this->SetPackageType(PACKAGETYPE_PATCH); }
104
	void SetLibrary() { this->SetPackageType(PACKAGETYPE_LIBRARY); }
105
	void SetCustomStart() { this->SetPackageType(PACKAGETYPE_CUSTOMSTART); }
106
	void SetPackageUpdate() { this->SetPackageType(PACKAGETYPE_UPDATE); }
107
	void SetNormalPackage() { this->SetPackageType(PACKAGETYPE_NORMAL); }
50 cycrow 108
	void SetScriptType(int i) { SetNormalPackage(); m_iScriptType = i; _changed(); }
1 cycrow 109
 
127 cycrow 110
	virtual bool LoadPackageData(const Utils::String &sFfirst, const Utils::String &sRest, const Utils::String &sMainGame, Utils::CStringList &otherGames, Utils::CStringList &gameAddons);
111
	virtual bool GeneratePackagerScript(bool wildcard, Utils::CStringList *list, int game, const Utils::CStringList &gameAddons, bool datafile = false) override;
1 cycrow 112
 
113
	CSpkFile();
114
	virtual ~CSpkFile();
115
 
13 cycrow 116
	bool IsMatchingMod(const Utils::String &mod) const;
1 cycrow 117
 
118
	/// reading of files
14 cycrow 119
	virtual bool ParseValueLine(const Utils::String &line);
1 cycrow 120
 
121
	// writing of files
14 cycrow 122
	virtual Utils::String CreateValuesLine () const;
52 cycrow 123
	bool WriteHeader(CFileIO &file, int iHeader, int iLength);
1 cycrow 124
 
10 cycrow 125
	SWares *FindWare(const Utils::String &id) const;
126
	void AddWare(const Utils::String &sWareLine);
127
	void AddWareText(const Utils::String &sText);
128
	void AddWare(SWares *pWare);
129
	void AddWareText(SWares *pWare, int iLang, const Utils::String &sName, const Utils::String &sDesc);
130
	void RemoveWare(const Utils::String &sWare);
131
	void RemoveWareText(const Utils::String &sName, int iLang);
132
	void ClearWareText(SWares *pWare);
133
	void ClearWareText(const Utils::String &sWare);
1 cycrow 134
	void ClearWares ();
10 cycrow 135
	bool AnyWares() const { return !m_lWares.empty(); }
1 cycrow 136
 
13 cycrow 137
	int CheckValidCustomStart () const;
1 cycrow 138
 
139
	bool UpdateSigned (bool updateFiles);
140
 
10 cycrow 141
	SSettingType *AddSetting(const Utils::String &key, int type);
1 cycrow 142
	void ClearSettings ();
10 cycrow 143
	void ConvertSetting ( SSettingType *t, const Utils::String &set ) const;
144
	Utils::String GetSetting ( SSettingType *t ) const;
145
	bool AnySettings() const { return !m_lSettings.empty(); }
1 cycrow 146
 
147
	// installer usage
10 cycrow 148
	Utils::String GetLastReadme () const { return m_sLastReadme; }
149
	Utils::String GetCustomMap () const { return m_sCustomMap; }
1 cycrow 150
 
10 cycrow 151
	void SetCustomMap ( const Utils::String &map ) { m_sCustomMap = map; }
152
	void SetLastReadme ( const Utils::String &r ) { m_sLastReadme = r; }
1 cycrow 153
 
154
	virtual int GetType () { return TYPE_SPK; }
155
 
156
	void MergePackage(CBaseFile *p);
157
 
7 cycrow 158
	// old conversion functions
8 cycrow 159
	bool convertOld(const Utils::String &sOldFilename);
9 cycrow 160
	static CSpkFile *convertFromOld(const Utils::String &sOldFilename);
7 cycrow 161
 
1 cycrow 162
protected:
163
	virtual void Delete ();
164
	virtual void SetDefaults ();
14 cycrow 165
	virtual bool CheckHeader(const Utils::String header) const;
1 cycrow 166
 
7 cycrow 167
	// old conversion functions
8 cycrow 168
	unsigned char *_convert_uncompressFile(const Utils::String &sOldFilename, int *pLen);
10 cycrow 169
	void _convert_parse(const Utils::String &sCmd, const Utils::String &sRest);
8 cycrow 170
	Utils::String _convert_fileEndString(const Utils::String &sFile);
127 cycrow 171
	FileType _convert_fileType(const Utils::String &sFile);
8 cycrow 172
	Utils::String _convert_parseFilename(const Utils::String &sRest, float fVersion, Utils::String *pDir);
10 cycrow 173
	unsigned char *_convert_parseFile(const Utils::String &s_Cmd, const Utils::String &s_Rest, float fVersion, unsigned char *d);
7 cycrow 174
 
1 cycrow 175
	// varibles
10 cycrow 176
	Utils::String m_sOtherAuthor;
177
	Utils::String m_sOtherName;
178
	Utils::String m_sScriptType;
1 cycrow 179
 
180
	bool m_bForceProfile;
181
	int m_iPackageType;
182
	int m_iScriptType;
183
 
184
	CLinkList<SWares> m_lWares;
185
	CLinkList<SSettingType> m_lSettings;
186
 
187
	SWares *m_pLastWare;
188
 
189
	// installer varibles
10 cycrow 190
	Utils::String m_sLastReadme;
191
	Utils::String m_sCustomMap;
1 cycrow 192
};