Ir para conteúdo
  • Cadastre-se

Posts Recomendados

.Qual servidor ou website você utiliza como base? 

TFS 0.4

Qual o motivo deste tópico? 

Bom pessoal, a algumas semanas atras eu joguei um servidor que havia sistema de imbuimento sendo 8.60, no servidor se utilizava a spellwand para encantar as armas, os comandos eram dado no canal Imbuiment... Gostaria de saber se alguém teria como disponibilizar algum sistema de imbuimento, já procurei pra caramba aqui no fórum mas tudo que encontro é pra versões acima da que eu uso.

 

Link para o post
Compartilhar em outros sites

Tenho esse codigo mas nao sei se funciona no TFS 0.4 ou como e onde coloca-lo. Dando uma olhada nesse codigo, percebi que era os mesmos atributos e formas de colocar o imbuement que o server que comentei acima.

 


Imbuement.lua

Spoiler

--[[
    1~3 => Element Type
    4~6 => Total Time (segundos - 20 h)
    7~9 => Time Passed (seconds)
]]

--[[ Icon List --
    0 = NONE
    1 ~ 3   = Critical
    4 ~ 6   = Death
    7 ~ 9   = Earth
    10 ~ 12 = Energy
    13 ~ 15 = Fire
    16 ~ 18 = Holy
    19 ~ 21 = Ice
    22 ~ 24 = Fire (grey | not used)
    25 ~ 27 = Shielding (grey | not used)
    28 ~ 30 = Reduction Earth
    31 ~ 33 = Reduction Energy
    34 ~ 36 = Reduction Fire
    37 ~ 39 = Reduction Holy
    40 ~ 42 = Reduction Ice
    43 ~ 45 = Shielding (white | not used)
    46 ~ 48 = Life Leech
    49 ~ 51 = Mana Leech
    52 ~ 54 = Axe Fighting
    55 ~ 57 = Club Fighting
    58 ~ 60 = Distance Fighting
    61 ~ 63 = Fist Fighting
    64 ~ 66 = Magic Level
    67 ~ 69 = Shielding Fighting
    70 ~ 72 = Sword Fighting
    73 ~ 75 = Speed
]]

ImbuingSystem = {
    Developer = "Charles (Cjaker)",
    Version = "1.0",
    LastUpdate = "24/05/2017 - 03:50 (AM)"
}

