public override int OnExplode(int player_id, int parentNetworkId, int damage) { Log.Information($"OnExplode SButton {NetworkId}, {mapObjectId}, {damage}"); if (mapData.jMapSwitchData[0].coolTime > 0) { if (World.Instance(WorldId).GetNetGameObject(GameObjectClassId.PropCooldown, GetMapId()) != null) { Log.Information($"button cooldown... {GetMapId()}"); return(0); } } bool isDie = false; if (mapData.objectHP != 0) { PropHealth propHealth = (PropHealth)World.Instance(WorldId).GetNetGameObject(GameObjectClassId.PropHealth, mapObjectId); if (propHealth != null) { if (propHealth.mHealth == 0) { // 이미 hp가 0이면 이후 처리 하지 않는다. } else if (propHealth.OnExplode(player_id, parentNetworkId, damage) == 0) { isDie = true; // 스위치 오브젝트를 제거하면 이후 상태를 알수 없어서 스페셜 오브젝트 처리가 불가하다. //SetDoesWantToDie(true); } } } else { isDie = true; } if (isDie) { //SetDoesWantToDie(true); // 버튼(스위치) 상태 변경 mOnOff = !mOnOff; NetworkManagerServer.sInstance.SetStateDirty(GetNetworkId(), WorldId, (uint)ReplicationState.OnOff); if (mapData.objectHP != 0) { // hp가 있는 경우 쿨타임 적용하지 않는다. } else if (mapData.jMapSwitchData[0].coolTime > 0) { //set cooldown PropCooldown cooldown = (PropCooldown)GameObjectRegistry.sInstance.CreateGameObject((uint)GameObjectClassId.PropCooldown, true, WorldId); cooldown.InitFrom(GetMapId()); } } return(0); }
public override int OnExplode(int player_id, int parentNetworkId, int damage) { bool isDie = false; PropHealth propHealth = (PropHealth)World.Instance(WorldId).GetNetGameObject(GameObjectClassId.PropHealth, mapObjectId); if (propHealth != null) { if (propHealth.OnExplode(player_id, parentNetworkId, damage) == 0) { isDie = true; } } else { isDie = true; } if (isDie) { // 프랍이 제거될때 폭발하는 유형인지 판단 JMapObjectData mapData; bool explodeProp = false; if (core.World.mapGameObject.TryGetValue(mapObjectId, out mapData) == true) { if (mapData.jDestroyBombData.Length > 0) { if (mapData.jDestroyBombData[0].skillID != 0) { explodeProp = true; } } } if (explodeProp == false) { //kill yourself! SetDoesWantToDie(true); } else { IsDie = true; NetworkManagerServer.sInstance.SetStateDirty(GetNetworkId(), WorldId, (uint)ReplicationState.Die); } // 맵 오브젝트를 파괴한 유저에게 플레이포인트를 지급 var player = (SActor)World.Instance(WorldId).GameMode.GetActor(player_id); if (player != null) { World.Instance(WorldId).GameMode.OnTrigger(player.GetPlayerId(), PlayPointID.MapObjectDestroy); } } return(0); }