GA

[Pedido] Comando !home

By gahgah, 25 de dez. de 2010 in Archived

9
2k
gahgahG
25 de dezembro de 2010 às 15:33

Ae galera, achei um comando que quando dito você é tele transportado para frente da sua casa, so falar !home, o tele funciona apenas sem pz, vai logo abaixo uma foto, sera que alguém poderia me ajudar?

OT: Alissow Server, version 0.4.1 (Alissow) – 8.60

 

SS:

 

homemyo.png

 

Estou no aguardo :)

MatheusGladM
25 de dezembro de 2010 às 21:39

Va em data/talkactions/scripts adicione um script.lua com o nome de home e bote esse script:

function isWalkable(pos, creature, proj, pz)-- by Nord
   if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
   if getTopCreature(pos).uid > 0 and creature then return false end
   if getTileInfo(pos).protection and pz then return false, true end
   local n = not proj and 3 or 2
   for i = 0, 255 do
       pos.stackpos = i
       local tile = getTileThingByPos(pos)
       if tile.itemid ~= 0 and not isCreature(tile.uid) then
           if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
               return false
           end
       end
   end
   return true
end

function onSay(cid, words)
if not getHouseByPlayerGUID(getPlayerGUID(cid)) then
   return doPlayerSendCancel(cid, "Voce nao tem casa.")
end
local pos = getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))
if getCreatureCondition(cid, CONDITION_INFIGHT) then
   return doPlayerSendCancel(cid, "Voce tem que estar sem battle.")
end
if not getTilePzInfo({x=pos.x-1, y=pos.y, z=pos.z}) and isWalkable({x=pos.x-1, y=pos.y, z=pos.z}) then
   pos = {x=pos.x-1, y=pos.y, z=pos.z}
elseif not getTilePzInfo({x=pos.x+1, y=pos.y, z=pos.z}) and isWalkable({x=pos.x+1, y=pos.y, z=pos.z}) then
   pos = {x=pos.x+1, y=pos.y, z=pos.z}
elseif not getTilePzInfo({x=pos.x, y=pos.y+1, z=pos.z}) and isWalkable({x=pos.x, y=pos.y+1, z=pos.z}) then
   pos = {x=pos.x, y=pos.y+1, z=pos.z}
elseif not getTilePzInfo({x=pos.x, y=pos.y-1, z=pos.z}) and isWalkable({x=pos.x, y=pos.y-1, z=pos.z}) then
   pos = {x=pos.x, y=pos.y-1, z=pos.z}
end
doTeleportThing(cid, pos)
end

 

Agora va em talkactions.xml e adicione essa linha:

    <talkaction words="!home" event="script" value="home.lua"/>

JoazanJ
25 de dezembro de 2010 às 21:49

MatheusMkalo , muito bom axo que deveria ter esse comando em todos os OTservs rep+ ( vo coloca o topico até no favoritos xD)

gahgahG
25 de dezembro de 2010 às 21:51

Va em data/talkactions/scripts adicione um script.lua com o nome de home e bote esse script:

function isWalkable(pos, creature, proj, pz)-- by Nord
   if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
   if getTopCreature(pos).uid > 0 and creature then return false end
   if getTileInfo(pos).protection and pz then return false, true end
   local n = not proj and 3 or 2
   for i = 0, 255 do
       pos.stackpos = i
       local tile = getTileThingByPos(pos)
       if tile.itemid ~= 0 and not isCreature(tile.uid) then
           if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
               return false
           end
       end
   end
   return true
end

function onSay(cid, words)
if not getHouseByPlayerGUID(getPlayerGUID(cid)) then
   return doPlayerSendCancel(cid, "Voce nao tem casa.")
end
local pos = getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))
if getCreatureCondition(cid, CONDITION_INFIGHT) then
   return doPlayerSendCancel(cid, "Voce tem que estar sem battle.")
end
if not getTilePzInfo({x=pos.x-1, y=pos.y, z=pos.z}) and isWalkable({x=pos.x-1, y=pos.y, z=pos.z}) then
   pos = {x=pos.x-1, y=pos.y, z=pos.z}
elseif not getTilePzInfo({x=pos.x+1, y=pos.y, z=pos.z}) and isWalkable({x=pos.x+1, y=pos.y, z=pos.z}) then
   pos = {x=pos.x+1, y=pos.y, z=pos.z}
elseif not getTilePzInfo({x=pos.x, y=pos.y+1, z=pos.z}) and isWalkable({x=pos.x, y=pos.y+1, z=pos.z}) then
   pos = {x=pos.x, y=pos.y+1, z=pos.z}
elseif not getTilePzInfo({x=pos.x, y=pos.y-1, z=pos.z}) and isWalkable({x=pos.x, y=pos.y-1, z=pos.z}) then
   pos = {x=pos.x, y=pos.y-1, z=pos.z}
end
doTeleportThing(cid, pos)
end

 

Agora va em talkactions.xml e adicione essa linha:

    <talkaction words="!home" event="script" value="home.lua"/>

 

 

Opa vlw, funcionou perfeitamente, +rep, mais como faz para deixar estilo emoteSpells? para nao aperecer o !home no default, e o Voce nao tem casa e Voce tem que estar sem battle aparecer em azul no default? fora isso o scrip ta perfeito.

fsgF
25 de dezembro de 2010 às 21:51

Bem legal este comando, obrigado Matheus! Vou dar uma dica, você deveria fazer um assim para players V.I.P clicar em um item e irem para o templo, apenas para V.I.P.

Abraços.

gahgahG
25 de dezembro de 2010 às 21:52

MatheusMkalo , muito bom axo que deveria ter esse comando em todos os OTservs rep+ ( vo coloca o topico até no favoritos xD)

 

É amigo, agora vai ter sim.. vim aqui pedir uma luz de como por este comando em meu server.. agora esta ai a resposta :)

MatheusGladM
25 de dezembro de 2010 às 22:29

Bem eu nao botei opçao pra vip e outras pois o autor do pedido nao pediu isso, se eu estivesse postando, concerteza botaria.

 

A pra nao aparecer no default, esqueci de por um baguizin:

function isWalkable(pos, creature, proj, pz)-- by Nord
   if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
   if getTopCreature(pos).uid > 0 and creature then return false end
   if getTileInfo(pos).protection and pz then return false, true end
   local n = not proj and 3 or 2
   for i = 0, 255 do
       pos.stackpos = i
       local tile = getTileThingByPos(pos)
       if tile.itemid ~= 0 and not isCreature(tile.uid) then
           if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
               return false
           end
       end
   end
   return true
end

function onSay(cid, words)
if not getHouseByPlayerGUID(getPlayerGUID(cid)) then
   return doPlayerSendCancel(cid, "Voce nao tem casa.")
end
local pos = getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))
if getCreatureCondition(cid, CONDITION_INFIGHT) then
   return doPlayerSendCancel(cid, "Voce tem que estar sem battle.")
end
if not getTilePzInfo({x=pos.x-1, y=pos.y, z=pos.z}) and isWalkable({x=pos.x-1, y=pos.y, z=pos.z}) then
   pos = {x=pos.x-1, y=pos.y, z=pos.z}
elseif not getTilePzInfo({x=pos.x+1, y=pos.y, z=pos.z}) and isWalkable({x=pos.x+1, y=pos.y, z=pos.z}) then
   pos = {x=pos.x+1, y=pos.y, z=pos.z}
elseif not getTilePzInfo({x=pos.x, y=pos.y+1, z=pos.z}) and isWalkable({x=pos.x, y=pos.y+1, z=pos.z}) then
   pos = {x=pos.x, y=pos.y+1, z=pos.z}
elseif not getTilePzInfo({x=pos.x, y=pos.y-1, z=pos.z}) and isWalkable({x=pos.x, y=pos.y-1, z=pos.z}) then
   pos = {x=pos.x, y=pos.y-1, z=pos.z}
end
doTeleportThing(cid, pos)
return TRUE
end

gahgahG
25 de dezembro de 2010 às 22:51

Vlw Matheus, script perfeito e funcionando.

luan12L
27 de dezembro de 2010 às 12:23

Pedido entregue, portanto, tópico trancado.

 

Sem mais, té.