• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Приватизация госсипа
No_MaTTeR
Старший Маршал
Запилил госсипа, который вызывается спеллом и, соответственно, бегает за игроком. Нужно сделать так, чтобы открыть данного госсипа мог только тот, кто его вызвал, желательно через базу, но если кто подкинет готовый код, буду тоже благодарен.
Сообщение # 1 написано 22.01.2015 в 10:31
Thermaplugg
Database Developer
в голове что то вертится, но вспомнить не могу

но самый простой способ(что первое в голову пришло) - написать кондицию на проверку наличия итема(который призывает нпс)

Код
CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION(15) + CONDITION_ITEM(2)
Сообщение # 2 написано 22.01.2015 в 16:43
No_MaTTeR
Старший Маршал
вариант, пробну, отпишу
Сообщение # 3 написано 22.01.2015 в 16:47
p620
Маршал
Цитата MENZ411 ()
но самый простой способ(что первое в голову пришло) - написать кондицию на проверку наличия итема(который призывает нпс)

С ним сможет болтать любой, у кого будет такой предмет.
Можно попробовать пошаманить с типом призванного существа. Вероятно, есть готовая реализация, позволяющая проводить дружелюбные взаимодействия с существом только призывателю. Другого ничего на ум не приходит... Разве что ядро.
----------
Посмотрел. Сам не пробовал, но Вам, вероятно, поможет CONDITION_RELATION_TO= 33;
Там есть 2 настройки: •3 - RELATION_OWNED_BY (ConditionTarget is owned by ConditionValue1) или •5 - RELATION_CREATED_BY (ConditionTarget is summoned by ConditionValue1), какая-то из них может подойти.
Сообщение # 4 отредактировано p620 - Четверг, 22.01.2015, 17:40
Thermaplugg
Database Developer
думаю обладателям таких итемов я думаю будет все равно, а вот уже левые не потыкают

есть еще вариант 2 - повесить на нипа ауру которая накладывается на пати/рейд, и уже на наличии ее написать проверку(кондицию) smile

Код
CONDITION_RELATION_TO(33)

кстати да, может быть даже и это подойдет учитывая то что суммон производится спелом
Сообщение # 5 отредактировано MENZ411 - Четверг, 22.01.2015, 17:49
Dimitro
Praise the sun!
Код
bool OnGossipHello(Player* player, Creature* creature)
{
     uint64 ownerGuid = creature->GetOwnerGUID();
     if (!ownerGuid)
         return false;
     if (player->GetGUID() != ownerGuid)
         return false;
     /*
         Опции диалога и т.д.
     */
}
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 6 написано 22.01.2015 в 19:18
No_MaTTeR
Старший Маршал
Чет я крутил с этими кондишинами, только хуже сделал (пробовал все 3 способа и другие). Госсип меню не видит ни призвавший игрок, ни другие, никак не могу понять, что не так.

Dimitro, тупо в Player.cpp скопировать? (да, я рак в ядре и не только)
Сообщение # 7 написано 22.01.2015 в 23:34
No_MaTTeR
Старший Маршал
ах да, еще хотел спросить, как сделать нпц тренером профессий, спеллов, двойной специализации, разучения талантов и пр.

А то госсип-менюшки не действительны. После жесткого курения вики обнаружил, что у нпц должен быть трейнер класс. В итоге, получилось сделать его тренером спеллов. К сожалению, остальные перечисленные выше ф-ции недоступны.
Решил взять за пример готового тренера (3345), вроде как что-то подобное получилось, НО при смене ида опять доступны только изучение спеллов. А вроде к нему не привязаны никакие скрипты и тому подобное. Что за черт?
Сообщение # 8 написано 22.01.2015 в 23:39
Thermaplugg
Database Developer
Код
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIPMENUID;
INSERT INTO `conditions` VALUES
(15, @GOSSIPMENUID, @ID, 0, 0, 2, 0, @ITEM, 1, 0, 0, 0, '', 'Only show gossip if player has item');

по структуре сам подгонишь
Сообщение # 10 написано 23.01.2015 в 00:11
p620
Маршал
Цитата No_MaTTeR ()
Чет я крутил с этими кондишинами, только хуже сделал (пробовал все 3 способа и другие). Госсип меню не видит ни призвавший игрок, ни другие, никак не могу понять, что не так.

Это Вы уже где-то, прошу прощения, ракуете =)
При правильной реализации всё должно работать. Смотрите существующие аналоги, пытайтесь сделать по ним.
Сообщение # 11 написано 23.01.2015 в 13:00
No_MaTTeR
Старший Маршал
Цитата MENZ411 ()
Код
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIPMENUID;
INSERT INTO `conditions` VALUES
(15, @GOSSIPMENUID, @ID, 0, 0, 2, 0, @ITEM, 1, 0, 0, 0, '', 'Only show gossip if player has item');

по структуре сам подгонишь

