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

Сообщения от NHF - новые герои для Heroes V 3.1

Аватар пользователя
Хм... Не знаю, но, делая карты для одиночной игры, всегда ставлю sleep() после создания чего-либо (монстра, каравана, и т.д.) или после постановки героя на карту. Иначе следующая функция не видит созданный объект и вызывает ошибку, причём всегда. Многие функции так себя ведут, а, может, и все.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Плохо всё это)))
В мульте то почему тогда иначе))
Чтобы рассинхрона не было что ли?

Добавлено через 43 секунды
Сделать тогда sleep(time) , где time выше, если сингл?

Добавлено через 2 минуты
Например, тестировал sleep() и sleep(0.1), и sleep(1)
Первая иногда не успевает. Вторая норм, третья долго))
Точно он отбрасывает дробь? Что-то тут не так. Мульт.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
Аватар пользователя
Например, тестировал sleep() и sleep(0.1), и sleep(1)
Первая иногда не успевает. Вторая норм, третья долго))
Точно он отбрасывает дробь? Что-то тут не так. Мульт.
sleep() - аналог sleep(1)
sleep(0.1) - аналог sleep(intg(0.1)) т.е. sleep(0)
Сейчас пробовал простенький скриптик
for i=1,1000 do
print(""..i)
sleep(1)
print(""..i)
sleep(.999)
end

Режим - сетевая. Числа появляются парами - синий i-1 и красный i - с интервалом в 1/5 сек.
Если бы слип воспринимал дробные, то числа появлялись поодиночке.

Добавлено через 48 минут
Вот более наглядный пример.
while 1 do
local effect = "/Effects/_(Effect)/Spells/Bloodlust.xdb#xpointer(/Effect)"
for i=1,20 do
PlayVisualEffect(effect, '', '', 24+i, 20)
sleep(.999)
end
for i=1,20 do
PlayVisualEffect(effect, '', '', 24+i, 24)
sleep(1)
end
sleep(20)
end
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
А проверить слипы на различие в сингле и мульте? Или же функции.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
Аватар пользователя
Что мешает поставить sleep(1) после создания эльфа?

Добавлено через 32 секунды
На рисунке - мультиплеер.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Так после создания каждого придётся.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
Аватар пользователя
Зачем после каждого? ) После того, как все новые имена в массив занесёшь, нет? Или ты иначе как-то сделал?
 

К А
Стикеры GBF в Telegram
В ответ пользователю Dyrman
Аватар пользователя
Dyrman
Так после создания каждого придётся.
Можно сначала всех создать, подождать и уже потом на всех созданных повесить триггеры.

Добавлено через 4 минуты
Ment
Зачем после каждого? ) После того, как все новые имена в массив занесёшь, нет? Или ты иначе как-то сделал?
Не вижу смысла хранить все имена в массиве, разве что временный для новосозданных.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Ну да, на самом деле не нужны, порядкового номера хватит.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
Например, можно сделать так:
----------------КИИНА---------------------
NHF_Kiina_week = 0;
--NHF_Kiina_mass = {};
NHF_Kiina_mass_i = 0;
NHF_Kiina_mass_i_bad = 0;
NHF_Kiina_mass_preserv_creature = {{{44,145},{46,146},{48,147},{50,148},{52,149},{54,150},{56,151}},{10,9,7,4,3,2,1}};
function error_NHF_Kiina_F ()
print("error:NHF_Kiina_F");
end;
function NHF_HERO_F.Kiina (hero, mob)
errorHook(error_NHF_Kiina_F);
if hero then
NHF_Kiina_frendly_F(hero, mob)
return
end
if NHF_Kiina_week < ceil(GetDate(ABSOLUTE_DAY)/7) then
NHF_Kiina_week = ceil(GetDate(ABSOLUTE_DAY)/7);
local SizeMap = GetTerrainSize();
local count_mob = NHF_Kiina_mass_i_bad + (GetHeroLevel("Kiina")*NHF_Kiina_persent);
local temp_name = NHF_tempName_F("Kiina")
NHF_Kiina_mass_i_bad = 0;
local new_mobs = {n=0}
for i = 0, count_mob do
local x = random(SizeMap);
local y = random(SizeMap);
local z = random(GetMaxFloor()+1);
if IsTilePassable(x,y,z) == true then
NHF_Kiina_mass_i = NHF_Kiina_mass_i + 1;
local lvl_creature = floor((GetHeroLevel("Kiina")/5)+1)+random(3);
if lvl_creature > 7 then
lvl_creature = 7;
end;
local ID_creature = NHF_Kiina_mass_preserv_creature[1][lvl_creature][random(2)+1];
local name = "NHF_Kiina_creatures_"..NHF_Kiina_mass_i;
new_mobs.n = new_mobs.n + 1
new_mobs[new_mobs.n] = name
CreateMonster(name, ID_creature, NHF_Kiina_mass_preserv_creature[2][lvl_creature],x,y,z, MONSTER_MOOD_AGGRESSIVE, MONSTER_COURAGE_ALWAYS_FIGHT,(random(360)));
else
NHF_Kiina_mass_i_bad = NHF_Kiina_mass_i_bad +1;
end;
end;
sleep()
for i = 1, new_mobs.n do
local name = new_mobs
PlayVisualEffect("/Effects/_(Effect)/Objects/Water/Siren.(Effect).xdb#xpointer(/Effect)", name, name.."_Effect_Tag");
SetObjectEnabled(name, nil);
SetTrigger(OBJECT_TOUCH_TRIGGER, name, "NHF_Touch_mobs_F");
end
ShowFlyingSign("/MapObjects/Preserve/NewHeroes/Kiina/Spawn_creatures.txt",temp_name,GetObjectOwner(temp_name), 5);
end;
end;
function NHF_Kiina_frendly_F(hero,mob)
local temp_name = NHF_tempName_F(hero);
if (IsAIPlayer(GetObjectOwner(temp_name)) ~= 1) and (hero == "Kiina") and mob > "NHF_Kiina_creatures_" and mob < "NHF_Kiina_creatures`" then
SetMonsterCourageAndMood(mob, GetObjectOwner(temp_name), MONSTER_MOOD_FRIENDLY, MONSTER_COURAGE_ALWAYS_JOIN);
end;
end;


