예제 #1
0
 public void MissImmune()
 {
     this.Damage        = 0;
     this.VictimState   = VictimState.Immune;
     this.ProcHitFlags |= ProcHitFlags.Immune;
     this.DoStrike();
 }
예제 #2
0
 public void Evade()
 {
     Damage        = 0;
     VictimState   = VictimState.Evade;
     ProcHitFlags |= ProcHitFlags.Evade;
     DoStrike();
 }
예제 #3
0
 public void Evade()
 {
     this.Damage        = 0;
     this.VictimState   = VictimState.Evade;
     this.ProcHitFlags |= ProcHitFlags.Evade;
     this.DoStrike();
 }
예제 #4
0
 public void MissImmune()
 {
     Damage        = 0;
     VictimState   = VictimState.Immune;
     ProcHitFlags |= ProcHitFlags.Immune;
     DoStrike();
 }
예제 #5
0
 public void StrikeNormal()
 {
     this.HitFlags      = HitFlags.PlayWoundAnimation;
     this.VictimState   = VictimState.Wound;
     this.ProcHitFlags |= ProcHitFlags.NormalHit;
     this.Blocked       = 0;
     this.IsCritical    = false;
     this.DoStrike();
 }
예제 #6
0
 public void StrikeNormal()
 {
     HitFlags      = HitFlags.PlayWoundAnimation;
     VictimState   = VictimState.Wound;
     ProcHitFlags |= ProcHitFlags.NormalHit;
     Blocked       = 0;
     IsCritical    = false;
     DoStrike();
 }
예제 #7
0
 public void StrikeCrushing()
 {
     Damage        = (Damage * 10 + 5) / 15;                     // == Damage * 1.5f
     HitFlags      = HitFlags.PlayWoundAnimation | HitFlags.Crushing;
     VictimState   = VictimState.Wound;
     ProcHitFlags |= ProcHitFlags.NormalHit;
     Blocked       = 0;
     IsCritical    = false;
     DoStrike();
 }
예제 #8
0
 public void StrikeGlancing()
 {
     Damage        = (int)(Damage * CalcGlancingBlowDamageFactor());
     VictimState   = VictimState.Wound;
     HitFlags      = HitFlags.PlayWoundAnimation | HitFlags.Glancing;
     ProcHitFlags |= ProcHitFlags.NormalHit;
     Blocked       = 0;
     IsCritical    = false;
     DoStrike();
 }
예제 #9
0
 public void OnCollisionEnter2D(Collision2D collision)
 {
     if (GameStateManager.GameState == StateEnum.Play)
     {
         if (collision.collider.tag == "Fire")
         {
             ThisVictimState = VictimState.Die;
         }
     }
 }
예제 #10
0
 public void Dodge()
 {
     Damage        = 0;
     VictimState   = VictimState.Dodge;
     HitFlags      = HitFlags.Miss;
     ProcHitFlags |= ProcHitFlags.Dodge;
     Blocked       = 0;
     IsCritical    = false;
     DoStrike();
 }
예제 #11
0
 public void Dodge()
 {
     this.Damage        = 0;
     this.VictimState   = VictimState.Dodge;
     this.HitFlags      = HitFlags.Miss;
     this.ProcHitFlags |= ProcHitFlags.Dodge;
     this.Blocked       = 0;
     this.IsCritical    = false;
     this.DoStrike();
 }
예제 #12
0
 public void Parry()
 {
     Damage        = 0;
     VictimState   = VictimState.Parry;
     HitFlags      = HitFlags.Miss;
     ProcHitFlags |= ProcHitFlags.Parry;
     Blocked       = 0;
     IsCritical    = false;
     DoStrike();
 }
예제 #13
0
 public void StrikeCritical()
 {
     this.IsCritical = this.Victim.StandState == StandState.Stand;
     this.SetCriticalDamage();
     this.HitFlags = HitFlags.PlayWoundAnimation | HitFlags.ResistType1 | HitFlags.ResistType2 |
                     HitFlags.CriticalStrike;
     this.VictimState   = VictimState.Wound;
     this.ProcHitFlags |= ProcHitFlags.CriticalHit;
     this.Blocked       = 0;
     this.DoStrike();
 }
