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"); } }
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); } }); }); }