rework WoJS Party

- fix SQL issue on removing expired parties
- use item data for party creation
This commit is contained in:
Robert Paciorek 2024-04-08 23:59:51 +00:00
parent 2d9b83db89
commit a9151c42c5
2 changed files with 57 additions and 102 deletions

View File

@ -1435,55 +1435,41 @@ public class ContentController : Controller {
{ {
Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId); Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId);
List<UserPartyComplete> parties = new List<UserPartyComplete>(); List<UserPartyComplete> parties = new List<UserPartyComplete>();
if(viking != null)
{
foreach(var party in ctx.Parties)
{
if (DateTime.UtcNow >= party.ExpirationDate)
{
ctx.Parties.Remove(party);
ctx.SaveChanges();
continue; if(viking is null)
}
AvatarData avatarData = XmlUtil.DeserializeXml<AvatarData>(viking.AvatarSerialized);
if(party.Location == "MyNeighborhood")
{
UserPartyComplete userPartyComplete = new UserPartyComplete
{
DisplayName = avatarData.DisplayName,
UserName = avatarData.DisplayName,
ExpirationDate = party.ExpirationDate,
Icon = party.LocationIconAsset,
Location = party.Location,
PrivateParty = party.PrivateParty!.Value,
UserID = viking.Uid,
AssetBundle = "RS_DATA/PfMyNeighborhoodParty.unity3d/PfMyNeighborhoodParty"
};
parties.Add(userPartyComplete);
} else if (party.Location == "MyVIPRoomInt")
{
UserPartyComplete userPartyComplete = new UserPartyComplete
{
DisplayName = avatarData.DisplayName,
UserName = avatarData.DisplayName,
ExpirationDate = party.ExpirationDate,
Icon = party.LocationIconAsset,
Location = party.Location,
PrivateParty = party.PrivateParty!.Value,
UserID = viking.Uid,
AssetBundle = "RS_DATA/PfMyVIPRoomIntPartyGroup.unity3d/PfMyVIPRoomIntPartyGroup"
};
parties.Add(userPartyComplete);
}
}
return Ok(new ArrayOfUserPartyComplete { UserPartyComplete = parties.ToArray() });
} else
{ {
return Ok(new ArrayOfUserPartyComplete()); return Ok(new ArrayOfUserPartyComplete());
} }
bool needSave = false;
foreach(var party in viking.Parties)
{
if (DateTime.UtcNow >= party.ExpirationDate)
{
viking.Parties.Remove(party);
needSave = true;
continue;
}
AvatarData avatarData = XmlUtil.DeserializeXml<AvatarData>(viking.AvatarSerialized);
UserPartyComplete userPartyComplete = new UserPartyComplete
{
DisplayName = avatarData.DisplayName,
UserName = avatarData.DisplayName,
ExpirationDate = party.ExpirationDate,
Icon = party.LocationIconAsset,
Location = party.Location,
PrivateParty = party.PrivateParty!.Value,
UserID = viking.Uid,
AssetBundle = party.AssetBundle
};
parties.Add(userPartyComplete);
}
if (needSave)
ctx.SaveChanges();
return Ok(new ArrayOfUserPartyComplete { UserPartyComplete = parties.ToArray() });
} }
[HttpPost] [HttpPost]
@ -1492,76 +1478,44 @@ public class ContentController : Controller {
[VikingSession] [VikingSession]
public IActionResult PurchaseParty(Viking viking, [FromForm] int itemId) public IActionResult PurchaseParty(Viking viking, [FromForm] int itemId)
{ {
// create a party based on bought itemid ItemData itemData = itemService.GetItem(itemId);
// create a party based on bought itemid
Party party = new Party Party party = new Party
{ {
VikingId = viking.Id,
PrivateParty = false PrivateParty = false
}; };
int coinTakeaway = 0; string? partyType = itemData.Attribute?.FirstOrDefault(a => a.Key == "PartyType").Value;
switch (itemId) if (partyType is null) {
{ return Ok(null);
case 2761:
party.Location = "MyNeighborhood";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyLocationMyNeighborhood";
party.ExpirationDate = DateTime.UtcNow.AddMinutes(30);
coinTakeaway = 30;
break;
case 6259:
party.Location = "MyNeighborhood";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyLocationMyNeighborhood";
party.ExpirationDate = DateTime.UtcNow.AddHours(1);
coinTakeaway = 60;
break;
case 6260:
party.Location = "MyNeighborhood";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyLocationMyNeighborhood";
party.ExpirationDate = DateTime.UtcNow.AddHours(4);
coinTakeaway = 80;
break;
case 6261:
party.Location = "MyNeighborhood";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyLocationMyNeighborhood";
party.ExpirationDate = DateTime.UtcNow.AddHours(8);
coinTakeaway = 100;
break;
case 6263:
party.Location = "MyVIPRoomInt";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyDefault";
party.ExpirationDate = DateTime.UtcNow.AddMinutes(30);
coinTakeaway = 30;
break;
case 6264:
party.Location = "MyVIPRoomInt";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyDefault";
party.ExpirationDate = DateTime.UtcNow.AddHours(1);
coinTakeaway = 60;
break;
case 6265:
party.Location = "MyVIPRoomInt";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyDefault";
party.ExpirationDate = DateTime.UtcNow.AddHours(4);
coinTakeaway = 80;
break;
case 6266:
party.Location = "MyVIPRoomInt";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyDefault";
party.ExpirationDate = DateTime.UtcNow.AddHours(8);
coinTakeaway = 100;
break;
} }
// check if party already exists if (partyType == "Default") {
party.Location = "MyNeighborhood";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyLocationMyNeighborhood";
party.AssetBundle = "RS_DATA/PfMyNeighborhoodParty.unity3d/PfMyNeighborhoodParty";
} else if (partyType == "VIPRoom") {
party.Location = "MyVIPRoomInt";
party.LocationIconAsset = "RS_DATA/PfUiPartiesList.unity3d/IcoPartyDefault";
party.AssetBundle = "RS_DATA/PfMyVIPRoomIntPartyGroup.unity3d/PfMyVIPRoomIntPartyGroup";
} else {
Console.WriteLine($"Unsupported partyType = {partyType}");
return Ok(null);
}
if (ctx.Parties.Where(e => e.Location == party.Location).FirstOrDefault(e => e.VikingId == viking.Id) != null) return Ok(null); party.ExpirationDate = DateTime.UtcNow.AddMinutes(
Int32.Parse(itemData.Attribute.FirstOrDefault(a => a.Key == "Time").Value)
);
// check if party already exists
if (viking.Parties.FirstOrDefault(e => e.Location == party.Location) != null) return Ok(null);
// take away coins // take away coins
viking.AchievementPoints.FirstOrDefault(e => e.Type == (int)AchievementPointTypes.GameCurrency)!.Value -= coinTakeaway; viking.AchievementPoints.FirstOrDefault(e => e.Type == (int)AchievementPointTypes.GameCurrency)!.Value -= itemData.Cost;
ctx.Parties.Add(party); viking.Parties.Add(party);
ctx.SaveChanges(); ctx.SaveChanges();
return Ok(true); return Ok(true);

View File

@ -12,6 +12,7 @@ namespace sodoff.Model
public DateTime ExpirationDate { get; set; } = DateTime.UtcNow; public DateTime ExpirationDate { get; set; } = DateTime.UtcNow;
public bool? PrivateParty { get; set; } public bool? PrivateParty { get; set; }
public string LocationIconAsset { get; set; } = null!; public string LocationIconAsset { get; set; } = null!;
public string AssetBundle { get; set; } = null!;
public virtual Viking? Viking { get; set; } public virtual Viking? Viking { get; set; }
} }
} }