Впервые здесь? Я Роха — провести быструю экскурсию?
Ошибка соединенияНеверный запросСтраница устарелаСессия истеклаТребуется входЗапрещеноНе найденоСлишком много запросовВнутренняя ошибка сервераПлохой шлюзСервис недоступенТайм-аут шлюзаВерсия HTTP не поддерживается
Сессия истекла
Ваша сессия истекла. Пожалуйста, войдите снова.
Требуется вход
Для этого нужна учётная запись. Войдите или создайте её — это займёт минуту.
Страница устарела
Токен безопасности отклонён — обычно потому, что страница была открыта слишком долго или вы вошли в систему в другом месте. Ничего не сохранено. Обновите страницу и повторите.
Запрос не выполнен
При обработке вашего запроса возникла проблема.
Проверьте подключение к интернету и попробуйте снова.
Отключать стандартный бонус не нужно, проверка на наличие артефактов очень легкая, а вторая часть действительно выглядит очень сложной, хочешь написать, что лучше пока забыть об этом?
Уж не знаю, зачем такая имбища, в виде таких дебаффов, что и стандартный дебафф отключать не нужно, но от Хоттабыча был гайд на тему боевых скриптов, с примерами. В любом случае, я забыл упомянуть, что конкретной длительности и силы этих заклинаний не сделать - всё будет зависеть от параметров героя, от лица которого будет идти скриптовое заклинание.
Привет! Кто-нибудь сталкивался с таким багом? У меня в боевом скрипте прописано, что герой кастует общее ускорение вначале каждого боя. Всё работает до тех пор, пока герой не оденет том магии света, после чего во время боя консоль жалуется что герой не может применить заклинание общее ускорение. Это вообще как-нибудь поправимо?
Привет! Кто-нибудь сталкивался с таким багом? У меня в боевом скрипте прописано, что герой кастует общее ускорение вначале каждого боя. Всё работает до тех пор, пока герой не оденет том магии света, после чего во время боя консоль жалуется что герой не может применить заклинание общее ускорение. Это вообще как-нибудь поправимо?
Возможно, что герою не хватало маны в момент теста с томом?
Возможно, что герою не хватало маны в момент теста с томом?
Хм, странно получается. У меня скрипт прописан так, что сначала даётся мана на спелл, а потом кастуется сам спелл. Почему-то если в начале боя у героя не хватает маны на спелл, то даже после выдачи игра его не кастует
Добавлено через 18 минут В общем, прописал выдачу маны на стадию подготовки, теперь работает даже если у героя 0 маны на перед боем
Я тут почти закончил делать карту, но столкнулся с проблемой сделать свой бонус для сета артефактов, а именно, я вообще не представляю как подобное делать. Задумка такая, если у героя будут артефакты: шлем некроманта, проклятое кольцо, кольцо сломленного духа и амулет некроманта, то:
Гарантирует герою, что в начале боя все существа в армии противника окажутся под действием заклинаний «Замедление», «Неудача», «Слабость» и «Проклятие». Эффект действует на протяжении 10 ходов.
Помогите пожалуйста
Если вы понимаете, как привязать выполнение боевого скрипта к героям, надевшим определённые арты, то остальное всё достаточно просто:
function Start() for side=0,1 do if GetHero(side) then if GetHeroName(GetHeroSide()) then --Ваша проверка в бою на героя. Я рекомендую в скрипте карты приключений создавать глоб. переменную вида "hero".."_NecArtSet" в единицу при наличии сета (и в ноль при отсутствии) и тут писать вместо проверки имени проверку вида if GetGameVar(GetHeroName(GetHeroSide()).."_NecArtSet")+0==1 then startThread(function(side) combatSetPause(1) SummonCreature(side, CREATURE_YETI, 1) for n, unit in GetCreatures(side) do if GetCreatureType(unit)==CREATURE_YETI then local _helper = unit break; end; end while not exist(_helper) do sleep() end for n, spell in {SPELL_MASS_SLOW, ...} --Список масскастов UnitCastGlobalSpell(_helper, spell) end removeUnit(_helper) combatSetPause(nil) ) end end end end
Скрипт написал без тестирований, поэтому адапатируйте и потестируйте, пожалуйста. Также вам понадобится заменить в характеристиках существа Neutrals/Yeti ману на ~200 и мастерство в школе так, чтобы держалось 10 ходов. Ну или с числом вызываемых поиграться
Привет, как бы мне прописать функцию с массивом или таблицей для сохранения координат существ чтобы потом их использовать для респавна новых? Координаты для спавна, соответственно, будут выбираться рандомно из сохранённого списка + не ставить существ если позиция ещё занята их законными владельцами.
И в бою, и на карте приключений при спавне существа на занятую клетку оно заспавнится на ближайшую рядом.
В целом, ничего особо сложного нет
function SaveCreaturePos(table, mob) local x, y, z = GetObjectPosition(mob) creature_coord_table[mob] = {x=x, y=y, floor=z} end --Что-то такое
Всё равно дело как-то не идёт. Написал такой скрипт на сохранение координат:
function SaveCoordinates( table ) local monster_list = {}; local k = 0; for i=1,500 do monster = "m"..i; if IsObjectExists( monster ) then k = k + 1; monster_list[k] = monster; local x, y, z = GetObjectPosition(monster_list[k]) creatures_positions[k] = {x=x, y=y, floor=z} end; end; end;
Потом в другой функции пытаюсь взять из этого списка рандомную позицию и поставить на неё существо, но игра выдаёт ошибку на пустые x, y, z. В другой функции взятие координат прописал так:
for k=1, length(creatures_positions) do local x, y, z = random(length(creatures_positions[k]))
Во-первых, можно не заморачиваться с именованием всех мобов, а использовать функцию GetObjectNamesByType("MONSTER")
Во-вторых, очевидно неправильно пытаться в 3 ПЕРЕМЕННЫХ записать одно значение, которое возвращает РАНДОМ, в который передаётся ТАБЛИЦА. Это просто что-то с чем-то)
Во-первых, можно не заморачиваться с именованием всех мобов, а использовать функцию GetObjectNamesByType("MONSTER")
Во-вторых, очевидно неправильно пытаться в 3 ПЕРЕМЕННЫХ записать одно значение, которое возвращает РАНДОМ, в который передаётся ТАБЛИЦА. Это просто что-то с чем-то)
Только x=creatures_position[k].x, y=..., z = ...
Короч, взял разрабовский скрипт респавна ботов из 3 карты кампании за Фриду владык севера, подредачил его под себя пользуясь ещё скриптом на спавн красных героев возле городов из последней карты с Фридой, получилось такое:
function SaveCoordinats( table ) local monster_list = {}; local k = 0; for i=1,500 do monster = "m"..i; if IsObjectExists( monster ) then k = k + 1; monster_list[k] = monster; creatures_positions[k] = GetObjectPosition(monster_list[k]) end; end; creatures_positions_list = length(creatures_positions) end;
function RespawnUnitsByLuck() -- if ( GetDate(WEEK) == 3 ) and ( GetDate(DAY_OF_WEEK) == random(6) + 1 ) then local WR_luck = GetHeroStat(WR, STAT_LUCK) local respawns_types = { CREATURE_AIR_ELEMENTAL, CREATURE_PHOENIX } local respawns_quantities = { 100 * diff, 10 * diff } local respawns_mood = {3, 0} local respawns_courage = {1, 2} local respawns_num = 20 + diff local previous_pos = {} local respawns_id = 0 local CanRespawnUnitsByLuck = random(100) + (10*(WR_luck+1)) * mod((WR_luck+1),diff)
if CanRespawnUnitsByLuck >= mod(70,(WR_luck+2)) + (60+diff) then --( 70 + (10+diff) ) then print("<color=blue>Шанс ", CanRespawnUnitsByLuck ,". <color=orange>Респавним юнитов") elseif CanRespawnUnitsByLuck < mod(70,(WR_luck+2)) + (60+diff) then --( 50 + (10+diff) ) then print("<color=blue>Шанс ", CanRespawnUnitsByLuck ,". <color=orange>Никого не спавним") return end
if WR_luck >= 7 then courage = {1, 0} respawns_num = 20 * diff respawns_quantities = { 200 * diff, 20 * diff } end for k=1, creatures_positions_list do if ( IsTilePassable(creatures_positions[k][3]) ) then local type = random( 1 ) + 1 if type == 2 and WR_luck < 3 then type = 1 end local creaturetype = respawns_types[ type ] local quantity = respawns_quantities[ type ] local mood = respawns_mood[ type ] local courage = respawns_courage[ type ] respawns_id = respawns_id + 1; local respawnsname = 'respawns' .. respawns_id; CreateMonster( respawnsname, creaturetype, quantity, creatures_positions[k][3], mood, courage, random( 360 ) ); end; end; -- end; end;
Игра жалуется на "attempt to index a number value". У меня уже голова не варит как этот респавн допилить чтобы он заработал нормально 🙃 Изначальный, разрабовский вариант, работал, но у меня карта большая, много кустов, и каждую клетку маской заливать чтобы там не заспавнился бот - такое себе дело( Проще уж спавнить их на уже готовых монстриках, поэтому у меня для заполнения координат таковые уже имеются на карте.
Сразу говорю, в чём точно ошибка. Когда вы записываете в crearure_positions[k] возврат функции GetObjectPosition, то у вас эоот катый элемент становится числом, а не таблицей из трёх элементов. Поэтому нужно опять: creature_positions[k][1], creature_positions[k][2], creature_positions[k][3] = GetObjectPosition(monster) И в проверке IsTilePassable нужно сначала в local x y z сохранить соответствующие элементы таблицы, а потом передать в IsTilePassable. Ну и именно из-за этого ошибка "попытка индексировать число". Ведь creature[k] у вас не что иное, как чиселка
Сразу говорю, в чём точно ошибка. Когда вы записываете в crearure_positions[k] возврат функции GetObjectPosition, то у вас эоот катый элемент становится числом, а не таблицей из трёх элементов. Поэтому нужно опять: creature_positions[k][1], creature_positions[k][2], creature_positions[k][3] = GetObjectPosition(monster) И в проверке IsTilePassable нужно сначала в local x y z сохранить соответствующие элементы таблицы, а потом передать в IsTilePassable. Ну и именно из-за этого ошибка "попытка индексировать число". Ведь creature[k] у вас не что иное, как чиселка
Этот как-то не сработал, зато пошло дело с твоим предыдущим вариантом) Правда, пришлось еще кое-что подправить, а то у меня IsTilePassable жаловался на неверный 3 аргумент. В общем, всё работает, но правда имеющиеся точки под спавн идут не случайно из списка а строго по нему, что довольно печально. Как-бы мне это дело зарандомить чтобы всё не сломать?
Ещё такой вопрос. Есть у меня проверка на удачу(GetHeroStat(герой, STAT_LUCK)), и вот в консоли я заметил что даже если поставить герою 10, то она будет выдавать не выше 5. Т.е. если я в скрипте поставлю условие чтобы удача была выше 6, то тогда это условие всегда будет неверным?
То есть у вас от 1 до k заменяются все существа при выполнении какого-то условия с удачей, а вы хотите, чтобы это происходило а) Непоследовательно б) Без повторений в) Со всеми k элементами
Тогда нужен интересный алгоритм:
local used_indexes = {} for i=1, k do repeat N=random(k)+1 until not used_indexes[N] used_indexes[N] = 1; --Действия с существом с номером N (не k!!) end
Всем привет! Нужна помощь по скрипту. Написал я вот такой скрипт:
function ChristianAttacked() DeployReserveHero("Christian", 98, 108, 0) sleep(1) MoveHero("Christian", 126, 139, -1) if IsHeroAlive(hero) and GetObjectOwner("castle") == PLAYER_1 then StartDialogScene("/DialogScenes/FallenKnight/S3/DialogScene.xdb#xpointer(/DialogScene)") sleep(1) SetObjectiveState("prim6", OBJECTIVE_ACTIVE, 1) else SetObjectiveState("prim5", OBJECTIVE_FAILED, 1) loose() end; end;
Вроде всё правильно, НО - функция ниже не работает! Всё остальное, включая else, работает отлично. В чём ошибка? Пути к ролику точно правильно прописал...
if IsHeroAlive(hero) and GetObjectOwner("castle") == PLAYER_1 then StartDialogScene("/DialogScenes/FallenKnight/S3/DialogScene.xdb#xpointer(/DialogScene)") sleep(1) SetObjectiveState("prim6", OBJECTIVE_ACTIVE, 1)