Ir para conteúdo

Pac Man System


RickGol

Posts Recomendados

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

 

roxy.png

 

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 :o, 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

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Aew mano! testando aki... :) vms ver se funfa... ta mt bom pra ser verdade :)

 

@@EDITED

 

mano.. entro sem bug nem um aki... mais nao acontece nada

¬¬

Editado por Masfrii
Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...

então, eu segui os passos todos certos, e no fim deu esse erro. ja revisei, esta tudo certo, não entendi o problema :S

 

Event onUse not found <data/actions/scripts/pacman.lua

 

 

esse é meu pacman.lua

local player_start_pos = {x=33207,y=32148,z=7} local arena_up = {x=33216,y=32137,z=7}

local arena_down = {x=33198,y=32157,z=7} local monsterpos = {x=33207,y=32146,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

 

 

 

se conseguir ajudar agradeço MUITO *-*

Editado por blind92
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...