EnchantEquipTypeRateMap = { [170] = "SpearRate", -- 170对应的是“Spears”的增强率,可能是某种矛类武器的强化 [180] = "SwordRate", -- 180对应的是“Sword”的增强率,代表剑类武器的强化 [190] = "StaffRate", -- 190对应的是“Staff”的增强率,代表法杖类武器的强化 [200] = "KatarRate", -- 200对应的是“Katar”的增强率,Katar是短剑类武器的名字 [210] = "BowRate", -- 210对应的是“Bow”的增强率,代表弓类武器的强化 [220] = "MaceRate", -- 220对应的是“Mace”的增强率,代表锤类武器的强化 [230] = "AxeRate", -- 230对应的是“Axe”的增强率,代表斧类武器的强化 [240] = "BookRate", -- 240对应的是“Book”的增强率,代表书类物品的强化 [250] = "KnifeRate", -- 250对应的是“Knife”的增强率,代表刀类武器的强化 [260] = "InstrumentRate",-- 260对应的是“Instrument”的增强率,代表乐器类物品的强化 [270] = "LashRate", -- 270对应的是“Lash”的增强率,可能是鞭子类武器的强化 [280] = "PotionRate", -- 280对应的是“Potion”的增强率,可能是药水类物品的强化 [290] = "GloveRate", -- 290对应的是“Glove”的增强率,代表手套类物品的强化 [500] = "ArmorRate", -- 500对应的是“Armor”的增强率,代表盔甲类物品的强化 [510] = "ShieldRate", -- 510对应的是“Shield”的增强率,代表盾牌类物品的强化 [520] = "RobeRate", -- 520对应的是“Robe”的增强率,代表长袍类物品的强化 [530] = "ShoeRate", -- 530对应的是“Shoe”的增强率,代表鞋类物品的强化 [540] = "AccessoryRate", -- 540对应的是“Accessory”的增强率,代表饰品类物品的强化 [511] = "OrbRate", -- 511对应的是“Orb”的增强率,代表宝珠类物品的强化 [512] = "EikonRate", -- 512对应的是“Eikon”的增强率,可能是指某种饰品或符文的强化 [513] = "BracerRate", -- 513对应的是“Bracer”的增强率,代表护腕类物品的强化 [514] = "BraceletRate", -- 514对应的是“Bracelet”的增强率,代表手链类物品的强化 [515] = "TrolleyRate", -- 515对应的是“Trolley”的增强率,可能是与交通工具相关的物品的强化 [800] = "HeadRate", -- 800对应的是“Head”的增强率,代表头部装备类物品的强化 [810] = "WingRate", -- 810对应的是“Wing”的增强率,代表翅膀类物品的强化 [830] = "FaceRate", -- 830对应的是“Face”的增强率,代表面部装备类物品的强化 [840] = "TailRate", -- 840对应的是“Tail”的增强率,代表尾部装备类物品的强化 [850] = "MouthRate", -- 850对应的是“Mouth”的增强率,代表口部装备类物品的强化 } EnchantMenuType = { Default = 0, SixBaseAttri = 1, BaseAttri = 2, DefAttri = 3, CombineAttri = 4, } Enchant1rdAttri = { "Str","Agi","Vit","Int","Dex","Luk", } Enchant2rdAttri = { "Hp","Sp", "MaxHp","MaxHpPer", "MaxSp","MaxSpPer", "Atk","AtkPer", "MAtk","MAtkPer", "Def","DefPer", "MDef","MDefPer", "Hit","Cri","Flee","AtkSpd", "CriRes", "CriDamPer", "CriDefPer", "HealEncPer", "BeHealEncPer", "DamIncrease", "DamReduc", "DamRebound", "MDamRebound", "Vampiric", "EquipASPD", } Enchant3rdAttri = { "SilenceDef", "FreezeDef", "StoneDef", "StunDef", "BlindDef", "PoisonDef", "SlowDef", "ChaosDef", "CurseDef", } ------------------------------------------------------------------------- EnchantData = class("EnchantData"); function EnchantData:ctor() self.datas = {}; end -- return with canGet function EnchantData:Get(itemType) local rateKey = itemType and EnchantEquipTypeRateMap[itemType] if(not rateKey)then return self.datas[1], false; end for i=#self.datas,1,-1 do if(EnchantData.CanGet(self.datas[i], itemType))then return self.datas[i], true; end end -- 預設返回第一條 return self.datas[1], false; end function EnchantData:Add( equipEnchant_config ) table.insert(self.datas, equipEnchant_config); end function EnchantData.CanGet( data, itemType ) local rateKey = itemType and EnchantEquipTypeRateMap[itemType] if(not rateKey)then return false; end local cantEnchantMap = data.CantEnchant; if(cantEnchantMap[rateKey] ~= 1)then return true; end return false; end ------------------------------------------------------------------------- EnchantEquipUtil = class("EnchantEquipUtil"); EnchantEquipUtil.Instance = nil function EnchantEquipUtil:ctor() self:Init(); EnchantEquipUtil.Instance = self; end function EnchantEquipUtil:Init() self.dataMap = {}; self.combineEffectMap = {}; for typeKey, enchantType in pairs(EnchantType)do self.dataMap[enchantType] = {}; self.combineEffectMap[enchantType] = {}; end self.costMap = {}; for key,data in pairs(Table_EquipEnchant)do local enchantData = self.dataMap[data.EnchantType][data.AttrType]; if(enchantData == nil)then enchantData = EnchantData.new(); self.dataMap[data.EnchantType][data.AttrType] = enchantData; end enchantData:Add(data); local key,value = next(data.AttrType2); if(key and value and data.ComBineAttr~="")then table.insert(self.combineEffectMap[data.EnchantType], data); end if(not self.costMap[data.EnchantType])then self.costMap[data.EnchantType] = {}; self.costMap[data.EnchantType].ItemCost = data.ItemCost; self.costMap[data.EnchantType].ZenyCost = data.ZenyCost; end end self.priceRateMap = {}; local priceConfig = Table_EquipEnchantPrice or {}; for _,data in pairs(priceConfig)do if(data.AttrType)then self.priceRateMap[data.AttrType] = data; end end end function EnchantEquipUtil:GetEnchantDatasByEnchantType(enchantType) return self.dataMap[enchantType]; end function EnchantEquipUtil:GetEnchantData(enchantType, attri, itemType) if(not attri or not enchantType)then errorLog(string.format("GetEnchantData Parama Error (%s %s)", tostring(enchantType), tostring(attri))); return; end local edatas = self.dataMap[enchantType]; if(edatas == nil)then return; end local enchantData = edatas[ attri ]; if(enchantData == nil)then return; end return enchantData:Get(itemType); end function EnchantEquipUtil:GetAttriPropVO(attriType) local pro = RolePropsContainer.config[attriType]; if(nil == pro)then errorLog(string.format("NO This Attri %s", tostring(attriType))); end return pro; end function EnchantEquipUtil:GetMenuType(attriType) for pos,type in pairs(Enchant1rdAttri)do if(attriType == type)then return EnchantMenuType.SixBaseAttri, pos; end end for pos,type in pairs(Enchant2rdAttri)do if(attriType == type)then return EnchantMenuType.BaseAttri, pos; end end for pos,type in pairs(Enchant3rdAttri)do if(attriType == type)then return EnchantMenuType.DefAttri, pos; end end errorLog(string.format("(%s) Not Config In EnchantEquipUtil'TopConfig", attriType)); return EnchantMenuType.Default, 1; end function EnchantEquipUtil:GetEnchantCost(enchantType) return self.costMap[enchantType]; end function EnchantEquipUtil:GetCombineEffects(enchantType) return self.combineEffectMap[enchantType]; end function EnchantEquipUtil:GetCombineEffect(uniqueId) for _,data in pairs(Table_EquipEnchant) do if(data.UniqID == uniqueId)then return data; end end return nil; end function EnchantEquipUtil:GetPriceRate(attriType, itemType) if(attriType)then local data = self.priceRateMap[attriType]; if(data)then local key = EnchantEquipTypeRateMap[itemType]; if(data[key])then return data[key] end end end return 0; end function EnchantEquipUtil:CanGetCombineEffect(data, itemType) local canGet1 = EnchantData.CanGet( data, itemType ) if(not canGet1)then return; end local attri2 = data.AttrType2[1]; if(attri2 == nil)then return canGet1; end local rateKey = itemType and EnchantEquipTypeRateMap[itemType] if(not rateKey or data.NoShowEquip[rateKey] == 1)then return false; end local enchantType = data.EnchantType; local data2, canGet2 = self:GetEnchantData(enchantType, attri2, itemType) if(data2 == nil)then return false; end return canGet2; end