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; } }
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); }
public override void Enter(params object[] args) { var playerId = (int)args[0]; Game.Instance.DoAction(new MudAction("enterworld", playerId)); _player = Game.Instance.GetEntityById(playerId); }
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); }
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<#>."); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public MudEntity CreatePlayerCharacter(int accountId, MudEntity model) { return(_entityFactory.CreatePlayerCharacter(accountId, model)); }