Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Запросы (http://mangos.ytdb.ru/forumdisplay.php?f=7)
-   -   Распределение игроков по фазам (http://mangos.ytdb.ru/showthread.php?t=3885)

Easy 13.03.2011 17:00

Распределение игроков по фазам
 
Здравствуйте!
Хотелось бы реализовать возможность распределение игроков в определённом месте по фазам.
то есть что то типо, добавить поле игроку с ИД маски фазы. И когда он попадёт в определённое место, например поставить невидимых нпц, что бы он переносился в эту фазу. Но, перед тем как он уйдёт, фаза восстанавливалась.

Есть несколько мыслей:
1) В плеер апдейт запихнуть проверку, если игрок рядом с нпц, то
Код:

if (!player->isMyPhase())
{
    if (player возле моба)
    {
        player->setTempPhase(player->getPhase());
        player->setPhase(player->getMyPhase());
        plaeyr->setMyPhase(true);
    }
}else{
    if (player не возле моба)
    {
        player->setPhase(player->getTempPhase());
        player->setMyPhase(false);
    }
}

минусы в том, что у каждого игрока будет постоянно проверка if (!player->isMyPhase()), возможно увеличит нагрузку, но главный минус, что вдрур он телепортнётся куда то туда где фаза должна стать другой, не такой как была в самом начале, а после этого выполнится player->setPhase(player->getTempPhase()); что опять собьет фазу :)

2) Написать скрипт мобу, который при попадании в его радиус игрока поставить ему фазу нужную, но как вернуть начальну перед тем как игрок телепортнётся?

3) привязать как то к местности, как это например в борейской тундре на берегу терзающего бича, я не совсем понял как это реализовано, видимо спелл нужно какой-то использовать, тогда вопрос можно ли добавить свой спелл в ядро? если его нет в dbc

Может есть более простой способ?

Sid 13.03.2011 17:52

Так у NPC же есть фазы.

NeatElves 13.03.2011 18:13

Игроку - спеллареа
Нпц - маской в спавне
спеллы - в спелл_дбц патч

Easy 13.03.2011 18:20

мне игроку надо фазу поставить.

У игрока будет дополнительное поле my_phase
вот имеем например нпц с ентри 100000

нужно так чтобы когда игрок попадает в радиус, например 200 метров от нпц, чтобы игрок переходил в фазу значение которой находится в my_phase.

И это не так сложно, а вот когда игрок телепортнётся на сх или его присумонят или камнем возвращения или просто уйдёт, нужно вернуть фазу ту в которой игрок находился.

всё осложняется тем, что фаза игрока не всегда может быть = 1 перед тем как он попал к тому нпц, и не всегда она будет равна той после того как игрок уйдёт оттуда, которай она была до его появления там.

То есть имеем игрока, он в фазе 2.
Он попал к мобу с ентри 100000, тогда фазу игрока надо поменять на фазу 4.
Потом игрока сумонят в даларан, его фаза должна стать = 1

Добавлено через 4 минуты
Цитата:

Сообщение от NeatElves (Сообщение 19938)
Игроку - спеллареа
Нпц - маской в спавне
спеллы - в спелл_дбц патч

То есть нужно добавить запись в спелл.дбц только в файлик? Или патчить клиент? И можно ли не добавляя в файл, добавить просто в спелл_дбц таблицу?

Опять же, спеллареа как я понял, она к зоне привяжет, а хотелось бы чтобы не к целой зоне, а только к участку небольшому.

Вообщем то, всё сводится к тому, что мне нужно наложить какую угодно ауру при попадании игрока в зону и в радиусе от моба, и снять ауру когда игрок выйдет за пределы радиуса моба. А саму ауру я уже заскриптую)

PS а если я например сделаю две переменных
bool my_aura; //если моб сменил мне фазу
bool my_flag_aura; //если аура востановленна
и проверять в плеер::апдейт
Код:

if (isMyAura() && isMyFlagAura()){
    востановить ауру
    setMyFLagAura(false)
}

то есть будет каждый раз проверяться две переменных типа boolean
это сильно нагрузит систему?

Grinder 13.03.2011 21:45

Тупо юзай готовый спел меняющий фазу! Например как в зоне ДК, там где гвест на украсть коня :) Тебя кидает в другую фазу! Зачем патчить ДБЦ? ) Я так когда то химию в стартовой локе делал ))

Easy 13.03.2011 22:23

мне нужно много фаз, штук 10
Мне готовый спелл не подойдёт, пытаюсь добавить в таблицу спелл_дбц, но что то там много атрибутов, вроде бы основные выставил, а не работает) но кастить можно)
а аура не появляется, да и не найду куда вписать ID иконки ауры в таблице.

Сделал пока по типу как советовал NeatElves.
В спеареа повесил самодельный спелл, ауру, которая в зависимости от условий вызывает 1 из 10 других самодельных аур, все работает, но вот хотелось бы узнать, можно ли как то упростить, и свести всё к 2ум или к 1му спеллу.

Сейчас первый спелл имеет effect[0] = SPELL_EFFECT_APPLY_AURA и EffectApplyAuraName1 = SPELL_AURA_DUMMY
Остальные 10 effect[0] = SPELL_EFFECT_APPLY_AURA и EffectApplyAuraName1 = SPELL_AURA_PHASE (261) и разное значение EffectMiscValue1 2,4,8...
Есть ли способ не делаю 10 спеллов, обойтись например 1, динамически меняя EffectMiscValue1 в зависимости от какого либо поля игрока?
Ну или 2мя, первым, а второму динамически менять это EffectMiscValue1?

gmltA 16.03.2011 14:58

Если вы изменили ДБЦ только сервера, то игрок ауру и не увидит. Даже если вы сделаете .learn spell_id, у персонажа спелл появится на сервере, но он не сможет увидеть его в книге заклинаний.


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

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