Alinksolo, тогда сделайте так: Скопируйте свой текст, поставьте на вашей карте объект Signpost(это указатель. Найдёте его почти в самом низу среди Объектов), выделите его и слева в окошке в строке MessageFileRef нажмите New, введите название, ну например Reg0Message. После этого у вас откроется окошко для ввода текста, вставьте/впишите туда свой текст, подтвердите, закройте окошко и удалите указатель. В файлах вашей карты появится текстовый файл Reg0Message, введите путь к нему в ваш MessageBox в скрипте, т.е. MessageBox( "Maps/SingleMissions/greet/Reg0Message.txt" ), сохраните карту а после проверьте в игре полученный результат.
Alinksolo, я кстати понял вашу вероятную ошибку. Вы создавали файл на рабочем столе, например, или в проводнике, а потому он имел неправилтную кодировку (скорее всего, ASCI), а должен быть строго Unicode. Рекомендую обзавестись редактором скриптов и создавать текстовые файлы через него, это удобно.
Сударь }{0TT@6bI4, извините за такой объёмный вопрос, но он назрел. Как вообще писать боевые скрипты? Что можно почитать по этому поводу, и что конкретно надо сделать? Как создать файлы CombatScript.lua и CombatScript.xdb? Если просто запихиваешь чужие изменённые файлы в распакованную карту, ScriptsEditor матерится, и вообще отказывается открывать эту карту, когда потом её обратно запакуешь. Хотя, может быть, это я так наменяла, что он матерится. В интернетах об этом только какие-то клочки информации, толкового руководства я не нашла.
О, млин, так чтобы его почитать, надо ВКонтакте региться?( Меня вообще нет в соцсетях, и очень не хочется туда попадать. А просто скачать это где-то нельзя?
ЗЫ Ладно, ради такого дела я зарегилась, и даже подписалась. Ушла читать.
Добавлено через 1 час 2 минуты Простите, }{0TT@6bI4, но я прочитала, и не поняла ничего.
"Чтобы создать xdb файл скрипта, нужно зайти в Map Properties Tree => Map Script и вместо скрипта карты создать новый. В нём в ScriptFile выбрать из Игра/Editor/H5MMods/Имя карты/ луа файл скрипта. Сохранить, затем вернуть (выбрав или прописав путь вручную)."
Я открываю Map Properties Tree => Map Script, создаю новый скрипт, называю его Kot. И вижу: (я бы вставила скриншот, который вижу, но тут мне пишут, что не поддерживают ни перемещение файлов в формате png, ни в jpg, а в каком формате тут можно вставлять скриншоты, и как это сделать?) Словом, я не вижу никакого луа файла моей карты, потому что его нет. Я его не создавала, - я не знаю как.
Ваше руководство хорошо для продвинутых пользователей, но я новичок в этом деле. Вы можете просто написать, на что жать, чтобы создать CombatScript.lua? Вы пишете в своём руководстве про хуки, - но вы не пишете, где их надо писать, - видимо, именно в этом файле?
Марта, выбирите любое существо/героя на карте, в окошке слева увидите строчку CombatScript, наведите указатель на null и нажмите на него, после чего нажмите на New, дайте название будущему xdb файлу который будет вести к lua файлу. Например, Combat_1. Далее, откроется окошко(если не откроется то нажмите на многоточие где до этого по соседству выбирали New), там у вас уже будет открыт путь к созданному xdbшнику. Справа увидите две строки: FileName и ScriptText. Делайте точно такую же операцию в FileName как делали с созданием xdbшника, назовите его так же как и xdbшник(получится, что у вас должны будут появиться два файла Combat_1). Собственно, в заполненном FileName у вас появится путь к lua файлу. Выбрав путь и нажав Edit вместо многоточия, вы сможете редактировать этот lua файл. Так же, luaшник можно редактировать и нажатием на многоточие в строке ScriptText.
counter = length(enemy_creatures) --Размер счётчика не задаётся вручную
for enemy = 1, counter do if GetHeroCreatures(hero, enemy_creatures[enemy])>=1 then counter = counter -1 end end
немного изменив. Всё работает. Но рекомендую воспользоваться более удобным решением обхода массива:
for key, id in enemy_creatures do if GetHeroCreatures(hero, id)>=1 then counter = counter - 1 end end
Здравствуйте! Протестировал, почему-то у меня более удобный вариант работает правильно, а вот первый так же делает неправильное число. Кстати, протестировал его в "расширенной" версии моего скрипта, то есть...
function conditions() print("reputation = ", reputation ); for h, heroes in player_heroes do for e, enemy in enemy_creatures do for f, friend in friend_creatures do if GetHeroCreatures(heroes, enemy) > 0 and GetHeroCreatures(heroes, enemy) <= 99 then reputation = reputation - 1 sleep(1) elseif GetHeroCreatures(heroes, enemy) >= 100 then reputation = reputation - 2 sleep(1) elseif GetHeroCreatures(heroes, friend) > 0 then reputation = reputation + 1 end end end end end
И вот что странно. Стоят у меня на карте Валерия и Лоренцо(рыцари из массива), Валерия к тому же ещё и в резерве(это как бы ошибка, ведь для резерва(как я понял) её не должно быть изначально на карте. Поэтому не знаю влияет ли её наличие в резерве на скрипт который проверяет армии у героев), и я тестирую так: дал Валерии в резерве зелёных архангела и паладина(которые в массиве как "друзья" за которых капает +1 в репутацию за отряд), той что на карте только зелёного архангела(+1 в репутацию), а у Лоренцо 40 лендлордов, 50 стрелков, 20 ревнителей, 10 боевых грифонов, 6 адептов, 4 рыцаря Изабель, 2 падших ангела. В сумме, Лоренцо должен давать -7 репутации, т.к. каждый красный это -1 и ни одного из них не больше 100, но почему-то счетчик сходит с ума, выдавая мне -126 очков. А ещё он начинает сходит с ума если я у Лоренцо уволю всех существ кроме, например, 40 лендлордов. Тогда он мне постепенно будет понижать счетчик до минус небольшого числа(16-36), а после совсем обнулит.
В общем, у меня задумка такая: игрок будет иметь счетчик, называющийся репутация(reputation), который: понижается за "плохих" существ и повышается за "хороших", в дальнейшем ещё планирую некоторые факторы добавить как например захват сокровищниц которыми владеет определённый игрок, битву с "хорошими" существами (о чем я уже ранее спрашивал но пока не реализовывал). Вообще, я хотел бы всю эту систему со счётчиком под одной функцией поселить, но не знаю хорошая ли это идея. Вот, нуждаюсь в помощи
Марта, Ответить => Расширенный Режим => Вложения (кнопка визу), вот так можно прикрепить изображения.
Вот выкладка из одного их руководств: Для начала создадим новый lua и xdb файлы скрипта, в которых будет написан боевой скрипт, и привяжем его к герою. Это действие выполняется для всех героев, специализация которых работает в бою. Чтобы создать новый xdb-файл, откроем карту и найдём Map Properites Tree => MapScript. Нажимаем на эту строчку, выделяем текущее содержимое и копируем в буфер обмена (Ctrl+C). Затем жмём New => Вводим имя CombatScript => OK. Можно, конечно, просто заново зайти в Map Properties Window => Script => Edit Script и продолжить редактировать скрипт боевой специализации оттуда, но он часто вылетает, поэтому далее настоятельно рекомендую пользоваться редактором скриптов. Сохраняем-закрываем карту, открываем её в редакторе скриптов. В любой папке создаём новый lua-файл (File=>New *.lua) и сохраняем, закрываем. Теперь снова открываем карту в редакторе, MapScript => … => FileName => … => В проводнике идём в Editor/H5Mods/Имя карты/Maps/SingleMissions/ИмяКарты/=> Выбираем отсюда наш файл lua. Ну или оттуда, куда положили. Сохраняем-закрываем редактор и возвращаемся в редактор скриптов. Итак, общие приготовления к созданию боевого скрипта закончены. Теперь в основном скрипте карты пишем SetHeroCombatScript('Hero', '/Maps/SingleMissions/ИмяКарты/CombatScript.xdb#xpointer(/Script)'). Этим действием вы повесили скрипт, который будет выполняться каждый раз, когда герой Hero вступает в бой. Также перед созданием боевых скриптов рекомендую ознакомиться с руководством по боевым скриптам.