示例#1
0
        public override OrderDigest Digest2(AvatarState avatarState, CostumeStatSheet costumeStatSheet)
        {
            if (avatarState.inventory.TryGetTradableItem(TradableId, ExpiredBlockIndex, ItemCount,
                                                         out Inventory.Item inventoryItem))
            {
                ItemBase item  = inventoryItem.item;
                int      cp    = CPHelper.GetCP((ITradableItem)item, costumeStatSheet);
                int      level = item is Equipment equipment ? equipment.level : 0;
                return(new OrderDigest(
                           SellerAgentAddress,
                           StartedBlockIndex,
                           ExpiredBlockIndex,
                           OrderId,
                           TradableId,
                           Price,
                           cp,
                           level,
                           item.Id,
                           ItemCount
                           ));
            }

            throw new ItemDoesNotExistException(
                      $"Aborted because the tradable item({TradableId}) was failed to load from avatar's inventory.");
        }
示例#2
0
 public RankingSimulator(
     IRandom random,
     Player player,
     EnemyPlayerDigest enemyPlayerDigest,
     List <Guid> foods,
     RankingSimulatorSheets rankingSimulatorSheets,
     int stageId,
     ArenaInfo arenaInfo,
     ArenaInfo enemyInfo,
     CostumeStatSheet costumeStatSheet
     ) : base(
         random,
         player,
         foods,
         rankingSimulatorSheets
         )
 {
     _enemyPlayer = new EnemyPlayer(enemyPlayerDigest, CharacterSheet, CharacterLevelSheet, EquipmentItemSetEffectSheet)
     {
         Simulator = this
     };
     _enemyPlayer.Stats.EqualizeCurrentHPWithHP();
     _stageId               = stageId;
     _arenaInfo             = arenaInfo;
     _enemyInfo             = enemyInfo;
     WeeklyArenaRewardSheet = rankingSimulatorSheets.WeeklyArenaRewardSheet;
     if (!(costumeStatSheet is null))
     {
         Player.SetCostumeStat(costumeStatSheet);
         _enemyPlayer.SetCostumeStat(costumeStatSheet);
     }
 }
示例#3
0
文件: CPHelper.cs 项目: dahlia/lib9c
        /// <summary>
        /// return `Player` Combat Point.
        /// Calculate Level Stat, Equipment Stat, Equipment SKills, Costume Stat.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="costumeStatSheet"></param>
        /// <returns></returns>
        public static int GetCP(Player player, CostumeStatSheet costumeStatSheet)
        {
            var levelStatsCP = GetStatsCP(player.Stats.LevelStats, player.Level);
            var equipmentsCP = player.Equipments.Sum(GetCP);
            var costumeCP    = player.Costumes.Sum(c => GetCP(c, costumeStatSheet));

            return(DecimalToInt(levelStatsCP + equipmentsCP + costumeCP));
        }
示例#4
0
文件: CPHelper.cs 项目: dahlia/lib9c
        public static int GetCP(Costume costume, CostumeStatSheet sheet)
        {
            var statsMap = new StatsMap();

            foreach (var r in sheet.OrderedList.Where(r => r.CostumeId == costume.Id))
            {
                statsMap.AddStatValue(r.StatType, r.Stat);
            }

            return(DecimalToInt(GetStatsCP(statsMap)));
        }
示例#5
0
文件: CPHelper.cs 项目: dahlia/lib9c
        public static int GetCPV2(
            AvatarState avatarState,
            CharacterSheet characterSheet,
            CostumeStatSheet costumeStatSheet)
        {
            var current   = GetCP(avatarState, characterSheet);
            var costumeCP = avatarState.inventory.Costumes
                            .Where(c => c.equipped)
                            .Sum(c => GetCP(c, costumeStatSheet));

            return(DecimalToInt(current + costumeCP));
        }
