|
|
|
Смена управления над персонажем. |
|
|
StaticZ |
14.8.2014, 0:04
|
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948
|
Цитата(Aimed @ 12.8.2014, 6:07) Пробовал просто другой NetState у мобайлов присвоить и так-же в самом NetState поменять мобайла на другого - максимум что получаю это управление сразу двумя чарами одновременно (IMG: style_emoticons/default/biggrin.gif) Да и то как-то подлагивать начинает.... А обнулить NetState старого чара? А вообще там не все так просто и зависит от кода во многом ибо Mobile связан с NetState и Account, NetState опять же связан с Mobile и Account, как и Mobile с NetState и Account.. Т.е. тупо подменив NetState вы решите лишь часть проблемы, т.к. где-то может идти доступ к нему через Account, не говоря уже о том, что NetState остается связан с старой мобайлой. Как вариант, можно еще вспомнить, что оригинал рассчитан на то что карты обрабатываются на разных серверах и при перемещении периодически идет пересоединение к другим серверам. Т.е. можно попытаться запросить клиент переконектится, тупо подменив мобайл в акке игрока: Код Gets or sets the character at a specified index for this account. Out of bound index values are handled; null returned for get, ignored for set. ServerAccounting.Account[]
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
Aimed |
14.8.2014, 4:03
|
Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012 Группа: Пользователи Наличность: 8492
Пользователь №: 15.607
|
Цитата(StaticZ @ 13.8.2014, 23:04) А обнулить NetState старого чара? А вообще там не все так просто и зависит от кода во многом ибо Mobile связан с NetState и Account, NetState опять же связан с Mobile и Account, как и Mobile с NetState и Account.. Т.е. тупо подменив NetState вы решите лишь часть проблемы, т.к. где-то может идти доступ к нему через Account, не говоря уже о том, что NetState остается связан с старой мобайлой. Как вариант, можно еще вспомнить, что оригинал рассчитан на то что карты обрабатываются на разных серверах и при перемещении периодически идет пересоединение к другим серверам. Т.е. можно попытаться запросить клиент переконектится, тупо подменив мобайл в акке игрока:
Код Mobile player = new PlayerMobile(); Container pack = player.Backpack;
if (pack == null) { pack = new Backpack(); pack.Movable = false;
player.AddItem(pack); } player.Body = 0x191; player.Name = "Test Player"; player.MoveToWorld(e.Mobile.Location, e.Mobile.Map); ((Account)e.Mobile.Account).SwapMainCharacter(player);//сохраняю главного чара на аккауте m_Mobiles[0] и заменяю его на player. player.Account = e.Mobile.Account; player.Player = true; player.NetState = e.Mobile.NetState; e.Mobile.NetState.Mobile = player; e.Mobile.Player = false; e.Mobile.NetState = null; И смотри какой прикол выходит, если я обнуляю нетстейт старого мобайла e.Mobile.NetState = null; Управление вообще не переходит новому мобайлу, но если начать печатать, то текст над головой нового мобайла появится и пейпердол нового мобайла открывается, если нажать кнопку. Если нетстейт старого мобайла не обнулять, тогда я управляю двумя чарами одновременно! Пробовал дебагом понять в чем суть - так и не смог, всё вроде правильно, нетстейт передал, а старый обнулил. А потом через какое-то время старый мобайл обратно свой нетстейт имеет, а новый мобайл стоит как вкопанный. Мистика (IMG: style_emoticons/default/biggrin.gif)
|
|
|
|
Juzzver |
14.8.2014, 11:12
|
Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008 Группа: Супермодераторы Наличность: 22559 Из: Северная Корея
Пользователь №: 11.273
|
Стоит еще учитывать, что передав нетстейт, игрок может навредить персонажу, к примеру выбросив шмотки, регрессию скиллов сделать, взять в руку шмотку и т.д.
А по самой концепции турнира, я думаю можно просто передавать значения других персонажей, что в конечном итоге даст тот же самый результат. К примеру есть игрок Вася и Петя, вот игрок Васи становится в точности как Петя со всеми его вещами, параметрами, внешним видом и именем, тоже самое происходит и с Петей. По окончанию турнира удаляем текущие значения, и возвращаем прежние.
Сообщение отредактировал Juzzver - 14.8.2014, 11:13
--------------------
|
|
|
|
StaticZ |
14.8.2014, 14:58
|
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948
|
Цитата(Aimed @ 14.8.2014, 5:03) И смотри какой прикол выходит, если я обнуляю нетстейт старого мобайла e.Mobile.NetState = null; Управление вообще не переходит новому мобайлу, но если начать печатать, то текст над головой нового мобайла появится и пейпердол нового мобайла открывается, если нажать кнопку. Если нетстейт старого мобайла не обнулять, тогда я управляю двумя чарами одновременно! Пробовал дебагом понять в чем суть - так и не смог, всё вроде правильно, нетстейт передал, а старый обнулил. А потом через какое-то время старый мобайл обратно свой нетстейт имеет, а новый мобайл стоит как вкопанный. Мистика (IMG: style_emoticons/default/biggrin.gif) Ну во первых вы забыли про Account.NetState и возможно стоит внести новую мобайл в список мобайл аккаунта. А вообще никакой мистики тут нет, это не поля а свойства. Почитайте код, когда вы пишите Moble.NetState = null, возбуждается событие OnDisconnected(), там запросто может приводиться к вызову чего-то в стиле Moble.NetState.Mobile = null; Вообще тут нужно засесть с дебагером и разбираться что происходит и что приводит к проблеме работы с управлением. Задачка не тривиальная - вряд ли кто-то сможет посоветовать готовое решение, а так тупо гадать - смысла нет... В принципе я тоже хочу сделать нечто похожее для "вселения в мобов", так что если хотите подождите пока сам начну ковыряться. Если будет актуально - с радостью поделюсь нюансами\реализацией.
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
StaticZ |
15.8.2014, 16:04
|
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948
|
Цитата(Aimed @ 14.8.2014, 20:00) Account.NetState не существует.
NetState хранится только у мобайла и сам мобайл хранится в NetState, двойная связь и всё.
Хм.... а у меня существует ))) Видать различия версий
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|