mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-21 12:49:10 +00:00
Remove obsolete tools (Migration, plDatMerger, etc)
This commit is contained in:
@ -1,5 +1,3 @@
|
||||
#add_subdirectory(Migration)
|
||||
#add_subdirectory(plDatMerger)
|
||||
add_subdirectory(plLocalizationEditor)
|
||||
add_subdirectory(plResBrowser)
|
||||
|
||||
@ -15,7 +13,6 @@ if(3dsm_BUILD_PLUGIN)
|
||||
add_subdirectory(MaxConvert)
|
||||
add_subdirectory(MaxExport)
|
||||
add_subdirectory(MaxMain)
|
||||
#add_subdirectory(MaxMtlUpdate)
|
||||
add_subdirectory(MaxPlasmaLights)
|
||||
add_subdirectory(MaxPlasmaMtls)
|
||||
#add_subdirectory(MaxSceneViewer) # NOTE: Uses Plasma classes that do not exist
|
||||
|
@ -1,166 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// This little app checks to see if the specified envrionment
|
||||
// variable exists, creating it if necessary. If the variable
|
||||
// doesn't exist, the app prompts the user with the Browse for
|
||||
// Folder dialog box then sets the envrionment variable, using the
|
||||
// selected folder as the value.
|
||||
//
|
||||
// Example:
|
||||
// C:\>CheckFolderVar maxr4dir "Select the folder where max is installed then click Ok."
|
||||
//
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include <shlobj.h>
|
||||
#include <string>
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::string gCurrentValue;
|
||||
|
||||
// get window handle of cancel button so we can disable it.
|
||||
BOOL CALLBACK EnumChildWindowsCallbackProc(HWND hwnd,LPARAM lParam)
|
||||
{
|
||||
char text[256];
|
||||
GetWindowText(hwnd,text,256);
|
||||
if (stricmp(text,"Cancel")==0)
|
||||
{
|
||||
*((HWND*)lParam) = hwnd;
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int CALLBACK BrosweForFolderCallbackProc(HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData)
|
||||
{
|
||||
switch(uMsg)
|
||||
{
|
||||
case BFFM_INITIALIZED:
|
||||
// disable cancel button
|
||||
HWND hCancelBtn = NULL;
|
||||
EnumChildWindows(hwnd,EnumChildWindowsCallbackProc,(LPARAM)&hCancelBtn);
|
||||
EnableWindow(hCancelBtn,FALSE);
|
||||
SendMessage(hwnd,BFFM_SETSELECTION,true,(LPARAM)gCurrentValue.data());
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
if (argc<2)
|
||||
{
|
||||
fprintf(stderr,"Usage: CheckFolderVar varname [-replace] [\"prompt msg\"]\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// read cmdline
|
||||
char ** args = argv;
|
||||
char * varname = NULL;
|
||||
bool replace = false;
|
||||
char prompt[1024] = "";
|
||||
for (int i=1; i<argc; i++)
|
||||
{
|
||||
if (!varname)
|
||||
varname = args[i];
|
||||
else if (stricmp(args[i],"-replace")==0)
|
||||
replace = true;
|
||||
else
|
||||
sprintf(prompt,"%s",args[i]);
|
||||
}
|
||||
if (prompt[0] == '\0')
|
||||
sprintf(prompt,"Set the '%s' environment variable by browsing to the desired folder and then click Ok:",varname);
|
||||
|
||||
|
||||
// open registry key
|
||||
HKEY hEnvKey;
|
||||
RegOpenKeyEx(HKEY_CURRENT_USER,"Environment",0,KEY_WRITE|KEY_READ,&hEnvKey);
|
||||
|
||||
// check if var already exists
|
||||
char value[MAX_PATH];
|
||||
DWORD bufsz = MAX_PATH;
|
||||
if(RegQueryValueEx(hEnvKey,varname,NULL,NULL,(LPBYTE)value,&bufsz) == ERROR_SUCCESS)
|
||||
{
|
||||
// exit if already exists and not replace
|
||||
if (!replace)
|
||||
{
|
||||
RegCloseKey(hEnvKey);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
gCurrentValue = value;
|
||||
}
|
||||
|
||||
TryAgain:
|
||||
// open browse for folder dialog
|
||||
BROWSEINFO bInfo;
|
||||
LPITEMIDLIST itemList;
|
||||
LPMALLOC shMalloc;
|
||||
memset( &bInfo, 0, sizeof( bInfo ) );
|
||||
bInfo.hwndOwner = NULL;
|
||||
bInfo.pidlRoot = NULL;
|
||||
bInfo.lpszTitle = prompt;
|
||||
bInfo.ulFlags = BIF_NEWDIALOGSTYLE;
|
||||
bInfo.pszDisplayName = NULL;
|
||||
bInfo.lpfn = BrosweForFolderCallbackProc;
|
||||
itemList = SHBrowseForFolder(&bInfo);
|
||||
if (!itemList)
|
||||
goto TryAgain;
|
||||
SHGetPathFromIDList(itemList,value);
|
||||
SHGetMalloc(&shMalloc);
|
||||
shMalloc->Free(itemList);
|
||||
shMalloc->Release();
|
||||
|
||||
// set environment var
|
||||
RegSetValueEx(hEnvKey,varname,0,REG_SZ,(const BYTE*)value,strlen(value));
|
||||
|
||||
// close registry key
|
||||
RegCloseKey(hEnvKey);
|
||||
|
||||
// bubbye
|
||||
return EXIT_SUCCESS;
|
||||
}
|
@ -1,112 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/******************************************************************************
|
||||
ValdezInterface.h
|
||||
|
||||
Eric Ellis
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _JV_VALDEZINTERFACE_H_
|
||||
#define _JV_VALDEZINTERFACE_H_
|
||||
|
||||
#define MAXASS_CLASS_ID Class_ID(0x5c61b5a6, 0x3b298521)
|
||||
#define kMaxAssGetValdezInterface 33
|
||||
|
||||
#include <commdlg.h>
|
||||
#include <bmmlib.h>
|
||||
#include <guplib.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <comdef.h>
|
||||
|
||||
using std::vector;
|
||||
using std::string;
|
||||
|
||||
#pragma warning(disable:4786)
|
||||
|
||||
|
||||
#define kAssetTypeIdTexure 1
|
||||
#define kAssetTypeIdSound 2
|
||||
#define kAssetTypeIdMaxFile 4
|
||||
#define kAssetTypeIdAge 7
|
||||
|
||||
#define kStatusIdDraft 1
|
||||
#define kStatusIdStable 2
|
||||
|
||||
|
||||
|
||||
class jvValdezInterface
|
||||
{
|
||||
public:
|
||||
// MAX File Replacement Operations
|
||||
virtual int ChooseAssetAndOpen() = 0;
|
||||
virtual int Save() = 0;
|
||||
virtual int SaveAs() = 0;
|
||||
virtual int Add() = 0;
|
||||
virtual int OpenBitmapDlg(VARIANT* assetId, TCHAR* localFilenameRet, int localFilenameBufSize) = 0;
|
||||
virtual int OpenSoundDlg(VARIANT* assetId, TCHAR* localFilenameRet, int localFilenameBufSize) = 0;
|
||||
virtual int NewAgeDlg(VARIANT* assetId, TCHAR* localFilenameRet, int localFilenameBufSize) = 0;
|
||||
virtual int NewTextureDlg(VARIANT* assetId, TCHAR* localFilenameRet, int localFilenameBufSize) = 0;
|
||||
|
||||
// Asset Database Operations
|
||||
virtual int GetLatestVersionFile(VARIANT& assetId, TCHAR* localFilenameRet, int localFilenameBufSize) = 0;
|
||||
virtual int GetAssetsByType(int assetTypeId, vector<_variant_t>& assetIds, vector<string>& assetNames) = 0;
|
||||
virtual int CheckOutAsset(VARIANT& assetId, TCHAR* localFilenameRet, int localFilenameBufSize) = 0;
|
||||
virtual int CheckInAsset(VARIANT& assetId, TCHAR* localFilename, int statusId, TCHAR* comments) = 0;
|
||||
|
||||
virtual int FindAndCompareAssetByFilename(const TCHAR* localFilename, VARIANT* assetId, bool* filesMatch) = 0;
|
||||
virtual int FindAssetsByFilename(const TCHAR* filename, vector<_variant_t>& assets) = 0;
|
||||
|
||||
virtual int IsAssetCheckedOutLocally(VARIANT& assetId, bool& checkedOut) = 0;
|
||||
};
|
||||
|
||||
|
||||
inline jvValdezInterface* GetValdezInterface()
|
||||
{
|
||||
GUP* maxAssGup = OpenGupPlugIn(MAXASS_CLASS_ID);
|
||||
|
||||
if(!maxAssGup) return NULL;
|
||||
|
||||
return (jvValdezInterface*)maxAssGup->Control(kMaxAssGetValdezInterface);
|
||||
}
|
||||
|
||||
#endif _JV_VALDEZINTERFACE_H_
|
@ -1,107 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/**********************************************************************
|
||||
*<
|
||||
FILE: DllEntry.cpp
|
||||
|
||||
DESCRIPTION: Contains the Dll Entry stuff
|
||||
|
||||
CREATED BY:
|
||||
|
||||
HISTORY:
|
||||
|
||||
*> Copyright (c) 2000, All Rights Reserved.
|
||||
**********************************************************************/
|
||||
#include "plMaterialUpdate.h"
|
||||
|
||||
extern ClassDesc2* GetMaterialUpdateDesc();
|
||||
|
||||
HINSTANCE hInstance;
|
||||
int controlsInit = FALSE;
|
||||
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved)
|
||||
{
|
||||
hInstance = hinstDLL; // Hang on to this DLL's instance handle.
|
||||
|
||||
if (!controlsInit) {
|
||||
controlsInit = TRUE;
|
||||
InitCustomControls(hInstance); // Initialize MAX's custom controls
|
||||
InitCommonControls(); // Initialize Win95 controls
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
__declspec( dllexport ) const TCHAR* LibDescription()
|
||||
{
|
||||
return GetString(IDS_LIBDESCRIPTION);
|
||||
}
|
||||
|
||||
//TODO: Must change this number when adding a new class
|
||||
__declspec( dllexport ) int LibNumberClasses()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
__declspec( dllexport ) ClassDesc* LibClassDesc(int i)
|
||||
{
|
||||
switch(i) {
|
||||
case 0: return GetMaterialUpdateDesc();
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
__declspec( dllexport ) ULONG LibVersion()
|
||||
{
|
||||
return VERSION_3DSMAX;
|
||||
}
|
||||
|
||||
TCHAR *GetString(int id)
|
||||
{
|
||||
static TCHAR buf[256];
|
||||
|
||||
if (hInstance)
|
||||
return LoadString(hInstance, id, buf, sizeof(buf)) ? buf : NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1,437 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef __HSMAXLAYER_H
|
||||
#define __HSMAXLAYER_H
|
||||
|
||||
#include <bmmlib.h>
|
||||
#include "hsMaxLayerBase.h"
|
||||
//#include "hsMaxMtlRes.h"
|
||||
|
||||
//=========================================================================================
|
||||
// Flags and constants...
|
||||
//=========================================================================================
|
||||
|
||||
// ParamBlock entries
|
||||
#define PB_LAYER_CLIPU 0
|
||||
#define PB_LAYER_CLIPV 1
|
||||
#define PB_LAYER_CLIPW 2
|
||||
#define PB_LAYER_CLIPH 3
|
||||
#define PB_LAYER_JITTER 4
|
||||
#define PB_LAYER_AMBIENT 5
|
||||
#define PB_LAYER_COLOR 6
|
||||
#define PB_LAYER_SHININESS 7
|
||||
#define PB_LAYER_SHIN_STR 8
|
||||
#define PB_LAYER_SELFI 9
|
||||
#define PB_LAYER_OPAC 10
|
||||
#define PB_LAYER_OPFALL 11
|
||||
#define PB_LAYER_FILTER 12
|
||||
#define PB_LAYER_WIRESZ 13
|
||||
#define PB_LAYER_IOR 14
|
||||
#define PB_LAYER_BOUNCE 15
|
||||
#define PB_LAYER_STATFRIC 16
|
||||
#define PB_LAYER_SLIDFRIC 17
|
||||
#define PB_LAYER_DIMLEV 18
|
||||
#define PB_LAYER_DIMMULT 19
|
||||
#define PB_LAYER_MAPPERCENT 20
|
||||
#define PB_LAYER_MIPMAPBLUR 21
|
||||
#define PB_LAYER_LODBIAS 22
|
||||
#define PB_LAYER_DETAILBIAS 23
|
||||
#define PB_LAYER_DETAILMAX 24
|
||||
#define PB_LAYER_ENVIRONMAPSIZE 25
|
||||
#define LAYER_NPARAMS 26
|
||||
|
||||
#define HSMAX_LAYER_LOCK_AD 0x1
|
||||
|
||||
class hsMaxLayer;
|
||||
class hsMaxLayerDlg;
|
||||
|
||||
static LRESULT CALLBACK HiliteWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
||||
|
||||
// which edit control enum
|
||||
enum EditControl {Hc, Sc, Vc, Rc, Gc, Bc};
|
||||
|
||||
void GetBMName(BitmapInfo& bi, TSTR &fname);
|
||||
|
||||
//=========================================================================================
|
||||
// BMSampler
|
||||
//=========================================================================================
|
||||
|
||||
class BMSampler : public MapSampler {
|
||||
Bitmap *bm;
|
||||
hsMaxLayer *tex;
|
||||
int alphaSource;
|
||||
float u0,v0,u1,v1,ufac,vfac,ujit,vjit;
|
||||
int bmw,bmh,clipx, clipy, cliph;
|
||||
float fclipw,fcliph, fbmh, fbmw;
|
||||
public:
|
||||
BMSampler() { bm = NULL; }
|
||||
void Init(hsMaxLayer *bmt);
|
||||
int PlaceUV(ShadeContext& sc, float &u, float &v, int iu, int iv);
|
||||
void PlaceUVFilter(ShadeContext& sc, float &u, float &v, int iu, int iv);
|
||||
AColor Sample(ShadeContext& sc, float u,float v);
|
||||
AColor SampleFilter(ShadeContext& sc, float u,float v, float du, float dv);
|
||||
// float SampleMono(ShadeContext& sc, float u,float v);
|
||||
// float SampleMonoFilter(ShadeContext& sc, float u,float v, float du, float dv);
|
||||
};
|
||||
|
||||
//=========================================================================================
|
||||
// BM\AlphaSampler
|
||||
//=========================================================================================
|
||||
class BMAlphaSampler : public MapSampler {
|
||||
Bitmap *bm;
|
||||
hsMaxLayer *tex;
|
||||
float u0,v0,u1,v1,ufac,vfac,ujit,vjit;
|
||||
int bmw,bmh,clipx, clipy, cliph;
|
||||
float fclipw,fcliph, fbmh, fbmw;
|
||||
public:
|
||||
BMAlphaSampler() { bm = NULL; }
|
||||
void Init(hsMaxLayer *bmt);
|
||||
int PlaceUV(ShadeContext &sc, float &u, float &v, int iu, int iv);
|
||||
void PlaceUVFilter(ShadeContext &sc, float &u, float &v, int iu, int iv);
|
||||
AColor Sample(ShadeContext& sc, float u,float v) { return AColor(0,0,0,0);}
|
||||
AColor SampleFilter(ShadeContext& sc, float u,float v, float du, float dv) { return AColor(0,0,0,0);}
|
||||
float SampleMono(ShadeContext& sc, float u,float v);
|
||||
float SampleMonoFilter(ShadeContext& sc, float u,float v, float du, float dv);
|
||||
};
|
||||
|
||||
//=========================================================================================
|
||||
// hsMaxLayerNotify... this calls hsMaxLayer::NotifyChanged when a bitmap changes
|
||||
//=========================================================================================
|
||||
|
||||
class hsMaxLayerNotify : public BitmapNotify {
|
||||
public:
|
||||
void SetTex(hsMaxLayer *tx) { tex = tx; }
|
||||
int Changed(ULONG flags);
|
||||
|
||||
private:
|
||||
hsMaxLayer *tex;
|
||||
};
|
||||
|
||||
//=========================================================================================
|
||||
// hsMaxLayer: a material layer with (possibly) texture info, blending info and shading info
|
||||
//=========================================================================================
|
||||
|
||||
class hsMaxLayer : public hsMaxLayerBase {
|
||||
friend class hsMaxLayerPostLoad;
|
||||
friend class hsMaxLayerDlg;
|
||||
friend class BMSampler;
|
||||
friend class BMAlphaSampler;
|
||||
friend class BMCropper;
|
||||
public:
|
||||
hsMaxLayer();
|
||||
~hsMaxLayer();
|
||||
|
||||
ParamDlg* CreateParamDlg(HWND hwMtlEdit, IMtlParams *imp);
|
||||
void Update(TimeValue t, Interval& valid);
|
||||
void Reset();
|
||||
Interval Validity(TimeValue t) { Interval v; Update(t,v); return ivalid; }
|
||||
TSTR GetFullName();
|
||||
|
||||
void SetOutputLevel(TimeValue t, float v) { }
|
||||
void SetFilterType(int ft);
|
||||
void SetAlphaSource(int as);
|
||||
void SetEndCondition(int endcond) { endCond = endcond; }
|
||||
void SetAlphaAsMono(BOOL onoff) { alphaAsMono = onoff; }
|
||||
void SetAlphaAsRGB(BOOL onoff) { alphaAsRGB = onoff; }
|
||||
void SetPremultAlpha(BOOL onoff) { premultAlpha = onoff; }
|
||||
void SetMapName(TCHAR *name) {
|
||||
bi.SetName(name);
|
||||
FreeBitmap();
|
||||
if (paramDlg)
|
||||
ReloadBitmap();
|
||||
}
|
||||
void SetStartTime(TimeValue t) { startTime = t; }
|
||||
void SetPlaybackRate(float r) { pbRate = r; }
|
||||
|
||||
void SetClipU(TimeValue t, float f) { clipu = f; pblock->SetValue( PB_LAYER_CLIPU, t, f); }
|
||||
void SetClipV(TimeValue t, float f) { clipv = f; pblock->SetValue( PB_LAYER_CLIPV, t, f); }
|
||||
void SetClipW(TimeValue t, float f) { clipw = f; pblock->SetValue( PB_LAYER_CLIPW, t, f); }
|
||||
void SetClipH(TimeValue t, float f) { cliph = f; pblock->SetValue( PB_LAYER_CLIPH, t, f); }
|
||||
void SetJitter(TimeValue t, float f) { cliph = f; pblock->SetValue( PB_LAYER_JITTER, t, f); }
|
||||
|
||||
int GetFilterType() { return filterType; }
|
||||
int GetAlphaSource() { return alphaSource; }
|
||||
int GetEndCondition() { return endCond; }
|
||||
BOOL GetAlphaAsMono(BOOL onoff) { return alphaAsMono; }
|
||||
BOOL GetAlphaAsRGB(BOOL onoff) { return alphaAsRGB; }
|
||||
BOOL GetPremultAlpha(BOOL onoff) { return premultAlpha; }
|
||||
TCHAR *GetMapName() { return (TCHAR *)bi.Name(); }
|
||||
TimeValue GetStartTime() { return startTime; }
|
||||
float GetPlaybackRate() { return pbRate; }
|
||||
StdUVGen* GetUVGen() { return (StdUVGen*)uvGen; }
|
||||
TextureOutput* GetTexout() { return 0; }
|
||||
Bitmap *GetBitmap(TimeValue t) { LoadBitmap(t); return thebm; }
|
||||
float GetClipU(TimeValue t) { return pblock->GetFloat( PB_LAYER_CLIPU, t); }
|
||||
float GetClipV(TimeValue t) { return pblock->GetFloat( PB_LAYER_CLIPV, t); }
|
||||
float GetClipW(TimeValue t) { return pblock->GetFloat( PB_LAYER_CLIPW, t); }
|
||||
float GetClipH(TimeValue t) { return pblock->GetFloat( PB_LAYER_CLIPH, t); }
|
||||
float GetJitter(TimeValue t) { return pblock->GetFloat( PB_LAYER_JITTER, t); }
|
||||
void StuffCropValues(); // stuff new values into the cropping VFB
|
||||
|
||||
void UpdtSampler() {
|
||||
mysamp.Init(this);
|
||||
alphasamp.Init(this);
|
||||
}
|
||||
|
||||
void NotifyChanged();
|
||||
Bitmap* BuildBitmap(int size);
|
||||
void FreeBitmap();
|
||||
BMMRES LoadBitmap(TimeValue t);
|
||||
int CalcFrame(TimeValue t);
|
||||
void ScaleBitmapBumpAmt(float f);
|
||||
void ReloadBitmap();
|
||||
|
||||
// Evaluate the color of map for the context.
|
||||
RGBA EvalColor(ShadeContext& sc);
|
||||
float EvalMono(ShadeContext& sc);
|
||||
Point3 EvalNormalPerturb(ShadeContext& sc);
|
||||
|
||||
void DiscardTexHandle();
|
||||
|
||||
BOOL SupportTexDisplay() { return TRUE; }
|
||||
void ActivateTexDisplay(BOOL onoff);
|
||||
DWORD GetActiveTexHandle(TimeValue t, TexHandleMaker& thmaker);
|
||||
void GetUVTransform(Matrix3 &uvtrans) { uvGen->GetUVTransform(uvtrans); }
|
||||
int GetTextureTiling() { return uvGen->GetTextureTiling(); }
|
||||
int GetUVWSource() { return uvGen->GetUVWSource(); }
|
||||
UVGen *GetTheUVGen() { return uvGen; }
|
||||
#ifdef MAXR3
|
||||
int GetMapChannel () { return uvGen->GetMapChannel(); }
|
||||
#endif // MAXR3
|
||||
|
||||
int RenderBegin(TimeValue t, ULONG flags) {
|
||||
inRender = TRUE;
|
||||
return 1;
|
||||
}
|
||||
int RenderEnd(TimeValue t) {
|
||||
inRender = FALSE;
|
||||
return 1;
|
||||
}
|
||||
int LoadMapFiles(TimeValue t) { LoadBitmap(t); return 1; }
|
||||
void RenderBitmap(TimeValue t, Bitmap *bm, float scale3D, BOOL filter);
|
||||
|
||||
Class_ID ClassID() { return hsMaxLayerClassID; }
|
||||
SClass_ID SuperClassID() { return TEXMAP_CLASS_ID; }
|
||||
#ifdef HS_DEBUGGING
|
||||
void GetClassName(TSTR& s) { s= GetString(IDS_DS_LAYER_DEBUG); }
|
||||
#else
|
||||
void GetClassName(TSTR& s) { s= "";}//GetString(IDS_DS_LAYER); }
|
||||
#endif
|
||||
void DeleteThis() { delete this; }
|
||||
|
||||
// Requirements
|
||||
ULONG LocalRequirements(int subMtlNum);
|
||||
|
||||
int NumSubs() { return 2; }
|
||||
Animatable* SubAnim(int i);
|
||||
TSTR SubAnimName(int i);
|
||||
int SubNumToRefNum(int subNum) { return subNum; }
|
||||
void InitSlotType(int sType) { if (uvGen) uvGen->InitSlotType(sType); }
|
||||
|
||||
// From ref
|
||||
int NumRefs() { return 2; }
|
||||
RefTargetHandle GetReference(int i);
|
||||
void SetReference(int i, RefTargetHandle rtarg);
|
||||
|
||||
RefTargetHandle Clone(RemapDir &remap = NoRemap());
|
||||
RefResult NotifyRefChanged( Interval changeInt, RefTargetHandle hTarget,
|
||||
PartID& partID, RefMessage message );
|
||||
|
||||
// From Animatable
|
||||
void EnumAuxFiles(NameEnumCallback& nameEnum, DWORD flags) {
|
||||
bi.EnumAuxFiles(nameEnum,flags);
|
||||
}
|
||||
int SetProperty(ULONG id, void *data);
|
||||
void FreeAllBitmaps() {
|
||||
FreeBitmap();
|
||||
}
|
||||
|
||||
int GetFlag(ULONG f) { return (flags&f)?1:0; }
|
||||
void SetFlag(ULONG f, ULONG val);
|
||||
|
||||
// from hsMaxLayerBase
|
||||
BOOL KeyAtTime(int id,TimeValue t) { return pblock->KeyFrameAtTime(id,t); }
|
||||
Color GetAmbient(int mtlNum=0, BOOL backFace=FALSE);
|
||||
Color GetColor(int mtlNum=0, BOOL backFace=FALSE);
|
||||
|
||||
float GetShininess(int mtlNum=0, BOOL backFace=FALSE) { return 0.f; }
|
||||
float GetShinStr(int mtlNum=0, BOOL backFace=FALSE) { return 0.f; }
|
||||
float GetMapPercent(int mtlNum=0, BOOL backFace=FALSE) { return 0.f; }
|
||||
float GetOpacity(int mtlNum=0, BOOL backFace=FALSE) { return 0.f; }
|
||||
float GetMipMapBlur(int mtlNum=0, BOOL backFace=FALSE) { return pblock->GetFloat(PB_LAYER_MIPMAPBLUR, 0); }
|
||||
float GetLODBias(int mtlNum=0, BOOL backFace=FALSE) { return pblock->GetFloat(PB_LAYER_LODBIAS, 0); }
|
||||
int GetEnvironMapSize(int mtlNum=0, BOOL backFace=FALSE) { return 0; }
|
||||
|
||||
Color GetAmbient(TimeValue t) const;
|
||||
Color GetColor(TimeValue t) const;
|
||||
|
||||
float GetShininess(TimeValue t) const;
|
||||
float GetShinStr(TimeValue t) const;
|
||||
float GetMapPercent(TimeValue t) const;
|
||||
float GetOpacity(TimeValue t) const;
|
||||
float GetMipMapBlur(TimeValue t) const;
|
||||
float GetLODBias(TimeValue t) const;
|
||||
float GetDetailDropoffStart(TimeValue t) const;
|
||||
float GetDetailDropoffStop(TimeValue t) const;
|
||||
float GetDetailMax(TimeValue t) const;
|
||||
float GetDetailMin(TimeValue t) const;
|
||||
int GetEnvironMapSize(TimeValue t) const;
|
||||
|
||||
int GetNumExplicitMipmaps() const { return mipmapInfo.Count(); }
|
||||
TCHAR *GetExplicitMipmapName(int i) const { return mipmapOn[i] ? (TCHAR *)mipmapInfo[i].Name() : 0; }
|
||||
BOOL ExplicitMipmapEnabled(int i) const { return mipmapOn[i]; }
|
||||
int GetExplicitMipmapLevel(int i) const { return mipmapLevel[i]; }
|
||||
|
||||
BOOL GetDirty() const { return dirty; }
|
||||
ULONG GetBlendFlags() const { return blendFlags; }
|
||||
ULONG GetZFlags() const { return zFlags; }
|
||||
ULONG GetShadeFlags() const { return shadeFlags; }
|
||||
ULONG GetMiscFlags() const { return miscFlags; }
|
||||
ProcType GetProcType() const { return procType; }
|
||||
hsMatUsage GetUsage() const { return usageType; }
|
||||
|
||||
// Setting the things in hsMaxLayerBase
|
||||
void SetShininess(float v, TimeValue t);
|
||||
void SetShinStr(float v, TimeValue t);
|
||||
void SetMapPercent(float v, TimeValue t);
|
||||
void SetOpacity(float v, TimeValue t);
|
||||
void SetAmbient(Color c, TimeValue t);
|
||||
void SetColor(Color c, TimeValue t);
|
||||
void SetMipMapBlur(float f, TimeValue t);
|
||||
void SetLODBias(float f, TimeValue t);
|
||||
void SetDetailDropoffStart(float f, TimeValue t);
|
||||
void SetDetailDropoffStop(float f, TimeValue t);
|
||||
void SetDetailMax(float f, TimeValue t);
|
||||
void SetDetailMin(float f, TimeValue t);
|
||||
void SetEnvironMapSize(int i, TimeValue t);
|
||||
|
||||
void SetNumExplicitMipmaps(int n);
|
||||
void SetExplicitMipmapName(int i, const char *n) { mipmapInfo[i].SetName(n); }
|
||||
void EnableExplicitMipmap(int i, BOOL state) { mipmapOn[i] = state; }
|
||||
void SetExplicitMipmapLevel(int i, int l) { mipmapLevel[i] = l; }
|
||||
|
||||
void SetDirty(BOOL state) { dirty = state; }
|
||||
void SetBlendFlag(int i, BOOL state);
|
||||
void SetZFlag(int flag, BOOL state);
|
||||
void SetShadeFlag(int flag, BOOL state);
|
||||
void SetMiscFlag(int flag, BOOL state);
|
||||
void SetProcType(ProcType type);
|
||||
void SetUsage(hsMatUsage use);
|
||||
void GuessUsage();
|
||||
|
||||
// IO
|
||||
IOResult Save(ISave *isave);
|
||||
IOResult Load(ILoad *iload);
|
||||
|
||||
// Colin Hack
|
||||
BOOL GetApplyCrop() { return applyCrop; }
|
||||
BOOL GetPlaceImage() { return placeImage; }
|
||||
|
||||
private:
|
||||
UVGen *uvGen; // ref #0
|
||||
IParamBlock *pblock; // ref #1
|
||||
BitmapInfo bi;
|
||||
TSTR bmName; // for loading old files only
|
||||
Bitmap *thebm;
|
||||
hsMaxLayerNotify bmNotify;
|
||||
TexHandle *texHandle;
|
||||
float pbRate;
|
||||
TimeValue startTime;
|
||||
Interval ivalid;
|
||||
|
||||
// Samplers
|
||||
BMSampler mysamp;
|
||||
BMAlphaSampler alphasamp;
|
||||
|
||||
BOOL applyCrop;
|
||||
BOOL loadingOld;
|
||||
BOOL placeImage;
|
||||
BOOL randPlace;
|
||||
int filterType;
|
||||
int alphaSource;
|
||||
int endCond;
|
||||
int alphaAsMono;
|
||||
int alphaAsRGB;
|
||||
float clipu, clipv, clipw, cliph, jitter;
|
||||
BOOL premultAlpha;
|
||||
BOOL isNew;
|
||||
BOOL loadFailed;
|
||||
BOOL inRender;
|
||||
hsMaxLayerDlg *paramDlg;
|
||||
int texTime;
|
||||
Interval texValid;
|
||||
Interval clipValid;
|
||||
float rumax,rumin,rvmax,rvmin;
|
||||
|
||||
// ADDED
|
||||
ULONG flags;
|
||||
|
||||
Color ambient;
|
||||
Color color;
|
||||
|
||||
float opacity;
|
||||
float shine_str;
|
||||
float shininess;
|
||||
float mapPercent;
|
||||
float mipMapBlur;
|
||||
float lodBias;
|
||||
float detailDropoffStart;
|
||||
float detailDropoffStop;
|
||||
float detailMax;
|
||||
float detailMin;
|
||||
int environMapSize;
|
||||
|
||||
BOOL dirty;
|
||||
|
||||
ULONG blendFlags;
|
||||
ULONG zFlags;
|
||||
ULONG shadeFlags;
|
||||
ULONG miscFlags;
|
||||
ProcType procType;
|
||||
hsMatUsage usageType;
|
||||
|
||||
Tab<BitmapInfo> mipmapInfo; // references
|
||||
Tab<BOOL> mipmapOn;
|
||||
Tab<int> mipmapLevel;
|
||||
};
|
||||
|
||||
#endif
|
@ -1,206 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef __HSMAXLAYERBASE_H
|
||||
#define __HSMAXLAYERBASE_H
|
||||
|
||||
#include "stdmat.h"
|
||||
|
||||
#define HSMAX_LAYER_CLASS_ID 0x41990fe7
|
||||
|
||||
const Class_ID hsMaxLayerClassID(HSMAX_LAYER_CLASS_ID, 0x72404998);
|
||||
const Class_ID hsMaxMtlClassID(0x2f335902, 0x111d2ea7);
|
||||
const Class_ID hsEnvironMapMtlClassID(0x98777b3, 0x5eb270dd);
|
||||
|
||||
class hsMaxLayerBase : public BitmapTex {
|
||||
public:
|
||||
enum hsMatBlendFlags {
|
||||
kBlendTest = 0x1, // dev
|
||||
// Rest of blends are mutually exclusive
|
||||
kBlendAlpha = 0x2, // dev
|
||||
kBlendMult = 0x4, // dev
|
||||
kBlendAdd = 0x8, // dev
|
||||
kBlendMultColorPlusMultAlpha = 0x10, // dev
|
||||
kBlendAntiAlias = 0x20,
|
||||
kBlendDetail = 0x40,
|
||||
kBlendDetailAdd = 0x80,
|
||||
kBlendMask = kBlendAlpha
|
||||
| kBlendMult
|
||||
| kBlendAdd
|
||||
| kBlendMultColorPlusMultAlpha
|
||||
| kBlendAntiAlias
|
||||
| kBlendDetail
|
||||
| kBlendDetailAdd,
|
||||
kBlendInvertAlpha = 0x1000, // dev
|
||||
kBlendInvertColor = 0x2000, // dev
|
||||
kBlendAlphaMult = 0x4000,
|
||||
kBlendAlphaAdd = 0x8000,
|
||||
kBlendNoColor = 0x10000,
|
||||
kBlendNoVtxAlpha = 0x20000
|
||||
};
|
||||
|
||||
enum hsMatZFlags {
|
||||
kZIncLayer = 0x1, // dev
|
||||
kZOnlyZ = 0x2, // dev
|
||||
kZClearZ = 0x4, // dev
|
||||
kZNoZRead = 0x8, // dev
|
||||
kZNoZWrite = 0x10,
|
||||
kZMask = kZNoZWrite | kZClearZ | kZNoZRead,
|
||||
kZLODBias = 0x20
|
||||
};
|
||||
|
||||
enum hsMatShadeFlags {
|
||||
kShadeSoftShadow = 0x1, // view, dev
|
||||
kShadeNoProjectors = 0x2, // projector
|
||||
kShadeVertexShade = 0x20, // dev
|
||||
kShadeNoShade = 0x40, // view,dev
|
||||
kShadeBlack = kShadeNoShade,
|
||||
kShadeSpecular = 0x80, // view, dev
|
||||
kShadeNoFog = 0x100, // dev
|
||||
kShadeWhite = 0x200,
|
||||
kShadeSpecularAlpha = 0x400,
|
||||
kShadeSpecularColor = 0x800,
|
||||
kShadeSpecularHighlight = 0x1000,
|
||||
kShadeVertColShade = 0x2000,
|
||||
kShadeInherit = 0x4000
|
||||
};
|
||||
|
||||
enum hsMatMiscFlags {
|
||||
kMiscWireFrame = 0x1, // dev (running out of bits)
|
||||
kMiscDrawMeshOutlines = 0x2, // dev, currently unimplemented
|
||||
kMiscTwoSided = 0x4, // view,dev
|
||||
kMiscDrawAsSplats = 0x8, // dev? bwt
|
||||
kMiscMipMap = 0x10,
|
||||
kMiscUseBitmap = 0x20,
|
||||
kMiscIntensityOnly = 0x40,
|
||||
kMiscAutoStart = 0x80,
|
||||
kMiscDetailBias = 0x100, // obsolete...
|
||||
kMiscDetailMax = 0x200, // obsolete...
|
||||
kMiscExplicitMipmap = 0x400,
|
||||
kMiscAdjustPlane = 0x800,
|
||||
kMiscAdjustCylinder = 0x1000,
|
||||
kMiscAdjustSphere = 0x2000,
|
||||
kMiscTroubledLoner = 0x4000,
|
||||
kMiscBindSkip = 0x8000,
|
||||
kMiscBindMask = 0x10000,
|
||||
kMiscForceNonCompressed = 0x20000,
|
||||
kMiscNoMaxSize = 0x40000,
|
||||
kMiscHalfSize = 0x80000,
|
||||
kMiscBindNext = 0x100000,
|
||||
kMiscBindPrev = 0x200000,
|
||||
kMiscReserved = 0x400000
|
||||
};
|
||||
|
||||
enum ProcType {
|
||||
kProcTypeDefault,
|
||||
kProcTypeWater
|
||||
};
|
||||
|
||||
enum hsMatUsage {
|
||||
kUseNone = 0x0,
|
||||
kUseBase = 0x1,
|
||||
kUseDetail = 0x2,
|
||||
kUseGrime = 0x4,
|
||||
kUseTransition = 0x8,
|
||||
kUseHighlight = 0x10,
|
||||
kUseMask = 0x20,
|
||||
kUseShadowLight = 0x40,
|
||||
kUseHelper = 0x80,
|
||||
|
||||
kUseGuess = 0x10000000
|
||||
};
|
||||
|
||||
public:
|
||||
// For hsMaxMtl... Special case for higher layers. Sigh.
|
||||
virtual void SetDirty(BOOL state) = 0;
|
||||
virtual void SetBlendFlag(int i, BOOL state) = 0;
|
||||
virtual void SetZFlag(int flag, BOOL state) = 0;
|
||||
virtual void SetShadeFlag(int flag, BOOL state) = 0;
|
||||
virtual void SetMiscFlag(int flag, BOOL state) = 0;
|
||||
virtual void SetProcType(ProcType type) = 0;
|
||||
virtual void SetUsage(hsMatUsage use) = 0;
|
||||
virtual void GuessUsage() = 0;
|
||||
|
||||
// For interactive renderer
|
||||
virtual Color GetAmbient(int mtlNum=0, BOOL backFace=FALSE) = 0;
|
||||
virtual Color GetColor(int mtlNum=0, BOOL backFace=FALSE) = 0;
|
||||
|
||||
virtual float GetShininess(int mtlNum=0, BOOL backFace=FALSE) = 0;
|
||||
virtual float GetShinStr(int mtlNum=0, BOOL backFace=FALSE) = 0;
|
||||
virtual float GetOpacity(int mtlNum=0, BOOL backFace=FALSE) = 0;
|
||||
|
||||
// For exporter
|
||||
virtual Color GetAmbient(TimeValue t) const = 0;
|
||||
virtual Color GetColor(TimeValue t) const = 0;
|
||||
|
||||
virtual float GetShininess(TimeValue t) const = 0;
|
||||
virtual float GetShinStr(TimeValue t) const = 0;
|
||||
virtual float GetMapPercent(TimeValue t) const = 0;
|
||||
virtual float GetOpacity(TimeValue t) const = 0;
|
||||
virtual float GetMipMapBlur(TimeValue t) const = 0;
|
||||
virtual float GetLODBias(TimeValue t) const = 0;
|
||||
virtual float GetDetailDropoffStart(TimeValue t) const = 0;
|
||||
virtual float GetDetailDropoffStop(TimeValue t) const = 0;
|
||||
virtual float GetDetailMax(TimeValue t) const = 0;
|
||||
virtual float GetDetailMin(TimeValue t) const = 0;
|
||||
virtual int GetEnvironMapSize(TimeValue t) const = 0;
|
||||
|
||||
virtual BOOL GetDirty() const = 0;
|
||||
virtual ULONG GetBlendFlags() const = 0;
|
||||
virtual ULONG GetZFlags() const = 0;
|
||||
virtual ULONG GetShadeFlags() const = 0;
|
||||
virtual ULONG GetMiscFlags() const = 0;
|
||||
virtual ProcType GetProcType() const = 0;
|
||||
virtual hsMatUsage GetUsage() const = 0;
|
||||
|
||||
virtual int GetNumExplicitMipmaps() const = 0;
|
||||
virtual TCHAR *GetExplicitMipmapName(int i) const = 0;
|
||||
virtual BOOL ExplicitMipmapEnabled(int i) const = 0;
|
||||
virtual int GetExplicitMipmapLevel(int i) const = 0;
|
||||
|
||||
#ifdef MAXR4
|
||||
// KLUDGE - Had to do this to compile under MAX4 beta
|
||||
virtual void fnReload() {};
|
||||
virtual void fnViewImage() {};
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif
|
@ -1,411 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "plMaterialUpdate.h"
|
||||
|
||||
#define MAXR3
|
||||
#define MAXR4
|
||||
|
||||
//#include "OldMat/hsMaxMtl.h"
|
||||
#include "OldMat/hsMaxLayer.h"
|
||||
|
||||
#include "../MaxPlasmaMtls/Layers/plLayerTex.h"
|
||||
#include "../MaxPlasmaMtls/Layers/plLayerTexBitmapPB.h"
|
||||
|
||||
#include "../MaxPlasmaMtls/Materials/plPassMtl.h"
|
||||
#include "../MaxPlasmaMtls/Materials/plPassMtlBase.h"
|
||||
#include "../MaxPlasmaMtls/Materials/plPassMtlBasicPB.h"
|
||||
#include "../MaxPlasmaMtls/Materials/plPassMtlAdvPB.h"
|
||||
#include "../MaxPlasmaMtls/Materials/plPassMtlLayersPB.h"
|
||||
|
||||
#include "../MaxExport/plExportProgressBar.h"
|
||||
|
||||
#define PLMATERIALUPDATE_CLASS_ID Class_ID(0x70acddfe, 0x68f42f3f)
|
||||
|
||||
#include <map>
|
||||
|
||||
class plMaterialUpdate : public UtilityObj
|
||||
{
|
||||
protected:
|
||||
HWND fhPanel;
|
||||
Interface *fInterface;
|
||||
std::map<MtlBase*, MtlBase*> fDoneMaterials;
|
||||
bool fConvertSecondLayer;
|
||||
|
||||
plMaterialUpdate();
|
||||
|
||||
public:
|
||||
static plMaterialUpdate &Instance();
|
||||
|
||||
~plMaterialUpdate();
|
||||
void DeleteThis() {}
|
||||
|
||||
void BeginEditParams(Interface *ip,IUtil *iu);
|
||||
void EndEditParams(Interface *ip,IUtil *iu);
|
||||
|
||||
bool ConvertAllMtls(INode *node, plExportProgressBar *bar);
|
||||
|
||||
protected:
|
||||
static BOOL CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
void IRenameMtls(MtlBase *oldMtl, MtlBase *newMtl);
|
||||
|
||||
void IConvert(INode *node);
|
||||
plPassMtl *IConvertMtl(Mtl *mtl, Mtl *multi=NULL, int subNum=-1);
|
||||
plLayerTex *IConvertLayer(hsMaxLayer *layer);
|
||||
|
||||
void ICopyMtlParams(plPassMtl *mtl, hsMaxLayer *layer);
|
||||
};
|
||||
|
||||
class plMaterialUpdateClassDesc:public ClassDesc2 {
|
||||
public:
|
||||
int IsPublic() { return TRUE; }
|
||||
void * Create(BOOL loading = FALSE) { return &plMaterialUpdate::Instance(); }
|
||||
const TCHAR * ClassName() { return "Plasma Material Converter"; }
|
||||
SClass_ID SuperClassID() { return UTILITY_CLASS_ID; }
|
||||
Class_ID ClassID() { return PLMATERIALUPDATE_CLASS_ID; }
|
||||
const TCHAR* Category() { return GetString(IDS_CATEGORY); }
|
||||
|
||||
const TCHAR* InternalName() { return _T("plMaterialConverter"); } // returns fixed parsable name (scripter-visible name)
|
||||
HINSTANCE HInstance() { return hInstance; } // returns owning module handle
|
||||
};
|
||||
|
||||
static plMaterialUpdateClassDesc plMaterialUpdateDesc;
|
||||
ClassDesc2* GetMaterialUpdateDesc() { return &plMaterialUpdateDesc; }
|
||||
|
||||
plMaterialUpdate &plMaterialUpdate::Instance()
|
||||
{
|
||||
static plMaterialUpdate theInstance;
|
||||
return theInstance;
|
||||
}
|
||||
|
||||
plMaterialUpdate::plMaterialUpdate() : fInterface(NULL), fhPanel(NULL), fConvertSecondLayer(false)
|
||||
{
|
||||
}
|
||||
|
||||
plMaterialUpdate::~plMaterialUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL plMaterialUpdate::DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDC_BUTTON1 && HIWORD(wParam) == BN_CLICKED)
|
||||
{
|
||||
plMaterialUpdate &p = Instance();
|
||||
|
||||
plExportProgressBar bar;
|
||||
bar.Start("Convert Materials");
|
||||
|
||||
if (IsDlgButtonChecked(hWnd, IDC_CHECK1) == BST_CHECKED)
|
||||
p.fConvertSecondLayer = true;
|
||||
|
||||
p.ConvertAllMtls(p.fInterface->GetRootNode(), &bar);
|
||||
|
||||
p.fInterface->RedrawViews(p.fInterface->GetTime());
|
||||
p.fDoneMaterials.clear();
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void plMaterialUpdate::BeginEditParams(Interface *ip, IUtil *iu)
|
||||
{
|
||||
fInterface = ip;
|
||||
fhPanel = fInterface->AddRollupPage(
|
||||
hInstance,
|
||||
MAKEINTRESOURCE(IDD_PANEL),
|
||||
DlgProc,
|
||||
GetString(IDS_PARAMS),
|
||||
0);
|
||||
}
|
||||
|
||||
void plMaterialUpdate::EndEditParams(Interface *ip, IUtil *iu)
|
||||
{
|
||||
fInterface->DeleteRollupPage(fhPanel);
|
||||
fInterface = NULL;
|
||||
fhPanel = NULL;
|
||||
}
|
||||
|
||||
bool plMaterialUpdate::ConvertAllMtls(INode *node, plExportProgressBar *bar)
|
||||
{
|
||||
IConvert(node);
|
||||
|
||||
bool cancel = bar->Update();
|
||||
if (cancel)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < node->NumChildren(); i++)
|
||||
{
|
||||
if (!ConvertAllMtls(node->GetChildNode(i), bar))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void plMaterialUpdate::IConvert(INode *node)
|
||||
{
|
||||
Mtl *mtl = node->GetMtl();
|
||||
if (!mtl)
|
||||
return;
|
||||
|
||||
if (mtl->ClassID() == hsMaxMtlClassID)
|
||||
{
|
||||
plPassMtl *pass = IConvertMtl(mtl);
|
||||
node->SetMtl(pass);
|
||||
}
|
||||
else if (mtl->ClassID() == Class_ID(MULTI_CLASS_ID,0))
|
||||
{
|
||||
for (int i = 0; i < mtl->NumSubMtls(); i++)
|
||||
{
|
||||
Mtl *subMtl = mtl->GetSubMtl(i);
|
||||
if (subMtl->ClassID() == hsMaxMtlClassID)
|
||||
{
|
||||
plPassMtl *pass = IConvertMtl(subMtl, mtl, i);
|
||||
mtl->SetSubMtl(i, pass);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void plMaterialUpdate::IRenameMtls(MtlBase *oldMtl, MtlBase *newMtl)
|
||||
{
|
||||
char buf[256];
|
||||
const char *name = oldMtl->GetName();
|
||||
newMtl->SetName(name);
|
||||
strcpy(buf, name);
|
||||
strcat(buf, " old");
|
||||
oldMtl->SetName(buf);
|
||||
}
|
||||
|
||||
plPassMtl *plMaterialUpdate::IConvertMtl(Mtl *mtl, Mtl *multi, int subNum)
|
||||
{
|
||||
// We've already converted this material, use the new one we already made
|
||||
if (fDoneMaterials.find(mtl) != fDoneMaterials.end())
|
||||
return (plPassMtl*)fDoneMaterials[mtl];
|
||||
|
||||
plPassMtl *newMtl = (plPassMtl*)CreateInstance(MATERIAL_CLASS_ID, PASS_MTL_CLASS_ID);
|
||||
IParamBlock2 *layersPB = newMtl->GetParamBlockByID(plPassMtl::kBlkLayers);
|
||||
|
||||
IRenameMtls(mtl, newMtl);
|
||||
|
||||
if (mtl->NumSubTexmaps() > 0)
|
||||
{
|
||||
Texmap *map = mtl->GetSubTexmap(0);
|
||||
if (map->ClassID() == hsMaxLayerClassID)
|
||||
{
|
||||
plLayerTex *layer = IConvertLayer((hsMaxLayer*)map);
|
||||
|
||||
// layer->SetMtlFlag(MTL_TEX_DISPLAY_ENABLED, TRUE);
|
||||
// layer->ActivateTexDisplay(TRUE);
|
||||
|
||||
newMtl->SetSubTexmap(0, layer);
|
||||
/* newMtl->SetActiveTexmap(layer);
|
||||
newMtl->SetMtlFlag(MTL_TEX_DISPLAY_ENABLED, TRUE);
|
||||
|
||||
if (multi)
|
||||
GetCOREInterface()->ActivateTexture(layer, multi, subNum);
|
||||
else
|
||||
GetCOREInterface()->ActivateTexture(layer, newMtl);
|
||||
*/
|
||||
ICopyMtlParams(newMtl, (hsMaxLayer*)map);
|
||||
}
|
||||
}
|
||||
|
||||
if (mtl->NumSubTexmaps() > 1 && fConvertSecondLayer && mtl->SubTexmapOn(1))
|
||||
{
|
||||
Texmap *map = mtl->GetSubTexmap(1);
|
||||
if (map->ClassID() == hsMaxLayerClassID)
|
||||
{
|
||||
hsMaxLayer *oldLayer = (hsMaxLayer*)map;
|
||||
plLayerTex *layer = IConvertLayer(oldLayer);
|
||||
newMtl->SetSubTexmap(1, layer);
|
||||
|
||||
IParamBlock2 *layersPB = newMtl->GetParamBlockByID(plPassMtl::kBlkLayers);
|
||||
layersPB->SetValue(kPassLayTopOn, 0, TRUE);
|
||||
|
||||
if (oldLayer->GetBlendFlags() & hsMaxLayerBase::kBlendAlpha)
|
||||
layersPB->SetValue(kPassLayBlend, 0, plPassMtlBase::kBlendAlpha);
|
||||
else if (oldLayer->GetBlendFlags() & hsMaxLayerBase::kBlendAdd)
|
||||
layersPB->SetValue(kPassLayBlend, 0, plPassMtlBase::kBlendAdd);
|
||||
}
|
||||
}
|
||||
|
||||
//MtlBaseLib& Interface::GetMaterialLibrary()
|
||||
|
||||
// Add this to our converted materials
|
||||
fDoneMaterials[mtl] = newMtl;
|
||||
|
||||
return newMtl;
|
||||
}
|
||||
|
||||
plLayerTex *plMaterialUpdate::IConvertLayer(hsMaxLayer *layer)
|
||||
{
|
||||
plLayerTex *newLayer = (plLayerTex*)CreateInstance(TEXMAP_CLASS_ID, LAYER_TEX_CLASS_ID);
|
||||
IParamBlock2 *bitmapPB = newLayer->GetParamBlockByID(plLayerTex::kBlkBitmap);
|
||||
|
||||
IRenameMtls(layer, newLayer);
|
||||
|
||||
// Copy the bitmap
|
||||
if (layer->GetMiscFlags() & hsMaxLayerBase::kMiscUseBitmap)
|
||||
{
|
||||
bitmapPB->SetValue(kBmpUseBitmap, 0, 1);
|
||||
|
||||
const char *name = layer->GetMapName();
|
||||
PBBitmap pbb;
|
||||
pbb.bi.SetName(name);
|
||||
|
||||
// Disable annoying missing texture warning
|
||||
BOOL bmmSilentMode = TheManager->SilentMode();
|
||||
TheManager->SetSilentMode(TRUE);
|
||||
|
||||
bitmapPB->SetValue(kBmpBitmap, 0, &pbb);
|
||||
|
||||
TheManager->SetSilentMode(bmmSilentMode);
|
||||
}
|
||||
|
||||
// Copy the UVGen
|
||||
newLayer->ReplaceReference(plLayerTex::kRefUVGen, layer->GetUVGen());
|
||||
|
||||
// Copy the cropping
|
||||
if (layer->GetApplyCrop())
|
||||
{
|
||||
bitmapPB->SetValue(kBmpApply, 0, TRUE);
|
||||
bitmapPB->SetValue(kBmpCropPlace, 0, layer->GetPlaceImage());
|
||||
|
||||
bitmapPB->SetValue(kBmpClipU, 0, layer->GetClipU(0));
|
||||
bitmapPB->SetValue(kBmpClipV, 0, layer->GetClipV(0));
|
||||
bitmapPB->SetValue(kBmpClipW, 0, layer->GetClipW(0));
|
||||
bitmapPB->SetValue(kBmpClipH, 0, layer->GetClipH(0));
|
||||
}
|
||||
|
||||
// Misc
|
||||
if (layer->GetBlendFlags() & hsMaxLayerBase::kBlendNoColor)
|
||||
bitmapPB->SetValue(kBmpDiscardColor, 0, TRUE);
|
||||
if (layer->GetBlendFlags() & hsMaxLayerBase::kBlendInvertColor)
|
||||
bitmapPB->SetValue(kBmpInvertColor, 0, TRUE);
|
||||
if (layer->GetAlphaSource() == 2)
|
||||
bitmapPB->SetValue(kBmpDiscardAlpha, 0, TRUE);
|
||||
if (layer->GetBlendFlags() & hsMaxLayerBase::kBlendInvertAlpha)
|
||||
bitmapPB->SetValue(kBmpInvertAlpha, 0, TRUE);
|
||||
|
||||
/*
|
||||
// Texture quality
|
||||
kBmpNonCompressed,
|
||||
kBmpScaling,
|
||||
*/
|
||||
|
||||
// Mipmap
|
||||
if (layer->GetFilterType() == 2)
|
||||
bitmapPB->SetValue(kBmpNoFilter, 0, TRUE);
|
||||
|
||||
float blur = layer->GetMipMapBlur(TimeValue(0));
|
||||
bitmapPB->SetValue(kBmpMipBlur, 0, blur);
|
||||
|
||||
if (layer->GetZFlags() & hsMaxLayerBase::kZLODBias)
|
||||
{
|
||||
bitmapPB->SetValue(kBmpMipBias, 0, TRUE);
|
||||
bitmapPB->SetValue(kBmpMipBiasAmt, 0, layer->GetLODBias(TimeValue(0)));
|
||||
}
|
||||
|
||||
// Detail
|
||||
if (layer->GetBlendFlags() & hsMaxLayerBase::kBlendDetail ||
|
||||
layer->GetBlendFlags() & hsMaxLayerBase::kBlendDetailAdd)
|
||||
{
|
||||
bitmapPB->SetValue(kBmpUseDetail, 0, TRUE);
|
||||
|
||||
bitmapPB->SetValue(kBmpDetailStartSize, 0, layer->GetDetailDropoffStart(0));
|
||||
bitmapPB->SetValue(kBmpDetailStopSize, 0, layer->GetDetailDropoffStop(0));
|
||||
bitmapPB->SetValue(kBmpDetailStartOpac, 0, layer->GetDetailMax(0));
|
||||
bitmapPB->SetValue(kBmpDetailStopOpac, 0, layer->GetDetailMin(0));
|
||||
}
|
||||
|
||||
return newLayer;
|
||||
}
|
||||
|
||||
void plMaterialUpdate::ICopyMtlParams(plPassMtl *mtl, hsMaxLayer *layer)
|
||||
{
|
||||
IParamBlock2 *basicPB = mtl->GetParamBlockByID(plPassMtl::kBlkBasic);
|
||||
IParamBlock2 *layersPB = mtl->GetParamBlockByID(plPassMtl::kBlkLayers);
|
||||
|
||||
basicPB->SetValue(kPassBasColorAmb, 0, layer->GetAmbient());
|
||||
basicPB->SetValue(kPassBasColor, 0, layer->GetColor());
|
||||
|
||||
basicPB->SetValue(kPassBasOpacity, 0, int(layer->GetOpacity(0)*100.f));
|
||||
|
||||
if (layer->GetBlendFlags() & hsMaxLayerBase::kBlendAlpha)
|
||||
layersPB->SetValue(kPassLayOutputBlend, 0, plPassMtlBase::kBlendAlpha);
|
||||
else if (layer->GetBlendFlags() & hsMaxLayerBase::kBlendAdd)
|
||||
layersPB->SetValue(kPassLayOutputBlend, 0, plPassMtlBase::kBlendAdd);
|
||||
|
||||
/*
|
||||
kPassAdvUseSpec,
|
||||
kPassAdvSpecType,
|
||||
kPassAdvShine,
|
||||
kPassAdvShineStr,
|
||||
|
||||
// Misc
|
||||
kPassAdvWire,
|
||||
kPassAdvMeshOutlines,
|
||||
kPassAdvTwoSided,
|
||||
|
||||
// Shading
|
||||
kPassAdvSoftShadow,
|
||||
kPassAdvNoProj,
|
||||
kPassAdvVertexShade,
|
||||
kPassAdvNoShade,
|
||||
kPassAdvNoFog,
|
||||
kPassAdvWhite,
|
||||
|
||||
// Z
|
||||
kPassAdvZOnly,
|
||||
kPassAdvZClear,
|
||||
kPassAdvZNoRead,
|
||||
kPassAdvZNoWrite,
|
||||
kPassAdvZInc,
|
||||
*/
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
LIBRARY
|
||||
EXPORTS
|
||||
LibDescription @1
|
||||
LibNumberClasses @2
|
||||
LibClassDesc @3
|
||||
LibVersion @4
|
||||
SECTIONS
|
||||
.data READ WRITE
|
@ -1,71 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/**********************************************************************
|
||||
*<
|
||||
FILE: plMaterialUpdate.h
|
||||
|
||||
DESCRIPTION: Includes for Plugins
|
||||
|
||||
CREATED BY:
|
||||
|
||||
HISTORY:
|
||||
|
||||
*> Copyright (c) 2000, All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __PLMATERIALUPDATE__H
|
||||
#define __PLMATERIALUPDATE__H
|
||||
|
||||
#include "Max.h"
|
||||
#include "resource.h"
|
||||
#include "istdplug.h"
|
||||
#include "iparamb2.h"
|
||||
#include "iparamm2.h"
|
||||
|
||||
#include "utilapi.h"
|
||||
|
||||
|
||||
extern TCHAR *GetString(int id);
|
||||
|
||||
extern HINSTANCE hInstance;
|
||||
|
||||
#endif // __PLMATERIALUPDATE__H
|
@ -1,103 +0,0 @@
|
||||
//Microsoft Developer Studio generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#define IDC_STATIC (-1) // all static controls
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_PANEL DIALOG DISCARDABLE 0, 0, 108, 45
|
||||
STYLE WS_CHILD | WS_VISIBLE
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
PUSHBUTTON "Convert All",IDC_BUTTON1,29,9,48,15
|
||||
CONTROL "Convert 2nd layer",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,18,29,71,10
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO DISCARDABLE
|
||||
BEGIN
|
||||
IDD_PANEL, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 101
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 38
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_CLASS_NAME "plMaterialUpdate"
|
||||
IDS_PARAMS "Parameters"
|
||||
IDS_SPIN "Spin"
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,28 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by plMaterialUpdate.rc
|
||||
//
|
||||
#define IDS_LIBDESCRIPTION 1
|
||||
#define IDS_CATEGORY 2
|
||||
#define IDS_CLASS_NAME 3
|
||||
#define IDS_PARAMS 4
|
||||
#define IDS_SPIN 5
|
||||
#define IDD_PANEL 101
|
||||
#define IDC_CLOSEBUTTON 1000
|
||||
#define IDC_DOSTUFF 1000
|
||||
#define IDC_BUTTON1 1001
|
||||
#define IDC_CHECK1 1002
|
||||
#define IDC_COLOR 1456
|
||||
#define IDC_EDIT 1490
|
||||
#define IDC_SPIN 1496
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1003
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
@ -1,248 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
// Migration.cpp : Defines the entry point for the application.
|
||||
//
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <process.h>
|
||||
#include <commctrl.h>
|
||||
#include "resource.h"
|
||||
#include "Migration.h"
|
||||
|
||||
HINSTANCE gInstance;
|
||||
HWND gDlg;
|
||||
unsigned int gThreadID;
|
||||
|
||||
int gTaskItem = -1;
|
||||
bool gTasksRunning = false;
|
||||
|
||||
LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
InitCommonControls();
|
||||
|
||||
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, (DLGPROC) DlgProc);
|
||||
|
||||
gInstance = hInstance;
|
||||
gDlg = hWnd;
|
||||
|
||||
ShowWindow(hWnd, SW_SHOW);
|
||||
|
||||
// Main message loop:
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if (!IsWindow(hWnd) || !IsDialogMessage(hWnd, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
return msg.wParam;
|
||||
}
|
||||
|
||||
|
||||
// Mesage handler for dlg box.
|
||||
LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
LRESULT ret = FALSE;
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
HWND hListView = GetDlgItem(hDlg,IDC_TASKLIST);
|
||||
ListView_SetExtendedListViewStyleEx(hListView, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES);
|
||||
LoadTasks(hListView);
|
||||
LoadTasks(hDlg);
|
||||
Button_SetCheck(GetDlgItem(hDlg,IDC_RADIOTEST),BST_CHECKED);
|
||||
ret = TRUE;
|
||||
}
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_START:
|
||||
// Start the migration Tasks
|
||||
SetCursor(LoadCursor(NULL,IDC_WAIT));
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_START),FALSE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_STOP),TRUE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_RADIOTEST),FALSE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_RADIOLAST),FALSE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_RADIOBRANCH),FALSE);
|
||||
_beginthreadex(NULL,0,RunTasks,NULL,0,&gThreadID);
|
||||
gTasksRunning = true;
|
||||
ret = TRUE;
|
||||
break;
|
||||
case IDC_STOP:
|
||||
// Stop the migration Tasks
|
||||
SetCursor(LoadCursor(NULL,IDC_ARROW));
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_START),TRUE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_STOP),FALSE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_RADIOTEST),TRUE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_RADIOLAST),TRUE);
|
||||
Button_Enable(GetDlgItem(hDlg,IDC_RADIOBRANCH),TRUE);
|
||||
ListBox_SetCurSel(GetDlgItem(hDlg,IDC_TASKLIST),gTaskItem);
|
||||
gTasksRunning = false;
|
||||
ret = TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
switch ((int)wParam)
|
||||
{
|
||||
case IDC_TASKLIST:
|
||||
{
|
||||
NMHDR* hdr = (NMHDR*)lParam;
|
||||
switch (hdr->code)
|
||||
{
|
||||
case LVN_ITEMCHANGED:
|
||||
{
|
||||
NMLISTVIEW* note = (NMLISTVIEW*)lParam;
|
||||
if (note->iItem != -1)
|
||||
{
|
||||
Static_SetText(GetDlgItem(hDlg,IDC_DESCRIPTION),(*(MigrationTaskList::GetInstance()->GetList()))[note->iItem]->GetDescription());
|
||||
(*(MigrationTaskList::GetInstance()->GetList()))[note->iItem]->SetEnabled(ListView_GetCheckState(hdr->hwndFrom, note->iItem) != 0);
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
PostQuitMessage(-1);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
MigrationTaskList::MigrationTaskList()
|
||||
{
|
||||
static MigrationTask_Backup backup;
|
||||
static MigrationTask_CleanUp cleanUp;
|
||||
static MigrationTask_PatchBuilder patchBuilder;
|
||||
static MigrationTask_DataMigration dataMigration;
|
||||
static MigrationTask_InstallClient installClient;
|
||||
static MigrationTask_GenerateClientManifest generateClientManifest;
|
||||
static MigrationTask_DropStoredGames dropStoredGames;
|
||||
static MigrationTask_InstallAges installAges;
|
||||
static MigrationTask_CopyTestServers copyTestServers;
|
||||
static MigrationTask_StartLiveServers startLiveServers;
|
||||
|
||||
fList.push_back(&backup);
|
||||
fList.push_back(&cleanUp);
|
||||
fList.push_back(&patchBuilder);
|
||||
fList.push_back(&dataMigration);
|
||||
fList.push_back(&installClient);
|
||||
fList.push_back(&generateClientManifest);
|
||||
fList.push_back(&dropStoredGames);
|
||||
fList.push_back(&installAges);
|
||||
fList.push_back(©TestServers);
|
||||
fList.push_back(&startLiveServers);
|
||||
}
|
||||
|
||||
MigrationTaskList* MigrationTaskList::GetInstance()
|
||||
{
|
||||
static MigrationTaskList mlist;
|
||||
return &mlist;
|
||||
}
|
||||
|
||||
void LoadTasks(HWND hListView)
|
||||
{
|
||||
MigrationTaskList::TaskList* tasktlist = MigrationTaskList::GetInstance()->GetList();
|
||||
|
||||
MigrationTaskList::TaskList::iterator it = tasktlist->begin();
|
||||
int index = 0;
|
||||
while (it != tasktlist->end())
|
||||
{
|
||||
LVITEM item;
|
||||
ZeroMemory(&item,sizeof(item));
|
||||
item.pszText = (*it)->GetName();
|
||||
item.mask = LVIF_TEXT;
|
||||
item.iItem = index;
|
||||
ListView_InsertItem(hListView,&item);
|
||||
it++; index++;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int __stdcall RunTasks(void* args)
|
||||
{
|
||||
gTaskItem = 0;
|
||||
MigrationTaskList::TaskList* tasktlist = MigrationTaskList::GetInstance()->GetList();
|
||||
|
||||
while(gTasksRunning && gTaskItem < tasktlist->size())
|
||||
{
|
||||
if ((*tasktlist)[gTaskItem]->GetEnabled())
|
||||
{
|
||||
if (Button_GetCheck(GetDlgItem(gDlg,IDC_RADIOTEST)) == BST_CHECKED)
|
||||
(*tasktlist)[gTaskItem]->SetServer(MigrationTask::kTest);
|
||||
if (Button_GetCheck(GetDlgItem(gDlg,IDC_RADIOLAST)) == BST_CHECKED)
|
||||
(*tasktlist)[gTaskItem]->SetServer(MigrationTask::kLast);
|
||||
if (Button_GetCheck(GetDlgItem(gDlg,IDC_RADIOBRANCH)) == BST_CHECKED)
|
||||
(*tasktlist)[gTaskItem]->SetServer(MigrationTask::kBranch);
|
||||
|
||||
ListBox_SetCurSel(GetDlgItem(gDlg,IDC_TASKLIST),gTaskItem);
|
||||
Static_SetText(GetDlgItem(gDlg,IDC_DESCRIPTION),(*tasktlist)[gTaskItem]->GetDescription());
|
||||
gTasksRunning = (*tasktlist)[gTaskItem]->Run(gInstance,gDlg) == 0;
|
||||
}
|
||||
gTaskItem++;
|
||||
}
|
||||
|
||||
gTaskItem = -1;
|
||||
SendMessage(gDlg,WM_COMMAND,MAKEWPARAM(IDC_STOP,BN_CLICKED),WPARAM(GetDlgItem(gDlg,IDC_STOP)));
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef PLASMA_MIGRATION_TOOL
|
||||
#define PLASMA_MIGRATION_TOOL
|
||||
|
||||
#include "MigrationTask.h"
|
||||
#include <vector>
|
||||
|
||||
void LoadTasks(HWND hListView);
|
||||
unsigned int __stdcall RunTasks(void* args);
|
||||
|
||||
class MigrationTaskList
|
||||
{
|
||||
public:
|
||||
typedef std::vector<MigrationTask*> TaskList;
|
||||
private:
|
||||
TaskList fList;
|
||||
public:
|
||||
MigrationTaskList();
|
||||
static MigrationTaskList* GetInstance();
|
||||
TaskList* GetList() { return &fList; }
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif //PLASMA_MIGRATION_TOOL
|
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
@ -1,113 +0,0 @@
|
||||
//Microsoft Developer Studio generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#define IDC_STATIC (-1) // all static controls
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_MIGRATION ICON DISCARDABLE "Migration.ICO"
|
||||
IDI_SMALL ICON DISCARDABLE "SMALL.ICO"
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
1 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_MAINDIALOG DIALOG DISCARDABLE 0, 0, 290, 221
|
||||
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Migrate the Test Servers to Live"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,207,13,50,14
|
||||
PUSHBUTTON "Stop",IDC_STOP,207,30,50,14,WS_DISABLED
|
||||
LTEXT "Tasks to perform:",IDC_STATIC,19,13,93,8
|
||||
LTEXT "Description:",IDC_STATIC,190,51,45,9
|
||||
EDITTEXT IDC_DESCRIPTION,192,67,81,98,ES_MULTILINE |
|
||||
ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN
|
||||
CONTROL "List1",IDC_TASKLIST,"SysListView32",LVS_LIST |
|
||||
LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,19,26,158,179
|
||||
GROUPBOX "From Server:",IDC_STATIC,189,168,94,39
|
||||
CONTROL "Test",IDC_RADIOTEST,"Button",BS_AUTORADIOBUTTON,199,176,
|
||||
31,13
|
||||
CONTROL "Last",IDC_RADIOLAST,"Button",BS_AUTORADIOBUTTON,241,176,
|
||||
29,13
|
||||
CONTROL "Branch",IDC_RADIOBRANCH,"Button",BS_AUTORADIOBUTTON,217,
|
||||
189,38,13
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO DISCARDABLE
|
||||
BEGIN
|
||||
IDD_MAINDIALOG, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 283
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 214
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -1,435 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "MigrationTask.h"
|
||||
#include "OptionalDialog.h"
|
||||
#include "commctrl.h"
|
||||
#include "resource.h"
|
||||
#include "windowsx.h"
|
||||
#include "shellapi.h"
|
||||
|
||||
#define SHARENAME "\\\\data.dni\\Parable-Root"
|
||||
#define LIVECLIENTDIR "\\dataservers\\live\\game_Clients\\drcExplorer"
|
||||
#define LIVEEXPANDEDINSTALLDIR "\\dataservers\\live\\game_Install\\Expanded"
|
||||
|
||||
|
||||
int MigrationTask_Backup::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// SSH In & Run the backup Script...
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
si.dwFlags = STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
|
||||
si.wShowWindow = SW_MINIMIZE;
|
||||
si.lpTitle = "Server Backup Running";
|
||||
si.dwXCountChars = 80;
|
||||
si.dwYCountChars = 25;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
ret = !CreateProcess(NULL,"ssh2 parable@build.bone.cyan.com \"backuplive.sh\"",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_CleanUp::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// Clean up the Test Directory
|
||||
char* dataloc;
|
||||
|
||||
switch (GetServer())
|
||||
{
|
||||
case kTest:
|
||||
dataloc = SHARENAME "\\dataservers\\test\\game_Data";
|
||||
break;
|
||||
case kLast:
|
||||
dataloc = SHARENAME "\\dataservers\\test-last\\game_Data";
|
||||
break;
|
||||
case kBranch:
|
||||
dataloc = SHARENAME "\\dataservers\\branch\\game_Data";
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
ShellExecute(hDlg,"open",dataloc,NULL,NULL,SW_SHOWNORMAL);
|
||||
|
||||
if (MessageBox(hDlg, "Press OK to Continue...","Continue", MB_OKCANCEL) == IDCANCEL)
|
||||
ret = -1;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int MigrationTask_PatchBuilder::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
// Connect to the Data Servers by mapping the share
|
||||
|
||||
// Run the patch builder on the Test and Live directories
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_DataMigration::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// SSH In; Copy the Data to the live
|
||||
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
si.dwFlags = STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
|
||||
si.wShowWindow = SW_MINIMIZE;
|
||||
si.lpTitle = "Migrate the Data sets";
|
||||
si.dwXCountChars = 80;
|
||||
si.dwYCountChars = 25;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
|
||||
char* migratecmd;
|
||||
switch (GetServer())
|
||||
{
|
||||
case kTest:
|
||||
migratecmd = "ssh2 parable@build.bone.cyan.com \"migrate-test-data-live.sh\"";
|
||||
break;
|
||||
case kLast:
|
||||
migratecmd = "ssh2 parable@build.bone.cyan.com \"migrate-test-last-data-live.sh\"";
|
||||
break;
|
||||
case kBranch:
|
||||
migratecmd = "ssh2 parable@build.bone.cyan.com \"migrate-branch-data-live.sh\"";
|
||||
break;
|
||||
}
|
||||
|
||||
ret = !CreateProcess(NULL,migratecmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_InstallClient::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// migrate the client support files
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
si.dwFlags = STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
|
||||
si.wShowWindow = SW_MINIMIZE;
|
||||
si.lpTitle = "Migrate Client Support";
|
||||
si.dwXCountChars = 80;
|
||||
si.dwYCountChars = 25;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
|
||||
char* migratecmd;
|
||||
switch (GetServer())
|
||||
{
|
||||
case kTest:
|
||||
migratecmd = "ssh2 parable@build.bone.cyan.com \"migrate-test-client-live.sh\"";
|
||||
break;
|
||||
case kLast:
|
||||
migratecmd = "ssh2 parable@build.bone.cyan.com \"migrate-test-last-client-live.sh\"";
|
||||
break;
|
||||
case kBranch:
|
||||
migratecmd = "ssh2 parable@build.bone.cyan.com \"migrate-branch-client-live.sh\"";
|
||||
break;
|
||||
}
|
||||
|
||||
ret = CreateProcess(NULL,migratecmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
|
||||
// Connect to the Data Servers by mapping the share
|
||||
NETRESOURCE netres;
|
||||
memset(&netres,0,sizeof(netres));
|
||||
netres.lpRemoteName = SHARENAME;
|
||||
netres.dwDisplayType = RESOURCETYPE_DISK;
|
||||
ret = (WNetAddConnection3(hDlg,&netres,NULL,NULL,CONNECT_INTERACTIVE) != NO_ERROR);
|
||||
|
||||
if (ret == 0)
|
||||
{
|
||||
char exe[MAX_PATH];
|
||||
OPENFILENAME ofn;
|
||||
SHFILEOPSTRUCT shFileOpt;
|
||||
// Choose a client to copy across
|
||||
memset(&exe, 0, sizeof(exe));
|
||||
memset(&ofn, 0, sizeof(OPENFILENAME));
|
||||
ofn.lStructSize = sizeof(OPENFILENAME);
|
||||
ofn.hwndOwner = hDlg;
|
||||
ofn.lpstrFile = exe;
|
||||
ofn.nMaxFile = sizeof(exe);
|
||||
ofn.lpstrFilter = "Executable (*.EXE)\0*.EXE\0All (*.*)\0*.*\0";
|
||||
ofn.nFilterIndex = 1;
|
||||
ofn.lpstrFileTitle = NULL;
|
||||
ofn.nMaxFileTitle = 0;
|
||||
ofn.lpstrInitialDir = NULL;
|
||||
ofn.lpstrTitle = "Choose client exe to be used as drcExplorer.exe";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
|
||||
while(!GetOpenFileName(&ofn));
|
||||
|
||||
// copy the client across
|
||||
memset(&shFileOpt,0,sizeof(shFileOpt));
|
||||
shFileOpt.hwnd = hDlg;
|
||||
shFileOpt.wFunc = FO_COPY;
|
||||
shFileOpt.pFrom = exe;
|
||||
shFileOpt.pTo = SHARENAME LIVECLIENTDIR "\\drcExplorer.exe\0";
|
||||
ret = SHFileOperation(&shFileOpt);
|
||||
|
||||
// Choose a client config to copy across
|
||||
memset(&exe, 0, sizeof(exe));
|
||||
memset(&ofn, 0, sizeof(OPENFILENAME));
|
||||
ofn.lStructSize = sizeof(OPENFILENAME);
|
||||
ofn.hwndOwner = hDlg;
|
||||
ofn.lpstrFile = exe;
|
||||
ofn.nMaxFile = sizeof(exe);
|
||||
ofn.lpstrFilter = "Executable (*.EXE)\0*.EXE\0All (*.*)\0*.*\0";
|
||||
ofn.nFilterIndex = 1;
|
||||
ofn.lpstrFileTitle = NULL;
|
||||
ofn.nMaxFileTitle = 0;
|
||||
ofn.lpstrInitialDir = NULL;
|
||||
ofn.lpstrTitle = "Choose client setup exe to be used as drcConfig.exe";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
|
||||
while(!GetOpenFileName(&ofn));
|
||||
|
||||
// copy the client across
|
||||
memset(&shFileOpt,0,sizeof(shFileOpt));
|
||||
shFileOpt.hwnd = hDlg;
|
||||
shFileOpt.wFunc = FO_COPY;
|
||||
shFileOpt.pFrom = exe;
|
||||
shFileOpt.pTo = SHARENAME LIVEEXPANDEDINSTALLDIR "\\drcConfig.exe\0";
|
||||
ret = SHFileOperation(&shFileOpt);
|
||||
|
||||
// Choose a patcher to copy across
|
||||
memset(&exe, 0, sizeof(exe));
|
||||
memset(&ofn, 0, sizeof(OPENFILENAME));
|
||||
ofn.lStructSize = sizeof(OPENFILENAME);
|
||||
ofn.hwndOwner = hDlg;
|
||||
ofn.lpstrFile = exe;
|
||||
ofn.nMaxFile = sizeof(exe);
|
||||
ofn.lpstrFilter = "Executable (*.EXE)\0*.EXE\0All (*.*)\0*.*\0";
|
||||
ofn.nFilterIndex = 1;
|
||||
ofn.lpstrFileTitle = NULL;
|
||||
ofn.nMaxFileTitle = 0;
|
||||
ofn.lpstrInitialDir = NULL;
|
||||
ofn.lpstrTitle = "Choose patcher exe to be used as drcPatcher.exe";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
|
||||
while(!GetOpenFileName(&ofn));
|
||||
|
||||
// copy the client across
|
||||
memset(&shFileOpt,0,sizeof(shFileOpt));
|
||||
shFileOpt.hwnd = hDlg;
|
||||
shFileOpt.wFunc = FO_COPY;
|
||||
shFileOpt.pFrom = exe;
|
||||
shFileOpt.pTo = SHARENAME LIVEEXPANDEDINSTALLDIR "\\drcPatcher.exe\0";
|
||||
ret = SHFileOperation(&shFileOpt);
|
||||
|
||||
// Choose a python.dll to copy across
|
||||
memset(&exe, 0, sizeof(exe));
|
||||
memset(&ofn, 0, sizeof(OPENFILENAME));
|
||||
ofn.lStructSize = sizeof(OPENFILENAME);
|
||||
ofn.hwndOwner = hDlg;
|
||||
ofn.lpstrFile = exe;
|
||||
ofn.nMaxFile = sizeof(exe);
|
||||
ofn.lpstrFilter = "Dynamic Lib (*.DLL)\0*.DLL\0All (*.*)\0*.*\0";
|
||||
ofn.nFilterIndex = 1;
|
||||
ofn.lpstrFileTitle = NULL;
|
||||
ofn.nMaxFileTitle = 0;
|
||||
ofn.lpstrInitialDir = NULL;
|
||||
ofn.lpstrTitle = "Choose python dll to be used as cypython21.dll";
|
||||
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
|
||||
while(!GetOpenFileName(&ofn));
|
||||
|
||||
// copy the client across
|
||||
memset(&shFileOpt,0,sizeof(shFileOpt));
|
||||
shFileOpt.hwnd = hDlg;
|
||||
shFileOpt.wFunc = FO_COPY;
|
||||
shFileOpt.pFrom = exe;
|
||||
shFileOpt.pTo = SHARENAME LIVEEXPANDEDINSTALLDIR "\\cypython21.dll\0";
|
||||
ret = SHFileOperation(&shFileOpt);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_GenerateClientManifest::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// Run generate manifest on the directoy on the server
|
||||
// Connect to the Data Servers by mapping the share
|
||||
NETRESOURCE netres;
|
||||
memset(&netres,0,sizeof(netres));
|
||||
netres.lpRemoteName = SHARENAME;
|
||||
netres.dwDisplayType = RESOURCETYPE_DISK;
|
||||
ret = (WNetAddConnection3(hDlg,&netres,NULL,NULL,CONNECT_INTERACTIVE) != NO_ERROR);
|
||||
|
||||
if (ret == 0)
|
||||
{
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
ret = !CreateProcess(NULL,"plGenClientManifest.exe client=drcExplorer.exe dir=" SHARENAME LIVECLIENTDIR,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_DropStoredGames::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// SSH In & Run the drop Script...
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
si.dwFlags = STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
|
||||
si.wShowWindow = SW_MINIMIZE;
|
||||
si.lpTitle = "Live Game Reset";
|
||||
si.dwXCountChars = 80;
|
||||
si.dwYCountChars = 25;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
ret = CreateProcess(NULL,"ssh2 parable@build.bone.cyan.com \"reset-live-games.sh\"",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_InstallAges::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// SSH In; Copy the Age Files from the data to the server AgeFiles folder
|
||||
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
si.dwFlags = STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
|
||||
si.wShowWindow = SW_MINIMIZE;
|
||||
si.lpTitle = "Install Ages";
|
||||
si.dwXCountChars = 80;
|
||||
si.dwYCountChars = 25;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
ret = !CreateProcess(NULL,"ssh2 parable@build.bone.cyan.com \"install-live-ages.sh\"",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_CopyTestServers::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// SSH In; Delete ~/Servers; copy ~/Servers-Test to ~/Servers
|
||||
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
si.dwFlags = STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
|
||||
si.wShowWindow = SW_MINIMIZE;
|
||||
si.lpTitle = "Copy Test Servers";
|
||||
si.dwXCountChars = 80;
|
||||
si.dwYCountChars = 25;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
switch (GetServer())
|
||||
{
|
||||
case kTest:
|
||||
ret = !CreateProcess(NULL,
|
||||
"ssh2 parable@build.bone.cyan.com \"rm -frv ~/Servers; cp -rv ~/Servers-Test ~/Servers\"",
|
||||
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
break;
|
||||
case kLast:
|
||||
ret = !CreateProcess(NULL,
|
||||
"ssh2 parable@build.bone.cyan.com \"rm -frv ~/Servers; cp -rv ~/Servers-Test-Last ~/Servers\"",
|
||||
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
break;
|
||||
case kBranch:
|
||||
ret = !CreateProcess(NULL,
|
||||
"ssh2 parable@build.bone.cyan.com \"rm -frv ~/Servers; cp -rv ~/Servers-Branch ~/Servers\"",
|
||||
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
break;
|
||||
}
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int MigrationTask_StartLiveServers::Run(HINSTANCE hInst, HWND hDlg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
// SSH In; Start the Live Servers
|
||||
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
si.dwFlags = STARTF_USECOUNTCHARS | STARTF_USESHOWWINDOW;
|
||||
si.wShowWindow = SW_MINIMIZE;
|
||||
si.lpTitle = "Start Live Servers";
|
||||
si.dwXCountChars = 80;
|
||||
si.dwYCountChars = 25;
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
ret = !CreateProcess(NULL,"ssh2 parable@build.bone.cyan.com \"start-live-servers.sh\"",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1,155 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef MIGRATION_TASK_H
|
||||
#define MIGRATION_TASK_H
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
class MigrationTask
|
||||
{
|
||||
public:
|
||||
enum Servers
|
||||
{
|
||||
kTest,
|
||||
kLast,
|
||||
kBranch
|
||||
};
|
||||
private:
|
||||
bool fEnabled;
|
||||
Servers fServer;
|
||||
public:
|
||||
MigrationTask() : fEnabled(false) {}
|
||||
|
||||
virtual char* GetName() = 0;
|
||||
virtual char* GetDescription() = 0;
|
||||
bool GetEnabled() const { return fEnabled; }
|
||||
void SetEnabled(bool val) { fEnabled = val; }
|
||||
Servers GetServer() const { return fServer; }
|
||||
void SetServer(Servers server) { fServer = server; }
|
||||
virtual int Run(HINSTANCE hInst, HWND hDlg) = 0;
|
||||
};
|
||||
|
||||
|
||||
class MigrationTask_Backup : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Backup Task"; }
|
||||
char* GetDescription() { return "Backing up Live Data and Live Servers."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
|
||||
class MigrationTask_CleanUp : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Test Data Clean-Up"; }
|
||||
char* GetDescription() { return "Clean up the test data for copying to the live server."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
|
||||
class MigrationTask_PatchBuilder : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Patch Building Task"; }
|
||||
char* GetDescription() { return "Building the patch set to upgrade the client's data."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
|
||||
class MigrationTask_DataMigration : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Data Migration Task"; }
|
||||
char* GetDescription() { return "Copying the data from the Test Server to the Live Server"; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
class MigrationTask_InstallClient : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Install the Client Files"; }
|
||||
char* GetDescription() { return "Installs the Client files from a specified directory."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
class MigrationTask_GenerateClientManifest : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Generate The Client Manifest"; }
|
||||
char* GetDescription() { return "Generates the Client Manifest from the Client Files on the Server."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
class MigrationTask_DropStoredGames : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Drop Live Stored Games"; }
|
||||
char* GetDescription() { return "Drops the Stored Games that are on the live server."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
class MigrationTask_InstallAges : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Install the Ages"; }
|
||||
char* GetDescription() { return "Installs the Ages from the live data into the Lookup Server."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
class MigrationTask_CopyTestServers : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Copy the Test Servers to Live"; }
|
||||
char* GetDescription() { return "Copy the Test server executables to the Live server."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
class MigrationTask_StartLiveServers : public MigrationTask
|
||||
{
|
||||
public:
|
||||
char* GetName() { return "Start the Live Servers"; }
|
||||
char* GetDescription() { return "Starts the Live Servers."; }
|
||||
int Run(HINSTANCE hInst, HWND hDlg);
|
||||
};
|
||||
|
||||
#endif //MIGRATION_TASK_H
|
@ -1,122 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "OptionalDialog.h"
|
||||
#include "resource.h"
|
||||
#include <windowsx.h>
|
||||
|
||||
LRESULT CALLBACK OptionalDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
|
||||
bool OptionalDialog(HINSTANCE hInstance, HWND hParent, char* desc, unsigned int timeoutsecs, bool defaultyes)
|
||||
{
|
||||
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_OPTIONALDIALOG), hParent, (DLGPROC) OptionalDialogProc);
|
||||
|
||||
ShowWindow(hWnd, SW_SHOW);
|
||||
|
||||
if (timeoutsecs > 0)
|
||||
{
|
||||
// Set up timer
|
||||
SetTimer(hWnd,WM_USER+1,timeoutsecs*1000,NULL);
|
||||
char timeStr[20];
|
||||
Static_SetText(GetDlgItem(hWnd,IDC_TIMELEFT),itoa(timeoutsecs,timeStr,10));
|
||||
}
|
||||
|
||||
Static_SetText(GetDlgItem(hWnd,IDC_DESCRIPTION),desc);
|
||||
if (defaultyes)
|
||||
{
|
||||
SetWindowLong(GetDlgItem(hWnd,IDC_BUTTON_YES),GWL_STYLE,
|
||||
GetWindowLong(GetDlgItem(hWnd,IDC_BUTTON_YES),GWL_STYLE) | BS_DEFPUSHBUTTON);
|
||||
Static_SetText(GetDlgItem(hWnd,IDC_DEFAULT),"Default: Yes");
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowLong(GetDlgItem(hWnd,IDC_BUTTON_NO),GWL_STYLE,
|
||||
GetWindowLong(GetDlgItem(hWnd,IDC_BUTTON_NO),GWL_STYLE) | BS_DEFPUSHBUTTON);
|
||||
Static_SetText(GetDlgItem(hWnd,IDC_DEFAULT),"Default: No");
|
||||
}
|
||||
|
||||
// Main message loop:
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if (!IsWindow(hWnd) || !IsDialogMessage(hWnd, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
DestroyWindow(hWnd);
|
||||
|
||||
return msg.wParam == -1 ? defaultyes : (bool)(msg.wParam);
|
||||
}
|
||||
|
||||
// Mesage handler for about box.
|
||||
LRESULT CALLBACK OptionalDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
return TRUE;
|
||||
|
||||
case WM_TIMER:
|
||||
PostQuitMessage(-1);
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_BUTTON_YES:
|
||||
PostQuitMessage(1);
|
||||
return TRUE;
|
||||
|
||||
case IDC_BUTTON_NO:
|
||||
PostQuitMessage(0);
|
||||
return TRUE;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef OPTIONAL_DIALOG_H
|
||||
#define OPTIONAL_DIALOG_H
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
bool OptionalDialog(HINSTANCE hInstance, HWND hParent, char* desc, unsigned int timeoutsecs, bool defaultyes);
|
||||
|
||||
#endif //OPTIONAL_DIALOG_H
|
@ -1,30 +0,0 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by Migration.rc
|
||||
//
|
||||
#define IDD_MIGRATION_DIALOG 102
|
||||
#define IDI_MIGRATION 107
|
||||
#define IDI_SMALL 108
|
||||
#define IDD_MAINDIALOG 129
|
||||
#define IDD_OPTIONALDIALOG 130
|
||||
#define IDC_TASKLIST 1005
|
||||
#define IDC_START 1008
|
||||
#define IDC_STOP 1009
|
||||
#define IDC_DESCRIPTION 1010
|
||||
#define IDC_BUTTON_YES 1011
|
||||
#define IDC_BUTTON_NO 1012
|
||||
#define IDC_RADIOTEST 1018
|
||||
#define IDC_RADIOLAST 1019
|
||||
#define IDC_RADIOBRANCH 1020
|
||||
#define IDC_STATIC -1
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 131
|
||||
#define _APS_NEXT_COMMAND_VALUE 32771
|
||||
#define _APS_NEXT_CONTROL_VALUE 1020
|
||||
#define _APS_NEXT_SYMED_VALUE 110
|
||||
#endif
|
||||
#endif
|
Binary file not shown.
Before Width: | Height: | Size: 318 B |
@ -1,74 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "hsTypes.h"
|
||||
|
||||
#include "../pnFactory/plCreator.h"
|
||||
|
||||
#include "plAudible.h"
|
||||
REGISTER_NONCREATABLE( plAudible );
|
||||
|
||||
#include "plDrawable.h"
|
||||
REGISTER_NONCREATABLE( plDrawable );
|
||||
|
||||
#include "plPhysical.h"
|
||||
REGISTER_NONCREATABLE( plPhysical );
|
||||
|
||||
#include "plgDispatch.h"
|
||||
REGISTER_NONCREATABLE( plDispatchBase );
|
||||
|
||||
#include "../pnDispatch/pnDispatchCreatable.h"
|
||||
#include "../pnKeyedObject/pnKeyedObjectCreatable.h"
|
||||
#include "../pnMessage/pnMessageCreatable.h"
|
||||
#include "../pnModifier/pnModifierCreatable.h"
|
||||
#include "../pnNetCommon/pnNetCommonCreatable.h"
|
||||
#include "../plNetMessage/plNetMessageCreatable.h"
|
||||
#include "../pnTimer/pnTimerCreatable.h"
|
||||
#include "../plVault/plVaultCreatable.h"
|
||||
#include "../plNetCommon/plNetCommonCreatable.h"
|
||||
|
||||
#include "../plResMgr/plResMgrCreatable.h"
|
||||
|
||||
#include "../plMessage/plResMgrHelperMsg.h"
|
||||
REGISTER_CREATABLE(plResMgrHelperMsg);
|
||||
|
||||
#include "../plUnifiedTime/plUnifiedTime.h"
|
||||
REGISTER_CREATABLE( plUnifiedTime );
|
@ -1,445 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// plDatMerger - Command line utility app that takes multiple dat files
|
||||
// and merges them into one
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
#include "hsUtils.h"
|
||||
#include "hsTimer.h"
|
||||
#include "../plFile/hsFiles.h"
|
||||
#include "plRawResManager.h"
|
||||
#include "plRawPageAccessor.h"
|
||||
#include "../plResMgr/plRegistryDiskSource.h"
|
||||
#include "../plResMgr/plRegistryDiskMergedSourceData.h"
|
||||
#include "../plResMgr/plRegistryHelpers.h"
|
||||
#include "../plResMgr/plRegistry.h"
|
||||
#include "../plResMgr/plRegistryNode.h"
|
||||
#include "../plResMgr/plResMgrSettings.h"
|
||||
#include "../plResMgr/plPageInfo.h"
|
||||
#include "../plAgeDescription/plAgeDescription.h"
|
||||
#include "../plFile/hsFiles.h"
|
||||
#include "../plFile/plFileUtils.h"
|
||||
#include "../pnKeyedObject/plKey.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
//// Tiny String Filter Class ////////////////////////////////////////////////
|
||||
|
||||
class plStrFilter
|
||||
{
|
||||
protected:
|
||||
|
||||
hsBool fWildCardSuffix, fInvert;
|
||||
char *fStr;
|
||||
|
||||
plStrFilter *fChapFilter, *fPageFilter;
|
||||
|
||||
|
||||
hsBool IPass( const char *string )
|
||||
{
|
||||
if( fWildCardSuffix )
|
||||
{
|
||||
if( strnicmp( fStr, string, strlen( fStr ) ) == 0 )
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( stricmp( fStr, string ) == 0 )
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public:
|
||||
plStrFilter() { fWildCardSuffix = fInvert = false; fStr = nil; fChapFilter = fPageFilter = nil; }
|
||||
|
||||
plStrFilter( const char *initLine )
|
||||
{
|
||||
if( initLine[ 0 ] == '-' )
|
||||
{
|
||||
fInvert = true;
|
||||
initLine++;
|
||||
}
|
||||
else if( initLine[ 0 ] == '+' )
|
||||
{
|
||||
initLine++;
|
||||
fInvert = false;
|
||||
}
|
||||
else
|
||||
fInvert = false;
|
||||
|
||||
fWildCardSuffix = false;
|
||||
fStr = hsStrcpy( initLine );
|
||||
|
||||
fChapFilter = fPageFilter = nil;
|
||||
char *comma = strchr( fStr, ',' );
|
||||
if( comma != nil )
|
||||
{
|
||||
char *next = comma + 1;
|
||||
*comma = 0;
|
||||
comma = strchr( next, ',' );
|
||||
if( comma != nil )
|
||||
{
|
||||
fPageFilter = new plStrFilter( comma + 1 );
|
||||
*comma = 0;
|
||||
}
|
||||
|
||||
fChapFilter = new plStrFilter( next );
|
||||
}
|
||||
|
||||
if( fStr[ strlen( fStr ) - 1 ] == '*' )
|
||||
{
|
||||
fWildCardSuffix = true;
|
||||
fStr[ strlen( fStr ) - 1 ] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
~plStrFilter()
|
||||
{
|
||||
delete [] fStr;
|
||||
delete fChapFilter;
|
||||
delete fPageFilter;
|
||||
}
|
||||
|
||||
hsBool Pass( const char *string )
|
||||
{
|
||||
hsBool ret = IPass( string );
|
||||
|
||||
if( fInvert )
|
||||
ret = !ret;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
hsBool Pass( const plPageInfo &page )
|
||||
{
|
||||
hsBool ret = IPass( page.GetAge() ) &&
|
||||
fChapFilter->IPass( page.GetChapter() ) &&
|
||||
fPageFilter->IPass( page.GetPage() );
|
||||
if( fInvert )
|
||||
ret = !ret;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static hsBool Passes( const char *string, hsTArray<plStrFilter *> &filters )
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
|
||||
for( i = 0; i < filters.GetCount(); i++ )
|
||||
{
|
||||
if( !filters[ i ]->Pass( string ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static hsBool Passes( const plPageInfo &page, hsTArray<plStrFilter *> &filters )
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
|
||||
for( i = 0; i < filters.GetCount(); i++ )
|
||||
{
|
||||
if( !filters[ i ]->Pass( page ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
//// Globals /////////////////////////////////////////////////////////////////
|
||||
|
||||
plRawResManager *gResManager = nil;
|
||||
|
||||
char gDatDirectory[ kFolderIterator_MaxPath ] = ".";
|
||||
char gDestFileName[ kFolderIterator_MaxPath ];
|
||||
|
||||
hsTArray<plStrFilter *> fPageFilters;
|
||||
hsTArray<plStrFilter *> *fCurrFilterList = nil;
|
||||
|
||||
hsTArray<plRegistryPageNode *> fSourcePages;
|
||||
|
||||
plRegistryDiskMergedSourceData *gDestMergeData = nil;
|
||||
|
||||
|
||||
//// PrintHelp ///////////////////////////////////////////////////////////////
|
||||
|
||||
int PrintHelp( void )
|
||||
{
|
||||
puts( "" );
|
||||
puts( "Usage:\tplDatMerger [oldDir] [newDir] [patchDir] |-na| |-np| |-fp| |-lAgeName| |-anewAgeDir|" );
|
||||
puts( "Where:" );
|
||||
puts( "\toldDir is the directory containing the old data files" );
|
||||
puts( "\tnewDir is the directory containing the new data files" );
|
||||
puts( "\tpatchDir is the directory where the patch files will go" );
|
||||
puts( "\t WARNING: This should point to a 'patches'" );
|
||||
puts( "\t subdir under 'newDir'; don't use anything else" );
|
||||
puts( "\t unless you REALLY know what you're doing." );
|
||||
puts( "\t-na is a flag that keeps the builder from updating the" );
|
||||
puts( "\t version numbers in the age files (for generating" );
|
||||
puts( "\t previous patch versions, for example." );
|
||||
puts( "\t-np is a flag that keeps the builder from actually creating the" );
|
||||
puts( "\t patch files. Usually helpful when you want to" );
|
||||
puts( "\t only update version numbers in the dat files" );
|
||||
puts( "\t and the age files. -na and -np are mutually" );
|
||||
puts( "\t exclusive." );
|
||||
puts( "\t-fp forces writing of entire objects instead of just difference" );
|
||||
puts( "\t buffers, for debugging purposes." );
|
||||
puts( "\t-l limits processing to the single age given. Don't put a space between the l." );
|
||||
puts( "\t and the age name." );
|
||||
puts( "\t-a specifies a different directory to put the modified age files in. If not" );
|
||||
puts( "\t specified, age files are overwritten in the newDir." );
|
||||
puts( "" );
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
hsBool ReadConfig( const char *filename )
|
||||
{
|
||||
hsUNIXStream config;
|
||||
|
||||
|
||||
if( !config.Open( filename, "rt" ) )
|
||||
return false;
|
||||
|
||||
char line[ 512 ];
|
||||
int lineNum = 1;
|
||||
|
||||
while( config.ReadLn( line, sizeof( line ) ) )
|
||||
{
|
||||
// Switch based on command
|
||||
if( stricmp( line, "[pageFilters]" ) == 0 )
|
||||
fCurrFilterList = &fPageFilters;
|
||||
else if( fCurrFilterList != nil )
|
||||
{
|
||||
fCurrFilterList->Append( new plStrFilter( line ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
char *tok = strtok( line, " \t=" );
|
||||
if( tok != nil )
|
||||
{
|
||||
if( stricmp( tok, "datDir" ) == 0 )
|
||||
{
|
||||
tok = strtok( nil, " \t=" );
|
||||
if( tok != nil )
|
||||
strcpy( gDatDirectory, tok );
|
||||
else
|
||||
{
|
||||
printf( "Parse error in init file, line %d", lineNum );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if( stricmp( tok, "destFile" ) == 0 )
|
||||
{
|
||||
tok = strtok( nil, "\n\r" );
|
||||
if( tok == nil )
|
||||
{
|
||||
printf( "Parse error in init file, line %d", lineNum );
|
||||
return false;
|
||||
}
|
||||
strcpy( gDestFileName, tok );
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Parse error in init file, line %d", lineNum );
|
||||
}
|
||||
}
|
||||
}
|
||||
lineNum++;
|
||||
}
|
||||
|
||||
config.Close();
|
||||
return true;
|
||||
}
|
||||
|
||||
//// Our Main Page Iterator //////////////////////////////////////////////////
|
||||
|
||||
class plPageStuffer : public plRegistryPageIterator
|
||||
{
|
||||
public:
|
||||
|
||||
virtual hsBool EatPage( plRegistryPageNode *page )
|
||||
{
|
||||
const plPageInfo &info = page->GetPageInfo();
|
||||
if( plStrFilter::Passes( info, fPageFilters ) )
|
||||
fSourcePages.Append( page );
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
//// IShutdown ///////////////////////////////////////////////////////////////
|
||||
|
||||
void IShutdown( int retCode )
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
for( i = 0; i < fPageFilters.GetCount(); i++ )
|
||||
delete fPageFilters[ i ];
|
||||
|
||||
delete gDestMergeData;
|
||||
|
||||
hsgResMgr::Shutdown();
|
||||
|
||||
if( retCode == 0 )
|
||||
printf( "Finished!\n" );
|
||||
else
|
||||
exit( retCode );
|
||||
}
|
||||
|
||||
//// main ////////////////////////////////////////////////////////////////////
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
puts( "-----------------------------------------------------" );
|
||||
puts( "plDatMerger - Plasma 2 dat file merging utility" );
|
||||
puts( "-----------------------------------------------------" );
|
||||
|
||||
if( argc < 1 || argc > 8 )
|
||||
return PrintHelp();
|
||||
|
||||
// Read our config
|
||||
ReadConfig( argv[ 1 ] );
|
||||
|
||||
plResMgrSettings::Get().SetFilterNewerPageVersions( false );
|
||||
plResMgrSettings::Get().SetFilterOlderPageVersions( false );
|
||||
|
||||
// Init our special resMgr
|
||||
puts( "Initializing resManager..." );
|
||||
gResManager = new plRawResManager;
|
||||
hsgResMgr::Init( gResManager );
|
||||
|
||||
// Load the registry in to work with
|
||||
printf( "Loading registry from directory \"%s\"...\n", gDatDirectory );
|
||||
gResManager->AddSource( new plRegistryDiskSource( gDatDirectory ) );
|
||||
|
||||
// Iterate and collect pages to merge
|
||||
printf( "Collecting pages...\n" );
|
||||
plPageStuffer pageIter;
|
||||
gResManager->IterateAllPages( &pageIter );
|
||||
|
||||
if( fSourcePages.GetCount() == 0 )
|
||||
{
|
||||
puts( "ERROR: No source pages found to merge!" );
|
||||
IShutdown( -1 );
|
||||
}
|
||||
|
||||
|
||||
// Create a merged data source to represent our dest page
|
||||
printf( "Merging %d pages to file(s) %s...\n", fSourcePages.GetCount(), gDestFileName );
|
||||
|
||||
gDestMergeData = new plRegistryDiskMergedSourceData( gDestFileName );
|
||||
gDestMergeData->SetNumEntries( fSourcePages.GetCount() );
|
||||
|
||||
// Open the dest merged streams and write out our initial, incorrect, entry table so we can get positions right
|
||||
hsStream *destIdxStream = gDestMergeData->WriteEntries( true );
|
||||
hsStream *destDatStream = gDestMergeData->OpenData( (uint32_t)-1, "wb" );
|
||||
|
||||
uint32_t i, bytesRead;
|
||||
static uint8_t scratchBuffer[ 1024 * 64 ]; // 32k in size
|
||||
for( i = 0; i < fSourcePages.GetCount(); i++ )
|
||||
{
|
||||
printf( " Merging %s>%s...\n", fSourcePages[ i ]->GetPageInfo().GetAge(), fSourcePages[ i ]->GetPageInfo().GetPage() );
|
||||
|
||||
// For each page, we open the source streams, read the ENTIRE thing in, front to back, and append it
|
||||
// to the dest stream. We then update the entry in the mergeData to reflect our info
|
||||
plMSDEntry &entry = gDestMergeData->GetEntry( i );
|
||||
|
||||
entry.fIdxOffset = destIdxStream->GetPosition();
|
||||
entry.fDatOffset = destDatStream->GetPosition();
|
||||
|
||||
/// Actually transfer the data
|
||||
plRegistrySource *srcSource = fSourcePages[ i ]->GetSource();
|
||||
|
||||
// Idx first
|
||||
hsStream *srcStream = srcSource->OpenIndexStream( fSourcePages[ i ] );
|
||||
uint32_t size = srcStream->GetEOF();
|
||||
do
|
||||
{
|
||||
bytesRead = srcStream->Read( size > sizeof( scratchBuffer ) ? sizeof( scratchBuffer ) : size, scratchBuffer );
|
||||
if( bytesRead > 0 )
|
||||
destIdxStream->Write( bytesRead, scratchBuffer );
|
||||
size -= bytesRead;
|
||||
} while( size > 0 && bytesRead > 0 );
|
||||
srcSource->CloseIndexStream( fSourcePages[ i ] );
|
||||
|
||||
// Now dat
|
||||
srcStream = srcSource->OpenDataStream( fSourcePages[ i ] );
|
||||
size = srcStream->GetEOF();
|
||||
do
|
||||
{
|
||||
bytesRead = srcStream->Read( size > sizeof( scratchBuffer ) ? sizeof( scratchBuffer ) : size, scratchBuffer );
|
||||
if( bytesRead > 0 )
|
||||
destDatStream->Write( bytesRead, scratchBuffer );
|
||||
size -= bytesRead;
|
||||
} while( size > 0 && bytesRead > 0 );
|
||||
srcSource->CloseDataStream( fSourcePages[ i ] );
|
||||
|
||||
// Update lengths
|
||||
entry.fIdxLength = destIdxStream->GetPosition() - entry.fIdxOffset;
|
||||
entry.fDatLength = destDatStream->GetPosition() - entry.fDatOffset;
|
||||
}
|
||||
|
||||
printf( "Closing destination files...\n" );
|
||||
destIdxStream->Close();
|
||||
destDatStream->Close();
|
||||
|
||||
// Re-write the entry table, now that it's correct
|
||||
printf( "Updating merged table...\n" );
|
||||
gDestMergeData->WriteEntries( false );
|
||||
|
||||
puts( "Shutting down..." );
|
||||
IShutdown( 0 );
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,225 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// plRawPageAccessor - Dangerous little class that lets you take a
|
||||
// plRegistryPageNode and load the objects in raw (i.e.
|
||||
// as block memory buffers).
|
||||
// This should NOT be used in any normal app, only
|
||||
// utility apps that don't want to load objects in
|
||||
// normally (which basically means if you're not mcn,
|
||||
// don't use this!)
|
||||
//
|
||||
//// Why We're Bad ///////////////////////////////////////////////////////////
|
||||
//
|
||||
// To store all the raw buffers, we stuff them as pointers into the keys
|
||||
// themselves. This is Way Bad(tm) because those pointers are expecting
|
||||
// hsKeyedObjects, and what we're giving them certainly ain't those.
|
||||
// This is why it's only safe to use this class in a very small, controlled
|
||||
// environment, one where we know the keys won't be accessed in a normal
|
||||
// fashion so we know nobody will try to use our pointers in a bad way.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
#include "hsResMgr.h"
|
||||
#include "plRawKeyedObject.h"
|
||||
#include "../pnKeyedObject/plKeyImp.h"
|
||||
|
||||
|
||||
//// Tiny Yet Now Famous Key Hack ////////////////////////////////////////////
|
||||
|
||||
class plPublicKeyImp : public plKeyImp
|
||||
{
|
||||
public:
|
||||
|
||||
void SetObjectPtrDirect( hsKeyedObject *obj )
|
||||
{
|
||||
fObjectPtr = obj;
|
||||
}
|
||||
|
||||
void SetAsEmpty( void )
|
||||
{
|
||||
fStartPos = (uint32_t)-1;
|
||||
fDataLen = (uint32_t)-1;
|
||||
}
|
||||
|
||||
void SetStartPosFromStream( hsStream *stream )
|
||||
{
|
||||
fStartPos = stream->GetPosition();
|
||||
}
|
||||
|
||||
void SetLengthFromStream( hsStream *stream )
|
||||
{
|
||||
fDataLen = stream->GetPosition() - fStartPos;
|
||||
}
|
||||
};
|
||||
|
||||
//// Constructor/Destructor //////////////////////////////////////////////////
|
||||
|
||||
plRawKeyedObject::plRawKeyedObject()
|
||||
{
|
||||
fSrcKey = nil;
|
||||
fBuffer = nil;
|
||||
fBufferSize = 0;
|
||||
}
|
||||
|
||||
plRawKeyedObject::plRawKeyedObject( const plKey &key, uint32_t size, uint8_t *data )
|
||||
{
|
||||
fSrcKey = key;
|
||||
( (plPublicKeyImp *)(plKeyImp *)key )->SetObjectPtrDirect( this );
|
||||
|
||||
fBuffer = nil;
|
||||
fBufferSize = 0;
|
||||
|
||||
SetBuffer( size, data );
|
||||
}
|
||||
|
||||
plRawKeyedObject::~plRawKeyedObject()
|
||||
{
|
||||
if( fSrcKey != nil )
|
||||
{
|
||||
( (plPublicKeyImp *)(plKeyImp *)fSrcKey )->SetObjectPtrDirect( nil );
|
||||
fSrcKey = nil;
|
||||
}
|
||||
|
||||
delete [] fBuffer;
|
||||
}
|
||||
|
||||
void plRawKeyedObject::SetBuffer( uint32_t size, uint8_t *data )
|
||||
{
|
||||
delete [] fBuffer;
|
||||
|
||||
if( data == nil )
|
||||
{
|
||||
fBufferSize = 0;
|
||||
fBuffer = nil;
|
||||
return;
|
||||
}
|
||||
|
||||
fBufferSize = size;
|
||||
fBuffer = new uint8_t[ size ];
|
||||
memcpy( fBuffer, data, size );
|
||||
}
|
||||
|
||||
void plRawKeyedObject::SetKey( plKey k )
|
||||
{
|
||||
if( fSrcKey != nil )
|
||||
{
|
||||
( (plPublicKeyImp *)(plKeyImp *)fSrcKey )->SetObjectPtrDirect( nil );
|
||||
}
|
||||
|
||||
fSrcKey = k;
|
||||
if( fSrcKey != nil )
|
||||
{
|
||||
( (plPublicKeyImp *)(plKeyImp *)fSrcKey )->SetObjectPtrDirect( this );
|
||||
}
|
||||
}
|
||||
|
||||
void plRawKeyedObject::MarkAsEmpty( plKey &key )
|
||||
{
|
||||
( (plPublicKeyImp *)(plKeyImp *)key )->SetAsEmpty();
|
||||
}
|
||||
|
||||
void plRawKeyedObject::Write( hsStream *stream )
|
||||
{
|
||||
// BEFORE we write out, somewhere at the top of our buffer is the key to ourselves
|
||||
// that all hsKeyedObjects write out as part of their Write() function. We need
|
||||
// to REPLACE that key with our new key, since our location has now changed. Note
|
||||
// that this will ONLY work if our location changes, NOT if our name changes,
|
||||
// because we're relying on the fact that the written size of our key is not
|
||||
// going to change!!!
|
||||
{
|
||||
hsWriteOnlyStream replaceStream( fBufferSize, fBuffer );
|
||||
|
||||
// Here's the part that REALLY sucks, 'cause it assumes our written format will never change!!!!
|
||||
// It ALSO assumes, VERY dangerously, that ReadSwap16() will ALWAYS read a size uint16_t
|
||||
|
||||
replaceStream.SetPosition( sizeof( uint16_t ) ); // Get past creatable class that resManager writes out
|
||||
|
||||
hsgResMgr::ResMgr()->WriteKey( &replaceStream, fSrcKey, hsResMgr::kWriteNoCheck );
|
||||
}
|
||||
|
||||
( (plPublicKeyImp *)(plKeyImp *)fSrcKey )->SetStartPosFromStream( stream );
|
||||
|
||||
stream->Write( fBufferSize, fBuffer );
|
||||
|
||||
( (plPublicKeyImp *)(plKeyImp *)fSrcKey )->SetLengthFromStream( stream );
|
||||
}
|
||||
|
||||
|
||||
//// Warning Stubs ///////////////////////////////////////////////////////////
|
||||
|
||||
void plRawKeyedObject::Validate()
|
||||
{
|
||||
hsAssert( false, "Invalid call on plRawKeyedObject" );
|
||||
}
|
||||
|
||||
hsBool plRawKeyedObject::IsFinal()
|
||||
{
|
||||
hsAssert( false, "Invalid call on plRawKeyedObject" );
|
||||
return false;
|
||||
}
|
||||
|
||||
void plRawKeyedObject::Read(hsStream *s, hsResMgr *mgr )
|
||||
{
|
||||
hsAssert( false, "Invalid call on plRawKeyedObject" );
|
||||
}
|
||||
|
||||
void plRawKeyedObject::Write(hsStream *s, hsResMgr *mgr )
|
||||
{
|
||||
hsAssert( false, "Invalid call on plRawKeyedObject" );
|
||||
}
|
||||
|
||||
hsBool plRawKeyedObject::MsgReceive( plMessage *msg )
|
||||
{
|
||||
hsAssert( false, "Invalid call on plRawKeyedObject" );
|
||||
return false;
|
||||
}
|
||||
|
||||
hsKeyedObject *plRawKeyedObject::GetSharedObject()
|
||||
{
|
||||
hsAssert( false, "Invalid call on plRawKeyedObject" );
|
||||
return nil;
|
||||
}
|
||||
|
@ -1,92 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// plRawKeyedObject - A fake keyed object type that really just stores itself
|
||||
// as a raw data buffer. See plRawPageAccessor for details.
|
||||
//
|
||||
// Derived from hsKeyedObject so we can try to put some
|
||||
// warning asserts in where needed.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _plRawKeyedObject_h
|
||||
#define _plRawKeyedObject_h
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
#include "../pnKeyedObject/hsKeyedObject.h"
|
||||
|
||||
class plRawKeyedObject : public hsKeyedObject
|
||||
{
|
||||
protected:
|
||||
|
||||
plKey fSrcKey;
|
||||
uint32_t fBufferSize;
|
||||
uint8_t *fBuffer;
|
||||
|
||||
public:
|
||||
|
||||
plRawKeyedObject();
|
||||
plRawKeyedObject( const plKey &key, uint32_t size, uint8_t *buffer );
|
||||
virtual ~plRawKeyedObject();
|
||||
|
||||
void SetBuffer( uint32_t size, uint8_t *data );
|
||||
uint32_t GetBufferSize( void ) const { return fBufferSize; }
|
||||
uint8_t *GetBuffer( void ) const { return fBuffer; }
|
||||
|
||||
void SetKey( plKey k );
|
||||
void Write( hsStream *stream );
|
||||
|
||||
static void MarkAsEmpty( plKey &key );
|
||||
|
||||
// None of the following should ever be called (hence our asserts)
|
||||
virtual void Validate();
|
||||
virtual hsBool IsFinal();
|
||||
virtual void Read(hsStream *s, hsResMgr *mgr );
|
||||
virtual void Write(hsStream *s, hsResMgr *mgr );
|
||||
virtual hsBool MsgReceive( plMessage *msg );
|
||||
virtual hsKeyedObject *GetSharedObject();
|
||||
};
|
||||
|
||||
|
||||
#endif //_plRawKeyedObject_h
|
@ -1,240 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// plRawPageAccessor - Dangerous little class that lets you take a
|
||||
// plRegistryPageNode and load the objects in raw (i.e.
|
||||
// as block memory buffers).
|
||||
// This should NOT be used in any normal app, only
|
||||
// utility apps that don't want to load objects in
|
||||
// normally (which basically means if you're not mcn,
|
||||
// don't use this!)
|
||||
//
|
||||
//// Why We're Bad ///////////////////////////////////////////////////////////
|
||||
//
|
||||
// To store all the raw buffers, we stuff them as pointers into the keys
|
||||
// themselves. This is Way Bad(tm) because those pointers are expecting
|
||||
// hsKeyedObjects, and what we're giving them certainly ain't those.
|
||||
// This is why it's only safe to use this class in a very small, controlled
|
||||
// environment, one where we know the keys won't be accessed in a normal
|
||||
// fashion so we know nobody will try to use our pointers in a bad way.
|
||||
//
|
||||
// Also assumes the current global resManager is a plRawResManager!
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
#include "plRawPageAccessor.h"
|
||||
#include "plRawResManager.h"
|
||||
#include "plRawKeyedObject.h"
|
||||
|
||||
#include "hsTemplates.h"
|
||||
#include "../pnKeyedObject/plKeyImp.h"
|
||||
#include "../plResMgr/plRegistryNode.h"
|
||||
#include "../plResMgr/plRegistryHelpers.h"
|
||||
#include "../plResMgr/plRegistrySource.h"
|
||||
|
||||
|
||||
//// Constructor/Destructor //////////////////////////////////////////////////
|
||||
|
||||
plRawPageAccessor::plRawPageAccessor( plRegistryPageNode *source, hsBool read )
|
||||
{
|
||||
fSource = source;
|
||||
if( read )
|
||||
ReadFromSource();
|
||||
}
|
||||
|
||||
plRawPageAccessor::~plRawPageAccessor()
|
||||
{
|
||||
Release();
|
||||
}
|
||||
|
||||
//// Iterators ///////////////////////////////////////////////////////////////
|
||||
|
||||
class plRawReaderIter : public plRegistryKeyIterator
|
||||
{
|
||||
public:
|
||||
|
||||
virtual hsBool EatKey( plKey key )
|
||||
{
|
||||
plRawResManager *mgr = (plRawResManager *)hsgResMgr::ResMgr();
|
||||
|
||||
uint32_t len;
|
||||
plKeyImp *imp = (plKeyImp *)key;
|
||||
uint8_t *buffer = mgr->ReadObjectBuffer( imp, len );
|
||||
|
||||
// This will also set the object ptr in the key
|
||||
plRawKeyedObject *obj = new plRawKeyedObject( key, len, buffer );
|
||||
delete [] buffer; // rawKeyedObject keeps a copy
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class plRawWriterIter : public plRegistryKeyIterator
|
||||
{
|
||||
hsStream *fStream;
|
||||
|
||||
public:
|
||||
|
||||
plRawWriterIter( hsStream *stream ) : fStream( stream ) {}
|
||||
|
||||
virtual hsBool EatKey( plKey key )
|
||||
{
|
||||
plRawResManager *mgr = (plRawResManager *)hsgResMgr::ResMgr();
|
||||
|
||||
plRawKeyedObject *obj = (plRawKeyedObject *)key->ObjectIsLoaded();
|
||||
if( obj == nil )
|
||||
{
|
||||
// Mark the key as not written
|
||||
plRawKeyedObject::MarkAsEmpty( key );
|
||||
return true;
|
||||
}
|
||||
|
||||
obj->Write( fStream );
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class plRawReleaseIter : public plRegistryKeyIterator
|
||||
{
|
||||
public:
|
||||
|
||||
virtual hsBool EatKey( plKey key )
|
||||
{
|
||||
plRawKeyedObject *obj = (plRawKeyedObject *)key->ObjectIsLoaded();
|
||||
delete obj;
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//// Various Functions ///////////////////////////////////////////////////////
|
||||
|
||||
void plRawPageAccessor::ReadFromSource( void )
|
||||
{
|
||||
if( !fSource->IsLoaded() )
|
||||
fSource->LoadKeysFromSource();
|
||||
|
||||
plRawReaderIter iter;
|
||||
fSource->IterateKeys( &iter );
|
||||
}
|
||||
|
||||
void plRawPageAccessor::WriteToSource( void )
|
||||
{
|
||||
if( fSource->GetSource() == nil )
|
||||
{
|
||||
hsAssert( false, "Unable to write accessor to disk; no source defined!" );
|
||||
return;
|
||||
}
|
||||
|
||||
// Write out objects first
|
||||
hsStream *stream = fSource->GetSource()->OpenDataStream( fSource, true );
|
||||
if( stream == nil )
|
||||
return;
|
||||
|
||||
plRawWriterIter writer( stream );
|
||||
fSource->IterateKeys( &writer );
|
||||
|
||||
fSource->GetSource()->CloseDataStream( fSource );
|
||||
|
||||
// Now write out the keys
|
||||
fSource->WriteKeysToSource();
|
||||
}
|
||||
|
||||
void plRawPageAccessor::Release( void )
|
||||
{
|
||||
plRawReleaseIter iter;
|
||||
fSource->IterateKeys( &iter );
|
||||
|
||||
fSource->ClearKeyLists();
|
||||
}
|
||||
|
||||
void plRawPageAccessor::AddCopy( const plKey &origKey )
|
||||
{
|
||||
plRawResManager *mgr = (plRawResManager *)hsgResMgr::ResMgr();
|
||||
plKey newKey;
|
||||
|
||||
|
||||
// Get the source object
|
||||
plRawKeyedObject *srcObj = (plRawKeyedObject *)origKey->ObjectIsLoaded();
|
||||
|
||||
// Construct a new uoid
|
||||
plUoid newUoid( fSource->GetPageInfo().GetLocation(),
|
||||
origKey->GetUoid().GetClassType(),
|
||||
origKey->GetUoid().GetObjectName() );
|
||||
|
||||
// Does it already exist?
|
||||
newKey = mgr->FindKey( newUoid );
|
||||
if( newKey != nil )
|
||||
{
|
||||
// Yup, gotta get rid of old object (if there is one)
|
||||
plRawKeyedObject *obj = (plRawKeyedObject *)newKey->ObjectIsLoaded();
|
||||
delete obj;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Nope, gotta create key first
|
||||
newKey = mgr->NewBlankKey( newUoid );
|
||||
}
|
||||
|
||||
// Force the key's uoid to the right uoid, now that it's in the right page
|
||||
( (plKeyImp *)newKey )->SetUoid( origKey->GetUoid() );
|
||||
|
||||
// Assign a new buffer to the key
|
||||
if( srcObj != nil )
|
||||
{
|
||||
// Will set obj pointer in key
|
||||
plRawKeyedObject *obj = new plRawKeyedObject( newKey, srcObj->GetBufferSize(), srcObj->GetBuffer() );
|
||||
}
|
||||
}
|
||||
|
||||
void plRawPageAccessor::UpdateDataVersion( plRegistryPageNode *from )
|
||||
{
|
||||
plPageInfo &orig = from->GetPageInfo();
|
||||
|
||||
fSource->GetPageInfo().SetVersion( orig.GetMajorVersion(), orig.GetMinorVersion() );
|
||||
fSource->GetPageInfo().SetReleaseVersion( orig.GetReleaseVersion() );
|
||||
}
|
||||
|
@ -1,85 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// plRawPageAccessor - Dangerous little class that lets you take a
|
||||
// plRegistryPageNode and load the objects in raw (i.e.
|
||||
// as block memory buffers).
|
||||
// This should NOT be used in any normal app, only
|
||||
// utility apps that don't want to load objects in
|
||||
// normally (which basically means if you're not mcn,
|
||||
// don't use this!)
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _plRawPageAccessor_h
|
||||
#define _plRawPageAccessor_h
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
|
||||
class plRegistryPageNode;
|
||||
class plKey;
|
||||
|
||||
class plRawPageAccessor
|
||||
{
|
||||
protected:
|
||||
|
||||
plRegistryPageNode *fSource;
|
||||
|
||||
public:
|
||||
|
||||
plRawPageAccessor( plRegistryPageNode *source, hsBool read = true );
|
||||
virtual ~plRawPageAccessor();
|
||||
|
||||
void ReadFromSource( void );
|
||||
void WriteToSource( void );
|
||||
void Release( void );
|
||||
|
||||
void UpdateDataVersion( plRegistryPageNode *from );
|
||||
|
||||
void AddCopy( const plKey &origKey );
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif //_plRawPageAccessor_h
|
@ -1,132 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// plRawResManager - Small public resManager thingy for reading/writing
|
||||
// objects raw.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
#include "plRawResManager.h"
|
||||
|
||||
#include "../plResMgr/plRegistry.h"
|
||||
#include "../plResMgr/plPageInfo.h"
|
||||
#include "../plResMgr/plRegistrySource.h"
|
||||
#include "../plResMgr/plRegistryNode.h"
|
||||
#include "../plResMgr/plRegistryHelpers.h"
|
||||
#include "../pnKeyedObject/plKeyImp.h"
|
||||
|
||||
|
||||
plRegistryPageNode *plRawResManager::FindPage( const char *age, const char *chapter, const char *page )
|
||||
{
|
||||
return fRegistry->FindPage( age, chapter, page );
|
||||
}
|
||||
|
||||
plRegistryPageNode *plRawResManager::CreatePage( const plPageInfo &info )
|
||||
{
|
||||
plRegistryPageNode *page = fRegistry->CreatePage( info.GetLocation(), info.GetAge(), info.GetChapter(), info.GetPage() );
|
||||
|
||||
if( page != nil )
|
||||
{
|
||||
page->SetLoaded( true ); // We're "loaded", i.e. constructing this at runtime
|
||||
fIOSources[ 0 ]->AddLocToSource( page );
|
||||
}
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
uint8_t *plRawResManager::ReadObjectBuffer( plKeyImp *pKey, uint32_t &retBuffLength )
|
||||
{
|
||||
uint8_t *buffer = nil;
|
||||
|
||||
|
||||
hsAssert( pKey, "Null Key" );
|
||||
hsAssert( pKey->GetStartPos() != (uint32_t)-1, "Missing StartPos" );
|
||||
hsAssert( pKey->GetDataLen() != (uint32_t)-1, "Missing Data Length" );
|
||||
|
||||
if( pKey->GetStartPos() == (uint32_t)-1 || pKey->GetDataLen() == (uint32_t)-1 )
|
||||
{
|
||||
// Try to recover from this by just not reading an object
|
||||
retBuffLength = 0;
|
||||
return nil;
|
||||
}
|
||||
|
||||
plRegistryDataStream *dataStream = fRegistry->OpenPageDataStream( pKey->GetUoid().GetLocation(), false );
|
||||
|
||||
if( dataStream != nil && dataStream->GetStream() != nil )
|
||||
{
|
||||
hsStream *stream = dataStream->GetStream();
|
||||
|
||||
uint32_t oldPos = stream->GetPosition();
|
||||
stream->SetPosition( pKey->GetStartPos() );
|
||||
|
||||
buffer = new uint8_t[ pKey->GetDataLen() ];
|
||||
if( buffer != nil )
|
||||
{
|
||||
*( (uint32_t *)buffer ) = pKey->GetDataLen();
|
||||
stream->Read( pKey->GetDataLen(), (uint8_t *)buffer );
|
||||
retBuffLength = pKey->GetDataLen();
|
||||
}
|
||||
else
|
||||
retBuffLength = 0;
|
||||
|
||||
// Restore old position now
|
||||
stream->SetPosition( oldPos );
|
||||
}
|
||||
delete dataStream;
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
plKey plRawResManager::NewBlankKey( const plUoid &newUoid )
|
||||
{
|
||||
plKeyImp *newKey = new plKeyImp;
|
||||
|
||||
|
||||
newKey->SetUoid( newUoid );
|
||||
fRegistry->AddKey( newKey );
|
||||
|
||||
plKey keyPtr = plKey::Make( newKey );
|
||||
return keyPtr;
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// plRawResManager - Small public resManager thingy for reading/writing
|
||||
// objects raw.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _plRawResManager_h
|
||||
#define _plRawResManager_h
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
#include "../plResMgr/plResManager.h"
|
||||
|
||||
class plPageInfo;
|
||||
class plKeyImp;
|
||||
|
||||
class plRawResManager : public plResManager
|
||||
{
|
||||
public:
|
||||
|
||||
plRegistryPageNode *FindPage( const char *age, const char *chapter, const char *page );
|
||||
plRegistryPageNode *CreatePage( const plPageInfo &info );
|
||||
|
||||
uint8_t *ReadObjectBuffer( plKeyImp *key, uint32_t &retLength );
|
||||
|
||||
plKey NewBlankKey( const plUoid &newUoid );
|
||||
};
|
||||
|
||||
|
||||
#endif //_plRawResManager_h
|
Reference in New Issue
Block a user