Ir para conteúdo
  • Cadastre-se

11.x [WIP] OTXServer 12.31 Global Full + Kilmaresh (Issavi) + BESTIARY - QUICKLOOT


Posts Recomendados

1 hora atrás, Adventure disse:

Ele já ate modificou o tópico está com novas imagens sera que sai ainda hoje ? kkk Too muito ansioso 

 

1 hora atrás, Adventure disse:

Ele já ate modificou o tópico está com novas imagens sera que sai ainda hoje ? kkk Too muito ansioso 

espero que 1 dia saia !

Link para o post
Compartilhar em outros sites
  • Respostas 5k
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

OTXServer Global Full Kilmaresh by Malucooo   [CLIENTS COMPATÍVEIS]   http://www.gitlab.com/guilhermesidney/cliente10/   [DOWNLOAD] BAIXEM EM: https://github.com/malucooo

Adicionado Imbuing System, Inspection System por Charles (Eternal-Scripts) Corrigido e atualizado Prey System por Charles (Eternal-Scripts)   Obrigado pela colaboração, acredito que no

Atualizações de Médio Porte:   - Items.otb 11.31 (adicionado os novos barris de potion e mais uns 700 items adicionado..) - Client 10 Atualizado - Adicionado a categoria carpet...

Posted Images

modules.xml

Citar

    <!-- Prey System -->
    <module type="recvbyte" byte="235" script="prey system/preysystem.lua" />
    <module type="recvbyte" byte="237" script="prey system/preysystem.lua" />

    <!-- Imbuiment -->
    <module type="recvbyte" byte="213" script="imbuement/imbuement.lua" />

 

imbuement.lua

Citar

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

local Imbuements = {
    {
        Name = "Scorch",
        Category = "Elemental Damage (Fire)",
        Type = "firedamage",
        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",
        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",
        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",
        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",
        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",
        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}}
    }
}

local Weapons = {
    ["axe"] = {3962, 7412, 18451, 8926, 2414, 11305, 7419, 2435, 7453, 2415, 2427, 8924, 15492, 7435, 7455, 7456, 2443, 25383, 7434, 6553, 8925, 2431, 2447, 15451, 11323},
    ["club"] = {7414, 7426, 2453, 7429, 15647, 7431, 7430, 23543, 2444, 2452, 20093, 7424, 25418, 18452, 8928, 7421, 15414, 7410, 7437, 7451, 2424, 2436, 7423, 12648, 7452, 8929, 2421},
    ["sword"] = {7404, 7403, 12649, 7416, 2407, 2413, 7385, 7382, 2451, 8930, 2438, 2393, 7407, 7405, 2400, 7418, 7417, 18465, 2376, 7391, 6528, 8931, 12613, 11309, 7408, 11307}
}

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"
}

function onRecvbyte(player, msg, byte)
    if (byte == 0xD5) then
        -- Apply Imbuement
        --player:sendCancelMessage("Sorry, not possible.")
        --return false
        player:applyImbuement(msg)
    end
end

local function tableContains(table, value)
    for i = 1, #table do
        if (table == 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
                local topItem = tile:getTopTopItem()
                if (topItem) then
                    if (tableContains(imbuingShrineIds, topItem:getId())) 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.Weapons, equip)) then
            tableReturn[#tableReturn+1] = Imbuements
        end
    end

    return tableReturn
end

local function getActiveImbuement(item, slot)
    for i = 1, #Imbuements do
        for j = 1, 3 do
            local level = Imbuements.Levels[j]
            local enchant = item:getSpecialAttribute(slot)
            if (enchant:find(level) and enchant:find(Imbuements.Name)) then
                return Imbuements, 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, k
            end
        end
    end

    return nil
end

local function sendImbuementError(self, message)
    local msg = NetworkMessage()
    msg:addByte(0xED)
    msg:addByte(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
        self:sendCancelMessage("Sorry, not possible.")
        return false
    end

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

    local slot, choiceId, useProtection = msg:getByte(), msg:getU32(), msg:getByte()
    local myImbuement, imbuingLevel = getImbuementByIndex(choiceId, item:getId())
    if (not myImbuement) then
        self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Cannot find imbuement data, please send this message to a Administrator.")
        return false
    end

    slot = slot + 1
    if (item:isActiveImbuement(slot+3)) then
        self:sendCancelMessage("Sorry, not possible.")
        return false
    end
    
    item:setSpecialAttribute(slot, myImbuement.Levels[imbuingLevel].. " " ..myImbuement.Name, slot+3, 72000, slot+6, 0)
    self:openImbuementWindow(item)
end

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

function Player.openImbuementWindow(self, item)
    if (not item:isImbuementEquip()) then
        self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "This item is not imbuable.")
        return false
    end

    if (self:getSlotItem(CONST_SLOT_LEFT) and self:getSlotItem(CONST_SLOT_LEFT):getUniqueId() == item:getUniqueId()) then
        self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You cannot imbue an equipped item.")
        return false
    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(4) -- 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.. " " ..myImbuements[k].Name) -- Name Element
            local newDescription = myImbuements[k].Description:gsub(" %%", " " ..myImbuements[k].LevelsPercent.."%%")
            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.Price)
            msg:addByte(ImbuingInfo.Percent)
            msg:addU32(ImbuingInfo.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])
            msg:addU16(self:getItemCount(myImbuements[k].Items[j][1]))
        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 (not enchant) 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])) then
                return v.LevelsPercent[j]
            end
        end
    end

    return nil
end

 

preysystem.lua

Citar

PreySystem = {
    Developer = "Charles (Cjaker)",
    Version = "1.0",
    LastUpdate = "14/01/2017 - 13:06 (PM)"
}

local RerollStorages = {
    [0] = 8420390,
    [1] = 8420391,
    [2] = 8420392
}

local ColumnId = {
    [512] = 0,
    [513] = 1,
    [514] = 2
}

local ServerPackets = {
    ShowDialog = 0xED,
    PreyRerollPrice = 0xE9,
    PreyData = 0xE8,
    PreyTimeLeft = 0xE7
}

local ClientPackets = {
    RequestData = 0xED,
    PreyAction = 0xEB
}

local monstersGenerated = {}

function getUnlockedColumn(player)
    local resultId = db.storeQuery("SELECT * FROM players WHERE name = " ..db.escapeString(player:getName()))
    if (resultId ~= false) then
        return result.getDataInt(resultId, "prey_column")
    end

    return nil
end

local function getMonsterList(player, column)
    local resultId = db.storeQuery("SELECT * FROM player_prey WHERE player_id = " ..player:getGuid())
    if (resultId ~= false) then
        if (monstersGenerated[player:getGuid()] == nil) then
            monstersGenerated[player:getGuid()] = {}
        end

        local preyMonsters = {}
        repeat
            local mName = result.getDataString(resultId, "name")
            local mIndex = result.getDataInt(resultId, "mindex")
            local mColumn = result.getDataInt(resultId, "mcolumn")
            if (mColumn == column) then
                preyMonsters[#preyMonsters+1] = {Name = mName, Index = mIndex, Column = mColumn}
                table.insert(monstersGenerated[player:getGuid()], mName)
            end
        until not result.next(resultId)
        result.free(resultId)

        if (#preyMonsters == 0) then
            monstersGenerated[player:getGuid()] = {}
            return nil
        end

        return preyMonsters
    end

    return nil
end

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

    return false
end

local function createMonstersColumn(player, column)
    local monsters, newTable = getPreyMonsters(), {}
    local count = 1

    if (monstersGenerated[player:getGuid()] == nil) then
        monstersGenerated[player:getGuid()] = {}
    end

    -- Get New List
    repeat
        local randomName = monsters[math.random(#monsters)]
        if (not tableContains(monstersGenerated[player:getGuid()], randomName)) then
            if (MonsterType(randomName) and 
                MonsterType(randomName):getOutfit().lookType > 0) then
                newTable[count] = {Name = randomName, Index = count, Column = column}
                table.insert(monstersGenerated[player:getGuid()], randomName)
                count = count + 1
            end
        end
    until count == 10

    for i = 1, #newTable do
        db.asyncQuery("INSERT INTO player_prey SET player_id = " ..player:getGuid().. ", name = " ..db.escapeString(newTable.Name).. ", mindex = " ..(i-1).. ", mcolumn = " ..column)
    end

    return newTable
end

function sendPreyData(player)
    local msg = NetworkMessage()
    local columnUnlocked = getUnlockedColumn(player)
    if (not columnUnlocked) then
        columnUnlocked = 0
    end

    Monsters = nil

    for i = 0, 2 do
        local FreeRerollTime = player:getNextFreroll(i)

        msg:addByte(ServerPackets.PreyData) -- Server Prey Data
        msg:addByte(i) -- Atual Column

        --local timeLeft = player:getStaminaBonus(i)
        local timeLeft = player:getPreyStamina(i)
        local Bonus = loadBonus(player, i)

        if (columnUnlocked >= i) then
            if (Bonus and timeLeft > 0) then
                msg:addByte(0x02) -- Type action (STATE_SELECTION | LOAD PREY)
            else
                Monsters = getMonsterList(player, i)
                if (not Monsters) then
                    Monsters = createMonstersColumn(player, i)
                end

                msg:addByte(0x03)
                msg:addByte(#Monsters)
            end
        else
            msg:addByte(0x00)
            msg:addByte(0x00)
        end

        if (columnUnlocked >= i) then
            if (Bonus and timeLeft > 0) then
                local mType = MonsterType(Bonus.Name)
                local mLook = mType:getOutfit()
                msg:addString(Bonus.Name)
                msg:addU16(mLook.lookType)
                msg:addByte(mLook.lookHead or 0x00) -- outfit
                msg:addByte(mLook.lookBody or 0x00) -- outfit
                msg:addByte(mLook.lookLegs or 0x00) -- outfit
                msg:addByte(mLook.lookFeet or 0x00) -- outfit
                msg:addByte(mLook.lookAddons or 0x00) -- outfit
                msg:addByte(Bonus.Type) -- Type
                msg:addU16(Bonus.Value) -- Value
                msg:addByte(Bonus.Grade) -- 1~10 Grade
                msg:addU16(timeLeft) -- Time Left Bonus
            else
                if (Bonus) then
                    player:removeBonus(i)
                end

                for i, v in pairs(Monsters) do
                    msg:addString(v.Name)
                    local mLook = MonsterType(v.Name):getOutfit()
                    msg:addU16(mLook.lookType or 21)
                    msg:addByte(mLook.lookHead or 0x00) -- outfit
                    msg:addByte(mLook.lookBody or 0x00) -- outfit
                    msg:addByte(mLook.lookLegs or 0x00) -- outfit
                    msg:addByte(mLook.lookFeet or 0x00) -- outfit
                    msg:addByte(mLook.lookAddons or 0x00) -- outfit
                end
            end
        end

        msg:addU16(FreeRerollTime) -- Time to next free roll
    end

    msg:addByte(0xEC)
    player:sendResource("prey", player:getBonusReroll()) -- Bonus Reroll
    player:sendResource("bank", player:getBankBalance())
    player:sendResource("inventory", player:getMoney())
    msg:addByte(ServerPackets.PreyRerollPrice)
    msg:addU32(player:getRerollPrice())
    msg:sendToPlayer(player)
end

local function getMonsterName(player, column, index)
    local resultId = db.storeQuery("SELECT * FROM player_prey WHERE mcolumn = " ..column.. " AND mindex = " ..index.." AND player_id = "..player:getGuid())
    if (not resultId) then
        return false
    end

    return result.getDataString(resultId, "name")
end

local function sendError(player, error)
    local msg = NetworkMessage()
    msg:addByte(ServerPackets.ShowDialog)
    msg:addByte(0x15) -- Type Dialog Error (0x14 => Normal Message)
    msg:addString(error)
    msg:sendToPlayer(player)
end

function CheckPrey(player, msg)
    local PreyColumn = msg:getByte() -- Column
    local PreyAction = msg:getByte() -- Type Action (2 == select)

    if (PreyAction == 0) then
        player:preyRerollList(PreyColumn)
    elseif (PreyAction == 1) then
        -- Bonus Reroll
        player:bonusReroll(PreyColumn)
    elseif (PreyAction == 2) then
        local PreyIndex = msg:getByte() -- monster index
        --print(PreyColumn.. " e " ..PreyAction.. " e " ..PreyIndex)
        if (getUnlockedColumn(player) < PreyColumn) then
            return addEvent(function() sendError(player, "[ERROR] You don't have this column unlocked.") end, 250)
        end

        local mName = getMonsterName(player, PreyColumn, PreyIndex)
        if (not mName) then
            return addEvent(function() sendError(player, "[ERROR] Monster name don't exists in list.") end, 250)
        end

        local mType = MonsterType(mName)
        if (not mType) then
            return addEvent(function() sendError(player, "[ERROR] This monster don't exists in OTXServer.") end, 250)
        end

        SelectPrey(player, PreyColumn, mType)
    end
end

local function getBonusValue(min, max, steps)
    local retValue = 0
    local retGrade = 0
    local random = math.random(1, 10)
    while (retValue == 0) do
        if (retGrade >= 10) then
            retGrade = 0
        end

        for i = min, max, steps do
            retGrade = retGrade + 1
            if (retGrade == random) then
                retValue = i
                break
            end
        end
    end

    return retValue, retGrade
end

function getRandomBonus(player, column, name, bonusReroll)
    -- BONUS_DAMAGE_BOOST
    -- BONUS_DAMAGE_REDUCTION
    -- BONUS_XP_BONUS
    -- BONUS_IMPROVED_LOOT
    -- BONUS_NONE
    local BonusValues = {
        [0] = {Min = 7, Max = 25, Steps = 2},
        [1] = {Min = 12, Max = 30, Steps = 2},
        [2] = {Min = 13, Max = 40, Steps = 3},
        [3] = {Min = 13, Max = 40, Steps = 3}
    }

    local randomBonus = math.random(0, 3)
    
    if (player:isActive(column) and
        not bonusReroll) then
        return false
    end

    local Bonus = BonusValues[randomBonus]
    local BonusValue, BonusGrade = getBonusValue(Bonus.Min, Bonus.Max, Bonus.Steps)
    local retTable = {Type = randomBonus, Left = 7200, Value = BonusValue, Grade = BonusGrade}

    player:setPreyStamina(column, 7200)
    player:setPreyType(column, retTable.Type)
    player:setPreyValue(column, retTable.Value)
    player:setPreyName(column, name)
    return retTable
end

function getBonusGrade(bonusType, bonusValue)
    local BonusValues = {
        [0] = {Min = 7, Max = 25, Steps = 2},
        [1] = {Min = 12, Max = 30, Steps = 2},
        [2] = {Min = 13, Max = 40, Steps = 3},
        [3] = {Min = 13, Max = 40, Steps = 3}
    }

    local Bonus = BonusValues[bonusType]
    local Grade = 0
    for i = Bonus.Min, Bonus.Max, Bonus.Steps do
        Grade = Grade + 1
        if (i >= bonusValue) then
            return Grade
        end
    end

    return nil
end

function loadBonus(player, column)
    local retTable = {
        Type = player:getPreyType(column), 
        Value = player:getPreyValue(column),
        Name = player:getPreyName(column)
    }

    retTable.Grade = getBonusGrade(retTable.Type, retTable.Value)

    if (retTable.Name == "") then
        return false
    end
    
    return retTable
end

function SelectPrey(player, PreyColumn, mType, bonusReroll)
    local msg = NetworkMessage()
    msg:addByte(ServerPackets.PreyData)
    msg:addByte(PreyColumn)

    local mLook = mType:getOutfit()
    if (not mLook) then
        return addEvent(function() sendError(player, "[ERROR] Monster is invalid, please contact Administrator.") end, 250)
    end

    local newBonus = getRandomBonus(player, PreyColumn, mType:getName(), bonusReroll)
    if (not newBonus and
        not bonusReroll) then
        return addEvent(function() sendError(player, "[ERROR] You can't select a prey with bonus active.") end, 250)
    end

    if (not bonusReroll) then
        player:removePreyMonster(mType:getName())
    end

    player:setPreyStamina(PreyColumn, 7200)

    msg:addByte(0x02)
    msg:addString(mType:getName())
    msg:addU16(mLook.lookType)
    msg:addByte(mLook.lookHead or 0x00) -- outfit
    msg:addByte(mLook.lookBody or 0x00) -- outfit
    msg:addByte(mLook.lookLegs or 0x00) -- outfit
    msg:addByte(mLook.lookFeet or 0x00) -- outfit
    msg:addByte(mLook.lookAddons or 0x00) -- outfit
    msg:addByte(newBonus.Type) -- Type
    msg:addU16(newBonus.Value) -- Value
    msg:addByte(newBonus.Grade) -- 1~10 Grade
    msg:addU16(newBonus.Left) -- Time Left Bonus
    msg:addU16(player:getNextFreroll(PreyColumn)) -- Next Free Reroll
    msg:sendToPlayer(player)
end

function onRecvbyte(player, msg, byte)
    if (byte == ClientPackets.RequestData) then
        monstersGenerated[player:getGuid()] = nil
        sendPreyData(player)
        player:setExhaustion(5042021, 1)
    elseif (byte == ClientPackets.PreyAction) then
        if (player:getExhaustion(5042021) > 0) then
            sendError(player, "Wait a time!")
            return false
        end

        CheckPrey(player, msg)
    end
end

function Player.getBonusReroll(self)
    local resultId = db.storeQuery("SELECT bonus_reroll FROM players WHERE id = " ..self:getGuid())
    if (resultId) then
        return result.getDataInt(resultId, "bonus_reroll")
    end

    return nil
end

function Player.getRerollPrice(self)
    return (self:getLevel()/2) * 500
end

function Player.preyRerollList(self, column)
    if (self:getExhaustion(5042021) > 0) then
        return addEvent(function() sendError(self, "[ERROR] Wait a time!") end, 250)
    end

    self:setExhaustion(5042021, 2)

    local rerollStorage = RerollStorages[column]
    if (self:getStorageValue(rerollStorage) > 0) then
        local priceReroll = self:getRerollPrice()
        if (not self:removeMoneyNpc(self:getRerollPrice())) then
            return addEvent(function() sendError(self, "[ERROR] You don't have " ..priceReroll.. " gold.") end, 250)
        end
    end

    self:removeBonus(column)
    db.asyncQuery("DELETE FROM player_prey WHERE player_id = " ..self:getGuid().. " AND mcolumn = " ..column)
    self:setStorageValue(rerollStorage, (os.time() / 60.000) + 1200)
    sendPreyData(self, column)
end

function Player.getNextFreroll(self, column)
    local FreeRerollTime = self:getStorageValue(RerollStorages[column])
    if (FreeRerollTime == -1) then
        self:setStorageValue(RerollStorages[column], 0)
        FreeRerollTime = 0
    end

    if (FreeRerollTime > 0) then
        if (FreeRerollTime < (os.time() / 60.000)) then
            FreeRerollTime = 0
            self:setStorageValue(RerollStorages[column], 0)
        else
            FreeRerollTime = FreeRerollTime - (os.time() / 60.000)
            self:setStorageValue(RerollStorages[column], (os.time() / 60.000) + FreeRerollTime)
        end
    end

    return FreeRerollTime
end

function Player.setBonusReroll(self, value)
    db.asyncQuery("UPDATE players SET bonus_reroll = " ..value.. " WHERE id = " ..self:getGuid())
end

function Player.addBonusReroll(self, value)
    db.asyncQuery("UPDATE players SET bonus_reroll = bonus_reroll + " ..value.. " WHERE id = " ..self:getGuid())
end

function Player.removeBonus(self, column)
    self:setPreyStamina(column, 0)
    self:setPreyType(column, 0)
    self:setPreyValue(column, 0)
    self:setPreyName(column, "")
end

function Player.getBonusMonster(self, column)
    return self:getPreyName(column)
end

function Player.getBonusInfo(self, column)
    return loadBonus(self, column)
end

function Player.isActive(self, column)
    local timeLeft, preyValue = self:getPreyStamina(column), self:getPreyValue(column)
    if (timeLeft > 0 and preyValue > 0) then
        return true
    end

    return false
end

function Player.sendResource(self, resourceType, value)
    local typeByte = 0
    if (resourceType == "bank") then
        typeByte = 0x00
    elseif (resourceType == "inventory") then
        typeByte = 0x01
    elseif (resourceType == "prey") then
        typeByte = 0x0A
    end

    local msg = NetworkMessage()
    msg:addByte(0xEE)
    msg:addByte(typeByte)
    msg:addU64(value)
    msg:sendToPlayer(self)
end

function Player.isActiveByName(self, column, name)
    if (self:getPreyStamina(column) > 0 and self:getPreyName(column) == name) then
        return true
    end

    return false
end

function Player.bonusReroll(self, column)
    if (self:getExhaustion(5042021) > 0) then
        return addEvent(function() sendError(self, "[ERROR] Wait a time!") end, 250)
    end

    local bonusReroll = self:getBonusReroll()
    if (bonusReroll == 0) then
        return addEvent(function() sendError(self, "[ERROR] You don't have Bonus Reroll.") end, 250)
    end

    if (not self:isActive(column)) then
        return addEvent(function() sendError(self, "[ERROR] You don't have a active bonus.") end, 250)
    end

    self:setExhaustion(5042021, 2)

    self:setBonusReroll(bonusReroll-1)
    local bonusMonster = self:getBonusMonster(column)
    self:removeBonus(column)

    local msg = NetworkMessage()
    msg:addByte(0xEE)
    msg:addByte(0x0A)
    msg:addU64(bonusReroll-1)
    msg:sendToPlayer(self)

    SelectPrey(self, column, MonsterType(bonusMonster), true)
end

function Player.getStaminaBonus(self, column)
    return self:getPreyStamina(column)
end

function Player.setStaminaBonus(self, column, value)
    self:setPreyStamina(column, value)
end

function Player.removePreyMonster(self, name)
    db.asyncQuery("DELETE FROM player_prey WHERE player_id = " ..self:getGuid().. " AND name = " ..db.escapeString(name))
end

function Player.addPreySlot(self)
    db.asyncQuery("UPDATE players SET prey_column = 2 WHERE id = " ..self:getGuid())
end

function Player.getPreySlots(self)
    local resultId = db.storeQuery("SELECT * FROM players WHERE name = " ..db.escapeString(self:getName()))
    if (resultId ~= false) then
        return result.getDataInt(resultId, "prey_column")
    end

    return nil
end

function Player.sendPreyTimeLeft(self, column, time)
    local msg = NetworkMessage()
    msg:addByte(ServerPackets.PreyTimeLeft)
    msg:addByte(column)
    msg:addU16(time)
    msg:sendToPlayer(self)
end

 

Link para o post
Compartilhar em outros sites
1 hora atrás, meffon disse:

Só aqui que o prey sistem não abre?

Aqui tb não ta abrindo, tentei adicionar os arquivos do comentário acima e sempre recebo a mesma mensagem "Server could not all required data. Please try again!"

Link para o post
Compartilhar em outros sites
Agora, dreogo1999 disse:

Aqui tb não ta abrindo, tentei adicionar os arquivos do comentário acima e sempre recebo a mesma mensagem "Server could not all required data. Please try again!"

O mesmo aqui :/

Link para o post
Compartilhar em outros sites
4 horas atrás, dreogo1999 disse:

Aqui tb não ta abrindo, tentei adicionar os arquivos do comentário acima e sempre recebo a mesma mensagem "Server could not all required data. Please try again!"

 

4 horas atrás, meffon disse:

O mesmo aqui :/

 

Não funciona assim! Alem daqueles arquivos ali, tem varios codigos para adicionar as source.

Link para o post
Compartilhar em outros sites

A partir de amanhã começo adicionando aos poucos, as noviodades que tenho, baseado no tópico que foi postado dias atrás, não garanto funcionamento idêntico, mas teremos algo parecido! o mapa está sendo confeccionado por @Andreeyyy e durante a semana será atualizado tbm!

 

Estarei aplicando as correções do bug mencionado pelo @Comedinha durante esses dias!

 

Obrigado pela compreenção de todos!

 

Erick Nunes

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
Em 2017-5-17 ás 12:05, malucooo disse:

seção de tutoriais... seja bem vindo!

seção de tutoriais...

Naverdade eu simplesmente não consigo abrir, não sei como faz pra executar o ot sem ser por site, tipo o forgotter server (baiakão ^^)

 

Link para o post
Compartilhar em outros sites
5 minutos atrás, batatinha112 disse:

Naverdade eu simplesmente não consigo abrir, não sei como faz pra executar o ot sem ser por site, tipo o forgotter server (baiakão ^^)

 

passe nos tutoriais

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
7 minutos atrás, malucooo disse:

A partir de amanhã começo adicionando aos poucos, as noviodades que tenho, baseado no tópico que foi postado dias atrás, não garanto funcionamento idêntico, mas teremos algo parecido! o mapa está sendo confeccionado por @Andreeyyy e durante a semana será atualizado tbm!

 

Estarei aplicando as correções do bug mencionado pelo @Comedinha durante esses dias!

 

Obrigado pela compreenção de todos!

 

Erick Nunes

 

 

Obrigado Malucoo você é grande!!

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

Adicionado Hall of Hope...

- Mapa e Respawns (falta corrigir alguns pequenos detalhes no mapa)

 

Faltam:

-Actions

-Movements

-Monstros

-Npcs

 

Serão varias etapas!

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
50 minutos atrás, batatinha112 disse:

Naverdade eu simplesmente não consigo abrir, não sei como faz pra executar o ot sem ser por site, tipo o forgotter server (baiakão ^^)

 

usa xampp nao precisa de site para roda só o phpmyadmin mysql

e upa database que ta na pack

Link para o post
Compartilhar em outros sites
2 horas atrás, Ovini disse:

@malucooo Compartilha pra nós ae, um RME que pegue nessa versão. 

ainda não tenho...

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
Em 2017-5-20 ás 15:24, rexxton disse:

modules.xml

 

imbuement.lua

 

preysystem.lua

 

 

actions.xml

Citar

<action fromid="27728" toid="27729" script="other/imbuement.lua" />

 

imbuement.lua

Citar

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local player = Player(cid)
    if (not player) then
        return false
    end

    player:openImbuementWindow(itemEx)

    return true
end

 

global.lua

Citar

-- Stamina
if nextUseStaminaTime == nil then
    nextUseStaminaTime = {}
end

if nextUseStaminaPrey == nil then
    nextUseStaminaPrey = {}
end

if nextUseXpStamina == nil then
    nextUseXpStamina = {}
end

if lastItemImbuing == nil then
    lastItemImbuing = {}
end

 

Database(não sei se está correto)

Citar

CREATE TABLE `players` (

`prey_stamina_1` int(11) DEFAULT NULL,
  `prey_stamina_2` int(11) DEFAULT NULL,
  `prey_stamina_3` int(11) DEFAULT NULL,
  `prey_column` smallint(6) NOT NULL DEFAULT '1',
  `bonus_reroll` int(11) DEFAULT NULL,
  `xpboost_stamina` smallint(5) DEFAULT NULL,
  `xpboost_value` tinyint(4) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--
-- Estrutura da tabela `player_prey`
--

CREATE TABLE `player_prey` (
  `player_id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `mindex` smallint(6) NOT NULL,
  `mcolumn` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--
-- Estrutura da tabela `player_preytimes`
--

CREATE TABLE `player_preytimes` (
  `player_id` int(11) NOT NULL,
  `bonus_type1` int(11) NOT NULL,
  `bonus_value1` int(11) NOT NULL,
  `bonus_name1` varchar(50) NOT NULL,
  `bonus_type2` int(11) NOT NULL,
  `bonus_value2` int(11) NOT NULL,
  `bonus_name2` varchar(50) NOT NULL,
  `bonus_type3` int(11) NOT NULL,
  `bonus_value3` int(11) NOT NULL,
  `bonus_name3` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

 

Sorces

https://mega.nz/#!r55GGQBJ!xt7MBApBb57on_AD9yS_F0ciKp-VtfEII9F5sxp3Ivo

Scan

https://www.virustotal.com/pt/file/3d2fa8d712f8e0fb4d14b3afea2c088e4b118d22acd9d0965d2e315c51785e26/analysis/1495466980/

Link para o post
Compartilhar em outros sites
  • Erimyth pinned this tópico
  • Erimyth featured this tópico
  • Erimyth unfeatured e unpinned this tópico

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 Johncore
      Olá galera, é com muita dedicação que trago para este forum uma exclusividade que só eu tinha.
      Mapa Dragonsouls 11x 99%, tem alguns detalhes de sqm ou borda que você possa precisar fazer,
      Dragonsouls é um servidor ATS Custom, baseado em senhor dos aneis. via muita gente perguntando por esse mapa e eu tinha a muitos anos, resolvi converter.
      mas ele está 99% pronto para uso.
       
      Esse mapa é 100% compativel para rodar na Datapack Otg Server 11,
      Otg Server é um projeto que trabalha com varias datapacks de tibia rl e ATS Custom.
       
      Github:
      https://github.com/otg-br/
       
      Participe do grupo Otg Server:  
      https://chat.whatsapp.com/EWV3dVvS6nt1em7q23FGu7
       
       
      MAPA:
       
      INICIAL ISLAND

       
      CARLIN

       
      CIDADE TIRITH

       
      CIDADE BREE

       
       
       
       
      world.zip
    • Por Johncore
      Olá pessoas, estou disponibilizando aqui mais uma exclusividade que é o Mapa Evolunia, ele é baseado no servidor Evolunia.net
       
      Esse mapa é 100% compativel para rodar na Datapack Otg Server 11x,
      Otg Server é um projeto que trabalha com varias datapacks de tibia rl e ATS Custom.
       
      Participe do grupo Otg Server:  
      https://chat.whatsapp.com/EWV3dVvS6nt1em7q23FGu7
       
      Creditos:
      evolunia
      world.zip
    • Por Johncore
      Otg Server é um projeto fork do The Forgotten Server 1.3, feito por brasileiros que visam sempre por estabilidade, um código mais clean, temos no projeto várias Datapacks como
      Global 11.0, Global 8.6, Global 8.0, RadBR 11.0, Evolutions 11.0, Yurots Classic 11.0, nossa base também é excelente para rodar projetos que são mapa Baiak ou ATS Custom pelo baixissimo uso de cpu e fix do Decay de itens.

      Todos são bem vindos para colaborar com o projeto... que não visa nenhum lucro financeiro, queremos apenas colaborar com a comunidade OTSERV,
      temos ouvido de muitas pessoas que procuram uma base estável, limpa, esse é o nosso objetivo nesse projeto.
       
      Estamos a procura de programadores/dev/webmaster que queiram ajudar / que tenham tempo e serão recompensados por isso.
       
      Nossa Datapack principal Global 11.00 contem as seguintes features:
      CAST SYSTEM ✅
      AUTOLOOT ✅
      WINTER UPDATE 2023 ✅
      SUMMER UPDATE 2023 ✅
      ADDONS 13.22 UPDATE ✅
      MONTARIAS 13.22 UPDATE ✅
      ITEMS 13.22 UPDATE ✅
      DAILY REWARD ✅
      IMBUEMENTS ✅
      PREY ✅
      EXERCISE WEAPONS ✅
      HIRELINGS NPCS ✅
      ANTI ROLLBACK ✅
       
       
      Github Global 11x:  💾
      https://github.com/otg-br/global-11x
      Clients e outras ferramentas:  💾
      https://github.com/otg-br/tools
      Github Otg Gesior:  💾
      https://github.com/otg-br/gesior
      Github Otg Otclientv8:  💾
      https://github.com/otg-br/otclientv8
      Wiki Otg:  💾
      https://github.com/otg-br/global-11x/wiki
       
       
      Creditos:
      TFS Team Erick Nunes Gui Bruxo Worthdavi LuSKT Leo Pereira Luan Luciano Cjaker Comedinhas Nekiro OTG Colaborators
    • Por Dnzk21
      COMO POSSO IMPORTAR UMA CITY EMCIMA DE OUTRA CITY SEM PERDER AS HOUSES
      ALGUEM PODE M,E AJUDAR 
      E A MESMA CITY MJAIS QUANDO IMPORTO PERDE TODAS CASAS QUANDO SALVA E ABRE O SERVIDOR
    • Por Johncore
      Arcadia é uma cidade custom bem bonita que pode ser encontrada no servidor AureraGlobal,
      Por ter esse conteudo aqui em primeira mão, resolvi disponibilizar para a comunidade.
       


       
      Creditos:
      Aurera Team
      Johncorex
      Arcadia-spawn.xml Arcadia-house.xml Arcadia.otbm

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo