public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents) { var raidRewardsTypes = new HashSet <int> { 55821, 60685, 914, 22797 }; List <RewardEvent> rewards = combatData.GetRewardEvents(); RewardEvent reward = rewards.FirstOrDefault(x => raidRewardsTypes.Contains(x.RewardType)); if (reward != null) { fightData.SetSuccess(true, reward.Time); } else { switch (GenericFallBackMethod) { case FallBackMethod.Death: SetSuccessByDeath(combatData, fightData, playerAgents, true, GetSuccessCheckIds()); break; case FallBackMethod.CombatExit: SetSuccessByCombatExit(new HashSet <int>(GetSuccessCheckIds()), combatData, fightData, playerAgents); break; default: break; } } }
public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet <AgentItem> playerAgents) { // check reward NPC mainTarget = Targets.Find(x => x.ID == GenericTriggerID); if (mainTarget == null) { throw new InvalidOperationException("Error Encountered: Main target of the fight not found"); } RewardEvent reward = combatData.GetRewardEvents().LastOrDefault(); AbstractDamageEvent lastDamageTaken = combatData.GetDamageTakenData(mainTarget.AgentItem).LastOrDefault(x => (x.Damage > 0) && playerAgents.Contains(x.From.GetFinalMaster())); if (lastDamageTaken != null) { if (reward != null && lastDamageTaken.Time - reward.Time < 100) { fightData.SetSuccess(true, Math.Min(lastDamageTaken.Time, reward.Time)); } else { SetSuccessByDeath(combatData, fightData, playerAgents, true, GenericTriggerID); if (fightData.Success) { fightData.SetSuccess(true, Math.Min(fightData.FightEnd, lastDamageTaken.Time)); } } } }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents) { RewardEvent reward = combatData.GetRewardEvents().FirstOrDefault(x => x.RewardType == 55821); if (reward != null) { fightData.SetSuccess(true, reward.Time); } }
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; }
public void SendBattleWinEvent() { var userProfile = Whiteboard.Get <UserProfile>(GameConstants.Player.PLAYER_PROFILE); RewardEvent rewardEvent = new RewardEvent(); rewardEvent.EventType = RewardEvent.Types.RewardEventType.BattleWin; rewardEvent.UserId = userProfile.UserId; Request request = RequestGenerator.CreateRequest(RequestType.RewardUser, rewardEvent.ToByteString()); NetworkManager.Instance.SendRequest(request, OnRewardReceived); }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents) { IReadOnlyList <RewardEvent> rewards = combatData.GetRewardEvents(); RewardEvent reward = rewards.FirstOrDefault(x => x.RewardType == 29453); if (reward != null) { fightData.SetSuccess(true, reward.Time); } else { SetSuccessByDeath(combatData, fightData, playerAgents, true); } }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents) { var raidRewardsTypes = new HashSet <int>(); ulong build = combatData.GetBuildEvent().Build; if (build < 97235) { raidRewardsTypes = new HashSet <int> { // Old types, on each kill 55821, 60685 }; } else { raidRewardsTypes = new HashSet <int> { // New types, once per week 22797 }; } IReadOnlyList <RewardEvent> rewards = combatData.GetRewardEvents(); RewardEvent reward = rewards.FirstOrDefault(x => raidRewardsTypes.Contains(x.RewardType)); if (reward != null) { fightData.SetSuccess(true, reward.Time); } else { switch (GenericFallBackMethod) { case FallBackMethod.Death: SetSuccessByDeath(combatData, fightData, playerAgents, true, GetSuccessCheckIds()); break; case FallBackMethod.CombatExit: SetSuccessByDeath(combatData, fightData, playerAgents, true, GetSuccessCheckIds()); if (!fightData.Success) { SetSuccessByCombatExit(new HashSet <int>(GetSuccessCheckIds()), combatData, fightData, playerAgents); } break; default: break; } } }
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; }
public override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, HashSet<AgentItem> playerAgents) { var strikeRewardIDs = new HashSet<ulong> { 993 }; List<RewardEvent> rewards = combatData.GetRewardEvents(); RewardEvent reward = rewards.FirstOrDefault(x => strikeRewardIDs.Contains(x.RewardID)); if (reward != null) { fightData.SetSuccess(true, reward.Time); } else { SetSuccessByDeath(combatData, fightData, playerAgents, true); } }
private void OnRewardReceived(string requestId) { RewardEvent updatedEvent = NetworkManager.Instance.GetResponse <RewardEvent>(requestId); if (updatedEvent.Rewards.Count > 0) { Debug.Log(string.Format("Rewarded Chest ID : {0} Updated Slot : {1}", updatedEvent.Rewards[0].RewardId, updatedEvent.Slot)); Hashtable param = new Hashtable(); param.Add(ChestSlot.SLOT_INDEX, updatedEvent.Slot); param.Add(ChestSlot.REWARD, updatedEvent.Rewards[0]); ActionManager.instance.TriggerEvent(StringConstants.EventNames.UPDATE_SLOTS_DATA, param); } else { Debug.LogError("All slots are full"); } }
internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents) { // check reward NPC mainTarget = Targets.FirstOrDefault(x => x.ID == GenericTriggerID); if (mainTarget == null) { throw new MissingKeyActorsException("Main target of the fight not found"); } RewardEvent reward = combatData.GetRewardEvents().LastOrDefault(); AbstractHealthDamageEvent lastDamageTaken = combatData.GetDamageTakenData(mainTarget.AgentItem).LastOrDefault(x => (x.HealthDamage > 0) && playerAgents.Contains(x.From.GetFinalMaster())); if (lastDamageTaken != null) { if (reward != null && Math.Abs(lastDamageTaken.Time - reward.Time) < 100) { fightData.SetSuccess(true, Math.Min(lastDamageTaken.Time, reward.Time)); } else { SetSuccessByDeath(combatData, fightData, playerAgents, true, GenericTriggerID); } } }
internal void Reward() { if (PartRewardsTypeNames != null && PartRewardsTypeNames.Length != 0) { // choose a random reward Random rng = new Random(); Type t = Type.GetType(PartRewardsTypeNames[rng.Next(0, PartRewardsTypeNames.Length)]); Part reward = ((Part)Activator.CreateInstance(t)); // start some visualization-actions showing the reward Button.AddAction(new CCSequence(new CCFadeTo(0.25f, 0), new CCDelayTime(3f), new CCFadeTo(1f, byte.MaxValue))); var guiLayer = ((HangarLayer)Layer).GUILayer; reward.Position = guiLayer.HangarCoordinatesToGUI(BoundingBoxTransformedToWorld.Center); guiLayer.AddChild(reward); reward.FitToBox(Button.BoundingBoxTransformedToWorld.Size * 2); var rewardEndScale = reward.GetTotalScale(); reward.Scale = 0.000001f; reward.AddAction(new CCSequence(new CCDelayTime(1.25f), new CCEaseBackOut(new CCScaleTo(0.5f, rewardEndScale)), new CCDelayTime(1f), new CCEaseIn(new CCMoveTo(0.8f, guiLayer.VisibleBoundsWorldspace.Center + new CCPoint(0, guiLayer.VisibleBoundsWorldspace.Size.Height)), 3f), new CCRemoveSelf(), new CCCallFunc(() => { RewardEvent?.Invoke(this, reward); }))); } }
private Reward[] ParseRewards(string prefix, string postfix = "Reward_") { Reward[] r = new Reward[asset.ReadByte($"{prefix}Rewards")]; int num = 0; string text; while (true) { if (num >= r.Length) { return(r); } text = $"{prefix}{postfix}{num}_Type"; if (!asset.Has(text)) { break; } RewardType type = asset.ReadEnum <RewardType>(text); string desc = local?.ReadString($"{prefix}{postfix}{num}"); string tp = $"{prefix}{postfix}{num}_"; switch (type) { case RewardType.Achievement: r[num] = new RewardAchievement() { ID = asset.ReadString(tp + "ID") }; break; case RewardType.Event: r[num] = new RewardEvent() { ID = asset.ReadString(tp + "ID") }; break; case RewardType.Experience: r[num] = new RewardExperience() { Value = asset.ReadUInt32(tp + "Value") }; break; case RewardType.Flag_Bool: r[num] = new RewardFlagBool() { ID = asset.ReadUInt16(tp + "ID"), Value = asset.ReadBoolean(tp + "Value") }; break; case RewardType.Flag_Math: r[num] = new RewardFlagMath() { A_ID = asset.ReadUInt16(tp + "A_ID"), B_ID = asset.ReadUInt16(tp + "B_ID"), Operation = asset.ReadEnum <Operation_Type>(tp + "Operation") }; break; case RewardType.Flag_Short: r[num] = new RewardFlagShort() { ID = asset.ReadUInt16(tp + "ID"), Modification = asset.ReadEnum <Modification_Type>(tp + "Modification"), Value = asset.ReadInt16(tp + "Value") }; break; case RewardType.Flag_Short_Random: r[num] = new RewardFlagShortRandom() { ID = asset.ReadUInt16(tp + "ID"), Max_Value = asset.ReadInt16(tp + "Max_Value"), Min_Value = asset.ReadInt16(tp + "Min_Value"), Modification = asset.ReadEnum <Modification_Type>(tp + "Modification") }; break; case RewardType.Item: r[num] = new RewardItem() { Ammo = asset.ReadByte(tp + "Ammo"), Amount = asset.ReadByte(tp + "Amount"), Auto_Equip = asset.ReadBoolean(tp + "Auto_Equip"), Barrel = asset.ReadUInt16(tp + "Barrel"), Grip = asset.ReadUInt16(tp + "Grip"), Magazine = asset.ReadUInt16(tp + "Magazine"), Sight = asset.ReadUInt16(tp + "Sight"), Tactical = asset.ReadUInt16(tp + "Tactical"), ID = asset.ReadUInt16(tp + "ID") }; break; case RewardType.Item_Random: r[num] = new RewardItemRandom() { Amount = asset.ReadByte(tp + "Amount"), ID = asset.ReadUInt16(tp + "ID") }; break; case RewardType.Quest: r[num] = new RewardQuest() { ID = asset.ReadUInt16(tp + "ID") }; break; case RewardType.Reputation: r[num] = new RewardReputation() { Value = asset.ReadInt32(tp + "Value") }; break; case RewardType.Teleport: r[num] = new RewardTeleport() { Spawnpoint = asset.ReadString(tp + "Spawnpoint") }; break; case RewardType.Vehicle: r[num] = new RewardVehicle() { ID = asset.ReadUInt16(tp + "ID"), Spawnpoint = asset.ReadString(tp + "Spawnpoint") }; break; case RewardType.Currency: r[num] = new RewardCurrency() { GUID = asset.ReadString(tp + "GUID"), Value = asset.ReadUInt32(tp + "Value") }; break; case RewardType.Hint: r[num] = new RewardHint() { Duration = asset.ReadSingle(tp + "Duration", 2f) }; break; } r[num].Localization = desc ?? ""; num++; } return(r); }
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)); } } }
public void RemoveRewardEvent(RewardEvent rewardEvent) => _db.RewardEvents.Remove(rewardEvent);
public void AddRewardEvent(RewardEvent rewardEvent) => _db.RewardEvents.Add(rewardEvent);