✅Items click- montura, addon, outfit

Darkarcangel

Member
Messages
34
Points
136
Buenas tardes, quisiera saber si alguien sabe como darle un action a un items, por ejemplo hay items que si los looteas de bosses (como Final Judgement) al darle click deberia darte un addon u otros una montura (como Spectral scrap of cloth o cualquier huevo de GT), desconozco si es tema de action o hay que hacer un lua o es tema de tener todos los Storages de las quests completos para que funcionen, si me pudieran apoyar se los agradeceria.
 
Solution
local config = {
-- Citizen of Issavi
-- [13196] = {female = 1244, male = 1243, effect = CONST_ME_GREEN_RINGS},
[37002] = {female = 1387, male = 1386, addon = 1, effect = CONST_ME_GREEN_RINGS},
[37003] = {female = 1387, male = 1386, addon = 2, effect = CONST_ME_GREEN_RINGS},
}

local addons = Action()

function addons.onUse(player, item, fromPosition, target, toPosition, isHotkey)
local useItem = config[item.itemid]
if not useItem then
return true
end

local looktype = player:getSex() == PLAYERSEX_FEMALE and useItem.female or useItem.male

if useItem.addon then
if not player:isPremium()
or not player:hasOutfit(looktype)
or player:hasOutfit(looktype...
Buenas tardes, quisiera saber si alguien sabe como darle un action a un items, por ejemplo hay items que si los looteas de bosses (como Final Judgement) al darle click deberia darte un addon u otros una montura (como Spectral scrap of cloth o cualquier huevo de GT), desconozco si es tema de action o hay que hacer un lua o es tema de tener todos los Storages de las quests completos para que funcionen, si me pudieran apoyar se los agradeceria.

Hola,

Para la mount, puede ver este script,

Para el outfit es similar, lo miraré, no estoy en casa y te lo pasaré, pero el sistema que tengo no da el outfit entero, sino que el base+outfit1+outfit2 por separado.
 
Buenas tardes, quisiera saber si alguien sabe como darle un action a un items, por ejemplo hay items que si los looteas de bosses (como Final Judgement) al darle click deberia darte un addon u otros una montura (como Spectral scrap of cloth o cualquier huevo de GT), desconozco si es tema de action o hay que hacer un lua o es tema de tener todos los Storages de las quests completos para que funcionen, si me pudieran apoyar se los agradeceria.

Ejemplo outfit:

Este outfit se basa en el Hand of The Inquisition Outfit,
Por lo cual 13196 = Addon de base
36573 = Outfit 1
36572 = Outfit 2

Entonces este outfit necessitas 3 items, en el caso fué pues recreado como en el RL, facilmente el Cowl te daba el outfit 1 y la dagger el outfit 2, para el outfit de base pues cogimos un powder que no se usa en tibia:

JavaScript:
local config = {
    [13196] = {female = 1244, male = 1243, effect = CONST_ME_GREEN_RINGS},
    [36573] = {female = 1244, male = 1243, addon = 1, effect = CONST_ME_GREEN_RINGS},
    [36572] = {female = 1244, male = 1243, addon = 2, effect = CONST_ME_GREEN_RINGS},
}

local addons = Action()

function addons.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local useItem = config[item.itemid]
    if not useItem then
        return true
    end

    local looktype = player:getSex() == PLAYERSEX_FEMALE and useItem.female or useItem.male

    if useItem.addon then
        if not player:isPremium()
                or not player:hasOutfit(looktype)
                or player:hasOutfit(looktype, useItem.addon) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account, lack the base outfit or already own this outfit part.')
            return true
        end

        player:addOutfitAddon(useItem.female, useItem.addon)
        player:addOutfitAddon(useItem.male, useItem.addon)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        if player:hasOutfit(looktype, 3) then
            player:addAchievement(useItem.achievement)
        end
        item:remove()
    else
        if not player:isPremium() or player:hasOutfit(looktype) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account or already own this outfit part.')
            return true
        end

        player:addOutfit(useItem.female)
        player:addOutfit(useItem.male)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        item:remove()
    end
    return true
end

addons:id(36573, 36572, 13196)
addons:register()
Code:
 
Last edited:
Ejemplo outfit:

Este outfit se basa en el Hand of The Inquisition Outfit,
Por lo cual 13196 = Addon de base
36573 = Outfit 1
36572 = Outfit 2

Entonces este outfit necessitas 3 items, en el caso fué pues recreado como en el RL, facilmente el Cowl te daba el outfit 1 y la dagger el outfit 2, para el outfit de base pues cogimos un powder que no se usa en tibia:

Code:
local config = {
    -- soil guardian
    [13196] = {female = 1244, male = 1243, effect = CONST_ME_GREEN_RINGS},
    [36573] = {female = 1244, male = 1243, addon = 1, effect = CONST_ME_GREEN_RINGS},
    [36572] = {female = 1244, male = 1243, addon = 2, effect = CONST_ME_GREEN_RINGS},
}

local addons = Action()

function addons.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local useItem = config[item.itemid]
    if not useItem then
        return true
    end

    local looktype = player:getSex() == PLAYERSEX_FEMALE and useItem.female or useItem.male

    if useItem.addon then
        if not player:isPremium()
                or not player:hasOutfit(looktype)
                or player:hasOutfit(looktype, useItem.addon) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account, lack the base outfit or already own this outfit part.')
            return true
        end

        player:addOutfitAddon(useItem.female, useItem.addon)
        player:addOutfitAddon(useItem.male, useItem.addon)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        if player:hasOutfit(looktype, 3) then
            player:addAchievement(useItem.achievement)
        end
        item:remove()
    else
        if not player:isPremium() or player:hasOutfit(looktype) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account or already own this outfit part.')
            return true
        end

        player:addOutfit(useItem.female)
        player:addOutfit(useItem.male)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        item:remove()
    end
    return true
end

addons:id(36573, 36572, 13196)
addons:register()
Buenas noches alex, estaba usando tu codigo y me di cuenta que al usar los items del addon solo 1 desaparecia y el otro no, no se si pudieras ayudarme a averiguar el problema, en cuestion del outfit ya los habilite todos asi gratis, asi que lo unico que cambie del codigo fue borrar la parte del item del outfit (bueno le puse -- mas bien).
 
Buenas noches alex, estaba usando tu codigo y me di cuenta que al usar los items del addon solo 1 desaparecia y el otro no, no se si pudieras ayudarme a averiguar el problema, en cuestion del outfit ya los habilite todos asi gratis, asi que lo unico que cambie del codigo fue borrar la parte del item del outfit (bueno le puse -- mas bien).

En el orden los usaste?
Si no sé cómo registrar a que verifique que, si usas el segundo, y no has usado el primero, no puedas usarlo.
 
Tiene bien el elemento item:remove() que permite remover el item, prueba sino: item:remove(1)
JavaScript:
local config = {
    -- Citizen of Issavi
   -- [13196] = {female = 1244, male = 1243, effect = CONST_ME_GREEN_RINGS},
    [37002] = {female = 1387, male = 1386, addon = 1, effect = CONST_ME_GREEN_RINGS},
    [37003] = {female = 1387, male = 1386, addon = 2, effect = CONST_ME_GREEN_RINGS},
}

local addons = Action()

function addons.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local useItem = config[item.itemid]
    if not useItem then
        return true
    end

    local looktype = player:getSex() == PLAYERSEX_FEMALE and useItem.female or useItem.male

    if useItem.addon then
        if not player:isPremium()
                or not player:hasOutfit(looktype)
                or player:hasOutfit(looktype, useItem.addon) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account, lack the base outfit or already own this outfit part.')
            return true
        end

        player:addOutfitAddon(useItem.female, useItem.addon)
        player:addOutfitAddon(useItem.male, useItem.addon)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        if player:hasOutfit(looktype, 3) then
            player:addAchievement(useItem.achievement)
        end
        item:remove()
    else
        if not player:isPremium() or player:hasOutfit(looktype) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account or already own this outfit part.')
            return true
        end

        player:addOutfit(useItem.female)
        player:addOutfit(useItem.male)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        item:remove()
    end
    return true
end

addons:id(37002, 37003)
addons:register()

Este es el codigo que utilizo, todos son iguales solo cambiando el ID del addon y los items
 
Last edited by a moderator:
local config = {
-- Citizen of Issavi
-- [13196] = {female = 1244, male = 1243, effect = CONST_ME_GREEN_RINGS},
[37002] = {female = 1387, male = 1386, addon = 1, effect = CONST_ME_GREEN_RINGS},
[37003] = {female = 1387, male = 1386, addon = 2, effect = CONST_ME_GREEN_RINGS},
}

local addons = Action()

function addons.onUse(player, item, fromPosition, target, toPosition, isHotkey)
local useItem = config[item.itemid]
if not useItem then
return true
end

local looktype = player:getSex() == PLAYERSEX_FEMALE and useItem.female or useItem.male

if useItem.addon then
if not player:isPremium()
or not player:hasOutfit(looktype)
or player:hasOutfit(looktype, useItem.addon) then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account, lack the base outfit or already own this outfit part.')
return true
end

player:addOutfitAddon(useItem.female, useItem.addon)
player:addOutfitAddon(useItem.male, useItem.addon)
player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
if player:hasOutfit(looktype, 3) then
player:addAchievement(useItem.achievement)
end
item:remove()
else
if not player:isPremium() or player:hasOutfit(looktype) then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account or already own this outfit part.')
return true
end

player:addOutfit(useItem.female)
player:addOutfit(useItem.male)
player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
item:remove()
end
return true
end

addons:id(37002, 37003)
addons:register()

Este es el codigo que utilizo, todos son iguales solo cambiando el ID del addon y los items

Prueba con el item:remove(1). Haber si te funciona, del caso contrario, no sabría decirte.
 
Solution
me pasa lo mismo sabes como solucionarlo?

Prueba de esta forma:

JavaScript:
local config = {
    [13196] = {female = 1244, male = 1243, effect = CONST_ME_GREEN_RINGS},
    [36573] = {female = 1244, male = 1243, addon = 1, effect = CONST_ME_GREEN_RINGS},
    [36572] = {female = 1244, male = 1243, addon = 2, effect = CONST_ME_GREEN_RINGS},
}

local addons = Action()

function addons.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local useItem = config[item.itemid]
    if not useItem then
        return true
    end

    local looktype = player:getSex() == PLAYERSEX_FEMALE and useItem.female or useItem.male

    if useItem.addon then
        if not player:isPremium() or not player:hasOutfit(looktype) or player:hasOutfit(looktype, useItem.addon) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account, lack the base outfit or already own this outfit part.')
            return true
        end

        player:addOutfitAddon(useItem.female, useItem.addon)
        player:addOutfitAddon(useItem.male, useItem.addon)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        if player:hasOutfit(looktype, 3) then
            player:addAchievement(useItem.achievement)
        end
        local itemToRemove = Item(item.itemid)
        itemToRemove:remove()
    else
        if not player:isPremium() or player:hasOutfit(looktype) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account or already own this outfit part.')
            return true
        end

        player:addOutfit(useItem.female)
        player:addOutfit(useItem.male)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        local itemToRemove = Item(item.itemid)
        itemToRemove:remove()
    end
    return true
end

addons:itemid(36573, 36572, 13196)
addons:register()
 
Prueba de esta forma:

JavaScript:
local config = {
    [13196] = {female = 1244, male = 1243, effect = CONST_ME_GREEN_RINGS},
    [36573] = {female = 1244, male = 1243, addon = 1, effect = CONST_ME_GREEN_RINGS},
    [36572] = {female = 1244, male = 1243, addon = 2, effect = CONST_ME_GREEN_RINGS},
}

local addons = Action()

function addons.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local useItem = config[item.itemid]
    if not useItem then
        return true
    end

    local looktype = player:getSex() == PLAYERSEX_FEMALE and useItem.female or useItem.male

    if useItem.addon then
        if not player:isPremium() or not player:hasOutfit(looktype) or player:hasOutfit(looktype, useItem.addon) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account, lack the base outfit or already own this outfit part.')
            return true
        end

        player:addOutfitAddon(useItem.female, useItem.addon)
        player:addOutfitAddon(useItem.male, useItem.addon)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        if player:hasOutfit(looktype, 3) then
            player:addAchievement(useItem.achievement)
        end
        local itemToRemove = Item(item.itemid)
        itemToRemove:remove()
    else
        if not player:isPremium() or player:hasOutfit(looktype) then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'You own no premium account or already own this outfit part.')
            return true
        end

        player:addOutfit(useItem.female)
        player:addOutfit(useItem.male)
        player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
        local itemToRemove = Item(item.itemid)
        itemToRemove:remove()
    end
    return true
