✅Items click- montura, addon, outfit

Darkarcangel

Miembro
LV
18
 
Awards
15
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.
 
Solución
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...

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
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.
 

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
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:

Código Lua:
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()
Código:
 
Última edición:

Darkarcangel

Miembro
LV
18
 
Awards
15
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:

Código:
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).
 

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
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.
 

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
Si, siempre addon uno y luego addon 2, luego lo intenté viceversa y aun asi el segundo item que daba click no desaparecia.
Tiene bien el elemento item:remove() que permite remover el item, prueba sino: item:remove(1)
 

Darkarcangel

Miembro
LV
18
 
Awards
15
Tiene bien el elemento item:remove() que permite remover el item, prueba sino: item:remove(1)
Código Lua:
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
 
Última edición por un moderador:

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
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.
 

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
me pasa lo mismo sabes como solucionarlo?

Prueba de esta forma:

Código Lua:
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()
 

pachisinho

Miembro
LV
7
 
Awards
4
Prueba de esta forma:

Código Lua:
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

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
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,

Código Lua:
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()
 
Arriba