static bool Prefix(ObjectiveClosestPOIGoto __instance, ref string __result, ref string bindingName) { string id = __instance.ID; string value = __instance.Value; if (bindingName == null || !(bindingName == "name")) { __result = string.Empty; return(false); } if (!Steam.Network.IsServer) { if (__instance.OwnerQuest.DataVariables.ContainsKey("POIName")) { __result = __instance.OwnerQuest.DataVariables["POIName"]; return(false); } } else { if (__instance.OwnerQuest.DataVariables.ContainsKey("POIName")) { __result = __instance.OwnerQuest.DataVariables["POIName"]; return(false); } if (__instance.OwnerQuest.QuestPrefab != null) { __result = __instance.OwnerQuest.QuestPrefab.filename; return(false); } } __result = string.Empty; return(false); }
static bool Prefix(ObjectiveClosestPOIGoto __instance, ref Vector3 __result, ref EntityNPC ownerNPC, ref List <Vector2> usedPOILocations, ref int entityIDforQuests) { if (__instance.OwnerQuest.GetPositionData(out __instance.position, Quest.PositionDataTypes.POIPosition)) { __instance.OwnerQuest.Position = __instance.position; __instance.positionSet = true; __instance.OwnerQuest.HandleMapObject(Quest.PositionDataTypes.POIPosition, __instance.icon); __instance.CurrentValue = 2; __result = __instance.position; return(false); } EntityAlive entityAlive = (!(ownerNPC == null)) ? ownerNPC : __instance.OwnerQuest.OwnerJournal.OwnerPlayer as EntityAlive; if (Steam.Network.IsServer) { PrefabInstance closestPOIToWorldPos = GameManager.Instance.World.ChunkClusters[0].ChunkProvider.GetDynamicPrefabDecorator().GetClosestPOIToWorldPos(__instance.OwnerQuest.QuestTags, new Vector2(entityAlive.position.x, entityAlive.position.z), -1); if (closestPOIToWorldPos == null) { __result = Vector3.zero; return(false); } Vector2 vector = new Vector2((float)closestPOIToWorldPos.boundingBoxPosition.x + (float)closestPOIToWorldPos.boundingBoxSize.x / 2f, (float)closestPOIToWorldPos.boundingBoxPosition.z + (float)closestPOIToWorldPos.boundingBoxSize.z / 2f); if (vector.x == -0.1f && vector.y == -0.1f) { Log.Error("ObjectiveClosestPOIGoto: No POI found."); __result = Vector3.zero; return(false); } int num = (int)vector.x; int num2 = (int)entityAlive.position.y; int num3 = (int)vector.y; if (GameManager.Instance.World.IsPositionInBounds(__instance.position)) { __instance.FinalizePoint(new Vector3((float)closestPOIToWorldPos.boundingBoxPosition.x, (float)closestPOIToWorldPos.boundingBoxPosition.y, (float)closestPOIToWorldPos.boundingBoxPosition.z), new Vector3((float)closestPOIToWorldPos.boundingBoxSize.x, (float)closestPOIToWorldPos.boundingBoxSize.y, (float)closestPOIToWorldPos.boundingBoxSize.z)); __instance.position = new Vector3((float)num, (float)num2, (float)num3); __instance.OwnerQuest.Position = __instance.position; string text = Localization.Get(closestPOIToWorldPos.filename, string.Empty); __instance.OwnerQuest.DataVariables.Add("POIName", string.IsNullOrEmpty(text) ? closestPOIToWorldPos.filename : text); __result = __instance.position; return(false); } } else { SingletonMonoBehaviour <ConnectionManager> .Instance.SendToServer(new NetPackageQuestGotoPoint(entityAlive.entityId, __instance.OwnerQuest.QuestTags, __instance.OwnerQuest.QuestCode, NetPackageQuestGotoPoint.QuestGotoTypes.Closest, __instance.OwnerQuest.QuestClass.DifficultyTier, 0, -1, 0f, 0f, 0f, -1f), false); __instance.CurrentValue = 1; } __result = Vector3.zero; return(false); }