Перейти к содержанию

Сообщения от Скрипты

В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero

array = {Chupa = 0, Lapa = 2, Nuba = 0, Roma = 2}
То есть тут без кавых он распознает как стринг? Или это тока ко 2 случаю? Интересно...
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
В ответ пользователю Dyrman
Аватар пользователя
Dyrman
То есть тут без кавых он распознает как стринг? Или это тока ко 2 случаю? Интересно...
Да, распознаёт.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
А в startThread можно как-нибудь задать изменяемое имя функции(она не любит кавых)? Например:

for i,e in mass
startThread(oops_..i.._F)
end;
Выше всего лишь образец)

Добавлено через 4 минуты
RedHeavenHero
Да, распознаёт.
Отлично. Попробуем поиздеваться. Спасибо.

Добавлено через 4 минуты
А составной индекс возможен? Или псевдоним? Типа обращаешься по двум разным стринговым именам, а получаешь одно и то же значение.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
В ответ пользователю Dyrman
Аватар пользователя
Dyrman
А в startThread можно как-нибудь задать изменяемое имя функции(она не любит кавых)? Например:

for i,e in mass
startThread(oops_..i.._F)
end;
Выше всего лишь образец)
Можно создать массив с функциями
array = {
[1] = function()
end, -- внутри массива ставить ";", следуя традициям, нельзя :)
[2] = function() -- они там для другого
end,
}
и обращаться к нему вот так: array[1](arg1, arg2)

или
function oops_1_F()end
function oops_2_F()end

for i=1,2 do
startThread(parse('oops_'..i..'_F()'))
end
Добавлено через 4 минуты
[/U]
Отлично. Попробуем поиздеваться. Спасибо.
Но их нельзя сцеплять или заменять переменными. Только в первом случае это возможно.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero

function oops_1_F()end
function oops_2_F()end

for i=1,2 do
startThread(parse('oops_'..i..'_F()'))
end
Забыл про волшебное parse :o Вот это здорово!
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
В ответ пользователю Dyrman
Аватар пользователя
Dyrman
А составной индекс возможен? Или псевдоним? Типа обращаешься по двум разным стринговым именам, а получаешь одно и то же значение.
Можно создать многомерный массив или сцеплять индексы, но это всё сложно, когда неизвестна цель.;)
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero
Можно создать многомерный массив или сцеплять индексы, но это всё сложно, когда неизвестна цель.;)
Цель мне тоже неизвестна :D , но понадобится может. Лучше сразу всё узнать :)
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
В ответ пользователю Dyrman
Аватар пользователя
Ну, в общем любой элемент может быть массивом (и не только ;)), обращение к нему простое:
array[index1][index2]
mass[index1][index2][index3]

но array[index1], mass[index1] и mass[index1][index2] должны быть массивами, а то будет ошибка.

присвоение пошаговое, если в первый раз
array = {}
array[ind1] = {}
array[ind1][ind2] = ""

сцепление индексов выглядит как сцепление строк
hero1 = 'Brem' --неявные переменные, полученные в результате чего-то
hero2 = 'Grok'

array[hero1..hero2] = element

но, если обращаться не array[hero1..hero2], а array[hero2..hero1], то вернёт nil. Поэтому лучше строки перед присвоением СРАВНИВАТЬ.
if hero1 >= hero2 then
array[hero1..hero2] = element
else
array[hero2..hero1] = element
end
Так и при обращении к массиву.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Автопереведено
ARTIFACT_DRAGON_SCALE_ARMOR = 36
ARTIFACT_DRAGON_SCALE_SHIELD = 37
ARTIFACT_DRAGON_BONE_GRAVES = 38
ARTIFACT_DRAGON_WING_MANTLE = 39
ARTIFACT_DRAGON_TEETH_NECKLACE = 40
ARTIFACT_DRAGON_TALON_CROWN = 41
ARTIFACT_DRAGON_EYE_RING = 42
ARTIFACT_DRAGON_FLAME_TONGUE = 43
 

К А
Стикеры GBF в Telegram
Аватар пользователя
Как реализовать через скрипты следующие вещи?

1) Перестройка городов на старте игры.
Для чего: ИРМГ генерирует некрасивые карты, а стандартный ГСК генерирует все города только 2 уровня с построенной таверной.
Нужно:
- первому игроку стартовый город 4 уровня (скажем, форт, таверна и жилище-1);
- всем последующим игрокам стартовый город 4 уровня плюс, вероятно, дополнительная постройка (жилище-2) - до 5 уровня, шанс зависит от номера игрока и равен 100% для последнего игрока
- все нейтральные города получают 6 уровень (скажем, форт-цитадель, жилище-1,2,3)
Проблема:
- Как перебрать города, существующие на карте, если их имена заранее неизвестны?
Придётся ли перебирать все существующие имена городов, прописанные в ресурсах игры на предмет их наличия на карте?

