Tibia Mod
Forum zostało Przeniesione tutaj:
http://tibiamod.xaa.pl/

Zapraszam.

Join the forum, it's quick and easy

Tibia Mod
Forum zostało Przeniesione tutaj:
http://tibiamod.xaa.pl/

Zapraszam.
Tibia Mod
Czy chcesz zareagować na tę wiadomość? Zarejestruj się na forum za pomocą kilku kliknięć lub zaloguj się, aby kontynuować.

doCombatBeam

Go down

doCombatBeam Empty doCombatBeam

Pisanie by darkes Czw Lis 15, 2012 7:52 pm

W data/lib/050-function.lua doklejamy:
Kod:
function doCombatBeam(cid, length, time, count, combat, min, max, effect, direction, pos, efekty)
if length > 0 then
    if direction == NORTH then
        pos.y = pos.y - 1
    elseif direction == EAST then
        pos.x = pos.x + 1
    elseif direction == SOUTH then
        pos.y = pos.y + 1
    elseif direction == WEST then
        pos.x = pos.x - 1
    end
    local position, effect = {x=pos.x,y=pos.y,z=pos.z}, (efekty ~= nil and efekty[direction+1] or effect)
    if getTileThingByPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).itemid ~= 0 then
        local target = getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=STACKPOS_TOP_CREATURE}).uid
        if isCreature(target) then
            doTargetCombatHealth(cid, target, combat, min, max, CONST_ME_NONE)
        end
    end
    doSendMagicEffect(pos, effect)
    for v = count, 1, -1 do
        if v > 1 then
            addEvent(function()
                                if getTileThingByPos(position).itemid > 0 then
                                    local target_1 = getThingFromPos({x=position.x,y=position.y,z=position.z,stackpos=STACKPOS_TOP_CREATURE}).uid
                                    if target ~= target_1 and isCreature(target_1) then
                                        doTargetCombatHealth(cid, target_1, combat, min / 5, max / 3, CONST_ME_NONE)
                                    end
                                end
                                return doSendMagicEffect(position, effect)
                                end,
                                time + (150 * v),
                                position, effect, combat, min, max, target   
                            )
        else
            return addEvent(doCombatBeam, time, cid, length - 1, time, count, combat, min, max, effect, direction, pos, efekty)
        end
    end
end
return true
end 
Jak to działa? Otóż wysyła promień (Ci którzy nie wiedzą o co chodzi zapraszam do zapoznania się z czarem energy beam), który zadaje obrażenia. Czy to wszystko? Otóż nie. Ustawiamy sobie jaki efekt ma się pojawiać w zależności od strony w którą patrzy nasza postać. Dodatkowo ustalamy długość 'beama' oraz odstęp czasowy między kolejnymi efektami. Do tego wszystkiego można jeszcze ustawić kilkakrotność beama. To znaczy w jednej funkcji możemy od razu ustawić 10 beamów, każdy następujący po sobie np. co 5 sekund.

Wyjaśnię jak należy się za to zabrać. Na przykładzie:
Kod:
function onCastSpell(cid, var)
return doCombatBeam(cid, 6, 250, 4, COMBAT_DEATHDAMAGE, -100, -300, nil, getCreatureLookDirection(cid), getThingPos(cid), {CONST_ME_MORTAREA,CONST_ME_MAGIC_RED,CONST_ME_SMALLCLOUDS,CONST_ME_POFF})
end

W tym przykładzie 'beam' będzie mieć długość równą 6 sqm, każdy następny efekt będzie następować po sobie w odstępie 250ms (0.25 sekundy), 'beam' pojawiać się będzie czterokrotnie, będzie zadawać obrażenia od śmierci w zakresie 100 do 300, podczas patrzenia w górę pojawi się efekt numer 17, patrząc w prawo numer 13, w dół numer 38 oraz w lewo numer 2.
Polecam kombinować i próbować bawić się tą funkcją, można całkiem fajne efekty uzyskać.
Oraz objaśnienia:
Kod:
(cid, length, time, count, combat, min, max, effect, direction, pos, efekty) 
cid to uid gracza.
length to długość promienia
time to odstęp czasowy między efektami (w ms)
count to ilość beamów, które się uaktywnią (każdy następny w odstępstwie kilku sekund)
combat to rodzaj obrażeń
min oraz max to minimalne oraz maksymalne obrażenia
effect, jeśli chcecie jeden efekt, nieważne w którą stronę się obrócicie to w tym miejscu się go ustawia
direction ustawcie zawsze 'getCreatureLookDirection(cid)'
pos ustawcie zawsze 'getThingPos(cid)'
efekty, tutaj ustawiamy efekty, jakie będą nam towarzyszyć w zależności od strony w którą patrzy nasza postać. Wypełniamy to w ten sposób:
Kod:
{efekt_north,efekt_east,efekt_south,efekt_west}

darkes
Uploader

Liczba postów : 27
Join date : 13/11/2012

Powrót do góry Go down

Powrót do góry


 
Permissions in this forum:
Nie możesz odpowiadać w tematach