초월 옵션 완료

This commit is contained in:
Ino 2025-08-01 03:01:47 +09:00
parent 0557afa477
commit c5c698f504
9 changed files with 78 additions and 37 deletions

View File

@ -868,10 +868,8 @@ handlers.Save_PC_MenuBack = function(args)
if (IsObtainItem(urod, args.JobID)) if (IsObtainItem(urod, args.JobID))
urod.Equip.Equip["PC"] = args.JobID; urod.Equip.Equip["PC"] = args.JobID;
// 초월 프리셋 // 초월
urod.Equip.LimitPreset = args.Preset; urod.Equip.LimitPreset = args.LimitSlotData.SelectPreset;
// 초월 옵션
var rtnlimitslot = {}; var rtnlimitslot = {};
rtnlimitslot.limitslotoption = Set_LimitSlotOption(table, urod, args); rtnlimitslot.limitslotoption = Set_LimitSlotOption(table, urod, args);
if (CheckNullOrEmpty(rtnlimitslot.limitslotoption)) if (CheckNullOrEmpty(rtnlimitslot.limitslotoption))
@ -1156,7 +1154,12 @@ function Make_LimitBreakOption(urod)
{ {
var grade = Get_RandomGachaGrade(lv); var grade = Get_RandomGachaGrade(lv);
var rdnItem = Get_RandomItem(lsmc_data.n_DropIndex, grade); var rdnItem = Get_RandomItem(lsmc_data.n_DropIndex, grade);
//if (rdnItem == null) log.info(lsmc_data.n_DropIndex + " " + grade); /*if (CheckNullOrEmpty(rdnItem))
{
--j;
log.info("초월 레벨 : " + lv + ", dropindex : " + lsmc_data.n_DropIndex + ", 등급 : " + grade);
continue;
}*/
var optionitemID = rdnItem.itemid; var optionitemID = rdnItem.itemid;
var olv = Get_OptionLv(grade); var olv = Get_OptionLv(grade);
urod.LimitBreakOption.Option[i + 1].push({ id : optionitemID, lv : olv }); urod.LimitBreakOption.Option[i + 1].push({ id : optionitemID, lv : olv });
@ -1203,13 +1206,14 @@ handlers.Save_PC_LimitLvUp = function(args)
} }
function Set_LimitSlotOption(table, urod, args, makeoption = false) function Set_LimitSlotOption(table, urod, args, makeoption = false)
{ {
if (Use_Item(table, urod, Get_GlobalValue_nValue("n_BreakingLimitSlotMaterialID"), args.LimitSlotData.Price)) var count = args.LimitSlotData.Count;
if (count < 510 && Use_Item(table, urod, Get_GlobalValue_nValue("n_BreakingLimitSlotMaterialID"), args.LimitSlotData.Price))
{ {
urod.LimitSlot = args.LimitSlotData.LimitSlot; urod.LimitSlot = args.LimitSlotData.LimitSlot;
if (makeoption) Make_LimitBreakOption(urod); if (makeoption) Make_LimitBreakOption(urod);
Add_MissionCount(table, urod, "HERO_OPTION_CHANGE", 0, args.LimitSlotData.Count, false); Add_MissionCount(table, urod, "HERO_OPTION_CHANGE", 0, count, false);
Add_MissionCount(table, urod, "HERO_OPTION_CHANGE_ACC", 0, args.LimitSlotData.Count, false); Add_MissionCount(table, urod, "HERO_OPTION_CHANGE_ACC", 0, count, false);
return null; return null;
} }
return urod.LimitSlot; return urod.LimitSlot;
@ -1223,10 +1227,24 @@ handlers.Save_PC_LimitSlotOption = function(args)
var urod = Get_JsonUserData(readonlydata); var urod = Get_JsonUserData(readonlydata);
var table = Get_MissionTable(); var table = Get_MissionTable();
urod.Equip.LimitPreset = args.LimitSlotData.SelectPreset;
var rtnlimitslot = {};
rtnlimitslot.limitslotoption = Set_LimitSlotOption(table, urod, args, true);
if (CheckNullOrEmpty(rtnlimitslot.limitslotoption))
{
rtnlimitslot.success = true;
Set_JsonUserData(urod);
}
else
{
rtnlimitslot.success = false;
rtnlimitslot.limitpreset = urod.LimitBreakOption.Preset;
rtnlimitslot.matID = Get_GlobalValue_nValue("n_BreakingLimitSlotMaterialID");
rtnlimitslot.curAmount = Get_ItemAmount(urod, rtnlimitslot.matID);
}
Set_LimitSlotOption(table, urod, args, true); return Get_Return(0, { option : urod.LimitBreakOption, limitslot : rtnlimitslot });
Set_JsonUserData(urod);
return Get_Return(0, { option : urod.LimitBreakOption });
} }
handlers.Save_PC_LimitSlotOptionChange = function(args) handlers.Save_PC_LimitSlotOptionChange = function(args)
{ {

View File

@ -3187,6 +3187,7 @@ public class SC_FarmSlotHarvestResult
public class SC_LimitBreakLvUpResult public class SC_LimitBreakLvUpResult
{ {
public SD_LimitBreakOption option; public SD_LimitBreakOption option;
public SC_LimitSlotData limitslot;
} }
#endregion #endregion

View File

@ -859,8 +859,8 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_StageResult(_act); }, 2f); Set_Coroutine(() => { Save_StageResult(_act); }, 2f);
}); });
} }
public void Save_PC_MenuBack(int costumeid, int workerid, int jobid, int preset, public void Save_PC_MenuBack(int costumeid, int workerid, int jobid, CS_AwakenData awakenData,
CS_AwakenData awakenData, LimitSlotChangeData limitslotData, Action<SC_PCMenuBackResult> _act) LimitSlotChangeData limitslotData, Action<SC_PCMenuBackResult> _act)
{ {
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
@ -873,7 +873,6 @@ public class ServerInfo : MyCoroutine
CostumeID = costumeid, CostumeID = costumeid,
WorkerID = workerid, WorkerID = workerid,
JobID = jobid, JobID = jobid,
Preset = preset,
AwakenData = awakenData, AwakenData = awakenData,
LimitSlotData = limitslotData LimitSlotData = limitslotData
} }
@ -895,11 +894,11 @@ public class ServerInfo : MyCoroutine
} }
} }
else else
Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, preset, awakenData, limitslotData, _act); }, 2f); Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, awakenData, limitslotData, _act); }, 2f);
}, },
fail => fail =>
{ {
Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, preset, awakenData, limitslotData, _act); }, 2f); Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, awakenData, limitslotData, _act); }, 2f);
}); });
} }
@ -1130,7 +1129,7 @@ public class ServerInfo : MyCoroutine
Set_Coroutine(() => { Save_PC_LimitLvUp(_act); }, 2f); Set_Coroutine(() => { Save_PC_LimitLvUp(_act); }, 2f);
}); });
} }
public void Save_PC_LimitSlotOption(LimitSlotChangeData limitslotData, Action _act) public void Save_PC_LimitSlotOption(LimitSlotChangeData limitslotData, Action<SC_LimitBreakLvUpResult> _act)
{ {
NetWait.Ins.Set(true); NetWait.Ins.Set(true);
var lsd = limitslotData.Get(); var lsd = limitslotData.Get();
@ -1152,11 +1151,7 @@ public class ServerInfo : MyCoroutine
var str_result = result.FunctionResult.ToString(); var str_result = result.FunctionResult.ToString();
var error = MyErrorCheck(str_result); var error = MyErrorCheck(str_result);
if (error == 0) if (error == 0)
{ _act(JsonConvert.DeserializeObject<SC_LimitBreakLvUpResult>(str_result));
var option = JsonConvert.DeserializeObject<SC_LimitBreakLvUpResult>(str_result);
m_ServerData.LimitBreakOption = option.option;
_act();
}
else else
{ {
ToastUI.Ins.Set(174, "데이터 없음"); ToastUI.Ins.Set(174, "데이터 없음");

View File

@ -76,9 +76,10 @@ public class table_enchantgradeconfig : table_missionbase
var lst = Get_DataList(); var lst = Get_DataList();
for (int i = 0; i < lst.Count; i++) for (int i = 0; i < lst.Count; i++)
{ {
if (lst[i].n_OptionLevelMax > lv) if (lv >= lst[i].n_OptionLevelMin && lv <= lst[i].n_OptionLevelMax)
return lst[i]; return lst[i];
} }
return lst[0]; return lst[0];
} }
public List<EnchantGradeConfigTableData> Get_DataList() { return tableDatas; } public List<EnchantGradeConfigTableData> Get_DataList() { return tableDatas; }

View File

@ -45,7 +45,7 @@ public class PCLimitSlotCard : CardBase
var gradecolor = table_enchantgradeconfig.Ins.Get_Data(m_Grade).GradeColor; var gradecolor = table_enchantgradeconfig.Ins.Get_Data(m_Grade).GradeColor;
images[0].color = gradecolor; images[0].color = gradecolor;
texts[0].text = MyText.Get_StatNameValueText(Tdata.e_OptionType, Tdata.Get_Value(m_SData.Lv)); texts[0].text = MyText.Get_StatNameValueText(Tdata.e_OptionType, Tdata.Get_Value(m_SData.Lv));
texts[1].text = "??"; texts[1].text = m_Grade.ToString();
} }
} }

