PDA

Просмотр полной версии : Осваиваем SDK. Установка и компиляция SDK. Вопросы по SDK.



Хальк Юсдаль
04.09.2009, 21:13
Данная статья является частью проекта "Осваиваем SDK" (http://www.civfanatics.ru/forum/index.php?showtopic=3742).

* * * * *

В общем статья о том как редактировать и компилировать SDK, не имея Visual Studio 2003 (Visual C++ 7). Использована, а по большему счету вольно переведена статья (http://forums.civfanatics.com/showthread.php?t=166933) Kael'я в свою очередь основанной на посте DaveMcW. Почти все ссылки и изображения взяты из статьи и ведут на файлы выложенные Kael'ем.


Подготовка.
Первым делом стоит отключить атрибут "Только чтение" для всех файлов SDK. Обычно она уже отключена, но может и потребоваться принудительное отключение.
Выделяем папку CvGameCoreDLL -> Свойства -> Снимаем галочку с "Только чтение"->Выбираем "К этой папке и ко всем вложенным папкам и файлам".

Установка:
1. Скачиваем VC++ Toolkit 2003 (http://kael.civfanatics.net/files/VCToolkitSetup.exe) и устанавливаем его. 31.5 МБ
2. Скачиваем 3 библиотеки и кидаем в C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib. Это msvcrt.lib (http://kael.civfanatics.net/files/msvcrt.lib), msvcrtd.lib (http://kael.civfanatics.net/files/msvcrtd.lib), и msvcprt.lib (http://kael.civfanatics.net/files/msvcprt.lib) (ЗЕРКАЛО: http://www.redforce.civfanatics.ru/sdk/lib.rar).
3. Скачиваем Platform SDK (http://kael.civfanatics.net/files/PSDK-x86.exe). также можно использовать internet explorer, для автоматической установки (http://www.microsoft.com/msdownload/platformsdk/sdkupdate) (рекомендуется). ОСТОРОЖНО она скачивает все нужное ей с инета, у меня папка в итоге заняла 878 МБ. Преимущественно для обладателей анлима.
4. Скачиваем CodeBlocks (http://www.codeblocks.org/) тот что "without compiler" и устанавливаем его.

Настройка
5. При первом запуске CodeBlocks, появиться список компиляторов. Выберите Microsoft Visual C++ Toolkit и щелкните Set As Default. И OK.
6. В CodeBlocks переходите в меню Settings->Compiler. Выбираете закладку "Directories" и добавляете папки компиляторов, в зависимости от того куда вы их установили, лучше ставить по умолчанию.

C:\Program Files\Microsoft Visual C++ Toolkit 2003\inсludе
C:\Program Files\Microsoft Platform SDK\inсludе
(В моем случае Диск:\Program Files\Microsoft Visual C++ Toolkit 2003\inсludе там уже было.)
http://kael.civfanatics.net/files/step6a.JPG
В закладке Directories/Linker добавляете следующие папки.

C:\Program Files\Microsoft Visual C++ Toolkit 2003\Lib
C:\Program Files\Microsoft Platform SDK\Lib
http://kael.civfanatics.net/files/step6b.JPG
7. Открываете в CodeBlocks файл \CvGameCoreDLL\CvGameCoreDLL.vcproj . В появляющихся меню выбираем Microsoft Visual C++ Toolkit 2003, а в следующем меню
также соглашаемся. (OK) (Тут пока не очень понял достаточно лишь Final Release Win32 выбирать, или желательно на всех галочки оставить).
8. Далее меню Project->Build options->Final Release Win32. На закладке "Compiler Flags" снимаем галочку с "Produce debugging symbols [/Zi]". (У меня её там не было, но это все равно почти не помогло -> см далее.)
http://kael.civfanatics.net/files/step8a.JPG
В закладке "Other options", изменяем EHsc на /EHsc, и удаляем /ZI
http://kael.civfanatics.net/files/step8b.JPG
На закладке "Linker" добавляем новую библиотеку, называя её user32. Там же удаляете в linker option "/pdb:Final Release\CvGameCoreDLL.pdb" и "/pdb:Final Debug Win32\CvGameCoreDLL_DEBUG.pdb" Жмете OK.
http://kael.civfanatics.net/files/step8c.JPG
9. Далее удаляем в основном окне программы, Workspace/CvGameCoreDLL/Resources/CvGameCoreDLL.rc - Выбираем "Remove from project".
10. File->Save project. Это создаст CodeBlocks project (.cbp), который можно будет окрыть в будущем.
11. Выбираете Build target -> Final Release Win32. После этого нажимаете значок Build
http://i067.radikal.ru/0909/7a/a99155e2acb9t.jpg (http://radikal.ru/F/i067.radikal.ru/0909/7a/a99155e2acb9.jpg.html)
И в итоге получаете \..\Assets\CvGameCoreDLL.dll ! Уряаа!

NeverMind
19.09.2009, 12:31
Хальк Юсдаль, в очередной раз ты делаешь очень важную работу! :applau2:
По хорошему, перевод данной статьи надо было сделать еще пару лет назад, но ни у кого, в т.ч. и у меня, не доходили до этого руки. Теперь, благодаря тебе, этот существенный пробел ликвидирован! :.V.:

В будущем было бы неплохо добавить пару примеров/заданий для начинающих sdk-моддеров: как увеличить лимит игроков, как увеличить городской радиус и тп.

PS. Выделил в отдельную тему, чтобы сразу бросалась в глаза.

Папа
19.09.2009, 12:41
<div class='quotetop'>Цитата(NeverMind * 19.9.2009, 12:31) 307616</div>

Хальк Юсдаль, в очередной раз ты делаешь очень важную работу! :applau2:
[/b]
А он вообще молодец! :yes:

Хальк Юсдаль
19.09.2009, 20:29
Спасибо. :whistle:

А насчет примеров, их не в первый пост, не хочется править, но добавлю. Например в этот.

Для изменения максимального числа игроков в файле CvDefines.h найти.

[code]#define

Morenn
22.09.2009, 15:28
Добрый день!
В процессе установки, настройки и попыток освоения столкнулся с такой проблемой - "fatal error C1083 - windows.h not found"
Решение нашел тут (http://apolyton.net/forums/showpost.php?p=4389928&postcount=21), но возникла новая проблема - "fatal error LNK1112: module machine type &#39;IA64&#39; conflicts with target machine type &#39;X86&#39;" и вот ее я уже не знаю как решить. Пожалуйста, подскажите!

Хальк Юсдаль
22.09.2009, 16:06
Добрый день.
Могу пока только посоветовать проверить, не было ли пропущенных в процессе установки пунктов. В частности был ли установлен VC++ Toolkit 2003?

Morenn
22.09.2009, 18:15
<div class='quotetop'>Цитата(Хальк Юсдаль * 22.9.2009, 15:06) 307957</div>

Добрый день.
Могу пока только посоветовать проверить, не было ли пропущенных в процессе установки пунктов. В частности был ли установлен VC++ Toolkit 2003?[/b]
Был установлен. К тому же, иначе бы, думаю, я не мог бы его выбрать в списке compiler&#39;ов.

Morenn
23.09.2009, 14:25
Пробую переставить...возможно, что-то где-то криво встало. Не могли бы вы мне подсказать, какую именно версию SDK ставили вы (из предложенного здесь (http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en))?
У меня процессор AMD64x2, раз на него ругаются, может я не то скачал....
Хотя странно, из скачиваемых инсталляторов только PSDK-x86 запускается; PSDK-amd64 и PSDK-ia64 отказываются запускаться, пишут, что к win32 они не имеют отношения....

Хальк Юсдаль
23.09.2009, 15:41
Я скачивал прямо по ссылке, с автозапуском установки.
http://kael.civfanatics.net/files/PSDK-x86.exe
Но у меня процессор старый Celeron. x32 вероятнее всего. Так как Windows XP x86. (Или как там по правильному)

Morenn
23.09.2009, 15:43
<div class='quotetop'>Цитата(Хальк Юсдаль * 23.9.2009, 14:41) 308077</div>

Я скачивал прямо по ссылке, с автозапуском установки.
http://kael.civfanatics.net/files/PSDK-x86.exe
Но у меня процессор старый Celeron. x32 вероятнее всего. Так как Windows XP x86. (Или как там по правильному)
[/b]
Я так же...и Windows XP у меня...странно. Ладно, попробую еще раз!

Gesse
25.09.2009, 16:35
Так очередной глупый вопрос...
Так как с MS Visual Studio 2008 Pro я раньше не работал, да впрочем я не работал вообще с VSками.
Вообщем, можно ли открыть в VS dll файл и как это сделать ?
Просто в питоне можно компилить и декомпилить. Тут же поидее так же это возможно ?
Если есть знающие люди поясните пожалуйста :)

NeseryozniyVET
25.09.2009, 19:26
Вобщето DLL это компонент приложения и прямым способом его менять нельзя (ну если ты супермегавундеркинд то можеш попробовать - любой текстовый редактор подойдет ). VS 2008 это кампилятор, но для цывы он не подходит - нужен VS 2003. Кампилятор может создавать новый DLL из SDK. SDK - это набор файлов написаных на языке С++. Изменения делаются в SDK.

Gesse
25.09.2009, 19:49
Ну насчет файлов С++, VS2008 pro + SP1 нормально работает с файлами цивы...
Почему не подходит то ?
Просто меня волновал вопрос dll, т.к. эта область для меня новая, то мне хотелось бы узнать как можно открывать и редактировать файлы такого типа...

Хальк Юсдаль
26.09.2009, 00:05
<div class='quotetop'>Цитата</div>
Ну насчет файлов С++, VS2008 pro + SP1 нормально работает с файлами цивы...Почему не подходит то ?Просто меня волновал вопрос dll, т.к. эта область для меня новая, то мне хотелось бы узнать как можно открывать и редактировать файлы такого типа...[/b]
Почему именно сказать не могу, мало сам знаю, но бытует мнение, что на VS2005, можно редактировать с шаманством, а VS2008 не подойдет вообще. А основано оно не на пустом месте Так что придется либо 2003 устанавливать, либо методом описанным в этой теме пользоваться.

Gesse
26.09.2009, 00:13
Ну просто реально не пойму в чем проблема, если есть плагины ?
Там же в файлах только текст программ (скрипты по сути), в чем проблема то ?
В компиляции ? В сохранении файлов ?
Епт, да при установке же сразу спрашивает какие модули подключать, там есть VS2003, VS2005, VSTeam...
Поясните в чем особенность, из-за которой можно только 2003 пользоватся ?

NeseryozniyVET
26.09.2009, 01:01
<div class='quotetop'>Цитата(Gesse * 25.9.2009, 23:13) 308505</div>
Поясните в чем особенность, из-за которой можно только 2003 пользоватся ?[/b]В правилах С++ ,в разных версиях они разные. У меня VS 2008 не компилирует SDK, выдает кучу ошибок и предупреждений.

volod
22.01.2010, 18:50
Возникает ошибка:
CvDLLPython.obj:: error LNK2019: unresolved external symbol "void __cdecl boost::throw_exception(class exception const &)" (?throw_exception[на]boost[на][на]YAXABVexception[на][на][на]Z) referenced in function "public: __thiscall boost::detail::shared_count::shared_count<class CyCity *,struct boost::python::converter::shared_ptr_deleter>(class CyCity *,struct boost::python::converter::shared_ptr_deleter)" (??$?0PAVCyCity[на][на]Ushared_ptr_deleter[на]converter[на]python[на]boost[на][на][на]shared_count[на]detail[на]boost[на][на]QAE[на]PAVCyCity[на][на]Ushared_ptr_deleter[на]converter[на]pyth
..\Assets\CvGameCoreDLL.dll:: fatal error LNK1120: 1 unresolved externals
:: === Build finished: 2 errors, 0 warnings ===

Все описанные действия выполнил по шагам. Версии софта скачены с указанных ресурсов, тока кодеблок мой старенький стоит, бьюлд от 9-го июля 2007-го, с всобаченными вх-ми. SDK скачан с зеркала: http://www.3ddownloads.com/Strategy/Civili..._SDK_source.zip (http://www.3ddownloads.com/Strategy/Civilization%204/SDK/Civ4_SDK_source.zip).
Либу user32 взял из стандартной поставки masm32 (больше не было нигде:( ).

Без неё таких ругачки вылазило три штуки, ещё на две функции. С этой либой две прошли, третья вот не хочет чё-то Может дело в версии user32? И где тогда поискать честный вариант библиотечки?

Подскажите, пожалуйста, если кто сталкивался или знает чё делать, чтоб собрать без правки исходников?

С уважением, Волод.

volod
27.01.2010, 10:08
Опа, вопрос снят, всё собралось :)

Если кто вдруг столкнётся с такой проблемой: у меня она решилась установкой кодеблока. Версия, в которой я пытался собрать прежде, не была установлена в системе (в реестр может чё-то нужное пишет, я **) и в ней по дефолту стоял GCC, а мелкомягкий я устанавливал только для сборки конкретного проекта SDK. Скачал инсталлятор, поставил, выбрал мелгомягкий по дефолоту и всё отлично собралось.

С уважением, Волод.

NeseryozniyVET
30.01.2010, 16:52
Для первого раза решил скампилировать DLL из оригинальных файлов SDK. Сделал все по инструкции, полученый DLL вышел на ~1.5 Mb больше оригинального (>6 Mb).
У всех такие большие DLLки получаются?

Хальк Юсдаль
30.01.2010, 19:34
<div class='quotetop'>Цитата</div>
Для первого раза решил скампилировать DLL из оригинальных файлов SDK. Сделал все по инструкции, полученый DLL вышел на ~1.5 Mb больше оригинального (>6 Mb).
У всех такие большие DLLки получаются?[/b]
У меня да. Чтобы размер был как в оригинальном, то стоит поставить галочку на Minimize space, насчет необходимости убирания галочки с Maximize speed не уверен.
http://s005.radikal.ru/i209/1001/62/921992aa139at.jpg (http://radikal.ru/F/s005.radikal.ru/i209/1001/62/921992aa139a.jpg.html)

NeseryozniyVET
30.01.2010, 20:20
А там случайно нету галочки, то то типа "поддержка многопоточности". Чтоб цыва многоядерники эффективно использовала?

Morrolan
20.03.2010, 17:27
<div class='quotetop'>Цитата(Хальк Юсдаль * 4.9.2009, 21:13) 305508</div>

9. Далее удаляем в основном окне программы, Workspace/CvGameCoreDLL/Resources/CvGameCoreDLL.rc - Выбираем "Remove from project".
[/b]
В принципе можно и CvGameCoreDLL.rc скомпилить...
Для этого нужно в папку Bin тулкита закинуть две программки:
[attachmentid=6391] собственно для компиляции ресурсных файлов (из Microsoft Platform SDK for Windows Server 2003 R2) и
[attachmentid=6392] для конвертирования скомпилированного ресурса в COFF формат (из Microsoft Visual Studio 2008 подошёл).

10tacle
04.04.2010, 15:22
пытался скомпилить стандартный длл, пишет что не может открыть файл msvcprtd
поставил все по инструкциям..

проблема устранена. походу криво скачалось.

NeseryozniyVET
04.04.2010, 17:37
<div class='quotetop'>Цитата(Morrolan * 20.3.2010, 17:27) 329378</div>
В принципе можно и CvGameCoreDLL.rc скомпилить...[/b]А для чего он нужен?
И для чего, помимо стандартного ДЛЛ, нужны еще 3 файла, которые находятся с ним в одной папке?

Graf_sot
04.05.2010, 13:19
Доброе.
при попытке скомпилить стандартный длл выдаёт ошибку:
"fatal error C1083: Cannot open inсludе file: &#39;CvEventReporter.h&#39;: No such file or directory"

вопрос снят, у меня его почему-то не было в исходнике.

Али Гарх
04.05.2010, 17:56
<div class='quotetop'>Цитата(Graf_Sot * 4.5.2010, 11:19) 335042</div>
Доброе.
при попытке скомпилить стандартный длл выдаёт ошибку:
"fatal error C1083: Cannot open inсludе file: &#39;CvEventReporter.h&#39;: No such file or directory"

вопрос снят, у меня его почему-то не было в исходнике. [/b]
Не понял. Graf_Sot, ты что ли тоже бот? :shock:

steza
16.07.2010, 12:55
Я так понимаю что Platform SDK для 64-битной системы не существует?

vfilatov
19.07.2010, 17:51
Какая версия SDK является последней и совместимой с последней версией BTS? В сети находится только старый SDK для версии 1.61, выложенный в 2006-м году.

Gromozeka
19.07.2010, 18:02
<div class='quotetop'>Цитата(vfilatov * 19.7.2010, 20:51) 342537</div>

Какая версия SDK является последней и совместимой с последней версией BTS? В сети находится только старый SDK для версии 1.61, выложенный в 2006-м году.
[/b]
SDK находится в папке CvGameCoreDLL в игре

vfilatov
19.07.2010, 18:05
<div class='quotetop'>Цитата(Gromozeka * 19.7.2010, 18:02) 342538</div>

SDK находится в папке CvGameCoreDLL в игре
[/b]
Ааа, спасибо! :)

Cansei
29.07.2013, 15:39
Как компилировать SDK версия два.

Пересказ статьи от Asaf'а (http://forums.civfanatics.com/showthread.php?t=405444), По всем возникающим вопросам просьба вначале перейти по этой ссылке, а уже потом спрашивать здесь.
Эта статья чисто о том как установить необходимое для работы с SDK 4 Цивилизации. Как редактировать сам код смотрите в учебниках по C++ и в статье Xienwolf'а - An Idiots Guide to Editing the DLL (http://forums.civfanatics.com/showthread.php?t=314201). Добавлю от себя, как пересказчика, вот это руководство читать надо обязательно. Во первых вам потребуется архиватор, что это такое сами знаете. Во вторых то что будет дальше, то и во вторых. Ах да, интернет ещё потребуется, но если вы читаете этот текст, у вас он скорее всего и так имеется.

Шаг I. Как мне прострелили голову во Вьетнаме.

Скачиваем и устанавливаем программу Microsoft Visual C++ 2008 Express (http://www.mediafire.com/?464grsqhuidrzbm). Спасибо доброму человеку с ником embryodead, что залил её. Можно пользоваться и версией 2010, то тогда читайте дополнение (http://forums.civfanatics.com/showthread.php?p=11434673#post11434673) к инструкции.
Можно ставить и оффлайн, без закачки программы с интернета, но как это сделать читайте оригинальную статью. По ссылке выше, если что идет онлайн-установщик, хотя сама программа много не весит, так что не обращайте внимания.
P.S. Ах да, совсем забыл. Эта штука имеет триальную версию в 30-ть дней, и чтобы использовать её дальше надо зарегистрироваться, это бесплатно и вроде как неограниченно.

Шаг II. Ехала рефлексия через рекурсию в реинкарнацию.

Скачиваем Microsoft Visual C++ Toolkit 2003 (http://www.mediafire.com/?iyfcfdd8eezh01m) и распаковываем куда вам удобно, главное чтобы не забыли куда и место было надежное, из тех где можно долго держать программы. Файл где-то 5 МБ, распаковывается на ~32 МБ.

Шаг III. Курочка уже скоро.

Скачиваем Windows Platform SDK (http://www.mediafire.com/?ilulm07imz9alnd) и распаковываем её куда удобнее, главное не забыть куда. Файл 10 МБ, распаковывается примерно на 110 МБ.

Шаг IV. Поцык сын Марисы.

Скачать архив с проектом и makefile (http://forums.civfanatics.com/downloads.php?do=file&id=16273), и распаковать его в ту папку которую собираетесь сделать рабочей. Желательно сделать это там куда легко добраться. Распаковка создаст папку CvGameCoreDLL. Например у меня D:\CvGameCoreDLL.

Шаг V. Милый Максим и Британская Империя.

Отредактировать makefile. Открываете его блокнотом и правите. Указываете где у вас что лежит из скачанного ранее, ну и где там сама игра.



#### Paths ####
TOOLKIT=C:\Dev\Microsoft Visual C++ Toolkit 2003
PSDK=C:\Dev\WindowsSDK
CIVINSTALL=D:\games\Civilization IV\Beyond the Sword


А ещё там есть одна строчка, исправив и раскомментив которую, можно включить автокопирование нового dll в папку с вашим модом.



## Uncomment to have newly compiled dlls copied to your mod's Assets directory
#YOURMOD=$(CIVINSTALL)\Mods\MyMod


Шаг VI. Мы не рабы, рабы не мы.

Добавить исходные коды.
Берете архив BTS 3.19 source files (http://forums.civfanatics.com/downloads.php?do=file&id=16274) и распаковываете содержимое в вашу рабочую папку CvGameCoreDLL. Туда где у вас лежит makefile, чтобы все эти файлики .cpp и .h лежали рядом.
Можете также взять их из папки с BTS. Но проще скачать архив выше. Если хотите использовать в качестве основы другой мод, например RevDCM, скопируйте его .cpp и .h файлы в рабочую папку с заменой.

Но помните, если потом вы решите добавить ещё один мод, вам придется вручную совмещать файлы при помощи WinMerge. И да, напоминаю что makefile для RevDCM потребуется немного другой. Вот например мой (https://docs.google.com/file/d/0B-pf8Zg_HJRhZ2tRYW83UXhrMVE/edit?usp=sharing). Если решите делать мод на основе RevDCM проще воспользоваться этим.

Шаг VII. Бессмертный наркоман.

Можете начинать компилировать. Запускаете Microsoft Visual C++ 2008 Express, открываете файл CvGameCoreDLL.sln и выбираете в панельке вверху Release, там ещё Win32 рядом стоит. Если выбрать вместо Release - Debag, будет создана специальная версия dll, которая больше и медлительнее, но которую можно следить прямо во время игры. Как это сделать напишу в следующем посте.

www555
29.07.2013, 17:30
Как это сделать напишу в следующем посте.
Когда следующий пост?:)

Cansei
29.07.2013, 18:49
Когда следующий пост?:)

Когда приду из магазина. :D

www555
29.07.2013, 18:58
Понятно:D:biglol:

www555
29.07.2013, 19:47
У меня есть ещё вопрос. Куда компилируется новый файл dll. Я его так и не нашёл, после того, как скомпилировал.

Cansei
29.07.2013, 21:03
У меня есть ещё вопрос. Куда компилируется новый файл dll. Я его так и не нашёл, после того, как скомпилировал.
Внутри папки CvGameCoreDLL есть папка Release, именно там он и лежит.

Так с обещанием пересказа статьи о дебаггинга я немного погорячился, там моего уровня маловато будет, поэтому перескажу что сам понял и чем уже пользовался. Вчера например несколько багов исправил с функцией, что модифицировал перед этим. Оригинал можно найти в моем пересказе выше, о компиляции. Там следующее сообщение дебаггингу посвящено.

Во первых в VS2008, в свойствах проекта выбираем не Release, а Debug. Ну как на картинке, что я сейчас добавлю.
http://i018.radikal.ru/1307/21/74d25b0a9ba3t.jpg (http://radikal.ru/fp/f3f14c4890d4420797e1b0117a29ea7d)
Вот добавил пример.
И начинаем компилировать. Полученный dll будет больше и медленнее, у меня он занял 16 МБ и лежать в подпапке Debug. Его я поместил в папку Assets моего мода, с заменой, как и обычный dll. Заодно включил в настройках самой цивы одну штуку, это в её файле CivilizationIV.ini что лежит в Документах - My Games\Beyond The Sword.
Это чтобы дампы делались в случае вылета.


; Create a dump file if the application crashes
GenerateCrashDumps = 1
Что с ними делать, есть в этой теме (http://www.civfanatics.ru/threads/7611-%D0%9C%D0%BE%D0%B4-%D0%B2%D1%8B%D0%BB%D0%B5%D1%82%D0%B0%D0%B5%D1%82-%D0%B2-%D0%B2%D0%B8%D0%BD%D0%B4%D1%83-%D0%BD%D0%B0-%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC-%D1%85%D0%BE%D0%B4%D1%83).
Ещё рекомендуется запускать игру в окне, чтобы проще переключаться было.

; Specify whether to play in fullscreen mode 0/1/ask
FullScreen = 0

Далее запускаем свой мод. В VS2008 в меню Debug находим Attach to Process, и в списке запущенных процессов находим Civ4BeyondSword.exe или как уж он там будет. Выбираем его, жмем Attach и переключаемся обратно на игру. Играем до бага, а лучше включаем автоплей ходов этак на 150, сворачиваем циву и занимаемся своими делами. Когда игра вылетит VS2008 сама остановится на функции что привела к вылету и можно будет просмотреть что за переменные виноваты.

После правим свой код, что вызывает ошибки и перекомпилируем. Если вылеты продолжаются, думаем и повторяем.
Ещё в Debug-режиме игра может выдавать всякие FAssertMsg, это специальные проверки в коде, на случай если какие переменные принимают недопустимые значения. Это полезно, но зачастую то, что он выдает можно не трогать, если и так работает, вроде RevDCM и лезть смотреть только если мешает игре.

Вообще вообще этот самый Debug позволяет кучу возможностей, вроде запуска игры прямо в VS2008 для её отладки, или установки в коде специальных breakpoint, которые точки остановки. На которых игра будет сама останавливаться и можно будет просмотреть значение переменных. Но это я опишу после, когда я свой уровень подниму до правильного их использования.

www555
30.07.2013, 12:18
:applau2:Всё понятно. Хорошо, что кто-то занялся изучением SDK. Спасибо за помощь.

cfc-cfr
11.08.2013, 20:37
Как компилировать SDK версия два.

Интересно, но SDK это сложно наверно...

Snake_B
11.08.2013, 20:56
Интересно, но SDK это сложно наверно...

не надо полностью цитировать...

cfc-cfr
11.08.2013, 21:38
не надо полностью цитировать...
понятно, больше не буду

Cansei
14.08.2013, 20:18
Интересно, но SDK это сложно наверно...

Да не особо. Я в июне месяце начал C++ по книжкам изучать, вот и выбрал SDK Цивы, в нем и разобраться нетрудно, и практические навыки есть куда приложить. Для реализации большинства идей достаточно знать лишь основы и прочитать нужные статьи.

www555
14.08.2013, 20:54
Да не особо. Я в июне месяце начал C++ по книжкам изучать, вот и выбрал SDK Цивы, в нем и разобраться нетрудно, и практические навыки есть куда приложить. Для реализации большинства идей достаточно знать лишь основы и прочитать нужные статьи.
Интересно... Значит не сложно:yes:. Но SDK нужно использовать только когда нельзя что-то сделать в xml и python. Значит редко. А если сравнивать SDK и python, то python легче:).

www555
14.08.2013, 20:55
Да не особо. Я в июне месяце начал C++ по книжкам изучать, вот и выбрал SDK Цивы, в нем и разобраться нетрудно, и практические навыки есть куда приложить. Для реализации большинства идей достаточно знать лишь основы и прочитать нужные статьи.
Интересно... Значит не сложно:yes:. Но SDK нужно использовать только когда нельзя что-то сделать в xml и python. Значит редко. А если сравнивать SDK и python, то python легче:).

Cansei
14.08.2013, 23:08
Но SDK нужно использовать только когда нельзя что-то сделать в xml и python. Значит редко.
Вот кстати не соглашусь, с XML то понятно, если можно им обойтись, то ладно. А вот перед использованием python'а у SDK есть целый ряд преимуществ. Сразу скажу с питоном почти не знаком, так что кое-где могу ошибаться.

1. SDK это основа игры, то что меняется там, меняет сам код, а python лишь добавляет свой поверх, а вследствие этого, ну и особенностей питона, SDK получается быстрее. Навороты в SDK требуют куда меньше ресурсов, а то что тебе не нравится можно изменить в корне, а подправлять подпорками. А с производительностью в циве большие проблемы.

2. SDK позволяет научить AI пользоваться твоими придумками, и при желании научить это делать правильно. SDK обеспечивает также такие удобные штуки, как автозаполнение цивилопедии и подсказки во время игры. Кроме того куда меньше проблем, когда реализуешь что-то сложное на уровне SDK.

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

В итоге, Питон используется для интерфейса, да проверки каких-нибудь мелочей. К тому же, если не знаком с программированием вообще, SDK осваивается легче. Единственно, его ещё скомпилировать нужно, но это дело десятка минут и одного нажатия кнопки. Вообще единственная его реальная проблема, он медленнее, а для модов это критично.

www555
15.08.2013, 12:30
1. SDK это основа игры, то что меняется там, меняет сам код, а python лишь добавляет свой поверх, а вследствие этого, ну и особенностей питона, SDK получается быстрее. Навороты в SDK требуют куда меньше ресурсов, а то что тебе не нравится можно изменить в корне, а подправлять подпорками. А с производительностью в циве большие проблемы.

2. SDK позволяет научить AI пользоваться твоими придумками, и при желании научить это делать правильно. SDK обеспечивает также такие удобные штуки, как автозаполнение цивилопедии и подсказки во время игры. Кроме того куда меньше проблем, когда реализуешь что-то сложное на уровне SDK.

3. Самое главное что можно сделать с SDK, это вводить и изменять новые категории и выводить их на XML. Придумав новую прокачку, можно добавить новый тег, и изменив код, забыть про SDK, потому что настраивать её можно будет по старинке, в XML. С Питоном такого, как я понимаю не получится. Он конечно много чего умеет, но лишь то, что ему выделили в SDK.
Я не спорю, что в SDK можно сделать то, что нельзя сделать в python'е. Но есть такие вещи, которые можно сделать и в python'е. А в нём сделать всё легче. Я не знал язык python, но когда посмотрел на него, всё сразу понял. А язык с++ я знал, даже небольшую программу-калькулятор сделал, а в SDK всё равно не разобрался.:yes:

cfc-cfr
15.08.2013, 13:17
Не спорьте, Cansei, www555. Все вы молодцы:) Cansei знает SDK, www555 разбирается в питоне. Но мне лично все ваши инструкции пригодились

www555
15.08.2013, 17:01
Не спорьте, Cansei, www555.
Да мы и не спорим. Просто ему легче что-то делать в SDK, а SDK для меня намного сложнее, чем python.

Все вы молодцы:) Cansei знает SDK, www555 разбирается в питоне. Но мне лично все ваши инструкции пригодились.
Спасибо. А про компиляцию SDK Cansei и мне помог своей инструкцией.:yes:

sweeper
20.08.2013, 12:28
3. Скачиваем Platform SDK (http://kael.civfanatics.net/files/PSDK-x86.exe). также можно использовать internet explorer, для автоматической установки (http://www.microsoft.com/msdownload/platformsdk/sdkupdate) (рекомендуется). ОСТОРОЖНО она скачивает все нужное ей с инета, у меня папка в итоге заняла 878 МБ. Преимущественно для обладателей анлима.Что делать дальше со скачанным Platform SDK?

www555
20.08.2013, 12:46
Что делать дальше со скачанным Platform SDK?
Это из первой инструкции. А лучше посмотрите вторую.:) Первая может и не работать(у меня заработала только вторая инструкция от cansei )

sweeper
20.08.2013, 13:59
Господа, простой случай. Я бы даже сказал, типичный.
Рабочая машина: ноутбук самсунг i5 2.4GHz, RAM=8Gb, Windows7/64
Хочу поставить SDK и прорешать ваши уроки.
Беру инструкцию с http://www.civfanatics.ru/threads/7424-%D0%9E%D1%81%D0%B2%D0%B0%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC-SDK-%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-SDK
Первые два пункта прошел.
Про Platform SDK имею следующую информацию: http://social.msdn.microsoft.com/Forums/vstudio/en-US/a36b4a7a-7744-4d7f-8e23-7f80bf1a44a7/installing-platform-sdk-february-2003-on-windows-7
там советуют поставить виртуальную машину с Windows XP и ставить Platform SDK 2003 на ней.
Я так и сделаю. О результатах доложу. Если есть более прямой путь (не использовать виртмашину) -- ткните пальцем в соответствующий пост, пожалуйста.
Устанавливать VS 2005/2008 на рабочую машину особого смсыла не вижу -- от Халька Юсдаля была информация, что там нужно шаманство как минимум.

www555
20.08.2013, 16:53
Устанавливать VS 2005/2008 на рабочую машину особого смсыла не вижу -- от Халька Юсдаля была информация, что там нужно шаманство как минимум
А у меня всё хорошо с первого раза заработало(по второй инструкции).

www555
20.08.2013, 16:54
Устанавливать VS 2005/2008 на рабочую машину особого смсыла не вижу -- от Халька Юсдаля была информация, что там нужно шаманство как минимум
А у меня всё хорошо с первого раза заработало(по второй инструкции).

sweeper
23.08.2013, 22:07
А у меня всё хорошо с первого раза заработало(по второй инструкции).Вот что удивительно. Сами добавили пробелы в имена файлов, а теперь не знают, что эти пробелы входят в имена файлов.


1> "C:\Program Files (x86)\Microsoft Visual C++ Toolkit 2003\bin\cl.exe" /nologo /MD /O2 /Oy /Oi /G7 /DNDEBUG /DFINAL_RELEASE /Fp"Release\CvGameCoreDLL.pch" /GR /Gy /W3 /EHsc /Gd /Gm- /DWIN32 /D_WINDOWS /D_USRDLL /DCVGAMECOREDLL_EXPORTS /Yu"CvGameCoreDLL.h" /IBoost-1.32.0/include /IPython24/include /I"C:\Program Files (x86)\Microsoft Visual C++ Toolkit 2003/include" /I"D:\WindowsSDK/Include" /I"D:\WindowsSDK/Include/mfc" /I"C:\Program Files (x86)\Sid Meier's Civilization 4 Complete\Beyond the Sword\CvGameCoreDLL\Boost-1.32.0/include" /I"C:\Program Files (x86)\Sid Meier's Civilization 4 Complete\Beyond the Sword\CvGameCoreDLL\Python24/include" /YcCvGameCoreDLL.h /Fo"Release\_precompile.obj" /c _precompile.cpp
1>"C:\Program" не является внутренней или внешней
1>командой, исполняемой программой или пакетным файлом."C:\Program", разумеется, не является командой. Может, конечно, у меня make такой...

D:\CvGameCoreDLL>make --version
GNU Make 3.82
Built for i386-pc-mingw32
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Где лежит штатный make для VS?

UPD1: OK, сам себе и отвечу.
1) на самом деле надо использовать C:\Program Files (x86)\Microsoft Visual Studio 9.0, а make там называется nmake. Обычный gnu make не понимает некоторые конструкции имеющегося make-файла.
2) тем не менее, ничего не изменилось. Продолжает ругаться.

UPD2: Переустановил студию в директорию без пробелов в имени. Строка "TOOLKIT" теперь выглядит так:

TOOLKIT=C:\vs90\VC

sweeper
24.08.2013, 08:02
Вот, собственно, начались те грабли, о существовании которых я подозревал с того момента, как увидел эту тему.


1>CvGameCoreDLL - 36 error(s), 547 warning(s)
А ошибки там двух типов. Есть простые и понятные:

1>CvGame.cpp(1809) : error C2065: 'iK' : undeclared identifier
1>CvGame.cpp(1809) : error C2065: 'iK' : undeclared identifier
1>CvGame.cpp(1809) : error C2065: 'iK' : undeclared identifier
1>CvGame.cpp(1811) : error C2065: 'iK' : undeclared identifier
есть и другие:

1>CvGame.cpp(1815) : error C2228: left of '.getYieldChange' must have class/struct/union
По второму типу ошибок можно сидеть и разбираться. Строка, где это произошло имеет номер 1815:

if (GC.getBonusInfo((BonusTypes)iK).isNormalize())
GC -- это макрос, описанный в CvGlobals.h, и выглядит он как

#define GC CvGlobals::getInstance()
Причем этот макрос неоднократно использовался выше строки 1815. Где-то он дезавуирован. Ну да ладно.

Что я хочу сказать по этому поводу. Программа, выложенная в свободный доступ, имеет незадекларированные переменные. Это сейчас так модно? Ослиный мостик? Всякий, неспособный исправить эту ошибку, не будет мододелом? Или в чем тут прикол? Я не понимаю.

Dynamic
24.08.2013, 08:28
4ка вроде писалась в VS2003, так что 2005 и 2008 могут иметь доп. приколы. Я в свое время с трудом достал уже отходивший VS2003 и даже скомпилировал dll, но на этом мое знакомство с ним и закончилось.

Cansei
24.08.2013, 20:17
Вот, собственно, начались те грабли, о существовании которых я подозревал с того момента, как увидел эту тему.

Что я хочу сказать по этому поводу. Программа, выложенная в свободный доступ, имеет незадекларированные переменные. Это сейчас так модно? Ослиный мостик? Всякий, неспособный исправить эту ошибку, не будет мододелом? Или в чем тут прикол? Я не понимаю.

Честно скажу, делал все как и пересказывал, по вот этой статье с ихфанатиков. http://forums.civfanatics.com/showthread.php?t=405444
Все заработало с первого раза. Ставил также на ноутбуке, где интернета не было, тоже заработало и работает нормально, хотя далеко не сразу сумел установить VC2008 оффлайн через командную строку. По первой инструкции запустить не получалось, поэтому нашел эту.
VC2008 у меня ошибок при компиляции просто так не выдает, только если сам наделаю. Вот если интересно архив с чем я работаю. У меня компилируется спокойно. https://docs.google.com/file/d/0B-pf8Zg_HJRhQTJoT0dDOXg1TXc/edit

www555
24.08.2013, 20:27
Честно скажу, делал все как и пересказывал, по вот этой статье с ихфанатиков. http://forums.civfanatics.com/showthread.php?t=405444
Все заработало с первого раза. Ставил также на ноутбуке, где интернета не было, тоже заработало и работает нормально, хотя далеко не сразу сумел установить VC2008 оффлайн через командную строку. По первой инструкции запустить не получалось, поэтому нашел эту.
VC2008 у меня ошибок при компиляции просто так не выдает, только если сам наделаю. Вот если интересно архив с чем я работаю. У меня компилируется спокойно. https://docs.google.com/file/d/0B-pf8Zg_HJRhQTJoT0dDOXg1TXc/edit
У меня тоже всё работает.

sweeper
25.08.2013, 08:38
Докладываю.

Скачал исходники по ссылке, предоставленной Cansei выше. Все ошибки -- неописанная переменная цикла. Причина: в 2003 M$ не спешил привести свой компилятор в соответствие со стандартом. То есть конструкции вида

for(int iI=0; iI<iIMAX; ++iI) {
// body1
}
for(iI=0; iI<iIMAX; ++iI) {
// body2
}Версией компилятора 2003 года преспокойно транслировались, первое объявление переменной цикла внутри for становилось видимым снаружи.

sweeper
06.09.2013, 08:39
Докладываю еще раз.
Поставил виртмашину со зверем. Поставил там студию 2003 года. Собирается из исходников по ссылке http://forums.civfanatics.com/downloads.php?do=file&id=16274
Из исходников, которые идут вместе с Civ4 от 1С, не собирается.
Собранная DLL вроде даже работает. Не знаю, как проще всего проверить, что работает именно данная DLL.

К сожалению, там всё тормозит, и не хватает привычного окружения. Поэтому я выполнил следующие мероприятия:
вытащил из установленных студии и платформы минимальный набор, который позволяет собрать DLL под Windows7.
Когда куплю себе новый десктопный комп, проверю, достаточно ли этого набора без установки VS и PSDK.

sweeper
06.09.2013, 11:06
Кстати о птичках.
У нас есть редактор, способный редактировать XML в этой замечательной '&#ddd;'-шной кодировке? Если нет, я быстренько подпатчу JeffEd

Snake_B
06.09.2013, 11:18
Кстати о птичках.
У нас есть редактор, способный редактировать XML в этой замечательной '&#ddd;'-шной кодировке? Если нет, я быстренько подпатчу JeffEd

ждем)

sweeper
06.09.2013, 13:00
ждем)Увы, не всё так быстро. Во-первых, он называется JuffEd. Во-вторых, он работает через библиотеку Qscintilla2. Скачал и то и другое в исходниках, скомпилировал. Разумеется, не с первого раза. Не запускается. Пишет, что ошибка 0xc0000142. Похоже, у Qt своё собственное представление о том, как правильно собирать DLL. Пойду с горя посмотрю на Code::blocks.

sweeper
10.09.2013, 21:50
ждем)Нешуточная проблема. Как называется эта кодировка? Выделялся ли ей MIBenum ( http://www.iana.org/assignments/character-sets/character-sets.xhtml )?

Snake_B
17.09.2013, 20:55
не знаю что ей там выделяли или нет....
в свое время, экспериментальным путем, получилось вот это:


Function ADecodeRusSymbols(Str, Symbol: string; Base: integer): string;
var i: integer;
begin result:=StrReplace(false, Str, Symbol, '&#'+intToStr(192+Base)+';', i); end;


Function BDecodeRusSymbols(Count: integer): string;
begin
case Count of
0: result:='А'; 1: result:='Б'; 2: result:='В'; 3: result:='Г'; 4: result:='Д'; 5: result:='Е'; 6: result:='Ж'; 7: result:='З'; 8: result:='И'; 9: result:='Й';
10: result:='К'; 11: result:='Л'; 12: result:='М'; 13: result:='Н'; 14: result:='О'; 15: result:='П'; 16: result:='Р'; 17: result:='С'; 18: result:='Т'; 19: result:='У';
20: result:='Ф'; 21: result:='Х'; 22: result:='Ц'; 23: result:='Ч'; 24: result:='Ш'; 25: result:='Щ'; 26: result:='Ъ'; 27: result:='Ы'; 28: result:='Ь'; 29: result:='Э';
30: result:='Ю'; 31: result:='Я'; 32: result:='а'; 33: result:='б'; 34: result:='в'; 35: result:='г'; 36: result:='д'; 37: result:='е'; 38: result:='ж'; 39: result:='з';
40: result:='и'; 41: result:='й'; 42: result:='к'; 43: result:='л'; 44: result:='м'; 45: result:='н'; 46: result:='о'; 47: result:='п'; 48: result:='р'; 49: result:='с';
50: result:='т'; 51: result:='у'; 52: result:='ф'; 53: result:='х'; 54: result:='ц'; 55: result:='ч'; 56: result:='ш'; 57: result:='щ'; 58: result:='ъ'; 59: result:='ы';
60: result:='ь'; 61: result:='э'; 62: result:='ю'; 63: result:='я';
end; end;


procedure DecodeRusSymbols(Memo: Tmemo);
var Cnt, i: integer; begin Cnt:=0; repeat
Memo.Lines.Strings[Cnt]:=StrReplace(false, Memo.Lines.Strings[Cnt], 'Ё', 'Е', i);
Memo.Lines.Strings[Cnt]:=StrReplace(false, Memo.Lines.Strings[Cnt], 'ё', 'е', i);
Memo.Lines.Strings[Cnt]:=StrReplace(false, Memo.Lines.Strings[Cnt], '—', '-', i);
Memo.Lines.Strings[Cnt]:=StrReplace(false, Memo.Lines.Strings[Cnt], '«', Form1.label3.Caption, i);
Memo.Lines.Strings[Cnt]:=StrReplace(false, Memo.Lines.Strings[Cnt], '»', Form1.label3.Caption, i);
Memo.Lines.Strings[Cnt]:=StrReplace(false, Memo.Lines.Strings[Cnt], '"', Form1.label3.Caption, i);
Memo.Lines.Strings[Cnt]:=StrReplace(false, Memo.Lines.Strings[Cnt], '"', Form1.label3.Caption, i);
for i:= 0 to 63 do Memo.Lines.Strings[Cnt]:=ADecodeRusSymbols(Memo.Lines.Strings[Cnt], BDecodeRusSymbols(i), i);
inc(Cnt); until Cnt >= Memo.Lines.Count; end;

raZor_2009
16.02.2014, 12:59
Компилил в точности, как написано по инструкции. При постройке ругается, что отсутствует файл sal.h, хотя я ничего не удалял и не менял. Ставил CodeBlocks несколько раз, но ошибка не устранилась. Что я делаю не так?

Cansei
15.03.2014, 07:18
Я с CodeBlocks летом тоже не разобрался в итоге, так и перешел на Microsoft Visual Studio. Благо что инструкция обновленная на него и рассчитана.

raZor_2009
15.03.2014, 13:14
Визуал тоже не берется за это, прям проклятье какое-то

Cansei
17.03.2014, 14:54
А все по инструкции в теме делал? Ошибки какие-то выдавал? Visual 2008? Или на крайний случай 2010? 2012 в принципе с цивой не поладит.

raZor_2009
20.03.2014, 22:33
2013. Видимо, с цивой он тоже не дружит, верно?

Cansei
24.03.2014, 03:51
2013. Видимо, с цивой он тоже не дружит, верно?
Ага, причем там глубинные несовместимости. Попробуй 2008 и строго по инструкции.

Ramzay1945
03.12.2014, 17:04
Доброго дня форумчанам! Не знаю, почему, но никакие компиляторы на ноуте не работают. наверное из-за пиратской винды.
Не мог бы кто мне помочь, если есть такая возможность?
Есть CvGameCoreDLL, который позволяет использовать функцию artstyle не только для юнитов, но и для зданий, что заметно упрощает работу над разнообразием цивилизаций. Очень полезная вещь, не надо тонны текста вписывать в citylsystem.
Использовал я это в моде "Средневековая Русь". Но столкнулся с проблемой. В моде 26 держав, а этот длл только 18 позволяет разместить на карте. вот эту строку в нём и нужно изменить.
Если кто может помочь, то пришлю dll в лс

mvm70
06.12.2014, 00:08
Если кто может помочь, то пришлю dll
Могу попробовать помочь.
Уточните: нужно сначала разобраться куда вносить изменения или просто скомпилить по готовым исходникам?

Ramzay1945
07.12.2014, 00:33
Могу попробовать помочь.
Уточните: нужно сначала разобраться куда вносить изменения или просто скомпилить по готовым исходникам?

разобраться, куда вносить. насколько я помню, изменить нужно только одно число

Tyddyner
18.08.2015, 23:33
Делаю всё по инструкции первого поста, всё идёт нормально, никаких файлов не ищет, на несовместимость не ругается и всё равно в самом конце вылазит ошибка:
LINK : fatal error LNK1181: cannot open input file 'Release.obj'
Этого файла нет в папке final release win32. Что делать?

Ostap352
19.08.2015, 09:27
Делаю всё по инструкции первого поста, всё идёт нормально, никаких файлов не ищет, на несовместимость не ругается и всё равно в самом конце вылазит ошибка:
LINK : fatal error LNK1181: cannot open input file 'Release.obj'
Этого файла нет в папке final release win32. Что делать?

Скачать и скинуть в папку с игрой.

Tyddyner
19.08.2015, 09:56
Где и что скачать? Этот файл создаётся перед DLL - это конечный результат компилирования перед созданием динамической библиотеки, однако, его там нет. Может быть, надо пошаманить в настройках, например, изменить выходное имя проекта, чтобы он не запрашивал release.obj? Я не разбираюсь, но вряд ли мне надо что-то качать и кидать в папку с игрой.

Не могу придумать никнейм
19.08.2015, 11:35
Делаю всё по инструкции первого поста, всё идёт нормально, никаких файлов не ищет, на несовместимость не ругается и всё равно в самом конце вылазит ошибка:
LINK : fatal error LNK1181: cannot open input file 'Release.obj'
Этого файла нет в папке final release win32. Что делать?
А ты попробуй по инструкции Cansei, начиная со второй страницы.

Tyddyner
19.08.2015, 15:43
А ты попробуй по инструкции Cansei, начиная со второй страницы.

В таком случае у меня начинаются те самые ошибки, которые были описаны sweeper, а их решение через виртуальную машину - это тот уровень камастуры, на который я не хочу тратить время и силы.

Не могу придумать никнейм
22.11.2015, 16:15
Каким образом в SDK можно определить тип открываемой карты?

Не могу придумать никнейм
23.11.2015, 12:27
Так что, никто не знает?

Ostap352
23.11.2015, 15:03
Каким образом в SDK можно определить тип открываемой карты?

В каком смысле открываемой? По сейву?

Не могу придумать никнейм
23.11.2015, 17:28
Нет. Вот ты загружаешь мод и перед началом игры выбираешь карту, на которой собираешься играть. Так вот: мне нужно ее определить, чтобы использовать к ней функции, сделанные под нее же.

Ostap352
23.11.2015, 18:10
Нет. Вот ты загружаешь мод и перед началом игры выбираешь карту, на которой собираешься играть. Так вот: мне нужно ее определить, чтобы использовать к ней функции, сделанные под нее же.

Щас пройдусь поиском по СДК с названием карты. Например pangea.py.

Не могу придумать никнейм
23.11.2015, 19:42
Скажешь о результатах

keppurah
10.01.2016, 15:25
Шаг VII. Бессмертный наркоман.

Можете начинать компилировать. Запускаете Microsoft Visual C++ 2008 Express, открываете файл CvGameCoreDLL.sln и выбираете в панельке вверху Release, там ещё Win32 рядом стоит.

При попытке открыть файл CvGameCoreDLL.sln мода "RFC DoC", файл не открывается по причине:
---------------------------
Visual C ++ 2008 Express Edition
---------------------------
Выбранный файл является решением, но был создан в более новой версии данного приложения, и не может быть открыт.
---------------------------
ОК
---------------------------

Вопрос, возможно уже появился 3й способ скомпилировать модификацию? Или кто-то может поделится советом и свежим дистрибьютивом?

keppurah
10.01.2016, 20:27
Подскажите пожалуйста как изменить и успешно скомпилировать чужой мод RFC DoC с помощью программы Visual Studio 2010 (т.к. автор мода скомпилировал файл CvGameCoreDLL.sln в этой версии)?

keppurah
12.01.2016, 18:31
Как компилировать SDK версия два.

Все в точности выполнил по шагам, единственное что взял файлы .cpp и .h не из мода RevDCM, а из мода RFC DoC.
При попытки скомпилировать длл в конце вышло сообщение об ошибках:
1>NMAKE : warning U4011: 'Release\CvGameCoreDLL.dll' : not all dependents available; target not built
1>NMAKE : warning U4011: 'Release' : not all dependents available; target not built
1>Project : error PRJ0019: A tool returned an error code from "Performing Makefile project actions"
1>Build log was saved at "file://e:\CvGameCoreDLL\Release\BuildLog.htm"
1>CvGameCoreDLL - 9 error(s), 34 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Что нужно сделать, чтобы успешно скомпилировать ддл?

Adreno
06.04.2016, 18:08
Привет. Мои познания в с++ крайне невелики, поэтому извините за глупый вопрос. В общем, дела обстоят следующим образом: существует некий скрипт, который расставляет коэффициенты каждой клетке для наиболее подходящего места, где будет селиться ИИ. Мне необходим перечень клеток, которые имеют нулевой коэффициент и этот перечень мне известен, и является разным для каждой цивилизации. Если идти методом исключения, то есть расставить нулевые коэффициенты по всей карте путем возвращения функцией 0, кроме интересующей меня области, то все работает, но стоит мне сделать это в действие обратнопропорционально, то коэффициентом 0 покрывается вся карта.
Хотелось пойти путем исключения интересующей части массива из огромного массива, вмещающего в себя все клетки и расставить коэффиценты к оставшейся части, но проблема возникла с созданием этого огромного массива: Цива вылетала с критом на первом же ходу, не оставив мне ни единого шанса и так как здесь есть люди, которые кое-как близки с этим, то я обращаюсь сюда.

Для наглядности лучше я оставлю тут часть кода. Сейчас он расставляет нулевой коэффициент в интересующей области для цивилизации Египет, но это действие нужно инвертировать. Функция называется AI_foundValue



int egypt[3][2] = {
{122, 71}, {120, 66}, {120, 61}
};


if(getCivilizationType() == (PlayerTypes)GC.getInfoTypeForString("CIVILIZATION_EGYPT"))
{
for (int i = 0; i < 3; i++)
{
for (int x = egypt[i][0]-1; x < egypt[i][0]+4; x++)
{
for (int y = egypt[i][1]-1; y < egypt[i][1]+4; y++)
{
if(pPlot->getX() == x && pPlot->getY() == y)
{
return 0;
}
}
}
}
}


----------------------------------------------------------------------------------
решено

Adreno
13.04.2016, 18:30
Тут есть те, кто разбирается в sdk?

Adreno
14.04.2016, 16:04
Жаль, очень жаль

Adreno
08.06.2016, 00:29
Где можно отменить культурную аннексию городов не только, если те ранее были завоеваны, но и чтобы совсем не переходили к другой державе? Желательно, чтобы вокруг города оставались 8 клеток, которые должны пренадлежать владельцу этого города

Adreno
21.06.2016, 00:22
Ладно, спрошу другой вопрос: где можно заставить ИИ завоевать определенный город?

Snake_B
21.06.2016, 00:31
Ладно, спрошу другой вопрос

да вряд ли кто-то подскажет.. те, кто работал с сдк/длл разбежались кто куда..

Adreno
21.06.2016, 00:48
Эх, совсем четверка непопулярна стала...

Adreno
21.06.2016, 00:50
У Вас есть свой собственный мод и наверняка Вам приходилось возиться с dll. Или же Вы используете чей-то и без изменений?

Snake_B
21.06.2016, 02:04
У Вас есть свой собственный мод и наверняка Вам приходилось возиться с dll. Или же Вы используете чей-то и без изменений?

не, длл я не менял.. я использую revolutionDCM и Evolution of war.. у первого был одно время доброволец, который его менял под мод (он куда-то пропал года два назад), автор второго был на форуме и вносил правки когда было надо (он пропал года три назад)...

Adreno
21.06.2016, 04:46
Мне бы тоже не помешал доброволец, чтобы объем работы над модом минимизировать, но, учитывая популярность раздела, таковых днем с огнем не сыщешь.

Defender
08.10.2016, 12:02
Где можно отменить культурную аннексию городов не только, если те ранее были завоеваны, но и чтобы совсем не переходили к другой державе?

Так для этого же есть галочка в настройках. Или я что-то не так понял?