Beispiel #1
0
        public static string act_string(string format, CharacterInstance to, CharacterInstance ch, object arg1, object arg2, int flags)
        {
            var dontUpper = !format.StartsWith("$");

            int varPosition;
            var startIndex = 0;
            var sb         = new StringBuilder(format);
            var buffer     = string.Empty;

            do
            {
                const string chars = "$";
                var          anyOf = chars.ToCharArray();

                varPosition = sb.IndexOfAny(anyOf, startIndex);
                if (varPosition == -1)
                {
                    continue;
                }

                //// Is it a valid variable?
                var var = sb.Substring(varPosition, 2);
                if (!string.IsNullOrEmpty(var))
                {
                    CharacterInstance vch;
                    ObjectInstance    obj;

                    switch (var)
                    {
                    case "$t":
                        buffer = arg1.ToString();
                        break;

                    case "$T":
                        buffer = arg2.ToString();
                        break;

                    case "$n":
                        if (ch.CurrentMorph == null)
                        {
                            buffer = to != null?Macros.PERS(ch, to) : Macros.NAME(ch);
                        }
                        else if (!flags.IsSet(Program.STRING_IMM))
                        {
                            buffer = to != null?Macros.MORPHERS(ch, to) : MORPHNAME(ch);
                        }
                        else
                        {
                            buffer = $"(MORPH) {(to != null ? Macros.PERS(ch, to) : Macros.NAME(ch))}";
                        }
                        break;

                    case "$N":
                        vch = arg2.CastAs <CharacterInstance>();
                        if (vch.CurrentMorph == null)
                        {
                            buffer = to != null?Macros.PERS(vch, to) : Macros.NAME(vch);
                        }
                        else if (!flags.IsSet(Program.STRING_IMM))
                        {
                            buffer = to != null?Macros.MORPHERS(vch, to) : MORPHNAME(vch);
                        }
                        else
                        {
                            buffer = $"(MORPH) {(to != null ? Macros.PERS(vch, to) : Macros.NAME(vch))}";
                        }
                        break;

                    case "$e":
                        buffer = ch.Gender.SubjectPronoun();
                        break;

                    case "$E":
                        vch    = arg2.CastAs <CharacterInstance>();
                        buffer = vch.Gender.SubjectPronoun();
                        break;

                    case "$m":
                        buffer = ch.Gender.ObjectPronoun();
                        break;

                    case "$M":
                        vch    = arg2.CastAs <CharacterInstance>();
                        buffer = vch.Gender.ObjectPronoun();
                        break;

                    case "$s":
                        buffer = ch.Gender.PossessivePronoun();
                        break;

                    case "$S":
                        vch    = arg2.CastAs <CharacterInstance>();
                        buffer = vch.Gender.PossessivePronoun();
                        break;

                    case "$q":
                        buffer = to == ch ? "" : "s";
                        break;

                    case "$Q":
                        buffer = to == ch ? "your" : ch.Gender.PossessivePronoun();
                        break;

                    case "$p":
                        obj    = arg1.CastAs <ObjectInstance>();
                        buffer = to == null || to.CanSee(obj)
                                         ? obj_short(obj)
                                         : "something";
                        break;

                    case "$P":
                        obj    = arg2.CastAs <ObjectInstance>();
                        buffer = to == null || to.CanSee(obj)
                                         ? obj_short(obj)
                                         : "something";
                        break;

                    case "$d":
                        if (string.IsNullOrEmpty(arg2?.ToString()))
                        {
                            buffer = "door";
                        }
                        else
                        {
                            var tuple = arg2.ToString().FirstArgument();
                            buffer = tuple.Item1;
                        }
                        break;
                    }
                    sb.ReplaceFirst(var, buffer);
                }

                startIndex = varPosition + 1;
            }while (varPosition != -1);

            if (!dontUpper)
            {
                sb.CapitalizeFirst();
            }
            return(sb.ToString());
        }
Beispiel #2
0
 public static string MORPHNAME(CharacterInstance ch)
 {
     return(!string.IsNullOrEmpty(ch.CurrentMorph?.Morph?.ShortDescription)
         ? ch.CurrentMorph.Morph.ShortDescription
         : Macros.NAME(ch));
 }