local Imbuements = {
    {
        Name = "Scorch",
        Category = "Elemental Damage (Fire)",
        Type = "firedamage",
        IconID = 13,
        Description = "Converts % of the physical damage to fire damage.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {10, 25, 50},
        Weapons = {"axe", "club", "sword"},
        Items = {{10553, 25}, {5920, 5}, {5954, 5}}
    },
    {
        Name = "Venom",
        Category = "Elemental Damage (Earth)",
        Type = "earthdamage",
        IconID = 7,
        Description = "Converts % of the physical damage to earth damage.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {10, 25, 50},
        Weapons = {"axe", "club", "sword"},
        Items = {{10603, 25}, {10557, 5}, {23565, 5}}
    },
    {
        Name = "Frost",
        Category = "Elemental Damage (Ice)",
        Type = "icedamage",
        IconID = 19,
        Description = "Converts % of the physical damage to ice damage.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {10, 25, 50},
        Weapons = {"axe", "club", "sword"},
        Items = {{10567, 25}, {10578, 20}, {24170, 1}}
    },
    {
        Name = "Electrify",
        Category = "Elemental Damage (Energy)",
        Type = "energydamage",
        IconID = 10,
        Description = "Converts % of the physical damage to energy damage.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {10, 25, 50},
        Weapons = {"axe", "club", "sword"},
        Items = {{21310, 25}, {24631, 5}, {26164, 1}}
    },
    {
        Name = "Reap",
        Category = "Elemental Damage (Death)",
        Type = "deathdamage",
        IconID = 4,
        Description = "Converts % of the physical damage to death damage.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {10, 25, 50},
        Weapons = {"axe", "club", "sword"},
        Items = {{12440, 25}, {10564, 20}, {11337, 5}}
    },
    {
        Name = "Vampirism",
        Category = "Life Leech",
        Type = "hitpointsleech",
        IconID = 46,
        Description = "converts % of damage to HP with a chance of 100%.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {5, 10, 25},
        Weapons = {"axe", "club", "sword", "wand", "rod", "bow", "armor"},
        Items = {{10602, 25}, {10550, 15}, {10580, 5}}
    },
    {
        Name = "Void",
        Category = "Mana Leech",
        Type = "manapointsleech",
        IconID = 49,
        Description = "converts % of damage to MP with a chance of 100%.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 5, 8},
        Weapons = {"axe", "club", "sword", "wand", "rod", "bow", "helmet"},
        Items = {{12448, 25}, {22534, 25}, {25386, 5}}
    },
    {
        Name = "Strike",
        Category = "Critical Hit",
        Type = "criticaldamage",
        IconID = 1,
        Description = "raises crit hit damage by % and crit hit chance by 10%.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {15, 25, 50},
        Weapons = {"axe", "club", "sword", "bow"},
        Items = {{12400, 20}, {11228, 25}, {25384, 5}}
    },
    {
        Name = "Lich Shroud",
        Category = "Death Damage",
        Type = "absorbPercentDeath",
        IconID = 25,
        Description = "reduces death damage by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 8, 15},
        Weapons = {"armor", "shield"},
        Items = {{12422, 25}, {24663, 20}, {10577, 5}}
    },
    {
        Name = "Snake Skin",
        Category = "Eart Damage",
        Type = "absorbPercentEarth",
        IconID = 28,
        Description = "reduces earth damage by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 8, 15},
        Weapons = {"armor", "shield"},
        Items = {{20103, 25}, {10611, 20}, {12658, 10}}
    },
    {
        Name = "Hide Dragon",
        Category = "Fire Damage",
        Type = "absorbPercentFire",
        IconID = 34,
        Description = "reduces fire damage by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 8, 15},
        Weapons = {"armor", "shield"},
        Items = {{5877, 25}, {18425, 10}, {12614, 5}}
    },
    {
        Name = "Quara Scale",
        Category = "Ice Damage",
        Type = "absorbPercentIce",
        IconID = 40,
        Description = "reduces ice damage by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 8, 15},
        Weapons = {"armor", "shield"},
        Items = {{11212, 25}, {11224, 15}, {15425, 10}}
    },
    {
        Name = "Cloud Fabric",
        Category = "Energy Damage",
        Type = "absorbPercentEnergy",
        IconID = 31,
        Description = "reduces energy damage by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 8, 15},
        Weapons = {"armor", "shield"},
        Items = {{10561, 25}, {15482, 15}, {10582, 10}}
    },
    {
        Name = "Demon Presence",
        Category = "Holy Damage",
        Type = "absorbPercentHoly",
        IconID = 37,
        Description = "reduces holy damage by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 8, 15},
        Weapons = {"armor", "shield"},
        Items = {{10556, 25}, {10555, 25}, {11221, 20}}
    },
    {
        Name = "Swiftness",
        Category = "Increase Speed",
        Type = "speed",
        IconID = 73,
        Description = "raises walking speed by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {10, 15, 20},
        Weapons = {"boots"},
        Items = {{19738, 15}, {11219, 25}, {15484, 20}}
    },
    {
        Name = "Chop",
        Category = "Increase Axe Fighting",
        Type = "skillAxe",
        IconID = 52,
        Description = "raises axe fighting skill by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {1, 2, 4},
        Weapons = {"axe", "helmet"},
        Items = {{11113, 20}, {12403, 25}, {23571, 20}}
    },
    {
        Name = "Slash",
        Category = "Increase Sword Fighting",
        Type = "skillSword",
        IconID = 70,
        Description = "raises sword fighting skill by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {1, 2, 4},
        Weapons = {"sword", "helmet"},
        Items = {{10608, 25}, {23573, 25}, {10571, 5}}
    },
    {
        Name = "Bash",
        Category = "Increase Club Fighting",
        Type = "skillClub",
        IconID = 52,
        Description = "raises club fighting skill by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {1, 2, 4},
        Weapons = {"club", "helmet"},
        Items = {{10574, 20}, {24845, 15}, {11322, 10}}
    },
    {
        Name = "Precision",
        Category = "Increase Distance Fighting",
        Type = "skillDist",
        IconID = 58,
        Description = "raises distance fighting skill by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {1, 2, 4},
        Weapons = {"bow", "helmet"},
        Items = {{12420, 25}, {21311, 20}, {11215, 10}}
    },
    {
        Name = "Blockade",
        Category = "Increase Shielding",
        Type = "skillShield",
        IconID = 67,
        Description = "raises shielding skill by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {1, 2, 4},
        Weapons = {"shield", "helmet"},
        Items = {{10558, 20}, {12659, 25}, {22533, 25}}
    },
    {
        Name = "Epiphany",
        Category = "Increase Magic Level",
        Type = "magiclevelpoints",
        IconID = 64,
        Description = "raises magic level by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {1, 2, 4},
        Weapons = {"wand", "rod", "helmetmage"},
        Items = {{10552, 25}, {12408, 15}, {11226, 15}}
    },
    {
        Name = "Featherweight",
        Category = "Increase Capacity",
        Type = "capacity",
        IconID = 64,
        Description = "raises capacity by %.",
        Levels = {"Basic", "Intricate", "Powerful"},
        LevelsPercent = {3, 8, 15},
        Weapons = {"backpack"},
        Items = {{28998, 25}, {29006, 10}, {22539, 5}}
    }
}

