착용 장비 인챈트 부여 완료
This commit is contained in:
parent
821925d96b
commit
d5253fcdfa
|
|
@ -1774,29 +1774,17 @@ handlers.Save_EquipItem_EnchantOption = function(args)
|
|||
if (error < 0) return Get_Return(error);
|
||||
|
||||
var urod = Get_JsonUserData(readonlydata);
|
||||
var enchantdata = args.EnchantData;
|
||||
var id = enchantdata.EnchantID;
|
||||
|
||||
var slot = urod.Slot.find(f => f.Parts == enchantdata.Parts);
|
||||
if (slot.Lv < Get_GlobalValue_nValue(`EnchantOpenLv${enchantdata.Slot + 1}`))
|
||||
return Get_Return(2);
|
||||
|
||||
var table = Get_MissionTable();
|
||||
if (Use_Item(table, urod, id, enchantdata.Count))
|
||||
{
|
||||
var option = urod.EnchantOption[id].Option.at(-1);
|
||||
slot.Enchant[enchantdata.Slot].ID = option.id;
|
||||
slot.Enchant[enchantdata.Slot].Lv = option.lv;
|
||||
var enchantresult = EnchantProcess(table, urod, args); // 마법부여
|
||||
Make_EqiupmentEnchantOption_perEnchant(urod, args.NeedOptionid);
|
||||
|
||||
Make_EqiupmentEnchantOption_perEnchant(urod, id);
|
||||
|
||||
Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ALL", 0, enchantdata.Count);
|
||||
Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ACC", 0, enchantdata.Count);
|
||||
|
||||
Set_JsonUserData(urod);
|
||||
return Get_Return(0, { lastoption: option, newoption : urod.EnchantOption[id] });
|
||||
}
|
||||
return Get_Return(1);
|
||||
Set_JsonUserData(urod);
|
||||
return Get_Return(0, {
|
||||
newoption : urod.EnchantOption[args.NeedOptionid],
|
||||
EnchantCount: enchantresult.enchantcount,
|
||||
AllEnchantAmount: enchantresult.allenchantamount,
|
||||
Slot: urod.Slot
|
||||
});
|
||||
}
|
||||
handlers.Save_EquipItem_Enchant = function(args) // 사용 x
|
||||
{
|
||||
|
|
@ -1867,6 +1855,8 @@ handlers.Save_Enchant_LvUp = function(args)
|
|||
}
|
||||
return Get_Return(1);
|
||||
}
|
||||
const validEquipKeys = ["Weapon", "Armor", "Helmet", "Extra", "Ring", "Necklace"];
|
||||
const partsValue = { 0: "Weapon", 1: "Armor", 2: "Helmet", 3: "Extra", 4: "Ring", 5: "Necklace" };
|
||||
handlers.Save_Equipment_MenuBack = function(args)
|
||||
{
|
||||
var readonlydata = Get_UserReadOnlyData();
|
||||
|
|
@ -1880,7 +1870,6 @@ handlers.Save_Equipment_MenuBack = function(args)
|
|||
var equipDict = {};
|
||||
for (var i = 0; i < rawEquipArray.length; ++i)
|
||||
equipDict[rawEquipArray[i].Key] = rawEquipArray[i].Value;
|
||||
var validEquipKeys = ["Weapon", "Armor", "Helmet", "Extra", "Ring", "Necklace"];
|
||||
for (var i = 0; i < validEquipKeys.length; ++i)
|
||||
{
|
||||
var key = validEquipKeys[i];
|
||||
|
|
@ -1892,67 +1881,41 @@ handlers.Save_Equipment_MenuBack = function(args)
|
|||
}
|
||||
}
|
||||
|
||||
// 마법부여
|
||||
var rawEnchantArray = args.EquipMenuData.Enchant;
|
||||
var enchantDic = {};
|
||||
for (var i = 0; i < rawEnchantArray.length; ++i) {
|
||||
var part = rawEnchantArray[i].Key;
|
||||
enchantDic[part] = {};
|
||||
var enchantresult = EnchantProcess(table, urod, args); // 마법부여
|
||||
|
||||
var innerList = rawEnchantArray[i].Value;
|
||||
for (var j = 0; j < innerList.length; ++j) {
|
||||
var enchantID = innerList[j].Key;
|
||||
var count = innerList[j].Value;
|
||||
enchantDic[part][enchantID] = count;
|
||||
}
|
||||
}
|
||||
|
||||
var enchantsuccess = true;
|
||||
Set_JsonUserData(urod);
|
||||
return Get_Return(0, {
|
||||
Equip: urod.Equip.Equip,
|
||||
EnchantCount: enchantresult.enchantcount,
|
||||
AllEnchantAmount: enchantresult.allenchantamount,
|
||||
Slot: urod.Slot
|
||||
});
|
||||
}
|
||||
function EnchantProcess(table, urod, args)
|
||||
{
|
||||
var totalCount = 0;
|
||||
for (var i = 0; i < validEquipKeys.length; ++i)
|
||||
var lst = args.EquipMenuData.Enchantlst;
|
||||
for (var i = 0; i < lst.length; ++i)
|
||||
{
|
||||
var key = validEquipKeys[i];
|
||||
for (var id in enchantDic[key])
|
||||
var row = lst[i];
|
||||
var parts = partsValue[row[0]];
|
||||
var slotIndex = row[1];
|
||||
var enchantid = Add_Amount(10000, row[2]);
|
||||
|
||||
var slot = urod.Slot.find(f => f.Parts == parts);
|
||||
if (slot.Lv >= Get_GlobalValue_nValue(`EnchantOpenLv${slotIndex + 1}`) && Use_Item(table, urod, enchantid, 1))
|
||||
{
|
||||
totalCount = Add_Amount(totalCount, enchantDic[key][id]);
|
||||
enchantsuccess = Use_Item(table, urod, id, enchantDic[key][id]);
|
||||
if (!enchantsuccess) break;
|
||||
var option = urod.EnchantOption[enchantid].Option[urod.EnchantOption[enchantid].Index++];
|
||||
var enchantdata = slot.Enchant[slotIndex];
|
||||
enchantdata.ID = option.id;
|
||||
enchantdata.Lv = option.lv;
|
||||
|
||||
++totalCount;
|
||||
Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ALL", 0, 1);
|
||||
Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ACC", 0, 1);
|
||||
}
|
||||
if (!enchantsuccess) break;
|
||||
}
|
||||
|
||||
if (enchantsuccess)
|
||||
{ // 성공이므로 마지막 인챈트 및 인덱스 적용
|
||||
Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ALL", 0, totalCount);
|
||||
Add_MissionCount(table, urod, "EQUIP_ITEM_ENCHANT_ACC", 0, totalCount);
|
||||
|
||||
for (var i = 0; i < validEquipKeys.length; ++i)
|
||||
{
|
||||
var key = validEquipKeys[i];
|
||||
for (var id in enchantDic[key])
|
||||
urod.EnchantOption[id].Index = Add_Amount(urod.EnchantOption[id].Index, enchantDic[key][id]);
|
||||
}
|
||||
|
||||
var rawLastEnchant = args.EquipMenuData.LastEnchant;
|
||||
for (var i = 0; i < rawLastEnchant.length; ++i)
|
||||
{
|
||||
var part = rawLastEnchant[i].Key;
|
||||
var slotList = rawLastEnchant[i].Value;
|
||||
|
||||
for (var j = 0; j < slotList.length; ++j)
|
||||
{
|
||||
var slotIndex = slotList[j].Key;
|
||||
var id = slotList[j].Value;
|
||||
|
||||
var slot = urod.Slot.find(f => f.Parts == part);
|
||||
var enchantdata = slot.Enchant[slotIndex];
|
||||
var option = urod.EnchantOption[id].Option[urod.EnchantOption[id].Index - 1];
|
||||
enchantdata.ID = option.id;
|
||||
enchantdata.Lv = option.lv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var allEnchantAmount = [];
|
||||
var enchantable = Get_EnchantListTable();
|
||||
for (var i = 0; i < enchantable.length; ++ i)
|
||||
|
|
@ -1960,15 +1923,11 @@ handlers.Save_Equipment_MenuBack = function(args)
|
|||
var id = enchantable[i].n_EnchantID;
|
||||
allEnchantAmount.push( { itemid: id, amount: Get_ItemAmount(urod, id) } );
|
||||
}
|
||||
// 마법 부여 끝
|
||||
|
||||
Set_JsonUserData(urod);
|
||||
return Get_Return(0, {
|
||||
Equip: urod.Equip.Equip,
|
||||
EnchantCount: totalCount,
|
||||
AllEnchantAmount: allEnchantAmount,
|
||||
Slot: urod.Slot
|
||||
});
|
||||
return {
|
||||
enchantcount: totalCount,
|
||||
allenchantamount: allEnchantAmount
|
||||
}
|
||||
}
|
||||
|
||||
handlers.Save_Skill_MenuBack = function(args)
|
||||
|
|
|
|||
|
|
@ -3152,8 +3152,10 @@ public class SC_EnchantEquipItemResult
|
|||
}
|
||||
public class SC_EnchantOptionResult
|
||||
{
|
||||
public SD_OptionDetailData lastoption;
|
||||
public SD_EquipItemEnchant newoption;
|
||||
public int EnchantCount;
|
||||
public List<SD_Slot_Read> Slot;
|
||||
public List<SC_Items> AllEnchantAmount;
|
||||
}
|
||||
public class SC_EquipmentMenuBackResult
|
||||
{
|
||||
|
|
@ -3227,11 +3229,6 @@ public class CS_AwakenData
|
|||
awaken[eStat.LUK] = 0;
|
||||
}
|
||||
}
|
||||
public class CS_EquipSlotEnchantData
|
||||
{
|
||||
public eItem Parts;
|
||||
public int Slot, EnchantID, Count;
|
||||
}
|
||||
public class CS_EquipmentMenuBackData
|
||||
{
|
||||
public Dictionary<eItem, int> Equip = new Dictionary<eItem, int>
|
||||
|
|
@ -3239,17 +3236,12 @@ public class CS_EquipmentMenuBackData
|
|||
{ eItem.Weapon, 0 }, { eItem.Armor, 0 }, { eItem.Helmet, 0 }, { eItem.Extra, 0 }, { eItem.Ring, 0 },
|
||||
{ eItem.Necklace, 0 },
|
||||
};
|
||||
public Dictionary<eItem, Dictionary<int, int>> Enchant = new Dictionary<eItem, Dictionary<int, int>>
|
||||
{ // 파츠, <인챈트 ID, 마법 부여 횟수>
|
||||
{ eItem.Weapon, new Dictionary<int, int>() }, { eItem.Armor, new Dictionary<int, int>() },
|
||||
{ eItem.Helmet, new Dictionary<int, int>() }, { eItem.Extra, new Dictionary<int, int>() },
|
||||
{ eItem.Ring, new Dictionary<int, int>() }, { eItem.Necklace, new Dictionary<int, int>() },
|
||||
};
|
||||
public Dictionary<eItem, Dictionary<int, int>> LastEnchant = new Dictionary<eItem, Dictionary<int, int>>
|
||||
{ // 파츠, <슬롯, 인챈트 ID>
|
||||
{ eItem.Weapon, new Dictionary<int, int>() }, { eItem.Armor, new Dictionary<int, int>() },
|
||||
{ eItem.Helmet, new Dictionary<int, int>() }, { eItem.Extra, new Dictionary<int, int>() },
|
||||
{ eItem.Ring, new Dictionary<int, int>() }, { eItem.Necklace, new Dictionary<int, int>() },
|
||||
public List<List<int>> Enchantlst = new List<List<int>>();
|
||||
|
||||
Dictionary<eItem, int> dic_parts = new Dictionary<eItem, int>
|
||||
{
|
||||
{ eItem.Weapon, 0 }, { eItem.Armor, 1 }, { eItem.Helmet, 2 }, { eItem.Extra, 3 }, { eItem.Ring, 4 },
|
||||
{ eItem.Necklace, 5 },
|
||||
};
|
||||
|
||||
public void Init(bool equip, bool enchant)
|
||||
|
|
@ -3263,40 +3255,23 @@ public class CS_EquipmentMenuBackData
|
|||
Equip[key] = sdata.Get_EqiupmentEquip(key);
|
||||
}
|
||||
|
||||
if (enchant)
|
||||
{
|
||||
var enchantkeys = Enchant.Keys.ToList();
|
||||
foreach (var item in enchantkeys)
|
||||
{
|
||||
Enchant[item].Clear();
|
||||
LastEnchant[item].Clear();
|
||||
}
|
||||
}
|
||||
if (enchant) Enchantlst.Clear();
|
||||
}
|
||||
|
||||
public void Add_Enchant(eItem parts, int slot, int enchantid)
|
||||
{
|
||||
if (!Enchant[parts].ContainsKey(enchantid))
|
||||
Enchant[parts].Add(enchantid, 1);
|
||||
else
|
||||
++Enchant[parts][enchantid];
|
||||
|
||||
if (!LastEnchant[parts].ContainsKey(slot))
|
||||
LastEnchant[parts].Add(slot, enchantid);
|
||||
Enchantlst.Add(new List<int> { dic_parts[parts], slot, enchantid - 10000 });
|
||||
}
|
||||
|
||||
public bool isNeedServerSave()
|
||||
{
|
||||
var sdata = ServerInfo.Ins.m_ServerData;
|
||||
foreach (var item in Equip)
|
||||
{
|
||||
if (Equip[item.Key] != sdata.Get_EqiupmentEquip(item.Key))
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach (var item in LastEnchant)
|
||||
if (item.Value.Count > 0)
|
||||
return true;
|
||||
if (Enchantlst.Count > 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1625,7 +1625,7 @@ public class ServerInfo : MyCoroutine
|
|||
Set_Coroutine(() => { Save_EquipItem_SlotLvUpInit(itemid, _act); }, 2f);
|
||||
});
|
||||
}
|
||||
public void Save_EquipItem_EnchantOption(CS_EquipSlotEnchantData data, Action<SC_EnchantOptionResult> _act)
|
||||
public void Save_EquipItem_EnchantOption(int needoptionid, CS_EquipmentMenuBackData data, Action<SC_EnchantOptionResult> _act)
|
||||
{
|
||||
NetWait.Ins.Set(true);
|
||||
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest
|
||||
|
|
@ -1635,7 +1635,8 @@ public class ServerInfo : MyCoroutine
|
|||
FunctionParameter = new
|
||||
{
|
||||
Token = m_LoginInfo.EntityToken.EntityToken,
|
||||
EnchantData = data,
|
||||
EquipMenuData = data,
|
||||
NeedOptionid = needoptionid
|
||||
}
|
||||
},
|
||||
result =>
|
||||
|
|
@ -1654,11 +1655,11 @@ public class ServerInfo : MyCoroutine
|
|||
}
|
||||
}
|
||||
else
|
||||
Set_Coroutine(() => { Save_EquipItem_EnchantOption(data, _act); }, 2f);
|
||||
Set_Coroutine(() => { Save_EquipItem_EnchantOption(needoptionid, data, _act); }, 2f);
|
||||
},
|
||||
fail =>
|
||||
{
|
||||
Set_Coroutine(() => { Save_EquipItem_EnchantOption(data, _act); }, 2f);
|
||||
Set_Coroutine(() => { Save_EquipItem_EnchantOption(needoptionid, data, _act); }, 2f);
|
||||
});
|
||||
}
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using CodeStage.AntiCheat.ObscuredTypes;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
|
@ -17,8 +16,7 @@ public class EquipmentEnchantCard : CardBase
|
|||
EnchantListTableData m_Data;
|
||||
EnchantRateTableData m_EnchantRateTableData;
|
||||
|
||||
ObscuredInt m_EnchantCount;
|
||||
CS_EquipSlotEnchantData m_EnchantData = new CS_EquipSlotEnchantData();
|
||||
eItem m_Parts;
|
||||
|
||||
public override void Set<T>(T _base)
|
||||
{
|
||||
|
|
@ -28,10 +26,7 @@ public class EquipmentEnchantCard : CardBase
|
|||
Set_UI();
|
||||
// 착용 장비
|
||||
DSUtil.InActivateGameObjects(gos, PopupMgr.Ins.m_EquipmentItemPopup.isActiveAndEnabled ? 1 : 0);
|
||||
m_EnchantCount = 0;
|
||||
m_EnchantCount.RandomizeCryptoKey();
|
||||
m_EnchantData.EnchantID = m_Data.n_EnchantID;
|
||||
m_EnchantData.Parts = PopupMgr.Ins.m_EquipmentItemPopup.Get_Parts();
|
||||
m_Parts = PopupMgr.Ins.m_EquipmentItemPopup.Get_Parts();
|
||||
}
|
||||
|
||||
public override void Set_UI()
|
||||
|
|
@ -73,34 +68,36 @@ public class EquipmentEnchantCard : CardBase
|
|||
var sdata = ServerInfo.Ins.m_ServerData;
|
||||
if (sdata.Get_EnchantLv(m_Data.n_EnchantID) > 0 && sdata.Check_ItemAmount(m_Data.n_EnchantID, 1))
|
||||
{ // 마법 부여 하자
|
||||
++m_EnchantCount; m_EnchantCount.RandomizeCryptoKey();
|
||||
|
||||
sdata.Use_Item(m_Data.n_EnchantID, 1);
|
||||
var enchant = sdata.EnchantOption[m_Data.n_EnchantID];
|
||||
var option = enchant.Option[enchant.Index++];
|
||||
sdata.Set_SlotEnchant(m_Parts, Select_EnchantCardData.Index, option.id, option.lv);
|
||||
|
||||
if (enchant.Option.Count <= enchant.Index)
|
||||
{
|
||||
NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Init(false, true);
|
||||
m_EnchantData.Count = m_EnchantCount;
|
||||
// 현재까지 저장하고 새로운 데이터 받아오기
|
||||
m_EnchantData.Slot = Select_EnchantCardData.Index;
|
||||
ServerInfo.Ins.Save_EquipItem_EnchantOption(m_EnchantData, result =>
|
||||
ServerInfo.Ins.Save_EquipItem_EnchantOption(m_Data.n_EnchantID, NewGameUI.Ins.m_EquipmentUI.m_MenuBackData,
|
||||
result =>
|
||||
{
|
||||
sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ACC, 0, m_EnchantCount);
|
||||
sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ALL, 0, m_EnchantCount);
|
||||
NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Init(false, true); // 초기화
|
||||
|
||||
sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ACC, 0, result.EnchantCount);
|
||||
sdata.Add_MissionCount(ePurpose.EQUIP_ITEM_ENCHANT_ALL, 0, result.EnchantCount);
|
||||
|
||||
sdata.Slot.Clear();
|
||||
for (int i = 0; i < result.Slot.Count; i++)
|
||||
sdata.Slot.Add(result.Slot[i].Get());
|
||||
|
||||
for (int i = 0; i < result.AllEnchantAmount.Count; i++)
|
||||
sdata.Set_Item(result.AllEnchantAmount[i].itemid, result.AllEnchantAmount[i].amount);
|
||||
|
||||
sdata.Set_SlotEnchant(m_EnchantData.Parts, m_EnchantData.Slot, result.lastoption.id, result.lastoption.lv);
|
||||
sdata.EnchantOption[m_Data.n_EnchantID] = result.newoption;
|
||||
|
||||
m_EnchantCount = 0; m_EnchantCount.RandomizeCryptoKey();
|
||||
RefreshUI();
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Add_Enchant(m_EnchantData.Parts, m_EnchantData.Slot, m_Data.n_EnchantID);
|
||||
sdata.Set_SlotEnchant(m_EnchantData.Parts, m_EnchantData.Slot, option.id, option.lv);
|
||||
NewGameUI.Ins.m_EquipmentUI.m_MenuBackData.Add_Enchant(m_Parts, Select_EnchantCardData.Index, m_Data.n_EnchantID);
|
||||
RefreshUI();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue