private bool ChangePartsImageCode(eBeyond beyond, eParts parts, eOption opt, out int code) { code = 0; if (beyond == eBeyond.Ancient) { if (true == m_ancientItems.ContainsKey(parts)) { if (true == m_ancientItems[parts].ContainsKey(opt)) { code = m_ancientItems[parts][opt].Code; return(true); } } } else if (beyond == eBeyond.Mythic) { if (true == m_mythicItems.ContainsKey(parts)) { if (true == m_mythicItems[parts].ContainsKey(opt)) { code = m_mythicItems[parts][opt].Code; return(true); } } } return(false); }
public void GetItemWithBoss(fmDropItem fdi, eOption selecedOpt, out rdItem item) { int lv = fdi.Lv; eGrade grade = fdi.Grade; eParts parts = fdi.Parts; item = new rdItem(); item.Lv = lv; item.Grade = grade; item.Parts = parts; item.BaseOpt = new List <rdOption>(); item.AddOpts = new List <rdOption>(); GetBaseOpt(item); List <eOption> temp = GetList(eGrade.Normal, parts, lv); int cnt = GetOptionCount(grade); //Console.WriteLine(cnt); for (int i = 0; i < cnt; ++i) { int hit = m_random.Next(0, temp.Count); eOption kind = temp.ElementAt(hit); eOptGrade cc = (eOptGrade)((int)kind >> 8); rdOption option = new rdOption(i + 1, false, GetOptGrade(kind), kind, GetValue(lv, kind)); item.AddOpts.Add(option); temp.RemoveAt(hit); if (cc == eOptGrade.Normal) { eOption remove = (eOption)((int)kind + ((int)eOptGrade.Normal << 8)); temp.Remove(remove); } else if (cc == eOptGrade.Epic) { eOption remove = (eOption)((int)kind - ((int)eOptGrade.Normal << 8)); temp.Remove(remove); } // eOptCategory } if (eGrade.Legend <= grade) { eOptGrade optGrade = GetLegendSetOptGrade(grade); //Console.WriteLine(optGrade); eOption kind = selecedOpt; rdOption option = new rdOption(cnt + 1, false, optGrade, kind, GetValue(lv, kind)); item.AddOpts.Add(option); } }
private void GetBaseValue(int lv, eParts parts, out eOption option, out float value, out int code) { //Logger.Debug("GetBaseValue: {0}" , parts); int cnt = m_items[parts].Count; int hit = m_random.Next(0, cnt); var data = m_items[parts].ElementAt(hit).Value; code = data.m_nCode; option = m_items[parts].ElementAt(hit).Key; GetBaseValue(lv, option, out value); }
public List <eOption> GetList(eParts parts) { if (false == m_optList.ContainsKey(parts)) { Logger.Error("GetList {0}", parts); return(m_optList[eParts.Weapon].ToList()); } else { return(m_optList[parts].ToList()); } }
public void BuyItem(Random lordRandom, eGrade grade, int lv, out fmDropItem item) { int cnt = m_parts.Count; int hit = lordRandom.Next(0, cnt); eParts parts = m_parts.ElementAt(hit); item = new fmDropItem { Lv = lv, Grade = grade, Parts = parts }; }
public List <eOption> GetList(eGrade grade, eParts parts, int lv) { Dictionary <int, Dictionary <eParts, List <eOption> > > dic = null; if (eGrade.Legend == grade) { dic = m_optList[grade]; } else if (eGrade.Set == grade) { dic = m_optList[grade]; } else { dic = m_optList[eGrade.Normal]; } int rangeLv = GetRangeLv(lv); if (true == dic.ContainsKey(rangeLv)) { //Logger.Debug("dic.ContainsKey(rangeLv) {0},{1},{2}", grade, parts, lv); if (true == dic[rangeLv].ContainsKey(parts)) { Logger.Debug("grade{0}/dic[{1}].CKey({2})/lv{3}", grade, rangeLv, parts, lv); return(dic[rangeLv][parts].ToList()); } else { Logger.Error("2-GetList {0},{1},{2},{3}", grade, parts, lv, rangeLv); } } else { Logger.Error("1-GetList {0},{1},{2},{3}", grade, parts, lv, rangeLv); } return(dic[1][parts].ToList()); //if (false == m_optList.ContainsKey(rangeLv)) // return null; //if (false == m_optList[rangeLv].ContainsKey(parts)) // return null; //return m_optList[rangeLv][parts].ToList(); }
public bool Load(fmDataTable table) { Dictionary <int, fmDataOption> dic = table.Find <fmDataOption>(eFmDataType.Option); if (null == dic) { return(false); } //m_optList.Add(eParts.Weapon, new List<eOption>()); //m_optList.Add(eParts.Necklace, new List<eOption>()); //m_optList.Add(eParts.Ring, new List<eOption>()); //m_optList.Add(eParts.Belt, new List<eOption>()); //m_optList.Add(eParts.Gloves, new List<eOption>()); //m_optList.Add(eParts.Pants, new List<eOption>()); //m_optList.Add(eParts.Armor, new List<eOption>()); //m_optList.Add(eParts.Head, new List<eOption>()); //m_optList.Add(eParts.Jewel, new List<eOption>()); foreach (var node in dic) { int lv = node.Value.m_nAppearLv; eOption opt = node.Value.m_eOption; eOptGrade optGrade = (eOptGrade)((int)opt >> 8); foreach (var beyond in node.Value.m_nArrBeyond) { if ((eBeyond)beyond == eBeyond.Mythic) { int cnt = node.Value.m_nArrParts.Length; for (int i = 0; i < cnt; ++i) { eParts parts = (eParts)node.Value.m_nArrParts[i]; if (false == m_optList.ContainsKey(parts)) { m_optList.Add(parts, new List <eOption>()); } m_optList[parts].Add(opt); } } } } return(true); }
public override void LoadExcelSheet(DataRow rowData) { fmDataOption data = m_fmData as fmDataOption; data.m_nCode = GetInt(rowData, "nCode"); { string str = GetString(rowData, "eOption"); data.m_eOption = (eOption)Enum.Parse(typeof(eOption), str); } data.m_nAppearLv = GetInt(rowData, "nAppearLv"); { string[] strParts = GetStrArray(rowData, "eParts"); List <int> list = new List <int>(); foreach (var node in strParts) { if (false == string.IsNullOrEmpty(node)) { eParts parts = (eParts)Enum.Parse(typeof(eParts), node); list.Add((int)parts); } } data.m_nArrParts = list.ToArray(); } { string[] strBeyond = GetStrArray(rowData, "eBeyond"); List <int> list = new List <int>(); foreach (var node in strBeyond) { if (false == string.IsNullOrEmpty(node)) { eBeyond parts = (eBeyond)Enum.Parse(typeof(eBeyond), node); list.Add((int)parts); } } data.m_nArrBeyond = list.ToArray(); } //data.m_nWorld = GetInt(rowData, "nWorld"); //data.m_nInDun = GetInt(rowData, "nIndun"); }
public void GetItemOnCombineCube(eParts parts, int lv, out fmDropItem item) { Random lordRandom = new Random(); item = null; eGrade grade = eGrade.None; eParts selectParts = eParts.None; { int hit = lordRandom.Next(0, 100); if (hit < 49) { selectParts = parts; } } if (selectParts == eParts.None) { int cnt = m_parts.Count; int hit = lordRandom.Next(0, cnt); selectParts = m_parts.ElementAt(hit); } { int hit = lordRandom.Next(0, 100); if (hit <= 70) { grade = eGrade.Legend; } else { grade = eGrade.Set; } } item = new fmDropItem { Lv = lv, Grade = grade, Parts = selectParts }; }
public bool Load(fmDataTable table) { Dictionary <int, fmDataOption> dic = table.Find <fmDataOption>(eFmDataType.Option); if (null == dic) { return(false); } m_optList.Add(eGrade.Normal, new Dictionary <int, Dictionary <eParts, List <eOption> > >()); m_optList.Add(eGrade.Legend, new Dictionary <int, Dictionary <eParts, List <eOption> > >()); m_optList.Add(eGrade.Set, new Dictionary <int, Dictionary <eParts, List <eOption> > >()); foreach (var node in dic) { int lv = node.Value.m_nAppearLv; if (false == m_nLvRange.Contains(lv)) { m_nLvRange.Add(lv); } foreach (var item in m_optList) { if (false == item.Value.ContainsKey(lv)) { item.Value.Add(lv, new Dictionary <eParts, List <eOption> >()); item.Value[lv].Add(eParts.Weapon, new List <eOption>()); item.Value[lv].Add(eParts.Necklace, new List <eOption>()); item.Value[lv].Add(eParts.Ring, new List <eOption>()); item.Value[lv].Add(eParts.Belt, new List <eOption>()); item.Value[lv].Add(eParts.Gloves, new List <eOption>()); item.Value[lv].Add(eParts.Pants, new List <eOption>()); item.Value[lv].Add(eParts.Armor, new List <eOption>()); item.Value[lv].Add(eParts.Head, new List <eOption>()); item.Value[lv].Add(eParts.Jewel, new List <eOption>()); } } } foreach (var node in dic) { int lv = node.Value.m_nAppearLv; eOption opt = node.Value.m_eOption; eOptGrade optGrade = (eOptGrade)((int)opt >> 8); foreach (var beyond in node.Value.m_nArrBeyond) { if ((eBeyond)beyond == eBeyond.None) { int cnt = node.Value.m_nArrParts.Length; for (int i = 0; i < cnt; ++i) { eParts parts = (eParts)node.Value.m_nArrParts[i]; if (optGrade < eOptGrade.Legend) { foreach (var list in m_optList[eGrade.Normal]) { if (lv <= list.Key) { list.Value[parts].Add(opt); } } } else if (eOptGrade.Legend == optGrade) { foreach (var list in m_optList[eGrade.Legend]) { if (lv <= list.Key) { list.Value[parts].Add(opt); } } } else if (eOptGrade.Set == optGrade) { foreach (var list in m_optList[eGrade.Set]) { if (lv <= list.Key) { list.Value[parts].Add(opt); } } } } } } } m_nLvRange = m_nLvRange.OrderBy(x => x).ToList(); return(true); }
public eErrorCode CreateMythic(eOption selectOpt, eElement element, ref rdItem mythicItem) { rdOption keepOpt = null; foreach (var node in mythicItem.AddOpts) { if (eOptGrade.Legend == node.Grade || eOptGrade.Set == node.Grade) { keepOpt = node; } } if (null == keepOpt) { return(eErrorCode.Error); } int lv = mythicItem.Lv; eGrade grade = mythicItem.Grade; eParts parts = mythicItem.Parts; if (parts != eParts.Weapon) { if (selectOpt == eOption.None) { return(eErrorCode.Params_InvalidParam); } } int changeCode = 0; if (parts == eParts.Weapon) { if (false == ChangeWeaponImageCode(eBeyond.Mythic, mythicItem.Code, out changeCode)) { Logger.Error("Failed. CreateMythic {0} / {1} / {2}", parts, mythicItem.Code, selectOpt); return(eErrorCode.Server_TableError); } } else { if (false == ChangePartsImageCode(eBeyond.Mythic, mythicItem.Parts, selectOpt, out changeCode)) { Logger.Error("Failed. CreateMythic {0} / {1} / {2}", parts, mythicItem.Code, selectOpt); return(eErrorCode.Params_InvalidParam); } } mythicItem.Code = changeCode; mythicItem.Beyond = eBeyond.Mythic; mythicItem.AddOpts.Clear(); mythicItem.BaseOpt.Clear(); if (parts == eParts.Weapon) { float min = 0; float max = 0; float speed = 0; GetWeapon(lv, out min, out max, out speed); { eOption select = eOption.BWDMin; rdOption option = new rdOption(1, false, eOptGrade.Normal, select, min); mythicItem.BaseOpt.Add(option); } { eOption select = eOption.BWDMax; rdOption option = new rdOption(2, false, eOptGrade.Normal, select, max); mythicItem.BaseOpt.Add(option); } { eOption select = eOption.AS; rdOption option = new rdOption(3, false, eOptGrade.Normal, select, speed); mythicItem.BaseOpt.Add(option); } { eOption select = eOption.Element; float value = (float)element; rdOption option = new rdOption(4, false, eOptGrade.Normal, select, value); mythicItem.BaseOpt.Add(option); } } else { float value = 0f; GetBaseValue(mythicItem.Lv, selectOpt, out value); rdOption option = new rdOption(1, false, eOptGrade.Normal, selectOpt, value); mythicItem.BaseOpt.Add(option); } List <eOption> temp = GetAncientOptList(parts); int cnt = GetOptionCount(grade, eBeyond.Mythic); for (int i = 0; i < cnt; ++i) { int hit = m_random.Next(0, temp.Count); eOption kind = temp.ElementAt(hit); rdOption option = new rdOption(i + 1, false, GetOptGrade(kind), kind, GetAncientValue(lv, kind)); mythicItem.AddOpts.Add(option); temp.RemoveAt(hit); } { keepOpt.Index = mythicItem.AddOpts.Count + 1; mythicItem.AddOpts.Add(keepOpt); } return(eErrorCode.Success); }
public eErrorCode UpToAncient(ref rdItem remeltItem) { rdOption keepOpt = null; foreach (var node in remeltItem.AddOpts) { if (eOptGrade.Legend == node.Grade || eOptGrade.Set == node.Grade) { keepOpt = node; } } if (null == keepOpt) { return(eErrorCode.Error); } int lv = remeltItem.Lv; eGrade grade = remeltItem.Grade; eParts parts = remeltItem.Parts; bool bChanged = false; int changeCode = 0; //if (parts == eParts.Jewel) //{ // bChanged = true; // changeCode = remeltItem.Code; //} //else if (parts == eParts.Weapon) { bChanged = ChangeWeaponImageCode(eBeyond.Ancient, remeltItem.Code, out changeCode); } else { bChanged = ChangePartsImageCode(eBeyond.Ancient, parts, remeltItem.BaseOpt.ElementAt(0).Kind, out changeCode); } if (false == bChanged) { Logger.Error("Failed. UpToAncient {0} / {1} / {2}", parts, remeltItem.Code, remeltItem.BaseOpt.ElementAt(0).Kind); return(eErrorCode.Server_TableError); } remeltItem.Code = changeCode; remeltItem.AddOpts.Clear(); List <eOption> temp = GetAncientOptList(parts); int cnt = GetOptionCount(grade); for (int i = 0; i < cnt; ++i) { int hit = m_random.Next(0, temp.Count); eOption kind = temp.ElementAt(hit); rdOption option = new rdOption(i + 1, false, GetOptGrade(kind), kind, GetAncientValue(lv, kind)); remeltItem.AddOpts.Add(option); temp.RemoveAt(hit); } { remeltItem.AddOpts.Add(keepOpt); } remeltItem.Beyond = eBeyond.Ancient; return(eErrorCode.Success); }
private eOption GetLegendSetOption(eGrade grade, eParts parts, int lv) { List <eOption> temp = GetList(grade, parts, lv); return(temp.ElementAt(m_random.Next(0, temp.Count))); }
private List <eOption> GetAncientOptList(eParts parts) { return(m_enchAnciOptList.GetList(parts)); }
private List <eOption> GetList(eGrade grade, eParts parts, int lv) { return(m_dropOptList.GetList(grade, parts, lv)); }