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

Сообщения от Текущие вопросы и ответы по редактору карт

В ответ пользователю Gerter
Аватар пользователя
Gerter
Можно иметь сотни потоков одновременно и игра будет нормально это воспринимать. Не стоит только некоторые отдельные вещи в бесконечном потоке чекать, например, проверять стоимость пути в мувах соотв. функцией - вот это убивает игру даже одним потоком.
Что-ж, то, что низкого ограничения на количество открываемых потоков нет, это радует!

А вот касательно вещей, которые не стоит проверять в бесконечное потоке: у меня в скрипте следующие проверки используются, полагаю такие допускаются?

1) проверка, что через n-ое кол-во дней наступает событие (например - разблокировка региона, апдейт квеста), eventDay - глобальная переменная
function waitForEvent()
   while (1) do
      sleep(10)
      local currentDay = GetDate(DAY)
      if ((currentDay - eventDay) == 5) then
         --some code
         break
      end
      sleep(10)
   end
end

2) проверка, что у игрока нет городов и активных героев
function checkGoalCompletion()
   while (1) do
      sleep(10)
      local heroes = GetPlayerHeroes(id)
      local townsNumber = 0;
      for i, town in TOWNS do
         if (GetObjectOwner(town) == id) then
            townsNumber = townsNumber + 1
         end
      end
      if (heroes == 0 and townsNumber == 0) then
         --some code
         break
      end
      sleep(10)
   end
end

3) в гарнизоне города есть требуемое количество существ
function checkTownCreatures()
   while (1) do
      sleep(10)
      local creatures = GetObjectCreatures(obj, id)
      if (creatures >= NEEDED) then
         --some code
         break
      end
      sleep(10)
   end
end

Сценарии:
"Холм мертвецов"
"Священное древо"
Аватар пользователя
Да, все это будет без проблем работать.
Нет войне.
В ответ пользователю IchGViji

Всем привет! Нужна помощь. Не совсем понимаю, как работают все эти архивы в файлах игры...

Ситуация:
Я скачал мод на Повелители Орды, который добавляет кампании их Оригинала и Владык Севера. Я хочу именно в этом моде (т.е. в Повелителях Орды) отредактировать карты из данного мода.

Короче, отредактировать карты кампаний Оригинала/Владык Севера в моде на Повелители Орды... Как это сделать?

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

Всем привет! Нужна помощь. Не совсем понимаю, как работают все эти архивы в файлах игры...

Ситуация:
Я скачал мод на Повелители Орды, который добавляет кампании их Оригинала и Владык Севера. Я хочу именно в этом моде (т.е. в Повелителях Орды) отредактировать карты из данного мода.

Короче, отредактировать карты кампаний Оригинала/Владык Севера в моде на Повелители Орды... Как это сделать?

/
Открыть архив любым архиватором, например winrar. Перейти в Maps/Scenario/код_миссии (например A2C2M5). Внутри обратить внимание на 2 файла: map.xdb и GroundTerrain.bin. В редакторе создать пустую карту, сохранить и опять открыть архиватором. Заменить в карте файлы map.xdb и GroundTerrain.bin на те из мода. Новосозданная карта поменяется на нужную из кампании. После завершения всех изменений засунуть обновлённые map.xdb и GroundTerrain.bin обратно в Maps/Scenario/код_миссии мода
Мои карты: Белый Храм, Поменяться местами, Судьба королевства, Стихийные острова.
В ответ пользователю Долгий
Долгий
/
Открыть архив любым архиватором, например winrar. Перейти в Maps/Scenario/код_миссии (например A2C2M5). Внутри обратить внимание на 2 файла: map.xdb и GroundTerrain.bin. В редакторе создать пустую карту, сохранить и опять открыть архиватором. Заменить в карте файлы map.xdb и GroundTerrain.bin на те из мода. Новосозданная карта поменяется на нужную из кампании. После завершения всех изменений засунуть обновлённые map.xdb и GroundTerrain.bin обратно в Maps/Scenario/код_миссии мода

Чудесно! Спасибо большое за помощь! Очень  помогло, много чего перепробовал, только так получилось! Еди единственное, что при замене только этих 2 файлов в новой карте, редактирования их там и последующего возвращения в папку карты из мода карта ломалась... Скрипты не работали, хз.  Но я просто копировал не только эти 2 файла, а просто все файлы миссии, это помогало! Спасибо большое ещё раз!
Аватар пользователя
Приветствую!
В ходе разработки боевого скрипта возникла странная проблема. Суть в следующем - пытаюсь выполнить простое действие - получение глобальной переменной через GetGameVar(), чтобы в зависимости от её значения скрипт вёл себя немного по-разному. 
Знаю, что по дефолту возвращается строковое значение, поэтому прибавляю 0. В итоге в консоли ошибка, что я пытаюсь произвести арифметическое действие над строкой, остальной скрипт падает. Аналогично, если умножаю эту переменную на 1.
Решил потом проверить, может я в скрипте глобальной карты как-то по-иному назвал переменную, но нет, все верно. Причём затем решил продолжить бой, вызвать тот же самый код в режиме дебагга и в этот раз переменная после прибавления 0 в действительности стала числом.
Может кто-то знает, в чем дело и как с этим бороться? Ставил sleep-ы, увы, не помогло.

Сценарии:
"Холм мертвецов"
"Священное древо"
Аватар пользователя
IchGViji, чисто как предположение, если вызываешь GetGameVar() напрямую в скрипте, попробуй переместить её в функцию Start().
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
Аватар пользователя
Jack_of_shadows, даже переместив этот код в функцию Start(),  переменные не приводятся к числу. Пробовал переместить в функцию Prepare(), там тоже ошибку выдаёт. Потом решил скомбинировать - добавил считывание глобальных переменных и в функции Prepare(), и в функции Start() - думаю, не успеет считаться в Prepare() (там никакого друго кода не всталял), высчитает в Start(). Но тоже не помогло...

Сценарии:
"Холм мертвецов"
"Священное древо"
Аватар пользователя
А что выводит GetGameVar для этой переменной? Если там "1", то ошибки не будет, но вдруг у вас туда закралось "HappyBirthday"?
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
}{0TT@6bI4
А что выводит GetGameVar для этой переменной? Если там "1", то ошибки не будет, но вдруг у вас туда закралось "HappyBirthday"?

Это именно что число, а конкретно - уровень героя:

kasparLevel = GetGameVar("kasparLevel") + 0;

Добавлено через 3 минуты
И выводит именно уровень героя при дебагге

Сценарии:
"Холм мертвецов"
"Священное древо"
Аватар пользователя
local var = -(-GetGameVar("..."))
Попробуйте преобразовать так:
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
Хорошо, ещё вариант:
local var = GetGameVar("...")
var = var + 0
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
Как сделать диалоговую сцену в подземелье? На карте есть подземелье, но в окне DialogScene его открыть невозможно - функция ShowUnderground заблокирована
Модификация "New Era": 2%

Статистика

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