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

Сообщения от Скрипты

13 лет назад
Привет вот столкнулся впервые с необходимостью написания скрипта
но я туг в программировании
и к тому же не знаю
границ возможности
а именно нужно запрограммировать ворота так что бы
при уничтожении всей армии находящийся в них ворота переходил под мою юрисдикцию
а охрана в воротах возрождалась в двое
может у вас уже есть похожий набросок оч был бы рад содействию
Аватар пользователя
13 лет назад
что подразумевается под словом ворота? Гарнизон? Тогда он и так станет Вашим после уничтожения всей его армии.
В ответ пользователю Heroist
13 лет назад
да гарнизон
нет суть не в том что бы он стал моим
а в том что бы вся армия которую я выбил возродилась
но уже под моим началом
естественно неизвлекаемая
плюс удвоилась
В ответ пользователю JORAJAN
Аватар пользователя
13 лет назад
Есть много способов. Представлю один из них:
SetObjectEnabled("имя гарнизона", nil);
Trigger(4, "имя гарнизона", "capture_gar");

function capture_gar(hero)
local a = {};
a[1], a[3], a[5], a[7], a[9], a[11], a[13] = GetObjectCreaturesTypes("имя гарнизона");
for i = 1, 7 do
if a[i*2-1] ~= 0 then
a[i*2] = 2 * GetObjectCreatures("имя гарнизона", a[i*2-1]);
end;
end;
SetObjectEnabled("имя гарнизона", 1);
Trigger(4, "имя гарнизона", nil);
MakeHeroInteractWithObject(hero, "имя гарнизона");
local i = GetLastSavedCombatIndex();
while i == GetLastSavedCombatIndex() do
sleep(1);
end;
if not IsHeroAlive(hero) then
SetObjectEnabled("имя гарнизона", nil);
Trigger(4, "имя гарнизона", "capture_gar");
return
end;
for i = 1, 7 do
if a[i*2] then
AddObjectCreatures("имя гарнизона", a[i*2-1], a[i*2]);
end;
end;
DenyGarrisonCreaturesTakeAway("имя гарнизона", 1);
end;
Тут надо только заменить "имя гарнизона" на скриптовое имя вашего гарнизона. В скрипте оно должно писаться в кавычках, а в редакторе (в поле Name в свойствах объекта) - без.
В ответ пользователю JORAJAN
Аватар пользователя
13 лет назад
JORAJAN
да гарнизон
нет суть не в том что бы он стал моим
а в том что бы вся армия которую я выбил возродилась
но уже под моим началом
естественно неизвлекаемая
плюс удвоилась

даёшь своим "воротам" имя.
например vorota
vorotaF - функция, которая запуститься при взятии объекта
дальше объявляешь триггер
Trigger(OBJECT_CAPTURE_TRIGGER, "vorota", "vorotaF");

дальше прописывешь саму функцию

vorotaF(nPrevOwnerID, nNewOwnerID, sHeroName, sObjectID)
nPrevOwnerID - номер игрока - бывшего владельца
nNewOwnerID - текущий владелец
sHeroName - имя героя, захватившего ворота
sObjectID - название твоих ворот(vorota)

эти параметры передаются в функцию после того как у гарнизона сменяется владелец. Если не важно кто захватил гарнизон - скобки можно оставить пустыми.

в теле функции для добавления существ в гарнизон использовать команду
AddObjectCreatures( sObjectName, nGreatureID, nCount );

где sObjectName - имя ворот(указывается в кавычках!!!)
nGreatureID - ID существа(в документах к редактору есть документ со всеми IDs)
nCount - количество добавляемых существ.

Trigger(OBJECT_CAPTURE_TRIGGER, "vorota", nil ); - обнуление тригера, тоже в теле функции!!!

и не забыть в конце поставить end;

вот и всё. Если важно какой именно игрок и герой захватывает, в скобке у функции указывать все параметры и писать в теле функции условное выражение if ....... end;
В ответ пользователю MasteR
Аватар пользователя
13 лет назад
Способ #2:
gar="имя гарнизона"
gar_army={}
for i = 0, 6 do
local t, n = GetObjectArmySlotCreature(gar, i)
gar_army={t, n}
end

Trigger(5, gar, 'capture_gar')

function capture_gar(oldowner, newowner, hero, gar)
for i = 0, 6 do
if gar_army[1] ~= 0 then
AddObjectCreatures(gar, gar_army[1], gar_army[2]*2)
end
end
DenyGarrisonCreaturesTakeAway(gar, 1)
Trigger(5, gar, nil)
end
В ответ пользователю RedHeavenHero
13 лет назад
что я не так сделал ?
открыл редактором карту
нашел гарнизон
открыл свойства пробелом
нажал edit script
вставил текст
нажал ок
В ответ пользователю JORAJAN
Аватар пользователя
13 лет назад
JORAJAN
что я не так сделал ?
открыл редактором карту
нашел гарнизон
открыл свойства пробелом
нажал edit script
вставил текст
нажал ок
чтом написать скрипт для карты, в редакторе открой Map properties(быстро это можно сделать нажав кнопку M). В ней выбери вкладку Scripts, нажми Edit script и пиши
13 лет назад
ешо вопрос
как дать имя гарнизону ?
В ответ пользователю JORAJAN
Аватар пользователя
13 лет назад
"Открывать свойства" надо не пробелом, а писать в поле Name в SelectionPropertyWindow. Оно вот так примерно выглядит
Вложения 1
1 файл • Общий размер: 6,4 KB
В ответ пользователю JORAJAN
Аватар пользователя
13 лет назад
Эмм... Нажать на то место колонки Value, напротив которого находится Name. B тогда уже вводить.
В ответ пользователю RedHeavenHero
13 лет назад
Все спасибо еле нашол
оказывается надо кликать
в поле правее слова name
а можно еще нажать на name выделит его и нажать пробел

заработало! )
Аватар пользователя
13 лет назад
кто знает, как заставить супер сильного героя-компа не нападать на моего героя? Судя по описаню, attractor тут не спасет, а дружбу тоже заводить не хочется, надо, чтобы ты мог атаковать, а он нет...
Аватар пользователя
13 лет назад
Отключить его SetObjectEnabled("...",nil); и двигать по карте вручную ) Триггер ещё понадобится установить на прикосновение, чтобы другой герой напасть мог.

Статистика

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