Exemplo n.º 1
0
        static bool Prefix(ProjPrefab ___m_type, Projectile __instance, bool damaged_something)
        {
            if (!GameplayManager.IsMultiplayerActive ||
                (___m_type != ProjPrefab.missile_creeper && ___m_type != ProjPrefab.missile_timebomb && (!MPSniperPackets.enabled || (___m_type != ProjPrefab.missile_devastator && ___m_type != ProjPrefab.missile_smart))) || // Extend to devastators and novas when sniper packets are enabled.
                __instance.m_projectile_id == -1 || __instance.RemainingLifetime() < -4f)                                                                                                                                       // unlinked/timeout: probably stuck, explode anyway
            {
                return(true);
            }
            if (!Server.IsActive()) // ignore explosions on client if creeper-sync active
            {
                return(m_allow_explosions);
            }
            var msg = new ExplodeMsg();

            msg.m_id  = __instance.m_projectile_id;
            msg.m_pos = __instance.c_transform.position;
            msg.m_damaged_something = damaged_something;
            foreach (var conn in NetworkServer.connections)
            {
                if (conn != null && MPTweaks.ClientHasNetVersion(conn.connectionId, MPCreeperSync.NET_VERSION_CREEPER_SYNC))
                {
                    NetworkServer.SendToClient(conn.connectionId, MessageTypes.MsgExplode, msg);
                }
            }
            return(true);
        }
        public static int GetTextureIndex(ProjPrefab prefab)
        {
            switch (prefab)
            {
            case ProjPrefab.proj_vortex:
                return(27);

            case ProjPrefab.proj_thunderbolt:
                return(32);

            case ProjPrefab.proj_shotgun:
                return(29);

            case ProjPrefab.proj_reflex:
                return(28);

            case ProjPrefab.proj_impulse:
                return(26);

            case ProjPrefab.proj_flak_cannon:
                return(31);

            case ProjPrefab.proj_driller_mini:
            case ProjPrefab.proj_driller:
                return(30);

            case ProjPrefab.proj_beam:
                return(33);

            case ProjPrefab.missile_creeper:
                return(107);

            case ProjPrefab.missile_devastator:
            case ProjPrefab.missile_devastator_mini:
                return(109);

            case ProjPrefab.missile_falcon:
                return(104);

            case ProjPrefab.missile_hunter:
                return(106);

            case ProjPrefab.missile_pod:
                return(105);

            case ProjPrefab.missile_smart:
            case ProjPrefab.missile_smart_mini:
                return(108);

            case ProjPrefab.missile_timebomb:
                return(110);

            case ProjPrefab.missile_vortex:
                return(111);

            default:
                return(-1);
            }
        }
Exemplo n.º 3
0
 static void Prefix(GameObject ___m_owner, GameObject collider, ProjPrefab ___m_type)
 {
     if (GameplayManager.IsMultiplayerActive && ___m_owner != null && ___m_owner.GetComponent <Player>())
     {
         MPLavaTrack.CurrentOwner = ___m_owner;
     }
     else
     {
         MPLavaTrack.CurrentOwner = null;
     }
     //Debug.Log("ProcessCollision layer=" + collider.layer + " owner = " + MPLavaTrack.CurrentOwner + " type=" + ___m_type);
 }
Exemplo n.º 4
0
        public static void Prefix(DamageInfo di, PlayerShip __instance)
        {
            if (!Overload.NetworkManager.IsHeadless() || di.damage == 0f ||
                __instance.m_death_stats_recorded || __instance.m_cannot_die || __instance.c_player.m_invulnerable)
            {
                return;
            }
            var otherPlayer = di.owner?.GetComponent <Player>();

            float      hitpoints = __instance.c_player.m_hitpoints;
            ProjPrefab weapon    = di.weapon;

            float damage = di.damage;

            if (hitpoints - di.damage <= 0f)
            {
                damage = hitpoints;
            }
            ServerStatLog.AddDamage(__instance.c_player, otherPlayer, weapon, damage);
        }
