PDA

Просмотр полной версии : MyavGuards не компилятся на SD2 1597


tempura
24.02.2010, 05:05
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 лежат (http://ytdb.ru/Yuriy/patches/mangos/).


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

Konctantin
24.02.2010, 10:17
Давайте их сюда, щас подгоним

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


Файло в SD2 1597 рабочее (http://ytdb.ru/Yuriy/patches/sd2/1597/).

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

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

NeatElves
24.02.2010, 16:54
DoCast -> DoCastSpellIfCan (1568)

tempura
25.02.2010, 01:10
У мява ровные скрипты были)) Гвардов я недавно ставил, все норм было) Ты бы выложил свое? А то в отсутствие автора очень тяжело доводить до ума - и просто иметь на руках два варианта - уже хорошо бы.

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 (http://ytdb.ru/Yuriy/patches/sd2/1597/scripts/guards/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 двух новых столиц Алов и Орды. То есть работает только стража старых столиц. Что можно сделать для подключения новых столиц? Если это какая-то тупая рутинная шаблонная работа - я с ней наверное справлюсь - меня только в нужную сторону пнуть надо.

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

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

Найдено 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 (http://ytdb.ru/Yuriy/patches/sd2/1601_for_test/) и патчем (http://ytdb.ru/Yuriy/patches/sd2/1601_for_test.patch).

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

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

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
Ядро 9457, SD2 1605, База 536.
Применял Ваш, tempura, патч (http://ytdb.ru/Yuriy/patches/sd2/1601_for_test.patch).
В итоге нпц со мной общаются и меню у них есть, всё работает, но всё, что написано кириллицей, отображается криво. Приложил скрин диалога с ГильдХаус Кипером, остальные нпц по аналогии.

Konctantin
01.03.2010, 10:21
Файл скрипта должен быть в кодировке utf-8

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

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

:(

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

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

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

Редактируем ScriptDev2\system\ScriptLoader.cpp
//guards
extern void AddSC_ancient_of_war();
extern void AddSC_archbishop_benedictus();
extern void AddSC_g_marcus_jonathan();
extern void AddSC_high_fire_mage();
extern void AddSC_high_sorcerer_andromath();
extern void AddSC_highlord_bolvar_fordragon();
-extern void AddSC_city_officer();
extern void AddSC_overlord_saurfang();
extern void AddSC_thrall();

//world
extern void AddSC_areatrigger_scripts();
extern void AddSC_boss_emeriss();
extern void AddSC_boss_taerar();
extern void AddSC_boss_ysondre();
extern void AddSC_generic_creature();
extern void AddSC_go_scripts();
extern void AddSC_guards();
+extern void AddSC_city_officer();
extern void AddSC_item_scripts();
extern void AddSC_npc_professions();
extern void AddSC_npcs_special();
extern void AddSC_spell_scripts();
//guards
AddSC_ancient_of_war();
AddSC_archbishop_benedictus();
AddSC_g_marcus_jonathan();
AddSC_high_fire_mage();
AddSC_high_sorcerer_andromath();
AddSC_highlord_bolvar_fordragon();
- AddSC_city_officer();
AddSC_overlord_saurfang();
AddSC_thrall();

//world
AddSC_areatrigger_scripts();
AddSC_boss_emeriss();
AddSC_boss_taerar();
AddSC_boss_ysondre();
AddSC_generic_creature();
AddSC_go_scripts();
AddSC_guards();
+ AddSC_city_officer();
AddSC_item_scripts();
AddSC_npc_professions();
AddSC_npcs_special();
AddSC_spell_scripts();

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

Правим ScriptDev2\VC90\90ScriptDev2.vcproj или ScriptDev2\VC80\80ScriptDev2.vcproj
<Filter Name="guards">
<File RelativePath="..\scripts\guards\ancient_of_war.cpp"></File>
<File RelativePath="..\scripts\guards\archbishop_benedictus.cpp"></File>
<File RelativePath="..\scripts\guards\g_marcus_jonathan.cpp"></File>
<File RelativePath="..\scripts\guards\high_fire_mage.cpp"></File>
<File RelativePath="..\scripts\guards\high_sorcerer_andromath.cpp"></File>
<File RelativePath="..\scripts\guards\highlord_bolvar_fordragon.cpp"></File>
- <File RelativePath="..\scripts\guards\officers.cpp"></File>
<File RelativePath="..\scripts\guards\overlord_saurfang.cpp"></File>
<File RelativePath="..\scripts\guards\thrall.cpp"></File>
</Filter>


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
Так уже сделано..))

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

NeatElves
07.03.2010, 20:07
Темпура вроде хотел через госсип меню в базе сделать арендаторов маунтов..

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

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

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

tempura
08.03.2010, 16:36
Темпура вроде хотел через госсип меню в базе сделать арендаторов маунтов..

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

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