Перейти к содержанию

Сообщения от Скрипты для начинающих

Аватар пользователя
Где-то читал, что вроде надо писать не
startThread( "replacecreature" )
а
startThread( replacecreature)
например, попробовал и такой вариант, тоже результата не дало
Точно! Уже забыл, но поправка верная.
Про вычитание лучников, учли?
Ну, а так попрошу предоставить, что пишет консоль. Как её включить, есть в faq.

Поправил у себя код. Там ещё я sleep пропустил, растяпа.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
Ment
Впрочем, код, что я написал, имеет слабое звено. Подозреваю, у Вас там не 9999 лучников на самом деле. Ошибку выдаст. Надо сделать проверку точного числа лучников и это точное число вычитать! Если смысл в том, чтобы в армии их больше не было. Но пока проверьте без вычитания лучников просто.

Вроде бы команда RemoveHeroCreatures если убирать больше существ, чем у героя есть, или даже, если убирать тех существ, которых у героя вообще нет.
На всякий случай проверил без этой строчки, всё равно результата никакого.
Аватар пользователя
Ладно. Тогда не забыть sleep и включить консоль.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
function replacecreature ()
while (1) do
sleep(2);
local herocr = GetHeroCreatures( "Sarge", CREATURE_ARCHER );
if herocr >= 1 and
GetTownBuildingLevel("cheast_town", TOWN_BUILDING_DWELLING_2 ) == 2 then
RemoveHeroCreatures( "Sarge", CREATURE_ARCHER, herocr );
AddHeroCreatures( "Sarge", CREATURE_LONGBOWMAN, herocr );
sleep(1);
break
end;
end;
end;

startThread(replacecreature);

Я бы так написал. Разве что если нужно, чтобы лучников становилось 1 шт, тогда herocr в строчке AddHeroCreatures заменить на 1
В ответ пользователю Ment
Аватар пользователя
Ment
Ну, а так попрошу предоставить, что пишет консоль. Как её включить, есть в faq.
консоль действительно ругается, вот так



сейчас буду пытаться разобраться что это значит
Аватар пользователя
О да, там не = в проверке, а == должно стоять. Как в скрипте 32MeTpa
К слову, его скрипт должен заработать.
 

К А
Стикеры GBF в Telegram
В ответ пользователю 32MeTpa
Аватар пользователя
32MeTpa
function replacecreature ()
while (1) do
sleep(2);
local herocr = GetHeroCreatures( "Sarge", CREATURE_ARCHER );
if herocr >= 1 and
GetTownBuildingLevel("cheast_town", TOWN_BUILDING_DWELLING_2 ) == 2 then
RemoveHeroCreatures( "Sarge", CREATURE_ARCHER, herocr );
AddHeroCreatures( "Sarge", CREATURE_LONGBOWMAN, herocr );
sleep(1);
break
end;
end;
end;

startThread(replacecreature);

Работает замечательно, всем огромное спасибо.
Только пара маленьких вопросов, почему == а не =?
И что нужно сделать, чтобы скрипт работал постоянно (пока возведено строение), а не один раз?
Нужно что-то сделать с этой строчкой "while (1) do", я правильно догадываюсь?
Аватар пользователя
почему == а не =?
Для присваивания значения одно равно, для операции сравнения -- два.
И что нужно сделать, чтобы скрипт работал постоянно (пока возведено строение), а не один раз?
Каждый день, что ли? Ну, тогда можно поставить Trigger(NEW_DAY_TRIGGER,...). Иначе я Вас не понял.
Если надо постоянно заменять лучников на арбалетчиков, просто уберите break из кода 32МеТра.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
Ment
Если надо постоянно заменять лучников на арбалетчиков, просто уберите break из кода 32МеТра.
Да именно это и надо. Понял. Благодарю.)

Добавлено через 19 часов 28 минут
Снова всем доброго времени суток.

Нужно решить ещё одну штуку, возможно ли скриптами или как-то ещё разрешить бесконечное строительство, а не одно строение в день (желательно в конкретном городе, но если не возможно то допустимо и во всех городах)?

Ну и продолжаю я тут экспериментировать со скриптами и заметил такую штуку. Скрипт на добавление/убирание существа при постройке определённого строения (как и другие скрипты я полагаю) срабатывает только после выхода из экрана города. Это создаёт некоторые неудобства для моей задумки.

Возможно ли каким то хитрым способом обойти эту штуку, например задать скриптом быстро выйти из города - войти в город (это впрочем кажется невозможно) но вдруг у кого есть какие другие идеи?

Заранее спасибо за советы, вы мне тут очень помогаете.
В ответ пользователю zahar0z
Аватар пользователя
zahar0z

Нужно решить ещё одну штуку, возможно ли скриптами или как-то ещё разрешить бесконечное строительство, а не одно строение в день (желательно в конкретном городе, но если не возможно то допустимо и во всех городах)?

Насколько мне известно - такое сделать нельзя, хотя может я просто не все хитрости знаю. Единственно, что на ум приходит - реализовать через кастомное походное заклинание talkbox с вариантами постройки зданий, но для этого довольно массивный скрипт нужен.
zahar0z

Возможно ли каким то хитрым способом обойти эту штуку, например задать скриптом быстро выйти из города - войти в город (это впрочем кажется невозможно) но вдруг у кого есть какие другие идеи?

Тут все еще печальнее, в окне города работают только общеигровые функции типа random, sqrt и т.д., да 2 функции, вызывающиеся при найме героя или существ. Так что в городе, как мне кажется, вообще ничего сделать нельзя.
В ответ пользователю 32MeTpa
Аватар пользователя
Понятно, ещё такой вопрос можно ли привязать активацию скрипта к кастомной кнопке? Или это работает только с кастомными походными заклинаниями?
Здравствуйте! Помогите пожалуйста как сделать так, чтобы когда ты своим героем подошел к войску (К примеру ангелу) вылезло сообщение, а потом уже они к тебе присоединились? И еще если можно, чтобы войско (Ангел) сделал действие "Воскрешение" или как он празднует победу в сражение (Поднимая руку вверх)...
А как сделать так ,чтобы герою раз в неделю приходил караван с сообщением.И еще как сделать так,чтобы какое-то строение горело ,к примеру хижина крестьян.
Доброго времени суток. Хотелось бы, чтобы кто-нибудь рассказал о том, как сделать так, чтобы при определенном игровом событии, игроку(1) переходил в собственность другой игрок(2), (конкретно в моем случае - при проигрыше игрока(1)). И как на время жизни игрока(1) сделать игрока(2) неактивным?
Аватар пользователя
Drmax4, в качестве идеи, которую можно попробовать (скрипт получается совсем не простым):
1) Убрать из главных квестов задания наподобие "герой должен выжить". В этом случае при потере всех героев и замков игра не должна выдавать проигрыш. (вроде бы была такая возможность, если я ничего не путаю). Если не получится, то тогда придётся придумывать другое событие для перехода игрока.
2) Отловить событие проигрыша игрока. Например по триггеру окончания боя (COMBAT_RESULTS_TRIGGER) проверять сколько у него в наличии героев (GetPlayerHeroes) и замков (GetObjectOwner для всех замков на карте).
3) Второй игрок в это время может находится с отключенным ИИ (EnableHeroAI), без замков и так, чтобы его ход вообще не показывался (DoNotGiveTurnToPlayerAIIfNoTownsAndActiveHeroes). Или просто выключить ИИ героев, а замок пусть стоит без дела. А ещё можно поместить героев в резерв (в редакторе карт есть такая функция). Тут я не уверен, что именно вы хотите получить на выходе.
4) По нужному событию герои, замки и что нужно ещё переводится в собственность игрока 1 функцией SetObjectOwner.

Статистика

Приветствуем новейшего участника: Emil

Сейчас на сайте 7 пользователей 1387 гостей