Ejemplo n.º 1
0
        public static bool CanTrade(MyEntity entityToTrade, params object[] args)
        {
            if (!ControlIsInPlayerShip() || IsBlocked(entityToTrade, args))
            {
                return(false);
            }

            bool hasRightType = /*(entityToTrade is MySmallShip) || */ (entityToTrade is MyPrefabHangar);

            if (!hasRightType)
            {
                return(false);
            }

            MySmallShip           smallShip       = GetSmallShipFromArguments(args);
            MyFactionRelationEnum factionRelation = MyFactions.GetFactionsRelation(entityToTrade, smallShip);

            if (entityToTrade is MyPrefabHangar)
            {
                MyPrefabHangar prefabHangar = entityToTrade as MyPrefabHangar;
                return((factionRelation == MyFactionRelationEnum.Neutral || factionRelation == MyFactionRelationEnum.Friend || prefabHangar.UseProperties.IsHacked) &&
                       prefabHangar.IsWorking() && prefabHangar.PrefabHangarType == MyMwcObjectBuilder_PrefabHangar_TypesEnum.VENDOR && IsTargetVisible(smallShip, prefabHangar));
            }
            else
            {
                Debug.Fail("This shouldn't happen! You can't trade with bot");
                return(factionRelation == MyFactionRelationEnum.Neutral &&
                       !IsShipLootable(entityToTrade as MySmallShip) &&
                       IsLookAtTarget(smallShip, entityToTrade));
            }
        }
Ejemplo n.º 2
0
        private static void PackMothership()
        {
            MyTrace.Send(TraceWindow.Saving, "Player packing mothership");
            MyPrefabHangar hangar = MySession.Static.Player.Ship.GetNearMotherShipContainer();

            if (hangar == null)
            { //We are traveling in solar map but madelyn is far away. Assume we are travelling with Madelyn by default
                MyEntity madelynHangar;
                MyEntities.TryGetEntityByName(MyMission.MyMissionLocation.MADELYN_HANGAR, out madelynHangar);
                hangar = madelynHangar as MyPrefabHangar;
            }

            if (hangar != null)
            {
                // Move player start location dummy, so that next time player starts on same position
                UpdateStartDummy(MyDummyPointFlags.PLAYER_START, MySession.PlayerShip.WorldMatrix);

                // Move mothership start location dummy, so that next time mothership starts on same position
                UpdateStartDummy(MyDummyPointFlags.MOTHERSHIP_START, hangar.Parent.WorldMatrix);

                var             container = hangar.Parent;
                MyInventoryItem item      = MyInventory.CreateInventoryItemFromObjectBuilder(container.GetObjectBuilder(true));
                MySession.Static.Inventory.AddInventoryItem(item);

                container.MarkForClose();

                MyTrace.Send(TraceWindow.Saving, "Player mothership found and packed");
            }
        }
Ejemplo n.º 3
0
        public static bool IsNearMothership(MyPrefabHangar prefabHangar, params object[] args)
        {
            MySmallShip smallShip = GetSmallShipFromArguments(args);

            return((prefabHangar.PrefabHangarType == MyMwcObjectBuilder_PrefabHangar_TypesEnum.HANGAR &&
                    MyFactions.GetFactionsRelation(smallShip, prefabHangar) == MyFactionRelationEnum.Friend) &&
                   IsTargetVisible(smallShip, prefabHangar) &&
                   ControlIsInPlayerShip());
        }
Ejemplo n.º 4
0
        private static void MoveEntityToHangar(MyEntity entity, float offset)
        {
            MyEntity hangarEntity;

            MyEntities.TryGetEntityByName(MyMissionLocation.MADELYN_HANGAR, out hangarEntity);
            MyPrefabHangar madelynHangar = hangarEntity as MyPrefabHangar;

            if (madelynHangar != null)
            {
                entity.SetPosition(madelynHangar.WorldVolume.Center - offset * madelynHangar.WorldMatrix.Forward);
            }
        }
Ejemplo n.º 5
0
        public static bool IsPlayerShipNearMadelyn()
        {
            MyEntity hangarEntity;

            MyEntities.TryGetEntityByName(MyMissionLocation.MADELYN_HANGAR, out hangarEntity);
            MyPrefabHangar madelynHangar = hangarEntity as MyPrefabHangar;

            if (madelynHangar != null)
            {
                float distance = Vector3.Distance(MySession.PlayerShip.GetPosition(), madelynHangar.GetPosition());
                if (distance < 2000)
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 6
0
        public static bool CanTradeForFree(MyEntity entityToTrade, params object[] args)
        {
            if (!ControlIsInPlayerShip() || IsBlocked(entityToTrade, args))
            {
                return(false);
            }

            // temporary disabled trading for free with smallships
            bool hasRightType = /*(entityToTrade is MySmallShip) || */ (entityToTrade is MyPrefabHangar || entityToTrade is MyDrone);

            if (!hasRightType)
            {
                return(false);
            }

            MySmallShip           smallShip       = GetSmallShipFromArguments(args);
            MyFactionRelationEnum factionRelation = MyFactions.GetFactionsRelation(entityToTrade, smallShip);

            if (entityToTrade is MyPrefabHangar)
            {
                MyPrefabHangar prefabHangar = entityToTrade as MyPrefabHangar;
                return(prefabHangar.PrefabHangarType == MyMwcObjectBuilder_PrefabHangar_TypesEnum.HANGAR &&
                       factionRelation == MyFactionRelationEnum.Friend &&
                       prefabHangar.IsWorking() && IsTargetVisible(smallShip, prefabHangar));
            }
            else if (entityToTrade is MyDrone)
            {
                return(factionRelation == MyFactionRelationEnum.Friend &&
                       !IsShipLootable(entityToTrade as MySmallShip) &&
                       IsCustomLookAtTarget(smallShip, entityToTrade, entityToTrade.WorldVolume.Radius * 1.0f));
            }
            else
            {
                return(factionRelation == MyFactionRelationEnum.Friend &&
                       !IsShipLootable(entityToTrade as MySmallShip) &&
                       IsLookAtTarget(smallShip, entityToTrade));
            }
        }