예제 #14
0
 public void StrikeCritical()
 {
     IsCritical = Victim.StandState == StandState.Stand;
     SetCriticalDamage();
     HitFlags      = HitFlags.PlayWoundAnimation | HitFlags.ResistType1 | HitFlags.ResistType2 | HitFlags.CriticalStrike;
     VictimState   = VictimState.Wound;
     ProcHitFlags |= ProcHitFlags.CriticalHit;
     Blocked       = 0;
     // Automatic double damage against sitting target - but doesn't proc crit abilities
     DoStrike();
 }
예제 #15
0
 public void StrikeCritical()
 {
     IsCritical = Victim.StandState == StandState.Stand;
     SetCriticalDamage();
     HitFlags = HitFlags.PlayWoundAnimation | HitFlags.ResistType1 | HitFlags.ResistType2 |
                HitFlags.CriticalStrike;
     VictimState   = VictimState.Wound;
     ProcHitFlags |= ProcHitFlags.CriticalHit;
     Blocked       = 0;
     DoStrike();
 }
예제 #16
0
 public void Block()
 {
     HitFlags      = HitFlags.PlayWoundAnimation | HitFlags.Block;
     VictimState   = VictimState.Block;
     ProcHitFlags |= ProcHitFlags.Block;
     Blocked       = CalcBlockDamage();
     if (Damage == Blocked)
     {
         ProcHitFlags |= ProcHitFlags.FullBlock;
     }
     IsCritical = false;
     DoStrike();
 }
예제 #17
0
 public void Block()
 {
     this.HitFlags      = HitFlags.PlayWoundAnimation | HitFlags.Block;
     this.VictimState   = VictimState.Block;
     this.ProcHitFlags |= ProcHitFlags.Block;
     this.Blocked       = this.CalcBlockDamage();
     if (this.Damage == this.Blocked)
     {
         this.ProcHitFlags |= ProcHitFlags.FullBlock;
     }
     this.IsCritical = false;
     this.DoStrike();
 }
예제 #18
0
 void FixedUpdate()
 {
     if (GameStateManager.GameState == StateEnum.Play)
     {
         if (ThisVictimState != VictimState.Die)
         {
             if (victimRb2D.velocity.x > 0.1f)
             {
                 transform.localRotation = Quaternion.Euler(0, 180f, 0);
                 if (victimRb2D.velocity.x > runningSpeed)
                 {
                     ThisVictimState = VictimState.Run;
                 }
                 else
                 {
                     ThisVictimState = VictimState.Walk;
                 }
             }
             else if (victimRb2D.velocity.x < -0.1f)
             {
                 transform.localRotation = Quaternion.Euler(0, 0, 0);
                 if (victimRb2D.velocity.x < -runningSpeed)
                 {
                     ThisVictimState = VictimState.Run;
                 }
                 else
                 {
                     ThisVictimState = VictimState.Walk;
                 }
             }
             else if (Mathf.Approximately(victimRb2D.velocity.x, 0))
             {
                 ThisVictimState = VictimState.Idle;
             }
         }
     }
 }
예제 #19
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void StrikeCritical()
		{
			IsCritical = Victim.StandState == StandState.Stand;
			SetCriticalDamage();
			HitFlags = HitFlags.NormalSwingAnim | HitFlags.Resist_1 | HitFlags.Resist_2 | HitFlags.CriticalStrike;
			VictimState = VictimState.Wound;
			Blocked = 0;
			// Automatic double damage against sitting target - but doesn't proc crit abilities
			DoStrike();
		}
예제 #20
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void StrikeCrushing()
		{
			Damage = (Damage * 10 + 5) / 15;		// == Damage * 1.5f
			HitFlags = HitFlags.NormalSwingAnim | HitFlags.Crushing;
			VictimState = VictimState.Wound;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #21
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void Parry()
		{
			Damage = 0;
			VictimState = VictimState.Parry;
			HitFlags = HitFlags.Miss;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #22
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void Evade()
		{
			Damage = 0;
			VictimState = VictimState.Evade;
			DoStrike();
		}
예제 #23
0
파일: CombatMgr.cs 프로젝트: pallmall/WCell
		/// <param name="swingFlag">usually 1</param>
		/// <returns>The actual damage (all resistances subtracted)</returns>
		public static uint SendMeleeDamage(WorldObject attacker, WorldObject target, DamageType type, HitInfo hitInfo,
										uint totalAmount, uint absorbed, uint resisted, uint blocked, VictimState victimState)
		{
			uint amount = totalAmount - blocked - absorbed - resisted;
			using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_ATTACKERSTATEUPDATE, 70)) {
				packet.WriteUInt((uint)hitInfo);
				attacker.EntityId.WritePacked(packet);
				target.EntityId.WritePacked(packet);

				packet.WriteUInt(totalAmount);
				packet.WriteByte(1);

				packet.WriteByte((uint)type);
				packet.WriteFloat(amount);
				packet.WriteUInt(amount);
				packet.WriteUInt(absorbed);
				packet.WriteUInt(resisted);

				packet.WriteUInt((uint)victimState);
				packet.Write(absorbed == 0 ? 0 : -1);
				packet.WriteUInt(0);
				packet.WriteUInt(blocked);

				target.PushPacketToSurroundingArea(packet, true, false);
			}
			return amount;
		}
