Ir para conteúdo

Featured Replies

  • Respostas 5
  • Visualizações 766
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • globalevents   <globalevent name="OrangeTalk" interval="3600" event="script" value="teleport.lua"/>  

Posted Images

Postado
Em 13/08/2020 em 10:02, Lurk disse:

@Doidodepeda aqui, peguei da base baiak pvp que o wox postou

anyway eh um global event

eventcheck.lua


local EventsListalist = {
        
        {time = "01:00", name = "Snowball Event"},        
        {time = "02:00", name = "DesertWar Event"},
        {time = "03:00", name = "Capture The Flag"},
        {time = "04:00", name = "FireStorm Event"},
        {time = "09:00", name = "Defend The Tower"},
        {time = "10:00", name = "Snowball Event"},
        {time = "11:00", name = "DesertWar Event"},
        {time = "12:00", name = "Capture The Flag"},
        {time = "13:00", name = "FireStorm Event"},
        {time = "15:00", name = "Battlefield Event"},
        {time = "16:00", name = "Defend The Tower"},
        {time = "17:00", name = "Snowball Event"},
        {time = "18:00", name = "DesertWar Event",},
        {time = "19:00", name = "Capture The Flag",},
        {time = "20:00", name = "FireStorm Event"},
        {time = "21:00", name = "Real Castle"},
        {time = "22:00", name = "Battlefield Event"},
        {time = "23:00", name = "Defend The Tower"}
        

    }
    
    local position = {x = 129, y = 58, z = 7}
    
    
    function onThink(interval, lastExecution)
        
     local people = getPlayersOnline()
    if #people == 0 then
        return true
    end
    
    local Count = 0
      for _, t in ipairs(EventsListalist) do
            local eventTime = hourToNumber(t.time)
            local realTime = hourToNumber(os.date("%H:%M:%S"))
            if eventTime >= realTime then
           doCreatureSay(people[1], "Próximo evento às {"..t.time.."h} "..t.name..", faltam "..timeString(eventTime - realTime)..".", TALKTYPE_ORANGE_1, false, 0, position)
                return true
            end
            Count = Count + 1
        end
        return true
    end

 

em globalevents poe 


<globalevent name="eventos" interval="10000" event="script" value="eventcheck.lua"/>

 

poe isso no fim do arquivo 050-function na pasta lib

 


 function hourToNumber(str) -- By Killua
    local hour = (tonumber(str:sub(1,2))*3600) + (tonumber(str:sub(4,5)) * 60)
    if #str > 5 then
        hour = hour + tonumber(str:sub(7,8))
    end
    return hour
end

 

eu tava atras disso tb e quando tentei passar pro meu ot deu muita treta e n consegui resolver, agora fui tentar dnv p te passar e consegui p mim tb kkkkk se der certo p tu da melhor resposta e rep+ ai ? 

Fiz tudo isso que vc disse e deu isso aqui toda vez que chegava perto do lugar que era pra aparecer a mensagem:

Spoiler

[Error - GlobalEvent Interface]
data/globalevents/scripts/eventcheck.lua:onThink
Description:
data/globalevents/scripts/eventcheck.lua:28: attempt to call global 'timeString' (a nil value)
stack traceback:
        data/globalevents/scripts/eventcheck.lua:28: in function <data/globalevents/scripts/eventcheck.lua:17>
 

 

meu eventcheck ficou assim com os horários dos meus eventos:

 

Spoiler

local EventsListalist = {
        {time = "01:00", name = "Snowball Event"},        
        {time = "17:00", name = "Capture The Flag"},
        {time = "15:00", name = "FireStorm Event"},
        {time = "20:00", name = "Defend The Tower"},
        {time = "14:00", name = "Snowball Event"},
        {time = "12:00", name = "Capture The Flag"},
        {time = "19:00", name = "FireStorm Event"},
        {time = "11:00", name = "Battlefield Event"},
        {time = "18:00", name = "Snowball Event"},
        {time = "21:30", name = "Mundo Castle"},
        {time = "19:30", name = "Battlefield Event"}
}
    
local position = {x = 166, y = 49, z = 7} -- posição do mapa onde o efeito vai sair

function onThink(interval, lastExecution) 
local people = getPlayersOnline()
if #people == 0 then
    return true
end
    
local Count = 0
for _, t in ipairs(EventsListalist) do
    local eventTime = hourToNumber(t.time)
    local realTime = hourToNumber(os.date("%H:%M:%S"))
    if eventTime >= realTime then
        doCreatureSay(people[1], "Proximo evento as {"..t.time.."h} "..t.name..", faltam "..timeString(eventTime - realTime)..".", TALKTYPE_ORANGE_1, false, 0, position) -- não use acentos aqui ou eles serão alterados por simbolos ingame
        return true
    end
    Count = Count + 1
end

return true
end

 

além do meu server fechar sozinho sem nenhum tipo de outro erro ocorrer na distro, só parou de dar erro quando eu tirei a linha do globalevents e voltei o arquivo das libs pro que era antes.

 

minha lib ficou assim, é a penultima function:

Spoiler

  local query = db.getResult("SELECT `name` FROM `guilds` WHERE `id` = '"..gid.."'")
    if query:getID() == -1 then
        return false
    end
    local name = query:getDataString("name")
    query:free()
    return name
end

function isWalkable(pos, creature, proj, pz)
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end

function isInArray(array, value, caseSensitive)
    if(caseSensitive == nil or caseSensitive == false) and type(value) == "string" then
        local lowerValue = value:lower()
        for _, _value in ipairs(array) do
            if type(_value) == "string" and lowerValue == _value:lower() then
                return true
            end
        end
    else
        for _, _value in ipairs(array) do
            if (value == _value) then return true end
        end
    end

    return false
end

ARMY = {
    [1] = {50, 350, "Soldado Raso", 1}, -- [Número] = {Pontos Kill, Points para UP, "Nome",PLATINIUM COINS POR KILL},
    [2] = {50, 1500, "Soldado de Primeira Classe", 50000000},
    [3] = {50, 2000, "Cabo", 60000000},
    [4] = {50, 3000, "Sargento", 70000000},
    [5] = {50, 3500, "Sargento-Ajudante 1", 90000000},
    [6] = {50, 5000, "Sargento-Ajudante 2", 11000000},
    [7] = {50, 5500, "Sargento-Chefe", 15000000},
    [8] = {50, 6000, "Sargento-Mestre 1", 18000000},
    [9] = {50, 6500, "Sargento-Mestre 2", 20000000},
    [10] = {50, 7000, "Sargento-Mestre 3", 22000000},
    [11] = {50, 7600, "Sargento-Mestre 4", 24000000},
    [12] = {50, 8200, "Sargento-Mor do Comando", 26000000},
    [13] = {50, 9000, "Segundo-Tenente 1", 28000000},
    [14] = {50, 9600, "Segundo-Tenente 2", 30000000},
    [15] = {50, 10200, "Segundo-Tenente 3", 32000000},
    [16] = {50, 11000, "Segundo-Tenente 4", 34000000},
    [17] = {50, 11500, "Primeiro-Tenente 1", 36000000},
    [18] = {50, 12000, "Primeiro-Tenente 2", 38000000},
    [19] = {50, 13000, "Primeiro-Tenente 3", 40000000},
    [20] = {50, 14000, "Primeiro-Tenente 4", 45000000},
    [21] = {50, 15000, "Primeiro-Tenente 5", 55000000},
    [22] = {50, 16000, "Capitao 1", 60000000},
    [23] = {50, 17000, "Capitao 2", 70000000},
    [24] = {50, 18000, "Capitao 3", 80000000},
    [25] = {50, 19000, "Capitao 4", 90000000},
    [26] = {50, 20000, "Capitao 5", 100000000},
    [27] = {50, 21000, "Major 1", 110000000},
    [28] = {50, 21500, "Major 2", 120000000},
    [29] = {50, 22000, "Major 3", 130000000},
    [30] = {50, 23000, "Major 4", 140000000},
    [31] = {50, 23500, "Major 5", 150000000},
    [32] = {50, 24000, "Tenente-Coronel 1", 160000000},
    [33] = {50, 25000, "Tenente-Coronel 2", 170000000},
    [34] = {50, 26000, "Tenente-Coronel 3", 180000000},
    [35] = {50, 27000, "Tenente-Coronel 4", 190000000},
    [36] = {50, 28000, "Tenente-Coronel 5", 200000000},
    [37] = {50, 29000, "Coronel 1", 210000000},
    [38] = {50, 30000, "Coronel 2", 220000000},
    [39] = {50, 31000, "Coronel 3", 230000000},
    [40] = {50, 32000, "Coronel 4", 400000000},
    [41] = {50, 35000, "Coronel 5", 500000000},
    [42] = {50, 100000, "General", 1000000000},
    
    
}                           
ARMY_LEVEL = 2014159
ARMY_EXPERIENCE = 2014160

function doAddPoints(cid, points)
db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. points .. " WHERE `id` = " .. getPlayerAccountId(cid) .. ";")
end

function doPlayerGiveItem(cid, itemid, amount, subType)
    local item = 0
    if(isItemStackable(itemid)) then
        item = doCreateItemEx(itemid, amount)
        if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
            return false
        end
    else
        for i = 1, amount do
            item = doCreateItemEx(itemid, subType)
            if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
                return false
            end
        end
    end

    return true
end


function doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType)
    for i = 1, amount do
        local container = doCreateItemEx(containerid, 1)
        for x = 1, getContainerCapById(containerid) do
            doAddContainerItem(container, itemid, subType)
        end

        if(doPlayerAddItemEx(cid, container, true) ~= RETURNVALUE_NOERROR) then
            return false
        end
    end

    return true
end

function doPlayerTakeItem(cid, itemid, amount)
    return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
end

function doPlayerSellItem(cid, itemid, count, cost)
    if(not doPlayerTakeItem(cid, itemid, count)) then
        return false
    end

    if(not doPlayerAddMoney(cid, cost)) then
        error('[doPlayerSellItem] Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')
    end

    return true
end

function doPlayerWithdrawMoney(cid, amount)
    if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
        return false
    end

    local balance = getPlayerBalance(cid)
    if(amount > balance or not doPlayerAddMoney(cid, amount)) then
        return false
    end

    doPlayerSetBalance(cid, balance - amount)
    return true
end

function doPlayerDepositMoney(cid, amount)
    if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
        return false
    end

    if(not doPlayerRemoveMoney(cid, amount)) then
        return false
    end

    doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
    return true
end

function doPlayerAddStamina(cid, minutes)
    return doPlayerSetStamina(cid, getPlayerStamina(cid) + minutes)
end

function isPremium(cid)
    return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigValue('freePremium'))))
end

function getMonthDayEnding(day)
    if(day == "01" or day == "21" or day == "31") then
        return "st"
    elseif(day == "02" or day == "22") then
        return "nd"
    elseif(day == "03" or day == "23") then
        return "rd"
    end

    return "th"
end

function getMonthString(m)
    return os.date("%B", os.time{year = 1970, month = m, day = 1})
end

function getArticle(str)
    return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"
end

function doNumberFormat(i)
    local str, found = string.gsub(i, "(%d)(%d%d%d)$", "%1,%2", 1), 0
    repeat
        str, found = string.gsub(str, "(%d)(%d%d%d),", "%1,%2,", 1)
    until found == 0
    return str
end

function doPlayerAddAddons(cid, addon)
    for i = 0, table.maxn(maleOutfits) do
        doPlayerAddOutfit(cid, maleOutfits, addon)
    end

    for i = 0, table.maxn(femaleOutfits) do
        doPlayerAddOutfit(cid, femaleOutfits, addon)
    end
end

function getTibiaTime(num)
    local minutes, hours = getWorldTime(), 0
    while (minutes > 60) do
        hours = hours + 1
        minutes = minutes - 60
    end

    if(num) then
        return {hours = hours, minutes = minutes}
    end

    return {hours =  hours < 10 and '0' .. hours or '' .. hours, minutes = minutes < 10 and '0' .. minutes or '' .. minutes}
end

function doWriteLogFile(file, text)
    local f = io.open(file, "a+")
    if(not f) then
        return false
    end

    f:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")
    f:close()
    return true
end

function getExperienceForLevel(lv)
    lv = lv - 1
    return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end

function doMutePlayer(cid, time)
    local condition = createConditionObject(CONDITION_MUTED, (time == -1 and time or time * 1000))
    return doAddCondition(cid, condition, false)

end

function doSummonCreature(name, pos)
    local cid = doCreateMonster(name, pos, false, false)
    if(not cid) then
        cid = doCreateNpc(name, pos)
    end

    return cid
end

function getPlayersOnlineEx()
    local players = {}
    for i, cid in ipairs(getPlayersOnline()) do
        table.insert(players, getCreatureName(cid))
    end

    return players
end

function getPlayerByName(name)
    local cid = getCreatureByName(name)
    return isPlayer(cid) and cid or nil
end

function isPlayer(cid)
    return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERS
end

function isPlayerGhost(cid)
    return isPlayer(cid) and (getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE, CONDITIONID_DEFAULT) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN))
end

function isMonster(cid)
    return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end

function isNpc(cid)
    -- Npc IDs are over int32_t range (which is default for lua_pushnumber),
    -- therefore number is always a negative value.
    return isCreature(cid) and (cid < 0 or cid >= AUTOID_NPCS)
end

function isUnderWater(cid)
    return isInArray(underWater, getTileInfo(getCreaturePosition(cid)).itemid)
end

function doPlayerAddLevel(cid, amount, round)
    local experience, level, amount = 0, getPlayerLevel(cid), amount or 1
    if(amount > 0) then
        experience = getExperienceForLevel(level + amount) - (round and getPlayerExperience(cid) or getExperienceForLevel(level))
    else
        experience = -((round and getPlayerExperience(cid) or getExperienceForLevel(level)) - getExperienceForLevel(level + amount))
    end

    return doPlayerAddExperience(cid, experience)
end

function doPlayerAddMagLevel(cid, amount)
    local amount = amount or 1
    for i = 1, amount do
        doPlayerAddSpentMana(cid, getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid), false)
    end

    return true
end

function doPlayerAddSkill(cid, skill, amount, round)
    local amount = amount or 1
    if(skill == SKILL__LEVEL) then
        return doPlayerAddLevel(cid, amount, round)
    elseif(skill == SKILL__MAGLEVEL) then
        return doPlayerAddMagLevel(cid, amount)
    end

    for i = 1, amount do
        doPlayerAddSkillTry(cid, skill, getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill), false)
    end

    return true
end

function isPrivateChannel(channelId)
    return channelId >= CHANNEL_PRIVATE
end

function doBroadcastMessage(text, class)
    local class = class or MESSAGE_STATUS_WARNING
    if(type(class) == 'string') then
        local className = MESSAGE_TYPES[class]
        if(className == nil) then
            return false
        end

        class = className
    elseif(class < MESSAGE_FIRST or class > MESSAGE_LAST) then
        return false
    end

    for _, pid in ipairs(getPlayersOnline()) do
        doPlayerSendTextMessage(pid, class, text)
    end

    print("> Broadcasted message: \"" .. text .. "\".")
    return true
end

function doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost)
    local checkFlag, ghost, class = checkFlag or true, ghost or false, class or TALKTYPE_BROADCAST
    if(checkFlag and not getPlayerFlagValue(cid, PLAYERFLAG_CANBROADCAST)) then
        return false
    end

    if(type(class) == 'string') then
        local className = TALKTYPE_TYPES[class]
        if(className == nil) then
            return false
        end

        class = className
    elseif(class < TALKTYPE_FIRST or class > TALKTYPE_LAST) then
        return false
    end

    for _, pid in ipairs(getPlayersOnline()) do
        doCreatureSay(cid, text, class, ghost, pid)
    end

    print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
    return true
end

function doCopyItem(item, attributes)
    local attributes = ((type(attributes) == 'table') and attributes or { "aid" })

    local ret = doCreateItemEx(item.itemid, item.type)
    for _, key in ipairs(attributes) do
        local value = getItemAttribute(item.uid, key)
        if(value ~= nil) then
            doItemSetAttribute(ret, key, value)
        end
    end

    if(isContainer(item.uid)) then
        for i = (getContainerSize(item.uid) - 1), 0, -1 do
            local tmp = getContainerItem(item.uid, i)
            if(tmp.itemid > 0) then
                doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
            end
        end
    end

    return getThing(ret)
end

function doSetItemText(uid, text, writer, date)
    local thing = getThing(uid)
    if(thing.itemid < 100) then
        return false
    end

    doItemSetAttribute(uid, "text", text)
    if(writer ~= nil) then
        doItemSetAttribute(uid, "writer", tostring(writer))
        if(date ~= nil) then
            doItemSetAttribute(uid, "date", tonumber(date))
        end
    end

    return true
end

function getItemWeightById(itemid, count, precision)
    local item, count, precision = getItemInfo(itemid), count or 1, precision or false
    if(not item) then
        return false
    end

    if(count > 100) then
        -- print a warning, as its impossible to have more than 100 stackable items without "cheating" the count
        print('[Warning] getItemWeightById', 'Calculating weight for more than 100 items!')
    end

    local weight = item.weight * count
    return precission and weight or math.round(weight, 2)
end

function choose(...)
    local arg, ret = {...}

    if type(arg[1]) == 'table' then
        ret = arg[1][math.random(#arg[1])]
    else
        ret = arg[math.random(#arg)]
    end

    return ret
end

function doPlayerAddExpEx(cid, amount)
    if(not doPlayerAddExp(cid, amount)) then
        return false
    end

    local position = getThingPosition(cid)
    doPlayerSendTextMessage(cid, MESSAGE_EXPERIENCE, "You gained " .. amount .. " experience.", amount, COLOR_WHITE, position)

    local spectators, name = getSpectators(position, 7, 7), getCreatureName(cid)
    for _, pid in ipairs(spectators) do
        if(isPlayer(pid) and cid ~= pid) then
            doPlayerSendTextMessage(pid, MESSAGE_EXPERIENCE_OTHERS, name .. " gained " .. amount .. " experience.", amount, COLOR_WHITE, position)
        end
    end

    return true
end

function getItemTopParent(uid)
    local parent = getItemParent(uid)
    if(not parent or parent.uid == 0) then
        return nil
    end

    while(true) do
        local tmp = getItemParent(parent.uid)
        if(tmp and tmp.uid ~= 0) then
            parent = tmp
        else
            break
        end
    end

    return parent
end

function getItemHolder(uid)
    local parent = getItemParent(uid)
    if(not parent or parent.uid == 0) then
        return nil
    end

    local holder = nil
    while(true) do
        local tmp = getItemParent(parent.uid)
        if(tmp and tmp.uid ~= 0) then
            if(tmp.itemid == 1) then -- a creature
                holder = tmp
                break
            end

            parent = tmp
        else
            break
        end
    end

    return holder
end

function valid(f)
    return function(p, ...)
        if(isCreature(p)) then
            return f(p, ...)
        end
    end
end

function addContainerItems(container,items)
    local items_mod = {}
    for _, it in ipairs(items) do
        if( isItemStackable(it.id) and it.count > 100) then
            local c = it.count
            while( c > 100 ) do
                table.insert(items_mod,{id = it.id,count = 100})
                c = c - 100
            end
            if(c > 0) then
                table.insert(items_mod,{id = it.id,count = c})
            end
        else
            table.insert(items_mod,{id = it.id,count = 1})
        end
    end

    local free = getContainerCap(container.uid) - (getContainerSize(container.uid) )
    local count = math.ceil(#items_mod/ free)
    local main_bp = container.uid
    local insert_bp = main_bp
    local counter = 1
    for c,it in ipairs(items_mod) do
        local _c = isItemStackable(it.id) and (it.count > 100 and 100 or it.count) or 1
        if count > 1 then
            if (counter < free) then
                doAddContainerItem(insert_bp, it.id, _c)
            else
                insert_bp = doAddContainerItem(insert_bp, container.itemid, 1)
                count = (#items_mod)-(free-1)
                free = getContainerCap(insert_bp) 
                count = math.ceil(count/ free)
                doAddContainerItem(insert_bp, it.id, _c)
                counter = 1
            end
            counter = counter + 1
        else
            doAddContainerItem(insert_bp, it.id, _c)
        end
    end

    return main_bp
end

WAR_TYPE_STORAGE = 22222

function isGuildLeader(cid)
    return getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER
end

function isInAnyArray(array, value)
    if not type(array) == 'table' then
        return false
    end
    for k, v in pairs(array) do
        if type(v) == 'table' then
            ret = isInAnyArray(v, value)
            if ret ~= false then
                return true, k
            end
        else
            if v == value then
                return true, k
            end
        end
    end
    return false
end

function setPlayerWarType(cid, value)
    return doCreatureSetStorage(cid, WAR_TYPE_STORAGE, value)
end

function getPlayerWarType(cid)
    return getCreatureStorage(cid, WAR_TYPE_STORAGE)
end

function isGuildAntiEntrosa(guildId)
if not type(guildId) == 'number' then
    return false
end
    for _, v in pairs(Wars) do
        if type(v) == "table" then
            if v:isGuildOnWar(guildId) then
                return true
            end
        end
    end
    return false
end

function hourToNumber(str) -- By Killua
    local hour = (tonumber(str:sub(1,2))*3600) + (tonumber(str:sub(4,5)) * 60)
    if #str > 5 then
        hour = hour + tonumber(str:sub(7,8))
    end
    return hour
end

function table.elements(tabela)
local i = 0
    for _,v in pairs(tabela) do
        if v ~= nil then
            i = i + 1
        end
    end
    return i
end

 

 Meu TFS é dessa versão ai:

image.png.4514f300fc22e8bd3cd7a09ab898aa19.png

Editado por Quatroqueijos
Esqueci de colocar uma informação. (veja o histórico de edições)

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo