private void SyncUserObjectToOtherUsers(User user) { if (null != user) { EntityInfo userInfo = user.Info; Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(userInfo); Msg_RC_SyncProperty msg = DataSyncUtility.BuildSyncPropertyMessage(userInfo); RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene) { for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next) { EntityInfo npc = linkNode.Value; if (null != npc && npc != userInfo) { User other = npc.CustomData as User; if (null != other) { other.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder); other.SendMessage(RoomMessageDefine.Msg_RC_SyncProperty, msg); } } } } } }
public void ReloadObjects() { if (m_PreparedReloadMonsterCount > 0) { for (int i = 0; i < m_PreparedReloadMonsterCount; ++i) { TableConfig.LevelMonster monster = m_PreparedReloadMonsters[i]; if (null != monster) { int campId = monster.camp; int unitId = campId * 10000 + i; int objId = CreateEntity(unitId, monster.x, 0.0f, monster.y, monster.dir, campId, monster.actorID, monster.aiLogic, monster.aiParams.ToArray()); EntityInfo npc = GetEntityById(objId); if (null != npc) { npc.IsPassive = monster.passive; npc.LevelMonsterData = monster; npc.Level = monster.level; Msg_RC_CreateNpc msg = DataSyncUtility.BuildCreateNpcMessage(npc); NotifyAllUser(RoomMessageDefine.Msg_RC_CreateNpc, msg); Msg_RC_SyncProperty msg2 = DataSyncUtility.BuildSyncPropertyMessage(npc); NotifyAllUser(RoomMessageDefine.Msg_RC_SyncProperty, msg2); } } } m_PreparedReloadMonsterCount = 0; } while (m_ReloadMonstersQueue.Count > 0 && m_PreparedReloadMonsterCount < c_MaxReloadMonsterNum) { m_PreparedReloadMonsters[m_PreparedReloadMonsterCount++] = m_ReloadMonstersQueue.Dequeue(); } }
internal static void Execute(object msg, NetConnection conn, NetworkSystem networkSystem) { Msg_RC_SyncProperty targetmsg = msg as Msg_RC_SyncProperty; if (null == targetmsg) { return; } }
private void OnUserPropertyChanged(UserInfo user) { Msg_RC_SyncProperty propBuilder = DataSyncUtility.BuildSyncPropertyMessage(user); Scene scene = user.SceneContext.CustomData as Scene; if (null != scene) { scene.NotifyAllUser(propBuilder); } }
internal static Msg_RC_SyncProperty BuildSyncPropertyMessage(CharacterInfo obj) { Msg_RC_SyncProperty builder = new Msg_RC_SyncProperty(); builder.role_id = obj.GetId(); builder.hp = obj.Hp; builder.np = obj.Energy; builder.state = obj.StateFlag; return(builder); }
internal static void SyncUserPropertyToCaredUsers(UserInfo user) { Scene scene = user.SceneContext.CustomData as Scene; if (null != scene) { Msg_RC_SyncProperty bd = BuildSyncPropertyMessage(user); scene.NotifyAllUser(bd); } }
public static void SyncUserPropertyToCaredUsers(EntityInfo user) { Scene scene = user.SceneContext.CustomData as Scene; if (null != scene) { Msg_RC_SyncProperty bd = BuildSyncPropertyMessage(user); scene.NotifyAllUser(RoomMessageDefine.Msg_RC_SyncProperty, bd); } }
public static Msg_RC_SyncProperty BuildSyncPropertyMessage(EntityInfo obj) { Msg_RC_SyncProperty builder = new Msg_RC_SyncProperty(); builder.role_id = obj.GetId(); builder.hp = obj.Hp; builder.np = obj.Energy; builder.shield = obj.Shield; //builder.state = obj.StateFlag; return(builder); }
private void TickProperty() { for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next) { EntityInfo info = linkNode.Value; if (!info.IsDead() && info.PropertyChanged) { info.PropertyChanged = false; Msg_RC_SyncProperty builder = DataSyncUtility.BuildSyncPropertyMessage(info); NotifyAllUser(RoomMessageDefine.Msg_RC_SyncProperty, builder); } } }
private void NpcEnterCampSight(NpcInfo npc, int campid) { Msg_RC_NpcEnter bder = DataSyncUtility.BuildNpcEnterMessage(npc); NotifyCampUsers(campid, bder); Msg_RC_SyncProperty propBuilder = DataSyncUtility.BuildSyncPropertyMessage(npc); NotifyCampUsers(campid, propBuilder); Msg_RC_NpcMove npcMoveBuilder = DataSyncUtility.BuildNpcMoveMessage(npc); NotifyCampUsers(campid, npcMoveBuilder); Msg_RC_NpcTarget npcFaceTargetBuilder = DataSyncUtility.BuildNpcTargetMessage(npc); if (npcFaceTargetBuilder != null) { NotifyCampUsers(campid, npcFaceTargetBuilder); } }
private void SyncUserToObservers(User infoUser) { Room room = GetRoom(); if (null != infoUser && null != room && null != room.GetActiveScene()) { UserInfo userInfo = infoUser.Info; if (null != userInfo) { Vector3 pos = userInfo.GetMovementStateInfo().GetPosition3D(); ArkCrossEngineMessage.Position pos_bd0 = new ArkCrossEngineMessage.Position(); pos_bd0.x = pos.X; pos_bd0.z = pos.Z; Msg_CRC_Create bd0 = new Msg_CRC_Create(); bd0.role_id = infoUser.RoleId; bd0.hero_id = infoUser.HeroId; bd0.camp_id = infoUser.CampId; bd0.role_level = infoUser.Level; bd0.is_player_self = false; bd0.position = pos_bd0; bd0.face_dirction = (float)userInfo.GetMovementStateInfo().GetFaceDir(); for (int index = 0; index < userInfo.GetSkillStateInfo().GetAllSkill().Count; index++) { bd0.skill_levels.Add(userInfo.GetSkillStateInfo().GetSkillInfoByIndex(index).SkillLevel); } bd0.scene_start_time = StartTime; bd0.nickname = infoUser.Name; NotifyAllObserver(bd0); DataSyncUtility.SyncBuffListToObservers(userInfo, this); Msg_RC_SyncProperty propBuilder = DataSyncUtility.BuildSyncPropertyMessage(userInfo); NotifyAllObserver(propBuilder); Msg_RC_SyncCombatStatisticInfo combatBuilder = DataSyncUtility.BuildSyncCombatStatisticInfo(userInfo); NotifyAllObserver(combatBuilder); LogSys.Log(LOG_TYPE.DEBUG, "send user {0} msg to observers", infoUser.RoleId); } } }
private void UserEnterCampSight(UserInfo enter_user_info, int campid) { User enter_user = enter_user_info.CustomData as User; if (enter_user == null) { return; } IList <UserInfo> camp_users = m_SightManager.GetCampUsers(campid); foreach (UserInfo user_info in camp_users) { User user = user_info.CustomData as User; if (user == null) { continue; } if (enter_user_info.GetId() != user_info.GetId()) { user.AddICareUser(enter_user); //send message Vector3 enter_user_pos = enter_user_info.GetMovementStateInfo().GetPosition3D(); ArkCrossEngineMessage.Position pos_bd0 = new ArkCrossEngineMessage.Position(); pos_bd0.x = enter_user_pos.X; pos_bd0.z = enter_user_pos.Z; Msg_RC_Enter bder = new Msg_RC_Enter(); bder.role_id = enter_user.RoleId; bder.hero_id = enter_user.HeroId; bder.camp_id = enter_user.CampId; bder.position = pos_bd0; bder.face_dir = (float)enter_user_info.GetMovementStateInfo().GetFaceDir(); bder.is_moving = enter_user_info.GetMovementStateInfo().IsMoving; bder.move_dir = (float)enter_user_info.GetMovementStateInfo().GetMoveDir(); user.SendMessage(bder); Msg_RC_SyncProperty propBuilder = DataSyncUtility.BuildSyncPropertyMessage(enter_user_info); user.SendMessage(propBuilder); DataSyncUtility.SyncBuffListToUser(enter_user_info, user); } } }
internal static void Execute(object msg, NetConnection conn) { Msg_RC_SyncProperty targetmsg = msg as Msg_RC_SyncProperty; if (null == targetmsg) { return; } EntityInfo cb = ClientModule.Instance.GetEntityById(targetmsg.role_id); if (null == cb) { return; } LogSystem.Info("---set {2} hp to {0}/{1}", targetmsg.hp, cb.GetActualProperty().HpMax, cb.GetId()); cb.SetHp(Operate_Type.OT_Absolute, targetmsg.hp); cb.SetEnergy(Operate_Type.OT_Absolute, targetmsg.np); cb.SetShield(Operate_Type.OT_Absolute, targetmsg.shield); cb.StateFlag = targetmsg.state; }
internal static void Execute(object msg, NetConnection conn) { Msg_RC_SyncProperty targetmsg = msg as Msg_RC_SyncProperty; if (null == targetmsg) { return; } EntityInfo cb = PluginFramework.Instance.GetEntityById(targetmsg.role_id); if (null == cb) { return; } LogSystem.Info("---set {2} hp to {0}/{1}", targetmsg.hp, cb.HpMax, cb.GetId()); cb.Hp = targetmsg.hp; cb.Energy = targetmsg.np; cb.Shield = targetmsg.shield; //cb.StateFlag = targetmsg.state; }
internal void ReloadObjects() { if (m_PreparedReloadMonsterCount > 0) { for (int i = 0; i < m_PreparedReloadMonsterCount; ++i) { TableConfig.LevelMonster monster = m_PreparedReloadMonsters[i]; if (null != monster) { int campId = monster.camp; TableConfig.Actor actor = TableConfig.ActorProvider.Instance.GetActor(monster.actorID); if (null != actor) { int unitId = campId * 10000 + i; EntityInfo npc = EntityManager.AddEntity(unitId, campId, actor, (int)AiStateLogicId.Entity_General); if (null != npc) { npc.IsPassive = monster.passive; npc.LevelMonsterData = monster; npc.SetLevel(monster.level); npc.GetMovementStateInfo().SetPosition2D(monster.x, monster.y); npc.GetMovementStateInfo().SetFaceDir(monster.dir); Msg_RC_CreateNpc msg = DataSyncUtility.BuildCreateNpcMessage(npc); NotifyAllUser(RoomMessageDefine.Msg_RC_CreateNpc, msg); Msg_RC_SyncProperty msg2 = DataSyncUtility.BuildSyncPropertyMessage(npc); NotifyAllUser(RoomMessageDefine.Msg_RC_SyncProperty, msg2); } } } } m_PreparedReloadMonsterCount = 0; } while (m_ReloadMonstersQueue.Count > 0 && m_PreparedReloadMonsterCount < c_MaxReloadMonsterNum) { m_PreparedReloadMonsters[m_PreparedReloadMonsterCount++] = m_ReloadMonstersQueue.Dequeue(); } }
private void SyncSceneObjectsToUser(User user) { if (null != user) { EntityInfo userInfo = user.Info; RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != userInfo && null != roomUserMgr && null != roomUserMgr.ActiveScene) { for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next) { EntityInfo npc = linkNode.Value; if (null != npc) { Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(npc); user.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder); Msg_RC_SyncProperty msg = DataSyncUtility.BuildSyncPropertyMessage(npc); user.SendMessage(RoomMessageDefine.Msg_RC_SyncProperty, msg); } } } } }
protected override bool ExecCommand(StoryInstance instance, long delta) { Scene scene = instance.Context as Scene; if (null != scene) { if (m_HaveParam) { int objId = m_ObjId.Value; UserInfo user = scene.UserManager.GetUserInfo(objId); if (null != user) { Msg_RC_UpdateCoefficient msg = new Msg_RC_UpdateCoefficient(); msg.obj_id = user.GetId(); msg.hpmax_coefficient = user.HpMaxCoefficient; scene.NotifyAllUser(msg); Msg_RC_SyncProperty propMsg = DataSyncUtility.BuildSyncPropertyMessage(user); scene.NotifyAllUser(propMsg); for (LinkedListNode <UserInfo> linkNode = scene.UserManager.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo info = linkNode.Value; User reporter = user.CustomData as User; if (null != reporter && null != info && objId != info.GetId()) { Msg_RC_UpdateCoefficient factorMsg = new Msg_RC_UpdateCoefficient(); factorMsg.obj_id = info.GetId(); factorMsg.hpmax_coefficient = info.HpMaxCoefficient; reporter.SendMessage(factorMsg); Msg_RC_SyncProperty otherPropMsg = DataSyncUtility.BuildSyncPropertyMessage(info); reporter.SendMessage(otherPropMsg); } } } } else { Room room = scene.GetRoom(); UserInfo one = null, two = null; LinkedListNode <UserInfo> node = scene.UserManager.Users.FirstValue; if (null != node) { one = node.Value; node = node.Next; if (null != node) { two = node.Value; } } if (null != one && null != two) { float lvl1 = one.GetLevel(); float lvl2 = two.GetLevel(); float lvl = (lvl1 + lvl2) / 2; double c = 6;// 4.09 * 1.2 * 1.3 * (1 + lvl * 0.04) * (1 + (0.15 * (1.62 - 1) / 50 * lvl) + (1.05 + 0.55 / 50 * lvl - 1) * 0.5 + (1.05 + 0.55 / 50 * lvl - 1) * 0.5); one.HpMaxCoefficient = (float)c; two.HpMaxCoefficient = (float)c; one.EnergyMaxCoefficient = (float)c; two.EnergyMaxCoefficient = (float)c; UserAttrCalculator.Calc(one); UserAttrCalculator.Calc(two); one.SetHp(Operate_Type.OT_Absolute, one.GetActualProperty().HpMax); one.SetEnergy(Operate_Type.OT_Absolute, one.GetActualProperty().EnergyMax); two.SetHp(Operate_Type.OT_Absolute, two.GetActualProperty().HpMax); two.SetEnergy(Operate_Type.OT_Absolute, two.GetActualProperty().EnergyMax); Msg_RC_UpdateCoefficient msg1 = new Msg_RC_UpdateCoefficient(); msg1.obj_id = one.GetId(); msg1.hpmax_coefficient = one.HpMaxCoefficient; scene.NotifyAllUser(msg1); Msg_RC_UpdateCoefficient msg2 = new Msg_RC_UpdateCoefficient(); msg2.obj_id = two.GetId(); msg2.hpmax_coefficient = two.HpMaxCoefficient; scene.NotifyAllUser(msg2); Msg_RC_SyncProperty propMsg1 = DataSyncUtility.BuildSyncPropertyMessage(one); scene.NotifyAllUser(propMsg1); Msg_RC_SyncProperty propMsg2 = DataSyncUtility.BuildSyncPropertyMessage(two); scene.NotifyAllUser(propMsg2); } } } return(false); }
private void TickEntities() { m_DeletedEntities.Clear(); for (LinkedListNode <EntityInfo> linkNode = m_EntityMgr.Entities.FirstNode; null != linkNode; linkNode = linkNode.Next) { EntityInfo info = linkNode.Value; info.RetireAttackerInfos(60000); if (info.LevelChanged || info.GetSkillStateInfo().BuffChanged) { AttrCalculator.Calc(info); info.LevelChanged = false; info.GetSkillStateInfo().BuffChanged = false; } if (info.IsBorning) { if (info.BornTime <= 0) { SkillInfo skillInfo = info.GetSkillStateInfo().GetSkillInfoById(info.BornSkillId); if (info.BornSkillId > 0 && null != skillInfo) { info.BornTime = TimeUtility.GetLocalMilliseconds(); } else { info.IsBorning = false; info.BornTime = 0; info.SetAIEnable(true); info.RemoveState(CharacterPropertyEnum.x3009_无敌); } } else if (info.BornTime + info.BornTimeout < TimeUtility.GetLocalMilliseconds()) { info.IsBorning = false; info.BornTime = 0; info.SetAIEnable(true); info.RemoveState(CharacterPropertyEnum.x3009_无敌); } } if (info.IsDead() && !info.NeedDelete) { if (info.DeadTime <= 0) { CalcKillIncome(info); //发送npc死亡消息 Msg_RC_NpcDead npcDeadBuilder = new Msg_RC_NpcDead(); npcDeadBuilder.npc_id = info.GetId(); NotifyAllUser(RoomMessageDefine.Msg_RC_NpcDead, npcDeadBuilder); SkillInfo skillInfo = info.GetSkillStateInfo().GetSkillInfoById(info.DeadSkillId); if (info.DeadSkillId > 0 && null != skillInfo) { info.DeadTime = TimeUtility.GetLocalMilliseconds(); OnEntityKilled(info); } else { if (null == info.CustomData as User) { info.DeadTime = 0; info.NeedDelete = true; OnEntityKilled(info); } else { info.DeadTime = TimeUtility.GetLocalMilliseconds(); } } } else { if (null == info.CustomData as User && info.DeadTime + info.DeadTimeout < TimeUtility.GetLocalMilliseconds()) { info.DeadTime = 0; info.NeedDelete = true; //重新发送npc死亡消息 Msg_RC_NpcDead npcDeadBuilder = new Msg_RC_NpcDead(); npcDeadBuilder.npc_id = info.GetId(); NotifyAllUser(RoomMessageDefine.Msg_RC_NpcDead, npcDeadBuilder); } else if (null != info.CustomData as User && info.DeadTime + info.ReliveTimeout < TimeUtility.GetLocalMilliseconds()) { info.DeadTime = 0; info.Hp = info.HpMax; info.Energy = info.EnergyMax; Msg_RC_SyncProperty npcProp = DataSyncUtility.BuildSyncPropertyMessage(info); NotifyAllUser(RoomMessageDefine.Msg_RC_SyncProperty, npcProp); } } } if (info.NeedDelete) { m_DeletedEntities.Add(info); } } if (m_DeletedEntities.Count > 0) { int enemyCt = 0; int friendCt = 0; Msg_RC_DestroyNpc destroyNpcBuilder = new Msg_RC_DestroyNpc(); for (int i = 0; i < m_DeletedEntities.Count; ++i) { EntityInfo ni = m_DeletedEntities[i]; if (CharacterRelation.RELATION_ENEMY == EntityInfo.GetRelation((int)CampIdEnum.Blue, ni.GetCampId())) { ++enemyCt; } else if (CharacterRelation.RELATION_FRIEND == EntityInfo.GetRelation((int)CampIdEnum.Blue, ni.GetCampId())) { ++friendCt; } //发送npc消失消息 destroyNpcBuilder.npc_id = ni.GetId(); NotifyAllUser(RoomMessageDefine.Msg_RC_DestroyNpc, destroyNpcBuilder); DestroyEntity(ni); } TryAllKilledOrAllDied(enemyCt > 0, friendCt > 0); } m_EntityMgr.ExecuteDelayAdd(); }
internal void SyncForNewObserver(Observer observer) { if (null != observer) { Room room = GetRoom(); if (null != room && null != room.GetActiveScene()) { //同步其他玩家数据与物品给自己 foreach (User other in room.RoomUsers) { if (!other.IsEntered) { continue; } UserInfo otherInfo = other.Info; if (null != otherInfo) { Vector3 pos = otherInfo.GetMovementStateInfo().GetPosition3D(); ArkCrossEngineMessage.Position pos_bd = new ArkCrossEngineMessage.Position(); pos_bd.x = (float)pos.X; pos_bd.z = (float)pos.Z; Msg_CRC_Create bd = new Msg_CRC_Create(); bd.role_id = other.RoleId; bd.hero_id = other.HeroId; bd.camp_id = other.CampId; bd.role_level = other.Level; bd.is_player_self = false; bd.position = pos_bd; bd.face_dirction = (float)otherInfo.GetMovementStateInfo().GetFaceDir(); for (int index = 0; index < otherInfo.GetSkillStateInfo().GetAllSkill().Count; index++) { bd.skill_levels.Add(otherInfo.GetSkillStateInfo().GetSkillInfoByIndex(index).SkillLevel); } bd.scene_start_time = StartTime; bd.nickname = other.Name; observer.SendMessage(bd); DataSyncUtility.SyncBuffListToObserver(otherInfo, observer); Msg_RC_SyncProperty propBuilder = DataSyncUtility.BuildSyncPropertyMessage(otherInfo); observer.SendMessage(propBuilder); Msg_RC_SyncCombatStatisticInfo combatBuilder = DataSyncUtility.BuildSyncCombatStatisticInfo(otherInfo); observer.SendMessage(combatBuilder); LogSys.Log(LOG_TYPE.DEBUG, "send user {0} msg to observer {1}", other.RoleId, observer.Guid); } } //同步场景数据给观察者 for (LinkedListNode <NpcInfo> linkNode = NpcManager.Npcs.FirstValue; null != linkNode; linkNode = linkNode.Next) { NpcInfo npc = linkNode.Value; if (null != npc) { Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(npc); observer.SendMessage(bder); } } int totalKillCountForBlue = 0; int totalKillCountForRed = 0; for (LinkedListNode <UserInfo> linkNode = UserManager.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo user_info = linkNode.Value; if (user_info.GetCampId() == (int)CampIdEnum.Blue) { totalKillCountForBlue += user_info.GetCombatStatisticInfo().KillHeroCount; } else { totalKillCountForRed += user_info.GetCombatStatisticInfo().KillHeroCount; } } Msg_RC_PvpCombatInfo combat_bd = new Msg_RC_PvpCombatInfo(); combat_bd.kill_hero_count_for_blue = totalKillCountForBlue; combat_bd.kill_hero_count_for_red = totalKillCountForRed; combat_bd.link_id_for_killer = -1; combat_bd.link_id_for_killed = -1; combat_bd.killed_nickname = ""; combat_bd.killer_nickname = ""; observer.SendMessage(combat_bd); } } }
private void TickRecover() { float hp_coefficient = 1.0f; float mp_coefficient = 1.0f; Data_SceneConfig scene_data = SceneConfigProvider.Instance.GetSceneConfigById(m_SceneResId); if (null != scene_data) { hp_coefficient = scene_data.m_RecoverHpCoefficient; mp_coefficient = scene_data.m_RecoverMpCoefficient; } for (LinkedListNode <UserInfo> linkNode = UserManager.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo info = linkNode.Value; if (!info.IsDead()) { float hpRecover = info.GetActualProperty().HpRecover *hp_coefficient; float epRecover = info.GetActualProperty().EnergyRecover *mp_coefficient; if (hpRecover > 0.0001) { if (info.Hp + (int)hpRecover >= info.GetActualProperty().HpMax) { info.SetHp(Operate_Type.OT_Absolute, (int)info.GetActualProperty().HpMax); } else { info.SetHp(Operate_Type.OT_Relative, (int)hpRecover); } } if (epRecover > 0.0001) { if (info.Energy + (int)epRecover >= info.GetActualProperty().EnergyMax) { info.SetEnergy(Operate_Type.OT_Absolute, (int)info.GetActualProperty().EnergyMax); } else { info.SetEnergy(Operate_Type.OT_Relative, (int)epRecover); } } if (hpRecover > 0.0001 || epRecover > 0.0001) { Msg_RC_SyncProperty builder = DataSyncUtility.BuildSyncPropertyMessage(info); NotifyAreaUser(info, builder, false); } } } for (LinkedListNode <NpcInfo> linkNode = NpcManager.Npcs.FirstValue; null != linkNode; linkNode = linkNode.Next) { NpcInfo info = linkNode.Value; if (!info.IsDead()) { float hpRecover = info.GetActualProperty().HpRecover; float npRecover = info.GetActualProperty().EnergyRecover; if (hpRecover > 0.0001) { if (info.Hp + (int)hpRecover >= info.GetActualProperty().HpMax) { info.SetHp(Operate_Type.OT_Absolute, (int)info.GetActualProperty().HpMax); } else { info.SetHp(Operate_Type.OT_Relative, (int)hpRecover); } } if (npRecover > 0.0001) { if (info.Energy + (int)npRecover >= info.GetActualProperty().EnergyMax) { info.SetEnergy(Operate_Type.OT_Absolute, (int)info.GetActualProperty().EnergyMax); } else { info.SetEnergy(Operate_Type.OT_Relative, (int)npRecover); } } if (hpRecover > 0.0001 || npRecover > 0.0001) { Msg_RC_SyncProperty builder = DataSyncUtility.BuildSyncPropertyMessage(info); NotifyAreaUser(info, builder, false); } } } }
private void SyncUserToUserHelper(User infoUser, User user, bool isSelf) { Room room = GetRoom(); if (null != infoUser && null != user && null != room && null != room.GetActiveScene()) { UserInfo userInfo = infoUser.Info; if (null != userInfo) { Vector3 pos = userInfo.GetMovementStateInfo().GetPosition3D(); ArkCrossEngineMessage.Position pos_bd0 = new ArkCrossEngineMessage.Position(); pos_bd0.x = pos.X; pos_bd0.z = pos.Z; Msg_CRC_Create bd0 = new Msg_CRC_Create(); bd0.role_id = infoUser.RoleId; bd0.hero_id = infoUser.HeroId; bd0.camp_id = infoUser.CampId; bd0.role_level = infoUser.Level; bd0.is_player_self = isSelf; bd0.position = pos_bd0; bd0.face_dirction = (float)userInfo.GetMovementStateInfo().GetFaceDir(); for (int index = 0; index < userInfo.GetSkillStateInfo().GetAllSkill().Count; index++) { bd0.skill_levels.Add(userInfo.GetSkillStateInfo().GetSkillInfoByIndex(index).SkillLevel); } bd0.scene_start_time = StartTime; bd0.nickname = infoUser.Name; user.SendMessage(bd0); /// if (infoUser.PresetIndex >= 0) { Msg_RC_UpdateUserBattleInfo uusMsg = new Msg_RC_UpdateUserBattleInfo(); uusMsg.role_id = infoUser.Info.GetId(); uusMsg.preset_index = infoUser.PresetIndex; for (int i = 0; i < infoUser.Skill.Count; i++) { Msg_RC_UpdateUserBattleInfo.PresetInfo preset_info = new Msg_RC_UpdateUserBattleInfo.PresetInfo(); preset_info.skill_id = infoUser.Skill[i].SkillId; preset_info.skill_level = infoUser.Skill[i].SkillLevel; uusMsg.skill_info.Add(preset_info); } for (int i = 0; i < infoUser.Equip.Count; i++) { Msg_RC_UpdateUserBattleInfo.EquipInfo equip_info = new Msg_RC_UpdateUserBattleInfo.EquipInfo(); equip_info.equip_id = infoUser.Equip[i].ItemId; equip_info.equip_level = infoUser.Equip[i].ItemLevel; equip_info.equip_random_property = infoUser.Equip[i].ItemRandomProperty; uusMsg.equip_info.Add(equip_info); } for (int i = 0; i < infoUser.Legacy.Count; i++) { Msg_RC_UpdateUserBattleInfo.LegacyInfo legacy_info = new Msg_RC_UpdateUserBattleInfo.LegacyInfo(); legacy_info.legacy_id = infoUser.Legacy[i].ItemId; legacy_info.legacy_level = infoUser.Legacy[i].ItemLevel; legacy_info.legacy_random_property = infoUser.Legacy[i].ItemRandomProperty; legacy_info.legacy_IsUnlock = infoUser.Legacy[i].IsUnlock; uusMsg.legacy_info.Add(legacy_info); } foreach (XSoulPartInfo part in infoUser.XSouls.GetAllXSoulPartData().Values) { Msg_RC_UpdateUserBattleInfo.XSoulDataInfo xsoul_info = new Msg_RC_UpdateUserBattleInfo.XSoulDataInfo(); xsoul_info.ItemId = part.XSoulPartItem.ItemId; xsoul_info.Level = part.XSoulPartItem.Level; xsoul_info.Experience = part.XSoulPartItem.Experience; xsoul_info.ModelLevel = part.ShowModelLevel; uusMsg.XSouls.Add(xsoul_info); } if (null != infoUser.Partner) { Msg_RC_UpdateUserBattleInfo.PartnerDataInfo partner_info = new Msg_RC_UpdateUserBattleInfo.PartnerDataInfo(); partner_info.PartnerId = infoUser.Partner.Id; partner_info.PartnerLevel = infoUser.Partner.CurAdditionLevel; partner_info.PartnerStage = infoUser.Partner.CurSkillStage; uusMsg.Partners.Add(partner_info); } user.SendMessage(uusMsg); } /// DataSyncUtility.SyncBuffListToUser(userInfo, user); Msg_RC_SyncProperty propBuilder = DataSyncUtility.BuildSyncPropertyMessage(userInfo); user.SendMessage(propBuilder); Msg_RC_SyncCombatStatisticInfo combatBuilder = DataSyncUtility.BuildSyncCombatStatisticInfo(userInfo); user.SendMessage(combatBuilder); LogSys.Log(LOG_TYPE.DEBUG, "send user {0} msg to user {1}", infoUser.RoleId, user.RoleId); } } }