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

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

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

Ответ
Страница 261 из 267
 
Опции темы
#3901
Старый 13.06.2024, 02:54
  #3901
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

Jack_of_shadowsАзгалор, долго вспоминал, короче нужно в этом случае обязательно передавать все 5 вариантов ответов, если используются только 2, то после них добавить еще , nil, nil, nil.

Да, вот теперь всё работает как надо. Огромное спасибо) Впрочем, и не только за это, а ещё и за скрипты связанные с табличкой артефактов
Азгалор вне форума
Ответить с цитированием
#3902
Старый 14.06.2024, 10:28
  #3902
^
Madara_X
 
Аватар для Madara_X
📖
Регистрация: 08.06.2024
Сообщения: 7
Регистрация: 08.06.2024
Сообщения: 7
По умолчанию
Re: Скрипты

Друзья, как реализовать одновременные анимации? Сейчас из-за того что строчки кода идут последовательно, возникает рассинхронизация небольшая. Также хотел спросить насчет паузы между анимациями. Пока что поставил на IDLE, но в таком случае объекты после окончания анимации сразу начинают новую, а мне нужна пауза. Пока есть идея реализовывать все это через функции и циклы. Подскажите, правильно ли я мыслю? И если вдруг лень объяснять, может, кто-то знает, в каких сценариях были реализованы такие анимации? Я могу сам в них залезть и посмотреть)
Madara_X вне форума
Ответить с цитированием
#3903
Старый 14.06.2024, 13:46
  #3903
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

Madara_X,
Madara_Xкак реализовать одновременные анимации? Сейчас из-за того что строчки кода идут последовательно, возникает рассинхронизация небольшая.Также хотел спросить насчет паузы между анимациями. Пока что поставил на IDLE, но в таком случае объекты после окончания анимации сразу начинают новую, а мне нужна пауза

