Postado Agosto 13, 2020 4 anos Ola, Alguém tem um script parecido que sai msg GRANDE do chão, Nesse formato ai. Se puderem passar agradeço
Postado Agosto 13, 2020 4 anos @Doidodepeda https://tibiaking.com/forums/topic/100212-countdown-horário-dos-próximos-eventos/ Editado Agosto 18, 2020 4 anos por Lurk (veja o histórico de edições)
Postado Agosto 18, 2020 4 anos 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) endend 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 trueend function getExperienceForLevel(lv) lv = lv - 1 return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3end 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 cidend function getPlayersOnlineEx() local players = {} for i, cid in ipairs(getPlayersOnline()) do table.insert(players, getCreatureName(cid)) end return playersend function getPlayerByName(name) local cid = getCreatureByName(name) return isPlayer(cid) and cid or nilend function isPlayer(cid) return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERSend 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_NPCSend 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 trueend 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 trueend function isPrivateChannel(channelId) return channelId >= CHANNEL_PRIVATEend 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 trueend 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 trueend 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 trueend 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 retend 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 trueend 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 parentend 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 holderend function valid(f) return function(p, ...) if(isCreature(p)) then return f(p, ...) end endend 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_bpend WAR_TYPE_STORAGE = 22222 function isGuildLeader(cid) return getPlayerGuildLevel(cid) == GUILDLEVEL_LEADERend 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 falseend 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 falseend for _, v in pairs(Wars) do if type(v) == "table" then if v:isGuildOnWar(guildId) then return true end end end return falseend 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 hourend function table.elements(tabela)local i = 0 for _,v in pairs(tabela) do if v ~= nil then i = i + 1 end end return iend Meu TFS é dessa versão ai: Editado Agosto 18, 2020 4 anos por Quatroqueijos Esqueci de colocar uma informação. (veja o histórico de edições)
Postado Agosto 19, 2020 4 anos Autor Na vdd, eu n queria esses negocio de horarios de eventos, oq eu tava querendo dizer é.... é q eu queria um script parecido com esse que desse pra coloca frases GRANDES no chao como esse script faz. Entenderam ?
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.