+ Ответить в теме
Страница 2 из 2 ПерваяПервая 12
Показано с 21 по 27 из 27

Тема: [Решено] Как сделать, чтобы ИИ избегал повреждений юнитов от ландшафта?

  1. #21
    <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]
    Именно так в результате и получается. Так что учи ИИ понимать новые функции.
    продвинь это сообщение в соцсеть:  
    Интересная идея для заработка

  2. #22
    <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&#39;s Civilization IV Colonization
    Search "PATH_DAMAGE_WEIGHT" (10 hits in 3 files)

    C:\Program Files\2K Games\Firaxis Games\Sid Meier&#39;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&#39;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&#39;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&#39;s Civilization 4\Beyond the Sword\CvGameCoreDLL
    Search "PATH_DAMAGE_WEIGHT" (10 hits in 3 files)

    C:\Program Files\Firaxis Games\Sid Meier&#39;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&#39;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&#39;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().




    продвинь это сообщение в соцсеть:  

  3. #23
    Возможно,я не прав. Я всего лишь хочу сказать,что во всех этих кодах напрочь отсутствует указание на то,как ИИ использует эти функции. Ну посчитал он тебе сколько "жизни" у него отнимется при прохождении,скажем,рифов. И что? Покажи мне код,где на основе этого ИИ принимает решение не ходить на эту клетку.
    продвинь это сообщение в соцсеть:  
    Интересная идея для заработка

  4. #24
    <div class='quotetop'>Цитата(Пашок * 15.2.2010, 2:11) [snapback]325173[/snapback]</div>
    Возможно,я не прав. Я всего лишь хочу сказать,что во всех этих кодах напрочь отсутствует указание на то,как ИИ использует эти функции. Ну посчитал он тебе сколько "жизни" у него отнимется при прохождении,скажем,рифов. И что? Покажи мне код,где на основе этого ИИ принимает решение не ходить на эту клетку.
    [/b]
    Вот в этом и проблема. ИИ знает сколько ему будет стоить ход на опасную клетку, но все равно идет. И так до тех пор пока не гибнет.

    А по логике надо, чтобы при уровне повреждений к примеру 50% ИИ остановливался и восстанавливал здоровье до 100%, а лишь потом шел бы дальше.

    Вот только такого я в кодах не нашел, а самому сделать, увы, ума не хватает. А это было бы прекрасным дополнением и для Цивилизации, и для Колонизации.

    Я тут прикинул варианты. Помнится встречалась такая фишка, как выход из боя, если повреждение больше скольки-то процентов. Причем "выход из боя" был с некоторой вероятностью. А что если прописать вероятность продолжения движения раненого юнита? Чем меньше хит-пойнтов осталось, тем менее вероятно, что юнит продолжит движение. По-моему, логично.
    продвинь это сообщение в соцсеть:  

  5. #25
    <div class='quotetop'>Цитата(Пашок * 15.2.2010, 2:11) [snapback]325173[/snapback]</div>
    Возможно,я не прав. Я всего лишь хочу сказать,что во всех этих кодах напрочь отсутствует указание на то,как ИИ использует эти функции. Ну посчитал он тебе сколько "жизни" у него отнимется при прохождении,скажем,рифов. И что? Покажи мне код,где на основе этого ИИ принимает решение не ходить на эту клетку.
    [/b]
    Я такого места, где ИИ принимает решение не ходить на клетку не нашел. Поэтому и ищу варианты.
    Нашел такой, который мне кажется наиболее логичным и простым в реализации. Вот его суть.

    Вот участок кода, связанный с движением по опасной клетке из CvGameCoreUtils.cpp (я беру вариант Civ4BTS).

    [code]
    продвинь это сообщение в соцсеть:  

  6. #26
    Все функции,связанные с поведением ИИ,находятся в CvUnitAI, CvPlayerAI, CvCityAI, CvSelectionGroupAI, CvTeamAI. Вот там и смотри. int pathCost ты нашёл,теперь ищи где это используется. И по-видимому, тебе понадобится кто-то с хорошими знаниями С++, так как дальше всё сложнее.
    продвинь это сообщение в соцсеть:  
    Интересная идея для заработка

  7. #27


    А в приведенном мной варианте можно ввести проверку на состояние юнита перед его дальнейшим движением?
    продвинь это сообщение в соцсеть:  

+ Ответить в теме
Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Ответов: 7
    Новое: 18.01.2017, 12:09
  2. Как сделать так,чтобы ИИ цива перестала появлятся в дипломатии?
    от Rbhbytz в разделе Вопросы и гайды по моддингу Civ4
    Ответов: 1
    Новое: 07.11.2010, 14:30
  3. Как сделать чтобы город после захвата не терял постройки
    от QuibinG в разделе Вопросы и гайды по моддингу Civ4
    Ответов: 10
    Новое: 25.03.2009, 09:23
  4. Ответов: 1
    Новое: 23.11.2007, 23:00
  5. Как сделать чтобы казармы не лечили за 1 ход?
    от Agafonov в разделе Civ3 - Модостроение
    Ответов: 4
    Новое: 29.09.2005, 16:09

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru

free counters