Пример #1
0
        public override void Handle(string command)
        {
            switch (_state)
            {
            case MainMenuState.MainMenu:
                if (command == "help" || command == "?")
                {
                    Game.Instance.SendMessage(_account.Id, "You asked for <#orange>main help<#>.");
                }
                else if (command == "money")
                {
                    Game.Instance.SendMessage(_account.Id, "You asked for <#lightgreen>main $MONEY<#>.");
                }
                else if (command == "c")
                {
                    _connection.RemoveHandler();
                    _connection.AddHandler <NewCharacterHandler>();
                    _connection.Handler.Enter();
                }
                else if (command == "p")
                {
                    _state = MainMenuState.ChoosingCharacter;
                    _script.Call(_script.Globals["printCharacters"]);
                }
                break;

            case MainMenuState.ChoosingCharacter:
                int idx;
                if (!int.TryParse(command, out idx))
                {
                    if (command == "q")
                    {
                        _state = MainMenuState.MainMenu;
                        _connection.Handler.Enter();
                    }
                    else
                    {
                        Game.Instance.SendMessage(_account.Id, "Please only enter a number or press \"<#white>q<#>\" to go back.");
                    }
                    break;
                }
                MudEntity chosenCharacter = null;
                try
                {
                    chosenCharacter = _characters[idx - 1];
                    if (chosenCharacter != null)
                    {
                        Game.Instance.SendMessage(_account.Id, $"You chose {chosenCharacter.Name}");
                        _connection.RemoveHandler();
                        _connection.AddHandler <GameplayHandler>();
                        _connection.Handler.Enter(chosenCharacter.Id);
                    }
                }
                catch (ArgumentOutOfRangeException)
                {
                    Game.Instance.SendMessage(_account.Id, "Invalid selection.  Please try again.");
                }
                break;
            }
        }
Пример #2
0
        public MudEntity CreateEntity(string name = null, Dictionary <string, string> traits = null)
        {
            var e = new Entity {
                Name = name, Traits = new List <Trait>()
            };

            e.Id = _entities.Add(e);

            var dto = new MudEntity(e.Id, e.Name);

            if (traits == null)
            {
                return(dto);
            }

            foreach (var t in traits)
            {
                e.Traits.Add(new Trait {
                    EntityId = e.Id, Name = t.Key, Value = t.Value
                });
                dto.Traits.Add(t.Key, t.Value);
            }

            _entities.Update(e);

            return(dto);
        }
Пример #3
0
        public override void Enter(params object[] args)
        {
            var playerId = (int)args[0];

            Game.Instance.DoAction(new MudAction("enterworld", playerId));
            _player = Game.Instance.GetEntityById(playerId);
        }
Пример #4
0
        public List <MudEntity> LoadCharactersFromAccount(int accountId)
        {
            var account  = _accounts.GetById(accountId, x => x.Characters);
            var existing = _entities.Find(x => account.Characters.Select(c => c.EntityId).Contains(x.Id), o => o.Traits, o => o.Components).ToList();
            var retVal   = new List <MudEntity>();

            foreach (var entity in existing)
            {
                var e = new MudEntity(entity.Id, entity.Name);

                foreach (var trait in entity.Traits)
                {
                    e.Traits.Add(trait.Name, trait.Value);
                }
                foreach (var cmp in entity.Components)
                {
                    ComponentManager.Instance.AssignComponent(e, cmp.ComponentName);
                }

                if (entity.Traits.Count != e.Traits.Count)
                {
                    SaveEntity(e);
                }

                retVal.Add(e);
            }
            return(retVal);
        }
