Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#3745
Старый 04.11.2022, 01:00
  #3745
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

}{0TT@6bI4Во-первых, можно не заморачиваться с именованием всех мобов, а использовать функцию 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". У меня уже голова не варит как этот респавн допилить чтобы он заработал нормально 🙃 Изначальный, разрабовский вариант, работал, но у меня карта большая, много кустов, и каждую клетку маской заливать чтобы там не заспавнился бот - такое себе дело( Проще уж спавнить их на уже готовых монстриках, поэтому у меня для заполнения координат таковые уже имеются на карте.

Азгалор вне форума
Ответить с цитированием