Ir para conteúdo
  • 0

Alterar Script Porta Automática.


Developer Berg

Pergunta

Olá gente, queria a ajuda de vcs para alterar uma script, a script é uma de porta automática.

ela é dividida em 3 partes de transformações de id com os respectivos ids., " fechada, metade aberta, toda aberta "

queria alterar para 4 partes " fechada, metade aberta, um pouquinho aberta, toda aberta "

 

parte que estou falando

local porta = {13680, 13679, 13677} -- porta fechada, porta meio aberta, porta aberta

script da porta.

 

 

 

-- Do not remove the credits --
-- [MOVEMENT] Porta que abre automáticamente --
-- Developed by Rigby (João Vitor) --
-- Xtibia.com --
 
local porta = {13680, 13679, 13677} -- porta fechada, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 150 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, 2 do
            addEvent(function()
                doTransformItem(getTileItemById(pos, i == 1 and porta[1] or porta[2]).uid, porta[i + 1])
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[3]).uid > 0 then
            for i = 1, 2 do
                addEvent(function()
                    doTransformItem(getTileItemById(pos, i == 1 and porta[3] or porta[2]).uid, porta[i == 1 and 2 or 1])
                end, i * delay)
            end
        end
    end
    return true
end

 

 

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Assim vai funcionar pra 2, 3, 4, 5, 800 portas, só q sugiro vc mudar o delay pra ser a quantidade de tempo q vc quer q demore dividido pelo numero de ids q vai trocar, assim independente de ser 3 ou 500 o tempo pra abrir fechar será o mesmo.

script:

-- Do not remove the credits --
-- [MOVEMENT] Porta que abre automáticamente --
-- Developed by Rigby (João Vitor) --
-- Xtibia.com --
 
local porta = {13680, 13679, ID DA POUCO ABERTA, 13677} -- porta fechada, porta pouco aberta, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 150 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, (#porta - 1) do
            addEvent(function()
                doTransformItem(getTileItemById(pos, porta[i]).uid, porta[i + 1])
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[#porta]).uid > 0 then
            for i = 1, (#porta - 1) do
                addEvent(function()
                    doTransformItem(getTileItemById(pos, porta[(#porta - i) + 1]).uid, porta[(#porta - i)])
                end, i * delay)
            end
        end
    end
    return true
end

dava pra fazer mais simples mas não quis mudar os fors pra vc não perder a lógica e aquele action ali era desnecessário já que vc podia usar item.actionid pra pegar o actionid do movements.xml

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

  • 0

Assim vai funcionar pra 2, 3, 4, 5, 800 portas, só q sugiro vc mudar o delay pra ser a quantidade de tempo q vc quer q demore dividido pelo numero de ids q vai trocar, assim independente de ser 3 ou 500 o tempo pra abrir fechar será o mesmo.

 

script:

 

-- Do not remove the credits --
-- [MOVEMENT] Porta que abre automáticamente --
-- Developed by Rigby (João Vitor) --
-- Xtibia.com --
 
local porta = {13680, 13679, ID DA POUCO ABERTA, 13677} -- porta fechada, porta pouco aberta, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 150 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, (#porta - 1) do
            addEvent(function()
                doTransformItem(getTileItemById(pos, porta[i]).uid, porta[i + 1])
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[(#porta - 1)]).uid > 0 then
            for i = 1, (#porta - 1) do
                addEvent(function()
                    doTransformItem(getTileItemById(pos, porta[(#porta - i) + 1]).uid, porta[(#porta - i)])
                end, i * delay)
            end
        end
    end
    return true
end

dava pra fazer mais simples mas não quis mudar os fors pra vc não perder a lógica e aquele action ali era desnecessário já que vc podia usar item.actionid pra pegar o actionid do movements.xml

ela abriu normal a porta, mas quando saiu do piso para um que n tem a actionid ela n fecha, coloquei o delay 200, e n deu nem um erro na distro.

 

 

 

-- Do not remove the credits --
-- [MOVEMENT] Porta que abre automáticamente --
-- Developed by Rigby (João Vitor) --
-- Xtibia.com --
 
local porta = {13680, 13679, 13678, 13677} -- porta fechada, porta pouco aberta, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 200 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, (#porta - 1) do
            addEvent(function()
                doTransformItem(getTileItemById(pos, porta[i]).uid, porta[i + 1])
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[(#porta - 1)]).uid > 0 then
            for i = 1, (#porta - 1) do
                addEvent(function()
                    doTransformItem(getTileItemById(pos, porta[(#porta - i) + 1]).uid, porta[(#porta - i)])
                end, i * delay)
            end
        end
    end
    return true
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

@@ricardoberg, perdão.. ainda não dormi e acabei deixando passar 1 detalhe.

A linha que está como
if getTileItemById(pos, porta[(#porta - 1)]).uid > 0 then
deveria ser

if getTileItemById(pos, porta[#porta]).uid > 0 then

Link para o comentário
Compartilhar em outros sites

  • 0

@@ricardoberg, perdão.. ainda não dormi e acabei deixando passar 1 detalhe.

 

A linha que está como

if getTileItemById(pos, porta[(#porta - 1)]).uid > 0 then

deveria ser

if getTileItemById(pos, porta[#porta]).uid > 0 then

ok kk, pegou normal agr. obg.

@@ricardoberg, perdão.. ainda não dormi e acabei deixando passar 1 detalhe.

 

A linha que está como

if getTileItemById(pos, porta[(#porta - 1)]).uid > 0 then

deveria ser

if getTileItemById(pos, porta[#porta]).uid > 0 then

Night Wolf, desculpa perguntar, mas aqui ta dando um erro que vim reparar agr, ele n da toda vez, n sei pq, e nem sei como fazer para da esse erro, do nada passei na porta e eu esse erro.

 

NSXpOb3.png

 

 

 

-- Do not remove the credits --
-- [MOVEMENT] Porta que abre automáticamente --
-- Developed by Rigby (João Vitor) --
-- Xtibia.com --
 
local porta = {13680, 13679, 13678, 13677} -- porta fechada, porta pouco aberta, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 200 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, (#porta - 1) do
            addEvent(function()
                doTransformItem(getTileItemById(pos, porta[i]).uid, porta[i + 1])
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[#porta]).uid > 0 then
            for i = 1, (#porta - 1) do
                addEvent(function()
                    doTransformItem(getTileItemById(pos, porta[(#porta - i) + 1]).uid, porta[(#porta - i)])
                end, i * delay)
            end
        end
    end
    return true
end

 

 

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

  • 0

esse erro dá quando vc entra na porta e já sai, andando mais rápido do que dura o processo de abrir a porta. Aí ele invoca tanto o stepIn qnt o stepOut e eles se sobrepõe, dando esse erro.

Tenta assim

local porta = {13680, 13679, 13678, 13677} -- porta fechada, porta pouco aberta, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 200 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, (#porta - 1) do
            addEvent(function()
				if getTileItemById(pos, porta[i]).uid ~= 0 then
					doTransformItem(getTileItemById(pos, porta[i]).uid, porta[i + 1])
				end
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[#porta]).uid > 0 then
            for i = 1, (#porta - 1) do
                addEvent(function()
					if getTileItemById(pos, porta[(#porta - i) + 1]).uid ~= 0 then
						doTransformItem(getTileItemById(pos, porta[(#porta - i) + 1]).uid, porta[(#porta - i)])
					end
                end, i * delay)
            end
        end
    end
    return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

 

esse erro dá quando vc entra na porta e já sai, andando mais rápido do que dura o processo de abrir a porta. Aí ele invoca tanto o stepIn qnt o stepOut e eles se sobrepõe, dando esse erro.

 

Tenta assim

 

local porta = {13680, 13679, 13678, 13677} -- porta fechada, porta pouco aberta, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 200 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, (#porta - 1) do
            addEvent(function()
				if getTileItemById(pos, porta[i]).uid ~= 0 then
					doTransformItem(getTileItemById(pos, porta[i]).uid, porta[i + 1])
				end
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[#porta]).uid > 0 then
            for i = 1, (#porta - 1) do
                addEvent(function()
					if getTileItemById(pos, porta[(#porta - i) + 1]).uid ~= 0 then
						doTransformItem(getTileItemById(pos, porta[(#porta - i) + 1]).uid, porta[(#porta - i)])
					end
                end, i * delay)
            end
        end
    end
    return true
end

pronto o erro saiu, mas eu esqueci de pedir, to com essa duvida desde quando peguei a script, tipo, se 2 players ficar sobre os pisos que contem a action, a porta vai ficar sempre aberta e n vai aver nem uma transformação até que os 2 playes saiam dos pisos que tem a action, mas isso n acontece com os pokemons, tipo, se eu soltar meu poke, e ele pisar nos pisos que contem a action, e ele passar de um tile que tem a action para o outro tile que contem a mesma action, a porta fecha e abre, queria que acontecesse do mesmo jeito que acontece com os 2 players que ficam em cima sem acontecer transformações, n sei se deu muito pra entender kk, se n deu eu mando um gif.

Link para o comentário
Compartilhar em outros sites

  • 0

@@ricardoberg, aquela parte que está

for _, pid in ipairs(getPlayersOnline()) do
if getTileInfo(getCreaturePosition(pid)).actionid == action then
table.insert(tab, pid)
end
end

tem que ficar asim:

    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
		if getCreatureSummons(pid) > 0 then
			for _, sid in pairs (getCreatureSummons(pid)) do
				if getTileInfo(getCreaturePosition(sid)).actionid == action then
					table.insert(tab, sid)
				end
			end
		end
    end
Link para o comentário
Compartilhar em outros sites

  • 0

 

@@ricardoberg, aquela parte que está

 

for _, pid in ipairs(getPlayersOnline()) do

if getTileInfo(getCreaturePosition(pid)).actionid == action then

table.insert(tab, pid)

end

end

 

tem que ficar asim:

 

    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
		if getCreatureSummons(pid) > 0 then
			for _, sid in pairs (getCreatureSummons(pid)) do
				if getTileInfo(getCreaturePosition(sid)).actionid == action then
					table.insert(tab, sid)
				end
			end
		end
    end

Night Wolf, quando pisa no tile ela abre normal, mas quando saiu do tile ela n fecha e da erro na distro.

 

mYUkEpH.png

 

 

 

-- Do not remove the credits --
-- [MOVEMENT] Porta que abre automáticamente --
-- Developed by Rigby (João Vitor) --
-- Xtibia.com --

local porta = {13680, 13679, 13678, 13677} -- porta fechada, porta pouco aberta, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1054, z = 7} -- local onde vai fica a porta
local delay = 150 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, (#porta - 1) do
            addEvent(function()
				if getTileItemById(pos, porta[i]).uid ~= 0 then
					doTransformItem(getTileItemById(pos, porta[i]).uid, porta[i + 1])
				end
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
		if getCreatureSummons(pid) > 0 then
			for _, sid in pairs (getCreatureSummons(pid)) do
				if getTileInfo(getCreaturePosition(sid)).actionid == action then
					table.insert(tab, sid)
				end
			end
		end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[#porta]).uid > 0 then
            for i = 1, (#porta - 1) do
                addEvent(function()
					if getTileItemById(pos, porta[(#porta - i) + 1]).uid ~= 0 then
						doTransformItem(getTileItemById(pos, porta[(#porta - i) + 1]).uid, porta[(#porta - i)])
					end
                end, i * delay)
            end
        end
    end
    return true
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

vacilei ahueuha

 

onde tá if getCreatureSummons(pid) > 0 then tem que ser

if #getCreatureSummons(pid) > 0 then

 

ou, melhor ainda

 

if getCreatureSummons(pid) ~= nil then

ae pegou, sistema de porta automática 100% agr, eu acho kk, ta sem erros e sem bugs. obg man ajudou muito ^^

porem tenho uma duvida nada a ver com o post kk, mas vou pedir para n precisar criar um tópico novo rs, quando eu ligo meu server, a distro fica limpa, sem erros algum, mas se eu deixar a distro ligada por um tempinho aparece aquele mesmo erro do onStepout que tava aparecendo na porta se a pessoa entrar e sair do tile com a action rápido, mas tipo eu n entro no server, eu só ligo a distro e deixo, e tem vez que nem aparecer n aparece. olha.

 

pn2uP7q.png

 

script do Surf.lua

 

 

 

local function doSendMagicEffecte(pos, effect)
	addEvent(doSendMagicEffect, 50, pos, effect)
end

local waters = {11756, 4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825}
                                                                     --alterado v2.5
local flie = {'11756', '4614', '4615', '4616', '4617', '4618', '4619', '4608', '4609', '4610', '4611', '4612', '4613', '7236', '4614', '4615', '4616', '4617', '4618', '4619', '4620', '4621', '4622', '4623', '4624', '4625', '4665', '4666', '4820', '4821', '4822', '4823', '4824', '4825'}
--alterado v2.6 tabela agora em configuration.lua!

local premium = false

function onStepIn(cid, item, position, fromPosition)

if not isPlayer(cid) or isInArray({5, 6}, getPlayerGroupId(cid)) then --alterado v2.9
return true
end
if getPlayerStorageValue(cid, 75846) >= 1 then return true end   --alterado v2.9

if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end -- TV

if isPlayer(cid) and not isPremium(cid) and premium == true then
doTeleportThing(cid, fromPosition, true)
doPlayerSendCancel(cid, "Only premium members are allowed to surf.")
return true
end

if getCreatureOutfit(cid).lookType == 316 or getCreatureOutfit(cid).lookType == 648 then
doSendMagicEffect(fromPosition, 136)
end

if (getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1) then
return true
end

if #getCreatureSummons(cid) == 0 then
doPlayerSendCancel(cid, "You need a pokemon to surf.")
doTeleportThing(cid, fromPosition, false)
return true
end

if (not isInArray(specialabilities["surf"], getPokemonName(getCreatureSummons(cid)[1]))) then  --alterado v2.6
doPlayerSendCancel(cid, "This pokemon cannot surf.")
doTeleportThing(cid, fromPosition, false)
return true
end

if getPlayerStorageValue(cid, 5700) == 1 then
   doPlayerSendCancel(cid, "You can't do that while is mount in a bike!")
   doTeleportThing(cid, fromPosition, false)
   return true
end

if getPlayerStorageValue(cid, 212124) >= 1 then         --alterado v2.6
   doPlayerSendCancel(cid, "You can't do it with a pokemon with mind controlled!")
   doTeleportThing(cid, fromPosition, false)
   return true
end

if getPlayerStorageValue(cid, 52480) >= 1 then
   doPlayerSendCancel(cid, "You can't do it while a duel!")  --alterado v2.6
   doTeleportThing(cid, fromPosition, false)
   return true
end

if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then 
   doPlayerSendCancel(cid, "You can't do it while in the PVP Zone!")   --alterado v2.7
   doTeleportThing(cid, fromPosition, false)
   return true
end
                                        --alterado v2.6
doSetCreatureOutfit(cid, {lookType = surfs[getPokemonName(getCreatureSummons(cid)[1])].lookType + 351}, -1) 

doCreatureSay(cid, ""..getPokeName(getCreatureSummons(cid)[1])..", lets surf!", 1)
doChangeSpeed(cid, -(getCreatureSpeed(cid)))

local speed = 75 + PlayerSpeed + getSpeed(getCreatureSummons(cid)[1]) * 8 * speedRate
setPlayerStorageValue(cid, 54844, speed)
doChangeSpeed(cid, speed)

local pct = getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1])

local item = getPlayerSlotItem(cid, 8)  --alterado v2.8
doItemSetAttribute(item.uid, "hp", pct)

doRemoveCreature(getCreatureSummons(cid)[1])

if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then
   addEvent(sendAuraEffect, 120, cid, auraSyst[getItemAttribute(item.uid, "aura")])    --alterado v2.8
end

if useOTClient then
   doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
end

addEvent(setPlayerStorageValue, 100, cid, 63215, 1)

return true
end

local direffects = {30, 49, 9, 51}

function onStepOut(cid, item, position, fromPosition)

if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end

	local checkpos = fromPosition
		checkpos.stackpos = 0

	if isInArray(waters, getTileInfo(checkpos).itemid) then

		if getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 then

			doSendMagicEffecte(fromPosition, direffects[getCreatureLookDir(cid) + 1])

		end

	end

	if not isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then

		if getPlayerStorageValue(cid, 17000) >= 1 then return true end
		if getPlayerStorageValue(cid, 63215) <= 0 then return true end

		doRemoveCondition(cid, CONDITION_OUTFIT)
		setPlayerStorageValue(cid, 63215, -1)

		local item = getPlayerSlotItem(cid, 8)
		local pokemon = getItemAttribute(item.uid, "poke")
		local x = pokes[pokemon]

		if not x then return true end

		if getItemAttribute(item.uid, "nick") then
			doCreatureSay(cid, getItemAttribute(item.uid, "nick")..", I'm tired of surfing!", 1)
		else
			doCreatureSay(cid, getItemAttribute(item.uid, "poke")..", I'm tired of surfing!", 1)
		end

		doSummonMonster(cid, pokemon)

		local pk = getCreatureSummons(cid)[1]

		if not isCreature(pk) then
			pk = doCreateMonster(pokemon, backupPos)
			if not isCreature(pk) then
				doPlayerSendCancel(cid, "You can't stop surfing here.")
				doTeleportThing(cid, fromPosition, false)
			return true
			end
			doConvinceCreature(cid, pk)
		end

		doChangeSpeed(pk, getCreatureSpeed(cid))
		doChangeSpeed(cid, -getCreatureSpeed(cid))
		doRegainSpeed(cid)      --alterado v2.6
        
		doTeleportThing(pk, fromPosition, false)
		doTeleportThing(pk, getThingPos(cid), true)
		doCreatureSetLookDir(pk, getCreatureLookDir(cid))

		adjustStatus(pk, item.uid, true, false, true)
		
		if useOTClient then
           doPlayerSendCancel(cid, '12//,show') --alterado v2.8
        end

	end

return true
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

aqui a linha 109 é essa daqui:
if isInArray(waters, getTileInfo(checkpos).itemid) then

mas não sei pq ele daria erro nisso, só se esse getTileInfo(checkpos) não retornar uma tabela e aí vc dá .itemid pra pegar o elemento chamado itemid de uma tabela que não é uma tabela.

Pra corrigir isso é só fazer checagem se isso existe antes de chamar o .itemid só que isso tem que ser uma coisa pensada antes do script ser implementado e não agora no final. Anyway, tenta assim
adiciona na linha 108 essa linha aqui:

if type(getTileInfo(checkpos)) ~= 'table' then return false end

 

Link para o comentário
Compartilhar em outros sites

  • 0

aqui a linha 109 é essa daqui:

if isInArray(waters, getTileInfo(checkpos).itemid) then

 

mas não sei pq ele daria erro nisso, só se esse getTileInfo(checkpos) não retornar uma tabela e aí vc dá .itemid pra pegar o elemento chamado itemid de uma tabela que não é uma tabela.

 

Pra corrigir isso é só fazer checagem se isso existe antes de chamar o .itemid só que isso tem que ser uma coisa pensada antes do script ser implementado e não agora no final. Anyway, tenta assim

adiciona na linha 108 essa linha aqui:

if type(getTileInfo(checkpos)) ~= 'table' then return false end

o erro diminuiu. só ta aparecendo isso agr.

 

7hBPHlf.png

 

 

 

local function doSendMagicEffecte(pos, effect)
	addEvent(doSendMagicEffect, 50, pos, effect)
end

local waters = {11756, 4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825}
                                                                     --alterado v2.5
local flie = {'11756', '4614', '4615', '4616', '4617', '4618', '4619', '4608', '4609', '4610', '4611', '4612', '4613', '7236', '4614', '4615', '4616', '4617', '4618', '4619', '4620', '4621', '4622', '4623', '4624', '4625', '4665', '4666', '4820', '4821', '4822', '4823', '4824', '4825'}
--alterado v2.6 tabela agora em configuration.lua!

local premium = false

function onStepIn(cid, item, position, fromPosition)

if not isPlayer(cid) or isInArray({5, 6}, getPlayerGroupId(cid)) then --alterado v2.9
return true
end
if getPlayerStorageValue(cid, 75846) >= 1 then return true end   --alterado v2.9

if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end -- TV

if isPlayer(cid) and not isPremium(cid) and premium == true then
doTeleportThing(cid, fromPosition, true)
doPlayerSendCancel(cid, "Only premium members are allowed to surf.")
return true
end

if getCreatureOutfit(cid).lookType == 316 or getCreatureOutfit(cid).lookType == 648 then
doSendMagicEffect(fromPosition, 136)
end

if (getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1) then
return true
end

if #getCreatureSummons(cid) == 0 then
doPlayerSendCancel(cid, "You need a pokemon to surf.")
doTeleportThing(cid, fromPosition, false)
return true
end

if (not isInArray(specialabilities["surf"], getPokemonName(getCreatureSummons(cid)[1]))) then  --alterado v2.6
doPlayerSendCancel(cid, "This pokemon cannot surf.")
doTeleportThing(cid, fromPosition, false)
return true
end

if getPlayerStorageValue(cid, 5700) == 1 then
   doPlayerSendCancel(cid, "You can't do that while is mount in a bike!")
   doTeleportThing(cid, fromPosition, false)
   return true
end

if getPlayerStorageValue(cid, 212124) >= 1 then         --alterado v2.6
   doPlayerSendCancel(cid, "You can't do it with a pokemon with mind controlled!")
   doTeleportThing(cid, fromPosition, false)
   return true
end

if getPlayerStorageValue(cid, 52480) >= 1 then
   doPlayerSendCancel(cid, "You can't do it while a duel!")  --alterado v2.6
   doTeleportThing(cid, fromPosition, false)
   return true
end

if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then 
   doPlayerSendCancel(cid, "You can't do it while in the PVP Zone!")   --alterado v2.7
   doTeleportThing(cid, fromPosition, false)
   return true
end
                                        --alterado v2.6
doSetCreatureOutfit(cid, {lookType = surfs[getPokemonName(getCreatureSummons(cid)[1])].lookType + 351}, -1) 

doCreatureSay(cid, ""..getPokeName(getCreatureSummons(cid)[1])..", lets surf!", 1)
doChangeSpeed(cid, -(getCreatureSpeed(cid)))

local speed = 75 + PlayerSpeed + getSpeed(getCreatureSummons(cid)[1]) * 8 * speedRate
setPlayerStorageValue(cid, 54844, speed)
doChangeSpeed(cid, speed)

local pct = getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1])

local item = getPlayerSlotItem(cid, 8)  --alterado v2.8
doItemSetAttribute(item.uid, "hp", pct)

doRemoveCreature(getCreatureSummons(cid)[1])

if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then
   addEvent(sendAuraEffect, 120, cid, auraSyst[getItemAttribute(item.uid, "aura")])    --alterado v2.8
end

if useOTClient then
   doPlayerSendCancel(cid, '12//,hide') --alterado v2.8
end

addEvent(setPlayerStorageValue, 100, cid, 63215, 1)

return true
end

local direffects = {30, 49, 9, 51}

function onStepOut(cid, item, position, fromPosition)

if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end

	local checkpos = fromPosition
		checkpos.stackpos = 0

	if type(getTileInfo(checkpos)) ~= 'table' then return false end
	
	if isInArray(waters, getTileInfo(checkpos).itemid) then

		if getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 then

			doSendMagicEffecte(fromPosition, direffects[getCreatureLookDir(cid) + 1])

		end

	end

	if not isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then

		if getPlayerStorageValue(cid, 17000) >= 1 then return true end
		if getPlayerStorageValue(cid, 63215) <= 0 then return true end

		doRemoveCondition(cid, CONDITION_OUTFIT)
		setPlayerStorageValue(cid, 63215, -1)

		local item = getPlayerSlotItem(cid, 8)
		local pokemon = getItemAttribute(item.uid, "poke")
		local x = pokes[pokemon]

		if not x then return true end

		if getItemAttribute(item.uid, "nick") then
			doCreatureSay(cid, getItemAttribute(item.uid, "nick")..", I'm tired of surfing!", 1)
		else
			doCreatureSay(cid, getItemAttribute(item.uid, "poke")..", I'm tired of surfing!", 1)
		end

		doSummonMonster(cid, pokemon)

		local pk = getCreatureSummons(cid)[1]

		if not isCreature(pk) then
			pk = doCreateMonster(pokemon, backupPos)
			if not isCreature(pk) then
				doPlayerSendCancel(cid, "You can't stop surfing here.")
				doTeleportThing(cid, fromPosition, false)
			return true
			end
			doConvinceCreature(cid, pk)
		end

		doChangeSpeed(pk, getCreatureSpeed(cid))
		doChangeSpeed(cid, -getCreatureSpeed(cid))
		doRegainSpeed(cid)      --alterado v2.6
        
		doTeleportThing(pk, fromPosition, false)
		doTeleportThing(pk, getThingPos(cid), true)
		doCreatureSetLookDir(pk, getCreatureLookDir(cid))

		adjustStatus(pk, item.uid, true, false, true)
		
		if useOTClient then
           doPlayerSendCancel(cid, '12//,show') --alterado v2.8
        end

	end

return true
end

 

 

Up, Night Wolf, da essa ultima ajudinha ai e pronto kk se for possível ^^

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...