Exemplo n.º 1
0
    public void AddWeaponKill(E_WeaponID id, E_BodyPart bodyPart, int num = 1)
    {
        if (uLink.Network.isServer == false)
        {
            throw new uLink.NetworkException("AddWeaponKill: could be called only on server");
        }

        int index = PlayerData.InventoryList.Weapons.FindIndex(p => p.ID == id);

        if (index < 0)
        {
            return;
        }

        PPIWeaponData weaponData = PlayerData.InventoryList.Weapons[index];

        //DebugUtils.Assert( weaponData.IsValid() );

        // nemusi byt validni napriklad pri pouziti itemu se spatne nastavenym ID itemu (takze se vola WeaponKill na zadanou zbran)
        if (weaponData.IsValid())
        {
            PPIRoundScore.WeaponStatistics weaponStats;

            try
            {
                weaponStats             = Score.WeaponStats[id];
                weaponStats.StatsKills += num;
            }
            catch (KeyNotFoundException)
            {
                weaponStats            = new PPIRoundScore.WeaponStatistics();
                weaponStats.StatsKills = num;
            }

            Score.WeaponStats[id] = weaponStats;
        }
        else
        {
            Debug.LogError("AddWeaponKill() with weapon '" + id + "' : weapon not found");
        }

        Score.HeadShots += bodyPart == E_BodyPart.Head ? 1 : 0;

        // Debug.Log("Weapon kill " + PlayerData.InventoryList.Weapons[index].ToString() +  " " + PlayerData.Stats.Games[(int)Game.GetMultiplayerGameType()].ToString());
    }
Exemplo n.º 2
0
    public void ServerAddScoreForKill(uLink.NetworkPlayer victim,
                                      uLink.NetworkPlayer killer,
                                      List <BlackBoard.DamageData> damageData,
                                      E_BodyPart bodyPart,
                                      int extraGold)
    {
#if !DEADZONE_CLIENT
        PlayerPersistantInfo victimPPI = PPIManager.Instance.GetPPI(victim);
        PlayerPersistantInfo killerPPI = PPIManager.Instance.GetPPI(killer);

        if (killer != victim)
        {
            victimPPI.Score.Deaths++;             // check this!!!!
            SynchronizeScore(victimPPI);

            killerPPI.Score.Kills++;         // check this!!!!
            killerPPI.AddGoldFromGameplay(extraGold);

            Server.Instance.ShowMessageOnClients(killerPPI.NameForGui + " " + TextDatabase.instance[MPMessages.Kill] + " " + victimPPI.NameForGui);

            DistributeKills(victim, killer, bodyPart);

            if (extraGold > 0)
            {
                Server.Instance.ShowGoldMsgOnClient(killerPPI.Player, (short)extraGold);
            }
        }
        else
        {
            killerPPI.Score.Deaths++;             // check this!!!!
            killerPPI.AddScore(GameplayRewards.Suicide);
            Server.Instance.ShowMessageOnClients(killerPPI.NameForGui + " " + TextDatabase.instance[MPMessages.Suicide]);
            SynchronizeScore(killerPPI);
        }

        ServerSetState(victim, PlayerPersistantInfo.E_State.Connected, true);

        SortDescending();
#endif
    }
Exemplo n.º 3
0
    void DistributeKills(uLink.NetworkPlayer victim, uLink.NetworkPlayer killer, E_BodyPart bodyPart)
    {
        ComponentPlayer p = Player.GetPlayer(victim);

        float left = p.Owner.BlackBoard.RealMaxHealth;

        Dictionary <uLink.NetworkPlayer, float> killers = new Dictionary <uLink.NetworkPlayer, float>();

        foreach (BlackBoard.DamageData data in p.Owner.BlackBoard.AttackersDamageData)
        {
            float damage = Mathf.Min(left, data.Damage);

            if (Player.GetPlayer(data.Attacker) == null)            //player is fadeout , f**k him.. or it cause crash in hud on client
            {
                continue;
            }

            if (killers.ContainsKey(data.Attacker))
            {
                killers[data.Attacker] += damage;
            }
            else
            {
                killers.Add(data.Attacker, damage);
            }

            left -= damage;

            if (left <= 0)
            {
                break;
            }
        }


        //PlayerPersistantInfo victimPPI  = PPIManager.Instance.GetPPI(victim);


        foreach (KeyValuePair <uLink.NetworkPlayer, float> pair in killers)
        {
            PlayerPersistantInfo killerPPI = PPIManager.Instance.GetPPI(pair.Key);

            if (killerPPI == null)
            {
                continue;                 // one of the killers could disconnect
            }
            float percent = pair.Value / p.Owner.BlackBoard.RealMaxHealth;

            if (pair.Key == killer)
            {
                percent = 1.0f;
            }
            else if (percent < 0.1f)
            {
                percent = 0.1f;
            }
            else if (percent > 0.6f)
            {
                percent = 0.6f;
            }



            int score = Mathf.FloorToInt(GameplayRewards.Kill * percent);


            if (killer == pair.Key)
            {
                Server.Instance.ShowCombatMsgOnClient(killerPPI.Player, Client.E_MessageType.Kill, (short)score, (short)(score * GameplayRewards.MoneyModificator));

                if (bodyPart == E_BodyPart.Head)
                {
                    Server.Instance.ShowCombatMsgOnClient(killerPPI.Player, Client.E_MessageType.HeadShot, GameplayRewards.HeadShot, (short)(GameplayRewards.HeadShot * GameplayRewards.MoneyModificator));
                    score += GameplayRewards.HeadShot;
                }
            }
            else
            {
                Server.Instance.ShowCombatMsgOnClient(killerPPI.Player, Client.E_MessageType.KillAssist, (short)score, (short)(score * GameplayRewards.MoneyModificator));
            }


            killerPPI.AddScore(score);

            if (Server.Instance.GameInfo.GameType == E_MPGameType.DeathMatch)
            {
                killerPPI.AddExperience(score, E_AddMoneyAction.KillDM);
            }
            else
            {
                killerPPI.AddExperience(score, E_AddMoneyAction.KillZC);
            }

            SynchronizeScore(killerPPI);
        }
    }