Пример #1
0
        public FamilyDTO LoadByCharacterId(long characterId)
        {
            try
            {
                using (OpenNosContext context = DataAccessHelper.CreateContext())
                {
                    FamilyCharacter familyCharacter = context.FamilyCharacter.AsNoTracking().FirstOrDefault(fc => fc.Character.CharacterId.Equals(characterId));
                    if (familyCharacter != null)
                    {
                        Family family = context.Family.AsNoTracking().FirstOrDefault(a => a.FamilyId.Equals(familyCharacter.FamilyId));
                        if (family != null)
                        {
                            FamilyDTO dto = new FamilyDTO();
                            if (Mapper.Mappers.FamilyMapper.ToFamilyDTO(family, dto))
                            {
                                return(dto);
                            }

                            return(null);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
            return(null);
        }
        public SaveResult InsertOrUpdate(ref FamilyCharacterDTO character)
        {
            try
            {
                using (OpenNosContext context = DataAccessHelper.CreateContext())
                {
                    long            familyCharacterId = character.FamilyCharacterId;
                    FamilyCharacter entity            = context.FamilyCharacter.FirstOrDefault(c => c.FamilyCharacterId.Equals(familyCharacterId));

                    if (entity == null)
                    {
                        character = Insert(character, context);
                        return(SaveResult.Inserted);
                    }

                    character = Update(entity, character, context);
                    return(SaveResult.Updated);
                }
            }
            catch (Exception e)
            {
                Logger.Error(string.Format(Language.Instance.GetMessageFromKey("INSERT_ERROR"), character, e.Message), e);
                return(SaveResult.Error);
            }
        }
Пример #3
0
    public void changeLoyalty(int amountChanged, string characterToChange)
    {
        FamilyCharacter currentCharacter = null;

        switch (characterToChange.ToLower())
        {
        case "mother":
            currentCharacter = mother;
            break;

        case "father":
            currentCharacter = father;
            break;

        case "sister":
            currentCharacter = sister;
            break;

        case "brother":
            currentCharacter = brother;
            break;
        }

        if (currentCharacter != null)
        {
            currentCharacter.loyalty += amountChanged;
        }
        else
        {
            mother.loyalty  += amountChanged;
            father.loyalty  += amountChanged;
            sister.loyalty  += amountChanged;
            brother.loyalty += amountChanged;
        }
    }
Пример #4
0
        public DeleteResult Delete(long characterId)
        {
            try
            {
                using (OpenNosContext context = DataAccessHelper.CreateContext())
                {
                    FamilyCharacter familyCharacter = context.FamilyCharacter.FirstOrDefault(c => c.CharacterId == characterId);

                    if (familyCharacter == null)
                    {
                        return(DeleteResult.NotFound);
                    }

                    context.FamilyCharacter.Remove(familyCharacter);
                    context.SaveChanges();

                    return(DeleteResult.Deleted);
                }
            }
            catch (Exception e)
            {
                Logger.Error(string.Format(Language.Instance.GetMessageFromKey("DELETE_FAMILYCHARACTER_ERROR"), e.Message), e);
                return(DeleteResult.Error);
            }
        }
        private void ExecuteHandler(ClientSession session)
        {
            if (session.Character.Family == null ||
                !(session.Character.FamilyCharacter.Authority == FamilyAuthority.Head ||
                  session.Character.FamilyCharacter.Authority == FamilyAuthority.Assistant ||
                  (session.Character.FamilyCharacter.Authority == FamilyAuthority.Member &&
                   session.Character.Family.MemberAuthorityType == FamilyAuthorityType.All) ||
                  (session.Character.FamilyCharacter.Authority == FamilyAuthority.Manager &&
                   session.Character.Family.ManagerAuthorityType == FamilyAuthorityType.All)))
            {
                session.SendPacket(
                    UserInterfaceHelper.GenerateInfo(Language.Instance.GetMessageFromKey("NO_FAMILY_RIGHT")));
                return;
            }

            ItemInstance previousInventory =
                session.Character.Family.Warehouse.LoadBySlotAndType(Slot,
                                                                     InventoryType.FamilyWareHouse);

            if (Amount <= 0 || previousInventory == null ||
                Amount > previousInventory.Amount)
            {
                return;
            }

            ItemInstance item2 = previousInventory.DeepCopy();

            item2.Id          = Guid.NewGuid();
            item2.Amount      = Amount;
            item2.CharacterId = session.Character.CharacterId;

            previousInventory.Amount -= Amount;
            if (previousInventory.Amount <= 0)
            {
                previousInventory = null;
            }

            session.Character.Inventory.AddToInventory(item2, item2.Item.Type);
            session.SendPacket(UserInterfaceHelper.Instance.GenerateFStashRemove(Slot));
            if (previousInventory != null)
            {
                DAOFactory.ItemInstanceDAO.InsertOrUpdate(previousInventory);
            }
            else
            {
                FamilyCharacter fhead =
                    session.Character.Family.FamilyCharacters.Find(s => s.Authority == FamilyAuthority.Head);
                if (fhead == null)
                {
                    return;
                }

                DAOFactory.ItemInstanceDAO.DeleteFromSlotAndType(fhead.CharacterId, Slot,
                                                                 InventoryType.FamilyWareHouse);
            }

            session.Character.Family.InsertFamilyLog(FamilyLogType.WareHouseRemoved, session.Character.Name,
                                                     message: $"{item2.ItemVNum}|{Amount}");
        }
        private static FamilyCharacterDTO Update(FamilyCharacter entity, FamilyCharacterDTO character, OpenNosContext context)
        {
            if (entity != null)
            {
                Mapper.Mappers.FamilyCharacterMapper.ToFamilyCharacter(character, entity);
                context.SaveChanges();
            }
            if (Mapper.Mappers.FamilyCharacterMapper.ToFamilyCharacterDTO(entity, character))
            {
                return(character);
            }

            return(null);
        }
        private static FamilyCharacterDTO Insert(FamilyCharacterDTO character, OpenNosContext context)
        {
            FamilyCharacter entity = new FamilyCharacter();

            Mapper.Mappers.FamilyCharacterMapper.ToFamilyCharacter(character, entity);
            context.FamilyCharacter.Add(entity);
            context.SaveChanges();
            if (Mapper.Mappers.FamilyCharacterMapper.ToFamilyCharacterDTO(entity, character))
            {
                return(character);
            }

            return(null);
        }
Пример #8
0
        /// <summary>
        /// f_withdraw packet
        /// </summary>
        /// <param name="packet"></param>
        public void FamilyWithdraw(FWithdrawPacket packet)
        {
            if (Session.Character.Family == null ||
                !
                (Session.Character.FamilyCharacter.Authority == FamilyAuthority.Head ||
                 Session.Character.FamilyCharacter.Authority == FamilyAuthority.Assistant ||
                 Session.Character.FamilyCharacter.Authority == FamilyAuthority.Member && Session.Character.Family.MemberAuthorityType == FamilyAuthorityType.ALL ||
                 Session.Character.FamilyCharacter.Authority == FamilyAuthority.Manager && Session.Character.Family.ManagerAuthorityType == FamilyAuthorityType.ALL
                )
                )
            {
                Session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey("NO_FAMILY_RIGHT")));
                return;
            }
            ItemInstance previousInventory = Session.Character.Family.Warehouse.LoadBySlotAndType(packet.Slot, InventoryType.FamilyWareHouse);

            if (packet.Amount <= 0 || previousInventory == null || packet.Amount > previousInventory.Amount)
            {
                return;
            }
            ItemInstance item2 = previousInventory.DeepCopy();

            item2.Id          = Guid.NewGuid();
            item2.Amount      = packet.Amount;
            item2.CharacterId = Session.Character.CharacterId;

            previousInventory.Amount -= packet.Amount;
            if (previousInventory.Amount <= 0)
            {
                previousInventory = null;
            }
            List <ItemInstance> newInv = Session.Character.Inventory.AddToInventory(item2, item2.Item.Type);

            Session.SendPacket(UserInterfaceHelper.Instance.GenerateFStashRemove(packet.Slot));
            if (previousInventory != null)
            {
                DAOFactory.IteminstanceDAO.InsertOrUpdate(previousInventory);
            }
            else
            {
                FamilyCharacter fhead = Session.Character.Family.FamilyCharacters.FirstOrDefault(s => s.Authority == FamilyAuthority.Head);
                if (fhead == null)
                {
                    return;
                }
                DAOFactory.IteminstanceDAO.DeleteFromSlotAndType(fhead.CharacterId, packet.Slot, InventoryType.FamilyWareHouse);
            }
            Session.Character.Family.InsertFamilyLog(FamilyLogType.WareHouseRemoved, Session.Character.Name, message: $"{item2.ItemVNum}|{packet.Amount}");
        }
 private void processStatEffect(FamilyCharacter character, string stat, int delta)
 {
     if (stat == "mood")
     {
         character.mood += delta;
     }
     else if (stat == "relationship")
     {
         character.relationship += delta;
     }
     else if (stat == "loyalty")
     {
         character.loyalty += delta;
     }
 }
Пример #10
0
 public static bool ToFamilyCharacterDTO(FamilyCharacter input, FamilyCharacterDTO output)
 {
     if (input == null)
     {
         return(false);
     }
     output.Authority         = input.Authority;
     output.CharacterId       = input.CharacterId;
     output.DailyMessage      = input.DailyMessage;
     output.Experience        = input.Experience;
     output.FamilyCharacterId = input.FamilyCharacterId;
     output.FamilyId          = input.FamilyId;
     output.Rank = input.Rank;
     return(true);
 }
Пример #11
0
        private void OnOtherCharacterConnected(object sender, EventArgs e)
        {
            Tuple <long, string> loggedInCharacter = (Tuple <long, string>)sender;

            if (Character.IsFriendOfCharacter(loggedInCharacter.Item1))
            {
                if (Character != null && Character.CharacterId != loggedInCharacter.Item1)
                {
                    _client.SendPacket(Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("CHARACTER_LOGGED_IN"), loggedInCharacter.Item2), 10));
                    _client.SendPacket(Character.GenerateFinfo(loggedInCharacter.Item1, true));
                }
            }
            FamilyCharacter chara = Character.Family?.FamilyCharacters.FirstOrDefault(s => s.CharacterId == loggedInCharacter.Item1);

            if (chara != null && loggedInCharacter.Item1 != Character?.CharacterId)
            {
                _client.SendPacket(Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("CHARACTER_FAMILY_LOGGED_IN"), loggedInCharacter.Item2, Language.Instance.GetMessageFromKey(chara.Authority.ToString().ToUpper())), 10));
            }
        }
    private bool CheckComparison(Comparison comp, FamilyCharacter char1, FamilyCharacter char2)
    {
        bool rtn = false;

        switch (comp.op)
        {
        case '>':
            break;

        case '<':
            break;

        case '=':
            break;

        default:
            break;
        }
        return(rtn);
    }
