Сообщений: 1,065
Тем: 20
Зарегистрирован: Mar 2010
Репутация:
3,855
а чего бы не расковырять questname-e.dat из клиента? там ведь тоже эта информация, по экспе и сп, имеется
Сообщений: 807
Тем: 30
Зарегистрирован: Oct 2012
Репутация:
5,827
Gaikotsu Написал:а чего бы не расковырять questname-e.dat из клиента? там ведь тоже эта информация, по экспе и сп, имеется
Сегодня попробую.
Сообщений: 807
Тем: 30
Зарегистрирован: Oct 2012
Репутация:
5,827
07-23-2013, 10:14 AM
(Сообщение последний раз редактировалось: 07-23-2013, 10:54 AM SoniPro.)
Gaikotsu Написал:а чего бы не расковырять questname-e.dat из клиента? там ведь тоже эта информация, по экспе и сп, имеется
Что-то там не наблюдается информация эта
Клиент евроофф Interlude.
Сообщений: 1,065
Тем: 20
Зарегистрирован: Mar 2010
Репутация:
3,855
видимо только в более новых хрониках стали эту инфу там размещать (для вывода инфы о награде в окне квестовых диалогов).
ну тогда значит ничего не остается кроме расковыривания ai.obj, и вряд ли получится это автоматизировать. ради облегчения разве что декомпильнуть файл - все же более понятный код будет
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Зачем интерлюд если можно взять с4 и добить оставшиеся квесты вручную? Ну или базы пропарсить.
Сообщений: 807
Тем: 30
Зарегистрирован: Oct 2012
Репутация:
5,827
07-23-2013, 12:55 PM
(Сообщение последний раз редактировалось: 07-24-2013, 08:51 PM SoniPro.)
Zubastic Написал:Зачем интерлюд если можно взять с4 и добить оставшиеся квесты вручную? Ну или базы пропарсить.
На базах тоже люди работают, могут ошибаться, и у многих баз написано "Interlude", но квест не с интерлюда.
Попробую с С4 декомпильнуть AI.obj
Сообщений: 807
Тем: 30
Зарегистрирован: Oct 2012
Репутация:
5,827
Квест [letters_of_love] с Id 1.
Файл daring.txt из декомпила AI.obj
daring.txt
PHP код: <?php
class 1 daring : citizen
{
handler:
EventHandler TALK_SELECTED(fhtml0,talker)
{
if( _from_choice == 0 )
{
if( myself::HaveMemo(talker,1) == 0 && myself::GetOneTimeQuestFlag(talker,1) == 0 )
{
_choiceN = ( _choiceN + 1 );
_code = 0;
myself::AddChoice(0,"Letters of Love");
}
if( myself::HaveMemo(talker,1) == 0 && myself::GetOneTimeQuestFlag(talker,1) == 1 )
{
_choiceN = ( _choiceN + 1 );
_code = 1;
myself::AddChoice(1,"Letters of Love (Complete)");
}
if( myself::HaveMemo(talker,1) && myself::OwnItemCount(talker,688) && myself::GetOneTimeQuestFlag(talker,1) == 0 )
{
_choiceN = ( _choiceN + 1 );
_code = 2;
myself::AddChoice(2,"Letters of Love (Continue)");
}
if( myself::HaveMemo(talker,1) && myself::OwnItemCount(talker,688) == 0 && myself::GetOneTimeQuestFlag(talker,1) == 0 )
{
_choiceN = ( _choiceN + 1 );
_code = 3;
myself::AddChoice(3,"Letters of Love (Continue)");
}
if( _choiceN > 1 )
{
myself::ShowChoicePage(talker,1);
return;
}
}
if( _from_choice || _choiceN == 1 )
{
switch(_code)
{
case 0:
{
if( _from_choice == 0 || ( myself::HaveMemo(talker,1) == 0 && myself::GetOneTimeQuestFlag(talker,1) == 0 ) )
{
myself::SetCurrentQuestID(1);
if( myself::GetInventoryInfo(talker,0) >= ( myself::GetInventoryInfo(talker,1) * 0.800000 ) || myself::GetInventoryInfo(talker,2) >= ( myself::GetInventoryInfo(talker,3) * 0.800000 ) )
{
myself::ShowSystemMessage(talker,1118);
return;
}
if( myself::GetMemoCount(talker) < 26 )
{
if( talker.level > 1 )
{
myself::FHTML_SetFileName(fhtml0,"daring_q0001_02.htm");
myself::FHTML_SetInt(fhtml0,"quest_id",1);
myself::ShowFHTML(talker,fhtml0);
}
else
{
myself::ShowPage(talker,"daring_q0001_01.htm");
}
}
else
{
myself::ShowPage(talker,"fullquest.htm");
}
}
break;
}
case 1:
{
if( _from_choice == 0 || ( myself::HaveMemo(talker,1) == 0 && myself::GetOneTimeQuestFlag(talker,1) == 1 ) )
{
myself::SetCurrentQuestID(1);
if( myself::GetInventoryInfo(talker,0) >= ( myself::GetInventoryInfo(talker,1) * 0.800000 ) || myself::GetInventoryInfo(talker,2) >= ( myself::GetInventoryInfo(talker,3) * 0.800000 ) )
{
myself::ShowSystemMessage(talker,1118);
return;
}
myself::ShowPage(talker,"finishedquest.htm");
}
break;
}
case 2:
{
if( _from_choice == 0 || ( myself::HaveMemo(talker,1) && myself::OwnItemCount(talker,688) && myself::GetOneTimeQuestFlag(talker,1) == 0 ) )
{
myself::SetCurrentQuestID(1);
if( myself::GetInventoryInfo(talker,0) >= ( myself::GetInventoryInfo(talker,1) * 0.800000 ) || myself::GetInventoryInfo(talker,2) >= ( myself::GetInventoryInfo(talker,3) * 0.800000 ) )
{
myself::ShowSystemMessage(talker,1118);
return;
}
myself::ShowPage(talker,"daring_q0001_08.htm");
myself::SetFlagJournal(talker,1,3);
if( ( myself::GetCurrentTick() - talker.quest_last_reward_time ) > 1 )
{
talker.quest_last_reward_time = myself::GetCurrentTick();
myself::GiveItem1(talker,1079,1);
myself::DeleteItem1(talker,688,1);
}
}
break;
}
case 3:
{
if( _from_choice == 0 || ( myself::HaveMemo(talker,1) && myself::OwnItemCount(talker,688) == 0 && myself::GetOneTimeQuestFlag(talker,1) == 0 ) )
{
myself::SetCurrentQuestID(1);
if( myself::GetInventoryInfo(talker,0) >= ( myself::GetInventoryInfo(talker,1) * 0.800000 ) || myself::GetInventoryInfo(talker,2) >= ( myself::GetInventoryInfo(talker,3) * 0.800000 ) )
{
myself::ShowSystemMessage(talker,1118);
return;
}
if( ( myself::GetCurrentTick() - talker.quest_last_reward_time ) > 1 )
{
talker.quest_last_reward_time = myself::GetCurrentTick();
if( myself::OwnItemCount(talker,1079) > 0 )
{
myself::ShowPage(talker,"daring_q0001_09.htm");
}
else if( myself::OwnItemCount(talker,1080) > 0 )
{
myself::ShowPage(talker,"daring_q0001_10.htm");
myself::DeleteItem1(talker,1080,1);
myself::RemoveMemo(talker,1);
myself::AddLog(2,talker,1);
myself::SoundEffect(talker,"ItemSound.quest_finish");
myself::GiveItem1(talker,906,1);
myself::SetOneTimeQuestFlag(talker,1,1);
}
else
{
myself::ShowPage(talker,"daring_q0001_07.htm");
}
}
}
break;
}
}
return;
}
super;
}
EventHandler QUEST_ACCEPTED(quest_id,talker)
{
if( quest_id == 1 )
{
myself::SetCurrentQuestID(1);
if( myself::GetInventoryInfo(talker,0) >= ( myself::GetInventoryInfo(talker,1) * 0.800000 ) || myself::GetInventoryInfo(talker,2) >= ( myself::GetInventoryInfo(talker,3) * 0.800000 ) )
{
myself::ShowSystemMessage(talker,1118);
return;
}
myself::ShowPage(talker,"daring_q0001_06.htm");
myself::SetFlagJournal(talker,1,1);
if( ( myself::GetCurrentTick() - talker.quest_last_reward_time ) > 1 )
{
talker.quest_last_reward_time = myself::GetCurrentTick();
myself::SetMemo(talker,quest_id);
myself::AddLog(1,talker,1);
myself::SoundEffect(talker,"ItemSound.quest_accept");
if( myself::OwnItemCount(talker,687) == 0 )
{
myself::GiveItem1(talker,687,1);
}
}
return;
}
super;
}
}
Я правильно понял, что выдается только итем с Id 906, а адены и прочего не дают?
Сам код, где это взял:
код
PHP код: <?php
myself::ShowPage(talker,"daring_q0001_10.htm");
myself::DeleteItem1(talker,1080,1);
myself::RemoveMemo(talker,1);
myself::AddLog(2,talker,1);
myself::SoundEffect(talker,"ItemSound.quest_finish");
myself::GiveItem1(talker,906,1);
myself::SetOneTimeQuestFlag(talker,1,1);
И я правильно понял, что награду надо искать у аи нпц, который последний в квесте?
|