using System;
using System.Collections.Generic;
using NTERA.EmuEra.Game.EraEmu.GameProc;
using NTERA.EmuEra.Game.EraEmu.Sub;
namespace NTERA.EmuEra.Game.EraEmu.GameData.Variable
{
///
/// 変数全部
///
internal sealed partial class VariableData : IDisposable
{
readonly Int64[] dataInteger;
readonly string[] dataString;
readonly Int64[][] dataIntegerArray;
readonly string[][] dataStringArray;
readonly Int64[][,] dataIntegerArray2D;
readonly string[][,] dataStringArray2D;
readonly Int64[][, ,] dataIntegerArray3D;
readonly string[][, ,] dataStringArray3D;
//readonly VariableLocal localVars;
//readonly VariableLocal localString;
//readonly VariableLocal argVars;
//readonly VariableLocal argString;
readonly List characterList;
public Int64[] DataInteger => dataInteger;
public string[] DataString => dataString;
public Int64[][] DataIntegerArray => dataIntegerArray;
public string[][] DataStringArray => dataStringArray;
public Int64[][,] DataIntegerArray2D => dataIntegerArray2D;
public string[][,] DataStringArray2D => dataStringArray2D;
public Int64[][, ,] DataIntegerArray3D => dataIntegerArray3D;
public string[][, ,] DataStringArray3D => dataStringArray3D;
//public VariableLocal LocalVars { get { return localVars; } }
//public VariableLocal LocalString { get { return localString; } }
//public VariableLocal ArgVars { get { return argVars; } }
//public VariableLocal ArgString { get { return argString; } }
public List CharacterList => characterList;
readonly GameBase gamebase;
readonly ConstantData constant;
internal GameBase GameBase => gamebase;
internal ConstantData Constant => constant;
public Int64 LastLoadVersion = -1;
public Int64 LastLoadNo = -1;
public string LastLoadText = "";
Dictionary varTokenDic = new Dictionary();
Dictionary localvarTokenDic = new Dictionary();
///
/// ユーザー変数のうちStaticかつ非Globalなもの。ERHでのDIM(非GLOBAL) と関数でのDIM (STATIC)の両方。ロードやリセットで初期化が必要。キャラクタ変数は除く。
///
List userDefinedStaticVarList = new List();
///
/// ユーザー広域変数のうちグローバル属性持ち。
///
List userDefinedGlobalVarList = new List();
///
/// ユーザー広域変数のうちセーブされるもの。グローバル、キャラクタ変数は除く。
///
List[] userDefinedSaveVarList = new List[6];
///
/// ユーザー広域変数のうち、グローバルかつセーブされるもの。
///
List[] userDefinedGlobalSaveVarList = new List[6];
///
/// ユーザー広域変数のうち、キャラクタ変数であるもの。初期化やセーブされるかどうかはCharacterDataの方で判断。
///
public List UserDefinedCharaVarList = new List();
public VariableData(GameBase gamebase, ConstantData constant)
{
this.gamebase = gamebase;
this.constant = constant;
characterList = new List();
//localVars = new VariableLocal(constant.VariableIntArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.LOCAL)]);
//localString = new VariableLocal(constant.VariableStrArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.LOCALS)]);
//argVars = new VariableLocal(constant.VariableIntArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.ARG)]);
//argString = new VariableLocal(constant.VariableStrArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.ARGS)]);
dataInteger = new Int64[(int)VariableCode.__COUNT_INTEGER__];
dataIntegerArray = new Int64[(int)VariableCode.__COUNT_INTEGER_ARRAY__][];
for (int i = 0; i < dataIntegerArray.Length; i++)
dataIntegerArray[i] = new Int64[constant.VariableIntArrayLength[i]];
dataString = new string[(int)VariableCode.__COUNT_STRING__];
dataStringArray = new string[(int)VariableCode.__COUNT_STRING_ARRAY__][];
for (int i = 0; i < dataStringArray.Length; i++)
dataStringArray[i] = new string[constant.VariableStrArrayLength[i]];
dataIntegerArray2D = new Int64[(int)VariableCode.__COUNT_INTEGER_ARRAY_2D__][,];
for (int i = 0; i < dataIntegerArray2D.Length; i++)
{
Int64 length64 = constant.VariableIntArray2DLength[i];
int length = (int)(length64 >> 32);
int length2 = (int)(length64 & 0x7FFFFFFF);
dataIntegerArray2D[i] = new Int64[length, length2];
}
dataStringArray2D = new string[(int)VariableCode.__COUNT_STRING_ARRAY_2D__][,];
for (int i = 0; i < dataStringArray2D.Length; i++)
{
Int64 length64 = constant.VariableStrArray2DLength[i];
int length = (int)(length64 >> 32);
int length2 = (int)(length64 & 0x7FFFFFFF);
dataStringArray2D[i] = new string[length, length2];
}
dataIntegerArray3D = new Int64[(int)VariableCode.__COUNT_INTEGER_ARRAY_3D__][, ,];
for (int i = 0; i < dataIntegerArray3D.Length; i++)
{
Int64 length64 = constant.VariableIntArray3DLength[i];
int length = (int)(length64 >> 40);
int length2 = (int)((length64 >> 20) & 0xFFFFF);
int length3 = (int)(length64 & 0xFFFFF);
dataIntegerArray3D[i] = new Int64[length, length2, length3];
}
dataStringArray3D = new string[(int)VariableCode.__COUNT_STRING_ARRAY_3D__][, ,];
for (int i = 0; i < dataStringArray3D.Length; i++)
{
Int64 length64 = constant.VariableStrArray3DLength[i];
int length = (int)(length64 >> 40);
int length2 = (int)((length64 >> 20) & 0xFFFFF);
int length3 = (int)(length64 & 0xFFFFF);
dataStringArray3D[i] = new string[length, length2, length3];
}
for (int i = 0; i < 6; i++)
{
userDefinedSaveVarList[i] = new List();
userDefinedGlobalSaveVarList[i] = new List();
}
SetDefaultValue(constant);
varTokenDic.Add("DAY", new Int1DVariableToken(VariableCode.DAY, this));
varTokenDic.Add("MONEY", new Int1DVariableToken(VariableCode.MONEY, this));
varTokenDic.Add("ITEM", new Int1DVariableToken(VariableCode.ITEM, this));
varTokenDic.Add("FLAG", new Int1DVariableToken(VariableCode.FLAG, this));
varTokenDic.Add("TFLAG", new Int1DVariableToken(VariableCode.TFLAG, this));
varTokenDic.Add("UP", new Int1DVariableToken(VariableCode.UP, this));
varTokenDic.Add("PALAMLV", new Int1DVariableToken(VariableCode.PALAMLV, this));
varTokenDic.Add("EXPLV", new Int1DVariableToken(VariableCode.EXPLV, this));
varTokenDic.Add("EJAC", new Int1DVariableToken(VariableCode.EJAC, this));
varTokenDic.Add("DOWN", new Int1DVariableToken(VariableCode.DOWN, this));
varTokenDic.Add("RESULT", new Int1DVariableToken(VariableCode.RESULT, this));
varTokenDic.Add("COUNT", new Int1DVariableToken(VariableCode.COUNT, this));
varTokenDic.Add("TARGET", new Int1DVariableToken(VariableCode.TARGET, this));
varTokenDic.Add("ASSI", new Int1DVariableToken(VariableCode.ASSI, this));
varTokenDic.Add("MASTER", new Int1DVariableToken(VariableCode.MASTER, this));
varTokenDic.Add("NOITEM", new Int1DVariableToken(VariableCode.NOITEM, this));
varTokenDic.Add("LOSEBASE", new Int1DVariableToken(VariableCode.LOSEBASE, this));
varTokenDic.Add("SELECTCOM", new Int1DVariableToken(VariableCode.SELECTCOM, this));
varTokenDic.Add("ASSIPLAY", new Int1DVariableToken(VariableCode.ASSIPLAY, this));
varTokenDic.Add("PREVCOM", new Int1DVariableToken(VariableCode.PREVCOM, this));
varTokenDic.Add("TIME", new Int1DVariableToken(VariableCode.TIME, this));
varTokenDic.Add("ITEMSALES", new Int1DVariableToken(VariableCode.ITEMSALES, this));
varTokenDic.Add("PLAYER", new Int1DVariableToken(VariableCode.PLAYER, this));
varTokenDic.Add("NEXTCOM", new Int1DVariableToken(VariableCode.NEXTCOM, this));
varTokenDic.Add("PBAND", new Int1DVariableToken(VariableCode.PBAND, this));
varTokenDic.Add("BOUGHT", new Int1DVariableToken(VariableCode.BOUGHT, this));
varTokenDic.Add("A", new Int1DVariableToken(VariableCode.A, this));
varTokenDic.Add("B", new Int1DVariableToken(VariableCode.B, this));
varTokenDic.Add("C", new Int1DVariableToken(VariableCode.C, this));
varTokenDic.Add("D", new Int1DVariableToken(VariableCode.D, this));
varTokenDic.Add("E", new Int1DVariableToken(VariableCode.E, this));
varTokenDic.Add("F", new Int1DVariableToken(VariableCode.F, this));
varTokenDic.Add("G", new Int1DVariableToken(VariableCode.G, this));
varTokenDic.Add("H", new Int1DVariableToken(VariableCode.H, this));
varTokenDic.Add("I", new Int1DVariableToken(VariableCode.I, this));
varTokenDic.Add("J", new Int1DVariableToken(VariableCode.J, this));
varTokenDic.Add("K", new Int1DVariableToken(VariableCode.K, this));
varTokenDic.Add("L", new Int1DVariableToken(VariableCode.L, this));
varTokenDic.Add("M", new Int1DVariableToken(VariableCode.M, this));
varTokenDic.Add("N", new Int1DVariableToken(VariableCode.N, this));
varTokenDic.Add("O", new Int1DVariableToken(VariableCode.O, this));
varTokenDic.Add("P", new Int1DVariableToken(VariableCode.P, this));
varTokenDic.Add("Q", new Int1DVariableToken(VariableCode.Q, this));
varTokenDic.Add("R", new Int1DVariableToken(VariableCode.R, this));
varTokenDic.Add("S", new Int1DVariableToken(VariableCode.S, this));
varTokenDic.Add("T", new Int1DVariableToken(VariableCode.T, this));
varTokenDic.Add("U", new Int1DVariableToken(VariableCode.U, this));
varTokenDic.Add("V", new Int1DVariableToken(VariableCode.V, this));
varTokenDic.Add("W", new Int1DVariableToken(VariableCode.W, this));
varTokenDic.Add("X", new Int1DVariableToken(VariableCode.X, this));
varTokenDic.Add("Y", new Int1DVariableToken(VariableCode.Y, this));
varTokenDic.Add("Z", new Int1DVariableToken(VariableCode.Z, this));
varTokenDic.Add("GLOBAL", new Int1DVariableToken(VariableCode.GLOBAL, this));
varTokenDic.Add("RANDDATA", new Int1DVariableToken(VariableCode.RANDDATA, this));
varTokenDic.Add("SAVESTR", new Str1DVariableToken(VariableCode.SAVESTR, this));
varTokenDic.Add("TSTR", new Str1DVariableToken(VariableCode.TSTR, this));
varTokenDic.Add("STR", new Str1DVariableToken(VariableCode.STR, this));
varTokenDic.Add("RESULTS", new Str1DVariableToken(VariableCode.RESULTS, this));
varTokenDic.Add("GLOBALS", new Str1DVariableToken(VariableCode.GLOBALS, this));
varTokenDic.Add("SAVEDATA_TEXT", new StrVariableToken(VariableCode.SAVEDATA_TEXT, this));
varTokenDic.Add("ISASSI", new CharaIntVariableToken(VariableCode.ISASSI, this));
varTokenDic.Add("NO", new CharaIntVariableToken(VariableCode.NO, this));
varTokenDic.Add("BASE", new CharaInt1DVariableToken(VariableCode.BASE, this));
varTokenDic.Add("MAXBASE", new CharaInt1DVariableToken(VariableCode.MAXBASE, this));
varTokenDic.Add("ABL", new CharaInt1DVariableToken(VariableCode.ABL, this));
varTokenDic.Add("TALENT", new CharaInt1DVariableToken(VariableCode.TALENT, this));
varTokenDic.Add("EXP", new CharaInt1DVariableToken(VariableCode.EXP, this));
varTokenDic.Add("MARK", new CharaInt1DVariableToken(VariableCode.MARK, this));
varTokenDic.Add("PALAM", new CharaInt1DVariableToken(VariableCode.PALAM, this));
varTokenDic.Add("SOURCE", new CharaInt1DVariableToken(VariableCode.SOURCE, this));
varTokenDic.Add("EX", new CharaInt1DVariableToken(VariableCode.EX, this));
varTokenDic.Add("CFLAG", new CharaInt1DVariableToken(VariableCode.CFLAG, this));
varTokenDic.Add("JUEL", new CharaInt1DVariableToken(VariableCode.JUEL, this));
varTokenDic.Add("RELATION", new CharaInt1DVariableToken(VariableCode.RELATION, this));
varTokenDic.Add("EQUIP", new CharaInt1DVariableToken(VariableCode.EQUIP, this));
varTokenDic.Add("TEQUIP", new CharaInt1DVariableToken(VariableCode.TEQUIP, this));
varTokenDic.Add("STAIN", new CharaInt1DVariableToken(VariableCode.STAIN, this));
varTokenDic.Add("GOTJUEL", new CharaInt1DVariableToken(VariableCode.GOTJUEL, this));
varTokenDic.Add("NOWEX", new CharaInt1DVariableToken(VariableCode.NOWEX, this));
varTokenDic.Add("DOWNBASE", new CharaInt1DVariableToken(VariableCode.DOWNBASE, this));
varTokenDic.Add("CUP", new CharaInt1DVariableToken(VariableCode.CUP, this));
varTokenDic.Add("CDOWN", new CharaInt1DVariableToken(VariableCode.CDOWN, this));
varTokenDic.Add("TCVAR", new CharaInt1DVariableToken(VariableCode.TCVAR, this));
varTokenDic.Add("NAME", new CharaStrVariableToken(VariableCode.NAME, this));
varTokenDic.Add("CALLNAME", new CharaStrVariableToken(VariableCode.CALLNAME, this));
varTokenDic.Add("NICKNAME", new CharaStrVariableToken(VariableCode.NICKNAME, this));
varTokenDic.Add("MASTERNAME", new CharaStrVariableToken(VariableCode.MASTERNAME, this));
varTokenDic.Add("CSTR", new CharaStr1DVariableToken(VariableCode.CSTR, this));
varTokenDic.Add("CDFLAG", new CharaInt2DVariableToken(VariableCode.CDFLAG, this));
varTokenDic.Add("DITEMTYPE", new Int2DVariableToken(VariableCode.DITEMTYPE, this));
varTokenDic.Add("DA", new Int2DVariableToken(VariableCode.DA, this));
varTokenDic.Add("DB", new Int2DVariableToken(VariableCode.DB, this));
varTokenDic.Add("DC", new Int2DVariableToken(VariableCode.DC, this));
varTokenDic.Add("DD", new Int2DVariableToken(VariableCode.DD, this));
varTokenDic.Add("DE", new Int2DVariableToken(VariableCode.DE, this));
varTokenDic.Add("TA", new Int3DVariableToken(VariableCode.TA, this));
varTokenDic.Add("TB", new Int3DVariableToken(VariableCode.TB, this));
varTokenDic.Add("ITEMPRICE", new Int1DConstantToken(VariableCode.ITEMPRICE, this, constant.ItemPrice));
varTokenDic.Add("ABLNAME", new Str1DConstantToken(VariableCode.ABLNAME, this, "Abl"));
varTokenDic.Add("TALENTNAME", new Str1DConstantToken(VariableCode.TALENTNAME, this, "Talent"));
varTokenDic.Add("EXPNAME", new Str1DConstantToken(VariableCode.EXPNAME, this, "Exp"));
varTokenDic.Add("MARKNAME", new Str1DConstantToken(VariableCode.MARKNAME, this, "Mark"));
varTokenDic.Add("PALAMNAME", new Str1DConstantToken(VariableCode.PALAMNAME, this, "Palam"));
varTokenDic.Add("ITEMNAME", new Str1DConstantToken(VariableCode.ITEMNAME, this, "Item"));
varTokenDic.Add("TRAINNAME", new Str1DConstantToken(VariableCode.TRAINNAME, this, "Train"));
varTokenDic.Add("BASENAME", new Str1DConstantToken(VariableCode.BASENAME, this, "Base"));
varTokenDic.Add("SOURCENAME", new Str1DConstantToken(VariableCode.SOURCENAME, this, "Source"));
varTokenDic.Add("EXNAME", new Str1DConstantToken(VariableCode.EXNAME, this, "Ex"));
varTokenDic.Add("EQUIPNAME", new Str1DConstantToken(VariableCode.EQUIPNAME, this,"EQUIP"));
varTokenDic.Add("TEQUIPNAME", new Str1DConstantToken(VariableCode.TEQUIPNAME, this, "TEQUIP"));
varTokenDic.Add("FLAGNAME", new Str1DConstantToken(VariableCode.FLAGNAME, this, "Flag"));
varTokenDic.Add("TFLAGNAME", new Str1DConstantToken(VariableCode.TFLAGNAME, this, "TFLAG"));
varTokenDic.Add("CFLAGNAME", new Str1DConstantToken(VariableCode.CFLAGNAME, this, "Cflag"));
varTokenDic.Add("TCVARNAME", new Str1DConstantToken(VariableCode.TCVARNAME, this, "Tcvar"));
varTokenDic.Add("CSTRNAME", new Str1DConstantToken(VariableCode.CSTRNAME, this, "CSTR"));
varTokenDic.Add("STAINNAME", new Str1DConstantToken(VariableCode.STAINNAME, this, "Stain"));
varTokenDic.Add("CDFLAGNAME1", new Str1DConstantToken(VariableCode.CDFLAGNAME1, this, "Cdflag1"));
varTokenDic.Add("CDFLAGNAME2", new Str1DConstantToken(VariableCode.CDFLAGNAME2, this, "Cdflag2"));
varTokenDic.Add("STRNAME", new Str1DConstantToken(VariableCode.STRNAME, this, "Str"));
varTokenDic.Add("TSTRNAME", new Str1DConstantToken(VariableCode.TSTRNAME, this, "TSTR"));
varTokenDic.Add("SAVESTRNAME", new Str1DConstantToken(VariableCode.SAVESTRNAME, this, "SaveStr"));
varTokenDic.Add("GLOBALNAME", new Str1DConstantToken(VariableCode.GLOBALNAME, this, "GLOBAL"));
varTokenDic.Add("GLOBALSNAME", new Str1DConstantToken(VariableCode.GLOBALSNAME, this, "GLOBALS"));
StrConstantToken token = new StrConstantToken(VariableCode.GAMEBASE_AUTHOR, this, gamebase.ScriptAutherName);
varTokenDic.Add("GAMEBASE_AUTHER", token);
varTokenDic.Add("GAMEBASE_AUTHOR", token);
varTokenDic.Add("GAMEBASE_INFO", new StrConstantToken(VariableCode.GAMEBASE_INFO, this, gamebase.ScriptDetail));
varTokenDic.Add("GAMEBASE_YEAR", new StrConstantToken(VariableCode.GAMEBASE_YEAR, this, gamebase.ScriptYear));
varTokenDic.Add("GAMEBASE_TITLE", new StrConstantToken(VariableCode.GAMEBASE_TITLE, this, gamebase.ScriptTitle));
varTokenDic.Add("GAMEBASE_GAMECODE", new IntConstantToken(VariableCode.GAMEBASE_GAMECODE, this, gamebase.ScriptUniqueCode));
varTokenDic.Add("GAMEBASE_VERSION", new IntConstantToken(VariableCode.GAMEBASE_VERSION, this, gamebase.ScriptVersion));
varTokenDic.Add("GAMEBASE_ALLOWVERSION", new IntConstantToken(VariableCode.GAMEBASE_ALLOWVERSION, this, gamebase.ScriptCompatibleMinVersion));
varTokenDic.Add("GAMEBASE_DEFAULTCHARA", new IntConstantToken(VariableCode.GAMEBASE_DEFAULTCHARA, this, gamebase.DefaultCharacter));
varTokenDic.Add("GAMEBASE_NOITEM", new IntConstantToken(VariableCode.GAMEBASE_NOITEM, this, gamebase.DefaultNoItem));
VariableToken rand;
if (Config.Config.CompatiRAND)
rand = new CompatiRandToken(VariableCode.RAND, this);
else
rand = new RandToken(VariableCode.RAND, this);
varTokenDic.Add("RAND", rand);
varTokenDic.Add("CHARANUM", new CHARANUM_Token(VariableCode.CHARANUM, this));
varTokenDic.Add("LASTLOAD_TEXT", new LASTLOAD_TEXT_Token(VariableCode.LASTLOAD_TEXT, this));
varTokenDic.Add("LASTLOAD_VERSION", new LASTLOAD_VERSION_Token(VariableCode.LASTLOAD_VERSION, this));
varTokenDic.Add("LASTLOAD_NO", new LASTLOAD_NO_Token(VariableCode.LASTLOAD_NO, this));
varTokenDic.Add("LINECOUNT", new LINECOUNT_Token(VariableCode.LINECOUNT, this));
varTokenDic.Add("ISTIMEOUT", new ISTIMEOUTToken(VariableCode.ISTIMEOUT, this));
varTokenDic.Add("__INT_MAX__", new __INT_MAX__Token(VariableCode.__INT_MAX__, this));
varTokenDic.Add("__INT_MIN__", new __INT_MIN__Token(VariableCode.__INT_MIN__, this));
varTokenDic.Add("EMUERA_VERSION", new EMUERA_VERSIONToken(VariableCode.EMUERA_VERSION, this));
varTokenDic.Add("WINDOW_TITLE", new WINDOW_TITLE_Token(VariableCode.WINDOW_TITLE, this));
varTokenDic.Add("MONEYLABEL", new MONEYLABEL_Token(VariableCode.MONEYLABEL, this));
varTokenDic.Add("DRAWLINESTR", new DRAWLINESTR_Token(VariableCode.DRAWLINESTR, this));
if (!Program.DebugMode)
{
varTokenDic.Add("__FILE__", new EmptyStrToken(VariableCode.__FILE__, this));
varTokenDic.Add("__FUNCTION__", new EmptyStrToken(VariableCode.__FUNCTION__, this));
varTokenDic.Add("__LINE__", new EmptyIntToken(VariableCode.__LINE__, this));
}
else
{
varTokenDic.Add("__FILE__", new Debug__FILE__Token(VariableCode.__FILE__, this));
varTokenDic.Add("__FUNCTION__", new Debug__FUNCTION__Token(VariableCode.__FUNCTION__, this));
varTokenDic.Add("__LINE__", new Debug__LINE__Token(VariableCode.__LINE__, this));
}
int size = constant.VariableIntArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.LOCAL)];
localvarTokenDic.Add("LOCAL", new VariableLocal(VariableCode.LOCAL, size, CreateLocalInt));
size = constant.VariableIntArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.ARG)];
localvarTokenDic.Add("ARG", new VariableLocal(VariableCode.ARG, size, CreateLocalInt));
size = constant.VariableStrArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.LOCALS)];
localvarTokenDic.Add("LOCALS", new VariableLocal(VariableCode.LOCALS, size, CreateLocalStr));
size = constant.VariableStrArrayLength[(int)(VariableCode.__LOWERCASE__ & VariableCode.ARGS)];
localvarTokenDic.Add("ARGS", new VariableLocal(VariableCode.ARGS, size, CreateLocalStr));
}
private LocalVariableToken CreateLocalInt(VariableCode varCode, string subKey, int size)
{
return new LocalInt1DVariableToken(varCode, this, subKey, size);
}
private LocalVariableToken CreateLocalStr(VariableCode varCode, string subKey, int size)
{
return new LocalStr1DVariableToken(varCode, this, subKey, size);
}
public Dictionary GetVarTokenDicClone()
{
Dictionary clone = new Dictionary();
foreach (KeyValuePair pair in varTokenDic)
clone.Add(pair.Key, pair.Value);
return clone;
}
public Dictionary GetVarTokenDic()
{
return varTokenDic;
}
public Dictionary GetLocalvarTokenDic() { return localvarTokenDic; }
public VariableToken GetSystemVariableToken(string str)
{
return varTokenDic[str];
}
public UserDefinedCharaVariableToken CreateUserDefCharaVariable(UserDefinedVariableData data)
{
UserDefinedCharaVariableToken ret = null;
if (data.CharaData)
{
int index = UserDefinedCharaVarList.Count;
if (data.TypeIsStr)
switch (data.Dimension)
{
case 1: ret = new UserDefinedCharaStr1DVariableToken(data, this, index); break;
case 2: ret = new UserDefinedCharaStr2DVariableToken(data, this, index); break;
default: throw new ExeEE("異常な変数宣言");
}
else
switch (data.Dimension)
{
case 1: ret = new UserDefinedCharaInt1DVariableToken(data, this, index); break;
case 2: ret = new UserDefinedCharaInt2DVariableToken(data, this, index); break;
default: throw new ExeEE("異常な変数宣言");
}
}
UserDefinedCharaVarList.Add(ret);
return ret;
}
public UserDefinedVariableToken CreateUserDefVariable(UserDefinedVariableData data)
{
UserDefinedVariableToken ret = null;
if (data.TypeIsStr)
switch (data.Dimension)
{
case 1: ret = new StaticStr1DVariableToken(data); break;
case 2: ret = new StaticStr2DVariableToken(data); break;
case 3: ret = new StaticStr3DVariableToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
else
switch (data.Dimension)
{
case 1: ret = new StaticInt1DVariableToken(data); break;
case 2: ret = new StaticInt2DVariableToken(data); break;
case 3: ret = new StaticInt3DVariableToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
if (ret.IsGlobal)
userDefinedGlobalVarList.Add(ret);
else
userDefinedStaticVarList.Add(ret);
if (ret.IsSavedata)
{
int type = ret.Dimension * 2 - 2;
if (!ret.IsString)
type++;
if (ret.IsGlobal)
userDefinedGlobalSaveVarList[type].Add(ret);
else
userDefinedSaveVarList[type].Add(ret);
}
return ret;
}
public UserDefinedVariableToken CreatePrivateVariable(UserDefinedVariableData data)
{
UserDefinedVariableToken ret = null;
if (data.Reference)//参照型
{//すべて非Staticなはず
if (data.TypeIsStr)
{
switch (data.Dimension)
{
case 1: ret = new ReferenceStr1DToken(data); break;
case 2: ret = new ReferenceStr2DToken(data); break;
case 3: ret = new ReferenceStr3DToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
}
else
{
switch (data.Dimension)
{
case 1: ret = new ReferenceInt1DToken(data); break;
case 2: ret = new ReferenceInt2DToken(data); break;
case 3: ret = new ReferenceInt3DToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
}
}
else if (data.Static)
{
if (data.TypeIsStr)
{
switch (data.Dimension)
{
case 1: ret = new StaticStr1DVariableToken(data); break;
case 2: ret = new StaticStr2DVariableToken(data); break;
case 3: ret = new StaticStr3DVariableToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
}
else
{
switch (data.Dimension)
{
case 1: ret = new StaticInt1DVariableToken(data); break;
case 2: ret = new StaticInt2DVariableToken(data); break;
case 3: ret = new StaticInt3DVariableToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
}
userDefinedStaticVarList.Add(ret);
}
else
{
if (data.TypeIsStr)
{
switch (data.Dimension)
{
case 1: ret = new PrivateStr1DVariableToken(data); break;
case 2: ret = new PrivateStr2DVariableToken(data); break;
case 3: ret = new PrivateStr3DVariableToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
}
else
{
switch (data.Dimension)
{
case 1: ret = new PrivateInt1DVariableToken(data); break;
case 2: ret = new PrivateInt2DVariableToken(data); break;
case 3: ret = new PrivateInt3DVariableToken(data); break;
default: throw new ExeEE("異常な変数宣言");
}
}
}
return ret;
}
public void SetDefaultGlobalValue()
{
Int64[] globalInt = dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.GLOBAL];
string[] globalStr = dataStringArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.GLOBALS];
for (int i = 0; i < globalInt.Length; i++)
globalInt[i] = 0;
for (int i = 0; i < globalStr.Length; i++)
globalStr[i] = null;
foreach (UserDefinedVariableToken var in userDefinedGlobalVarList)
var.SetDefault();
}
public void SetDefaultLocalValue()
{
foreach (VariableLocal local in localvarTokenDic.Values)
local.SetDefault();
foreach (UserDefinedVariableToken var in userDefinedStaticVarList)
var.SetDefault();
}
public void ClearLocalValue()
{
foreach (VariableLocal local in localvarTokenDic.Values)
local.Clear();
}
///
/// ローカルとグローバル以外初期化
///
public void SetDefaultValue(ConstantData constant)
{
for (int i = 0; i < dataInteger.Length; i++)
dataInteger[i] = 0;
for (int i = 0; i < dataIntegerArray.Length; i++)
{
switch (i)
{
case (int)(VariableCode.__LOWERCASE__ & VariableCode.GLOBAL):
break;
case (int)(VariableCode.__LOWERCASE__ & VariableCode.ITEMPRICE):
//constant.ItemPrice.CopyTo(dataIntegerArray[i], 0);
Buffer.BlockCopy(constant.ItemPrice, 0, dataIntegerArray[i], 0, 8 * dataIntegerArray[i].Length);
break;
default:
for (int j = 0; j < dataIntegerArray[i].Length; j++)
dataIntegerArray[i][j] = 0;
break;
}
}
for (int i = 0; i < dataString.Length; i++)
dataString[i] = null;
for (int i = 0; i < dataStringArray.Length; i++)
{
switch (i)
{
case (int)(VariableCode.__LOWERCASE__ & VariableCode.GLOBALS):
break;
case (int)(VariableCode.__LOWERCASE__ & VariableCode.STR):
{
string[] csvStrData = constant.GetCsvNameList(VariableCode.__DUMMY_STR__);
csvStrData.CopyTo(dataStringArray[i], 0);
break;
}
default:
for (int j = 0; j < dataStringArray[i].Length; j++)
dataStringArray[i][j] = null;
break;
}
}
for (int i = 0; i < dataIntegerArray2D.Length; i++)
{
Int64[,] array2D = dataIntegerArray2D[i];
int length0 = array2D.GetLength(0);
int length1 = array2D.GetLength(1);
for (int x = 0; x < length0; x++)
for (int y = 0; y < length1; y++)
array2D[x, y] = 0;
}
for (int i = 0; i < dataStringArray2D.Length; i++)
{
string[,] array2D = dataStringArray2D[i];
int length0 = array2D.GetLength(0);
int length1 = array2D.GetLength(1);
for (int x = 0; x < length0; x++)
for (int y = 0; y < length1; y++)
array2D[x, y] = null;
}
for (int i = 0; i < dataIntegerArray3D.Length; i++)
{
Int64[, ,] array3D = dataIntegerArray3D[i];
int length0 = array3D.GetLength(0);
int length1 = array3D.GetLength(1);
int length2 = array3D.GetLength(2);
for (int x = 0; x < length0; x++)
for (int y = 0; y < length1; y++)
for (int z = 0; z < length2; z++)
array3D[x, y, z] = 0;
}
for (int i = 0; i < dataStringArray3D.Length; i++)
{
string[, ,] array3D = dataStringArray3D[i];
int length0 = array3D.GetLength(0);
int length1 = array3D.GetLength(1);
int length2 = array3D.GetLength(2);
for (int x = 0; x < length0; x++)
for (int y = 0; y < length1; y++)
for (int z = 0; z < length2; z++)
array3D[x, y, z] = null;
}
Int64[] palamlv = dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.PALAMLV];
List defPalam = Config.Config.PalamLvDef;
defPalam.CopyTo(0, palamlv, 0, Math.Min(palamlv.Length, defPalam.Count));
//palamlv[0] = 0;
//palamlv[1] = 100;
//palamlv[2] = 500;
//palamlv[3] = 3000;
//palamlv[4] = 10000;
//palamlv[5] = 30000;
//palamlv[6] = 60000;
//palamlv[7] = 100000;
//palamlv[8] = 150000;
//palamlv[9] = 250000;
Int64[] explv = dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.EXPLV];
List defExpLv = Config.Config.ExpLvDef;
defExpLv.CopyTo(0, explv, 0, Math.Min(explv.Length, defExpLv.Count));
//explv[0] = 0;
//explv[1] = 1;
//explv[2] = 4;
//explv[3] = 20;
//explv[4] = 50;
//explv[5] = 200;
//dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.ASSIPLAY][0] = 0;
//dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.MASTER][0] = 0;
long[] array;
array = dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.ASSI];
if (array.Length > 0) array[0] = -1;
array = dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.TARGET];
if (array.Length > 0) array[0] = 1;
array = dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.PBAND];
if (array.Length > 0) array[0] = Config.Config.PbandDef;
array = dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)VariableCode.EJAC];
if (array.Length > 0) array[0] = 10000;
LastLoadVersion = -1;
LastLoadNo = -1;
LastLoadText = "";
}
const int strCount = (int)VariableCode.__COUNT_SAVE_STRING__;
const int intCount = (int)VariableCode.__COUNT_SAVE_INTEGER__;
const int intArrayCount = (int)VariableCode.__COUNT_SAVE_INTEGER_ARRAY__;
const int strArrayCount = (int)VariableCode.__COUNT_SAVE_STRING_ARRAY__;
public void SaveToStream(EraDataWriter writer)
{
for (int i = 0; i < strCount; i++)
writer.Write(dataString[i]);
for (int i = 0; i < intCount; i++)
writer.Write(dataInteger[i]);
for (int i = 0; i < intArrayCount; i++)
writer.Write(dataIntegerArray[i]);
for (int i = 0; i < strArrayCount; i++)
writer.Write(dataStringArray[i]);
}
public void LoadFromStream(EraDataReader reader)
{
for (int i = 0; i < strCount; i++)
dataString[i] = reader.ReadString();
for (int i = 0; i < intCount; i++)
dataInteger[i] = reader.ReadInt64();
for (int i = 0; i < intArrayCount; i++)
reader.ReadInt64Array(dataIntegerArray[i]);
for (int i = 0; i < strArrayCount; i++)
reader.ReadStringArray(dataStringArray[i]);
}
public void SaveToStreamExtended(EraDataWriter writer)
{
List codeList = null;
//dataString
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__STRING__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataString[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
//datainteger
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataInteger[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
//dataStringArray
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_1D__ | VariableCode.__STRING__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataStringArray[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
//dataIntegerArray
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_1D__ | VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
//dataStringArray2D
//StringArray2Dの保存は未実装
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_2D__ | VariableCode.__STRING__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataStringArray2D[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
//dataIntegerArray2D
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_2D__ | VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataIntegerArray2D[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
//dataStringArray3D
//StringArray3Dの保存は未実装
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_3D__ | VariableCode.__STRING__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataStringArray3D[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
//dataIntegerArray3D
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_3D__ | VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
writer.WriteExtended(code.ToString(), dataIntegerArray3D[(int)VariableCode.__LOWERCASE__ & (int)code]);
writer.EmuSeparete();
for (int i = 0; i < 6; i++)
{
foreach (UserDefinedVariableToken var in userDefinedSaveVarList[i])
{
//if (!var.IsSavedata) continue;
switch (i)
{
case 0: writer.WriteExtended(var.Name, (string[])var.GetArray()); break;
case 1: writer.WriteExtended(var.Name, (Int64[])var.GetArray()); break;
case 2: writer.WriteExtended(var.Name, (string[,])var.GetArray()); break;
case 3: writer.WriteExtended(var.Name, (Int64[,])var.GetArray()); break;
case 4: writer.WriteExtended(var.Name, (string[, ,])var.GetArray()); break;
case 5: writer.WriteExtended(var.Name, (Int64[, ,])var.GetArray()); break;
}
}
writer.EmuSeparete();
}
}
public void LoadFromStreamExtended(EraDataReader reader, int version)
{
Dictionary strDic = reader.ReadStringExtended();
Dictionary intDic = reader.ReadInt64Extended();
Dictionary> strListDic = reader.ReadStringArrayExtended();
Dictionary> intListDic = reader.ReadInt64ArrayExtended();
Dictionary> str2DListDic = reader.ReadStringArray2DExtended();
Dictionary> int2DListDic = reader.ReadInt64Array2DExtended();
Dictionary>> str3DListDic = reader.ReadStringArray3DExtended();
Dictionary>> int3DListDic = reader.ReadInt64Array3DExtended();
List codeList = null;
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__STRING__);
foreach (VariableCode code in codeList)
if (strDic.ContainsKey(code.ToString()))
dataString[(int)VariableCode.__LOWERCASE__ & (int)code] = strDic[code.ToString()];
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
if (intDic.ContainsKey(code.ToString()))
dataInteger[(int)VariableCode.__LOWERCASE__ & (int)code] = intDic[code.ToString()];
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_1D__ | VariableCode.__STRING__);
foreach (VariableCode code in codeList)
if (strListDic.ContainsKey(code.ToString()))
copyListToArray(strListDic[code.ToString()], dataStringArray[(int)VariableCode.__LOWERCASE__ & (int)code]);
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_1D__ | VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
if (intListDic.ContainsKey(code.ToString()))
copyListToArray(intListDic[code.ToString()], dataIntegerArray[(int)VariableCode.__LOWERCASE__ & (int)code]);
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_2D__ | VariableCode.__STRING__);
foreach (VariableCode code in codeList)
if (str2DListDic.ContainsKey(code.ToString()))
copyListToArray2D(str2DListDic[code.ToString()], dataStringArray2D[(int)VariableCode.__LOWERCASE__ & (int)code]);
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_2D__ | VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
if (int2DListDic.ContainsKey(code.ToString()))
copyListToArray2D(int2DListDic[code.ToString()], dataIntegerArray2D[(int)VariableCode.__LOWERCASE__ & (int)code]);
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_3D__ | VariableCode.__STRING__);
foreach (VariableCode code in codeList)
if (str3DListDic.ContainsKey(code.ToString()))
copyListToArray3D(str3DListDic[code.ToString()], dataStringArray3D[(int)VariableCode.__LOWERCASE__ & (int)code]);
codeList = VariableIdentifier.GetExtSaveList(VariableCode.__ARRAY_3D__ | VariableCode.__INTEGER__);
foreach (VariableCode code in codeList)
if (int3DListDic.ContainsKey(code.ToString()))
copyListToArray3D(int3DListDic[code.ToString()], dataIntegerArray3D[(int)VariableCode.__LOWERCASE__ & (int)code]);
if (version < 1808)//ユーザー定義変数の保存の実装前
return;
strListDic = reader.ReadStringArrayExtended();
intListDic = reader.ReadInt64ArrayExtended();
str2DListDic = reader.ReadStringArray2DExtended();
int2DListDic = reader.ReadInt64Array2DExtended();
str3DListDic = reader.ReadStringArray3DExtended();
int3DListDic = reader.ReadInt64Array3DExtended();
List varList = null;
int i = 0;
varList = userDefinedSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (strListDic.ContainsKey(var.Name))
copyListToArray(strListDic[var.Name], (string[])var.GetArray());
varList = userDefinedSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (intListDic.ContainsKey(var.Name))
copyListToArray(intListDic[var.Name], (Int64[])var.GetArray());
varList = userDefinedSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (str2DListDic.ContainsKey(var.Name))
copyListToArray2D(str2DListDic[var.Name], (string[,])var.GetArray());
varList = userDefinedSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (int2DListDic.ContainsKey(var.Name))
copyListToArray2D(int2DListDic[var.Name], (Int64[,])var.GetArray());
varList = userDefinedSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (str3DListDic.ContainsKey(var.Name))
copyListToArray3D(str3DListDic[var.Name], (string[, ,])var.GetArray());
varList = userDefinedSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (int3DListDic.ContainsKey(var.Name))
copyListToArray3D(int3DListDic[var.Name], (Int64[, ,])var.GetArray());
}
private void copyListToArray(List srcList, T[] destArray)
{
int count = Math.Min(srcList.Count, destArray.Length);
for (int i = 0; i < count; i++)
{
destArray[i] = srcList[i];
}
}
private void copyListToArray2D(List srcList, T[,] destArray)
{
int countX = Math.Min(srcList.Count, destArray.GetLength(0));
int dLength = destArray.GetLength(1);
for (int x = 0; x < countX; x++)
{
T[] srcArray = srcList[x];
int countY = Math.Min(srcArray.Length, dLength);
for (int y = 0; y < countY; y++)
{
destArray[x, y] = srcArray[y];
}
}
}
private void copyListToArray3D(List> srcList, T[, ,] destArray)
{
int countX = Math.Min(srcList.Count, destArray.GetLength(0));
int dLength1 = destArray.GetLength(1);
int dLength2 = destArray.GetLength(2);
for (int x = 0; x < countX; x++)
{
List srcArray = srcList[x];
int countY = Math.Min(srcArray.Count, dLength1);
for (int y = 0; y < countY; y++)
{
T[] baseArray = srcArray[y];
int countZ = Math.Min(baseArray.Length, dLength2);
for (int z = 0; z < countZ; z++)
{
destArray[x, y, z] = baseArray[z];
}
}
}
}
public void SaveGlobalToStream(EraDataWriter writer)
{
writer.Write(dataIntegerArray[(int)(VariableCode.__LOWERCASE__ & VariableCode.GLOBAL)]);
writer.Write(dataStringArray[(int)(VariableCode.__LOWERCASE__ & VariableCode.GLOBALS)]);
}
public void LoadGlobalFromStream(EraDataReader reader)
{
reader.ReadInt64Array(dataIntegerArray[(int)(VariableCode.__LOWERCASE__ & VariableCode.GLOBAL)]);
reader.ReadStringArray(dataStringArray[(int)(VariableCode.__LOWERCASE__ & VariableCode.GLOBALS)]);
}
public void SaveGlobalToStream1808(EraDataWriter writer)
{
for (int i = 0; i < 6; i++)
{
foreach (UserDefinedVariableToken var in userDefinedGlobalSaveVarList[i])
{
//if (!var.IsSavedata) continue;
switch (i)
{
case 0: writer.WriteExtended(var.Name, (string[])var.GetArray()); break;
case 1: writer.WriteExtended(var.Name, (Int64[])var.GetArray()); break;
case 2: writer.WriteExtended(var.Name, (string[,])var.GetArray()); break;
case 3: writer.WriteExtended(var.Name, (Int64[,])var.GetArray()); break;
case 4: writer.WriteExtended(var.Name, (string[, ,])var.GetArray()); break;
case 5: writer.WriteExtended(var.Name, (Int64[, ,])var.GetArray()); break;
}
}
writer.EmuSeparete();
}
}
public void LoadGlobalFromStream1808(EraDataReader reader)
{
Dictionary> strListDic = null;
Dictionary> intListDic = null;
Dictionary> str2DListDic = null;
Dictionary> int2DListDic = null;
Dictionary>> str3DListDic = null;
Dictionary>> int3DListDic = null;
strListDic = reader.ReadStringArrayExtended();
intListDic = reader.ReadInt64ArrayExtended();
str2DListDic = reader.ReadStringArray2DExtended();
int2DListDic = reader.ReadInt64Array2DExtended();
str3DListDic = reader.ReadStringArray3DExtended();
int3DListDic = reader.ReadInt64Array3DExtended();
List varList = null;
int i = 0;
varList = userDefinedGlobalSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (strListDic.ContainsKey(var.Name))
copyListToArray(strListDic[var.Name], (string[])var.GetArray());
varList = userDefinedGlobalSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (intListDic.ContainsKey(var.Name))
copyListToArray(intListDic[var.Name], (Int64[])var.GetArray());
varList = userDefinedGlobalSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (str2DListDic.ContainsKey(var.Name))
copyListToArray2D(str2DListDic[var.Name], (string[,])var.GetArray());
varList = userDefinedGlobalSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (int2DListDic.ContainsKey(var.Name))
copyListToArray2D(int2DListDic[var.Name], (Int64[,])var.GetArray());
varList = userDefinedGlobalSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (str3DListDic.ContainsKey(var.Name))
copyListToArray3D(str3DListDic[var.Name], (string[, ,])var.GetArray());
varList = userDefinedGlobalSaveVarList[i]; i++;
foreach (UserDefinedVariableToken var in varList)
if (int3DListDic.ContainsKey(var.Name))
copyListToArray3D(int3DListDic[var.Name], (Int64[, ,])var.GetArray());
}
public void SaveGlobalToStreamBinary(EraBinaryDataWriter writer)
{
foreach (KeyValuePair pair in varTokenDic)
{
VariableToken var = pair.Value;
if (var.IsSavedata && !var.IsCharacterData && var.IsGlobal)
{
writer.WriteWithKey(pair.Key, var.GetArray());
}
}
foreach (UserDefinedVariableToken var in userDefinedGlobalVarList)
{
if (var.IsSavedata)
writer.WriteWithKey(var.Name, var.GetArray());
}
}
public void SaveToStreamBinary(EraBinaryDataWriter writer)
{
foreach (KeyValuePair pair in varTokenDic)
{
VariableToken var = pair.Value;
if (var.IsSavedata && !var.IsCharacterData && !var.IsGlobal)
{
writer.WriteWithKey(pair.Key, var.GetArray());
}
}
foreach (UserDefinedVariableToken var in userDefinedStaticVarList)
{
if (var.IsSavedata)
writer.WriteWithKey(var.Name, var.GetArray());
}
}
public void LoadFromStreamBinary(EraBinaryDataReader bReader)
{
while (LoadVariableBinary(bReader)) { }
}
///
/// 1808 キャラクタ型でない変数を一つ読む
/// ファイル終端の場合はfalseを返す
///
///
public bool LoadVariableBinary(EraBinaryDataReader reader)
{
KeyValuePair nameAndType = reader.ReadVariableCode();
VariableToken vToken = null;
if (nameAndType.Key != null && !GlobalStatic.IdentifierDictionary.getVarTokenIsForbid(nameAndType.Key))
vToken = GlobalStatic.IdentifierDictionary.GetVariableToken(nameAndType.Key, null, false);
if (vToken != null && (vToken.IsCharacterData || vToken.IsConst || vToken.IsPrivate || vToken.IsLocal || vToken.IsCalc))
vToken = null;
switch (nameAndType.Value)
{
case EraSaveDataType.EOF:
return false;
case EraSaveDataType.Int:
if (vToken == null || !vToken.IsInteger || vToken.Dimension != 0)
reader.ReadInt();//該当変数なし、or型不一致なら読み捨てる
else
vToken.SetValue(reader.ReadInt(), null);
break;
case EraSaveDataType.Str:
if (vToken == null || !vToken.IsString || vToken.Dimension != 0)
reader.ReadString();
else
vToken.SetValue(reader.ReadString(), null);
break;
case EraSaveDataType.IntArray:
if (vToken == null || !vToken.IsInteger || vToken.Dimension != 1)
reader.ReadIntArray(null, true);
else
reader.ReadIntArray((long[])vToken.GetArray(), true);
break;
case EraSaveDataType.IntArray2D:
if (vToken == null || !vToken.IsInteger || vToken.Dimension != 2)
reader.ReadIntArray2D(null, true);
else
reader.ReadIntArray2D((long[,])vToken.GetArray(), true);
break;
case EraSaveDataType.IntArray3D:
if (vToken == null || !vToken.IsInteger || vToken.Dimension != 3)
reader.ReadIntArray3D(null, true);
else
reader.ReadIntArray3D((long[, ,])vToken.GetArray(), true);
break;
case EraSaveDataType.StrArray:
if (vToken == null || !vToken.IsString || vToken.Dimension != 1)
reader.ReadStrArray(null, true);
else
reader.ReadStrArray((string[])vToken.GetArray(), true);
break;
case EraSaveDataType.StrArray2D:
if (vToken == null || !vToken.IsString || vToken.Dimension != 2)
reader.ReadStrArray2D(null, true);
else
reader.ReadStrArray2D((string[,])vToken.GetArray(), true);
break;
case EraSaveDataType.StrArray3D:
if (vToken == null || !vToken.IsString || vToken.Dimension != 3)
reader.ReadStrArray3D(null, true);
else
reader.ReadStrArray3D((string[, ,])vToken.GetArray(), true);
break;
default:
throw new FileEE("データ異常");
}
return true;
}
#region IDisposable メンバ
public void Dispose()
{
ClearLocalValue();
for (int i = 0; i < dataIntegerArray.Length; i++)
dataIntegerArray[i] = null;
for (int i = 0; i < dataStringArray.Length; i++)
dataStringArray[i] = null;
for (int i = 0; i < characterList.Count; i++)
characterList[i].Dispose();
characterList.Clear();
}
#endregion
}
}