// 데미지, 공격자(어그로 시스템, 공격자 보상) // 여러명이 동시에 친다면? public virtual void OnDamaged(GameObject attacker, int damage) { Stat.Hp = Math.Max(Stat.Hp - damage, 0); // -hp방지 // 모두에게 알린다 -> BroadCasting Packet S_ChangeHp changePacket = new S_ChangeHp(); changePacket.ObjectId = Id; changePacket.Hp = Stat.Hp; Room.Broadcast(changePacket); // 방에 있는 모두에게 나 얻어맞았다고 전송 if (Stat.Hp <= 0) { Stat.Hp = 0; OnDead(attacker); } }
public static void S_ChangeHpHandler(PacketSession session, IMessage packet) { S_ChangeHp changePacket = packet as S_ChangeHp; GameObject go = Managers.Object.FindById(changePacket.ObjectId); if (go == null) { return; } CreatureController cc = go.GetComponent <CreatureController>(); if (cc != null) { cc.Hp = changePacket.Hp; } }
// 데미지 처리 (피해자시점) public virtual void OnDamaged(GameObject attecker, int damage) { // 스텟에서 HP불러와서 damage만큼 깎아주기 damage = Math.Max(damage - TotalDefence, 0); Stat.Hp = Math.Max(Stat.Hp - damage, 0); // 깎인체력을 룸안에 브로드캐스팅 S_ChangeHp changePacket = new S_ChangeHp(); changePacket.ObjectId = Id; changePacket.Hp = Stat.Hp; Room.Broadcast(CellPos, changePacket); if (Stat.Hp <= 0) { OnDead(attecker); } }
public virtual void OnDamaged(GameObject attacker, int damage) { if (Room == null) { return; } Stat.Hp = Math.Max(Stat.Hp - damage, 0); S_ChangeHp changePacket = new S_ChangeHp(); changePacket.ObjectId = Id; changePacket.Hp = Stat.Hp; Room.Broadcast(changePacket); if (Stat.Hp <= 0) { OnDead(attacker); } }
public static void S_ChangeHpHandler(PacketSession session, IMessage packet) { S_ChangeHp changePacket = packet as S_ChangeHp; // 여기서 찾은 PlayerId가 꼭 나라는 보장은 없다. 스킬은 아무나 쓰니깐 GameObject go = Managers.Object.FindById(changePacket.ObjectId); if (go == null) { return; } CreatureController cc = go.GetComponent <CreatureController>(); if (cc != null) { // 체력을 깎자 cc.Hp = changePacket.Hp; // ui 갱신도 같이 됨 // UI 갱신 Debug.Log($"ChangeHP : {changePacket.Hp}"); } }
public static void S_ChangeHpHandler(PacketSession session, IMessage packet) // 누군가의 HP 가 줄어듦 { S_ChangeHp changePacket = packet as S_ChangeHp; }