Прописать PlayObjectAnimation("скриптовое имя существа", "анимация", ONESHOT(ONESHOT_STILL если это анимация смерти(по желанию)), после написать sleep(нужное количество задержки), и после снова прописывать PlayObjectAnimation(), которая(ые) отработают уже после задержки из sleep()
Madara_XВ каких сценариях были реализованы такие анимации?

Первая миссия кампании за Фриду во Владыках, анимки тренирующихся существ в лагерях Рэндалла и Колдуэлла. Чтобы не бежать открывать туман войны на карте, можешь вбить в консоли @OpenCircleFog(0, 0, 0, 999, 1);
Азгалор вне форума
Ответить с цитированием
#3904
Старый 15.06.2024, 00:37
  #3904
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
Вопрос
Re: Скрипты

Всем добрый день, нужна помощь в написании кода скрипта. Задумка - любой случайный герой заходит в определенное здание и это здание проверяет есть ли у героя перк - выдает ему бонус за этот перк. Проблема в том, что нужно проверить имеет ли герой много перков и дать ему много бонусов если он их имеет, сам научился писать код для проверки только одного перка и дальше игра не читает. Прошу кодеров помочь, нужен максимально простой скрипт такого вида: функция перкиФ (херонейм) если "герой имеет скилл" (херонейм, например скилл стрельба) то "добавить герою существ" (херонейм, например лучники, в колве 1) также если "герой имеет скилл" (херонейм, например логистика искусная) то "добавить герою артефакт" (херонейм, например кандалы неизбежности, непередаваемый) также если "герой имеет скилл" (херонейм, например логистика развитая) то "изменить герою стат" (херонейм, например защита, +2) также если "герой имеет скилл" (херонейм, например свет развитый) то "обучить героя заклинанию" (херонейм, например замедление на искусном уровне) конец конец Тригер (герой касается объекта под названием тттт, запуск функции перкиФ) Сами примеры могут быть другими, важен принцип и логика написания кода, чтобы один тригер касания проверял большое количество перков и выдавал герою существ, артефакт, заклинание Еще надо чтобы присутстовал нил и касание работало один раз и не выдавало по сто раз бонусы. Буду благодарен за объяснение Еще вопрос есть Нужен скрипт который будет работать при начале сражения Старткомбат если в битве присутствует герой некромант и если он имеет перк лидерство то герой противника получает -1 к боевому духу и аналогично для развитого и искусного уровня на -2 и -3 бд. Спасибо за помощь.
green belly вне форума
Ответить с цитированием
#3905
Старый 15.06.2024, 17:29
  #3905
^
Madara_X
 
Аватар для Madara_X
📖
Регистрация: 08.06.2024
Сообщения: 7
Регистрация: 08.06.2024
Сообщения: 7
По умолчанию
Re: Скрипты

green bellyВсем добрый день, нужна помощь в написании кода скрипта. Задумка - любой случайный герой заходит в определенное здание и это здание проверяет есть ли у героя перк - выдает ему бонус за этот перк. Проблема в том, что нужно проверить имеет ли герой много перков и дать ему много бонусов если он их имеет, сам научился писать код для проверки только одного перка и дальше игра не читает. Прошу кодеров помочь, нужен максимально простой скрипт такого вида: функция перкиФ (херонейм) если "герой имеет скилл" (херонейм, например скилл стрельба) то "добавить герою существ" (херонейм, например лучники, в колве 1) также если "герой имеет скилл" (херонейм, например логистика искусная) то "добавить герою артефакт" (херонейм, например кандалы неизбежности, непередаваемый) также если "герой имеет скилл" (херонейм, например логистика развитая) то "изменить герою стат" (херонейм, например защита, +2) также если "герой имеет скилл" (херонейм, например свет развитый) то "обучить героя заклинанию" (херонейм, например замедление на искусном уровне) конец конец Тригер (герой касается объекта под названием тттт, запуск функции перкиФ) Сами примеры могут быть другими, важен принцип и логика написания кода, чтобы один тригер касания проверял большое количество перков и выдавал герою существ, артефакт, заклинание Еще надо чтобы присутстовал нил и касание работало один раз и не выдавало по сто раз бонусы. Буду благодарен за объяснение Еще вопрос есть Нужен скрипт который будет работать при начале сражения Старткомбат если в битве присутствует герой некромант и если он имеет перк лидерство то герой противника получает -1 к боевому духу и аналогично для развитого и искусного уровня на -2 и -3 бд. Спасибо за помощь.

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



Добавлено через 9 минут
Друзья, а подскажите, сколько одновременных функций может исполняться в игре? Сейчас занимаюсь анимациями персонажей: создаю отдельные функции и запускаю их через startThread(), однако заметил, что ровно на второй команде startThread() игра намертво зависает. Если объединить все анимации в одну функцию, то тогда все ок.
Madara_X вне форума
Ответить с цитированием
#3906
Старый 15.06.2024, 19:08
  #3906
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

green belly, про перки: удобней всего(наверное) будет создать таблицу, куда занести перки, тип награды за перк и соответственно сами награды за разные уровни мастерства. После написать функцию которая будет проверять наличие нужных перков и их мастерство, определять какой тип награды должен быть и выдавать за них саму награду.

Про статы для боя: думаю, можно определять какой расе принадлежит герой через HasHeroSkill(heroName, ID расовых статов(типа "мастер артефактов" у магов, "контрудар" у рыцарей, мститель у эльфов, "некромантия" у некромантов и т.д.), и если у героя есть тот или иной стат(а он, по стандарту, может быть у героя только один), приписывать его в нужную расу. С лидерством так же, но для проверки уровня мастерства нужно использовать функцию GetHeroSkillMastery(heroName, ID скилла), которая возвращает число от 0 до 4(0 - не владеет перком совсем, 1-3 - начально/развито/искусно, 4 - совершенно(вроде как только для расовых перков, типа "Совершенный контрудар". Напомню, что совершенные уровни расовых перков получаются только благодаря артефакту "Кулон Мастерства")), и в соответствии с уровнем мастерства применять GiveHeroBattleBonus(heroName, HERO_BATTLE_BONUS_MORALE, -нужное число)

p.s. функция баттл-бонусов работает только в версии 3.1)
Азгалор вне форума
Ответить с цитированием
#3907
Старый 15.06.2024, 21:57
  #3907
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
По умолчанию
Re: Скрипты

Madara_XДрузья, а подскажите, сколько одновременных функций может исполняться в игре? Сейчас занимаюсь анимациями персонажей: создаю отдельные функции и запускаю их через startThread(), однако заметил, что ровно на второй команде startThread() игра намертво зависает. Если объединить все анимации в одну функцию, то тогда все ок.
Потоков может быть много (в рамках разумного, возможно на нескольких десятках у кого-то начнет подтормаживать). Лично я чисто на всякий случай пускаю анимации существ только если игрок находится рядом (можно например в начале хода проверять расстояние герой-существа), но это уже мой режим параноика. Приведите простенький пример как именно запускаете и что происходит.
__________________
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#3908
Старый 19.06.2024, 15:32
  #3908
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Madara X, Азгалор, благодарю за ответы, со множественной проверкой перков в одном скрипте я разобрался) Но все ещё не могу разобраться с выдачей бонусов через givebattlebonus.
Нужен именно пример кода, может есть какие то карты у форумчан или примеры, где используют этот код.
Я ищу следующие примеры: 
1) если герой обладает навыком A, то дать ЭТОМУ ГЕРОЮ на один бой бонус (например +1 к скорости существам или +бд или + стат или + 1% к хп существам)
2) если герой обладает навыком B, то дать ГЕРОЮ ПРОТИВНИКА на один бой бонус (например -1 к скорости существ, - 1 бд, удачи и тд)
3) если герой обладает навыком C, то этот герой кастует в начале всех следующих битв заклинание D.
Благодарю за любые примеры и помощь!
green belly вне форума
Ответить с цитированием
#3909
Старый 19.06.2024, 21:12
  #3909
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

green bellyMadara X, Азгалор, благодарю за ответы, со множественной проверкой перков в одном скрипте я разобрался) Но все ещё не могу разобраться с выдачей бонусов через givebattlebonus.
Нужен именно пример кода, может есть какие то карты у форумчан или примеры, где используют этот код.
Я ищу следующие примеры: 
1) если герой обладает навыком A, то дать ЭТОМУ ГЕРОЮ на один бой бонус (например +1 к скорости существам или +бд или + стат или + 1% к хп существам)
2) если герой обладает навыком B, то дать ГЕРОЮ ПРОТИВНИКА на один бой бонус (например -1 к скорости существ, - 1 бд, удачи и тд)
3) если герой обладает навыком C, то этот герой кастует в начале всех следующих битв заклинание D.
Благодарю за любые примеры и помощь!

Вот такие статы можно менять у героев в GiveHeroBattleBonus(heroName, bonusType/bonusID, +-(если нужно прибавить, то + не ставить(иначе скрипт выдаст ошибку)) amount). Сами ID-шники и названия бонусов которые можно повысить или понизить(кроме Hitpoints(очки жизни существ), их можно только повышать):
HERO_BATTLE_BONUS_LUCK = 0
HERO_BATTLE_BONUS_MORALE = 1
HERO_BATTLE_BONUS_ATTACK = 2
HERO_BATTLE_BONUS_DEFENCE = 3
HERO_BATTLE_BONUS_HITPOINTS = 4
HERO_BATTLE_BONUS_INITIATIVE = 5
HERO_BATTLE_BONUS_SPEED = 6

Соответственно:
function buffsForbattle()
if HasHeroSkill("Duncan", SKILL_LUCK ) then
GiveHeroBattleBonus("Duncan", HERO_BATTLE_BONUS_SPEED, 1)
elseif...... и т.д.
end
end

Насчёт заклинаний: это нужно через SetGameVar и GetGameVar передавать, чтобы игра в боевом скрипте знала что вы хотите ей передать из походного скрипта.
Азгалор вне форума
Ответить с цитированием
#3910
Старый 25.06.2024, 01:23
  #3910
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Кто может подсказать в чем ошибка кода. Все работает в коде кроме одной строки с добавлением стата герою. Писал код по руководству ОГО:

function arena1F ()
gold = GetPlayerResource (1, 6);
if gold >= 2000
then
QuestionBox ("/Maps/Multiplayer/arena/napadenie1.txt", "yes", "no");
else MessageBox("/Maps/Multiplayer/arena/napadenie1nexvatka.txt");
end;
end;
function yes ()
SetPlayerResource (1, 6, gold-2000);
ChangeHeroStat(heroname, STAT_ATTACK, 1);
end;
Trigger (OBJECT_TOUCH_TRIGGER, "arena1", "arena1F");

Все сообщения работают, проверки на количество золота работают, списание -2000 золота работает, но вот нападение герою не выдается.

Пробовал ставить sleep(1) после строки списания голды, пробовал ставить/убирать херонаме, менял название yes на другое, чтобы не пересекались с другими функциями yes (просто на карте таких объектов еще множество), писал код на добавление атаки первой строкой и без второй строки со списанием золота, все равно не работает.

В чем может быть проблема?

green belly вне форума
Ответить с цитированием
#3911
Старый 25.06.2024, 01:55
  #3911
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

green belly, игра не знает кто такой heroname, которому она должна накинуть +1 атаки. Вот тебе рабочий вариант + добавил функцию на отрицательный ответ(а то в твоём случае, как я вижу, должна быть и функция на отрицательный ответ):
function arena1F(hero)
   arena1Fhero = hero
   gold = GetPlayerResource(1, 6)
      if gold >= 2000 then
         QuestionBox ("/Maps/Multiplayer/arena/napadenie1.txt", "yes", "no")
      else MessageBox("/Maps/Multiplayer/arena/napadenie1nexvatka.txt")
      end
end

function yes()
   SetPlayerResource(1, 6, gold-2000)
   ChangeHeroStat(arena1Fhero, STAT_ATTACK, 1)
end

function no() --это всего лишь пример того, что будет вызвано если нажать Нет. Код можно изменить под свои хотелки, или вовсе убрать вызов функции при отказе, заменив в QuestionBox "no" на nil
   SetPlayerResource(1, 6, gold-2000)
   ChangeHeroStat(arena1Fhero, STAT_LUCK, 1)
end

Trigger(OBJECT_TOUCH_TRIGGER, "arena1", "arena1F")
Азгалор вне форума
Ответить с цитированием
#3912
Старый 25.06.2024, 03:01
  #3912
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Азгалорgreen belly, игра не знает кто такой heroname, которому она должна накинуть +1 атаки. Вот тебе рабочий вариант + добавил функцию на отрицательный ответ(а то в твоём случае, как я вижу, должна быть и функция на отрицательный ответ):
function arena1F(hero)
   arena1Fhero = hero
   gold = GetPlayerResource(1, 6)
      if gold >= 2000 then
         QuestionBox ("/Maps/Multiplayer/arena/napadenie1.txt", "yes", "no")
      else MessageBox("/Maps/Multiplayer/arena/napadenie1nexvatka.txt")
      end
end

function yes()
   SetPlayerResource(1, 6, gold-2000)
   ChangeHeroStat(arena1Fhero, STAT_ATTACK, 1)
end

function no() --это всего лишь пример того, что будет вызвано если нажать Нет. Код можно изменить под свои хотелки, или вовсе убрать вызов функции при отказе, заменив в QuestionBox "no" на nil
   SetPlayerResource(1, 6, gold-2000)
   ChangeHeroStat(arena1Fhero, STAT_LUCK, 1)
end

Trigger(OBJECT_TOUCH_TRIGGER, "arena1", "arena1F")

Благодарю, заработало)
green belly вне форума
Ответить с цитированием
#3913
Старый 27.06.2024, 20:45
  #3913
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Снова я с вопросами((
Читаю инфу в инете и все равно не могу понять как правильно написать.
Вводные данные:
1) на карте 8 игроков - каждый сам за себя - все разные расы - у каждого своя "зона прокачки"

2) у каждого стоит своя постройка со скриптовым именем - предположим zdanie1 у первого игрока - zdanie2 у второго и так до 8 игрока.

Что нужно накодить:
1) случайный герой игрока 1 касается своей постройки zdanie1 и идет проверка наличия скилла, если скилл имеется, то дается боевой бонус на битву случайным ГЕРОЯМ ПРОТИВНИКА игроков 2-8.

Это ключевой момент всего скрипта, именно герою ПРОТИВНИКА.

Аналогично с другими игроками и их зданиями.
Случайный герой игрока 2 касается своего здания zdanie2 и идет проверка наличия скилла, если имеется, то выдается боевой бонус на битву всем героям противников, то бишь героям игроков 1,3-8.
И так по всем игрокам прописать.
2) Понимаю что примерно такого вида должен быть код (код будет ниже в пункте 3), но до конца не осилю его.

Стоит отдельно отметить, что я научился выдавать скиллы-заклинания-артефакты-боевые бонусы через тригер касания, но только тому кто касается здания (на моей карте это равняется дать плюшку СВОЕМУ герою ведь у каждого свое здание) за что большая благодарность АЗГАЛОРУ

3) Мой тестовый код который НЕ работает, но пытается, итак герой касается и погнали:

function zdanie1F ()
hero1 = GetPlayerHeroes(PLAYER_1);
hero2 = GetPlayerHeroes(PLAYER_2);
hero3 = GetPlayerHeroes(PLAYER_3);
hero4 = GetPlayerHeroes(PLAYER_4);
hero5 = GetPlayerHeroes(PLAYER_5);
hero6 = GetPlayerHeroes(PLAYER_6);
hero7 = GetPlayerHeroes(PLAYER_7);
hero8 = GetPlayerHeroes(PLAYER_8);
geroi1 = hero1
geroi2 = hero2
geroi3 = hero3
geroi4 = hero4
geroi5 = hero5
geroi6 = hero6
geroi7 = hero7
geroi8 = hero8
if HasHeroSkill (geroi1, условно скилл навигация)
then
GiveHeroBattleBonus (geroi2, бонус морали, -3);
GiveHeroBattleBonus (geroi3, бонус морали, -3);
GiveHeroBattleBonus (geroi4, бонус морали, -3);
GiveHeroBattleBonus (geroi5, бонус морали, -3);
GiveHeroBattleBonus (geroi6, бонус морали, -3);
GiveHeroBattleBonus (geroi7, бонус морали, -3);
GiveHeroBattleBonus (geroi8, бонус морали, -3);
Trigger (OBJECT_TOUCH_TRIGGER, "zdanie1", nil);
end;
end;
Trigger (OBJECT_TOUCH_TRIGGER, "zdanie1", "zdanie1F");

P.S. Копался в карте X-РТА - там есть подобный скрипт, только там реализован он без тригера и с помощью знаков -- которые подтягивают ранее прописанные значения типа --герой1 = херо1, ну а там уже кодеры серьезные.

green belly вне форума
Ответить с цитированием
#3914
Старый 27.06.2024, 22:29
  #3914
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
По умолчанию
Re: Скрипты

green belly, вот вам пару наводок:
Функция GetPlayerHeroes() возвращает массив героев, функция GiveHeroBattleBonus() принимает первым параметром имя одного героя. Нужно проходить циклом по всем героям в массиве. Например для PLAYER_2:
for i, hero in hero2 do
GiveHeroBattleBonus(hero, бонус морали, -3);
end
И так для всех противников.
Функция zdanie1F() принимает на вход имя героя который коснулся триггера. Это отражено было в коде который вам скидывал Азгалор. Его и нужно проверять в HasHeroSkill().
Знаки -- это комментарии, то есть не являются кодом. Советую глянуть какую-нибудь статью про lua, станет понятнее.
__________________
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#3915
Старый 28.06.2024, 00:09
  #3915
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Jack_of_shadowsgreen belly, вот вам пару наводок:
Функция GetPlayerHeroes() возвращает массив героев, функция GiveHeroBattleBonus() принимает первым параметром имя одного героя. Нужно проходить циклом по всем героям в массиве. Например для PLAYER_2:
for i, hero in hero2 do
GiveHeroBattleBonus(hero, бонус морали, -3);
end
И так для всех противников.
Функция zdanie1F() принимает на вход имя героя который коснулся триггера. Это отражено было в коде который вам скидывал Азгалор. Его и нужно проверять в HasHeroSkill().
Знаки -- это комментарии, то есть не являются кодом. Советую глянуть какую-нибудь статью про lua, станет понятнее.

Спасибо, поправил имена героев и прописал циклы, заработало)
green belly вне форума
Ответить с цитированием
Ответ
Страница 261 из 267


Опции темы



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


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

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