Beispiel #1
0
        private object OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
        {
            /* Remove all fall damage */

            Rust.DamageType damageType = info.damageTypes.GetMajorityDamageType();
            if (damageType == Rust.DamageType.Fall)
            {
                info.damageTypes.Set(damageType, 0);
            }

            switch (EID)
            {
            case GameModes.FreeForAll:
                break;

            case GameModes.GunGame:
                break;

            case GameModes.OneInTheChamber:
                break;

            case GameModes.Infected:
                break;
            }
            return(null);
        }
Beispiel #2
0
        // BasePlayer.TakeDamage()
        public static void PlayerTakeDamage(BasePlayer player, float dmgAmount, Rust.DamageType dmgType)
        {
            // works?
            var ptd = new PlayerTakedmgEvent(new Player(player), dmgAmount, dmgType);

            OnPlayerTakeDamage.OnNext(ptd);
        }
 void applyBlastDamage(BasePlayer player, float damageamount, Rust.DamageType damagetype, HitInfo hitInfo)
 {
     if (!hitInfo.ProjectilePrefab.ToString().Contains("arrow"))
     {
         return;
     }
     playerBlastDamage(player, damageamount, damagetype, hitInfo);
 }
Beispiel #4
0
 bool IsDamageBlocking(Rust.DamageType dt)
 {
     switch (dt)
     {
     case Rust.DamageType.Bullet:
     case Rust.DamageType.Stab:
     case Rust.DamageType.Explosion:
     case Rust.DamageType.ElectricShock:
         return(true);
     }
     return(false);
 }
Beispiel #5
0
        void playerBlastDamage(BasePlayer player, float damageamount, Rust.DamageType damagetype, HitInfo hitInfo)
        {
            List <BaseCombatEntity> playerlist = new List <BaseCombatEntity>();

            Vis.Entities <BaseCombatEntity>(hitInfo.HitPositionWorld, DamageRadius, playerlist);

            foreach (BaseCombatEntity p in playerlist)
            {
                if (!(p is BuildingPrivlidge))
                {
                    p.Hurt(damageamount, damagetype, player, UseProt);
                }
            }
        }
        void playerBlastDamage(BasePlayer player, float damageamount, Rust.DamageType damagetype, HitInfo hitInfo)
        {
            List <BaseCombatEntity> playerlist = new List <BaseCombatEntity>();

            Vis.Entities <BaseCombatEntity>(hitInfo.HitPositionWorld, DamageRadius, playerlist);

            foreach (BaseCombatEntity p in playerlist)
            {
                if (!(p is BuildingPrivlidge))
                {
                    if (!hitInfo.ProjectilePrefab.ToString().Contains("arrow"))
                    {
                        return;
                    }
                    p.Hurt(damageamount, damagetype, player, UseProt);
                }
            }
        }
Beispiel #7
0
        private float getDamageDeduction(BasePlayer player, Rust.DamageType damageType)
        {
            float dd = 0.0f;

            foreach (Item item in player.inventory.containerWear.itemList)
            {
                if (!item.isBroken)
                {
                    if (item.info.shortname.Contains("hazmatsuit"))
                    {
                        if (damageType == Rust.DamageType.Drowned)
                        {
                            dd += (dmgdrowning / 100);
                        }
                        if (damageType == Rust.DamageType.Cold)
                        {
                            dd += (dmgcold / 100);
                        }
                    }
                }
            }
            return(dd);
        }
Beispiel #8
0
        private void dealDamage(Vector3 deathPos, float damage, float radius, Rust.DamageType type)
        {
            List <BaseCombatEntity> entitiesClose = new List <BaseCombatEntity>();
            List <BaseCombatEntity> entitiesNear  = new List <BaseCombatEntity>();
            List <BaseCombatEntity> entitiesFar   = new List <BaseCombatEntity>();

            Vis.Entities(deathPos, radius / 3, entitiesClose);
            Vis.Entities(deathPos, radius / 2, entitiesNear);
            Vis.Entities(deathPos, radius, entitiesFar);

            foreach (BaseCombatEntity entity in entitiesClose)
            {
                entity.Hurt(damage, type, null, true);
                notifyPlayer(entity);
            }

            foreach (BaseCombatEntity entity in entitiesNear)
            {
                if (entitiesClose.Contains(entity))
                {
                    return;
                }
                entity.Hurt(damage / 2, type, null, true);
                notifyPlayer(entity);
            }

            foreach (BaseCombatEntity entity in entitiesFar)
            {
                if (entitiesClose.Contains(entity) || entitiesNear.Contains(entity))
                {
                    return;
                }
                entity.Hurt(damage / 4, type, null, true);
                notifyPlayer(entity);
            }
        }
