- Forum nie tylko o Tibii i OTS... http://www.tibia11.pun.pl/index.php - Skrypty do OTS http://www.tibia11.pun.pl/viewforum.php?id=11 - Bariera magiczna - hit dla orsh OTSów. http://www.tibia11.pun.pl/viewtopic.php?id=16893 |
Sassin - 2012-01-11 13:38:25 |
Zrobienie Magicznej Bariery trochę mi zajęło. Tak więc proszę o łagodne komentarze. ;) Kod:function onStatsChange(cid, attacker, type, combat, value) if getCreatureStorage(cid, STORAGE_ABSORB-1) == 1 then doCreatureSetStorage(cid, STORAGE_ABSORB-1, -1) return true end local combats = { [1] = {1}, [2] = {2}, [4] = {3}, [8] = {4}, [32] = {5}, [64] = {6}, [512] = {7}, [1024] = {8}, [2048] = {9} } local COMBATS = combats[combat] if COMBATS then if exhaustion.check(cid,COMBATS[1]+ STORAGE_ABSORB + 100) then storage = getCreatureStorage(cid, STORAGE_ABSORB + COMBATS[1]) value = (value * (storage/100)) doCreatureSetStorage(cid, STORAGE_ABSORB-1, 1) doTargetCombatHealth(attacker, cid, combat, -value, -value, INVISIBLE_EFFECT) return false end end return true end Do login.lua: Kod:registerCreatureEvent(cid, "absorb") Dodaj do creaturescripts.xml: Kod:<event type="statsChange" name="absorb" event="script" value="absorb.lua"/> W folderze data\lib stwórz nowy plik o nazwie absorb.lua i dodaj ten kod: Kod:INVISIBLE_EFFECT = 255 STORAGE_ABSORB = 30000 ABSORB_PHYSICAL = 1 ABSORB_ENERGY = 2 ABSORB_EARTH = 3 ABSORB_POISON = 3 ABSORB_FIRE = 4 ABSORB_LIFEDRAIN = 5 ABSORB_MANADRAIN = 6 ABSORB_ICE = 7 ABSORB_HOLY = 8 ABSORB_DEATH = 9 function absorbObject(cid, condition, time, percent) doCreatureSetStorage(cid, condition+STORAGE_ABSORB, percent) exhaustion.set(cid, condition+100+STORAGE_ABSORB, time) return true end Przykładowy skrypt działania, runa dzięki której nasza postać dostaje mniejsze obrażenia o 50%: Kod:function onUse(cid, item, pos, itemEx, topos) local time = 20 local power = 50 absorbObject(cid, ABSORB_POISON, time, power) doRemoveItem(item.uid) return true end time = czas Kod:local config = { storage = 1234, --storage zapisujace dlugosc = 4, --w sekundach --nie ruszac k = {'ŚMIERĆ',COLOR_BLACK,'OGIEŃ',COLOR_ORANGE,'LÓD',COLOR_TEAL,'ZIEMIA',COLOR_LIGHTGREEN,'ŚWIATŁO',COLOR_DARKYELLOW,'ENERGIA',COLOR_DARKPURPLE,'FIZYCZNE',COLOR_GREY,'LIFEDRAIN',COLOR_DARKRED}, odpornosci = {ABSORB_DEATH,50,ABSORB_FIRE,25,ABSORB_ICE,20,ABSORB_EARTH,65,ABSORB_HOLY,90,ABSORB_ENERGY,10,ABSORB_PHYSICAL,25,ABSORB_LIFEDRAIN,90}, shoots = {CONST_ANI_SUDDENDEATH,CONST_ANI_FIRE,CONST_ANI_ICE,CONST_ANI_EARTH,CONST_ANI_HOLY,CONST_ANI_ENERGYBALL,CONST_ANI_LARGEROCK,CONST_ANI_EXPLOSION}, eff = {CONST_ME_MORTAREA,COMBAT_DEATHDAMAGE,CONST_ME_FIREAREA,COMBAT_FIREDAMAGE,CONST_ME_ICEATTACK,COMBAT_ICEDAMAGE,CONST_ME_CARNIPHILA,COMBAT_EARTHDAMAGE,CONST_ME_HOLYDAMAGE,COMBAT_HOLYDAMAGE,CONST_ME_ENERGYAREA,COMBAT_ENERGYDAMAGE,CONST_ME_GROUNDSHAKER,COMBAT_PHYSICALDAMAGE,CONST_ME_RED_SHIMMER,COMBAT_LIFEDRAIN} } function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storage) >= os.time() then return false end local v = math.random(#config.shoots) doSendAnimatedText(getThingPos(cid), config.k[v*2-1], config.k[v*2]) absorbObject(cid, config.odpornosci[v*2-1], config.dlugosc, config.odpornosci[v*2]) doPlayerSetStorageValue(cid, config.storage, os.time() + config.dlugosc) return shoot(cid, v) and false end function shoot(cid, v) if getPlayerStorageValue(cid, config.storage) >= os.time() then local pos = getThingPos(cid) local h = getSpectators(pos, 1, 1) if h ~= nil then for _, t in ipairs(h) do if isCreature(t) then doTargetCombatHealth(cid, t, config.eff[v*2], 0, -config.odpornosci[v*2] * math.random(4), config.eff[v*2-1]) end end end doSendDistanceShoot({x=pos.x-1,y=pos.y,z=pos.z}, {x=pos.x-1,y=pos.y+1,z=pos.z}, config.shoots[v]) doSendDistanceShoot({x=pos.x-1,y=pos.y+1,z=pos.z}, {x=pos.x,y=pos.y+1,z=pos.z}, config.shoots[v]) doSendDistanceShoot({x=pos.x,y=pos.y+1,z=pos.z}, {x=pos.x+1,y=pos.y+1,z=pos.z}, config.shoots[v]) doSendDistanceShoot({x=pos.x+1,y=pos.y+1,z=pos.z}, {x=pos.x+1,y=pos.y,z=pos.z}, config.shoots[v]) doSendDistanceShoot({x=pos.x+1,y=pos.y,z=pos.z}, {x=pos.x+1,y=pos.y-1,z=pos.z}, config.shoots[v]) doSendDistanceShoot({x=pos.x+1,y=pos.y-1,z=pos.z}, {x=pos.x,y=pos.y-1,z=pos.z}, config.shoots[v]) doSendDistanceShoot({x=pos.x,y=pos.y-1,z=pos.z}, {x=pos.x-1,y=pos.y-1,z=pos.z}, config.shoots[v]) doSendDistanceShoot({x=pos.x-1,y=pos.y-1,z=pos.z}, {x=pos.x-1,y=pos.y,z=pos.z}, config.shoots[v]) return addEvent(shoot, 150, cid, v) end return true end Do spells.xml wklejamy: Kod:<instant name="Magic Barrer" words="magic barrer" lvl="20" mana="100" selftarget="1" event="script" value="test.lua"/> Na koniec działanie, Magicznej Bariery na filmie ;) |
Mokre Cycuszki - 2012-01-12 21:22:05 |
ALEE KUFFFFNO |
Sassin - 2012-01-14 07:50:16 |
Cóż jak tobie się nie podoba, to trudno. Myślę, że wchodząc na ten temat chciałeś po prostu nabić sobie posta. Nie sprawdzając tej Bariery piszesz "ALEE KUFFFFNO", szczerze szkoda mi Cię trochę. Pozdrawiam Sassin ! |
KamaShoot - 2012-02-20 16:38:09 |
Bardzo przydatny skrypcik, chetnie go wykorzystam. |