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

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

В ответ пользователю Долгий
4 года назад
Долгий

Путь текста не должен содержать / перед Maps?

Ну а так, всегда смотрите, что консоль говорит.

Консоль не  жалуется, спросил у знакомого, который в этом дерьме разбирается и он говорит мне, что все я нормально написал и сделал, должно работать, но просто не работает потому-что не работает. И как это понять? Какого черта оно не работает?
В ответ пользователю Shiroyasha2910
Аватар пользователя
4 года назад
Shiroyasha2910

Консоль не  жалуется, спросил у знакомого, который в этом дерьме разбирается и он говорит мне, что все я нормально написал и сделал, должно работать, но просто не работает потому-что не работает. И как это понять? Какого черта оно не работает?

Удалили слеш перед Maps?
Аватар пользователя
4 года назад
Текстовый файл где создавали? Должна быть кодировка Unicode. Не UTF-8, хоть это тоже юник
В ответ пользователю }{0TT@6bI4
Аватар пользователя
4 года назад
}{0TT@6bI4
Текстовый файл где создавали? Должна быть кодировка Unicode. Не UTF-8, хоть это тоже юник

Точно
В ответ пользователю }{0TT@6bI4
4 года назад
}{0TT@6bI4
Текстовый файл где создавали? Должна быть кодировка Unicode. Не UTF-8, хоть это тоже юник

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

SetObjectEnabled("dolmen1", false);

Единственная команда, которая у меня заработала, это:

SetPlayerStartResources(1, 0, 0, 0, 0, 0, 0, 5000);

Но это первый скрипт, который я написал для карты, после этого, такое ощущение, что больше никакие скрипты, которые я вписываю, не работают.

Решил прикольнуться, зашел сейчас в сам редактор -> свою карту -> Map Properties -> Script -> нажимаю кнопку Script и сразу вылетает редактор. Но как я понял, это обычный случай для обычного редактора.

В ответ пользователю Shiroyasha2910
Аватар пользователя
4 года назад
Shiroyasha2910

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

SetObjectEnabled("dolmen1", false);

Единственная команда, которая у меня заработала, это:

SetPlayerStartResources(1, 0, 0, 0, 0, 0, 0, 5000);

Это первый скрипт, который я прописал, после этого, такое ощущение, что больше никакие скрипты, которые я вписываю, не работают.

Окей, тогда по новой. Открывай свой текстовый файл, копируй что там написано. После этого открой файлы карты, удали его. Перезапусти карту. Потом поставь объект Signpost(указатель), в нём слева в MessageFile нажми New, введи то же название что было у твоего файла и нажми Ok, после откроется пустое окно с этим файлов. Вставляй туда свой текст, жми Окей, закрывай карту и тестируй в игре появится ли текст.

 

Если не сработает, скинь свою карту("названиекарты.h5m" файл в папке Maps)



Добавлено через 6 минут
Shiroyasha2910
Решил прикольнуться, зашел сейчас в сам редактор -> свою карту -> Map Properties -> Script -> нажимаю кнопку Script и сразу вылетает редактор. Но как я понял, это обычный случай для обычного редактора.
Не пользуйся этой кнопкой, представь что её нет) Скрипты пиши/редактируй либо в текстовом файле в корне файлов карты(как я, и многие другие делают), либо же пользуйся HoMM5MapScriptsEditor(вообще, в ней рекомендую и писать скрипты, а потом переносить в текст. Однако не советую в нём делать заметки на русской раскладке, т.к. при переносе в lua файлик может полететь русский текст и тогда тот станет "ломаным арабским" Точно так же может случиться если русский текст скопировать из lua файлика карты и перенести в ScriptsEditor)
В ответ пользователю Азгалор
4 года назад
Азгалор

Окей, тогда по новой. Открывай свой текстовый файл, копируй что там написано. После этого открой файлы карты, удали его. Перезапусти карту. Потом поставь объект Signpost(указатель), в нём слева в MessageFile нажми New, введи то же название что было у твоего файла и нажми Ok, после откроется пустое окно с этим файлов. Вставляй туда свой текст, жми Окей, закрывай карту и тестируй в игре появится ли текст.

 

Если не сработает, скинь свою карту("названиекарты.h5m" файл в папке Maps)


Не, это работает. В карте уже добавленные задания или тексты с указателей работают. Может быть это просто на дольмене не работает? Заработало, поменял на дерево Сильваны и заработало, только теперь после прочтения текста, я не могу зайти в героя, а другой, игровой текст (например: ваш герой больше не может ходить на этом ходу, заклинание изучено) начал отображаться через секунд 5-10 от изначального. Короче, походу я воистину гений, если у меня такие простые команды вызывают баги в игре -_-

 

Насчёт редактора я знаю) Поэтому изначально пользуюсь ScriptsEditor))

Аватар пользователя
4 года назад
Shiroyasha2910, у тебя всё равно не запускается функция из OBJECT_TOUCH_TRIGGER?

Добавлено через 38 минут
Shiroyasha2910
Не, это работает. В карте уже добавленные задания или тексты с указателей работают. Может быть это просто на дольмене не работает? Заработало, поменял на дерево Сильваны и заработало, только теперь после прочтения текста, я не могу зайти в героя, а другой, игровой текст (например: ваш герой больше не может ходить на этом ходу, заклинание изучено) начал отображаться через секунд 5-10 от изначального. Короче, походу я воистину гений, если у меня такие простые команды вызывают баги в игре -_-
Задержки скорее всего вызывает какой-то цикл(или циклы, если их несколько), я не зря просил карту залить. А с дольменом ошибка вероятно от того, что ты в дольмене прописал скриптовое имя по другому, не так как в Trigger( OBJECT_TOUCH_TRIGGER, "", "")
В ответ пользователю Азгалор
4 года назад
Азгалор
Shiroyasha2910, у тебя всё равно не запускается функция из OBJECT_TOUCH_TRIGGER?

Добавлено через 38 минут
Задержки скорее всего вызывает какой-то цикл(или циклы, если их несколько), я не зря просил карту залить. А с дольменом ошибка вероятно от того, что ты в дольмене прописал скриптовое имя по другому, не так как в Trigger( OBJECT_TOUCH_TRIGGER, "", "")
Понял тебя. Возможен-ли вариант, чтобы я тебе куда-нибудь в личные сообщения скинул карту?
В ответ пользователю Shiroyasha2910
Аватар пользователя
4 года назад
Shiroyasha2910

Понял тебя. Возможен-ли вариант, чтобы я тебе куда-нибудь в личные сообщения скинул карту?
Да, нажми на мой ник и там будет "Отправить личное сообщение"
Аватар пользователя
4 года назад
Приветствую. Как-то можно отслеживать гарнизоны без имён? GetObjectNamesByType их не отображает. Может, есть какая-то другая функция для них?
Аватар пользователя
4 года назад
Точно не находит по "BUILDING_GARRISON"?
Если нет, то остаётся один способ: парсить map.xdb собственной программой, устанавливая всем объектам типа гарнизон скриптовое имя
В ответ пользователю }{0TT@6bI4
Аватар пользователя
4 года назад
}{0TT@6bI4
Точно не находит по "BUILDING_GARRISON"?

Да, к сожалению... Ни BUILDING_GARRISON, ни в принципе по BUILDING. Решил это дело протестировать на одной из карт где у бота во владении шахты, домики и гарнизоны. Через BUILDING набрал массив владений бота и сделал SetObjectOwner, и у всех зданий бота, кроме гарнизонов, сменился владелец. Не отслеживаются даже те гарнизоны, которые имеют имена.

 



Добавлено через 8 часов 26 минут
Прописал себе небольшой скрипт: 
function NoFlee( n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20 )
heroeslist = { n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20 }
for key, heroes in heroeslist do
if IsObjectExists( heroes ) ~= nil then
DenyAIHeroFlee( heroes, 1 )
print("Герой ", heroes, " больше не покидает бои пока не погибнет")
end
end
end

Всё работает, но дико напрягает ругань консоли на неверный первый аргумент в IsObjectExists, который возникает из-за незаполненых аргументов. Можно ли как-то переписать скрипт или что-то добавить, чтобы массив заполнялся только заполненными аргументами? Или же переписать так, чтобы консоль не ругалась на пустые аргументы. 

Аватар пользователя
4 года назад
Азгалор, в функцию можно сразу передавать таблицу:
   
function NoFlee(heroeslist)
for key, heroes in heroeslist do
if IsObjectExists( heroes ) ~= nil then
DenyAIHeroFlee( heroes, 1 )
print("Герой ", heroes, " больше не покидает бои пока не погибнет")
end
end
end

-- Пример использования
NoFlee({n1, n2, n3});
Аватар пользователя
4 года назад

Здравствуйте. Возникла странная проблема с откастовкой заклинаний в боевом скрипте.

function DefenderCreatureDeath (unit)
  if exist ('Priest') then
  sleep (2)
  SetUnitManaPoints(Osillian, GetUnitManaPoints(Osillian)+50)
  sleep (1)
  UnitCastAimedSpell (Osillian, SPELL_RESURRECT, unit)
  sleep (5)
  UnitCastAimedSpell (Osillian, SPELL_CELESTIAL_SHIELD, unit)
  end
end

В данном куске скрипта мне необходимо, чтобы после смерти стека защитников их герой воскрешал их, а затем навешивал небесный щит. Воскрешение работает нормально, а вот небесный щит не хочет накидываться ни в какую. В консоли пишет рядовое "Unit can't cast aimed spell...". Уже два дня бьюсь над тем, в чем соль, был бы очень признателен, если бы кто-нибудь подсказал).

И еще один вопросик: мне нужно, чтобы в ход героя противника его лучник, назовем его 'Hunter', стрелял по какому-то из существ героя игрока, при этом не по конкретному. Но у меня не хватает воображения на то, чтобы понять, как это сделать. Вроде как, нужно составить таблицу существ, которые будут входить в пул выбора лучника, но непонятно, как ее сделать, плюс еще здесь ведь не будет работать обычный commandShot, так что как заставить потом лучника непосредственно стрелять? 

Статистика

Приветствуем новейшего участника: recijeb

Сейчас на сайте 6 пользователей 1297 гостей