2025-06-04 05:02:57 +08:00

220 lines
5.4 KiB
Plaintext

AstrolabeProxy = class('AstrolabeProxy', pm.Proxy)
AstrolabeProxy.Instance = nil;
AstrolabeProxy.NAME = "AstrolabeProxy"
autoImport("Astrolabe_BordData");
local TableClear = TableUtility.TableClear
function AstrolabeProxy:ctor(proxyName, data)
self.proxyName = proxyName or AstrolabeProxy.NAME
if(AstrolabeProxy.Instance == nil) then
AstrolabeProxy.Instance = self
end
self:Init();
end
function AstrolabeProxy:Init()
self.curBord = Astrolabe_BordData.new();
end
function AstrolabeProxy:GetActiveStarPoints()
local total = 0;
for k,pointData in pairs(self:GetActivePointsMap())do
total = total + 1;
end
return total;
end
function AstrolabeProxy:GetActivePointsMap()
return self.curBord:GetActivePointsMap();
end
function AstrolabeProxy:GetTotalPointCount(rolelv, profession)
if(rolelv == nil)then
rolelv = MyselfProxy.Instance:RoleLevel();
end
if(profession == nil)then
profession = MyselfProxy.Instance:GetMyProfession();
end
return self.curBord:GetTotalPointCount(rolelv, profession);
end
function AstrolabeProxy:InitProfessionPlate_PropData(profession)
self.curBord:InitPlates_Prop(profession);
end
function AstrolabeProxy:GetCurBordData()
return self.curBord;
end
function AstrolabeProxy:Server_SetActivePoints(pids)
self.curBord:Server_SetActivePoints(pids);
end
function AstrolabeProxy:Server_ResetPoints(server_stars, noReset)
self.curBord:Server_ResetPoints(server_stars);
end
function AstrolabeProxy:ResetPlate()
self.curBord:Reset();
end
function AstrolabeProxy:GetEffectMap(plate)
return self.curBord:GetAdd_EffectMap();
end
function AstrolabeProxy:GetSkill_SpecialEffect(skillid)
return self.curBord:GetSkill_SpecialEffect(skillid);
end
function AstrolabeProxy:GetSpecialEffectCount(specialEffectId)
return self.curBord:GetSpecialEffectCount(specialEffectId);
end
function AstrolabeProxy:SkillSetSpecialEnable(specialEffectId, enabled)
self.curBord:SkillSetSpecialEnable(specialEffectId, enabled);
end
function AstrolabeProxy:CheckNeed_DoServer_InitPlate()
self.curBord:CheckNeed_DoServer_InitPlate();
end
function AstrolabeProxy:CheckCanActive_AnyAstrolabePoint()
local userdata = Game.Myself and Game.Myself.data.userdata;
local left_slivernum = userdata:Get(UDEnum.SILVER) or 0;
local left_contributenum = userdata:Get(UDEnum.CONTRIBUTE) or 0;
local cost_slivernum, cost_contributenum, cost_goldawardnum = 0, 0, 0;
local pointData, cost;
local hasOff = false;
local bagProxy = BagProxy.Instance
local offMap = self.curBord:GetOffPointsIDMap();
for guid,_ in pairs(offMap)do
hasOff = true;
pointData = self:GetPoint(nil, guid);
cost = pointData:GetCost();
for j=1,#cost do
if(cost[j][1] == 100)then
if(left_slivernum < cost[j][2])then
return false;
end
elseif(cost[j][1] == 140)then
if(left_contributenum < cost[j][2])then
return false;
end
elseif(cost[j][1] == 5261)then
local leftNum = bagProxy:GetItemNumByStaticID(cost[j][1]);
if(leftNum < cost[j][2])then
return false;
end
end
end
end
if(hasOff)then
return true;
end
return false;
end
function AstrolabeProxy:CheckPlateIsUnlock(plateid, bordData)
bordData = bordData or self.curBord;
return bordData:CheckPlateIsUnlock(plateid);
end
-- 星盤存檔相關 begin
function AstrolabeProxy:GetBordData_BySaveInfo(saveInfoData, useBranch)
if(saveInfoData == nil)then
return;
end
local bordData = Astrolabe_BordData.new();
local professionId;
if(useBranch)then
professionId = saveInfoData:GetProfession();
else
professionId = saveInfoData:GetProfession();
end
bordData:InitPlates_Prop(professionId);
-- 目前星盤解鎖沒有等級限制
bordData:InitUnlockParam(saveInfoData:GetProfession(), 200);
local astrolabeSaveData = saveInfoData:GetAstroble();
if(astrolabeSaveData == nil)then
return bordData;
end
local server_stars = astrolabeSaveData:GetActiveStars();
local temp = {};
TableUtility.ArrayShallowCopy(temp, server_stars);
if(#temp == 0)then
table.insert(temp, Astrolabe_Origin_PointID);
end
bordData:Server_SetActivePoints(temp);
return bordData;
end
function AstrolabeProxy:GetStorageActivePointsCost(storageId)
local server_stars = MultiProfessionSaveProxy.Instance:GetActiveStars(storageId);
return self:GetPoints_ActiveCosts(server_stars);
end
function AstrolabeProxy:GetStorageActivePointsCost_BySaveInfo(saveInfoData)
local server_stars = saveInfoData:GetActiveStars();
return self:GetPoints_ActiveCosts(server_stars);
end
function AstrolabeProxy:GetPoints_ActiveCosts(active_stars)
local resultCost = {};
for i=1,#active_stars do
local cost = Astrolabe_GetPointCost(active_stars[i]);
if(cost)then
for k,v in pairs(cost)do
local itemid, num = v[1], v[2];
if(resultCost[ itemid ] == nil)then
resultCost[ itemid ] = num;
else
resultCost[ itemid ] = resultCost[ itemid ] + num;
end
end
end
end
return resultCost;
end
-- !!!!!!!!! Get My ActivePoints Cost !!!!!!!!!
function AstrolabeProxy:GetStorageActivePointsCost_ByPlate()
local activePointsMap = self:GetActivePointsMap();
local resultCost = {};
for k,pointData in pairs(activePointsMap)do
local cost = pointData:GetCost();
for k,v in pairs(cost)do
local itemid, num = v[1], v[2];
if(resultCost[ itemid ] == nil)then
resultCost[ itemid ] = num;
else
resultCost[ itemid ] = resultCost[ itemid ] + num;
end
end
end
return resultCost;
end
-- !!!!!!!!! Get My ActivePoints Cost !!!!!!!!!
-- 星盤存檔相關 end