<div class='quotetop'>Цитата(kabjans * 14.2.2010, 23:41) [snapback]325166[/snapback]</div>Ну прописал... и всё?Прописал коды всех функций GC.getPATH_DAMAGE_WEIGHT(), getTurnDamage(), getExtraMovePathCost() в Колонизацию. [/b]
<div class='quotetop'>Цитата(kabjans * 14.2.2010, 23:41) [snapback]325166[/snapback]</div>Само собой, ИИ не понимает,шо это за таинственные функции ты его заставил выполнять и что делать с результатом от выполнения этих функций. Ведь код,определяющий путь юнита и учёт всех опасностей на этом пути ты в колонизацию не перенёс...Все прекрасно работает, но если пустить свой корабль на исследование территории, то независимо от значения PATH_DAMAGE_WEIGHT в GlobalDefines.xml корабль все время идет одним и тем же путем и естественно гибнет на одном и том же ходу. [/b]
<div class='quotetop'>Цитата(kabjans * 14.2.2010, 23:41) [snapback]325166[/snapback]</div>Именно так в результате и получается. Так что учи ИИ понимать новые функции.Перемещение корабля по одному и тому же пути означает, что PATH_DAMAGE_WEIGHT не имеет смысла вообще. Оно что есть, что нет. [/b]
Интересная идея для заработка
<div class='quotetop'>Цитата(Пашок * 15.2.2010, 1:25) [snapback]325170[/snapback]</div><div class='quotetop'>Цитата(kabjans * 14.2.2010, 23:41) [snapback]325166[/snapback]Ну прописал... и всё?Прописал коды всех функций GC.getPATH_DAMAGE_WEIGHT(), getTurnDamage(), getExtraMovePathCost() в Колонизацию. [/b]
<div class='quotetop'>Цитата(kabjans * 14.2.2010, 23:41) [snapback]325166[/snapback]</div>Само собой, ИИ не понимает,шо это за таинственные функции ты его заставил выполнять и что делать с результатом от выполнения этих функций. Ведь код,определяющий путь юнита и учёт всех опасностей на этом пути ты в колонизацию не перенёс...Все прекрасно работает, но если пустить свой корабль на исследование территории, то независимо от значения PATH_DAMAGE_WEIGHT в GlobalDefines.xml корабль все время идет одним и тем же путем и естественно гибнет на одном и том же ходу. [/b]
<div class='quotetop'>Цитата(kabjans * 14.2.2010, 23:41) [snapback]325166[/snapback]</div>Именно так в результате и получается. Так что учи ИИ понимать новые функции.Перемещение корабля по одному и тому же пути означает, что PATH_DAMAGE_WEIGHT не имеет смысла вообще. Оно что есть, что нет. [/b]
[/b][/quote]
"Прописал коды всех функций" - это значит, что все, что было в Цивилизации полностью переехало в Колонизацию. Иначе скомпилировать без ошибок было бы невозможно.
Вот к примеру:
Sid Meier's Civilization IV Colonization
Search "PATH_DAMAGE_WEIGHT" (10 hits in 3 files)
C:\Program Files\2K Games\Firaxis Games\Sid Meier's Civilization IV Colonization\Mods\1492 Global Colonization Weather\SDK\CvGameCoreUtils.cpp (3 hits)
Line 31: #define PATH_DAMAGE_WEIGHT (500)
Line 935: if (0 != GC.getPATH_DAMAGE_WEIGHT())
Line 939: iCost += (GC.getPATH_DAMAGE_WEIGHT() * std::max(0, GC.getFeatureInfo(pToPlot->getFeatureType()).getTurnDamage())) / GC.getMAX_HIT_POINTS();
C:\Program Files\2K Games\Firaxis Games\Sid Meier's Civilization IV Colonization\Mods\1492 Global Colonization Weather\SDK\CvGlobals.cpp (5 hits)
Line 88: m_iPATH_DAMAGE_WEIGHT(0),
Line 2175: m_iPATH_DAMAGE_WEIGHT = getDefineINT("PATH_DAMAGE_WEIGHT");
Line 2175: m_iPATH_DAMAGE_WEIGHT = getDefineINT("PATH_DAMAGE_WEIGHT");
Line 2292: int CvGlobals::getPATH_DAMAGE_WEIGHT()
Line 2294: return m_iPATH_DAMAGE_WEIGHT;
C:\Program Files\2K Games\Firaxis Games\Sid Meier's Civilization IV Colonization\Mods\1492 Global Colonization Weather\SDK\CvGlobals.h (2 hits)
Line 589: int getPATH_DAMAGE_WEIGHT();
Line 921: int m_iPATH_DAMAGE_WEIGHT;
Sid Meier's Civilization 4\Beyond the Sword\CvGameCoreDLL
Search "PATH_DAMAGE_WEIGHT" (10 hits in 3 files)
C:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\CvGameCoreDLL\CvGameCoreUtils.cpp (3 hits)
Line 30: #define PATH_DAMAGE_WEIGHT (500)
Line 1401: if (0 != GC.getPATH_DAMAGE_WEIGHT())
Line 1405: iCost += (GC.getPATH_DAMAGE_WEIGHT() * std::max(0, GC.getFeatureInfo(pToPlot->getFeatureType()).getTurnDamage())) / GC.getMAX_HIT_POINTS();
C:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\CvGameCoreDLL\CvGlobals.cpp (5 hits)
Line 147: m_iPATH_DAMAGE_WEIGHT(0),
Line 2587: m_iPATH_DAMAGE_WEIGHT = getDefineINT("PATH_DAMAGE_WEIGHT");
Line 2587: m_iPATH_DAMAGE_WEIGHT = getDefineINT("PATH_DAMAGE_WEIGHT");
Line 2724: int CvGlobals::getPATH_DAMAGE_WEIGHT()
Line 2726: return m_iPATH_DAMAGE_WEIGHT;
C:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\CvGameCoreDLL\CvGlobals.h (2 hits)
Line 696: int getPATH_DAMAGE_WEIGHT();
Line 1115: int m_iPATH_DAMAGE_WEIGHT;
Аналогично сделано и по getTurnDamage(), getExtraMovePathCost().
Возможно,я не прав. Я всего лишь хочу сказать,что во всех этих кодах напрочь отсутствует указание на то,как ИИ использует эти функции. Ну посчитал он тебе сколько "жизни" у него отнимется при прохождении,скажем,рифов. И что? Покажи мне код,где на основе этого ИИ принимает решение не ходить на эту клетку.
Интересная идея для заработка
<div class='quotetop'>Цитата(Пашок * 15.2.2010, 2:11) [snapback]325173[/snapback]</div>Вот в этом и проблема. ИИ знает сколько ему будет стоить ход на опасную клетку, но все равно идет. И так до тех пор пока не гибнет.Возможно,я не прав. Я всего лишь хочу сказать,что во всех этих кодах напрочь отсутствует указание на то,как ИИ использует эти функции. Ну посчитал он тебе сколько "жизни" у него отнимется при прохождении,скажем,рифов. И что? Покажи мне код,где на основе этого ИИ принимает решение не ходить на эту клетку.
[/b]
А по логике надо, чтобы при уровне повреждений к примеру 50% ИИ остановливался и восстанавливал здоровье до 100%, а лишь потом шел бы дальше.
Вот только такого я в кодах не нашел, а самому сделать, увы, ума не хватает. А это было бы прекрасным дополнением и для Цивилизации, и для Колонизации.
Я тут прикинул варианты. Помнится встречалась такая фишка, как выход из боя, если повреждение больше скольки-то процентов. Причем "выход из боя" был с некоторой вероятностью. А что если прописать вероятность продолжения движения раненого юнита? Чем меньше хит-пойнтов осталось, тем менее вероятно, что юнит продолжит движение. По-моему, логично.
<div class='quotetop'>Цитата(Пашок * 15.2.2010, 2:11) [snapback]325173[/snapback]</div>Я такого места, где ИИ принимает решение не ходить на клетку не нашел. Поэтому и ищу варианты.Возможно,я не прав. Я всего лишь хочу сказать,что во всех этих кодах напрочь отсутствует указание на то,как ИИ использует эти функции. Ну посчитал он тебе сколько "жизни" у него отнимется при прохождении,скажем,рифов. И что? Покажи мне код,где на основе этого ИИ принимает решение не ходить на эту клетку.
[/b]
Нашел такой, который мне кажется наиболее логичным и простым в реализации. Вот его суть.
Вот участок кода, связанный с движением по опасной клетке из CvGameCoreUtils.cpp (я беру вариант Civ4BTS).
[code]
Все функции,связанные с поведением ИИ,находятся в CvUnitAI, CvPlayerAI, CvCityAI, CvSelectionGroupAI, CvTeamAI. Вот там и смотри. int pathCost ты нашёл,теперь ищи где это используется. И по-видимому, тебе понадобится кто-то с хорошими знаниями С++, так как дальше всё сложнее.
Интересная идея для заработка