PDA

Просмотр полной версии : [SDK] Как помочь полярным городам



Slow1112
10.08.2006, 14:57
Здравствуйте. Я в civ4 новичок. Хочу узнать у профессионалов, реализуема ли принципиально следующее изменение (дополнение):

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

В общем, это принципиально возможно (SDK, Python, XML) или нет?

vpadlo
10.08.2006, 15:12
<div class='quotetop'>Цитата(Slow1112 * 10.8.2006, 13:57) 115089</div>

Здравствуйте. Я в civ4 новичок. Хочу узнать у профессионалов, реализуема ли принципиально следующее изменение (дополнение):

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

В общем, это принципиально возможно (SDK, Python, XML) или нет?
[/b]
Да, но на каком минимум уровне, не скажу. Помойму этот вопрос уже где-то на форуме обсуждался. Поищи.

Blacksun
10.08.2006, 18:23
В принципе с помощью СДК возможно многое - но передавать пищу из города - это надо делать отдельное окно (а город и так весь забит окнами). Я хотел реализовать это немного по другому. Есть много тайлов - не принадлежащих городу. Если туда поставить (ну не знаю кого, крестьянина что ли или рабочего) и с помощью него передавать продукцию с тайла в город (город мона указать конкретно какой), то енто потянет. А вообще такая реализация идет на уровне СДК - Питон. В моем моде - для полярных городов сделан терраформ (преобразование местности).

skylined
10.08.2006, 19:57
<div class='quotetop'>Цитата</div>
этот вопрос уже где-то на форуме обсуждался[/b]
тут вроде
http://forum.civfanatics.ru/index.php?showtopic=3787

Slow1112
11.08.2006, 16:51
0

Рабочие, собирающие пищу, терраформинг, здания, дающие +XXX еды - это всё здорово, НО это - нагромождение новых сущностей, концепций. Просто хочется перераспределять ресурсы в игре между городами: чтобы при обсчёте хода от одного города xxx пищи отнималось и к другому прибавлялось.
Сначала хотел сделать это через процессы - к трём существующим добавить ещё один. Но процессы оказались заточенными под конвертирование щитов в одном городе....

Тут надо серьёзно в SDK копаться. Но пока даже не понятно, придётся ли модифицировать сущность "процесс", или вообще что-то новое создавать по типу процесса.
Для этого надо, в свою очередь, хотя бы даталогическую модель SDK восстановить 8-). В общем - задача более чем серьёзная..... Хочу ей заняться.

А по поводу отдельного окна - вовсе не объязательно. Также как, например, Research добавляем городу задание, при этом спрашиваем - куда пищу отдавать. Вот так в общих чертах хочеЦЦа...

Blacksun
11.08.2006, 18:36
Вопрос первый - Ты программер ? (от ентого будем толкаца....)))))) (Тогда ты не будешь видеть - куды что идееет - если через Research...) Если нуна помощь - (зайди в личку - там - аська)

Slow1112
11.08.2006, 20:21
Так-то я программер. Специальность - ВМКСС - уже закончил. В питоне разбираюсь. В С++ - не очень.... Помощь наверняка потребуется от более продвинутых.

Blacksun
11.08.2006, 23:19
Посмотри..... (http://civilization4.net/files/modding/PythonAPI_v160/)Помогу - всем, чем смогу... (кстати все СДК, или почти все) сделано - для Питона....

Slow1112
12.08.2006, 15:25
Буду здесь писать размышления по поводу реализации внутреннего перемешения пищи.
Для начала нужно найти место, где расчитывается уровень производства пищи. Порядок вызова функций такой (все в классе CvCity): doTurn -> doGrowth -> foodDifference.

[code]
===========================
int CvCity::foodDifference(bool bBottom)
{

Blacksun
12.08.2006, 21:38
Slow1112 - у меня к тебе просьба. Отредактируй, пожалуйста свое сообщение. В верху редактора есть две кнопочки: 1. Сделать цитатой; 2. Код. Так вот ты нажми 2 кнопочку и помести весь код между "[сode][/сode]". (здесь указан тег с подмененной буквой на кириллическую - поэтому он и показывается как тег)

И второе - просьба указывать файл - откуда ты это взял (легче искать будет) Заранее благодарен!

А теперь по поводу. Если мы для города введем четыре переменные:


int m_aiSetFood;
int m_aiGetFood;
CvCity* m_pgsetCity;
CvCity* m_pggetCity;


(эти перем указать в классе CvCity - как protected; соответственно обработать их). Написать для них ф-ции. (подробно не буду, до дела дойдет все сделаем)
То не придется переупорядовачивать города. Просто в функции надо добавить и вычесть эти переменные (которые int)



iDifference = (getYieldRate(YIELD_FOOD) - foodConsumption()) - getSetFood() + getGetFood();


И все равно - в интерфейсе города надо будет указать откуда пришло (или куда ушло) продовольствие... Сделать это можно будет в окне торговли.

Slow1112
13.08.2006, 10:04
По поводу защищённых переменных int-типа - согласен. Не пойму зачем указатели?
Разве предполагается импортировать/экспортировать пищу только в/из одного города?
Надо детально обсудить СХЕМУ передачи по следующим пунктам:
1. можно ли одновременно экспортировать и импортировать? (мой вариант - нет, иначе бессмыслица получается)
2. модно ли одновременно (импортировать из)/(экспортировать в) несколько городов? (множественный импорт - да, экспорт - нет)
Если не нравится - предложите другую схему.

В моей схеме два указателя нас не спасут от переупорядочивания, поскольку doGrowth города-импортёра
должна быть обработана только после того, как сработают все doProduction городов-экспортёров.

Про интерфейс: надо будет сделать выбор из списка городов - куда экспортировать (для простоты реализации предлагаю
сделать возможным создавать только экспорт, а импорт в целевом городе - добавлять автоматически);
ну и все соответствующие изменения в отображении количества хлеба. [до всего этого ещё очень далеко]

Про процессы. Насколько я понял, обработка их осуществляется здесь (CvCity.cpp):
[code]
void CvCity::processProcess(ProcessTypes eProcess, int iChange)
{

swan
13.08.2006, 10:16
Originally posted by Slow1112
(я так понимаю сейчас надо сделать примерный план действий, а для этого - обрисовать круг решаемых задач;
вот и обрисовываю, не вдаваясь в детали)
Blacksun тоже обрисовывал мосты и писал код не вдаваясь в некоторые мелкие детали - я же ему говорил что юниты АИ не научены, что импровмент может расцениваться как дорога или торговый путь - поэтому по завершении разработки выяснилось что только юниты чловека бродят по мостам, а юниты АИ нет и пришлось ковыряться ещё - учить этому АИ - поэтому желательно хотябы оценивать возможность различных "подводных камней"

Blacksun
13.08.2006, 11:20
Не надо ошибаться насчет процессов:
<div class='quotetop'>Цитата</div>
CvInfos.cpp(14308):CvProcessInfo::CvProcessInfo() :[/b]

Если это описано в XML - то практически всегда это является классом (Искать моно начинать в CvInfo.cpp). Кстати что ты показал - это торговые пути для города (и окошко есть в экране города) И там показано сколько денег получается при торговле. Только теперь это будет не торговля, а передача пищи, поэтому придется написать свои ф-ции и постараться, чтобы они обрабатывались...(будет вместо символа денег - символ продовольствия...)

Slow1112
13.08.2006, 12:10
Да, насчёт класса ошибся. Только все объекты инфо-классов формируются на стадии загрузки игры (их поля считываются из XML) и в процессе не меняются. Нам же надо задавать у объекта характеристики динамически, в процессе игры. Может быть удастся эти данные запихать в структуру OrderData (CvStructs.h) если делать через процессы.


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

Что касается AI, то его можно будет потом запрограммировать, сначала саму фичу надо сделать.
Как тока VS 2003 найду буду экспериментировать.... 8-)

Blacksun
13.08.2006, 15:22
Эти переменные мона менять, надо только функцию написать. А так, если комп не сможет учитывать твои процессы передачи пищи, то города, которые ее передают, начнут голодать... Так что все в СДК - надо делать на своем месте...