예제 #1
0
 public MobBuffStat(MobStatValue flag)
 {
     Flag = flag;
     N    = 0;
     R    = 0;
     TM   = 0;
 }
예제 #2
0
        public void Update(long currentTime)
        {
            MobStatValue endFlag = 0;

            BuffPhysicalDamage.TryReset(currentTime, ref endFlag);
            BuffPhysicalDefense.TryReset(currentTime, ref endFlag);
            BuffMagicDamage.TryReset(currentTime, ref endFlag);
            BuffMagicDefense.TryReset(currentTime, ref endFlag);
            BuffAccurrency.TryReset(currentTime, ref endFlag);
            BuffEvasion.TryReset(currentTime, ref endFlag);
            BuffSpeed.TryReset(currentTime, ref endFlag);
            BuffStun.TryReset(currentTime, ref endFlag);
            BuffFreeze.TryReset(currentTime, ref endFlag);
            BuffPoison.TryReset(currentTime, ref endFlag);
            BuffSeal.TryReset(currentTime, ref endFlag);
            BuffDarkness.TryReset(currentTime, ref endFlag);
            BuffPowerUp.TryReset(currentTime, ref endFlag);
            BuffMagicUp.TryReset(currentTime, ref endFlag);
            BuffPowerGuardUp.TryReset(currentTime, ref endFlag);
            BuffMagicGuardUp.TryReset(currentTime, ref endFlag);
            BuffPhysicalImmune.TryReset(currentTime, ref endFlag);
            BuffMagicImmune.TryReset(currentTime, ref endFlag);
            BuffDoom.TryReset(currentTime, ref endFlag);
            BuffWeb.TryReset(currentTime, ref endFlag);
            BuffHardSkin.TryReset(currentTime, ref endFlag);
            BuffAmbush.TryReset(currentTime, ref endFlag);
            BuffVenom.TryReset(currentTime, ref endFlag);
            BuffBlind.TryReset(currentTime, ref endFlag);
            BuffSealSkill.TryReset(currentTime, ref endFlag);

            if (endFlag > 0)
            {
                MobPacket.SendMobStatsTempReset(Mob, endFlag);
            }
        }
예제 #3
0
 public void TryResetByReference(int reference, ref MobStatValue flag)
 {
     if (N == 0 || R != reference)
     {
         return;
     }
     Reset();
     flag |= Flag;
 }
예제 #4
0
 public void TryReset(long currentTime, ref MobStatValue flag)
 {
     if (N == 0 || TM >= currentTime)
     {
         return;
     }
     Reset();
     flag |= Flag;
 }
예제 #5
0
            public void EncodeForRemote(ref MobStatValue flag, long currentTime, Action <MobBuffStat> func, MobStatValue specificFlag = MobStatValue.ALL)
            {
                if (!IsSet(currentTime) || !specificFlag.HasFlag(Flag))
                {
                    return;
                }

                flag |= Flag;
                func?.Invoke(this);
            }
예제 #6
0
            public void EncodeForLocal(Packet pw, ref MobStatValue flag, long currentTime, MobStatValue specificFlag = MobStatValue.ALL)
            {
                if (!IsSet(currentTime) || !specificFlag.HasFlag(Flag))
                {
                    return;
                }

                flag |= Flag;
                pw.WriteShort(N);
                pw.WriteInt(R);
                pw.WriteShort((short)((TM - currentTime) / 100)); // Not sure what value this should be...
            }
예제 #7
0
        public void Encode(Packet pPacket, MobStatValue pSpecificFlag = MobStatValue.ALL)
        {
            long         currentTime = MasterThread.CurrentTime;
            int          tmpBuffPos  = pPacket.Position;
            MobStatValue endFlag     = 0;

            pPacket.WriteUInt((uint)endFlag);

            BuffPhysicalDamage.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffPhysicalDefense.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffMagicDamage.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffMagicDefense.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffAccurrency.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffEvasion.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffSpeed.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffStun.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffFreeze.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffPoison.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffSeal.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffDarkness.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffPowerUp.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffMagicUp.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffPowerGuardUp.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffMagicGuardUp.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffPhysicalImmune.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffMagicImmune.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffDoom.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffWeb.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffHardSkin.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffAmbush.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffVenom.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffBlind.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);
            BuffSealSkill.EncodeForLocal(pPacket, ref endFlag, currentTime, pSpecificFlag);

            int tmpBuffPos2 = pPacket.Position;

            pPacket.Position = tmpBuffPos;
            pPacket.WriteUInt((uint)endFlag);
            pPacket.Position = tmpBuffPos2;
        }