+ Ответить в теме
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 20 из 24

Тема: Требуется помощь специалистов!

  1. #1
    Требуется помощь специалистов!

    Игра: Колонизация 2.

    Расположение зданий в городе прописывается в файле CvMainInterface.py. Выглядит это так

    Код:
    # CITY BUILDINGS GRID MAP
    BUILDING_DATA = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
    
    BUILDING_DATA[0] = [40, 33, 33, 18] #Bells
    BUILDING_DATA[1] = [60, 42, 33, 18] #Hammers
    BUILDING_DATA[2] = [40, 66, 33, 18] #Coats
    BUILDING_DATA[3] = [0, 33, 33, 18] #Cloth
    BUILDING_DATA[4] = [80, 0, 33, 18] #Rum
    BUILDING_DATA[5] = [20, 42, 33, 18] #Cigars
    BUILDING_DATA[6] = [60, 8, 33, 18] #Tools
    BUILDING_DATA[7] = [40, 0, 33, 18] #Crosses
    BUILDING_DATA[8] = [0, 66, 33, 18] #Muskets
    BUILDING_DATA[9] = [0, 0, 33, 18] #Horses
    BUILDING_DATA[10] = [80, 33, 33, 18] #Dock
    BUILDING_DATA[11] = [60, 74, 33, 18] #WareHouse
    BUILDING_DATA[12] = [20, 8, 33, 18] #Education
    BUILDING_DATA[13] = [80, 74, 33, 18] #Wall
    BUILDING_DATA[14] = [20, 74, 33, 18] #Print
    
    BUILDING_GRID = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
    Первые две цифры - это координаты здания на экране города.

    Задача:
    Необходимо на одном и том же месте построить одно из двух зданий. Если строишь здание 1, значит здание 2 построить невозможно. Место уже занято. И соответственно наоборот.

    Что имеем:

    Во-первых, в файле CvMainInterface.py нужно задать одни и те же координаты для двух разных зданий. Например, вместо

    <div class='quotetop'>Цитата</div>
    BUILDING_DATA[0] = [40, 33, 33, 18] #Bells
    BUILDING_DATA[1] = [60, 42, 33, 18] #Hammers[/b]
    можно записать

    <div class='quotetop'>Цитата</div>
    BUILDING_DATA[0] = [40, 33, 33, 18] #Bells
    BUILDING_DATA[1] = [40, 33, 33, 18] #Hammers[/b]
    В данном случае оба здания #Hammers и #Bells могут быть построены на том же месте.

    Самое смешное, что так можно строить! То есть поверх уже существующего здания можно строить второе. На экране города они так и появляются в виде пирога из двух зданий.

    Вопрос:
    Как сделать, чтобы первое построенное здание полностью исключало возможность строить на этом же самом месте второе здание?
    Повторяю, условие: строить надо на одном и том же месте!
    Какие есть предложения?
    продвинь это сообщение в соцсеть:  

  2. #2
    Вопрос непонял.
    Если надо чтоб наличие одного здания запрещало постройку другого, то зачем описывать проблемы интерфейса?
    Если надо чтоб картинки зданий были в разных местах, то зачем задавать им одинаковые координаты?
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  3. #3
    <div class='quotetop'>Цитата(NeseryozniyVET * 27.4.2010, 20:43) [snapback]334491[/snapback]</div>
    Вопрос непонял.
    Если надо чтоб наличие одного здания запрещало постройку другого, то зачем описывать проблемы интерфейса?
    Если надо чтоб картинки зданий были в разных местах, то зачем задавать им одинаковые координаты?
    [/b]
    Опишу общую идею и зачем это делается.

    Колонисты высаживаются на берег. Затем закладывают поселение вообще без единого здания в нем.

    Далее строится первое здание.

    Это может быть обычное административное здание, то есть обычный вариант, как сейчас.

    Или на месте административного здания строится смотровая башня. В этом случае данное поселение может развиваться далее как форт, затем крепость. Но не как обычное поселение!

    Соотвественно в каждом из типов поселениий - обычном городе или городе-крепости можно строить свои типы зданий. Это дает как минимум 2-кратное увеличение площадей под городское или крепостное строительство.

    Но начало должно быть одно. Пустая центральная клетка, где закладывается первый камень или обычного города, или города-крепости.

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

    Во французской версии Dawn of New Era 1.33-1.34 подобная особенность есть, то есть там можно строить либо лавку табачника, либо мастерскую по пошиву одежды, либо винокурню. И все на одной и той же клетке. Что построил первым, то и можешь улучшать до предела. Что не построил, то уже и не построишь. Именно такое мне и надо для осуществления моей идеи.

    У них это прописано в виде CTR (CoatTobaccoRum) тага в CIV4BuildingInfos.xml. Они поменяли только CvMainInterface.py и CIV4BuildingInfos.xml с Civ4BuildingSchema.xml. Все остальные изменения внутри CvGameCoreDLL.dll.

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

  4. #4
    идейный враг всяких трансформероB

    Аватар для Snake_B


    Регистрация
    14.09.2007
    Адрес
    Донецк-Камчатка....
    Сообщений
    13,314
    <div class='quotetop'>Цитата(kabjans * 27.4.2010, 21:34) [snapback]334499[/snapback]</div>
    <div class='quotetop'>Цитата(NeseryozniyVET * 27.4.2010, 20:43) [snapback]334491[/snapback]
    Вопрос непонял.
    Если надо чтоб наличие одного здания запрещало постройку другого, то зачем описывать проблемы интерфейса?
    Если надо чтоб картинки зданий были в разных местах, то зачем задавать им одинаковые координаты?
    [/b]
    Опишу общую идею и зачем это делается.

    Колонисты высаживаются на берег. Затем закладывают поселение вообще без единого здания в нем.

    Далее строится первое здание.

    Это может быть обычное административное здание, то есть обычный вариант, как сейчас.
    [/b][/quote]

    ну.... всё правильно Вет сказал... вы не в ту сторону копаете... для ваших зданий:
    1. прописываете одинаковые координаты (как вы и хотели)... и всё, больше от интерфейса вам ни чего не нужно...
    2. развитие отдельных линеек реализуется вообще как не фиг делать... та линейка которая идёт у города (обычного) требует наличия "адм.здания" (каждое здание города отдельно), линейка крепости требует наличия "смотровой башни"... всё это на сколько я понимаю различия цивы и колонизации делается одинаково... через xml...
    3. собственно проблема я так понимаю именно в первом здании.... на сколько я помню в цивилизации в xml постройка одного здания не может запретить постройку другого...

    и вот это уже надо делать в питоне или в сдк....


    теоретически можно реализовать и в xml.... но в циве, на счет колонизации я не знаю...

    1. адм.здания и смотровые башни прописать как национальное чудо и в "CIV4BuildingClassInfos" в тэге "iMaxPlayerInstances = Максимальное количество зданий данного класса для каждого игрока" прописать им -1
    2. в городе разрешить 3 нац.чуда (пример для цивы)

    т.е. строим город и из зданий можно построить или адм.здание или башню (все остальные здания требуют наличие чего-нить из первых двух), строим что то из них получаем одну из веток и возможность построить оставшиеся два нац.чуда...

    п.с. с другой стороны... после постройки первого нац.чуда, можно построить и второе... так что или 1 нац.чудо на город (может в колонизации это можно реализовать?) или питон / сдк...
    продвинь это сообщение в соцсеть:  

  5. #5
    Я вот не помню - под рукой колонизации нет - если там в BuidingInfos реализовано как в обычной циве - то поковыряйтесь на предмет того, как реализованы электростанции в обычной циве - там есть момент "или-или" - т.е. если строишь электростанцию другого типа - то предыдущего типа рушится и на её место ставится новый тип.
    продвинь это сообщение в соцсеть:  

  6. #6
    <div class='quotetop'>Цитата</div>
    1. прописываете одинаковые координаты (как вы и хотели)... и всё, больше от интерфейса вам ни чего не нужно...[/b]
    Согласен.

    <div class='quotetop'>Цитата</div>
    2. развитие отдельных линеек реализуется вообще как не фиг делать... та линейка которая идёт у города (обычного) требует наличия "адм.здания" (каждое здание города отдельно), линейка крепости требует наличия "смотровой башни"... всё это на сколько я понимаю различия цивы и колонизации делается одинаково... через xml...
    3. собственно проблема я так понимаю именно в первом здании.... на сколько я помню в цивилизации в xml постройка одного здания не может запретить постройку другого...[/b]
    Частично верно. Но как обойти проблему первого здания я в принципе решил. Сегодня вечером опробую идею на игре. Там вообще в СДК лесть не надо, все можно в xml прописать.

    Но решение необходимо не только для первого здания, а для всех построек в городе.

    Весь набор зданий - тех уже есть в оригинальной колонизации, и тех, что я буду вводить в моде - можно будет условно разделить на "городскую" и "крепостную" инфраструктуры. То есть каждой паре зданий прописать одни и те же координаты в CvMainInterface.py, а по ходу игры уже решать, что конкретно строить. Если в окрестностях города нет к примеру табака, то это место можно смело занимать например оружейной мастерской или чем-то другим. Сейчас же это место вообще пустует или если здание все же построено (зачем только?), то ничего не производит.

    Предлагаемые изменения дают как минимум (!) двухкратное увеличение площадей под строительство. А следовательно намного более интересную инфраструктуру можно создать на городском или крепостном экранах.

    <div class='quotetop'>Цитата</div>
    1. адм.здания и смотровые башни прописать как национальное чудо и в "CIV4BuildingClassInfos" в тэге "iMaxPlayerInstances = Максимальное количество зданий данного класса для каждого игрока" прописать им -1
    2. в городе разрешить 3 нац.чуда (пример для цивы) [/b]
    Итак, первое предложение - через национальное чудо.

    Если в качестве "чуда" поставить "смотровую башню" или "простейшее административное здание", причем в городе может быть только одно.
    Тут плохо то, что такое "чудо" можно будет иметь только одно на всю колонию. А значит только один город можно развивать как город-крепость. А должно быть, чтобы любое поселение можно было по своему усмотрению строить или как обычный город, или как город-крепость.
    Так что, возможно, это тупиковый путь.

    <div class='quotetop'>Цитата</div>
    п.с. с другой стороны... после постройки первого нац.чуда, можно построить и второе... так что или 1 нац.чудо на город (может в колонизации это можно реализовать?) или питон / сдк...[/b]
    Вот именно это и есть самое плохое, плюс именно это и есть на данный момент в Колонизации без каких-либо изменений в xml, лишь задав одни и те же координаты файле CvMainInterface.py. Одно строится поверх другого.

    NeseryozniyVET правильно сформулировал задачу:

    <div class='quotetop'>Цитата</div>
    ... надо чтоб наличие одного здания запрещало постройку другого.[/b]
    В этом смысле второе предложение от swan:

    <div class='quotetop'>Цитата</div>
    поковыряйтесь на предмет того, как реализованы электростанции в обычной циве - там есть момент "или-или" - т.е. если строишь электростанцию другого типа - то предыдущего типа рушится и на её место ставится новый тип.[/b]
    на первый взгляд более перспективно. Но и там тоже есть один крайне неприятный момент, на который я часто нарывался, играя в Цивилизацию. Можно построить тепловую станцию на угле, затем вместо нее построить электростанцию. Тепловая, естественно исчезнет из города. НО! Возможность-то ее строительства останется! То есть ее снова можно построить, а значит возможен замкнутый круг, когда АИ будет тупо строить то, простейшее административное здание, то смотровую башню. И так до бесконечности, полностью остановив развитие колонии.

    То есть вопрос опять-таки прежний.

    Если надо чтоб наличие одного здания запрещало постройку другого. Как это сделать?

    Французам в Dawn of New Era 1.33-1.34 это как-то удалось. Вот, что я нарыл на данный момент.

    Таг bCTR (CoatTobaccoRum) прописан в CIV4BuildingInfos.xml и Civ4BuildingSchema.xml.

    В CIV4BuildingInfos.xml так

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

  7. #7
    В файлах CIV4BuildingInfos.xml и CIV4BuildingsSchema.xml создай новый тэг iConstructType под тэгом iSpecialBuildingPriority. Зделай все по аналогии с iSpecialBuildingPriority.
    Потом зайди в файлы SDK CvInfos.cpp и CvInfos.h. Найди класс CvBuildingInfo и опять для нового тэга зделай все по аналогии с iSpecialBuildingPriority. Затем зайди в файл CvCity.cpp, найди bool CvCity::canConstruct и напиши там
    [code]
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  8. #8
    Большое спасибо, NeseryozniyVET, начал пробовать этот вариант. С ходу не получилось, что совершенно не странно. Сейчас буду искать причину.

    SpecialBuildingPriority прописан в этих файлах.

    <div class='quotetop'>Цитата</div>
    Search "SpecialBuildingPriority" (16 hits in 6 files)
    C:\Program Files\2K Games\Firaxis Games\Sid Meier&#39;s Civilization IV Colonization\Mods\1492 ACSystem\1492 ACSystem\CvGameCoreDLL\CvCity.cpp (2 hits)
    Line 5191: if (kBuilding.getSpecialBuildingPriority() < kNextBuilding.getSpecialBuildingPriority())
    Line 5191: if (kBuilding.getSpecialBuildingPriority() < kNextBuilding.getSpecialBuildingPriority())
    C:\Program Files\2K Games\Firaxis Games\Sid Meier&#39;s Civilization IV Colonization\Mods\1492 ACSystem\1492 ACSystem\CvGameCoreDLL\CvCityAI.cpp (1 hits)
    Line 1180: int iValue = kLoopBuilding.getSpecialBuildingPriority();
    C:\Program Files\2K Games\Firaxis Games\Sid Meier&#39;s Civilization IV Colonization\Mods\1492 ACSystem\1492 ACSystem\CvGameCoreDLL\CvGameTextMgr.cpp (2 hits)
    Line 4732: if (kBuilding.getSpecialBuildingPriority() > kNextBuilding.getSpecialBuildingPriority())
    Line 4732: if (kBuilding.getSpecialBuildingPriority() > kNextBuilding.getSpecialBuildingPriority())
    C:\Program Files\2K Games\Firaxis Games\Sid Meier&#39;s Civilization IV Colonization\Mods\1492 ACSystem\1492 ACSystem\CvGameCoreDLL\CvInfos.cpp (7 hits)
    Line 4090: m_iSpecialBuildingPriority(0),
    Line 4261: int CvBuildingInfo::getSpecialBuildingPriority() const
    Line 4263: return m_iSpecialBuildingPriority;
    Line 4487: stream->Read(&m_iSpecialBuildingPriority);
    Line 4572: stream->Write(m_iSpecialBuildingPriority);
    Line 4653: pXML->GetChildXmlValByName(&m_iSpecialBuildingPriority, "iSpecialBuildingPriority");
    Line 4653: pXML->GetChildXmlValByName(&m_iSpecialBuildingPriority, "iSpecialBuildingPriority");
    C:\Program Files\2K Games\Firaxis Games\Sid Meier&#39;s Civilization IV Colonization\Mods\1492 ACSystem\1492 ACSystem\CvGameCoreDLL\CvInfos.h (2 hits)
    Line 1084: DllExport int getSpecialBuildingPriority() const;
    Line 1161: int m_iSpecialBuildingPriority;
    C:\Program Files\2K Games\Firaxis Games\Sid Meier&#39;s Civilization IV Colonization\Mods\1492 ACSystem\1492 ACSystem\CvGameCoreDLL\CyInfoInterface1.cpp (2 hits)
    Line 258: .def("getSpecialBuildingPriority", &CvBuildingInfo::getSpecialBuildingPriority, "int ()")
    Line 258: .def("getSpecialBuildingPriority", &CvBuildingInfo::getSpecialBuildingPriority, "int ()")[/b]
    По-видимому в этих же файлах мне надо и ConstructType прописать, а то CvGlobals.cpp ругается очень нехорошими словами.

    Участок кода в CvCity.cpp, где есть bool CvCity::canConstruct в Колонизации выглядит так:
    [spoiler]
    [code]bool CvCity::canConstruct(BuildingTypes eBuilding, bool bContinue, bool bTestVisible, bool bIgnoreCost) const
    {
    продвинь это сообщение в соцсеть:  

  9. #9
    Я перепутал CvGlobals с CvInfos.
    Искать CvBuildingInfo надо в CvInfos.cpp и CvInfos.h. Перечитай предидущий пост, я его исправил.

    В CvCity.cpp код вставляй в самый конец перед return true;

    Прикрепи архив с СvCity.cpp
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  10. #10
    В недавних модкомпонентах к циве мне попадался один на апрейды зданий, когда строились не вместо, а после. В смысле улучшались в более лучшие. Тут пока решается не совсем такой вопрос, но для дальнейший игры подобные апгрейды зданий могут быть интересными.
    продвинь это сообщение в соцсеть:  
    Я иду меж стен и дворцовых башен,
    Мимо перекрестков веков и лиц,
    Мимо городов, площадей и пашен,
    Познавая мир на холсте страниц.

  11. #11
    идейный враг всяких трансформероB

    Аватар для Snake_B


    Регистрация
    14.09.2007
    Адрес
    Донецк-Камчатка....
    Сообщений
    13,314
    <div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]</div>
    Но решение необходимо не только для первого здания, а для всех построек в городе.

    Весь набор зданий - тех уже есть в оригинальной колонизации, и тех, что я буду вводить в моде - можно будет условно разделить на "городскую" и "крепостную" инфраструктуры. То есть каждой паре зданий прописать одни и те же координаты в CvMainInterface.py, а по ходу игры уже решать, что конкретно строить. Если в окрестностях города нет к примеру табака, то это место можно смело занимать например оружейной мастерской или чем-то другим. Сейчас же это место вообще пустует или если здание все же построено (зачем только?), то ничего не производит.

    Предлагаемые изменения дают как минимум (!) двухкратное увеличение площадей под строительство. А следовательно намного более интересную инфраструктуру можно создать на городском или крепостном экранах.
    [/b]
    эм... линейки должны пересекаться или нет?
    т.е. если мы строим крепость, то мы можем построить в ней только "крепостные" здания или для каждого здания выбор идёт отдельно, независимо от первого здания?

    <div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]</div>
    <div class='quotetop'>Цитата
    1. адм.здания и смотровые башни прописать как национальное чудо и в "CIV4BuildingClassInfos" в тэге "iMaxPlayerInstances = Максимальное количество зданий данного класса для каждого игрока" прописать им -1
    2. в городе разрешить 3 нац.чуда (пример для цивы) [/b]
    Итак, первое предложение - через национальное чудо.

    Если в качестве "чуда" поставить "смотровую башню" или "простейшее административное здание", причем в городе может быть только одно.
    Тут плохо то, что такое "чудо" можно будет иметь только одно на всю колонию. А значит только один город можно развивать как город-крепость. А должно быть, чтобы любое поселение можно было по своему усмотрению строить или как обычный город, или как город-крепость.
    Так что, возможно, это тупиковый путь.
    [/b][/quote]

    в колонизации вообще есть национальные чудеса? тут в низ всё упирается, если они есть как здания, то так делать не стоит, если их нет, но тэги для них прописаны, то можно сделать...

    <div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]</div>
    Тут плохо то, что такое "чудо" можно будет иметь только одно на всю колонию.[/b]
    НЕТ... вот здесь я написал:
    <div class='quotetop'>Цитата</div>
    в "CIV4BuildingClassInfos" в тэге "iMaxPlayerInstances = Максимальное количество зданий данного класса для каждого игрока" прописать им -1[/b]
    это даст неограниченное количество этих зданий у игрока,

    т.е. это утверждение - "такое "чудо" можно будет иметь только одно на всю колонию." НЕ ВЕРНО.

    <div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]</div>
    <div class='quotetop'>Цитата
    п.с. с другой стороны... после постройки первого нац.чуда, можно построить и второе... так что или 1 нац.чудо на город (может в колонизации это можно реализовать?) или питон / сдк...[/b]
    Вот именно это и есть самое плохое, плюс именно это и есть на данный момент в Колонизации без каких-либо изменений в xml, лишь задав одни и те же координаты файле CvMainInterface.py. Одно строится поверх другого.[/b][/quote]

    это зависит от того есть ли вообще в колонизации национальные чудеса, если есть, то не получится... потому что тогда нельзя делать одно нац.чудо на город....

    <div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]</div>
    Но как обойти проблему первого здания я в принципе решил.
    [/b]
    и как?
    продвинь это сообщение в соцсеть:  

  12. #12
    <div class='quotetop'>Цитата(NeseryozniyVET * 29.4.2010, 0:47) [snapback]334595[/snapback]</div>
    Я перепутал CvGlobals с CvInfos.
    Искать CvBuildingInfo надо в CvInfos.cpp и CvInfos.h. Перечитай предидущий пост, я его исправил.

    В CvCity.cpp код вставляй в самый конец перед return true;

    Прикрепи архив с СvCity.cpp
    [/b]
    Архив с СvCity.cpp и СvCity.h тут. [attachmentid=6537]

    <div class='quotetop'>Цитата(Хальк Юсдаль * 29.4.2010, 1:05) [snapback]334596[/snapback]</div>
    В недавних модкомпонентах к циве мне попадался один на апрейды зданий, когда строились не вместо, а после. В смысле улучшались в более лучшие. Тут пока решается не совсем такой вопрос, но для дальнейший игры подобные апгрейды зданий могут быть интересными.
    [/b]
    Все верно. Как раз этот момент особых проблем не вызывает. Тут можно просто обойтись элементарным требование: апгрейд здания типа А требует наличия в городе простейшего здания типа А. Я такое уже делал в намного более сложных комбинациях. Все выполняется простым редактированием одного единственного CIV4BuildingInfos.xml файла. Здесь же задачка посложнее. Надо запретить строительство второго здания, если на этом месте в городе уже построено первое.
    продвинь это сообщение в соцсеть:  

  13. #13
    Все, исправил ошибки, вот готовый код.[code]
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  14. #14
    <div class='quotetop'>Цитата(NeseryozniyVET * 29.4.2010, 16:01) [snapback]334676[/snapback]</div>[quote]
    Все, исправил ошибки, вот готовый код.[code]
    продвинь это сообщение в соцсеть:  

  15. #15
    <div class='quotetop'>Цитата</div>
    Все верно. Как раз этот момент особых проблем не вызывает. Тут можно просто обойтись элементарным требование: апгрейд здания типа А требует наличия в городе простейшего здания типа А. Я такое уже делал в намного более сложных комбинациях. Все выполняется простым редактированием одного единственного CIV4BuildingInfos.xml файла. Здесь же задачка посложнее. Надо запретить строительство второго здания, если на этом месте в городе уже построено первое.[/b]
    Тогда уже я чего-то не понимаю, ведь если здание на том месте не построено, на другом его уже не построишь, так вроде должно быть?
    Тогда почему бы не модифицировать уже имеющиеся условия постройки, так чтобы нельзя было построить здание B, если уже имеется простейшее здание типа А? Ну и вынести это в CIV4BuildingInfos.xml ещё одним тегом.
    продвинь это сообщение в соцсеть:  
    Я иду меж стен и дворцовых башен,
    Мимо перекрестков веков и лиц,
    Мимо городов, площадей и пашен,
    Познавая мир на холсте страниц.

  16. #16
    Итак, поехали.
    <div class='quotetop'>Цитата</div>
    В файлах CIV4BuildingInfos.xml и CIV4BuildingsSchema.xml создай новый тэг iConstructType под тэгом iSpecialBuildingPriority. Зделай все по аналогии с iSpecialBuildingPriority.[/b]
    Смотрим как прописан тэг SpecialBuildingPriority.

    Запускаем Search "SpecialBuildingPriority" (16 hits in 6 files)
    <div class='quotetop'>Цитата</div>
    1.CvGameCoreDLL\CvCity.cpp (2 hits)
    Line 5188: if (kBuilding.getSpecialBuildingPriority() < kNextBuilding.getSpecialBuildingPriority())
    Line 5188: if (kBuilding.getSpecialBuildingPriority() < kNextBuilding.getSpecialBuildingPriority())

    2. CvGameCoreDLL\CvCityAI.cpp (1 hits)
    Line 1180: int iValue = kLoopBuilding.getSpecialBuildingPriority();

    3. CvGameCoreDLL\CvGameTextMgr.cpp (2 hits)
    Line 4732: if (kBuilding.getSpecialBuildingPriority() > kNextBuilding.getSpecialBuildingPriority())
    Line 4732: if (kBuilding.getSpecialBuildingPriority() > kNextBuilding.getSpecialBuildingPriority())

    4. CvGameCoreDLL\CvInfos.cpp (7 hits)
    Line 4090: m_iSpecialBuildingPriority(0),
    Line 4261: int CvBuildingInfo::getSpecialBuildingPriority() const
    Line 4263: return m_iSpecialBuildingPriority;
    Line 4488: stream->Read(&m_iSpecialBuildingPriority);
    Line 4573: stream->Write(m_iSpecialBuildingPriority);
    Line 4653: pXML->GetChildXmlValByName(&m_iSpecialBuildingPriority, "iSpecialBuildingPriority");
    Line 4653: pXML->GetChildXmlValByName(&m_iSpecialBuildingPriority, "iSpecialBuildingPriority");

    5. CvGameCoreDLL\CvInfos.h (2 hits)
    Line 2620: DllExport int getSpecialBuildingPriority() const;
    Line 3223: int m_iSpecialBuildingPriority;

    6. CvGameCoreDLL\CyInfoInterface1.cpp (2 hits)
    Line 258: .def("getSpecialBuildingPriority", &CvBuildingInfo::getSpecialBuildingPriority, "int ()")
    Line 258: .def("getSpecialBuildingPriority", &CvBuildingInfo::getSpecialBuildingPriority, "int ()")[/b]
    По аналогии с iSpecialBuildingPriority прописываем iConstructType. Нумерация файлов сохранена.

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

  17. #17
    Во-первых, изменения надо делать только в трех файлах SDK: CvInfos.h CvInfos.cpp и CvCity.cpp. В остальных файлах изменения надо удалить.
    Во-вторых, замени в указаных строчках (там где ошибки) getSpecialBuilding() на getSpecialBuildingType()
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  18. #18
    <div class='quotetop'>Цитата(NeseryozniyVET * 30.4.2010, 0:50) [snapback]334728[/snapback]</div>
    Во-первых, изменения надо делать только в трех файлах SDK: CvInfos.h CvInfos.cpp и CvCity.cpp. В остальных файлах изменения надо удалить.
    Во-вторых, замени в указаных строчках (там где ошибки) getSpecialBuilding() на getSpecialBuildingType()
    [/b]
    Спасибо, попробую этот вариант...

    Поскольку возникли вопросы, то объясняю основную идею подробнее.

    Исходные данные.

    1. Расположение всех зданий в городе строго привязано к определенным местам.
    2. На каждом месте может быть построено только одно здание.
    3. Если это здание не построено, то данное место остается пустым (Пример: нет нужного ресурса, поэтому нет смысла строить здание. Как вариант: город на острове из одной клетки, вокруг только вода. Строить здания по производству сигар, рома и т.д. бессмысленно, ресурсов все равно нет).
    4. Возможности расположить здания плотнее друг к другу путем уменьшения их размеров на экране и пр. крайне ограничены. Выигрыш дает лишь 25% увеличение количество построек, да и то за счет ухудшения графики.

    Предлагаемый вариант решения:

    1. Введение четкой специализации городов: обычный город, город-крепость, и т.д. Вариантов может быть масса в зависимости от выбранной эпохи и воображения игрока. Можно даже город-курорт строить по типу Тропико.
    2. На каждой клетке города можно строить лишь одно из зданий, но выбирать можно из нескольких вариантов. Для этого нескольким зданиям задаются одни и те же координаты на экране. Но построив первое здание, другого уже на этом же месте построить нельзя.
    3. Проблема пустых (незанятых постройками) мест в городе решается, поскольку строить можно то, что необходимо исходя из специализации города, доступных ресурсов и т.д.
    4. По этой же причине отпадает и проблемы с количеством зданий и постройкой новых зданий.

    Собственно для этого и ведется поиск решения, как на одном месте в городе строить лишь одно из нескольких возможных зданий, после возведения которого дальнейшее строительство именно на этом месте чего-то иного было бы невозможно. Построенное здание можно лишь улучшать.

    <div class='quotetop'>Цитата(Snake_B * 29.4.2010, 12:56) [snapback]334646[/snapback]</div>
    <div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]
    Но решение необходимо не только для первого здания, а для всех построек в городе.

    Весь набор зданий - тех уже есть в оригинальной колонизации, и тех, что я буду вводить в моде - можно будет условно разделить на "городскую" и "крепостную" инфраструктуры. То есть каждой паре зданий прописать одни и те же координаты в CvMainInterface.py, а по ходу игры уже решать, что конкретно строить. Если в окрестностях города нет к примеру табака, то это место можно смело занимать например оружейной мастерской или чем-то другим. Сейчас же это место вообще пустует или если здание все же построено (зачем только?), то ничего не производит.

    Предлагаемые изменения дают как минимум (!) двухкратное увеличение площадей под строительство. А следовательно намного более интересную инфраструктуру можно создать на городском или крепостном экранах.[/b]
    эм... линейки должны пересекаться или нет?
    т.е. если мы строим крепость, то мы можем построить в ней только "крепостные" здания или для каждого здания выбор идёт отдельно, независимо от первого здания?[/b][/quote]
    - Линейки пересекаться могут лишь по второстепенным зданиям, типа кузницы и др. Основное направление развития города определяется первым специализированным зданием (либо административное, либо военное, либо религиозное, если строится религиозный центр).
    - Тут зависит как прописать координаты. В принципе выбор зданий должен быть одинаков для всех типов поселений. Но вполне разумно вводить ограничения. К примеру если это город-крепость, по супер-церковь там строить наверное нет смысла. Достаточно часовни. А вот вокруг города-монастыря с супер-церковью в центре крепостных стен быть не должно.

    <div class='quotetop'>Цитата(Snake_B * 29.4.2010, 12:56) [snapback]334646[/snapback]</div>
    в колонизации вообще есть национальные чудеса? тут в низ всё упирается, если они есть как здания, то так делать не стоит, если их нет, но тэги для них прописаны, то можно сделать...[/b]
    Я держу на заметке твое предложение о национальных чудесах. Их в Колонизации нет. Если не получится тем путем, как идем сейчас, то можно попробовать решить проблему через чудеса. Их, кстати и независимо было бы интересно ввести в игру. Нужно лишь подумать какие именно, в каком виде и что конкретно они могли бы дать. С другой стороны эти же Дворец генерал-губернатора, Морскую Академию или Национальный Банк можно вполне построить по существующим линейкам зданий. Введения нац.чудес тут не требуется.

    <div class='quotetop'>Цитата(Snake_B * 29.4.2010, 12:56) [snapback]334646[/snapback]</div>
    <div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]
    Но как обойти проблему первого здания я в принципе решил.
    [/b]
    и как?
    [/b][/quote]
    Высадка колонистов происходит на пустой берег. На следующий ход идет закладка поселения. Единственным зданием в котором будет к примеру "палатка". Затем несколько вариантов развития, где для строительства простейшего административного здания или простейшей башки нужно наличие этой самой "палатки". Если вместо нее строится простейшее административное здание, то далее развитие идет по обычной схеме города. Если вместо палатки строится простейшая башня, то развитие идет по линии города-крепости. То есть как пройти начальную точку в принципе понятно. Осталось сделать второй шаг, а именно ввести запрет на многократное строительство на одном месте многих зданий.

    <div class='quotetop'>Цитата(Хальк Юсдаль * 29.4.2010, 18:08) [snapback]334690[/snapback]</div>
    <div class='quotetop'>Цитата
    Все верно. Как раз этот момент особых проблем не вызывает. Тут можно просто обойтись элементарным требование: апгрейд здания типа А требует наличия в городе простейшего здания типа А. Я такое уже делал в намного более сложных комбинациях. Все выполняется простым редактированием одного единственного CIV4BuildingInfos.xml файла. Здесь же задачка посложнее. Надо запретить строительство второго здания, если на этом месте в городе уже построено первое.[/b]
    Тогда уже я чего-то не понимаю, ведь если здание на том месте не построено, на другом его уже не построишь, так вроде должно быть?
    [/b][/quote]
    Да, так.

    <div class='quotetop'>Цитата(Хальк Юсдаль * 29.4.2010, 18:08) [snapback]334690[/snapback]</div>
    Тогда почему бы не модифицировать уже имеющиеся условия постройки, так чтобы нельзя было построить здание B, если уже имеется простейшее здание типа А? Ну и вынести это в CIV4BuildingInfos.xml ещё одним тегом.
    [/b]
    Вот именно это и необходимо сделать. Но этот тэг надо правильно прописать в исходных кодах, чтобы он заработал. Пока же у меня одно здание строится поверх другого. В этом и есть основная загвоздка.


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

  19. #19
    Я заметил ты в CvCity.cpp кроме моего кода еще изменений с новым параметром сделал. Твои изменения ненужны.
    Немного теории. В файле CvInfos.h перечисляются свойства объектов. В файле CvInfos.cpp эти свойства описуются. SpecialBuildingPriority свойство объекта здание которое является целым числом. Наше новое свойство ConstructType тоже целое число, а значит оно описыватся должно также как и SpecialBuildingPriority.
    Во всех остальных файлах идет использование свойств в зависимости от их назначания, а так как назначения у SpecialBuildingPriority и нашего ConstructType разные, то и использоватся они будут совершенно по-разному.
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  20. #20


    <div class='quotetop'>Цитата(NeseryozniyVET * 30.4.2010, 11:03) [snapback]334745[/snapback]</div>
    Я заметил ты в CvCity.cpp кроме моего кода еще изменений с новым параметром сделал. Твои изменения ненужны.
    Немного теории. В файле CvInfos.h перечисляются свойства объектов. В файле CvInfos.cpp эти свойства описуются. SpecialBuildingPriority свойство объекта здание которое является целым числом. Наше новое свойство ConstructType тоже целое число, а значит оно описыватся должно также как и SpecialBuildingPriority.
    Во всех остальных файлах идет использование свойств в зависимости от их назначания, а так как назначения у SpecialBuildingPriority и нашего ConstructType разные, то и использоватся они будут совершенно по-разному.
    [/b]
    Извиняюсь, я напутал с CvCity.cpp файлом, не тот положил в архив. Оригинальный файл, конечно без этой моей вставки.

    Я одновременно пробую пройти двумя путями. Либо через "SecondSpecialBuilding", либо через "ConstructType". Но в обоих случаях пока безуспешно.

    Твой участок кода, естественно единственный в версии, где используется "ConstructType" и после последних изменений он выглядит так:

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

+ Ответить в теме
Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

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

free counters