• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Подскажите логику работы телепорта пожалуйста.
kin_185
Капрал
Кликаю на НПС, идет обращение к таблице conditions как я понимаю.. А дальше? Там завязаны еще таблицы gossip_menu_option, smart_script. Расскажите плис, что после чего работает и как проверки идут...
Сообщение # 1 написано 31.10.2015 в 18:00
p620
Маршал
К таблице во время выполнения никакого обращения не идет, все ее значения загружаются ядром в оперативную память при старте.

К опциям в gossip_menu можно привязать условие (condition), при котором они будут/не будут видны игроку. Если они видны, при нажатии игрок может запустить сценарий для существа на SmartAI (есть условие, отлавливающее активацию опций), который выполняет определенный набор действий, для некоторых из которых, в свою очередь тоже может быть условие выполнения (не для всех, само собой).
Сообщение # 2 написано 31.10.2015 в 19:07
kin_185
Капрал
Как можно сделать так, чтоб портировало группу целиком?
Сообщение # 3 написано 08.11.2015 в 15:05
p620
Маршал
ID цели 16. Охватывает всю группу вызвавшего событие.
Сообщение # 4 написано 08.11.2015 в 18:25
kin_185
Капрал
А как можно сделать так, чтоб рандомно портировал в разные точки одной и той же территории?
Сообщение # 5 отредактировано kin_185 - Воскресенье, 08.11.2015, 23:29
p620
Маршал
Цитата kin_185 ()
А как можно сделать так, чтоб рандомно портировал в разные точки одной и той же территории?

Вы можете регулировать фазу события, для этого существует соответствующий SMART_ACTION. Только сценарии из определенной фазы могут выполняться в один момент времени. Для случайного выбора фазы из диапазона используйте действие 31. Затем создайте по одному событию на каждую телепортацию и установите тип события на зависимое от предыдущего определения фазы. Учтите, что для каждого события телепортации потребуется выделить свою фазу, иначе будет существовать возможность переноса сразу в несколько точек (само собой не одновременно, но ничего хорошего из этого не выйдет). В результате выполнится только одна (случайная) телепортация.
Сообщение # 6 отредактировано p620 - Понедельник, 09.11.2015, 01:38
kin_185
Капрал
Можете более подробно описать? Я не очень понял что и куда...
SMART_ACTION в таблице smart_scripts, поле event_phase_mask как я понял. Там прописываю 31? То есть это фазы с 1 по 5-ю? Или я не так понял? А что значат эти фазы? Не смог найти информацию... И где создавать отдельнве события...

Добавлено (15.11.2015, 17:59)
---------------------------------------------
Создаю новую запись в таблице смарт скрипт и прописываю в поле action_type параметрт 31 и в поля Param1 и Param2 прописываю 1 и 9 сообветственно.
Потом создаю еще допустим 9 записей с данными в поле event_phase_mask от 1 и до 9. Но как их привязать друг к другу? Я вот этого не понимаю, или что-то делаю не так...

Сообщение # 7 написано 15.11.2015 в 17:59
p620
Маршал
Эти 9 записей, которые Вы создали со своими значениями событий, следует сделать зависимыми от события выбора фазы. Именно в этом и "фокус".
Сообщение # 8 отредактировано p620 - Воскресенье, 15.11.2015, 18:58
kin_185
Капрал
Наконец руки добрались....
Для последующих строк после той, где поставил значение 31 в поле action_type, сделал привязку через event_phase_mask (меняя его от 1 до 9), а event_type поставил опять 62. И вот что интересно получилось. Работает только фазы 7 и 9. Если попадает на другую фазу, то просто не портирует... Что может быть не так? ID и event_phase_mask меняю для каждого, event_param2 оставляю одинаковым для всех, чтоб работало именно с этой строчкой.
И второй вопрос. В Смарт Скрипте, при значении подле action_type=62, следующая графа - это Map_ID, а при значении 31, эта графа уже = Min Phase Mask. Понимаю, что это событие не должно иметь координат, так как они должны быть в след 9-и записях, но что тогда писать в поля target_x, target_у и т.д.? Писать ноль, или это не важно?

Добавлено (21.11.2015, 00:59)
---------------------------------------------
Происходит что-то странное... При портировании на территорию, в которой разбросал 9 точек, он выбрасывает вот такие ошибки в окно сервера при портировании:

Код
Received unexpected opcode [MSG_MOVE_WORLDPORT_ACK 0xDC (220)] Status: STATUS_TRANSFER Reason: the player is still in world from [Player: Gnom (GUID Full: 0x0000000000000001 Type: Player Low: 1, Account: 2)]
Received unexpected opcode [MSG_MOVE_WORLDPORT_ACK 0xDC (220)] Status: STATUS_TRANSFER Reason: the player is still in world from [Player: Gnom (GUID Full: 0x0000000000000001 Type: Player Low: 1, Account: 2)]
Received unexpected opcode [MSG_MOVE_WORLDPORT_ACK 0xDC (220)] Status: STATUS_TRANSFER Reason: the player is still in world from [Player: Gnom (GUID Full: 0x0000000000000001 Type: Player Low: 1, Account: 2)]

