В ближайшее время нет.Только в SDKпочитай тут
http://www.civfanatics.ru/threads/76...ом-ходу
В ближайшее время нет.Только в SDKпочитай тут
http://www.civfanatics.ru/threads/76...ом-ходу
Последний раз редактировалось NeseryozniyVET; 09.05.2012 в 20:19.
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
Народ, извините, если надоел. Мой мод почти готов. Осталось немногое: интерфейс для сканирования местности спутником-шпионом. Я думал добавить кнопку под кнопку шпионажа, только добавив тип кнопки CONTROL_SCAN. Добавил в два места, где встречались эти "контролы" в функции canDoControl и doControl в классе cvGameInterface. Проверил: у меня уже на этапе генерации карты вылетает в ошибку.
Я в верном направлении двигаюсь? Мб где есть тема, посвящённая созданию функциональных кнопок?
Код (функции в отдельности работают - проверено туповызовом при doTurn):
CvMainInterface.py --------------------------------------
...
ePlayer = gc.getGame().getActivePlayer()
if gc.getTeam(gc.getPlayer(ePlayer).getTeam()).IsSateliteScanValid():
iBtnY += iBtnAdvance
screen.setImageButton( "EspionageAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_SCAN).getActionInfoIndex(), -1 )
screen.setStyle( "EspionageAdvisorButton", "Button_HUDAdvisorEspionage_Style" )
screen.hide( "EspionageAdvisorButton" )
....
------------------------------
void CvGame::doControl(ControlTypes eControl) {
...
case CONTROL_SCAN:
// Igor ACTION
eTeam = getActiveTeam();
if (eTeam == NO_TEAM) {
pPlot = GC.getMapINLINE().plotSorenINLINE(10, 10);
GET_TEAM(eTeam).SateliteScan(pPlot);
}
break;
...
----------------------------------------
bool CvGame::canDoControl(ControlTypes eControl) const {
....
case CONTROL_SCAN:
return true; // временно, вставить IsSateliteScanValid...
break;
....
Assets\XML\Units\CIV4MissionInfos.xml - создай новую миссию MISSION_SCAN в конце
CvEnums.h - в MissionTypes добавляешь название миссии MISSION_SCAN перед NUM_MISSION_TYPES
CyEnumsInterface.cpp - добавляешь название миссии перед NUM_MISSION_TYPES (это для вызова миссий по названию в питоне)
CvDLLWidgetData.cpp - в void CvDLLWidgetData:: parseActionHelp добавляешь алгоритм подсказки для кнопки миссии
CvUnit.cpp и CvUnit.h - создай две функции bool canScan() и void scan(). Одна проверяет возможность сканирования для юнита, а вторая собственно алгоритм сканирования
CvSelectionGroup.cpp - в bool CvSelectionGroup::canStartMission добавьНу, вроде, все.Код:case MISSION_SCAN: if (pLoopUnit->canScan()) {return true;} break;
Последний раз редактировалось NeseryozniyVET; 19.05.2012 в 20:19.
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
Net, спасибо! Я тоже так думал, но это миссии это для юнитов, а у меня нет юнита. Мне просто по нажатию кнопки интерфейса надо выбрать тайл и вызвать функцию.
Здесь по сути можно, конечно, искусственно создать юнит, который будет иметь возможность разведки каждые 3 хода и появляется после создания проекта, тогда вообще новой миссии не потребуется, но мне не нравится такой вариант..
Создай новый WidgetTypes в CvEnums.h и CyEnumsInterface.cpp
В CvDLLWidgetData.cpp в CvDLLWidgetData:: parseHelp (подсказка) и CvDLLWidgetData::executeAction (действие при нажатии) добавь нужны коды для нового WidgetTypes
Потом создай кнопку в Assets\Python\Screens\CvMainInterface.py
screen.setImageButton("Уникальное имя кнопки", "адрес картинки для кнопки", X, Y, длинна кнопки , высота кнопки, WidgetTypes.WIDGET_новый, параметр 1, параметр 2)
например screen.setImageButton("AvtoreconAdd0", "Art/Interface/VetScreen/autorecon_addon.dds", 120, 130, 20, 20, WidgetTypes.WIDGET_AUTORECON, 0, 0)
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод
Попробуй так
Assets\Python\CvEventManager.py
Функция def onTechAcquired(self, argsList):
P.S. Это чит получается: даришь игроку технологию (он тут же теряет юнитов) и сразу объявляешь войну.Код:if (iPlayer > -1 and bAnnounce and not CyInterface().noTechSplash()): if (gc.getGame().isFinalInitialized() and not gc.getGame().GetWorldBuilderMode()): # begin changes pPlayer = PyPlayer(iPlayer) (pLoopUnit, iter) = pPlayer.firstUnit(false) while pLoopUnit: pLoopUnit.kill(true, -1) (pLoopUnit, iter) = pPlayer.nextUnit(iter, false) # end changes if ((not gc.getGame().isNetworkMultiPlayer()) and (iPlayer == gc.getGame().getActivePlayer())): popupInfo = CyPopupInfo() popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN) popupInfo.setData1(iTechType) popupInfo.setText(u"showTechSplash") popupInfo.addPopup(iPlayer)
Последний раз редактировалось NeseryozniyVET; 10.06.2012 в 00:11.
Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
Мой мод