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

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

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

Ответ
Страница 191 из 260
 
Опции темы
#2851
Старый 15.10.2018, 15:31
  #2851
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

НибрусПомогите мне!
Как-только создают скрипт(простой, на анимацию атаки) у меня вылетает редактор карт.

А ты пишешь скрипт внутри редактора? Советую юзать отдельную прогу для этого дела, потому что сам редактор собсна вылетает вечно. Называется HoMM5MapScriptsEditor.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2852
Старый 15.10.2018, 20:42
  #2852
^
LetoX
 
Аватар для LetoX
📖
Регистрация: 16.11.2017
Сообщения: 67
Регистрация: 16.11.2017
Сообщения: 67
По умолчанию
Re: Скрипты

лично мне не удобно пользоваться этой прогой, просто перед тем, как закрыть окно, копируй текст и, если вылетело, вставляй его обратно.
LetoX вне форума
Ответить с цитированием
#2853
Старый 05.11.2018, 16:03
  #2853
^
Dyrman
 
Аватар для Dyrman
📖
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
Регистрация: 24.06.2008
Адрес: Там, где неба кончается край
Сообщения: 3479
Отправить сообщение для  Dyrman с помощью ICQ
По умолчанию
Re: Скрипты

Всем Добра!

Есть код:

		local slot = -1;
	local i_count = 0;
	local id, count;
	local temp_name = NHF_tempName_F("Nemor");
	local count_umertvie = GetHeroCreatures("Nemor", CREATURE_WIGHT);
	if  count_umertvie > 0 then 
		for i = 0,6 do
			id, count = GetObjectArmySlotCreature(temp_name,i);
			if id == CREATURE_WIGHT then
				slot = i;
			end;
			if count == 0 then
				i_count = i_count + 1;
			end;
		end;
		if i_count == 6 then	
			AddHeroCreatures("Nemor", CREATURE_SKELETON , 1);
			sleep();
			RemoveHeroCreatures("Nemor", CREATURE_WIGHT, count_umertvie);
			sleep();	
			AddHeroCreatures("Nemor", CREATURE_BANSHEE , count_umertvie,slot);
			sleep();	
			RemoveHeroCreatures("Nemor", CREATURE_SKELETON, 1);
			sleep();	
		else		
			RemoveHeroCreatures("Nemor", CREATURE_WIGHT, count_umertvie);
			sleep();	
			AddHeroCreatures("Nemor", CREATURE_BANSHEE , count_umertvie,slot);
			sleep();	
		end;
	end;

В режиме мультиплеера Умертвия сразу же заменяются на Баньши. В режиме же одиночной, чтобы увидеть изменение, необходимо выходить из интерфейса героя и вновь заходить. Можно ли это вылечить?
Dyrman вне форума
Ответить с цитированием
#2854
Старый 11.11.2018, 22:41
  #2854
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Подскажите пожалуйста: как заставить боевые скрипты работать в городе? Ставлю скрипт на враж. героя - ничего, на город- тоже ничего.
AlekseyS вне форума
Ответить с цитированием
#2855
Старый 12.11.2018, 17:10
  #2855
^
LetoX
 
Аватар для LetoX
📖
Регистрация: 16.11.2017
Сообщения: 67
Регистрация: 16.11.2017
Сообщения: 67
По умолчанию
Re: Скрипты

посмотрите стрипты на карте Эхо Пустоты, там в городе боевой скрипт
LetoX вне форума
Ответить с цитированием
#2856
Старый 12.11.2018, 21:16
  #2856
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

нужно начинать осаду (команда SiegeTown) через скрипт и в настройках команды указать нужный скрипт.
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein вне форума
Ответить с цитированием
#2857
Старый 12.11.2018, 21:22
  #2857
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

AstralLeinнужно начинать осаду (команда SiegeTown) через скрипт и в настройках команды указать нужный скрипт.

Та я решил проблему: поставил скрипт на атакующего игрока.
AlekseyS вне форума
Ответить с цитированием
#2858
Старый 29.12.2018, 19:54
  #2858
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Есть код:
	function dwellings()
for i, dw_type in {"FAIRIE_TREE", "WOOD_GUARD_QUARTERS", "HIGH_CABINS", "PRESERVE_MILITARY_POST"} do
for j, dw in GetObjectNamesByType(dw_type) do
ELF_DWLS[dw] = "откл"
SetObjectEnabled(dw, nil)
Trigger(4, dw, "TransformDwelling")
end
end
startThread(dwellings2)
end