2) Забор хода у героев при встрече или после боя.
Для чего: запрет цепочек, лимит боёв.
Нужно:
- Забирать у героя 50% полного хода после сыгранной битвы (как в Disciples 2), если остаток хода героя меньше - забирать весь остаток хода. В идеале забирать только в том случае, если нейтралы не были отпущены без боя.
- При встрече дружественных героев выравнивать их остаток хода по минимуму (т.е. устанавливать остаток хода обоих героев равным наименьшему остатку хода среди них). При посещении героем гарнизонов шахт обнулять его ход (в идеале - только гарнизонов, чтобы ход не терялся при захвате шахты) - запрет шахтерских цепочек.
Проблемы:
- Как отследить факт проведения битвы (что-то типа триггера)?
- Как отследить факт встречи героев или посещения гарнизона?
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат
Аватар пользователя
Придётся ли перебирать все существующие имена городов, прописанные в ресурсах игры на предмет их наличия на карте?
Нет, там проще. Мне надо быть дома, чтобы написать. Возможно, Dyrman или RedHaven успеют раньше меня, а нет -- тогда я напишу.
По второму: есть триггер на соприкосновение. Хотя вешать триггеры на всех героев, наверное, не очень, но другого пути я не вижу.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
ПОМОГИТЕ:smile45:
Есть карта, есть скрипт:
function obj()
while 1 do
local heroes = {};
local m = 0;
local h = 0;
local count = 0;
heroes = GetPlayerHeroes(PLAYER_1);
--for m, h in heroes do
h = "Muscip";
if HasArtefact(h, 36) then
count = count + 1;
end;
if HasArtefact(h, 37) then
count = count + 1;
end;
if HasArtefact(h, 38) then
count = count + 1;
end;
if HasArtefact(h, 39) then
count = count + 1;
end;
if HasArtefact(h, 40) then
count = count + 1;
end;
if HasArtefact(h, 41) then
count = count + 1;
end;
if HasArtefact(h, 42) then
count = count + 1;
end;
if HasArtefact(h, 43) then
count = count + 1;
end;
end;
local sl = GetPlayerHeroes(PLAYER_1);
local res
if count == 8 then
print("Player 1 has all artifacts");
SetObjectiveState("obj", OBJECTIVE_COMPLETED);
Win ();
break;
end;
sleep(5);
end;
end;

startThread (obj);
Немножко подкорректировал его:
function obj()
while 1 do
local heroes = {};
local o = 0;
local h = 0;
local count = 0;
heroes = GetPlayerHeroes(PLAYER_1);
--for o, h in heroes do
h = "Muscip";
if HasArtefact(h, 36) then
count = count + 1;
end;
if HasArtefact(h, 37) then
count = count + 1;
end;
if HasArtefact(h, 38) then
count = count + 1;
end;
if HasArtefact(h, 39) then
count = count + 1;
end;
if HasArtefact(h, 40) then
count = count + 1;
end;
if HasArtefact(h, 41) then
count = count + 1;
end;
if HasArtefact(h, 42) then
count = count + 1;
end;
if HasArtefact(h, 43) then
count = count + 1;
end;
end;
o = "obj"
local sl = GetPlayerHeroes(PLAYER_1);
if count == 1 then
print("Player 1 has 1/8 artifacts");
SetObjectiveProgress(o, 1);
end;
if count == 2 then
print("Player 1 has 2/8 artifacts");
SetObjectiveProgress(o, 2);
end;
if count == 3 then
print("Player 1 has 3/8 artifacts");
SetObjectiveProgress(o, 3);
end;
if count == 4 then
print("Player 1 has 4/8 artifacts");
SetObjectiveProgress(o, 4);
end;
if count == 5 then
print("Player 1 has 5/8 artifacts");
SetObjectiveProgress(o, 5);
end;
if count == 6 then
print("Player 1 has 6/8 artifacts");
SetObjectiveProgress(o, 6);
end;
if count == 7 then
print("Player 1 has 7/8 artifacts");
SetObjectiveProgress(o, 7);
end;
if count == 8 then
print("Player 1 has all artifacts");
SetObjectiveState(o, OBJECTIVE_COMPLETED);
Win ();
break;
end;
sleep(5);
end;
end;

startThread (obj);

И скрипт перестал работать. Консоль пишет что-то вроде этого:
(Script) ERROR: no loop break
... ... (не помню:( что то писалось про 72 строку.)

Что это значит?
502 Bad Gateway
__________________________________
nginx/0.8.54
В ответ пользователю Warrior777
Аватар пользователя
Это можно уместить в 23 строки.:)
function obj()
local old = 0
while 1 do
local count = 0
for i=36,43 do
count = count + (HasArtefact("Muscip", i) or 0)
end
if count == 8 then
print("Player 1 has all artifacts")
SetObjectiveState("obj", OBJECTIVE_COMPLETED)
Win()
break
end
if count ~= old then
print("Player 1 has "..count.."/8 artifacts")
SetObjectiveProgress("obj", count)
old = count
end
sleep(5)
end
end

startThread (obj)


Добавлено через 4 минуты
Как перебрать города, существующие на карте, если их имена заранее неизвестны?
Придётся ли перебирать все существующие имена городов, прописанные в ресурсах игры на предмет их наличия на карте?
GetObjectNamesByType('TOWN') вернёт массив с именами всех городов на карте.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
А будет ли это работать в 1.6?
502 Bad Gateway
__________________________________
nginx/0.8.54
В ответ пользователю Warrior777
Аватар пользователя
Должно. Там нет ничего навороченного, чего бы не было в 1.6.

Добавлено через 5 минут
Проблемы:
- Как отследить факт проведения битвы (что-то типа триггера)?
- Как отследить факт встречи героев или посещения гарнизона?
1. GetLastSavedCombatIndex() вернёт количество проведённых битв на текущей карте.
2. С помощью триггера (16), как и сказал Ment. Отследить прикосновение героя к гарнизону практически невозможно.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4

Статистика

Приветствуем новейшего участника: Вязов Анатолий Аркадьевич