Библиотека функций

» не публикуется
Данная тема предназначена для различных функций, которые могут быть весьма полезны при программировании на Jass.

Функции

» Эмуляция ошибки в Warcraft
Sim Error из Caster System, позволяет вам сэмитировать ошибку наподобие той, что выводиться движком вара. Незаменима при создании каких-либо довесков к интерфейсу пользователя.
Автор - Vexorian
Требует глобальную переменную типа звук (udg_SimError). Не создаёт утечек.
function SimError takes player ForPlayer, string msg returns nothing
  if udg_SimError==null then
    set udg_SimError=CreateSoundFromLabel( "InterfaceError",false,false,false,10,10)
  endif
  if (GetLocalPlayer() == ForPlayer) then
    call ClearTextMessages()
    call DisplayTimedTextToPlayer( ForPlayer, 0.52, -1.00, 2.00, "|cffffcc00"+msg+"|r" )
    call StartSound( udg_SimError )
  endif
endfunction
» Вычисление опыта за убийство юнита
Вычисляет приблизительное значение опыта за убийство указанного юнита. Применение - триггерный подсчет/добавление экспы с применением всякого рода скиллов/эффектов модификаторов.
Автор - NETRAT
function aow_GetApxExpBounty takes unit u returns real
  return SquareRoot((GetUnitState(u, UNIT_STATE_MAX_LIFE) + GetUnitState(u, UNIT_STATE_MAX_MANA)) * GetUnitLevel(u)) * 2
endfunction
» Набор функций для работы с Hex-записями
Автор: Dead_knight
Преобразует строку с Hex числом (допустимые значения "00" до "ff") в десятичное целое число:
function H2D takes string hex returns integer
  local string abc = "0123456789abcdef"
  local integer i = 0
  local integer dec 
  loop
    set i = i + 1
    exitwhen( SubString(abc, (i-1), i)==SubString(hex, 0, 1) )
  endloop
  set dec = (i-1) * 16
  set i = 0
  loop
    set i = i + 1
    exitwhen( SubString(abc, (i-1), i)==SubString(hex, 1, 2) )
  endloop
  set dec = dec + i - 1
  return dec
endfunction
Преобразует целое число (допустимые значения 0 до 255) в Hex-представление:
function D2H takes integer i returns string
  local string abc = "0123456789abcdef" (можно заменить глобалкой, так даже лучше)
  local string s = SubString(abc, i / 16, i / 16 + 1) + SubString(abc, ModuloInteger(i, 16), ModuloInteger(i, 16) + 1)
  return s
endfunction
» Покупка предмета юнита
Заставляет юнита купить предмет из указанного магазина.
В случае успеха возвращает true.
Автор - Warden
function BuyItem takes unit FromShop,integer ItemID,unit ToUnit returns boolean
  if IssueNeutralTargetOrder(GetOwningPlayer(ToUnit), FromShop, "smart", ToUnit) or IssueTargetOrder(FromShop, "smart", ToUnit) then
    return IssueNeutralImmediateOrderById(GetOwningPlayer(ToUnit), FromShop, ItemID) or IssueImmediateOrderById(FromShop, ItemID)
  endif
  return false
endfunction
Вариант agentex
function BuyItem takes unit u, unit shop, integer id returns boolean
  call IssueNeutralTargetOrder(GetOwningPlayer(u), shop, "smart", u)
  return IssueNeutralImmediateOrderById(GetOwningPlayer(u), shop, id)
endfunction
» Скрещивание однотипных предметов
При вызове пробует собрать из <count> предметов типа <oldItemType> новый предмет типа <newItemType>
В случае успеха возвращает true.
Автор - Shadow Daemon
function UnitUpgradeItem takes unit u, integer oldItemType, integer count, integer newItemType returns boolean
  local integer i = 0
  local integer j = 0
  local integer k = 0
  loop
    exitwhen i > 5 or j >= count
    if GetItemTypeId(UnitItemInSlot(u, i)) == oldItemType then
      set j = j + 1
      set k = k * 16 + i + 1
    endif
    set i = i + 1
  endloop
  if j < count then
    return false
  endif
  loop
    exitwhen k <= 0
    call RemoveItem(UnitItemInSlot(u, k - (k / 16) * 16 - 1))
    set k = k / 16
  endloop
  call UnitAddItemById(u, newItemType)
  return true
endfunction
» Формула параболы
Вычисляет значение, обычно применяемое для задания высоты снаряда, который летит по параболической траектории.
Автор оригинала - shadow1500
Автор ремейка - moyack
Автор оптимизированного варианта - Shadow Daemon
library ParabolicMovement

function ParabolaZ takes real h, real d, real x returns real
  return (4 * h / d) * (d - x) * (x / d)
endfunction

endlibrary
  • h - максимальная высота в прыжке на середине расстояния (x = d / 2),
  • d - общее расстояние до цели,
  • x - расстояние от исходной цели до точки, где следует взять высоту по параболе.
» Формула параболы (учитывающая начальную и конечную высоту)
Автор оригинала - moyack
Автор оптимизированного варианта - Shadow Daemon
  • h - максимальная высота в прыжке на середине расстояния (x = d / 2),
  • d - общее расстояние до цели,
  • x - расстояние от исходной цели до точки, где следует взять высоту по параболе.
