internal static void Execute(object msg, NetConnection conn, NetworkSystem networkSystem) { Msg_RC_CreateNpc targetmsg = msg as Msg_RC_CreateNpc; if (null == targetmsg) { return; } if (targetmsg.owner_id == networkSystem.Robot.MyselfId) { List <int> ownedNpcs = networkSystem.Robot.OwnedNpcs; if (!ownedNpcs.Contains(targetmsg.npc_id)) { ownedNpcs.Add(targetmsg.npc_id); } } List <int> otherIds = networkSystem.Robot.OtherIds; if (CharacterRelation.RELATION_ENEMY == LobbyRobot.Robot.GetRelation(targetmsg.camp_id, networkSystem.Robot.MyselfCampId)) { if (!otherIds.Contains(targetmsg.npc_id)) { otherIds.Add(targetmsg.npc_id); } } }
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(); } }
public static Msg_RC_CreateNpc BuildCreateNpcMessage(EntityInfo npc, int rate = -1) { Msg_RC_CreateNpc bder = new Msg_RC_CreateNpc(); bder.npc_id = npc.GetId(); bder.unit_id = npc.GetUnitId(); ScriptRuntime.Vector3 pos = npc.GetMovementStateInfo().GetPosition3D(); GameFrameworkMessage.Position pos_bd = new GameFrameworkMessage.Position(); pos_bd.x = (float)pos.X; pos_bd.z = (float)pos.Z; bder.cur_pos = pos_bd; bder.face_direction = (float)npc.GetMovementStateInfo().GetFaceDir(); bder.link_id = npc.GetTableId(); bder.camp_id = npc.GetCampId(); if (npc.OwnerId > 0) { bder.owner_id = npc.OwnerId; } if (npc.GetAiStateInfo().LeaderId > 0) { bder.leader_id = npc.GetAiStateInfo().LeaderId; } User user = npc.CustomData as User; if (null != user) { bder.key = user.GetKey(); } bder.level = npc.Level; return(bder); }
internal static Msg_RC_CreateNpc BuildCreateNpcMessage(NpcInfo npc) { Msg_RC_CreateNpc bder = new Msg_RC_CreateNpc(); bder.npc_id = npc.GetId(); bder.unit_id = npc.GetUnitId(); Vector3 pos = npc.GetMovementStateInfo().GetPosition3D(); ArkCrossEngineMessage.Position pos_bd = new ArkCrossEngineMessage.Position(); pos_bd.x = (float)pos.X; pos_bd.z = (float)pos.Z; bder.cur_pos = pos_bd; bder.face_direction = (float)npc.GetMovementStateInfo().GetFaceDir(); bder.link_id = npc.GetLinkId(); if (npc.GetUnitId() <= 0) { bder.camp_id = npc.GetCampId(); } if (npc.OwnerId > 0) { bder.owner_id = npc.OwnerId; } bder.level = npc.GetLevel(); return(bder); }
private void SyncSceneObjectsToUser(User user) { if (null != user) { UserInfo userInfo = user.Info; Room room = GetRoom(); if (null != userInfo && null != room && null != room.GetActiveScene()) { 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); if (npc.AppendAttrId > 0) { bder.add_attr_id = npc.AppendAttrId; } user.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 = ""; user.SendMessage(combat_bd); } } }
private void DropNpc(Vector3 pos, int money, string model, string particle) { //给每个玩家掉落一个 Data_Unit unit = new Data_Unit(); unit.m_Id = -1; unit.m_LinkId = 100001; unit.m_AiLogic = (int)AiStateLogicId.DropOut_AutoPick; unit.m_RotAngle = 0; for (LinkedListNode <UserInfo> linkNode = UserManager.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo userInfo = linkNode.Value; if (null != userInfo) { float x = CrossEngineHelper.Random.NextFloat() * 4 - 2; float z = CrossEngineHelper.Random.NextFloat() * 4 - 2; pos.X += x; pos.Z += z; NpcInfo npcInfo = NpcManager.AddNpc(unit); npcInfo.GetMovementStateInfo().SetPosition(pos); npcInfo.GetMovementStateInfo().SetFaceDir(0); npcInfo.GetMovementStateInfo().IsMoving = false; npcInfo.SetAIEnable(true); npcInfo.SetCampId((int)CampIdEnum.Friendly); npcInfo.OwnerId = userInfo.GetId(); npcInfo.DropMoney = money; DropOutInfo dropInfo = new DropOutInfo(); dropInfo.DropType = DropOutType.GOLD; dropInfo.Value = money; dropInfo.Model = model; dropInfo.Particle = particle; npcInfo.GetAiStateInfo().AiDatas.AddData <DropOutInfo>(dropInfo); npcInfo.SetModel(dropInfo.Model); User us = userInfo.CustomData as User; if (null != us) { Msg_RC_CreateNpc builder = DataSyncUtility.BuildCreateNpcMessage(npcInfo); us.SendMessage(builder); } } } }
public void SyncForNewObserver(Observer observer) { if (null != observer) { RoomUserManager roomUserMgr = GetRoomUserManager(); if (null != roomUserMgr && null != roomUserMgr.ActiveScene) { //同步场景数据给观察者 for (LinkedListNode <EntityInfo> linkNode = EntityManager.Entities.FirstValue; null != linkNode; linkNode = linkNode.Next) { EntityInfo npc = linkNode.Value; if (null != npc) { Msg_RC_CreateNpc bder = DataSyncUtility.BuildCreateNpcMessage(npc); observer.SendMessage(RoomMessageDefine.Msg_RC_CreateNpc, bder); } } } } }
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(); } }
internal static void Execute(object msg, NetConnection conn) { Msg_RC_CreateNpc targetmsg = msg as Msg_RC_CreateNpc; if (null == targetmsg) { return; } EntityInfo cb = PluginFramework.Instance.GetEntityById(targetmsg.npc_id); if (cb != null) { LogSystem.Info("NpcCreate obj already exist:" + targetmsg.npc_id + " unit:" + targetmsg.unit_id); return; } LogSystem.Info("NpcCreate:" + targetmsg.npc_id + " unit:" + targetmsg.unit_id + " ownerid=" + targetmsg.owner_id); EntityInfo npc = PluginFramework.Instance.CreateEntity(targetmsg.npc_id, targetmsg.unit_id, targetmsg.cur_pos.x, 0, targetmsg.cur_pos.z, targetmsg.face_direction, targetmsg.camp_id, targetmsg.link_id); if (null != npc) { npc.Level = targetmsg.level; npc.SetAIEnable(false); npc.GetMovementStateInfo().IsMoving = false; if (targetmsg.owner_id > 0) { npc.OwnerId = targetmsg.owner_id; } if (targetmsg.leader_id > 0) { npc.GetAiStateInfo().LeaderId = targetmsg.leader_id; } if (targetmsg.key > 0 && targetmsg.key == NetworkSystem.Instance.Key) { PluginFramework.Instance.RoomObjId = targetmsg.npc_id; PluginFramework.Instance.RoomUnitId = targetmsg.unit_id; } } }
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); } } } } }
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); } } }