Добавлен goldplay99,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Наработка
SODS = Show of Damage System
Система предназначенная для выведения получаемого урона в виде одного плавающего текста, который показывает суммарный урон на юнита. В зависимости от количества урона текст увеличивается.
Код:
library ShowOfDamage initializer SOD_INT
define{
/*Настройки */
private SOD_TEXTTAG_SIZE=10 /* Начальный размер текста */
private SOD_TEXTTAG_ASIZ=0.0025 /* +Размер тхт на 1 ед. урона */
private SOD_TEXTTAG_TIME=1 /* Время жизни текста */
private SOD_HASH_TABLE = udg_Hash/* Хэш-таблица */
private SOD_CHAT ="-Sod" /* Текст для Вкл.\Выкл. системы */
private SOD_ACTIVATION ="SOD: |cFF20CB00Активировано.|r"/*Текст */
private SOD_DEACTIVATION="SOD: |cFFFF0000Деактивировано.|r"/*Текс*/
/* который будет показываться, при написание команды в чате. */
/*Дальше нетрогать */
private GHI = GetHandleId
private FC = FlushChildHashtable
private LTT = LoadTextTagHandle
private LU = LoadUnitHandle
private LI = LoadInteger
private STT = SaveTextTagHandle
private SU = SaveUnitHandle
private SI = SaveInteger
}
globals
trigger SOD = null
integer array LOG
endglobals
string SOD_COLOR(integer i){
string array Color
/* "|c" "#1" "#2" "#3" "#4" */
/* || || || || || */
Color[0 ]= "|c" + "00" + "FF" + "00" + "00" /* цвет для игрока 1 */
Color[1 ]= "|c" + "FF" + "00" + "00" + "FF" /* и т.д. */
Color[2 ]= "|c" + "00" + "1C" + "E6" + "B9" /* #1 - прозрачность */
Color[3 ]= "|c" + "00" + "54" + "00" + "79" /* #2 - красный цвет */
Color[4 ]= "|c" + "FF" + "FF" + "FF" + "00" /* #3 - зелёный цвет */
Color[5 ]= "|c" + "00" + "FE" + "8A" + "0E" /* #4 - синий цвет */
Color[6 ]= "|c" + "FF" + "20" + "CB" + "00"
Color[7 ]= "|c" + "00" + "E5" + "5B" + "B0"
Color[8 ]= "|c" + "00" + "95" + "96" + "97"
Color[9 ]= "|c" + "00" + "7E" + "BF" + "F1"
Color[10]= "|c" + "00" + "10" + "62" + "46"
Color[11]= "|c" + "00" + "4E" + "2A" + "04"
Color[12]= "|c" + "FF" + "FF" + "FF" + "FF"/* нижние 3 цвета */
Color[13]= "|c" + "FF" + "FF" + "FF" + "FF"/* для нейтральных */
Color[14]= "|c" + "FF" + "FF" + "FF" + "FF"/* монстров */
/* || || || || || */
/* "|c" "#1" "#2" "#3" "#4" */
return Color[i]
}
trigger SOD_TRIGGER(){
return SOD
}
nothing SOD_COLORED(){
player PLAYER=GetTriggerPlayer()
string STRING=StringCase(SOD_CHAT,false)
string CHAT =StringCase(GetEventPlayerChatString(),false)
if STRING==CHAT{
if LOG[GetPlayerId(PLAYER)]==0{
LOG[GetPlayerId(PLAYER)]=1
DisplayTextToPlayer(PLAYER,0,0,SOD_ACTIVATION)
}else{
LOG[GetPlayerId(PLAYER)]=0
DisplayTextToPlayer(PLAYER,0,0,SOD_DEACTIVATION)
}
}
PLAYER=null
}
nothing SOD_TIMER(){
timer TIMER = GetExpiredTimer()
integer TI##ME = LI(udg_Hash,GHI(TIMER),1)+1
integer STARTAMOUNT = LI(udg_Hash,GHI(TIMER),2)
integer ENDINGAMOUNT= LI(udg_Hash,GHI(LU(udg_Hash,GHI(TIMER),3)),4)
if STARTAMOUNT==ENDINGAMOUNT{
if TI##ME>=SOD_TEXTTAG_TIME*25 {
SI(udg_Hash,GHI(LU (udg_Hash,GHI(TIMER),3)),1,0)
SI(udg_Hash,GHI(LU (udg_Hash,GHI(TIMER),3)),3,0)
DestroyTextTag( LTT(udg_Hash,GHI(TIMER),4))
FC(udg_Hash,GHI(LTT(udg_Hash,GHI(TIMER),4)))
FC(udg_Hash,GHI(TIMER))
DestroyTimer(TIMER)
TIMER=null
}else{
SetTextTagPosUnit((LTT(udg_Hash,GHI(TIMER),4)),LU(udg_Hash,GHI(TIMER),3),0)
SI(udg_Hash,GHI(TIMER),1,TI##ME)
}
}else{
DestroyTimer(TIMER)
TIMER=null
}
}
nothing SOD_START(){
timer TIMER = CreateTimer()
unit UNIT = GetAttackedUnitBJ()
location LOC = GetUnitLoc(UNIT)
integer DAMAGE = LI (udg_Hash,GHI(UNIT),1)+R2I(GetEventDamage())
texttag TEXTTAG = LTT(udg_Hash,GHI(UNIT),2)
integer LOGICAL = LI (udg_Hash,GHI(UNIT),3)
integer AMOUNT = LI (udg_Hash,GHI(UNIT),4)+1
real SIZE = 0
player PLAYER = GetOwningPlayer(UNIT)
integer ID = GetPlayerId(PLAYER)
string COLOR = SOD_COLOR(ID)
if DAMAGE>100{
SIZE = I2R(DAMAGE)/100000
SIZE = SIZE+(SOD_TEXTTAG_SIZE*SOD_TEXTTAG_ASIZ)
}else{
SIZE=(SOD_TEXTTAG_SIZE*SOD_TEXTTAG_ASIZ)
}
if LOGICAL==0{
TEXTTAG=CreateTextTagLocBJ("",LOC,0,0,100,100,100,0)
SetTextTagText(TEXTTAG,COLOR+I2S(DAMAGE),SIZE )
SI(udg_Hash,GHI(UNIT),3,1)
}else{
SetTextTagText(TEXTTAG,COLOR+I2S(DAMAGE),SIZE )
}
ShowTextTagForceBJ( false, TEXTTAG, GetPlayersAll())
integer StartA=0;integer EndA=11
do {
if IsUnitVisible(UNIT, Player(StartA)) == true and (LOG[StartA]==1) and DAMAGE!=0 {
ShowTextTagForceBJ(true , TEXTTAG, GetForceOfPlayer(Player(StartA)))
}else{
ShowTextTagForceBJ(false, TEXTTAG, GetForceOfPlayer(Player(StartA)))
}
StartA++
} whilenot StartA>EndA
SI (udg_Hash,GHI(UNIT ),1, DAMAGE)
STT(udg_Hash,GHI(UNIT ),2,TEXTTAG)
SI (udg_Hash,GHI(UNIT ),4, AMOUNT)
SI (udg_Hash,GHI(TIMER),1, 0)
SI (udg_Hash,GHI(TIMER),2, AMOUNT)
SU (udg_Hash,GHI(TIMER),3, UNIT)
STT(udg_Hash,GHI(TIMER),4,TEXTTAG)
TimerStart(TIMER,0.04,true,function SOD_TIMER)
RemoveLocation(LOC)
LOC = null
TIMER = null
UNIT = null
TEXTTAG= null
}
nothing SODD() {
unit u = GetEnteringUnit()
TriggerRegisterUnitEvent(SOD_TRIGGER(), u, EVENT_UNIT_DAMAGED)
u = null
}
nothing SODG() {
unit u = GetEnumUnit()
TriggerRegisterUnitEvent(SOD_TRIGGER(), u, EVENT_UNIT_DAMAGED)
u = null
}
nothing SOTA() {
trigger TRIGGER = CreateTrigger()
TriggerRegisterEnterRectSimple(TRIGGER, GetPlayableMapRect())
TriggerAddAction(TRIGGER, function SODD)
ForGroupBJ(GetUnitsInRectAll(GetPlayableMapRect()), function SODG)
TRIGGER = null
}
nothing SOD_INT() {
trigger TRIGGER = CreateTrigger()
trigger COLORED = CreateTrigger()
SOD = CreateTrigger()
TriggerAddAction(SOD_TRIGGER(), function SOD_START)
TriggerRegisterTimerEventSingle(TRIGGER, 0.0)
TriggerAddAction(TRIGGER, function SOTA)
TriggerRegisterPlayerChatEvent(COLORED,Player(0) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(1) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(2) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(3) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(4) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(5) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(6) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(7) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(8) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(9) ,"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(10),"",false)
TriggerRegisterPlayerChatEvent(COLORED,Player(11),"",false)
TriggerAddAction(COLORED,function SOD_COLORED)
COLORED=null
TRIGGER=null
}
endlibrary
Макросы:
Имеются вспомогательные макросы, которые позволят изменить некоторые данные системы, а именно :
SOD_TEXTTAG_SIZE - начальный размер текста, по умолчанию стоит 10.
SOD_TEXTTAG_ASIZ- увеличение текста на 1 ед. урона, по умолчанию стоит 0.0025.
SOD_TEXTTAG_TIME- время жизни текста, по умолчанию стоит 1.
SOD_HASH_TABLE - хэш-таблица, по умолчанию стоит udg_Hash.
SOD_CHAT - текст для вкл.\выкл. системы, по умолчанию стоит "-Sod".
SOD_ACTIVATION /SOD_DEACTIVATION - текст который будет показываться, при написание команды в чате, по умолчанию стоит "SOD: Активировано"/"SOD: Деактивировано".
SOD_TEXTTAG_SIZE - начальный размер текста, по умолчанию стоит 10.
SOD_TEXTTAG_ASIZ- увеличение текста на 1 ед. урона, по умолчанию стоит 0.0025.
SOD_TEXTTAG_TIME- время жизни текста, по умолчанию стоит 1.
SOD_HASH_TABLE - хэш-таблица, по умолчанию стоит udg_Hash.
SOD_CHAT - текст для вкл.\выкл. системы, по умолчанию стоит "-Sod".
SOD_ACTIVATION /SOD_DEACTIVATION - текст который будет показываться, при написание команды в чате, по умолчанию стоит "SOD: Активировано"/"SOD: Деактивировано".
Импорт:
1. Создаём и инициализируем Хэш-таблицу и в Настройках изменим название
на udg_Ваше название. Если таблица уже инициализирована, то измените название.
2. Скопируйте библиотеку SOD - текст, который находиться ниже этой строки.
3. Вставляем текст, в главный код своей карты (где сейчас находится текст) или в любой
пустой триггер с любым названием.
4. Всё. :D
на udg_Ваше название. Если таблица уже инициализирована, то измените название.
2. Скопируйте библиотеку SOD - текст, который находиться ниже этой строки.
3. Вставляем текст, в главный код своей карты (где сейчас находится текст) или в любой
пустой триггер с любым названием.
4. Всё. :D
Скрины:
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
и карту перезалей
Отредактирован Buulichkaa
Кстати, сейчас нам вкатают за археологию.