Карта для WarCraft 3 в жанре «арена» на 4 игроков, на ней игроки сражаются друг с другом, чтобы остаться последним героем
Экшен-аркада от инди-разработчиков!
"Грехи берсерков" - это вторая кампания во франшизе "БаХи". Отправляйтесь в глубины Норд'Крига, чтобы узнать больше о клане всеми презираемых скар'гамаоров.
Поддержи XGM - сделаем его мощнее!
Поддержи XGM - построим богатую базу материалов!
» WarCraft 3 / каким софтом проставлять отступы в JASS ?
» WarCraft 3 / Авто-поворот юнитов
-f XXX (-f 45 -f 200 -f 300) - поворот на градус
globals integer PLAYERS = 12 integer array GO integer array N trigger array tgo4 integer array tgo4_init hashtable ht = InitHashtable() string array Direction real array DirectionStart unit array u endglobals function GOO4_Actions takes nothing returns nothing local integer i = LoadInteger(ht, GetHandleId(GetTriggeringTrigger()), 0) local real A = 0 set N[i] = N[i] + 1 if Direction[i] == "R" then set A = DirectionStart[i] - (N[i] * 120) elseif Direction[i] == "L" then set A = DirectionStart[i] + (N[i] * 120) endif call BJDebugMsg(I2S(R2I(GetUnitFacing(u[i]))) + " " + I2S(N[i]) + " " + GetPlayerName(Player(i - 1))) call SetUnitFacing(u[i], A) if N[i] == 3 then set N[i] = 0 endif endfunction function GOO4 takes string s returns nothing local integer i = GetPlayerId(GetTriggerPlayer()) + 1 if tgo4_init[i] == 0 then set tgo4_init[i] = 1 set tgo4[i] = CreateTrigger() call SaveInteger(ht, GetHandleId(tgo4[i]), 0, i) call TriggerRegisterTimerEvent(tgo4[i], 0.5, true) call TriggerAddAction(tgo4[i], function GOO4_Actions) call DisableTrigger(tgo4[i]) endif if s == "R" then call BJDebugMsg("R") set Direction[i] = "R" elseif s == "L" then set Direction[i] = "L" call BJDebugMsg("L") endif if GO[i] == 0 then set GO[i] = 1 set DirectionStart[i] = GetUnitFacing(u[i]) call EnableTrigger(tgo4[i]) else set GO[i] = 0 set N[i] = 0 call DisableTrigger(tgo4[i]) call BJDebugMsg("STOP: " + GetPlayerName(Player(i - 1))) endif endfunction function Facing takes integer s returns nothing local integer i = GetPlayerId(GetTriggerPlayer()) + 1 call SetUnitFacing(u[i], s) endfunction function Start takes nothing returns nothing local string s = StringCase(GetEventPlayerChatString(), false) if s == "-r" then call GOO4("R") elseif s == "-l" then call GOO4("L") elseif SubString(s, 0, 3) == "-f " then call Facing(S2I(SubString(s, 3, StringLength(s)))) endif endfunction function Start_init takes nothing returns nothing local trigger t = CreateTrigger() local integer i = 1 loop exitwhen i > PLAYERS call TriggerRegisterPlayerChatEvent(t, Player(i - 1), "-", false) set i = i + 1 endloop call TriggerAddAction(t, function Start) endfunction function Facing_Start takes nothing returns nothing call SetUnitFacing(u[1], 270) call SetUnitFacing(u[2], 270) call SetUnitFacing(u[3], 270) call SetUnitFacing(u[4], 270) call SetUnitFacing(u[5], 270) call SetUnitFacing(u[6], 270) call SetUnitFacing(u[7], 270) call BJDebugMsg("Use -L , -R , -f XXX") endfunction function CreateAllUnits takes nothing returns nothing set u[1] = CreateUnit(Player(0), 'Hblm', - 800, - 50, 3.977) set u[2] = CreateUnit(Player(1), 'Hblm', - 400, - 50, 3.977) set u[3] = CreateUnit(Player(2), 'Hblm', 0, - 50, 3.977) set u[4] = CreateUnit(Player(3), 'Hblm', - 200, - 450, 3.977) set u[5] = CreateUnit(Player(4), 'Hblm', - 600, - 450, 3.977) set u[6] = CreateUnit(Player(5), 'Hblm', - 200, 350, 3.977) set u[7] = CreateUnit(Player(6), 'Hblm', - 600, 350, 3.977) call Facing_Start() endfunction
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
а если в карту вшита защита от паузы путём троекратного запаузивания на старте?
на это пока не нашёл подтверждений
» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?
это всё конечно хорошо, вот бы еще пример кода увидеть
есть ссылки на статьи? пошёл погуглить
» WarCraft 3 / Депротект (знаю заеженная тема)
а вот и не поверю
имелись ввиду глобалки простые типа integer и string
trigger t = CreateTrigger();
в общем хештейбл я так понял это как словарь
ht[0][1] = somevalue;
данном случае тянется номер игрока по привязанному к нему id таймера. классное решение
т.е. на глобалках и таймерах подобный код не сделать с отдельным таймером для каждого плеера?
или ты думаешь движок сайта xgm тоже с нуля писан и не задействует никаких сторонних библиотек?
из них у 1го игрока идёт общий подсчёт действий, у остальных без подсчёта
//! zinc library MyTimerLib { string msg = "-run"; integer i, action[]; timer ticker[]; boolean running[]; hashtable ht = InitHashtable(); function onInit() { trigger t = CreateTrigger(); for (0 <= i < bj_MAX_PLAYER_SLOTS) { if ( GetPlayerController(Player(i)) == MAP_CONTROL_USER && GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING) { TriggerRegisterPlayerChatEvent(t, Player(i), msg, false); action[i] = - 1; running[i] = false; ticker[i] = CreateTimer(); SaveInteger(ht, GetHandleId(ticker[i]), 0, i); } } TriggerAddAction(t, function() { i = GetPlayerId(GetTriggerPlayer()); if (running[i]) { PauseTimer(ticker[i]); action[i] = - 1; running[i] = false; BJDebugMsg("Player: " + I2S(i) + ", stop"); return; } running[i] = true; TimerStart(ticker[i], .3, true, function() { i = LoadInteger(ht, GetHandleId(GetExpiredTimer()), 0); action[i] += 1; BJDebugMsg("Player: " + I2S(i) + ", action: " + I2S(action[i])); if (action[i] == 2) action[i] = - 1; }); }); t = null; } } //! endzinc
как передать GetPlayerId(GetTriggerPlayer()) в таймерную функцию MyTimerLib___anon__0 ?
//! zinc library MyTimerLib { integer n = - 1; timer ticker = CreateTimer(); string msg = "-run"; boolean running = false; player p; function onInit() { trigger t = CreateTrigger(); for (0 <= i < bj_MAX_PLAYER_SLOTS){ if ( GetPlayerController(Player(i)) == MAP_CONTROL_USER && GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING) TriggerRegisterPlayerChatEvent(t, Player(i), msg, false); } TriggerAddAction(t, function(){ p = GetTriggerPlayer(); if (running) { PauseTimer(ticker); n = -1; running = false; BJDebugMsg("stop"); return; } running = true; TimerStart(ticker, .3, true, function() { n += 1; if (n == 0) { BJDebugMsg("action 1: " + I2S(i)); } if (n == 1) { BJDebugMsg("action 2: " + I2S(i)); } if (n == 2) { BJDebugMsg("action 3: " + I2S(i)); n = - 1; } }); }); t = null; } } //! endzinc
как сделать 3 разных действия с одной периодичностью по таймеру?
//! zinc library MyTimerLib { integer n = - 1; timer ticker = CreateTimer(); function onInit() { TimerStart(ticker, .3, true, function() { n += 1; if (n == 0) { BJDebugMsg("111 " + I2S(i)); } if (n == 1) { BJDebugMsg("222 " + I2S(i)); } if (n == 2) { BJDebugMsg("333 " + I2S(i)); n = - 1; } }); } } //! endzinc
что под этим понятием имеется ввиду?
какие несколько методов имеются ввиду?
» WarCraft 3 / Спавн врага на определенном радиусе через триггеры
Хорошо, а как?
если одна глобальная переменная у разных игроков имеет разное значение - это десинх или нет?
» WarCraft 3 / Равкоды
» Администрация XGM / Курсив захватывает ссылки
При снятии с публикации можно указать причину в комментарий к ресурсу.
» WarCraft 3 / каким софтом проставлять отступы в JASS ?
Ред. nazarpunk
» WarCraft 3 / Авто-поворот юнитов
Ред. nazarpunk
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
» WarCraft 3 / Депротект (знаю заеженная тема)
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
Ред. nazarpunk
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
» WarCraft 3 / Депротект (знаю заеженная тема)
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
Ред. nazarpunk
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
Ред. nazarpunk
» WarCraft 3 / как сделать 3 разных действия с одной периодичностью по таймеру?
» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?
» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?
» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?
» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?
» WarCraft 3 / Спавн врага на определенном радиусе через триггеры
» WarCraft 3 / Спавн врага на определенном радиусе через триггеры
» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?
Ред. nazarpunk
» WarCraft 3 / Равкоды
Прокрутить к ресурсу
» Администрация XGM / Курсив захватывает ссылки
» WarCraft 3 / Равкоды
» WarCraft 3 / Равкоды