ОГРОМНЕЙШЕЕ СПАСИБО!!! Черт его знает, что я делал не так, сидел специально курил структуру и т.д., но у меня никак не получалось, а тут... СПАСИБО!!!

Цитата p620 ()
Это Вы уже где-то, прошу прощения, ракуете =)

полностью поддерживаю) Тяжело было очень вникнуть в эти конидишины. Спасибо за помощь тоже!!
Сообщение # 12 написано 25.01.2015 в 21:48
No_MaTTeR
Старший Маршал
Еще поднимал вопрос:

Цитата No_MaTTeR ()
ах да, еще хотел спросить, как сделать нпц тренером профессий, спеллов, двойной специализации, разучения талантов и пр.

А то госсип-менюшки не действительны. После жесткого курения вики обнаружил, что у нпц должен быть трейнер класс. В итоге, получилось сделать его тренером спеллов. К сожалению, остальные перечисленные выше ф-ции недоступны.
Решил взять за пример готового тренера (3345), вроде как что-то подобное получилось, НО при смене ида опять доступны только изучение спеллов. А вроде к нему не привязаны никакие скрипты и тому подобное. Что за черт?

Никто не может подсказать?
Сообщение # 13 написано 25.01.2015 в 21:49
No_MaTTeR
Старший Маршал
Цитата No_MaTTeR ()
Еще поднимал вопрос:

Вчера, вроде, нашел решение проблемы, но еще не испытал его. Никогда бы не подумал, что сброс талантов - спелл. Думаю, дальше все понятно.
Сообщение # 14 написано 26.01.2015 в 10:49
p620
Маршал
Цитата No_MaTTeR ()
ОГРОМНЕЙШЕЕ СПАСИБО!!! Черт его знает, что я делал не так, сидел специально курил структуру и т.д., но у меня никак не получалось, а тут... СПАСИБО!!!

И всё-таки попробуйте с указанными мною conditions тоже. Вероятно, таким образом получится воплотить в точности задуманный Вами функционал.
Сообщение # 15 написано 26.01.2015 в 12:52
No_MaTTeR
Старший Маршал
Цитата p620 ()
И всё-таки попробуйте с указанными мною conditions тоже. Вероятно, таким образом получится воплотить в точности задуманный Вами функционал.

да, я тоже об этом думал, просто еще не дошел до этого
Сообщение # 16 написано 26.01.2015 в 21:33
p620
Маршал
Цитата No_MaTTeR ()
да, я тоже об этом думал, просто еще не дошел до этого

Если получится - напишите пожалуйста.
Сообщение # 17 написано 26.01.2015 в 21:51
No_MaTTeR
Старший Маршал
Цитата p620 ()
Если получится - напишите пожалуйста.

не получается. И вот в чем трабл:
Код
ConditionValue1: target to which relation is checked - one of ConditionTargets available in current SourceType.


Я никак не пойму, что за значение здесь должно быть? Как прописать эту цель? Айдишник menu_id не подходит. Мой код:
Цитата
SET @GOS = 59999;
SET @ID = 1;
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOS;  
INSERT INTO `conditions` VALUES  
(15, @GOS, @ID, 0, 0, 33, 0, 5, 0, 0, 0, 0, '', 'Show gossip to caster');
Сообщение # 18 отредактировано No_MaTTeR - Понедельник, 26.01.2015, 22:12
p620
Маршал
Цитата No_MaTTeR ()
Я никак не пойму, что за значение здесь должно быть? Как прописать эту цель? Айдишник menu_id не подходит. Мой код

Честно говоря, мутная достаточно ситуация рисуется, без *полевых испытаний* не разберёшься...
Полагаю, что в ConditionTarget Вам следует установить нуль, а в ConditionValue1 - единицу. Тогда ConditionValue2 следует установить на 5.
Теоретически такая конфигурация будет работать. Цель, для которой будет проверяться условие - игрок (это правильно), цель, с которой будут проверяться отношения игрока - единица (WorldObject, содержащий искомую госсип-опцию), а необходимое для валидации отношение одного с другим - 5 (цель условия владеет держателем опции).
П.С: Точно не разбирал, но у Вас в запросе, вроде, не хватает одной колонки. Вы пропустили ConditionTarget1. Если установите его в единицу, конфигурация должна сработать точно так, как нужно.
Сообщение # 19 написано 26.01.2015 в 23:05
No_MaTTeR
Старший Маршал
Не получилось:
Код
REPLACE into `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`)  
values(15,59999,1,0,0,33,0,1,5,0,0,0,'','Don`t show gossip');

А может ли быть проблема в заклинании, которое призывает госсипа?
Сообщение # 20 отредактировано No_MaTTeR - Вторник, 27.01.2015, 23:26
p620
Маршал
Цитата No_MaTTeR ()
А может ли быть проблема в заклинании, которое призывает госсипа?

