internal WhirlpoolEvent(IEnumerable <Ship> rpShips, Fleet rpEscortFleet, RawMapExploration rpData) : base(rpData) { var rMaxAmount = (double)rpShips.Max(r => LostMaterial == MaterialType.Fuel ? r.Fuel.Current : r.Bullet.Current); var rReducedRate = Amount / rMaxAmount; var rTotalAmount = 0; foreach (var rShip in rpShips) { int rReducedAmount; if (LostMaterial == MaterialType.Fuel) { rReducedAmount = (int)(rShip.Fuel.Current * rReducedRate); rShip.Fuel.Current -= rReducedAmount; } else { rReducedAmount = (int)(rShip.Bullet.Current * rReducedRate); rShip.Bullet.Current -= rReducedAmount; } rTotalAmount += rReducedAmount; } var rMessage = rpEscortFleet == null ? StringResources.Instance.Main.Sortie_Whirlpool_Message : StringResources.Instance.Main.Sortie_Whirlpool_Message_CombinedFleet; Message = string.Format(rMessage, LostMaterial == MaterialType.Fuel ? "[icon]fuel[/icon]" : "[icon]bullet[/icon]", rTotalAmount, rReducedRate); }
internal WhirlpoolEvent(RawMapExploration rpData) : base(rpData) { var rSortie = SortieInfo.Current; IEnumerable <Ship> rShips = rSortie.Fleet.Ships; if (rSortie.EscortFleet != null) { rShips = rShips.Concat(rSortie.EscortFleet.Ships); } var rMaxAmount = (double)rShips.Max(r => LostMaterial == MaterialType.Fuel ? r.Fuel.Current : r.Bullet.Current); var rReducedRate = Amount / rMaxAmount; foreach (var rShip in rShips) { if (LostMaterial == MaterialType.Fuel) { rShip.Fuel = rShip.Fuel.Update(rShip.Fuel.Current - (int)(rShip.Fuel.Current * rReducedRate)); } else { rShip.Bullet = rShip.Bullet.Update(rShip.Bullet.Current - (int)(rShip.Bullet.Current * rReducedRate)); } } }
internal NothingHappenedEvent(MapInfo rpMap, RawMapExploration rpData) : base(rpData) { if (Message == NothingHappenedMessage.ManualSelection && MapService.Instance.ContainsMap(rpMap.ID)) { CurrentNode = MapService.Instance.GetNodeWikiID(rpMap.ID, rpData.Node) ?? rpData.Node.ToString(); NodeSelections = rpData.NodeSelection.Nodes.Select(r => new NodeSelection(rpMap, rpData.Node, r)).ToArray(); } }
void ProcessEscortSuccess(RawMapExploration rpData) { if (rpData.RankingPointBonus == 0) { return; } InsertRankingPointsBonusRecord(rpData.RankingPointBonus); }
internal SortieNodeInfo(MapInfo rpMap, RawMapExploration rpData) { ID = rpData.Node; var rDifficulty = rpMap.Difficulty; if (!rDifficulty.HasValue) { InternalID = ID; } else { var rDifficultyCount = Enum.GetNames(typeof(EventMapDifficulty)).Length - 1; InternalID = ID * rDifficultyCount + (int)rDifficulty.Value - 3; } WikiID = MapService.Instance.GetNodeWikiID(rpMap.ID, ID); EventType = rpData.NodeEventType; EventSubType = rpData.NodeEventSubType; switch (EventType) { case SortieEventType.Reward: Event = new RewardEvent(rpData); break; case SortieEventType.Whirlpool: Event = new WhirlpoolEvent(rpData); break; case SortieEventType.NormalBattle: case SortieEventType.BossBattle: Event = new BattleEvent(rpMap, rpData, WikiID); break; case SortieEventType.NothingHappened: Event = new NothingHappenedEvent(rpMap, rpData); break; case SortieEventType.AviationReconnaissance: Event = new AviationReconnaissanceEvent(rpData); break; case SortieEventType.EscortSuccess: Event = new EscortSuccessEvent(rpData); break; case SortieEventType.Landing: Event = new LandingEvent(rpData); break; } IsDeadEnd = rpData.NextRouteCount == 0; }
internal RewardEvent(RawMapExploration rpData) : base(rpData) { switch (RawData.Rewards.Type) { case JTokenType.Array: Rewards = RawData.Rewards.ToObject <RawMapExploration.RawReward[]>(); break; case JTokenType.Object: Rewards = new[] { RawData.Rewards.ToObject <RawMapExploration.RawReward>() }; break; } }
internal LandingEvent(RawMapExploration rpData) : base(rpData) { var rSortie = SortieInfo.Current; var rTransportPoint = rSortie.Fleet.Status.TransportPoint; if (rSortie.EscortFleet != null) { rTransportPoint += rSortie.EscortFleet.Status.TransportPoint; } TransportPoint = rTransportPoint; }
internal void Explore(RawMapExploration rpData) { PreviousNode = Node; if (PreviousNode != null) { PreviousNode.Event = null; } DirectionAngle = MapService.Instance.GetAngle(Map.ID, rpData.StartNode ?? Node?.ID ?? 0, rpData.Node); OnPropertyChanged(nameof(DirectionAngle)); Node = new SortieNodeInfo(Map, rpData); OnPropertyChanged(nameof(Node)); OnPropertyChanged(nameof(PreviousNode)); }
internal BattleEvent(long rpTimestamp, MapInfo rpMap, RawMapExploration rpData, string rpNodeWikiID) : base(rpData) { Battle = new BattleInfo(rpTimestamp, rpData); int rNodeID; if (rpNodeWikiID.IsNullOrEmpty()) { rNodeID = rpData.Node << 16; } else { rNodeID = rpNodeWikiID[0] - 'A'; } EnemyEncounters = EnemyEncounterService.Instance.GetEncounters(rpMap.ID, rNodeID, rpMap.Difficulty); }
internal BattleInfo(long rpTimestamp, RawMapExploration rpData) { Current = this; ID = rpTimestamp; var rSortie = SortieInfo.Current; Participants.FriendMain = rSortie.MainShips; Participants.FriendEscort = rSortie.EscortShips; foreach (FriendShip rShip in rSortie.MainShips) { rShip.Reset(); } if (rSortie.EscortShips != null) { foreach (FriendShip rShip in rSortie.EscortShips) { rShip.Reset(); } } CurrentStage = new FakeStage(this); OnPropertyChanged(nameof(CurrentStage)); IsBossBattle = rpData.NodeEventType == SortieEventType.BossBattle; if ((BattleType)rpData.NodeEventSubType == BattleType.Normal) { var rSupportFleets = KanColleGame.Current.Port.Fleets .Where(r => r.ExpeditionStatus.Expedition != null && !r.ExpeditionStatus.Expedition.CanReturn) .Select(r => r.ExpeditionStatus.Expedition) .SingleOrDefault(r => r.MapArea.ID == rSortie.Map.MasterInfo.AreaID && r.Time == (!IsBossBattle ? 15 : 30)); IsSupportFleetReady = rSupportFleets != null; } if (rSortie.LandBaseAerialSupportRequests != null) { var rNodeUniqueID = MapService.Instance.GetNodeUniqueID(rSortie.Map.ID, rpData.Node); if (rNodeUniqueID.HasValue && Array.IndexOf(rSortie.LandBaseAerialSupportRequests, rNodeUniqueID.Value) != -1) { IsLandBaseAerialSupportReady = true; } } }
internal SortieNodeInfo(SortieInfo rpOwner, long rpTimestamp, RawMapExploration rpData) { r_Owner = rpOwner; ID = rpData.Node; var rMap = r_Owner.Map; WikiID = MapService.Instance.GetNodeWikiID(rMap.ID, ID); EventType = rpData.NodeEventType; EventSubType = rpData.NodeEventSubType; switch (EventType) { case SortieEventType.Reward: Event = new RewardEvent(rpData); break; case SortieEventType.Whirlpool: Event = new WhirlpoolEvent(r_Owner.Fleet.Ships, r_Owner.EscortFleet, rpData); break; case SortieEventType.NormalBattle: case SortieEventType.BossBattle: Event = new BattleEvent(rpTimestamp, rMap, rpData, WikiID); break; case SortieEventType.NothingHappened: Event = new NothingHappenedEvent(rMap, rpData); break; case SortieEventType.AviationReconnaissance: Event = new AviationReconnaissanceEvent(rpData); break; case SortieEventType.EscortSuccess: Event = new EscortSuccessEvent(rpData); break; case SortieEventType.Landing: Event = new LandingEvent(rpData); break; } IsDeadEnd = rpData.NextRouteCount == 0; }
internal protected SortieEvent(RawMapExploration rpData) { RawData = rpData; }
internal SortieNodeInfo(SortieInfo rpOwner, long rpTimestamp, RawMapExploration rpData) { r_Owner = rpOwner; ID = rpData.Node; var rMap = r_Owner.Map; WikiID = MapService.Instance.GetNodeWikiID(rMap.ID, ID); EventType = rpData.NodeEventType; EventSubType = rpData.NodeEventSubType; switch (EventType) { case SortieEventType.Reward: Event = new RewardEvent(rpData); break; case SortieEventType.Whirlpool: Event = new WhirlpoolEvent(r_Owner.Fleet.Ships, r_Owner.EscortFleet, rpData); break; case SortieEventType.NormalBattle: case SortieEventType.BossBattle: Event = new BattleEvent(rpTimestamp, rMap, rpData, WikiID); break; case SortieEventType.NothingHappened: Event = new NothingHappenedEvent(rMap, rpData); break; case SortieEventType.AviationReconnaissance: Event = new AviationReconnaissanceEvent(rpData); break; case SortieEventType.EscortSuccess: Event = new EscortSuccessEvent(rpData); break; case SortieEventType.Landing: Event = new LandingEvent(rpData); break; } IsDeadEnd = rpData.NextRouteCount == 0; if (rpData.EnemyAerialRaid != null) { try { EnemyAerialRaid = new EnemyAerialRaid(rpData.EnemyAerialRaid); var rBattleEvent = Event as BattleEvent; if (rBattleEvent != null) { rBattleEvent.EnemyAerialRaid = EnemyAerialRaid; EnemyAerialRaid = null; } } catch (Exception e) { Logger.Write(LoggingLevel.Error, string.Format(StringResources.Instance.Main.Log_Exception_API_ParseException, e.Message)); } } }
internal AviationReconnaissanceEvent(RawMapExploration rpData) : base(rpData) { }
internal EscortSuccessEvent(RawMapExploration rpData) : base(rpData) { }
internal protected RewardEventBase(RawMapExploration rpData) : base(rpData) { }