Это при условии, что 5 / 2 выдаст 2.5, а не 2, тогда вообще 0 будет. На каком патче пишется карта? TeX13, а что писать то. В ModuloInteger тоже самое.
function ModuloN takes integer a, integer n returns integer
return a - a / n * n
endfunction
function ModuloNPos takes integer a, integer n returns integer
set a = a - a / n * n
if a < 0 then
return a + n
endif
return a
endfunction
i = (5 / 2 - [5 / 2]) * 100 = (2.5 - 2) * 100 = 50. Остаток от деления на 2 равен 50? Вот это реально бред, а ModuloInteger как раз и использует основы математики.
KingMaximax, нет, это не так работает. TeX13, потому что TriggerRegisterAnyUnitEventBJ делает регистрацию для всех игроков, то есть событие playerunitevent и нужно использовать следующее.
EVENT_PLAYER_UNIT_DAMAGED - событие после брони.
EVENT_PLAYER_UNIT_DAMAGING - событие до брони.
Cancel, Player(2) - это бирюзовый игрок, потому что в JASS индексы игроков с 0, 0 - красный, 1 - синий и так далее.
В настройках игрока дай имя синему, а после старта игры выведи имя Player(2) через CustomScript.
Все игроки - это группа, в которой есть все играющие игроки. Если играет 2 игрока - 2 игрока в группе.
Ну а 2, потому что при нефиксированных кланах и доступных слотах >=2 помимо человека добавляется Компьютер Средний.
KingMaximax, полезность в том, что ты прекрасно знаешь, как работает генерация, гугл в помощь.
Если тебе не особо важно, то забей, используй обычный вариковский (как я, но с небольшими улучшениями).
Какая разница, что ты имеешь на руках его принцип работы, если смысл в СЛУЧАЙНОМ результате?
Большая, потому рандом может быть разный. Мат. ожидание и дисперсия у разных распределений разные. Вдруг мне нужно normal, а варик использует uniform, или наоборот.
Cancel, это вообще код из blizzard.j, его можно получить, создав новую карту и сконвертировав её в JASS.
PickMeleeAI() так-то стартует ИИ.
раскрыть
function PickMeleeAI takes player num, string s1, string s2, string s3 returns nothing
local integer pick
// easy difficulty never uses any custom AI scripts
// that are designed to be a bit more challenging
//
if GetAIDifficulty(num) == AI_DIFFICULTY_NEWBIE then
call StartMeleeAI(num,s1)
return
endif
if s2 == null then
set pick = 1
elseif s3 == null then
set pick = GetRandomInt(1,2)
else
set pick = GetRandomInt(1,3)
endif
if pick == 1 then
call StartMeleeAI(num,s1)
elseif pick == 2 then
call StartMeleeAI(num,s2)
else
call StartMeleeAI(num,s3)
endif
endfunction
Cancel, у ошибка, Player(2) - это бирюзовый игрок, а не синий. Синий - это Player(1). Потому и не работало.
function MeleeStartingAI takes nothing returns nothing
local integer index
local player indexPlayer
local race indexRace
set index = 0
loop
set indexPlayer = Player(index)
if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then
set indexRace = GetPlayerRace(indexPlayer)
if (GetPlayerController(indexPlayer) == MAP_CONTROL_COMPUTER) then
// Run a race-specific melee AI script.
if (indexRace == RACE_HUMAN) then
call PickMeleeAI(indexPlayer, "human.ai", null, null)
elseif (indexRace == RACE_ORC) then
call PickMeleeAI(indexPlayer, "orc.ai", null, null)
elseif (indexRace == RACE_UNDEAD) then
call PickMeleeAI(indexPlayer, "undead.ai", null, null)
call RecycleGuardPosition(bj_ghoul[index])
elseif (indexRace == RACE_NIGHTELF) then
call PickMeleeAI(indexPlayer, "elf.ai", null, null)
else
// Unrecognized race.
endif
call ShareEverythingWithTeamAI(indexPlayer)
endif
endif
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
endfunction
» WarCraft 3 / Остаток от деления (mod)
Ред. PT153
» WarCraft 3 / Остаток от деления (mod)
TeX13, а что писать то. В ModuloInteger тоже самое.
Ред. PT153
» WarCraft 3 / Остаток от деления (mod)
» WarCraft 3 / Остаток от деления (mod)
Ред. PT153
» WarCraft 3 / Остаток от деления (mod)
Открой blizzard.j и посмотри.
Ред. PT153
» WarCraft 3 / Событие - получает урон - как отловить наносящего?
» WarCraft 3 / Остаток от деления (mod)
Есть ModuloInteger и ModuloReal.
» WarCraft 3 / Событие - получает урон - как отловить наносящего?
TeX13, потому что TriggerRegisterAnyUnitEventBJ делает регистрацию для всех игроков, то есть событие playerunitevent и нужно использовать следующее.
EVENT_PLAYER_UNIT_DAMAGED - событие после брони.
EVENT_PLAYER_UNIT_DAMAGING - событие до брони.
» WarCraft 3 / Событие - получает урон - как отловить наносящего?
» WarCraft 3 / Способности для ядов (дебаф)
Ред. PT153
» WarCraft 3 / Событие - получает урон - как отловить наносящего?
Ред. PT153
» WarCraft 3 / Где найти стандартные ИИ и как запустить
В настройках игрока дай имя синему, а после старта игры выведи имя Player(2) через CustomScript.
» WarCraft 3 / Выбор игроков плохо работает
Ну а 2, потому что при нефиксированных кланах и доступных слотах >=2 помимо человека добавляется Компьютер Средний.
Ред. PT153
» WarCraft 3 / Генератор псевдослучайных чисел
Если тебе не особо важно, то забей, используй обычный вариковский (как я, но с небольшими улучшениями).
Ред. PT153
» WarCraft 3 / Генератор псевдослучайных чисел
» WarCraft 3 / Генератор псевдослучайных чисел
» WarCraft 3 / Генератор псевдослучайных чисел
Ред. PT153
» WarCraft 3 / Где найти стандартные ИИ и как запустить
» WarCraft 3 / Отменить эффект стана
» WarCraft 3 / Где найти стандартные ИИ и как запустить
» WarCraft 3 / Хэш не работает после нагрузки на карту
Ред. PT153
» WarCraft 3 / Пассивка - восстановление маны в проценте
Ред. PT153
» WarCraft 3 / Хэш не работает после нагрузки на карту
» WarCraft 3 / Плавающий текст (texttag) черет туман войны
Ред. PT153
» WarCraft 3 / РО - Юнит - Регенерация маны