Save_Farm_PlantSeed

This commit is contained in:
Ino 2025-07-25 12:53:30 +09:00
parent 97fb4975bb
commit 32d7b78185
10 changed files with 392 additions and 16 deletions

View File

@ -28,6 +28,7 @@ public class GetServerTables
Get_ServerTable("ClassConfig", new List<string> { "s_AnimationController", "s_JobIcon", "s_WeaponLHPrefab", "n_WeaponLHIndex", "s_WeaponRHPrefab", "n_WeaponRHIndex", "e_BattleType", "f_Scale", "f_AttackRange", "f_AttackSPD", "f_MoveSPD", "e_MainStatType", "n_DefaultHP", "n_DefaultMP", "n_ExtraSkill", "n_AcquiredSkill1", "n_AcquiredSkill2", "n_AcquiredSkill3" });
Get_ServerTable("BreakingLimit", new List<string> { "f_Monster_DMG_Multiplier", "f_Boss_DMG_Multiplier", "f_ALL_STAT_Multiplier" });
Get_ServerTable("ShopItemList", new List<string> { "n_ShopTab", "n_TabName", "exception", "n_ShopSubTab", "n_SubTabName", "s_Banner" });
Get_ServerTable("FarmerList", new List<string> { "s_Prefab" });
}
static void Get_ServerTable(string path, List<string> except)

View File