Exemplo n.º 5
0
        public static void AddDamage(Player defender, Player attacker, ProjPrefab weapon, float damage)
        {
            if (NetworkMatch.m_postgame)
            {
                return;
            }

            var key = new PlayerPlayerWeaponDamage {
                Attacker = attacker, Defender = defender, Weapon = weapon
            };

            if (DamageTable.TryGetValue(key, out float totalDamage))
            {
                DamageTable[key] = totalDamage + damage;
            }
            else
            {
                DamageTable[key] = damage;
            }
        }
        public override void Deserialize(NetworkReader reader)
        {
            players = new Dictionary <NetworkInstanceId, List <DamageSummary> >();
            var version = reader.ReadByte();

            m_killer_id   = reader.ReadNetworkId();
            m_assister_id = reader.ReadNetworkId();
            var numPlayers = reader.ReadPackedUInt32();

            for (int i = 0; i < numPlayers; i++)
            {
                NetworkInstanceId m_player_id = reader.ReadNetworkId();
                players.Add(m_player_id, new List <DamageSummary>());
                uint damageCount = reader.ReadPackedUInt32();
                for (int j = 0; j < damageCount; j++)
                {
                    ProjPrefab weapon = (ProjPrefab)reader.ReadPackedUInt32();
                    float      damage = reader.ReadSingle();
                    players[m_player_id].Add(new DamageSummary {
                        weapon = weapon, damage = damage
                    });
                }
            }
        }
 public static void ReadField(System.Object obj, string name, string value)
 {
     try {
         FieldInfo field = obj.GetType().GetField(name);
         if (field == null)
         {
             Debug.LogError("Tried to read a field of name: " + name + " but that doesn't exist");
         }
         System.Type field_type = field.FieldType;
         if (field_type == typeof(int))
         {
             field.SetValue(obj, int.Parse(value, CultureInfo.InvariantCulture));
         }
         else if (field_type == typeof(float))
         {
             field.SetValue(obj, value.ToFloat());
         }
         else if (field_type == typeof(bool))
         {
             field.SetValue(obj, bool.Parse(value));
         }
         else if (field_type == typeof(string))
         {
             field.SetValue(obj, value);
         }
         else if (field_type == typeof(FallOffType))
         {
             FallOffType fot = ParseEnumSafe(typeof(FallOffType), value, FallOffType.LINEAR);
             field.SetValue(obj, fot);
         }
         else if (field_type == typeof(BounceBehavior))
         {
             BounceBehavior bb = ParseEnumSafe(typeof(BounceBehavior), value, BounceBehavior.none);
             field.SetValue(obj, bb);
         }
         else if (field_type == typeof(FXWeaponExplosion))
         {
             FXWeaponExplosion wxp = ParseEnumSafe(typeof(FXWeaponExplosion), value, FXWeaponExplosion.num);
             field.SetValue(obj, wxp);
         }
         else if (field_type == typeof(ProjPrefab))
         {
             ProjPrefab proj = ParseEnumSafe(typeof(ProjPrefab), value, ProjPrefab.num);
             field.SetValue(obj, proj);
         }
         else if (field_type == typeof(ItemPrefab))
         {
             ItemPrefab item = ParseEnumSafe(typeof(ItemPrefab), value, ItemPrefab.num);
             field.SetValue(obj, item);
         }
         else if (field_type == typeof(ProjSpawnPattern))
         {
             ProjSpawnPattern psp = ParseEnumSafe(typeof(ProjSpawnPattern), value, ProjSpawnPattern.RANDOM);
             field.SetValue(obj, psp);
         }
         else if (field_type == typeof(SoundEffect))
         {
             SoundEffect sfx = ParseEnumSafe(typeof(SoundEffect), value, SoundEffect.none);
             field.SetValue(obj, sfx);
         }
         else if (field_type == typeof(FXWeaponEffect))
         {
             FXWeaponEffect wfx = ParseEnumSafe(typeof(FXWeaponEffect), value, FXWeaponEffect.num);
             field.SetValue(obj, wfx);
         }
         else if (field_type == typeof(FXTrailRenderer))
         {
             FXTrailRenderer trr = ParseEnumSafe(typeof(FXTrailRenderer), value, FXTrailRenderer.num);
             field.SetValue(obj, trr);
         }
         else if (field_type == typeof(FiringDistribution))
         {
             FiringDistribution fd = ParseEnumSafe(typeof(FiringDistribution), value, FiringDistribution.SEQUENTIAL);
             field.SetValue(obj, fd);
         }
         else if (field_type == typeof(WeaponUnlock))
         {
             WeaponUnlock wu = ParseEnumSafe(typeof(WeaponUnlock), value, WeaponUnlock.LEVEL_0);
             field.SetValue(obj, wu);
         }
         else if (field_type == typeof(SFXCue))
         {
             SFXCue cue = ParseEnumSafe(typeof(SFXCue), value, SFXCue.none);
             field.SetValue(obj, cue);
         }
         else
         {
             Debug.LogError("Unrecognized field type: " + field_type.ToString() + " for variable: " + name);
         }
     }
     catch (System.Exception ex) {
         Debug.LogException(ex);
     }
 }