Скрипты для начинающих - Страница 7 - Форум HeroesWorld-а

Вернуться   Форум HeroesWorld-а > Все о игре Герои 5. All about Heroes 5 > Герои Меча и Магии 5 - Картостроительство (Редактор карт)
Имя
Пароль
Карта сайта Регистрация Справка Пользователи Календарь Все разделы прочитаны
Быстрая навигация по основным разделам форума:
Кланы HW Турниры на HW КАРТЫ и Картостроительство Heroes 6 Heroes 5 Heroes 4 Heroes 3 Heroes 2 Heroes 1 Might&Magic

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

Ответ
 
Опции темы
Старый 21.04.2016, 23:02   #91
LordRaia
 
Аватар для LordRaia
Регистрация: 10.11.2012
Сообщения: 21
LordRaia - уровень боевого духа
По умолчанию Re: Скрипты для начинающих

Цитата:
Сообщение от Ment
Я тогда не понимаю, как это у Вас работает... Вы точно за второго игрока-то играете? ) Если за первого, у Вас с квестами ничего не произойдёт, у Вас же в скрипте прописано, что меняется состояние только для второго игрока.

Это был такой некрасивый костыль, чтобы игрок был синего цвета. Поэтому игру я начинал за второго Но с цветом я уже разобрался - глянул ваш faq

Цитата:
Сообщение от Jack_of_shadows
В функции proph_event вроде бы не хватает end для if/else
Можно попробовать. После python как-то сложно свыкнуться с мыслью, что везде нужны end-ы

Upd: Спасибо Jack_of_shadows, end-а там действительно не хватало. Но теперь встает другая проблема: квест не хочет завершаться.

Код:
path = GetMapDataPath() function activate(obj) SetObjectiveState(obj,OBJECTIVE_ACTIVE,PLAYER_1) end function complete(obj) SetObjectiveState(obj,OBJECTIVE_COMPLETED,PLAYER_1) MessageBox(path.."text1.txt") end function proph_event(hero) if GetObjectiveState("Conquer") == OBJECTIVE_UNKNOWN then activate("Conquer") else if (GetObjectiveState("Conquer") == OBJECTIVE_ACTIVE and HasArtefact(hero, ARTIFACT_ENDLESS_BAG_OF_GOLD)) then complete("Conquer") Trigger(OBJECT_TOUCH_TRIGGER, "Prophet", nil) end end end SetObjectEnabled("Prophet", nil) Trigger(OBJECT_TOUCH_TRIGGER, "Prophet", "proph_event")

Я пытался закомментить кусок про проверку наличия артефакта у героя, все сработало нормально

Видимо, какая-то проблема в
Код:
and HasArtefact(hero, ARTIFACT_ENDLESS_BAG_OF_GOLD))
Какие есть идеи?
__________________
Злой пещерный демон
LordRaia вне форума   Ответить с цитированием
Старый 07.08.2016, 21:47   #92
Emris
Регистрация: 07.08.2016
Сообщения: 1
Emris - уровень боевого духа
По умолчанию Re: Скрипты для начинающих

Ребят здравствуйте я начинающий в этом деле,хотелось бы узнать вот какую вещь: Хочу увеличить кол - во существ в постройке. Как можно это сделать ?
Emris вне форума   Ответить с цитированием
Старый 09.08.2016, 01:34   #93
RedHeavenHero
 
Аватар для RedHeavenHero
Регистрация: 10.02.2012
Сообщения: 2358
RedHeavenHero - уровень боевого духа RedHeavenHero - уровень боевого духа RedHeavenHero - уровень боевого духа
Выставка наград
По умолчанию Re: Скрипты для начинающих

Цитата:
Сообщение от Emris
Ребят здравствуйте я начинающий в этом деле,хотелось бы узнать вот какую вещь: Хочу увеличить кол - во существ в постройке. Как можно это сделать ?
Если речь идет про жилища на карте - то, увы, можно только обновить прирост, то есть, в случае, если его выкупили, добавить обычное количество существ. Для города есть функции SetObjectDwellingCreatures и GetObjectDwellingCreatures, описание которых есть в мануале.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума   Ответить с цитированием
Старый 11.08.2016, 19:46   #94
Александр4444
Регистрация: 11.08.2016
Сообщения: 1
Александр4444 - уровень боевого духа
По умолчанию Re: Скрипты для начинающих