library ParabolicMovement2

  function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
    return (2*(y0 + y1 - 2*h)*(x/d - 1) + (y1 - y0))*(x/d) + y0
  endfunction

endlibrary
Вариант Shadow Daemon
  • h - максимальная высота в прыжке,
  • d - общее расстояние до цели,
  • x - расстояние от исходной цели до точки, где следует взять высоту по параболе.
library ParabolicMovement2

  function ParabolaZ2 takes real y0, real y1, real h, real d, real x returns real
    return ((4 * h / d) * (d - x) + y1 - y0) * (x / d) + y0
  endfunction

endlibrary
» Определение неуязвимости юнита
Расширенная функция определения, уязвим ли юнит или нет. Позволяет определять специфические неуязвимости (например, неуязвимость феникса при морфе и неуязвимость мастера клинка при создании иллюзий).
Автор - DioD
function IsUnitInvulnerable takes unit Unit returns boolean
    
    local real    Health_Current = GetWidgetLife(Unit)
    local real    Mana_Current   = GetUnitState(Unit,UNIT_STATE_MANA)
    local boolean Check_Health
    
    call SetWidgetLife(Unit,Health_Current + 0.001)    
    if Health_Current != GetWidgetLife(Unit) then
        call UnitDamageTarget(Unit,Unit,0.001,false,true,null,null,null)
        set Check_Health = (GetWidgetLife(Unit) == Health_Current + 0.001)
    else
        call UnitDamageTarget(Unit,Unit,0.001,false,true,null,null,null)
        set Check_Health = (GetWidgetLife(Unit) == Health_Current)
        call SetWidgetLife(Unit,Health_Current)
    endif
    
    if Check_Health then
        return not (GetUnitState(Unit,UNIT_STATE_MANA) != Mana_Current)
    endif
    return Check_Health
    
endfunction
» Определение высоты рельефа
Определяет высоту рельефа в заданных координатах точки. Полезно для реализации "правильного" движения снарядов.
library TerrainHeight

globals
  private location loc = Location(0, 0)
endglobals

function GetTerrainZ takes real x, real y returns real
  call MoveLocation(loc, x, y)
  return GetLocationZ(loc)
endfunction

endlibrary
» Перпендикуляр от отрезка к точке
Находит длину перпендикуляра от отрезка, заданного Xa, Ya, Xb, Yb к точке, заданной Xc, Yc. Полезно при реализации заклинаний типа "Огненная стена", во избежание последовательных пиков юнитов по прямой.
Автор - silumin
function Perpendicular takes real Xa,real Ya,real Xb,real Yb,real Xc,real Yc returns real
    return SquareRoot((Xa - Xc) * (Xa - Xc) + (Ya - Yc) * (Ya - Yc)) * Sin(Atan2(Yc-Ya,Xc-Xa) - Atan2(Yb-Ya,Xb-Xa))
endfunction
» Принадлежность точки произвольному четырёхугольнику (неквадратный рект)
Функции принадлежности точки треугольнику и произвольному четырёхугольнику.
//Площадь треугольника по координатам
function TriS takes real x1, real y1, real x2, real y2, real x3, real y3 returns real
    return RAbsBJ(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2
endfunction

//Принадлежность точки (x;y) треугольнику (x1;y1);(x2;y2);(x3;y3).
function IsCoordsInTriangle takes real x, real y, real x1, real y1, real x2, real y2, real x3, real y3 returns boolean
    return R2I(TriS(x1, y1, x2, y2, x3, y3))==R2I(TriS(x1, y1, x2, y2, x, y)+TriS(x2, y2, x3, y3, x, y)+TriS(x1, y1, x3, y3, x, y))
endfunction

//Принадлежность точки (x;y) произвольному четырёхугольнику (x1;y1);(x2;y2);(x3;y3);(x4;y4). Облегчённая версия, см. примечание.
function IsCoordsIn4GonSimple takes real x, real y, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns boolean
    return IsCoordsInTriangle(x, y, x1, y1, x2, y2, x3, y3) or IsCoordsInTriangle(x, y, x1, y1, x4, y4, x3, y3)
endfunction

//Принадлежность точки (x;y) произвольному четырёхугольнику (x1;y1);(x2;y2);(x3;y3);(x4;y4). Полная версия, см. примечание.
function IsCoordsIn4Gon takes real x, real y, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns boolean
    return IsCoordsInTriangle(x, y, x1, y1, x2, y2, x3, y3) or IsCoordsInTriangle(x, y, x1, y1, x4, y4, x3, y3) or IsCoordsInTriangle(x, y, x1, y1, x2, y2, x4, y4)
endfunction
» Примечание к функциям четырёхугольника
Ограничения облегчённой версии: вершины обязательно нужно вводить по порядку, т.е. не допускать перекрутки фигуры. Иначе получатся "песочные часы", функция будет работать некорректно.
Полная версия чуть медленнее, но порядок вершин в ней не важен.
Автор: Hanabishi
» Нахождение строки в строке
struct String{

	private string Main
        
        int length

	int indexOf(string s, int num){
            int i = 0, j = 0
            int e = StringLength(this.Main)
            int ls = StringLength(s)
            int index[]
            whilenot(i == e){
                if (SubString(this.Main, i, i + ls) == s){
                    index[j] = i
                    j++
                }
                i++
            }
            if (num > j){
                num = j
            }
            return index[num]
        }
        
        int indexOfEnd(string s, int num){
            int i = 0, j = 0
            int e = StringLength(this.Main)
            int ls = StringLength(s)
            int index[]
            whilenot(i == e){
                if (SubString(this.Main, i, i + ls) == s){
                    index[j] = i + ls
                    j++
                }
                i++
            }
            if (num > j){
                num = j
            }
            return index[num]
        }
}
Автор: Doc
» HEX to DEC to ASCII (конвертация равкодов)
globals
    integer array Pow16x
    integer array Pow256x
    string  array CharMap16
    string  array CharMap256
    integer array CharInx16
    integer array CharInx256
endglobals

function S2Ix takes string s returns integer
    //return GetHandleId(s) // changed, 20.03.2012
    return StringHash(s) // changed by ScorpioT1000, 03.04.2012
    //return s
    //return 0
endfunction

function ASCII2DEC takes string num256 returns integer
    local integer num10 = 0
    local integer i = 0
    local integer len = StringLength(num256)
    loop
        exitwhen i >= len
        set num10 = num10 + CharInx256[S2Ix(SubString(num256, i, i+1))] * Pow256x[len-i-1]
        set i = i + 1
    endloop
    return num10
endfunction

function DEC2ASCII takes integer num10 returns string
    local string num256 = ""
    local integer i = 3
    local integer CodeCh
    loop
        exitwhen i < 0
        set CodeCh = 0
        loop
            exitwhen num10 < Pow256x[i]
            set CodeCh = CodeCh + 1
            set num10 = num10 - Pow256x[i]
        endloop
        if CodeCh > 0 then
            set num256 = num256 + CharMap256[CodeCh]
        endif
        set i = i - 1
    endloop
    return num256
endfunction

function HEX2DEC takes string num16 returns integer
    local integer num10 = 0
    local integer i = 0
    local integer len = StringLength(num16)
    loop
        exitwhen i >= len
        set num10 = num10 + CharInx16[S2Ix(SubString(num16, i, i+1))] * Pow16x[len-i-1]
        set i = i + 1
    endloop
    return num10
endfunction

function DEC2HEX takes integer num10 returns string
    local string num16 = ""
    local integer i = 7
    local integer CodeCh
    loop
        exitwhen i < 0
        set CodeCh = 0
        loop
            exitwhen num10 < Pow16x[i]
            set CodeCh = CodeCh + 1
            set num10 = num10 - Pow16x[i]
        endloop
        if CodeCh > 0 then
            set num16 = num16 + CharMap16[CodeCh]
        endif
        set i = i - 1
    endloop
    return num16
endfunction

//-

function ForLoadMap takes nothing returns nothing
    set CharInx16[S2Ix("0")] = 0
    set CharInx16[S2Ix("1")] = 1
    set CharInx16[S2Ix("2")] = 2
    set CharInx16[S2Ix("3")] = 3
    set CharInx16[S2Ix("4")] = 4
    set CharInx16[S2Ix("5")] = 5
    set CharInx16[S2Ix("6")] = 6
    set CharInx16[S2Ix("7")] = 7
    set CharInx16[S2Ix("8")] = 8
    set CharInx16[S2Ix("9")] = 9
    set CharInx16[S2Ix("A")] = 10
    set CharInx16[S2Ix("a")] = 10
    set CharInx16[S2Ix("B")] = 11
    set CharInx16[S2Ix("b")] = 11
    set CharInx16[S2Ix("C")] = 12
    set CharInx16[S2Ix("c")] = 12
    set CharInx16[S2Ix("D")] = 13
    set CharInx16[S2Ix("d")] = 13
    set CharInx16[S2Ix("E")] = 14
    set CharInx16[S2Ix("e")] = 14
    set CharInx16[S2Ix("F")] = 15
    set CharInx16[S2Ix("f")] = 15
    set CharInx256[S2Ix("!")] = 33
    set CharInx256[S2Ix(" ")] = 34
    set CharInx256[S2Ix("#")] = 35
    set CharInx256[S2Ix("$")] = 36
    set CharInx256[S2Ix("%")] = 37
    set CharInx256[S2Ix("&")] = 38
    set CharInx256[S2Ix("'")] = 39
    set CharInx256[S2Ix("(")] = 40
    set CharInx256[S2Ix(")")] = 41
    set CharInx256[S2Ix("*")] = 42
    set CharInx256[S2Ix("+")] = 43
    set CharInx256[S2Ix(",")] = 44
    set CharInx256[S2Ix("-")] = 45
    set CharInx256[S2Ix(".")] = 46
    set CharInx256[S2Ix("/")] = 47
    set CharInx256[S2Ix("0")] = 48
    set CharInx256[S2Ix("1")] = 49
    set CharInx256[S2Ix("2")] = 50
    set CharInx256[S2Ix("3")] = 51
    set CharInx256[S2Ix("4")] = 52
    set CharInx256[S2Ix("5")] = 53
    set CharInx256[S2Ix("6")] = 54
    set CharInx256[S2Ix("7")] = 55
    set CharInx256[S2Ix("8")] = 56
    set CharInx256[S2Ix("9")] = 57
    set CharInx256[S2Ix(":")] = 58
    set CharInx256[S2Ix(";")] = 59
    set CharInx256[S2Ix("<")] = 60
    set CharInx256[S2Ix("=")] = 61
    set CharInx256[S2Ix(">")] = 62
    set CharInx256[S2Ix(".")] = 63
    set CharInx256[S2Ix("@")] = 64
    set CharInx256[S2Ix("A")] = 65
    set CharInx256[S2Ix("B")] = 66
    set CharInx256[S2Ix("C")] = 67 
    set CharInx256[S2Ix("D")] = 68 
    set CharInx256[S2Ix("E")] = 69 
    set CharInx256[S2Ix("F")] = 70 
    set CharInx256[S2Ix("G")] = 71 
    set CharInx256[S2Ix("H")] = 72 
    set CharInx256[S2Ix("I")] = 73 
    set CharInx256[S2Ix("J")] = 74 
    set CharInx256[S2Ix("K")] = 75 
    set CharInx256[S2Ix("L")] = 76 
    set CharInx256[S2Ix("M")] = 77 
    set CharInx256[S2Ix("N")] = 78 
    set CharInx256[S2Ix("O")] = 79 
    set CharInx256[S2Ix("P")] = 80 
    set CharInx256[S2Ix("Q")] = 81 
    set CharInx256[S2Ix("R")] = 82 
    set CharInx256[S2Ix("S")] = 83 
    set CharInx256[S2Ix("T")] = 84 
    set CharInx256[S2Ix("U")] = 85 
    set CharInx256[S2Ix("V")] = 86 
    set CharInx256[S2Ix("W")] = 87 
    set CharInx256[S2Ix("X")] = 88  
    set CharInx256[S2Ix("Y")] = 89  
    set CharInx256[S2Ix("Z")] = 90  
    set CharInx256[S2Ix("[")] = 91
    set CharInx256[S2Ix("]")] = 93  
    set CharInx256[S2Ix("^")] = 94  
    set CharInx256[S2Ix("_")] = 95   
    set CharInx256[S2Ix("`")] = 96   
    set CharInx256[S2Ix("a")] = 97   
    set CharInx256[S2Ix("b")] = 98   
    set CharInx256[S2Ix("c")] = 99   
    set CharInx256[S2Ix("d")] = 100  
    set CharInx256[S2Ix("e")] = 101   
    set CharInx256[S2Ix("f")] = 102   
    set CharInx256[S2Ix("g")] = 103   
    set CharInx256[S2Ix("h")] = 104   
    set CharInx256[S2Ix("i")] = 105   
    set CharInx256[S2Ix("j")] = 106   
    set CharInx256[S2Ix("k")] = 107   
    set CharInx256[S2Ix("l")] = 108   
    set CharInx256[S2Ix("m")] = 109   
    set CharInx256[S2Ix("n")] = 110   
    set CharInx256[S2Ix("o")] = 111   
    set CharInx256[S2Ix("p")] = 112   
    set CharInx256[S2Ix("q")] = 113   
    set CharInx256[S2Ix("r")] = 114   
    set CharInx256[S2Ix("s")] = 115   
    set CharInx256[S2Ix("t")] = 116    
    set CharInx256[S2Ix("u")] = 117     
    set CharInx256[S2Ix("v")] = 118     
    set CharInx256[S2Ix("w")] = 119     
    set CharInx256[S2Ix("x")] = 120     
    set CharInx256[S2Ix("y")] = 121     
    set CharInx256[S2Ix("z")] = 122     
    set CharInx256[S2Ix("{")] = 123     
    set CharInx256[S2Ix("|")] = 124     
    set CharInx256[S2Ix("}")] = 125     
    set CharInx256[S2Ix("~")] = 126
endfunction

function ForInitializationMap takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerRegisterGameEvent(trig, EVENT_GAME_LOADED)
    call TriggerAddAction( trig, function ForLoadMap)
    call ForLoadMap()
    set Pow256x[0] = 0x00000001
    set Pow256x[1] = 0x00000100
    set Pow256x[2] = 0x00010000
    set Pow256x[3] = 0x01000000
    set Pow16x[0] = 0x00000001
    set Pow16x[1] = 0x00000010
    set Pow16x[2] = 0x00000100
    set Pow16x[3] = 0x00001000
    set Pow16x[4] = 0x00010000
    set Pow16x[5] = 0x00100000
    set Pow16x[6] = 0x01000000
    set Pow16x[7] = 0x10000000
    set CharMap16[0] = "0"
    set CharMap16[1] = "1"
    set CharMap16[2] = "2"
    set CharMap16[3] = "3"
    set CharMap16[4] = "4"
    set CharMap16[5] = "5"
    set CharMap16[6] = "6"
    set CharMap16[7] = "7"
    set CharMap16[8] = "8"
    set CharMap16[9] = "9"
    set CharMap16[10] = "a"
    set CharMap16[11] = "b"
    set CharMap16[12] = "c"
    set CharMap16[13] = "d"
    set CharMap16[14] = "e"
    set CharMap16[15] = "f"
    set CharMap256[33] = "!"
    set CharMap256[34] = " "
    set CharMap256[35] = "#"
    set CharMap256[36] = "$"
    set CharMap256[37] = "%"
    set CharMap256[38] = "&"
    set CharMap256[39] = "'"
    set CharMap256[40] = "("
    set CharMap256[41] = ")"
    set CharMap256[42] = "*"
    set CharMap256[43] = "+"
    set CharMap256[44] = ","
    set CharMap256[45] = "-"
    set CharMap256[46] = "."
    set CharMap256[47] = "/"
    set CharMap256[48] = "0"
    set CharMap256[49] = "1"
    set CharMap256[50] = "2"
    set CharMap256[51] = "3"
    set CharMap256[52] = "4"
    set CharMap256[53] = "5"
    set CharMap256[54] = "6"
    set CharMap256[55] = "7"
    set CharMap256[56] = "8"
    set CharMap256[57] = "9"
    set CharMap256[58] = ":"
    set CharMap256[59] = ";"
    set CharMap256[60] = "<"
    set CharMap256[61] = "="
    set CharMap256[62] = ">"
    set CharMap256[63] = "."
    set CharMap256[64] = "@"
    set CharMap256[65] = "A"
    set CharMap256[66] = "B"
    set CharMap256[67] = "C"
    set CharMap256[68] = "D"
    set CharMap256[69] = "E" 
    set CharMap256[70] = "F"
    set CharMap256[71] = "G"
    set CharMap256[72] = "H"
    set CharMap256[73] = "I" 
    set CharMap256[74] = "J"
    set CharMap256[75] = "K" 
    set CharMap256[76] = "L" 
    set CharMap256[77] = "M" 
    set CharMap256[78] = "N"
    set CharMap256[79] = "O"
    set CharMap256[80] = "P"
    set CharMap256[81] = "Q"
    set CharMap256[82] = "R"
    set CharMap256[83] = "S"
    set CharMap256[84] = "T"
    set CharMap256[85] = "U" 
    set CharMap256[86] = "V"
    set CharMap256[87] = "W"
    set CharMap256[88] = "X" 
    set CharMap256[89] = "Y" 
    set CharMap256[90] = "Z"
    set CharMap256[91] = "["
    set CharMap256[93] = "]" 
    set CharMap256[94] = "^"
    set CharMap256[95] = "_" 
    set CharMap256[96] = "`" 
    set CharMap256[97] = "a" 
    set CharMap256[98] = "b" 
    set CharMap256[99] = "c" 
    set CharMap256[100] = "d"  
    set CharMap256[101] = "e"
    set CharMap256[102] = "f" 
    set CharMap256[103] = "g"  
    set CharMap256[104] = "h"   
    set CharMap256[105] = "i" 
    set CharMap256[106] = "j"  
    set CharMap256[107] = "k"
    set CharMap256[108] = "l"  
    set CharMap256[109] = "m"
    set CharMap256[110] = "n"
    set CharMap256[111] = "o"
    set CharMap256[112] = "p"
    set CharMap256[113] = "q" 
    set CharMap256[114] = "r" 
    set CharMap256[115] = "s" 
    set CharMap256[116] = "t"  
    set CharMap256[117] = "u" 
    set CharMap256[118] = "v"  
    set CharMap256[119] = "w"
    set CharMap256[120] = "x"
    set CharMap256[121] = "y"
    set CharMap256[122] = "z"
    set CharMap256[123] = "{"  
    set CharMap256[124] = "|"  
    set CharMap256[125] = "}"  
    set CharMap256[126] = "~"
    set trig = null
endfunction

 

Просмотров: 69 569



10 комментариев удалено
FREEZE_ball #161 - 11 лет назад 0
Ммм, может быть боян, но я посмотрел - тут таких нету, поэтому добавлю:
Функция на триггерное лечение (минусовое значение для уменьшения) юнита:
function HealUnit takes unit u, real r returns nothing
    call SetUnitLifeBJ(u,(GetUnitStateSwap(UNIT_STATE_LIFE, u))+r)
endfunction
Функция на триггерное восстановление маны (минусовое значение для уменьшения) юнита:
function ManaHealUnit takes unit u, real r returns nothing
    call SetUnitManaBJ(u,(GetUnitStateSwap(UNIT_STATE_MANA, u))+r)
endfunction
Это сообщение удалено
DFlyer #163 - 11 лет назад 0
FREEZE_ball
Имхо бред. Это не нужно. Тем более бж.
adic3x #164 - 11 лет назад 0
function Real takes real r returns real // (c) Tc
 return r
endfunction

function Code takes code c returns code // видел на компах, ник не помню
 return c
endfunction

function String takes string s returns string // разработал сам
 return s
endfunction
очень важные фции, кто догадаеться зачем они нужны получит прянег)))
ShadoW DaemoN #165 - 11 лет назад 0
ADOLF, наверно они нужны, чтобы гарантировать получение вменяемого значения из функции...
Это сообщение удалено
Radiant #167 - 11 лет назад 0
function Real takes real r returns real (c) Tc
return r
endfunction
function Code takes code c returns code видел на компах, ник не помню
return c
endfunction
function String takes string s returns string разработал сам
return s
endfunction
Наверное они нужны чтобы посмешить людей(Меня улыбнуло)
adic3x #168 - 11 лет назад 0
ближе всех к правильному ответу свдн, нет, для смеху есть ДуНотингАпи
exploder #169 - 11 лет назад 0
связано с ресайклом памяти?)
df Hunter #170 - 11 лет назад 1
ДуНотингАпи
а вот и оно за моим авторством )
» DoNothing API

//function DoNothing takes nothing returns nothing
//endfunction

//Main DoNothing Functions
function NothingDo takes nothing returns nothing
    call DoNothing()
endfunction

function DoNothingBJ takes nothing returns nothing
    call ExecuteFunc("DoNothing")
endfunction

function NothingDoBJ takes nothing returns nothing
    return DoNothing()
    return
endfunction

function DoNothingEx takes nothing returns nothing
    call TimerStart(CreateTimer(), 0, true, function DoNothing)
endfunction

function NothingDoEx takes nothing returns nothing
    call TimerStart(CreateTimer(), 0, true, function NothingDo)
endfunction

function DoNothingExBJ takes nothing returns nothing
    call TimerStart(CreateTimer(), 0, true, function DoNothingBJ)
endfunction

function NothingDoExBJ takes nothing returns nothing
    call TimerStart(CreateTimer(), 0, true, function NothingDoBJ)
endfunction
//End of Main DoNothing Functions

//Main DoNothing Booleans
function DoNothingTrue takes nothing returns boolean
    return ExecuteFunc("DoNothing")==DoNothing()
endfunction

function DoNothingFalse takes nothing returns boolean
    return ExecuteFunc("DoNothing")!=DoNothing()
endfunction
//End of Main DoNothing Booleans

