Пример #1
0
    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);
        }
    }
Пример #2
0
    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);
    }
Пример #3
0
    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;
    }
Пример #4
0
    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;
            }
        }
    }
Пример #5
0
    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);
    }
Пример #6
0
    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;
            }
        }
    }
Пример #7
0
    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
    }