示例#6
0
文件: CPHelper.cs 项目: dahlia/lib9c
        public static int GetCP(ITradableItem tradableItem, CostumeStatSheet sheet)
        {
            if (tradableItem is ItemUsable itemUsable)
            {
                return(GetCP(itemUsable));
            }

            if (tradableItem is Costume costume)
            {
                return(GetCP(costume, sheet));
            }

            return(0);
        }
示例#7
0
文件: Player.cs 项目: GunnerJnr/lib9c
        public void SetCostumeStat(CostumeStatSheet costumeStatSheet)
        {
            var statModifiers = new List <StatModifier>();

            foreach (var itemId in _costumes.Select(costume => costume.Id))
            {
                statModifiers.AddRange(
                    costumeStatSheet.OrderedList
                    .Where(r => r.CostumeId == itemId)
                    .Select(row => new StatModifier(row.StatType, StatModifier.OperationType.Add, (int)row.Stat))
                    );
            }
            Stats.SetOption(statModifiers);
            Stats.EqualizeCurrentHPWithHP();
        }
示例#8
0
 /// <summary>
 /// Do not use anymore since v100025.
 /// </summary>
 public StageSimulator(
     IRandom random,
     AvatarState avatarState,
     List <Guid> foods,
     int worldId,
     int stageId,
     StageSimulatorSheets stageSimulatorSheets,
     CostumeStatSheet costumeStatSheet
     )
     : this(
         random,
         avatarState,
         foods,
         worldId,
         stageId,
         stageSimulatorSheets
         )
 {
     Player.SetCostumeStat(costumeStatSheet);
 }
示例#9
0
 public RankingSimulator(
     IRandom random,
     AvatarState avatarState,
     AvatarState enemyAvatarState,
     List <Guid> foods,
     RankingSimulatorSheets rankingSimulatorSheets,
     int stageId,
     ArenaInfo arenaInfo,
     ArenaInfo enemyInfo,
     CostumeStatSheet costumeStatSheet
     ) : this(
         random,
         avatarState,
         enemyAvatarState,
         foods,
         rankingSimulatorSheets,
         stageId,
         arenaInfo,
         enemyInfo
         )
 {
     Player.SetCostumeStat(costumeStatSheet);
     _enemyPlayer.SetCostumeStat(costumeStatSheet);
 }
示例#10
0
 public StageSimulator(
     IRandom random,
     AvatarState avatarState,
     List <Guid> foods,
     int worldId,
     int stageId,
     StageSimulatorSheets stageSimulatorSheets,
     CostumeStatSheet costumeStatSheet,
     int constructorVersion,
     int playCount = 1
     )
     : this(
         random,
         avatarState,
         foods,
         worldId,
         stageId,
         stageSimulatorSheets,
         constructorVersion,
         playCount
         )
 {
     Player.SetCostumeStat(costumeStatSheet);
 }
示例#11
0
 public void SetV2(AvatarState avatarState, CharacterSheet characterSheet, CostumeStatSheet costumeStatSheet)
 {
     UpdateV2(avatarState, characterSheet, costumeStatSheet);
 }
示例#12
0
 private void UpdateV2(AvatarState avatarState, CharacterSheet characterSheet, CostumeStatSheet costumeStatSheet,
                       bool active = false)
 {
     Add(avatarState.address, new ArenaInfo(avatarState, characterSheet, costumeStatSheet, active));
 }
示例#13
0
 public ArenaInfo(AvatarState avatarState, CharacterSheet characterSheet, CostumeStatSheet costumeStatSheet, bool active)
     : this(avatarState, characterSheet, active)
 {
     CombatPoint = CPHelper.GetCPV2(avatarState, characterSheet, costumeStatSheet);
 }
示例#14
0
 public void UpdateV2(AvatarState state, CharacterSheet characterSheet, CostumeStatSheet costumeStatSheet)
 {
     ArmorId     = state.GetArmorId();
     Level       = state.level;
     CombatPoint = CPHelper.GetCPV2(state, characterSheet, costumeStatSheet);
 }
示例#15
0
 public abstract OrderDigest Digest2(AvatarState avatarState, CostumeStatSheet costumeStatSheet);