Пример #5
0
        public override void Handle(string command)
        {
            if (command == "q")
            {
                _connection.RemoveHandler();
                _connection.AddHandler <MainMenuHandler>();
                _connection.Handler.Enter();
                return;
            }

            switch (_state)
            {
            case NewCharState.EnteringName:
                var name = char.ToUpper(command[0]) + command.Substring(1);
                _newChar.Name = name;

                //test persistence
                ComponentManager.Instance.AssignComponent(_newChar, "health",
                                                          new MudTrait("maxHP", "50"),
                                                          new MudTrait("currHP", "45"));
                ComponentManager.Instance.AssignComponent(_newChar, "physical",
                                                          new MudTrait("description", $"This is {_newChar.Name}'s description."),
                                                          new MudTrait("weight", "175"));

                Game.Instance.SendMessage(_account.Id, $"Ah, welcome, {name}... 'tis a fine name, indeed.\n");
                Game.Instance.SendMessage(_account.Id, _script.Call(_script.Globals["printRaces"]).String);

                _newChar.Traits.Add("room", "3");

                _newChar.Traits.Add("accountId", _account.Id.ToString());
                _newChar = Game.Instance.CreatePlayerCharacter(_account.Id, _newChar);

                _state = NewCharState.ChoosingRace;
                break;

            case NewCharState.ChoosingRace:
                Game.Instance.SendMessage(_account.Id, "Choosing races is hard!");
                break;

            case NewCharState.EnteringDescription:
                break;
            }

            if (command == "help" || command == "?")
            {
                Game.Instance.SendMessage(_account.Id, "You asked for <#orange>main help<#>.");
            }
            else if (command == "money")
            {
                Game.Instance.SendMessage(_account.Id, "You asked for <#lightgreen>main $MONEY<#>.");
            }
        }
Пример #6
0
        public MudEntity GetEntityById(int id)
        {
            var e = _entities.GetById(id, x => x.Traits);

            var dto = new MudEntity(e.Id, e.Name);

            foreach (var trait in e.Traits)
            {
                dto.Traits.Add(trait.Name, trait.Value);
            }

            return(dto);
        }
Пример #7
0
        public IEnumerable <MudEntity> GetEntitiesFromTrait(MudEntity entity, string trait)
        {
            var retVal = new List <MudEntity>();

            if (!entity.Traits.Has(trait))
            {
                return(retVal);
            }

            var entitiesString = entity.Traits.Get(trait).Value;
            var ids            = entitiesString.Split(',').Select(x => int.Parse(x)).ToList();

            retVal.AddRange(ids.Select(x => GetEntityById(x)));
            return(retVal);
        }
Пример #8
0
        public MudEntity SaveEntity(MudEntity entity)
        {
            var existing = _entities.GetById(entity.Id, x => x.Traits);

            existing.Traits.Clear();

            foreach (var trait in entity.Traits.GetAll())
            {
                existing.Traits.Add(new Trait {
                    EntityId = entity.Id, Name = trait.Name, Value = trait.Value
                });
            }

            existing.Components = entity.Components.GetAll().Select(x => new Entity_Component {
                EntityId = entity.Id, ComponentName = x.Name
            }).ToList();
            _entities.Update(existing);

            return(entity);
        }
Пример #9
0
        public void AssignComponent(MudEntity entity, string componentName, params MudTrait[] defaults)
        {
            var script = new Script();

            script.Globals["MudComponent"] = typeof(MudComponent);
            script.Globals["MudTrait"]     = typeof(MudTrait);
            script.Globals["TraitSet"]     = typeof(TraitSet);
            script.Globals["MudEntity"]    = typeof(MudEntity);
            script.DoString(_components[componentName]);

            var args = new Dictionary <string, string>();

            foreach (var trait in defaults)
            {
                args.Add(trait.Name, trait.Value);
            }

            var cmp = (MudComponent)script.Call(script.Globals["init"], entity, script, args).UserData.Object;

            entity.Components.Add(cmp);
        }
Пример #10
0
        public MudEntity CreatePlayerCharacter(int accountId, MudEntity model)
        {
            var e = new Entity
            {
                Name   = model.Name,
                Traits = new List <Trait>(model.Traits.GetAll().Select(t => new Trait {
                    Name = t.Name, Value = t.Value
                }))
            };

            e.Id = _entities.Add(e);

            var account = _accounts.GetById(accountId);

            if (account.Characters == null)
            {
                account.Characters = new List <Account_Entity> {
                    new Account_Entity {
                        AccountId = accountId, EntityId = e.Id
                    }
                }
            }
            ;
            else
            {
                account.Characters.Add(new Account_Entity {
                    AccountId = accountId, EntityId = e.Id
                });
            }
            _accounts.Update(account);

            var newChar = new MudEntity(e.Id, e.Name);

            foreach (var t in e.Traits)
            {
                newChar.Traits.Add(t.Name, t.Value);
            }

            return(newChar);
        }
