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); } }
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); }
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); }
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); } }