Причем это может быть всего одна строчка, а может бросить сразу 3-4, как я выше указал. А портирует только в зоны, которые в фазах 7 и 9. Если попадает на другую фазу, то просто не портирует. Что это может быть?

Вот код из СКЛ

Код
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(190001, 0, 6, 0, 62, 0, 100, 0, 50000, 6, 0, 0, 31, 1, 9, 0, 0, 0, 0, 7, 0, 0, 0, 1481.3, -4418.25, 25.46, 0.1123, 'Fight Zone'),
(190001, 0, 7, 0, 62, 1, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12780.5, -7130.29, 9.44, 0.58, 'Fight Zone 1'),
(190001, 0, 8, 0, 62, 2, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12764.1, -7105.2, 6.75, 0.58, 'Fight Zone 2'),
(190001, 0, 9, 0, 62, 3, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12760, -7080.8, 7.1, 6.17, 'Fight Zone 3'),
(190001, 0, 10, 0, 62, 4, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12750.2, -7058.8, 7.72, 5.93, 'Fight Zone 4'),
(190001, 0, 11, 0, 62, 5, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12775, -7055, 6.09, 5.57, 'Fight Zone 5'),
(190001, 0, 12, 0, 62, 6, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12804, -7046, 3.15, 4.76, 'Fight Zone 6');
(190001, 0, 13, 0, 62, 7, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12793, -7058, 3.84, 2.13, 'Fight Zone 7'),
(190001, 0, 14, 0, 62, 8, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12799, -7076, 6.79, 2.6, 'Fight Zone 8'),
(190001, 0, 15, 0, 62, 9, 100, 0, 50000, 6, 0, 0, 62, 530, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12812, -7101, 5.036, 3.57, 'Fight Zone 9');

И вот моя модель телепорта:

Код
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `dmgschool`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `DamageModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(190001, 0, 0, 0, 0, 0, 28460, 0, 0, 0, 'Teleporter', 'Sub_tele', 'Directions', 50000, 71, 71, 0, 35, 3, 1, 1.14286, 1, 1, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 13, 138936390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'SmartAI', 0, 3, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 2, '', 0);


Добавлено (21.11.2015, 12:35)
---------------------------------------------
Поменял 31 на 30 и добавил фазы, которые хочу чтоб работали:
Код
(190001, 0, 6, 0, 62, 0, 100, 0, 50000, 6, 0, 0, 30, 1, 9, 2, 3, 4, 5, 7, 0, 0, 0, 1481.3, -4418.25, 25.46, 0.1123, 'Fight Zone'),

То есть точку в фазе 7 не использую. НО, все равно, или не портирует, или продолжает портировать в точки, указанные в фазах 7 и 9 (правда ошибки уже не сыпятся)...
Правда я не стал убирать эти точки физически из базы, так как они все равно не должны работать, так как не попадает в фазу же...
Тут я уже ничего не понимаю...

Добавлено (25.11.2015, 13:25)
---------------------------------------------

p620,
Не могли бы помочь, а то уже все перепробовал, не работает sad ....
Сообщение # 9 отредактировано kin_185 - Среда, 25.11.2015, 13:26
p620
Маршал
Ну в запросах у Вас месиво =)
При нажатии на первый пункт меню происходит выбор случайной фазы, причем целью являются какие-то координаты, а не me.
Затем, колонка `event_phase_MASK` не просто так свое название получила, она является битмаской, туда не ID фаз нужно писать.
Можете воспользоваться
Код
phase_flag = 2 ^ (x - 1)
где X -  ID целевой фазы.
Например, если хотите, чтобы сценарий проигрывался в первой - пишите 2 ^ (1 - 1) = 1, во второй - 2 ^ (2 - 1) = 2, в третьей - 2 ^ (3 - 1) = 4, в четвертой - 2 ^ (4 - 1) = 8 и т.д... наконец в 9 будет 2 ^ (9 - 1) = 256.
Стандартной маской является 0 (означает, что сценарий проигрывается во всех фазах).
Если хотите, чтобы сценарий проигрывался в нескольких разных фазах, Вам нужно воспользоваться побитовым OR: mask_1 | mask_2 | mask_3... | mask_N. Эта операция поддерживается в стандартном Windows калькуляторе, переведенном в режим программиста, если не желаете считать вручную. Например, если хотите, чтобы сценарий проигрывался только во второй или четвертой фазах, Вам нужно будет записать [(2 ^ ( 2 - 1)) | (2 ^ (4 - 1))] число 10.
Сообщение # 10 отредактировано p620 - Среда, 25.11.2015, 15:06
  • Страница 1 из 1
  • 1
Поиск: