W0
sistema

Rope Roof System

Por W0lfer, 28 de out. de 2012 em Archived

script
5.0 (1)
6
1.3k
W0lferW
28 de outubro de 2012 às 01:53

Este sistema é vendido por 10,00 ~ 19,90 por algumas empresas e estou liberando gratuitamente para vocês.

 

Detalhes: Os players conseguirão subir telhados com a ROPE.

 

<iframe width="640" height="360" src="http://www.youtube.c...layer_embedded" frameborder="0" allowfullscreen></iframe>

 

Versão 8.60

 

Vá em data/actions/scripts/tools/rope.lua e troque tudo que estiver la por isto:

 

--[[ Rope Chance

ID: 4

]]

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

--############################################# CONFIGURE AQUI ################################################## #####--

 

roofs_tile = {6172,3348,920,926,927,929,936,937,939,946,947,948 ,956,957,958} -- Piso de telhados aceitos

roofs_border = {6160,6161,6162,6163,6164,6165,6166,6167,6168,6168 ,6169,6170,6171, -- Lista de todas as bordas de telhados aceitas

921,922,923,924,925,928,930,931,932,933,934,935,93 8,941,942,943,944,

945,946,947,948,949,950,951,952,953,954,955,956,95 7,958,959,960,961,962,963,964,

3298,3299,3300,3301,3302,3303,3304,3305,3306,3307, 3308,3309,

3349,3350,3351,3352,3353,3354,3355,3356,3357,3358, 3359,3360,1268,1055,5045,5047,5048,5049,5050,5051, 5052,5053,5054}

timeDelay = 180 -- Tempo pra ser usado a corda novamente.

 

--################################################## ################################################## ##################--

 

 

 

if(toPosition.x == CONTAINER_POSITION) then

doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

return true

end

local creature = toPosition

creature.stackpos = 253

local pid_creature = getThingFromPos(creature,FALSE).uid

toPosition.stackpos = STACKPOS_GROUND

local itemGround = getThingFromPos(toPosition,FALSE)

if(isInArray(SPOTS, itemGround.itemid)) then

doTeleportThing(cid, {x = toPosition.x, y = toPosition.y + 1, z = toPosition.z - 1}, false)

return true

elseif tonumber(cid) == tonumber(pid_creature) then

verificacao_telhado = {[0]={x=toPosition.x,y=toPosition.y-1,z=toPosition.z},[1]={x=toPosition.x+1,y=toPosition.y,z=toPosition.z},

[2]={x=toPosition.x,y=toPosition.y+1,z=toPosition.z},[3]={x=toPosition.x-1,y=toPosition.y,z=toPosition.z}}

local position_tp = verificacao_telhado[getCreatureLookDirection(cid)]

position_tp.stackpos=0

local position_cid = getCreaturePosition(cid)

position_cid.stackpos=0

local meu_tile = getThingFromPos(position_cid,FALSE).itemid

local position_ver_down = verificacao_telhado[getCreatureLookDirection(cid)]

position_ver_down.stackpos=0

local ver_down = getThingFromPos(position_ver_down,FALSE)

--//\\--

local pos = position_tp

pos.z = pos.z-1

local coisa = getThingFromPos(pos,FALSE)

 

local pos2 = getCreaturePosition(cid)

pos2.stackpos=0

pos2.z = pos2.z-1

local coisa2 = getThingFromPos(pos2,FALSE)

if not (isInArray(roofs_tile,meu_tile)) or (isInArray(roofs_border,coisa.itemid) or isInArray(roofs_border,coisa2.itemid)) then

local chance_special = {[1]=10,[2]=15,[3]=25,[4]=40}

local time_segundos = {[0]=320,[1]=240,[2]=220,[3]=180,[4]=120}

local chance = 5

if os.time() >= getPlayerStorageValue(cid,"rope") then

if getPlayerStorageValue(cid,86574) == -1 then

setPlayerStorageValue(cid,86574,1)

addEvent(setPlayerStorageValue,2000,cid,86574,-1)

else

doPlayerSendCancel(cid,"You are exausted.")

doSendMagicEffect(getCreaturePosition(cid),2)

return TRUE

end

if math.random(1,100) >= 100-chance then

local coisa = getThingFromPos(position_tp,FALSE)

position_cid.z=position_cid.z-1

local ver_up = getThingFromPos(position_cid,FALSE)

local top_z = 7

local ative = 0

for i=0,3 do

coisa = getThingFromPos(position_tp,FALSE).itemid

if isWalkable(position_tp, true, true, true) and isInArray(roofs_tile,coisa) or isInArray(roofs_border,coisa) then

if position_tp.z < top_z then

top_z=position_tp.z

ative = 1

setPlayerStorageValue(cid,"rope",os.time()+timeDel ay)

end

end

position_tp.z=position_tp.z-1

end

if top_z ~= 0 and ative == 1 then

doSendMagicEffect(getCreaturePosition(cid),2)

doTeleportThing(cid,{x=position_tp.x,y=position_tp .y,z=top_z})

return TRUE

else

doPlayerSendCancel(cid,"Desculpa, mas é quase impossivel subir aqui.")

end

else

doSendAnimatedText(getCreaturePosition(cid),"MISS" ,215)

doPlayerSendCancel(cid,"You missed the roof!")

doSendMagicEffect(getCreaturePosition(cid),2)

if getPlayerStorageValue(cid,42319) == -1 then

setPlayerStorageValue(cid,42319,1)

addEvent(setPlayerStorageValue,10000,cid,42319,-1)

end

return TRUE

end

else

doPlayerSendTextMessage(cid,MESSAGE_STATUS_SMALL," You are exausted, please wait ".. getPlayerStorageValue(cid,"rope")-os.time() .." seconds for use the rope.")

return TRUE

end

end

if (ver_down.uid == 0 or isInArray(roofs_border,ver_down.itemid)) then

if getCreatureLookDirection(cid) == 0 then position_tp.y=position_tp.y-1 end

position_tp.z=getCreaturePosition(cid).z

for i=0,3 do

position_tp.z=position_tp.z+1

tp_ground = getThingFromPos(position_tp,FALSE)

if tp_ground.uid ~= 0 then

if isWalkable(position_tp, true, true, true) then

doTeleportThing(cid,position_tp)

return TRUE

else

return FALSE

end

end

end

else

doPlayerSendTextMessage(cid,MESSAGE_STATUS_SMALL," Sorry, you can not use the rope here!")

return TRUE

end

 

------------------------------------------------------

elseif(isInArray(ROPABLE, itemEx.itemid)) then

local hole = getThingFromPos({x = toPosition.x, y = toPosition.y, z = toPosition.z + 1, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE})

if(hole.itemid > 0) then

doTeleportThing(hole.uid, {x = toPosition.x, y = toPosition.y + 1, z = toPosition.z}, false)

else

doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

end

return true

end

return false

end

 

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

 

Versão 9.60 ~ 9.70

 

-[[ Rope Chance

ID: 4

]]

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

 

--############################################# CONFIGURE AQUI ################################################## #####--

 

roofs_tile = {6172,3348,920,926,927,929,936,937,939,946,947,948 ,956,957,958} -- Piso de telhados aceitos

roofs_border = {6160,6161,6162,6163,6164,6165,6166,6167,6168,6168 ,6169,6170,6171, -- Lista de todas as bordas de telhados aceitas

921,922,923,924,925,928,930,931,932,933,934,935,93 8,941,942,943,944,

945,946,947,948,949,950,951,952,953,954,955,956,95 7,958,959,960,961,962,963,964,

3298,3299,3300,3301,3302,3303,3304,3305,3306,3307, 3308,3309,

3349,3350,3351,3352,3353,3354,3355,3356,3357,3358, 3359,3360,1268,1055,5045,5047,5048,5049,5050,5051, 5052,5053,5054}

timeDelay = 180 -- Tempo pra ser usado a corda novamente.

 

--################################################## ################################################## ##################--

 

 

 

if(toPosition.x == CONTAINER_POSITION) then

doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

return true

end

local creature = toPosition

creature.stackpos = 253

local pid_creature = getThingFromPos(creature).uid

toPosition.stackpos = STACKPOS_GROUND

local itemGround = getThingFromPos(toPosition)

if(isInArray(SPOTS, itemGround.itemid)) then

doTeleportThing(cid, {x = toPosition.x, y = toPosition.y + 1, z = toPosition.z - 1}, false)

return true

elseif tonumber(cid) == tonumber(pid_creature) then

verificacao_telhado = {[0]={x=toPosition.x,y=toPosition.y-1,z=toPosition.z},[1]={x=toPosition.x+1,y=toPosition.y,z=toPosition.z},

[2]={x=toPosition.x,y=toPosition.y+1,z=toPosition.z},[3]={x=toPosition.x-1,y=toPosition.y,z=toPosition.z}}

local position_tp = verificacao_telhado[getCreatureLookDirection(cid)]

position_tp.stackpos=0

local position_cid = getCreaturePosition(cid)

position_cid.stackpos=0

local meu_tile = getThingFromPos(position_cid).itemid

local position_ver_down = verificacao_telhado[getCreatureLookDirection(cid)]

position_ver_down.stackpos=0

local ver_down = getThingFromPos(position_ver_down)

--//\\--

local pos = position_tp

pos.z = pos.z-1

