public override void SetSafetyStringVariable(int index, string value) { if (index < 0 || StringVariableCount < index) { throw new ArgumentOutOfRangeException( ErrorMessage.OutOfRange(nameof(index), 0, StringVariableCount, index)); } if (value is null) { throw new ArgumentNullException(ErrorMessage.NotNull(nameof(value))); } if (index == 0) { // コモンイベント名 EventIdOrName.Merge(value); return; } var tmpIndex = index - 1; // 引数タイプが数値なら何もしない if (StrArgList[tmpIndex].InstanceIntOrStrType == IntOrStrType.Int) { return; } StrArgList[tmpIndex] = value; }
public override string GetSafetyStringVariable(int index) { if (index < 0 || StringVariableCount < index) { throw new ArgumentOutOfRangeException( ErrorMessage.OutOfRange(nameof(index), 0, StringVariableCount, index)); } if (index == 0) { // コモンイベント名 return(EventIdOrName.HasStr ? EventIdOrName.ToStr() : ""); } var tmpIndex = index - 1; var val = StrArgList[tmpIndex]; if (val.InstanceIntOrStrType == IntOrStrType.Int) { return(""); } return(val.ToStr()); }
public override int GetSafetyNumberVariable(int index) { if (index > NumberVariableCount || index < 0) { throw new ArgumentOutOfRangeException( ErrorMessage.OutOfRange(nameof(index), 0, NumberVariableCount, index)); } switch (index) { case 0: return(EventCommandCode.Code); case 1: if (!IsOrderByString) { return(EventIdOrName.ToInt()); } return(0); case 2: if (!IsOrderByString && (EventIdOrName.ToInt().IsMapEventId() || EventIdOrName.ToInt().IsVariableAddress())) { // マップイベントID指定呼び出しの場合 return(Page - 1); } // コモンイベントID指定呼び出しの場合 var bytes = new byte[4]; bytes[0] = (byte)((StrArgValue << 4) + IntArgValue); bytes[1] = StrArgList.ReferenceFlg; bytes[2] = 0; bytes[3] = (byte)(IsGetReturnValue ? 1 : 0); return(bytes.ToInt32(Endian.Little)); default: // ここから可変長引数パターン // 数値引数の設定値を指すかどうかを確認する。 var tmpIndex = index - 3; if (tmpIndex < IntArgValue) { // 数値引数の設定値を返す return(IntArgList[tmpIndex]); } // 文字列引数の設定値を指すかどうかを確認する。 tmpIndex -= IntArgValue; if (tmpIndex < StrArgValue) { // 文字列引数の設定値を返す // ただし文字列直接指定ならば 0 を返す var strArg = StrArgList[tmpIndex]; if (strArg.InstanceIntOrStrType != IntOrStrType.Int) { return(0); } return(strArg.ToInt()); } // 残るは戻り値格納アドレスのみ tmpIndex -= StrArgValue; if (tmpIndex != 0 || !IsGetReturnValue) { // おかしい(通常来ないはず) throw new InvalidOperationException(); } return(ResultOutputAddress); } }