|
|
- --[[
- 服务器下发的怪物信息结构体
- ]]
- MonsterVo = MonsterVo or BaseClass(BaseVo)
- local MonsterVo = MonsterVo
-
- local UserMsgAdapter_ReadFmt = UserMsgAdapter.ReadFmt
- local UserMsgAdapter_ReadFmt2 = UserMsgAdapter.ReadFmt2
-
- MonsterVo.Act_Flag = {
- COLLECT = 1, --点击采集
- SEAL = 2, --点击封印
- }
-
- function MonsterVo:__init()
- end
- function MonsterVo:__defineVar()
- return {
- _class_type = self,
- --_cid = self._id,
- _iid = _in_obj_ins_id,
- _use_delete_method = false,
- vo_type = SceneBaseType.Monster,
- pos_x = 0, --X坐标(int16)
- pos_y = 0 ,--Y坐标(int16)
- instance_id = 0 , --怪物唯一标识(int32)
- type_id = 0 , --怪物类型ID(int32)
- hp = 100, --怪物当前血量(int32)
- maxHp = 100 ,--怪物最大血量(int32)
- level = 1, --怪物等级(int16)
- name = "", --怪物名字(string)
- move_speed = 160, --怪物速度(int16)
- monster_res = 0 ,--怪物资源(int32)
- effect_res = "", --特效资源(string)
- texture_res = 0,
- weapon_id = 0,
- attack_mode = 0 ,--攻击类型(int8) 0:近战 1:远程
- type = 0, --类型(int8) 0普通怪,1采集怪,2任务采集怪,3护送怪,4拾取怪,6进击怪,7塔防怪,9自动进击怪
- quality = 0, --品级(int8) 0白/1绿/2蓝/3紫/4橙
- guaji_flag = 0 ,--是否挂机(int8) 0是,1否
- boss_type = 0 ,--Boss类型(int8) 0普通怪,1普通野外怪,2精英怪物,3赏金幻魔,4世界BOSS,5不死BOSS,6副本BOSS,7任务BOSS
- pick_time = 0, --采集所需时间(int32)
- master_id = 0, --主人ID(int32)
- can_pick = 1 , --是否可点击(0否 1是)
- can_attack = 1,--是否可攻击(0否 1是)
- warGroup = 0 , --攻击阵营,默认0为无阵营
- realm = 0 , --国家/阵营(1|2|3)
- prePoseState = PoseState.STAND,
- poseState = PoseState.STAND,
- guild_id = 0,
- role_id = 0,
- birth_angle = nil,
- five_element = 0,
- title = 0,
- protect_time = 0,--无敌特效消失时间
- head_wear_id = 0,
- head_wear_chartlet_id = 0,
- career = 0,
- -----------------------------一下是客户端战斗用到的属性------------------------------------------------------------------------
-
- hide_flag = 0, --是否隐藏
- ghost_mode = 0, --是否幽灵模式
- }
- end
-
- function MonsterVo:ResetData()
- -- self.pos_x = 0 --X坐标(int16)
- -- self.pos_y = 0 --Y坐标(int16)
- -- self.instance_id = 0 --怪物唯一标识(int32)
- -- self.type_id = 0 --怪物类型ID(int32)
- -- self.hp = 100 --怪物当前血量(int32)
- -- self.maxHp = 100 --怪物最大血量(int32)
- -- self.level = 1 --怪物等级(int16)
- -- self.name = "" --怪物名字(string)
- -- self.move_speed = 160 --怪物速度(int16)
- -- self.monster_res = 0 --怪物资源(int32)
- -- self.effect_res = "" --特效资源(string)
- -- self.texture_res = 0
- -- self.weapon_id = 0
- -- self.attack_mode = 0 --攻击类型(int8) 0:近战 1:远程
- -- self.type = 0 --类型(int8) 0普通怪,1采集怪,2任务采集怪,3护送怪,4拾取怪,6进击怪,7塔防怪,9自动进击怪
- -- self.quality = 0 --品级(int8) 0白/1绿/2蓝/3紫/4橙
- -- self.guaji_flag = 0 --是否挂机(int8) 0是,1否
- -- self.boss_type = 0 --Boss类型(int8) 0普通怪,1普通野外怪,2精英怪物,3赏金幻魔,4世界BOSS,5不死BOSS,6副本BOSS,7任务BOSS
- -- self.pick_time = 0 --采集所需时间(int32)
- -- self.master_id = 0 --主人ID(int32)
- -- self.can_pick = 1 --是否可点击(0否 1是)
- -- self.can_attack = 1--是否可攻击(0否 1是)
- -- self.warGroup = 0 --攻击阵营,默认0为无阵营
- -- self.realm = 0 --国家/阵营(1|2|3)
- -- self.prePoseState = PoseState.STAND
- -- self.poseState = PoseState.STAND
- -- self.guild_id = 0
- -- self.birth_angle = nil
-
- -- self.title = 0
- self.owner_id = 0 --怪物所属玩家id
- self.owner_name = "" --怪物所属玩家名字
- self.cfg_data = nil
- self.is_armor = 0 --是否霸体
- self.icon_scale = 1
- self.is_blood_bar = 1
- self.color = 0
- self.birth_angle = nil
- self.birth_effect_res = nil --出生特效
- self.foot_effect_res = nil--脚下特效
- self.classification = nil --怪物分类名字
- self.load_immediately = 0 --是否立即加载怪物
- self.is_hit_ac = 0 --是否需要受击动作
-
- self.is_hide_hp = nil
-
- -- self.hide_flag = 0 --是否隐藏
- -- self.ghost_mode = 0 --是否幽灵模式
- end
-
- --[[
- int:16 X坐标
- int:16 Y坐标
- int:32 唯一标识
- int:32 怪物ID
- int:64 hp
- int:64 hp_lim
- int:16 等级
- string 名字
- int:16 速度
- int:32 怪物资源
- int: 8 0进战 1远程
- int: 8 类型 0为怪物 1采集 2旗子 3护送车队
- int: 8 0白/1绿/2蓝/3紫/4橙
- int: 8 是否挂机:0是,1否
- int: 8 BOSS类型 0普通怪,1野外BOSS,2宠物BOSS,3世界BOSS,4社团BOSS,5副本BOSS,6爬塔BOSS,7塔防BOSS
- int:32 采集所需时间
- int:8 是否可点击(0 不可点击, 1可点击)
- int:8 是否可攻击(0 不可攻击, 1可攻击)
- int:8 是否隐身(0否,1是)
- int:8 是否幽灵(0否, 1是)
- int:16 分组id
- int:64 所属社团id
- int:64 所属玩家id
- ]]
- function MonsterVo:ReadFromProtocal()
- local len
-
- self.pos_x, --X坐标(int16)
- self.pos_y, --Y坐标(int16)
- self.instance_id, --怪物唯一标识(int32)
- self.type_id, --怪物类型ID(int32)
- self.hp, --怪物当前血量(int32)
- self.maxHp, --怪物最大血量(int32)
- self.level, --怪物等级(int16)
- self.name, --怪物名字(string)
- self.move_speed, --怪物速度(int16)
- self.monster_res, --怪物资源(int32)
- self.effect_res, --特效资源(string)
- self.texture_res, --贴图id(int32)
- self.weapon_id, --武器id(int32)
- self.attack_mode, --攻击类型(int8) 0:近战 1:远程
- self.type, --类型(int8) 0为怪物 1采集 2旗子 3护送车队
- self.quality, --品级(int8) 0白/1绿/2蓝/3紫/4橙
- self.guaji_flag, --是否挂机(int8) 0是,1否
- self.boss_type, --Boss类型(int8) 0普通怪,1普通野外怪,2精英怪物,3本服BOSS,4跨服BOSS,5活动BOSS,6副本BOSS,7任务BOSS
- self.pick_time, --采集所需时间(int32)
- self.can_pick,
- self.can_attack,
- self.hide_flag, --是否不可见(int8)
- self.ghost_mode, --幽灵状态(int8)
- self.warGroup,
- self.guild_id, --社团ID
- self.role_id, --所属角色ID
- self.birth_angle, --出生角度
- self.owner_id, --怪物所属玩家id
- self.owner_name, --怪物所属玩家名字
- self.title,--头衔
- self.protect_time, --PK保护结束时间搓
- len = UserMsgAdapter_ReadFmt("hhiillhshisiicccccicccclllhlsiih")
- self.activity_flags = {}
- for i = 1, len do
- local obj = {}
- obj.key = UserMsgAdapter_ReadFmt("c")
- obj.value = UserMsgAdapter_ReadFmt("i")
- table.insert(self.activity_flags, obj)
- end
-
- self.buff_list = {}
- local buff_num = UserMsgAdapter_ReadFmt("h")
- for i = 1,buff_num do
- buff = FightVo.initBuff()
- buff.iconType, --int:16 类型
- buff.buff_effect_id, --int:16 特效配置id
- buff.id, --int:32 buff技能Id
- buff.level, --int:8 buff技能等级
- buff.diejia, --int:8 叠加数
- buff.integer, --int:32 整数(有符号)
- buff.decimals, --int:32 小数(有符号,显示时要除以1000)
- buff.period = --int:64 到期unix时间戳, 客户端显示要用这个时间-服务端时间
- UserMsgAdapter_ReadFmt2("hhiccIIl")
-
- buff.decimals = UnsignToSigned(buff.decimals)
- if self.buff_list[buff.iconType] == nil then
- self.buff_list[buff.iconType] = {}
- end
- self.buff_list[buff.iconType][buff.id] = buff
- end
-
- self:SetBasePropertyFromConfig()
-
- if self.boss_type == 3 or self.boss_type == 9 then
- -- 根据boss类型设置脚底法阵
- self.foot_effect_res = "effect_bossfazhen01"
- elseif self.boss_type == 10 then --星域幻魔精英怪
- self.foot_effect_res = "effect_bossfazhen02"
- end
-
- --武器根据职业显示不同模型
- if self.type_id == GuideModel.WeaponMonster then
- local career = RoleManager.Instance.mainRoleInfo.career
- if career == 1 then
- self.monster_res = 5010101
- self.icon_scale = 10
- self.birth_angle = 0
- self.foot_effect_res = "effect_monster_caijiwuchangzhu01"
- elseif career == 2 then
- self.monster_res = 5110102
- self.icon_scale = 10
- self.birth_angle = 0
- self.foot_effect_res = "effect_monster_caijiwuchangzhu01"
- elseif career == 4 then
- self.monster_res = 5010104
- self.icon_scale = 10
- self.birth_angle = 0
- self.foot_effect_res = "effect_monster_caijiwuchangzhu01"
- end
- elseif self.type_id == 2300051 then -- 宝宝副本隐藏宝箱怪
- BaseDungeonModel:getInstance():Fire(BaseDungeonModel.SHOW_BABYDUN_SPEICAL_TIP, self.type_id)
- elseif self.type == MonsterType.CSGWAR then--跨国团战设置友军不可被点击
- local my_group = RoleManager.Instance.mainRoleInfo.warGroup
- local same_group = (my_group > 0 and my_group == self.warGroup)
- self.can_pick = same_group and 0 or 1
- end
-
- -- print("创建怪物:",self.name, self.hp,self.maxHp, self.type_id, self.weapon_id, self.title, self.warGroup)
- end
- function MonsterVo:SetBasePropertyFromConfig()
- self:CacheCfgData()
- if self.cfg_data == nil then
- return
- end
- self.is_armor=self.cfg_data.is_armor or 0 --是否霸体
- --print("怪物资源缩放:", self.cfg_data.icon_scale, tonumber(self.cfg_data.icon_scale))
- self.icon_scale = tonumber(self.cfg_data.icon_scale)
- self.is_blood_bar = tonumber(self.cfg_data.is_blood_bar)
- self.color = tonumber(self.cfg_data.color)
- if self.birth_angle == 0 then
- self.birth_angle = tonumber(self.cfg_data.direction)
- if self.birth_angle == -1 then
- self.birth_angle = nil
- end
- end
- if Config.ConfigGuildWar.MonsterDirection[self.type_id] then
- self.birth_angle = Config.ConfigGuildWar.MonsterDirection[self.type_id]
- end
- if Config.ConfigDungeonClient.monster_direction[self.type_id] then
- self.birth_angle = Config.ConfigDungeonClient.monster_direction[self.type_id]
- end
- if Config.ConfigKFGuildWar.MonsterDirection[self.type_id] then
- self.birth_angle = Config.ConfigKFGuildWar.MonsterDirection[self.type_id]
- end
- if self.type_id == Config.ConfigTaskEffect.MonsterSakuraTypeID then
- self.birth_angle = 285
- end
- self.birth_effect_res = Trim(self.cfg_data.mon_state) or ""
- self.classification = Trim(self.cfg_data.classification) or "" --怪物分类名字
- self.load_immediately = tonumber(self.cfg_data.load_immediately) or 0 --是否立即加载怪物
- self.is_hit_ac = tonumber(self.cfg_data.is_hit_ac) or 0 --是否需要受击动作
-
- self.is_hide_hp = (self.cfg_data.is_hide_hp==1)
- self.career = self.cfg_data.career or 1
- self.head_wear_id = self.cfg_data.headwear_id or 0
- self.head_wear_chartlet_id = self.cfg_data.headwear_texture or 0
- -- print("怪物显示血条名字怪物显示血条名字", self.name, self.is_hide_hp, self.birth_angle == -1 , self.is_hit_ac, self.is_hit_ac ~= 0)
- end
- function MonsterVo:CacheCfgData()
- if self.cfg_data == nil then
- self.cfg_data = ConfigItemMgr.Instance:GetMonsterDataItem(self.type_id)
- end
- end
-
- function MonsterVo:GetFashionTextureId()
- if self.texture_res and tonumber(self.texture_res) ~= 0 then
- return self.monster_res .. self.texture_res
- end
- end
-
- function MonsterVo:GetRoleHeadId(block)
- local show = not block
- if show then
- return self.head_wear_id,self.head_wear_chartlet_id
- end
- end
-
- --获取相应标志
- -- 活动类型 1:社团争霸 2:护送劫字 3:跨服社团战 4:婚礼 5:巡游 6 大乱斗
- -- (0:原形象 1:冲车 2:炮车)
- function MonsterVo: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
|