Скрипты - Страница 76 - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Картостроительство (Редактор карт) В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.

Ответ
Страница 76 из 261
 
Опции темы
#1126
Старый 12.04.2013, 10:24
  #1126
^
Dyrman
 
Аватар для Dyrman
📖
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
По умолчанию
Re: Скрипты

RedHeavenHeroarray = {Chupa = 0, Lapa = 2, Nuba = 0, Roma = 2}
То есть тут без кавых он распознает как стринг? Или это тока ко 2 случаю? Интересно...
Dyrman вне форума
Ответить с цитированием
#1127
Старый 12.04.2013, 10:31
  #1127
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

DyrmanТо есть тут без кавых он распознает как стринг? Или это тока ко 2 случаю? Интересно...
Да, распознаёт.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#1128
Старый 12.04.2013, 10:41
  #1128
^
Dyrman
 
Аватар для Dyrman
📖
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
По умолчанию
Re: Скрипты

А в startThread можно как-нибудь задать изменяемое имя функции(она не любит кавых)? Например:
	
for i,e in mass
startThread(oops_..i.._F) 
end;

Выше всего лишь образец)

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

Добавлено через 4 минуты
А составной индекс возможен? Или псевдоним? Типа обращаешься по двум разным стринговым именам, а получаешь одно и то же значение.
Dyrman вне форума
Ответить с цитированием
#1129
Старый 12.04.2013, 10:43
  #1129
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

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 минуты

Отлично. Попробуем поиздеваться. Спасибо.
Но их нельзя сцеплять или заменять переменными. Только в первом случае это возможно.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#1130
Старый 12.04.2013, 10:47
  #1130
^
Dyrman
 
Аватар для Dyrman
📖
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
По умолчанию
Re: Скрипты

RedHeavenHerofunction oops_1_F()end
function oops_2_F()end

for i=1,2 do
startThread(parse('oops_'..i..'_F()'))
end
Забыл про волшебное parse Вот это здорово!
Dyrman вне форума
Ответить с цитированием
#1131
Старый 12.04.2013, 10:53
  #1131
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

DyrmanА составной индекс возможен? Или псевдоним? Типа обращаешься по двум разным стринговым именам, а получаешь одно и то же значение.
Можно создать многомерный массив или сцеплять индексы, но это всё сложно, когда неизвестна цель.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#1132
Старый 12.04.2013, 10:59
  #1132
^
Dyrman
 
Аватар для Dyrman
📖
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
По умолчанию
Re: Скрипты

RedHeavenHeroМожно создать многомерный массив или сцеплять индексы, но это всё сложно, когда неизвестна цель.
Цель мне тоже неизвестна , но понадобится может. Лучше сразу всё узнать
Dyrman вне форума
Ответить с цитированием
#1133
Старый 12.04.2013, 11:16
  #1133
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

Ну, в общем любой элемент может быть массивом (и не только ), обращение к нему простое:
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
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#1134
Старый 16.04.2013, 20:08
  #1134
^
Ment
 
Аватар для Ment
📖
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30698
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30698
По умолчанию
Re: Скрипты

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
Ment вне форума
Ответить с цитированием
#1135
Старый 17.04.2013, 02:22
  #1135
^
Nargott
 
Аватар для Nargott
📖
Регистрация: 09.05.2009
Адрес: Смоленск
Сообщения: 1583
Регистрация: 09.05.2009
Адрес: Смоленск
Сообщения: 1583
По умолчанию
Re: Скрипты

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

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

2) Забор хода у героев при встрече или после боя.
Для чего: запрет цепочек, лимит боёв.
Нужно:
- Забирать у героя 50% полного хода после сыгранной битвы (как в Disciples 2), если остаток хода героя меньше - забирать весь остаток хода. В идеале забирать только в том случае, если нейтралы не были отпущены без боя.
- При встрече дружественных героев выравнивать их остаток хода по минимуму (т.е. устанавливать остаток хода обоих героев равным наименьшему остатку хода среди них). При посещении героем гарнизонов шахт обнулять его ход (в идеале - только гарнизонов, чтобы ход не терялся при захвате шахты) - запрет шахтерских цепочек.
Проблемы:
- Как отследить факт проведения битвы (что-то типа триггера)?
- Как отследить факт встречи героев или посещения гарнизона?
__________________
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат
Nargott вне форума
Ответить с цитированием
#1136
Старый 17.04.2013, 09:29
  #1136
^
Ment
 
Аватар для Ment
📖
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30698
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30698
По умолчанию
Re: Скрипты

Придётся ли перебирать все существующие имена городов, прописанные в ресурсах игры на предмет их наличия на карте?
Нет, там проще. Мне надо быть дома, чтобы написать. Возможно, Dyrman или RedHaven успеют раньше меня, а нет -- тогда я напишу.
По второму: есть триггер на соприкосновение. Хотя вешать триггеры на всех героев, наверное, не очень, но другого пути я не вижу.
Ment вне форума
Ответить с цитированием
#1137
Старый 17.04.2013, 15:32
  #1137
^
Warrior777
 
Аватар для Warrior777
📖
Регистрация: 15.09.2012
Адрес: Под кроватью
Сообщения: 602
Регистрация: 15.09.2012
Адрес: Под кроватью
Сообщения: 602
По умолчанию
Re: Скрипты

ПОМОГИТЕ
Есть карта, есть скрипт:

	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
502 Bad Gateway

__________________________________

nginx/0.8.54
Warrior777 вне форума
Ответить с цитированием
#1138
Старый 17.04.2013, 15:52
  #1138
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

Это можно уместить в 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
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#1139
Старый 17.04.2013, 15:55
  #1139
^
Warrior777
 
Аватар для Warrior777
📖
Регистрация: 15.09.2012
Адрес: Под кроватью
Сообщения: 602
Регистрация: 15.09.2012
Адрес: Под кроватью
Сообщения: 602
По умолчанию
Re: Скрипты

А будет ли это работать в 1.6?
__________________
502 Bad Gateway

__________________________________

nginx/0.8.54
502 Bad Gateway

__________________________________

nginx/0.8.54
Warrior777 вне форума
Ответить с цитированием
#1140
Старый 17.04.2013, 16:08
  #1140
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

Должно. Там нет ничего навороченного, чего бы не было в 1.6.

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

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
Ответ
Страница 76 из 261


Опции темы



Часовой пояс GMT +4, время: 11:47.


vBulletin v3.5.0, Copyright ©2000-2024, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru