• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Авто изучение классовых спеллов (подскажите есть ли скрипт?)
Stormtrooper
Командир
Добрый день всем
Копался и тут и в гугле но не могу найти есть ли скрипт на авто изучение классовых спеллов как в Пандарии но для 2,4,3 - 3,3,5 ?
Везде упоминаются только макросы а интересует именно чтобы спеллы сами изучались при получении левела без тренера
Если помог, ставь плюсик в репу :)

Сообщение # 1 написано 13.07.2014 в 13:53
_dm666
<3 Death Metal
Тут был топик с этим. Посмотри в патчах или спроси у neket007. Вроде он делал.
Сообщение # 2 написано 13.07.2014 в 14:13
Stormtrooper
Командир
Я искал тут поиском - есть разговоры про это но нет ни ссылок ни кода
Поверь я искал
Может не правильно искал я хз - но найти не удалось
Если помог, ставь плюсик в репу :)

Сообщение # 3 написано 13.07.2014 в 14:15
_dm666
<3 Death Metal
www.ac-web.org/forums/showthread.php?172918-C-Automatically-Learn-New-Spells
глянь.
Сообщение # 4 написано 13.07.2014 в 14:16
Stormtrooper
Командир
ооо спасибо посмотрю
я так бегло пробежался - пока не понятно как реализовано разделение по классам но попробовать думаю стоит
Если помог, ставь плюсик в репу :)

Сообщение # 5 написано 13.07.2014 в 14:38
Dinoza
para bellum
Сообщение # 6 написано 13.07.2014 в 14:45
epico
Капрал
А в последней ревизии есть сразу такая функция. Копался в worldserver.conf и нашел:
Код
#    AlwaysMaxSkillForLevel
#        Description: Players will automatically gain max skill level when logging in or leveling
#                     up.
Помогу с Trinity Core. По поводу готовых сборок не писать.
Сообщение # 7 написано 13.07.2014 в 15:56
_dm666
<3 Death Metal
Причем тут уровень навыков к обучению спелов?
Сообщение # 8 написано 13.07.2014 в 16:33
epico
Капрал
_dm666, упс, ошибочка вышла)
Помогу с Trinity Core. По поводу готовых сборок не писать.
Сообщение # 9 написано 13.07.2014 в 16:41
Stormtrooper
Командир
эххх всё бы хорошо но к Орегону не подходит ни первый ни второй скрипт sad
там такое количество нестыковок что исправить их врядли я смогу sad
просто не могу найти соответствующие функции в своём ядре

1 IntelliSense: не является именем класса или структуры e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 4 38 scripts
2 IntelliSense: "PlayerScript" не является нестатическим элементом данных или базовым классом для класса "player_learnspell" e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 7 35 scripts
3 IntelliSense: идентификатор "sObjectMgr" не определен e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 28 46 scripts
4 IntelliSense: имя, за которым следует выражение "::", должно определять класс или пространство имен e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 29 19 scripts
5 IntelliSense: требуется точка с запятой ";" e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 29 51 scripts
6 IntelliSense: идентификатор "itr" не определен e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 29 86 scripts
7 IntelliSense: class "TrainerSpell" не содержит члена "reqLevel" e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 33 34 scripts
8 IntelliSense: идентификатор "SpellInfo" не определен e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 34 28 scripts
9 IntelliSense: идентификатор "sSpellMgr" не определен e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 34 55 scripts
10 IntelliSense: слишком много аргументов в вызове функции e:\Oregon Server\WarpCoreWork\src\scripts\World\learnspell.cpp 35 128 scripts
Если помог, ставь плюсик в репу :)

Сообщение # 10 отредактировано Stormtrooper - Воскресенье, 13.07.2014, 18:53
_dm666
<3 Death Metal
Получится. Посмотри похожую реализацию. Я бы помог, но с телефона. Если тебе не к спеху, то я помогу тебе позже.
Сообщение # 11 написано 13.07.2014 в 20:09
Stormtrooper
Командир
я посмотрел - есть похожие функции по пока ничего не выходит
мне не к спеху - если будет возможность посмотри плиз
я заинтересовался этим поиграв на оффе - вот устроил себе гемор smile
Если помог, ставь плюсик в репу :)

Сообщение # 12 написано 13.07.2014 в 20:16
Evrial
Маршал
Некогда читать все посты выше, но думаю суть в том, что при включении всех спеллов рассовые (на пример у пристов) отсутствуют. я решал это по принципу добавления райдинга для фан сервера.
Код
DELETE FROM `playercreateinfo_spell_custom` WHERE Spell = 34091;
INSERT INTO `playercreateinfo_spell_custom` (`race`, `class`, `Spell`, `Note`, `Active`)
SELECT `race`, `class`, 34091, 'Artisan Riding', 1 FROM `playercreateinfo`;
Сообщение # 13 написано 14.07.2014 в 00:07
Stormtrooper
Командир
Даже рядом не попал Evrial
я вообще не понял что и к чему ты написал
у меня был вопрос про скрипт на автоматическое изучение спеллов при получении левела - как на оффе Пандарии
И суть в том что есть 2 скрипта но оба они вообще не подходят для Орегона - ошибок тьма так что пока я в ступоре
Если помог, ставь плюсик в репу :)

Сообщение # 14 написано 14.07.2014 в 09:35
Evrial
Маршал
во. теперь понятно что нужно)))

1. Изменения вносятся в функцию левелапа (думаю ты и сам понял)
2. Смотрим обработку параметра конфига PlayerStart.AllSpells. Вроде как оно там откудато-же спеллы берёт... Значит можно оттуда же взять
3. Допишем измененное условие из пункта 2 с поправкой не на все спеллы как там, а на доступные на текущем левеле.

Добавлено (14.07.2014, 11:40)
---------------------------------------------
Или же написать функцию аналогично InitTalentForLevel(); только для спеллов.

Добавлено (14.07.2014, 12:38)
---------------------------------------------
Во. Думаю примерно так:

1. в player.cpp функция GiveXP. Нам интересна строка:

Код
if (level < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL))
             GiveLevel(level + 1);

Сюда и будем дописывать.
2. Отсеивание спеллов вижу 2 варианта: или для каждого класса берём данные из таблицы тренеров, или же из таблицы playercreateinfo_spell_custom (или playercreateinfo_spell) и запрашиваем лвл спелла из спелл стора. У меня даже студия не установлена поэтому сделаю по таблице тренеров. А вообще, правильно будет делать по запросу в спеллсторе.
Код
uint32 class = GetClass();
uint32 trainerId;
swtich (class)
{
case 1: trainerId = 1 // т.е. для класса вариор ид тренера будет 1 - а вообще нужно взять тренера варов у которого есть все нужные спеллы... ну или создать его.
case 2: trainerId  = 570 // для паладинов ИД моба-тренера со всеми спеллами 570. сюда нужно подставить реальный ИД тренера. я цифру для примера написал)
// и так далее для всех классов
}
QueryResult_AutoPtr result = WorldDatabase.PQuery("SELECT spell FROM npc_trainer WHERE entry = %d AND reqlevel = %d", trainerId, GetLevel());
uint32 count = 0;
if (result)
{
barGoLink bar(result->GetRowCount());
do
{
Field* fields = result->Fetch();
uint32 spell_id = fields[0].GetUInt32();
uint8 current_race = GetRace();
uint8 current_class = GetClass();
PlayerInfo* pInfo = &playerInfo[current_race][current_class];
pInfo->spell.push_back(CreateSpellPair(spell_id, 1));
bar.step();
++count;
}
while (result->NextRow());
}

Ну вот я себе это как-то так представляю.

Добавлено (14.07.2014, 12:43)
---------------------------------------------
А вообще, то, что дал ДИНОЗА полностью идентично с моей идеей. Только на этих 335+ структура ядра другая. А принцип тот же. взять спеллы у тренера, отсеять по левелу и проучить чара при лвлапе.

Сообщение # 15 написано 14.07.2014 в 12:43
_dm666
<3 Death Metal
Цитата Evrial ()
Только на этих 335+ структура ядра другая

Нет, ты делаешь через базу, а на 335 реализовано через контейнер. hello
Сообщение # 16 написано 14.07.2014 в 16:26
Evrial
Маршал
Цитата _dm666 ()
Нет, ты делаешь через базу, а на 335 реализовано через контейнер.

ну так там использована функция GetNpcTrainerSpells(entry). По сути она выдаёт список спеллов которым обучает тренер. У меня тоже самое запросом в базу берётся список спеллов. Не вижу принципиальной разницы. Можно вообще взять из 335 эту функцию и адаптировать под орегон, после чего так же использовать.

p.s. к сожалению не имею исходника 335. У кого есть - сами посмотрите определение GetNpcTrainerSpells и станет понятно что в итоге оно берёт данные из таблицы тренеров.
Сообщение # 17 написано 16.07.2014 в 13:12
Vitalya7
Ну просто умничка=))
Цитата Evrial ()
p.s. к сожалению не имею исходника 335. У кого есть - сами посмотрите определение GetNpcTrainerSpells и станет понятно что в итоге оно берёт данные из таблицы тренеров.

Даже если так, то данные берутся во время загрузки сервера и сохраняются для последующего их применения без особой нагрузки. Если уж хочешь , чтобы нагрузка была меньше, используй хотя бы подготовленные выражения. А так - все вроде правильно
Сообщение # 18 написано 16.07.2014 в 22:10
Evrial
Маршал
Vitalya7, полностью согласен. динамическое обращение к БД явно жрёт больше ресурсов и менее безопасно чем взять данные при загрузке и хранить их. О оптимизации речи не шло. Речь бы о простейшей реализации.
Сообщение # 19 написано 18.07.2014 в 01:24
  • Страница 1 из 1
  • 1
Поиск: