Exemple #1
0
        public void CompleteWorld(Player player, string worldId, Shop shop)
        {
            var campWorld = this.GetWorld(worldId);

            if (campWorld != null &&
                player.IsInCampaignMode &&
                !(player.IsBot ?? true))
            {
                CampaignPlayer.Load(this.client, player.ConnectUserId, this.Data.Id, delegate(CampaignPlayer campPlayer)
                {
                    if (campPlayer.GetStatus(campWorld.Tier) == CampaignStatus.Unlocked)
                    {
                        player.RefreshPlayerObject(() =>
                        {
                            campPlayer.CurrentTier += 1;
                            campPlayer.LastUpdated  = DateTime.UtcNow;
                            campPlayer.Save(() =>
                            {
                                this.AwardWorldRewards(player, campWorld, shop);
                                player.PlayerObject.Save();

                                var rewardsMessage = Message.Create("campaignRewards");

                                if (campPlayer.CurrentTier == this.Data.Tiers)
                                {
                                    this.AwardBadge(player, achievment =>
                                    {
                                        rewardsMessage.Add(true);
                                        rewardsMessage.Add(achievment.Title);
                                        rewardsMessage.Add(achievment.Description);
                                        rewardsMessage.Add(achievment.ImageUrl);
                                        this.AddRewardsToMessage(rewardsMessage, campWorld);
                                        player.SendMessage(rewardsMessage);
                                    });
                                }
                                else
                                {
                                    rewardsMessage.Add(false);
                                    var nextWorld = this.Data.Levels.First(world => world.Tier == campPlayer.CurrentTier);
                                    rewardsMessage.Add(nextWorld.Image);
                                    this.AddRewardsToMessage(rewardsMessage, campWorld);
                                    player.SendMessage(rewardsMessage);
                                }
                            });
                        });
                    }
                    else
                    {
                        player.SendMessage("completedLevel");
                    }
                });
            }
            else
            {
                player.SendMessage("completedLevel");
            }
        }
Exemple #2
0
        public void SendJoinMessage(Player player, string worldId, Action <Message> broadcast, Callback callback)
        {
            var rtn = Message.Create("joinCampaign");

            rtn.Add(this.Data.Title);

            var campaignWorld = this.GetWorld(worldId);

            if (player.IsGuest || campaignWorld == null)
            {
                callback();
                rtn.Add(-1);
                player.SendMessage(rtn);
                return;
            }

            this.client.BigDB.Load("Config", "campaigns", campaignSettings =>
            {
                CampaignPlayer.Load(this.client, player.ConnectUserId, this.Data.Id,
                                    delegate(CampaignPlayer campaignPlayer)
                {
                    // First goes "init" message
                    callback();

                    player.InCampaign = true;
                    var status        = campaignPlayer.GetStatus(campaignWorld.Tier);
                    if (status == CampaignStatus.Locked || !campaignSettings.GetBool("enabled", true))
                    {
                        rtn.Add(-1);
                        player.SendMessage(rtn);
                    }
                    else if (this.Data.BetaOnly && !player.HasBeta)
                    {
                        rtn.Add(2);
                        player.SendMessage(rtn);
                    }
                    else
                    {
                        if (status == CampaignStatus.Unlocked)
                        {
                            player.IsInCampaignMode = true;

                            var backup = new CampaignProgressBackup(campaignPlayer.DatabaseObject, player);
                            backup.Restore(worldId, broadcast);
                        }
                        else if (status == CampaignStatus.Completed && campaignPlayer.CurrentTier == this.Data.Tiers)
                        {
                            // Award reward in case of earlier error
                            this.AwardBadge(player, badge => { });
                        }

                        rtn.Add((int)status,
                                campaignWorld.Difficulty,
                                campaignWorld.Tier,
                                this.Data.Tiers);

                        player.SendMessage(rtn);
                    }
                });
            });
        }