public ResponseData.Campaign GenerateCampaign(string cPath, CampaignLayoutData cData) { string cName = cData.m_Title; if (cData.m_ItemIds.Count == 0) { uConsole.Log(cName + " doesn't have any levels!"); return(null); } List <LevelData> levelDatas = new List <LevelData>(); foreach (string id in cData.m_ItemIds) { if (!File.Exists(cPath + "/" + id.Replace("CampaignMod", "") + ".level")) { uConsole.Log(cName + " tried to load " + id.Replace("CampaignMod", "") + " but it doesn't exist!"); return(null); } byte[] bytes = File.ReadAllBytes(cPath + "/" + id.Replace("CampaignMod", "") + ".level"); int offset = 0; levelDatas.Add(LevelData.Deserialize(bytes, ref offset)); } List <ResponseData.Item> items = new List <ResponseData.Item>(); foreach (LevelData levelData in levelDatas) { ResponseData.Item item = levelData.GenerateItem(); PersistentWorkshopItems.Create(item, levelData.PreviewData, Utils.ZipPayload(levelData.LayoutBytes)); items.Add(item); } ResponseData.Campaign campaign = new ResponseData.Campaign(); campaign.ownedBy = items[0].ownedBy; campaign.items = items.ToArray(); campaign.id = cName + "CampaignMod"; campaign.title = cName; campaign.description = cData.m_Description; campaign.winMessage = cData.m_WinMessage; PersistentWorkshopCampaigns.Delete(campaign.id); PersistentWorkshopCampaigns.Create(campaign); return(campaign); }