Ir para conteúdo
  • 0

Um item para cada local, não um item para todos os locais.


LbrS

Pergunta

Olá, tenho um código aqui que anteriormente eu já havia tirado uma dúvida sobre ele, e o zipter98 me ajudou.
Porém me veio à tona outra dúvida. Eu iria postar lá no mesmo tópico, mas ele já havia sido movido após ser resolvido, então não sabia se eu podia postar lá ainda. Então resolvi criar outro tópico.

É o seguinte. Tenho um código em que é um TALKACTION que você executa um comando, exemplo !teleport + LOCAL, e ele te teleporta.
Porém existem algumas restrições. O comando só te teleporta caso você tenha um certo item e um certo level.

No caso, cada opção de teleport tem um level que possa teleportar. Mas já o item, não.
O item está configurado para todas as opções, ou seja, não importa o destino que você escolher, você vai precisar do mesmo item.
Eu quero que tenha um item para cada destino, e não um item para todos os destinos.

Acho que deu pra entender, caso alguém for me ajudar e tenha alguma dúvida sobre a minha dúvida (lol), só falar.

Aqui o código :

function onSay(cid, words, param)
 
local config = {
    pz = true,
    battle = true,
    need_level = true,
    premium = true,
    need_Item = true, 
    Item = 2010 -- Aqui o item fica para qualquer destino que eu for.
}
 
local lugar = {
["Centerya"] = { 
pos = {x = 1137, y = 1243, z = 5},level = 8},
["Deserya"] = { 
pos = {x = 930, y = 1239, z = 5},level = 30} 
}
 
--Posições.
local pos_one = {x = 1136, y = 1243, z = 5}   
local pos_two = {x = 1137, y = 1243, z = 5}
local pos_three = {x = 929, y = 1239, z = 5}
local pos_four = {x = 930, y = 1239, z = 5}
 
--Variável que irá "verificar" a posição do jogador.
local check = 0
 
    if (param == "Lista") then
        local str = ""
        str = str .. "Locais disponíveis :\n\n"
        for name, pos in pairs(lugar) do
            str = str..name.."\n"
        end
 
        str = str .. ""
        doShowTextDialog(cid, 6579, str)
        return TRUE
    end
 
local a = lugar[param]
 
    if getThingPos(cid).x ~= pos_one.x or getThingPos(cid).y ~= pos_one.y or getThingPos(cid).z ~= pos_one.z then
        check = check + 1
    end
        
    if check == 1 then
        if getThingPos(cid).x ~= pos_two.x or getThingPos(cid).y ~= pos_two.y or getThingPos(cid).z ~= pos_two.z then
		check = check + 1
    end
		end
		
		if check == 2 then 
	if getThingPos(cid).x ~= pos_three.x or getThingPos(cid).y ~= pos_three.y or getThingPos(cid).z ~= pos_three.z then
		check = check + 1
    end
		end
	
		if check == 3 then
	if getThingPos(cid).x ~= pos_four.x or getThingPos(cid).y ~= pos_four.y or getThingPos(cid).z ~= pos_four.z then
	return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você só pode utilizar este comando à frente de um mastro.")	
	end
		end
    
    if not(a) then 
        doPlayerSendTextMessage(cid, 22, "Esta ilha não existe.")
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
        return TRUE
    elseif config.premium == true and isPremium(cid) == FALSE then
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas players Premium Accounts podem teleportar. Para comprar Premium Account acesse : \n www.???.com")
        return TRUE
    elseif config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você só pode teleportar dentro de Protection Zones. ")
        return TRUE
    elseif config.need_Item == true and getPlayerItemCount(cid,config.Item) < 1 then
        doPlayerSendCancel(cid,"Você precisa da " .. getItemNameById(config.Item) .. " para teleportar para " .. param .. " Island.")
        return TRUE
    elseif config.battle == true and getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE then
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode teleportar durante o estado de battle.")
        return TRUE
    elseif config.need_level == true and getPlayerLevel(cid) < a.level then
        doPlayerSendTextMessage(cid, 22, "Você não tem level suficiente. \n Você precisa ser Lv."..a.level.."+ para poder teleportar para " .. param .. " Island.")
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
        return TRUE
    end
 
    doTeleportThing(cid, a.pos)
    doSendMagicEffect(a.pos, CONST_ME_TELEPORT)
    doPlayerSendTextMessage(cid, 22, " Você foi teleportado para \n " .. param .. " Island.")
 
