Save_Essence_Change

This commit is contained in:
Ino 2025-07-09 09:07:24 +09:00
parent 24b47064f3
commit 558441c187
4 changed files with 200 additions and 21 deletions

View File

@ -954,7 +954,7 @@ handlers.Save_PC_LimitSlotOptionChange = function(args)
var grade = Get_RandomGachaGrade(lv);
//log.info("등급 : " + grade);
// 랜덤백에서 아이템 id 얻기
var optionitemID = Get_RandomItemId(lsmc_data.n_DropIndex, grade);
var optionitemID = Get_RandomItem(lsmc_data.n_DropIndex, grade).itemid;
//log.info("랜덤백 ID : " + optionitemID);
// 인챈트그레이드에서 옵션 레벨 얻기
var olv = Get_OptionLv(grade);
@ -1455,7 +1455,7 @@ handlers.Save_Pet_Gacha = function(args)
var petlist = [];
for (let i = 0; i < amount; i++)
{
var petid = Get_RandomItemId(9000001, urod.PetData.GachaLv);
var petid = Get_RandomItem(9000001, urod.PetData.GachaLv).itemid;
petlist.push(petid);
Add_Item(table, itemtable, urod, petid, 1);
}
@ -1525,6 +1525,45 @@ handlers.Save_Pet_Equip = function(args)
Set_JsonUserData(urod);
return Get_Return(0);
}
handlers.Save_Essence_Change = 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();
if (Use_Item(table, urod, args.EssenceID, args.Amount))
{
var itemtable = Get_ItemTable();
var rewards = [];
var randombagid = Get_GlobalValue_nValue("n_EssenceRandomBagID");
var mileageid = Get_GlobalValue_nValue("n_EssenceMileageID");
var mileagevalue = itemtable.find(f=>f.n_ItemID == args.EssenceID).n_ItemValue;
for (var i = 0; i < args.Amount; i++)
{
var grade = Get_EssenceRateGrade(args.EssenceID);
var item = Get_RandomItem(randombagid, grade);
Add_Item(table, itemtable, urod, item.itemid, item.amount);
Add_Item(table, itemtable, urod, mileageid, mileagevalue); // 마일리지 축적
var temp = rewards.find(f=>f.itemid == item.itemid);
if (!temp)
rewards.push({ itemid: item.itemid, amount: item.amount });
else
temp.amount = Add_Amount(temp.amount, item.amount);
}
Add_MissionCount(table, urod, "ESSENCE_EXCHANGE", 0, args.Amount);
Add_MissionCount(table, urod, "ESSENCE_EXCHANGE_ACC", 0, args.Amount);
Set_JsonUserData(urod);
return Get_Return(0, { mileage : mileagevalue * args.Amount, items : rewards });
}
return Get_Return(1);
}
/////////////////////////////////// 서버 처리
handlers.Write_UnityInApp = function(args)
@ -13457,7 +13496,7 @@ function Get_RandomBagTable()
}
]
}
function Get_RandomItemId(dropIndex, grade) {
function Get_RandomItem(dropIndex, grade) {
var randombaTable = Get_RandomBagTable();
const items = randombaTable.filter(f =>
f.n_DropIndex == dropIndex && f.n_ItemGrade == grade
@ -13472,7 +13511,7 @@ function Get_RandomItemId(dropIndex, grade) {
let rand = Math.random() * total;
for (let i = 0; i < items.length; i++) {
if (rand < weights[i]) {
return items[i].n_ItemId;
return { itemid :items[i].n_ItemId, amount : items[i].n_DropCount };
}
rand -= weights[i];
}
@ -18506,6 +18545,95 @@ function Get_OptionConfigTable()
]
}
function Get_EssenceTable()
{
return [
{
"n_EssenceID": "2000001",
"f_Rate1": "0.48",
"f_Rate2": "0.37",
"f_Rate3": "0.12",
"f_Rate4": "0.03",
"f_Rate5": "0",
"f_Rate6": "0"
},
{
"n_EssenceID": "2000002",
"f_Rate1": "0.3",
"f_Rate2": "0.34",
"f_Rate3": "0.25",
"f_Rate4": "0.1",
"f_Rate5": "0.01",
"f_Rate6": "0"
},
{
"n_EssenceID": "2000003",
"f_Rate1": "0",
"f_Rate2": "0.3",
"f_Rate3": "0.45",
"f_Rate4": "0.2",
"f_Rate5": "0.05",
"f_Rate6": "0"
},
{
"n_EssenceID": "2000004",
"f_Rate1": "0",
"f_Rate2": "0.15",
"f_Rate3": "0.22",
"f_Rate4": "0.45",
"f_Rate5": "0.15",
"f_Rate6": "0.03"
},
{
"n_EssenceID": "2000005",
"f_Rate1": "0",
"f_Rate2": "0",
"f_Rate3": "0.1",
"f_Rate4": "0.15",
"f_Rate5": "0.55",
"f_Rate6": "0.2"
},
{
"n_EssenceID": "2000006",
"f_Rate1": "0",
"f_Rate2": "0",
"f_Rate3": "0",
"f_Rate4": "0.05",
"f_Rate5": "0.35",
"f_Rate6": "0.6"
}
]
}
function Get_EssenceRateGrade(id)
{
const table = Get_EssenceTable();
const data = table.find(f => f.n_EssenceID == id);
if (!data) return -1;
// 유효한 등급(rate > 0)만 뽑기
const rates = [];
for (let i = 1; i <= 6; i++) {
const key = `f_Rate${i}`;
const rate = parseFloat(data[key]);
if (rate > 0) {
rates.push({ grade: i, weight: rate });
}
}
// 총합
const totalWeight = rates.reduce((sum, r) => sum + r.weight, 0);
if (totalWeight <= 0) return -1;
// 랜덤 추첨
let rand = Math.random() * totalWeight;
for (let i = 0; i < rates.length; i++) {
if (rand < rates[i].weight) return rates[i].grade;
rand -= rates[i].weight;
}
return -1;
}
function Get_PlayOCoupons()
{
var poc = JSON.parse(server.GetTitleInternalData("PlayO").Data.PlayO);

View File

@ -2959,6 +2959,11 @@ public class SD_FarmSlot_Read
#endregion
#region
public class SC_Items
{
public int itemid, amount;
}
public class SC_PCStatInit
{
public int gem;
@ -2985,4 +2990,9 @@ public class SC_PetLvUpResult
{
public int usemat, usepet;
}
public class SC_EssenceExchangeResult
{
public int mileage;
public List<SC_Items> items;
}
#endregion

View File

@ -1825,6 +1825,43 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_Pet_Equip(petid, _act); }, 2f);
});
}
public void Save_Essence_Change(int essenceID, int amount, Action<SC_EssenceExchangeResult> _act)
{
NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{
FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true,
FunctionParameter = new
{
Token = m_LoginInfo.EntityToken.EntityToken,
EssenceID = essenceID,
Amount = amount,
}
},
result =>
{
if (result.Error == null)
{
NetWait.Ins.Set(false);
var str_result = result.FunctionResult.ToString();
var error = MyErrorCheck(str_result);
// (0 성공, 1 실패 (정수 갯수 부족))
switch (error)
{
case 0: _act?.Invoke(JsonConvert.DeserializeObject<SC_EssenceExchangeResult>(str_result)); break;
case 1: ToastUI.Ins.Set(388); break;
}
}
else
Set_Coroutine(() => { Save_Essence_Change(essenceID, amount, _act); }, 2f);
},
fail =>
{
Set_Coroutine(() => { Save_Essence_Change(essenceID, amount, _act); }, 2f);
});
}
#endregion
#region

View File

@ -61,24 +61,28 @@ public class CollectionEssenceUI_Right : uScrollViewMgr
var Tdata = Get_SelectTData();
if (sdata.Check_ItemAmount(Tdata.n_EssenceID, m_UseAmount))
{
sdata.Add_MissionCount(ePurpose.ESSENCE_EXCHANGE, 0, m_UseAmount);
sdata.Add_MissionCount(ePurpose.ESSENCE_EXCHANGE_ACC, 0, m_UseAmount);
sdata.Use_Item(Tdata.n_EssenceID, m_UseAmount);
List<ItemSimpleData> list_reward = new List<ItemSimpleData>();
var randombagid = table_GlobalValue.Ins.Get_Int("n_EssenceRandomBagID");
var mileageid = table_GlobalValue.Ins.Get_Int("n_EssenceMileageID");
for (int i = 0; i < m_UseAmount; i++)
ServerInfo.Ins.Save_Essence_Change(Tdata.n_EssenceID, m_UseAmount, result =>
{
var grade = DSUtil.Get_RandomIndex(Tdata.list_rate) + 1;
var item = table_randombag.Ins.Get_RandomItemData(randombagid, grade);
list_reward.Add(new ItemSimpleData { itemid = item.itemid, amount = item.amount });
sdata.Add_Item(item.itemid, item.amount);
sdata.Add_Item(mileageid, table_itemlist.Ins.Get_Data(Tdata.n_EssenceID).n_ItemValue); // 마일리지 축적
}
ObtainItemUI.Ins.Set(list_reward);
m_SelectCard.Set_UI();
Set_UI();
CollectionEssenceUI_Left.Ins.Set();
sdata.Use_Item(Tdata.n_EssenceID, m_UseAmount);
var mileageid = table_GlobalValue.Ins.Get_Int("n_EssenceMileageID");
List<ItemSimpleData> list_reward = new List<ItemSimpleData>();
list_reward.Add(new ItemSimpleData { itemid = mileageid, amount = result.mileage });
for (int i = 0; i < result.items.Count; i++)
{
sdata.Add_Item(result.items[i].itemid, result.items[i].amount);
list_reward.Add(new ItemSimpleData { itemid = result.items[i].itemid, amount = result.items[i].amount });
}
sdata.Add_Item(mileageid, result.mileage);
sdata.Add_MissionCount(ePurpose.ESSENCE_EXCHANGE, 0, m_UseAmount);
sdata.Add_MissionCount(ePurpose.ESSENCE_EXCHANGE_ACC, 0, m_UseAmount);
ObtainItemUI.Ins.Set(list_reward);
m_SelectCard.Set_UI();
Set_UI();
CollectionEssenceUI_Left.Ins.Set();
});
}
}
}