Пример #1
0
        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 instrument = session.Player.Inventory.Items[instrumentItemUid];

            InsturmentInfoMetadata         instrumentInfo     = InstrumentInfoMetadataStorage.GetMetadata(instrument.Function.Id);
            InstrumentCategoryInfoMetadata instrumentCategory = InstrumentCategoryInfoMetadataStorage.GetMetadata(instrumentInfo.Category);

            Item score = session.Player.Inventory.Items[scoreItemUid];

            if (score.PlayCount <= 0)
            {
                return;
            }

            score.PlayCount -= 1;

            session.FieldManager.BroadcastPacket(InstrumentPacket.PlayScore(session, score, instrumentCategory.GMId, instrumentCategory.PercussionId));
            session.Send(InstrumentPacket.UpdateScoreUses(scoreItemUid, score.PlayCount));
        }
        private static void HandlePlayScore(GameSession session, PacketReader packet)
        {
            long instrumentItemUid = packet.ReadLong();
            long scoreItemUid      = packet.ReadLong();

            if (!session.Player.Inventory.Items.ContainsKey(scoreItemUid))
            {
                return;
            }

            Item score = session.Player.Inventory.Items[scoreItemUid];

            if (score.PlayCount <= 0)
            {
                return;
            }

            score.PlayCount -= 1;

            session.Send(InstrumentPacket.PlayScore(session.FieldPlayer, score.FileName));
            session.FieldManager.BroadcastPacket(InstrumentPacket.PlayScore(session.FieldPlayer, score.FileName));
            session.Send(InstrumentPacket.UpdateScoreUses(scoreItemUid, score.PlayCount));
        }
Пример #3
0
    private static void HandlePlayScore(GameSession session, PacketReader packet)
    {
        long instrumentItemUid = packet.ReadLong();
        long scoreItemUid      = packet.ReadLong();

        if (!session.Player.Inventory.HasItem(scoreItemUid) || !session.Player.Inventory.HasItem(instrumentItemUid))
        {
            return;
        }

        Item instrumentItem = session.Player.Inventory.GetByUid(instrumentItemUid);

        InstrumentInfoMetadata         instrumentInfo     = InstrumentInfoMetadataStorage.GetMetadata(instrumentItem.Function.Id);
        InstrumentCategoryInfoMetadata instrumentCategory = InstrumentCategoryInfoMetadataStorage.GetMetadata(instrumentInfo.Category);

        Item score = session.Player.Inventory.GetByUid(scoreItemUid);

        if (score.PlayCount <= 0)
        {
            return;
        }

        Instrument instrument = new(instrumentCategory.GMId, instrumentCategory.PercussionId, score.IsCustomScore, session.Player.FieldPlayer.ObjectId)
        {
            InstrumentTick = session.ServerTick,
            Score          = score,
            Improvise      = false
        };

        score.PlayCount                -= 1;
        session.Player.Instrument       = session.FieldManager.RequestFieldObject(instrument);
        session.Player.Instrument.Coord = session.Player.FieldPlayer.Coord;
        session.FieldManager.AddInstrument(session.Player.Instrument);
        session.FieldManager.BroadcastPacket(InstrumentPacket.PlayScore(session.Player.Instrument));
        session.Send(InstrumentPacket.UpdateScoreUses(scoreItemUid, score.PlayCount));
    }
Пример #4
0
    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.HasItem(scoreItemUid) || !session.Player.Inventory.HasItem(instrumentItemUid))
        {
            return;
        }


        Item score = session.Player.Inventory.GetByUid(scoreItemUid);

        if (score.PlayCount <= 0)
        {
            return;
        }

        Item instrumentItem = session.Player.Inventory.GetByUid(instrumentItemUid);
        InstrumentInfoMetadata         instrumentInfo     = InstrumentInfoMetadataStorage.GetMetadata(instrumentItem.Function.Id);
        InstrumentCategoryInfoMetadata instrumentCategory = InstrumentCategoryInfoMetadataStorage.GetMetadata(instrumentInfo.Category);
        Instrument instrument = new(instrumentCategory.GMId, instrumentCategory.PercussionId, score.IsCustomScore, session.Player.FieldPlayer.ObjectId)
        {
            Score     = score,
            Ensemble  = true,
            Improvise = false
        };

        session.Player.Instrument       = session.FieldManager.RequestFieldObject(instrument);
        session.Player.Instrument.Coord = session.Player.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;
        }
    }