Save_Farm_Harvest

This commit is contained in:
Ino 2025-07-25 16:48:45 +09:00
parent f22811bcff
commit f99d2e31ca
6 changed files with 185 additions and 83 deletions

View File

@ -2460,34 +2460,76 @@ handlers.Save_Farm_Harvest = function(args)
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 curSlot = urod.Farm.Slot.find(f => f.Slot === args.Slot);
if (!curSlot || (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 slotTime = new Date(curSlot.Time);
if (slotTime - Get_CurKoreaTime() > 0) return Get_Return(2);
var items = [];
var Tdata = Get_HarvestConfigTable().find(f => f.n_Grade === curSlot.Grade);
var EnchantData = Get_EnchantListTable().find(f => f.EnchantID === curSlot.EnchantID);
var majorSuccessRate = Get_FarmerValue("MajorSuccess");
var cropFailurePreventionRate = Get_FarmerValue("CropFailurePrevention");
var isMajorSuccess = Math.random() < majorSuccessRate;
var isFailHarvest = !isMajorSuccess && (Math.random() < cropFailurePreventionRate);
var totalAmount = 0;
var seedAmount = Get_GlobalValue_nValue("n_FarmPlantingSeedAmount");
for (var i = 0; i < seedAmount; i++)
{
var table = Get_MissionTable();
Use_Item(table, urod, seedid, needseed);
Use_Item(table, urod, args.EnchantID, 1);
totalAmount += Random.Range(Tdata.n_MinAmount, Tdata.n_MaxAmount + 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 });
if (Math.random() < cropFailurePreventionRate)
items.push({ itemid: curSlot.EnchantID, amount: 1 });
}
return Get_Return(3);
}
var harvestAmountUp = Get_FarmerValue("HarvestAmountUp");
totalAmount += parseInt(harvestAmountUp);
var goldFruitRate = Tdata.f_GoldFruitRate + Get_FarmerValue("HarvestAmountUp");
var statFruitRate = Tdata.f_StatFruitRate + Get_FarmerValue("StatFruitUp");
if (isMajorSuccess)
{
totalAmount = parseInt(totalAmount * 1.5);
goldFruitRate *= 1.5;
}
else if (isFailHarvest)
{
totalAmount = parseInt(totalAmount * 0.5);
goldFruitRate *= 0.5;
}
for (var i = 0; i < totalAmount; i++)
{
if (DSUtil.RandomTrue(goldFruitRate))
items.push({ itemid: 455, amount: 1 });
else if (DSUtil.RandomTrue(statFruitRate))
items.push({ itemid: EnchantData.n_FruitID, amount: 1 });
else
items.push({ itemid: Get_GlobalValue_nValue("n_FarmSeedID"), amount: 1 });
}
var table = Get_MissionTable();
var itemtable = Get_ItemTable();
for (var i = 0; i < items.length; i++)
Add_Item(table, itemtable, urod, items[i].itemid, items[i].amount);
// 슬롯 초기화
curSlot.Grade = 0;
curSlot.Time = Get_CurKoreaTime();
curSlot.EnchantID = 0;
Add_MissionCount(table, urod, "HARVESTING_CROPS_ACC", 0, 1);
Add_MissionCount(table, urod, "HARVESTING_CROPS_ALL", 0, 1);
Set_JsonUserData(urod);
return Get_Return(0, { Items: items });
};
/////////////////////////////////// 서버 처리
handlers.Write_UnityInApp = function(args)

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -3059,4 +3059,8 @@ public class SC_FarmSlotPlantSeedResult
public DateTime harvestTime;
public int grade;
}
public class SC_FarmSlotHarvestResult
{
public List<ItemSimpleData> Items;
}
#endregion

View File

@ -2375,6 +2375,42 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_Farm_PlantSeed(slot, enchantid, _act); }, 2f);
});
}
public void Save_Farm_Harvest(int slot, Action<SC_FarmSlotHarvestResult> _act)
{
NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
{
FunctionName = MethodBase.GetCurrentMethod().Name,
GeneratePlayStreamEvent = true,
FunctionParameter = new
{
Token = m_LoginInfo.EntityToken.EntityToken,
Slot = slot,
}
},
result =>
{
if (result.Error == null)
{
NetWait.Ins.Set(false);
var str_result = result.FunctionResult.ToString();
var error = MyErrorCheck(str_result);
// (0 성공, 1 실패 (작물 없음), 2 실패 (아직 시간 남음))
switch (error)
{
case 0: _act?.Invoke(JsonConvert.DeserializeObject<SC_FarmSlotHarvestResult>(str_result)); break;
case 1: ToastUI.Ins.Set(999900040); break;
case 2: ToastUI.Ins.Set(999900039); break;
}
}
else
Set_Coroutine(() => { Save_Farm_Harvest(slot, _act); }, 2f);
},
fail =>
{
Set_Coroutine(() => { Save_Farm_Harvest(slot, _act); }, 2f);
});
}
#endregion
#region

View File

@ -89,68 +89,88 @@ public class FarmSlotCard : CardBase
OnClick_Get();
}
}
public void OnClick_Get()
{
if (m_Data.Grade > 0)
{
List<ItemSimpleData> items = new List<ItemSimpleData>();
var sdata = ServerInfo.Ins.m_ServerData;
var Tdata = table_harvestconfig.Ins.Get_Data_orNull(m_Data.Grade);
var EnchantData = table_enchanlist.Ins.Get_Data_orNull(m_Data.EnchantID);
var ainfo = MyValue.Get_ActorStatInfoorNull(eRole.PC);
bool isMajorSuccess = DSUtil.RandomTrue(ainfo.Get_Stat(eStat.MajorSuccess));
bool FailHarvest = !isMajorSuccess && DSUtil.RandomTrue(0.1d - ainfo.Get_Stat(eStat.CropFailurePrevention));
var totalAmount = 0;
for (int i = 0; i < table_GlobalValue.Ins.Get_Int("n_FarmPlantingSeedAmount"); i++)
//if (m_Data.Grade > 0 && m_Data.Get_RemainSec() <= 0)
ServerInfo.Ins.Save_Farm_Harvest(m_Data.Slot, result =>
{
totalAmount += Random.Range(Tdata.n_MinAmount, Tdata.n_MaxAmount + 1);
if (DSUtil.RandomTrue(ainfo.Get_Stat(eStat.Reclaim_Used_Resources)))
items.Add(new ItemSimpleData { itemid = m_Data.EnchantID, amount = 1 });
}
totalAmount += (int)ainfo.Get_Stat(eStat.HarvestAmountUp);
var sdata = ServerInfo.Ins.m_ServerData;
var items = result.Items;
for (int i = 0; i < items.Count; i++)
sdata.Add_Item(items[i].itemid, items[i].amount);
var goldFruitRate = Tdata.f_GoldFruitRate + ainfo.Get_Stat(eStat.GoldFruitUp);
var statFruitRate = Tdata.f_StatFruitRate + ainfo.Get_Stat(eStat.StatFruitUp);
sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ACC);
sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ALL);
if (isMajorSuccess)
{
ToastUI.Ins.Set(427);
totalAmount = (int)(totalAmount * 1.5);
goldFruitRate *= 1.5f;
}
else if (FailHarvest)
{
ToastUI.Ins.Set(428);
totalAmount -= (int)(totalAmount * 0.5);
goldFruitRate *= 0.5f;
}
for (int i = 0; i < totalAmount; i++)
{
if (DSUtil.RandomTrue(goldFruitRate))
{ // 신비 열매로 변할 확률
items.Add(new ItemSimpleData { itemid = 455, amount = 1 });
}
else if (DSUtil.RandomTrue(statFruitRate))
{ // 스탯 열매로 변할 확률
items.Add(new ItemSimpleData { itemid = EnchantData.n_FruitID, amount = 1 });
}
else
items.Add(new ItemSimpleData { itemid = table_GlobalValue.Ins.Get_Int("n_FarmSeedID"), amount = 1 });
}
for (int i = 0; i < items.Count; i++)
sdata.Add_Item(items[i].itemid, items[i].amount);
sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ACC);
sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ALL);
ObtainItemUI.Ins.Set(items);
sdata.Set_FarmSlot(m_Data.Slot, 0, ServerInfo.ServerTime, 0);
FarmSlotUI.Ins.Set();
}
ObtainItemUI.Ins.Set(items);
sdata.Set_FarmSlot(m_Data.Slot, 0, ServerInfo.ServerTime, 0);
FarmSlotUI.Ins.Set();
});
}
// 클라 기반
//public void OnClick_Get()
//{
// if (m_Data.Grade > 0)
// {
// List<ItemSimpleData> items = new List<ItemSimpleData>();
// var sdata = ServerInfo.Ins.m_ServerData;
// var Tdata = table_harvestconfig.Ins.Get_Data_orNull(m_Data.Grade);
// var EnchantData = table_enchanlist.Ins.Get_Data_orNull(m_Data.EnchantID);
// var ainfo = MyValue.Get_ActorStatInfoorNull(eRole.PC);
// bool isMajorSuccess = DSUtil.RandomTrue(ainfo.Get_Stat(eStat.MajorSuccess));
// bool FailHarvest = !isMajorSuccess && DSUtil.RandomTrue(0.1d - ainfo.Get_Stat(eStat.CropFailurePrevention));
// var totalAmount = 0;
// for (int i = 0; i < table_GlobalValue.Ins.Get_Int("n_FarmPlantingSeedAmount"); i++)
// {
// totalAmount += Random.Range(Tdata.n_MinAmount, Tdata.n_MaxAmount + 1);
// if (DSUtil.RandomTrue(ainfo.Get_Stat(eStat.Reclaim_Used_Resources)))
// items.Add(new ItemSimpleData { itemid = m_Data.EnchantID, amount = 1 });
// }
// totalAmount += (int)ainfo.Get_Stat(eStat.HarvestAmountUp);
// var goldFruitRate = Tdata.f_GoldFruitRate + ainfo.Get_Stat(eStat.GoldFruitUp);
// var statFruitRate = Tdata.f_StatFruitRate + ainfo.Get_Stat(eStat.StatFruitUp);
// if (isMajorSuccess)
// {
// ToastUI.Ins.Set(427);
// totalAmount = (int)(totalAmount * 1.5);
// goldFruitRate *= 1.5f;
// }
// else if (FailHarvest)
// {
// ToastUI.Ins.Set(428);
// totalAmount -= (int)(totalAmount * 0.5);
// goldFruitRate *= 0.5f;
// }
// for (int i = 0; i < totalAmount; i++)
// {
// if (DSUtil.RandomTrue(goldFruitRate))
// { // 신비 열매로 변할 확률
// items.Add(new ItemSimpleData { itemid = 455, amount = 1 });
// }
// else if (DSUtil.RandomTrue(statFruitRate))
// { // 스탯 열매로 변할 확률
// items.Add(new ItemSimpleData { itemid = EnchantData.n_FruitID, amount = 1 });
// }
// else
// items.Add(new ItemSimpleData { itemid = table_GlobalValue.Ins.Get_Int("n_FarmSeedID"), amount = 1 });
// }
// for (int i = 0; i < items.Count; i++)
// sdata.Add_Item(items[i].itemid, items[i].amount);
// sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ACC);
// sdata.Add_MissionCount(ePurpose.HARVESTING_CROPS_ALL);
// ObtainItemUI.Ins.Set(items);
// sdata.Set_FarmSlot(m_Data.Slot, 0, ServerInfo.ServerTime, 0);
// FarmSlotUI.Ins.Set();
// }
//}
}