Впервые здесь? Я Роха — провести быструю экскурсию?
Ошибка соединенияНеверный запросСтраница устарелаСессия истеклаТребуется входЗапрещеноНе найденоСлишком много запросовВнутренняя ошибка сервераПлохой шлюзСервис недоступенТайм-аут шлюзаВерсия HTTP не поддерживается
Сессия истекла
Ваша сессия истекла. Пожалуйста, войдите снова.
Требуется вход
Для этого нужна учётная запись. Войдите или создайте её — это займёт минуту.
Страница устарела
Токен безопасности отклонён — обычно потому, что страница была открыта слишком долго или вы вошли в систему в другом месте. Ничего не сохранено. Обновите страницу и повторите.
Запрос не выполнен
При обработке вашего запроса возникла проблема.
Проверьте подключение к интернету и попробуйте снова.
Детали ошибки:
Ссылка для шаринга
Сообщения от Текущие вопросы и ответы по редактору карт
1. Не знаю есть ли мод, но он делается довольно легко. В Shared нужно заменить ссылку анимсета на версию с арен.
2. В дневной функции нужен if чек по типу GetObjectCreatures, и если он возращает 0, то отнимается дневной прирост ресурсов шахты от общего количества.
2. Можете написать образец скрипта, работающего автоматически для любых шахт? То есть, добавил шахту золота — автоматически на неё распространилось действие.
2. Можете написать образец скрипта, работающего автоматически для любых шахт? То есть, добавил шахту золота — автоматически на неё распространилось действие.
Не претендую на истинность, возможны ошибки(не тестировал), но прототип получился примерно вот такой. Есть ещё вариант с отключением шахты по триггеру, и временное включение по взаимодействию, но я не знаю, что происходит раньше: выдача ресурсов или кастомные триггеры. По коду. Массив можно набрать руками, он константный - то есть от карты к карте будет одинаковым, если на карте не будет шахт нужного типа, то цикл выполнится целых 0 раз, ошибок от этого не будет. Ах да, ну и имена нужно задать всем шахтам, но они не обязательно должны быть осмысленные, можно любые. Лишь бы скрипт знал, что у шахты есть уникальное имя
minesArray = { {type = "BUILDING_SAWMILL",res = <айди ресурса>,dailyValue = <сколько производит шахта>} ... {type = <тип шахты(см types.xml base tables)>,res = <айди ресурса>,dailyValue = <сколько производит шахта>} } function checkMines() local weekMultiplier = 1; if(GetCurrentMoonWeek() == <айди недели союза>) then weekMultiplier = 3; end; if(GetCurrentMoonWeek() == <айди недели праздности(или как её)>) then weekMultiplier = 0.5; end for i,minesType in minesArray do local allMines = GetObjectNamesByType(minesType.type); for ind, mine in allMines do local owner = GetObjectOwner(mine); if(owner ~= 0) then if(GetObjectCreatures(mine,<айди существ>) < value) then local currentRes = GetPlayerResource(owner,minesType.res) SetPlayerResource(owner,minesType.res, currentRes - minesType.dailyValue * weekMultiplier); end; end; end; end; end; Trigger(NEW_DAY_TRIGGER,"checkMines");
Не уходи безропотно во тьму, Будь яростней пред ночью всех ночей, Не дай погаснуть свету своему!
Хоть мудрый знает – не осилишь тьму Во мгле словами не зажжёшь лучей – Не уходи безропотно во тьму.
А, и да. Имена шахтам задавать не нужно, GetObjectNamesByType их все спокойно создаёт.
Jewill, в общем-то, я попросил товарища Долгий написать скрипт только потому, что знаю, что это не две строчки, и совет "да там в триггере нового дня отбирать ресурсы" не факт, что поможет непосвящённому
А, и да. Имена шахтам задавать не нужно, GetObjectNamesByType их все спокойно создаёт.
Jewill, в общем-то, я попросил товарища Долгий написать скрипт только потому, что знаю, что это не две строчки, и совет "да там в триггере нового дня отбирать ресурсы" не факт, что поможет непосвящённому
Про имена спасибо - не знал, сам мучаюсь на карте объектам давать имена . Ну, пусть Долгий тоже напишет скрипт - товарищу, задавшему вопрос, будет целый зоопарк на выбор! А тут и правда, совсем не две строчки. Хотя я прекрасно понимаю, что иногда хочется показать своё истинное знание, а тратить время - не хочется уж совсем.
Добавлено через 1 минуту }{0TT@6bI4
Все красиво. Могу предложить упрощение: Создать таблицу с коеффами ресурсов от недель:
multiplies={[АЙДИ_НЕДЕЛИ_СОЮЗА]=3, [АЙДИ_НЕДЕЛИ_ПРАЗНОСТИ]=0.5} weekMultiplier=multiplies[GetCurrentMoonWeek()] or 1
Улучшение хорошее, да, вообще лучше избегать этих смешных проверок. Возвращясь к моему небольшому комментарию: не знаете, какие триггеры работают "первее"? Ниваловские, или самописные?
Не уходи безропотно во тьму, Будь яростней пред ночью всех ночей, Не дай погаснуть свету своему!
Хоть мудрый знает – не осилишь тьму Во мгле словами не зажжёшь лучей – Не уходи безропотно во тьму.
Отключение стандартной работы шахты по идее не отменит принос ресурсов (если захвачена). А так — ресурсы начисляются точно раньше, чем срабатывает триггер нового дня
Отключение стандартной работы шахты по идее не отменит принос ресурсов (если захвачена). А так — ресурсы начисляются точно раньше, чем срабатывает триггер нового дня
Грустно это, хотя и логично. Просто мне кажется вот эти манипуляции с отниманием не есть правильное решение. Хотя, просто по личному опыту и опыту всего этого топика, иногда правильного решения нет, точнее оно есть, но не реализуемо. В любом случае, спасибо, не буду мучаться в попытках перепрыгнуть ниваловские эвенты.
Не уходи безропотно во тьму, Будь яростней пред ночью всех ночей, Не дай погаснуть свету своему!
Хоть мудрый знает – не осилишь тьму Во мгле словами не зажжёшь лучей – Не уходи безропотно во тьму.
Не помню чтобы меня просили написать скрипт, но моя идея в целом похожа на скрипт Jewill'а. Только я тот ещё программист (не особо понимаю таблицы. 2D массивы мне ближе). Стоит учесть что есть ещё недели добычи 2х(дерево + руда), а также такие же на Серу+Ртуть и Кристаллы+Самоцветы, название которых не помню. И ещё неделя золота.
Добавлено через 3 часа 6 минут Jewill
Грустно это, хотя и логично. Просто мне кажется вот эти манипуляции с отниманием не есть правильное решение. Хотя, просто по личному опыту и опыту всего этого топика, иногда правильного решения нет, точнее оно есть, но не реализуемо. В любом случае, спасибо, не буду мучаться в попытках перепрыгнуть ниваловские эвенты.
Можно ещё через while 1 do это сделать. Где шахты, которые не проходят чек на наличие существ, становятся нейтральными.
Добавлено через 18 минут
--Назовите все шахты одинаковым именем плюс номер от 1 и далее: Например mine1, mine2, mine3, mine4 и т.д.
while 1 do sleep(10); for i = 1,"количество шахт на карте" do --"количество шахт на карте" заменить на номер if GetObjectCreatures("mine"..i,"IDсущества") == 0 and GetObjectOwner("mine"..i) ~= 0 then --заменить "IDсущества" на необходимое ID существа SetObjectOwner("mine"..i,0); end; end; end;
Добавлено через 1 час 2 минуты Правда нужно что-то, что остановит онейтраливание шахты, когда герой захватывает её и кладет существ в гарнизон. Иначе шахта станет нейтральной и придётся драться с этими существами. Нужно что-то по типу региона вокруг активного тайла шахты и условия что если в регионе нет героя то выполняется SetObjectOwner("mine"..i,0);. Но я думаю есть идея получше, но в голову пока не приходит.
Не помню чтобы меня просили написать скрипт, но моя идея в целом похожа на скрипт Jewill'а. Только я тот ещё программист (не особо понимаю таблицы. 2D массивы мне ближе). Стоит учесть что есть ещё недели добычи 2х(дерево + руда), а также такие же на Серу+Ртуть и Кристаллы+Самоцветы, название которых не помню. И ещё неделя золота.
Добавлено через 3 часа 6 минут
Можно ещё через while 1 do это сделать. Где шахты, которые не проходят чек на наличие существ, становятся нейтральными.
Добавлено через 18 минут
--Назовите все шахты одинаковым именем плюс номер от 1 и далее: Например mine1, mine2, mine3, mine4 и т.д.
while 1 do sleep(10); for i = 1,"количество шахт на карте" do --"количество шахт на карте" заменить на номер if GetObjectCreatures("mine"..i,"IDсущества") == 0 and GetObjectOwner("mine"..i) ~= 0 then --заменить "IDсущества" на необходимое ID существа SetObjectOwner("mine"..i,0); end; end; end;
Добавлено через 1 час 2 минуты Правда нужно что-то, что остановит онейтраливание шахты, когда герой захватывает её и кладет существ в гарнизон. Иначе шахта станет нейтральной и придётся драться с этими существами. Нужно что-то по типу региона вокруг активного тайла шахты и условия что если в регионе нет героя то выполняется SetObjectOwner("mine"..i,0);. Но я думаю есть идея получше, но в голову пока не приходит.
Возможно вариант с потоками и не худший, но я не очень понимаю, как его сюда пристроить. К тому же мне, почему-то, кажется монструозным любой скрипт в котором насчитывается с десяток потоков... Если у товарища, задавшего вопрос, нет познаний в скриптах, вариант с потоком(который нужно остановить-запустить в нужный момент) сломает всё желание заниматься картой, как по-мне. В вашем примере было бы замечательно реализовать остановку потока и проверки по взаимодействию с шахтой, но вот события завершения взаимодействия, т.е закрытия модального окна с гарнизоном, увы нет. А в нём можно было бы снова запускать поток, который всё проверял бы. Теоретически(но думаю сугубо теоретически), можно по взаимодействию давать скрипту отдохнуть(sleep()),на некоторое время, а затем снова включать поток. Только в таком случае существует вероятность того, что игрок быстро закроет модальное окно , пропустит ход, и ресурсы ему начислятся, хотя не должны.
Добавлено через 20 часов 7 минут Всем добрый день! Неоднократно читал о том, что TalkBoxForPlayers бьёт сейвы в мультиплеере. И столько же раз читал, что не бьёт. Есть какая-то реальность? И если бьёт - может причину кто знает, приблизительную. На решение не надеюсь :) Потому как инструмент великолепный.
Не уходи безропотно во тьму, Будь яростней пред ночью всех ночей, Не дай погаснуть свету своему!
Хоть мудрый знает – не осилишь тьму Во мгле словами не зажжёшь лучей – Не уходи безропотно во тьму.
Всем добрый день! Неоднократно читал о том, что TalkBoxForPlayers бьёт сейвы в мультиплеере. И столько же раз читал, что не бьёт. Есть какая-то реальность? И если бьёт - может причину кто знает, приблизительную. На решение не надеюсь Потому как инструмент великолепный.
Всё время, когда использовал TalkBoxForPlayers не было никаких проблем. Единственное, что могу сказать версия игры должна быть 3.1, ID игрока считается не как 1,2,3,4,5,6,7,8, а как 1,2,4,8,16,32,64,128, и два аргумента: IconTooltipRef и AddTextRef должны содержать только ковычки без ссылки "", так как всё равно текст ссылки не показывают(баг и т. п.). Примеры стабильно работающих TalkBoxForPlayers можете посмотреть на моей карте "Белый Храм". И да, редактировать код .lua советую только в программе HoMM5MapScriptsEditor.
Только что проверил карту в онлайн режиме. Первый раз нормально, а второй вылетило. Хмммм
Всё время, когда использовал TalkBoxForPlayers не было никаких проблем. Единственное, что могу сказать версия игры должна быть 3.1, ID игрока считается не как 1,2,3,4,5,6,7,8, а как 1,2,4,8,16,32,64,128, и два аргумента: IconTooltipRef и AddTextRef должны содержать только ковычки без ссылки "", так как всё равно текст ссылки не показывают(баг и т. п.). Примеры стабильно работающих TalkBoxForPlayers можете посмотреть на моей карте "Белый Храм". И да, редактировать код .lua советую только в программе HoMM5MapScriptsEditor.
Только что проверил карту в онлайн режиме. Первый раз нормально, а второй вылетило. Хмммм
Спасибо за разъяснение. Я уже определенный срок веду работу с этой функцией, нет проблем в использовании, есть проблема в потенциальном убийстве сейвов. Я тестирую в хот-сите(т.к ПК один и два клиента запустить не получается), и в нем вылетов не наблюдается, сейвы вроде не бьются. Но что-то страшно продолжать работать, сидя на пороховой бочке. Карту вашу посмотрю, спасибо.
Не уходи безропотно во тьму, Будь яростней пред ночью всех ночей, Не дай погаснуть свету своему!
Хоть мудрый знает – не осилишь тьму Во мгле словами не зажжёшь лучей – Не уходи безропотно во тьму.
Долгий, "можете написать скрипт" — это и была просьба) Вестимо, вы не заметили
Ваш вариант с проверками крайне нерационален с точки зрения времени выполнения. Это получается постоянно, всю игру, крутится цикл, внутри которого N раз за тик еще один. При этом нужно строго отслеживать число шахты и нумеровать каждую. Да, на новичку такой скрипт будет проще, чем таблицы (кстати, они до сих пор двумерные, в варианте Jewill), но тогда по итогу пользователь будет все решать таким методом в лоб и в более сложных ситуациях встанет в тупик. Мало того — автоматический сброс владельца с шахты будет срабатывать...сразу после её захвата! Если только человек не успеет быстро прокликать шахту и закинуть нужный гарнизон (а поди еще таскай с собой)... Плюс комп потеряет возможность держать эти шахты под контролем в принципе. Так что, при всем уважении к вашему опыту работы с мультиплеерами, кои по сей день действительно радуют глаз, предложенный вами вариант скрипта в текущем виде банально не является рабочим.
Jewill, не берусь однозначно утверждать, что они не могут привести к вылетам, но на личном опыте с таким не сталкивался тоже, как и Долгий.
З.ы. Раз уж зашло дело о советах, рекомендую посмотреть, как устроены толкбоксы в карте "Путь героя" (в скриптах talkbox.lia) или в MCCS
Долгий, "можете написать скрипт" — это и была просьба) Вестимо, вы не заметили
Ваш вариант с проверками крайне нерационален с точки зрения времени выполнения. Это получается постоянно, всю игру, крутится цикл, внутри которого N раз за тик еще один. При этом нужно строго отслеживать число шахты и нумеровать каждую. Да, на новичку такой скрипт будет проще, чем таблицы (кстати, они до сих пор двумерные, в варианте Jewill), но тогда по итогу пользователь будет все решать таким методом в лоб и в более сложных ситуациях встанет в тупик. Мало того — автоматический сброс владельца с шахты будет срабатывать...сразу после её захвата! Если только человек не успеет быстро прокликать шахту и закинуть нужный гарнизон (а поди еще таскай с собой)... Плюс комп потеряет возможность держать эти шахты под контролем в принципе. Так что, при всем уважении к вашему опыту работы с мультиплеерами, кои по сей день действительно радуют глаз, предложенный вами вариант скрипта в текущем виде банально не является рабочим.
Jewill, не берусь однозначно утверждать, что они не могут привести к вылетам, но на личном опыте с таким не сталкивался тоже, как и Долгий.
З.ы. Раз уж зашло дело о советах, рекомендую посмотреть, как устроены толкбоксы в карте "Путь героя" (в скриптах talkbox.lia) или в MCCS
Спасибо за советы. "Путь героя" что называется, исколупан мною не полностью конечно, но весьма обстоятельно... многоуважаемый автор своё дело знает. Если вы не сталкивались, то, пожалуй, не откажусь от такого соблазна - толкбоксы поиспользовать. Если я пропаду - значит они убивают сейвы и мне нужно переписывать 1000+ строк Чего делать не хочется... пы сы. А пока продолжу увлекательную песню "1000 и 1 вопрос к Хоттабычу и Ко по поводу веселой пляски скриптов в героях": Внимание вопрос(Так скажем - на подумать). Существует такая функция CanShowPlayer() , может там чуть иначе, она незадокументирована, но проверят возможность показать игроку Окно с сообщением. Мои тесты показали, что функция работает странно, то есть не всегда даёт однозначно ожидаемый результат. Однако,вроде как, когда открыты стандартные модальные(и не очень) окна, по-типу гарнизона, левел-апа и т.п, она возвращает nil,а после скрытия окна not nil. Как думаете, в комбинации с триггерами на касание любого объекта и потоком, проверяющим для игрока возможность показа окна, можно сделать триггер закрытия окна? Т.Е на примере вышеобсуждаемого скрипта, ловить момент, когда игрок взаимодействует с объектом, зачем засекать x1 - момент когда показ стал невозможен(Ну а началом координат берём начало работы потока в сегментах), затем x2 - момент, когда показ стал снова возможен. И соответственно в этот момент x2 мы и считаем, что триггер активирован - даём событие. В случае же если это наше собственное окно, мы ещё и можем этому потоку кидать "сигнал" в виде имени, например, чтобы выполнять определенное действие. Жуть какая-то вышла, но мне почему-то не дают покоя эти шахты... пы сы сы.
Вся эта песня лишь потому, что насколько мне понятно было из документации, через стандартный параметр callback у окошек нельзя передавать аргументы(Я буду счастлив, если как обычно не прав). А так можно было бы свои передать, что упразднило бы использование преступных массивов-буферов данных.
Не уходи безропотно во тьму, Будь яростней пред ночью всех ночей, Не дай погаснуть свету своему!
Хоть мудрый знает – не осилишь тьму Во мгле словами не зажжёшь лучей – Не уходи безропотно во тьму.
Привет! Кто-нибудь знает как можно сделать погоду? Например, хотелось бы добавить в игру дождь, снегопад, песчаную бурю, такое вот в общем. В Империи Единорога видел дождь на последней карте, но вот как это всё работает увы не знаю(