public void ConsumableItemUsed(E_ItemID id) { int index = PlayerData.InventoryList.Items.FindIndex(p => p.ID == id); if (index < 0) { return; } PPIItemData itemData = PlayerData.InventoryList.Items[index]; MFDebugUtils.Assert(itemData.IsValid()); itemData.Count--; PlayerData.InventoryList.Items[index] = itemData; if (uLink.Network.isServer) { //SEND TO CLOUD !!!! ItemSettings settings = ItemSettingsManager.Instance.Get(id); CloudServices.GetInstance() .ModifyItem(PrimaryKey, PPIManager.ProductID, settings.GUID, "Count", itemData.Count.ToString(), CloudConfiguration.DedicatedServerPasswordHash); } }
ItemSettings ChooseItem(PlayerPersistantInfo ppi) { PPIInventoryList inventory = ppi.InventoryList; PPIEquipList equipList = ppi.EquipList; PPIItemData favouriteItem = GetFavourite <PPIItemData>(inventory.Items, (left, right) => { if (left.StatsUseCount > right.StatsUseCount) { return(-1); } if (left.StatsUseCount < right.StatsUseCount) { return(+1); } int leftIdx = equipList.Items.FindIndex((other) => { return(other.ID == left.ID); }); int rightIdx = equipList.Items.FindIndex((other) => { return(other.ID == right.ID); }); if (rightIdx != -1 && leftIdx > rightIdx || leftIdx != -1 && rightIdx == -1) { return(-1); } if (leftIdx != -1 && leftIdx < rightIdx || leftIdx == -1 && rightIdx != -1) { return(+1); } return(0); }); return(favouriteItem.ID != E_ItemID.None ? ItemSettingsManager.Instance.Get(favouriteItem.ID) : null); }
public Item(PlayerPersistantInfo ppi, AgentHuman owner, E_ItemID itemID) { Owner = owner; Settings = ItemSettingsManager.Instance.Get(itemID); if (Settings.ItemBehaviour == E_ItemBehaviour.Booster) { Timer = Settings.BoostTimer; } else { Timer = Settings.Timer; } Detected = false; if (Settings.Consumable) { // for cunsumables get real count from inventory !!! PPIItemData data = ppi.InventoryList.Items.Find(item => item.ID == itemID); Count = data.Count > Settings.MaxCountInMission ? Settings.MaxCountInMission : data.Count; } else { Count = Settings.Count > Settings.MaxCountInMission ? Settings.MaxCountInMission : Settings.Count; if (ppi.Upgrades.OwnsUpgrade(E_UpgradeID.ExplosivePouch)) { switch (itemID) { case E_ItemID.GrenadeEMP: case E_ItemID.GrenadeEMPII: case E_ItemID.GrenadeFlash: case E_ItemID.GrenadeFrag: case E_ItemID.GrenadeFragII: case E_ItemID.Mine: case E_ItemID.MineEMP: case E_ItemID.MineEMPII: ++Count; break; } } } OrigCount = Count; }
public void Read(BitStream stream) { Items.Clear(); Weapons.Clear(); Outfits = stream.Read <PPIOutfits>(); Perk = stream.Read <E_PerkID>(); while (stream.isEOF == false) { switch (stream.Read <E_DatatType>()) { case E_DatatType.None: return; case E_DatatType.Item: { int count = stream.ReadByte(); for (int i = 0; i < count; i++) { PPIItemData d = new PPIItemData(); d.Read(stream); Items.Add(d); } } break; case E_DatatType.Weapon: { int count = stream.ReadByte(); for (int i = 0; i < count; i++) { PPIWeaponData d = new PPIWeaponData(); d.Read(stream); Weapons.Add(d); } } break; } } }
int GetUsedTimes(ResearchItem item, PlayerPersistantInfo ppi, RoundFinalResult results) { int result = 0; if (item.weaponID != E_WeaponID.None) { PPIWeaponData temp = ppi.InventoryList.Weapons.Find(obj => obj.ID == item.weaponID); if (temp.ID != E_WeaponID.None) { result = temp.StatsFire; } } else if (item.itemID != E_ItemID.None) { PPIItemData temp = ppi.InventoryList.Items.Find(obj => obj.ID == item.itemID); if (temp.ID != E_ItemID.None) { result = temp.StatsUseCount; } } return(result); }
public void Read(BitStream stream) { Items.Clear(); Weapons.Clear(); Skins.Clear(); Hats.Clear(); Perks.Clear(); while (stream.isEOF == false) { switch (stream.Read <E_DatatType>()) { case E_DatatType.None: return; case E_DatatType.Item: { int count = stream.ReadByte(); for (int i = 0; i < count; i++) { PPIItemData d = new PPIItemData(); d.Read(stream); Items.Add(d); } } break; case E_DatatType.Weapon: { int count = stream.ReadByte(); for (int i = 0; i < count; i++) { PPIWeaponData d = new PPIWeaponData(); d.Read(stream); Weapons.Add(d); } } break; case E_DatatType.Skin: { int count = stream.ReadByte(); for (int i = 0; i < count; i++) { PPISkinData d = new PPISkinData(); d.Read(stream); Skins.Add(d); } } break; case E_DatatType.Hat: { int count = stream.ReadByte(); for (int i = 0; i < count; i++) { PPIHatData d = new PPIHatData(); d.Read(stream); Hats.Add(d); } } break; case E_DatatType.Perk: { int count = stream.ReadByte(); for (int i = 0; i < count; i++) { PPIPerkData d = new PPIPerkData(); d.Read(stream); Perks.Add(d); } } break; } } }
public void EndOfRound() { #if !DEADZONE_CLIENT RoundFinalResult result = new RoundFinalResult(); //gather final result and send it to client result.GameType = Server.Instance.GameInfo.GameType; result.Team = Team; result.Place = PPIManager.Instance.GetPPIList().FindIndex(ps => ps.Player == Player); if (Server.Instance.GameInfo.GameType == E_MPGameType.ZoneControl) { E_Team winner = Server.Instance.GameInfo.GetWinnerTeam(); if (Team == winner) { AddExperience(GameplayRewards.ZC.Win, E_AddMoneyAction.ZoneControl); result.MissionExp = (short)(GameplayRewards.ZC.Win * (IsPremiumAccountActive? GameplayRewards.PremiumAccountModificator : 1)); result.MissioMoney = (short)(GameplayRewards.ZC.Win * GameplayRewards.MoneyModificator * (IsPremiumAccountActive? GameplayRewards.PremiumAccountModificator : 1)); result.Winner = true; } else { AddExperience(GameplayRewards.ZC.Lost, E_AddMoneyAction.ZoneControl); result.MissionExp = (short)(GameplayRewards.ZC.Lost * (IsPremiumAccountActive? GameplayRewards.PremiumAccountModificator : 1)); result.MissioMoney = (short)(GameplayRewards.ZC.Lost * GameplayRewards.MoneyModificator * (IsPremiumAccountActive? GameplayRewards.PremiumAccountModificator : 1)); } } else { int amount = 0; if (result.Place == 0) { amount = GameplayRewards.DM.First; } else if (result.Place == 1) { amount = GameplayRewards.DM.Second; } else if (result.Place == 2) { amount = GameplayRewards.DM.Third; } AddExperience(amount, E_AddMoneyAction.DM); result.MissionExp = (short)(amount * (IsPremiumAccountActive? GameplayRewards.PremiumAccountModificator : 1)); result.MissioMoney = (short)(amount * GameplayRewards.MoneyModificator * (IsPremiumAccountActive? GameplayRewards.PremiumAccountModificator : 1)); result.Winner = result.Place < 3; } if (GetPlayerRankFromExperience(PlayerData.Params.Experience) != GetPlayerRankFromExperience(PlayerData.Params.Experience + Score.Experience)) { result.NewRank = true; } if (IsFirstGameToday(Server.Instance.GameInfo.GameType)) { // FIRST RUN FOR TODAY .. Multiply !!!! result.FirstRound = true; Score.Experience *= 2; Score.Money *= 2; } //check new rank after bonus if (!result.NewRank && GetPlayerRankFromExperience(PlayerData.Params.Experience) != GetPlayerRankFromExperience(PlayerData.Params.Experience + Score.Experience)) { result.NewRank = true; AddMoney(GameplayRewards.MoneyRank, E_AddMoneyAction.Rank); Score.Money += GameplayRewards.MoneyRank; //add money twice, because later they ore once substracted } result.Experience = Score.Experience; result.Money = Score.Money; result.Gold = Score.Gold; int gameType = (int)Game.GetMultiplayerGameType(); PPIPlayerStats.GameData gameData = PlayerData.Stats.Games[gameType]; gameData.Score += Score.Score; gameData.Money += Score.Money; gameData.Experience += Score.Experience; gameData.Golds += Score.Gold; gameData.Kills += Score.Kills; gameData.Deaths += Score.Deaths; gameData.Hits += Score.Hits; gameData.Shots += Score.Shots; gameData.Headshots += Score.HeadShots; gameData.PlayedTimes += Score.PlayedTimes; gameData.LastPlayedDate = Score.LastPlayedDate; gameData.TimeSpent += Score.TimeSpent; PlayerData.Stats.Games[gameType] = gameData; foreach (var key in Score.WeaponStats.Keys) { int index = PlayerData.InventoryList.Weapons.FindIndex(p => p.ID == key); if (index >= 0) { PPIWeaponData weaponData = PlayerData.InventoryList.Weapons[index]; PPIRoundScore.WeaponStatistics weaponStats = Score.WeaponStats[key]; MFDebugUtils.Assert(weaponData.IsValid()); weaponData.StatsFire += weaponStats.StatsFire; weaponData.StatsHits += weaponStats.StatsHits; weaponData.StatsKills += weaponStats.StatsKills; PlayerData.InventoryList.Weapons[index] = weaponData; } } foreach (var key in Score.ItemStats.Keys) { int index = PlayerData.InventoryList.Items.FindIndex(p => p.ID == key); if (index >= 0) { PPIItemData itemData = PlayerData.InventoryList.Items[index]; PPIRoundScore.ItemStatistics itemStats = Score.ItemStats[key]; MFDebugUtils.Assert(itemData.IsValid()); itemData.StatsKills += itemStats.StatsKills; itemData.StatsUseCount += itemStats.StatsUseCount; PlayerData.InventoryList.Items[index] = itemData; } } PlayerData.Stats.Today.Experience += Score.Experience; PlayerData.Params.Money += Score.Money; PlayerData.Params.Experience += Score.Experience; PlayerData.Params.Gold += Score.Gold; MarkLastFinishedGame(result.Winner); PlayerDataChanged = true; Server.Instance.SendEndRoundToClient(Player, result); //Debug.Log("End Round: " + Name + " exp" + Score.Experience + " money " + Score.Money + " experience new " + Experience + " experience old " + oldExperience); #endif }