/// <summary>活动内下线 </summary> private void ActivityOut(Int64 userid) { var mn = 0; if (Variable.Activity.ScenePlayer.Keys.Contains(string.Format("{0}_{1}", (int)ModuleNumber.SIEGE, userid))) { mn = (int)ModuleNumber.SIEGE; } if (Variable.Activity.ScenePlayer.Keys.Contains(string.Format("{0}_{1}", (int)ModuleNumber.BUILDING, userid))) { mn = (int)ModuleNumber.BUILDING; } var otherplays = Scene.ActivityOtherPlayers(userid, mn);//活动内其他玩家 var key = string.Format("{0}_{1}", mn, userid); view_scene_user scene; Variable.Activity.ScenePlayer.TryRemove(key, out scene); foreach (var item in otherplays) { var obj = new OnlineObject { OffLine = userid, OtherPlayer = Variable.Activity.ScenePlayer[item].user_id }; var tokenTest = new CancellationTokenSource(); Task.Factory.StartNew(m => { var temp = m as OnlineObject; if (temp == null) { return; } var aso = BuildData(temp.OffLine); if (!Variable.OnlinePlayer.ContainsKey(temp.OtherPlayer)) { return; } var othersession = Variable.OnlinePlayer[temp.OtherPlayer] as TGGSession; if (othersession == null) { return; } if (mn == (int)ModuleNumber.BUILDING) { SendPushCommand(othersession, aso, (int)BuildingCommand.PUSH_PLAYER_EXIT, (int)ModuleNumber.BUILDING); } if (mn == (int)ModuleNumber.SIEGE) { SendPushCommand(othersession, aso, (int)SiegeCommand.PUSH_PLAYER_EXIT, (int)ModuleNumber.SIEGE); } tokenTest.Cancel(); }, obj, tokenTest.Token); } }
/// <summary>正常下线</summary> private void NormalOut(view_scene_user userscene) { var otherplays = Scene.GetOtherPlayers(userscene.user_id, userscene.scene_id, (int)ModuleNumber.SCENE); if (!otherplays.Any()) { return; } #region 场景拆分 2015-03-19 var _plays = SceneSplit.GetSceneSplitPlayers(userscene.user_id, otherplays); #endregion foreach (var item in _plays) { var obj = new OnlineObject { OffLine = userscene.user_id, OtherPlayer = item.user_id }; var tokenTest = new CancellationTokenSource(); Task.Factory.StartNew(m => { var temp = m as OnlineObject; if (temp == null) { return; } if (!Variable.OnlinePlayer.ContainsKey(temp.OtherPlayer)) { return; } var otherplayerssession = Variable.OnlinePlayer[temp.OtherPlayer] as TGGSession; if (otherplayerssession == null) { return; } var aso = BuildData(temp.OffLine); SendPushCommand(otherplayerssession, aso, (int)SceneCommand.PLAYER_EXIT_SCENET, (int)ModuleNumber.SCENE); tokenTest.Cancel(); }, obj, tokenTest.Token); } }
/// <summary>监狱内下线 </summary> private void PrisonOut(Int64 userid) { //推送玩家离开监狱 var prisoners = Scene.GetOtherPlayers(userid, (int)ModuleNumber.PRISON); var key = string.Format("{0}_{1}", (int)ModuleNumber.PRISON, userid); view_scene_user scene; Variable.SCENCE.TryRemove(key, out scene); if (!prisoners.Any()) { return; //监狱内其他玩家 } foreach (var item in prisoners) { var other = (string)item.Clone(); var obj = new OnlineObject { OffLine = userid, OtherPlayer = Convert.ToInt32(other.Split("_")[1]) }; var tokenTest = new CancellationTokenSource(); Task.Factory.StartNew(m => { var temp = m as OnlineObject; if (temp == null) { return; } var aso = BuildData(temp.OffLine); if (!Variable.OnlinePlayer.ContainsKey(temp.OtherPlayer)) { return; } var othersession = Variable.OnlinePlayer[temp.OtherPlayer] as TGGSession; if (othersession == null) { return; } SendPushCommand(othersession, aso, (int)PrisonCommand.PUSH_PLAYER_EXIT, (int)ModuleNumber.PRISON); tokenTest.Cancel(); }, obj, tokenTest.Token); } }
public void TestSpawn2() { GameObject obj = OnlineObject.Instantiate(prefab2, new Vector3(0, -1, 175), Quaternion.identity); OnlineObject.Spawn(obj); }
public void AddGameObject(OnlineObject obj) { onlineObjects.Add(obj); if (obj is Projectile) { projectiles.Add(obj as Projectile); } }
private void addInGameObject(OnlineObject o) { lock (TanksGame.Lock) { tankGame.AddGameObject(o); } }
public void SpawnObject(OnlineObject ob) { //Set the owner ob.setOwner(PlayerID); //insert all json objects JObject obj = new JObject( new JProperty(KEY_OBJECT_TYPE, ob.GetType().ToString()), //obj type new JProperty(KEY_MSG_TYPE, MSG_TYPE.SPAWN.ToString()), // msg type new JProperty(KEY_OWNER, PlayerID), //the player owner new JProperty(KEY_JOBJECT, ob.getJSONObject()) //the jobject ); //set the msg content and send NRawGameMessage msg = new NRawGameMessage(); msg.setContent(obj.ToString()); SendGameMessage(msg); //add it locally addInGameObject(ob); }