end
Editado por LbrS
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Try:

 

 

function onSay(cid, words, param)

local config = {
pz = true,
battle = true,
need_level = true,
premium = true,
need_Item = true
}

local lugar = {
["Centerya"] = {
pos = {x = 1137, y = 1243, z = 5},level = 8,itemid=2010,cant=1,remove=true},
["Deserya"] = {
pos = {x = 930, y = 1239, z = 5},level = 30,itemid=2010,cant=2,remove=false}
}

--Posições.
local pos_one = {x = 1136, y = 1243, z = 5}
local pos_two = {x = 1137, y = 1243, z = 5}
local pos_three = {x = 929, y = 1239, z = 5}
local pos_four = {x = 930, y = 1239, z = 5}

--Variável que irá "verificar" a posição do jogador.
local check = 0

if (param == "Lista") then
local str = ""
str = str .. "Locais disponíveis :\n\n"
for name, pos in pairs(lugar) do
str = str..name.."\n"
end

str = str .. ""
doShowTextDialog(cid, 6579, str)
return TRUE
end

local a = lugar[param]

if getThingPos(cid).x ~= pos_one.x or getThingPos(cid).y ~= pos_one.y or getThingPos(cid).z ~= pos_one.z then
check = check + 1
end

if check == 1 then
if getThingPos(cid).x ~= pos_two.x or getThingPos(cid).y ~= pos_two.y or getThingPos(cid).z ~= pos_two.z then
        check = check + 1
end
        end
        
        if check == 2 then
    if getThingPos(cid).x ~= pos_three.x or getThingPos(cid).y ~= pos_three.y or getThingPos(cid).z ~= pos_three.z then
        check = check + 1
end
        end
    
        if check == 3 then
    if getThingPos(cid).x ~= pos_four.x or getThingPos(cid).y ~= pos_four.y or getThingPos(cid).z ~= pos_four.z then
    return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você só pode utilizar este comando à frente de um mastro.")    
    end
        end

