184 lines
5.6 KiB
Lua
184 lines
5.6 KiB
Lua
|
|
local skynet = require "skynet"
|
||
|
|
local oo = require "Class"
|
||
|
|
local log = require "Log"
|
||
|
|
local pb = require "pb"
|
||
|
|
local dataType = require "DataType"
|
||
|
|
local errorInfo = require "ErrorInfo"
|
||
|
|
local Map = oo.class()
|
||
|
|
|
||
|
|
--[[
|
||
|
|
CMD_C2S_MapShow = 1143; //地图展示
|
||
|
|
CMD_S2C_MapShow = 1144;
|
||
|
|
|
||
|
|
//地图信息
|
||
|
|
message PBMapInfo
|
||
|
|
{
|
||
|
|
int32 id = 1; //地点ID
|
||
|
|
status = 2; //状态 1-未解锁 2-已解锁 3-暂未开放 4-店主外出
|
||
|
|
}
|
||
|
|
|
||
|
|
//地图展示
|
||
|
|
message C2SMapShow
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
//地图展示
|
||
|
|
message S2CMapShow
|
||
|
|
{
|
||
|
|
repeated PBMapInfo mapInfo = 1; --地图信息
|
||
|
|
}
|
||
|
|
]]
|
||
|
|
|
||
|
|
Map.ShopStatus_Lock = 1 --未解锁
|
||
|
|
Map.ShopStatus_UnLock = 2 --已解锁
|
||
|
|
Map.ShopStatus_Location = 3 --当前位置
|
||
|
|
|
||
|
|
--初始化地点信息
|
||
|
|
function Map:InitData( player )
|
||
|
|
--log.info('初始化地点展示data' .. skynet.server.common:TableToString(player.gameData.map))
|
||
|
|
--player.gameData.map = {}
|
||
|
|
-- if next( player.gameData.map) == nil then
|
||
|
|
for k, v in pairs( skynet.server.gameConfig.MapLoc ) do
|
||
|
|
if not self:IsExistMapID( player , v.id ) then
|
||
|
|
if 1 == v.id then --我的当是解锁了的
|
||
|
|
table.insert( player.gameData.map , { id = v.id , status = self.ShopStatus_Location , progress = 0 })
|
||
|
|
else
|
||
|
|
table.insert( player.gameData.map , { id = v.id , status = self.ShopStatus_Lock , progress = 0 })
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--每次登录后,我的家是当前位置
|
||
|
|
for k, v in pairs( player.gameData.map ) do
|
||
|
|
if 1 == v.id then
|
||
|
|
v.status = self.ShopStatus_Location
|
||
|
|
else
|
||
|
|
if self.ShopStatus_Location == v.status then
|
||
|
|
v.status = self.ShopStatus_UnLock
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--外出地点展示
|
||
|
|
function Map:ShowLoc( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SMapShowLoc", c2sData.data ))
|
||
|
|
local data ={}
|
||
|
|
data.pBMapLocInfo = {}
|
||
|
|
for k, v in pairs( player.gameData.map ) do
|
||
|
|
table.insert( data.pBMapLocInfo , v )
|
||
|
|
end
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_MapShowLoc")
|
||
|
|
s2cData.data = assert(pb.encode("S2CMapShowLoc", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--进入外出地点
|
||
|
|
function Map:EntryLoc( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SMapLocEnter", c2sData.data ))
|
||
|
|
local data ={}
|
||
|
|
local mapId = c2sData.data.mapLocId
|
||
|
|
if not mapId then
|
||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
|
|
else
|
||
|
|
local isCanEnter = false
|
||
|
|
for k, v in pairs( player.gameData.map ) do
|
||
|
|
--清除当前位置,为解锁状态
|
||
|
|
if self.ShopStatus_Location == v.status then
|
||
|
|
v.status = self.ShopStatus_UnLock
|
||
|
|
end
|
||
|
|
|
||
|
|
if mapId == v.id and v.status == self.ShopStatus_UnLock then
|
||
|
|
isCanEnter = true
|
||
|
|
v.status = self.ShopStatus_Location
|
||
|
|
|
||
|
|
if 3 == mapId then
|
||
|
|
skynet.server.levelTask:Modify( player , 26 , 1 )
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if not isCanEnter then
|
||
|
|
s2cData.code = errorInfo.ErrorCode.NoUnlockMap
|
||
|
|
else
|
||
|
|
local cfgCurMap = skynet.server.gameConfig:GetCurCfg("MapLoc",mapId)
|
||
|
|
data.friend = skynet.server.friend:GetFriendDetail( player , cfgCurMap.onLocNpc )
|
||
|
|
data.mapLocId = mapId
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_MapLocEnter")
|
||
|
|
s2cData.data = assert(pb.encode("S2CMapLocEnter", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--NPC详情
|
||
|
|
function Map:ShowNPCDetail( player , c2sData , s2cData )
|
||
|
|
c2sData.data = assert(pb.decode("C2SMapShowNPCDetail", c2sData.data ))
|
||
|
|
local data ={}
|
||
|
|
local npcId = c2sData.data.npcId
|
||
|
|
local npcInfo = player.gameData.friend[ npcId ]
|
||
|
|
if not npcId or not npcInfo then
|
||
|
|
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
|
||
|
|
else
|
||
|
|
data.favorabilityLevel = npcInfo.favorabilityLevel
|
||
|
|
data.favorabilityValue = npcInfo.favorabilityValue
|
||
|
|
data.giftGoods= npcInfo.giftGoods
|
||
|
|
end
|
||
|
|
s2cData.cmd = pb.enum("MsgType","CMD_S2C_MapShowNPCDetail")
|
||
|
|
s2cData.data = assert(pb.encode("S2CMapShowNPCDetail", data))
|
||
|
|
end
|
||
|
|
|
||
|
|
--是否存在地图ID
|
||
|
|
function Map:IsExistMapID( player , mapId)
|
||
|
|
for k, v in pairs( player.gameData.map ) do
|
||
|
|
if mapId == v.id then
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
--修改地图状态
|
||
|
|
function Map:ChangeStatus( player , mapId , status )
|
||
|
|
for k, v in pairs( player.gameData.map ) do
|
||
|
|
if mapId == v.id then
|
||
|
|
v.status = status
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--获取地图某个店是解锁
|
||
|
|
function Map:IsUnlock( player , mapId )
|
||
|
|
for k, v in pairs( player.gameData.map ) do
|
||
|
|
if mapId == v.id and v.status >= self.ShopStatus_UnLock then
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
--查看该玩家所在地点
|
||
|
|
function Map:PresentMapLoc(player)
|
||
|
|
for k, v in pairs(player.gameData.map) do
|
||
|
|
if v.status==3 then
|
||
|
|
return v.id
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--检查地点解锁
|
||
|
|
function Map:CheckUnlcokLoc( player )
|
||
|
|
for k, v in pairs( player.gameData.map ) do
|
||
|
|
if self.ShopStatus_Lock == v.status then
|
||
|
|
local cfgOneMapLoc = skynet.server.gameConfig:GetCurCfg("MapLoc" , v.id )
|
||
|
|
local condition = skynet.server.common:Split( cfgOneMapLoc.unlockCondition , "_")
|
||
|
|
--达到指定等级就解锁
|
||
|
|
if 1 == tonumber(condition[1]) and player.gameData.level == tonumber(condition[2]) then
|
||
|
|
v.status = self.ShopStatus_UnLock
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
skynet.server.map = Map
|
||
|
|
return Map
|