Объявления
Поздравляем
Богдан


Форум о Героях Меча и Магии и King's Bounty. Если Вы любите эти игры, мы будем рады видеть Вас в наших рядах. :smile2:

Восстанавление PhilAI.CPP из Heroes2w.exe

Не запускается игра? Проблемы со звуком? Где, в конце концов, взять игру, скачать патчи, приложения и карты? Как установить все это? Все проблемы обсуждаем в этом разделе
offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Восстанавление PhilAI.CPP из Heroes2w.exe

Сообщение t800 » 22 авг 2016, 18:46

Все жалуются что AI во fheroes2 очень глупый и это действительно так потому что он очень примитивный.

Поэтому я решил что надо сделать для fheroes2 новый AI, но поскольку каким должен AI для Heroes2 я не знаю.
Я решил что когда не знаешь как это придумать надо спросить кого-нибудь кто знает как устроен AI в HMM2 рассказать как он устроен. И я попросил Швейка с форума Green Dragon рассказать мне как устоен AI в НMM2

И он мне рассказал следующее

Швейк писал(а):

Я открыл Heroes2.exe в IDA сперва нажал сделать анализ, а затем нажал Produce File -> Сreate С file
а потом Produce File -> Сreate C header file

И IDA сделала для меня исходники Heroes2

Вот они.

HEROES2W_Debug H.zip

HEROES2W_Debug С.zip


И первое что я обнаружил в файлах HEROES2W_Debug.h и HEROES2W_Debug.С

Это название как называется AI в Heroes2 он называется philAI и в оригинальных исходниках он лежал в
в файле PHILAI.CPP и этот AI сделал Phil :ded: , причем оказывается heroes2.exe в случае когда AI
не знает что делать, он должен выдавать такое сообщение:

Код: Выделить всё
"AI encountered object type %d and doesn't know how to deal with it.   Tell Phil";


Но свои контакты почему то Phil указать забыл :( И это очень жаль, потому что если бы он их указал тогда его можно было бы просто спросить какую команду надо куда писать, а не пытаться разобраться в исходниках которые сделала IDA.
Вернуться к началу

offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Re: Восстанавление PhilAI.CPP из Heroes2w.exe

Сообщение t800 » 04 сен 2016, 06:01

Швейк с форума Green Dragon опубликовал первую часть своей статьи.

Швейк писал(а):

Сегодня продолжил разбираться с тем как работает PhilAI

Но прежде чем читать дальше мою статью про то как работает PhilAI.
Эту статью имеют право читать только:

Цитата:
1. Лицо, правомерно владеющее экземпляром программы для ЭВМ или экземпляром базы данных (пользователь), вправе без разрешения автора или иного правообладателя и без выплаты дополнительного вознаграждения:
1) осуществлять действия, необходимые для функционирования программы для ЭВМ или базы данных (в том числе в ходе использования в соответствии с их назначением), включая запись и хранение в памяти ЭВМ (одной ЭВМ или одного пользователя сети), внесение в программу для ЭВМ или базу данных изменений исключительно в целях их функционирования на технических средствах пользователя, исправление явных ошибок, если иное не предусмотрено договором с правообладателем;
2) изготовить копию программы для ЭВМ или базы данных при условии, что эта копия предназначена только для архивных целей или для замены правомерно приобретенного экземпляра в случаях, когда такой экземпляр утерян, уничтожен или стал непригоден для использования. При этом копия программы для ЭВМ или базы данных не может быть использована в иных целях, чем цели, указанные в подпункте 1 настоящего пункта, и должна быть уничтожена, если владение экземпляром таких программы или базы данных перестало быть правомерным.
2. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения изучать, исследовать или испытывать функционирование такой программы в целях определения идей и принципов, лежащих в основе любого элемента программы для ЭВМ, путем осуществления действий, предусмотренных подпунктом 1 пункта 1 настоящей статьи.
3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:
1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ.
4. Применение положений, предусмотренных настоящей статьей, не должно противоречить обычному использованию программы для ЭВМ или базы данных и не должно ущемлять необоснованным образом законные интересы автора или иного правообладателя.


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



Швейк писал(а):

А теперь про PhilAI. Информация для тех кто имеет право ее читать

PhilAI состоит из следующий функций

Код: Выделить всё
philAI::BuildBuilding(town *,int)   
philAI::BuildCreature(town *,int,int)
philAI::BuildHero(town *,int)
philAI::CanBuyBHC(BHC &)
philAI::CheckBerserk(void)      
philAI::CheckBuyStuff(void)    
philAI::CheckForCreatureUpgrades(void) 
philAI::CheckReload(void)                  
philAI::ChooseEvaluateBattle(armyGroup *,hero *,armyGroup *,hero *,int,int,int,int &,int &)
philAI::ChooseGoldOrExperience(int,int) .
philAI::ChooseToFightForArtifact(int,int,int)
philAI::ChooseToPayRansomOnHero(int)
philAI::CombatMonsterEvent(hero *,int,int *,mapCell *)
philAI::ComputeUpgradeValue(int,int)
philAI::ComputeValueOfFreeSS(hero *,int)
philAI::ComputeValueOfSS(hero *,int,int)         
philAI::CreaturesToBuy(int,int)               
philAI::CreaturesToBuy(town *,int)            
philAI::DamageGroup(armyGroup *,hero *,hero *,float)
philAI::DetermineHeroToMove(int)            
philAI::DetermineTargetPosition(int &,int &,int,int &)   
philAI::DimensionDoorTo(int,int)             
philAI::DoAI(int)    
philAI::DoAllHeroInteractions(void)      
philAI::DoAnywhereDDoorTownGate(int)
philAI::DoDimensionDoor(hero *)         
philAI::EvaluateArtifactEvent(int,int)   
philAI::EvaluateBarrier(mapCell *)      
philAI::EvaluateGenericSite(mapCell *) 
philAI::EvaluateHeroEvent(int,int,int,int,int *)            
philAI::EvaluateJail(mapCell *)          
philAI::EvaluateMineEvent(int,int,int,int *)               
philAI::EvaluateMonsterEvent(int,int,int *)      
philAI::EvaluateOneTimeCreaturePurchase(int,int,int,int &,int &,int &)   
philAI::EvaluatePassword(mapCell *)   
philAI::EvaluateRecruitSite(mapCell *) 
philAI::EvaluateTownEvent(int,int,int,int,int *)   
philAI::FightEvent(hero *,mapCell *,int)         
philAI::FightValueOfStack(armyGroup *,hero *,int,int,int,int)               
philAI::FutureDeflator(int * const)      
philAI::GetBestBHC(int,BHC &)         
philAI::GetBestBuilding(town *,BHC &,float &)   
philAI::GetBestCreature(town *,BHC &,float &) 
philAI::GetBestHero(town *,BHC &,float &)      
philAI::GetGameAIVars(void)          
philAI::GetGameAttentionValue(int)   
philAI::GetTurnAIVars(int)             
philAI::GetTurnAttentionValue(int)    
philAI::GoodAdjacent(int *)            
philAI::HeroInteractionAtHero(hero *,hero *,int,int *)    
philAI::HeroInteractionAtTown(hero *,town *,int,int *)   
philAI::IncrementHourGlass(void)      
philAI::LikelihoodOfEnemyAttacking(town *,hero *,float &,float &,int &,int &,int &,float &)   
philAI::ManaRefreshValue(hero *,int) 
philAI::MaxBuyableCreatures(int)      
philAI::MeanRVOfUnexploredTerritory(int)      
philAI::NetValueOfArtifact(int,int,int,int)      
philAI::ProbableOutcomeOfBattle(armyGroup *,hero *,armyGroup *,hero *,armyGroup *,int,int,int,float &,int &,int &,int &,int &,int &)
philAI::QuickCombat(armyGroup *,hero *,armyGroup *,hero *,int,int,float &,float &)
philAI::RVConversion(int * const)             
philAI::RVOfPosition(int,int,int,int,int,int,int,int,int,int)       
philAI::RedistributeTroops(armyGroup *,armyGroup *,int,int,int,int,int)         
philAI::SetupRelativeHeroStrengths(void)   
philAI::StrategicValueOfPosition(int,int,int,int,int *,int)         
philAI::TownEvent(mapCell *,hero *,int,int)
philAI::TurnCostResource(int)               
philAI::TurnValueOfObelisk(int)               
philAI::TurnsToBuy(int * const)               
philAI::ValueOfBuyingBuilding(town *,int,int &,float &)         
philAI::ValueOfBuyingCreature(town *,int,int &,int,float &)    
philAI::ValueOfBuyingHero(town *,hero *,int &,float &)         
philAI::ValueOfEventAtPosition(int,int,int,int *)      
philAI::ValueOfTown(town *)                
philAI::philAI(void)


А что делает каждая из функция, это я расскажу в следующий раз.
Вернуться к началу


Вернуться в Техническая часть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1