Exemplo n.º 1
0
        public override SkillResults Prepare(MabiCreature creature, MabiSkill skill, MabiPacket packet, uint castTime)
        {
            var itemId = packet.GetLong();
            var title = packet.GetString();
            var author = packet.GetString();
            var mml = packet.GetString();
            var singing = packet.GetString(); // [180300, NA166 (18.09.2013)] Singing
            var hidden = packet.GetByte();

            var item = creature.GetItem(itemId);
            if (item == null)
                return SkillResults.Failure;

            var mmlParts = mml.Split(',');

            // Check total score length
            if (mml.Length > MMLMaxLength)
                return SkillResults.Failure;
            // Melody length
            if (mmlParts[0].Length > skill.RankInfo.Var1)
                return SkillResults.Failure;
            // Harmony 1 length
            if (mmlParts.Length > 1 && mmlParts[1].Length > skill.RankInfo.Var2)
                return SkillResults.Failure;
            // Harmony 2 length
            if (mmlParts.Length > 2 && mmlParts[2].Length > skill.RankInfo.Var3)
                return SkillResults.Failure;

            creature.Temp.SkillItem1 = item;

            var level = SkillRank.Novice;

            // Score level = Musical Knowledge rank
            var knowledge = creature.Skills.Get(SkillConst.MusicalKnowledge);
            if (knowledge != null)
                level = knowledge.Rank;

            item.Tags.SetString("TITLE", title);
            item.Tags.SetString("AUTHOR", author);
            item.Tags.SetString("SCORE", MabiZip.Compress(mml));
            item.Tags.SetString("SCSING", ""); // [180300, NA166 (18.09.2013)] Singing
            item.Tags.SetByte("HIDDEN", hidden);
            item.Tags.SetShort("LEVEL", (ushort)level);

            Send.SkillUse(creature.Client, creature, skill.Id, itemId);

            return SkillResults.Okay;
        }
Exemplo n.º 2
0
        public override SkillResults Use(MabiCreature creature, MabiSkill skill, MabiPacket packet)
        {
            if (creature.Temp.SkillItem1 == null || creature.Temp.SkillItem2 == null)
                return SkillResults.Failure;

            var part = packet.GetInt();

            // Regular
            if (packet.GetElementType() == ElementType.Short)
            {
                var x = packet.GetShort();
                var y = packet.GetShort();

                Send.SkillUseDye(creature.Client, creature, skill.Id, part, x, y);
            }
            // Fixed
            else if (packet.GetElementType() == ElementType.Byte)
            {
                var unk = packet.GetByte();

                Send.SkillUseDye(creature.Client, creature, skill.Id, part, unk);
            }

            return SkillResults.Okay;
        }