SODS

Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
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: Деактивировано".

Импорт:

1. Создаём и инициализируем Хэш-таблицу и в Настройках изменим название
на udg_Ваше название. Если таблица уже инициализирована, то измените название.
2. Скопируйте библиотеку SOD - текст, который находиться ниже этой строки.
3. Вставляем текст, в главный код своей карты (где сейчас находится текст) или в любой
пустой триггер с любым названием.
4. Всё. :D

Скрины:

`
ОЖИДАНИЕ РЕКЛАМЫ...
0
8
12 лет назад
0
Почему нет?? Разве эта система похожа на другие?
0
20
12 лет назад
0
goldplay99, выкинь импорт весь и вставь систему в какую-нибудь мили-мапу,описание добавь побольше или скрины триггеров\настроек,ибо ща это как куча неизвестно чего с неизвестно зачем вставленным импортом
и карту перезалей
0
8
12 лет назад
0
Кажется, что очень редко бывают такие описания для наработок.
0
20
12 лет назад
0
goldplay99, вот сразу бы так все сделал)
0
8
12 лет назад
0
Nerevar:
goldplay99, вот сразу бы так все сделал)
Теперь всегда буду))
Этот комментарий удален
1
22
12 лет назад
1
Залейте скрины на сайт.
2
1
11 лет назад
2
утечки есть?
2
21
11 лет назад
Отредактирован Buulichkaa
2
Prorock666, Ясное дело, что либо нет, либо есть но 1 из 1000 (сам я сис-му не тестил) если опубликовали.
Кстати, сейчас нам вкатают за археологию.
0
15
9 лет назад
0
скрины не грузятся
1 пункт от Uber: 4.3 (археология)
2 комментария удалено
Чтобы оставить комментарий, пожалуйста, войдите на сайт.