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

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

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

Ответ
Страница 206 из 259
 
Опции темы
#3076
Старый 21.01.2020, 18:48
  #3076
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

я бы предложил вариант покороче даже:

	red_squads = {["red1"] = 1, ["red2"] = 1, ["red3"] = 1,  ["red4"] = 1, ["red5"] = 1, ["red6"] = 1, ["red7"] = 1, ["red8"] = 1, ["red9"] = 1, ["red10"] = 1,
["red11"] = 1, ["red12"] = 1, ["red13"] = 1, ["red14"] = 1, ["red15"] = 1};

rednumber = 0

function CheckRedStacks()
  while 1 do
    for stack, exists in red_squads do
      if exists and (not IsObjectExists(stack)) then
        red_squads[stack] = nil
        rednumber = rednumber + 1
        if GetObjectiveState('нужное_задание') == OBJECTIVE_ACTIVE then
           SetObjectiveProgress('нужное_задание', rednumber)
        end
      end
    end
    sleep()
  end
end

startThread(CheckRedStacks)
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3077
Старый 21.01.2020, 18:52
  #3077
^
JonnyP
📖
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
По умолчанию
Re: Скрипты

	
function CheckRedStacks() --конкретно у меня тут проверка существования
while 1 do
for i, stack in red_squads do
if IsObjectExists(stack) == nil then
rednumber = 0 + 1;
end;
end;
end;
end;

function Checking()
while 1 do
sleep(5);
if rednumber == 1 then
SetObjectiveProgress('sec1', 1);
elseif rednumber == 2 then
SetObjectiveProgress('sec1', 2);
--и т.д
end;
end;
end;


	
...
function CheckRedStacks()
  while 1 do
    for stack, exists in red_squads do
      if exists and (not IsObjectExists(stack)) then
        red_squads[stack] = nil
        rednumber = rednumber + 1
        if GetObjectiveState('нужное_задание') == OBJECTIVE_ACTIVE then
           SetObjectiveProgress('нужное_задание', rednumber)
        end
      end
    end
    sleep()
 end
end
...


А зачем добавлять конструкцию типа "while 1 do ... end" ?
Ничего против не имею, просто интересно
JonnyP вне форума
Ответить с цитированием
#3078
Старый 21.01.2020, 19:04
  #3078
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

для создания бесконечного цикла проверки, очевидно
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3079
Старый 21.01.2020, 19:19
  #3079
^
JonnyP
📖
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
По умолчанию
Re: Скрипты

Gerterдля создания бесконечного цикла проверки, очевидно
Ок, задам по другому.
Какая цель этой бесконечной проверки?
JonnyP вне форума
Ответить с цитированием
#3080
Старый 21.01.2020, 19:27
  #3080
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

постоянно проверять существование стеков и обновлять прогресс задания при их уничтожении. конечно, мой цикл нужно дополнить условием выхода при прогрессе равном 15, но это мелочь уже.
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3081
Старый 21.01.2020, 19:41
  #3081
^
JonnyP
📖
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
По умолчанию
Re: Скрипты

Gerterпостоянно проверять существование стеков и обновлять прогресс задания при их уничтожении. конечно, мой цикл нужно дополнить условием выхода при прогрессе равном 15, но это мелочь уже.
Понятно.
Просто у меня небольшое недоумение вызвала реализация, но в целом вполне рабочий вариант.
JonnyP вне форума
Ответить с цитированием
#3082
Старый 21.01.2020, 19:58
  #3082
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

ну предложи свой вариант, будет интересно глянуть
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3083
Старый 21.01.2020, 20:15
  #3083
^
JonnyP
📖
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
По умолчанию
Re: Скрипты

Gerterну предложи свой вариант, будет интересно глянуть
Оптимальнее не использовать дополнительные бесконечные циклы. Как вариант, завязать проверку на COMBAT_RESULT, OBJECT_TOUCH или NEW_DAY.
Но в целом это не особо важно для скриптов к карте.
...
Набросал код в общих чертах (3 в одном). Не проверял.
	
-- Имена отрядов в редакторе карт
squadList = {
  "squad01", "squad02",	-- ... "squad99"
}


function connect()
  Trigger( NEW_DAY_TRIGGER, "onDateUpdate" )
  Trigger( COMBAT_RESULTS_TRIGGER, "onCombatFinish" )
  for i, squad in squadList do
    setSquadDisabled( squad )
    Trigger( OBJECT_TOUCH_TRIGGER, squad, "onObjectTouch" )	
  end
end


function setSquadDisabled( squad )
  SetObjectEnabled( squad, nil )
  -- SetDisabledObjectMode( squad, DISABLED_INTERACT )  -- меняет курсор
  -- SetMonsterSelectionType( squad, 0 ) -- убирает юбку
end


-- Если не критично ждать следующего дня (по сюжету или задумке)
function onDateUpdate()
  -- ...
  check()
end


-- Здесь есть возможность дополнительно узнать имя героя,
-- кол-во существ, результат битвы и т.д.
-- Суть способа - дополнительные расширенные возможности.
function onCombatFinish( index )
  -- local heroWinner = GetSavedCombatArmyHero( index, 1 )
  -- local heroLooser = GetSavedCombatArmyHero( index, 0 )
  check()
end


-- Здесь дополнительно придется узнавать стеки и их кол-во у обьекта,
-- или полностью завязать на скрипт исключая установки редактора.
-- Суть способа - запускать контролируемую проверку после боя.
function onObjectToucch( hero, object )
  StartCombat( hero, nil, ... , "check", ... ) -- ??? Куча разных параметров, мб ошибся
end


function check()
  local count = getSquadCount()
  if count == length( squadList ) then
    -- Убиты все отряды -> действия ...
  else
    -- Очевидно, что в редакторе должны быть указаны все ProgreesFile's
    -- в количестве равном кол-ву отрядов в списке squadList
    SetObjectiveProgress( , count )
  end
end


function getSquadCount()
  local count = 0
  for i, squad in squadList do
    if IsObjectExists( squad ) then
      count = count + 1
    end
  end
  return count
end


startThread( connect )

JonnyP вне форума
Ответить с цитированием
#3084
Старый 22.01.2020, 02:41
  #3084
^
Izenhorn
📖
Регистрация: 17.01.2020
Сообщения: 2
Регистрация: 17.01.2020
Сообщения: 2
По умолчанию
Re: Скрипты

Кстати тоже любопытные скрипты, спасибо. Можно много где применить. Правда для задания ожидать нового дня, когда тебе надо обновить задание в реальном времени, может быть критично
Izenhorn вне форума
Ответить с цитированием
#3085
Старый 22.01.2020, 03:35
  #3085
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

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


а если говорить глобально, то триггеры в некоторых ситуациях просто неприменимы, в отличие от подобных потоков
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3086
Старый 22.01.2020, 14:36
  #3086
^
John_Lock
 
Аватар для John_Lock
📖
Регистрация: 03.01.2017
Сообщения: 124
Регистрация: 03.01.2017
Сообщения: 124
По умолчанию
Re: Скрипты

Есть ли какая-нибудь документация по пользованию расширенным редактором карт? Очень много интересного можно с ним сделать, но как работать я не знаю. Знаю, как только включить его.

Для расширенного редактора нужна лицензионная версия?

Спасибо за предоставленные выше коды)
John_Lock вне форума
Ответить с цитированием
#3087
Старый 23.01.2020, 22:41
  #3087
^
JonnyP
📖
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
По умолчанию
Re: Скрипты

Gerterмноговато лишних движений, имхо, для столь простых задач. ну да тут неважно, оба варианта рабочие, человек выберет, какой ему будет понятнее и удобнее.
а если говорить глобально, то триггеры в некоторых ситуациях просто неприменимы, в отличие от подобных потоков
Согласен. Если уж отходить от примера, то лучше поток вообще использовать только если другие варианты не подходят. Чем больше проверок (условий) тем лагучее карта.

User01322342Есть ли какая-нибудь документация по пользованию расширенным редактором карт? Очень много интересного можно с ним сделать, но как работать я не знаю. Знаю, как только включить его.
Для расширенного редактора нужна лицензионная версия?
...
Там вроде нет ничего такого особенного, чему стоит учиться. Различия точно не вспомню, но вроде из полезного позволяет открывать ресурсы игры, выбирать нужные окна (?), запаковывать изменения в архив карты, мб еще что-то. По линцензионной версии - скорее всего не имеет значения.
JonnyP вне форума
Ответить с цитированием
#3088
Старый 25.01.2020, 20:07
  #3088
^
John_Lock
 
Аватар для John_Lock
📖
Регистрация: 03.01.2017
Сообщения: 124
Регистрация: 03.01.2017
Сообщения: 124
По умолчанию
Re: Скрипты

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


Там вроде нет ничего такого особенного, чему стоит учиться. Различия точно не вспомню, но вроде из полезного позволяет открывать ресурсы игры, выбирать нужные окна (?), запаковывать изменения в архив карты, мб еще что-то. По линцензионной версии - скорее всего не имеет значения.
В этом и проблема. Я не знаю как добавить на карту объекты из расширенного редактора.
John_Lock вне форума
Ответить с цитированием
#3089
Старый 26.01.2020, 14:37
  #3089
^
JonnyP
📖
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
По умолчанию
Re: Скрипты

User01322342В этом и проблема. Я не знаю как добавить на карту объекты из расширенного редактора.
О каком "расширенном редакторе" идет речь? Он не дает возможности добавлять обьекты.
Или речь о моде?
JonnyP вне форума
Ответить с цитированием
#3090
Старый 28.01.2020, 09:10
  #3090
^
dredknight
📖
Регистрация: 24.10.2015
Сообщения: 696
dredknight#9852
Регистрация: 24.10.2015
Сообщения: 696
dredknight#9852
По умолчанию
Re: Скрипты

Is there a way to get what object is on specific coordinates?

For example GetObjectFromLocation(x,y)

Or the only way is to rotate through all existing objects on the map and check them one by one?
dredknight вне форума
Ответить с цитированием
Ответ
Страница 206 из 259


Опции темы



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


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

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