Save_Farm_ShopBuy

This commit is contained in:
Ino 2025-07-27 09:15:13 +09:00
parent d63fbbf635
commit 8083bb196e
5 changed files with 127 additions and 29 deletions

View File

@ -316,31 +316,62 @@ function Use_Item(table, urod, itemid, amount)
{
var success = false;
// 아이템 루트별 처리
const tryUse = (dict, useIndex, totalIndex = null) => {
if (!dict[itemid]) return false;
if (dict[itemid][useIndex] < amount) return false;
dict[itemid][useIndex] -= amount;
if (totalIndex !== null)
dict[itemid][totalIndex] = Add_Amount(dict[itemid][totalIndex], amount);
return true;
};
if (urod.Item && tryUse(urod.Item, 0, 2)) success = true;
else if (urod.Equipment && tryUse(urod.Equipment, 0)) success = true;
else if (urod.Skill && tryUse(urod.Skill, 0)) success = true;
else if (urod.Pet && tryUse(urod.Pet, 0)) success = true;
else if (urod.Enchant && tryUse(urod.Enchant, 0, 3)) success = true;
else if (urod.Relic && tryUse(urod.Relic, 0)) success = true;
if (urod.Item[itemid])
{
if (urod.Item[itemid][0] >= amount)
{
urod.Item[itemid][0] -= amount;
urod.Item[itemid][2] = Add_Amount(urod.Item[itemid][2], amount);
success = true;
}
}
else if (urod.Equipment[itemid])
{
if (urod.Equipment[itemid][0] >= amount)
{
urod.Equipment[itemid][0] -= amount;
success = true;
}
}
else if (urod.Skill[itemid])
{
if (urod.Skill[itemid][0] >= amount)
{
urod.Skill[itemid][0] -= amount;
success = true;
}
}
else if (urod.Pet[itemid])
{
if (urod.Pet[itemid][0] >= amount)
{
urod.Pet[itemid][0] -= amount;
success = true;
}
}
else if (urod.Enchant[itemid])
{
if (urod.Enchant[itemid][0] >= amount)
{
urod.Enchant[itemid][0] -= amount;
urod.Enchant[itemid][3] = Add_Amount(urod.Enchant[itemid][3], amount);
success = true;
}
}
else if (urod.Relic[itemid])
{
if (urod.Relic[itemid][0] >= amount)
{
urod.Relic[itemid][0] -= amount;
success = true;
}
}
if (success)
{
Add_MissionCount(table, urod, "CONSUME_GOODS", itemid, amount, false);
Add_MissionCount(table, urod, "CONSUME_GOODS_ACC", itemid, amount, false);
}
//log.info('use ' + itemid + ', ' + amount + ', result : ' + success);
return success;
}
function Get_ItemAmount(urod, itemid)
@ -845,7 +876,7 @@ handlers.Save_PC_AbilityInit = function(args)
var abilitytable = Get_AbilityConfigTable();
var global = Get_GlobalValueTable();
if (Use_Item(itemtable, urod, 1, Gem))
if (Use_Item(table, urod, 1, Gem))
{
var matdata = global.find(f => f.s_ID == "n_AbilityMaterialID");
if (!matdata) return Get_Return(1); // 설정 누락
@ -924,10 +955,10 @@ handlers.Save_PC_BuyJob = function(args)
return Get_Return(6);
}
var itemtable = Get_ItemTable();
if (Use_Item(itemtable, urod, matdata.n_Value, m_Data.n_NeedGoodsCount))
var table = Get_MissionTable();
if (Use_Item(table, urod, materialId, m_Data.n_NeedGoodsCount))
{
var table = Get_MissionTable();
var itemtable = Get_ItemTable();
Add_Item(table, itemtable, urod, args.JobID, 1);
// 고유 스킬 지급
@ -2612,6 +2643,32 @@ handlers.Save_Farm_FarmerChange = function(args)
}
return Get_Return(1);
}
handlers.Save_Farm_ShopBuy = function(args)
{
var readonlydata = Get_UserReadOnlyData();
var error = Get_Error(readonlydata, args.Token);
if (error < 0) return Get_Return(error);
var urod = Get_JsonUserData(readonlydata);
var table = Get_MissionTable();
var id = args.FarmShopID;
var shop = urod.Farm.Shop[id];
if (!shop) return Get_Return(4);
var farmshopdata = Get_FarmShopTable().find(f=>f.n_FarmShopID == id);
if (shop.Buy >= farmshopdata.n_DayLimit) return Get_Return(3);
if (new Date(shop.Time) - Get_CurKoreaTime() > 0) return Get_Return(2);
if (farmshopdata.n_PayItemID == 0 || Use_Item(table, urod, farmshopdata.n_PayItemID, farmshopdata.n_PayItemAmount))
{
Add_Item(table, Get_ItemTable(), urod, farmshopdata.n_ItemID, farmshopdata.n_ItemAmount);
shop.Time = Get_TimeAddSec(farmshopdata.n_GapTime);
++shop.Buy;
Set_JsonUserData(urod);
return Get_Return(0);
}
return Get_Return(1);
}
/////////////////////////////////// 서버 처리
handlers.Write_UnityInApp = function(args)

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -2520,6 +2520,44 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_Farm_FarmerChange(id, _act); }, 2f);
});
}
public void Save_Farm_ShopBuy(int id, Action _act)
{
NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{
FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true,
FunctionParameter = new
{
Token = m_LoginInfo.EntityToken.EntityToken,
FarmShopID = id,
}
},
result =>
{
if (result.Error == null)
{
NetWait.Ins.Set(false);
var str_result = result.FunctionResult.ToString();
var error = MyErrorCheck(str_result);
// (0 성공, 1 실패 (재화 부족), 2 실패 (시간 남음), 3 실패 (오늘 구매 완료), 4 실패 (없는 상점 아이템))
switch (error)
{
case 0: _act?.Invoke(); break;
case 1: ToastUI.Ins.Set(388); break;
case 2: ToastUI.Ins.Set(999900043); break;
case 3: ToastUI.Ins.Set(999900044); break;
case 4: ToastUI.Ins.Set(999900002); break;
}
}
else
Set_Coroutine(() => { Save_Farm_ShopBuy(id, _act); }, 2f);
},
fail =>
{
Set_Coroutine(() => { Save_Farm_ShopBuy(id, _act); }, 2f);
});
}
#endregion
#region

View File

@ -75,10 +75,13 @@ public class FarmShopCard : CardBase
void BuySuccess()
{
var sdata = ServerInfo.Ins.m_ServerData;
sdata.Add_Item(m_Tdata.n_ItemID, m_Tdata.n_ItemAmount);
sdata.Buy_FarmShopItem(m_FarmShopID, m_Tdata.n_GapTime);
ObtainItemUI.Ins.Set(new ItemSimpleData { itemid = m_Tdata.n_ItemID, amount = m_Tdata.n_ItemAmount });
FarmShopUI.Ins.Set();
ServerInfo.Ins.Save_Farm_ShopBuy(m_Tdata.n_FarmShopID, () =>
{
var sdata = ServerInfo.Ins.m_ServerData;
sdata.Add_Item(m_Tdata.n_ItemID, m_Tdata.n_ItemAmount);
sdata.Buy_FarmShopItem(m_FarmShopID, m_Tdata.n_GapTime);
ObtainItemUI.Ins.Set(new ItemSimpleData { itemid = m_Tdata.n_ItemID, amount = m_Tdata.n_ItemAmount });
FarmShopUI.Ins.Set();
});
}
}