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