コード例 #1
0
ファイル: SkillHandler.cs プロジェクト: lynsone/MapleServer2
        private static void HandleRegionSkills(GameSession session, PacketReader packet)
        {
            long   skillSN  = packet.ReadLong();
            byte   mode     = packet.ReadByte();
            int    unknown  = packet.ReadInt();
            int    unknown2 = packet.ReadInt();
            CoordF position = packet.Read <CoordF>();
            CoordF rotation = packet.Read <CoordF>();

            // TODO: Verify rest of skills to proc correctly.
            // Send status correctly when Region attacks are proc.
            SkillCast parentSkill = SkillUsePacket.SkillCastMap[skillSN];

            if (parentSkill.GetConditionSkill() == null)
            {
                return;
            }

            foreach (SkillCondition conditionSkill in parentSkill.GetConditionSkill())
            {
                if (!conditionSkill.Splash)
                {
                    continue;
                }

                SkillCast skillCast = new SkillCast(conditionSkill.Id, conditionSkill.Level, GuidGenerator.Long(), session.ServerTick, parentSkill);
                RegionSkillHandler.Handle(session, GuidGenerator.Int(), session.FieldPlayer.Coord, skillCast);
            }
        }
コード例 #2
0
ファイル: SkillHandler.cs プロジェクト: Zintixx/MapleServer2
    private static void HandleRegionSkills(GameSession session, PacketReader packet)
    {
        long   skillSn     = packet.ReadLong();
        byte   mode        = packet.ReadByte();
        int    unknown     = packet.ReadInt();
        int    attackIndex = packet.ReadInt();
        CoordF position    = packet.Read <CoordF>();
        CoordF rotation    = packet.Read <CoordF>();
        // What are these values used? Check client vs server?

        // TODO: Verify rest of skills to proc correctly.
        // TODO: Send status correctly when Region attacks are proc.

        SkillCast parentSkill = session.Player.FieldPlayer.SkillCast;

        if (parentSkill is null || parentSkill.SkillSn != skillSn)
        {
            return;
        }

        SkillAttack skillAttack = parentSkill.GetSkillMotions().FirstOrDefault()?.SkillAttacks.FirstOrDefault();

        if (skillAttack is null)
        {
            return;
        }

        if (skillAttack.CubeMagicPathId == 0 && skillAttack.MagicPathId == 0)
        {
            return;
        }

        SkillCondition skillCondition = skillAttack.SkillConditions.FirstOrDefault(x => x.IsSplash);

        if (skillCondition is null)
        {
            return;
        }

        SkillCast skillCast = new(skillCondition.SkillId, skillCondition.SkillLevel, GuidGenerator.Long(), session.ServerTick, parentSkill)
        {
            CasterObjectId = session.Player.FieldPlayer.ObjectId,
            SkillAttack    = skillAttack,
            Duration       = skillCondition.FireCount * 1000,
            Interval       = skillCondition.Interval
        };

        RegionSkillHandler.HandleEffect(session, skillCast, attackIndex);
    }

    #endregion
}
コード例 #3
0
    public void SetSkill(int[] triggerIds, bool arg2)
    {
        if (arg2 is false) // Not sure what this means
        {
            return;
        }

        foreach (int triggerId in triggerIds)
        {
            IFieldObject <TriggerSkill> triggerSkill = Field.State.GetTriggerSkill(triggerId);
            if (triggerSkill != null)
            {
                // this is 100% not perfect.
                SkillCast skillCast = new(triggerSkill.Value.SkillId, triggerSkill.Value.SkillLevel, GuidGenerator.Long(), Environment.TickCount)
                {
                    SkillObjectId  = triggerSkill.ObjectId,
                    CasterObjectId = triggerSkill.ObjectId,
                    Position       = triggerSkill.Coord
                };
                RegionSkillHandler.HandleEffect(Field, skillCast, 0);
            }
        }
    }