public override bool OnPutDown() { if (GameConfig.IsMultiClient) { if (!Pathea.PeGameMgr.IsMultiCoop && VArtifactUtil.IsInTownBallArea(transform.position)) { new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); return(true); } if (null != PlayerNetwork.mainPlayer) { PlayerNetwork.mainPlayer.RequestDragTower(itemDragging.itemObj.instanceId, transform.position, transform.rotation); } } else { DragTowerAgent towerAget = new DragTowerAgent(itemDragging, transform.position, transform.rotation); towerAget.Create(); SceneMan.AddSceneObj(towerAget); PeMap.TowerMark towerMask = new PeMap.TowerMark(); towerMask.position = transform.position; towerMask.ID = itemObjectId; towerMask.text = itemDragging.itemObj.protoData.GetName(); towerMask.campId = Mathf.RoundToInt(Pathea.MainPlayer.Instance.entity.GetAttribute(Pathea.AttribType.CampID)); PeMap.LabelMgr.Instance.Add(towerMask); PeMap.TowerMark.Mgr.Instance.Add(towerMask); RemoveFromBag(); } return(base.OnPutDown()); }
public override bool OnPutDown() { if (!PeGameMgr.IsMulti) { DoodadEntityCreator.CreateRandTerDoodad(doodadID, transform.position, Vector3.one, transform.rotation); RemoveFromBag(); } else { IntVector3 safePos = new IntVector3(transform.position + 0.1f * Vector3.down); if (VArtifactUtil.IsInTownBallArea(safePos)) { new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); return(true); } if (null != PlayerNetwork.mainPlayer) { byte mTerrianType = VFVoxelTerrain.self.Voxels.SafeRead(safePos.x, safePos.y, safePos.z).Type; PlayerNetwork.mainPlayer.RequestDragOut(itemDragging.itemObj.instanceId, transform.position, transform.localScale, transform.rotation, mTerrianType); } } return(base.OnPutDown()); }
public override bool OnPutDown() { int prePointId = Railway.Manager.InvalId; if (mPrePoint != null) { prePointId = mPrePoint.id; } if (GameConfig.IsMultiClient) { if (VArtifactUtil.IsInTownBallArea(transform.position)) { new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); return(true); } if (null != PlayerNetwork.mainPlayer) { PlayerNetwork.mainPlayer.RPCServer(EPacketType.PT_InGame_Railway_AddPoint, transform.position, mType, prePointId, itemDragging.itemObj.instanceId); } } else { RemoveTrees(); RailwayOperate.Instance.RequestAddPoint(transform.position, mType, prePointId, itemDragging.itemObj.instanceId); } return(base.OnPutDown()); }
public override bool OnPutDown() { if (Pathea.PeGameMgr.IsMulti) { if (VArtifactUtil.IsInTownBallArea(transform.position)) { new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); return(true); } } return(base.OnPutDown()); }
public override bool OnPutDown() { if (GameConfig.IsMultiClient) { if (VArtifactUtil.IsInTownBallArea(transform.position)) { new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); return(true); } if (null != PlayerNetwork.mainPlayer) { PlayerNetwork.mainPlayer.RequestDragFlag(itemDragging.itemObj.instanceId, transform.position, transform.rotation); } return(true); } return(base.OnPutDown()); }
/// <summary> /// voxel modify check event before really undo and redo. Call by BSVoxelModify /// </summary> bool OnCheckVoxelModify(int opType, IntVector3[] indexes, BSVoxel[] voxels, BSVoxel[] oldvoxels, EBSBrushMode mode, IBSDataSource ds) { if (IsGod) { return(true); } if (Pathea.PeCreature.Instance.mainPlayer == null) { return(false); } bool result = true; if (mode == EBSBrushMode.Add) { Dictionary <int, int> items = new Dictionary <int, int>(); // Calculate the needed items; int adder = 1; foreach (BSVoxel voxel in voxels) { int id = 0; if (ds == BuildingMan.Blocks) { if (voxel.IsExtendable()) { if (!voxel.IsExtendableRoot()) { id = GetBlockItemProtoID((byte)(voxel.materialType >> 2)); adder = 1; } else { adder = 0; } } else { id = GetBlockItemProtoID(voxel.materialType); } } else if (ds == BuildingMan.Voxels) { id = GetVoxelItemProtoID(voxel.materialType); } if (id <= 0) { continue; } if (id != 0) { if (items.ContainsKey(id)) { items[id] += adder; } else { items.Add(id, adder); } } } _costsItems = items; float divisor = 1.0f; if (ds == BuildingMan.Blocks) { divisor = (float)(1 << BSBlock45Data.s_ScaleInverted); } // Has player enough items ? Pathea.PackageCmpt pkg = Pathea.PeCreature.Instance.mainPlayer.GetCmpt <Pathea.PackageCmpt>(); _playerItems.Clear(); foreach (KeyValuePair <int, int> kvp in items) { _playerItems.Add(kvp.Key, pkg.GetItemCount(kvp.Key)); if (pkg.GetItemCount(kvp.Key) < Mathf.CeilToInt(kvp.Value / divisor)) { result = false; } } // now delete if (result) { if (GameConfig.IsMultiMode) { if (null == PlayerNetwork.mainPlayer) { return(false); } if (!Pathea.PeGameMgr.IsMultiCoop && VArtifactUtil.IsInTownBallArea(PlayerNetwork.mainPlayer._pos)) { new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); return(false); } //if (!PlayerNetwork.OnLimitBoundsCheck(brushBound)) //{ // new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); // return false; //} PlayerNetwork.mainPlayer.RequestRedo(opType, indexes, oldvoxels, voxels, mode, ds.DataType, ds.Scale); DigTerrainManager.BlockClearGrass(ds, indexes); return(true); } else { string debug_log = ""; foreach (KeyValuePair <int, int> kvp in items) { if (pkg.Destory(kvp.Key, Mathf.CeilToInt(kvp.Value / divisor))) { debug_log += "\r\n Rmove Item from player package ID[" + kvp.Key.ToString() + "]" + " count - " + kvp.Value.ToString(); } } if (ds == BuildingMan.Blocks) { for (int i = 0; i < indexes.Length; i++) { Vector3 pos = new Vector3(indexes[i].x * ds.Scale, indexes[i].y * ds.Scale, indexes[i].z * ds.Scale) - ds.Offset; PeGrassSystem.DeleteAtPos(pos); PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y - 1, pos.z)); //PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y + 1, pos.z)); } } else if (ds == BuildingMan.Voxels) { for (int i = 0; i < indexes.Length; i++) { Vector3 pos = new Vector3(indexes[i].x, indexes[i].y, indexes[i].z); PeGrassSystem.DeleteAtPos(pos); PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y - 1, pos.z)); //PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y + 1, pos.z)); } } //Debug.LogWarning(debug_log); } } else { new PeTipMsg(PELocalization.GetString(821000001), PeTipMsg.EMsgLevel.Warning); } } else if (mode == EBSBrushMode.Subtract) { Dictionary <int, int> items = new Dictionary <int, int>(); // Calculate the needed items; int adder = 1; foreach (BSVoxel voxel in oldvoxels) { int id = 0; if (ds == BuildingMan.Blocks) { if (voxel.IsExtendable()) { if (!voxel.IsExtendableRoot()) { id = GetBlockItemProtoID((byte)(voxel.materialType >> 2)); adder = 1; } else { adder = 0; } } else { if (!BuildingMan.Blocks.VoxelIsZero(voxel, 0)) { id = GetBlockItemProtoID((byte)(voxel.materialType)); } } } else if (ds == BuildingMan.Voxels) { if (!BuildingMan.Voxels.VoxelIsZero(voxel, 1)) { id = GetVoxelItemProtoID(voxel.materialType); } } if (id <= 0) { continue; } if (items.ContainsKey(id)) { items[id] += adder; } else { items.Add(id, adder); } } float divisor = 1.0f; if (ds == BuildingMan.Blocks) { divisor = (float)(1 << BSBlock45Data.s_ScaleInverted); } // Has player enough package ? Pathea.PlayerPackageCmpt pkg = Pathea.PeCreature.Instance.mainPlayer.GetCmpt <Pathea.PlayerPackageCmpt>(); MaterialItem[] array = new MaterialItem[items.Count]; int i = 0; foreach (KeyValuePair <int, int> kvp in items) { array[i] = new MaterialItem() { protoId = kvp.Key, count = Mathf.FloorToInt(kvp.Value / divisor) }; i++; } result = pkg.package.CanAdd(array); // Really add if (result) { if (GameConfig.IsMultiMode) { if (null == PlayerNetwork.mainPlayer) { return(false); } //if (!PlayerNetwork.OnLimitBoundsCheck(brushBound)) //{ // new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning); // return false; //} PlayerNetwork.mainPlayer.RequestRedo(opType, indexes, oldvoxels, voxels, mode, ds.DataType, ds.Scale); return(true); } else { string debug_log = ""; foreach (MaterialItem mi in array) { if (mi.count != 0) { pkg.Add(mi.protoId, mi.count); } debug_log += "Add Item from player package ID[" + mi.protoId.ToString() + "]" + " count - " + mi.count.ToString() + "\r\n"; } Debug.LogWarning(debug_log); } } } if (result) { if (onVoxelMotify != null) { onVoxelMotify(indexes, voxels, oldvoxels, mode, ds); } } return(result); }