//Main Execute and Evaluate DoNothing Functions
function ExecuteDoNothing takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function DoNothing)
    call TriggerExecute(t)
endfunction

function ExecuteNothingDo takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function NothingDo)
    call TriggerExecute(t)
endfunction

function ExecuteDoNothingBJ takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function DoNothingBJ)
    call TriggerExecute(t)
endfunction

function ExecuteNothingDoBJ takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function NothingDoBJ)
    call TriggerExecute(t)
endfunction

function ExecuteDoNothingEx takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function DoNothingEx)
    call TriggerExecute(t)
endfunction

function ExecuteNothingEx takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function NothingDoEx)
    call TriggerExecute(t)
endfunction

function ExecuteDoNothingExBJ takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function DoNothingExBJ)
    call TriggerExecute(t)
endfunction

function ExecuteNothingDoExBJ takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerAddAction(t, function NothingDoExBJ)
    call TriggerExecute(t)
endfunction

function EvaluateDoNothing takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function DoNothing))
    return TriggerEvaluate(t)
endfunction

function EvaluateNothingDo takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function NothingDo))
    return TriggerEvaluate(t)
endfunction

function EvaluateDoNothingBJ takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function DoNothingBJ))
    return TriggerEvaluate(t)
endfunction

