+ Ответить в теме
Страница 1 из 6 12 ... ПоследняяПоследняя
Показано с 1 по 20 из 108

Тема: Осваиваем питон (от простого к сложному)

  1. #1
    Начну с описания простейших действий в питоне для CivIV (vanilla & Warlords)

    1. Каждый файл скрипта, чтобы он мог быть прочитан цивой должен быть прописан по специально отведенным для этого местам.

    Место #1 - первичный вызов.
    В файле %CivDir%\Mods\%ModDir%\Assets\Python\EntryPoints\CvEventInterface.py в самом начале прописываются строки:
    Код:
    import CvUtil
    from CvPythonExtensions import *
    после строки "import CvUtil" вписывается строка означающая главный файл обработчика событий - например он у наз называется CvModEventManager.py, соответственно прописываемая строка у нас будет выглядеть так:
    Код:
    import CvModEventManager
    команда import означает, что файл на который она указывает должен полностью обрабатываться вместе с данным файлом

    Примечание если ваш файл обработчика событий называется CvEventManager.py то первичный вызов можно не использовать

    Место #2 - вторичные вызовы.
    в файле обработчика событий (по предыдущему примеру он у нас называется CvModEventManager.py и находится в папке %CivDir%\Mods\%ModDir%\Assets\Python в свою очередь могут быть прописаны все подключаемые модули. Например у нас есть 2 собственных модуля, которые нужно подключить:
    1. Модуль где прописано, что при взятии определенного города определенной нацией он будет переименован - например он будет находиться в файле CapturedCityRen.py
    2. Модуль, где прописано, что в определенном турне на карте появится определенный ресурс - например он находиться в файле SetResources.py
    Соответственно в начале файла нам следует прописать их вызовы для обработки - это будет выглядеть так
    Код:
    import CapturedCityRen
    import SetResources
    Далее в теме пойдут различные варианты простых и не очень скриптов с пояснениями и способами их использования.
    Желающие могут добавлять свои варианты и способы.

    ЗЫ убедительная просьба указывать название способа сверху поста (например "добавление ресурса на карту")
    продвинь это сообщение в соцсеть:  

  2. #2
    Эвент: Добавление ресурса на карту в процессе игры. Пример возникновения эвента относительно номера игрового хода

    Для добавления ресурса нам потребуется импортировать данные из: CvPythonExtensions (импорт данных), import CvUtil, PyHelpers, Popup и pickle - соответственно начало модуля будет выглядеть так:
    Код:
    from CvPythonExtensions import *
    import CvUtil
    import PyHelpers
    import Popup
    import pickle
    Далее идет инициализации глобальных переменных gc и PyPlayer:
    Код:
    gc = CyGlobalContext()
    PyPlayer = PyHelpers.PyPlayer
    примечание: Далее подробных кодов приводиться не будет - просто надо делать по аналогии с этими кодами

    Действие по добавлению ресурса очень простое:
    <div class='quotetop'>Цитата</div>
    gc.getMap().plot(int x_coord, int y_coord).setBonusType(int bonus_type)
    [/b]
    Здесь на плот c координатами x_coord, y_coord устанавливается бонус bonus_type

    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:
    продвинь это сообщение в соцсеть:  

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

    Несколько полезных ссылок по 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


    продвинь это сообщение в соцсеть:  

  4. #4
    Король Аватар для Blacksun


    Регистрация
    10.05.2006
    Адрес
    М.О. г. Раменское
    Сообщений
    1,873
    Спасибо Newer Mind - Все таки самую ценную информацию по программированию я получаю от тебя. Ты не думай - что мне не приходится лазить в Питон... (Последнюю неделю или больше - я в нем просто ночевал) (Это когда пробовали решить проблему с Русскими буквами). Когда я полазил по Питону - я понял, что СДК - шкой лучше управлять через Питон... (По моему она и писалась - как поддержка Питона). Да и раньше - Мосты ( которые еще предстоит доделать) - может мне легче будет их сделать, реализовав все это в Питоне. Потому что в СДК - невозможно отследить весь путь... (все куда то уходит и все откуда то появляется...). Причем - все равно - весь крутеж начинается в СДК ???. (Очень странная смесь...). Так что получается, что без СДК - невозможно чего то глубоко понять в Питоне, а без Питона - невозможно отследить весь путь какого нибудь объекта в СДК. И еще - на их фанатиках описана связь (Шикарно описана) СДК и ХМЛ. Если перевести ту статью и поместить в Осваиваем СДК - это будет отличным подспорьем даже для начинающих изучать эту науку. Потому что очень многое берется из ХМЛ. (там можно даже делать простейшее программирование). А если ты уже знаешь что то про ту или иную переменную, которая уже описана в ХМЛ - то и СДК понимать будет гораздо легче (Питон в том числе).
    продвинь это сообщение в соцсеть:  
    Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
    http://blacksun.civfanatics.ru
    -------------------------------------------------
    MTDG2 - [civ]christianity[/civ]Монархия
    ---------------------------------
    Председатель CFR Awards 2007
    ---------------------------------
    Председатель CFR Awards 2008

  5. #5
    Так это здорово, буду знать к кому обратиться. А то у меня перманентно возникают разные идеи по питону, и я даже додумываюсь до того, где именно и что надо поменять, но не всегда додумываюсь- на что.

    А ты про какую статью? Ссылку сразу давай, чтобы все посмотрели.
    продвинь это сообщение в соцсеть:  

  6. #6
    Король Аватар для Blacksun


    Регистрация
    10.05.2006
    Адрес
    М.О. г. Раменское
    Сообщений
    1,873
    Вот ссылка на ту статью Она (ссылка) лежит на модиках в описании файла XMLShema... Эту статью, которая лежит по этой ссылке - перевести бы на русский. А там, по моему очень подробно описывается - как создать XML файл (свой) и как прописать его в СДК... (и по моему даже в Питоне).
    продвинь это сообщение в соцсеть:  
    Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
    http://blacksun.civfanatics.ru
    -------------------------------------------------
    MTDG2 - [civ]christianity[/civ]Монархия
    ---------------------------------
    Председатель CFR Awards 2007
    ---------------------------------
    Председатель CFR Awards 2008

  7. #7
    Король Аватар для Blacksun


    Регистрация
    10.05.2006
    Адрес
    М.О. г. Раменское
    Сообщений
    1,873
    <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;
    Что вызывает вылет программы (системная ошибка)

    Так что нам приходится создавать свою функцию. Мы ее прописываем так:

    Код:
    int getAttitudeVal(PlayerTypes ePlayer, PlayerTypes ePlayerHuman);
    Флаг bForsed опускаем, но добавляем второго игрока, так как отношения проверяются между двумя игроками. (в этом то и была ошибка в первой редакции).

    После этого прописываем эту функцию в файле Cyplayer.h. Здесь надо ее прописать также, как она была прописана в файле CvPlayer.h, только тип PlayerTypes надо заменить на int:

    Код:
    int getAttitudeVal(int /*PlayerTypes*/ ePlayer, int /*PlayerTypes*/ ePlayerHuman);
    Далее создаем функцию getAttitudeVal в файле CvPlayer.cpp

    [code]
    int CvPlayer::getAttitudeVal(PlayerTypes ePlayer, PlayerTypes ePlayerHuman)
    {
    продвинь это сообщение в соцсеть:  
    Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
    http://blacksun.civfanatics.ru
    -------------------------------------------------
    MTDG2 - [civ]christianity[/civ]Монархия
    ---------------------------------
    Председатель CFR Awards 2007
    ---------------------------------
    Председатель CFR Awards 2008

  8. #8
    Полководец Аватар для Kerim


    Регистрация
    20.12.2005
    Адрес
    Челябинск
    Сообщений
    216
    А можно в питоне приодолеть лимит цив не в 18 а скажем в 100.
    продвинь это сообщение в соцсеть:  
    Если есть ум будет и успех.
    ------------------------------------------------
    Ледниковый период-2 Наша земля




  9. #9
    Король Аватар для Blacksun


    Регистрация
    10.05.2006
    Адрес
    М.О. г. Раменское
    Сообщений
    1,873
    <div class='quotetop'>Цитата(Kerim * 2.11.2006, 21:06) [snapback]134743[/snapback]</div>
    А можно в питоне приодолеть лимит цив не в 18 а скажем в 100.
    [/b]
    Это можно преодолеть только в СДК (Зайди на мой сайт - там один мод цепляет 50 цив... (26 из которых - тебе придется создать самому...)
    продвинь это сообщение в соцсеть:  
    Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
    http://blacksun.civfanatics.ru
    -------------------------------------------------
    MTDG2 - [civ]christianity[/civ]Монархия
    ---------------------------------
    Председатель CFR Awards 2007
    ---------------------------------
    Председатель CFR Awards 2008

  10. #10
    Полководец Аватар для Kerim


    Регистрация
    20.12.2005
    Адрес
    Челябинск
    Сообщений
    216
    26 создам а остальные что ами создадутся что-ли))
    продвинь это сообщение в соцсеть:  
    Если есть ум будет и успех.
    ------------------------------------------------
    Ледниковый период-2 Наша земля




  11. #11
    Хочу реализовать одну свою идею по сглаживанию рендома, для этого мне надо залезть в алгоритм боя. Не поскажешь, где искать, а то по отсутствию опыта получается много бесполезной возни (хотя именно она и увеличивает этот опыт )
    продвинь это сообщение в соцсеть:  
    Представитель команды CRC

  12. #12
    Король Аватар для Blacksun


    Регистрация
    10.05.2006
    Адрес
    М.О. г. Раменское
    Сообщений
    1,873
    <div class='quotetop'>Цитата(Kaizer * 4.11.2006, 17:43) [snapback]135138[/snapback]</div>
    Хочу реализовать одну свою идею по сглаживанию рендома, для этого мне надо залезть в алгоритм боя. Не поскажешь, где искать, а то по отсутствию опыта получается много бесполезной возни (хотя именно она и увеличивает этот опыт )
    [/b]
    Какой рандом используется для боя - можно узнать в файлах CvUnit.cpp и CvUnitAI.cpp (Где то на форуме я давал даже функции, которые заведуют рандомом боя (для групповых атак и для дуэли...). Возможно тебе придется посмотреть еще файлы CvSelectionGroup и CvSelectionGroupAI - cpp.
    продвинь это сообщение в соцсеть:  
    Программирование - это не то, что ты думаешь.... - Это то, что думает о тебе компьютер.
    http://blacksun.civfanatics.ru
    -------------------------------------------------
    MTDG2 - [civ]christianity[/civ]Монархия
    ---------------------------------
    Председатель CFR Awards 2007
    ---------------------------------
    Председатель CFR Awards 2008

  13. #13
    Спасибо сейчас посмотрю.
    продвинь это сообщение в соцсеть:  
    Представитель команды CRC

  14. #14
    Сегодня обнаружил, что питоновские файлы могут (должны?) работать даже не в своих каталогах. По ошибке поставил файл экрана не в Python\Screens, где он в ассетах игры, а просто в Python. Все работает.

    Дело было именно с чистыми ассетами, еще раз потом проверял.
    продвинь это сообщение в соцсеть:  

  15. #15
    Когда делали русик под 2.08 - vpadlo это знал - подлечим по мере возможности
    продвинь это сообщение в соцсеть:  

  16. #16
    Очень ценное пояснение, спасибо

    А кого и от чего все таки будут лечить - питон, русик, vpadlo?
    продвинь это сообщение в соцсеть:  

  17. #17
    <div class='quotetop'>Цитата</div>
    кого и от чего все таки будут лечить - питон, русик, vpadlo?[/b]
    меня подлечим
    Попробуем подлечить это через SDK или наоборот как дополнительный вариант сделаем - всё зависит от функционала
    продвинь это сообщение в соцсеть:  

  18. #18
    swan, ты определенно человек-загадка. Каждое твое пояснение еще больше озадачивает.

    - Питон-файлы работают даже не в своих каталогах
    - Будем это лечить

    А зачем это лечить? Какие в этом недостатки? Почему тогда это не лечит Firaxis? Давайте заодно все и подлечимся.
    продвинь это сообщение в соцсеть:  

  19. #19
    Полководец Аватар для Kerim


    Регистрация
    20.12.2005
    Адрес
    Челябинск
    Сообщений
    216
    В следующей версии цивы вылечат.
    продвинь это сообщение в соцсеть:  
    Если есть ум будет и успех.
    ------------------------------------------------
    Ледниковый период-2 Наша земля




  20. #20


    Лечат, когда что то болит. Было бы неплохо, если бы в следующую версию включили обязательный антифлудерский патч. Может и подлечили бы некоторых.

    Kerim, если тебе нечего сказать по существу темы, и никаких вопросов по данной теме у тебя не возникает, то просто "отмечаться" в этой теме тебе совсем необязательно.
    продвинь это сообщение в соцсеть:  

+ Ответить в теме
Страница 1 из 6 12 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru

free counters