local coisa = getThingFromPos(pos)

 

local pos2 = getCreaturePosition(cid)

pos2.stackpos=0

pos2.z = pos2.z-1

local coisa2 = getThingFromPosition(pos2,false)

if not (isInArray(roofs_tile,meu_tile)) or (isInArray(roofs_border,coisa.itemid) or isInArray(roofs_border,coisa2.itemid)) then

local chance_special = {[1]=10,[2]=15,[3]=25,[4]=40}

local time_segundos = {[0]=320,[1]=240,[2]=220,[3]=180,[4]=120}

local chance = 5

if os.time() >= getPlayerStorageValue(cid,"rope") then

if getPlayerStorageValue(cid,86574) == -1 then

setPlayerStorageValue(cid,86574,1)

addEvent(setPlayerStorageValue,2000,cid,86574,-1)

else

doPlayerSendCancel(cid,"You are exausted.")

doSendMagicEffect(getCreaturePosition(cid),2)

return TRUE

end

if math.random(90,100) >= 100-chance then

local coisa = getThingFromPos(position_tp)

position_cid.z=position_cid.z-1

local ver_up = getThingFromPos(position_cid)

local top_z = 7

local ative = 0

for i=0,3 do

coisa = getThingFromPos(position_tp).itemid

if isWalkable(position_tp, true, true, true) and isInArray(roofs_tile,coisa) or isInArray(roofs_border,coisa) then

if position_tp.z < top_z then

top_z=position_tp.z

ative = 1

setPlayerStorageValue(cid,"rope",os.time()+timeDel ay)

end

end

position_tp.z=position_tp.z-1

end

if top_z ~= 0 and ative == 1 then

doSendMagicEffect(getCreaturePosition(cid),2)

doTeleportThing(cid,{x=position_tp.x,y=position_tp .y,z=top_z})

return TRUE

else

doPlayerSendCancel(cid,"Desculpa, mas é quase impossivel subir aqui.")

end

else

--doSendAnimatedText(getCreaturePosition(cid),"MISS" ,215)

doCreatureSay(itemEx.uid, "MISS", TALKTYPE_ORANGE_1)

 

doPlayerSendCancel(cid,"You missed the roof!")

doSendMagicEffect(getCreaturePosition(cid),2)

if getPlayerStorageValue(cid,42319) == -1 then

setPlayerStorageValue(cid,42319,1)

addEvent(setPlayerStorageValue,10000,cid,42319,-1)

end

return TRUE

end

else

doPlayerSendTextMessage(cid,MESSAGE_STATUS_SMALL," You are exausted, please wait ".. getPlayerStorageValue(cid,"rope")-os.time() .." seconds for use the rope.")

return TRUE

end

end

if (ver_down.uid == 0 or isInArray(roofs_border,ver_down.itemid)) then

if getCreatureLookDirection(cid) == 0 then position_tp.y=position_tp.y-1 end

position_tp.z=getCreaturePosition(cid).z

for i=0,3 do

position_tp.z=position_tp.z+1

tp_ground = getThingFromPos(position_tp)

if tp_ground.uid ~= 0 then

if isWalkable(position_tp, true, true, true) then

doTeleportThing(cid,position_tp)

return TRUE

else

return FALSE

end

end

end

else

doPlayerSendTextMessage(cid,MESSAGE_STATUS_SMALL," Sorry, you can not use the rope here!")

return TRUE

end

 

------------------------------------------------------

elseif(isInArray(ROPABLE, itemEx.itemid)) then

local hole = getThingFromPos({x = toPosition.x, y = toPosition.y, z = toPosition.z + 1, stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE})

if(hole.itemid > 0) then

doTeleportThing(hole.uid, {x = toPosition.x, y = toPosition.y + 1, z = toPosition.z}, false)

else

doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

end

return true

end

return false

end

 

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

 

Espero que gostem smile.png

ZikarZ
28 de outubro de 2012 às 01:59

Inovador, vlw por ter trazido ao xtibia

 

REP+

FoquinhaaF
28 de outubro de 2012 às 02:54

Créditos?

 

Amigo não adianta postar o conteúdo se nao for de sua autoria , coloque os devidos créditos.

 

24 h ou irei reportá-lo.

 

Pois tenho certeza que esse script não é seu.

 

Felipe

W0lferW
28 de outubro de 2012 às 12:08

Amigo é meu sim; Eu estou copiando os tópicos meus de outro fórum. Chamo-me WarW0lf e não colocarei os créditos, pois é de minha autoria.

baduuhB
29 de outubro de 2012 às 09:10

Tu é o cara irmão, abração ;**

2 anos depois...
AdministradorA
10 de abril de 2015 às 00:25

Tópico movido para Lixeira Pública por conter link offline.