Результаты опроса: Поддерживаете ли вы концепцию:

Голосовавшие
41. Вы ещё не голосовали в этом опросе
  • Да

    24 58.54%
  • Нет

    17 41.46%
+ Ответить в теме
Страница 3 из 5 ПерваяПервая ... 234 ... ПоследняяПоследняя
Показано с 41 по 60 из 83

Тема: Лимит тайла и следопыт

  1. #41
    При такой реализации ограничения юнитов в стеке возникает проблема - в городе можно построить сколь угодно много юнитов и задача штурма становится неразрешимой, т.к. невозможно подвести под стены армию больше, чем гарнизон.
    Какие идеи по поводу ограничения гарнизона?
    продвинь это сообщение в соцсеть:  

  2. #42
    Цитата Сообщение от Tompson Посмотреть сообщение
    При такой реализации ограничения юнитов в стеке возникает проблема - в городе можно построить сколь угодно много юнитов и задача штурма становится неразрешимой, т.к. невозможно подвести под стены армию больше, чем гарнизон.
    Какие идеи по поводу ограничения гарнизона?
    Вариант 1
    В файле Assets\Python\CvGameUtils.py
    находишь функцию def canTrain(self,argsList):
    и изменяешь ее
    Код:
    	def canTrain(self,argsList):
    		pCity = argsList[0]
    		eUnit = argsList[1]
    		bContinue = argsList[2]
    		bTestVisible = argsList[3]
    		bIgnoreCost = argsList[4]
    		bIgnoreUpgrades = argsList[5]
    # begin
    		if pCity.plot().getNumUnits() > 10:
    			return True
    # end
    		return False

    Вариант 2
    В файле Assets\XML\PythonCallbackDefines.xml
    находишь тэг USE_CANNOT_TRAIN_CALLBACK
    и задаешь значение 1

    В файле Assets\Python\CvGameUtils.py
    находишь функцию def cannotTrain(self,argsList):
    и изменяешь ее
    Код:
    	def cannotTrain(self,argsList):
    		pCity = argsList[0]
    		eUnit = argsList[1]
    		bContinue = argsList[2]
    		bTestVisible = argsList[3]
    		bIgnoreCost = argsList[4]
    		bIgnoreUpgrades = argsList[5]
    # begin
    		if pCity.plot().getNumUnits() > 10:
    			return True
    # end
    		return False
    Заместь 10 можно выставить то число которое тебе больше нравится
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  3. #43
    И еще проблема - шпион не может войти в клетку, где стоит заполненный неприятельский стек, а так же воздушные юниты тоже учитываются в стеке.
    Кстати, где можно найти описание питона применительно к "Цивилизации"?
    продвинь это сообщение в соцсеть:  

  4. #44
    Цитата Сообщение от Tompson Посмотреть сообщение
    И еще проблема - шпион не может войти в клетку, где стоит заполненный неприятельский стек, а так же воздушные юниты тоже учитываются в стеке.
    Надо добавить услове
    в def unitCannotMoveInto(self,argsList):
    Код:
    	pUnit = gc.getPlayer(ePlayer).getUnit(iUnitId)
    	if not (pUnit.isSpy() or pUnit.getDomainType() == DomainTypes.DOMAIN_AIR):
    в def canTrain(self,argsList): или def cannotTrain(self,argsList):
    Код:
    	pUnitInfo = gc.getUnitInfo(eUnit)
    	if not (pUnitInfo.isSpy() or pUnitInfo.getDomainType() == DomainTypes.DOMAIN_AIR):
    Цитата Сообщение от Tompson Посмотреть сообщение
    Кстати, где можно найти описание питона применительно к "Цивилизации"?
    В SDK в файлх Cv*.h питоновские функции помечены
    В XML файлах названия тегов такие же как и названия функций, только заместь b - is, а заместь i - get (bSpy - isSpy(), iCost - getCost())
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  5. #45
    Чертовски благодарен, буду пробовать!
    продвинь это сообщение в соцсеть:  

  6. #46
    А как сделать, чтобы число юнитов, помещающихся в городе зависило от размера города? Пробовал использовать getPopulation() - не вышло, выдает ошибку.
    продвинь это сообщение в соцсеть:  

  7. #47
    Цитата Сообщение от Tompson Посмотреть сообщение
    А как сделать, чтобы число юнитов, помещающихся в городе зависило от размера города? Пробовал использовать getPopulation() - не вышло, выдает ошибку.
    Должно работать

    Код:
    	def unitCannotMoveInto(self,argsList):
    		ePlayer = argsList[0]		
    		iUnitId = argsList[1]
    		iPlotX = argsList[2]
    		iPlotY = argsList[3]
    # begin
    		iMaxUnits = 10
    		pPlot = gc.getMap().plot(iPlotX, iPlotY)
    		pCity = pPlot.getPlotCity()
    		if pCity:
    			iMaxUnits += pCity.getPopulation() * 2 / 3
    		if pPlot.getNumUnits() > iMaxUnits:
    			return True
    # end
    		return False
    Код:
    	def cannotTrain(self,argsList):
    		pCity = argsList[0]
    		eUnit = argsList[1]
    		bContinue = argsList[2]
    		bTestVisible = argsList[3]
    		bIgnoreCost = argsList[4]
    		bIgnoreUpgrades = argsList[5]
    # begin
    		if pCity.plot().getNumUnits() > 10 + pCity.getPopulation() * 2 / 3:
    			return True
    # end
    		return False
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось NeseryozniyVET; 24.05.2011 в 02:56.
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  8. #48
    Действительно работает! Огромное спасибо!
    продвинь это сообщение в соцсеть:  

  9. #49
    Выяснилась еще одна проблема - невозможно атаковать заполненный стек противника, а так же невозможно сделать ход в клетку, где стоит заполненный шпионский стек (хоть свой, хоть противника, хоть нейтрала), т.к. в такую клетку невозможно сделать ход.
    продвинь это сообщение в соцсеть:  

  10. #50
    Добавлю только, что аналогично и в городах - если войска под завязку, то напасть невозможно.
    Значит нужно какое-то новое решение. Какое, пока не знаю.
    продвинь это сообщение в соцсеть:  
    Чтобы тебя любили — приходится быть со всеми хорошим каждый день.
    Чтобы ненавидели — напрягаться не приходится вообще.
    Гомер Симпсон

  11. #51
    Код:
    	def unitCannotMoveInto(self,argsList):
    		ePlayer = argsList[0]		
    		iUnitId = argsList[1]
    		iPlotX = argsList[2]
    		iPlotY = argsList[3]
    # begin
    		pUnit = gc.getPlayer(ePlayer).getUnit(iUnitId)
    		if not (pUnit.isSpy() or pUnit.getDomainType() == DomainTypes.DOMAIN_AIR):
    			eTeam = pUnit.getTeam()
    			pTeam = gc.getTeam(eTeam)
    			iNumUnits = plot.getNumUnits()
    			if iNumUnits > 0:
    				iUnits = 0
    				pPlot = gc.getMap().plot(iPlotX, iPlotY)
    				for i in range (iNumUnits):
    					pLoopUnit = plot.getUnitByIndex(i)
    					if (eTeam != pLoopUnit.getTeam()) and (not pTeam.isAtWar(pLoopUnit.getTeam())): # юниты противников не считаем
    						if not(pLoopUnit.isSpy() or pLoopUnit.getDomainType() == DomainTypes.DOMAIN_AIR):
    							iUnits += 1
    				iNumUnits = 10
    				pCity = pPlot.getPlotCity()
    				if pCity:
    					iNumUnits += pCity.getPopulation() * 2 / 3
    				if iUnits > iNumUnits:
    					return True
    # end
    		return False
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось NeseryozniyVET; 26.05.2011 в 11:20.
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  12. #52
    NeseryozniyVET, все работает, огромное спасибо!
    В первом приближении получился вот такой мод http://vas.civfanatics.ru/vas_mod/Stack/Stack.zip с ограничением 3 юнита в стеке. При желании можно задать любое другое количество, меняя переменные iMaxUnits и iMaxUnitInfos в файле cvgameutils.py, оптимальный размер стека думаю можно будет определить опытным путем по результатам серии игр. Первая пробная партия показала, что ИИ не совсем идиот, и стеков отдельно из копейщиков, отдельно из секирщиков, отдельно из катапульт не водит, старается делать смешанные.
    Однако, с ростом городов гарнизоны в них начинают превосходить любую атакующую армию. Чтобы как то с этим бороться установил одного недовольного жителя на каждый военный юнит в городе, увеличив на 1 бонусное количество счастливых жителей во всех городах. Соответственно несколько изменил институты власти - дал монархии 3 счастливых горожанина в 5-ти крупнейших городах, у представительства 1-го в крупнейших городах. Что из этого выйдет - посмотрим.
    Всем, кому интересно ограничение стека просьба писать, какие особенности возникают в такой игре, и, соответственно какие возможны усовершенствования.
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось Tompson; 28.05.2011 в 10:44. Причина: нерабочая ссылка

  13. #53
    При подсчете числа юнитов в клетке считаются все, включая посаженные в транспорт, в результате число юнитов в морском стеке уменьшается на число сидящих в галере/галеоне/транспорте. Как исключить из подсчета транспортируемые отряды?
    продвинь это сообщение в соцсеть:  

  14. #54
    Цитата Сообщение от Tompson Посмотреть сообщение
    При подсчете числа юнитов в клетке считаются все, включая посаженные в транспорт, в результате число юнитов в морском стеке уменьшается на число сидящих в галере/галеоне/транспорте. Как исключить из подсчета транспортируемые отряды?
    if pLoopUnit.isCargo(): - если юнит загружен в транспорт
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  15. #55
    Благодарю, работает!
    Ксатати, интересный мод http://vas.civfanatics.ru/vas_mod/Stack/Stack.zip получается - взятие города приобретает реализм. Сначала окружение со всех сторон и осада, затем обстрел из орудий, затем отвод орудий на запасные позиции, подтягивание штурмовых отрядов и только потом штурм.
    продвинь это сообщение в соцсеть:  

  16. #56
    Выяснилась еще одна особенность - не получается атаковать заполненный стек каперов и, наоборот - капер не может атаковать заполненный стек обычных караблей. Как можно проверить, является ли юнит капером?
    продвинь это сообщение в соцсеть:  

  17. #57
    isHiddenNationality()
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  18. #58
    Вопрос: можно ли, вместо ограничения количества юнитов, сделать ограничение по принадлежности. т. е. чтобы на клетку с моим юнитом не могли зайти чужие?
    продвинь это сообщение в соцсеть:  

  19. #59
    Цитата Сообщение от Vovan66 Посмотреть сообщение
    Вопрос: можно ли, вместо ограничения количества юнитов, сделать ограничение по принадлежности. т. е. чтобы на клетку с моим юнитом не могли зайти чужие?
    Код:
    	def unitCannotMoveInto(self,argsList):
    		ePlayer = argsList[0]		
    		iUnitId = argsList[1]
    		iPlotX = argsList[2]
    		iPlotY = argsList[3]
    # begin
    		pLoopUnit = gc.getPlayer(ePlayer).getUnit(iUnitId)
    		if not (pLoopUnit.isSpy() or pLoopUnit.getDomainType() == DomainTypes.DOMAIN_AIR or pLoopUnit.isHiddenNationality()):
    			iNumUnits = plot.getNumUnits()
    			if iNumUnits > 0:
    				eTeam = pLoopUnit.getTeam()
    				pTeam = gc.getTeam(eTeam)
    				pPlot = gc.getMap().plot(iPlotX, iPlotY)
    				for i in range (iNumUnits):
    					pLoopUnit = plot.getUnitByIndex(i)
    					eLoopTeam = pLoopUnit.getTeam()
    					if (eTeam != eLoopTeam) and (not pTeam.isAtWar(eLoopTeam)):
    						if not(pLoopUnit.isSpy() or pLoopUnit.getDomainType() == DomainTypes.DOMAIN_AIR or pLoopUnit.isHiddenNationality()):
    							return True
    
    # end
    		return False
    Эта система была в третей цыве - ИМХО плохая идея, особенно если по твоей територии ходит союзник.
    продвинь это сообщение в соцсеть:  
    Если новые технологии позволяют обходится без услуг простых людей - это прогресс, а если новые технологии позволяют обходится без услуг миллионеров и крупных компаний - это нарушение авторских прав.
    Мой мод

  20. #60


    Цитата Сообщение от NeseryozniyVET Посмотреть сообщение
    Эта система была в третей цыве - ИМХО плохая идея, особенно если по твоей територии ходит союзник.
    Спасибо. По моей территории союзники не ходят: договор об открытых границах я перенёс на более поздний срок, т. к. пользы от союзников никакой, а вот воевать многие ходят через две цивилизации на третью. В жизни всегда начинали захваты территорий с земель соседей, и у меня теперь нападают только на тех, с кем есть общие границы (или по морю).
    продвинь это сообщение в соцсеть:  

+ Ответить в теме
Страница 3 из 5 ПерваяПервая ... 234 ... ПоследняяПоследняя

Ваши права

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

free counters