15.03.2010, 18:18 | #1 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
GetPlayerAtMinimumRange
Кто знает как работает эта функция? я вот пробовал зделать так
Код:
if(Player* pPlayer = GetPlayerAtMinimumRange(15.0f)) DoScriptText(-1580085,m_creature); Объясните плиз, пример с if взял из скрипта с иллиданом. При комплитации не каких ошибок нету Последний раз редактировалось MuTaToR; 15.03.2010 в 18:44. |
15.03.2010, 18:20 | #2 |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Взять игрока котороый стоит МИНИМУМ в XXX ярдах.
|
15.03.2010, 18:43 | #3 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
Да но она не сработала в выше приведённом коде. мб надо было
Код:
if(Player* pPlayer = m_Creature->GetPlayerAtMinimumRange(15.0f)) |
15.03.2010, 19:41 | #4 |
Ученый
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
|
Отойди от моба на 20 ярдов и все заработает.
|
15.03.2010, 21:01 | #5 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Такое обычно делается в void ScriptedAI::MoveInLineOfSight(Unit* pWho).
Последний раз редактировалось PSZ; 15.03.2010 в 21:25. |
15.03.2010, 21:51 | #6 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
|
19.03.2010, 20:46 | #7 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
не сработало
|
19.03.2010, 21:03 | #8 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Круто...
Как там говорят? "телепаты в отпуске" или что-то типа того? Скрипт свой давай. |
20.03.2010, 11:33 | #9 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
Код:
struct MANGOS_DLL_SPEC npc_gazitAI : public ScriptedAI { ... ... void Talk() { if (Player* pPlayer = GetPlayerAtMinimumRange(1.0f)) DoScriptText(-1580083,m_creature); else DoScriptText(-1580085,m_creature); } ... ... Основываясь на скрипт с иллиданом написал... он почемуто говорит 1580085 текст а не 1580083 |
20.03.2010, 18:38 | #10 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Эх...
Боишься, что я украду и продам твой скрипт? Напиши хоть сценарий, что, как и когда должно происходить. |
21.03.2010, 14:28 | #11 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
да красть то нечего, тупо моб говорит текст потом квест засчитывается и моб уходит и изчезает. проблема лишь в том как найти игрока рядом стоящего. моб сумониться через event_scripts.
Код:
struct MANGOS_DLL_DECL npc_gizlAI : public ScriptedAI { npc_gizlAI(Creature* pCreature) : ScriptedAI(pCreature) {Reset();} uint32 TalkTimer; uint32 TalkPoint; uint32 QuestTime; void Reset() { TalkTimer = 5000; TalkPoint = 0; QuestTime = 20000; } void questcomplet() { if (Player* pPlayer = GetPlayerAtMinimumRange(0.5f)) { DoScriptText(-1580085,m_creature); // if(pPlayer->GetQuestStatus(9531) == QUEST_STATUS_INCOMPLETE) pPlayer->SendQuestComplete(9531); } } void UpdateAI(const uint32 uiDiff) { m_creature->GetMap()->CreatureRelocation(m_creature, -5087, -11253, 0.5, m_creature->GetOrientation()); m_creature->SendMonsterMove(-5087,-11253, 0.5, 0, MONSTER_MOVE_NONE, 1500); if (TalkTimer < uiDiff) { switch(TalkPoint) { case 0: DoScriptText(-1580081,m_creature); TalkTimer = 3000; TalkPoint = 1; return; break; case 1: DoScriptText(-1580083,m_creature); TalkTimer = 6000; TalkPoint = 2; return; break; case 2: DoScriptText(-1580081,m_creature); TalkTimer = 6000; TalkPoint = 3; return; break; } } else TalkTimer -= uiDiff; if(QuestTime < uiDiff) questcomplet(); else QuestTime -= uiDiff; } }; |
21.03.2010, 15:34 | #12 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
А если моб появился, начал говорить, а игрок отбежал, скажем, на 100 ярдов - квест должен засчитываться? Или моб должен начать говорить, как только плеер подойдет на определенное расстояние?
И зачем эти строки? Код:
m_creature->GetMap()->CreatureRelocation(m_creature, -5087, -11253, 0.5, m_creature->GetOrientation()); m_creature->SendMonsterMove(-5087,-11253, 0.5, 0, MONSTER_MOVE_NONE, 1500); |
21.03.2010, 16:25 | #13 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
игрок не может двигаться он использует итемку, становится обездвижен, появляется моб проходит пару ярдов и начинает говорить. потом когда он исчезает игрок снова может двигаться.
|
22.03.2010, 22:53 | #14 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Да, функция GetPlayerAtMinimumRange() не работает...
Пока не понял, почему... Конкретно по тому квесту - можно его пока зачесть из event_scripts. А разговор сделать скриптом. |
22.03.2010, 23:31 | #15 |
Администратор
|
Еще можно посмотреть, есть ли у моба фаза или аура.
На АИ не получилось заставить такого моба что-либо делать. Может, тут подобная ситуация. |
23.03.2010, 00:35 | #16 |
MaNGOS Dev
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
|
случайно не в гм моде тестили?
Код:
if (!pPlayer->isGameMaster() && pPlayer->isAlive() && !pUnit->IsWithinDist(pPlayer,fRange,false)) return true; Последний раз редактировалось SilverIce; 23.03.2010 в 00:45. |
23.03.2010, 08:18 | #17 | ||
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Цитата:
Цитата:
Код:
const float fMaxSearchDst = map->GetVisibilityDistance() > MAX_PLAYER_STEALTH_DETECT_RANGE ? MAX_PLAYER_STEALTH_DETECT_RANGE : map->GetVisibilityDistance(); Проверял и в инстансе, и outdoor - не работает. Проверял, ничего не меняя, скрипт, в котором эта функция один единственный раз используется разработчиками скриптдева (фактически, она для него и писалась) - Иллидан - там оно тоже не работает. Последний раз редактировалось PSZ; 23.03.2010 в 08:21. |
||
23.03.2010, 08:49 | #18 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Мутатор, как не работает, если я вот на днях пробовал ее у меня работало,
Код:
void MoveInLineOfSight(Unit* who) { if(!who) return; if (who->GetTypeId() == TYPEID_PLAYER && m_creature->GetDistance2d(who) <= 50) { твои действия! То что тебе надо! } } Последний раз редактировалось tempura; 23.03.2010 в 19:03. |
23.03.2010, 09:44 | #19 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Здесь это не сработает. MoveInLineOfSight на то и Move, что реагирует только на _движение_. В данном конкретном случае персонаж стоит и _не двигается_.
|
23.03.2010, 15:37 | #20 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
В пятницу попробую засчитать квест в event_script, по совету PSZ.
|
24.03.2010, 03:53 | #21 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
24.03.2010, 12:29 | #22 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
|
25.03.2010, 04:21 | #23 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
25.03.2010, 08:10 | #24 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
|
25.03.2010, 08:15 | #25 |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
|
26.03.2010, 15:03 | #26 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
Код:
INSERT INTO `event_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`) VALUES ('10675','15','7','9531','200','','0','0','0','0') |
26.03.2010, 15:27 | #27 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Там не 7(если ставите, то уж и спешиалфлаг квесту добавляйте), а 8 надо - квест кредитом(17243) считается...
Последний раз редактировалось NeatElves; 26.03.2010 в 15:29. |
26.03.2010, 15:58 | #28 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
кстати насчёт функции, sr_creature.cpp строка 557 TypeContainerVisitor структура не где не объявлена
и если 8 то что в даталог писать? |
26.03.2010, 16:20 | #29 | |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Из вики:
Цитата:
|
|
26.03.2010, 19:00 | #30 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
я это видел я не понял про quest_template.ReqCreatureOrGOId типо 9531.1 если да то там точка не ставится, если нет то как?
|
26.03.2010, 19:40 | #31 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Типо в 9531, ReqCreatureOrGOId1=17243, значит datalong=17243...
Последний раз редактировалось NeatElves; 26.03.2010 в 19:44. |
26.03.2010, 19:50 | #32 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
|
26.03.2010, 20:05 | #33 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Ну конечно, условие появилось только в 8774...))
|
26.03.2010, 20:15 | #34 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
с 7 неполучилась даже поставишь специалфлаг = 2.
|
26.03.2010, 21:08 | #35 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Еще и квесту надо ставить флаг QUEST_FLAGS_EXPLORATION, но проще патч перенести, чтобы не хачить..))
Последний раз редактировалось NeatElves; 26.03.2010 в 21:10. |
26.03.2010, 22:10 | #36 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
даже с QUEST_FLAGS_EXPLORATION нефига несрабатывает, буду пробывать перенести патч, после переноса сообщу.
|
27.03.2010, 18:03 | #37 |
Новичок
Регистрация: 08.03.2010
Сообщений: 26
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
|
чёт фигово получается перевести патч, если будет у кого какая идея засчитать квест, пишите в асю 494541133
|
28.03.2010, 10:16 | #38 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Написали же, команду 8 надо использовать, чтобы зачесть килл-кредит.
Код:
INSERT INTO event_scripts (id, delay, command, datalong, datalong2, dataint, x, y, z, o) VALUES (10675, 15, 8, 17243, 0, 0, 0, 0, 0, 0); |
28.03.2010, 10:31 | #39 |
Администратор
|
|
28.03.2010, 14:40 | #40 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Таки да, в mangos-0.12 нету скрипт-команды SCRIPT_COMMAND_KILL_CREDIT... Интересно, почему? Может просто забыли портировать...
Последний раз редактировалось PSZ; 28.03.2010 в 14:43. |