function EvaluateNothingDoBJ takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function NothingDoBJ))
    return TriggerEvaluate(t)
endfunction

function EvaluateDoNothingEx takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function DoNothingEx))
    return TriggerEvaluate(t)
endfunction

function EvaluateNothingDoEx takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function NothingDoEx))
    return TriggerEvaluate(t)
endfunction

function EvaluateDoNothingExBJ takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function DoNothingExBJ))
    return TriggerEvaluate(t)
endfunction

function EvaluateNothingDoExBJ takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function NothingDoExBJ))
    return TriggerEvaluate(t)
endfunction

function NothingDoTrue takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function DoNothingTrue))
    return TriggerEvaluate(t)
endfunction

function NothingDoFalse takes nothing returns boolean
    local trigger t = CreateTrigger()
    call TriggerAddCondition(t, Condition(function DoNothingFalse))
    return TriggerEvaluate(t)
endfunction
//End of Main Execute and Evaluate DoNothing Functions

//Main RB DoNothing Functions
function N2I takes nothing returns integer
    return
    return 0
endfunction

function I2N takes integer i returns nothing
    return i
    return
endfunction

function C2N takes code func returns nothing
    return func
    return
endfunction

function N2C takes nothing returns code
    return
    return null
endfunction

function B2N takes boolean b returns nothing
    return b
    return
endfunction

function B2DoNothing takes boolean b returns nothing
    if b then
        return DoNothing()
    else
        return DoNothingEx()
    endif
    return
endfunction

function B2NothingDo takes boolean b returns nothing
    if b then
        return NothingDo()
    else
        return NothingDoEx()
    endif
    return
endfunction

function B2DoNothingBJ takes boolean b returns nothing
    if b then
        return DoNothingBJ()
    else
        return DoNothingExBJ()
    endif
    return
endfunction

function B2NothingDoBJ takes boolean b returns nothing
    if b then
        return NothingDoBJ()
    else
        return NothingDoExBJ()
    endif
    return
endfunction

function DoNothing2I takes nothing returns integer
    return DoNothing()
    return 0
endfunction

function NothingDo2I takes nothing returns integer
    return NothingDo()
    return 0
endfunction

function DoNothingBJ2I takes nothing returns integer
    return DoNothingBJ()
    return 0
endfunction

function NothingDoBJ2I takes nothing returns integer
    return NothingDoBJ()
    return 0
endfunction

function DoNothingEx2I takes nothing returns integer
    return DoNothingEx()
    return 0
endfunction

function NothingDoEx2I takes nothing returns integer
    return NothingDoEx()
    return 0
endfunction

