PDA

Просмотр полной версии : Не пойму, где не прав с LUA. Подскажите



pingvin156
26.01.2012, 20:31
Ребята, подскажите, пожалуйста, где же я не прав.:confused:
Идея такая:
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. Алгоритм расчета еще не сбалансирован, потому прошу не придираться :)

zombie_113
27.01.2012, 10:26
если честно, то знания луа и функций цивилки еще не настолько круты, дабы глядя в код можно указать на ошибку. Единственный совет - пользуйся дебагом. Ну хоть значения своих расчетов и работы функций выводи куда-нибудь.

pingvin156
27.01.2012, 18:36
Ну если я функции переношу в TopPanel и вывожу на верхнюю панель, то всё нормально - цифири считаются. Значит, сами-то функции верны.
А разве в ModBuddy есть дебаг? Я нажимаю F5, а он просто его собирает...

zombie_113
30.01.2012, 12:40
Насчет дебага ModBuddy... вроде как видел его там (щас на работе и проверить как бы не могу), но если честно то не юзал. Пока все что писал довольно простенькое и дебаг не нужен был.

Сами то функции может и верны, а вот передаются ли значения системе? Т.е. срабатывает ли функция ChangeResearchProgress ? Вот в чем вопрос. Кстати... а почему teamtech:ChangeResearchProgress(techID, ChangeProgress, pPlayer); ? У меня такое чувство что там должен быть pPlayer ибо функция ни про какой teamtech не знает...

pingvin156
30.01.2012, 18:33
По поводу функций я здесь сверяюсь: http://wiki.2kgames.com/civ5/index.php/Lua_Game_Objects/TeamTech
Мне подумалось, что ChangeResearchProgress это расшаренная функция для класса teamtech. Ну, буду экспериментировать. Кстати, нашел вроде ошибку (then отсутствовало). Надо проверить. Мб всё из-за этого...

Поискал про дебаг и нашел: "FireTuner (Runtime Lua Console) – средство отладки во время игры и инструмент баз данных". Средство в SDK, кто бы мог подумать)) Попробую юзать. Спасибо за наводку!

pingvin156
16.02.2012, 10:36
Народ, разобрался во всем. Если кому интересно, кидаю набор файлов для мода: 5211
Решил пойти на большую авантюру: добавить в мод возможность развала государства при очень низком настроении. У меня возникла загвоздка в использовании функции Game.AddPlayer. Там три входящих параметра, но нет возвращаемого значения... Для меня это загадка. Как она работает? :eek:
Видел, что в 4ке тоже была подобная функция. Мб кто подскажет?:mellow:

sweeper
16.02.2012, 19:49
Я извиняюсь, вопрос немного не в тему. Насколько я помню, пятая цива анонсировалась как расширяемая по самое не балуй, вплоть до полной замены ИИ и логики игры. И делаться это должно было через SDK. Кроме вот этого: http://rghost.ru/2767708 есть что-нибудь? Действительно ли SDK позволяет полностью переделать геймплей?

pingvin156
17.02.2012, 06:31
Логику ИИ действительно можно немного менять. Есть набор стратегий в XML. Можно изменить настройки лидеров, сделать их более активными для экспансии, для культурной победы, так что логику в этом смысле менять можно, но чтобы сделать ИИ умнее, увы, надо копаться в ядре, а его нет. Если честно, руки чешутся переписать DLL :)
А вроде кроме SDK ничего и нет... Во всяком случае, мне ничего больше не знакомо.
Вообще хочется избавить от множества странных вещей, например, нанесения урона авиации юнитами, у которых нет перехвата (не понимаю логики разрабов!), чтобы варварские галеры не видели мои подлодки (да-да, было и такое!). Хочется увидеть шпионаж и культурное влияние (его вообще нет!! что за чушь!), колонии и вассалитет и многое другое.. Но это так.. уже митинг :)) Тоже оффтопик...
Пойду разбираться, как работает AddPlayer...

zombie_113
17.02.2012, 16:33
Я извиняюсь, вопрос немного не в тему. Насколько я помню, пятая цива анонсировалась как расширяемая по самое не балуй, вплоть до полной замены ИИ и логики игры. И делаться это должно было через SDK. Кроме вот этого: http://rghost.ru/2767708 есть что-нибудь? Действительно ли SDK позволяет полностью переделать геймплей?

Пока больше ничего нету. =(
Но даже с этим можно творить чудеса. Там много логики прописано в LUA, что значит все это можно менять. Переделать гемплей можно достаточно сильно. Вплоть до полной неузнаваемости.

zombie_113
17.02.2012, 16:46
Кстати... на счет гемплея. Я вот все собирался за религию и дипломатию взяться, но тут вот оказываеться что скоро будет дополнение 'Civilization V: Gods & Kings' (http://forums.civfanatics.com/showthread.php?t=454123) в котором это уже все будет.

pingvin156
17.02.2012, 19:02
Конструктор, действительно, весьма неплохой вышел.
Ага, аддон уже увидел :) Ждём с нетерпением!

neocrator
26.03.2012, 14:14
а как экспансию аи усилить? а то действительно некоторые аи тупят всю начальную стадию игры. и как запустить указанную тут модификацию? куда кидать?

pingvin156
26.03.2012, 18:49
В настройках каждого лидера есть параметр экспансии. Вроде так и называется Expansion - тупо правится в XMLках.
Свою я не доделал. Решил подождать аддона... Эти файлики можно тупо добавить в проект своей модификации. :)

neocrator
26.03.2012, 18:52
так они не работают?(

pingvin156
26.03.2012, 20:51
Так не работают. В файле, описывающем мод, эти файлы указаны отдельно и подсасываются при загрузке мода, иначе он просто их не видит.

pingvin156
28.03.2012, 18:33
neocrator,выкладываю все, что наработал. Можно что-то выдрать для себя. 5296
Ты говорил, что техны раньше времени изучаются. Это просто из-за того, что в графике нет учета новых бонусов и штрафов + погрешность округления, но в целом робит.
Если найдешь косяки, пиши - исправлю. (кст, есть косяк с отображением среднего танка - дулом вниз ездит))) После выхода аддона, мод продолжу делать.;)

neocrator
28.03.2012, 23:47
опробуем) а там вставлен еще некий мод?


добавлено: 0,7 к науке от окружения. цифра прыгает (начало гры) через несколько ходов уже почему-то 0,27

neocrator
29.03.2012, 06:37
люди добрые, подскажите где конкретно находится файл с описанием тех? где параметр,отвечающий за стоимость научных договоров? кстати, идея для мода - стоимость науч. договоров также должна быть больше с количеством городов)

как правильно изменить в моде параметры карты? файл 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>

pingvin156
30.03.2012, 17:48
опробуем) а там вставлен еще некий мод?


добавлено: 0,7 к науке от окружения. цифра прыгает (начало гры) через несколько ходов уже почему-то 0,27
Да, встроил мод на изменение добычи ресов :)
** почему прыгает - я недавно тестил, все норм, мб циву, изучившую данную техну завалили))

pingvin156
30.03.2012, 17:55
техны тут: ........Steam\SteamApps\common\sid meier's civilization v\Assets\Gameplay\XML\Technologies\
Апдейт на глазок верный)
стоимость исследований где-то была в описании эр игры, а изменение от городов, наверное, только скрипт

neocrator
30.03.2012, 19:20
открыл модинфо в текстовом файле - глаза окосели) все-таки было бы классно получить мод, изменяющий чисто научные показатели. те получится две версии - полная и специальная, конкретная.