local Weapons = {
    ["armor"] = {30656, 21692, 2500, 2656, 2464, 2487, 2494, 15407, 2492, 2503, 12607, 2505, 2466, 23538, 10296, 2476, 3968, 2472, 7463, 8888, 23537, 2486, 15406, 8891, 18404},
    ["shield"] = {30658, 2528, 2537, 2518, 15491, 2534, 2535, 2536, 2542, 2539, 2519, 2520, 25382, 25414, 15411, 2516, 2514, 2522, 2533, 2531, 21707, 10289, 6433, 6391, 7460, 2524, 15413, 21697, 3974, 12644, 10297, 10294, 2509, 10364, 15453, 25411, 2217, 2175, 8900, 8901, 29003, 22422, 22423, 22424},
    ["boots"] = {2358, 9931, 3982, 15410, 2646, 24637, 5462, 18406, 2645, 25412, 21708},
    ["helmet"] = {30655, 2499, 2139, 3972, 2458, 2491, 2497, 2493, 2502, 12645, 7458, 2471, 10298, 10299, 20132, 2662, 10291, 2498, 24848, 5741, 25410, 2475, 11302},
    ["helmetmage"] = {10016, 2323, 12630, 11368, 8820, 10570, 9778},
    ["bow"] = {30583, 30584, 8855, 7438, 15643, 21696, 10295, 18454, 25522, 8857, 8854, 22416, 22417, 22418, 8850, 8851, 8852, 8853, 2455, 8849, 25523, 16111, 21690, 22419, 22420, 22421, 25885, 25886, 25943, 25947, 25983, 25987},
    ["backpack"] = {31340, 1988, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3940, 5801, 3960, 5926, 5949, 7342, 9774, 10518, 10519, 10521, 10522, 11119, 11241, 11243, 11244, 11263, 15645, 15646, 16007, 18393, 18394, 21475, 22696, 23666, 23816, 24740, 26181, 27061, 27063},
    ["wand"] = {30585, 8920, 8921, 8922, 2191, 29006, 29004, 25887, 25951, 25991},
    ["rod"] = {30586, 8910, 8911, 24839, 29006, 29004, 25888, 25955, 25995},
    ["axe"] = {30579, 30580, 2429, 2454, 2426, 2427, 2414, 2415, 2443, 7380, 7389, 11323, 7455, 2447, 7412, 8926, 7419, 7453, 2430, 2435, 3962, 15451, 7434, 7435, 6553, 15492, 7456, 8925, 18451, 2431, 8924, 25931, 11305, 25383, 22404, 22405, 22407, 22408, 22409, 25881, 25882, 25927, 25931, 25967, 25971},
    ["club"] = {30581, 30582, 2391, 2423, 7415, 2445, 7424, 2452, 2444, 7426, 7414, 7452, 7429, 7421, 15414, 7410, 15647, 20093, 7430, 7431, 23543, 2453, 8929, 12648, 7423, 2436, 2424, 7451, 7437, 2421, 8928, 18452, 25418, 22410, 22411, 22412, 22413, 22414, 22415, 25883, 25884, 25935, 25939},
    ["sword"] = {30577, 30578, 30659, 7407, 2393, 2383, 7382, 7383, 7384, 7385, 7403, 2413, 7405, 7406, 7391, 7392, 11309, 12613, 7417, 2376, 2400, 7404, 7402, 12649, 2438, 8930, 2451, 11395, 2407, 7416, 11307, 7418, 6528, 7408, 18465, 8931, 22398, 22399, 22400, 22401, 22402, 22403, 25879, 25880, 25919, 25923, 25959, 25963}
}

