Exemple #1
0
        public void Read(RakNet.BitStream stream, RakNet.Packet packet, Server server)
        {
            int victimID = 0, killerID = 0;

            stream.Read(out victimID);
            stream.Read(out killerID);

            NPCProto victim   = (NPCProto)sWorld.VobDict[victimID];
            NPCProto attacker = (NPCProto)sWorld.VobDict[killerID];

            Scripting.Objects.Item weapon = null;
            if (attacker.Weapon != null)
            {
                weapon = attacker.Weapon.ScriptingProto;
            }

            victim.ScriptingNPC.HP = 0;

            Scripting.Objects.Character.NPCProto.isOnDamage(victim.ScriptingNPC, DamageTypes.DAM_POINT, new Vec3f(), null, attacker.ScriptingNPC, attacker.WeaponMode, null, weapon, 0);
        }
        public void Read(RakNet.BitStream stream, RakNet.Packet packet, Server server)
        {
            Vec3f locHit = null, flydir = null;
            int   victim = 0, attacker = 0, weaponMode = 0, spellID = 0, weapon = 0;
            float fallDownDistanceY = 0.0f;

            byte sendFlags, damageMode;

            stream.Read(out victim);
            stream.Read(out damageMode);
            stream.Read(out sendFlags);

            if ((sendFlags & 1) == 1)
            {
                stream.Read(out locHit);
            }
            if ((sendFlags & 2) == 2)
            {
                stream.Read(out flydir);
            }
            if ((sendFlags & 4) == 4)
            {
                stream.Read(out attacker);
            }
            if ((sendFlags & 8) == 8)
            {
                stream.Read(out weaponMode);
            }
            if ((sendFlags & 16) == 16)
            {
                stream.Read(out spellID);
            }
            if ((sendFlags & 32) == 32)
            {
                stream.Read(out weapon);
            }
            if ((sendFlags & 64) == 64)
            {
                stream.Read(out fallDownDistanceY);
            }

            NPCProto vicProto = (NPCProto)sWorld.VobDict[victim];
            Vob      attProto = null;

            Scripting.Objects.Vob attackerScriptProto = null;

            if (attacker != 0)
            {
                attProto            = sWorld.VobDict[attacker];
                attackerScriptProto = attProto.ScriptingVob;
            }

            Item weaponIt = null;

            Scripting.Objects.Item weaponScriptItem = null;
            if (weapon != 0)
            {
                weaponIt         = (Item)sWorld.VobDict[weapon];
                weaponScriptItem = weaponIt.ScriptingProto;
            }


            Spell spell = null;

            Scripting.Objects.Spell scriptSpell = null;
            if (spellID > 100)
            {
                Spell.SpellDict.TryGetValue(spellID, out spell);
                if (spell != null)
                {
                    scriptSpell = spell.ScriptingProto;
                }
            }

            Scripting.Objects.Character.NPCProto.isOnDamage(vicProto.ScriptingNPC, (DamageTypes)damageMode, locHit, flydir, attackerScriptProto, weaponMode, scriptSpell, weaponScriptItem, fallDownDistanceY);
            Write(vicProto, (DamageTypes)damageMode, locHit, flydir, attProto, weaponMode, spell, weaponIt, fallDownDistanceY, packet.guid);
        }