startThread(dwellings)

function dwellings2()
while 1 do
repeat
sleep()
until IsPlayerCurrent(1)
for dwelling, state in ELF_DWLS do
if state == "вкл" then
ELF_DWLS[dwelling] = "откл"
SetObjectEnabled(dwelling, nil)
Trigger(4, dwelling, "TransformDwelling")
end
end
repeat
sleep()
until not IsPlayerCurrent(1)
for dwelling, state in ELF_DWLS do
if state == "откл" then
ELF_DWLS[dwelling] = "вкл"
SetObjectEnabled(dwelling, 1)
Trigger(4, dwelling, nil)
end
end
end
end


function TransformDwelling(hero, hut)
if GetCurrentPlayer() == 1 then
QuestionBox (path.."transformd.txt" , 'transformnok("'..hut..'")' );
end
end

function transformnok(hut)
if not (GetPlayerResource(1, CRYSTAL) >= 15 and GetPlayerResource(1,GEM) >= 10) then
ShowFlyingSign(path.."nores.txt",hut,-1,10)
return
end
SetPlayerResource(1,CRYSTAL, (GetPlayerResource(1,CRYSTAL) - 15))
SetPlayerResource(1,GEM, (GetPlayerResource(1,GEM) - 10))
PlayVisualEffect('/Effects/_(Effect)/Spells/Bless.xdb#xpointer(/Effect)', hut)
sleep(5)
Trigger(4, hut, nil)
ELF_DWLS[hut] = nil
ReplaceDwelling(hut,TOWN_HEAVEN)
sleep(1)
SetObjectOwner(hut,1)
SetObjectEnabled(hut,true)
sleep(1)
return function()
end
end

Мне нужно сделать, что если одно задание активно или невыполненное, тогда перестройку строений разрешить, а если выполнено, то нет. Так вот, можете подсказать, пожалуйста, куда мне написать саму проверку?
AlekseyS вне форума
Ответить с цитированием
#2859
Старый 29.12.2018, 20:49
  #2859
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

	function TransformDwelling(hero, hut)
local state = GetObjectiveState('нужное_задание')
if GetCurrentPlayer() == 1 and (state == OBJECTIVE_ACTIVE or state == OBJECTIVE_FAILED) then
QuestionBox (path.."transformd.txt" , 'transformnok("'..hut..'")' );
end
end

как-то так, если правильно понял условия
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2860
Старый 29.12.2018, 20:58
  #2860
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Gerter
	function TransformDwelling(hero, hut)
local state = GetObjectiveState('нужное_задание')
if GetCurrentPlayer() == 1 and (state == OBJECTIVE_ACTIVE or state == OBJECTIVE_FAILED) then
QuestionBox (path.."transformd.txt" , 'transformnok("'..hut..'")' );
end
end

как-то так, если правильно понял условия

Все работает, спасибо.
AlekseyS вне форума
Ответить с цитированием
#2861
Старый 13.01.2019, 13:24
  #2861
^
Grigoriy
 
Аватар для Grigoriy
📖
Регистрация: 02.11.2016
Сообщения: 134
Регистрация: 02.11.2016
Сообщения: 134
По умолчанию
Re: Скрипты

Приветствую. Может кто найдётся для указания нужного решения по скрипту:
В общем, есть определённая группа существ, которых по заданию надо будет уничтожить, при этом надо в определённый игровой день провести проверку их существования, чтобы указать на выполнение/невыполнение задания и, в случае, если какие-то из этих существ ещё находятся на карте, то передать их в армию определённого героя. Знаю, что нечто подобное реализовывалось в первой миссии кампании Фриды, однако как там это реализовано я, к сожалению, не понимаю
Grigoriy вне форума
Ответить с цитированием
#2862
Старый 13.01.2019, 14:27
  #2862
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

GrigoriyПриветствую. Может кто найдётся для указания нужного решения по скрипту:
В общем, есть определённая группа существ, которых по заданию надо будет уничтожить, при этом надо в определённый игровой день провести проверку их существования, чтобы указать на выполнение/невыполнение задания и, в случае, если какие-то из этих существ ещё находятся на карте, то передать их в армию определённого героя. Знаю, что нечто подобное реализовывалось в первой миссии кампании Фриды, однако как там это реализовано я, к сожалению, не понимаю

