public override void RemoveNpc(PeEntity npc) { CSPersonnel csp = CSMain.GetColonyNpc(npc.Id); if (csp == null) { Debug.LogWarning("The npc you want to kick out is not a recruit."); return; } // Remove data csp.RemoveData(); if (csp.Dwellings != null) { csp.Dwellings.RemoveNpc(csp); } if (csp.WorkRoom != null) { csp.WorkRoom.RemoveWorker(csp); } //CSBehaveMgr.RemoveQueue(npc.Id); m_RandomNpcs.Remove(csp); m_MainNpcs.Remove(csp); ExecuteEventPersonnel(CSConst.cetRemovePersonnel, csp); //_decreaseStateNum(po.m_Personnel, po.m_Personnel.State); _decreaseOccupationNum(csp, csp.Occupation); _decreaseWorkModeNum(csp, csp.m_WorkMode); csp.m_Creator = null; if (npc.IsRandomNpc()) { PeEntityCreator.ExileRandomNpc(npc); } else { PeEntityCreator.ExileMainNpc(npc); } csp.UpdateNpcCmpt(); PeNpcGroup.Instance.OnRemoveCsNpc(npc); }
public bool AddNpcInMultiMode(PeEntity npc, int dwellingId, bool bSetPos = false) { if (npc.IsRecruited()) { Debug.Log("This npc is already a CSPersonnel object!"); return(false); } CSPersonnel personnel = new CSPersonnel(); personnel.ID = npc.Id; personnel.NPC = npc; personnel.m_Creator = this; personnel.CreateData(); // Have enough dwellings? if (personnel.Dwellings == null) { if (m_Assembly == null) { Debug.Log("There is no assembly In the word!"); personnel.RemoveData(); return(false); } //CSCommon[] dwellings = m_Assembly.m_BelongObjectsMap[CSConst.ObjectType.Dwelling].ToArray(); //if (dwellings.Length == 0) //{ // Debug.Log("There is not enough Dwellings for this NPC"); // personnel.RemoveData(); // return false; //} //foreach (CSCommon csc in dwellings) //{ // CSDwellings dw = csc as CSDwellings; // if (dw.ID == dwellingId) // { // dw.AddNpcs(personnel); // break; // } //} if (m_CommonEntities.ContainsKey(dwellingId)) { CSDwellings dw = m_CommonEntities[dwellingId] as CSDwellings; if (dw != null) { dw.AddNpcs(personnel); } } if (personnel.Dwellings == null) { Debug.Log("There is not enough Dwellings for this NPC"); personnel.RemoveData(); return(false); } } //RandomNpc if (npc.IsRandomNpc()) { m_RandomNpcs.Add(personnel); } // Main Npc else { m_MainNpcs.Add(personnel); } ExecuteEventPersonnel(CSConst.cetAddPersonnel, personnel); _increaseOccupationNum(personnel, personnel.Occupation); _increaseWorkModeNum(personnel, personnel.m_WorkMode); personnel.UpdateNpcCmpt(); return(true); }
public override bool AddNpc(PeEntity npc, bool bSetPos = false) { if (npc.IsRecruited()) { Debug.Log("This npc is already a CSPersonnel object!"); return(false); } CSPersonnel personnel = new CSPersonnel(); personnel.ID = npc.Id; personnel.NPC = npc; personnel.m_Creator = this; personnel.CreateData(); // Have enough dwellings? if (personnel.Dwellings == null) { if (m_Assembly == null) { Debug.Log("There is no assembly In the word!"); personnel.RemoveData(); return(false); } CSCommon[] dwellings = m_Assembly.m_BelongObjectsMap[CSConst.ObjectType.Dwelling].ToArray(); // int dwellingsID = 0; if (dwellings.Length == 0) { Debug.Log("There is not enough Dwellings for this NPC"); personnel.RemoveData(); return(false); } foreach (CSCommon csc in dwellings) { CSDwellings dw = csc as CSDwellings; if (dw.AddNpcs(personnel)) { // dwellingsID = dw.ID; break; } } if (personnel.Dwellings == null) { Debug.Log("There is not enough Dwellings for this NPC"); personnel.RemoveData(); return(false); } } //RandomNpc if (npc.IsRandomNpc()) { m_RandomNpcs.Add(personnel); PeEntityCreator.RecruitRandomNpc(npc); } // Main Npc else { m_MainNpcs.Add(personnel); PeEntityCreator.RecruitMainNpc(npc); } //colony add npc talk if (npc.NpcCmpt != null) { npc.NpcCmpt.SendTalkMsg((int)ENpcTalkType.Conscribe_succeed, 0, ENpcSpeakType.Both); } //set npc fixpiont near colony //if (m_Assembly.Position != Vector3.zero && npc.NpcCmpt != null) // npc.NpcCmpt.SetFixPos(m_Assembly.Position); ExecuteEventPersonnel(CSConst.cetAddPersonnel, personnel); _increaseOccupationNum(personnel, personnel.Occupation); _increaseWorkModeNum(personnel, personnel.m_WorkMode); personnel.UpdateNpcCmpt(); return(true); }