Exemplo n.º 1
0
    private static void HandleRespondSurvey(GameSession session, PacketReader packet)
    {
        packet.ReadByte();
        packet.ReadLong(); // character id
        long surveyId      = packet.ReadLong();
        byte responseIndex = packet.ReadByte();

        Player player = session.Player;

        Home       home       = GameServer.HomeManager.GetHomeById(player.VisitingHomeId);
        HomeSurvey homeSurvey = home.Survey;

        string option = homeSurvey.Options.Keys.ToList()[responseIndex];

        if (!homeSurvey.Started || homeSurvey.Ended || homeSurvey.Id != surveyId || option is null || homeSurvey.Options[option].Contains(player.Name) || !homeSurvey.AvailableCharacters.Contains(player.Name))
        {
            return;
        }

        homeSurvey.AvailableCharacters.Remove(player.Name);
        homeSurvey.Options[option].Add(player.Name);
        session.Send(HomeActionPacket.SurveyAnswer(player.Name));

        homeSurvey.Answers++;

        if (homeSurvey.Answers < homeSurvey.MaxAnswers)
        {
            return;
        }

        session.FieldManager.BroadcastPacket(HomeActionPacket.SurveyEnd(homeSurvey));
        homeSurvey.End();
    }
Exemplo n.º 2
0
    public override void Execute(GameCommandTrigger trigger)
    {
        Player player    = trigger.Session.Player;
        bool   mapIsHome = player.MapId == (int)Map.PrivateResidence;

        if (!mapIsHome)
        {
            return;
        }

        Home home = GameServer.HomeManager.GetHomeById(player.VisitingHomeId);

        if (home.AccountId != player.AccountId)
        {
            return;
        }

        string[] args = trigger.Get <string[]>("message");

        if (args is null)
        {
            trigger.Session.FieldManager.BroadcastPacket(HomeActionPacket.HostAlarm(string.Empty));
            return;
        }

        StringBuilder message = new();

        foreach (string arg in args[1..])
Exemplo n.º 3
0
    private static void HandleUpdateBallCoord(GameSession session, PacketReader packet)
    {
        byte   mode      = packet.ReadByte(); // 2 move, 3 hit ball
        int    objectId  = packet.ReadInt();
        CoordF coord     = packet.Read <CoordF>();
        CoordF velocity1 = packet.Read <CoordF>();

        if (!session.FieldManager.State.Guide.TryGetValue(objectId, out IFieldObject <GuideObject> ball))
        {
            return;
        }

        ball.Coord = coord;

        switch (mode)
        {
        case 2:
            CoordF velocity2 = packet.Read <CoordF>();

            session.FieldManager.BroadcastPacket(HomeActionPacket.UpdateBall(ball, velocity1, velocity2), session);
            break;

        case 3:
            session.FieldManager.BroadcastPacket(HomeActionPacket.HitBall(ball, velocity1));
            break;
        }
    }
Exemplo n.º 4
0
    public override void Execute(GameCommandTrigger trigger)
    {
        Player player    = trigger.Session.Player;
        bool   mapIsHome = player.MapId == (int)Map.PrivateResidence;

        if (!mapIsHome)
        {
            return;
        }

        Home home = GameServer.HomeManager.GetHomeById(player.VisitingHomeId);

        if (home.AccountId != player.AccountId)
        {
            return;
        }

        string[] args = trigger.Get <string[]>("options");

        if (args is null)
        {
            trigger.Session.Send(HomeActionPacket.SurveyMessage());
            return;
        }

        string[] options = args[1..];
Exemplo n.º 5
0
    public override void Execute(GameCommandTrigger trigger)
    {
        // TODO: Check if the command is being executed in party chat.
        Player player    = trigger.Session.Player;
        bool   mapIsHome = player.MapId == (int)Map.PrivateResidence;

        if (!mapIsHome)
        {
            return;
        }

        trigger.Session.FieldManager.BroadcastPacket(HomeActionPacket.Roll(trigger.Session.Player, Random.Shared.Next(100)));
    }
Exemplo n.º 6
0
    public override void Execute(GameCommandTrigger trigger)
    {
        Player player = trigger.Session.Player;
        IFieldActor <Player> fieldPlayer  = player.FieldPlayer;
        FieldManager         fieldManager = trigger.Session.FieldManager;

        bool mapIsHome = player.MapId == (int)Map.PrivateResidence;

        if (!mapIsHome)
        {
            return;
        }

        Home home = GameServer.HomeManager.GetHomeById(player.VisitingHomeId);

        if (home.AccountId != player.AccountId)
        {
            return;
        }

        IFieldObject <GuideObject> ballObject = fieldManager.State.Guide.Values.FirstOrDefault(x => x.Value.IsBall);

        if (ballObject is not null)
        {
            fieldManager.RemoveGuide(ballObject);
            fieldManager.BroadcastPacket(HomeActionPacket.RemoveBall(ballObject));
            return;
        }

        int size = trigger.Get <int>("size");

        size = Math.Min(30 + size * 30, 330);
        if (size < 0)
        {
            size = 60;
        }

        GuideObject ball = new(0, player.CharacterId)
        {
            IsBall = true
        };
        IFieldObject <GuideObject> fieldObject = fieldManager.RequestFieldObject(ball);

        fieldObject.Coord    = CoordF.From(fieldPlayer.Coord.X, fieldPlayer.Coord.Y, fieldPlayer.Coord.Z + Block.BLOCK_SIZE * 2);
        fieldObject.Rotation = CoordF.From(0, 0, size);

        fieldManager.AddGuide(fieldObject);

        fieldManager.BroadcastPacket(HomeActionPacket.AddBall(fieldObject));
    }
}
Exemplo n.º 7
0
    private static void HandleSendPortalSettings(GameSession session, PacketReader packet)
    {
        CoordB coordB = packet.Read <CoordB>();

        // 50400158 = Portal Cube
        IFieldObject <Cube> cube = session.FieldManager.State.Cubes.Values
                                   .FirstOrDefault(x => x.Coord == coordB.ToFloat() && x.Value.Item.Id == 50400158);

        if (cube is null)
        {
            return;
        }

        List <Cube> otherPortals = session.FieldManager.State.Cubes.Values
                                   .Where(x => x.Value.Item.Id == 50400158 && x.Value.Uid != cube.Value.Uid)
                                   .Select(x => x.Value).ToList();

        session.Send(HomeActionPacket.SendCubePortalSettings(cube.Value, otherPortals));
    }