private static void HandleStartImprovise(GameSession session, PacketReader packet) { long itemUid = packet.ReadLong(); if (!session.Player.Inventory.Items.ContainsKey(itemUid)) { return; } Item item = session.Player.Inventory.Items[itemUid]; InsturmentInfoMetadata instrumentInfo = InstrumentInfoMetadataStorage.GetMetadata(item.Function.Id); InstrumentCategoryInfoMetadata instrumentCategory = InstrumentCategoryInfoMetadataStorage.GetMetadata(instrumentInfo.Category); Instrument instrument = new Instrument(instrumentCategory.GMId, instrumentCategory.PercussionId, false, session.FieldPlayer.ObjectId) { Improvise = true }; session.Player.Instrument = session.FieldManager.RequestFieldObject(instrument); session.Player.Instrument.Coord = session.FieldPlayer.Coord; session.FieldManager.AddInstrument(session.Player.Instrument); session.FieldManager.BroadcastPacket(InstrumentPacket.StartImprovise(session.Player.Instrument)); }
private static void HandlePlayScore(GameSession session, PacketReader packet) { long instrumentItemUid = packet.ReadLong(); long scoreItemUid = packet.ReadLong(); if (!session.Player.Inventory.Items.ContainsKey(scoreItemUid) || !session.Player.Inventory.Items.ContainsKey(instrumentItemUid)) { return; } Item instrumentItem = session.Player.Inventory.Items[instrumentItemUid]; InsturmentInfoMetadata instrumentInfo = InstrumentInfoMetadataStorage.GetMetadata(instrumentItem.Function.Id); InstrumentCategoryInfoMetadata instrumentCategory = InstrumentCategoryInfoMetadataStorage.GetMetadata(instrumentInfo.Category); Item score = session.Player.Inventory.Items[scoreItemUid]; if (score.PlayCount <= 0) { return; } Instrument instrument = new Instrument(instrumentCategory.GMId, instrumentCategory.PercussionId, score.IsCustomScore, session.FieldPlayer.ObjectId) { InstrumentTick = session.ServerTick, Score = score, Improvise = false }; score.PlayCount -= 1; session.Player.Instrument = session.FieldManager.RequestFieldObject(instrument); session.Player.Instrument.Coord = session.FieldPlayer.Coord; session.FieldManager.AddInstrument(session.Player.Instrument); session.FieldManager.BroadcastPacket(InstrumentPacket.PlayScore(session.Player.Instrument)); session.Send(InstrumentPacket.UpdateScoreUses(scoreItemUid, score.PlayCount)); }
private static void HandleStartEnsemble(GameSession session, PacketReader packet) { long instrumentItemUid = packet.ReadLong(); long scoreItemUid = packet.ReadLong(); Party party = session.Player.Party; if (party == null) { return; } if (!session.Player.Inventory.Items.ContainsKey(scoreItemUid) || !session.Player.Inventory.Items.ContainsKey(instrumentItemUid)) { return; } Item score = session.Player.Inventory.Items[scoreItemUid]; if (score.PlayCount <= 0) { return; } Item instrumentItem = session.Player.Inventory.Items[instrumentItemUid]; InsturmentInfoMetadata instrumentInfo = InstrumentInfoMetadataStorage.GetMetadata(instrumentItem.Function.Id); InstrumentCategoryInfoMetadata instrumentCategory = InstrumentCategoryInfoMetadataStorage.GetMetadata(instrumentInfo.Category); Instrument instrument = new Instrument(instrumentCategory.GMId, instrumentCategory.PercussionId, score.IsCustomScore, session.FieldPlayer.ObjectId) { Score = score, Ensemble = true, Improvise = false }; session.Player.Instrument = session.FieldManager.RequestFieldObject(instrument); session.Player.Instrument.Coord = session.FieldPlayer.Coord; if (session.Player != party.Leader) { return; } int instrumentTick = session.ServerTick; foreach (Player member in party.Members) { if (member.Instrument == null) { continue; } if (!member.Instrument.Value.Ensemble) { continue; } member.Instrument.Value.InstrumentTick = instrumentTick; // set the tick to be all the same member.Session.FieldManager.AddInstrument(member.Session.Player.Instrument); session.FieldManager.BroadcastPacket(InstrumentPacket.PlayScore(member.Session.Player.Instrument)); member.Instrument.Value.Score.PlayCount -= 1; member.Session.Send(InstrumentPacket.UpdateScoreUses(member.Instrument.Value.Score.Uid, member.Instrument.Value.Score.PlayCount)); member.Instrument.Value.Ensemble = false; } }