Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Скрипты (http://mangos.ytdb.ru/forumdisplay.php?f=19)
-   -   GetPlayerAtMinimumRange (http://mangos.ytdb.ru/showthread.php?t=311)

MuTaToR 15.03.2010 18:18

GetPlayerAtMinimumRange
 
Кто знает как работает эта функция? я вот пробовал зделать так
Код:

if(Player* pPlayer = GetPlayerAtMinimumRange(15.0f))
DoScriptText(-1580085,m_creature);

и даже если стоя около самого моба он не говорит текст.
Объясните плиз, пример с if взял из скрипта с иллиданом.
При комплитации не каких ошибок нету

SeT 15.03.2010 18:20

Взять игрока котороый стоит МИНИМУМ в XXX ярдах.

MuTaToR 15.03.2010 18:43

Да но она не сработала в выше приведённом коде. мб надо было
Код:

if(Player* pPlayer = m_Creature->GetPlayerAtMinimumRange(15.0f))

SeT 15.03.2010 19:41

Отойди от моба на 20 ярдов и все заработает.

PSZ 15.03.2010 21:01

Такое обычно делается в void ScriptedAI::MoveInLineOfSight(Unit* pWho).

MuTaToR 15.03.2010 21:51

Цитата:

Сообщение от SeT (Сообщение 2162)
Отойди от моба на 20 ярдов и все заработает.

имхо это глупо.
Цитата:

Такое обычно делается в void ScriptedAI::MoveInLineOfSight(Unit* pWho).
Спасибо, попробую в пятницу когда домой приеду.

MuTaToR 19.03.2010 20:46

не сработало

PSZ 19.03.2010 21:03

Круто...
Как там говорят? "телепаты в отпуске" или что-то типа того?
Скрипт свой давай.

MuTaToR 20.03.2010 11:33

Код:

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);
    }
...
...

А потом вызывается эта функция в UpdateAI
Основываясь на скрипт с иллиданом написал... он почемуто говорит 1580085 текст а не 1580083

PSZ 20.03.2010 18:38

Эх...
Боишься, что я украду и продам твой скрипт? Напиши хоть сценарий, что, как и когда должно происходить.

MuTaToR 21.03.2010 14:28

да красть то нечего, тупо моб говорит текст потом квест засчитывается и моб уходит и изчезает. проблема лишь в том как найти игрока рядом стоящего. моб сумониться через 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;
       
    }
};

вот такой набросок.

PSZ 21.03.2010 15:34

А если моб появился, начал говорить, а игрок отбежал, скажем, на 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);

Моб, как только появится, должен направиться в какое-то определенное место?

MuTaToR 21.03.2010 16:25

игрок не может двигаться он использует итемку, становится обездвижен, появляется моб проходит пару ярдов и начинает говорить. потом когда он исчезает игрок снова может двигаться.

PSZ 22.03.2010 22:53

Да, функция GetPlayerAtMinimumRange() не работает...
Пока не понял, почему...

Конкретно по тому квесту - можно его пока зачесть из event_scripts. А разговор сделать скриптом.

virusav 22.03.2010 23:31

Еще можно посмотреть, есть ли у моба фаза или аура.
На АИ не получилось заставить такого моба что-либо делать.
Может, тут подобная ситуация.

SilverIce 23.03.2010 00:35

случайно не в гм моде тестили?
Код:

            if (!pPlayer->isGameMaster() && pPlayer->isAlive() && !pUnit->IsWithinDist(pPlayer,fRange,false))
                return true;

и ее еще зачем-то ограничили 40 ярдами

PSZ 23.03.2010 08:18

Цитата:

Сообщение от virusav (Сообщение 2916)
Еще можно посмотреть, есть ли у моба фаза или аура.
На АИ не получилось заставить такого моба что-либо делать.
Может, тут подобная ситуация.

Нет никаких фаз и аур 100%.

Цитата:

Сообщение от SilverIce (Сообщение 2918)
случайно не в гм моде тестили?
Код:

            if (!pPlayer->isGameMaster() && pPlayer->isAlive() && !pUnit->IsWithinDist(pPlayer,fRange,false))
                return true;

и ее еще зачем-то ограничили 40 ярдами

Я даже из кода проверку на гейммастера убирал. Находился точно менее, чем в 40 ярдах. И это убирал
Код:

const float fMaxSearchDst = map->GetVisibilityDistance() > MAX_PLAYER_STEALTH_DETECT_RANGE ? MAX_PLAYER_STEALTH_DETECT_RANGE : map->GetVisibilityDistance();
ставил просто float fMaxSearchDst = 100.0f
Проверял и в инстансе, и outdoor - не работает.

Проверял, ничего не меняя, скрипт, в котором эта функция один единственный раз используется разработчиками скриптдева (фактически, она для него и писалась) - Иллидан - там оно тоже не работает.

MaxXx2021 23.03.2010 08:49

Цитата:

Сообщение от PSZ (Сообщение 2183)
Такое обычно делается в void ScriptedAI::MoveInLineOfSight(Unit* pWho).

Мутатор, как не работает, если я вот на днях пробовал ее у меня работало,


Код:

void MoveInLineOfSight(Unit* who)
{
if(!who) return;
if (who->GetTypeId() == TYPEID_PLAYER && m_creature->GetDistance2d(who) <= 50)     
    {
      твои действия! То что тебе надо!
    }
}


PSZ 23.03.2010 09:44

Здесь это не сработает. MoveInLineOfSight на то и Move, что реагирует только на _движение_. В данном конкретном случае персонаж стоит и _не двигается_.

MuTaToR 23.03.2010 15:37

В пятницу попробую засчитать квест в event_script, по совету PSZ.

MaxXx2021 24.03.2010 03:53

Цитата:

Сообщение от PSZ (Сообщение 2943)
Здесь это не сработает. MoveInLineOfSight на то и Move, что реагирует только на _движение_. В данном конкретном случае персонаж стоит и _не двигается_.

bool QuestComplete

bool QuestStart

если квест!

PSZ 24.03.2010 12:29

Цитата:

Сообщение от MaxXx2021 (Сообщение 2994)
bool QuestComplete

bool QuestStart

если квест!

Это, вообще, к чему?

MaxXx2021 25.03.2010 04:21

Цитата:

Сообщение от PSZ (Сообщение 3022)
Это, вообще, к чему?

Событие нажатия Принять квест или Событие завершение квеста.

PSZ 25.03.2010 08:10

Цитата:

Сообщение от MaxXx2021 (Сообщение 3085)
Событие нажатия Принять квест или Событие завершение квеста.

Так к чему это _здесь_? Описание квеста 9531 почитай.

MaxXx2021 25.03.2010 08:15

Цитата:

Сообщение от PSZ (Сообщение 3090)
Так к чему это _здесь_? Описание квеста 9531 почитай.

Тогда что? просто щас нету возможности открыть wowhead.com!

MuTaToR 26.03.2010 15:03

Код:

INSERT INTO `event_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`) VALUES ('10675','15','7','9531','200','','0','0','0','0')
непомогло

NeatElves 26.03.2010 15:27

Там не 7(если ставите, то уж и спешиалфлаг квесту добавляйте), а 8 надо - квест кредитом(17243) считается...

MuTaToR 26.03.2010 15:58

кстати насчёт функции, sr_creature.cpp строка 557 TypeContainerVisitor структура не где не объявлена
и если 8 то что в даталог писать?

NeatElves 26.03.2010 16:20

Из вики:
Цитата:

SCRIPT_COMMAND_KILL_CREDIT = 8
datalong: Kill credit entry for quest (entry in quest_template.ReqCreatureOrGOId)
datalong2: 0=personal credit, 1=group credit

MuTaToR 26.03.2010 19:00

я это видел я не понял про quest_template.ReqCreatureOrGOId типо 9531.1 если да то там точка не ставится, если нет то как?

NeatElves 26.03.2010 19:40

Типо в 9531, ReqCreatureOrGOId1=17243, значит datalong=17243...

MuTaToR 26.03.2010 19:50

Цитата:

Сообщение от NeatElves (Сообщение 3215)
Типо в 9531, ReqCreatureOrGOId1=17243, значит datalong=17243...

Unknown script command 8 called. выводит ошибку в логе...
я пробую на 2.4.3 сори что сразу не сказал.

NeatElves 26.03.2010 20:05

Ну конечно, условие появилось только в 8774...))

MuTaToR 26.03.2010 20:15

с 7 неполучилась даже поставишь специалфлаг = 2.

NeatElves 26.03.2010 21:08

Еще и квесту надо ставить флаг QUEST_FLAGS_EXPLORATION, но проще патч перенести, чтобы не хачить..))

MuTaToR 26.03.2010 22:10

даже с QUEST_FLAGS_EXPLORATION нефига несрабатывает, буду пробывать перенести патч, после переноса сообщу.

MuTaToR 27.03.2010 18:03

чёт фигово получается перевести патч, если будет у кого какая идея засчитать квест, пишите в асю 494541133

PSZ 28.03.2010 10:16

Написали же, команду 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);

Зачтет через 15 секунд после нажатия на итем.

virusav 28.03.2010 10:31

Было уточнение:
Цитата:

Сообщение от MuTaToR (Сообщение 3216)
Unknown script command 8 called. выводит ошибку в логе...
я пробую на 2.4.3 сори что сразу не сказал.


PSZ 28.03.2010 14:40

Таки да, в mangos-0.12 нету скрипт-команды SCRIPT_COMMAND_KILL_CREDIT... Интересно, почему? Может просто забыли портировать...


Текущее время: 09:02. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS