294 lines
8.9 KiB
Lua
294 lines
8.9 KiB
Lua
------------------------------------------------
|
||
--作者: HJ
|
||
--日期: 2021-03-12
|
||
--文件: SoulPearl.lua
|
||
--模块: SoulPearl
|
||
--描述: 魂印数据模型
|
||
------------------------------------------------
|
||
local FightUtils = require "Logic.Base.FightUtils.FightUtils"
|
||
local L_ParentCSType = CS.Thousandto.Code.Logic.LuaItemBase
|
||
local SoulPearl = {
|
||
--CS父类对象
|
||
_SuperObj_ = 0,
|
||
--配置表
|
||
ItemInfo = nil,
|
||
--基础属性字典
|
||
BaseAttrs = nil,
|
||
--特殊属性字典
|
||
SpecialAttrs = nil,
|
||
Power = 0,
|
||
SlotId = 0,
|
||
}
|
||
---------------------------继承父类接口begin------------------------
|
||
function SoulPearl:Initialization(id)
|
||
self.ItemInfo = DataConfig.DataEquip[id]
|
||
return true;
|
||
end
|
||
|
||
function SoulPearl:UnInitialization()
|
||
if self.BaseAttrs then
|
||
self.BaseAttrs:Clear()
|
||
end
|
||
end
|
||
function SoulPearl:GetItemType()
|
||
return ItemType.SoulPearl;
|
||
end
|
||
function SoulPearl:GetName()
|
||
local ret = "";
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.Name;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetIcon()
|
||
local ret = -1;
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.Icon;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetEffect()
|
||
local ret = -1;
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.Effect;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetQuality()
|
||
local ret = -1;
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.Quality;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetStarNum()
|
||
local ret = 0;
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.DiamondNumber;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetOcc()
|
||
local ret = "";
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.Gender;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetPart()
|
||
local ret = -1;
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.Part;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetGrade()
|
||
local ret = 0;
|
||
if self.ItemInfo then
|
||
ret = self.ItemInfo.Grade;
|
||
end
|
||
return ret;
|
||
end
|
||
function SoulPearl:GetPower()
|
||
return self.Power;
|
||
end
|
||
function SoulPearl:CheckLevel(level)
|
||
return self.ItemInfo.Level <= level;
|
||
end
|
||
function SoulPearl:CheackOcc(sex)
|
||
if (string.find(self.Occ, "9") ~= nil) then
|
||
return true;
|
||
end
|
||
local ret = false;
|
||
if string.find(self.ItemInfo.Gender, tostring(sex)) ~= nil then
|
||
ret = true;
|
||
else
|
||
ret = false;
|
||
end
|
||
return ret;
|
||
end
|
||
|
||
function SoulPearl:CheckClass()
|
||
if (self.ItemInfo.Classlevel <= 0) then
|
||
return true;
|
||
else
|
||
local p = GameCenter.GameSceneSystem:GetLocalPlayer();
|
||
if p then
|
||
if (p.ChangeJobLevel >= self.ItemInfo.Classlevel) then
|
||
return true;
|
||
else
|
||
return false;
|
||
end
|
||
end
|
||
end
|
||
return false;
|
||
end
|
||
--检测是否可以上架
|
||
function SoulPearl:CanAuction()
|
||
if not GameCenter.MainFunctionSystem:FunctionIsVisible(FunctionStartIdCode.Auchtion) then
|
||
return false;
|
||
end
|
||
if (self.IsBind) then
|
||
return false;
|
||
end
|
||
if (self.ItemInfo.AuctionMaxPrice == 0) then
|
||
return false;
|
||
end
|
||
return true;
|
||
end
|
||
--是否有效
|
||
function SoulPearl:IsValid()
|
||
return self.ItemInfo ~= nil
|
||
end
|
||
function SoulPearl:CheckBetterThanDress()
|
||
local dressEquip = GameCenter.SoulEquipSystem:GetDressPeralPowerByPart(self.Part)
|
||
if(dressEquip > 0) then
|
||
return self.Power > dressEquip;
|
||
end
|
||
return true;
|
||
end
|
||
|
||
--获取和已穿戴装备的战斗力差
|
||
function SoulPearl:GetDressPowerDiff()
|
||
local dressEquip = GameCenter.SoulEquipSystem:GetDressPeralPowerByPart(self.Part)
|
||
if(dressEquip > 0) then
|
||
return self.Power - dressEquip;
|
||
end
|
||
return self.Power;
|
||
end
|
||
---------------------------继承父类接口end--------------------------
|
||
function SoulPearl:NewWithMsg(msg)
|
||
local _m = Utils.DeepCopy(self)
|
||
_m._SuperObj_ = L_ParentCSType.CreateByMsg(msg);
|
||
_m:_InitBindOverride_();
|
||
_m:_InitContent_();
|
||
if msg then
|
||
_m:Initialization(msg.itemModelId);
|
||
end
|
||
_m:SetAttribute();
|
||
_m:SetSlotId()
|
||
Utils.BuildInheritRel(_m);
|
||
return _m
|
||
end
|
||
function SoulPearl:New(...)
|
||
local _m = Utils.DeepCopy(self)
|
||
_m._SuperObj_ = L_ParentCSType.Create(...);
|
||
_m:_InitBindOverride_();
|
||
_m:_InitContent_();
|
||
_m:Initialization(...);
|
||
_m:SetAttribute();
|
||
_m:SetSlotId()
|
||
Utils.BuildInheritRel(_m);
|
||
return _m
|
||
end
|
||
--绑定Override的方法
|
||
function SoulPearl:_InitBindOverride_()
|
||
--重载函数的重定义
|
||
--重载函数的重定义
|
||
self._SuperObj_.IsValidDelegate = Utils.Handler(self.IsValid, self, nil, true);
|
||
self._SuperObj_.CanAuctionDelegate = Utils.Handler(self.CanAuction, self, nil, true);
|
||
self._SuperObj_.CheckClassDelegate = Utils.Handler(self.CheckClass, self, nil, true);
|
||
self._SuperObj_.CheckOccDelegate = Utils.Handler(self.CheackOcc, self, nil, true);
|
||
self._SuperObj_.CheckLevelDelegate = Utils.Handler(self.CheckLevel, self, nil, true);
|
||
self._SuperObj_.GetPowerDelegate = Utils.Handler(self.GetPower, self, nil, true);
|
||
self._SuperObj_.GetGradeDelegate = Utils.Handler(self.GetGrade, self, nil, true);
|
||
self._SuperObj_.GetPartDelegate = Utils.Handler(self.GetPart, self, nil, true);
|
||
self._SuperObj_.GetOccDelegate = Utils.Handler(self.GetOcc, self, nil, true);
|
||
self._SuperObj_.GetStarNumDelegate = Utils.Handler(self.GetStarNum, self, nil, true);
|
||
self._SuperObj_.GetQualityDelegate = Utils.Handler(self.GetQuality, self, nil, true);
|
||
self._SuperObj_.GetEffectDelegate = Utils.Handler(self.GetEffect, self, nil, true);
|
||
self._SuperObj_.GetIconDelegate = Utils.Handler(self.GetIcon, self, nil, true);
|
||
self._SuperObj_.GetNameDelegate = Utils.Handler(self.GetName, self, nil, true);
|
||
self._SuperObj_.GetItemTypeDelegate = Utils.Handler(self.GetItemType, self, nil, true);
|
||
self._SuperObj_.UnInitializationDelegate = Utils.Handler(self.UnInitialization, self, nil, true);
|
||
self._SuperObj_.GetDressPowerDiffDelegate = Utils.Handler(self.GetDressPowerDiff, self, nil, true);
|
||
self._SuperObj_.CheckBetterThanDressDelegate = Utils.Handler(self.CheckBetterThanDress, self, nil, true);
|
||
end
|
||
--初始化
|
||
function SoulPearl:_InitContent_()
|
||
--定义临时变量,用户回调
|
||
end
|
||
|
||
function SoulPearl:GetCSObj()
|
||
return self._SuperObj_;
|
||
end
|
||
--获取装备的最基本的属性值
|
||
function SoulPearl:GetBaseAttribute()
|
||
if self.BaseAttrs then
|
||
return self.BaseAttrs;
|
||
end
|
||
return Dictionary:New()
|
||
end
|
||
|
||
--获取装备的特殊属性值
|
||
function SoulPearl:GetSpecialAttribute()
|
||
if self.SpecialAttrs then
|
||
return self.SpecialAttrs;
|
||
end
|
||
return Dictionary:New()
|
||
end
|
||
|
||
--计算当前装备的属性值
|
||
function SoulPearl:SetAttribute()
|
||
if self.ItemInfo == nil then
|
||
return;
|
||
end
|
||
if (LuaItemBase.EquipBaseAttDic == nil) then
|
||
LuaItemBase.EquipBaseAttDic = Dictionary:New()
|
||
end
|
||
if(LuaItemBase.EquipBaseAttDic:ContainsKey(self.ItemInfo.Id)) then
|
||
self.BaseAttrs = LuaItemBase.EquipBaseAttDic[self.ItemInfo.Id];
|
||
else
|
||
if self.BaseAttrs == nil then
|
||
self.BaseAttrs = Dictionary:New()
|
||
end
|
||
self.BaseAttrs:Clear();
|
||
local attrsArr = Utils.SplitStr(self.ItemInfo.Attribute1, ';')
|
||
for i = 1, #attrsArr do
|
||
local attrs = Utils.SplitNumber(attrsArr[i], '_')
|
||
if #attrs == 2 then
|
||
if not self.BaseAttrs:ContainsKey(attrs[1]) then
|
||
self.BaseAttrs:Add(attrs[1], attrs[2]);
|
||
end
|
||
end
|
||
end
|
||
--将属性缓存起来,下次使用的时候不会再次GC
|
||
LuaItemBase.EquipBaseAttDic[self.ItemInfo.Id] = self.BaseAttrs;
|
||
end
|
||
|
||
if (LuaItemBase.EquipSpecialAttDic == nil) then
|
||
LuaItemBase.EquipSpecialAttDic = Dictionary:New()
|
||
end
|
||
if (LuaItemBase.EquipSpecialAttDic:ContainsKey(self.ItemInfo.Id)) then
|
||
self.SpecialAttrs = LuaItemBase.EquipSpecialAttDic[self.ItemInfo.Id];
|
||
else
|
||
if self.SpecialAttrs == nil then
|
||
self.SpecialAttrs = Dictionary:New()
|
||
end
|
||
self.SpecialAttrs:Clear();
|
||
local attrsArr = Utils.SplitStr(self.ItemInfo.Attribute2, ';')
|
||
for i = 1, #attrsArr do
|
||
local attrs = Utils.SplitNumber(attrsArr[i], '_')
|
||
if #attrs == 2 then
|
||
if not self.SpecialAttrs:ContainsKey(attrs[1]) then
|
||
self.SpecialAttrs:Add(attrs[1], attrs[2]);
|
||
end
|
||
end
|
||
end
|
||
--将属性缓存起来,下次使用的时候不会再次GC
|
||
LuaItemBase.EquipSpecialAttDic[self.ItemInfo.Id] = self.SpecialAttrs;
|
||
end
|
||
self.Power = FightUtils.GetPropetryPower(self.BaseAttrs) + FightUtils.GetPropetryPower(self.SpecialAttrs);
|
||
end
|
||
|
||
function SoulPearl:SetSlotId()
|
||
if self.SlotId == 0 and self.ItemInfo then
|
||
DataConfig.DataSoulArmorSignetHole:ForeachCanBreak(function(k, v)
|
||
if (v.EquipType == self.ItemInfo.Part) then
|
||
self.SlotId = v.Hole;
|
||
return true;
|
||
end
|
||
end)
|
||
end
|
||
end
|
||
return SoulPearl |