View File

@ -14,8 +14,6 @@ public class PCLimitUI : PCUIMenu
m_PCLimit_Center.Set(); m_PCLimit_Center.Set();
m_PCLimitUI_Right.Set(); m_PCLimitUI_Right.Set();
m_PCLimitUI_Right.m_LimitSlotChangeData.Init(true); m_PCLimitUI_Right.m_LimitSlotChangeData.Init();
if (NewGameUI.Ins.m_PCUI.Get_EnterID(eItem.Preset) == 0)
NewGameUI.Ins.m_PCUI.Set_EnterID(eItem.Preset, ServerInfo.Ins.m_ServerData.Equip.LimitPreset);
} }
} }

View File

@ -10,12 +10,14 @@ public class LimitSlotChangeData
// 아래는 서버에 전송할 데이터 // 아래는 서버에 전송할 데이터
public List<int> Preset; public List<int> Preset;
public Dictionary<string, List<SD_PCLimitSlotData_Read>> LimitSlot = new Dictionary<string, List<SD_PCLimitSlotData_Read>>(); public Dictionary<string, List<SD_PCLimitSlotData_Read>> LimitSlot = new Dictionary<string, List<SD_PCLimitSlotData_Read>>();
public int Price, Count; public int SelectPreset, Price, Count;
public void Init(bool copydata) public void Init()
{ {
var sdata = ServerInfo.Ins.m_ServerData;
TotalPrice = 0; TotalPrice.RandomizeCryptoKey(); TotalPrice = 0; TotalPrice.RandomizeCryptoKey();
MissionCount = 0; MissionCount.RandomizeCryptoKey(); MissionCount = 0; MissionCount.RandomizeCryptoKey();
SelectPreset = sdata.Equip.LimitPreset;
Copy_ServerLimitSlot(); Copy_ServerLimitSlot();
} }
void Copy_ServerLimitSlot() void Copy_ServerLimitSlot()
@ -32,9 +34,11 @@ public class LimitSlotChangeData
} }
public LimitSlotChangeData Get() public LimitSlotChangeData Get()
{ {
var sdata = ServerInfo.Ins.m_ServerData;
Price = TotalPrice; Price = TotalPrice;
Count = MissionCount; Count = MissionCount;
Preset = ServerInfo.Ins.m_ServerData.LimitBreakOption.Preset; SelectPreset = sdata.Equip.LimitPreset;
Preset = sdata.LimitBreakOption.Preset;
Copy_ServerLimitSlot(); Copy_ServerLimitSlot();
return this; return this;
} }
@ -42,6 +46,8 @@ public class LimitSlotChangeData
public bool IsChangeLimitSlot() public bool IsChangeLimitSlot()
{ {
if (TotalPrice > 0) return true; if (TotalPrice > 0) return true;
var sdata = ServerInfo.Ins.m_ServerData;
if (SelectPreset != sdata.Equip.LimitPreset) return true;
var currentSlotData = ServerInfo.Ins.m_ServerData.LimitSlot; var currentSlotData = ServerInfo.Ins.m_ServerData.LimitSlot;
foreach (var pair in currentSlotData) foreach (var pair in currentSlotData)
@ -205,11 +211,35 @@ public class PCLimitUI_Right : uScrollViewMgr
{ {
Btn_Change.ControlPress(false); Btn_Change.ControlPress(false);
ServerInfo.Ins.Save_PC_LimitSlotOption(changeData, ServerInfo.Ins.Save_PC_LimitSlotOption(changeData,
() => result =>
{ {
ChangeOption = false; ChangeOption = false;
Btn_Change.ControlPress(true); Btn_Change.ControlPress(true);
changeData.Init(false);
if (result.limitslot.success)
{
sdata.LimitBreakOption = result.option;
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE, 0, changeData.Get_MissionCount());
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC, 0, changeData.Get_MissionCount());
}
else
{
sdata.LimitBreakOption.Preset = result.limitslot.limitpreset;
foreach (var item in result.limitslot.limitslotoption)
{
sdata.LimitSlot[item.Key].Clear();
for (int i = 0; i < item.Value.Count; i++)
sdata.LimitSlot[item.Key].Add(item.Value[i].Get());
}
MyValue.Get_ActorStatInfoorNull(eRole.PC);
sdata.Set_Item(result.limitslot.matID, result.limitslot.curAmount);
NewGameUI.Ins.m_PCUI.Refresh_Money();
Set_UI();
}
changeData.Init();
}); });
} }

