Esempio 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;
        }
Esempio n. 2
0
        public override SkillResults Start(MabiCreature creature, MabiSkill skill, MabiTags tags)
        {
            ulong chairOId = 0;
            if (tags.Has("ITEMID"))
                chairOId = (ulong)tags.Get("ITEMID");

            if (chairOId > 0)
            {
                // Check item
                var item = creature.GetItem(chairOId);
                if (item != null && item.Type == ItemType.Misc)
                {
                    // Get chair prop id
                    var propId = 0u;
                    var chairInfo = MabiData.ChairDb.Find(item.Info.Class);
                    if (chairInfo != null)
                        propId = (!creature.IsGiant ? chairInfo.PropId : chairInfo.GiantPropId);

                    var pos = creature.GetPosition();

                    // Effect
                    if (chairInfo.Effect != 0)
                        Send.Effect(chairInfo.Effect, creature, true);

                    // Chair prop
                    var prop = new MabiProp(propId, creature.Region, pos.X, pos.Y, MabiMath.DirToRad(creature.Direction));
                    prop.State = "stand";
                    WorldManager.Instance.AddProp(prop);

                    // Move char
                    Send.AssignChair(creature, prop.Id, 1);

                    // Update chair
                    prop.ExtraData = string.Format("<xml OWNER='{0}' SITCHAR='{0}'/>", creature.Id);
                    Send.PropUpdate(prop);

                    creature.Temp.CurrentChair = chairInfo;
                    creature.Temp.SittingProp = prop;
                }
            }

            creature.State |= CreatureStates.SitDown;
            Send.SitDown(creature);

            SkillHelper.GiveSkillExp(creature, skill, 20);

            return SkillResults.Okay;
        }
Esempio n. 3
0
        public override SkillResults Prepare(MabiCreature creature, MabiSkill skill, MabiPacket packet, uint castTime)
        {
            // Check item id parameter
            var parameters = packet.GetString();
            var itemOId = MabiTags.Fetch<ulong>("ITEMID", parameters);
            if (itemOId == 0)
                return SkillResults.Failure;

            // Check item
            var item = creature.GetItem(itemOId);
            if (item == null)
                return SkillResults.Failure;

            creature.Temp.SkillItem1 = item;

            Send.SkillReady(creature.Client, creature, skill.Id, "");

            return SkillResults.Okay;
        }