21

» WarCraft 3 / Величина вертикального FoV игровой камеры в Warcraft III

Соотношение ширины экрана к высоте экрана в Варкрафте всегда 3 : 4. На устройствах с большим разрешением картинка растягивается и на экране можно видеть исключительно тот участок, который бы можно было видеть при текущем FoV на экране с соотношением сторон 3 к 4. Вертикальный FoV находится по формуле:
FoV vertical == 2*Atan(0.75*tan(horizontal FoV/2))
21

» WarCraft 3 / Не могу решить задачу при создании спелла

nvc123, ну таймеры нужны в любом случае. Я о том что не нужен периодический таймер для проверки, можно ловить приказ.
21

» WarCraft 3 / Не могу решить задачу при создании спелла

nvc123, можно при получении любого приказа проверять этот приказ и цель приказа. Если они отличаются от необходимых - отдавать нужный приказ.
21

» IN-VERT / IN-VERT

TERNOX, использовал какой-то движок или сам сделал? И под какие платформы это разрабатывается?
21

» WarCraft 3 / Вылетает при нанесении урона по области или юнитам через триггер

Вроде как можно отключать триггер, наносить урон, включать триггер. И такого происходить не будет.
21

» WarCraft 3 / Просто ваше мнения, или знания.

Лучше всего стандарт: покупка за 2х, продажа за 1/2х. Не понятно даже что у него за карта.
21

» WarCraft 3 / Просто ваше мнения, или знания.

Сделай соотношение числа, выведенного из этой формулы к 1. Только не спрашивай что это такое. Вместо переменных кидай рандомные числа

Загруженные файлы
21

» WarCraft 3 / Автокаст способностей.

DoctorDoza, понимаешь ли, твой скрин с условиями... не торт.
тебе нужно:
  • быть внимательней
  • почитать о логическом мышлении
  • самостоятельно ознакомится со списком событий/условий/действий в GUI
  • применить свои знания о логическом мышлении
  • если проблема не решена - обратить внимание на статьи
  • определится по какому принципу определяются приоритеты целей для скилла
  • выбрать всех в группе, запустить свой фильтр,выполнить действия (если уровень баффа равен 0 - его у юнита нет)
  • если ничего из вышеперечисленного не помогло или слишком сложно - нужно закончить школу, ибо увы...
21

» WarCraft 3 / Как делать спеллы, урон которых будет зависеть от стат?

Как делать спеллы, урон которых будет зависеть от стат?
Почитать статьи и хотя бы открыть редактор. Попытайся подумать/поискать сам вместо того чтоб искать туториалы к любому возникшему вопросу. Это не круто.
21

» WarCraft 3 / Способности и алгоритмы на заказ

nvc123, стоит. Тему стоит расширить и подумать над названием. Понимаю, что она кочевала из форума, но уже давно пора поменять формат. Если есть идеи пишите руководителю проекта или мне. Уместные предложения всегда рассматриваются.
21

» WarCraft 3 / Видимость и туман войны

На самом деле, можно создать систему, разбивающую карту на ректы, и фиксирующую маску, но ты ведь сам понимаешь. Много мороки.
21

» WarCraft 3 / Создание глобального таймера, к которому привязывается всё

Таймер один. Он может на этом тике двинуть юнита, на следующем - двинуть юнита, ..... через 300 тиков сделать 10 действий и двинуть юнита.
С таким не сталкивался.
21

» WarCraft 3 / Создание глобального таймера, к которому привязывается всё

Ну, я делал так
   globals
      timer periodic
      real period = 0.01
      group restoreHP
   endglobals

   function restoreParamatersCallback takes nothing returns nothing
      
      local integer iD = GetHandleId(GetEnumUnit())
      local real hpRegen = LoadReal(Hash,iD,HASH_LIFE_REGENERATION_INDEX)
      local real manaRegen = LoadReal(Hash,iD,HASH_MANA_REGENERATION_INDEX)
         
         call SetUnitState(GetEnumUnit(),UNIT_STATE_LIFE,GetUnitState(GetEnumUnit(),UNIT_STATE_LIFE)+hpRegen*restorationPeriod)
         call SetUnitState(GetEnumUnit(),UNIT_STATE_MANA,GetUnitState(GetEnumUnit(),UNIT_STATE_MANA)+manaRegen*restorationPeriod)            

   endfunction
   
   function periodicActions takes nothing returns nothing //Тут просто вызовы всего что нужно
      call ForGroup(restoreHP,function restoreHPCallback)
   endfunction

   function Initialization takes nothing returns nothing  
      set periodic = CreateTimer()
      call TimerStart(periodic,period,true,function periodicActions)
   endfunction

А вообще создать триггер и добавить событие - глобальный таймер истекает, не?
21

» WarCraft 3 / Сообщение из чата

Пример Jass
function Actions takes nothing returns nothing
 
   local string s = GetEventPlayerChatString()
   local unit u = gg_unit_Hblm_0001

      if SubString(s,0,2) == "HP"  then
         call SetUnitLife(u,S2I(SubString(s,3,StringLength(s))))
      elseif SubString(s,0,2) == "MP" then
         call SetUnitMana(u,S2I(SubString(s,3,StringLength(s)))) 
      elseif SubString(s,0,4) == "eARM" then
         call SetUnitExtraArmor(u,S2I(SubString(s,5,StringLength(s))))
      elseif SubString(s,0,4) == "eDMG" then
         call SetUnitExtraDamage(u,S2I(SubString(s,5,StringLength(s))))
      elseif SubString(s,0,4) == "bDMG" then
         call SetUnitBaseDamage(u,S2I(SubString(s,5,StringLength(s))))
      elseif SubString(s,0,3) == "BDA" then
         call SetUnitBlockDamageAmmount(u,S2R(SubString(s,4,StringLength(s)))) 
      elseif SubString(s,0,3) == "BDP" then
         call SetUnitBlockDamagePercent(u,S2R(SubString(s,4,StringLength(s)))) 
      elseif SubString(s,0,2) == "AS" then
         call SetUnitAttackSpeed(u,S2I(SubString(s,3,StringLength(s)))) 
      elseif SubString(s,0,2) == "HR" then
         call SetUnitLifeRegeneration(u,S2I(SubString(s,3,StringLength(s)))) 
      elseif SubString(s,0,2) == "MR" then
         call SetUnitManaRegeneration(u,S2I(SubString(s,3,StringLength(s)))) 
      endif
    
      set u = null
    
endfunction

function InitTrig_addAttribute takes nothing returns nothing
   set gg_trg_addAttribute = CreateTrigger()
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"HP",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"MP",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"eARM",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"eDMG",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"bDMG",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"BDA",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"BDP",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"HP",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"AS",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"HR",false)
   call TriggerRegisterPlayerChatEvent(gg_trg_addAttribute,Player(0),"MR",false)
   call TriggerAddAction(gg_trg_addAttribute,function Actions)
endfunction
21

» WarCraft 3 / нормально ли такое юзать?

M1n3rva, кажется, я тогда писал какую-то рачатину (код, где утекали группы).
21

» WarCraft 3 / нормально ли такое юзать?

M1n3rva, это я знаю. У меня были проблемы с использованием считывания/записи локальной группы в хэш в таймере: вроде как не получалось передать локальной группе значение без "CreateGroup()", тоесть без создания нового хэндла. Старая ссылка терялась и это вызывало утечки групп. С "ForGroup" подобного не наблюдалось.
21

» WarCraft 3 / Проблема с переносом спеллпака

В той наработке, кажется, нужна глобальная переменная типа таблица рекордов с названием HandleBoard.
Да, автор наработки по какой-то неясной причине решил что лучше создать переменную в гуи. В следствии чего чтоб использовать наработку не достаточно просто скопировать код в свою карту. Вот "исправленная" версия. Нужно скопировать весь код и поместить в свою карту, в любое место. Цельным куском.
Код
library HandleCounter initializer Initialization

   globals
      leaderboard HandleBoard
   endglobals
   
   function HandleCounter_Update takes nothing returns nothing
      
      local integer i = 0
      local integer id
      local location array P
      local real result=0
      
      loop
      exitwhen i >= 50
         set i = i + 1
         set P[i] = Location(0,0)
         set id = GetHandleId(P[i])
         set result = result + (id-0x100000)
      endloop
      set result = result/i-i/2
      loop
          call RemoveLocation(P[i])
          set P[i] = null
          exitwhen i <= 1
          set i = i - 1
      endloop
      call LeaderboardSetItemValue(HandleBoard,0,R2I(result))
   
   endfunction


   function HandleCounter_Actions takes nothing returns nothing
       
      set HandleBoard = CreateLeaderboard()
      call LeaderboardSetLabel(HandleBoard, "Handle Counter")
      call PlayerSetLeaderboard(GetLocalPlayer(),HandleBoard)
      call LeaderboardDisplay(HandleBoard,true)
      call LeaderboardAddItem(HandleBoard,"Handles",0,Player(0))
      call LeaderboardSetSizeByItemCount(HandleBoard,1)
      call HandleCounter_Update()
      call TimerStart(GetExpiredTimer(),0.05,true,function HandleCounter_Update)

   endfunction

function Initialization takes nothing returns nothing

        call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions)
        
endfunction

endlibrary
А вообще - эта штука считает утечки. Какие проблемы с прочими скиллами не ясно.