源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

630 行
18 KiB

  1. --[[
  2. ]]
  3. RoleVo = RoleVo or BaseClass(BaseVo)
  4. local RoleVo = RoleVo
  5. local UserMsgAdapter_ReadFmt = UserMsgAdapter.ReadFmt
  6. local UserMsgAdapter_ReadFmt2 = UserMsgAdapter.ReadFmt2
  7. RoleVo.PK_STATUS = {
  8. Peace = 0, --和平
  9. Force = 1, --强制
  10. All = 2, --全体
  11. GUILD = 3, --社团模式
  12. Local = 4, --本服(只能攻击其它服)
  13. ForcePeace = 9, --强制和平
  14. }
  15. RoleVo.Act_Flag = {
  16. GUILD_WAR_EQUIP_CAMION= 1, -- 本服团战
  17. CONVOY_ROB= 2, -- 护送抢夺“劫”字形象
  18. KF_TOWN_WAR_SHIP= 3, -- 跨服城战船形象
  19. RAGEWAR_TOP= 5, -- 狂战领域积分第一标识
  20. MELEE_GRADE= 6, -- 大乱斗段位形象
  21. CHARM_BEACH= 7, -- 魅力海滩休闲状态
  22. FISHING= 8, -- 钓鱼状态
  23. FISHING_ACT= 12, -- 钓鱼动作id
  24. GUILD_WAR_EQUIP_BLUNT= 13, -- 公会争霸冲车形象
  25. CS_1VN_SIDE= 14, -- 跨服1vn身份 (1擂主)
  26. CHARM_BEACH_CHAIR= 15, -- 魅力海滩座椅交互(场景物件id)
  27. CONVOY= 16, -- 护送形象
  28. MATE_RHYTHM_MASTER= 17, -- 羁绊-节奏大师-跳舞标识
  29. MATE_CATCH_BALL= 18, -- 羁绊-抛接球-玩球标识
  30. MAX_HURT= 19, -- BOSS攻击最高伤害
  31. BOSS_TIRED= 20, -- BOSS疲劳值
  32. REWARD_BOSS_SUPPORT= 21, -- 协助标识
  33. DUNGEON_GOD_DOUBLE_REWARD= 22, -- 唤神副本双倍奖励
  34. GUILD_CSGR= 23, -- 社团本国团战
  35. }
  36. function RoleVo:__init()
  37. end
  38. function RoleVo:__defineVar()
  39. return {
  40. _class_type = self,
  41. --_cid = self._id,
  42. _iid = _in_obj_ins_id,
  43. _use_delete_method = false,
  44. vo_type = SceneBaseType.Role,
  45. role_id = 0, --用户ID(int32)
  46. plat_name = "" , --平台名(string)
  47. server_id = 0 , --服ID(int16)
  48. name = "", --玩家名(string)
  49. sex = 0, --性别(int8) 男1女2
  50. level = 100 , --等级(int16)
  51. pos_x = 0, --X像素坐标(int16)
  52. pos_y = 0, --Y像素坐标(int16)
  53. dsgt_id = 0, --用户称号ID(int32)
  54. grade_id = 0, --爵位id
  55. --dsgt_name = "", --用户称号名称
  56. hp = 100, --当前hp(int32)
  57. maxHp = 100, --最大hp(int32)
  58. move_speed = 160, --玩家速度(int16)
  59. weapon = 0 , -- int:32 武器
  60. cloth = 0, -- int:32 装备
  61. career = 0, --角色(int8) --神将=1 、天君=2、罗刹=3
  62. realm = 0, --国家(int8)
  63. warGroup = 0, --战斗分组(int8)
  64. total_title = 0, --称号总数
  65. title_list = {}, --称号列表
  66. -- horse_id = 801020100, --坐骑ID(int32),前期任务之类的飞行
  67. is_ride = 0, -- 是否骑乘状态,0非,1是
  68. horse_id = 0, --坐骑ID(int32),前期任务之类的飞行
  69. pet_id = 0, -- 宠物ID
  70. pet_status = 0, -- 宠物标志位0隐藏1显示
  71. pk_status = 1, --PK状态(int8)
  72. imageId = 0, --玩家形象(变身形象)(int32)
  73. vip_flag = 0, --Vip标识(int8)
  74. guild_id = 0, --社团ID(int32)
  75. guild_name = "", --社团名称(string)
  76. position = 0, --社团职位(int8)
  77. hide_flag = 0 , --是否不可见(int8)
  78. ghost_mode = 0, --幽灵状态(int8)
  79. fighting = 0, --战斗力(int32)
  80. dance_status = 0, --跳舞状态(int8) 0取消跳舞 1跳舞中
  81. boss_flag = 0, --是否boss归属 0否 1是
  82. team_id = 0, --队伍id 32
  83. team_job = 0, --队伍职位(0 无 1队长 2队员)
  84. flag_state = 0, --旗子标识 0标示无 1红色旗子
  85. prePoseState = PoseState.STAND,
  86. poseState = PoseState.STAND,
  87. battle_title = 0, --战场头衔(天空|旗子站)
  88. sky_flags = {}, --天空战场旗子
  89. state_type = 0, --int:8 状态类型(0:无 1:补魔 2:被补魔 3:自我补魔)
  90. weapon_effect = 0, --装备附魔
  91. birth_angle = 270, --出生角度 水平向右为0 逆时针一圈为360度
  92. show_base_info_only = false, --nameBoard只显示名字和血条
  93. --wing_id = 0, --翅膀
  94. safe_area_state = 0, --1角色处于安全区域状态 2角色处于非安全区域状态 3角色切场景进入安全区域状态
  95. hatred = 0, --罪恶值
  96. is_marriage = 0, --婚姻状态(0单身 1恋爱 2已婚)
  97. wedding_state_flags = 0, --婚礼状态标识
  98. parade_state_flags = 0, --巡游状态标识
  99. marriage_id = 0, --伴侣id
  100. marriage_name = "", --伴侣名字
  101. sprite_id = 0, --小精灵id
  102. baby_id = 0, --宝宝id
  103. child_follow_status = 0, --宝宝标志位0隐藏1显示
  104. escort_state = 0, --护送id
  105. protect_time = 0, --保护时间
  106. date_role_id = 0,
  107. pokemon_id = 0, --宠物id
  108. pokemon_star = 0, --宠物阶数
  109. activity_flags = {}, --活动标识
  110. casual_state_flags = 0, --海滩休闲
  111. is_fishing_flag = 0, --钓鱼状态标识
  112. deity_id = 0,
  113. turn = 0, --转生
  114. mate_name = "", --羁绊相关
  115. mate_title = "", --羁绊相关
  116. mate_lv = 0, --羁绊称号显示等级
  117. guild_contribute = 0, --社团贡献
  118. honor = 0, --名望券
  119. pet_wing_id = 0,
  120. pet_weapon_id = 0,
  121. pet_farmour = 0,
  122. action_energy = 0, --当前行动能量
  123. max_action_energy = 0, --行动能量最大值
  124. god_id = 0, --式神id
  125. god_hp = 0, --式神血量
  126. god_max_hp = 0, --式神血量上限
  127. money_boss_protect_time = 0, --赏金boss保护时间戳
  128. deserted_boss_protect_time = 0, --星域boss保护时间戳
  129. }
  130. end
  131. function RoleVo:ResetData()
  132. self.horse_id = 0
  133. self.money_boss_protect_time = 0
  134. self.deserted_boss_protect_time = 0
  135. end
  136. --[[
  137. int:64 ID
  138. string ()
  139. int:16 ()
  140. string ()
  141. figure
  142. int:16 X坐标
  143. int:16 Y坐标
  144. int:32 hp
  145. int:32 hp_lim
  146. int:16
  147. ]]
  148. function RoleVo:ReadFromProtocal( )
  149. self.role_id,
  150. self.plat_name,
  151. self.server_id,
  152. self.server_num = UserMsgAdapter_ReadFmt("lshh")
  153. FigureProtoVo.ReadFmt(self)
  154. local team_id
  155. local len
  156. self.pos_x,
  157. self.pos_y,
  158. self.hp,
  159. self.maxHp,
  160. self.move_speed,
  161. -- self.att_speed, --攻击速度
  162. self.hide_flag, --是否不可见(int8)
  163. self.ghost_mode, --幽灵状态(int8)
  164. self.warGroup, --战斗分组
  165. self.boss_flag,
  166. team_id,
  167. self.team_job,
  168. self.pk_status,
  169. self.fighting,
  170. self.is_ride_wait_delete,--待删参数,放figure了
  171. self.horse_id,
  172. self.hatred,
  173. self.pet_id,
  174. self.pet_status,
  175. self.protect_time,
  176. self.date_role_id,
  177. len = UserMsgAdapter_ReadFmt2("hhllhcclclccicihicilh")
  178. self.activity_flags = {}
  179. for i = 1, len do
  180. local obj = {}
  181. obj.key = UserMsgAdapter_ReadFmt("c")
  182. obj.value = UserMsgAdapter_ReadFmt("l")
  183. table.insert(self.activity_flags, obj)
  184. end
  185. self.mate_name = UserMsgAdapter_ReadFmt("s")--羁绊对象
  186. self.mate_title = UserMsgAdapter_ReadFmt("s")--羁绊称号
  187. self.dance_status = UserMsgAdapter_ReadFmt("c")--跳舞状态
  188. self.mate_lv = UserMsgAdapter_ReadFmt("c")--羁绊称号显示等级
  189. self.god_id = UserMsgAdapter_ReadFmt("h") --式神id
  190. self.god_hp = UserMsgAdapter_ReadFmt("l")--式神血量
  191. self.god_max_hp = UserMsgAdapter_ReadFmt("l")--式神血量上限
  192. self.money_boss_protect_time = UserMsgAdapter_ReadFmt("i")--赏金boss保护时间戳
  193. self.deserted_boss_protect_time = UserMsgAdapter_ReadFmt("i")--星域boss保护时间戳
  194. -- print("self.pet_status=",self.pet_status)
  195. -- print("protect_time=",self.protect_time)
  196. -- print("date_role_id=",self.date_role_id,self.name)
  197. -- print("escort_state=", self.escort_state)
  198. -- print("===self.horse_id,self.hatred",self.horse_id,self.hatred,self.pet_id,self.name)
  199. -- print("战斗分组------------=", team_id,self.name, self.warGroup, self.pos_x, self.pos_y, self.hp, self.maxHp, self.ghost_mode)
  200. self:ChangeVar("team_id", team_id)
  201. self:ChangeVar("mate_title", self.mate_title)
  202. -- print("婚姻", self.is_marriage, self.marriage_id, self.marriage_name)
  203. -- print("boss_flag", self.boss_flag)
  204. -------------------------
  205. --进阶部分
  206. self:RefreshFosterData()
  207. --进阶部分
  208. -------------------------
  209. end
  210. --[[
  211. int:32 ID
  212. string ()
  213. int:16 ()
  214. figure
  215. int:16 X坐标
  216. int:16 Y坐标
  217. int:32 hp
  218. int:32 hp_lim
  219. int:16
  220. int:16
  221. int:8 (01)
  222. int:8 (0, 1)
  223. int:16 id
  224. ]]
  225. function RoleVo:ReadFakeProtacal()
  226. self.role_id,
  227. self.plat_name,
  228. self.server_id = UserMsgAdapter_ReadFmt("ish")
  229. FigureProtoVo.ReadFmt(self)
  230. self.pos_x,
  231. self.pos_y,
  232. self.hp,
  233. self.maxHp,
  234. self.move_speed,
  235. -- self.att_speed, --攻击速度
  236. self.hide_flag, --是否不可见(int8)
  237. self.ghost_mode, --幽灵状态(int8)
  238. self.warGroup,
  239. self.fighting,
  240. self.dance_status,
  241. self.server_num = UserMsgAdapter_ReadFmt2("hhllhcclich") --战斗分组
  242. print("假人数据------------=",self.name,self.role_id, self.pos_x, self.pos_y, self.hp, self.maxHp, self.ghost_mode, self.warGroup)
  243. self.is_fake_role = true --是否假人 纯服务端控制的假人
  244. if SceneManager:getInstance():IsGodDungeon() then
  245. self.name = GetCSLongName(self.name,self.server_num)
  246. end
  247. -------------------------
  248. --主角假人,暂时先用名字判断
  249. if self.name == RoleManager.Instance.mainRoleInfo.name then
  250. self.is_fake_main_role = true
  251. end
  252. -------------------------
  253. --随机名字
  254. if self.name == "" then
  255. self.name = LoginModel:getInstance():GetRandomRoleName(self.sex, true)
  256. end
  257. -------------------------
  258. --进阶部分
  259. self:RefreshFosterData()
  260. --进阶部分
  261. -------------------------
  262. end
  263. --处理进阶部分数据
  264. function RoleVo:RefreshFosterData( )
  265. local sprite_res_id = 0--法宝
  266. local pet_res_id = 0--AI娘
  267. local pet_wing_id = 0--ai娘翅膀
  268. local horse_id = 0--ai娘翅膀
  269. local wing_id = 0
  270. local pet_weapon_id = 0
  271. local pet_farmour = 0
  272. local function get_foster_skin( type_id )
  273. for k,v in pairs(self.foster_skin_list) do
  274. if v.type_id == type_id and v.skin_id > 0 then
  275. return v.skin_id
  276. end
  277. end
  278. for k,v in pairs(self.foster_sub_skin_list) do
  279. if v.type_id == type_id and v.skin_id > 0 then
  280. return v.skin_id
  281. end
  282. end
  283. end
  284. for k,v in pairs(self.foster_list) do
  285. if v.type_id == FosterConst.ModuleId.FPearl then
  286. sprite_res_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  287. elseif v.type_id == FosterConst.ModuleId.FJarvis then
  288. pet_res_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  289. elseif v.type_id == FosterConst.ModuleId.FCloud then
  290. pet_wing_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  291. elseif v.type_id == FosterConst.ModuleId.FHorse then
  292. horse_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  293. elseif v.type_id == FosterConst.ModuleId.FWing then
  294. wing_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  295. elseif v.type_id == FosterConst.ModuleId.FGun then
  296. pet_weapon_id = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  297. elseif v.type_id == FosterConst.ModuleId.FArmour then
  298. pet_farmour = get_foster_skin(v.type_id) or FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  299. end
  300. end
  301. self:ChangeVar("sprite_id",sprite_res_id)
  302. self:ChangeVar("pet_id",pet_res_id)
  303. self:ChangeVar("pet_wing_id",pet_wing_id)
  304. self:ChangeVar("horse_id",horse_id)
  305. self:ChangeVar("wing_id",wing_id)
  306. self:ChangeVar("pet_weapon_id",pet_weapon_id)
  307. self:ChangeVar("pet_farmour",pet_farmour)
  308. self:ChangeVar("is_ride",self.is_ride)
  309. end
  310. --取等级模型id列表的衣服id
  311. --scene_obj_type 是否是场景对象 还是ui对象
  312. function RoleVo:GetRoleClotheId(scene_obj_type)
  313. if scene_obj_type and self:CheckIsGod() then
  314. local cfg = Config.God[self.god_id]
  315. if cfg then
  316. return cfg.resource
  317. end
  318. end
  319. local model_res_list = self.level_model_list
  320. if model_res_list then
  321. for k,v in ipairs(model_res_list) do
  322. if v.part_pos == FashionPartPos.Clothe then
  323. return v.level_model_id
  324. end
  325. end
  326. end
  327. end
  328. --取时装衣服贴图id
  329. function RoleVo:GetRoleClotheTextureId(scene_obj_type)
  330. -- if RoleVo.IsModelLimit(self) then
  331. -- return
  332. -- end
  333. -- if scene_obj_type and self:CheckIsGod() then
  334. -- return nil
  335. -- end
  336. local model_res_list = self.fashion_model_list
  337. if model_res_list then
  338. for k,v in ipairs(model_res_list) do
  339. if v.part_pos == FashionModel.FashionType.CLOTHES then
  340. --需要折算返回资源id
  341. local id = v.fashion_model_id
  342. if id < 1000 then
  343. id = id + self.career * 1000
  344. end
  345. if v.fashion_chartlet_id > 1 then--配色大于1的要多连接一个配色
  346. id = id .. v.fashion_chartlet_id
  347. end
  348. return tonumber(id), 0
  349. end
  350. end
  351. end
  352. end
  353. --取时装头饰贴图id
  354. --block是否屏蔽时装头饰
  355. --目前来看 好像头发必须有 所以上面的block无效 总不能光头吴克吧
  356. --发饰 也就是帽子在下面获取
  357. function RoleVo:GetRoleHeadId(block)
  358. local model_res_list
  359. if not block then
  360. model_res_list = not block and self.fashion_model_list or nil
  361. if model_res_list then
  362. for k,v in ipairs(model_res_list) do
  363. if v.part_pos == FashionModel.FashionType.HEAD then
  364. --需要折算返回资源id
  365. local id = v.fashion_model_id
  366. if id < 1000 then
  367. id = id + self.career * 1000
  368. end
  369. if v.fashion_chartlet_id > 1 then--配色要多连接一个后缀
  370. id = id .. v.fashion_chartlet_id
  371. end
  372. return tonumber(id)
  373. end
  374. end
  375. end
  376. end
  377. --没找到时装就用默认头发
  378. model_res_list = self.level_model_list
  379. if model_res_list then
  380. for k,v in ipairs(model_res_list) do
  381. if v.part_pos == FashionPartPos.Head then
  382. return v.level_model_id
  383. end
  384. end
  385. end
  386. end
  387. function RoleVo:GetRoleWingId( block )
  388. -- if RoleVo.IsModelLimit(self) then
  389. -- return
  390. -- end
  391. --珍宝
  392. if self.foster_skin_list then
  393. for k,v in pairs(self.foster_skin_list) do
  394. if v.type_id == FosterConst.ModuleId.FWing and v.skin_id and (v.skin_id > 0) then
  395. return v.skin_id
  396. end
  397. end
  398. end
  399. --时装
  400. if self.fashion_model_list then
  401. for k,v in ipairs(self.fashion_model_list) do
  402. if v.part_pos == FashionModel.FashionType.WING then
  403. return v.fashion_model_id
  404. end
  405. end
  406. end
  407. --基础进阶
  408. if self.foster_list then
  409. for k,v in pairs(self.foster_list) do
  410. if v.type_id == FosterConst.ModuleId.FWing then
  411. self.wing_id = FosterModel:GetInstance():GetModuleResIdByStage(v.type_id,v.stage_id)
  412. end
  413. end
  414. end
  415. --进阶
  416. if self.wing_id and self.wing_id > 0 then
  417. return self.wing_id
  418. else
  419. if self.level_model_list then
  420. for k,v in ipairs(self.level_model_list) do
  421. if v.part_pos == FashionPartPos.wing then
  422. return v.level_model_id
  423. end
  424. end
  425. end
  426. end
  427. end
  428. --取时装发饰贴图id
  429. --block是否屏蔽时装=发饰
  430. function RoleVo:GetRoleHatId(block)
  431. -- if RoleVo.IsModelLimit(self) then
  432. -- return
  433. -- end
  434. local model_res_list = not block and self.fashion_model_list or nil
  435. if model_res_list then
  436. for k,v in ipairs(model_res_list) do
  437. if v.part_pos == FashionModel.FashionType.HAT then
  438. return v.fashion_model_id
  439. end
  440. end
  441. end
  442. end
  443. --取足迹的id
  444. function RoleVo:GetRoleFootmarkId()
  445. do return end--还没足迹 时装列表里面没有你要的东西 别来这遍历了
  446. if RoleVo.IsModelLimit(self) then
  447. return
  448. end
  449. local model_res_list = self.fashion_model_list
  450. if model_res_list then
  451. for k,v in ipairs(model_res_list) do
  452. if v.part_pos == FashionPartPos.Footmark then
  453. return v.fashion_model_id
  454. end
  455. end
  456. end
  457. end
  458. --block: 1屏蔽时装 2 屏蔽神兵
  459. --先去时装模型列表的 再取等级模型id列表的武器id
  460. function RoleVo:GetWeaponClotheId(scene_obj_type,block)
  461. local model_res_list
  462. if self.role_id == RoleManager:getInstance():GetMainRoleId() then
  463. if FosterModel:GetInstance():GetShowHideType( FosterConst.ModuleId.FWeapon ) then
  464. if FosterConst.DefaultWeaponId[RoleManager.Instance.mainRoleInfo.career] then
  465. return FosterConst.DefaultWeaponId[RoleManager.Instance.mainRoleInfo.career]
  466. end
  467. end
  468. end
  469. --皮肤
  470. if self.foster_sub_skin_list then
  471. for k,v in pairs(self.foster_sub_skin_list) do
  472. if v.type_id == FosterConst.ModuleId.FWeapon and v.skin_id and (v.skin_id > 0) then
  473. return v.skin_id
  474. end
  475. end
  476. end
  477. --珍宝
  478. if self.foster_skin_list then
  479. for k,v in pairs(self.foster_skin_list) do
  480. if v.type_id == FosterConst.ModuleId.FWeapon and v.skin_id and (v.skin_id > 0) then
  481. return v.skin_id
  482. end
  483. end
  484. end
  485. --时装
  486. if not block then
  487. model_res_list = (not block or block ~= 2) and self.fashion_model_list or nil
  488. if model_res_list then
  489. for k,v in ipairs(model_res_list) do
  490. if v.part_pos == FashionModel.FashionType.WEAPON then
  491. --需要折算返回资源id
  492. local id = v.fashion_model_id
  493. if id < 1000 then
  494. id = id + self.career * 1000
  495. end
  496. return tonumber(id)
  497. end
  498. end
  499. end
  500. end
  501. --进阶
  502. model_res_list = self.level_model_list
  503. if model_res_list then
  504. for k,v in ipairs(model_res_list) do
  505. if v.part_pos == FashionPartPos.Weapon then
  506. return v.level_model_id
  507. end
  508. end
  509. end
  510. end
  511. --更新等级模型数据
  512. function RoleVo:UpdateLevelModelList(part_pos, value)
  513. local model_res_list = self.level_model_list
  514. if model_res_list then
  515. for k,v in ipairs(model_res_list) do
  516. if v.part_pos == part_pos then
  517. v.level_model_id = tonumber(value)
  518. elseif v.part_pos == part_pos then
  519. v.level_model_id = tonumber(value)
  520. end
  521. end
  522. end
  523. end
  524. function RoleVo:CheckIsGod()
  525. return self.god_id > 0
  526. end
  527. --获取相应标志
  528. -- 活动类型 17羁绊小游戏
  529. function RoleVo:GetFlagsByKey(key)
  530. local value = 0
  531. if self.activity_flags then
  532. for i,v in pairs(self.activity_flags) do
  533. if v.key == key then
  534. value = v.value
  535. break
  536. end
  537. end
  538. end
  539. return value
  540. end
  541. -- 判断活动标志是否存在
  542. function RoleVo:ExitFlag(key)
  543. local bool = false
  544. if self.activity_flags then
  545. for i,v in pairs(self.activity_flags) do
  546. if v.key == key then
  547. bool = true
  548. break
  549. end
  550. end
  551. end
  552. return bool
  553. end
  554. function RoleVo:__delete()
  555. end
  556. --外观限制,部分多人玩法只需显示基础外观
  557. function RoleVo:IsModelLimit( )
  558. if self.role_id == RoleManager:getInstance():GetMainRoleId() then
  559. return false
  560. end
  561. if SceneManager then
  562. if SceneManager:getInstance():IsFullEffectScene() then
  563. return false
  564. end
  565. if SceneManager:getInstance():IsModelLimited() then
  566. return true
  567. end
  568. end
  569. return false
  570. end