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

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

#136
Ребят подскажите скрипт чтобы убиваешь входишь в зону и появляется вражеский герой

Добавлено через 1 минуту
Ребят подскажите скрипт чтобы убиваешь входишь в зону и появляется вражеский герой
#137
а не подскажете, как проверку фракции замка или фракции игрока сделать? и после этого установить на существо определенный кураж
Аватар пользователя
#138
I_Am_Walking, насколько я знаю, функции прямого определения фракции нет. Для героев можно делать это косвенно, проверяя наличие фракционных умений.
В ответ пользователю Jack_of_shadows
#139
то есть если надо, например, проверить фракцию города или игрока, то прямо этого не сделать? только косвенно - через существ?
Аватар пользователя
#140
Я думаю, если это стандартная карта без всяких кастомных штук, то можно просто в 1 день скриптом просмотреть всех героев всех игроков, если есть некромантия - значит это некромант, призыв - значит демон и т.д., и запомнить результаты в глобальную таблицу (ключ - номер игрока, значение - фракция). А потом можно использовать её хоть по отношению к героям, хоть к замкам.
В ответ пользователю Jack_of_shadows
#141
попробовать конечно можно, только человеку не близкому к програмированию надо будет надолго засесть в мануалы)
Аватар пользователя
#143
Ну почему, любую обзорную статью по lua из интернета я бы рекомендовал прочитать, а ещё лучше сохранить и периодически заглядывать.
Аватар пользователя
#144
I_Am_Walking,
фракцию замка можно узнать функцией GetTownRace, установить настроение и отвагу - SetMonsterCourageAndMood.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
#145
Ребята помогите. У меня почему-то после вопроса (QuestionBox) и ответа "ОК" не проигрывается битва (StartCombat). Если же StartCombat скопировать в функцию с вопросом, то всё ок - работает. В вопросе делал ссылку на другую функцию.
В ответ пользователю sergejez
Аватар пользователя
#146
Доброго времени суток всем, подскажите такую вещь, пожалуйста, кто знает.

Можно ли настроить выполнение функции не по конкретному тригеру из списка тригеров а по какому то другому, скажем постройке здания или появлению у определённого героя или определённого игрока определённого артефакта или существа.

что-то похожее кажется делает команда, запускающая новый поток(что такое поток правда в душе не знаю)
startThread( fProc, vParam1, vParam2, ... )
по идее если я правильно понимаю, она должна постоянно проверять наличие определённого условия, но вот как ей пользоваться я чего то не могу разобраться.


если конкретно то мне нужно при постройке определённого строения в городе заменить у героя одно существо другим

пока у меня выходит как то так


function replacecreature ();
if GetHeroCreatures( "Sarge", CREATURE_ARCHER ) >= 1;
and GetTownBuildingLevel( "cheast_town", TOWN_BUILDING_DWELLING_2 ) = 2;
then AddHeroCreatures( "Sarge", CREATURE_LONGBOWMAN, 1 );
RemoveHeroCreatures( "Sarge", CREATURE_ARCHER, 9999 );
else nil;
end;
end;

startThread( "replacecreature", TOWN_BUILDING_DWELLING_2 );



что там не так и вообще возможно ли сделать то что я описываю, если нет то есть какая нибудь похожая альтернатива?

Заранее спасибо большое всем за советы.
Аватар пользователя
#147
Триггер не сделать. А вот проверку в бесконечном цикле -- да. У Вас вроде нормально написано, только Ваш if надо обернуть в конструкцию:

while 1 do
if.....
sleep(4);
end;

Про sleep не забудьте, а то зависнет всё...
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
#148
Исправил вот так, всё равно не работает
Что-то я делаю не так, если кто знает, где именно ошибка, я буду очень благодарен если подскажите



п.с. за одно, как бэ случайно пропалил мод который пытаюсь склепать))
Аватар пользователя
#149
function replacecreature ()
while 1 do
if GetHeroCreatures( "Sarge", CREATURE_ARCHER ) >= 1 and GetTownBuildingLevel( "cheast_town", TOWN_BUILDING_DWELLING_2 ) == 2 then
RemoveHeroCreatures( "Sarge", CREATURE_ARCHER, 9999 );
AddHeroCreatures( "Sarge", CREATURE_LONGBOWMAN, 1 );
end;
sleep(4);
end;
end;

startThread( replacecreature );

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

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

startThread( "replacecreature" );


Проверил, всё так же не работает
(не запускается причём, как если здание построено с самого начала карты, так и если его строишь уже во время игры)

Где-то читал, что вроде надо писать не
startThread( "replacecreature" )
а
startThread( replacecreature)
например, попробовал и такой вариант, тоже результата не дало

В руководстве у новика, насчёт startThread есть ещё такой кусок
while(1) do
local heroes = GetPlayerHeroes(PLAYER_1)
for i, h in heroes do
if....
но как это применить и что это значит я понятия не имею ибо нуб

Статистика

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