YTDB

YTDB (http://ytdb.ru/index.php)
-   Патчи (http://ytdb.ru/forumdisplay.php?f=26)
-   -   MyavGuards не компилятся на SD2 1597 (http://ytdb.ru/showthread.php?t=3604)

tempura 24.02.2010 05:05

MyavGuards не компилятся на SD2 1597
 
Вложений: 1
mangos 9443, sd2 1597

Я тупой!!! надо что-то со мной делать...

Сам патч в аттаче, ошибки при компиле:
Код:

thrall.cpp
..\scripts\guards\thrall.cpp(191) : error C2664: 'bool Unit::HasAura(uint32,SpellEffectIndex) const' : cannot convert parameter 2 from 'int' to 'SpellEffectIndex'
        Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
..\scripts\guards\thrall.cpp(208) : error C2664: 'bool Unit::HasAura(uint32,SpellEffectIndex) const' : cannot convert parameter 2 from 'int' to 'SpellEffectIndex'
        Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)

и такие практически на каждого.

Как я понимаю - Unit::HasAura как-то поменялась, и надо что-то тут поменять?
Код:

    if(!m_creature->HasAura(41447,0))

timmit 24.02.2010 09:08

определение SpellEffectIndex поменяли вроде

tempura 24.02.2010 09:43

Это я кое-как сообразить еще пытаюсь. Там что-то под интегер было, а сейчас вот этот самый индекс. Только что на что менять - это я осознать не могу.

Konctantin 24.02.2010 09:53

Добавили перечисление:
Код:

enum SpellEffectIndex
{
    EFFECT_INDEX_0    = 0,
    EFFECT_INDEX_1    = 1,
    EFFECT_INDEX_2    = 2
};

Код:

if(!m_creature->HasAura(41447, EFFECT_INDEX_0))

tempura 24.02.2010 10:07

А! ВО!!! Вот теперь понял.

То есть теперь в "m_creature->HasAura(41447,0)" вместо последней цифры ставить "EFFECT_INDEX_" с последней цифрой! Это я смогу, это я уже умный!

Как сделаю - обновлю в локальном хранилище. Патчи ядра там уже под 9439 лежат.


Только у меня (кажется) следом еще вопросы пойдут - по остальным SD2 патчам... :) :) :) Я их еще не проверял - может и они с ошибками будут.

Konctantin 24.02.2010 10:17

Давайте их сюда, щас подгоним

tempura 24.02.2010 10:48

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


Файло в SD2 1597 рабочее.

теперь в работе проверить - и афигеть от крашей. :)

Chesterfield 24.02.2010 16:48

Цитата:

теперь в работе проверить - и афигеть от крашей.
У мява ровные скрипты были)) Гвардов я недавно ставил, все норм было)

NeatElves 24.02.2010 16:54

DoCast -> DoCastSpellIfCan (1568)

tempura 25.02.2010 01:10

Цитата:

Сообщение от Chesterfield (Сообщение 13171)
У мява ровные скрипты были)) Гвардов я недавно ставил, все норм было)

Ты бы выложил свое? А то в отсутствие автора очень тяжело доводить до ума - и просто иметь на руках два варианта - уже хорошо бы.

Цитата:

Сообщение от NeatElves (Сообщение 13172)
DoCast -> DoCastSpellIfCan (1568)

Эм... а это в какое место? В смысле - это куда-то нужно вставлять?

NeatElves 25.02.2010 01:34

Везде, во всех файлах заменить первое на второе...

tempura 25.02.2010 02:10

DoCast заменить на DoCastSpellIfCan - я правильно понимаю? А вот то, что в скобках - оно куда? у меня например на руках есть куски (вразброс по строкам):
Код:

DoCast (m_creature,HEALINGPOTION);
DoCast(m_creature,41447);
if (Change == 1)DoCast(m_creature, info);
else DoCast(enemy, info);

они должны стать
Код:

DoCastSpellIfCan (m_creature,HEALINGPOTION);
DoCastSpellIfCan(m_creature,41447);
if (Change == 1)DoCastSpellIfCan(m_creature, info);
else DoCastSpellIfCan(enemy, info);

как я понимаю, правильно? Если правильно - так я пакетной заменой прогоню.

Прошу прощения, если выгляжу слишком уж тупым. Я и правда совершенно ничего в этом не понимаю. :(

NeatElves 25.02.2010 02:12

Все верно, я лично так и заменил, до скобок..))

tempura 25.02.2010 02:18

Еще момент, вызывающий вопрос:

В файле (например) ancient_of_war.cpp есть закомментированный кусок:
Код:

/*    else
    {
    if(!m_creature->IsNonMeleeSpellCasted(false))
    {
        if ((*m_creature).GetMotionMaster()->top()->GetMovementGeneratorType()!=TARGETED_MOTION_TYPE)
        {
            (*m_creature).GetMotionMaster()->Clear(false);
            (*m_creature).GetMotionMaster()->MoveChase(m_creature->getVictim());
        }
    }
    }//end else */

как я понимаю - он в принципе что-то нужное делает, но был отключен потому что весь этот кусок перестал работать после каких-то изменений в ядре. Можно ли как-то восстановить его работоспособность?
Также закомментированные куски есть и в других файлах.



И еще вопрос сразу:
Как я помню, Myav закрыл свою работу до появления в BC двух новых столиц Алов и Орды. То есть работает только стража старых столиц. Что можно сделать для подключения новых столиц? Если это какая-то тупая рутинная шаблонная работа - я с ней наверное справлюсь - меня только в нужную сторону пнуть надо.

Просто очень хочется иметь эти скрипты в полностью рабочем виде.

Цитата:

Сообщение от NeatElves (Сообщение 13209)
Все верно, я лично так и заменил, до скобок..))

Найдено 47 вхождений в 10 файлах. Заменено. Сейчас выложу обновленные файлы.

NeatElves 25.02.2010 02:25

Можно не спешить, после 1601 уже можно GetHealth()*100 / m_creature->GetMaxHealth() < 30 менять на GetHealthPercent() < 30.0f..)) Ну и циферки процентов менять по аналогии...

Коментировал код сам автор, остались у меня его первые оригиналы, что он хотел реализовать - так и кануло в пучину...
(с) Сгинул Лом в этой кутерьме...

tempura 25.02.2010 02:38

Я как раз обновился - и как раз сейчас это смотрю. :(
И у меня, соответственно - очередной тупой вопрос:
Код:

    if(damage > m_creature->GetHealth())

      if (m_creature->GetHealth()<m_creature->GetMaxHealth()*0.3 && Potioncd<diff)

там вот так везде - практически идентично. Верхнюю строку трогать нигде не надо, а нижнюю везде привести к виду:
Код:

      if (m_creature->GetHealthPercent() < 30 && Potioncd<diff)
правильно?


И второй вопрос: в оригинальном guard_ai.cpp (кстати, при слиянии с 1601 мявский вызвал конфликты, сейчас разберусь какие) есть строки (например 58-59):
Код:

    if (SpellEntry const *spell = m_creature->reachWithSpellAttack(who))
        DoCastSpell(who, spell);

здесь просто DoCastSpell стоит. Его не надо ни на что лишнее заменять? Он же вроде оригинальный...

Я вообще как-то хреново понимаю - вот guard_ai.cpp как-то обновляется и обновляется, а Мявским патчем там что-то удаляется и заменяется - ононе развалит нах сервер вообще? Я совершенно не представляю что там куда суется - потому и спрашиваю. Я ж как обезьянка - научили патчи делать, применять и откатывать - только это и делаю. А коде - полный ноль.

tempura 25.02.2010 04:44

короче я сделал вроде все по приведенному, выложено в папке 1601 for test и патчем.

Скомпилилось нормально, но я все равно не уверен в ровности своих рук, и если кто-то проверит - это супер круто будет.

А я попробую обновиться.... :(

tempura 25.02.2010 10:30

Вот такого еще
Код:

..\scripts\custom\npc_ulduar_teleporter.cpp(54) : warning C4305: 'argument' : truncation from 'double' to 'float'
два десятка строк. Это на координаты телепортов валится. Вот на эти строки:
Код:

        player->TeleportTo(603, -706.122, -92.6024, 429.876, 0);

NeatElves 25.02.2010 11:27

f после каждой координаты поставь и все...

tempura 25.02.2010 12:19

мангос 9450, скрипты 1601
база свежая утренняя 536


это расставил, там где GetHealthPercent() < 30.0f - тоже все расставил. пробую в рабочем режиме.

диалоги у скриптованых НПС отвалились нах. как я понимаю - из-за перенесения диалогов в базу? или из-за цифирок в базе...
вот такие строки ничего не выдают.
Код:

                player->ADD_GOSSIP_ITEM( 5, "Нанять Ящера Черного копья (2 золотых)", GOSSIP_SENDER_MAIN, 8842);
на нпс при этом прописано:
Код:

INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_A`, `modelid_A2`, `modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`, `maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`) VALUES
(15, 0, 0, 0, 0, 0, 24502, 24502, 24503, 24503, 'Fryed Grimsbey', 'Hire mounts', NULL, 0, 59, 61, 6700, 24000, 5598, 5875, 3239, 35, 35, 1, 1.48, 1, 0, 77, 115, 0, 29, 1, 1500, 1500, 8, 0, 0, 0, 0, 0, 0, 0, 62, 92, 23, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 'paymounts');

то есть:
gossip_menu_id 0,
npcflag 1,
остальные флаги по нулям,
ScriptName прописан

Что, все меню в базу как-то переливать надобно?


В игре открывается пустое окно диалога с текстом Greeting, а должно меню выдавать со всякими пунктами.

Лог третьего уровня пишется в файл, там ничего полезного:
Код:

2010-02-25 12:35:36 STORAGE_SIZE: 5
        04 00 00 00 00
2010-02-25 12:35:38 WORLD: CMSG_WORLD_STATE_UI_TIMER_UPDATE
2010-02-25 12:35:39 WORLD: Received CMSG_GOSSIP_HELLO
2010-02-25 12:35:40 WORLD: CMSG_SET_ACTIVE_VOICE_CHANNEL
2010-02-25 12:35:40 STORAGE_SIZE: 5

и все.

xstream 01.03.2010 09:18

Вложений: 1
Ядро 9457, SD2 1605, База 536.
Применял Ваш, tempura, патч.
В итоге нпц со мной общаются и меню у них есть, всё работает, но всё, что написано кириллицей, отображается криво. Приложил скрин диалога с ГильдХаус Кипером, остальные нпц по аналогии.

Konctantin 01.03.2010 10:21

Файл скрипта должен быть в кодировке utf-8

Но это уже не актуально:
Надо делать через базу (таблицы *_gossip_*) вывод менюшек

tempura 01.03.2010 11:34

Кабы схемку, аль чертеж - мы б затеяли вертеж.
Ну а так - чаво искать-та? ЧортаЪ лысова найдешь.

:(

Примерчик бы - какую строку в cpp на что менять, чтобы какая строка в мускл начала выводиться?

kinks 07.03.2010 18:05

Вложений: 1
Соеденил патч Мява и СкриптДев2.
Проверьте пожалуйста на ошибки в коде...
MaNGOS r9535 ScriptDev2 r1634

Убираем ScriptDev2\scripts\guards\officers.cpp

Редактируем ScriptDev2\system\ScriptLoader.cpp


Из архива кидаем:
guard_ai.h и guard_ai.cpp в ScriptDev2\base\
guards.cpp в ScriptDev2\scripts\world\

Правим ScriptDev2\VC90\90ScriptDev2.vcproj или ScriptDev2\VC80\80ScriptDev2.vcproj


guards.sql заливаем в базу mangos (Кричеры те же что и в оригинальном патче но разбиты по городам)

PS: извиняюсь что не патчем, не освоился еще:(.....

NeatElves 07.03.2010 18:37

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

timmit 07.03.2010 18:41

Я вообще советую из патчей с гвардами вынести все госсипы, они через базу идут все равно

kinks 07.03.2010 19:02

Москва не сразу строилась....
А вообще Темпура чуть выше метко сказал....
Разберусь, сделаю через базу....

NeatElves 07.03.2010 19:06

Так уже сделано..)) Просто если у гварда небоевой скрипт - то госсипменю из базы не учитывается, издержки сд2...

YuruY 07.03.2010 19:09

А следующим патчем мы добъем всех гвардов .... со стороны базы. =)

kinks 07.03.2010 19:37

Цитата:

Сообщение от NeatElves (Сообщение 15012)
Так уже сделано..))

:confused: Чет я запутался...

NeatElves 07.03.2010 20:07

Темпура вроде хотел через госсип меню в базе сделать арендаторов маунтов..

tempura 08.03.2010 16:35

Цитата:

Сообщение от kinks (Сообщение 15001)
Соеденил патч Мява и СкриптДев2.
Проверьте пожалуйста на ошибки в коде...
MaNGOS r9535 ScriptDev2 r1634

Можно узнать отличия приведенного кода, от выложенного на форуме и постоянно обновляющегося?
http://ytdb.ru/Yuriy/patches/sd2/

У меня госсипы гвардов точно работают, а вот боевые скрипты - не знаю.

tempura 08.03.2010 16:36

Цитата:

Сообщение от NeatElves (Сообщение 15027)
Темпура вроде хотел через госсип меню в базе сделать арендаторов маунтов..

очень хотел. но мне бы кто-то пример привел - как это делать?

только лучше не рассказ програмииста-программисту (как мне обычно timmit пишет, и я ничего не понимаю). :(


Текущее время: 21:58. Часовой пояс GMT +4.

YTDB - MaNGOS DataBase