private static void CreateNewResource(PoolGameObjects.TypePoolPrefabs typePoolResource, AlienJob job, ReaderScene.DataObjectInfoID targetInfo, ModelNPC.GameDataAlien p_dataNPC) { PaletteMapController.SelCheckOptDel deleteOpt = PaletteMapController.SelCheckOptDel.None; PaletteMapController.SelCheckOptDel checkOpt = PaletteMapController.SelCheckOptDel.DelTerra; if (typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolFloor && typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolPerson) { checkOpt = PaletteMapController.SelCheckOptDel.DelPrefab; } ModelNPC.ObjectData spawnObject = Storage.GenWorld.GetCreatePrefab(job.ResourceResult, targetInfo.Field); bool isSpawned = Storage.Data.AddDataObjectInGrid(spawnObject, targetInfo.Field, "CheckJobAlien", p_modeDelete: deleteOpt, p_modeCheck: checkOpt, p_dataNPC: p_dataNPC); spawnObject.PortalId = p_dataNPC.PortalId; if (!isSpawned) { Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB [" + job.Job.ToString() + "]: Not Spawn " + spawnObject.NameObject); } else if (job.Job == TypesJobs.Build) { ManagerPortals.AddConstruction(spawnObject, p_dataNPC); } }
public static string GetNameJob(AlienJob job) { if (job == null) { return(string.Empty); } return(string.Format("{0}_{1}_{2}_{3}", job.Job, job.TargetResource, job.ResourceResult, job.JobTo)); }
public static void GetNameJob(ref string result, AlienJob job) { if (job == null) { return; } //AlienJob job = p_dataNPC.Job; result = string.Format("{0}_{1}_{2}_{3}", job.Job, job.TargetResource, job.ResourceResult, job.JobTo); }
public static void CheckFieldsJobValid(ref bool resultIsValid, AlienJob job, List <ModelNPC.ObjectData> resourcesData) { foreach (ModelNPC.ObjectData fieldItem in resourcesData) { CheckFieldJobValid(ref resultIsValid, job, fieldItem); if (!resultIsValid) { break; } } }
public static void GetJobFromName(ref AlienJob resultJob, string jobName, SaveLoadData.TypePrefabs typeAlien) { //AlienJob job = p_dataNPC.Job; Storage.Person.CollectionAlienJob.TryGetValue(typeAlien, out temp_listJobs); string nameNextJob = string.Empty; if (temp_listJobs != null) { foreach (var itemJob in temp_listJobs) { GetNameJob(ref nameNextJob, itemJob); if (nameNextJob == jobName) { resultJob = itemJob; } } } }
public void FindJobBuildLocation(ref ModelNPC.ObjectData result, ref AlienJob job, ModelNPC.GameDataAlien dataAien, int distantionWay) { if (!Storage.Person.CollectionAlienJob.ContainsKey(dataAien.TypePrefab)) { return; } ReaderScene.DataObjectInfoID info; ModelNPC.PortalData portal = null; List <string> listId; TypesBiomNPC biomType = Helper.GetBiomByTypeModel(dataAien.TypePrefab); SaveLoadData.TypePrefabs floorType = PortalBiomFloorsBase[biomType]; result = null; if (string.IsNullOrEmpty(dataAien.PortalId)) { return; } info = ReaderScene.GetInfoID(dataAien.PortalId); if (info == null) { return; } portal = info.Data as ModelNPC.PortalData; portal.ConstructionsId.TryGetValue(floorType, out listId); if (listId == null) { return; } List <AlienJob> jobs = null; Vector2Int test_fieldPos = Vector2Int.zero; Vector2Int keyField; int x = 0; int y = 0; string nameField = string.Empty; string key = string.Empty; bool isFieldJobValid = true; bool isValidFieldBuildFar = true; bool isValidFar = true; bool isInventoryContainTargetResource = false; temp_excludedFreeFileds.Clear(); //Get jobs Storage.Person.CollectionAlienJob.TryGetValue(dataAien.TypePrefab, out jobs); Helper.GetFieldPositByWorldPosit(ref x, ref y, dataAien.Position); temp_findedFloorsIdForBuild.Clear(); //Fill floors portal for building System.Random rnd = new System.Random(); temp_findedFloorsIdForBuild = listId.OrderBy(p => rnd.Next()).ToList(); List <ModelNPC.TerraData> floorsData = new List <ModelNPC.TerraData>(); foreach (string nextRndID in temp_findedFloorsIdForBuild) { info = ReaderScene.GetInfoID(nextRndID); if (info == null) { continue; } if (!(info.Data is ModelNPC.TerraData)) { continue; } floorsData.Add(info.Data as ModelNPC.TerraData); } //Floors portal foreach (ModelNPC.TerraData floorData in floorsData.OrderBy(p => p.ClusterFillSize)) { isValidFieldBuildFar = true; isFieldJobValid = true; keyField = Helper.GetFieldPositByWorldPosit(floorData.Position); //Select job by target resource foreach (AlienJob jobItem in jobs.Where(p => p.TargetResource == floorData.TypePrefab)) //fix all jobs for type Resource { job = jobItem; if (job != null) { if (job.Job != TypesJobs.Build) { continue; } // Test field on free PoolGameObjects.TypePoolPrefabs typePoolResult = AlienJobsManager.CheckFieldJobValid(ref isFieldJobValid, job, floorData); //Filter: Build switch (job.Job) { case TypesJobs.Build: isValidFar = false; //Test inventory filled isInventoryContainTargetResource = dataAien.Inventory != null && dataAien.Inventory.EqualsInv(job.ResourceResult); if (!isInventoryContainTargetResource) { isValidFar = false; } else if (typePoolResult == PoolGameObjects.TypePoolPrefabs.PoolFloor) { //test near objects type of me (Cluster) //AlienJobsManager.IsMeCluster(ref isValidFar, keyField.x, keyField.y, job.ResourceResult, job.ClusterSize); job = null; continue; } else { //Build Prefab if (isValidFieldBuildFar) //Test Free location { //isValidFieldBuildFar = IsFreeLocationPortalConstruction(ref temp_excludedFreeFileds, // keyField.x, keyField.y, job.BuildingyardSize, dataAien.Inventory.TypePrefabObject, portal); //TypesBiomNPC isValidFieldBuildFar = IsFreeLocationPortalConstruction(ref temp_excludedFreeFileds, keyField.x, keyField.y, job.BuildingyardSize, job.ResourceResult, portal); //TypesBiomNPC } isValidFar = isValidFieldBuildFar; } if (!isValidFar || !isFieldJobValid) { job = null; continue; } break; } result = floorData; return; } } } temp_findedFloorsIdForBuild.Clear(); dataAien.JobPass = 0; job = null; }
public static PoolGameObjects.TypePoolPrefabs CheckFieldJobValid(ref bool resultIsValid, AlienJob job, ModelNPC.ObjectData objectField) { bool isResourcePrefabs = Storage.GridData.NamesPrefabObjects.Contains(job.ResourceResult.ToString()); if (isResourcePrefabs) { //resultIsValid = !(objectField is ModelNPC.WoodData); resultIsValid = !(objectField is ModelNPC.WoodData) && !(objectField is ModelNPC.PersonData); return(PoolGameObjects.TypePoolPrefabs.PoolWood); } bool isResourceFloor = Storage.GridData.NamesPrefabFloors.Contains(job.ResourceResult.ToString()); if (isResourceFloor) { //resultIsValid = !(objectField is ModelNPC.FloorData); resultIsValid = true; //FIX__FLOOR_BILD return(PoolGameObjects.TypePoolPrefabs.PoolFloor); } bool isResourceFlores = Storage.GridData.NamesPrefabFlore.Contains(job.ResourceResult.ToString()); if (isResourceFlores) { //resultIsValid = !(objectField is ModelNPC.FloreData); resultIsValid = !(objectField is ModelNPC.FloreData) && !(objectField is ModelNPC.PersonData); return(PoolGameObjects.TypePoolPrefabs.PoolFlore); } //return Storage.GridData.NamesPrefabObjects.Contains(job.ResourceResult.ToString()); return(PoolGameObjects.TypePoolPrefabs.PoolPerson); }
public static bool ResourceRsultIsPrefab(AlienJob job) { return(Storage.GridData.NamesPrefabObjects.Contains(job.ResourceResult.ToString())); }
/* * public static bool CheckJobAlien(ModelNPC.GameDataAlien p_dataNPC, GameActionPersonController controller = null) * { * AlienJob job = p_dataNPC.Job; * if (job != null) * { * string fieldAlien = string.Empty; * string fieldTarget = string.Empty; * Helper.GetNameFieldByPosit(ref fieldAlien, p_dataNPC.Position); * SaveLoadData.TypePrefabs jobResourceTarget = job.TargetResource; * //Target object * ReaderScene.DataObjectInfoID targetInfo = ReaderScene.GetInfoID(p_dataNPC.TargetID); * if (targetInfo != null) * { * if (!targetInfo.TestIsValud()) * { * p_dataNPC.TargetID = null; * } * else * { * int distField = 0; * Helper.GetDistatntionFields(ref distField, targetInfo.Data.Position, p_dataNPC.Position); * Helper.GetNameFieldByPosit(ref fieldTarget, targetInfo.Data.Position); * * ModelNPC.PortalData portal = targetInfo.Data as ModelNPC.PortalData; * if (distField < 2) * { * bool isExitTargetResource = false; * if (p_dataNPC.Inventory == null) * { * p_dataNPC.Inventory = DataObjectInventory.EmptyInventory(); * //Debug.Log(Storage.EventsUI.ListLogAdd = "## JOB: dataNPC.Inventory is null"); * } else * isExitTargetResource = job.TargetResource.ToString() == p_dataNPC.Inventory.TypeInventoryObject.ToString(); * * // --- TO PORTAL * if (portal != null) * { * if (isExitTargetResource) * { * //***** Back to HOME **** (trget is Portal) * //p_dataNPC.InventoryObject is ModelNPC; * Storage.PortalsManager.AddResourceFromAlien(portal, p_dataNPC); * } * // --- TAKE RESOURCE * bool checkStorageResource = Storage.PortalsManager.CheckStorageResourceForAlien(portal, p_dataNPC); * if (!checkStorageResource && isExitTargetResource) * { * //End job * p_dataNPC.Job = null; * p_dataNPC.TargetID = string.Empty; * p_dataNPC.TargetPosition = Vector3.zero; * } * //Continue job * if (p_dataNPC.Job != null && p_dataNPC.Job.Job != TypesJobs.Bathering) * return true; * } * // --- TO LOOT && BUILD * else * { * //Test job on target //@JOB@ * if (targetInfo.Data.TypePrefab == jobResourceTarget) * { * //if (!job.IsJobCompleted && !job.IsJobRun) * //if (p_dataNPC.CurrentAction == GameActionPersonController.NameActionsPerson.Target.ToString()) * //p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.Work.ToString()) * if (p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.CompletedLoot.ToString() && * p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.Work.ToString()) * { * //job.IsJobRun = true; * //p_dataNPC.CurrentAction = GameActionPersonController.NameActionsPerson.Target.ToString(); * //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Work, null); * GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Work, controller, true); * } * //if(job.IsJobCompleted) * if (p_dataNPC.CurrentAction == GameActionPersonController.NameActionsPerson.CompletedLoot.ToString()) * { * if (job.Job == TypesJobs.Build) * { * if (p_dataNPC.Inventory == null || p_dataNPC.Inventory.IsEmpty || p_dataNPC.Inventory.TypeInventoryObject.ToString() != job.ResourceResult.ToString()) * { * Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB BUILD: Inventory is Empty >> " + job.Job.ToString() + " " + job.TargetResource + " R:" + job.ResourceResult); * //p_dataNPC.Inventory = DataObjectInventory.EmptyInventory(); * return false; * } * } * //p_dataNPC.CurrentAction = GameActionPersonController.NameActionsPerson.Target.ToString(); * GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Move, controller, true); * // **** FIND RESOURCE **** * //---Replace object * //1. Remove resource * Vector3 posTarget = targetInfo.Data.Position; * * bool isTargetTypeTrue = false; * PoolGameObjects.TypePoolPrefabs typePoolResource = CheckFieldJobValid(ref isTargetTypeTrue, job, targetInfo.Data); * if (job.Job == TypesJobs.Build) * { * if (typePoolResource == PoolGameObjects.TypePoolPrefabs.PoolFloor) * GenericWorldManager.ClearLayerObject(targetInfo.Data); * //---- TEST * //else * // Debug.Log(Storage.EventsUI.ListLogAdd = "TypesJobs.Build .. Not Remove resource: " + job.ResourceResult.ToString() + " >> " + targetInfo.Data.NameObject); * } * else * GenericWorldManager.ClearLayerObject(targetInfo.Data); * //2. Create new resource * if (job.ResourceResult != SaveLoadData.TypePrefabs.PrefabField) * { * bool isTestMe = false; * PaletteMapController.SelCheckOptDel deleteOpt = PaletteMapController.SelCheckOptDel.None; * PaletteMapController.SelCheckOptDel checkOpt = PaletteMapController.SelCheckOptDel.DelTerra; * if (typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolFloor && * typePoolResource != PoolGameObjects.TypePoolPrefabs.PoolPerson) * { * checkOpt = PaletteMapController.SelCheckOptDel.DelPrefab; * isTestMe = true; * } * * //Storage.GenWorld.GenericPrefabOnWorld(job.ResourceResult, posTarget); * ModelNPC.ObjectData spawnObject = Storage.GenWorld.GetCreatePrefab(job.ResourceResult, targetInfo.Field); * bool isSpawned = Storage.Data.AddDataObjectInGrid(spawnObject, * targetInfo.Field, "CheckJobAlien", * p_modeDelete: deleteOpt, * p_modeCheck: checkOpt, * p_dataNPC: p_dataNPC); * spawnObject.PortalId = p_dataNPC.PortalId; * if (!isSpawned) * Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB [" + job.Job.ToString() + "]: Not Spawn " + spawnObject.NameObject); * else if(job.Job == TypesJobs.Build) * ManagerPortals.AddConstruction(spawnObject, p_dataNPC); * } * bool isZonaReal = Helper.IsValidPiontInZona(targetInfo.Data.Position.x, targetInfo.Data.Position.y); * //if (!targetInfo.Data.IsReality && isZonaReal) * if (isZonaReal) * { * Storage.GenGrid.LoadObjectToReal(targetInfo.Field); * } * * //3. Add resource in Inventory (where not Ground) * p_dataNPC.Inventory = targetInfo.Data.LootObjectToInventory(p_dataNPC); * * //4. Set target to target location * if (job.JobTo == TypesJobTo.ToPortal) * { * //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Idle, null); * //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Target, null); * } * } * //continue work... * return true; * } * } * } * } * } * } * return false; * } */ public static void GetAlienNextTargetObject(ref ModelNPC.ObjectData result, ref AlienJob job, ModelNPC.GameDataAlien dataAlien) { int versionSearching = 2;// 1; //@JOB@ if (Storage.Person.PersonPriority == null) { Storage.EventsUI.ListLogAdd = "### GetAlienNextTargetObject >> PersonPriority is null"; Storage.Person.LoadPriorityPerson(); result = null; return; } if (dataAlien == null) { Storage.EventsUI.ListLogAdd = "### GetAlienNextTargetObject >> dataAlien is null"; result = null; return; } //m_prioritysGet = PersonPriority[dataAlien.TypePrefab]; //int distantionFind = UnityEngine.Random.Range(2, 15); //v.1 if (versionSearching == 1) { //result = FindFromLocation(dataAlien.Position, distantionFind, prioritys, dataAlien.Id, dataAlien.TypePrefab); //result = Helper.FindFromLocation(dataAlien, distantionFind); temp_distantionFind = UnityEngine.Random.Range(2, 15); Helper.FindFromLocation_Cache(ref result, dataAlien, temp_distantionFind); } else //v.3 { if (job != null) { //fix job bool isCompletedMission = job != null && dataAlien.Inventory != null && dataAlien.Inventory.NameInventopyObject == job.TargetResource.ToString(); switch (job.JobTo) { case TypesJobTo.ToPortal: if (isCompletedMission) { if (dataAlien.PortalId == null) { Storage.PortalsManager.SetHome(dataAlien); } var info = ReaderScene.GetInfoID(dataAlien.PortalId); if (info != null) { result = info.Data; } } break; default: job = null; break; } } if (result == null) { temp_distantionFind = UnityEngine.Random.Range(2, 150); if (dataAlien.Inventory != null && !dataAlien.Inventory.IsEmpty && dataAlien.Inventory.TypeInventoryObject.IsPrefab())//FIX%CLUSTER { Storage.PortalsManager.FindJobBuildLocation(ref result, ref job, dataAlien, temp_distantionFind); } if (result == null) { CeckJobPass(ref result, dataAlien); if (result == null) { Storage.Person.FindJobResouceLocation(ref result, ref job, dataAlien, temp_distantionFind); } } if (result == null) { temp_distantionFind = UnityEngine.Random.Range(2, 25);//15 Helper.FindFromLocation_Cache(ref result, dataAlien, temp_distantionFind); } } } //v.2 //if (versionSearching == 2) //{ // string fieldName = Helper.GetNameFieldPosit(dataAlien.Position.x, dataAlien.Position.y); // Vector2 posField = Helper.GetPositByField(fieldName); // Vector2Int posFieldInt = new Vector2Int((int)posField.x, (int)posField.y); // ReaderScene.DataInfoFinder finder = ReaderScene.GetDataInfoLocationFromID((int)posFieldInt.x, (int)posFieldInt.y, distantionFind, dataAlien.TypePrefab, dataAlien.Id); }
public static bool CheckJobAlien(ModelNPC.GameDataAlien p_dataNPC, GameActionPersonController controller = null, bool isCheckDistance = true) { AlienJob job = p_dataNPC.Job; if (job == null) { return(false); } ReaderScene.DataObjectInfoID targetInfo = ReaderScene.GetInfoID(p_dataNPC.TargetID); if (targetInfo == null) { return(false); } if (!targetInfo.TestIsValud()) { p_dataNPC.TargetID = null; return(false); } if (isCheckDistance) { if (!Helper.DistanceIsFinish(targetInfo.Data.Position, p_dataNPC.Position)) { return(true); } } string fieldTarget = string.Empty; string fieldAlien = string.Empty; bool isExitTargetResource = false; Helper.GetNameFieldByPosit(ref fieldTarget, targetInfo.Data.Position); ModelNPC.PortalData portal = targetInfo.Data as ModelNPC.PortalData; SaveLoadData.TypePrefabs jobResourceTarget = job.TargetResource; Helper.GetNameFieldByPosit(ref fieldAlien, p_dataNPC.Position); if (p_dataNPC.Inventory == null) { p_dataNPC.Inventory = DataObjectInventory.EmptyInventory(); //Debug.Log(Storage.EventsUI.ListLogAdd = "## JOB: dataNPC.Inventory is null"); } else { isExitTargetResource = job.TargetResource.ToString() == p_dataNPC.Inventory.TypeInventoryObject.ToString(); } // --- TO PORTAL if (portal != null) { if (isExitTargetResource) { //***** Back to HOME **** (trget is Portal) //p_dataNPC.InventoryObject is ModelNPC; Storage.PortalsManager.AddResourceFromAlien(portal, p_dataNPC); } // --- TAKE RESOURCE bool checkStorageResource = Storage.PortalsManager.CheckStorageResourceForAlien(portal, p_dataNPC); if (!checkStorageResource && isExitTargetResource) { //End job p_dataNPC.Job = null; p_dataNPC.TargetID = string.Empty; p_dataNPC.TargetPosition = Vector3.zero; } //Continue job if (p_dataNPC.Job != null && p_dataNPC.Job.Job != TypesJobs.Bathering) { return(true); } } // --- TO LOOT && BUILD else { //Test job on target //@JOB@ if (targetInfo.Data.TypePrefab != jobResourceTarget) { return(false); } if (p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.CompletedLoot.ToString() && p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.Work.ToString()) { GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Work, controller, true); } if (p_dataNPC.CurrentAction == GameActionPersonController.NameActionsPerson.CompletedLoot.ToString()) { if (job.Job == TypesJobs.Build) { if (p_dataNPC.Inventory == null || p_dataNPC.Inventory.IsEmpty || p_dataNPC.Inventory.TypeInventoryObject.ToString() != job.ResourceResult.ToString()) { Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB BUILD: Inventory is Empty >> " + job.Job.ToString() + " " + job.TargetResource + " R:" + job.ResourceResult); //p_dataNPC.Inventory = DataObjectInventory.EmptyInventory(); return(false); } } GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Move, controller, true); // **** FIND RESOURCE **** //---Replace object //1. Remove resource //Vector3 posTarget = targetInfo.Data.Position; bool isTargetTypeTrue = false; PoolGameObjects.TypePoolPrefabs typePoolResource = CheckFieldJobValid(ref isTargetTypeTrue, job, targetInfo.Data); if (job.Job == TypesJobs.Build) { if (typePoolResource == PoolGameObjects.TypePoolPrefabs.PoolFloor) { GenericWorldManager.ClearLayerObject(targetInfo.Data); } //---- TEST //else // Debug.Log(Storage.EventsUI.ListLogAdd = "TypesJobs.Build .. Not Remove resource: " + job.ResourceResult.ToString() + " >> " + targetInfo.Data.NameObject); } else { GenericWorldManager.ClearLayerObject(targetInfo.Data); } //2. Create new resource if (job.ResourceResult != SaveLoadData.TypePrefabs.PrefabField) { CreateNewResource(typePoolResource, job, targetInfo, p_dataNPC); } bool isZonaReal = Helper.IsValidPiontInZona(targetInfo.Data.Position.x, targetInfo.Data.Position.y); if (isZonaReal) { Storage.GenGrid.LoadObjectToReal(targetInfo.Field); } //3. Add resource in Inventory (where not Ground) p_dataNPC.Inventory = targetInfo.Data.LootObjectToInventory(p_dataNPC); //4. Set target to target location //if (job.JobTo == TypesJobTo.ToPortal) //{ //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Idle, null); //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Target, null); //} } //continue work... return(true); } return(false); }
public static void ActionTarget(ModelNPC.PersonData dataNPC, GameActionPersonController controller) { if (ActionTargetIsLock) { Debug.Log(Storage.EventsUI.ListLogAdd = ".....ActionTarget is LOCK"); return; } ActionTargetIsLock = true; //Storage.EventsUI.ListLogAdd = "ActionTarget .... ReaderSceneIsValid=" + Storage.Instance.ReaderSceneIsValid; temp_job = null; if (!Storage.Instance.ReaderSceneIsValid)// && TimeEndCurrentAction < Time.time) { ActionTargetLocal(dataNPC, controller); ActionTargetIsLock = false; return; } Storage.EventsUI.ListLogAdd = "ActionTarget ....!!!"; //string tempID = dataNPC.TargetID; string indErr = "0"; try { indErr = "1"; GetAlienData(dataNPC).OnTargetCompleted(); indErr = "2"; //m_TargetObject = Storage.Person.GetAlienNextTargetObject(GetAlienData(dataNPC)); m_TargetObject = null; //@JOB@ temp_job = dataNPC.Job; //Storage.Person.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC)); AlienJobsManager.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC)); } catch (Exception ex) { Storage.EventsUI.ListLogAdd = "##### ActionTarget " + ex.Message; ActionTargetIsLock = false; return; } //test if (m_TargetObject == null) { Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> empty"; } else { Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> " + m_TargetObject.NameObject; } if (m_TargetObject == null) { GetAlienData(dataNPC).SetTargetPosition(); } else { var targetPosition = m_TargetObject.Position; dataNPC.TargetID = m_TargetObject.Id; //FIX base>>ToPortal (dataNPC as ModelNPC.GameDataAlien).BaseLockedTargetID = dataNPC.TargetID; dataNPC.SetTargetPosition(targetPosition); dataNPC.Job = temp_job;//@JOB@ } ExecuteActionNPC(dataNPC, NameActionsPerson.Move, controller); if (controller != null) { controller.DrawRayTarget(); //TEST } ActionTargetIsLock = false; }