@ -2403,6 +2403,42 @@ handlers.Save_Buff = function(args)
}
return Get_Return(1);
}
handlers.Save_Farm_PlantSeed = 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 curSlot = urod.Farm.Slot.find(f=>f.Slot == args.Slot);
if (curSlot.Slot > urod.Farm.MaxSlot) return Get_Return(2);
if (curSlot.Time > 0 || curSlot.Grade > 0 || curSlot.EnchantID > 0) return Get_Return(1);
var seedid = Get_GlobalValue_nValue("n_FarmSeedID");
var needseed = Get_GlobalValue_nValue("n_FarmPlantingSeedAmount");
if (Check_ItemAmount(urod, seedid, needseed) && Check_ItemAmount(urod, args.EnchantID, 1))
{
var table = Get_MissionTable();
Use_Item(table, urod, seedid, needseed);
Use_Item(table, urod, args.EnchantID, 1);
var harvestdata = Get_RandomHarvestData();
var farmerval = Get_FarmerValue(urod, "ReduceHarvestTime");
var harvestTime = harvestdata.n_HarvestTime - harvestdata.n_HarvestTime * farmerval;
curSlot.Grade = harvestdata.n_Grade;
curSlot.Time = Math.round(harvestTime * 1000) / 1000;
curSlot.EnchantID = args.EnchantID;
Add_MissionCount(table, urod, "PLANTING_CROPS_GRADE_ALL", 0, 1);
Add_MissionCount(table, urod, "PLANTING_CROPS_GRADE_ACC", harvestdata.n_Grade, 1);
Set_JsonUserData(urod);
return Get_Return(0, { harvestTime : harvestTime, grade : harvestdata.n_Grade });
}
return Get_Return(3);
}
/////////////////////////////////// 서버 처리
handlers.Write_UnityInApp = function(args)
@ -23050,6 +23086,87 @@ function Get_WorkerTable()
]
}
function Get_FarmerTable()
{
return [
{
"n_FarmerID": "60001",
"e_FarmerStat": "StatFruitUp",
"f_StatValue": "0.25"
},
{
"n_FarmerID": "60002",
"e_FarmerStat": "ReduceHarvestTime",
"f_StatValue": "0.1"
},
{
"n_FarmerID": "60003",
"e_FarmerStat": "HarvestAmountUp",
"f_StatValue": "1"
},
{
"n_FarmerID": "60004",
"e_FarmerStat": "ReduceShopPrice",
"f_StatValue": "0.1"
},
{
"n_FarmerID": "60005",
"e_FarmerStat": "GoldFruitUp",
"f_StatValue": "0.01"
},
{
"n_FarmerID": "60006",
"e_FarmerStat": "MajorSuccess",
"f_StatValue": "0.05"
},
{
"n_FarmerID": "60007",
"e_FarmerStat": "MajorSuccess",
"f_StatValue": "0.03"
},
{
"n_FarmerID": "60008",
"e_FarmerStat": "MajorSuccess",
"f_StatValue": "0.01"
},
{
"n_FarmerID": "60009",
"e_FarmerStat": "CropFailurePrevention",
"f_StatValue": "0.05"
},
{
"n_FarmerID": "60010",
"e_FarmerStat": "CropFailurePrevention",
"f_StatValue": "0.03"
},
{
"n_FarmerID": "60011",
"e_FarmerStat": "CropFailurePrevention",
"f_StatValue": "0.01"
},
{
"n_FarmerID": "60012",
"e_FarmerStat": "Reduction_in_Immediate_Harvest_Cost",
"f_StatValue": "0.1"
},
{
"n_FarmerID": "60013",
"e_FarmerStat": "Reclaim_Used_Resources",
"f_StatValue": "0.05"
}
]
}
function Get_FarmerValue(urod, option)
{
var farmerlst = Get_FarmerTable().filter(f=>f.e_FarmerStat == option);
var val = 0;
for (var i = 0; i < farmerlst.length; ++i)
{
if (IsObtainItem(urod, farmerlst[i].n_FarmerID))
val = Add_Amount(val, farmerlst[i].f_StatValue);
}
return val;
}
function Get_FarmShopTable()
{
return [
@ -23265,6 +23382,113 @@ function Get_FarmShopTable()
}
]
}
function Get_HarvestConfigTable()
{
return [
{
"n_Grade": "1",
"f_Rate": "0.14",
"n_HarvestTime": "600",
"n_MinAmount": "1",
"n_MaxAmount": "1",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0"
},
{
"n_Grade": "2",
"f_Rate": "0.13",
"n_HarvestTime": "700",
"n_MinAmount": "1",
"n_MaxAmount": "2",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.001"
},
{
"n_Grade": "3",
"f_Rate": "0.12",
"n_HarvestTime": "800",
"n_MinAmount": "2",
"n_MaxAmount": "2",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.003"
},
{
"n_Grade": "4",
"f_Rate": "0.12",
"n_HarvestTime": "900",
"n_MinAmount": "2",
"n_MaxAmount": "3",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.005"
},
{
"n_Grade": "5",
"f_Rate": "0.11",
"n_HarvestTime": "1000",
"n_MinAmount": "3",
"n_MaxAmount": "4",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.007"
},
{
"n_Grade": "6",
"f_Rate": "0.11",
"n_HarvestTime": "1100",
"n_MinAmount": "3",
"n_MaxAmount": "5",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.01"
},
{
"n_Grade": "7",
"f_Rate": "0.1",
"n_HarvestTime": "1200",
"n_MinAmount": "4",
"n_MaxAmount": "6",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.015"
},
{
"n_Grade": "8",
"f_Rate": "0.09",
"n_HarvestTime": "1300",
"n_MinAmount": "4",
"n_MaxAmount": "7",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.02"
},
{
"n_Grade": "9",
"f_Rate": "0.08",
"n_HarvestTime": "1400",
"n_MinAmount": "5",
"n_MaxAmount": "8",
"f_StatFruitRate": "0.25",
"f_GoldFruitRate": "0.03"
}
]
}
function Get_RandomHarvestData()
{
const table = Get_HarvestConfigTable();
// f_Rate > 0 인 항목만 사용
const rates = table
.map(row => ({ data: row, weight: parseFloat(row.f_Rate) }))
.filter(r => r.weight > 0);
const totalWeight = rates.reduce((sum, r) => sum + r.weight, 0);
if (totalWeight <= 0) return null;
let rand = Math.random() * totalWeight;
for (const entry of rates) {
if (rand < entry.weight)
return entry.data;
rand -= entry.weight;
}
return null;
}
function Get_ShopItemTable()
{
@ -24256,6 +24480,17 @@ function Get_ShopItemTable()

View File

@ -1 +1 @@
[{"n_Grade": "1", "f_Rate": "0.14", "n_HarvestTime": "5", "n_MinAmount": "1", "n_MaxAmount": "1", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0"}, {"n_Grade": "2", "f_Rate": "0.13", "n_HarvestTime": "5", "n_MinAmount": "1", "n_MaxAmount": "2", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.001"}, {"n_Grade": "3", "f_Rate": "0.12", "n_HarvestTime": "5", "n_MinAmount": "2", "n_MaxAmount": "2", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.003"}, {"n_Grade": "4", "f_Rate": "0.12", "n_HarvestTime": "5", "n_MinAmount": "2", "n_MaxAmount": "3", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.005"}, {"n_Grade": "5", "f_Rate": "0.11", "n_HarvestTime": "5", "n_MinAmount": "3", "n_MaxAmount": "4", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.007"}, {"n_Grade": "6", "f_Rate": "0.11", "n_HarvestTime": "5", "n_MinAmount": "3", "n_MaxAmount": "5", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.01"}, {"n_Grade": "7", "f_Rate": "0.1", "n_HarvestTime": "5", "n_MinAmount": "4", "n_MaxAmount": "6", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.015"}, {"n_Grade": "8", "f_Rate": "0.09", "n_HarvestTime": "5", "n_MinAmount": "4", "n_MaxAmount": "7", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.02"}, {"n_Grade": "9", "f_Rate": "0.08", "n_HarvestTime": "5", "n_MinAmount": "5", "n_MaxAmount": "8", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.03"}]
[{"n_Grade": "1", "f_Rate": "0.14", "n_HarvestTime": "600", "n_MinAmount": "1", "n_MaxAmount": "1", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0"}, {"n_Grade": "2", "f_Rate": "0.13", "n_HarvestTime": "700", "n_MinAmount": "1", "n_MaxAmount": "2", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.001"}, {"n_Grade": "3", "f_Rate": "0.12", "n_HarvestTime": "800", "n_MinAmount": "2", "n_MaxAmount": "2", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.003"}, {"n_Grade": "4", "f_Rate": "0.12", "n_HarvestTime": "900", "n_MinAmount": "2", "n_MaxAmount": "3", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.005"}, {"n_Grade": "5", "f_Rate": "0.11", "n_HarvestTime": "1000", "n_MinAmount": "3", "n_MaxAmount": "4", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.007"}, {"n_Grade": "6", "f_Rate": "0.11", "n_HarvestTime": "1100", "n_MinAmount": "3", "n_MaxAmount": "5", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.01"}, {"n_Grade": "7", "f_Rate": "0.1", "n_HarvestTime": "1200", "n_MinAmount": "4", "n_MaxAmount": "6", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.015"}, {"n_Grade": "8", "f_Rate": "0.09", "n_HarvestTime": "1300", "n_MinAmount": "4", "n_MaxAmount": "7", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.02"}, {"n_Grade": "9", "f_Rate": "0.08", "n_HarvestTime": "1400", "n_MinAmount": "5", "n_MaxAmount": "8", "f_StatFruitRate": "0.25", "f_GoldFruitRate": "0.03"}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,67 @@
[
{
"n_FarmerID": "60001",
"e_FarmerStat": "StatFruitUp",
"f_StatValue": "0.25"
},
{
"n_FarmerID": "60002",
"e_FarmerStat": "ReduceHarvestTime",
"f_StatValue": "0.1"
},
{
"n_FarmerID": "60003",
"e_FarmerStat": "HarvestAmountUp",
"f_StatValue": "1"
},
{
"n_FarmerID": "60004",
"e_FarmerStat": "ReduceShopPrice",
"f_StatValue": "0.1"
},
{
"n_FarmerID": "60005",
"e_FarmerStat": "GoldFruitUp",
"f_StatValue": "0.01"
},
{
"n_FarmerID": "60006",
"e_FarmerStat": "MajorSuccess",
"f_StatValue": "0.05"
},
{
"n_FarmerID": "60007",
"e_FarmerStat": "MajorSuccess",
"f_StatValue": "0.03"
},
{
"n_FarmerID": "60008",
"e_FarmerStat": "MajorSuccess",
"f_StatValue": "0.01"
},
{
"n_FarmerID": "60009",
"e_FarmerStat": "CropFailurePrevention",
"f_StatValue": "0.05"
},
{
"n_FarmerID": "60010",
"e_FarmerStat": "CropFailurePrevention",
"f_StatValue": "0.03"
},
{
"n_FarmerID": "60011",
"e_FarmerStat": "CropFailurePrevention",
"f_StatValue": "0.01"
},
{
"n_FarmerID": "60012",
"e_FarmerStat": "Reduction_in_Immediate_Harvest_Cost",
"f_StatValue": "0.1"
},
{
"n_FarmerID": "60013",
"e_FarmerStat": "Reclaim_Used_Resources",
"f_StatValue": "0.05"
}
]

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ed129b793162ed444bdc2b2bc0e13ddd
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -3080,4 +3080,9 @@ public class SC_GachaResult
public int useticketamount, usegemamount;
public List<int> gacha;
}
public class SC_FarmSlotPlantSeedResult
{
public double harvestTime;
public int grade;
}
#endregion

View File

@ -2337,6 +2337,44 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_Buff(index, _act); }, 2f);
});
}
public void Save_Farm_PlantSeed(int slot, int enchantid, Action<SC_FarmSlotPlantSeedResult> _act)
{
NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{
FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true,
FunctionParameter = new
{
Token = m_LoginInfo.EntityToken.EntityToken,
Slot = slot,
EnchantID = enchantid,
}
},
result =>
{
if (result.Error == null)
{
NetWait.Ins.Set(false);
var str_result = result.FunctionResult.ToString();
var error = MyErrorCheck(str_result);
// (0 성공, 1 실패(빈 슬롯 아님), 2 실패 (열린 슬롯 아님), 3 실패 (재화 부족))
switch (error)
{
case 0: _act?.Invoke(JsonConvert.DeserializeObject<SC_FarmSlotPlantSeedResult>(str_result)); break;
case 1: ToastUI.Ins.Set(999900038); break;
case 2: ToastUI.Ins.Set(999900012); break;
case 3: ToastUI.Ins.Set(388); break;
}
}
else
Set_Coroutine(() => { Save_Farm_PlantSeed(slot, enchantid, _act); }, 2f);
},
fail =>
{
Set_Coroutine(() => { Save_Farm_PlantSeed(slot, enchantid, _act); }, 2f);
});
}
#endregion
#region

View File

@ -52,25 +52,48 @@ public class FarmSelectEnchantCard : CardBase
var needamount = table_GlobalValue.Ins.Get_Int("n_FarmPlantingSeedAmount");
if (sdata.Check_ItemAmount(seedid, needamount) && sdata.Check_ItemAmount(m_Data.n_EnchantID, 1))
{
sdata.Use_Item(seedid, needamount);
sdata.Use_Item(m_Data.n_EnchantID, 1);
// 농장 슬롯에 등급과 시간 추가
var slotdata = FarmSelectEnchantUI.Ins.Get_SlotData();
var Tdata = table_harvestconfig.Ins.Get_RandomData();
var ainfo = MyValue.Get_ActorStatInfoorNull(eRole.PC, false);
var harvestTime = Tdata.n_HarvestTime - Tdata.n_HarvestTime * ainfo.Get_Stat(eStat.ReduceHarvestTime);
ServerInfo.Ins.Save_Farm_PlantSeed(slotdata.Slot, m_Data.n_EnchantID, result =>
{
sdata.Use_Item(seedid, needamount);
sdata.Use_Item(m_Data.n_EnchantID, 1);
sdata.Set_FarmSlot(slotdata.Slot, Tdata.n_Grade, harvestTime, m_Data.n_EnchantID);
sdata.Set_FarmSlot(slotdata.Slot, result.grade, result.harvestTime, m_Data.n_EnchantID);
var itemData = table_itemlist.Ins.Get_Data(seedid);
sdata.Add_MissionCount(ePurpose.PLANTING_CROPS_GRADE_ALL);
sdata.Add_MissionCount(ePurpose.PLANTING_CROPS_GRADE_ACC, itemData.n_ItemGrade);
sdata.Add_MissionCount(ePurpose.PLANTING_CROPS_GRADE_ALL);
sdata.Add_MissionCount(ePurpose.PLANTING_CROPS_GRADE_ACC, result.grade);
FarmSlotUI.Ins.Set();
ToastUI.Ins.Set(165);
FarmSlotUI.Ins.Set();
ToastUI.Ins.Set(165);
FarmSlotUI.Ins.m_FarmSelectEnchantUI.Set_UI();
});
}
FarmSlotUI.Ins.m_FarmSelectEnchantUI.Set_UI();
return;
// 클라 기반
//var sdata = ServerInfo.Ins.m_ServerData;
//var seedid = table_GlobalValue.Ins.Get_Int("n_FarmSeedID");
//var needamount = table_GlobalValue.Ins.Get_Int("n_FarmPlantingSeedAmount");
//if (sdata.Check_ItemAmount(seedid, needamount) && sdata.Check_ItemAmount(m_Data.n_EnchantID, 1))
//{
// sdata.Use_Item(seedid, needamount);
// sdata.Use_Item(m_Data.n_EnchantID, 1);
// // 농장 슬롯에 등급과 시간 추가
// var slotdata = FarmSelectEnchantUI.Ins.Get_SlotData();
// var Tdata = table_harvestconfig.Ins.Get_RandomData();
// var ainfo = MyValue.Get_ActorStatInfoorNull(eRole.PC, false);
// var harvestTime = Tdata.n_HarvestTime - Tdata.n_HarvestTime * ainfo.Get_Stat(eStat.ReduceHarvestTime);
// sdata.Set_FarmSlot(slotdata.Slot, Tdata.n_Grade, harvestTime, m_Data.n_EnchantID);
// sdata.Add_MissionCount(ePurpose.PLANTING_CROPS_GRADE_ALL);
// sdata.Add_MissionCount(ePurpose.PLANTING_CROPS_GRADE_ACC, Tdata.n_Grade);
// FarmSlotUI.Ins.Set();
// ToastUI.Ins.Set(165);
//}
//FarmSlotUI.Ins.m_FarmSelectEnchantUI.Set_UI();
}
}