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; }
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; }