Требуется помощь специалистов!
Игра: Колонизация 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>В данном случае оба здания #Hammers и #Bells могут быть построены на том же месте.BUILDING_DATA[0] = [40, 33, 33, 18] #Bells
BUILDING_DATA[1] = [40, 33, 33, 18] #Hammers[/b]
Самое смешное, что так можно строить! То есть поверх уже существующего здания можно строить второе. На экране города они так и появляются в виде пирога из двух зданий.
Вопрос:
Как сделать, чтобы первое построенное здание полностью исключало возможность строить на этом же самом месте второе здание?
Повторяю, условие: строить надо на одном и том же месте!
Какие есть предложения?
Вопрос непонял.
Если надо чтоб наличие одного здания запрещало постройку другого, то зачем описывать проблемы интерфейса?
Если надо чтоб картинки зданий были в разных местах, то зачем задавать им одинаковые координаты?
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
<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.
Я обращался как-то к французам за исходниками, отказали. Так что остается думать самому. Я уже перепробовал несколько вариантов, но ни в одном из них успеха не достиг. Поэтому сейчас и обращаюсь за помощью к специалистам.
<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 нац.чудо на город (может в колонизации это можно реализовать?) или питон / сдк...
Я вот не помню - под рукой колонизации нет - если там в BuidingInfos реализовано как в обычной циве - то поковыряйтесь на предмет того, как реализованы электростанции в обычной циве - там есть момент "или-или" - т.е. если строишь электростанцию другого типа - то предыдущего типа рушится и на её место ставится новый тип.
<div class='quotetop'>Цитата</div>Согласен.1. прописываете одинаковые координаты (как вы и хотели)... и всё, больше от интерфейса вам ни чего не нужно...[/b]
<div class='quotetop'>Цитата</div>Частично верно. Но как обойти проблему первого здания я в принципе решил. Сегодня вечером опробую идею на игре. Там вообще в СДК лесть не надо, все можно в xml прописать.2. развитие отдельных линеек реализуется вообще как не фиг делать... та линейка которая идёт у города (обычного) требует наличия "адм.здания" (каждое здание города отдельно), линейка крепости требует наличия "смотровой башни"... всё это на сколько я понимаю различия цивы и колонизации делается одинаково... через xml...
3. собственно проблема я так понимаю именно в первом здании.... на сколько я помню в цивилизации в xml постройка одного здания не может запретить постройку другого...[/b]
Но решение необходимо не только для первого здания, а для всех построек в городе.
Весь набор зданий - тех уже есть в оригинальной колонизации, и тех, что я буду вводить в моде - можно будет условно разделить на "городскую" и "крепостную" инфраструктуры. То есть каждой паре зданий прописать одни и те же координаты в CvMainInterface.py, а по ходу игры уже решать, что конкретно строить. Если в окрестностях города нет к примеру табака, то это место можно смело занимать например оружейной мастерской или чем-то другим. Сейчас же это место вообще пустует или если здание все же построено (зачем только?), то ничего не производит.
Предлагаемые изменения дают как минимум (!) двухкратное увеличение площадей под строительство. А следовательно намного более интересную инфраструктуру можно создать на городском или крепостном экранах.
<div class='quotetop'>Цитата</div>Итак, первое предложение - через национальное чудо.1. адм.здания и смотровые башни прописать как национальное чудо и в "CIV4BuildingClassInfos" в тэге "iMaxPlayerInstances = Максимальное количество зданий данного класса для каждого игрока" прописать им -1
2. в городе разрешить 3 нац.чуда (пример для цивы) [/b]
Если в качестве "чуда" поставить "смотровую башню" или "простейшее административное здание", причем в городе может быть только одно.
Тут плохо то, что такое "чудо" можно будет иметь только одно на всю колонию. А значит только один город можно развивать как город-крепость. А должно быть, чтобы любое поселение можно было по своему усмотрению строить или как обычный город, или как город-крепость.
Так что, возможно, это тупиковый путь.
<div class='quotetop'>Цитата</div>Вот именно это и есть самое плохое, плюс именно это и есть на данный момент в Колонизации без каких-либо изменений в xml, лишь задав одни и те же координаты файле CvMainInterface.py. Одно строится поверх другого.п.с. с другой стороны... после постройки первого нац.чуда, можно построить и второе... так что или 1 нац.чудо на город (может в колонизации это можно реализовать?) или питон / сдк...[/b]
NeseryozniyVET правильно сформулировал задачу:
<div class='quotetop'>Цитата</div>В этом смысле второе предложение от swan:... надо чтоб наличие одного здания запрещало постройку другого.[/b]
<div class='quotetop'>Цитата</div>на первый взгляд более перспективно. Но и там тоже есть один крайне неприятный момент, на который я часто нарывался, играя в Цивилизацию. Можно построить тепловую станцию на угле, затем вместо нее построить электростанцию. Тепловая, естественно исчезнет из города. НО! Возможность-то ее строительства останется! То есть ее снова можно построить, а значит возможен замкнутый круг, когда АИ будет тупо строить то, простейшее административное здание, то смотровую башню. И так до бесконечности, полностью остановив развитие колонии.поковыряйтесь на предмет того, как реализованы электростанции в обычной циве - там есть момент "или-или" - т.е. если строишь электростанцию другого типа - то предыдущего типа рушится и на её место ставится новый тип.[/b]
То есть вопрос опять-таки прежний.
Если надо чтоб наличие одного здания запрещало постройку другого. Как это сделать?
Французам в Dawn of New Era 1.33-1.34 это как-то удалось. Вот, что я нарыл на данный момент.
Таг bCTR (CoatTobaccoRum) прописан в CIV4BuildingInfos.xml и Civ4BuildingSchema.xml.
В CIV4BuildingInfos.xml так
[code]
В файлах CIV4BuildingInfos.xml и CIV4BuildingsSchema.xml создай новый тэг iConstructType под тэгом iSpecialBuildingPriority. Зделай все по аналогии с iSpecialBuildingPriority.
Потом зайди в файлы SDK CvInfos.cpp и CvInfos.h. Найди класс CvBuildingInfo и опять для нового тэга зделай все по аналогии с iSpecialBuildingPriority. Затем зайди в файл CvCity.cpp, найди bool CvCity::canConstruct и напиши там
[code]
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
Большое спасибо, NeseryozniyVET, начал пробовать этот вариант. С ходу не получилось, что совершенно не странно. Сейчас буду искать причину.
SpecialBuildingPriority прописан в этих файлах.
<div class='quotetop'>Цитата</div>По-видимому в этих же файлах мне надо и ConstructType прописать, а то CvGlobals.cpp ругается очень нехорошими словами.Search "SpecialBuildingPriority" (16 hits in 6 files)
C:\Program Files\2K Games\Firaxis Games\Sid Meier'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'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'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'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'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'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]
Участок кода в CvCity.cpp, где есть bool CvCity::canConstruct в Колонизации выглядит так:
[spoiler]
[code]bool CvCity::canConstruct(BuildingTypes eBuilding, bool bContinue, bool bTestVisible, bool bIgnoreCost) const
{
Я перепутал CvGlobals с CvInfos.
Искать CvBuildingInfo надо в CvInfos.cpp и CvInfos.h. Перечитай предидущий пост, я его исправил.
В CvCity.cpp код вставляй в самый конец перед return true;
Прикрепи архив с СvCity.cpp
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
В недавних модкомпонентах к циве мне попадался один на апрейды зданий, когда строились не вместо, а после. В смысле улучшались в более лучшие. Тут пока решается не совсем такой вопрос, но для дальнейший игры подобные апгрейды зданий могут быть интересными.
<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'>ЦитатаВот именно это и есть самое плохое, плюс именно это и есть на данный момент в Колонизации без каких-либо изменений в xml, лишь задав одни и те же координаты файле CvMainInterface.py. Одно строится поверх другого.[/b][/quote]п.с. с другой стороны... после постройки первого нац.чуда, можно построить и второе... так что или 1 нац.чудо на город (может в колонизации это можно реализовать?) или питон / сдк...[/b]
это зависит от того есть ли вообще в колонизации национальные чудеса, если есть, то не получится... потому что тогда нельзя делать одно нац.чудо на город....
<div class='quotetop'>Цитата(kabjans * 28.4.2010, 9:37) [snapback]334515[/snapback]</div>и как?Но как обойти проблему первого здания я в принципе решил.
[/b]
<div class='quotetop'>Цитата(NeseryozniyVET * 29.4.2010, 0:47) [snapback]334595[/snapback]</div>Архив с СvCity.cpp и СvCity.h тут. [attachmentid=6537]Я перепутал CvGlobals с CvInfos.
Искать CvBuildingInfo надо в CvInfos.cpp и CvInfos.h. Перечитай предидущий пост, я его исправил.
В CvCity.cpp код вставляй в самый конец перед return true;
Прикрепи архив с СvCity.cpp
[/b]
<div class='quotetop'>Цитата(Хальк Юсдаль * 29.4.2010, 1:05) [snapback]334596[/snapback]</div>Все верно. Как раз этот момент особых проблем не вызывает. Тут можно просто обойтись элементарным требование: апгрейд здания типа А требует наличия в городе простейшего здания типа А. Я такое уже делал в намного более сложных комбинациях. Все выполняется простым редактированием одного единственного CIV4BuildingInfos.xml файла. Здесь же задачка посложнее. Надо запретить строительство второго здания, если на этом месте в городе уже построено первое.В недавних модкомпонентах к циве мне попадался один на апрейды зданий, когда строились не вместо, а после. В смысле улучшались в более лучшие. Тут пока решается не совсем такой вопрос, но для дальнейший игры подобные апгрейды зданий могут быть интересными.
[/b]
Все, исправил ошибки, вот готовый код.[code]
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
<div class='quotetop'>Цитата</div>Тогда уже я чего-то не понимаю, ведь если здание на том месте не построено, на другом его уже не построишь, так вроде должно быть?Все верно. Как раз этот момент особых проблем не вызывает. Тут можно просто обойтись элементарным требование: апгрейд здания типа А требует наличия в городе простейшего здания типа А. Я такое уже делал в намного более сложных комбинациях. Все выполняется простым редактированием одного единственного CIV4BuildingInfos.xml файла. Здесь же задачка посложнее. Надо запретить строительство второго здания, если на этом месте в городе уже построено первое.[/b]
Тогда почему бы не модифицировать уже имеющиеся условия постройки, так чтобы нельзя было построить здание B, если уже имеется простейшее здание типа А? Ну и вынести это в CIV4BuildingInfos.xml ещё одним тегом.
Итак, поехали.
<div class='quotetop'>Цитата</div>Смотрим как прописан тэг SpecialBuildingPriority.В файлах CIV4BuildingInfos.xml и CIV4BuildingsSchema.xml создай новый тэг iConstructType под тэгом iSpecialBuildingPriority. Зделай все по аналогии с iSpecialBuildingPriority.[/b]
Запускаем Search "SpecialBuildingPriority" (16 hits in 6 files)
<div class='quotetop'>Цитата</div>По аналогии с iSpecialBuildingPriority прописываем iConstructType. Нумерация файлов сохранена.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]
1. CvCity.cpp
[code]
Во-первых, изменения надо делать только в трех файлах SDK: CvInfos.h CvInfos.cpp и CvCity.cpp. В остальных файлах изменения надо удалить.
Во-вторых, замени в указаных строчках (там где ошибки) getSpecialBuilding() на getSpecialBuildingType()
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
<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]
Я заметил ты в CvCity.cpp кроме моего кода еще изменений с новым параметром сделал. Твои изменения ненужны.
Немного теории. В файле CvInfos.h перечисляются свойства объектов. В файле CvInfos.cpp эти свойства описуются. SpecialBuildingPriority свойство объекта здание которое является целым числом. Наше новое свойство ConstructType тоже целое число, а значит оно описыватся должно также как и SpecialBuildingPriority.
Во всех остальных файлах идет использование свойств в зависимости от их назначания, а так как назначения у SpecialBuildingPriority и нашего ConstructType разные, то и использоватся они будут совершенно по-разному.
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
<div class='quotetop'>Цитата(NeseryozniyVET * 30.4.2010, 11:03) [snapback]334745[/snapback]</div>Извиняюсь, я напутал с CvCity.cpp файлом, не тот положил в архив. Оригинальный файл, конечно без этой моей вставки.Я заметил ты в CvCity.cpp кроме моего кода еще изменений с новым параметром сделал. Твои изменения ненужны.
Немного теории. В файле CvInfos.h перечисляются свойства объектов. В файле CvInfos.cpp эти свойства описуются. SpecialBuildingPriority свойство объекта здание которое является целым числом. Наше новое свойство ConstructType тоже целое число, а значит оно описыватся должно также как и SpecialBuildingPriority.
Во всех остальных файлах идет использование свойств в зависимости от их назначания, а так как назначения у SpecialBuildingPriority и нашего ConstructType разные, то и использоватся они будут совершенно по-разному.
[/b]
Я одновременно пробую пройти двумя путями. Либо через "SecondSpecialBuilding", либо через "ConstructType". Но в обоих случаях пока безуспешно.
Твой участок кода, естественно единственный в версии, где используется "ConstructType" и после последних изменений он выглядит так:
[code]//addon