/// <summary>
        /// マップキャラID文字列を取得する。
        /// </summary>
        /// <param name="characterId">キャラID</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>
        ///     マップイベントID文字列。
        ///     該当マップがプロジェクト内に読み込まれていない場合、空文字。
        /// </returns>
        public (bool, MapEventName) GetMapEventIdStr(MapCharacterId characterId,
                                                     EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            const string notFound = "";

            if (characterId == -1)
            {
                return(true, "このマップイベント");
            }
            if (characterId == -2)
            {
                return(true, "主人公");
            }
            if (characterId < -2)
            {
                var memberId = characterId * -1 - 2;
                return(true, $"仲間{memberId}");
            }

            if (characterId.ToInt().IsNumericVariableAddressSimpleCheck())
            {
                var varName = Master.GetNumericVariableAddressString(characterId, type, desc);
                return(true, $"キャラ[{varName}]");
            }

            var targetEvent = Master.MapData?.MapEvents.FirstOrDefault(x => x.MapEventId == characterId);

            if (targetEvent is null)
            {
                return(false, notFound);
            }

            return(true, $"Ev{characterId}");
        }
        /// <summary>
        /// キャラクター名を取得する。
        /// </summary>
        /// <param name="characterId">キャラクターID</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>
        ///     マップイベント名。
        ///     該当マップがプロジェクト内に読み込まれていない場合、空文字。
        /// </returns>
        public MapEventName GetCharacterName(MapCharacterId characterId,
                                             EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            if (characterId == -1)
            {
                return("このイベント");
            }
            if (characterId == -2)
            {
                return("主人公");
            }
            if (characterId < -2)
            {
                return($"仲間{(characterId + 2) * -1}");
            }

            if (!characterId.ToInt().IsVariableAddressSimpleCheck())
            {
                return($"Ev{characterId}");
            }

            var varAddressSentence = Master.GetNumericVariableAddressString(characterId, type, desc);

            return($"キャラ[{varAddressSentence}]");
        }
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     Public Method
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        public string GetCsvIoEventCommandSentence(
            CommonEventSentenceResolveDatabaseDesc desc, EventCommandSentenceType type,
            EventCommandSentenceResolveDesc commonDesc)
        {
            if (desc is null)
            {
                throw new ArgumentNullException(
                          ErrorMessage.NotNull(nameof(desc)));
            }
            if (desc.TypeId is null && desc.TypeName is null)
            {
                throw new ArgumentNullException(
                          ErrorMessage.NotNull(
                              $"{nameof(desc)}.{nameof(desc.TypeId)}" +
                              $"または{nameof(desc)}.{nameof(desc.TypeName)}"));
            }
            if (desc.DataId is null && desc.DataName is null)
            {
                throw new ArgumentNullException(
                          ErrorMessage.NotNull(
                              $"{nameof(desc)}.{nameof(desc.DataId)}" +
                              $"または{nameof(desc)}.{nameof(desc.DataName)}"));
            }
            if (type is null)
            {
                throw new ArgumentNullException(
                          ErrorMessage.NotNull(nameof(type)));
            }
            if (commonDesc is null)
            {
                throw new ArgumentNullException(
                          ErrorMessage.NotNull(nameof(commonDesc)));
            }

            string paramType;
            string typeName;
            TypeId?typeId;

            if (!(desc.TypeId is null))
            {
                paramType = Master.GetNumericVariableAddressStringIfVariableAddress(desc.TypeId.Value, type,
                                                                                    commonDesc);
                typeName = Master.GetDatabaseTypeName(desc.DbKind, desc.TypeId.Value).Item2;
                typeId   = desc.TypeId;
            }
Beispiel #4
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     Public Method
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// int値からVariableAddressのイベントコマンド文字列(数値変数、文字列変数両用)を取得する。
        /// </summary>
        /// <param name="value">対象</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>VariableAddressのイベントコマンド文字列</returns>
        /// <exception cref="ArgumentNullException">
        ///     typeがnullの場合、
        ///     または必要なときにdescがnullの場合
        /// </exception>
        public string GetVariableAddressString(int value,
                                               EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            if (type is null)
            {
                throw new ArgumentNullException(
                          ErrorMessage.NotNull(nameof(type)));
            }

            if (value.TryToVariableAddress(out var variableAddress))
            {
                return(variableAddress.MakeEventCommandString(Master, type,
                                                              VariableAddressValueType.Both, desc));
            }

            return(string.Format(VariableAddressValueType.Both.EventCommandStringErrorFormat,
                                 value));
        }
        /// <summary>
        /// マップイベント名を取得する。
        /// </summary>
        /// <param name="mapEventId">マップイベントID</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>
        ///     イベント名。
        ///     該当マップがプロジェクト内に読み込まれていない場合、空文字。
        /// </returns>
        public (bool, MapEventName) GetMapEventName(MapEventId mapEventId,
                                                    EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            const string notFound = "";

            if (mapEventId == -1)
            {
                return(true, "このマップイベント");
            }

            var targetEvent = Master.MapData?.MapEvents.FirstOrDefault(x => x.MapEventId == mapEventId);

            if (targetEvent is null)
            {
                return(false, notFound);
            }

            return(true, targetEvent.EventName);
        }
        /// <summary>
        /// 場所移動対象のイベント名を取得する。
        /// </summary>
        /// <param name="eventId">イベントID</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>
        ///     イベント名。
        /// </returns>
        public MapEventName GetTransferEventName(int eventId,
                                                 EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            if (eventId == -1 || eventId == -10001)
            {
                return("主人公");
            }
            if (eventId == -2)
            {
                return("このEv");
            }

            if (!eventId.IsVariableAddressSimpleCheck())
            {
                var mapEventName = GetMapEventName(eventId, type, desc).Item2;
                return($"Ev{eventId}[{mapEventName}]");
            }

            var varAddressSentence = Master.GetNumericVariableAddressString(eventId, type, desc);

            return($"Ev[{varAddressSentence}]");
        }
Beispiel #7
0
        /// <summary>
        /// int値からVariableAddressのイベントコマンド文字列(数値変数、文字列変数両用)を取得する。
        /// 指定した値がVariableAddressの範囲外の場合(999999以下の場合)、int値を文字列に変換して返す。
        /// </summary>
        /// <param name="value">対象</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>
        ///     VariableAddressのイベントコマンド文字列。
        ///     変数アドレス値でない場合、value(を文字列化した値)。
        /// </returns>
        /// <exception cref="ArgumentNullException">
        ///     typeがnullの場合、
        ///     または必要なときにdescがnullの場合
        /// </exception>
        public string GetVariableAddressStringIfVariableAddress(int value,
                                                                EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            if (type is null)
            {
                throw new ArgumentNullException(
                          ErrorMessage.NotNull(nameof(type)));
            }

            if (!value.IsVariableAddressSimpleCheck())
            {
                return(value.ToString());
            }

            return(GetVariableAddressString(value, type, desc));
        }
        /// <summary>
        /// コモンイベント数値引数の文字列を取得する。
        /// </summary>
        /// <param name="id">コモンイベントID</param>
        /// <param name="intArgIndex">[Range(0, 0~4)]引数インデックス</param>
        /// <param name="value">引数設定値</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>コモンイベント数値引数の文字列</returns>
        public string GetCommonEventIntArgSentence(CommonEventId id,
                                                   CommonEventNumberArgIndex intArgIndex, int value,
                                                   EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            // 値が変数アドレス値の場合は引数の設定によらず変数アドレスの文字列だけを表示
            if (value.IsVariableAddressSimpleCheck())
            {
                return(Master.GetNumericVariableAddressString(value, type, desc));
            }

            // 該当コモンイベントが存在しないときは値をそのまま表示
            var target = Master.CommonEventList.FirstOrDefault(x => x.Id == id);

            if (target is null)
            {
                return(value.ToString());
            }

            // 該当引数が設定されていないときは値をそのまま表示
            if (intArgIndex >= target.NumberArgsLength)
            {
                return(value.ToString());
            }
            var argDesc = target.NumberArgDescList[intArgIndex];

            // 引数の値種別によって表示内容を決定
            if (argDesc.ArgType == CommonEventArgType.Normal)
            {
                return(value.ToString());
            }
            if (argDesc.ArgType == CommonEventArgType.ReferDatabase)
            {
                // -1以下の場合は手動指定した文字列
                if (value < 0)
                {
                    var targetCase = argDesc.GetAllSpecialCase()
                                     .FirstOrDefault(x => x.CaseNumber == value);

                    return(targetCase is null
                        ? value.ToString()
                        : $"{value.ToString()}:{targetCase.Description}");
                }

                // 0以上の場合はデータ名
                var(isFind, dataName) = Master.GetDatabaseDataName(argDesc.DatabaseUseDbKind,
                                                                   argDesc.DatabaseDbTypeId, value);
                if (!isFind)
                {
                    return(value.ToString());
                }

                return($"{value.ToString()}:{dataName}");
            }

            if (argDesc.ArgType == CommonEventArgType.Manual)
            {
                var targetCase = argDesc.GetAllSpecialCase()
                                 .LastOrDefault(x => x.CaseNumber == value);

                return(targetCase is null
                    ? value.ToString()
                    : $"{value.ToString()}:{targetCase.Description}");
            }

            // 通常ここへは来ない
            throw new InvalidOperationException();
        }
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     Public Method
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// マップキャラID文字列を取得する。
        /// </summary>
        /// <param name="characterId">キャラID</param>
        /// <param name="type">[NotNull] イベントコマンド種別</param>
        /// <param name="desc">[Nullable] 付加情報</param>
        /// <returns>
        ///     マップイベントID文字列。
        ///     mapEventIdがマップイベントIDとして不適切な場合、専用の文字列。
        ///     該当マップがプロジェクト内に読み込まれていない場合、空文字。
        /// </returns>
        public (bool, MapEventName) GetMapEventIdStrByNumericEventId(int characterId,
                                                                     EventCommandSentenceType type, EventCommandSentenceResolveDesc desc)
        {
            try
            {
                var castMapCharacterId = (MapCharacterId)characterId;
                return(GetMapEventIdStr(castMapCharacterId, type, desc));
            }
            catch
            {
                return(false, MapEventNameNotFound);
            }
        }