Guest backdrift Posted April 18, 2011 Share Posted April 18, 2011 Quote: guild.GetMemberInfo( memberId )Возвращает информацию об одном члене гильдии.Каждый член гильдии имеет уникальный идентификатор. Этот идентификатор не совпадает с идентификатором игрока в игре.-- возвращаемое значениеtable or nil - таблица с информацией о персонаже из гильдии, если найден: id: ObjectId - идентификатор этого члена гильдии playerId: ObjectId - идентификатор персонажа или nil, если его нет в игре (порвалась связь и т.п.) Не перестаю удивляться тому, как это подобные функции возвращают нифига не уникальный для всей игры id члена гильдии. Кто-нибудь может объяснить, зачем, ЗАЧЕМ при каждом запуске игры все эти ид генерятся заново? С введением комнаты перемен даже ник в скором времени может перестать быть уникальным идентификатором.Подскажет кто-нибудь способ однозначно идентифицировать пользователя? Грубо говоря, получить список участников гильдии и точно знать, что игрок ПЫЩПЫЩ это вчерашний ОЛОЛО - просто он сменил ник. Quote Link to comment Share on other sites More sharing options...
Setras Posted April 18, 2011 Share Posted April 18, 2011 Да. При смене ника игрок "пыщьпыщь" должен будет снова вступить в гильдию. В данный момент при смене ника выкидывает из гильдии. + комбинация "покровитель - класс - раса - уровень рун" более-менее уникальна для топа любого русского сервера. + перерождение - класс перерождения(однако перерождение можно безболезненно удалить потери минимальны) Т.е. уровень рун еще не уникальность, однако я не слышал чтоб кто-то занимался понижением уровня рун с целью анонимизации. Смена ника в данный момент осуществляется через саппорт за некоторую сумму "кристаллов", при смене ника персонаж удаляется у всех из друзей, из гильдии, отовсюду. Опознать персонажа сменившего ник становится практически невозможно. Quote Link to comment Share on other sites More sharing options...
Guest backdrift Posted May 22, 2011 Share Posted May 22, 2011 А вот появился ещё один смежный вопрос. Есть ли возможность узнать по нику текущий unitId? Т.е. что-то вроде: Code: -- возвращает текущий unitId, если персонаж в игре, либо nil если отсутствует/не зарегистрированlocal uid = unit.IsExist("ОпятьПыщПыщ") Например, у нас имеется avatar.GetId() для возврата собственного ид, плюс все функции, выдающие разного рода списки (друзей/игнора/гильдии), возвращают таблицы с ид пользователей. А можно ли достучаться до произвольного персонажа, не входящего ни в один список? Хотя вероятно это скорее в сторону читерства и такой фичи нет) Quote Link to comment Share on other sites More sharing options...
SLA Posted May 24, 2011 Share Posted May 24, 2011 Quote: игрок ПЫЩПЫЩ это вчерашний ОЛОЛО - просто он сменил ник. Достоверно никак не определишь, и это правильно, так и должно быть. Именно для этого, люди и меняют ники.Впрочем, Setras дал несколько хороших способов попытаться идентифицировать игрока Quote: А вот появился ещё один смежный вопрос. Есть ли возможность узнать по нику текущий unitId? И да, и нет. Дело в том, что Все ID в "Аллодах Онлайн" существуют локально и временно, только на время использования. Например, персонаж ПыщьПыщь вошёл в "зону видимости" аватара (аватару пришли события EVENT_OBJECT_DETECT_STARTED и EVENT_OBJECT_DETECTOR_LIST_CHANGED, а ещё, ПыщьПыщь попал в список avatar.GetUnitList()). Именно в ЭТОТ момент, для ПыщьПыщь сгенерировался новый ID. Если ПыщьПыщь вышел из этой "зоны видимости", и вошёл снова, то у него уже новый ID.Как только ПыщьПыщь вышел из "зоны видимости" аватара, то для аватара, юнит ПыщьПыщь больше НЕ СУЩЕСТВУЕТ! А раз он НЕ существует, то естественно, у него нет ID Детектирование членов группы/рейда, супруги(а), хорунжих - это "особый" случай, когда юниты постоянно находятся в списке avatar.GetUnitList(). Что там с unitId членов гильдии (сейчас можно их получить функцией guild.GetMemberInfo()), я не знаю, не смотрел ещё.Исходя из всего этого, как вы уже догадались, функцию определения ID мы можем написать сами:Code: function unit.GetId( name ) if name and common.IsWString( name ) and not common.IsEmptyWString( text ) then local units = avatar.GetUnitList() for _, id in units do if common.CompareWString( object.GetName( id ), name ) == 0 then return id end end if common.CompareWString( name, object.GetName( avatar.GetId() ) ) == 0 then return avatar.GetId() end -- TODO: Возможно, нужно ещё поискать его в Гильдии? endend Quote Link to comment Share on other sites More sharing options...
Recommended Posts