Пример #11
0
 public override void Enter(params object[] args)
 {
     _state   = NewCharState.EnteringName;
     _newChar = new MudEntity(-1);
     Game.Instance.SendMessage(_account.Id, _script.Call(_script.Globals["enter"]).String);
 }
Пример #12
0
        void SetupWorld()
        {
            var zone = new MudZone(1, "The Enchanted Forest");

            var room1 = new MudRoom(1, 1, "Western Clearing");

            room1.Traits.Add("description", "The passageway gives way to an expanse of land unobstructed by trees of any shape or size.");
            var room2 = new MudRoom(2, 1, "Eastern Thicket");

            room2.Traits.Add("description", "You find yourself in the midst of a densely packed bushes and shrubs.");
            var room3 = new MudRoom(3, 1, "Camp");

            room3.Traits.Add("description", "Surrounded by thick shrubbery and large, looming pine trees lies a modest encampment.  At its center, a fire crackles softly.");

            //add an item
            var torch = new MudEntity(777, "torch");

            torch.Traits.Add("item", "true");
            torch.Traits.Add("quantity", "1");
            ComponentManager.Instance.AssignComponent(torch, "item");
            _entities.Add(torch.Id, torch);
            room3.Entities.Add(torch.Id);
            torch.Traits.Add("room", room3.Id.ToString());

            //add a mouse and snake and bear
            var mouse = new MudEntity(888, "mouse");

            mouse.Traits.Add("race", "mouse");
            _entities.Add(mouse.Id, mouse);
            room3.Entities.Add(mouse.Id);

            var snake = new MudEntity(999, "snake");

            snake.Traits.Add("race", "snake");
            _entities.Add(snake.Id, snake);
            room3.Entities.Add(snake.Id);

            var bear = new MudEntity(222, "brown bear");

            bear.Traits.Add("race", "bear");
            _entities.Add(bear.Id, bear);
            room3.Entities.Add(bear.Id);


            //camp --> west
            var p1   = new MudPortal(1001, "Passageway 1");
            var p1e1 = new MudPortalEntry(1, room3.Id, room1.Id, "west");
            var p1e2 = new MudPortalEntry(2, room1.Id, room3.Id, "east");

            p1.Entries.AddRange(new[] { p1e1, p1e2 });

            //camp --> east
            var p2   = new MudPortal(1002, "Passageway 2");
            var p2e1 = new MudPortalEntry(3, room3.Id, room2.Id, "east");
            var p2e2 = new MudPortalEntry(4, room2.Id, room3.Id, "west");

            p2.Entries.AddRange(new[] { p2e1, p2e2 });

            room3.Portals.Add(p1.Id);
            room3.Portals.Add(p2.Id);

            room1.Portals.Add(p1.Id);

            room2.Portals.Add(p2.Id);

            zone.Rooms.AddRange(new[] { room1.Id, room2.Id, room3.Id });

            _zones.Add(zone.Id, zone);
            _rooms.Add(room1.Id, room1);
            _rooms.Add(room2.Id, room2);
            _rooms.Add(room3.Id, room3);
            _portals.Add(p1.Id, p1);
            _portals.Add(p2.Id, p2);
            _portalEntries.Add(p1e1.Id, p1e1);
            _portalEntries.Add(p1e2.Id, p1e2);
            _portalEntries.Add(p2e1.Id, p2e1);
            _portalEntries.Add(p2e2.Id, p2e2);
        }
Пример #13
0
 public MudEntity CreatePlayerCharacter(int accountId, MudEntity model)
 {
     return(_entityFactory.CreatePlayerCharacter(accountId, model));
 }