View File

@ -13,7 +13,7 @@ public class PCUI : BotMenuBase
}; };
Dictionary<eItem, int> dic_EnterID = new Dictionary<eItem, int> Dictionary<eItem, int> dic_EnterID = new Dictionary<eItem, int>
{ { eItem.PCCostume, 0 }, { eItem.Worker, 0 }, { eItem.PC, 0 }, { eItem.Preset , 0 } }; { { eItem.PCCostume, 0 }, { eItem.Worker, 0 }, { eItem.PC, 0 } };
public override void Set() public override void Set()
{ {
@ -48,17 +48,15 @@ public class PCUI : BotMenuBase
bool changeCostume = Get_EnterID(eItem.PCCostume) > 0 && Get_EnterID(eItem.PCCostume) != sdata.Get_EqiupmentEquip(eItem.PCCostume); bool changeCostume = Get_EnterID(eItem.PCCostume) > 0 && Get_EnterID(eItem.PCCostume) != sdata.Get_EqiupmentEquip(eItem.PCCostume);
bool changeworker = Get_EnterID(eItem.Worker) > 0 && Get_EnterID(eItem.Worker) != sdata.Get_EqiupmentEquip(eItem.Worker); bool changeworker = Get_EnterID(eItem.Worker) > 0 && Get_EnterID(eItem.Worker) != sdata.Get_EqiupmentEquip(eItem.Worker);
bool changejob = Get_EnterID(eItem.PC) > 0 && Get_EnterID(eItem.PC) != sdata.Get_EqiupmentEquip(eItem.PC); bool changejob = Get_EnterID(eItem.PC) > 0 && Get_EnterID(eItem.PC) != sdata.Get_EqiupmentEquip(eItem.PC);
bool changepreset = Get_EnterID(eItem.Preset) > 0 && Get_EnterID(eItem.Preset) != sdata.Equip.LimitPreset;
bool pcawakend = PCAwakenUI.isIns && PCAwakenUI.Ins.IsSendAwakenData(); bool pcawakend = PCAwakenUI.isIns && PCAwakenUI.Ins.IsSendAwakenData();
bool changelimitslot = PCLimitUI.isIns && PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.IsChangeLimitSlot(); bool changelimitslot = PCLimitUI.isIns && PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.IsChangeLimitSlot();
if (changeCostume || changeworker || changejob || changepreset || pcawakend || changelimitslot) if (changeCostume || changeworker || changejob || pcawakend || changelimitslot)
{ {
var limitslotdata = PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.Get(); var limitslotdata = PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.Get();
ServerInfo.Ins.Save_PC_MenuBack(sdata.Get_EqiupmentEquip(eItem.PCCostume), ServerInfo.Ins.Save_PC_MenuBack(sdata.Get_EqiupmentEquip(eItem.PCCostume),
sdata.Get_EqiupmentEquip(eItem.Worker), sdata.Get_EqiupmentEquip(eItem.Worker),
sdata.Get_EqiupmentEquip(eItem.PC), sdata.Get_EqiupmentEquip(eItem.PC),
sdata.Equip.LimitPreset,
PCAwakenUI.isIns ? PCAwakenUI.Ins.Get_CS_AwakenData() : emptyawaken, PCAwakenUI.isIns ? PCAwakenUI.Ins.Get_CS_AwakenData() : emptyawaken,
limitslotdata, limitslotdata,
result => result =>

View File

@ -256,7 +256,7 @@ public enum eItem
// Money // Money
Gold, Gem, WeaponStone, RingStone, NeckStone, BootsStone, FairyStone, SelectSkillShuffle, ChapterQuestShuffle, mClover, MemoryField, MemoryForest, MemoryDungeon, MemoryWitchGrade, MemoryPetBattle, Gold, Gem, WeaponStone, RingStone, NeckStone, BootsStone, FairyStone, SelectSkillShuffle, ChapterQuestShuffle, mClover, MemoryField, MemoryForest, MemoryDungeon, MemoryWitchGrade, MemoryPetBattle,
PC, PCCostume, Weapon, Armor, Helmet, Extra, Necklace, Ring, PC, PCCostume, Weapon, Armor, Helmet, Extra, Necklace, Ring,
Preset, WeaponCostume, Pet, Worker, Farmer, Book, Page, Food, Seed, WeaponCostume, Pet, Worker, Farmer, Book, Page, Food, Seed,
Title, Inven, Pass, Potion, Relic, Essence, Title, Inven, Pass, Potion, Relic, Essence,
// 상점 // 상점
Shop, Shop,