Ir para conteúdo
  • Cadastre-se

[DUVIDA] O que há de errado com este script?


Posts Recomendados

Olá galera, tenho um script aqui que tem como função mudar o addon continuamente ao equipar um ring de id 7697. O script é um movement, e está dando um erro no distro quando vou equipar o ring em um char, mesmo sendo player comum. 

 

Script: 

  Mostrar conteúdo oculto

local storage, value = 38417, -1


local text = {"Você está com o DANCE ativado, retire o anel para desativar.", "Ai Que Loucuuura"}
local sex = {
[0] = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324},
[1] = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325}
}

local condition_infight = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition_infight, CONDITION_PARAM_TICKS, -1)

function onEquip(cid, item, slot)
local psex = sex[getPlayerSex(cid)]
if psex then
for _, n in pairs(psex) do
otf = {lookType = math.random(n[1], n[21]), lookHead = math.random(1, 133), lookBody = math.random(1, 133), lookLegs = math.random(1, 133), lookFeet = math.random(1, 133)}
doSetCreatureOutfit(cid, otf, -1)
doAddCondition(cid, condition_infight)
doCreatureSetNoMove(cid, 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text[1])
doPlayerSendCancel(cid, text[2])
setPlayerStorageValue(cid, storage, value)
end
end
return 1
end

function onDeEquip(cid, item, slot)
if getPlayerStorageValue(cid, storage) >= 1 then
doRemoveCondition(cid, CONDITION_OUTFIT)
doRemoveCondition(cid, CONDITION_INFIGHT)
doCreatureSetNoMove(cid, 0)
doPlayerSendCancel(cid, text[2])
setPlayerStorageValue(cid, storage, value)
end
return 1
end

 

Erro no TFS:

  Mostrar conteúdo oculto

[14/09/2014 21:51:48] Lua Script Error: [MoveEvents Interface]


[14/09/2014 21:51:48] data/movements/scripts/dancering.lua:onEquip

[14/09/2014 21:51:48] data/movements/scripts/dancering.lua:15: attempt to index local 'n' (a number value)
[14/09/2014 21:51:49] stack traceback:
[14/09/2014 21:51:49] data/movements/scripts/dancering.lua:15: in function

 

Lembrando, (Versão do TFS 0.3.1).

 

Dês de já, obrigado.

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

tenta assim:

 

local storage, value = 38417, -1
local text = {"Você está com o DANCE ativado, retire o anel para desativar.", "Ai Que Loucuuura"}
local sex = {
[0] = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324},
[1] = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325}
}
 
local condition_infight = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition_infight, CONDITION_PARAM_TICKS, -1)
 
function onEquip(cid, item, slot)
local psex = sex[getPlayerSex(cid)]
if psex then
for _, n in pairs(psex) do
local otf = {lookType = math.random(n[1], n[21]), lookHead = math.random(1, 133), lookBody = math.random(1, 133), lookLegs = math.random(1, 133), lookFeet = math.random(1, 133)}
doSetCreatureOutfit(cid, otf, -1)
doAddCondition(cid, condition_infight)
doCreatureSetNoMove(cid, 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text[1])
doPlayerSendCancel(cid, text[2])
setPlayerStorageValue(cid, storage, value)
end
end
return 1
end
 
function onDeEquip(cid, item, slot)
if getPlayerStorageValue(cid, storage) >= 1 then
doRemoveCondition(cid, CONDITION_OUTFIT)
doRemoveCondition(cid, CONDITION_INFIGHT)
doCreatureSetNoMove(cid, 0)
doPlayerSendCancel(cid, text[2])
setPlayerStorageValue(cid, storage, value)
end
return 1
end
Link para o post
Compartilhar em outros sites

O erro ainda é o mesmo:

  Citar

 

[16/09/2014 18:33:27] Lua Script Error: [MoveEvents Interface] 

[16/09/2014 18:33:27] data/movements/scripts/dancering.lua:onEquip
 
[16/09/2014 18:33:27] data/movements/scripts/dancering.lua:15: attempt to index local 'n' (a number value)
[16/09/2014 18:33:27] stack traceback:
[16/09/2014 18:33:27] data/movements/scripts/dancering.lua:15: in function <data/movements/scripts/dancering.lua:11>
Expand   Mostrar mais  

'-' 

 

 

@Up 

Editado por eviltox (veja o histórico de edições)

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

@up

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites
local sex = {
[0] = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324},
[1] = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325}
}
 
local psex = sex[getPlayerSex(cid)]

psex recebe uma tabela com valores inteiros apenas.

for _, n in pairs(psex) do
    otf = {lookType = math.random(n[1], n[21]), lookHead = math.random(1, 133), lookBody = math.random(1, 133), lookLegs = math.random(1, 133), lookFeet = math.random(1, 133)}

    doSetCreatureOutfit(cid, otf, -1)
    doAddCondition(cid, condition_infight)
    doCreatureSetNoMove(cid, 1)

    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text[1])
    doPlayerSendCancel(cid, text[2])
    setPlayerStorageValue(cid, storage, value)
end

math.random(n[1], n[21])

 

Aqui você tenta acessar uma tabela sendo que o valor n é inteiro.

 

O que você quer fazer na verdade é:

*Atenção: Eu retirei o for, ele não é necessário.

 

    otf = {lookType = n[math.random(1, 21)], lookHead = math.random(1, 133), lookBody = math.random(1, 133), lookLegs = math.random(1, 133), lookFeet = math.random(1, 133)}

    doSetCreatureOutfit(cid, otf, -1)
    doAddCondition(cid, condition_infight)
    doCreatureSetNoMove(cid, 1)

    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text[1])
    doPlayerSendCancel(cid, text[2])
    setPlayerStorageValue(cid, storage, value)

 

Eu não tenho TFS 0.3.1 então não posso testar mas creio que "doPlayerSendCancel(cid, text[2])" vai cancelar a ação de equipar.

 

Tem outro erro também, em onEquip:

 

    setPlayerStorageValue(cid, storage, value)

 

value é -1, mas em onDeEquip você faz:

 

if getPlayerStorageValue(cid, storage) >= 1 then

 

Mas hora nenhuma em onEquip você seta storage como 1, logo ele vai continuar com a outfit.

Outro detalhe. Esse script não vai mudar outfit continuamente ao equipar o ring.

Editado por elwyn (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Estatísticas dos Fóruns

    96831
    Tópicos
    519564
    Posts
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo