|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
14.06.2010, 12:31 | #1 |
Администратор
|
Получение таланта
В Player.cpp есть
Код:
PlayerTalentMap::iterator iter = m_talents[m_activeSpec].find(talentPos->talent_id); Есть Unit *target = GetTarget(); Как я понимаю, нужен объект Player. Допустим, что есть pPlayer. Код:
PlayerTalentMap::iterator iter = pPlayer.m_talents[pPlayer->GetActiveSpec()].find(xxx); 1. Каким образом можно получить талант игрока? 2. Допустима ли конструкция Player* pPlayer = (Player*)target;? 3. Можно ли как-нибудь определить объект Player, чтобы все его переменные (m_talents, m_activeSpec и т.д.) были доступны через точку, как внутри класса? |
14.06.2010, 12:39 | #2 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Код:
Unit* target = GetTarget(); if(target->GetTypeId() == TYPEID_PLAYER) { Player* player = (Player*)target; player->GetTalents(player->GetActiveSpec()); } |
14.06.2010, 14:23 | #3 |
Администратор
|
В исходниках нигде не нашел данной функции.
Код:
>..\..\src\game\SpellAuras.cpp(5327) : error C2039: 'GetTalents' : is not a member of 'Player' |
14.06.2010, 14:39 | #4 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
14.06.2010, 14:48 | #5 |
Администратор
|
Это понятно.
Просто не нашел функции и полез на форум. |
14.06.2010, 19:29 | #6 |
Администратор
|
Допустим, что есть 2 функции:
Код:
PlayerTalentMap GetTalents(uint8 spec) { return m_talents[spec]; } PlayerTalentMap::iterator GetTalent(uint8 spec, uint32 talent_id) { return m_talents[spec].find(talent_id); } Код:
Player* player = (Player*)target; PlayerTalentMap* talents = player->GetTalents(player->GetActiveSpec()); PlayerTalent* talent = player->GetTalent(player->GetActiveSpec(), xxx); |
14.06.2010, 19:46 | #7 |
Администратор
|
Код:
PlayerTalentMap::iterator iter = player->GetTalents(player->GetActiveSpec()).find(xxx); 2> f:\_system\src\wow\mangos\master\src\game\Player.h (2486) : see declaration of 'Player::GetTalents' 2> f:\_system\src\wow\mangos\master\src\game\Player.h (1076) : see declaration of 'Player' |
14.06.2010, 20:58 | #8 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Переместите GetTalents из protected: в public:
|
14.06.2010, 21:56 | #9 |
Администратор
|
Переместил, теперь в Player.h:
Код:
public ... // Dual Spec PlayerTalentMap GetTalents(uint8 spec) { return m_talents[spec]; } Код:
Player* player = (Player*)target; PlayerTalentMap* talents = player->GetTalents(player->GetActiveSpec()); Код:
2>SpellAuras.cpp 2>..\..\src\game\SpellAuras.cpp(5358) : error C2440: 'initializing' : cannot convert from 'PlayerTalentMap' to 'PlayerTalentMap *' 2> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called |
14.06.2010, 22:27 | #11 |
Администратор
|
Это для правки патча http://ru-mangos.ru/showthread.php?t=1445
В теме выложил первый вариант, получил замечания, по которым теперь планирую внести правки. Среди замечаний была замена HasSpell на работу через талант. Для этих целей и ищу талант, чтобы из него получить спелл и значение эффекта. |
14.06.2010, 23:21 | #12 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
А HasTalent уже нету?
Edit: Вижу нет, жаль... Должен работать поиск по ауре HasAura Последний раз редактировалось LordJZ; 14.06.2010 в 23:24. |
14.06.2010, 23:24 | #13 |
Администратор
|
Поиск по исходникам сказал, что нет.
Мне надо получить талант по номеру, взять его спелл, а у спелла значение эффекта. Загвоздка в получении таланта или их списка, остальное можно извлечь из таланта. |
14.06.2010, 23:43 | #14 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Талант по номеру из DBC? А откуда он у вас и зачем?
|
15.06.2010, 08:59 | #15 |
Администратор
|
Добавил кусок кода для печати номера таланта в лог, оттуда и взял.
Зачем - ответ в посте 11. Поясню: в патче писал расчет бонуса в цикле в зависимости от таланта, в замечании мне посоветовали брать данные из спелла, с чем я согласен. Массив будет не нужен, если получить талант. Схема такова: берем талант, значение эффекта спелла и увеличиваем бонус на это значение. На текущий момент не нашел функций поиска талантов вне Player.p, поэтому пробую сделать сам, но знаний не хватает. |
15.06.2010, 09:39 | #16 |
Модератор
|
Запутано что-то с указателями при обращении к GetTalents(). рассмотрите для примера
Код:
AuraList const& GetAurasByType(AuraType type) const { return m_modAuras[type]; } AuraMap & GetAuras() { return m_Auras; } Код:
AuraList const& ModPowerRegenPCTAuras = GetAurasByType(SPELL_AURA_MOD_POWER_REGEN_PERCENT); AuraMap const& auras = GetAuras(); Код:
PlayerTalentMap& GetTalents(uint8 spec) { return m_talents[spec]; } Код:
PlayerTalentMap * GetTalents(uint8 spec) { return &m_talents[spec]; } |
15.06.2010, 15:36 | #17 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Функция получения таланта по его id был добавлена сегодня в одном из коммитов.
|
15.06.2010, 20:20 | #18 |
Администратор
|
Спасибо за хорошую новость, а автору коммита за проделанную работу (за коммитами слежу, но вечером ).
|
15.06.2010, 20:48 | #19 |
Администратор
|
После того коммита можно найти сразу спелл, но
Код:
SpellEntry const* spell = player->GetKnownTalentRankById(xxx); Код:
(don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) Код:
Spell* spell = sSpellStore.LookupEntry(xxx); |
15.06.2010, 21:36 | #20 |
Администратор
|
Не туда посмотрел, все оказалось намного проще, нашел опять же в комментах:
Код:
int32 m_currentBasePoints[MAX_EFFECT_INDEX]; // cache SpellEntry::CalculateSimpleValue and use for set custom base points |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получение данных Карта->Зона | Hantet | WWW | 9 | 11.09.2010 22:21 |