так, я не знаю, какие у вас общие познания в скриптах, поэтому попробую на пальцах:

Сначала нужно задать скриптовые имена нужным отрядам в редакторе и настроить их так, чтобы они гарантированно присоединялись к героям нужного вам игрока(нужные пункты выделены на скрине)

Нажмите на изображение для увеличения
Название: sdfsf.png
Просмотров: 11
Размер:	24.8 Кбайт
ID:	58323

Затем, уже в скрипте, для удобства запилить таблицу, через которую будет определять наличие отрядов на карте:
	stacks = {'скриптовое_имя_отряда_1', 'скриптовое_имя_отряда_2'... и т.д}

Потом использовать триггер нового дня для ежедневной проверки на существование отрядов:
	function NewDay()
  if GetDate(DAY) == 'день, когда нужно произвести проверку' then
  -- далее проверка существования отрядов и передача нужному герою
    for i, stack in stacks do
      if IsObjectExists(stack) then
        MakeHeroInteractWithObject('Скриптовое_имя_нужного_героя', stack)
      end
    end
  end
end

Trigger(NEW_DAY_TRIGGER, 'NewDay')
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2863
Старый 13.01.2019, 14:58
  #2863
^
Grigoriy
 
Аватар для Grigoriy
📖
Регистрация: 02.11.2016
Сообщения: 134
Регистрация: 02.11.2016
Сообщения: 134
По умолчанию
Re: Скрипты

Gerterтак, я не знаю, какие у вас общие познания в скриптах, поэтому попробую на пальцах:

Сначала нужно задать скриптовые имена нужным отрядам в редакторе и настроить их так, чтобы они гарантированно присоединялись к героям нужного вам игрока(нужные пункты выделены на скрине)

Вложение 58323

Затем, уже в скрипте, для удобства запилить таблицу, через которую будет определять наличие отрядов на карте:
	stacks = {'скриптовое_имя_отряда_1', 'скриптовое_имя_отряда_2'... и т.д}

Потом использовать триггер нового дня для ежедневной проверки на существование отрядов:
	function NewDay()
  if GetDate(DAY) == 'день, когда нужно произвести проверку' then
  -- далее проверка существования отрядов и передача нужному герою
    for i, stack in stacks do
      if IsObjectExists(stack) then
        MakeHeroInteractWithObject('Скриптовое_имя_нужного_героя', stack)
      end
    end
  end
end

Trigger(NEW_DAY_TRIGGER, 'NewDay')

Благодарю за ответ
То, что можно задать разное отношение существа к разным игрокам, я не знал
Таблицу из существ показанную выше я создал, но указанные существа, по квесту, могут быть уничтожены до указанного времени, то бишь, как я со своей дурной головушкой это понимаю, мне ещё нужна функция на проверку существования этих существ в принципе, для выполнения задания до указанного дня
Grigoriy вне форума
Ответить с цитированием
#2864
Старый 13.01.2019, 15:41
  #2864
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

ну это просто, делаете поток проверки:
	function CheckStacks()
  while 1 do
    local x
    for i, stack in stacks do
      if IsObjectExists(stack) then
        x = not nil
      end
    end
    if not x then
       SetObjectiveState('нужное_задание', OBJECTIVE_COMPLETED)
       break
    end
    if GetDate(DAY) == нужный_день then
      break
    end
    sleep()
  end
end

startThread(CheckStacks)
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2865
Старый 13.01.2019, 16:19
  #2865
^
Grigoriy
 
Аватар для Grigoriy
📖
Регистрация: 02.11.2016
Сообщения: 134
Регистрация: 02.11.2016
Сообщения: 134
По умолчанию
Re: Скрипты

Gerterну это просто, делаете поток проверки:
	function CheckStacks()
  while 1 do
    local x
    for i, stack in stacks do
      if IsObjectExists(stack) then
        x = not nil
      end
    end
    if not x then
       SetObjectiveState('нужное_задание', OBJECTIVE_COMPLETED)
       break
    end
    if GetDate(DAY) == нужный_день then
      break
    end
    sleep()
  end
end

startThread(CheckStacks)

Ага. Большое спасибо
Grigoriy вне форума
Ответить с цитированием
Ответ
Страница 191 из 260


Опции темы



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


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

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