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);
        }
示例#2
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        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");
            }

        }
示例#7
0
 public ActionResult CreateCharacter(CharacterViewModel viewModel)
 {
     characterFactory.CreateCharacter(viewModel);
     return(Redirect("Index"));
 }
示例#8
0
 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;
        }