У меня есть целая конструкция по дропу случайных предметов. Триггер срабатывает на смерть юнита, и дропается рандоманый предмет только с определённого юнита.
Когда такой юнит умирает, выбирается рандомное реальное число от 0.01 до 100. Если выбрано число от 0.01 до 9, то запускается несколько ифзенов, которые проверяют точный диапазон числа. Там несколько вариантов. первый из них, это от 0 до 4.7, дальше от 4.7 до 5.1. Всего 7 диапазонов.
Но вот проблема, которую я никак не могу понять. Почему то предмет создаётся только тогда, когда выбранное число равно от 0.01 до 4.7, то есть первый диапазон. Если число больше 4.7, но меньше 9-ти, ничего не создаётся. Я проверял с помощью BJDebugMsg, пытался выводить само выбранное число и рандомно выбранный предмет (равкод). Так вот, если число было меньше 4.7, например 2.5, то он выводил 2.5, а под ним длинное целое число (равкод в виде целого числа). Если же число было больше 4,7, но меньше 9-ти, например 7.5, то он выводил 7.5 а под ним 0. То есть рандомный предмет не выбирался, и ID предмета выводился 0.
Вот код самой конструкции. Без BJDebugMsg
Code
local unit u = GetDyingUnit() local integer ut = GetUnitTypeId(u) local real x = GetWidgetX(u) local real y = GetWidgetY(u) local real RandomNum = .0 local integer ChosenItem = 0
if ut == 'nfgb' then
set RandomNum = GetRandomReal( 0.01, 100.0 )
if RandomNum >= 0.01 and RandomNum <= 9.0 then
if RandomNum >= 0.01 and RandomNum < 4.7 then set ChosenItem = ChooseRandomItemEx( ITEM_TYPE_PERMANENT, 0 ) elseif RandomNum >= 4.7 and RandomNum < 5.1 then set ChosenItem = ChooseRandomItemEx( ITEM_TYPE_PURCHASABLE, 0 ) elseif RandomNum >= 5.1 and RandomNum < 5.5 then set ChosenItem = ChooseRandomItemEx( ITEM_TYPE_CAMPAIGN, 0 ) elseif RandomNum >= 5.5 and RandomNum < 6.3 then set ChosenItem = ChooseRandomItemEx( ITEM_TYPE_PERMANENT, 1 ) elseif RandomNum >= 6.3 and RandomNum < 6.6 then set ChosenItem = ChooseRandomItemEx( ITEM_TYPE_CAMPAIGN, 1 ) elseif RandomNum >= 6.6 and RandomNum < 8.9 then set ChosenItem = ChooseRandomItemEx( ITEM_TYPE_ARTIFACT, 3 ) elseif RandomNum >= 8.9 and RandomNum <= 9.0 then set ChosenItem = 'sfog' endif
if random < 4.7 then ... elseif random >= 4.7 and random < 5.1 then ... elseif random >= 5.1 and random < 5.5 then ... elseif random >= 5.5 and random < 6.3 then ... elseif random >= 6.3 and random < 6.6 then ... elseif random >= 6.6 and random < 8.9 then ... elseif random >= 8.9 and random <= 9. then ... endif
if RandomNum < 4.7 then set ChosenItem = ChooseRandomItemEx(ITEM_TYPE_PERMANENT, 0) elseif RandomNum < 5.1 then set ChosenItem = ChooseRandomItemEx(ITEM_TYPE_PURCHASABLE, 0) elseif RandomNum < 5.5 then set ChosenItem = ChooseRandomItemEx(ITEM_TYPE_CAMPAIGN, 0) elseif RandomNum < 6.3 then set ChosenItem = ChooseRandomItemEx(ITEM_TYPE_PERMANENT, 1) elseif RandomNum < 6.6 then set ChosenItem = ChooseRandomItemEx(ITEM_TYPE_CAMPAIGN, 1) elseif RandomNum < 8.9 then set ChosenItem = ChooseRandomItemEx(ITEM_TYPE_ARTIFACT, 3) else set ChosenItem = 'sfog' endif
Может быть, предметы выбираются только из стандартных?
Теперь работают только первые 4 диапазона и последний (от 8.9 до 9.0). (6.3 - 6.6) и (6.6 - 8.9) не работают. И поверьте, это не рандом. Я сделал так что бы мобы респились каждую секунду, и с помощью чита Whosyourdaddy всех сливал. За 20 минут я убил АоЕ скилами более 2000 крипов. Всё поле было покрыто предметами, но среди них не было не одного предмета ITEM_TYPE_CAMPAIGN - лвл 1, или ITEM_TYPE_ARTIFACT - лвл 3