if not(a) then
doPlayerSendTextMessage(cid, 22, "Esta ilha não existe.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
return TRUE
elseif config.premium == true and isPremium(cid) == FALSE then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas players Premium Accounts podem teleportar. Para comprar Premium Account acesse : \n www.???.com")
return TRUE
elseif config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você só pode teleportar dentro de Protection Zones. ")
return TRUE
elseif config.need_Item == true and getPlayerItemCount(cid,a.Itemid) < a.cant then
doPlayerSendCancel(cid,"Você precisa da " .. getItemNameById(config.Item) .. " para teleportar para " .. param .. " Island.")
return TRUE
elseif config.battle == true and getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode teleportar durante o estado de battle.")
return TRUE
elseif config.need_level == true and getPlayerLevel(cid) < a.level then
doPlayerSendTextMessage(cid, 22, "Você não tem level suficiente. \n Você precisa ser Lv."..a.level.."+ para poder teleportar para " .. param .. " Island.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
return TRUE
end
 
if a.remove == true then
doPlayerRemoveItem(cid,a.itemid,a.cant)
end
doTeleportThing(cid, a.pos)
doSendMagicEffect(a.pos, CONST_ME_TELEPORT)
doPlayerSendTextMessage(cid, 22, " Você foi teleportado para \n " .. param .. " Island.")

end

 

 

In the table called "lugar", for each place of teleport, you have 3 new configurations:

 

* itemid = It's the id of the item you want to be needed to teleport.

* cant = It's the quantity of the item you want to be needed to teleport.

* remove = Turn true if you want the item to be removed or false if you don't.

 

Hope it works.

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

  • 0

Aqui:

 

 

function onSay(cid, words, param)
 
local config = {
    pz = true,
    battle = true,
    need_level = true,
    premium = true,
    need_Item = true, 
}
 
local lugar = {
["Centerya"] = { 
pos = {x = 1137, y = 1243, z = 5}, level = 8, item_id = xxx, item_count = 1},    --Sendo item_id o ID do item necessário, e item_count a quantidade.
["Deserya"] = { 
pos = {x = 930, y = 1239, z = 5}, level = 30, item_id = xxx, item_count = 1} 
}
 
--Posições.
local pos_one = {x = 1136, y = 1243, z = 5}   
local pos_two = {x = 1137, y = 1243, z = 5}
local pos_three = {x = 929, y = 1239, z = 5}
local pos_four = {x = 930, y = 1239, z = 5}
 
--Variável que irá "verificar" a posição do jogador.
local check = 0
 
    if (param == "Lista") then
        local str = ""
        str = str .. "Locais disponíveis :\n\n"
        for name, pos in pairs(lugar) do
            str = str..name.."\n"
        end
 
        str = str .. ""
        doShowTextDialog(cid, 6579, str)
        return TRUE
    end
 
local a = lugar[param]
 
    if getThingPos(cid).x ~= pos_one.x or getThingPos(cid).y ~= pos_one.y or getThingPos(cid).z ~= pos_one.z then
        check = check + 1
    end
        
    if check == 1 then
        if getThingPos(cid).x ~= pos_two.x or getThingPos(cid).y ~= pos_two.y or getThingPos(cid).z ~= pos_two.z then
            check = check + 1
        end
    end
 
    if check == 2 then 
        if getThingPos(cid).x ~= pos_three.x or getThingPos(cid).y ~= pos_three.y or getThingPos(cid).z ~= pos_three.z then
            check = check + 1
        end
    end
 
    if check == 3 then
        if getThingPos(cid).x ~= pos_four.x or getThingPos(cid).y ~= pos_four.y or getThingPos(cid).z ~= pos_four.z then
            return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você só pode utilizar este comando à frente de um mastro.")
        end
    end
    
    if not(a) then 
        doPlayerSendTextMessage(cid, 22, "Esta ilha não existe.")
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
        return TRUE
    elseif config.premium == true and isPremium(cid) == FALSE then
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas players Premium Accounts podem teleportar. Para comprar Premium Account acesse : \n www.???.com")
        return TRUE
    elseif config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você só pode teleportar dentro de Protection Zones. ")
        return TRUE
    elseif config.need_Item == true and getPlayerItemCount(cid, a.item_id) < a.item_count then
        return doPlayerSendCancel(cid, "Você precisa de "..a.item_count.." "..getItemNameById(a.item_id).." para poder se teleportar para "..param..".")
    elseif config.battle == true and getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE then
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode teleportar durante o estado de battle.")
        return TRUE
    elseif config.need_level == true and getPlayerLevel(cid) < a.level then
        doPlayerSendTextMessage(cid, 22, "Você não tem level suficiente. \n Você precisa ser Lv."..a.level.."+ para poder teleportar para " .. param .. " Island.")
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)
        return TRUE
    end
 
    doTeleportThing(cid, a.pos)
    doSendMagicEffect(a.pos, CONST_ME_TELEPORT)
    doPlayerSendTextMessage(cid, 22, " Você foi teleportado para \n " .. param .. " Island.")
 
end

 

 

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

  • 0

My fault, error with a capital letter. Search for this:

getPlayerItemCount(cid,a.Itemid)

And change for this:

getPlayerItemCount(cid,a.itemid)
Editado por Dantarrixx
Link para o comentário
Compartilhar em outros sites

  • 0

Dantarrixx, Now your code worked well.

Thank you! (My REP's over. Tomorrow grant you and sorry for my bad english, hehe.)

~
Novamente alertando.
Dúvida sanada.
Podem mover.
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...