Nome: Pac man system
envolve: actions, monsters, creaturescripts
Testado em: The forgotten server 0.3.1
Créditos: Mock o Urso
Script muito legal especialmente para servers "ForFun"
Não é meu só to trazendo aqui pro xTibia pq não achei em nosso forum
Pac Man System? : Um sistema para garantir a diversão dos player em seu server, o pacman sistem ficou bem parecido com o real (Come-Come)xD.
Para começar temos que seguir alguns passos.
O primeiro é definir os scripts entao vamos até actions.xml e adcionamos isso:
<action actionid="7070" script="pacman.lua"/>
Aqui esta sendo usado o actionid 7070 verifique se nao esta em uso.
Depois na pasta scripts de actions crie o pacman.lua e adcione isto:
local player_start_pos = {x=3122,y=2741,z=7}
e isso:
local arena_up = {x=3130,y=2731,z=7}
local arena_down = {x=3114,y=2749,z=7} local monsterpos = {x=3122,y=2739,z=7} local ponsts_storage = 7071 -- Será configurado mais tarde local function criar(posbaxo,poscima) pos2 = posbaxo pos1 = poscima for x = 0, math.abs(pos1.x-pos2.x) do for y = 0, math.abs(pos1.y-pos2.y) do pos3 = {x = pos1.x+x, y = pos1.y-y, z = pos1.z, stackpos = 0} --doSendMagicEffect(pos3, 3) local coisa = getThingfromPos(pos3) if coisa.itemid == 407 and coisa.actionid ~= 100 then doSendMagicEffect(pos3, 1) pos3.stackpos = 1 local coisaa = getThingfromPos(pos3) if coisaa.itemid == 1502 or coisaa.itemid == 8058 then doRemoveItem(coisaa.uid,1) end if coisa.actionid == 7071 then doCreateItem(8058, 1, pos3) else doCreateItem(1502, 1, pos3) end end end end end function onUse(cid, item, frompos, item2, topos) if getGlobalStorageValue(7071) == -1 then doTeleportThing(cid,player_start_pos) setPlayerStorageValue(cid,ponsts_storage, 0) criar(arena_up,arena_down) local m1 = doSummonCreature('monster',{x=monsterpos.x-1,y=monsterpos.y,z=monsterpos.z}) local m2 = doSummonCreature('monster',{x=monsterpos.x,y=monsterpos.y,z=monsterpos.z}) local m3 = doSummonCreature('monster',{x=monsterpos.x+1,y=monsterpos.y,z=monsterpos.z}) setGlobalStorageValue(7071, m1) setGlobalStorageValue(7072, m2) setGlobalStorageValue(7073, m3) return TRUE else return TRUE end end
Salve e deiche o arquivo aberto.
Abra o seu map editor escolha uma area GRANDE e siga a foto juntamente com a esplicação da config e cores
Você notou que do canto de > da foto tem uma coisa com molas, você pode por o item que quiser porem ele DEVE estar com actionid 7070
Agora...
local player_start_pos = {x=1,y=2,z=7}
Você deve preencher a tabela com as posições X,Y,Z na tabela vendo pelo seu map editor onde indica o ponto vermelho.
-----------------------------------------------
local arena_up = {x=3130,y=2731,z=7}
local arena_down = {x=3114,y=2749,z=7}
Obviamente é a posição indicada pelos pontos pretos (bolas) na foto e boviamente down e bacho entao e a bola de baicho e up a de cima , preencha a tabela com os devidos valores de posição x y z.
-----------------------------------
local ponsts_storage = 7071
ISSO NAO PRESISA MECHER
-------------------------------
Você deve estar vendo alguns sqms roxos na foto nesses sqms você deve por NO CHAO actionid 100
----------------------------------
Ja nos verdes você deve por actionic 7071 neles.
---------------------------------
local monsterpos = {x=3122,y=2739,z=7}
Essa é a posição da bolinha laranja.
-------------------------------------------------------
Bom agora tenho 99.9% de certeza que seu servidor nao usa o itemid 1502 esse é o itemid usado para simular as bolinhas que o pacman come esse id e o do firefield que nao casa dano ao player (o pequeno) quaso você notar que ele some você deve ir em itens.xml procurar o id 1502 e tirar as linhas que informan duração.
Agora vamos adcionar os movements.
Vá ate movements.xml ponha esta tag
<movevent event="StepIn" itemid="1502" script="pacman.lua"/>
<movevent event="StepIn" itemid="8058" script="pacman.lua"/>
Em scripts de movements crie outro pacman.lua e ponha isso dentro:
local ponsts_storage = 7071
local exti_pos = {x=3134,y=2741,z=7}
---
local function transfMonst()
local m1 = getGlobalStorageValue(7071)
local m2 = getGlobalStorageValue(7072)
local m3 = getGlobalStorageValue(7073)
local p1 = getThingPos(m1)
local p2 = getThingPos(m2)
local p3 = getThingPos(m3)
doRemoveCreature(m1)
doRemoveCreature(m2)
doRemoveCreature(m3)
m1 = doSummonCreature('monster', p1)
m2 = doSummonCreature('monster', p2)
m3 = doSummonCreature('monster', p3)
setGlobalStorageValue(7071, m1)
setGlobalStorageValue(7072, m2)
setGlobalStorageValue(7073, m3)
end
function onStepIn(cid, item, pos)
if isMonster(cid) == TRUE then
return TRUE
end
if item.itemid == 8058 then
local m1 = getGlobalStorageValue(7071)
local m2 = getGlobalStorageValue(7072)
local m3 = getGlobalStorageValue(7073)
local p1 = getThingPos(m1)
local p2 = getThingPos(m2)
local p3 = getThingPos(m3)
doRemoveCreature(m1)
doRemoveCreature(m2)
doRemoveCreature(m3)
doRemoveItem(item.uid,1)
m1 = doSummonCreature('monster2', p1)
m2 = doSummonCreature('monster2', p2)
m3 = doSummonCreature('monster2', p3)
setGlobalStorageValue(7071, m1)
setGlobalStorageValue(7072, m2)
setGlobalStorageValue(7073, m3)
addEvent(transfMonst,20000,1)
else
doRemoveItem(item.uid,1)
setPlayerStorageValue(cid,ponsts_storage, getPlayerStorageValue(cid, ponsts_storage)+1)
doSendAnimatedText(pos, getPlayerStorageValue(cid, ponsts_storage).." pts", math.random(1,255))
end
if getPlayerStorageValue(cid, ponsts_storage) >= 170 then
doTeleportThing(cid,exti_pos)
local m1 = getGlobalStorageValue(7071)
local m2 = getGlobalStorageValue(7072)
local m3 = getGlobalStorageValue(7073)
doRemoveCreature(m1)
doRemoveCreature(m2)
doRemoveCreature(m3)
setGlobalStorageValue(7071,-1)
setGlobalStorageValue(7072,-1)
setGlobalStorageValue(7073,-1)
end
end
-------------------------------------
Configure:
local exti_pos = {x=3134,y=2741,z=7}
é a posição de qual o player quando perder ou ganhar vai ir.
----------------------------------
Agora vamos a creaturescripts
Adcione estas tags:
<event type="death" name="nodie2" script="imorrivel2.lua"/>
<event type="attack" name="atk" script="move.lua"/>
Em inmorrivel2.lua coloque isto:
function onDeath(cid, corpse, killer,killer2)
local m1 = getGlobalStorageValue(7071)
local m2 = getGlobalStorageValue(7072)
local m3 = getGlobalStorageValue(7073)
local ce = {x=3122,y=2739,z=7} --- mesma posição da bolinah laranja na foto!
if cid == m1 then
m1 = doSummonCreature("monster2", ce)
setGlobalStorageValue(7071, m1)
elseif cid == m2 then
m2 = doSummonCreature("monster2", ce)
setGlobalStorageValue(7072, m2)
elseif cid == m3 then
m3 = doSummonCreature("monster2", ce)
setGlobalStorageValue(7073, m3)
end
return TRUE
end
Em move.lua basta por isto:
local exti_pos = {x=3134,y=2741,z=7}
function getDistanceToCreature(cid,cre)
local c = getCreaturePosition(cid)
local s = getCreaturePosition(cre)
return math.max(math.abs(s.x - c.x), math.abs(s.y - c.y))
end
function onAttack(cid, target)
if getCreatureName(cid) == "monstro" and getDistanceToCreature(cid,target) == 1 then
doTeleportThing(target,exti_pos)
local m1 = getGlobalStorageValue(7071)
local m2 = getGlobalStorageValue(7072)
local m3 = getGlobalStorageValue(7073)
addEvent(doRemoveCreature,300,m1)
addEvent(doRemoveCreature,300,m2)
addEvent(doRemoveCreature,300,m3)
setGlobalStorageValue(7071,-1)
setGlobalStorageValue(7072,-1)
setGlobalStorageValue(7073,-1)
return FALSE
end
return TRUE
end
------------------
ainda falta 1 parte
os monsters
Basta criar 2 monsters.
crie um XML chamado monstro.xml e um chamado monster2.xml
Agora em monstro.xml ponha:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="monstro" nameDescription="a monstro" race="UNDEAD" experience="60" speed="60" manacost="100">
<health now="999" max="999"/>
<look type="48" head="20" body="30" legs="40" feet="50" corpse="5993"/>
<targetchange interval="5000" chance="8"/>
<strategy attack="100" defense="0"/>
<flags>
<flag summonable="0"/>
<flag attackable="0"/>
<flag hostile="1"/>
<flag illusionable="0"/>
<flag convinceable="0"/>
<flag pushable="1"/>
<flag canpushitems="1"/>
<flag canpushcreatures="0"/>
<flag targetdistance="1"/>
<flag staticattack="90"/>
<flag runonhealth="0"/>
</flags>
<attacks>
<attack name="melee" interval="2000" skill="1" attack="1"/>
</attacks>
<defenses armor="10" defense="10"/>
<elements>
<element physicalPercent="100"/>
<element earthPercent="100"/>
<element deathPercent="100"/>
</elements>
<immunities>
<immunity lifedrain="1"/>
<immunity fire="1"/>
<immunity paralyze="1"/>
</immunities>
<voices interval="5000" chance="10">
<voice sentence="Huh!"/>
<voice sentence="Shhhhhh"/>
<voice sentence="Buuuuuh"/>
</voices>
<script>
<event name="atk"/>
</script>
</monster>
monster2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="monstro" nameDescription="a monstro" race="UNDEAD" experience="1" speed="30" manacost="100">
<health now="1" max="1"/>
<look type="319" head="20" body="30" legs="40" feet="50" corpse="0"/>
<targetchange interval="5000" chance="8"/>
<strategy attack="100" defense="0"/>
<flags>
<flag summonable="0"/>
<flag attackable="1"/>
<flag hostile="0"/>
<flag illusionable="0"/>
<flag convinceable="0"/>
<flag pushable="1"/>
<flag canpushitems="1"/>
<flag canpushcreatures="0"/>
<flag targetdistance="9"/>
<flag staticattack="90"/>
<flag runonhealth="0"/>
</flags>
<attacks>
<attack name="melee" interval="2000" skill="1" attack="1"/>
</attacks>
<defenses armor="10" defense="10"/>
<immunities>
<immunity invisible="1"/>
<immunity fire="1"/>
</immunities>
<voices interval="5000" chance="10">
<voice sentence="AHHHH!"/>
</voices>
<script>
<event name="nodie2"/>
</script>
</monster>
Agora para acabar vá ate monsters.xml e adcione 2 tags:
<monster name="monster" file="monstro.xml"/>
<monster name="monster2" file="monster2.xml"/>
salva e fecha tudo e abra seu ot
provavelmente como o script tem muitos passos algo pode nao funcionar corretamente na hora entao revise os passos um por um com atenção.
Comentem