NHF_mass_heroes_touch_mob = {"Hafad","Sandro","Fiona","Konstantin","Kiina"};


--Отключение и прикосновение мобов
function NHF_Touch_mobs_F(hero,mob)
if (IsAIPlayer(GetObjectOwner(hero)) ~= 1) and (IsObjectExists(mob) == not nil) then
for i, hero_temp in NHF_mass_heroes_touch_mob do
if IsHeroAlive(hero_temp) == true then
if (hero == hero_temp) then
NHF_HERO_F[hero_temp](hero_temp,mob);
break;
end;
end;
end;
if mob > "NHF" and mob < "NHG" then
StopVisualEffects(mob.."_Effect_Tag");
end
Trigger(OBJECT_TOUCH_TRIGGER, mob, nil);
SetObjectEnabled(mob,true);
sleep(0.1);
MakeHeroInteractWithObject(hero,mob);
--sleep();
Trigger(OBJECT_TOUCH_TRIGGER, mob, "NHF_Touch_mobs_F");
end;
end;
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Спасибо. Но не нравится вынос выключения эффекта в общую функцию:
if mob > "NHF" and mob < "NHG" then
StopVisualEffects(mob.."_Effect_Tag");
end
К тому же, я думаю использовать:
if mob > "NHF_Kiina_creatures_" and mob < "NHF_Kiina_creatures`"  then
StopVisualEffects(mob.."_Effect_Tag");
end
Если вдруг будут новые спецы по каким-либо существам или придётся создавать мобов на карте.

Может, занести обратно, убирать эффект всегда, но если моб остался (наш герой слился мобам), добавлять снова. Или это было сделано именно из-за задержек?
Но тогда надо хранить результат боя ещё.
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
Аватар пользователя
Выключение эффекта вынес только потому, что функция NHF_Kiina_frendly_F вызывается только если герой - Киина (дабы не ломать систему), иначе эффект бы не выключался.
StopVisualEffects ошибки не возбуждает, если эффектов нет, поэтому можно и без проверки.

Эффекты можно не выключать, пока моб существует.
function NHF_RemoveMobEffects(hero, mob)
while IsObjectExists(hero) and IsObjectExists(mob) do
sleep()
end
if not IsObjectExists(mob) then
StopVisualEffects(mob .. "_Effect_Tag")
end
end

function NHF_Touch_mobs_F(hero,mob)
-- ... --
if mob > "NHF" and mob < "NHG" then
startThread(NHF_RemoveMobEffects, hero, mob)
end
-- ... --
end
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Добавленные герои упорно не хотят обмениваться. Ход тратится, больше ничего не происходит.
Бывает, что вообще нельзя просмотреть информацию о своём герое. При передаче хода открывается информация о герое оппонента.
Nulla è reale, tutto è lecito.
Аватар пользователя
У меня это возникало иногда без NHF. Думаю что-то еще из модов у тебя стоит.
Аватар пользователя
Нет, ставил на чистую.
Без NHF такого не было.
Nulla è reale, tutto è lecito.

Статистика

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