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(); }
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..])
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; } }
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..];
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))); }
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)); } }
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)); }