Добавлен , не публикуется
Данная тема предназначена для различных функций, которые могут быть весьма полезны при программировании на 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
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
14
15 лет назад
0
function Baybay takes nothing returns nothing
   call ExecuteFunc("Baybay")
endfunction

function BayBayForPlayer takes player p returns nothing
    if GetLocalPlayer() == p then
    call Baybay()
    endif
endfunction
Незнаю, была-ли такая функция здесь) она выкидывает мгновенно из варика игрока, БЕЗ ФАТАЛ ЕРОР.
1
10
15 лет назад
1
txt2:""
Находит макс. уровень способности
для нахождения использует дамми (Пехотинец)
function [b]GetAbilityMaxLevel[/b] takes integer abilcode returns integer
local unit U = CreateUnitAtLoc( Player(15), 'hfoo', 1, 1)
local integer ID = abilcode
local integer A = 1
local integer B = 1
call UnitAddAbility(U, ID)
loop
set A = A+1
call SetUnitAbilityLevel(U, ID, A)
exitwhen A!=GetUnitAbilityLevel(U, ID)
endloop
call RemoveUnit (U)
set U = null
return A-1
endfunction
""
0
20
15 лет назад
0
CreateUnitAtLoc( Player(15), 'hfoo', 1, 1)
разве эта функция берет столько аргументов?
CreateUnit(Player(15),'hfoo',0.,0.,0.)
0
19
15 лет назад
0
Jack of Shadow, честно говоря, нигде не нужно. В своей карте ты сам должен знать максимальные уровни всех способностей.
2 комментария удалено
0
37
15 лет назад
0
Неудержался :) это, конечно на практике будет работать как уг(особенно дополнительная либа для строчек), но всеравно интересно было)
// ===================================================================================== |
// Библиотека BinInt содержит функции для работы с двоичным видом целого 32-битного числа.
// Автор: ScorpioT1000
// Дата создания: 03.09.2009
// Библиотека обладает всеми авторскими правами.
//
// Объект:
 BinInt
// Функции:

        // ============== Основное =============== //

    static method New takes nothing returns BinInt
    // Конструктор без параметров, создает BinInt, который равен 0
    // Пример:
        local BinInt A = BinInt.New()
        
    static method New0 takes nothing returns BinInt
    // Конструктор без параметров, создает BinInt, но не присваивает элементам значения (!)
 
    static method New1 takes integer src returns BinInt
    // Конструктор, принимающий integer. Создает BinInt, который равен src
    // Пример:
        local integer B = 100500
        BinInt A = BinInt.New1(B)
        
    method Copy takes nothing returns BinInt
    // Создает новый BinInt и присваивает ему значение текущего
    // Пример:
        local BinInt A = BinInt.New1(100500)
        local BinInt B = A.Copy() // B = 100500
        
    method Print takes nothing returns nothing
    // Печатает текущий BinInt через стандартный вывод.
    // Вид:
    //  XXXX XXXX XXXX XXXX-
    // -XXXX XXXX XXXX XXXX
    // Пример:
        local BinInt A = BinInt.New1(100500)
        call A.Print()
    
    method SetBit takes integer num, boolean val returns nothing
    method GetBit takes integer num returns boolean
    // Устанавливает/берет значение отдельно взятого бита (под номером num, от 0 до 31)
    // with binary search !
    // Пример:
        local BinInt A = BinInt.New1(100500)
        call A.SetBit(0,true) // теперь A = 100501
        
        // ============= Операции преобразований ================ //
        
    method toBin takes integer a returns nothing
    // Функция конвертирует принятое число a в бинарный вид и записывает его в текущий BinInt
    // Пример:
        local BinInt A = BinInt.New()
        local integer B = 100500
        call A.toBin(B) // в A записано 100500 как "0000 0000 0000 0001  1000 1000 1001 0100"
        
    method toDec takes nothing returns integer
    // Функция конвертирует текущий BinInt в стандартный integer и возвращает его
    // Пример:
        local BinInt A = BinInt.New1(100500)
        local integer B = A.toDec() // B будет равна 100500
        
        // ================ Побитовые операции ================== //
    
    method AND takes BinInt right returns BinInt
    // применяет AND на два BinInt'а (текущий и переданный), записывает результат в новый и возвращает его
    
    method OR takes BinInt right returns BinInt
    // применяет OR на два BinInt'а (текущий и переданный), записывает результат в новый и возвращает его
    
    method XOR takes BinInt right returns BinInt
    // применяет XOR на два BinInt'а (текущий и переданный), записывает результат в новый и возвращает его
    
    
    method NOT takes nothing returns BinInt
    // применяет побитовый NOT на текущий BinInt
    
    method LeftShift takes nothing returns nothing
    method RightShift takes nothing returns nothing
    // побитовые сдвиги влево и вправо
    

        // ============= integer - приспособленные ============== //
    // Это то, для чего все это делалось :)
    
    function IntXOR takes integer A, integer B returns integer
    function IntAND takes integer A, integer B returns integer
    function IntOR takes integer A, integer B returns integer
    // Применяют XOR, AND и OR на пару целых чисел, результат возвращают


// ===================================================================================== |
.
это пока не финал, если что
Этот комментарий удален
0
37
15 лет назад
0
Омг оказывается я выложил какую-то левую версию карты, когда еще тока начал писать. А готовую найти не могу, походу jngp ее затер.
ScorpioT1000 добавил:
Обновил ! все нашел, теперь должно быть норм)
0
19
15 лет назад
0
Функции, которую я использую для быстрого прикрепления интегера структуры на любой хендл. Может, и не нужно, но я плакаю:

int GetStruct(string s, handle h) {   
    return LoadInteger(HASH, StringHash(s), GetHandleId(h))
}
void SetStruct(int i, string s, handle h) {
    SaveInteger(HASH, StringHash(s), GetHandleId(h), i)
}
Разумеется, при инициализации карты должна быть создана глобальная переменная HASH (не забываем её также инициализировать).
<3 Shrine of Love <3
0
33
15 лет назад
0
FREEZE_ball, ты не шаришь... и функции твои - пример индуского кода, причем яркий
я думал такие кодеры бывают только в анекдотах и мемах, а вон нет, нашелся таки одни
0
19
15 лет назад
0
ADOLF, о_О, чем обоснуешь?
[size=1]FREEZE_ball добавил:[/size]
И ах да, дефайнами я тогда не умел пользоваться ^^
0
22
15 лет назад
0
Потому что это - чистейший индусский код =)
0
37
15 лет назад
0
хэш тейбл вобще не нужен, нужно тока get handle id
0
14
15 лет назад
0
ScorpioT1000, ой.... зачем это ? это же так медленно
0
37
15 лет назад
0
что это?
ScorpioT1000 добавил:
handle id - это и есть ключь из хэш-таблицы хэндлов(а никакой не адрес ячейки виртуальной памяти и прочая мишура), на которой построены все данные в варкрафте. пользуясь им (т.е. для каждого хендла свой ключ) мы находим индекс например массива, или id структуры. это самый быстрый способ для варика
0
14
15 лет назад
0
[quote=ScorpioT1000]BinInt.w3x (20.6 Кбайт, 4 просмотров )
И R2I(Pow(2,i))... кстати операцию возведение в квадрат мне частенько приходилось юзать, и мне показалось рационально в массив занести значения (тем более их всего 31)
0
37
15 лет назад
0
нет это тупо. тут главный недочет - это то, что тут 32 була а надо всегото 1 интежер) по памяти.
ScorpioT1000 добавил:
ты еще не видел как мой хэш стрингов тормознуто работает) напиши там любое слово в этой карте типа "aa", "ab", "ac")
0
14
15 лет назад
0
Как то так. думаю понятно, что это =/
library colortext initializer InitLibColortext {

    string array sj_clrlib;

    define <Text Color> (R,G,B,Text)={"|cFF"+sj_clrlib[R]+sj_clrlib[G]+sj_clrlib**+Text+"|r"}


void InitLibColortext(){
    string array sjg_loc;
    integer i = 0x00;
    sjg_loc[0] =  "0";
    sjg_loc[1] =  "1";
    sjg_loc[2] =  "2";
    sjg_loc[3] =  "3";
    sjg_loc[4] =  "4";
    sjg_loc[5] =  "5";
    sjg_loc[6] =  "6";
    sjg_loc[7] =  "7";
    sjg_loc[8] =  "8";
    sjg_loc[9] =  "9";
    sjg_loc[10] = "A";
    sjg_loc[11] = "B";
    sjg_loc[12] = "C";
    sjg_loc[13] = "D";
    sjg_loc[14] = "E";
    sjg_loc[15] = "F";
    
    loop{ 
    exitwhen i > 0xF
        sj_clrlib[i*0x10+0x0] =sjg_loc[i]+"0";
        sj_clrlib[i*0x10+0x1] =sjg_loc[i]+"1";
        sj_clrlib[i*0x10+0x2] =sjg_loc[i]+"2";
        sj_clrlib[i*0x10+0x3] =sjg_loc[i]+"3";
        sj_clrlib[i*0x10+0x4] =sjg_loc[i]+"4";
        sj_clrlib[i*0x10+0x5] =sjg_loc[i]+"5";
        sj_clrlib[i*0x10+0x6] =sjg_loc[i]+"6";
        sj_clrlib[i*0x10+0x7] =sjg_loc[i]+"7";
        sj_clrlib[i*0x10+0x8] =sjg_loc[i]+"8";
        sj_clrlib[i*0x10+0x9] =sjg_loc[i]+"9";
        sj_clrlib[i*0x10+0xA] =sjg_loc[i]+"A";
        sj_clrlib[i*0x10+0xB] =sjg_loc[i]+"B";
        sj_clrlib[i*0x10+0xC] =sjg_loc[i]+"C";
        sj_clrlib[i*0x10+0xD] =sjg_loc[i]+"D";
        sj_clrlib[i*0x10+0xE] =sjg_loc[i]+"E";
        sj_clrlib[i*0x10+0xF] =sjg_loc[i]+"F";
i++}}}
0
22
15 лет назад
0
bb:Смысла особого не наблюдаю :/
5 комментариев удалено
Чтобы оставить комментарий, пожалуйста, войдите на сайт.