Уважаемые мастера "RedHeavenHero" и "Ment" прошу вашей помощи! У меня 2 задачи:
-1- Создается карта для сетевой игры от 2х до 8ми игроков, возможны команды. Нужно выполнить следующее условие - когда пример игрок1 нападает на замок вражеского игрока2 и выигрывает битву, то данный замок должен превратится в груду развалин. Потом любой игрок который своим героем "заденет/войдет" эту груду развалин должен получить сообщение "желаете отстроить замок своей фракции за N количества ресурсов ?" и предлагается выбор "да" или "нет". При выборе ответа "да" с данного игрока списывается N ресурсов и появляется вместо груды развалин замок данного игрока самого начального уровня. Если ресурсов не хватает, то выдать сообщение "не хватает ресурсов". А то надоело контролировать замки чуждых фракций, и юнитов не стыкуеш и врагу отдавать опасно!
-2- (не совсем честно) В самой первой версии Героев 5 во фракции "людей" разрешалось переобучать юнитов без ограничений, лижбы золота хватало. В последующих версиях сделали максимальное ограничение в 14 юнитов в неделю, что меня сильно печалит((((! Нужно убрать это ограничение для всех игроков, кто играет фракцией "людей".
---- Это должно быть 2 отдельных скрипта или еще как реализовано, так чтобы я мог применять их по отдельности или вместе. Играть собираюсь на лицензии по домашней сети или на одном компьютере. Будет здорово если в такую модифицированную карту можно будет сыграть с другом по интернету.
---- По скольку я ценю время грамотных/опытных людей готов в разумных пределах оплатить так сказать "тех поддержку" за текущие задания. Как вариант можете указать кошелек Киви и сумму. В 4х героях где можно было составлять скрипты из готовых блоков сам разобрался, а здесь изучать долго и вопросов много. По скольку игрой интересуюсь давно, возможно еще будут вопросы/задания. Желательно для возможных пояснений встретится в скайпе или тимспике.
Александр4444 вне форума   Ответить с цитированием
Старый 19.01.2017, 02:30   #95
X-HEROI
 
Аватар для X-HEROI
Регистрация: 15.02.2016
Адрес: Это Сочи, детка!
Сообщения: 7
X-HEROI - уровень боевого духа
Лампочка Re: Скрипты для начинающих

Ребят, добрый день.
Прошу о помощи! С Героями знаком более 7 лет и вот решил заняться картостроением. Конкретно прошу помощи по скриптам.
Я понимаю, что в этой теме выкладывают уже готовые функции, но всё же хотелось бы немного пояснения, какая строчка, за что отвечает. Безусловно можно потратить часик и с помощью перечня функций и т.д. можно "расшифровать" код...
Вот такая вот есть идея. Что-то простенькое написать и сам могу, но тут нужен просто совет и небольшое наставление. Так вот: при загрузке карты герою должно выдаваться основное задание, как добраться до точки. Как это будет правильно реализовать? Т.е. чтобы он добрался до определённого региона на карте, а там уже выполнился квест.
Буду благодарен за помощь, и было бы совсем удачей, если можно будет пообщаться с бывалым скриптером.
X-HEROI вне форума   Ответить с цитированием
Старый 19.01.2017, 13:54   #96
Ment
 
Аватар для Ment
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 22022
Ment - уровень боевого духа Ment - уровень боевого духа Ment - уровень боевого духа
По умолчанию Re: Скрипты для начинающих

Проще всего создать регион размера 1x1 и написать триггер по входу в этот регион:

Trigger(REGION_ENTER_AND_STOP_TRIGGER,"имя региона","FName")

Где FName -- имя функции. А перед этим собственно что должна делать функция

function FName(heroname)
 if GetObjectOwner(heroname)==1 then
  SetObjectiveState("имя задания", OBJECTIVE_COMPLETED)
  Trigger(REGION_ENTER_AND_STOP_TRIGGER,"имя региона",nil)
 end;
end;

Внутри функции мы, во-первых, сделали проверку условия, что heroname принадлежит первому игроку (если игрок-человек первый, конечно). Во-вторых, если условие выполнено, засчитали задание выполненным и отменили действие триггера, чтобы он больше не вызывался.
__________________
Цитата:
Сообщение от Arandor
лучше сделать и жалеть,чем не сделать и не жалеть х))




Ment вне форума   Ответить с цитированием
Старый 25.02.2017, 03:07   #97
X-HEROI
 
Аватар для X-HEROI
Регистрация: 15.02.2016
Адрес: Это Сочи, детка!
Сообщения: 7
X-HEROI - уровень боевого духа
Сообщение Re: Скрипты для начинающих

Спасибо большое! Помогло и всё работает.
А вот сейчас попрошу громко не смеяться. Матом покрывать можно меня или другой лексикой, обзывательного характера. Даже стыдно писать вообще с такой мелочью...
Вот самый наипростейший скрипт, который каждый из вас с закрытыми глазами напишет, даже если разбудить средь ночи.
Герой входит в регион и ему вылетает сообщение с единственной кнопочкой "Да". MessageBox и не паримся. Но вот на дворе 2 часа носи, а я сижу и ломаю голову - что от меня хочет этот скриптер.
Код:
function quest1message () MessageBox ("/Maps/SingleMission/Scenario 1/quest1.txt"); end; Trigger(REGION_ENTER_AND_STOP_TRIGGER, "quest1rg", "quest1message" );
Вроде... всё элементарно... но вот. Одна программка говорит, что всё в порядке. Стандартный скриптер ругается на саму фунцию. А в игре герой останавливается каждый раз, как попадает в регион, но сообщения нет. Вроде и все мануалы проштрудировал... и перечни функций... и вот такой пролёт
Пару скринов:


__________________
Завтра - это всего лишь другое название для сегодня.
X-HEROI вне форума   Ответить с цитированием
Старый 25.02.2017, 03:46   #98
RedHeavenHero
 
Аватар для RedHeavenHero
Регистрация: 10.02.2012
Сообщения: 2358
RedHeavenHero - уровень боевого духа RedHeavenHero - уровень боевого духа RedHeavenHero - уровень боевого духа
Выставка наград
По умолчанию Re: Скрипты для начинающих

Как минимум не совпадает путь текста - пропущена s в SingleMissions.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума   Ответить с цитированием
Старый 25.02.2017, 11:38   #99
Jack_of_shadows
 
Аватар для Jack_of_shadows
Регистрация: 08.09.2013
Сообщения: 465
Jack_of_shadows - уровень боевого духа
Выставка наград
По умолчанию Re: Скрипты для начинающих

Код:
"/Maps/SingleMission/Scenario 1/quest1.txt"
Лучше используйте
Код:
GetMapDataPath()..'quest1.txt'
А ещё лучше что-нибудь покороче (и писать меньше, и пространства для ошибок меньше):
Код:
function MsgBox(text, cb) MessageBox(GetMapDataPath()..text..'.txt', cb); end MsgBox('quest1');
И стоит разобраться более точно, не вызывается функция-каллбэк или вызывается но не выводится сообщение. Консоль и отладочные сообщения print('bla-bla') первейший инструмент для этого.
Jack_of_shadows вне форума   Ответить с цитированием
Старый 25.02.2017, 13:41   #100
X-HEROI
 
Аватар для X-HEROI
Регистрация: 15.02.2016
Адрес: Это Сочи, детка!
Сообщения: 7
X-HEROI - уровень боевого духа
По умолчанию Re: Скрипты для начинающих

Цитата:
Как минимум не совпадает путь текста - пропущена s в SingleMissions/.
Смеялся до посинения над такокой глупой ошибкой. Спасибо.

Цитата:
А ещё лучше что-нибудь покороче (и писать меньше, и пространства для ошибок меньше):

А можно немного всё расшифровать, пожалуйста? Прям вот по полочками и кажду частичку, если не трудно.
А насчёт print'a... Идея дельная, а самое главное - важная и полезная. Учту.
__________________
Завтра - это всего лишь другое название для сегодня.
X-HEROI вне форума   Ответить с цитированием
Старый 25.02.2017, 15:21   #101
Jack_of_shadows
 
Аватар для Jack_of_shadows
Регистрация: 08.09.2013
Сообщения: 465
Jack_of_shadows - уровень боевого духа
Выставка наград
По умолчанию Re: Скрипты для начинающих

Цитата:
А можно немного всё расшифровать, пожалуйста? Прям вот по полочками и кажду частичку, если не трудно.
Это общий подход для любого языка программирования - если вы используете какую-нибудь сложную конструкцию несколько раз (а MessageBox явно на карте будет не один), то можно всю повторяющуюся рутину вынести в отдельную функцию, а писать только то, что изменяется от раза к разу. На примере вашего
Цитата:
MessageBox ("/Maps/SingleMission/Scenario 1/quest1.txt");
Каждый раз в подобном случае вы будете повторять:
MessageBox - достаточно короткое название функции, но можно придумать и гораздо короче.
"/Maps/SingleMission/Scenario 1/" - путь у всех текстовых файлов вероятно будет один.
".txt" - расширение файла тоже не изменяется.
В результате всё, что будет повторятся, описывается один раз в новой функции, с удобным для вас и желательно коротким названием. В функцию передается только изменяющаяся часть - название файла. С помощью оператора ".." строчки склеиваются в одну. Второй параметр функции cb - аналогичен такому же второму параметру оригинального MessageBox (не буду объяснять его смысл, для этого есть документация). Второй параметр необязательный, можно его не указывать.
Код:
-- функция-обёртка вокруг MessageBox. Помещается где-нибудь в начале файла: function MsgBox(text, cb) MessageBox(GetMapDataPath()..text..'.txt', cb); end -- пример вызова сообщения, вместо MessageBox ("/Maps/SingleMission/Scenario 1/quest1.txt"); достаточно написать: MsgBox('quest1');
Если вы критически осмотрите свой код, уверен найдете кучу похожих мест, где можно оптимизировать громоздкие конструкции.

P.S. Конечно, если планируется написать для карты 100 строк кода и всё, то можно на подобные советы не заморачиваться.
Jack_of_shadows вне форума   Ответить с цитированием
Старый 25.02.2017, 15:44   #102
X-HEROI
 
Аватар для X-HEROI
Регистрация: 15.02.2016
Адрес: Это Сочи, детка!
Сообщения: 7
X-HEROI - уровень боевого духа
По умолчанию Re: Скрипты для начинающих

Вот. Теперь дошло, о чём идёт речь. Да... так ведь намного проще выходит... просто каждый раз указываем новое имя текстового файла, а сама функция вставляет его в нашу заготовку, описанной всего 1 словом: MsgBox, а после выполняется.
Цитата:
Второй параметр функции cb - аналогичен такому же второму параметру оригинального MessageBox (не буду объяснять его смысл, для этого есть документация). Второй параметр необязательный, можно его не указывать.

Второй параметр отвечает за вызов новой функции после нажатия "Ок" на сообщении. И верно, в руководствах сказано, что можно не писать его.
Хорошо, тогда следующий вопросик. "Каскадное задание". Допустим нам нужно захватить 3 разных шахты: лесопилку, рудную и серную. Как это будет правильней оформить? Задать 3 проверки и после каждой изменять статус задания или как? Или повесить триггер, который будет сверяться... например каждый день, есть ли у нас такая шахта?
__________________
Завтра - это всего лишь другое название для сегодня.
X-HEROI вне форума   Ответить с цитированием
Старый 25.02.2017, 16:01   #103
Jack_of_shadows
 
Аватар для Jack_of_shadows
Регистрация: 08.09.2013
Сообщения: 465
Jack_of_shadows - уровень боевого духа
Выставка наград
По умолчанию Re: Скрипты для начинающих

Если кроме игрока никто физически не сможет захватить шахты, то можно изменять статус по триггеру касания шахты. Если будут бегать компьютерные герои - тогда проверять раз в день или в отдельном потоке (функция startThread).
upd: хотя чего это я, не зависимо от компьютера можно проверять любым из трех вариантов, лишь бы корректно проверять кто именно захватил.
Jack_of_shadows вне форума   Ответить с цитированием
Старый 27.02.2017, 14:53   #104
X-HEROI
 
Аватар для X-HEROI
Регистрация: 15.02.2016
Адрес: Это Сочи, детка!
Сообщения: 7
X-HEROI - уровень боевого духа
Лампочка Re: Скрипты для начинающих

Цитата:
Если будут бегать компьютерные герои - тогда проверять раз в день или в отдельном потоке (функция startThread).
Хм... Да, в отдельном потоке наверно удобней. И пусть он проверяет каждый день: захватил или нет. Спасибо.
Теперь пришла ещё одна смешная проблемка.
Простое такое задание:
- Зашёл в регион - получил задание на поиск артефакта и выполнил предыдущее.
- Взял артефакт и задание выполнилось.
Создал неактивное задание, которое не выводится изначально, на поиск артефактов. Потом просто его активирую.

Код:
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "quest1end", "quest1end_quest2start"); function quest1end_quest2start() SetObjectiveState("quest1info", OBJECTIVE_COMPLETED, PLAYER_1); MsgBox('quest1end'); sleep('5'); MsgBox('quest2start'); SetObjectiveState("artifact1", OBJECTIVE_ACTIVE, PLAYER_1); Trigger(REGION_ENTER_AND_STOP_TRIGGER, "quest1end", nil); end;
Вроде всё хорошо, но вот после того, как берём мы артефакт, сразу миссия выиграна. В чём проблема? В отсутствии других заданий, или что-то перехимичил в свойствах карты?
__________________
Завтра - это всего лишь другое название для сегодня.
X-HEROI вне форума   Ответить с цитированием
Старый 27.02.2017, 20:45   #105
Jack_of_shadows
 
Аватар для Jack_of_shadows
Регистрация: 08.09.2013
Сообщения: 465
Jack_of_shadows - уровень боевого духа
Выставка наград
По умолчанию Re: Скрипты для начинающих

Так как задание primary, возможно, что если оно было единственным, то автоматически засчитывается победа по выполнению. Обычно для этого создается какое-нибудь основное задание, которе висит с начала игры и до конца (к примеру не потерять главного героя).
Еще можно поиграться с флагом Ignore:
Цитата:
Ignore— при значении“true” не учитывается при проверке на выигрыш и поражение.
Jack_of_shadows вне форума   Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.
Быстрый переход


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


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

Яндекс цитирование  Rambler\'s Top100   Рейтинг@Mail.ru

Авторские права - Copyright © 2002-2018 www.HeroesWorld.ru All rights reserved (new server)


На правах рекламы:123123