Beispiel #1
0
    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")
            {
            }
        }
    }
Beispiel #2
0
    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);
    }
Beispiel #4
0
    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));
    }
Beispiel #5
0
    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;
            }
        }
    }
Beispiel #6
0
    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);
    }
Beispiel #9
0
    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);
            }
        }
    }