PDA

Просмотр полной версии : Идеи для SDK-модов и компонентов модов



swan
14.12.2006, 20:55
В данной теме вы можете писать все свои идеи по модификации цивы, которые нельзя сделать посредством редактора карт или изменения общих параметров в XML файлах (описание которых есть на Модиках (http://modiki.civfanatics.ru))

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

Не надо писать что-то навроде:
"Хочу чтобы у каждой религии был свой уникальный бонус"
Вы должны расписать как и при каких условиях этот бонус должен работать и что он должен конкретно давать.

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

Далее приведен пример идеи и то как выглядит алгоритм её осуществления (этот алгоритм довольно подробный - желательно приводить ваши идеи именно в таком виде или хотябы близком к нему)

=====================================================================


Концепция:
Юниты имеющие высокий уровень опыта "обучают" юниты с малым количеством опыта (добавляют опыта) в городах с бараками.

Алгоритмы:
=====

Глобальное:
=====
1. Добавление к XML наук двух новых параметров:
А. <bAllowXPEducation>
B. <bAllowXPEducationAtWar>

2. Добавление к XML юнитов параметра <iXPEducationGoldCost>

=====
Игровое:
=====
Первичный алгоритм:
=====
1. При фокусировке на юните проверяется наличие True в параметрах <bAllowXPEducation> и <bAllowXPEducationAtWar>
1.1. Если оба параметра False - то skip function (далее просто "skip")
1.2. Если параметр известных наук <bAllowXPEducation> == True,
а параметр <bAllowXPEducationAtWar> == False - то идет проверка дипломатического состояния
на предмет ведения войны.
Если война идет хоть с одной мажоритарной нацией - skip

2. Проверяется параметр <iXPEducationGoldCost> для данного юнита
Если параметр <iXPEducationGoldCost> (с учетом множителя <iConstructPercent> из GameSpeedInfos.xml
для скорости игры) в 10 раз больше, чем наличность в казне - skip
Формула: (<iXPEducationGoldCost> * 10 * <iConstructPercent>)/100

3. Выполняется проверка места нахождения юнита.
2.1. Если юнит не в плоте города - skip
2.2. Если в городе, где находится юнит нет здания казарм - skip

4. Выполняется проверка XP у этого юнита
Если XP < 10 - skip

5. Выполняется проверка наличия других юнитов в данном плоте
Если юнитов не обнаружено - skip

6. Активируется кнопка "Провести военные учения" (для Human-Player&#39;a)

7. Для АИ алгоритм нужно выстраивать по обстоятельствам (смотреть в СДК,
поскольку в патчах периодически он изменяется)

=====
Алгоритм генерации попапа "Доступные для прокачивания отряды":
=====
1. Генерируется попап с заголовком "Отряды, доступные для увеличения опыта" (TXT_KEY_XP_EDUCATION_POPUP_HEAD)
Тип попапа аналогичен типу, который возникает при присоединении великого генерала к юнитам

2. Пролистываются попорядку все юниты в данном плоте
2.1. Если у юнита количество XP больше чем (50% -1) от кол-ва XP у "учителя" -
- то пролистывается следущий юнит (далее просто "cont")
2.2. Если сумма <iXPEducationGoldCost> обоих отрядов больше суммы в казне - cont
2.3. В попап добавляется кнопка с названием юнита, его XP и стоимостью прокачки

3. В попап в конце добавляется кнопка "Отмена"

=====
Алгоритм обработчика события нажатия кнопки "Провести военные учения": (для Human Player&#39;a)
=====
1. Появляется попап (навроде как с присоединением великого генерала к отрядам)
в попапе генерируется список доступных для обучения отрядов по алгоритму генерации попапа
"Доступные для прокачивания отряды".

2. Если нажата кнопка "Отмена" - попап закрывается (продолжение игры)

3. Если нажата одна из кнопок - то выбранному отряду добавляется %n XP
%n == :
%n.3.1. Если XP у отряда меньше чем (1/2 -2) то == 2
%n.3.2. Если XP у отряда больше чем (1/2 -2) то == 1
Формула: обр(XP1 / 2), где "обр" - число, у которого обрезаны цифры после точки (не округленное),
XP1 - XP у "учителя"

4. Movement у отряда "учителя" и обучаемого отряда обнуляется.

5. Из казны снимается стоимость проведения учений.

6. Вываливается игровое сообщение с текстом:
"Отряд %s1 получил %d2 опыта в результате проведенных учений с отрядом %s3"

Конец алгоритма.

PS идея приведенная к алгоритму подобного вида легко осуществима, читаема и соответственно ЛЕГКО ИСПОЛНИМА, поскольку не нужно много импровизировать и выискивать, у чего откуда что должно быть.

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

Termitnik
14.12.2006, 20:56
Что-то следующий пост не отличается особой подробностью :whistle: ;)

swan
14.12.2006, 20:59
<div class='quotetop'>Цитата</div>
Что-то следующий пост не отличается особой подробностью[/b]
Слились из-за таймера промежутка между сообщениями в случае если один юзер пишет их с интервалом менее n минут и между ними нет поста ещё кого нить

Следующий пост (слившийся) начинается с длинного ряда символов ==== и слова "Концепция:"

Termitnik
14.12.2006, 21:16
А как изложить свою идею человеку, крайне далёкому от программирования вообще и от СДК в частности? :whistle: :shy2:

swan
14.12.2006, 21:32
<div class='quotetop'>Цитата</div>
А как изложить свою идею человеку, крайне далёкому от программирования вообще и от СДК в частности? [/b]
Иной раз чётко сформулированное пожелание равнозначно среднему по качеству алгоритму

NeverMind
15.12.2006, 00:44
Хорошая идея. Только не надо, пожалуйста, в одной теме высказывать "все свои идеи" и пожелания по улучшению игры. Для этого же целый подфорум есть. Хорошо сформулировання идея достойна обсуждения в отдельной теме. :umnik:

bay
15.12.2006, 12:33
Меня интересует добавление в Civ4CivilizationInfos.xml - нового параметра время старта цивилизации на карте (№ хода)......
Может такие модификации SDK уже и существуют (в Rhye&#39;s and Fall of Civilization - точно что то похожее используется - правда не в Civ4CivilizationInfos.xml ).......

swan
15.12.2006, 14:57
<div class='quotetop'>Цитата</div>
Меня интересует добавление в Civ4CivilizationInfos.xml - нового параметра время старта цивилизации на карте (№ хода)......
Может такие модификации SDK уже и существуют (в Rhye&#39;s and Fall of Civilization - точно что то похожее используется - правда не в Civ4CivilizationInfos.xml ).......[/b]
Я же прсил в первом посте формулировать свои мысли правильно - т.е. как это должно работать, а не просто хочу чтобы было так.

Для рандомной карты это нереально сделать т.к. все территории к моменту рождения нации могут уже быть заняты (это тебе не RFC, где АИ и строить города не имеет права вне своей территории, пока не будет контролировать её на 100%). В лучшем случае сетлера выкинет на какой нить пустынный островок 1х1 или вообще на клетку океана, а в худшем нарвешься на этот замечательный высеми любимый "отправлять/не отправлять"

NeverMind
15.12.2006, 15:29
Да почему же нереально? Примеры появления наций на рандом-карте в ходе игры уже есть. Привязать это к ходу тоже не представляется проблемой. В "алгоритме") bay, кстати, не сказано, что это должен быть только "поселенец". Если кто то из SDK-моддеров возьмется, то мы увидим эту идею в игре, рано или поздно. :D

<div class='quotetop'>Цитата</div>
это тебе не RFC, где АИ и строить города не имеет права вне своей территории, пока не будет контролировать её на 100%).[/b] Это откуда? Что значит "своя территория"? Можно поподробнее?

bay
15.12.2006, 16:14
<div class='quotetop'>Цитата</div>
В лучшем случае сетлера выкинет на какой нить пустынный островок 1х1 или вообще на клетку океана, а в худшем нарвешься на этот замечательный высеми любимый "отправлять/не отправлять"[/b]

Зачем такие крайности - нужно как раз чтоб появлялся где ему на карте установлено - при появлении на чужой территории это должно приводить к войне автоматически (попробуйте с wordbilder ом) - как в принципе и должно получаться с молодыми нациями

<div class='quotetop'>Цитата</div>
кстати, не сказано, что это должен быть только "поселенец". [/b]

в civ4CivilizationInfos - можно и больше указать:

<FreeUnitClasses>
<FreeUnitClass>
<UnitClassType>UNITCLASS_SETTLER</UnitClassType>
<iFreeUnits>1</iFreeUnits>
</FreeUnitClass>
</FreeUnitClasses>

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

swan
15.12.2006, 17:40
<div class='quotetop'>Цитата</div>
Это откуда? Что значит "своя территория"? Можно поподробнее?[/b]
Ты не замечал, что АИ не водит сетлеров дальше определенных регионов, пока не владеет всей ( или почти всей?) территорией этого региона? А там похоже это и заложено, как я понял, поскольку именно эти регионы прописаны в py-карте

<div class='quotetop'>Цитата</div>
Зачем такие крайности - нужно как раз чтоб появлялся где ему на карте установлено - при появлении на чужой территории это должно приводить к войне автоматически (попробуйте с wordbilder ом) - как в принципе и должно получаться с молодыми нациями[/b]
Попробуй стартануть за Вавилон в моде RFCW и вышибить из европейских избушек хотябы 3 ранних сетлера (там 5 избушек в Европе, 1 избушка на Урале и 2 избушки как идти от старта Персов на север) - у меня однажды 5 сетлеров сами сабой (без Save/Load) появились из избушек и я охренительно отстроился. Так вот, когда пришло время родиться Туркам - их родило на моей территории и тут же вынесло на ближайший квадрат, который не входил ни в чью сферу культурного влияния - всех турков поголовно вынесло на (барабанная дробь) северное побережье озера Иссык-Куль (это порядка 20 клеток от места их родного старта)

swan
15.12.2006, 21:56
Алгоритм скрипта впринципе можно продумать - кстати ничего сложного, особенно учитывая то, что половину алгоритма можно скоммуниздить из RFC(W) уже в виде готового кода. НО проблему выкидывания всех юнитов в неизвестное направление с места родного старта (если это место занято культурой оппонента) решить не удастся потому что:
чтобы начались дипломатические отношения в игре (в том числе право на объявление войны) нужно чтобы хоть один юнит был рядом - но без объявления войны его просто автоматом перебросит за территорию с культурным влиянием и никак раньше, иначе придется писать функцию по которой все нации изначально в войне друг с другом (а это никому не нужно никоим образом - особенно при исследовании территории первым юнитом - второй ещё не успел построиться и тут прибегает дуболом-разведчик и выносит тебя - такое не раз практиковал сам для близких соседей и видел как это практикует АИ)
предварительного объявления войны отельной нацией впринципе быть не может - иначе нация ещё не родившись получит Defeat и тогда либо скрипт рождения станет бесполезным (в случае если рождается нация игрока) либо придется мутить дополнительный скрипт респауна нации АИ

bay
18.12.2006, 17:35
<div class='quotetop'>Цитата</div>
предварительного объявления войны отельной нацией впринципе быть не может - иначе нация ещё не родившись получит Defeat и тогда либо скрипт рождения станет бесполезным (в случае если рождается нация игрока) либо придется мутить дополнительный скрипт респауна нации АИ[/b]

Возможно ли написание скрипта - распознавания нации на територии которой возникает новая нация - и заблоговременное обьявление войны - чтоб не скакать по карте (имитация варварских вторжений)

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

И еще вопрос - чтоб упростить первые завоевания - можно ли молодой циве на определенное число ходов получить бонус в силе (аналог слабости варваров - только наоборот)"этакий пассионарный взрыв :) "

swan
18.12.2006, 19:58
<div class='quotetop'>Цитата</div>
Возможно ли написание скрипта - распознавания нации на територии которой возникает новая нация - и заблоговременное обьявление войны - чтоб не скакать по карте (имитация варварских вторжений)[/b]
Проблема в том, что если стоит война между Team A (уже имеющаяся нация) и Team B (рождающаяся нация) а у Team B нет ни одного юнита - то ей автоматом записывается поражение (у игрока начинается показ реплея - т.е. факически выход из игры. Для АИ впринципе по барабану). А если устанавливать юнитов то тогда можно только обманным путем - т.е. в первый ход рождается тот юнит, которого выбрасывают за территорию (это обязательно должен быть поселенец или можно другой тип но боевого юнита, но тогда должна стоять опция засчитывания поражения только в случае когда погибнет последний боевой юнит или поселенец) а на следующий ход в указанном месте рождаются все остальные юниты - но это только в случае если самого первого не замочат в тот же ход (например стартового дуболома выкинуло в самую гущу вражинскоймотопехоты, двигающийся к границам третьего государства)

<div class='quotetop'>Цитата</div>
Или еще вариант - первоначально ,возникшую нацию обьявлять варваром и уже после определенного числа ходов - обьявить нацией.[/b]
Такой вариант менее глюковат, чем первый, но где гарантия что стартовая позиция нации (а соответственно родящегося там варвара) не является последним городом какой либо нации - тогда фактически Team A получит автоматическое поражение.

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

swan
19.12.2006, 14:49
Only 2Гость
мой предыдущий пост никуда не потерялся, но он не отображался в списке новых сообщений - как будто его не существует - аналогично с темой "Поздравляю форум" в http://forum.civfanatics.ru/index.php?showforum=13

bay
19.12.2006, 17:54
<div class='quotetop'>Цитата</div>
не является последним городом какой либо нации - тогда фактически Team A получит автоматическое поражение.[/b]

Это даже неплохо - как правило такая нация уже является нежизнеспособной - и поражение весьма закономерно. К тому же в этом случае освобождается культурное пространство для сетлера народившейся нации......

General
11.11.2007, 21:08
Итак, мод для реализации тактических сценариев.

Сейчас у юнита есть параметр "Сила".
Вот как описывается бой в FAQ:

<div class='quotetop'>Цитата</div>
Принимается, что у каждого полностью здорового отряда есть 100 хитпоинтов. При сражении двух отрядов между ними проводится несколько раундов боя с вероятностью победы каждого отряда в раунде 50%. Отряд, побеждающий в раунде, отнимает у противника некоторое количество хитпоинтов, пропорциональное отношению сил сражающихся, а сам потерь не несёт; т.е. отряд с бОльшей силой при выигрыше наносит бОльший урон, а при проигрыше несёт меньший. Сила отряда в течение боя не изменяется.[/b]
Если в сражении остаётся 0 хп силы, то юнит гибнет (отступление пока не рассматриваем)

В таких играх, как Виктория, Геттисберг, у отряда есть параметр боевого духа. Когда тот падает, отряд ударяется в бегство, если же бежать некуда - сдаётся.

Реализовать боевой дух для тактических сценариев в циве было бы интересно.

Вариант "В лоб" - добавиь к параметру Сила параметр Боевой Дух (БД), и каждый раунд битвы будет состоять из вычисления потерь силы и потерь БД. И, соответственно, в зависимости от того, что раньше становится нулём, отряд гибнет или отступает.

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

10 вычислить потери хитпоинтов силы юнитов
20 вычислить потери хитпоинтов БД юнитов
30 если сила одного из юнитов <=0, то юнит гибнет, гото 60
40 если БД одного из юнитов <=0, то юнит отступает, гото 60
50 гото 10
60 выход

White Hawk
12.11.2007, 01:26
Есть такая идея (и я её думаю)
Насчёт введения "культуры" или там "расы" для каждого горожанина - ну как в трёшке, но с прибамбасами - от наличия/отсутствия жителей этой "расы" - возможность/невозможность строить каких либо зданий или юнитов...

Распространять влияние через "мигрантов" - 1 населения при постройке/+1 при "подселении", кстати подселять мона и к соперникам...
За расу - очки дипломатии и недовольства при войнах там...

Плюс колонка "расовых" цивиков - типа Ксенофобия, Космополитизм, Панрасизм (ну типа как панславянизм, пангерманизм...), Мультикультурализм...

General
21.06.2010, 13:56
Хотя с отменой стеков в 5ке это и не актуально, но по аналогии с боями в CardWars подумал, можно ли в 4ке реализовать такую систему стекового боя:

У каждого юнита в стеке будет параметр: сколько раз он уже отражал атаку. После передачи хода у всех юнитов этот параметр устанавливается в 0.

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

Таким образом, если 2 колесницы атакуют копьё и топора, то первая почти наверняка гибнет от копья, а вторую уже будет встречать топор, т.к. он отражал атаку 0 раз, а копьё - 1 раз.

Это позволит лучше моделировать одновременность боестолкновений юнитов в стеке.

Павел I
21.06.2010, 14:04
Кстати, тогда можно и линейную тактику применять в боях.
Например:
Сила стека (3 Лин. корабля + 7 Фрегатов) = сила 3 ЛК (+50%, если противник Фрегата) + сила 7 Фрегатов x (3+7)/2
То есть чем больше кораблей, тем больше сила. Но только для фрегатов и ЛК (ну у меня еще мановары есть)