Добавлен Волчачка,
опубликован
Раздел:
WarCraft III
Содержание:
Другое
function B2I(b)
return b and 1 or 0
end
-- Т.к. нет в LUA math.round(), nazarpunk запилил вот такой аналог
function math.round(n)
return n % 1 >= 0.5 and math.ceil(n) or math.floor(n)
end
usertype (костыльный аналог type )
Вариант №1
function usertype(ptr)
local typ = type(ptr)
if typ == "userdata" then
typ = string.match(tostring(ptr),"([^%%s]+):")
if typ == nil then
typ = string.match(tostring(ptr),"([^%%s]+)")
end
end
return typ
end
Вариант №2
type_orig = type
function type(ptr)
local typ = type_orig(ptr)
if typ == "userdata" then
typ = string.match(tostring(ptr),"([^%%s]+):")
if typ == nil then
typ = string.match(tostring(ptr),"([^%%s]+)")
end
end
return typ
end
new - удобное создание объектов для сверхразумов
new = {
timer = CreateTimer,
group = CreateGroup,
unit = CreateUnit,
force = CreateForce,
lightning = AddLightning,
elightning = AddLightningEx,
multiboard = CreateMultiboard,
leaderboard = CreateLeaderboard,
ubersplat = CreateUbersplat,
image = CreateImage,
loc = Location,
rect = Rect,
region = CreateRegion,
item = CreateItem,
filter = Filter,
cond = Condition,
quest = CreateQuest,
mark = CreateQuestItem,
defcond = CreateDefeatCondition,
dialog = CreateDialog,
clock = CreateTimerDialog,
tag = CreateTextTag,
trigger = CreateTrigger,
action = TriggerAddAction,
tcond = TriggerAddCondition,
button = DialogAddButton,
frame = BlzCreateFrame,
frame_s = BlzCreateSimpleFrame,
frame_ex = BlzCreateFrameByType,
cache = InitGameCache,
hash = InitHashtable,
dest = CreateDestructable,
dest_z = CreateDestructableZ,
dest_d = CreateDeadDestructable,
dest_dz = CreateDeadDestructableZ,
weather = AddWeatherEffect,
track = CreateTrackable,
effect = AddSpecialEffect,
effect_l = AddSpecialEffectLoc,
effect_t = AddSpecialEffectTarget,
fogrect = CreateFogModifierRect,
fogradius = CreateFogModifierRadius,
fogradloc = CreateFogModifierRadiusLoc,
gift = CreateItemPool, -- itempool = CreateItemPool
mob = CreateUnitPool, -- unitpool = CreateUnitPool
}
free () - удаление объектов
freetab = {
["unit"]=RemoveUnit,
["timer"]=DestroyTimer,
["texttag"]=DestroyTexttag,
["quest"]=DestroyQuest,
["lightning"]=DestroyLightning,
["item"]=RemoveItem,
["fogmodifier"]=DestroyFogModifier,
["dialog"]=DialogDestroy,
["unitpool"]=DestroyUnitPool,
["itempool"]=DestroyItemPool,
["defeatcondition"]=DestroyDefeatCondition,
["timerdialog"]=DestroyTimerDialog,
["leaderboard"]=DestroyLeaderboard,
["multiboard"]=DestroyMultiboard,
["effect"]=DestroyEffect,
["image"]=DestroyImage,
["ubersplat"]=DestroyUbersplat,
["framehandle"]=BlzDestroyFrame,
["group"]=DestroyGroup,
["force"]=DestroyForce,
["trigger"]=DestroyTrigger,
["conditionfunc"]=DestroyCondition,
["filterfunc"]=DestroyFilter,
["boolexpr"]=DestroyBoolExpr,
["rect"]=RemoveRect,
["region"]=RemoveRegion,
["location"]=RemoveLocation,
["triggercondition"]=TriggerRemoveCondition,
["triggeraction"]=TriggerRemoveAction,
["destructable"]=RemoveDestructable,
["weathereffect"]=RemoveWeatherEffect
}
function free(hdl,...)
str = type(hdl)
if str == "timer" then
local b = ...
if b then
PauseTimer(hdl)
end
end
if str == "triggercondition" or str == "triggeraction" then
local t = ...
if type(t) == "trigger" then
freetab[str](t,hdl)
end
return
end
freetab[str](hdl)
end
Другой вариант самой функции free():
function free(hdl,...)
str = usertype(hdl)
if str == "timer" then
local b = ...
if b then
PauseTimer(hdl)
end
end
if str == "triggercondition" or str == "triggeraction" then
local t = ...
if usertype(t) == "trigger" then
freetab[str](t,hdl)
end
return
end
freetab[str](hdl)
end
Мультидоска:
Board.lua Alpha (Ведутся работы над ней)
Это всего лишь демо-код
Board {
multiboard = nil,
multiboarditem = nil,
counter = nil,
counter_rowsize = 0
}
function Board:Counters(rows,cols)
self.counter = {}
local fin = rows*cols
self.counter_rowsize = rows
for i=1, fin do
self.counter[i] = 0
end
end
function Board:Inc(row,col)
local id = math.tointeger(self.counter_rowsize*row + col + 1 )
self.counter[id] = self.counter[id] + 1
self.multiboard = MultiboardGetItem( multiboard, row, col )
MultiboardSetItemValue( self.multiboarditem, self.counter[id] )
MultiboardReleaseItem( self.multiboarditem )
end
function Board:Dec(row,col)
local id = math.tointeger(self.counter_rowsize*row + col + 1 )
self.counter[id] = self.counter[id] - 1
self.multiboard = MultiboardGetItem( multiboard, row, col )
MultiboardSetItemValue( self.multiboarditem, self.counter[id] )
MultiboardReleaseItem( self.multiboarditem )
end
function Board:GetCounter(row,col)
local id = math.tointeger(self.counter_rowsize*row + col + 1 )
return self.counter[id]
end
function Board:Text( row, col ,text )
self.multiboard = MultiboardGetItem( multiboard, row, col )
MultiboardSetItemValue( self.multiboarditem, value )
MultiboardReleaseItem( self.multiboarditem )
end
function Board:Icon( row, col, path )
self.multiboard = MultiboardGetItem( multiboard, row, col )
MultiboardSetItemValue( self.multiboarditem, value )
MultiboardReleaseItem( self.multiboarditem )
end
function Board:Style( row, col, swText, swIcon )
self.multiboard = MultiboardGetItem( multiboard, row, col )
MultiboardSetItemStyle(self.multiboarditem, swText, swIcon)
MultiboardReleaseItem( self.multiboarditem )
end
function Board:Color( row, col, trgb )
self.multiboard = MultiboardGetItem( multiboard, row, col )
MultiboardSetItemValueColor(self.multiboarditem, tgrb.red, tgrb.green, tgrb.blue, 255)
MultiboardReleaseItem( self.multiboarditem )
end
function Board:Width( row, col, size )
self.multiboard = MultiboardGetItem( multiboard, row, col )
MultiboardSetItemWidth( self.multiboarditem, size / 100 )
MultiboardReleaseItem( self.multiboarditem )
end
function Board:create(o,rows,cols,title)
o = o or {}
rows = rows or 1
cols = cols or 1
titile = title or "Custom Multiboard"
setmetatable(o, self)
self.__index = self
o.multiboard = CreateMultiboard()
MultiboardSetColumnCount(o.multiboard, cols)
MultiboardSetRowCount(o.multiboard, rows)
MultiboardSetItemsStyle(o.multiboard, true, false)
MultiboardSetItemsWidth(o.multiboard, 100 * 0.025)
MultiboardDisplay(o.multiboard, true)
MultiboardMinimize(o.multiboard, false)
return o
end
Мультидоска-Фрейм (Никто не брался)
Сводка: Ещё не решили делать доску, которая будет в корне отличаться от стандартной, где вы сможете объединять ячейки. Выравнивать ячейки как надо, не сбивая размеры и местоложения других, как это бывало в старой доске.
Работа со строками
tchar.lua
Приспособил к WE: KingMaximax, предоставил NazarPunk
Автор скрипта: Неизвестен (Точный автор уж явно)
Автор скрипта: Неизвестен (Точный автор уж явно)
Скачайте общий архив LUAWELIB.zip, извлеки с него tchar.lua, затем откройте, пото скопируйте код в триггерный сценарий, который вы назовёте к примеру TCHAR или UTF, если не хотите архив качать, то скачивайте отдельно tchar.lua
ВНИМАНИЕ:
Этот код требует сл. костыля, который вы можете вставить в общий нестандартный сценарий, который открывается, когда вы щёлкаете по значку карты в триггерах.
Этот код требует сл. костыля, который вы можете вставить в общий нестандартный сценарий, который открывается, когда вы щёлкаете по значку карты в триггерах.
function error(errstr)
print([[|cffcb0404ERROR:|r
|cffffcc00]]..errstr.."|r")
end
code
tchar.len()
tchar.sub()
tchar.reverse()
tchar.char()
tchar.unicode()
tchar.gensub()
tchar.byte()
tchar.find()
tchar.match()
tchar.gmatch()
tchar.gsub()
tchar.dump()
tchar.format()
tchar.lower()
tchar.upper()
tchar.rep()
tchar.replace()
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Волчачка
Мизерное обновление
Отредактирован Волчачка
А как насчёт такого варианта:
Обн.
free(tmr,true) - удаляет таймер, но перед этим ставит его на паузу, просто free(tmr) - просто удаляет таймер.
Если хотите удалить triggercondition или triggeraction.