Ru-MaNGOS

Ru-MaNGOS (http://ru-mangos.ru/index.php)
-   Принятые (http://ru-mangos.ru/forumdisplay.php?f=57)
-   -   [QUEST=11865]Им рано умирать (http://ru-mangos.ru/showthread.php?t=2042)

virusav 05.08.2010 23:53

[QUEST=11865]Им рано умирать
 
Вложений: 1
По сниффам в данном квесте используем итем, который активирует го, после чего спавнится го (шкура), спавнится нпц, который говорит рандомно 1 из 4 фраз, идет к го (ловушка), использует ее и умирает от ее спелла, игрок получает +1.

Патч во вложении.

Запросы:
1. Для базы игрового мира:
Код:

DELETE FROM `spell_script_target` WHERE `entry`=46085;
INSERT INTO `spell_script_target` SET `entry`=46085, `type`=0, `targetentry`=187983;
DELETE FROM `gameobject` WHERE `id`=187983;
INSERT INTO
`gameobject` (`id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`)
SELECT
187983, `gameobject`.`map`, `gameobject`.`spawnMask`, `gameobject`.`phaseMask`, `gameobject`.`position_x`, `gameobject`.`position_y`, `gameobject`.`position_z`, `gameobject`.`orientation`, `gameobject`.`rotation0`, `gameobject`.`rotation1`, `gameobject`.`rotation2`, `gameobject`.`rotation3`, -`gameobject`.`spawntimesecs`, `gameobject`.`animprogress`, `gameobject`.`state`
FROM
`gameobject`, `gameobject_template`
WHERE
`gameobject`.`id`=`gameobject_template`.`entry`
AND `gameobject_template`.`name`='Caribou Trap';
UPDATE `gameobject_template` SET `scriptname`='go_high_quality_fur' WHERE `entry`=187983;
UPDATE `gameobject_template` SET `flags`=4 WHERE `name`='Caribou Trap';
DELETE FROM `creature` WHERE `id`=25835;
UPDATE `creature_template` SET `unit_flags`=33024, `scriptname`='npc_nesingwary_trapper' WHERE `entry`=25835;

2. Для базы СД2:
Код:

DELETE FROM `script_texts` WHERE `entry` IN (-1000006,-1000007,-1000008, -1000009);
INSERT INTO `script_texts` (`entry`, `content_default`, `type`, `emote`, `comment`) VALUES
(-1000006,'It\'s a miracle! The beast skinned itself!', 0, 5, 'for quest 11865'),
(-1000007,'Jackpot!', 0, 5, 'for quest 11865'),
(-1000008,'This is the last one i need for that set of Nesingwary steak knives!', 0, 5, 'for quest 11865'),
(-1000009,'Silly beasts!', 0, 5, 'for quest 11865');

3. Локализация ruRU:
Код:

UPDATE `script_texts` SET `content_loc8`='Это чудо! Зверь сбросил кожу!' WHERE `entry`=-1000006;
UPDATE `script_texts` SET `content_loc8`='Джекпот!' WHERE `entry`=-1000007;
UPDATE `script_texts` SET `content_loc8`='Это последний нож, необходимый мне для полной коллекции ножей для стейков Эрнестуэя!' WHERE `entry`=-1000008;
UPDATE `script_texts` SET `content_loc8`='Глупое зверье!' WHERE `entry`=-1000009;


timmit 06.08.2010 07:34

Не правильно
Цитата:

UPDATE `gameobject_template` SET `faction`=114 WHERE `name`='Caribou Trap';
UPDATE `creature_template` SET `unit_flags`=384, `type_flags`=2,
Вот правильное
Код:

UPDATE `gameobject_template` SET `flags` = 4 WHERE `name`='Caribou Trap';
UPDATE `creature_template` SET `unit_flags` = 33024 WHERE `entry` = 25835;


virusav 06.08.2010 08:33

Если не ошибаюсь, то фракция 114 для го используется для скриптов, чтобы нельзя было просто так использовать го.
Насчет флага нпц - в базе было 0, по вики `type_flags`=2 делает нпц неатакуемым, что и требуется.

timmit 06.08.2010 11:54

я дал данные по снифу, а дальше решайте сами)

virusav 06.08.2010 14:54

Вчера, значит, зажал данные по сниффу, когда я спрашивал.:)

Постараюсь вечером проверить с твоими запросами.
Хотелось бы услышать комментарии по самому скрипту, правильно ли написан, можно ли оптимизировать. чтобы поправить и выложить на форум СД2.

virusav 06.08.2010 20:18

Поправил запросы под данные со сниффов.

virusav 06.08.2010 22:24

Поправил скрипт: теперь остается только один момент: го спавнится но не отображается до момента, когда игрок сделает какое-либо движение.
Если стоять неподвижно, то го не будет видно.

Это лечится в скрипте или вопрос к ядру?

PSZ 06.08.2010 23:15

Go->UpdateObjectVisibility();

PSZ 07.08.2010 11:18

Еще замечание. Не храните указатели, храните гуиды. С хранимыми указателями в свн не примут, да и краши это иногда вызывает...

rsa 07.08.2010 13:32

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

zergtmn 07.08.2010 14:12

Цитата:

Сообщение от rsa (Сообщение 12195)
Еще неизвестно что лучше - все время дергать указатель по гуиду (постоянно рискуя нарваться на краш при этом) или хранить указатель и просто проверять его перед использованием, а при брейке просто скипать операции с ним. По мне так второй вариант куда быстрее и эффективнее.

Трудно определить, когда указатель станет не валидным. При работе с гуидами таких проблем нет.

rsa 07.08.2010 14:25

Абсолютно те же проблемы. Есть у меня в коллекции один краш в котором указатель стал невалидным в момент его возвращения по гуиду. А краши в instance->GetCreature я даже считать перестал, они там просто на ровном месте происходят...

zergtmn 07.08.2010 14:58

Цитата:

Сообщение от rsa (Сообщение 12197)
Абсолютно те же проблемы. Есть у меня в коллекции один краш в котором указатель стал невалидным в момент его возвращения по гуиду.

Как такое возможно при работе в один поток?
Unit::GetUnit, ObjectAccessor::FindPlayer к тому же делают проверку на IsInWorld().

virusav 10.08.2010 23:58

Переписал патч по пожеланиям на форуме СД2, вложение в первом посте обновлено.

virusav 25.08.2010 20:24

Очередной раз переписал патч под требования на форуме СД2 + убрал лишние задержки между действиями, которые теперь выполняются одинаково независимо от точки спавна нпц.

Вложение в первом посте обновлено.


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

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