SendPacketIfMonsterIsSpawned() public static method

public static SendPacketIfMonsterIsSpawned ( byte tmpBuffer, int Index_ ) : void
tmpBuffer byte
Index_ int
return void
示例#1
0
 public static void OnDeSpawn(uint monsterid)
 {
     if (monsterid != 0)
     {
         PacketWriter writer = new PacketWriter();
         writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_DESPAWN);
         writer.AppendDword(monsterid);
         int ObjectIndex = Players.GetObjectIndex(monsterid);
         ServerSocket.SendPacketIfMonsterIsSpawned(writer.getWorkspace(), ObjectIndex);
     }
 }
示例#2
0
        public static bool MoveToObject(int Index_, ref _Position obj_1, _Position obj_2, uint uniqueid, uint characterid, double weapondistance, byte weapontype, bool Monster)
        {
            double distance_x = obj_1.X - obj_2.X;
            double distance_y = obj_1.Y - obj_2.Y;
            double distance   = Formula.CalculateDistance(distance_x, distance_y);

            if (weapontype == 6 || weapontype == 12)
            {
                weapondistance = 250;
                distance_y    -= 100;
                distance_x    -= 150;
            }

            if (distance > weapondistance)
            {
                distance_x = (distance_x - ((distance_x * 10) / distance));
                distance_y = (distance_y - ((distance_y * 10) / distance));

                obj_1.X -= (float)distance_x;
                obj_1.Y -= (float)distance_y;

                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_MOVEMENT);
                writer.AppendDword(uniqueid);
                writer.AppendByte(1);
                writer.AppendByte(obj_1.XSector);
                writer.AppendByte(obj_1.YSector);
                writer.AppendWord((ushort)obj_1.X);
                writer.AppendWord((ushort)obj_1.Z);
                writer.AppendWord((ushort)obj_1.Y);
                writer.AppendByte(0);
                if (Monster)
                {
                    ServerSocket.SendPacketIfMonsterIsSpawned(writer.getWorkspace(), Index_);
                }
                else
                {
                    ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);
                }

                if (characterid != 0)
                {
                    DatabaseCore.WriteQuery("UPDATE characters SET xpos='{0}',ypos='{1}' WHERE id='{2}'", (int)obj_1.X, (int)obj_2.Y, characterid);
                }

                return(false);
            }
            return(true);
        }
示例#3
0
        public static void KillMonster(PacketReader reader_, int Index_)
        {
            uint ObjectId = reader_.ReadDword();

            int ObjectIndex = Players.GetObjectIndex(ObjectId);

            ServerSocket.SendPacketIfMonsterIsSpawned(Players.CreateDeSpawnPacket(ObjectId), ObjectIndex);

            for (int i = 0; i <= Monsters.MonsterAmount; i++)
            {
                if (Monsters.General[i].ID == ObjectId)
                {
                    Timers.MonsterAttack[i].Stop();
                    Timers.MonsterMovement[i].Stop();
                    break;
                }
            }
        }
示例#4
0
        public static void OnUnique(uint monsterid, bool kill, string name)
        {
            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_UNIQUE);
            if (kill)
            {
                writer.AppendByte(6);
                writer.AppendDword(monsterid);
                writer.AppendWord((ushort)name.Length);
                writer.AppendString(false, name);
            }
            else
            {
                writer.AppendByte(5);
                writer.AppendDword(monsterid);
            }

            int ObjectIndex = Players.GetObjectIndex(monsterid);

            ServerSocket.SendPacketIfMonsterIsSpawned(writer.getWorkspace(), ObjectIndex);
        }
示例#5
0
        public static void OnMonsterAttack(int Index_)
        {
            uint SkillId = 161;

            if (Monsters.General[Index_].Skills.Count != 0)
            {
                int rnd = random.Next(0, Monsters.General[Index_].Skills.Count);
                SkillId = (uint)Monsters.General[Index_].Skills[rnd];
            }

            if (Player.General[Monsters.General[Index_].AttackingObjectIndex].UniqueID != 0)
            {
                /*   Silkroad.Skill_ tmpAttackSkill = Silkroad.GetSkillById(SkillId);
                 * Silkroad.Object_ tmpMonster = Silkroad.GetObjectById(Monsters.General[Index_].ID);
                 *
                 * uint BasicAttackPower = (uint)(tmpMonster.ParryRatio * 10);//parry ratio == att ratio?
                 *
                 * double SkillAttackPower = 1;
                 * double SkillIncreaseRate = 0;
                 *
                 * double EnemyAbsorbation = Player.Stats[Monsters.General[Index_].AttackingObjectIndex].TotalAccessoriesAbsorption / (double)100;
                 * double EnemyDefence =( Player.Stats[Monsters.General[Index_].AttackingObjectIndex].PhyDef + Player.Stats[Monsters.General[Index_].AttackingObjectIndex].MagDef) / 2;
                 * double TotalDamageIncreaseRate = 0;
                 *
                 * double Damage = Formula.CalculateDmg(
                 *     BasicAttackPower,
                 *     SkillAttackPower,
                 *     SkillIncreaseRate,
                 *     EnemyAbsorbation,
                 *     EnemyDefence,
                 *     tmpMonster.Level,
                 *     0,
                 *    0,
                 *     TotalDamageIncreaseRate,
                 *     tmpAttackSkill.PwrPercent / (double)100);
                 *
                 * Console.WriteLine(Damage);*/
                double Damage = (double)random.Next(1, 100);

                if (Monsters.General[Index_].Type == 3 || Monsters.General[Index_].Type == 0x10 || Monsters.General[Index_].Type == 20)
                {
                    Damage *= 2;
                }

                Player.Stats[Monsters.General[Index_].AttackingObjectIndex].CHP -= (int)Damage;
                byte AfterState = 0;

                if (Player.Stats[Monsters.General[Index_].AttackingObjectIndex].CHP <= 0)
                {
                    AfterState = 0x80;
                    Player.Stats[Monsters.General[Index_].AttackingObjectIndex].CHP = 0;
                }
                Stats.HPUpdate(Monsters.General[Index_].AttackingObjectIndex, true);

                PacketWriter writer = new PacketWriter();
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_ATTACK);
                writer.AppendByte(1);
                writer.AppendByte(2);
                writer.AppendDword(SkillId);
                writer.AppendDword(Monsters.General[Index_].UniqueID);
                writer.AppendDword((uint)random.Next(65536, 1048575));
                writer.AppendDword(Player.General[Monsters.General[Index_].AttackingObjectIndex].UniqueID);
                writer.AppendByte(1);
                writer.AppendByte(1);
                writer.AppendByte(1);
                writer.AppendDword(Player.General[Monsters.General[Index_].AttackingObjectIndex].UniqueID);
                writer.AppendByte(AfterState);
                writer.AppendByte(1);
                writer.AppendDword((uint)Damage);
                writer.AppendByte(0);
                writer.AppendWord(0);

                ServerSocket.SendPacketIfMonsterIsSpawned(writer.getWorkspace(), Index_);

                if (AfterState == 0x80)
                {
                    Timers.MonsterAttack[Index_].Stop();
                    Player.General[Index_].State = 1;
                    Character.Die(Monsters.General[Index_].AttackingObjectIndex);
                    Character.Die2(Monsters.General[Index_].AttackingObjectIndex);
                    Player.Flags[Monsters.General[Index_].AttackingObjectIndex].Dead = true;
                }
            }
        }