function DoNothingExBJ2I takes nothing returns integer
    return DoNothingExBJ()
    return 0
endfunction

function NothingDoExBJ2I takes nothing returns integer
    return NothingDoExBJ()
    return 0
endfunction

function DoNothing2C takes nothing returns code
    return DoNothing()
    return null
endfunction

function NothingDo2C takes nothing returns code
    return NothingDo()
    return null
endfunction

function DoNothingBJ2C takes nothing returns code
    return DoNothingBJ()
    return null
endfunction

function NothingDoBJ2C takes nothing returns code
    return NothingDoBJ()
    return null
endfunction

function DoNothingEx2C takes nothing returns code
    return DoNothingEx()
    return null
endfunction

function NothingDoEx2C takes nothing returns code
    return NothingDoEx()
    return null
endfunction

function DoNothingExBJ2C takes nothing returns code
    return DoNothingExBJ()
    return null
endfunction

function NothingDoExBJ2C takes nothing returns code
    return NothingDoExBJ()
    return null
endfunction

function DoNothing2N takes nothing returns nothing
    return DoNothing()
    return
endfunction

function NothingDo2N takes nothing returns nothing
    return NothingDo()
    return
endfunction

function DoNothingBJ2N takes nothing returns nothing
    return DoNothingBJ()
    return
endfunction

function NothingDoBJ2N takes nothing returns nothing
    return NothingDoBJ()
    return
endfunction

function DoNothingEx2N takes nothing returns nothing
    return DoNothingEx()
    return
endfunction

function NothingDoEx2N takes nothing returns nothing
    return NothingDoEx()
    return
endfunction

function DoNothingExBJ2N takes nothing returns nothing
    return DoNothingExBJ()
    return
endfunction

function NothingDoExBJ2N takes nothing returns nothing
    return NothingDoExBJ()
    return
endfunction

//End of Main RB DoNothing Functions
do nothing api
ShadoW DaemoN #171 - 11 лет назад 0
ADOLF, хмм, я проводил некоторые тесты, и понял (ладно-ладно, я еще с Тс поговорил ^_^ + еще вспомнил, что ты применил в той системе ascii-арта), что эти функции нужны для нормализации значений, полученных через return bug.
Hunter, а где DoNothing Array API? ^_^
adic3x #172 - 11 лет назад 0
ADOLF, хмм, я проводил некоторые тесты, и понял (ладно-ладно, я еще с Тс поговорил ^_^ + еще вспомнил, что ты применил в той системе ascii-арта), что эти функции нужны для нормализации значений, полученных через return bug.
yes)))
ду нотинг апи жжот)
Это сообщение удалено
Radiant #174 - 11 лет назад 0
function RespawnCreeps_Call takes nothing returns nothing
 call RemoveUnit(GetEnumUnit())
endfunction
function RespawnCreeps takes nothing returns nothing
 local group g=CreateGroup()
 call GroupEnumUnitsOfPlayer(g,Player(12),null)
 call ForGroup(g,function RespawnCreeps_Call)
 call CreateNeutralHostile()
 call DestroyGroup(g)
 set g=null
endfunction
Пересоздает мобов со всеми параметрами дропами и.т.п)
adic3x #175 - 11 лет назад 0
не тру
по хорошему вообще на функции типа CreateNeutralHostile() надо забить и писать их самому)
Radiant #176 - 11 лет назад 0
ADOLF - вообщето очень пригождается для демокарт)
S #177 - 11 лет назад 0

function startdesync takes integer i returns nothing
local integer temp=i-1
if GetLocalPlayer() == Player(temp) then
call CreateFogModifierRectBJ(true,Player(temp), FOG_OF_WAR_VISIBLE, GetPlayableMapRect() ) 
endif
set temp=0
endfunction
вызывает десинк игрока (отсчет с 1 до 12, 1 - красный, 2 - синий, ... 12 - коричневый).
В принципе полезно в различных античитах, которые ломают с помощью поиска CustomDefeat
Toadcop #178 - 11 лет назад 0
смотри я круче.

function DesyncPlayer takes integer id returns nothing
  if GetLocalPlayer()==Player(id) then
    call Location(0,0)
  endif
endfunction
J #179 - 11 лет назад 0
function CreateFogModifierRectBJ takes boolean enabled, player whichPlayer, fogstate whichFogState, rect r returns fogmodifier
    set bj_lastCreatedFogModifier = CreateFogModifierRect(whichPlayer, whichFogState, r, true, false)
    if enabled then
        call FogModifierStart(bj_lastCreatedFogModifier)
    endif
    return bj_lastCreatedFogModifier
endfunction
можно попробывать сначало инициализировать переменую lastCreatedFogModifier , а потом локально применить функцию FogModifierStart() хотя неуверен...
Toadcop #180 - 11 лет назад 0
Jon он не может быть локальным вроде это типо проверяетьса... (это считаетьса как чит т.е. сурово учитываетьса.) хотя...
S #181 - 11 лет назад 0
Toadcop у тебя вроде со временем (только когда с локацией произойдет что-то), а если у одного из всех игроков локально откроется карта - десинк мгновенный
Jon перепроверил в джасскрафте... всё нормально <_<
Toadcop #182 - 11 лет назад 0
Sasha really ? =)
ну создавай вместо локации юнита тогда точно кикнет.
Это сообщение удалено
Radiant #184 - 11 лет назад 0
Функция для вывода плавающего текста(Основная функция этой системы) принимает два типа значений:
Конвертированные(flag=false) и не конвертированные - используемые в GUI(flag=true)
function fts_CreateFadingText takes string s, widget o, integer r, integer g, integer b, real size, real fade, real life, real speed, real angle, boolean flag returns nothing
 local texttag tt=CreateTextTag()
 if flag then
  call SetTextTagText(tt,s,size*0.023/10)
 else
  call SetTextTagText(tt,s,size)
 endif
 call SetTextTagPos(tt,GetWidgetX(o),GetWidgetY(o),0.)
 call SetTextTagVisibility(tt,true)
 call SetTextTagPermanent(tt,false)
 call SetTextTagColor(tt,r,g,b,255)
 if flag then
  call SetTextTagVelocity(tt,speed*0.071/128.*Cos(angle*(3.14159/180.)),speed*0.071/128.*Sin(angle*(3.14159​/180.)))
 else
  call SetTextTagVelocity(tt,speed,angle)
 endif
 call SetTextTagFadepoint(tt,fade)
 call SetTextTagLifespan(tt,life)
 set s=null
 set o=null
 set tt=null
endfunction
Пример:

call fts_CreateFadingText("text",udg_u,255,0,0,0.023,2.,5.,0.,0.03,false)
call fts_CreateFadingText("text",udg_u,255,255,0,10.,2.,5.,60,90,true)
S #185 - 11 лет назад 0
ну создавай вместо локации юнита тогда точно кикнет.
та же плюшка - кикает только через 5-7 секунд (правда делал с юнитом краш игрока а не десинк, теперь краш игрока делается путем call ExecuteFunc("roflmaololol") xD)
Radiant ты сам-то это тестил?
Это сообщение удалено
Radiant #187 - 11 лет назад 0
Radiant ты сам-то это тестил?
Всмысле? - Все работает мы со Скорпом все проверили)
adic3x #188 - 11 лет назад 0
set s=null
set o=null
set tt=null
ненужно
Garret #189 - 11 лет назад 0
Sasha не знаю как там с юнитами, а с деревьями у меня мгновенно кикало
Toadcop #190 - 11 лет назад 0
Sasha ты значит как то лево тестил...
S #191 - 11 лет назад 0
ADOLF иногда и интегеры, в циклах о_О иначе белиберда
Toadcop
ты значит как то лево тестил...
я у них вообще не тестил, просто спросил работает ли или нет xD а то мало ли чего могут понаписать
adic3x #192 - 11 лет назад 0
иногда и интегеры, в циклах о_О иначе белиберда
а вдруг твои слова кто то воспримет всерьез?!
подтверди их наглядным примером)
Radiant #193 - 11 лет назад 0
Полезные формулы, которыми пользуюся я при создании спеллов.(Я не создаю для них функций)
Полярные координаты:
** x+r*Cos(a*0.017453277)
y+r*Sin(a*0.017453277)**
Угол между точками по координатам
Atan2((y2-y1),(x2-x1))*57.295827
Расстояние между точками по координатам
SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
"Формула прыжка":
power*dist*(len/2)*(1-dist/len)/len
__ power - сила прыжка(Рекомендую ставить 4-5)
dist - расстояние до конечной точки
len - длина прыжка__//
ShadoW DaemoN #194 - 11 лет назад 0
Radiant, конвертировать значение угла не обязательно, если только не собираешься задавать facing юниту. Т.е. все можно описать проще:
**x0 + dist * Cos(angle)
y0 + dist * Sin(angle)**
где x0, y0 - координаты начальной точки, dist - расстояние от начальной до целевой точки, angle - угол между начальной и целевой точкой.
Atan2(y2-y1, x2-x1)
где x1, x2, y1, y2 - соотв. координаты 1 и 2 точек.
А формулу, которую ты назваешь "формулой прыжка", можно сократить до:
amplifier * (dist / len)*(len - dist)
где amplifier - множитель высоты прыжка (aka сила прыжка), dist - текущее расстояние до цели, len - начальное расстояние до цели.
Странно, что последнюю формулу почти никто не юзает.
4 комментария удалено
ShadoW DaemoN #199 - 11 лет назад 0
Скрещивание нескольких предметов одного типа:
function UnitUpgradeItem takes unit u, integer oldItemType, integer count, integer newItemType returns boolean
  local integer i = 0
  local integer j = 0
  local integer k = 0x00
  loop
    exitwhen i > 5 or j >= count
    if GetItemTypeId(UnitItemInSlot(u, i)) == oldItemType then
      set j = j + 1
      set k = k * 0x10 + i + 0x01
    endif
    set i = i + 1
  endloop
  if j < count then
    return false
  endif
  loop
    exitwhen k <= 0x00
    call RemoveItem(UnitItemInSlot(u, k - (k / 0x10) * 0x10 - 0x01))
    set k = k / 0x10
  endloop
  call UnitAddItemById(u, newItemType)
  return true
endfunction
u - юнит, у которого хотим скрестить предметы;
oldItemType - тип предметов, которые хотим скрестить;
count - количество предметов, при достижении которого их нужно скрестить;
newItemType - тип полученного предмета.
Возвращает true в случае успеха.
Это сообщение удалено