예제 #24
0
		public void StrikeCritical()
		{
			Damage = Attacker.CalcCritDamage(Damage, Victim, SpellEffect).RoundInt();
			HitFlags = HitFlags.NormalSwingAnim | HitFlags.Resist_1 | HitFlags.Resist_2 | HitFlags.CriticalStrike;
			VictimState = VictimState.Wound;
			Blocked = 0;
			// Automatic double damage against sitting target - but doesn't proc crit abilities
			IsCritical = Victim.StandState == StandState.Stand;
			DoStrike();
		}
예제 #25
0
		public void Evade()
		{
			Damage = 0;
			VictimState = VictimState.Evade;
			ProcHitFlags |= ProcHitFlags.Evade;
			DoStrike();
		}
예제 #26
0
		public void MissImmune()
		{
			Damage = 0;
			VictimState = VictimState.Immune;
			ProcHitFlags |= ProcHitFlags.Immune;
			DoStrike();
		}
예제 #27
0
		public void StrikeCrushing()
		{
			Damage = (Damage * 10 + 5) / 15;		// == Damage * 1.5f
			HitFlags = HitFlags.PlayWoundAnimation | HitFlags.Crushing;
			VictimState = VictimState.Wound;
			ProcHitFlags |= ProcHitFlags.NormalHit;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #28
0
		public void StrikeCritical()
		{
			IsCritical = Victim.StandState == StandState.Stand;
			SetCriticalDamage();
			HitFlags = HitFlags.PlayWoundAnimation | HitFlags.ResistType1 | HitFlags.ResistType2 | HitFlags.CriticalStrike;
			VictimState = VictimState.Wound;
			ProcHitFlags |= ProcHitFlags.CriticalHit;
			Blocked = 0;
			// Automatic double damage against sitting target - but doesn't proc crit abilities
			DoStrike();
		}
예제 #29
0
		public void StrikeGlancing()
		{
			Damage = (int)(Damage * CalcGlancingBlowDamageFactor());
			VictimState = VictimState.Wound;
			HitFlags = HitFlags.PlayWoundAnimation | HitFlags.Glancing;
			ProcHitFlags |= ProcHitFlags.NormalHit;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #30
0
		public void StrikeNormal()
		{
			HitFlags = HitFlags.PlayWoundAnimation;
			VictimState = VictimState.Wound;
			ProcHitFlags |= ProcHitFlags.NormalHit;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #31
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void StrikeGlancing()
		{
			Damage = (int)(Damage * CalcGlancingBlowDamageFactor());
			VictimState = VictimState.Wound;
			HitFlags = HitFlags.NormalSwingAnim | HitFlags.Glancing;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #32
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void StrikeNormal()
		{
			HitFlags = HitFlags.NormalSwingAnim;
			VictimState = VictimState.Wound;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #33
0
		public void Block()
		{
			HitFlags = HitFlags.PlayWoundAnimation | HitFlags.Block;
			VictimState = VictimState.Block;
			ProcHitFlags |= ProcHitFlags.Block;
			Blocked = CalcBlockDamage();
			if (Damage == Blocked)
			{
				ProcHitFlags |= ProcHitFlags.FullBlock;
			}
			IsCritical = false;
			DoStrike();
		}
예제 #34
0
		public void Dodge()
		{
			Damage = 0;
			VictimState = VictimState.Dodge;
			HitFlags = HitFlags.Miss;
			ProcHitFlags |= ProcHitFlags.Dodge;
			Blocked = 0;
			IsCritical = false;
			DoStrike();
		}
예제 #35
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void MissImmune()
		{
			Damage = 0;
			VictimState = VictimState.Immune;
			DoStrike();
		}
예제 #36
0
파일: UnitActions.cs 프로젝트: NVN/WCell
		public void Block()
		{
			HitFlags = HitFlags.NormalSwingAnim | HitFlags.Block;
			VictimState = VictimState.Block;
			Blocked = CalcBlockDamage();
			IsCritical = false;
			DoStrike();
		}
예제 #37
0
        public static bool ParseAttackerStateUpdateOpcode(GenericReader gr, GenericReader gr2, StringBuilder sb, StreamWriter swe, byte direction)
        {
            sb.AppendLine("Packet offset " + gr.BaseStream.Position.ToString("X2"));
            sb.AppendLine("Opcode SMSG_ATTACKERSTATEUPDATE (0x01B1)");

            StreamWriter sw = new StreamWriter("attacker_state.log", true, Encoding.ASCII);

            HitInfo hi       = (HitInfo)gr2.ReadUInt32();
            ulong   attacker = gr2.ReadPackedGuid();
            ulong   target   = gr2.ReadPackedGuid();

            uint damage = gr2.ReadUInt32();

            sw.WriteLine("HitInfo {0}", hi);
            sw.WriteLine("attacker {0}", attacker.ToString("X16"));
            sw.WriteLine("target {0}", target.ToString("X16"));
            sw.WriteLine("damage {0}", damage);

            byte count = gr2.ReadByte();

            sw.WriteLine("count {0}", count);

            for (byte i = 0; i < count; i++)
            {
                ITEM_DAMAGE_TYPE damagetype = (ITEM_DAMAGE_TYPE)gr2.ReadUInt32();
                float            damage2    = gr2.ReadSingle();
                uint             damage3    = gr2.ReadUInt32();
                uint             adsorb     = gr2.ReadUInt32();
                uint             resist     = gr2.ReadUInt32();

                sw.WriteLine("damagetype {0}", damagetype);
                sw.WriteLine("damage2 {0}", damage2);
                sw.WriteLine("damage3 {0}", damage3);
                sw.WriteLine("adsorb {0}", adsorb);
                sw.WriteLine("resist {0}", resist);
            }

            VictimState targetstate = (VictimState)gr2.ReadUInt32();
            uint        unk1        = gr2.ReadUInt32();
            uint        unk2        = gr2.ReadUInt32();
            uint        blocked     = gr2.ReadUInt32();

            sw.WriteLine("targetstate {0}", targetstate);
            sw.WriteLine("unk1 {0}", unk1);
            sw.WriteLine("unk2 {0}", unk2);
            sw.WriteLine("blocked {0}", blocked);
            sw.WriteLine();

            sw.Flush();
            sw.Close();

            if (gr2.BaseStream.Position == gr2.BaseStream.Length)
            {
                sb.AppendLine("parsed: ok...");
            }
            else
            {
                sb.AppendLine("parsed: error...");
            }

            return(true);
        }
예제 #38
0
		public void Block()
		{
			HitFlags = HitFlags.PlayWoundAnimation | HitFlags.Block;
			VictimState = VictimState.Block;
			Blocked = CalcBlockDamage();
			IsCritical = false;
			DoStrike();
		}
예제 #39
0
        /// <param name="swingFlag">usually 1</param>
        /// <returns>The actual damage (all resistances subtracted)</returns>
        public static uint SendMeleeDamage(WorldObject attacker, WorldObject target, DamageType type, HitInfo hitInfo,
                                           uint totalAmount, uint absorbed, uint resisted, uint blocked, VictimState victimState)
        {
            uint amount = totalAmount - blocked - absorbed - resisted;

            using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_ATTACKERSTATEUPDATE, 70)) {
                packet.WriteUInt((uint)hitInfo);
                attacker.EntityId.WritePacked(packet);
                target.EntityId.WritePacked(packet);

                packet.WriteUInt(totalAmount);
                packet.WriteByte(1);

                packet.WriteByte((uint)type);
                packet.WriteFloat(amount);
                packet.WriteUInt(amount);
                packet.WriteUInt(absorbed);
                packet.WriteUInt(resisted);

                packet.WriteUInt((uint)victimState);
                packet.Write(absorbed == 0 ? 0 : -1);
                packet.WriteUInt(0);
                packet.WriteUInt(blocked);

                target.PushPacketToSurroundingArea(packet, true, false);
            }
            return(amount);
        }