end

addons:itemid(36573, 36572, 13196)
addons:register()
Alex logre solucionarlo... El problema esta en el achievment. Como ya tiene registrado o no encuentra el achievment no lo toma como si el item es usado y por eso no desaparece.
Sabes de algun script en el que cuando mates un boss por primera vez te entregue un outfit? como por ejemplo el boss final de soul war que entregue el revenant outfit.
te agradeceria bastante
 
Alex logre solucionarlo... El problema esta en el achievment. Como ya tiene registrado o no encuentra el achievment no lo toma como si el item es usado y por eso no desaparece.
Sabes de algun script en el que cuando mates un boss por primera vez te entregue un outfit? como por ejemplo el boss final de soul war que entregue el revenant outfit.
te agradeceria bastante
El achievement, no deberia causar el problema de remover, esta dentro de un IF y se checa en el script, pero no hace parte, es decir no es como si fuera al principio y bloqueara la resta del script y no removiera el item, es raro.

Mandé uno por discord, al matar funciona con un function onDeath, y ahi dentro se pone el codigo, registrar si el player tiene el outfit y sino que no lo dé y mande un mensaje, asi bien detectando el monstruo.

Prueba este haber,

JavaScript:
local ferumbrasDead = CreatureEvent("FerumbrasDeath")

