public void UpdateStats()
        {
            MyEventStatsUpdate msg = new MyEventStatsUpdate();

            msg.StatsBuilder = PlayerStatistics.GetObjectBuilder();
            Peers.SendToAll(ref msg, NetDeliveryMethod.Unreliable);
        }
        public void SendFaction(MyMwcObjectBuilder_FactionEnum faction)
        {
            Log("Set faction: " + MyFactionConstants.GetFactionProperties(faction).Name);
            var factionMsg = new MyEventSetFaction();

            factionMsg.Faction = faction;
            Peers.SendToAll(ref factionMsg, NetDeliveryMethod.ReliableOrdered);
        }
        public void SendGlobalFlag(MyGlobalFlagsEnum eventFlag)
        {
            var msg = new MyEventGlobalFlag();

            msg.Flag = eventFlag;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
        public void FriendlyFire(MyFriendlyFireEnum type)
        {
            var msg = new MyEventFriendlyFire();

            msg.FriendlyFireType = type;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered, 0);
        }
Esempio n. 5
0
        public void SendHeadshake(float amount)
        {
            var msg = new MyEventHeadshake();

            msg.Amount = amount;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableSequenced, 3);
        }
Esempio n. 6
0
        public void SendPlayDialogue(MyDialogueEnum id)
        {
            var msg = new MyEventPlayDialogue();

            msg.DialogueEnum = (int)id;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
Esempio n. 7
0
        public void SendPlaySound(Vector3?position, MySoundCuesEnum id)
        {
            var msg = new MyEventPlaySound();

            msg.Position  = position;
            msg.SoundEnum = (int)id;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
Esempio n. 8
0
        public void SendSetActorFaction(MyActorEnum actor, MyMwcObjectBuilder_FactionEnum faction)
        {
            var msg = new MyEventSetActorFaction();

            msg.ActorId = (int)actor;
            msg.Faction = faction;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
        public void SendEvent(Vector3 position, MyGlobalEventEnum eventType, int seed, Vector3 up, Vector3 forward)
        {
            var msg = new MyEventEvent();

            msg.Position      = new MyMwcPositionAndOrientation(position, forward, up);
            msg.EventTypeEnum = (int)eventType;
            msg.Seed          = seed;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
Esempio n. 10
0
        public void SendSetFactionRelation(MyMwcObjectBuilder_FactionEnum factionA, MyMwcObjectBuilder_FactionEnum factionB, float relation)
        {
            var msg = new MyEventSetFactionRelation();

            msg.FactionA = factionA;
            msg.FactionB = factionB;
            msg.Relation = relation;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
        public void NewEntity(MyMwcObjectBuilder_Base objectBuilder, Matrix matrix)
        {
            Debug.Assert(objectBuilder.EntityId.HasValue, "EntityId must be set");

            var msg = new MyEventNewEntity();

            msg.ObjectBuilder = objectBuilder;
            msg.Position      = new MyMwcPositionAndOrientation(matrix);
            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered, 0, DEFAULT_LARGE_MESSAGE_SIZE);
        }
Esempio n. 12
0
        public void SendMissionProgress(MyMissionBase mission, MyMissionProgressType progressType, MyTextsWrapperEnum?messageEnum = null)
        {
            MyEventMissionProgress message = new MyEventMissionProgress();

            message.MissionId    = mission != null ? (int)mission.ID : (int?)null;
            message.ProgressType = progressType;
            message.MessageEnum  = messageEnum.HasValue ? (int)messageEnum.Value : (int?)null;

            Peers.SendToAll(ref message, NetDeliveryMethod.ReliableOrdered);
        }
        public void SpeacialWeaponEvent(MySpecialWeaponEventEnum eventType, MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum weapon)
        {
            MyEventSpeacialWeapon msg = new MyEventSpeacialWeapon();

            msg.ShipEntityId = MySession.PlayerShip.EntityId.Value.NumericValue;
            msg.Weapon       = weapon;
            msg.WeaponEvent  = eventType;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered);
        }
 public void ExplodeAmmo(MyAmmoBase ammo)
 {
     // Explode only my missiles to prevent circullar SEND/RECEIVE
     if (IsControlledByMe(ammo))
     {
         var msg = new MyEventAmmoExplosion();
         msg.AmmoBaseEntityId = ammo.EntityId.Value.NumericValue;
         msg.Position         = new MyMwcPositionAndOrientation(ammo.WorldMatrix);
         Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered);
     }
 }
Esempio n. 15
0
        /// <summary>
        /// Try lock entity and announce to other players (runs only on host)
        /// </summary>
        bool TryLockEntity(uint entityId, byte playerId, bool enable)
        {
            bool success = true;

            if (enable)
            {
                using (m_lockedEntitiesLock.AcquireExclusiveUsing())
                {
                    success = !m_lockedEntities.ContainsKey(entityId);

                    if (success)
                    {
                        m_lockedEntities[entityId] = playerId;
                        MyEntities.GetEntityById(entityId.ToEntityId()).OnClosing += m_unlockOnClosing;
                    }
                }
            }
            else
            {
                using (m_lockedEntitiesLock.AcquireExclusiveUsing())
                {
                    success = m_lockedEntities.Remove(entityId);
                    MyEntity entity;
                    if (MyEntities.TryGetEntityById(entityId.ToEntityId(), out entity))
                    {
                        entity.OnClosing -= m_unlockOnClosing;
                    }
                }
            }

            if (success)
            {
                // Send lock to all
                MyEventLock response = new MyEventLock();
                response.EntityId = entityId;
                response.LockType = enable ? MyLockEnum.LOCK : MyLockEnum.UNLOCK;
                Peers.SendToAll(ref response, NetDeliveryMethod.ReliableOrdered, 0);
            }

            if (enable)
            {
                // Send response to player
                MyPlayerRemote player;
                if (Peers.TryGetPlayer(playerId, out player))
                {
                    MyEventLockResult response = new MyEventLockResult();
                    response.EntityId  = entityId;
                    response.IsSuccess = success;
                    Peers.NetworkClient.Send(ref response, player.Connection, NetDeliveryMethod.ReliableOrdered, 0);
                }
            }

            return(success);
        }
        public void ResetEntity(MyEntity entity)
        {
            Debug.Assert(entity.EntityId.HasValue);

            if (IsControlledByMe(entity))
            {
                MyEventEntityReset msg = new MyEventEntityReset();
                msg.EntityId = entity.EntityId.Value.NumericValue;
                Peers.SendToAll(ref msg);
            }
        }
Esempio n. 17
0
        public void SendSetEntityFaction(MyEntity entity, MyMwcObjectBuilder_FactionEnum faction)
        {
            Debug.Assert(entity.EntityId.HasValue, "Entity must have id");

            var msg = new MyEventSetEntityFaction();

            msg.Faction  = faction;
            msg.EntityId = entity.EntityId.Value.NumericValue;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
Esempio n. 18
0
        private void SendMusicTransition(MyMusicEventEnum musicEventType, int?priority, MyMusicTransitionEnum?transitionEnum, string category, bool loop)
        {
            var msg = new MyEventMusicTransition();

            msg.MusicEventType = musicEventType;
            msg.TransitionEnum = transitionEnum.HasValue ? (int)transitionEnum.Value : 0;
            msg.Priority       = priority ?? 0;
            msg.Category       = category;
            msg.Loop           = loop;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
        public void CutOut(MyVoxelMap voxelMap, ref BoundingSphere cutOutSphere)
        {
            Debug.Assert(voxelMap.EntityId.HasValue);

            var msg = new MyEventCutOut();

            msg.Position         = cutOutSphere.Center;
            msg.Radius           = cutOutSphere.Radius;
            msg.VoxelMapEntityId = voxelMap.EntityId.Value.NumericValue;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered, 0);
        }
        public void AddVoxelHand(uint voxelMapId, uint entityId, float radius, MyMwcVoxelHandModeTypeEnum handMode, MyMwcVoxelMaterialsEnum?material)
        {
            var msg = new MyEventAddVoxelHand();

            msg.EntityId         = entityId;
            msg.Radius           = radius;
            msg.HandMode         = handMode;
            msg.VoxelMaterial    = material;
            msg.VoxelMapEntityId = voxelMapId;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered, 0);
        }
 public void UpdateAmmo(MyAmmoBase ammo)
 {
     Debug.Assert(ammo.EntityId.HasValue, "All guided projectiles must have entity ID, this type hasn't: " + ammo.GetType().Name);
     if (ammo.EntityId.Value.PlayerId == MyEntityIdentifier.CurrentPlayerId) // Make sure to update only my ammo
     {
         MyEventAmmoUpdate msg = new MyEventAmmoUpdate();
         msg.EntityId = ammo.EntityId.Value.NumericValue;
         msg.Velocity = ammo.Physics.LinearVelocity;
         msg.Position = new MyMwcPositionAndOrientation(ammo.WorldMatrix);
         Peers.SendToAll(ref msg, ammo.EntityId.Value, m_multiplayerConfig.ProjectilesTickRate, NetDeliveryMethod.Unreliable);
     }
 }
        public void SendNotification(MyNotificationType type, MyTextsWrapperEnum text, string arg0 = null, string arg1 = null, string arg2 = null, string arg3 = null)
        {
            var msg = new MyEventNotification();

            msg.Text = (int)text;
            msg.Type = type;
            msg.Arg0 = arg0;
            msg.Arg1 = arg1;
            msg.Arg2 = arg2;
            msg.Arg3 = arg3;
            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
        public void AddExplosion(Vector3 position, MyExplosionTypeEnum explosionType, float damage, float radius, bool forceDebris, bool createDecals)
        {
            var msg = new MyEventAddExplosion();

            msg.CreateDecals  = createDecals;
            msg.ForceDebris   = forceDebris;
            msg.Damage        = damage;
            msg.Position      = position;
            msg.EntityId      = null;
            msg.ExplosionType = (byte)explosionType;
            msg.Radius        = radius;
            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
        private void SendChatMessage(string message, MyMwcObjectBuilder_FactionEnum?senderFaction)
        {
            MyEventChat msg = new MyEventChat();

            msg.Message = message;
            if (senderFaction.HasValue)
            {
                Peers.SendToTeam(ref msg, senderFaction.Value, NetDeliveryMethod.ReliableUnordered);
            }
            else
            {
                Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered);
            }
        }
        public void SendCountdown(TimeSpan countdown, bool forceSend = false)
        {
            MyEventCountdown msg = new MyEventCountdown();

            msg.Timespan = countdown;

            if (forceSend)
            {
                Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
            }
            else
            {
                Peers.SendToAll(ref msg, Multiplayer.MyUpdateTypeId.MissionTimer, 0, 1.2f, NetDeliveryMethod.ReliableOrdered);
            }
        }
        public void ProjectileHit(MyEntity target, Vector3 position, Vector3 direction, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum ammoType, MyEntity source)
        {
            if (target.EntityId.HasValue)
            {
                MyEventProjectileHit msg = new MyEventProjectileHit();
                msg.TargetEntityId = target.EntityId.Value.NumericValue;
                msg.Position       = position;
                msg.Direction      = direction;
                msg.AmmoType       = ammoType;

                msg.SourceEntityId = source != null?MyEntityIdentifier.ToNullableInt(source.EntityId) : null;

                Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered);
            }
        }
Esempio n. 27
0
        public void ClearLocks(byte playerId)
        {
            foreach (var l in m_lockedEntities.ToArray())
            {
                if (l.Value == playerId)
                {
                    m_lockedEntities.Remove(l.Key);

                    // Announce to all
                    MyEventLock unlockMsg = new MyEventLock();
                    unlockMsg.EntityId = l.Key;
                    unlockMsg.LockType = MyLockEnum.UNLOCK;
                    Peers.SendToAll(ref unlockMsg);
                }
            }
        }
        public void AddExplosion(MyEntity entity, MyExplosionTypeEnum explosionType, float damage, float radius, bool forceDebris, bool createDecals, MyParticleEffectsIDEnum?particleIDOverride = null)
        {
            Debug.Assert(entity != null && entity.EntityId.HasValue);

            var msg = new MyEventAddExplosion();

            msg.Damage             = damage;
            msg.EntityId           = entity.EntityId.Value.NumericValue;
            msg.ExplosionType      = (byte)explosionType;
            msg.Radius             = radius;
            msg.ParticleIDOverride = (int?)particleIDOverride;
            msg.CreateDecals       = createDecals;
            msg.ForceDebris        = forceDebris;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableOrdered);
        }
        public void DoDamage(MyEntity target, float player, float normal, float emp, MyDamageType damageType, MyAmmoType ammoType, MyEntity source, float newHealthRatio)
        {
            if (IsControlledByMe(target))
            {
                MyEventDoDamage msg = new MyEventDoDamage();
                msg.TargetEntityId = target.EntityId.Value.NumericValue;
                msg.PlayerDamage   = player;
                msg.Damage         = normal;
                msg.EmpDamage      = emp;
                msg.DamageType     = (byte)damageType;
                msg.AmmoType       = (byte)ammoType;
                msg.DamageSource   = source != null?MyEntityIdentifier.ToNullableInt(source.EntityId) : null;

                msg.NewHealthRatio = newHealthRatio;
                Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered);
            }
        }
        public void Shoot(MyEntity entity, Matrix shooterMatrix, MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum weapon, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum ammo, MyEntity target, MyEntityIdentifier?projectileId)
        {
            if (!IsControlledByMe(entity))
            {
                return;
            }

            MyEventShoot msg = new MyEventShoot();

            msg.Position           = new MyMwcPositionAndOrientation(shooterMatrix);
            msg.ShooterEntityId    = entity.EntityId.Value.NumericValue;
            msg.ProjectileEntityId = MyEntityIdentifier.ToNullableInt(projectileId);
            msg.Ammo           = ammo;
            msg.TargetEntityId = (target != null && target.EntityId.HasValue) ? target.EntityId.Value.NumericValue : (uint?)null;
            msg.Weapon         = weapon;

            Peers.SendToAll(ref msg, NetDeliveryMethod.ReliableUnordered);
        }