Пример #13
0
        public DeleteResult Delete(string characterName)
        {
            try
            {
                using (OpenNosContext context = DataAccessHelper.CreateContext())
                {
                    Character       character       = context.Character.FirstOrDefault(c => c.Name.Equals(characterName) && c.State == (byte)CharacterState.Active);
                    FamilyCharacter familyCharacter = context.FamilyCharacter.FirstOrDefault(c => c.CharacterId.Equals(character.CharacterId));
                    if (character != null && familyCharacter != null)
                    {
                        context.FamilyCharacter.Remove(familyCharacter);
                        context.SaveChanges();
                    }

                    return(DeleteResult.Deleted);
                }
            }
            catch (Exception e)
            {
                Logger.Error(string.Format(Language.Instance.GetMessageFromKey("DELETE_FAMILYCHARACTER_ERROR"), e.Message), e);
                return(DeleteResult.Error);
            }
        }
    //----------------------------------------------------------------------------------------------------


    private bool TryRunMinorEvent()
    {
        Debug.Log("RunMinorEvent");
        //return runEvent(minorEvents);

        //choose event from list
        RandomEvent currentEvent = minorEvents[Random.Range(0, minorEvents.Length)];

        Debug.Log(currentEvent.mName);
        //if room requirement, see if room has valid NPC

        FamilyCharacter[] allCharacters = CharacterManager.instance.GetCharacters();
        int charsInRoom = allCharacters.Length;

        FamilyCharacter[] validCharacters;

        if (currentEvent.mRoomReq != null)
        {
            List <FamilyCharacter> validCharacterList = new List <FamilyCharacter>();
            for (int i = 0; i < allCharacters.Length; ++i)
            {
                if ((allCharacters[i].currentRoom == currentEvent.mRoomReq) && (CharacterIsInGroup(currentEvent.mCharacter1, allCharacters[i].charName)))
                {
                    validCharacterList.Add(allCharacters[i]);
                }
            }
            validCharacters = validCharacterList.ToArray();
        }
        else
        {
            List <FamilyCharacter> validCharacterList = new List <FamilyCharacter>();
            for (int i = 0; i < allCharacters.Length; ++i)
            {
                if (CharacterIsInGroup(currentEvent.mCharacter1, allCharacters[i].charName))
                {
                    validCharacterList.Add(allCharacters[i]);
                }
            }
            validCharacters = validCharacterList.ToArray();
        }

        //choose random character from valid characters
        if (validCharacters.Length <= 0)
        {
            return(false);
        }
        //Debug.Log(validCharacters.Length);
        FamilyCharacter char1 = validCharacters[Random.Range(0, validCharacters.Length)];
        FamilyCharacter char2 = null;

        if (currentEvent.mCharacter2 != CharacterGroup.None)
        {
            char2 = GetValidFamCharFromList(allCharacters, currentEvent.mCharacter2, char1.charName);
        }
        Debug.Log(char1.charName);
        if (char2)
        {
            Debug.Log(char2.charName);
        }
        //check comparisons
        bool passStatChecks = true;

        //apply effect
        StatEffect[] statEffectList = (passStatChecks? currentEvent.succeedEffects: currentEvent.failEffects);

        foreach (StatEffect stat in statEffectList)
        {
            switch (stat.who)
            {
            case StatEffect.WhoEffect.Char1:
                processStatEffect(char1, stat.stat, stat.delta);
                break;

            case StatEffect.WhoEffect.Char2:
                processStatEffect(char2, stat.stat, stat.delta);
                break;

            case StatEffect.WhoEffect.Witnesses:
                foreach (FamilyCharacter famchar in allCharacters)
                {
                    if (famchar.currentRoom == char1.currentRoom && (famchar != char1) && (famchar != char2))
                    {
                        processStatEffect(famchar, stat.stat, stat.delta);
                    }
                }
                break;

            case StatEffect.WhoEffect.All:
                foreach (FamilyCharacter famchar in allCharacters)
                {
                    processStatEffect(famchar, stat.stat, stat.delta);
                }
                break;

            default:
                break;
            }
        }

        //update UI
        printMinorEvent((passStatChecks ? currentEvent.succeedString : currentEvent.failString), (char1?char1.charName:""), (char2?char2.charName:""), statEffectList);
        //minorEventText.text = (passStatChecks ? currentEvent.succeedString : currentEvent.failString);

        return(true);
    }