+ Ответить в теме
Показано с 1 по 11 из 11

Тема: Разработка мода (все пожелания сюда)

  1. #1

    Question Разработка мода (все пожелания сюда)

    Расскажу байку.

    Мод был мной почти заброшен, но как-то я решил поставить на домашнем ПК Trac+SVN+MSYS. В качестве тестового проекта полу-случайно добавил, собственно, мод. Угасший было интерес возник снова, и разработка потихоньку сдвинулась с мертвого места. Была поставлена VS2010, раскопаны старые исходники ядра, созданы тикеты (задачи) в Trac.

    Часть из тикетов уже выполнена (или почти выполнена):
    Нажмите на изображение для увеличения
Название: Tickets.jpg
Просмотров: 35
Размер:	98.8 Кб
ID:	4458

    А количество ревизий скоро дойдет до 100:
    Нажмите на изображение для увеличения
Название: Trac.jpg
Просмотров: 22
Размер:	100.0 Кб
ID:	4459

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

    В данной теме будет комментироваться процесс разработки, и с выходом каждой более-менее важной ревизии будет выкладываться небольшой обзор. Все комментарии и разумная критика приветствуются.
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось Sylexz; 22.01.2011 в 17:45.

  2. #2
    Цитата Сообщение от Sylexz
    Привет!

    У меня небольшая проблема с python'ом. Хочу вынести на основной экран усталость от войны (численный показатель + получаемое недовольство в городах от него), но MainInterface.py на 5000 строк без автодополнения меня немного пугает.

    Хочу попросить тебя о помощи в этом нелегком для меня деле - в программировании интерфейса для Civ 4 я пока разбираюсь слабовато.
    Создай новый тэг INTERFACE_WAR_SUCCESS для текста усталости от войны. (Усталость от войны: %d1_Num%%)

    Затем в файле CvMainInterface.py найди функцию (def updateGameDataStrings(self): ) и в ней напиши код
    Код:
    	screen.hide("WarSuccessLabel")
    
    	if !pHeadSelectedCity:
    		szText = localText.getText("INTERFACE_WAR_SUCCESS", (gc.getPlayer(ePlayer).getWarWearinessPercentAnger(),))
    		screen.setLabel("WarSuccessLabel", "Background", szText, CvUtil.FONT_LEFT_JUSTIFY, Координата_X, Координата_Y, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    CvUtil.FONT_LEFT_JUSTIF - означает что заданые координаты - это самая левая часть текста (текст пишется с лева на право). Есть еще варианты FONT_RIGHT_JUSTIF и FONT_CENTER_JUSTIF
    Параметрт getWarWearinessPercentAnger() - это сумма усталостей от войны от всех игроков. Она вычисляется функцией CvPlayer::updateWarWearinessPercentAnger() в SDK.
    Можно сделать чтоб при наведении курсора выводилась подсказка для военной усталости от каждого игрока.

    Для этого нужно заменить
    screen.setLabel("WarSuccessLabel", "Background", szText, CvUtil.FONT_LEFT_JUSTIFY, Координата_X, Координата_Y, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
    на
    screen.setText("WarSuccessLabel", "Background", szText, CvUtil.FONT_LEFT_JUSTIFY, Координата_X, Координата_Y, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_WAR_SUCCESS, ePlayer, -1)
    Потом создать новый WidgetTypes.WIDGET_WAR_SUCCESS в CvEnums.h (CyEnumsInterface.cpp для вывода в Python) и написать соответствующий код в функции CvDLLWidgetData::parseHelp(CvWStringBuffer &szBuffer, CvWidgetDataStruct &widgetDataStruct)
    Файл CvDLLWidgetData.cpp
    Код:
    	case WIDGET_WAR_SUCCESS:
    		if ((widgetDataStruct.m_iData1 > -1) && (widgetDataStruct.m_iData1 < MAX_PLAYERS))
    		{
    			CvWString szTemp;
    			bool bNotFirst = false;
    			int iI, iOurWarWeariness, iLoopWarWeariness;
    			TeamTypes eLoopTeam;
    			TeamTypes eOurTeam = GET_PLAYER(widgetDataStruct.m_iData1).getTeam();
    			CvTeam& kOurTeam = GET_TEAM(eOurTeam);
    
    			for (iI = 0; iI < MAX_PLAYERS; iI++)
    			{
    				CvPlayer& kLoopPlayer = GET_PLAYER((PlayerTypes)iI);
    				eLoopTeam = kLoopPlayer.getTeam();
    				CvTeam& kLoopTeam = GET_TEAM(eLoopTeam);
    				if (kLoopTeam.isAlive() && (eLoopTeam != eOurTeam) && !kLoopTeam.isMinorCiv())
    				{
    					if (bNotFirst)
    						{szBuffer.append(NEWLINE);}
    					else
    						{bNotFirst = true;}
    
    					if (kLoopTeam.isAtWar(eOurTeam))
    						{szTemp.Format(SETCOLR L"%s: " ENDCOLR, TEXT_COLOR("COLOR_NEGATIVE_TEXT"), kLoopPlayer.getName());}
    					else
    						{szTemp.Format(SETCOLR L"%s: " ENDCOLR, TEXT_COLOR("COLOR_POSITIVE_TEXT"), kLoopPlayer.getName());}
    					szBuffer.append(szTemp);
    
    					iOurWarWeariness = (kOurTeam.getWarWeariness(eLoopTeam) * std::max(0, 100 + kLoopTeam.getEnemyWarWearinessModifier())) / 10000;
    					iLoopWarWeariness = (kLoopTeam.getWarWeariness(eOurTeam) * std::max(0, 100 + kOurTeam.getEnemyWarWearinessModifier())) / 10000;
    
    					szTemp.Format(SETCOLR L"%d%%" ENDCOLR, TEXT_COLOR("COLOR_NEGATIVE_TEXT"), iOurWarWeariness);
    					szBuffer.append(szTemp);
    					szTemp.Format(L"/");
    					szBuffer.append(szTemp);
    					szTemp.Format(SETCOLR L"%d%%" ENDCOLR, TEXT_COLOR("COLOR_POSITIVE_TEXT"), iLoopWarWeariness);
    					szBuffer.append(szTemp);
    				}
    			}
    		}
    		break;
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось NeseryozniyVET; 24.01.2011 в 16:28.
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  3. #3
    Огромное спасибо, NeseryozniyVET!

    Теперь я примерно понимаю как использовать виджеты, и смогу по аналогии добавить и другие показатели. Еще раз спасибо!
    продвинь это сообщение в соцсеть:  

  4. #4
    Здравствуйте!
    Я обнаружил баговый чит в моде: при торговле катапультами есть возможность менять катапульту на катапульту с доплатой! Неограниченное число раз))
    Точнее, пока у игрока ИИ деньги не кончатся))
    Баг обнаружен при торговле с Манса Мусой, расположение его: Доволен, доплата составила 6 ед золота.

    А за обмен 2 катапульт 13 ед. золота дают!
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось Vensan; 20.10.2011 в 14:14.

  5. #5
    Н-да. При тех же условиях фокус с Уайна Капаком не прошел( Он затребовал доплатить 2 золота за катапульту или 3 золота за две(
    Но зато ему без разницы какими катапультами меняться - можно разменять катапульту с 1 прокачкой на катапульту с тремя...и наоборот.
    А вот 18 Кроликов(Майя) вообще жадный: потребовал 13 золота за обмен катапульты на катапульту. Хотя тоже довольный.
    Короче, повезло мне с Манса Мусой(он мировой лидер ,я пока третий). Пока,да. Скоро все может поменяться ,хоть я и на императоре играю.
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось Vensan; 20.10.2011 в 15:10.

  6. #6
    Еще: до открытия очередной техи оставалось 111 колб, Манса уступил ее за 105 золота... для меня не очень выгодно, но помог фокус с катапультами: после муторных, но приятных манипуляций все мои денежки вернулись ко мне обратно
    продвинь это сообщение в соцсеть:  

  7. #7
    Маленький незначительный недочетик заметил: когда советник предлагает перейти на вновь открывшуюся парадигму в скобочках появляется подсказка по парадигме из оригинальной цивы.
    А так: СПАСИБО ЗА ПРОДЕЛАННУЮ РАБОТУ ОГРОМНОЕ!!!!!
    продвинь это сообщение в соцсеть:  

  8. #8
    Еще заметил:
    Видимо ,в связи с тем ,что у осадной техники(катапульт и проч.) появилась возможность атаковать не вступая в прямой бой, игроки АИ не умеют этой функцией пользоваться!
    ...Что существенно облегчает войну с ними...
    Помню, как огромным стеком захватывал Рим... в итоге я 3 хода добивал орду катапульт и требушетов ,которые так и не произвели по моему стеку ни единого выстрела...

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

  9. #9
    АВТОР УМЕР? загруженные на обменники файлы удалены, пятая цива надоела, а поиграть этот мод не получится
    продвинь это сообщение в соцсеть:  

  10. #10
    идейный враг всяких трансформероB

    Аватар для Snake_B


    Регистрация
    14.09.2007
    Адрес
    Донецк-Камчатка....
    Сообщений
    13,314
    Цитата Сообщение от neocrator Посмотреть сообщение
    АВТОР УМЕР? загруженные на обменники файлы удалены, пятая цива надоела, а поиграть этот мод не получится
    чего так оптимистично... видимо просто надоело... пусть кто-нибудь, у кого есть, зальет на файлообменник и положит сюда ссылку...
    продвинь это сообщение в соцсеть:  

  11. #11


    Ну не верю, что все ушли на пятую циву. Откликнитесь у кого есть файлы и hotfix для civilization universalis 1.690
    продвинь это сообщение в соцсеть:  

+ Ответить в теме

Похожие темы

  1. Разработка мода: убрать рабочих
    от Peter в разделе Модная Цивилизация
    Ответов: 48
    Новое: 03.11.2010, 08:27

Ваши права

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

free counters