public async Task CreateCharacterAsync_CreateANewCharacterInDatabase_SettingOwnerToCurrentUserId() { const int userId = 10; var createCharacterRequest = new CreateCharacterRequest { Name = "some-name" }; var naheulbookExecutionContext = new NaheulbookExecutionContext { UserId = userId }; var createdCharacter = new Character(); var initialInventory = new List <Item>(); _characterFactory.CreateCharacter(createCharacterRequest) .Returns(createdCharacter); _itemUtil.CreateInitialPlayerInventoryAsync(createCharacterRequest.Money) .Returns(initialInventory); var actualCharacter = await _service.CreateCharacterAsync(naheulbookExecutionContext, createCharacterRequest); Received.InOrder(() => { _unitOfWorkFactory.GetUnitOfWork().Characters.Add(createdCharacter); _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync(); }); actualCharacter.OwnerId.Should().Be(userId); createdCharacter.Should().BeSameAs(actualCharacter); createdCharacter.Items.Should().BeSameAs(initialInventory); }
public async Task <Character> CreateCharacterAsync(NaheulbookExecutionContext executionContext, CreateCharacterRequest request) { using (var uow = _unitOfWorkFactory.CreateUnitOfWork()) { var character = _characterFactory.CreateCharacter(request); if (request.GroupId.HasValue) { var group = await uow.Groups.GetAsync(request.GroupId.Value); if (group == null) { throw new GroupNotFoundException(request.GroupId.Value); } _authorizationUtil.EnsureIsGroupOwner(executionContext, group); character.Group = group; } character.OwnerId = executionContext.UserId; character.Items = await _itemUtil.CreateInitialPlayerInventoryAsync(request.Money); uow.Characters.Add(character); await uow.SaveChangesAsync(); return(character); } }
public ICharacterInformation ConvertCharacterToJson(ICharacterInformationJson characterInfo) { var retChar = _characterFactory.CreateCharacter(); _mappingEngine.Map(characterInfo, retChar); return(retChar); }
public void Awake() { charFactory = GetComponent <PlayableCharacterFactory>(); //Create the character. _myCharacter = charFactory.CreateCharacter(AvailableCharacters.Ruyo); //Assign freshly created character as child of this gameobject. _myCharacter.CharacterInstance.transform.parent = transform; //Make sure that the created character is positioned in the middle of the player gameobject. _myCharacter.CharacterInstance.transform.localPosition = Vector3.zero; //Get the launcher from the character and store its script ref... _launcher = _myCharacter.CharacterInstance.GetComponentInChildren <ILauncher>(); //...same with the crosshair + setup the camera script. _crosshair = _myCharacter.CharacterInstance.GetComponentInChildren <Crosshair>(); _crosshair.Begin(_cameraWorks); _controller2D = _myCharacter.CharacterInstance.GetComponentInChildren <IController2D>(); //Get the healthbar script for the character, if it has any healthbar. _myCharacter.AddHealthBarReference(GetComponentInChildren <RuyoHealthbar>()); _skillManager.AddObserver(_crosshair); //Create the skills factory. Then retrieve the factory script and proper skill factory. GameObject factorySelector = Instantiate(_factorySelectorPrefab); factorySelector.transform.parent = this.gameObject.transform; _skillFactorySelector = factorySelector.GetComponent <ISkillFactorySelector>(); ISkillFactory skillFactory = _skillFactorySelector.SelectFactory(AvailableCharacters.Ruyo); //Using the provided skill factory, generate the skills for the character. IGetTransform playerTransform = this; IGetTransform shotSpawnerTransform = _launcher; //Create and assign the skills to the skills manager and save them temporarily for the //skillBarManager. IDictionary <SkillType, Sprite> skillsIcons = new Dictionary <SkillType, Sprite>(); //Basic skill: ISkill newSkill = skillFactory.CreateSkill(SkillType.Basic, ref shotSpawnerTransform, ref playerTransform); newSkill.GameObject.transform.parent = this.gameObject.transform; _skillManager.AddSkill(SkillType.Basic, newSkill); //First active skill: newSkill = skillFactory.CreateSkill(SkillType.First, ref shotSpawnerTransform, ref playerTransform); newSkill.GameObject.transform.parent = this.gameObject.transform; _skillManager.AddSkill(SkillType.First, newSkill); skillsIcons.Add(SkillType.First, newSkill.icon); //Second active skill: newSkill = skillFactory.CreateSkill(SkillType.Second, ref shotSpawnerTransform, ref playerTransform); newSkill.GameObject.transform.parent = this.gameObject.transform; _skillManager.AddSkill(SkillType.Second, newSkill); skillsIcons.Add(SkillType.Second, newSkill.icon); //Third active skill: newSkill = skillFactory.CreateSkill(SkillType.Third, ref shotSpawnerTransform, ref playerTransform); newSkill.GameObject.transform.parent = this.gameObject.transform; _skillManager.AddSkill(SkillType.Third, newSkill); skillsIcons.Add(SkillType.Third, newSkill.icon); //Initialize the skillBarManager skill icons. SkillsBarManager skillBarManager = _myCharacter.CharacterInstance.GetComponentInChildren <SkillsBarManager>(); skillBarManager.InitializeSkillsIcons(skillsIcons); _skillManager.AddObserver(skillBarManager); }
/// <inheritdoc /> public async Task <Character> LoadPlayer(int characterId, WorldClient client) { var newPlayer = await _characterFactory.CreateCharacter(characterId, client); if (newPlayer is null) { return(null); } Players.TryAdd(newPlayer.Id, newPlayer); TradeManagers.TryAdd(newPlayer.Id, new TradeManager(this, newPlayer)); PartyManagers.TryAdd(newPlayer.Id, new PartyManager(this, newPlayer)); DuelManagers.TryAdd(newPlayer.Id, new DuelManager(this, newPlayer)); _logger.LogDebug($"Player {newPlayer.Id} connected to game world"); newPlayer.Client.OnPacketArrived += Client_OnPacketArrived; return(newPlayer); }
private async Task GetCharacterAndSeiyuuInformation(IAnime anime, string username, string password) { try { //Our first task is to retrieve the MAL anime - for now we cheat and grab it from our example data var doc = new HtmlDocument(); var url = anime.AdditionalInfoUrls.CharactersAndStaff; HttpClient webClient; if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)) { var handler = new HttpClientHandler {Credentials = new NetworkCredential(username, password)}; webClient = new HttpClient(handler); } else { webClient = new HttpClient(); } var data = await webClient.GetStreamAsync(new Uri(url)); doc.Load(data); var tableNodes = doc.DocumentNode.SelectNodes("//table"); foreach (var table in tableNodes) { var rows = table.ChildNodes.Where(t => t.Name == "tr"); //var rows = table.SelectNodes("//tr"); if (rows != null) { foreach (var row in rows) { var columns = row.ChildNodes.Where(t => t.Name == "td").ToList(); if (columns.Count == 3) { var tmpChar = _characterFactory.CreateCharacter(); var charPic = columns[0].ChildNodes["div"].ChildNodes["a"].ChildNodes["img"].Attributes["data-src"]?.Value; if (string.IsNullOrEmpty(charPic)) { charPic = columns[0].ChildNodes["div"].ChildNodes["a"].ChildNodes["img"].Attributes["src"]?.Value; } tmpChar.CharacterPicture = charPic; tmpChar.CharacterName = columns[1].ChildNodes["a"].InnerText; tmpChar.CharacterUrl = columns[1].ChildNodes["a"].Attributes["href"].Value; tmpChar.CharacterType = columns[1].ChildNodes["div"].InnerText; var vaDetail = columns[2].ChildNodes["table"]?.ChildNodes.Where(t => t.Name == "tr").ToList(); if(vaDetail == null) continue; foreach (var detail in vaDetail) { var tmpSeiyuu = _characterFactory.CreateSeiyuu(); tmpSeiyuu.Language = detail.ChildNodes["td"].ChildNodes["small"].InnerText; tmpSeiyuu.Name = detail.ChildNodes["td"].ChildNodes["a"].InnerText; tmpSeiyuu.Url = detail.ChildNodes["td"].ChildNodes["a"].Attributes["href"].Value; var tmpImage = detail.ChildNodes[3].ChildNodes["div"].ChildNodes["a"].ChildNodes["img"].Attributes["data-src"]?.Value; if (string.IsNullOrEmpty(tmpImage)) { tmpImage = detail.ChildNodes[3].ChildNodes["div"].ChildNodes["a"].ChildNodes["img"].Attributes["src"].Value; } tmpSeiyuu.PictureUrl = tmpImage; tmpChar.Seiyuu.Add(tmpSeiyuu); } if(anime.CharacterInformation.Count(t => t.CharacterUrl == tmpChar.CharacterUrl) == 0) anime.CharacterInformation.Add(tmpChar); } } } } } catch (Exception ex) { Log.Error(ex, "Error occured while trying to retrieve character and staff data"); } }
public ActionResult CreateCharacter(CharacterViewModel viewModel) { characterFactory.CreateCharacter(viewModel); return(Redirect("Index")); }
public ICharacter CreateCharacter(string type) { return(characters.CreateCharacter(type)); }
public async Task Handle(WorldClient client, SelectCharacterPacket packet) { var character = await _characterFactory.CreateCharacter(client.UserId, packet.CharacterId); if (character is null) { _packetFactory.SendCharacterSelected(client, false, 0); return; } var ok = _gameWorld.TryLoadPlayer(character); if (!ok) { _packetFactory.SendCharacterSelected(client, false, 0); return; } _packetFactory.SendCharacterSelected(client, true, character.Id); _packetFactory.SendWorldDay(client); // TODO: why do we need it? _packetFactory.SendGuildList(client, await _guildManager.GetAllGuilds(_countryProvider.Country == CountryType.Light ? Fraction.Light : Fraction.Dark)); var online = new List <DbCharacter>(); var notOnline = new List <DbCharacter>(); foreach (var m in _guildManager.GuildMembers) { if (_gameWorld.Players.ContainsKey(m.Id)) { online.Add(m); } else { notOnline.Add(m); } } _packetFactory.SendGuildMembersOnline(client, online, true); _packetFactory.SendGuildMembersOnline(client, notOnline, false); _packetFactory.SendDetails(client, character); _packetFactory.SendAdditionalStats(client, character); _packetFactory.SendCurrentHitpoints(client, character.HealthManager.CurrentHP, character.HealthManager.CurrentMP, character.HealthManager.CurrentSP); _packetFactory.SendInventoryItems(client, character.InventoryManager.InventoryItems.Values); // WARNING: some servers expanded invetory to 6 bags(os is 5 bags), if you send item in 6 bag, client will crash! foreach (var item in character.InventoryManager.InventoryItems.Values.Where(i => i.ExpirationTime != null)) { _packetFactory.SendItemExpiration(client, item); } _packetFactory.SendLearnedSkills(client, character); _packetFactory.SendOpenQuests(client, character.QuestsManager.Quests.Where(q => !q.IsFinished)); _packetFactory.SendFinishedQuests(client, character.QuestsManager.Quests.Where(q => q.IsFinished)); _packetFactory.SendActiveBuffs(client, character.BuffsManager.ActiveBuffs); _packetFactory.SendFriends(client, character.FriendsManager.Friends.Values); _packetFactory.SendBlessAmount(client, character.CountryProvider.Country, character.CountryProvider.Country == CountryType.Light ? Bless.Instance.LightAmount : Bless.Instance.DarkAmount, Bless.Instance.RemainingTime); _packetFactory.SendBankItems(client, character.BankManager.BankItems.Values); _packetFactory.SendWarehouseItems(client, character.WarehouseManager.Items.Values); _packetFactory.SendTeleportSavedPositions(client, character.TeleportationManager.SavedPositions); if (character.GuildManager.HasGuild) { _packetFactory.SendGuildNpcs(client, await character.GuildManager.GetGuildNpcs()); } _packetFactory.SendAutoStats(client, _statsManager.AutoStr, _statsManager.AutoDex, _statsManager.AutoRec, _statsManager.AutoInt, _statsManager.AutoWis, _statsManager.AutoLuc); #if !EP8_V2 _packetFactory.SendAccountPoints(client, character.AdditionalInfoManager.Points); // WARNING: This is necessary if you have an in-game item mall. #endif _packetFactory.SendSkillBar(client, character.QuickItems); // Should be always the last! Changes packet encryption to xor! client.CryptoManager.UseExpandedKey = true; }