源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

631 lines
18 KiB

--[[
服务器下发的角色信息结构体
]]
RoleVo = RoleVo or BaseClass(BaseVo)
local RoleVo = RoleVo
local UserMsgAdapter_ReadFmt = UserMsgAdapter.ReadFmt
local UserMsgAdapter_ReadFmt2 = UserMsgAdapter.ReadFmt2
RoleVo.PK_STATUS = {
Peace = 0, --和平
Force = 1, --强制
All = 2, --全体
GUILD = 3, --社团模式
Local = 4, --本服(只能攻击其它服)
ForcePeace = 9, --强制和平
}
RoleVo.Act_Flag = {
GUILD_WAR_EQUIP_CAMION= 1, -- 本服团战
CONVOY_ROB= 2, -- 护送抢夺“劫”字形象
KF_TOWN_WAR_SHIP= 3, -- 跨服城战船形象
RAGEWAR_TOP= 5, -- 狂战领域积分第一标识
MELEE_GRADE= 6, -- 大乱斗段位形象
CHARM_BEACH= 7, -- 魅力海滩休闲状态
FISHING= 8, -- 钓鱼状态
FISHING_ACT= 12, -- 钓鱼动作id
GUILD_WAR_EQUIP_BLUNT= 13, -- 公会争霸冲车形象
CS_1VN_SIDE= 14, -- 跨服1vn身份 (1擂主)
CHARM_BEACH_CHAIR= 15, -- 魅力海滩座椅交互(场景物件id)
CONVOY= 16, -- 护送形象
MATE_RHYTHM_MASTER= 17, -- 羁绊-节奏大师-跳舞标识
MATE_CATCH_BALL= 18, -- 羁绊-抛接球-玩球标识
MAX_HURT= 19, -- BOSS攻击最高伤害
BOSS_TIRED= 20, -- BOSS疲劳值
REWARD_BOSS_SUPPORT= 21, -- 协助标识
DUNGEON_GOD_DOUBLE_REWARD= 22, -- 唤神副本双倍奖励
GUILD_CSGR= 23, -- 社团本国团战
}
function RoleVo:__init()
end
function RoleVo:__defineVar()
return {
_class_type = self,
--_cid = self._id,
_iid = _in_obj_ins_id,
_use_delete_method = false,
vo_type = SceneBaseType.Role,
role_id = 0, --用户ID(int32)
plat_name = "" , --平台名(string)
server_id = 0 , --服ID(int16)
name = "", --玩家名(string)
sex = 0, --性别(int8) 男1女2
level = 100 , --等级(int16)
pos_x = 0, --X像素坐标(int16)
pos_y = 0, --Y像素坐标(int16)
dsgt_id = 0, --用户称号ID(int32)
grade_id = 0, --爵位id
--dsgt_name = "", --用户称号名称
hp = 100, --当前hp(int32)
maxHp = 100, --最大hp(int32)
move_speed = 160, --玩家速度(int16)
weapon = 0 , -- int:32 武器
cloth = 0, -- int:32 装备
career = 0, --角色(int8) --神将=1 、天君=2、罗刹=3
realm = 0, --国家(int8)
warGroup = 0, --战斗分组(int8)
total_title = 0, --称号总数
title_list = {}, --称号列表
-- horse_id = 801020100, --坐骑ID(int32),前期任务之类的飞行
is_ride = 0, -- 是否骑乘状态,0非,1是
horse_id = 0, --坐骑ID(int32),前期任务之类的飞行
pet_id = 0, -- 宠物ID
pet_status = 0, -- 宠物标志位0隐藏1显示
pk_status = 1, --PK状态(int8)
imageId = 0, --玩家形象(变身形象)(int32)
vip_flag = 0, --Vip标识(int8)
guild_id = 0, --社团ID(int32)
guild_name = "", --社团名称(string)
position = 0, --社团职位(int8)
hide_flag = 0 , --是否不可见(int8)
ghost_mode = 0, --幽灵状态(int8)
fighting = 0, --战斗力(int32)
dance_status = 0, --跳舞状态(int8) 0取消跳舞 1跳舞中
boss_flag = 0, --是否boss归属 0否 1是
team_id = 0, --队伍id 32
team_job = 0, --队伍职位(0 无 1队长 2队员)
flag_state = 0, --旗子标识 0标示无 1红色旗子
prePoseState = PoseState.STAND,
poseState = PoseState.STAND,
battle_title = 0, --战场头衔(天空|旗子站)
sky_flags = {}, --天空战场旗子
state_type = 0, --int:8 状态类型(0:无 1:补魔 2:被补魔 3:自我补魔)
weapon_effect = 0, --装备附魔
birth_angle = 270, --出生角度 水平向右为0 逆时针一圈为360度
show_base_info_only = false, --nameBoard只显示名字和血条
--wing_id = 0, --翅膀
safe_area_state = 0, --1角色处于安全区域状态 2角色处于非安全区域状态 3角色切场景进入安全区域状态
hatred = 0, --罪恶值
is_marriage = 0, --婚姻状态(0单身 1恋爱 2已婚)
wedding_state_flags = 0, --婚礼状态标识
parade_state_flags = 0, --巡游状态标识
marriage_id = 0, --伴侣id
marriage_name = "", --伴侣名字
sprite_id = 0, --小精灵id
baby_id = 0, --宝宝id
child_follow_status = 0, --宝宝标志位0隐藏1显示
escort_state = 0, --护送id
protect_time = 0, --保护时间
date_role_id = 0,
pokemon_id = 0, --宠物id
pokemon_star = 0, --宠物阶数
activity_flags = {}, --活动标识
casual_state_flags = 0, --海滩休闲
is_fishing_flag = 0, --钓鱼状态标识
deity_id = 0,
turn = 0, --转生
mate_name = "", --羁绊相关
mate_title = "", --羁绊相关
mate_lv = 0, --羁绊称号显示等级
guild_contribute = 0, --社团贡献
honor = 0, --名望券
pet_wing_id = 0,
pet_weapon_id = 0,
pet_farmour = 0,
action_energy = 0, --当前行动能量
max_action_energy = 0, --行动能量最大值
god_id = 0, --式神id
god_hp = 0, --式神血量
god_max_hp = 0, --式神血量上限
money_boss_protect_time = 0, --赏金boss保护时间戳
deserted_boss_protect_time = 0, --星域boss保护时间戳
}
end
function RoleVo:ResetData()
self.horse_id = 0
self.money_boss_protect_time = 0
self.deserted_boss_protect_time = 0
end
--[[
int:64 用户ID
string 平台(显示用)
int:16 第几服(显示用)
string 服务器名称(显示用)
figure 形象
int:16 X坐标
int:16 Y坐标
int:32 hp
int:32 hp_lim
int:16 玩家速度
]]
function RoleVo:ReadFromProtocal( )
self.role_id,
self.plat_name,
self.server_id,
self.server_num = UserMsgAdapter_ReadFmt("lshh")
FigureProtoVo.ReadFmt(self)
local team_id
local len
self.pos_x,
self.pos_y,
self.hp,
self.maxHp,
self.move_speed,
-- self.att_speed, --攻击速度
self.hide_flag, --是否不可见(int8)
self.ghost_mode, --幽灵状态(int8)
self.warGroup, --战斗分组
self.boss_flag,
team_id,
self.team_job,
self.pk_status,
self.fighting,
self.is_ride_wait_delete,--待删参数,放figure了
self.horse_id,
self.hatred,
self.pet_id,
self.pet_status,
self.protect_time,
self.date_role_id,
len = UserMsgAdapter_ReadFmt2("hhllhcclclccicihicilh")
self.activity_flags = {}
for i = 1, len do
local obj = {}
obj.key = UserMsgAdapter_ReadFmt("c")
obj.value = UserMsgAdapter_ReadFmt("l")
table.insert(self.activity_flags, obj)
end
self.mate_name = UserMsgAdapter_ReadFmt("s")--羁绊对象
self.mate_title = UserMsgAdapter_ReadFmt("s")--羁绊称号
self.dance_status = UserMsgAdapter_ReadFmt("c")--跳舞状态
self.mate_lv = UserMsgAdapter_ReadFmt("c")--羁绊称号显示等级
self.god_id = UserMsgAdapter_ReadFmt("h") --式神id
self.god_hp = UserMsgAdapter_ReadFmt("l")--式神血量
self.god_max_hp = UserMsgAdapter_ReadFmt("l")--式神血量上限
self.money_boss_protect_time = UserMsgAdapter_ReadFmt("i")--赏金boss保护时间戳
self.deserted_boss_protect_time = UserMsgAdapter_ReadFmt("i")--星域boss保护时间戳
-- print("self.pet_status=",self.pet_status)
-- print("protect_time=",self.protect_time)
-- print("date_role_id=",self.date_role_id,self.name)
-- print("escort_state=", self.escort_state)
-- print("===self.horse_id,self.hatred",self.horse_id,self.hatred,self.pet_id,self.name)
-- print("战斗分组------------=", team_id,self.name, self.warGroup, self.pos_x, self.pos_y, self.hp, self.maxHp, self.ghost_mode)
self:ChangeVar("team_id", team_id)
self:ChangeVar("mate_title", self.mate_title)
-- print("婚姻", self.is_marriage, self.marriage_id, self.marriage_name)
-- print("boss_flag", self.boss_flag)
-------------------------
--进阶部分
self:RefreshFosterData()
--进阶部分
-------------------------
end
--[[
int:32 ID
string 平台(显示用)
int:16 第几服(显示用)
figure 形象
int:16 X坐标
int:16 Y坐标
int:32 hp
int:32 hp_lim
int:16 速度
int:16 攻击速度
int:8 是否隐身(0否,1是)
int:8 是否幽灵(0否, 1是)
int:16 分组id
]]
function RoleVo:ReadFakeProtacal()
self.role_id,
self.plat_name,
self.server_id = UserMsgAdapter_ReadFmt("ish")
FigureProtoVo.ReadFmt(self)
self.pos_x,
self.pos_y,
self.hp,
self.maxHp,
self.move_speed,
-- self.att_speed, --攻击速度
self.hide_flag, --是否不可见(int8)
self.ghost_mode, --幽灵状态(int8)
self.warGroup,
self.fighting,
self.dance_status,
self.server_num = UserMsgAdapter_ReadFmt2("hhllhcclich") --战斗分组
print("假人数据------------=",self.name,self.role_id, self.pos_x, self.pos_y, self.hp, self.maxHp, self.ghost_mode, self.warGroup)
self.is_fake_role = true --是否假人 纯服务端控制的假人
if SceneManager:getInstance():IsGodDungeon() then
self.name = GetCSLongName(self.name,self.server_num)
end
-------------------------
--主角假人,暂时先用名字判断
if self.name == RoleManager.Instance.mainRoleInfo.name then
self.is_fake_main_role = true
end
-------------------------
--随机名字
if self.name == "" then
self.name = LoginModel:getInstance():GetRandomRoleName(self.sex, true)
end
-------------------------
--进阶部分
self:RefreshFosterData()
--进阶部分
-------------------------
end
--处理进阶部分数据
function RoleVo:RefreshFosterData( )
local sprite_res_id = 0--法宝
local pet_res_id = 0--AI娘
local pet_wing_id = 0--ai娘翅膀
local horse_id = 0--ai娘翅膀
local wing_id = 0
local pet_weapon_id = 0
local pet_farmour = 0
local function get_foster_skin( type_id )
for k,v in pairs(self.foster_skin_list) do
if v.type_id == type_id and v.skin_id > 0 then
return v.skin_id
end
end
for k,v in pairs(self.foster_sub_skin_list) do
if v.type_id == type_id and v.skin_id > 0 then
return v.skin_id
end
end
end
for k,v in pairs(self.foster_list) do
if v.type_id == FosterConst.ModuleId.FPearl then
sprite_res_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
elseif v.type_id == FosterConst.ModuleId.FJarvis then
pet_res_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
elseif v.type_id == FosterConst.ModuleId.FCloud then
pet_wing_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
elseif v.type_id == FosterConst.ModuleId.FHorse then
horse_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
elseif v.type_id == FosterConst.ModuleId.FWing then
wing_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
elseif v.type_id == FosterConst.ModuleId.FGun then
pet_weapon_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
elseif v.type_id == FosterConst.ModuleId.FArmour then
pet_farmour = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
end
end
self:ChangeVar("sprite_id",sprite_res_id)
self:ChangeVar("pet_id",pet_res_id)
self:ChangeVar("pet_wing_id",pet_wing_id)
self:ChangeVar("horse_id",horse_id)
self:ChangeVar("wing_id",wing_id)
self:ChangeVar("pet_weapon_id",pet_weapon_id)
self:ChangeVar("pet_farmour",pet_farmour)
self:ChangeVar("is_ride",self.is_ride)
end
--取等级模型id列表的衣服id
--scene_obj_type 是否是场景对象 还是ui对象
function RoleVo:GetRoleClotheId(scene_obj_type)
if scene_obj_type and self:CheckIsGod() then
local cfg = Config.God[self.god_id]
if cfg then
return cfg.resource
end
end
local model_res_list = self.level_model_list
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionPartPos.Clothe then
return v.level_model_id
end
end
end
end
--取时装衣服贴图id
function RoleVo:GetRoleClotheTextureId(scene_obj_type)
-- if RoleVo.IsModelLimit(self) then
-- return
-- end
-- if scene_obj_type and self:CheckIsGod() then
-- return nil
-- end
local model_res_list = self.fashion_model_list
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionModel.FashionType.CLOTHES then
--需要折算返回资源id
local id = v.fashion_model_id
if id < 1000 then
id = id + self.career * 1000
end
if v.fashion_chartlet_id > 1 then--配色大于1的要多连接一个配色
id = id .. v.fashion_chartlet_id
end
return tonumber(id), 0
end
end
end
end
--取时装头饰贴图id
--block是否屏蔽时装头饰
--目前来看 好像头发必须有 所以上面的block无效 总不能光头吴克吧
--发饰 也就是帽子在下面获取
function RoleVo:GetRoleHeadId(block)
local model_res_list
if not block then
model_res_list = not block and self.fashion_model_list or nil
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionModel.FashionType.HEAD then
--需要折算返回资源id
local id = v.fashion_model_id
if id < 1000 then
id = id + self.career * 1000
end
if v.fashion_chartlet_id > 1 then--配色要多连接一个后缀
id = id .. v.fashion_chartlet_id
end
return tonumber(id)
end
end
end
end
--没找到时装就用默认头发
model_res_list = self.level_model_list
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionPartPos.Head then
return v.level_model_id
end
end
end
end
function RoleVo:GetRoleWingId( block )
-- if RoleVo.IsModelLimit(self) then
-- return
-- end
--珍宝
if self.foster_skin_list then
for k,v in pairs(self.foster_skin_list) do
if v.type_id == FosterConst.ModuleId.FWing and v.skin_id and (v.skin_id > 0) then
return v.skin_id
end
end
end
--时装
if self.fashion_model_list then
for k,v in ipairs(self.fashion_model_list) do
if v.part_pos == FashionModel.FashionType.WING then
return v.fashion_model_id
end
end
end
--基础进阶
if self.foster_list then
for k,v in pairs(self.foster_list) do
if v.type_id == FosterConst.ModuleId.FWing then
self.wing_id = FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
end
end
end
--进阶
if self.wing_id and self.wing_id > 0 then
return self.wing_id
else
if self.level_model_list then
for k,v in ipairs(self.level_model_list) do
if v.part_pos == FashionPartPos.wing then
return v.level_model_id
end
end
end
end
end
--取时装发饰贴图id
--block是否屏蔽时装=发饰
function RoleVo:GetRoleHatId(block)
-- if RoleVo.IsModelLimit(self) then
-- return
-- end
local model_res_list = not block and self.fashion_model_list or nil
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionModel.FashionType.HAT then
return v.fashion_model_id
end
end
end
end
--取足迹的id
function RoleVo:GetRoleFootmarkId()
do return end--还没足迹 时装列表里面没有你要的东西 别来这遍历了
if RoleVo.IsModelLimit(self) then
return
end
local model_res_list = self.fashion_model_list
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionPartPos.Footmark then
return v.fashion_model_id
end
end
end
end
--block: 1屏蔽时装 2 屏蔽神兵
--先去时装模型列表的 再取等级模型id列表的武器id
function RoleVo:GetWeaponClotheId(scene_obj_type,block)
local model_res_list
if self.role_id == RoleManager:getInstance():GetMainRoleId() then
if FosterModel:GetInstance():GetShowHideType( FosterConst.ModuleId.FWeapon ) then
if FosterConst.DefaultWeaponId[RoleManager.Instance.mainRoleInfo.career] then
return FosterConst.DefaultWeaponId[RoleManager.Instance.mainRoleInfo.career]
end
end
end
--皮肤
if self.foster_sub_skin_list then
for k,v in pairs(self.foster_sub_skin_list) do
if v.type_id == FosterConst.ModuleId.FWeapon and v.skin_id and (v.skin_id > 0) then
return v.skin_id
end
end
end
--珍宝
if self.foster_skin_list then
for k,v in pairs(self.foster_skin_list) do
if v.type_id == FosterConst.ModuleId.FWeapon and v.skin_id and (v.skin_id > 0) then
return v.skin_id
end
end
end
--时装
if not block then
model_res_list = (not block or block ~= 2) and self.fashion_model_list or nil
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionModel.FashionType.WEAPON then
--需要折算返回资源id
local id = v.fashion_model_id
if id < 1000 then
id = id + self.career * 1000
end
return tonumber(id)
end
end
end
end
--进阶
model_res_list = self.level_model_list
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == FashionPartPos.Weapon then
return v.level_model_id
end
end
end
end
--更新等级模型数据
function RoleVo:UpdateLevelModelList(part_pos, value)
local model_res_list = self.level_model_list
if model_res_list then
for k,v in ipairs(model_res_list) do
if v.part_pos == part_pos then
v.level_model_id = tonumber(value)
elseif v.part_pos == part_pos then
v.level_model_id = tonumber(value)
end
end
end
end
function RoleVo:CheckIsGod()
return self.god_id > 0
end
--获取相应标志
-- 活动类型 17羁绊小游戏
function RoleVo:GetFlagsByKey(key)
local value = 0
if self.activity_flags then
for i,v in pairs(self.activity_flags) do
if v.key == key then
value = v.value
break
end
end
end
return value
end
-- 判断活动标志是否存在
function RoleVo:ExitFlag(key)
local bool = false
if self.activity_flags then
for i,v in pairs(self.activity_flags) do
if v.key == key then
bool = true
break
end
end
end
return bool
end
function RoleVo:__delete()
end
--外观限制,部分多人玩法只需显示基础外观
function RoleVo:IsModelLimit( )
if self.role_id == RoleManager:getInstance():GetMainRoleId() then
return false
end
if SceneManager then
if SceneManager:getInstance():IsFullEffectScene() then
return false
end
if SceneManager:getInstance():IsModelLimited() then
return true
end
end
return false
end