public bool IsValidBuildPos(Vector3 a_pos, int a_buildingType) { foreach (DictionaryEntry building in m_buildings) { RemoteBuilding remoteBuilding = (RemoteBuilding)building.Value; if (null != remoteBuilding && !remoteBuilding.m_isStatic) { float sqrMagnitude = (remoteBuilding.transform.position - a_pos).sqrMagnitude; if ((!remoteBuilding.m_isMine && Buildings.IsDoor(remoteBuilding.m_type) && sqrMagnitude < 25f) || sqrMagnitude < 0.202499986f) { return(false); } } } if (!Buildings.IsHarmless(a_buildingType)) { SpecialArea[] specialAreas = m_specialAreas; foreach (SpecialArea specialArea in specialAreas) { if (null != specialArea && (specialArea.m_type == eAreaType.noBuilding || specialArea.m_type == eAreaType.noPvp) && (specialArea.transform.position - a_pos).sqrMagnitude < specialArea.m_radius * specialArea.m_radius) { return(false); } } } return(Buildings.IsDoor(a_buildingType) || !Raycaster.BuildingSphereCast(a_pos)); }
public bool CreateBuilding(int a_type, Vector3 a_pos, int a_ownerPid = 0, float a_yRot = 0f, int a_health = 100, bool a_isNew = true) { bool flag = false == a_isNew; if (!flag) { ServerBuilding serverBuilding = this.GetNearestPlayerBuilding(a_pos, -1); if (null == serverBuilding || (serverBuilding.transform.position - a_pos).sqrMagnitude > 0.20249999f) { serverBuilding = ((Buildings.IsCollider(a_type) && a_ownerPid != 0) ? this.GetNearestPlayerBuilding(a_pos, a_ownerPid) : null); if ((null == serverBuilding || !Buildings.IsDoor(serverBuilding.m_type) || (serverBuilding.transform.position - a_pos).sqrMagnitude > 25f) && (Buildings.IsDoor(a_type) || !Raycaster.BuildingSphereCast(a_pos)) && 0.8f < Util.GetTerrainHeight(a_pos)) { flag = true; } } } if (flag) { GameObject gameObject = (GameObject)Resources.Load("buildings/building_" + a_type); if (null != gameObject) { GameObject gameObject2 = (GameObject)UnityEngine.Object.Instantiate(gameObject, a_pos, Quaternion.Euler(0f, a_yRot, 0f)); ServerBuilding component = gameObject2.GetComponent <ServerBuilding>(); NavMeshObstacle componentInChildren = gameObject2.GetComponentInChildren <NavMeshObstacle>(); if (null != componentInChildren) { componentInChildren.carving = this.m_carveNavMesh; } if (null != component) { component.Init(this.m_server, a_type, a_ownerPid, a_health, a_isNew); this.m_buildings.Add(component); } else { Debug.Log("BuildingManager.cs: ERROR: Building without ServerBuilding.cs script spawned!"); } } } return(flag); }