481 lines
12 KiB
Plaintext
481 lines
12 KiB
Plaintext
PetInfoData = class("PetInfoData");
|
|
|
|
PetInfoData.KeyValue = {
|
|
[ScenePet_pb.EPETDATA_NAME] = "name",
|
|
[ScenePet_pb.EPETDATA_LV] = "lv",
|
|
[ScenePet_pb.EPETDATA_EXP] = "exp",
|
|
[ScenePet_pb.EPETDATA_FRIENDLV] = "friendlv",
|
|
[ScenePet_pb.EPETDATA_FRIENDEXP] = "friendexp",
|
|
[ScenePet_pb.EPETDATA_REWARDEXP] = "rewardexp",
|
|
[ScenePet_pb.EPETDATA_RELIVETIME] = "relivetime",
|
|
[ScenePet_pb.EPETDATA_TIME_HAPPLY] = "time_happly",
|
|
[ScenePet_pb.EPETDATA_TIME_EXCITE] = "time_excite",
|
|
[ScenePet_pb.EPETDATA_TIME_HAPPINESS] = "time_happiness",
|
|
[ScenePet_pb.EPETDATA_TOUCH_TICK] = "touch_tick",
|
|
[ScenePet_pb.EPETDATA_TOUCH_COUNT] = "touch_count",
|
|
[ScenePet_pb.EPETDATA_FEED_TICK] = "feed_tick",
|
|
[ScenePet_pb.EPETDATA_FEED_COUNT] = "feed_count",
|
|
[ScenePet_pb.EPETDATA_REWARD_COUNT] = "reward_count",
|
|
[ScenePet_pb.EPETDATA_BODY] = "body",
|
|
[ScenePet_pb.EPETDATA_SKILL] = "skills",
|
|
[ScenePet_pb.EPETDATA_SKILLSWITCH] = "skilloff",
|
|
}
|
|
|
|
function PetInfoData:ctor()
|
|
|
|
end
|
|
|
|
function PetInfoData:Server_SetData(serverData)
|
|
self.petid = serverData.petid;
|
|
self.guid = serverData.guid;
|
|
self.name = serverData.name;
|
|
|
|
self.staticData = Table_Pet and Table_Pet[self.petid];
|
|
self.monsterData = Table_Monster[self.petid];
|
|
|
|
if(Table_Pet_FriendLevel)then
|
|
self.friendlyData = Table_Pet_FriendLevel[self.petid];
|
|
|
|
self.events = {};
|
|
self.events_map = {
|
|
equip = {},
|
|
adventure = {},
|
|
body = {},
|
|
};
|
|
|
|
self.equip_events = {};
|
|
self.body_events = {};
|
|
self.adventure_events = {};
|
|
local eventKey, eventConfig;
|
|
for i=1,10 do
|
|
eventKey = "Event_" .. i;
|
|
eventConfigs = self.friendlyData[eventKey];
|
|
if(eventConfigs)then
|
|
for j=1,#eventConfigs do
|
|
local eventConfig = eventConfigs[j];
|
|
|
|
local edata = {};
|
|
edata[0] = i;
|
|
|
|
for k=1,#eventConfig do
|
|
edata[k] = eventConfig[k]
|
|
end
|
|
table.insert(self.events, edata);
|
|
|
|
local mapTable = self.events_map[ eventConfig[1] ];
|
|
if(mapTable)then
|
|
table.insert(mapTable, edata);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- local petSetStr = "";
|
|
|
|
for k,v in pairs(self.KeyValue)do
|
|
local server_v = serverData[v];
|
|
if(server_v ~= nil)then
|
|
if(type(server_v) == "boolean")then
|
|
if(server_v == true)then
|
|
self[v] = 1;
|
|
else
|
|
self[v] = 0;
|
|
end
|
|
|
|
-- petSetStr = petSetStr .. v .. ":" .. tostring(self[v]) .. " | "
|
|
|
|
elseif(type(server_v) == "table")then
|
|
self[v] = {};
|
|
|
|
-- petSetStr = petSetStr .. v .. ":" .. tostring(self[v]);
|
|
|
|
for i=1,#server_v do
|
|
-- petSetStr = petSetStr .. server_v[i]
|
|
table.insert(self[v], server_v[i]);
|
|
end
|
|
|
|
-- petSetStr = petSetStr .. " | ";
|
|
else
|
|
self[v] = server_v;
|
|
|
|
-- petSetStr = petSetStr .. v .. ":" .. tostring(self[v]) .. " | "
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
local server_equips = serverData.equips;
|
|
if(server_equips)then
|
|
self.equips = {};
|
|
local server_equips = serverData.equips;
|
|
helplog("PetInfoData server_equips count : ",#server_equips)
|
|
-- petSetStr = petSetStr .. " | " .. "equips:";
|
|
|
|
for i=1,#server_equips do
|
|
local itemData = ItemData.new();
|
|
itemData:ParseFromServerData(server_equips[i]);
|
|
table.insert(self.equips, itemData);
|
|
|
|
-- petSetStr = petSetStr .. tostring(server_equips[i]) .. " "
|
|
end
|
|
end
|
|
|
|
local server_defaultwears = serverData.defaultwears;
|
|
if(server_defaultwears)then
|
|
self.defaultWears = {};
|
|
for i=1,#server_defaultwears do
|
|
local petEquipData =
|
|
{
|
|
epos = server_defaultwears[i].epos,
|
|
itemId = server_defaultwears[i].itemid
|
|
}
|
|
helplog("server_defaultwears petEquipData.epos: ",petEquipData.epos,"itemid: ",petEquipData.itemId)
|
|
table.insert(self.defaultWears, petEquipData);
|
|
end
|
|
end
|
|
|
|
local server_curwears = serverData.wears;
|
|
if(server_curwears)then
|
|
self.curWears = {};
|
|
for i=1,#server_curwears do
|
|
local petEquipData =
|
|
{
|
|
epos = server_curwear[i].epos,
|
|
itemId = server_curwear[i].itemid
|
|
}
|
|
helplog("server_curwears petEquipData.epos: ",petEquipData.epos,"itemid: ",petEquipData.itemId)
|
|
table.insert(self.curWears, petEquipData);
|
|
end
|
|
end
|
|
|
|
|
|
self.unlock_equip = {};
|
|
local server_unlock_equip = serverData.unlock_equip;
|
|
if(server_unlock_equip)then
|
|
-- petSetStr = petSetStr .. " | " .. "unlockEquips:";
|
|
for i=1,#server_unlock_equip do
|
|
table.insert(self.unlock_equip, server_unlock_equip[i]);
|
|
-- petSetStr = petSetStr .. tostring(server_unlock_equip[i]) .. " "
|
|
end
|
|
end
|
|
|
|
self.unlock_body = {};
|
|
local server_unlock_body = serverData.unlock_body;
|
|
if(server_unlock_body)then
|
|
-- petSetStr = petSetStr .. " | " .. "unlock_body:";
|
|
for i=1,#server_unlock_body do
|
|
if(TableUtility.ArrayFindIndex(self.unlock_body, server_unlock_body[i]) == 0)then
|
|
table.insert(self.unlock_body, server_unlock_body[i]);
|
|
end
|
|
-- petSetStr = petSetStr .. tostring(server_unlock_body[i]) .. " ";
|
|
end
|
|
end
|
|
|
|
-- helplog(string.format("PetInfoData Update(petid:%s):", self.petid), petSetStr);
|
|
end
|
|
|
|
function PetInfoData:GetDressingWearByEpos(epos)
|
|
for i=1,#self.curWears do
|
|
if(self.curWears[i].epos==epos)then
|
|
return self.curWears[i]
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function PetInfoData:Server_UpdateData(petMemberDatas)
|
|
if(petMemberDatas == nil)then
|
|
return;
|
|
end
|
|
-- local petInfoStr = "";
|
|
for i=1,#petMemberDatas do
|
|
local single = petMemberDatas[i];
|
|
local v = PetInfoData.KeyValue[single.etype];
|
|
self[v] = single.value;
|
|
-- petInfoStr = petInfoStr .. v .. ":" .. single.value .. " | "
|
|
|
|
if(single.etype == ScenePet_pb.EPETDATA_SKILL and single.values)then
|
|
self.skills = {};
|
|
for j=1,#single.values do
|
|
table.insert(self.skills, single.values[j]);
|
|
end
|
|
elseif(single.etype == ScenePet_pb.EPETDATA_NAME and single.data)then
|
|
self.name = single.data;
|
|
end
|
|
end
|
|
|
|
-- helplog(string.format("PetInfoData Update(petid:%s):", self.petid), petInfoStr);
|
|
end
|
|
|
|
function PetInfoData:Server_UpdatePetEquip(serverItem)
|
|
if(serverItem == nil)then
|
|
return;
|
|
end
|
|
|
|
local guid = serverItem.base.guid;
|
|
if(guid == nil or guid == "")then
|
|
return;
|
|
end
|
|
|
|
local item = nil;
|
|
for i=1,#self.equips do
|
|
if(self.equips[i].id == guid)then
|
|
item = self.equips[i];
|
|
end
|
|
end
|
|
|
|
if(item == nil)then
|
|
item = ItemData.new();
|
|
table.insert(self.equips, item)
|
|
end
|
|
item:ParseFromServerData(serverItem);
|
|
end
|
|
|
|
function PetInfoData:Server_DeletePetEquip(itemguid)
|
|
if(#self.equips == 0 or itemguid == nil or itemguid == "")then
|
|
return;
|
|
end
|
|
for i=#self.equips,1,-1 do
|
|
if(self.equips[i].id == itemguid)then
|
|
table.remove(self.equips, i);
|
|
end
|
|
end
|
|
end
|
|
|
|
function PetInfoData:Server_UpdateUnlockInfo(server_equips, server_bodys)
|
|
if(server_equips)then
|
|
for i=1,#server_equips do
|
|
local unlockid = server_equips[i];
|
|
if(TableUtility.ArrayFindIndex(self.unlock_equip, unlockid) == 0)then
|
|
table.insert(self.unlock_equip, unlockid);
|
|
end
|
|
end
|
|
end
|
|
if(server_bodys)then
|
|
for i=1,#server_bodys do
|
|
local unlockid = server_bodys[i];
|
|
if(TableUtility.ArrayFindIndex(self.unlock_body, unlockid) == 0)then
|
|
table.insert(self.unlock_body, unlockid);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function PetInfoData:GetMyPetFriendPct()
|
|
local config = self.friendlyData;
|
|
if(config == nil)then
|
|
return 0;
|
|
end
|
|
|
|
local exp_ConfigKey = "AmityReward_" .. self.friendlv;
|
|
if(not config[exp_ConfigKey])then
|
|
return 0;
|
|
end
|
|
|
|
local overflow_exp = math.max(0, self.friendexp - config[exp_ConfigKey][1]);
|
|
|
|
local exp_next_ConfigKey = "AmityReward_" .. (self.friendlv + 1);
|
|
local uplv_exp = 1;
|
|
local next_exp = config[exp_next_ConfigKey] and config[exp_next_ConfigKey][1];
|
|
if(next_exp)then
|
|
uplv_exp = next_exp - config[exp_ConfigKey][1];
|
|
end
|
|
return math.min(1, overflow_exp/uplv_exp);
|
|
end
|
|
|
|
function PetInfoData:GeMyPetFriendEvents()
|
|
return self.events;
|
|
end
|
|
|
|
function PetInfoData:GetPetFriendRatio()
|
|
if(PetFriendRatio == nil)then
|
|
return;
|
|
end
|
|
local petFriend = self.staticData.PetFriend;
|
|
return PetFriendRatio[petFriend];
|
|
end
|
|
|
|
function PetInfoData:GetCanEquipItemIds()
|
|
if(self.staticData)then
|
|
return self.staticData.EquipID;
|
|
end
|
|
end
|
|
|
|
function PetInfoData:GetGiftItems()
|
|
if(self.staticData)then
|
|
return self.staticData.HobbyItem;
|
|
end
|
|
end
|
|
|
|
function PetInfoData:GetEquips()
|
|
return self.equips;
|
|
end
|
|
|
|
function PetInfoData:GetMoodLevel()
|
|
local curTime = ServerTime.CurServerTime()/1000;
|
|
local level = 0;
|
|
if(self.time_happly and self.time_happly > curTime)then
|
|
level = level + 1;
|
|
end
|
|
if(self.time_excite and self.time_excite > curTime)then
|
|
level = level + 1;
|
|
end
|
|
if(self.time_happiness and self.time_happiness > curTime)then
|
|
level = level + 1;
|
|
end
|
|
return level;
|
|
end
|
|
|
|
function PetInfoData:GetUnLockBodyEvents()
|
|
if(self.events_map)then
|
|
return self.events_map.body
|
|
end
|
|
end
|
|
|
|
function PetInfoData:GetUnLockEquipIds()
|
|
return self.unlock_equip;
|
|
end
|
|
|
|
function PetInfoData:GetUnLockBodys()
|
|
return self.unlock_body;
|
|
end
|
|
|
|
function PetInfoData:Get_Adventure_UnLockFriendlyLevel()
|
|
if(self.events_map == nil)then
|
|
return 1;
|
|
end
|
|
|
|
local adventure_event = self.events_map.adventure;
|
|
if(adventure_event[1])then
|
|
return adventure_event[1][0];
|
|
end
|
|
end
|
|
|
|
function PetInfoData:Get_Equip_UnlockFriendlyLevel(equipid)
|
|
if(self.events_map == nil)then
|
|
return 1;
|
|
end
|
|
|
|
if(self.cache_equipid_friendlv_map == nil)then
|
|
self.cache_equipid_friendlv_map = {};
|
|
|
|
local equip_events = self.events_map.equip;
|
|
for i=1,#equip_events do
|
|
local event = equip_events[i];
|
|
for j=2,#event do
|
|
local equipid = event[j];
|
|
self.cache_equipid_friendlv_map[ equipid ] = event[0];
|
|
end
|
|
end
|
|
end
|
|
|
|
return self.cache_equipid_friendlv_map[equipid] or 1;
|
|
end
|
|
|
|
function PetInfoData:Get_Body_UnlockFriendlyLevel(bodyid)
|
|
if(self.events_map == nil)then
|
|
return 1;
|
|
end
|
|
|
|
if(self.cache_bodyid_friendlv_map == nil)then
|
|
self.cache_bodyid_friendlv_map = {};
|
|
|
|
local body_events = self.events_map.body;
|
|
for i=1,#body_events do
|
|
local event = body_events[i];
|
|
for j=2,#event do
|
|
local bodyid = event[j];
|
|
self.cache_bodyid_friendlv_map[ bodyid ] = event[0];
|
|
end
|
|
end
|
|
end
|
|
return self.cache_bodyid_friendlv_map[bodyid] or 1;
|
|
end
|
|
|
|
function PetInfoData:CheckBodyIsUnLock(bodyid)
|
|
if(self.unlock_body)then
|
|
for i=1,self.unlock_body do
|
|
if(self.unlock_body[i] == bodyid)then
|
|
return true;
|
|
end
|
|
end
|
|
end
|
|
return false;
|
|
end
|
|
|
|
function PetInfoData:CheckEquipIsUnlock(equipid)
|
|
if(self.unlock_equip)then
|
|
for i=1,#self.unlock_equip do
|
|
if(self.unlock_equip[i] == equipid)then
|
|
return true;
|
|
end
|
|
end
|
|
end
|
|
|
|
local unlocklv = self:Get_Equip_UnlockFriendlyLevel(equipid);
|
|
if(self.friendlv >= unlocklv)then
|
|
return true;
|
|
end
|
|
|
|
return false, unlocklv;
|
|
end
|
|
|
|
function PetInfoData:GetHeadIcon()
|
|
local bodyData = self:GetMonsterStaticData()
|
|
if(bodyData)then
|
|
return bodyData.Icon;
|
|
end
|
|
end
|
|
|
|
function PetInfoData:GetMonsterStaticData()
|
|
local mId = 0==self.body and self.petid or self.body
|
|
return Table_Monster[mId]
|
|
end
|
|
|
|
function PetInfoData:GetBodyId()
|
|
local mStaticData = self:GetMonsterStaticData()
|
|
if(mStaticData)then
|
|
return mStaticData.Body
|
|
end
|
|
end
|
|
|
|
function PetInfoData:IsAlive()
|
|
local curtime = ServerTime.CurServerTime()/1000;
|
|
return self.relivetime <= curtime;
|
|
end
|
|
|
|
function PetInfoData:CanHug()
|
|
local limitFriendLv = GameConfig.Pet.Hug_LimitFriendLv or 1;
|
|
return self.friendlv >= limitFriendLv;
|
|
end
|
|
|
|
function PetInfoData:IsSkillPerfect()
|
|
if(#self.skills == 0)then
|
|
return true
|
|
end
|
|
|
|
for i=1,4 do
|
|
local skillRandomConfig = self.staticData[ "Skill_" .. i ];
|
|
if(skillRandomConfig[1] and skillRandomConfig[2])then
|
|
-- 101010001,10
|
|
local fullSkillid = skillRandomConfig[1] - skillRandomConfig[1]%10 + skillRandomConfig[2];
|
|
local isPerfect = true;
|
|
for j=1,#self.skills do
|
|
if(self.skills[j] < fullSkillid)then
|
|
isPerfect = false;
|
|
break;
|
|
end
|
|
end
|
|
if(not isPerfect)then
|
|
return false;
|
|
end
|
|
end
|
|
end
|
|
return true;
|
|
end
|
|
|
|
function PetInfoData:IsAutoFighting()
|
|
return self.skilloff ~= 1;
|
|
end
|