Save_PC_MenuBack 초월 옵션 추가 등
This commit is contained in:
parent
d5ff5415ba
commit
8b09deff8f
|
|
@ -798,44 +798,47 @@ handlers.Save_PC_MenuBack = function(args)
|
|||
var awakenupgradeid = Get_GlobalValue_nValue("AWAKEN_GOODS_UPGRADE");
|
||||
var awakenUpgradeTable = Get_AwakenUpgradeTable();
|
||||
var useawakenMatIds = {};
|
||||
|
||||
var allStatKeys = new Set();
|
||||
for (var i = 0; i < awakenData.upgrade.length; ++i) allStatKeys.add(awakenData.upgrade[i].Key);
|
||||
for (var i = 0; i < awakenData.awaken.length; ++i) allStatKeys.add(awakenData.awaken[i].Key);
|
||||
|
||||
for (var i = 0; i < awakenData.upgrade.length; ++i)
|
||||
for (let statKey of allStatKeys)
|
||||
{
|
||||
var statKey = awakenData.upgrade[i].Key;
|
||||
var upgradeValue = parseInt(awakenData.upgrade[i].Value || 0);
|
||||
var awakenValue = parseInt(awakenData.awaken[i].Value || 0);
|
||||
var upgradeValue = parseInt((awakenData.upgrade.find(x => x.Key === statKey)?.Value) || 0);
|
||||
var awakenValue = parseInt((awakenData.awaken.find(x => x.Key === statKey)?.Value) || 0);
|
||||
|
||||
if (upgradeValue > 0)
|
||||
for (var j = 0; j < upgradeValue; ++j)
|
||||
{
|
||||
var lv = urod.Awaken[statKey].Lv;
|
||||
var audata = awakenUpgradeTable.find(f=>f.n_AwakenStep == lv);
|
||||
|
||||
if (urod.Awaken[statKey].Exp >= audata.n_MaxUpgradeLevel && awakenValue > 0)
|
||||
{ // 각성 각성
|
||||
var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey));
|
||||
if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true;
|
||||
if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost))
|
||||
{
|
||||
--awakenValue;
|
||||
urod.Awaken[statKey].Exp = 0;
|
||||
++urod.Awaken[statKey].Lv;
|
||||
--j;
|
||||
continue;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
|
||||
var price = Get_K_Value(lv, audata.f_BalanceConstant, audata.n_DefaultUpgradeCostValue, audata.f_CountPerUpgradeCostValue);
|
||||
if (urod.Awaken[statKey].Exp < audata.n_MaxUpgradeLevel && Use_Item(table, urod, awakenupgradeid, price))
|
||||
++urod.Awaken[statKey].Exp;
|
||||
}
|
||||
else if (awakenValue > 0)
|
||||
for (var j = 0; j < upgradeValue; ++j)
|
||||
{
|
||||
var lv = urod.Awaken[statKey].Lv;
|
||||
var audata = awakenUpgradeTable.find(f=>f.n_AwakenStep == lv);
|
||||
var audata = awakenUpgradeTable.find(f => f.n_AwakenStep == lv);
|
||||
|
||||
if (urod.Awaken[statKey].Exp >= audata.n_MaxUpgradeLevel && awakenValue > 0)
|
||||
{
|
||||
var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey));
|
||||
if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true;
|
||||
if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost))
|
||||
{
|
||||
--awakenValue;
|
||||
urod.Awaken[statKey].Exp = 0;
|
||||
++urod.Awaken[statKey].Lv;
|
||||
--j; // 다시 반복
|
||||
continue;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
|
||||
var price = Get_K_Value(lv, audata.f_BalanceConstant, audata.n_DefaultUpgradeCostValue, audata.f_CountPerUpgradeCostValue);
|
||||
if (urod.Awaken[statKey].Exp < audata.n_MaxUpgradeLevel && Use_Item(table, urod, awakenupgradeid, price))
|
||||
++urod.Awaken[statKey].Exp;
|
||||
}
|
||||
|
||||
if (upgradeValue == 0 && awakenValue > 0)
|
||||
{
|
||||
var lv = urod.Awaken[statKey].Lv;
|
||||
var audata = awakenUpgradeTable.find(f => f.n_AwakenStep == lv);
|
||||
if (urod.Awaken[statKey].Exp >= audata.n_MaxUpgradeLevel)
|
||||
{ // 각성 각성
|
||||
{
|
||||
var awakenmat = Get_GlobalValue_nValue(Get_PCAwakenMatKey(statKey));
|
||||
if (!useawakenMatIds[awakenmat]) useawakenMatIds[awakenmat] = true;
|
||||
if (Use_Item(table, urod, awakenmat, audata.n_AwakenGoodsCost))
|
||||
|
|
@ -868,6 +871,13 @@ handlers.Save_PC_MenuBack = function(args)
|
|||
// 초월 프리셋
|
||||
urod.Equip.LimitPreset = args.Preset;
|
||||
|
||||
// 초월 옵션
|
||||
log.info(args.LimitSlotData.Preset);
|
||||
log.info(urod.LimitBreakOption.Preset);
|
||||
urod.LimitBreakOption.Preset = args.LimitSlotData.Preset;
|
||||
log.info(urod.LimitBreakOption.Preset);
|
||||
Set_LimitSlotOption(table, urod, args);
|
||||
|
||||
Set_JsonUserData(urod);
|
||||
return Get_Return(0, {
|
||||
awakekMats : rtn_awakenMatIds,
|
||||
|
|
@ -1181,21 +1191,26 @@ handlers.Save_PC_LimitLvUp = function(args)
|
|||
else
|
||||
return Get_Return(1); // PC 레벨 부족
|
||||
}
|
||||
function Set_LimitSlotOption(table, urod, args, makeoption = false)
|
||||
{
|
||||
Use_Item(table, urod, Get_GlobalValue_nValue("n_BreakingLimitSlotMaterialID"), args.LimitSlotData.Price);
|
||||
urod.LimitSlot = args.LimitSlotData.LimitSlot;
|
||||
if (makeoption) Make_LimitBreakOption(urod);
|
||||
|
||||
Add_MissionCount(table, urod, "HERO_OPTION_CHANGE", 0, args.LimitSlotData.Count, false);
|
||||
Add_MissionCount(table, urod, "HERO_OPTION_CHANGE_ACC", 0, args.LimitSlotData.Count, false);
|
||||
}
|
||||
handlers.Save_PC_LimitSlotOption = function(args)
|
||||
{
|
||||
var readonlydata = Get_UserReadOnlyData();
|
||||
var error = Get_Error(readonlydata, args.Token);
|
||||
if (error < 0) return Get_Return(error);
|
||||
if (CheckNullOrEmpty(args.LimitSlotData)) return Get_Return(1);
|
||||
|
||||
var urod = Get_JsonUserData(readonlydata);
|
||||
var table = Get_MissionTable();
|
||||
Use_Item(table, urod, Get_GlobalValue_nValue("n_BreakingLimitSlotMaterialID"), args.UseAmount);
|
||||
urod.LimitSlot = args.LimitSlot;
|
||||
Make_LimitBreakOption(urod);
|
||||
|
||||
Add_MissionCount(table, urod, "HERO_OPTION_CHANGE", 0, args.ChangeCount, false);
|
||||
Add_MissionCount(table, urod, "HERO_OPTION_CHANGE_ACC", 0, args.ChangeCount, false);
|
||||
|
||||
|
||||
Set_LimitSlotOption(table, urod, args, true);
|
||||
Set_JsonUserData(urod);
|
||||
return Get_Return(0, { option : urod.LimitBreakOption });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -859,7 +859,8 @@ public class ServerInfo : MyCoroutine
|
|||
Set_Coroutine(() => { Save_StageResult(_act); }, 2f);
|
||||
});
|
||||
}
|
||||
public void Save_PC_MenuBack(int costumeid, int workerid, int jobid, int preset, CS_AwakenData awakenData, Action<SC_PCMenuBackResult> _act)
|
||||
public void Save_PC_MenuBack(int costumeid, int workerid, int jobid, int preset,
|
||||
CS_AwakenData awakenData, LimitSlotChangeData limitslotData, Action<SC_PCMenuBackResult> _act)
|
||||
{
|
||||
NetWait.Ins.Set(true);
|
||||
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
|
||||
|
|
@ -873,7 +874,8 @@ public class ServerInfo : MyCoroutine
|
|||
WorkerID = workerid,
|
||||
JobID = jobid,
|
||||
Preset = preset,
|
||||
AwakenData = awakenData
|
||||
AwakenData = awakenData,
|
||||
LimitSlotData = limitslotData
|
||||
}
|
||||
},
|
||||
result =>
|
||||
|
|
@ -893,11 +895,11 @@ public class ServerInfo : MyCoroutine
|
|||
}
|
||||
}
|
||||
else
|
||||
Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, preset, awakenData, _act); }, 2f);
|
||||
Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, preset, awakenData, limitslotData, _act); }, 2f);
|
||||
},
|
||||
fail =>
|
||||
{
|
||||
Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, preset, awakenData, _act); }, 2f);
|
||||
Set_Coroutine(() => { Save_PC_MenuBack(costumeid, workerid, jobid, preset, awakenData, limitslotData, _act); }, 2f);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -1128,10 +1130,10 @@ public class ServerInfo : MyCoroutine
|
|||
Set_Coroutine(() => { Save_PC_LimitLvUp(_act); }, 2f);
|
||||
});
|
||||
}
|
||||
public void Save_PC_LimitSlotOption(int useAmount, int change, Action _act)
|
||||
public void Save_PC_LimitSlotOption(LimitSlotChangeData limitslotData, Action _act)
|
||||
{
|
||||
NetWait.Ins.Set(true);
|
||||
var serverread = m_ServerData.Get_ServerRead();
|
||||
var lsd = limitslotData.Get();
|
||||
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
|
||||
{
|
||||
FunctionName = MethodBase.GetCurrentMethod().Name,
|
||||
|
|
@ -1139,9 +1141,7 @@ public class ServerInfo : MyCoroutine
|
|||
FunctionParameter = new
|
||||
{
|
||||
Token = m_LoginInfo.EntityToken.EntityToken,
|
||||
UseAmount = useAmount,
|
||||
ChangeCount = change,
|
||||
LimitSlot = serverread.LimitSlot
|
||||
LimitSlotData = lsd
|
||||
}
|
||||
},
|
||||
result =>
|
||||
|
|
@ -1158,14 +1158,17 @@ public class ServerInfo : MyCoroutine
|
|||
_act();
|
||||
}
|
||||
else
|
||||
Set_Coroutine(() => { Save_PC_LimitSlotOption(useAmount, change, _act); }, 2f);
|
||||
{
|
||||
ToastUI.Ins.Set(174, "데이터 없음");
|
||||
Set_Coroutine(() => { Save_PC_LimitSlotOption(limitslotData, _act); }, 5f);
|
||||
}
|
||||
}
|
||||
else
|
||||
Set_Coroutine(() => { Save_PC_LimitSlotOption(useAmount, change, _act); }, 2f);
|
||||
Set_Coroutine(() => { Save_PC_LimitSlotOption(limitslotData, _act); }, 2f);
|
||||
},
|
||||
fail =>
|
||||
{
|
||||
Set_Coroutine(() => { Save_PC_LimitSlotOption(useAmount, change, _act); }, 2f);
|
||||
Set_Coroutine(() => { Save_PC_LimitSlotOption(limitslotData, _act); }, 2f);
|
||||
});
|
||||
}
|
||||
public void Save_PC_LimitSlotOptionChange(string preset, Action<SC_LimitOptionResult> _act)
|
||||
|
|
|
|||
|
|
@ -88,20 +88,21 @@ public class PCLimitSlotCard : CardBase
|
|||
public void Set_Change(string preset, int ipreset)
|
||||
{
|
||||
var sdata = ServerInfo.Ins.m_ServerData;
|
||||
var optionindex = ipreset + 1;
|
||||
var presetindex = ipreset;
|
||||
if (!isCloseSlot() && !sdata.isLock_LimitSlot(preset, m_Slot))
|
||||
{
|
||||
var option = sdata.LimitBreakOption.Option[ipreset][sdata.LimitBreakOption.Preset[ipreset]++];
|
||||
if (sdata.LimitBreakOption.Preset[ipreset] >= sdata.LimitBreakOption.Option[ipreset].Count)
|
||||
var option = sdata.LimitBreakOption.Option[optionindex][sdata.LimitBreakOption.Preset[presetindex]++];
|
||||
if (sdata.LimitBreakOption.Preset[presetindex] >= sdata.LimitBreakOption.Option[optionindex].Count)
|
||||
{
|
||||
sdata.LimitBreakOption.Preset[ipreset] = 0;
|
||||
sdata.LimitBreakOption.Preset[presetindex] = 0;
|
||||
// 다음 테이블 서버에서 받아오기
|
||||
PCLimitUI.Ins.m_PCLimitUI_Right.ChangeOption = true;
|
||||
}
|
||||
sdata.Set_LimitSlotID(preset, m_Slot, option.id, option.lv);
|
||||
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE);
|
||||
sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC);
|
||||
++PCLimitUI.Ins.m_PCLimitUI_Right.MissionCount;
|
||||
PCLimitUI.Ins.m_PCLimitUI_Right.MissionCount.RandomizeCryptoKey();
|
||||
PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.Add_MissionCount();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -113,11 +114,11 @@ public class PCLimitSlotCard : CardBase
|
|||
var preset = PCLimitUI.Ins.m_PCLimitUI_Right.Get_Preset();
|
||||
if (m_SData.ID > 0 || sdata.isLock_LimitSlot(preset, m_Slot))
|
||||
{
|
||||
ServerInfo.Ins.Save_PC_LimitSlotLock(preset, m_Slot, () =>
|
||||
{
|
||||
//ServerInfo.Ins.Save_PC_LimitSlotLock(preset, m_Slot, () =>
|
||||
//{
|
||||
sdata.Set_LimitSlotLock(preset, m_Slot);
|
||||
PCLimitUI.Ins.m_PCLimitUI_Right.Set();
|
||||
});
|
||||
//});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +1,8 @@
|
|||
public class PCLimitUI : PCUIMenu
|
||||
{
|
||||
public static bool isIns;
|
||||
public static PCLimitUI Ins;
|
||||
private void Awake()
|
||||
{
|
||||
Ins = this;
|
||||
}
|
||||
private void Awake() { isIns = true; Ins = this; }
|
||||
|
||||
public PCLimit_Center m_PCLimit_Center;
|
||||
public PCLimitUI_Right m_PCLimitUI_Right;
|
||||
|
|
@ -16,6 +14,7 @@ public class PCLimitUI : PCUIMenu
|
|||
m_PCLimit_Center.Set();
|
||||
m_PCLimitUI_Right.Set();
|
||||
|
||||
m_PCLimitUI_Right.m_LimitSlotChangeData.Init(true);
|
||||
if (NewGameUI.Ins.m_PCUI.Get_EnterID(eItem.Preset) == 0)
|
||||
NewGameUI.Ins.m_PCUI.Set_EnterID(eItem.Preset, ServerInfo.Ins.m_ServerData.Equip.LimitPreset);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,45 @@ using System.Collections.Generic;
|
|||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
public class LimitSlotChangeData
|
||||
{
|
||||
ObscuredInt TotalPrice, MissionCount;
|
||||
|
||||
// 아래는 서버에 전송할 데이터
|
||||
public List<int> Preset;
|
||||
public Dictionary<string, List<SD_PCLimitSlotData_Read>> LimitSlot = new Dictionary<string, List<SD_PCLimitSlotData_Read>>();
|
||||
public int Price, Count;
|
||||
|
||||
public void Init(bool copydata)
|
||||
{
|
||||
TotalPrice = 0; TotalPrice.RandomizeCryptoKey();
|
||||
MissionCount = 0; MissionCount.RandomizeCryptoKey();
|
||||
}
|
||||
void Copy_ServerLimitSlot()
|
||||
{
|
||||
LimitSlot.Clear();
|
||||
var slotdata = ServerInfo.Ins.m_ServerData.LimitSlot;
|
||||
foreach (var pair in slotdata)
|
||||
{
|
||||
var copiedList = new List<SD_PCLimitSlotData_Read>();
|
||||
foreach (var data in pair.Value)
|
||||
copiedList.Add(data.Get());
|
||||
LimitSlot[pair.Key] = copiedList;
|
||||
}
|
||||
}
|
||||
public LimitSlotChangeData Get()
|
||||
{
|
||||
Price = TotalPrice;
|
||||
Count = MissionCount;
|
||||
Preset = ServerInfo.Ins.m_ServerData.LimitBreakOption.Preset;
|
||||
Copy_ServerLimitSlot();
|
||||
return this;
|
||||
}
|
||||
|
||||
public bool IsChangeLimitSlot() { return TotalPrice > 0; }
|
||||
public void Add_TotalPrice(int price) { TotalPrice += price; TotalPrice.RandomizeCryptoKey(); }
|
||||
public void Add_MissionCount() { ++MissionCount; MissionCount.RandomizeCryptoKey(); }
|
||||
}
|
||||
public class PCLimitUI_Right : uScrollViewMgr
|
||||
{
|
||||
public TabUIBase m_Tab;
|
||||
|
|
@ -11,7 +50,7 @@ public class PCLimitUI_Right : uScrollViewMgr
|
|||
public ButtonPress Btn_Change;
|
||||
|
||||
public bool ChangeOption;
|
||||
public ObscuredInt TotalPrice, MissionCount;
|
||||
public LimitSlotChangeData m_LimitSlotChangeData = new LimitSlotChangeData();
|
||||
string m_Preset = "1";
|
||||
int m_matID, m_CurProtectGrade, m_ProtectMaxGrade;
|
||||
ObscuredInt mPrice;
|
||||
|
|
@ -131,23 +170,23 @@ public class PCLimitUI_Right : uScrollViewMgr
|
|||
{
|
||||
var sdata = ServerInfo.Ins.m_ServerData;
|
||||
sdata.Use_Item(m_matID, mPrice);
|
||||
list_CardBase.ForEach(f => (f as PCLimitSlotCard).Set_Change(m_Preset, m_Tab.Get_Index() + 1));
|
||||
list_CardBase.ForEach(f => (f as PCLimitSlotCard).Set_Change(m_Preset, m_Tab.Get_Index()));
|
||||
Set();
|
||||
MyValue.Get_ActorStatInfoorNull(eRole.PC);
|
||||
NewGameUI.Ins.m_PCUI.Refresh_Money();
|
||||
|
||||
TotalPrice += mPrice; TotalPrice.RandomizeCryptoKey();
|
||||
var changeData = PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData;
|
||||
changeData.Add_TotalPrice(mPrice);
|
||||
|
||||
if (ChangeOption)
|
||||
{
|
||||
Btn_Change.ControlPress(false);
|
||||
ServerInfo.Ins.Save_PC_LimitSlotOption(TotalPrice, MissionCount,
|
||||
ServerInfo.Ins.Save_PC_LimitSlotOption(changeData,
|
||||
() =>
|
||||
{
|
||||
ChangeOption = false;
|
||||
Btn_Change.ControlPress(true);
|
||||
TotalPrice = 0; TotalPrice.RandomizeCryptoKey();
|
||||
MissionCount = 0; MissionCount.RandomizeCryptoKey();
|
||||
changeData.Init(false);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,14 +50,16 @@ public class PCUI : BotMenuBase
|
|||
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 changelimitslot = PCLimitUI.isIns && PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.IsChangeLimitSlot();
|
||||
|
||||
if (changeCostume || changeworker || changejob || changepreset || pcawakend)
|
||||
if (changeCostume || changeworker || changejob || changepreset || pcawakend || changelimitslot)
|
||||
{
|
||||
ServerInfo.Ins.Save_PC_MenuBack(sdata.Get_EqiupmentEquip(eItem.PCCostume),
|
||||
sdata.Get_EqiupmentEquip(eItem.Worker),
|
||||
sdata.Get_EqiupmentEquip(eItem.PC),
|
||||
sdata.Equip.LimitPreset,
|
||||
PCAwakenUI.isIns ? PCAwakenUI.Ins.Get_CS_AwakenData() : emptyawaken,
|
||||
PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.Get(),
|
||||
result =>
|
||||
{
|
||||
for (int i = 0; i < result.awakekMats.Count; i++)
|
||||
|
|
|
|||
Loading…
Reference in New Issue