local ImbuingInfo = {
    [1] = {Price = 5000, Protection = 10000, Percent = 90},
    [2] = {Price = 25000, Protection = 30000, Percent = 70},
    [3] = {Price = 100000, Protection = 50000, Percent = 50}
}

local imbuingShrineIds = {
    27728, 27729, 27850, 27851
}

local ImbuementElements = {
    "firedamage", "earthdamage", "energydamage", "deathdamage", "icedamage"
}

local ErrorMessages = {
    MESSAGEDIALOG_IMBUEMENT_ERROR = 1,
    MESSAGEDIALOG_IMBUEMENT_ROLL_FAILED = 2,
    MESSAGEDIALOG_IMBUING_STATION_NOT_FOUND = 3,
    MESSAGEDIALOG_CLEARING_CHARM_SUCCESS = 10,
    MESSAGEDIALOG_CLEARING_CHARM_ERROR = 11
}

local ClientPackets = {
    ApplyImbuement = 0xD5,
    ClearImbuement = 0xD6
}

function onRecvbyte(player, msg, byte)
    if (byte == ClientPackets.ApplyImbuement) then
        -- Apply Imbuement
        player:applyImbuement(msg)
    elseif (byte == ClientPackets.ClearImbuement) then
        -- Clear Imbuement
        player:clearImbuement(msg)
    end
end

local function tableContains(table, value)
    for i = 1, #table do
        if (table[i] == value) then
            return true
        end
    end

    return false
end

local function haveImbuingShrine(player)
    for x = -1, 1 do
        for y = -1, 1 do
            local posX, posY, posZ = player:getPosition().x+x, player:getPosition().y+y, player:getPosition().z
            local tile = Tile(posX, posY, posZ)
            if (tile) then
                for index, id in pairs(imbuingShrineIds) do
                    if tile:getItemById(id) then
                        return true
                    end
                end
            end
        end
    end

    return false
end

local function getEquipById(id)
    for i, v in pairs(Weapons) do
        if (tableContains(v, id)) then
            return i
        end
    end

    return nil
end

