Начну с описания простейших действий в питоне для CivIV (vanilla & Warlords)
1. Каждый файл скрипта, чтобы он мог быть прочитан цивой должен быть прописан по специально отведенным для этого местам.
Место #1 - первичный вызов.
В файле %CivDir%\Mods\%ModDir%\Assets\Python\EntryPoints\CvEventInterface.py в самом начале прописываются строки:
после строки "import CvUtil" вписывается строка означающая главный файл обработчика событий - например он у наз называется CvModEventManager.py, соответственно прописываемая строка у нас будет выглядеть так:Код:import CvUtil from CvPythonExtensions import *
команда import означает, что файл на который она указывает должен полностью обрабатываться вместе с данным файломКод:import CvModEventManager
Примечание если ваш файл обработчика событий называется CvEventManager.py то первичный вызов можно не использовать
Место #2 - вторичные вызовы.
в файле обработчика событий (по предыдущему примеру он у нас называется CvModEventManager.py и находится в папке %CivDir%\Mods\%ModDir%\Assets\Python в свою очередь могут быть прописаны все подключаемые модули. Например у нас есть 2 собственных модуля, которые нужно подключить:
1. Модуль где прописано, что при взятии определенного города определенной нацией он будет переименован - например он будет находиться в файле CapturedCityRen.py
2. Модуль, где прописано, что в определенном турне на карте появится определенный ресурс - например он находиться в файле SetResources.py
Соответственно в начале файла нам следует прописать их вызовы для обработки - это будет выглядеть так
Далее в теме пойдут различные варианты простых и не очень скриптов с пояснениями и способами их использования.Код:import CapturedCityRen import SetResources
Желающие могут добавлять свои варианты и способы.
ЗЫ убедительная просьба указывать название способа сверху поста (например "добавление ресурса на карту")
Эвент: Добавление ресурса на карту в процессе игры. Пример возникновения эвента относительно номера игрового хода
Для добавления ресурса нам потребуется импортировать данные из: CvPythonExtensions (импорт данных), import CvUtil, PyHelpers, Popup и pickle - соответственно начало модуля будет выглядеть так:
Далее идет инициализации глобальных переменных gc и PyPlayer:Код:from CvPythonExtensions import * import CvUtil import PyHelpers import Popup import pickle
примечание: Далее подробных кодов приводиться не будет - просто надо делать по аналогии с этими кодамиКод:gc = CyGlobalContext() PyPlayer = PyHelpers.PyPlayer
Действие по добавлению ресурса очень простое:
<div class='quotetop'>Цитата</div>Здесь на плот c координатами x_coord, y_coord устанавливается бонус bonus_typegc.getMap().plot(int x_coord, int y_coord).setBonusType(int bonus_type)
[/b]
int x_coord и int y_coord могут иметь значения координаты карты не превышающие её размера мо осям x,y (обратите внимание что все отсчеты начинаются с нуля - т.е. первый плот первого столбца будет иметь координату 0, 0, а десятый плот второго столбца координату 1, 9)
int bonus_type берет значения из CIV4BonusInfos.xml - число означает порядковый номер описанного там бонуса (отсчет с нуля) - например 0 == Алюминий, 6 == нефть
Пример использования данного события относительно даты:
[code]
from CvPythonExtensions import *
import CvUtil
import PyHelpers
import Popup
import pickle
# globals
gc = CyGlobalContext()
PyPlayer = PyHelpers.PyPlayer
### Constants ###
iUranium = 8
iCrab = 13
i10BC = 50
i0AD = 51
class ModResources:
Очень хорошее дело. Было бы здорово взять какой нибудь сценарий и разобрать, какой код и как там используется. В принципе, питон не такая страшная штука. С близкими к нулю познаниями в программировании (мой случай) можно делать небольшие, но приятные вещи.
Несколько полезных ссылок по Python в CIV:
Документация по классам питона в Warlords http://civilization4.net/files/modding/PythonAPI/
Документация по классам питона в ванильной CIV 1.61: http://civilization4.net/files/moddi...nAPI_original/
Инструкция по питону на civ4wiki: http://civ4wiki.com/wiki/index.php/Python_Tutorial
Примеры игрового кода на их-фанатиках: http://forums.civfanatics.com/showthread.php?t=152856
Спасибо Newer Mind - Все таки самую ценную информацию по программированию я получаю от тебя. Ты не думай - что мне не приходится лазить в Питон... (Последнюю неделю или больше - я в нем просто ночевал) (Это когда пробовали решить проблему с Русскими буквами). Когда я полазил по Питону - я понял, что СДК - шкой лучше управлять через Питон... (По моему она и писалась - как поддержка Питона). Да и раньше - Мосты ( которые еще предстоит доделать) - может мне легче будет их сделать, реализовав все это в Питоне. Потому что в СДК - невозможно отследить весь путь... (все куда то уходит и все откуда то появляется...). Причем - все равно - весь крутеж начинается в СДК ???. (Очень странная смесь...). Так что получается, что без СДК - невозможно чего то глубоко понять в Питоне, а без Питона - невозможно отследить весь путь какого нибудь объекта в СДК. И еще - на их фанатиках описана связь (Шикарно описана) СДК и ХМЛ. Если перевести ту статью и поместить в Осваиваем СДК - это будет отличным подспорьем даже для начинающих изучать эту науку. Потому что очень многое берется из ХМЛ. (там можно даже делать простейшее программирование). А если ты уже знаешь что то про ту или иную переменную, которая уже описана в ХМЛ - то и СДК понимать будет гораздо легче (Питон в том числе).
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
Вот ссылка на ту статью Она (ссылка) лежит на модиках в описании файла XMLShema... Эту статью, которая лежит по этой ссылке - перевести бы на русский. А там, по моему очень подробно описывается - как создать XML файл (свой) и как прописать его в СДК... (и по моему даже в Питоне).
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
<div align="center">СВЯЗЬ СДК И ПИТОНА.</div>
<div align="center">(Вызов функций, описанных в СДК, через Питон)</div>
Для того, чтобы вызывать функции, описанные в СДК, через Питон необходимо убедиться, что эти функции описаны в СДК для Питона. Все эти функции лежат во второй части СДК в файлах, начинающихся на Cy. Например (Для класса CvPlayer):
CyPlayer.cpp, CyPlayer.h.
Если эти функции не описаны в этих файлах, то их надо прописать самому.
Для примера попробуем описать функцию AI_getAttitudeVal для Питона, находящуюся в классе CvPlayerAI. Но при этом попробуем создать свою функцию в классе CvPlayer (т.к. класс CvPlayerAI в Питон не передается). Если бы мы сразу хотели передать эту функцию, то ее пришлось бы описывать в файле CvPlayer.h таким образом:
Что вызывает вылет программы (системная ошибка)Код:virtual int AI_getAttitudeVal(PlayerTypes ePlayer, bool bForced = true) = 0;
Так что нам приходится создавать свою функцию. Мы ее прописываем так:
Флаг bForsed опускаем, но добавляем второго игрока, так как отношения проверяются между двумя игроками. (в этом то и была ошибка в первой редакции).Код:int getAttitudeVal(PlayerTypes ePlayer, PlayerTypes ePlayerHuman);
После этого прописываем эту функцию в файле Cyplayer.h. Здесь надо ее прописать также, как она была прописана в файле CvPlayer.h, только тип PlayerTypes надо заменить на int:
Далее создаем функцию getAttitudeVal в файле CvPlayer.cppКод:int getAttitudeVal(int /*PlayerTypes*/ ePlayer, int /*PlayerTypes*/ ePlayerHuman);
[code]
int CvPlayer::getAttitudeVal(PlayerTypes ePlayer, PlayerTypes ePlayerHuman)
{
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
А можно в питоне приодолеть лимит цив не в 18 а скажем в 100.
Если есть ум будет и успех.
------------------------------------------------
Ледниковый период-2 Наша земля
<div class='quotetop'>Цитата(Kerim * 2.11.2006, 21:06) [snapback]134743[/snapback]</div>Это можно преодолеть только в СДК (Зайди на мой сайт - там один мод цепляет 50 цив... (26 из которых - тебе придется создать самому...)А можно в питоне приодолеть лимит цив не в 18 а скажем в 100.
[/b]
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
26 создам а остальные что ами создадутся что-ли))
Если есть ум будет и успех.
------------------------------------------------
Ледниковый период-2 Наша земля
<div class='quotetop'>Цитата(Kaizer * 4.11.2006, 17:43) [snapback]135138[/snapback]</div>Какой рандом используется для боя - можно узнать в файлах CvUnit.cpp и CvUnitAI.cpp (Где то на форуме я давал даже функции, которые заведуют рандомом боя (для групповых атак и для дуэли...). Возможно тебе придется посмотреть еще файлы CvSelectionGroup и CvSelectionGroupAI - cpp.Хочу реализовать одну свою идею по сглаживанию рендома, для этого мне надо залезть в алгоритм боя. Не поскажешь, где искать, а то по отсутствию опыта получается много бесполезной возни (хотя именно она и увеличивает этот опыт )
[/b]
Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
http://blacksun.civfanatics.ru
-------------------------------------------------
MTDG2 - [civ]christianity[/civ]Монархия
---------------------------------
Председатель CFR Awards 2007
---------------------------------
Председатель CFR Awards 2008
В следующей версии цивы вылечат.
Если есть ум будет и успех.
------------------------------------------------
Ледниковый период-2 Наша земля
Лечат, когда что то болит. Было бы неплохо, если бы в следующую версию включили обязательный антифлудерский патч. Может и подлечили бы некоторых.
Kerim, если тебе нечего сказать по существу темы, и никаких вопросов по данной теме у тебя не возникает, то просто "отмечаться" в этой теме тебе совсем необязательно.