local bossDeath = "Ferumbras"

function ferumbrasDead.onDeath(player, monster, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified)   
    local outfitId = 133
    if monster:getName() == bossDeath then
    if not player:hasOutfit(outfitId) then
         player:AddOutfit(outfitId)
         player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Congratulations! You have received outfit ".. outfitId .." as a reward for defeating Ferumbras!")
      else
         player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have already received outfit ".. outfitId .." for defeating Ferumbras.")
      end
    end
    return true
end

ferumbrasDead:register()
 

Tibia Server Lists

#1 FEATURED US Ultron OT 1,519 / 5,000Online EXPStages PROTO8.6 ENGINEUltron OT RANK PTS6.0 +100% VOTES0 #2 FEATURED US Nefera 137 / 0Online EXPx1 PROTO15.20 ENGINECrystal Server RANK PTS5.2 +100% VOTES0 #3 FEATURED ES Deixis 1 / 0Online EXPStages PROTO1098 ENGINETFS RANK PTS3.8 +100% VOTES1 #4 FEATURED ES Maeli 3 / 150Online EXPx10 PROTO10.98 ENGINETFS 1.4.2 RANK PTS3.7 +100% VOTES0 #5 MX Marlboro War 31 / 300Online EXP999 PROTO8.6 ENGINETFS 0.3.7 RANK PTS5.5 -32% VOTES0 #6 BR Tibinha YurOts 15 / 150Online EXPStages PROTO7.4 ENGINEYurOTS 1.5 RANK PTS5.2 -16% VOTES0 #7 BR Exordion Legacy 57 / 2,000Online EXPx2 PROTO7.72 ENGINEExordion RANK PTS4.9 +100% VOTES0 #8 US Halera 3 / 0Online EXPStages PROTO10.98 ENGINETFS 1.4.2 RANK PTS4.9 -84% VOTES0 #9 PL Lubelski 8 / 1,000Online EXP200 PROTO7.6 ENGINELubelskiOTS 2.56.0 RANK PTS4.6 -15% VOTES0 #10 ES JustRL FreeTC 1530 32 / 250Online EXPx2 PROTO15.30 ENGINECrystal Server RANK PTS4.4 +100% VOTES0 #11 DE DBU Online 0 / 400Online EXP11 PROTO8.6 ENGINETFS 1.0 RANK PTS4.3 +100% VOTES0 #12 PL ReWar 0 / 2,000Online EXPcustom PROTO8.6 ENGINEOther RANK PTS4.3 0% VOTES0 #13 PL Velesta 0 / 1,000Offline EXP20 PROTO8.0 ENGINETFS 1.4.2 RANK PTS4.3 -99% VOTES0 #14 ES Farlia Global 2026 0 / 333Offline EXPx5 PROTO15.25 ENGINEFarliaServ 1.525 RANK PTS3.9 -23% VOTES0 #15 SE MortalisOT Custom 0 / 500Offline EXP100x -1.2x PROTO10.98 ENGINEMortalisOT V1 RANK PTS3.8 +100% VOTES0 #16 US BerethaOnline 1 / 2,000Online EXPStages PROTO10.98 ENGINETFS RANK PTS3.6 +100% VOTES0 #17 US Rommania 0 / 500Online EXPstages, x10 PROTO7.4 ENGINETFS 0.4 RANK PTS3.6 +100% VOTES0
Top