Да. Есть несколько типов призыва, каждый из которых обрабатывается по-разному. Например, можно призвать как *питомца*, так и обычного НИПа, который будет враждебен призывателю.
Сообщение # 21 написано 27.01.2015 в 23:38
No_MaTTeR
Старший Маршал
Цитата p620 ()
Да. Есть несколько типов призыва, каждый из которых обрабатывается по-разному. Например, можно призвать как *питомца*, так и обычного НИПа, который будет враждебен призывателю.

при призыве питомца получается, что у него есть целая панель питомца и он как госсип не активен. Завтра еще пробну скопировать спеллы с призыва всяких фановых спутников (типа тараканов, змей и т.д.), может не те флаги проставляю
Сообщение # 22 написано 28.01.2015 в 02:00
p620
Маршал
Цитата No_MaTTeR ()
спеллы с призыва всяких фановых спутников (типа тараканов, змей и т.д.),

Это правильная мысль, может сработать.
Сообщение # 23 написано 28.01.2015 в 11:46
No_MaTTeR
Старший Маршал
Как-то все слишком закручено пилится. Флаг SUMMON не дает нужного эффекта, он вообще не призывает моба. Хотя, вроде, предыдущий работающий спелл спокойно призывал моего НПЦ (правда сабнейм у спутника был "Стражник $n". У этих других идет сабнейм "Спутник $n"). Флаг SUMMON_PET не подходит вообще
Сообщение # 24 отредактировано No_MaTTeR - Четверг, 29.01.2015, 10:15
p620
Маршал
Могу я поинтересоваться, как именно Вы правите спеллы?
Сообщение # 25 написано 29.01.2015 в 11:35
No_MaTTeR
Старший Маршал
Цитата p620 ()
Могу я поинтересоваться, как именно Вы правите спеллы?

В общем, последнее мое редактирование было связано с тупым копированием спелла: в Booty Bay есть гном, который продает итем на призвание птичек. Взял оттуда спелл, теперь мой спутник призывается из вкладки "Питомцы". Опять попробовал подергать кондишины. Итог:
3 - RELATION_OWNED_BY - закрывает доступ для призывающего и других;
5 - RELATION_CREATED_BY - вообще не работает.

Кстати, я раньше думал, что решил проблему с разучиванием талантов и двойной специализацией, но не тут-то было. Найденные спеллы моб не кастует на игрока, НО! если впихнуть это госсип меню в какого-либо УЖЕ ГОТОВОГО СТАНДАРТНОГО ТРЕНЕРА, то у него все прекрасно работает, даже без кастования спеллов, т.к. под эту хрень есть спец. флаг для госсип меню. Какого черта?

Если взять этого тренера и изменить ему ид, данные ф-ции перестают работать. Никаких привязок типа AI или Scriptname, или даже того же госсипа я не нашел у них.
Сообщение # 26 написано 04.02.2015 в 13:06
p620
Маршал
Цитата No_MaTTeR ()
В общем, последнее мое редактирование было связано с тупым копированием спелла: в Booty Bay есть гном, который продает итем на призвание птичек. Взял оттуда спелл, теперь мой спутник призывается из вкладки "Питомцы". Опять попробовал подергать кондишины.

Я имею в виду, через .дбц с патчем в клиент или через базу в таблице spell_dbc?
Цитата No_MaTTeR ()
Кстати, я раньше думал, что решил проблему с разучиванием талантов и двойной специализацией, но не тут-то было. Найденные спеллы моб не кастует на игрока, НО! если впихнуть это госсип меню в какого-либо УЖЕ ГОТОВОГО СТАНДАРТНОГО ТРЕНЕРА, то у него все прекрасно работает, даже без кастования спеллов, т.к. под эту хрень есть спец. флаг для госсип меню. Какого черта?

Я сейчас уже, увы, не вспомню, заново надо копать, но там есть какая-то заморочка в базе, сам недоумевал.
Сообщение # 27 написано 04.02.2015 в 15:08
No_MaTTeR
Старший Маршал
Цитата p620 ()
Я имею в виду, через .дбц с патчем в клиент или через базу в таблице spell_dbc?

дбц конечно же.

Цитата p620 ()
Я сейчас уже, увы, не вспомню, заново надо копать, но там есть какая-то заморочка в базе, сам недоумевал.

очень жаль... Может быть идет еще какой-то спелл вместе с этим??
Сообщение # 28 написано 04.02.2015 в 15:51
p620
Маршал
Цитата No_MaTTeR ()
Может быть идет еще какой-то спелл вместе с этим??

Насколько я помню, там была завязка на конкретный госсип. Завтра посмотрю, сегодня уже не в состоянии.
Цитата No_MaTTeR ()
дбц конечно же.

Это тоже посмотрю, может даже сделаю.
Сообщение # 29 написано 04.02.2015 в 23:20
No_MaTTeR
Старший Маршал
Здравствуй. Решил напомнится, не смотрельничего?
Сообщение # 30 написано 09.02.2015 в 22:17
  • Страница 1 из 1
  • 1
Поиск: