Ребята, подскажите, пожалуйста, где же я не прав.
Идея такая:
1) избавиться от линейного роста науки от населения, а проще поставить штраф за большое число городов;
2) сымитировать влияние информационной сферы, чтобы отсталые цивы при торговле получали бонус к уже исследованным другими игроками технологиям.
Сделал файл под названием "MyScienceChange.LUA":
--[[ -3% науки за каждый нестоличный город ]]
function ScienceMinusForNumCities(pPlayer)
local iNumCities = pPlayer:GetNumCities();
if iNumCities <= 1 then
return 0;
else
return pPlayer:GetScience() * (1 - 100 / (100 + (iNumCities - 1) * 3));
end
end
function ScienceMinusForNumCitiesOnTurn()
local currentResearchProgress;
local techID;
local ChangeProgress;
--loop thru all live players (human and AI).
for index,pPlayer in pairs( Players ) do
if pPlayer ~= nil and pPlayer:IsAlive() then
techID = pPlayer:GetCurrentResearch();
currentResearchProgress = pPlayer:GetResearchProgress(techID) - ScienceMinusForNumCities(pPlayer);
if currentResearchProgress < 0 then
ChangeProgress = -pPlayer:GetResearchProgress(techID);
else
ChangeProgress = pPlayer:GetResearchProgress(techID) - ScienceMinusForNumCities(pPlayer);
end
-- устанавливаем новое значение
--pPlayer:ChangeResearchProgress(techID, ChangeProgress);
teamtech:ChangeResearchProgress(techID, ChangeProgress, pPlayer);
end
end
end
--[[ конец блока: -3% науки за каждый нестоличный город ]]
---------------------------------------------------------------
--[[ Прибавка к науке за торговые связи, если изучается уже изученная партнером технология (влияние информационной сферы) ]]
function PlusScienceFromTrade( pPlayerTo)
local retVal;
retVal = 0;
-- по всем игрокам
for index,pPlayer in pairs( Players ) do
if pPlayer ~= nil and pPlayer:IsAlive() and pPlayerTo ~= pPlayer then
-- с каждого игрока собираем
retVal = retVal + 1;
end
end
return retVal;
end
function PlusScienceFromTradeOnTurn()
local ChangeScience;
-- по всем игрокам
for index,pPlayer in pairs( Players ) do
if pPlayer ~= nil and pPlayer:IsAlive()
ChangeScience = PlusScienceFromTrade(pPlayer);
--pPlayer:ChangeResearchProgress(pPlayer:GetCurrentResearch(), ChangeScience);
teamtech:ChangeResearchProgress(pPlayer:GetCurrentResearch(), ChangeScience, pPlayer);
end
end
end
--[[ конец блока: Прибавка к науке за торговые связи, если изучается уже изученная партнером технология (влияние информационной сферы) ]]
Events.ActivePlayerTurnStart.Add( PlusScienceFromTradeOnTurn );
Events.ActivePlayerTurnStart.Add( ScienceMinusForNumCitiesOnTurn );
---
Реакции никакой. Неужели ошибка где-то? Это раз. И еще хотел выводить эти бонусы и штрафы при наведении курсора на верхнее меню науки. Сделано это так: добавлено в TopPanel.LUA:
-- мои добавления
--if ScienceMinusForNumCities(pPlayer) > 0 then
strText = strText .. "[NEWLINE]" .. Locale.ConvertTextKey("TXT_KEY_SCIENCE_MINUS", ScienceMinusForNumCities(pPlayer)); --.. string.format("%i", ScienceMinusForNumCities(pPlayer));
--end
--if PlusScienceFromTrade( pPlayer) > 0 then
strText = strText .. "[NEWLINE]" .. Locale.ConvertTextKey("TXT_KEY_SCIENCE_PLUS", PlusScienceFromTrade(pPlayer));-- .. string.format("%i", PlusScienceFromTrade(pPlayer));
--end
Когда навожу - пишет Brief description, а затем ниспадающее поле вообще перестает появляться.
include ("MyScienceChange"); - это есть в TopPanel, то есть вроде ссылка есть и функции должны быть видны. Или нет? Вообще такое ощущение, что он мой файл
PS. Алгоритм расчета еще не сбалансирован, потому прошу не придираться
Насчет дебага ModBuddy... вроде как видел его там (щас на работе и проверить как бы не могу), но если честно то не юзал. Пока все что писал довольно простенькое и дебаг не нужен был.
Сами то функции может и верны, а вот передаются ли значения системе? Т.е. срабатывает ли функция ChangeResearchProgress ? Вот в чем вопрос. Кстати... а почему teamtech:ChangeResearchProgress(techID, ChangeProgress, pPlayer); ? У меня такое чувство что там должен быть pPlayer ибо функция ни про какой teamtech не знает...
По поводу функций я здесь сверяюсь: http://wiki.2kgames.com/civ5/index.p...jects/TeamTech
Мне подумалось, что ChangeResearchProgress это расшаренная функция для класса teamtech. Ну, буду экспериментировать. Кстати, нашел вроде ошибку (then отсутствовало). Надо проверить. Мб всё из-за этого...
Поискал про дебаг и нашел: "FireTuner (Runtime Lua Console) – средство отладки во время игры и инструмент баз данных". Средство в SDK, кто бы мог подумать)) Попробую юзать. Спасибо за наводку!
Народ, разобрался во всем. Если кому интересно, кидаю набор файлов для мода: Вложение 5211
Решил пойти на большую авантюру: добавить в мод возможность развала государства при очень низком настроении. У меня возникла загвоздка в использовании функции Game.AddPlayer. Там три входящих параметра, но нет возвращаемого значения... Для меня это загадка. Как она работает?
Видел, что в 4ке тоже была подобная функция. Мб кто подскажет?
Я извиняюсь, вопрос немного не в тему. Насколько я помню, пятая цива анонсировалась как расширяемая по самое не балуй, вплоть до полной замены ИИ и логики игры. И делаться это должно было через SDK. Кроме вот этого: http://rghost.ru/2767708 есть что-нибудь? Действительно ли SDK позволяет полностью переделать геймплей?
Логику ИИ действительно можно немного менять. Есть набор стратегий в XML. Можно изменить настройки лидеров, сделать их более активными для экспансии, для культурной победы, так что логику в этом смысле менять можно, но чтобы сделать ИИ умнее, увы, надо копаться в ядре, а его нет. Если честно, руки чешутся переписать DLL
А вроде кроме SDK ничего и нет... Во всяком случае, мне ничего больше не знакомо.
Вообще хочется избавить от множества странных вещей, например, нанесения урона авиации юнитами, у которых нет перехвата (не понимаю логики разрабов!), чтобы варварские галеры не видели мои подлодки (да-да, было и такое!). Хочется увидеть шпионаж и культурное влияние (его вообще нет!! что за чушь!), колонии и вассалитет и многое другое.. Но это так.. уже митинг ) Тоже оффтопик...
Пойду разбираться, как работает AddPlayer...
Кстати... на счет гемплея. Я вот все собирался за религию и дипломатию взяться, но тут вот оказываеться что скоро будет дополнение 'Civilization V: Gods & Kings' в котором это уже все будет.
neocrator,выкладываю все, что наработал. Можно что-то выдрать для себя. Вложение 5296
Ты говорил, что техны раньше времени изучаются. Это просто из-за того, что в графике нет учета новых бонусов и штрафов + погрешность округления, но в целом робит.
Если найдешь косяки, пиши - исправлю. (кст, есть косяк с отображением среднего танка - дулом вниз ездит))) После выхода аддона, мод продолжу делать.
люди добрые, подскажите где конкретно находится файл с описанием тех? где параметр,отвечающий за стоимость научных договоров? кстати, идея для мода - стоимость науч. договоров также должна быть больше с количеством городов)
как правильно изменить в моде параметры карты? файл Civ5Worlds
<?xml version="1.0" encoding="utf-8"?>
<GameData>
<Worlds>
<Update>
<Set DefaultMinorCivs="25"/>
<Where Type="WORLDSIZE_HUGE"/>
</Update>
<Update>
<Set DefaultPlayers="18"/>
<Where Type="WORLDSIZE_HUGE"/>
</Update>
<Update>
<Set GridWidth="152"/>
<Where Type="WORLDSIZE_HUGE"/>
</Update>
<Update>
<Set GridHeight="96"/>
<Where Type="WORLDSIZE_HUGE"/>
</Update>
</Worlds>
</GameData>