+ Reply to Thread
Results 1 to 3 of 3
  1. #1
    Member
    Join Date
    Jul 2011
    Posts
    39

    [System] Casting Bar

    Casting Bar System

    ใช้สำหรับเวลาร่ายสกิล แล้วจะมีหลอดและชื่อสกิลขึ้นอยู่ด้านบน unit
    สำหรับความสวยงามภายในmap

    Link Download : http://www.thaicyberupload.com/get/zOq3Vlp8Xg


    ดูรูปประกอบ




    สามารถก๊ือบแล้วนำไปวางในแมปได้เลย
    ปรับcode สีตรง globals ได้ตามใจชอบเลยคับ

    Code:
    library CastingBar initializer init
    
    globals
        private hashtable HS
        private constant real textx = -80 // bar text x offset from triggerunit
        private constant real texty = 120 // bar text y offset from triggerunit
        private constant real text1x = -60 // spell text x offset from triggerunit
        private constant real text1y = 120 // spell text y offset from triggerunit
        private constant string color = "|cffff0080" // change spelling bar color
        private constant string BARCOLOR = "|cff00ff00" // change all bar color
        private constant string NAMECOLOR = "|cffff8000" // change name spell color
        private constant real high = 0.023
        private constant real texth = 50
        private constant string bar = "lllllllllllllllllllllllllllllllllllllllll"
    endglobals
    
    
    private function BarStart takes nothing returns nothing
        local timer z = GetExpiredTimer()
        local unit caster = LoadUnitHandle(HS,0,GetHandleId(z))
        local real time = LoadReal(HS,0,GetHandleId(z))
        local real check = LoadReal(HS,3,GetHandleId(z))
        local real time2 = LoadReal(HS,4,GetHandleId(z))
        local real pause = LoadReal(HS,5,GetHandleId(z))
        local string order = LoadStr(HS,6,GetHandleId(z))
        local integer count = LoadInteger(HS,1,GetHandleId(z))
        local integer decount = LoadInteger(HS,2,GetHandleId(z))
        local integer length = LoadInteger(HS,10,GetHandleId(z))
        local integer namecount = LoadInteger(HS,11,GetHandleId(z))
        local real i = LoadReal(HS,7,GetHandleId(z))
        local real in = LoadReal(HS,8,GetHandleId(z))
        local string name = LoadStr(HS,9,GetHandleId(z))
        local string s
        local string ss
        local string sss
        local texttag text = LoadTextTagHandle(HS,1,GetHandleId(z))
        local texttag spelltext = LoadTextTagHandle(HS,2,GetHandleId(z))
        set check = check + 0.01
        set in = in + 1
        if GetUnitCurrentOrder(caster) != OrderId(order) then
            call DestroyTimer(z)
            call DestroyTextTag(text)
            call DestroyTextTag(spelltext)
            call FlushChildHashtable(HS,GetHandleId(z))
        endif
        if check >= time2 then
            set check = 0
            set pause = pause + 1
            set count = count + 1
            set decount = decount - 1
            set s = color + SubString(bar,1,count)
            set ss = "|r" + BARCOLOR + SubString(bar,1,decount) + "|r"
            set sss = s + ss
            call SetTextTagText(text,sss,high)
            call SetTextTagPos(text,GetUnitX(caster) + textx,GetUnitY(caster) + texty,50)
        endif
        if in >= i and namecount <= length then
            set in = 0
            set namecount = namecount + 1
            set s = NAMECOLOR + SubString(name,0,namecount)
            set ss = "|r" + SubString(name,namecount,length)
            set sss = s + ss
            call SetTextTagText(spelltext,sss,0.025)
            call SetTextTagPos(spelltext,GetUnitX(caster) + text1x,GetUnitY(caster) + text1y,150)
        endif
        if pause >= 40 then
            call DestroyTextTag(spelltext)
            call DestroyTimer(z)
            call DestroyTextTag(text)
            call FlushChildHashtable(HS,GetHandleId(z))
        endif
        call SaveReal(HS,0,GetHandleId(z),time)
        call SaveReal(HS,3,GetHandleId(z),check)
        call SaveReal(HS,4,GetHandleId(z),time2)
        call SaveReal(HS,5,GetHandleId(z),pause)
        call SaveInteger(HS,1,GetHandleId(z),count)
        call SaveInteger(HS,2,GetHandleId(z),decount)
        call SaveInteger(HS,11,GetHandleId(z),namecount)
        call SaveReal(HS,8,GetHandleId(z),in)
        set caster = null
        set text = null
        set spelltext = null
        set z = null
    endfunction
    
    
    function CastingBar takes unit caster, real time, string order, string name returns nothing
        local timer z = CreateTimer()
        local texttag text = CreateTextTag()
        local real time2
        local texttag spelltext = CreateTextTag()
        local integer i = StringLength(name)
        local real namecount
        set time = time * 100
        set time2 = time / 4000
        set namecount = time / i
        call SetTextTagText(text,"",0.023)
        call SetTextTagText(spelltext,name,0.025)
        call SetTextTagPos(text,GetUnitX(caster) - 60,GetUnitY(caster) + 120,50)
        call SetTextTagPos(spelltext,GetUnitX(caster) - 60,GetUnitY(caster) + 120,150)
        call SetTextTagVelocity(text,0,0)
        call SetTextTagVelocity(spelltext,0,0)
        call SetTextTagVisibility(text,true)
        call SetTextTagVisibility(spelltext,true)
        call SetTextTagPermanent(text,false)
        call SetTextTagPermanent(spelltext,false)
        call SaveTextTagHandle(HS,2,GetHandleId(z),spelltext)
        call SaveTextTagHandle(HS,1,GetHandleId(z),text)
        call SaveUnitHandle(HS,0,GetHandleId(z),caster)
        call SaveReal(HS,0,GetHandleId(z),time)
        call SaveReal(HS,3,GetHandleId(z),0)
        call SaveReal(HS,5,GetHandleId(z),0)
        call SaveStr(HS,6,GetHandleId(z),order)
        call SaveStr(HS,9,GetHandleId(z),name)
        call SaveReal(HS,4,GetHandleId(z),time2)
        call SaveInteger(HS,1,GetHandleId(z),0)
        call SaveInteger(HS,2,GetHandleId(z),40)
        call SaveInteger(HS,10,GetHandleId(z),i)
        call SaveInteger(HS,11,GetHandleId(z),0)
        call SaveReal(HS,7,GetHandleId(z),namecount)
        call SaveReal(HS,8,GetHandleId(z),0)
        call TimerStart(z,0.01,true,function BarStart)
        set z = null
        set text = null
        set spelltext = null
    endfunction
    
    
    private function init takes nothing returns nothing
        set HS = InitHashtable()
    endfunction
    
    endlibrary
    How to use

    สร้าง Trigger ของสกิลนั้นๆที่จะใช้ Casting Bar ขึ้นมา
    ให้ใช้ Event Unit - A unit Begins channeling an ability เพราะเริ่มทำงานตั้งแต่เริ่มร่าย
    ให้เรียกใช้ custom script ตามตัวอย่างด้านล่าง

    Events
    Unit - A unit Begins channeling an ability
    Conditions
    (Ability being cast) Equal to Storm Bolt
    Actions
    Custom script: call CastingBar(GetTriggerUnit(),2,"thunderbolt","StormBolt")

    "thunderbolt" คือ order ของสกิลนั้นๆสามารถดูได้ที่ object editor
    2 นั้นคือระยะเวลาที่ใช้ร่ายสกิล
    StormBolt คือ ชื่อสกิลเวลาร่ายซึ่งจะเปลี่ยนสีไปตามหลอดร่ายสกิล

    อย่าลืมปรับ Casting Time ใน Object editor ของสกิลให้ตรงกับระยะเวลาร่ายของ trigger ด้วย


    Comment

    ผมคิดว่ายังมีบัคอยู่ระยะเวลาร่ายของหลอดร่ายกับใน object editor จะคลาดเคลื่อนนิดหน่อย(นิดเดียวจริงๆ)
    ถ้าถึงขนาดสังเกตได้ให้ปรับระยะเวลาใน object editor กับ trigger ให้ต่างกันนิดหน่อยเพื่อความเหมาะสม

    และ

    สงวนสิทธ์การใช้งานสำหรับผู้ใช้ JNGP เท่านั้นครับ

  2. #2
    Senior Member
    Join Date
    Jul 2011
    Posts
    493
    เมพมากๆ ทำเป็นหลอดร่ายเลย

  3. #3
    Junior Member
    Join Date
    Jun 2012
    Posts
    9
    แนะนำวิธีแก้ไขการคลาดเคลื่อน
    ใช้ Jass Trigger เข้าร่วมผสมทั้งหมด
    ตั้งแต่เริ่มร่ายยันจบ (รวมถึงการทำดาเมจด้วย)

    ร่ายสกิล>Pause Unit ผู้ร่ายชั่วขณะ>เริ่มหลอดร่าย>หลอดร่ายจบ>สร้างความเสียหาย>ปลดสถานะ Pause
    ระหว่างสร้างความเสียหาย ใช้วิธีการ add skill dummy เข้ามาร่วม + add effect เ้ข้ามาช่วยด้วย
    เพื่อความอลังการอีกรูปแบบหนึ่ง 'w'

Facebook Comments


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •