public void MiniGameGiveReward(int winnerBoxId, string contentType, MiniGame type) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, winnerBoxId); if (box is null) { return; } List <IFieldObject <Player> > players = new(); foreach (IFieldObject <Player> player in Field.State.Players.Values) { if (FieldManager.IsPlayerInBox(box, player)) { players.Add(player); } } foreach (IFieldObject <Player> player in players) { if (contentType == "miniGame") { List <Item> items = RewardContentMetadataStorage.GetRewardItems(3, player.Value.Levels.Level); foreach (Item item in items) { player.Value.Inventory.AddItem(player.Value.Session, item, true); } } else if (contentType == "UserOpenMiniGameExtraReward") { } } }
public int GetUserCount(int boxId, int userTagId) { if (boxId == 0) { return(Field.State.Players.Values.Count); } MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box is null) { return(0); } int userCount = 0; foreach (IFieldActor <Player> player in Field.State.Players.Values) { if (FieldManager.IsPlayerInBox(box, player)) { userCount++; } } return(userCount); }
public bool UserDetected(int[] boxIds, byte jobId) { Job job = (Job)jobId; List <Character> players = Field.State.Players.Values.ToList(); if (job != Job.None) { players = players.Where(x => x.Value.Job == job).ToList(); } foreach (int boxId in boxIds) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box == null) { return(false); } if (players.Any(player => FieldManager.IsPlayerInBox(box, player))) { return(true); } } return(false); }
public void MiniGameCameraDirection(int boxId, int cameraId) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box is null) { return; } List <IFieldObject <Player> > boxPlayers = new(); foreach (IFieldObject <Player> player in Field.State.Players.Values) { if (FieldManager.IsPlayerInBox(box, player)) { boxPlayers.Add(player); } } Random random = Random.Shared; int index = random.Next(boxPlayers.Count); IFieldObject <Player> randomPlayer = boxPlayers[index]; Field.BroadcastPacket(LocalCameraPacket.Camera(cameraId, 1, randomPlayer.ObjectId)); }
public void EndMiniGame(int winnerBoxId, MiniGame type, bool isOnlyWinner) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, winnerBoxId); if (box is null) { return; } foreach (IFieldObject <Player> player in Field.State.Players.Values) { if (!FieldManager.IsPlayerInBox(box, player)) { continue; } switch (type) { case MiniGame.LudibriumEscape: PlayerTrigger trigger = player.Value.Triggers.FirstOrDefault(x => x.Key == "gameStart"); player.Value.Triggers.Remove(trigger); player.Value.Session.Send(ResultsPacket.Rounds(1, 1)); break; case MiniGame.OXQuiz: player.Value.Session.Send(ResultsPacket.Rounds(10, 10)); break; } } }
public void PlaySystemSoundInBox(int[] boxIds, string sound) { if (boxIds != null) { foreach (int boxId in boxIds) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box is null) { return; } foreach (IFieldObject <Player> player in Field.State.Players.Values) { if (FieldManager.IsPlayerInBox(box, player)) { player.Value.Session.Send(SystemSoundPacket.Play(sound)); } } } return; } Field.BroadcastPacket(SystemSoundPacket.Play(sound)); }
public void MoveUser(int mapId, int triggerId, int boxId) { List <Character> players = Field.State.Players.Values.ToList(); if (boxId != 0) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box is null) { return; } players = players.Where(player => FieldManager.IsPlayerInBox(box, player)).ToList(); } // move player back to return map if (mapId == 0 && triggerId == 0) { foreach (IFieldObject <Player> player in players) { player.Value.Warp(player.Value.ReturnMapId, player.Value.ReturnCoord); } return; } if (mapId == Field.MapId) { IFieldObject <Portal> portal = Field.State.Portals.Values.First(p => p.Value.Id == triggerId); foreach (IFieldObject <Player> player in players) { player.Value.Move(portal.Coord, portal.Rotation, isTrigger: true); } return; } CoordF moveCoord; CoordF moveRotation; MapPortal dstPortal = MapEntityMetadataStorage.GetPortals(mapId).FirstOrDefault(portal => portal.Id == triggerId); if (dstPortal == null) { MapPlayerSpawn spawn = MapEntityMetadataStorage.GetRandomPlayerSpawn(mapId); moveCoord = spawn.Coord.ToFloat(); moveRotation = spawn.Rotation.ToFloat(); } else { moveCoord = dstPortal.Coord.ToFloat(); moveRotation = dstPortal.Rotation.ToFloat(); } foreach (IFieldObject <Player> player in players) { player.Value.Warp(mapId, moveCoord, moveRotation, instanceId: 1); } }
public bool QuestUserDetected(int[] boxes, int[] questIds, byte[] modes, byte arg4) { byte mode = modes[0]; foreach (int boxId in boxes) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box is null) { return(false); } List <Character> players = Field.State.Players.Values.ToList(); foreach (Character player in players) { if (!FieldManager.IsPlayerInBox(box, player)) { continue; } foreach (int questId in questIds) { if (!player.Value.QuestData.TryGetValue(questId, out QuestStatus quest)) { return(false); } switch (mode) { case 1: // started return(quest.State is QuestState.Started); case 2: // on going return(quest.State is QuestState.Started && quest.Condition.All(x => x.Completed)); case 3: // completed return(quest.State is QuestState.Completed); } } } } return(false); }
public void EndMiniGameRound(int winnerBoxId, float expRate, bool isOnlyWinner, bool isGainLoserBonus, bool meso, MiniGame type) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, winnerBoxId); if (box is null) { return; } foreach (IFieldObject <Player> player in Field.State.Players.Values) { if (FieldManager.IsPlayerInBox(box, player)) { // TODO: calculate correct amount of exp; player.Value.Levels.GainExp(10000); } } }
public void AddBuff(int[] boxIds, int skillId, byte skillLevel, bool arg4, bool arg5, string feature) { foreach (int boxId in boxIds) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box is null) { return; } foreach (Character player in Field.State.Players.Values.Where(player => FieldManager.IsPlayerInBox(box, player))) { // TODO: Rework when buff system is implemented Status status = new(new(skillId, skillLevel), player.ObjectId, player.ObjectId, 1); StatusHandler.Handle(player.Value.Session, status); } } }
public void SetAchievement(int boxId, string type, string trophySet) { List <Character> players = Field.State.Players.Values.ToList(); if (boxId != 0) { MapTriggerBox box = MapEntityMetadataStorage.GetTriggerBox(Field.MapId, boxId); if (box is null) { return; } players = players.Where(player => FieldManager.IsPlayerInBox(box, player)).ToList(); } foreach (IFieldObject <Player> player in players) { if (type == "trigger") { TrophyManager.OnTrigger(player.Value, trophySet); } } }