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

Zapraszam.

Spells efekt zależny od kierunku

Zobacz poprzedni temat Zobacz następny temat Go down

Spells efekt zależny od kierunku

Pisanie by Papik on Pon Gru 03, 2012 9:43 pm

Chciałbym zrobić aby czar w każdym kierunku miał inny effect niestety nie wiem jakiej funkcji użyć . Mógłby ktoś pomóc ? Z góry dzięki .

Papik
User

Liczba postów : 6
Join date : 29/11/2012

Zobacz profil autora

Powrót do góry Go down

Re: Spells efekt zależny od kierunku

Pisanie by Rosen on Pon Gru 03, 2012 10:41 pm

Chodzi Ci o to że jeśli się obracasz to zależnie w jakim kierunku się obrócisz i użyjesz czaru bd inny efekt? Jeśli tak to proszę:

W data/lib/050-function.lua doklejamy:

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:

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:

(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:

{efekt_north,efekt_east,efekt_south,efekt_west}
avatar
Rosen
User

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

Zobacz profil autora

Powrót do góry Go down

Re: Spells efekt zależny od kierunku

Pisanie by $wirus on Pon Gru 03, 2012 11:07 pm

nie łatwiej getPlayerLookDir?

$wirus
Uploader

Liczba postów : 35
Join date : 16/11/2012

Zobacz profil autora

Powrót do góry Go down

Re: Spells efekt zależny od kierunku

Pisanie by Papik on Wto Gru 04, 2012 2:34 pm

Dzięki Rosen .
#Edit

W silniku ukazuje mi się błąd z funkcją getCreatureLookDirection . A oto i on :
attempt to call global 'getCreatureLookDirection'

Przypuszczam że nie posiadam funkcji (wątpie , powinna być ) .
Istnieje jeszcze możliwość iż źle poskładałem ten spell w "kupe" .

Papik
User

Liczba postów : 6
Join date : 29/11/2012

Zobacz profil autora

Powrót do góry Go down

Re: Spells efekt zależny od kierunku

Pisanie by $wirus on Wto Gru 04, 2012 5:22 pm

Masz tu przykladowy spell typu "fala"

Kod:
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, 53)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr1 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{1, 2, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area1 = createCombatArea(arr1)

setCombatArea(combat1, area1)

local combat10 = createCombatObject()
setCombatParam(combat10, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat10, COMBAT_PARAM_EFFECT, 54)
setCombatFormula(combat10, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr10 = {
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 0, 2},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area10 = createCombatArea(arr10)

setCombatArea(combat10, area10)

local combat100 = createCombatObject()
setCombatParam(combat100, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat100, COMBAT_PARAM_EFFECT, 57)
setCombatFormula(combat100, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr100 = {
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 2},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area100 = createCombatArea(arr100)

setCombatArea(combat100, area100)


local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 57)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr2 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{2, 1, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area2 = createCombatArea(arr2)

setCombatArea(combat2, area2)



local combat20 = createCombatObject()
setCombatParam(combat20, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat20, COMBAT_PARAM_EFFECT, 54)
setCombatFormula(combat20, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr20 = {
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 2, 0, 1, 1, 1},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area20 = createCombatArea(arr20)

setCombatArea(combat20, area20)

local combat200 = createCombatObject()
setCombatParam(combat200, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat200, COMBAT_PARAM_EFFECT, 53)
setCombatFormula(combat200, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr200 = {
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{2, 0, 0, 0, 0, 1},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area200 = createCombatArea(arr200)

setCombatArea(combat200, area200)



local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, 60)
setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)


local arr3 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 2, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area3 = createCombatArea(arr3)

setCombatArea(combat3, area3)

local combat30 = createCombatObject()
setCombatParam(combat30, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat30, COMBAT_PARAM_EFFECT, 59)
setCombatFormula(combat30, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr30 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 2, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area30 = createCombatArea(arr30)

setCombatArea(combat30, area30)


local combat300 = createCombatObject()
setCombatParam(combat300, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat300, COMBAT_PARAM_EFFECT, 58)
setCombatFormula(combat300, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr300 = {
{0, 0, 2, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area300 = createCombatArea(arr300)

setCombatArea(combat300, area300)




local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, 58)
setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr4 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 2, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}

local area4 = createCombatArea(arr4)

setCombatArea(combat4, area4)



local combat40 = createCombatObject()
setCombatParam(combat40, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat40, COMBAT_PARAM_EFFECT, 59)
setCombatFormula(combat40, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr40 = {
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 2, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
}


local area40 = createCombatArea(arr40)

setCombatArea(combat40, area40)


local combat400 = createCombatObject()
setCombatParam(combat400, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat400, COMBAT_PARAM_EFFECT, 60)
setCombatFormula(combat400, COMBAT_FORMULA_LEVELMAGIC, -7.0, 0, -8.0, 0)

local arr400 = {
{0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 2, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
}

local area400 = createCombatArea(arr400)

setCombatArea(combat400, area400)


function ha1(cid)
if getPlayerLookDir(cid) == 1 then 
               
doCombat(cid, combat1, numberToVariant(cid))
doCombat(cid, combat10, numberToVariant(cid))
doCombat(cid, combat100, numberToVariant(cid))
doPlayerSay(cid, 'Haaaa!', TALKTYPE_ORANGE_1)

elseif getPlayerLookDir(cid) == 2 then 
             
        doCombat(cid, combat4, numberToVariant(cid))
doCombat(cid, combat40, numberToVariant(cid))
doCombat(cid, combat400, numberToVariant(cid))
doPlayerSay(cid, 'Haaaa!', TALKTYPE_ORANGE_1)

elseif getPlayerLookDir(cid) == 3 then 
               
        doCombat(cid, combat2, numberToVariant(cid))
doCombat(cid, combat20, numberToVariant(cid))
doCombat(cid, combat200, numberToVariant(cid))
doPlayerSay(cid, 'Haaaa!', TALKTYPE_ORANGE_1)

elseif getPlayerLookDir(cid) == 0 then 
               
        doCombat(cid, combat3, numberToVariant(cid))
doCombat(cid, combat30, numberToVariant(cid))
doCombat(cid, combat300, numberToVariant(cid))
 doPlayerSay(cid, 'Haaaa!', TALKTYPE_ORANGE_1)
    end
end
function me1(cid)     
      doPlayerSay(cid, 'Me...!', TALKTYPE_ORANGE_1)               
          addEvent(ha1,750,cid)

    end
function ha(cid)     
      doPlayerSay(cid, 'Ha...!', TALKTYPE_ORANGE_1)               
          addEvent(me1,600,cid)

    end
function me(cid)     
      doPlayerSay(cid, 'Me...!', TALKTYPE_ORANGE_1)               
          addEvent(ha,600,cid)

    end
function ka(cid)     
      doPlayerSay(cid, 'Ka...!', TALKTYPE_ORANGE_1)               
          addEvent(me,0,cid)
    end



function onCastSpell(cid, var)
    addEvent(ka,0,cid)
    return true
end

$wirus
Uploader

Liczba postów : 35
Join date : 16/11/2012

Zobacz profil autora

Powrót do góry Go down

Re: Spells efekt zależny od kierunku

Pisanie by Papik on Wto Gru 04, 2012 6:44 pm

Dobra poradziłem sobie . Dzięki za pomoc. ; )

Papik
User

Liczba postów : 6
Join date : 29/11/2012

Zobacz profil autora

Powrót do góry Go down

Re: Spells efekt zależny od kierunku

Pisanie by Sponsored content


Sponsored content


Powrót do góry Go down

Zobacz poprzedni temat Zobacz następny temat Powrót do góry


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