Beispiel #9
0
 public PlayerTakedmgEvent(Player p, float amount, Rust.DamageType type)
 {
     Type = type;
     Amount = amount;
     Victim = p;
 }
 public PlayerTakedmgEvent(Player p, float amount, Rust.DamageType type)
 {
     Type   = type;
     Amount = amount;
     Victim = p;
 }
Beispiel #11
0
 void applyBlastDamage(BasePlayer player, float damageamount, Rust.DamageType damagetype, HitInfo hitInfo)
 {
     playerBlastDamage(player, damageamount, damagetype, hitInfo);
 }
Beispiel #12
0
        private float getDamageDeduction(BasePlayer player, Rust.DamageType damageType)
        {
            float dd = 0.0f;

            foreach (Item i in player.inventory.containerWear.itemList)
            {
                if (!i.isBroken)
                {
                    if (i.info.name.ToLower().Contains("hazmat_helmet.item"))
                    {
                        //PrintToChat(player, "damageArmour "+damageArmour, new object[0]);
                        if (damageType == Rust.DamageType.Drowned)
                        {
                            dd += head;
                        }
                        if (damageType == Rust.DamageType.Cold)
                        {
                            dd += chead;
                        }
                    }
                    if (i.info.name.ToLower().Contains("hazmat_jacket.item"))
                    {
                        if (damageType == Rust.DamageType.Drowned)
                        {
                            dd += chest;
                        }
                        if (damageType == Rust.DamageType.Cold)
                        {
                            dd += cchest;
                        }
                    }
                    if (i.info.name.ToLower().Contains("hazmat_pants.item"))
                    {
                        if (damageType == Rust.DamageType.Drowned)
                        {
                            dd += pants;
                        }
                        if (damageType == Rust.DamageType.Cold)
                        {
                            dd += cpants;
                        }
                    }
                    if (i.info.name.ToLower().Contains("hazmat_gloves.item"))
                    {
                        if (damageType == Rust.DamageType.Drowned)
                        {
                            dd += gloves;
                        }
                        if (damageType == Rust.DamageType.Cold)
                        {
                            dd += cgloves;
                        }
                    }
                    if (i.info.name.ToLower().Contains("hazmat_boots.item"))
                    {
                        if (damageType == Rust.DamageType.Drowned)
                        {
                            dd += boots;
                        }
                        if (damageType == Rust.DamageType.Cold)
                        {
                            dd += cboots;
                        }
                    }
                }
            }
            return(dd);
        }
Beispiel #13
0
        private float GetDamageDeduction(BasePlayer player, Rust.DamageType damageType)
        {
            var deduction = 0.0f;

            foreach (var item in player.inventory.containerWear.itemList)
            {
                if (item.isBroken)
                {
                    continue;
                }

                if (item.info.name.ToLower().Contains("hazmat_suit.item"))
                {
                    if (damageType == Rust.DamageType.Drowned)
                    {
                        deduction += 0.8f;
                    }
                    if (damageType == Rust.DamageType.Cold)
                    {
                        deduction += 0.8f;
                    }
                }
                if (item.info.name.ToLower().Contains("hazmat_helmet.item"))
                {
                    if (damageType == Rust.DamageType.Drowned)
                    {
                        deduction += 0.3f;
                    }
                    if (damageType == Rust.DamageType.Cold)
                    {
                        deduction += 0.3f;
                    }
                }
                if (item.info.name.ToLower().Contains("hazmat_jacket.item"))
                {
                    if (damageType == Rust.DamageType.Drowned)
                    {
                        deduction += 0.2f;
                    }
                    if (damageType == Rust.DamageType.Cold)
                    {
                        deduction += 0.2f;
                    }
                }
                if (item.info.name.ToLower().Contains("hazmat_pants.item"))
                {
                    if (damageType == Rust.DamageType.Drowned)
                    {
                        deduction += 0.2f;
                    }
                    if (damageType == Rust.DamageType.Cold)
                    {
                        deduction += 0.2f;
                    }
                }
                if (item.info.name.ToLower().Contains("hazmat_gloves.item"))
                {
                    if (damageType == Rust.DamageType.Drowned)
                    {
                        deduction += 0.05f;
                    }
                    if (damageType == Rust.DamageType.Cold)
                    {
                        deduction += 0.05f;
                    }
                }
                if (item.info.name.ToLower().Contains("hazmat_boots.item"))
                {
                    if (damageType == Rust.DamageType.Drowned)
                    {
                        deduction += 0.05f;
                    }
                    if (damageType == Rust.DamageType.Cold)
                    {
                        deduction += 0.05f;
                    }
                }
            }
            return(deduction);
        }
Beispiel #14
0
        void OnPlayerAttack(BasePlayer attacker, HitInfo info)
        {
            if (isStarted && (playerList.Contains(attacker) || playerList2.Contains(attacker)))
            {
                switch (EID)
                {
                case GameModes.FreeForAll:
                    break;

                case GameModes.GunGame:
                    try
                    {
                        Rust.DamageType hit    = info.damageTypes.GetMajorityDamageType();
                        BasePlayer      victim = info.HitEntity.ToPlayer();
                        //PrintToChat(playerNumbers[playerList.LastIndexOf(attacker)].ToString());
                        if (playerNumbers[playerList.LastIndexOf(attacker)] == GGWeapons.Count - 1)
                        {
                            PrintToChat(attacker.displayName + " has won " + gameModes[ID] + "!");
                            reset();
                            victim.DieInstantly();
                        }
                        else if (hit == Rust.DamageType.Slash || hit == Rust.DamageType.Fun_Water)
                        {
                            victim.DieInstantly();
                            if (playerNumbers[playerList.LastIndexOf(victim)] > 0)
                            {
                                playerNumbers[playerList.LastIndexOf(victim)] -= 1;
                            }
                        }
                    }
                    catch { }
                    break;

                case GameModes.OneInTheChamber:
                    try
                    {
                        if (playerList.Contains(info.HitEntity.ToPlayer()))     // If attack hit player
                        {
                            BasePlayer target = info.HitEntity.ToPlayer();
                            playerNumbers2[playerList.LastIndexOf(target)]  -= 1;
                            playerNumbers[playerList.LastIndexOf(attacker)] += 1;
                            PrintToChat(target, playerNumbers2[playerList.LastIndexOf(target)] + " lives left.");

                            if (playerNumbers2[playerList.LastIndexOf(target)] <= 0)     // If player is out of lives
                            {
                                PrintToChat(target, "Out of lives!");
                                playerList.Remove(target);
                            }

                            target.DieInstantly();

                            if (playerList.Count == 1)     // If one player remains
                            {
                                int winner = 0;
                                int index  = 0;
                                for (int i = 0; i < playerNumbers.Count; i++)
                                {
                                    if (winner < playerNumbers[i])
                                    {
                                        winner = playerNumbers[i];
                                        index  = i;
                                    }
                                }
                                PrintToChat(playerList2[index].displayName + " has won with " + playerNumbers[index].ToString() + " kills!");
                                reset();
                            }
                            else
                            {
                                /* Weird memory work around */
                                List <Item>    belt   = attacker.inventory.containerBelt.FindItemsByItemID(-852563019);
                                Item           gun    = ItemManager.CreateByItemID(-852563019);
                                BaseProjectile newGun = gun.GetHeldEntity() as BaseProjectile;
                                BaseProjectile oldGun = belt[0].GetHeldEntity() as BaseProjectile;
                                newGun.primaryMagazine.contents = oldGun.primaryMagazine.contents;
                                strip(attacker);
                                attacker.inventory.GiveItem(incAmmo(gun));
                                attacker.GiveItem(ItemManager.CreateByItemID(2040726127));     // combat 12
                                wipe();
                            }
                        }
                    }
                    catch { }
                    break;

                case GameModes.Infected:

                    try
                    {
                        if (playerList.Contains(info.HitEntity.ToPlayer()) && playerList.Contains(attacker) ||
                            playerList2.Contains(info.HitEntity.ToPlayer()) && playerList2.Contains(attacker))     // If attack hit a player of the same team
                        {
                            info.damageTypes.ScaleAll(0);
                        }
                        else if (info.damageTypes.GetMajorityDamageType() == Rust.DamageType.Slash ||
                                 info.damageTypes.GetMajorityDamageType() == Rust.DamageType.Fun_Water ||
                                 info.damageTypes.GetMajorityDamageType() == Rust.DamageType.Arrow)
                        {
                            info.HitEntity.ToPlayer().DieInstantly();
                            wipe();
                            if (playerList.Contains(info.HitEntity.ToPlayer()))
                            {
                                playerList.Remove(info.HitEntity.ToPlayer());
                                playerList2.Add(info.HitEntity.ToPlayer());
                            }
                            if (playerList.Count == 0)
                            {
                                PrintToChat("Final kill: " + attacker.displayName + " killed " + info.HitEntity.ToPlayer().displayName);
                                cleanPlayers();
                                reset();
                            }
                        }
                    }
                    catch { }
                    break;
                }
            }
        }