local function getImbuementEquip(equip)
    local tableReturn = {}
    for i = 1, #Imbuements do
        if (tableContains(Imbuements[i].Weapons, equip)) then
            tableReturn[#tableReturn+1] = Imbuements[i]
        end
    end

    return tableReturn
end

local function getActiveImbuement(item, slot)
    for i = 1, #Imbuements do
        for j = 1, 3 do
            local level = Imbuements[i].Levels[j]
            local enchant = item:getSpecialAttribute(slot)
            if (enchant and type(enchant) ~= 'number' and enchant:find(level) and enchant:find(Imbuements[i].Name)) then
                return Imbuements[i], j
            end
        end
    end

    return nil
end

local function getImbuementByIndex(index, id)
    local equip = getEquipById(id)
    local myImbuements = getImbuementEquip(equip)
    local tmpIndex = 0
    for i = 1, #myImbuements do
        for k = 1, 3 do
            tmpIndex = tmpIndex + 1
            if (index == tmpIndex) then
                return myImbuements[i], k
            end
        end
    end

    return nil
end

local function sendImbuementError(self, message, errorType)
    local msg = NetworkMessage()
    msg:addByte(0xED)
    msg:addByte(errorType or 0x01)
    msg:addString(message)
    msg:sendToPlayer(self)
end

local function mergeImbuementList(table1, table2)
    local newTable = {}
    for i, v in pairs(table1) do
        if (v.Name ~= table2.Name and not (tableContains(ImbuementElements, v.Type) and tableContains(ImbuementElements, table2.Type))) then
            newTable[#newTable+1] = v
        end
    end

    return newTable
end

function Player.applyImbuement(self, msg)
    if (not haveImbuingShrine(self)) then
        sendImbuementError(self, "An error ocurred, please reopen imbuement window.", ErrorMessages.MESSAGEDIALOG_IMBUEMENT_ERROR)
        return false
    end

    local item = lastItemImbuing[self:getGuid()]
    if not item then
        sendImbuementError(self, "Cannot find item, please contact an Administrator.", ErrorMessages.MESSAGEDIALOG_IMBUEMENT_ERROR)
        return false
    end

    local slot, choiceId, useProtection = msg:getByte(), msg:getU32(), msg:getByte()
    local myImbuements = getImbuementEquip(getEquipById(item:getId()))
    local imbuingLevel = 0
    local imbuementNow, index = nil, 0

    for i = 1, item:getType():getImbuingSlots() do
        existsImbuement, enchantLevel = getActiveImbuement(item, i)
        if existsImbuement then
            myImbuements = mergeImbuementList(myImbuements, existsImbuement)
        end
    end

    for k = 1, #myImbuements do
        for i = 1, 3 do
            index = index + 1
            if not imbuementNow and index == choiceId then
                imbuementNow = myImbuements[k]
            end
        end
    end

    for i = 3, index, 3 do
        if choiceId >= i-2 and choiceId <= i then
            imbuingLevel = math.abs((i - 2) - choiceId) + 1
            break
        end
    end

    if (not imbuementNow) then
        sendImbuementError(self, "Cannot find imbuement data, please contact an Administrator.", ErrorMessages.MESSAGEDIALOG_IMBUEMENT_ERROR)
        return false
    end

    local imbuingPrice = ImbuingInfo[imbuingLevel].Price
    if (useProtection == 1) then
        imbuingPrice = imbuingPrice + ImbuingInfo[imbuingLevel].Protection
    end

    if (not self:removeMoneyNpc(imbuingPrice)) then
        sendImbuementError(self, "You don't have enough money " ..imbuingPrice.. " gps.", ErrorMessages.MESSAGEDIALOG_IMBUEMENT_ROLL_FAILED)
        return false
    end

    slot = slot + 1
    if self:getAccountType() < 5 then
        for j = 1, imbuingLevel do
            local itemID, itemCount = imbuementNow.Items[j][1], imbuementNow.Items[j][2]
            if (self:getItemCount(itemID) < itemCount) then
                sendImbuementError(self, "You don't have all necessary items.", ErrorMessages.MESSAGEDIALOG_IMBUEMENT_ROLL_FAILED)
                return false
            end

            self:removeItem(itemID, itemCount)
        end
    end

    if (item:isActiveImbuement(slot+3)) then
        sendImbuementError(self, "An error ocurred, please reopen imbuement window.", ErrorMessages.MESSAGEDIALOG_IMBUEMENT_ERROR)
        return false
    end

    local applyChance = math.random(100)
    if (ImbuingInfo[imbuingLevel].Percent < applyChance and useProtection == 0) then
        sendImbuementError(self, "Item failed to apply imbuement.", ErrorMessages.MESSAGEDIALOG_IMBUEMENT_ROLL_FAILED)
        return false
    end

    item:setSpecialAttribute(slot, imbuementNow.Levels[imbuingLevel].. " " ..imbuementNow.Name, slot+3, 72000, slot+6, 0)
    self:openImbuementWindow(item)
end

function Player.clearImbuement(self, msg)
    if (not haveImbuingShrine(self)) then
        sendImbuementError(self, "Sorry, not possible.", ErrorMessages.MESSAGEDIALOG_CLEARING_CHARM_ERROR)
        return false
    end

    local item = lastItemImbuing[self:getGuid()]
    if (item == nil) then
        sendImbuementError(self, "Cannot find item, please send this message to a Administrator.", ErrorMessages.MESSAGEDIALOG_CLEARING_CHARM_ERROR)
        return false
    end

    local weaponSlot = msg:getByte()
    if (not weaponSlot) then
        sendImbuementError(self, "Sorry, not possible.", ErrorMessages.MESSAGEDIALOG_CLEARING_CHARM_ERROR)
        return false
    end

    weaponSlot = weaponSlot + 1
    if (not item:isActiveImbuement(weaponSlot + 3)) then
        sendImbuementError(self, "Sorry, not possible.", ErrorMessages.MESSAGEDIALOG_CLEARING_CHARM_ERROR)
        return false
    end

    if (not self:removeMoneyNpc(15000)) then
        sendImbuementError(self, "You don't have enough money 15000 gps.", ErrorMessages.MESSAGEDIALOG_CLEARING_CHARM_ERROR)
        return false
    end

    item:setSpecialAttribute(weaponSlot, 0, weaponSlot+3, 0, weaponSlot+6, 0)
    self:openImbuementWindow(item)
    sendImbuementError(self, "Item clean success!", ErrorMessages.MESSAGEDIALOG_CLEARING_CHARM_SUCCESS)
end

function Player.closeImbuementWindow(self)
    local msg = NetworkMessage()
    msg:addByte(0xEC)
    msg:sendToPlayer(self)
end

function Player.openImbuementWindow(self, item)
    -- if there is no item
    if not item then
    self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "This item is not imbuable.")
        return false
    end
    -- if there is a target but it isn't an item
    if not item:isItem() then
    self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "This item is not imbuable.")
        return false
    end
    -- if there is no Imbuement Equip
    if not item:isImbuementEquip() then
    self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "This item is not imbuable.")
        return false
    end

    for slot = 1, 10 do
        if (self:getSlotItem(slot) and self:getSlotItem(slot):getUniqueId() == item:getUniqueId()) then
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You cannot imbue an equipped item.")
            return false
        end
    end

    local msg = NetworkMessage()
    local itemID = item:getId()
    local equip = getEquipById(item:getId())
    local myImbuements = getImbuementEquip(equip)
    local imbuingSlots = item:getType():getImbuingSlots()
    lastItemImbuing[self:getGuid()] = item

    msg:addByte(0xEB)
    msg:addItemId(itemID) -- Item to put slots imbuement
    msg:addByte(imbuingSlots) -- Loop Exists Imbuement and slot (soon)

    for i = 1, imbuingSlots do
        if (item:isActiveImbuement(i+3)) then
            local existsImbuement, enchantLevel = getActiveImbuement(item, i)
            myImbuements = mergeImbuementList(myImbuements, existsImbuement)
            msg:addByte(0x01) -- No have imbuement (byte 1 need more packets)
            msg:addU32(900) -- Start Read Imbuement Data
            msg:addString(existsImbuement.Levels[enchantLevel].. " " ..existsImbuement.Name) -- Name Element

            local newDescription = existsImbuement.Description:gsub(" %%", " " ..existsImbuement.LevelsPercent[enchantLevel].."%%")
            msg:addString(newDescription.. "\nLasts for 20h 0min while fighting.") -- Description
            msg:addString(existsImbuement.Category) -- Type Imbuement
            msg:addU16(existsImbuement.IconID+(enchantLevel-1)) -- Icon ID (wtf?)
            msg:addU32(72000) -- duration in seconds (20hrs)
            msg:addByte(0x01) -- premium true
            msg:addByte(enchantLevel) -- Loop Length astral sources
            for j = 1, enchantLevel do
                local itemID, itemName = existsImbuement.Items[j][1], ItemType(existsImbuement.Items[j][1]):getName()
                msg:addItemId(itemID or 2160) -- Astral ID
                msg:addString(itemName or "") -- Astral Name
                msg:addU16(existsImbuement.Items[j][2]) -- Astral Necessary count
            end

            msg:addU32(ImbuingInfo[enchantLevel].Price)
            msg:addByte(ImbuingInfo[enchantLevel].Percent)
            msg:addU32(ImbuingInfo[enchantLevel].Protection) -- End Read Imbuement Data
            msg:addU32(item:getTimeImbuement(i+3)) -- Remaining Seconds
            msg:addU32(15000) -- Clear Cost Gold
        else
            msg:addByte(0x00)
        end
    end

    msg:addU16(#myImbuements*3) -- Loop Read Imbuement data
    local index = 0
    for k = 1, #myImbuements do
        for i = 1, 3 do
            index = index + 1
            msg:addU32(index) -- Start Read Imbuement Data
            msg:addString(myImbuements[k].Levels[i].. " " ..myImbuements[k].Name) -- Name Element

            local newDescription = myImbuements[k].Description:gsub(" %%", " " ..myImbuements[k].LevelsPercent[i].."%%")
            msg:addString(newDescription.. "\nLasts for 20h 0min while fighting.") -- Description
            msg:addString(myImbuements[k].Category) -- Type Imbuement
            msg:addU16(1) -- Icon ID (wtf?)
            msg:addU32(72000) -- duration in seconds (20hrs)
            if (i > 1) then
                msg:addByte(0x01) -- premium true
            else
                msg:addByte(0x00) -- premium false
            end

            msg:addByte(i) -- Loop Length astral sources
            for j = 1, i do
                local itemID, itemName = myImbuements[k].Items[j][1], ItemType(myImbuements[k].Items[j][1]):getName()
                msg:addItemId(itemID or 2160) -- Astral ID
                msg:addString(itemName or "") -- Astral Name
                msg:addU16(myImbuements[k].Items[j][2]) -- Astral Necessary count
            end

            msg:addU32(ImbuingInfo[i].Price)
            msg:addByte(ImbuingInfo[i].Percent)
            msg:addU32(ImbuingInfo[i].Protection) -- End Read Imbuement Data
        end
    end

    msg:addU32(#myImbuements*3)
    for k = 1, #myImbuements do
        for j = 1, 3 do
            msg:addItemId(myImbuements[k].Items[j][1])
            if self:getAccountType() < 5 then
                msg:addU16(self:getItemCount(myImbuements[k].Items[j][1]))
            else
                msg:addU16(999)
            end
        end
    end

    self:sendResource("bank", self:getBankBalance())
    self:sendResource("inventory", self:getMoney())
    msg:sendToPlayer(self)
end

function Item:isActiveImbuement(index)
    local time = self:getSpecialAttribute(index)
    if (time and time > 0) then
        return true
    end

    return false
end

function Item:getTimeImbuement(index)
    local time = self:getSpecialAttribute(index)
    if (time and time > 0) then
        return time
    end

    return false
end

function Item:isImbuementEquip()
    if (not self) then
        return false
    end

    if (self:getType() and self:getType():getImbuingSlots() > 0) then
        return true
    end

    return false
end

function Item:getImbuementType(slot)
    local enchant = self:getSpecialAttribute(slot)
    if (enchant == 0) then
        return false
    end

    for i, v in pairs(Imbuements) do
        for j = 1, 3 do
            if (enchant:find(v.Name) and enchant:find(v.Levels[j])) then
                return v.Type
            end
        end
    end

    return nil
end

function Item:getImbuementPercent(name)
    for i, v in pairs(Imbuements) do
        for j = 1, 3 do
            if (name:find(v.Name) and name:find(v.Levels[j]) and name ~= 0) then
                return v.LevelsPercent[j]
            end
        end
    end

    return nil
end

 

Editado por A.Mokk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
23 horas atrás, GM Vortex disse:


https://otland.net/threads/imbuements-system-to-0-4-8-60.262623/#post-2562087

 

Eu ja vi esse post, ja tentei colocar com a ajuda dos comentarios desse link mas nao funcionou. ALem de que parece que esse dai so tem um atributo, enquanto o exemplo citado acima tem varios, sera que precisa fazer alterações nas source ? se sim, como sera que faço isso?

Editado por A.Mokk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Moderador
23 horas atrás, A.Mokk disse:

Eu ja vi esse post, ja tentei colocar com a ajuda dos comentarios desse link mas nao funcionou. ALem de que parece que esse dai so tem um atributo, enquanto o exemplo citado acima tem varios, sera que precisa fazer alterações nas source ? se sim, como sera que faço isso?

Seria melhor adaptar o script em questão!

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

 

Consegui adicionar os atributos ao servidor através de modificações na source utilizando esse post do TK 

Tudo certo ate entao, compilei, adicionei os atributos aos itens, registrei os itens em moveements, iniciei o servidor, nenhum erro. Ao dar look nos itens os atributos aparecem corretamente mas simplesmente nao funciona, mesmo sem nenhum erro e com os atributos aparecendo, eles nao funcionam. Todos os outros atributos normais funcionam perfeitamente como o fast regen, hard drink, protect etc... mas esses novos nao estao funcionando... Se alguem puder dar um help!

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.

  • Conteúdo Similar

    • Por LasseXeterno
      Então, estou tentando adicionar uma nova "race" no meu Ot de base Cyan, tentei seguir 3 tutoriais aqui do tibiaking, um sobre race, porém nos códigos do meu servidor não tem o constant.h e nem o monster.cpp. E o outro tutorial, eu fiz tudo que ele pediu e quando entrei no game para testar, funcionava os golpes e as imunidades, porém não aparecia o número do dano e nem a cor.  Usei esse tutorial como base: 
      Pois ele é derivado. E o outro tutorial que usei foi: 
      Porém nesse, não consegui achar a const.h, e quando fui nos arquivos do creaturescript e adicionei uma cor nova a "COLOR_FAIRY", quando abro o jogo, os pokemons que seriam teoricamente "fada", o que eu usei de teste foi a Clefable. A Clefable tomava IK e dava IK no seu atk do tipo fada. 
      Além de que, o meu erro principal é esse: Warning - Monsters::loadMonster] Unknown race type fairy. (data/monster/pokes/geracao 1/Clefable.xml)
       Pois como eu já disse, não consigo achar onde adicionar uma nova race.

    • Por yuriowns
      Salve rapazes, tranquilo? Preciso de ajuda pra colocar para os npc's que vendem pots verificarem quantos itens possuem no tile em que o player está e se tiver com +80 itens no sqm, o npc avisa e não vende nada até o player ir em um sqm com menos de 80 itens no chão.
       
    • Por Mateus Robeerto
      Não sei se aqui é a área ou algum local para solicitar a alteração do email antigo... Não lembro mais a senha dele, nem a resposta secreta para acessar. Peço a algum administrador ou moderador para, por favor, alterar o email para o novo.
    • Por koyotestark
      .Qual servidor ou website você utiliza como base? 
      OTX2
      Qual o motivo deste tópico? 
      Como é um pedido, não sei se alguem faria a parte complicada, então vou pedir apenas a parte simples, e comentar em seguida como seria a parte complicada.
      A parte simples, eu criei uma arena igual arena do pacman, e botei varios firefield nela, ao player passar por cima, com ajdua de outro script q achei de pacman, é somado um valor num storage, dai, o evento seria assim, em um tempo configurado, os playeres precisam comer o maximo de bolinhas q puder, quando tempo acabar,quem tiver comido mais vence
      No caso eu adaptei um script de rank pra fazer isso manualmente, mas se alguma pessoa caridosa, puder fazer
      Agora a parte complicada que imaginei.
      Achei recentemente na net um systema pacman, nao consegui fazer funcionar 100% pq a imagem não abria mais, e ai me veio uma ideia, um evento pacman PVP.
       Como seria? arena igual do pacman, com algum item que o player passe em cima e some ponto e desapareça.  teria as bolinhas amarelas q soma pontos, e ai vem a parte legal, 
       Nas bolinhas laranjas, o player q passar em cima começa a atirar pra frente um dano que se tocado no player adversário ele é removido da arena, e somado + pontos ao player que removeu.
      exemplo, bola amarela soma um ponto em um storage, kill dentro da arena soma +10 pontos,, quando tempo acabar, quem tiver mais pontos vence.
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo