325 lines
8.5 KiB
Plaintext
325 lines
8.5 KiB
Plaintext
FoodProxy = class('FoodProxy', pm.Proxy)
|
|
|
|
FoodProxy.Instance = nil;
|
|
|
|
FoodProxy.NAME = "FoodProxy"
|
|
|
|
autoImport("RecipeData");
|
|
|
|
FoodProxy.FailFood_ItemID = 551019;
|
|
|
|
function FoodProxy:ctor(proxyName, data)
|
|
self.proxyName = proxyName or FoodProxy.NAME
|
|
if(FoodProxy.Instance == nil) then
|
|
FoodProxy.Instance = self
|
|
end
|
|
|
|
if data ~= nil then
|
|
self:setData(data)
|
|
end
|
|
|
|
self:Init();
|
|
end
|
|
|
|
function FoodProxy:Init()
|
|
self:InitRecipe();
|
|
self.last_cooked_foods = {};
|
|
self.eating_foods = {};
|
|
|
|
self.material_exp_info = {};
|
|
self.food_cook_info = {};
|
|
self.food_eat_info = {};
|
|
self:InitManualFoodInfo();
|
|
self.max_recent_cook = GameConfig.Food.MaxLastCooked
|
|
self.foodGetCount = 0;
|
|
end
|
|
|
|
function FoodProxy:InitManualFoodInfo( ... )
|
|
-- body
|
|
for id,v in pairs(Table_Food)do
|
|
self.food_cook_info[id] = {itemid = id,status = SceneFood_pb.EFOODSTATUS_MIN,exp = 0,itemData = ItemData.new(nil,id),level = 0}
|
|
end
|
|
|
|
for id,v in pairs(Table_Food)do
|
|
self.food_eat_info[id] = {itemid = id,status = SceneFood_pb.EFOODSTATUS_MIN,exp = 0,level = 0}
|
|
end
|
|
end
|
|
|
|
function FoodProxy:InitRecipe()
|
|
self.recipe_id_map = {};
|
|
self.recipe_type_map = {};
|
|
|
|
self.unlock_recipe_map = {};
|
|
|
|
for id,recipeData in pairs(Table_Recipe)do
|
|
local recipeData = RecipeData.new(id);
|
|
self.recipe_id_map[id] = recipeData;
|
|
|
|
local rType = recipeData.staticData.Type or 1;
|
|
if(nil == self.recipe_type_map[rType])then
|
|
self.recipe_type_map[rType] = {};
|
|
end
|
|
table.insert(self.recipe_type_map[rType], self.recipe_id_map[id]);
|
|
end
|
|
|
|
for _, typeRecipeDatas in pairs(self.recipe_type_map)do
|
|
table.sort(typeRecipeDatas, self._RecipeDataSortFunc);
|
|
end
|
|
end
|
|
|
|
|
|
function FoodProxy._RecipeDataSortFunc(a,b)
|
|
if(a.staticData.id == 129 or b.staticData.id == 129)then
|
|
return a.staticData.id == 129;
|
|
end
|
|
return a.staticData.id < b.staticData.id;
|
|
end
|
|
|
|
function FoodProxy:ResetUnLockInfo()
|
|
for id, recipeData in pairs(self.recipe_id_map)do
|
|
recipeData:SetUnLock(false);
|
|
end
|
|
end
|
|
|
|
function FoodProxy:UnLockRecipe(recipeid, playAnim)
|
|
if(recipeid)then
|
|
local data = self.recipe_id_map[recipeid];
|
|
if(data)then
|
|
data:SetUnLock(true);
|
|
end
|
|
if(playAnim)then
|
|
FunctionFood.Me():UnLockRecipe(recipeid)
|
|
end
|
|
end
|
|
end
|
|
|
|
function FoodProxy:Server_SetFoodLevelInfo(server_FoodInfo)
|
|
self:ResetUnLockInfo();
|
|
|
|
TableUtility.ArrayClear(self.last_cooked_foods)
|
|
local last_cooked_foods = server_FoodInfo.last_cooked_foods;
|
|
-- helplog("Server_SetFoodLevelInfo size:",#last_cooked_foods)
|
|
local foodItemId;
|
|
for i=1,#last_cooked_foods do
|
|
foodItemId = last_cooked_foods[i];
|
|
-- helplog("Server_SetFoodLevelInfo:",foodItemId)
|
|
if(#self.last_cooked_foods >= self.max_recent_cook)then
|
|
table.remove(self.last_cooked_foods,1)
|
|
end
|
|
self.last_cooked_foods[ #self.last_cooked_foods +1] = foodItemId;
|
|
end
|
|
|
|
TableUtility.ArrayClear(self.eating_foods);
|
|
local foodItemInfo;
|
|
local eat_foods = server_FoodInfo.eat_foods;
|
|
for i=1,#eat_foods do
|
|
foodItemInfo = eat_foods[i];
|
|
if(foodItemInfo.itemid)then
|
|
self.eating_foods[#self.eating_foods +1 ] = {itemid = foodItemInfo.itemid, level = foodItemInfo.level, invalidTime = foodItemInfo.invalid_time};
|
|
end
|
|
end
|
|
local recipeids = server_FoodInfo.recipeids;
|
|
for i=1,#recipeids do
|
|
self:UnLockRecipe(recipeids[i]);
|
|
end
|
|
|
|
end
|
|
|
|
function FoodProxy:GetRecipesByType(rtype)
|
|
return self.recipe_type_map[rtype]
|
|
end
|
|
|
|
function FoodProxy:GetRecipeByRecipeId(recipeid)
|
|
return self.recipe_id_map[recipeid];
|
|
end
|
|
|
|
function FoodProxy:Server_QueryFoodManualData(data, playAnim)
|
|
self:Server_SetFoodManualDatas(data.items, playAnim)
|
|
self.cookerexp = data.cookerexp;
|
|
self.cookerlv = data.cookerlv;
|
|
self.tasterexp = data.tasterexp;
|
|
self.tasterlv = data.tasterlv;
|
|
end
|
|
|
|
function FoodProxy:Server_SetFoodManualDatas(server_items, playAnim)
|
|
local upFunc;
|
|
for i=1,#server_items do
|
|
self:Server_SetFoodManualData(server_items[i], playAnim);
|
|
end
|
|
end
|
|
|
|
function FoodProxy:Server_SetFoodManualData(server_item, playAnim)
|
|
if(server_item.type == nil)then
|
|
return;
|
|
end
|
|
|
|
local cacheMap, handleLvUpFunc;
|
|
if(server_item.type == SceneFood_pb.EFOODDATATYPE_MATERIAL)then
|
|
cacheMap = self.material_exp_info
|
|
handleLvUpFunc = FunctionFood.Material_LvUp
|
|
elseif(server_item.type == SceneFood_pb.EFOODDATATYPE_FOODCOOK)then
|
|
cacheMap = self.food_cook_info
|
|
handleLvUpFunc = FunctionFood.FoodCook_LvUp
|
|
elseif(server_item.type == SceneFood_pb.EFOODDATATYPE_FOODTASTE)then
|
|
cacheMap = self.food_eat_info
|
|
handleLvUpFunc = FunctionFood.FoodEat_LvUp
|
|
end
|
|
if(cacheMap ~= nil)then
|
|
for i=1,#server_item.datas do
|
|
local data = server_item.datas[i]
|
|
self:_UpdateFoodManualInfo(cacheMap, data.itemid, data, handleLvUpFunc, playAnim);
|
|
end
|
|
else
|
|
error(server_item.type .. " not find when SetFoodManualData");
|
|
end
|
|
|
|
end
|
|
|
|
function FoodProxy:_UpdateFoodManualInfo(cacheMap, sitemid, up_info, handleLvUpFunc, playAnim)
|
|
local info = cacheMap[ sitemid ];
|
|
if(info == nil)then
|
|
info = { itemid = sitemid };
|
|
cacheMap[ sitemid ] = info;
|
|
end
|
|
info.status = up_info.status;
|
|
info.exp = up_info.exp;
|
|
|
|
if(info.level and info.level == up_info.level - 1)then
|
|
handleLvUpFunc(sitemid, up_info.level, playAnim);
|
|
end
|
|
info.itemData = ItemData.new(nil,sitemid)
|
|
info.level = up_info.level;
|
|
end
|
|
|
|
-- Info (status, itemid, exp, level)
|
|
function FoodProxy:Get_MaterialExpInfo(itemid)
|
|
return self.material_exp_info[itemid];
|
|
end
|
|
|
|
function FoodProxy:Get_FoodCookExpInfo(itemid)
|
|
return self.food_cook_info[itemid];
|
|
end
|
|
|
|
function FoodProxy:Get_FoodEatExpInfo(itemid)
|
|
return self.food_eat_info[itemid];
|
|
end
|
|
|
|
-- 更新最近的料理
|
|
function FoodProxy:Server_UpdateFoodInfo(data)
|
|
local last_cooked_foods = data.last_cooked_foods
|
|
-- helplog("Server_UpdateFoodInfo size:",#last_cooked_foods)
|
|
|
|
for i=1,#last_cooked_foods do
|
|
foodItemId = last_cooked_foods[i];
|
|
if(#self.last_cooked_foods >= self.max_recent_cook)then
|
|
table.remove(self.last_cooked_foods,1)
|
|
end
|
|
self.last_cooked_foods[ #self.last_cooked_foods +1] = foodItemId;
|
|
end
|
|
|
|
local eat_foods = data.eat_foods
|
|
local foodItemInfo
|
|
for i=1,#eat_foods do
|
|
foodItemInfo = eat_foods[i];
|
|
if(foodItemInfo.itemid)then
|
|
self.eating_foods[#self.eating_foods +1 ] = {itemid = foodItemInfo.itemid, invalidTime = foodItemInfo.invalid_time};
|
|
end
|
|
end
|
|
|
|
local del_eat_foods = data.del_eat_foods
|
|
for i=1,#del_eat_foods do
|
|
self:remove_eat_food(del_eat_foods[i])
|
|
end
|
|
end
|
|
|
|
function FoodProxy:remove_eat_food( id )
|
|
-- body
|
|
local foodInfo
|
|
for i=1,#self.eating_foods do
|
|
foodInfo = self.eating_foods[i]
|
|
if(foodInfo.itemid == id)then
|
|
table.remove(self.eating_foods,i)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function FoodProxy:GetMyFoodBuffProps()
|
|
local items = self.eating_foods
|
|
local list = {}
|
|
local bufferMap = {}
|
|
local buffInvalidTimeMap = {}
|
|
for i=1,#items do
|
|
local itemData = ItemData.new(nil,items[i].itemid)
|
|
if(itemData)then
|
|
list[#list+1] = itemData
|
|
local BuffEffectData = Table_Food[items[i].itemid].BuffEffect
|
|
for j=1,#BuffEffectData do
|
|
local count = bufferMap[BuffEffectData[j]] or 0
|
|
count = count +1
|
|
bufferMap[BuffEffectData[j]] = count
|
|
|
|
-- 設定buff時間
|
|
local oldInvalidTime = buffInvalidTimeMap[BuffEffectData[j]] or 0
|
|
local newInvalidTime = items[i].invalidTime
|
|
|
|
if oldInvalidTime < newInvalidTime then
|
|
buffInvalidTimeMap[BuffEffectData[j]] = newInvalidTime
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local props = RolePropsContainer.CreateAsTable()
|
|
|
|
for _, o in pairs(props.configs) do
|
|
props:SetValueById(o.id,0)
|
|
end
|
|
local propValue = {}
|
|
local bufferList = {}
|
|
local bufferInvalidTimeList = {}
|
|
for k,v in pairs(bufferMap) do
|
|
local buffData = Table_Buffer[k]
|
|
local newInvalidBuffTime = buffInvalidTimeMap[k]
|
|
local effect = buffData["BuffEffect"]
|
|
if(effect.type == "AttrChange")then
|
|
for j,w in pairs(effect) do
|
|
local prop = props[j]
|
|
local oldPropInvalidTime = bufferInvalidTimeList[j]
|
|
if(j ~= "type" and prop)then
|
|
local oldValue = props:GetValueByName(j)
|
|
local deltaValue = w*v
|
|
if(prop.propVO.isPercent)then
|
|
deltaValue = deltaValue*1000
|
|
oldValue = oldValue*1000
|
|
end
|
|
local vl = deltaValue + oldValue
|
|
props:SetValueByName(j,vl)
|
|
local exsit = propValue[j]
|
|
if(not exsit)then
|
|
bufferList[#bufferList +1] = prop
|
|
propValue[j] = prop
|
|
end
|
|
|
|
if not oldPropInvalidTime then
|
|
bufferInvalidTimeList[j] = newInvalidBuffTime
|
|
elseif oldPropInvalidTime > newInvalidBuffTime then
|
|
bufferInvalidTimeList[j] = newInvalidBuffTime
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
props:Destroy();
|
|
|
|
-- helplog("<<<========GetMyFoodBuffProps=========>>>")
|
|
-- TableUtil.Print(bufferList)
|
|
-- TableUtil.Print(bufferInvalidTimeList)
|
|
|
|
return bufferList, bufferInvalidTimeList;
|
|
end
|
|
|
|
function FoodProxy:GetEatFoods()
|
|
return self.eating_foods
|
|
end |