Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/22/15 em %
-
Transparência Eae galera, vim aqui pra ensinar vocês a usar a transparência no tibia, vamos começar. Primeiro você tem que ter uma versão de 0.6.5 ou superior do otclient e habilitar a feature. Para habilitar a feature você vai em game_things depois em game_things.lua e adicione isto em baixo de function load() g_game.enableFeature(GameSpritesAlphaChannel) Agora você tem que usar o Object Builder(versão 0.3.4), abra o object builder, abra seu spr/dat e bota em compile as e ative a opção transparency. Pronto, seu cliente e o server já estão aptos a receber a transparência. Agora a parte mais complicadinha, como montar a sprite com transparência para adicionar no client. Abra sua sprite no photoshop, delete todos os pixels de fundo(geralmente é rosa), deixe somente os que a sprite usa. Agora vá em opacidade e diminua para o desejado. Agora preste bem atenção, salve a imagem no formato PNG, pois ele aceita alfa. Depois vá no Object Builder, clique para abrir spr/dat, selecione a opção transparency(senão não vai reconhecer seu dat/spr), vá na sprite desejada e a adicione. Agora compile, também com a opção transparency ativada. Testei com uma outfit qualquer, resultado final: Créditos xSONYx EdMignari Baxnie2 pontos
-
Estátua Que Joga Raio By Notle
jeanflamengo e um outro reagiu a notle2012 por um tópico no fórum
vai em data\globalevents\scripts cria um arquivo com nome parede_que_atira.lua coloca isso -- config by uotl£ -- distancia contando os quadros no chao ate chegar a parede resumo tamanho do raio -- lado_raio 1 ->> 2 <<-- 3 / \ 4 | -- | \ / effect = efeito pos = posição dano = porcentagem do dano local config = { {effect = 30,pos = {x = 143, y = 120, z = 7},distancia = 7,dano = 34,lado_raio = 3}, --{effect = 29,pos = {x = 131, y = 47, z = 7},distancia = 3,dano = 34,lado_raio = 2}, --{effect = 28,pos = {x = 131, y = 48, z = 7},distancia = 5,dano = 34,lado_raio = 3}, --{effect = 28,pos = {x = 131, y = 48, z = 7},distancia = 6,dano = 34,lado_raio = 4} } -- config by uotl£ function onThink(cid, interval, lastExecution) atirador () return true end function atirador () for sinal, valor in pairs(config) do for i = 1,valor.distancia do if valor.lado_raio == 1 then doSendMagicEffect({x = valor.pos.x+i, y = valor.pos.y, z = valor.pos.z},valor.effect) check = {x = valor.pos.x+i, y = valor.pos.y, z = valor.pos.z,stackpos=255} elseif valor.lado_raio == 2 then doSendMagicEffect({x = valor.pos.x-i, y = valor.pos.y, z = valor.pos.z},valor.effect) check = {x = valor.pos.x-i, y = valor.pos.y, z = valor.pos.z,stackpos=255} elseif valor.lado_raio == 3 then doSendMagicEffect({x = valor.pos.x, y = valor.pos.y-i, z = valor.pos.z},valor.effect) check = {x = valor.pos.x, y = valor.pos.y-i, z = valor.pos.z,stackpos=255} elseif valor.lado_raio == 4 then doSendMagicEffect({x = valor.pos.x, y = valor.pos.y+i, z = valor.pos.z},valor.effect) check = {x = valor.pos.x, y = valor.pos.y+i, z = valor.pos.z,stackpos=255} end tmp = getThingFromPos(check) if(tmp.uid ~= 0) then if isPlayer(tmp.uid) then -- se quer que attack os bichos usa esse "if isCreature(tmp.uid) then" p = (getCreatureMaxHealth(tmp.uid)/100)*valor.dano doCreatureAddHealth(tmp.uid, -p) doSendAnimatedText(getCreaturePosition(tmp.uid), math.ceil (p),145) end end end end end TAG em data\globalevents\globalevents.xml coloca isso <globalevent name="parede_que_atira" interval="5" event="script" value="parede_que_atira.lua"/> uma demostração em video2 pontos -
Ja tem tempo que não mecho com script então esqueci muita coisa :b Eu fiz, saio meio poluído porque eu esqueci como usar tabela mas ta funcional (To estudando denovo) .Xml <?xml version="1.0" encoding="UTF-8"?> <npc name="Nome do npc" script="Local da Script.lua" walkinterval="0" floorchange="0" speed="900"> <health now="150" max="150"/> <look type="128" head="0" body="0" legs="0" feet="0" addons="0"/> <parameters> <parameter key="message_greet" value="Ta Afim de ganha uma vocação?"/> </parameters> </npc> .lua -- By RigBy -- -- Xtibia.com -- local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local vocation = 1 -- Vocação que precisa ter -- Primeira Vocação local vocationnome1 = 'knight' -- Nome da primeira vocação que ira se torna local vocationid1 = 3 -- id da vocação que vai ganha local item1 = 7618 -- primeiro items da primeira vocação local item2 = 7636 -- Segundo items da primeira vocação local qnt1 = 15 -- quantidade do primeiro items local qnt2 = 15 -- quantidade do segundo items -- Segunda Vocação local vocationnome2 = 'paladin' -- Nome da segunda vocação que ira se torna local vocationid2 = 4 -- id da vocação que vai ganha local items1 = 3333 -- primeiro items da segunda vocação local items2 = 4444 -- Segundo items da segunda vocação local qnts1 = 15 -- quantidade do primeiro items local qnts2 = 15 -- quantidade do segundo items function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'yes') then if getPlayerVocation(cid) == vocation then selfSay('Você que ['..vocationnome1..'] ou ['..vocationnome2..'].', cid) talkState[talkUser] = 1 else selfSay('Você não ta com a vocação certa ou ja ganho a vocação.', cid) end end if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome1..'') then if getPlayerItemCount(cid, item1) >= qnt1 and getPlayerItemCount(cid, item2) >= qnt2 then selfSay('Parabêns você acaba de se tornar '..vocationnome1..'', cid) doPlayerSetVocation(cid, vocationid1) doPlayerRemoveItem(cid, item1, qnt1) doPlayerRemoveItem(cid, item2, qnt2) else selfSay('Você não tem os items que precisa para ganha a vocação.', cid) end end if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome2..'') then if getPlayerItemCount(cid, items1) >= qnts1 and getPlayerItemCount(cid, items2) >= qnts2 then selfSay('Parabêns você acaba de ser torna '..vocationnome2..'', cid) doPlayerSetVocation(cid, vocationid2) doPlayerRemoveItem(cid, items1, qnts1) doPlayerRemoveItem(cid, items2, qnts2) else selfSay('Você não tem os items que precisa para ganha a vocação.', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Ps. Depois posto um com a tabela feita Bye2 pontos
-
bom amigo eu não sou muito bom em c++ to aprendendo agora sou melhor em script lua mais posso ter uma visão mais clara de como funciona as coisas e das diferença começado oque é source source são os código fonte q ta escrito em C++ quando não ta compilado fica só os código q da pra você modifica eles usando Dev-C++ e dps de modificado vc compila ai ele vira o seu executável já que você conhece um pouco de script lua você sabe que tem suas limitações tem que fica pensando qual funções eu faço pra isso ou pra quilo vou dar um exemplo imagine que você vai fazer um arquivo lua na pasta actions função principal é function onUse ONUSE que funciona assim que você usar algo ai ler o seu script ele foi feito c++ funciona assim vc usa uma função em lua getCreatureHealth(cid) e só vai funcionar se tiver escrita na sua sources em c++ essas linguagens funcionam acopladas a programação hospedeiros implementados em linguagens compiladas tradicionais C++ resume oque manda é c++ script lua só é um modo mais fácil de acessar as coisas que ta escrita em c++ que fica dentro do seu TheForgottenServer.exe veja isso http://www.xtibia.com/forum/topic/230926-ondroplootcid-item/ o caotic crio uma função que assim que o player ou um mostro dropa 1 item. ai vai ler oque tiver escrito em lua e fazer espero ter ajudado como eu já disse eu conheço mais script.lua e acredito que funcione assim já arrumei muito erros em script.lua oq me em dica os erro e o principal TheForgottenServer.exe q foi feito c++2 pontos
-
normal item: 15:19 You see a morning star (Atk:25, Def:11). It weighs 54.00 oz. rare: 15:19 You see a [sharpened] morning star (Atk:29, Def:11). It weighs 54.00 oz. [atk: +18%] creaturescripts.xml: <event type="login" name="randomstats_register" script="randomstats.lua"/> <event type="kill" name="randomstats_loot" script="randomstats.lua"/> randomstats.lua: local rare_popup = true local rare_text = "*rare*" local rare_effect = true local rare_effect_id = CONST_ME_MAGIC_GREEN local tiers = { [1] = { prefix = 'rare', showattr = true, -- attr prefix will be shown instead extra = {0, 0}, chance = { [1] = 10000, -- chance for basic stat [2] = 5000 -- chance for second stat } }, [2] = { prefix = 'epic', extra = {7, 20}, -- additional percent bonus chance = { [1] = 3333, [2] = 25000 } }, [3] = { prefix = 'legendary', extra = {20, 35}, chance = { [1] = 1000, [2] = 100000 -- 2 bonuses always } }, } --! attributes local attr = { atk = { name = 'atk', prefix = 'sharpened', percent = {7, 25}, }, def = { name = 'def', prefix = 'fortified', percent = {7, 25}, }, extradef = { name = 'extra def', prefix = 'balanced', percent = {7, 25}, }, arm = { name = 'arm', prefix = 'flawless', percent = {7, 20}, }, hitchance = { name = 'accuracy', prefix = 'accurate', percent = {10, 25}, }, shootrange = { name = 'range', prefix = 'powerful', percent = {17, 34}, }, charges = { name = 'charges', prefix = 'charged', percent = {30, 45}, }, duration = { name = 'time', prefix = 'unique', percent = {35, 50}, }, --[[ not available in 1.1 attackSpeed = {}, extraAttack = {}, ]] } local stats = { [1] = {ITEM_ATTRIBUTE_ATTACK, attr.atk}, [2] = {ITEM_ATTRIBUTE_DEFENSE, attr.def}, [3] = {ITEM_ATTRIBUTE_EXTRADEFENSE, attr.extradef}, [4] = {ITEM_ATTRIBUTE_ARMOR, attr.arm}, [5] = {ITEM_ATTRIBUTE_HITCHANCE, attr.hitchance}, [6] = {ITEM_ATTRIBUTE_SHOOTRANGE, attr.shootrange}, [7] = {ITEM_ATTRIBUTE_CHARGES, attr.charges}, [8] = {ITEM_ATTRIBUTE_DURATION, attr.duration}, -- not available in 1.1 -- [9] = {ITEM_ATTRIBUTE_ATTACKSPEED, attr.attackSpeed}, -- [10] = {ITEM_ATTRIBUTE_EXTRAATTACK, attr.extraAttack}, } function stat_getItemDuration(item) local it_id = item:getId() local tid = ItemType(it_id):getTransformEquipId() if tid > 0 then item:transform(tid) local vx = item:getAttribute(ITEM_ATTRIBUTE_DURATION) item:transform(it_id) item:removeAttribute(ITEM_ATTRIBUTE_DURATION) return vx end return 0 end function loot_attrToVal(item, attr) local id = ItemType(item:getId()) local v = { [ITEM_ATTRIBUTE_ATTACK] = id:getAttack(), [ITEM_ATTRIBUTE_DEFENSE] = id:getDefense(), [ITEM_ATTRIBUTE_EXTRADEFENSE] = id:getExtraDefense(), [ITEM_ATTRIBUTE_ARMOR] = id:getArmor(), [ITEM_ATTRIBUTE_HITCHANCE] = id:getHitChance(), [ITEM_ATTRIBUTE_SHOOTRANGE] = id:getShootRange(), [ITEM_ATTRIBUTE_CHARGES] = id:getCharges(), [ITEM_ATTRIBUTE_DURATION] = stat_getItemDuration(item), -- not available in 1.1 -- [ITEM_ATTRIBUTE_ATTACKSPEED] = item:getAttackSpeed(), -- [ITEM_ATTRIBUTE_EXTRAATTACK] = item:getExtraAttack(), } return v[attr] end function assign_loot_Stat(c) local rares = 0 local h = c:getItemHoldingCount() if h > 0 then for i = 1, h do local available_stats = {} local it_u = c:getItem(i - 1) local it_id = ItemType(it_u:getId()) if it_u:isContainer() then local crares = assign_loot_Stat(it_u) rares = rares + crares else if not it_id:isStackable() then local wp = it_id:getWeaponType() if wp > 0 then if wp == WEAPON_SHIELD then -- type shield table.insert(available_stats, stats[2]) elseif wp == WEAPON_DISTANCE then -- type bow table.insert(available_stats, stats[1]) table.insert(available_stats, stats[5]) table.insert(available_stats, stats[6]) -- not available in 1.1 -- table.insert(available_stats, stats[9]) elseif wp == WEAPON_WAND then -- type wand table.insert(available_stats, stats[6]) -- not available in 1.1 -- table.insert(available_stats, stats[9]) elseif isInArray({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, wp) then -- melee weapon if it_id:getAttack() > 0 then table.insert(available_stats, stats[1]) end if it_id:getDefense() > 0 then table.insert(available_stats, stats[2]) end if it_id:getExtraDefense() ~= 0 then table.insert(available_stats, stats[3]) end -- not available in 1.1 -- table.insert(available_stats, stats[10]) end else -- armors, amulets, runes and rings if it_id:getArmor() > 0 then table.insert(available_stats, stats[4]) end if it_id:getCharges() > 0 then table.insert(available_stats, stats[7]) end local eq_id = it_id:getTransformEquipId() if eq_id > 0 then table.insert(available_stats, stats[8]) end end end end if #available_stats > 0 then -- skips it all if it's empty local tier = math.random(1, #tiers) if #tiers[tier].chance > 0 then local statsStored = 0 local stats_used = {} for stat = 1, #tiers[tier].chance do if #available_stats > 0 then -- stops if no more stats available if stat - 1 == statsStored then -- checks when it's time to stop adding stats if math.random(1, 100000) <= tiers[tier].chance[stat] then statsStored = statsStored + 1 local selected_stat = math.random(1, #available_stats) table.insert(stats_used, available_stats[selected_stat]) table.remove(available_stats, selected_stat) end end end end if #stats_used > 0 then rares = rares + 1 local stat_desc = {} for stat = 1, #stats_used do local v = math.random( stats_used[stat][2].percent[1], stats_used[stat][2].percent[2] ) + math.random( tiers[tier].extra[1], tiers[tier].extra[2] ) local basestat = loot_attrToVal(it_u, stats_used[stat][1]) it_u:setAttribute(stats_used[stat][1], basestat + math.abs(basestat * v / 100)) table.insert(stat_desc, '[' .. stats_used[stat][2].name .. ': +' .. v .. '%]') end if tiers[tier].showattr then for stat = 1, #stats_used do it_u:setAttribute(ITEM_ATTRIBUTE_NAME, "[" .. stats_used[stat][2].prefix .. "]" .. it_u:getAttribute(ITEM_ATTRIBUTE_NAME)) end it_u:setAttribute(ITEM_ATTRIBUTE_NAME, it_u:getAttribute(ITEM_ATTRIBUTE_NAME) .. " " .. it_id:getName()) else it_u:setAttribute(ITEM_ATTRIBUTE_NAME, tiers[tier].prefix .. " " .. it_id:getName()) end it_u:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, table.concat(stat_desc, "\n")) end end end end end return rares end function find_loot_Container(pos) local rares = 0 local c = Tile(pos):getTopDownItem() if c ~= nil then if c:isContainer() then rares = rares + assign_loot_Stat(c) if rares > 0 then if rare_popup then local spectators = Game.getSpectators(pos, false, true, 7, 7, 5, 5) for i = 1, #spectators do spectators[i]:say(rare_text, TALKTYPE_MONSTER_SAY, false, spectators[i], pos) end end if rare_effect then pos:sendMagicEffect(rare_effect_id) end end return true end end end function onKill(player, target, lastHit) if (not isSummon(target)) then addEvent(find_loot_Container, 2, target:getPosition()) end return true end function onLogin(player) player:registerEvent("randomstats_loot") return true end Créditos : zbisu1 ponto
-
*Informações +Edições +Print's +Erros/Bug's +Creditos +Download+Scan QUALQUER ERRO E BUG, COMENTAR NESSE TÓPICO Desculpa pelos erros ortográficos. ah antes que me esqueça ID da vara de pesca 25801 ponto
-
Informações Suport: (MYSQL E SQL) Base: (PGALAXY) - GabrielTXU Executavel (Distro): TFS 0.3.6 Versao: 8.54 + IP Changer Mapa Proprio (120 Hunts + 5 Quests) Servidor Estavel Uptime de (580 hrs) Testado Player EXP: 10x Pokemon EXP: 15x Catch System Inovado (Rate Por Skill "Catching" + Rate normal) Catch Esta Balanceado Catch Channel System (Veja todos os Catch do Servidor Pelo Canal Catch-Channel) Bonus Level System (Marca na Ball a quantia de Level que voce Upou Nesse Pokemon, Assim mudando o Comercio de Pokemons) Pokemon Level Max : 300 Pokemon Boost Max FREE: +50 Pokemon Boost Max VIP: +80 + (Bonus Boost) Novo Balanceamentos dos Pokemons Goback Surf Fly 6 Pokemons (na bag) Dive Order Pokedex Respaw de Shiny Aleatorio (1%) Configuraçoes 100% do PokeDashAdvanced na Lib/Configuration.lua e etc... Passive (Alguns Shinys nao apareçem o Passivo) Torneio Win e Lose Score PVP e PVP Team Teleport Potions e Revives Apricorns e Vitaminas Nuse Joy Cassino Invasao automatica (09:00 as 21:00) Npcs (Aura,mark,Pokemon Collector,lock ball e etc.....) Aura Task System (NPC MEGA TASK) 7 BALL Clan Look Score Rare Candy Evoluçao (Automatica e Por Stones) 90% Automatico e 10 % Stones Fome e Sentimento 1-2 Geraçao Full 3-6 Geraçao Imcompleta Shinys (1-2 Geraçao Full) Shinys (3-6 Geraçao Imcompleta) Erros [14/12/2014 18:12:37] [Error - CreatureScript Interface] [14/12/2014 18:12:37] data/creaturescripts/scripts/atk.lua:onAttack [14/12/2014 18:12:37] Description: [14/12/2014 18:12:37] (luaDoMonsterSetTarget) Monster not found [Esse Erro acontece na arena pvp e nao sei como arrumar, se tirar esse script buga o ataque dos pokemons "Wild" eles começam a atacar o jogador ao inves de Seu Pokemon] Alguns Erros vão surgir durante o Jogo: Erro no Exp.lua Erro Na hora de Evoluir (Automatico) erro de MaxHealth, algo assim Bugs gerais Os Pokemons Uniques Fazem Crashar o Servidor (Se voce pegar uma Pokeball Unique e jogar no Teleport, o Servidor Crasha) Os Pokemon Lock Fazem Crashar o Servidor (Se voce pegar uma Pokeball Lock e jogar no Teleport, o Servidor Crashar) Pode ser que + Alguns Atributos do PDA fazem Crashar o Servidor e estamos a Procura Disso Retirem o NPC SR.SPLIT (Segundo Andar do CP) Prints Downloads Server + Client Sources Utilitário: Map Padventures S/Respawns Scans Server + Client Sources Créditos Aberos Gristony GabrielTXU NextBR Valaquinhas Sukito TFS Team1 ponto
-
Fala galera do xtibia, Hoje estou trazendo o servidor PDA by: Bolz editado por mim, Passei um bom tempo Editando ele Espero que gostem;; • Menu: ├ Informações; ├ Ediçoes; ├ Erros; ├ Prints; ├ Download; └ Creditos. • Informações Basicas • • Erros do servidor • • PrintScreen • • Download's • Servidor PDA by: Bolz [Editado Por Mim ] http://www.4shared.com/rar/06OG8lB5ba/pda_by_bolz_verso_god_anna.html? OTClient:: http://www.4shared.com/rar/x5LgTQKLce/OTclient.html? @Atualizado 02/04/2014 • Menu: ├ Ediçoes; ├ Prints; ├ Download; • Edições / ajustes • • PrintScreen • • Download's • Servidor PDA by: Bolz [Editado Por Mim v2 ] http://www.4shared.com/rar/_lB31rwxba/PDA_By_Bolz_Verso_GOD_anna_v2.html? OTclient v2:: http://www.4shared.com/rar/aiqka_kQce/OTclient_v2.html? • Creditos • Slicer (pelo servidor) Brun123 (por alguns scripts, e por criar o pda) Stylo Maldoso (pelo mapa) Bolz (por editar Maior Parte do Server) Eu ( por Corrigir Varios bugs e Editar varias coisas no Servidor) Gabrielsales ( pelos Systemas:: "Held item", "Ditto system" ) valakas ( Por ter ajudado a resolve o Bug da Barra de Ataques do OTclient v2) Xtibia (por alguns scripts) Cometem OQ acharam do Server Tou parando com as atualizações por enquanto POr causa das Provas (Tenho que Passa) Mais quando terminar as Aulas posto Nova atualiazação... Obrigado a Todos que Elogiaram minha edição nesse Belo servidor1 ponto
-
Olá pessoas! Eu estou disponibilizando para você uma versão do OTServer PokeStorm 3.20. Antes de baixarem eu gostaria de enfatizar alguns pontos: - A compilação do servidor está em linux, não há nenhuma viabilidade/possibilidade de rodar em Windows. - Incluem-se neste download: servidor, cliente e site. - Esta versão e bem antiga, não a atual do PokeStorm. - Este servidor requer um nível superior de conhecimento para deixar-lo online. O servidor requer configurar uma das versões do S.O de linux antes, é necessário aplicada uma senha própria no mysql - Eu acredito que a password é: pKe_StoRM_21 (mysql ≠ phpmyadmin). - O servidor só abre com este cliente, não abri-rá com outros tipos de cliente. Pelo menos onde eu saiba ate o momento. - Este servidor é altamente protegido, deve haver mais problemas para deixá-lo online. Então podemos dizer que ele é base de estudos dos scripts atuais do PokeStorm. Sugestões para deixar online ou fazer um teste: - Como o servidor só roda em LINUX, você pode simular uma maquina virtual em seu computador. Existem diversos programas que fazem isto, como VMWare ou VirtualBOX. Nas versões do Windows 8 ou superior você pode usar o Hyper-v que tem a mesma função, porem não precisara instalar nenhum programa. - Recomento que utilize as versões do Debian ou Ubuntu recentes, você terá que instalar diversas bibliotecas/libs para rodar o "executável" do servidor. - Lembre-se: Maquinas Virtuais consomem muito de um computador, computadores com baixo hardware ou básicos dificilmente vão rodar o servidor online, é possível ligar a VM, mas o servidor vai causar uma "lag" em sua maquina. Imagens & Conteúdos do servidor: - Infelizmente não há um tópico de referencia no XTIBIA, mas muitos devem saber sobre o servidor. Baixar servidor, cliente e Website: - Mega: Download - Scan: VírusTotal Creditos: - Equipe PokeStorm - criador da versão do servidor. - Equipe PokeSilver - disponibilizado o server. - LekoDS/Lervisc - por disponibilizar a copia para a comunidade. Nota: Não dou suporte sobre a instalação do servidor, funções e outras dúvidas! Então não ligue se eu ignorar mensagens privadas. Infelizmente começaram a usar esta cópia do PokeStorm 3.20 como fonte de vendas/lucro (estavam revendendo o servidor) que é sacanagem já que Open Tibia foi aberto a todos Então, Divirta-se! Por favor, poste um comentário sobre o servidor!1 ponto
-
CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.1 ponto
-
Quem aqui faz faculdade disso? Se sim, qual área se especializou?1 ponto
-
Mw e Wild
ScythePhantom reagiu a Qwizer por uma questão
voce tem as sources ? se tiver e so abrir o const.h e procurar ITEM_MAGICWALL_SAFE e ITEM_WILDGROWTH_SAFE trocar pelo id que quer e compilar novamente.1 ponto -
Depende o que deseja alcançar e que tipo de jogadores também, mas particularmente eu acredito que compense mexer mais nas atuais versões de servidores/tfs, pelas inúmeras possibilidades de coisas que pode se fazer, além de que é fácil aprender mexer com as novas versões, tem inúmeros tutoriais espalhados pelo fórum. You see!~1 ponto
-
só se você usar um servidor com source as chance dele ser crashado são diminuidas, mais acredito que o kpdo do cater seja estavel, porem é limitado, lá você nao consegue por mais do que de 16 player online, para tirar isso tem que ser vip de graça, portanto ja é um servidor dispensavel, servidor com source você não tem esse tipo de problema, porque nas source você edita como quiser, sistemas que você pode estar colocando nas sourceé nick TV icon system por source opcode sistema passivo e agressivo add novas funções varios sistema até esqueço deles enfim isso é o que você pode fazer com source mesmo que seu serve ja tenha tudo isso, eu não recomendo, servidores que não tem source são apenas para brincar com os amigos1 ponto
-
[Pedido] Transparencia
xSONYx reagiu a eternaleduardo por um tópico no fórum
Só precisa de 1 linha de código g_game.enableFeature(GameSpritesAlphaChannel)1 ponto -
http://www.phdowns.com/2013/12/windows-7-download-todas-as-versoes.html o meu atual é dai1 ponto
-
A versão que gasta menos memória é a segunda. Digo isso julgando tanto os códigos apresentados quanto as funções utilizadas.1 ponto
-
Pergunta premiada
Soulviling reagiu a gabrielbsales por um tópico no fórum
Bom, estava sem o que fazer, e fiz esse simples script de "pergunta premiada". Como funciona? Um membro da staff faz uma pergunta com um comando, e então, o primeiro player a responder corretamente, recebe o prêmio definido. Imagens: Bom, vamos ao que interessa. 1º - Na pasta data/talkactions/script/, crie um arquivo chamado question.lua, e nele coloque: 2º - No arquivo data/talkactions/talkactions.xml, adicione as seguintes tags: Lembrando: Espero que seja útil. Créditos: Featzen1 ponto -
Aqui só começou a ficar desse jeito depois que colocaram o banner do Naruto, se não mim engano o avuenja tinha reportado esse bug já1 ponto
-
Testou? Caso não funcionou me avise.1 ponto
-
Gostei da última, mais do que as outras ;d1 ponto
-
[Mapper] Fawz... voltando a mapear..
Lumus reagiu a Administrador por um tópico no fórum
Muito legal, só uma observação..1 ponto -
Tu teria que fazer o uso dessa função : https://otland.net/threads/creatureevent-onmoveitem-cid-item-count-tocontainer-fromcontainer.185781/1 ponto
-
O evento se resume a cada x horário configurável, é escolhido dentre os player online, 1 pessoa e ela recebe uma surprise bag (com items aleatórios para ganhar também configurável). Globalevents/scripts ---> lottery.lua local config = { lottery_hour = "1 Hours", -- after how many hours should lottery begin, explains itself really... reward_count = 4, -- How much items/rewards? so you want 4 random items then write 4... website = 1 -- Doesn't need explanation } function onThink(interval, lastExecution) local players = getPlayersOnline() local list = {} for i, tid in ipairs(players) do list[i] = tid end local winner = list[math.random(1, #list)] if(config.website == 1) then db.executeQuery("INSERT INTO `lottery` (`name`) VALUES ('".. getCreatureName(winner) .."');") end doBroadcastMessage('[LOTTERY SYSTEM] Winner: '.. getCreatureName(winner) ..', Reward: Suprise Bag' ..'! - Congratulations! (Next Lottery in '.. config.lottery_hour ..')') doPlayerAddItem(winner, 6571,config.reward_count) return TRUE end globalevents.xml <globalevent name="lottery" interval="4050000" event="script" value="lottery.lua"/> Actions/scripts --> surprisebag.lua -- CREATED BY GHETTOBIRD --! local PRESENT_BLUE = {2494, 2472} -- Add more items if you want just seperate them with an item id... local PRESENT_RED = {2160, 2514} -- same as above function onUse(cid, item, fromPosition, itemEx, toPosition) local count = 1 if(item.itemid == 6570) then local randomChance = math.random(1, #PRESENT_BLUE) if(randomChance == 1) then count = 2 elseif(randomChance == 2) then count = 2 end doPlayerAddItem(cid, PRESENT_BLUE[randomChance], count) elseif(item.itemid == 6571) then local randomChance = math.random(1, #PRESENT_RED) if randomChance > 0 and randomChance < 4 then count = 2 end doPlayerAddItem(cid, PRESENT_RED[randomChance], count) end doSendMagicEffect(fromPosition, CONST_ME_GIFT_WRAPS) doRemoveItem(item.uid, 1) return true end actions.xml <action fromid="6570" toid="6571" event="script" value="surprisebag.lua"/> Créditos : ghetobird1 ponto
-
É um sistema já conhecido da versão 7.4. Para instalar em seu servidor basta configurar, os script de acordo com o nome da pos da img abaixo : creaturescripts.xml <event type="preparedeath" name="pvparena" script="pvparena.lua"/> <event type="login" name="pvparena_r" script="pvparena.lua"/> pvparena.lua local arena = { frompos = {x = 1041, y = 985, z = 9}, topos = {x = 1052, y = 991, z = 9}, exitpos = {x = 1038, y = 988, z = 8} } function onPrepareDeath(player, lastHitKiller, mostDamageKiller) if player:isPlayer() then local ppos = player:getPosition() if isInRange(ppos, arena.frompos, arena.topos) then local maxhp = player:getMaxHealth() player:addHealth(maxhp) addEvent(doCreatureAddHealth, 100, player:getId(), maxhp) player:sendTextMessage(MESSAGE_STATUS_WARNING,"[Arena]: You lost the duel.") end if isInRange(ppos, arena.frompos, arena.topos) then player:teleportTo(arena.exitpos) return true end end return true end function onLogin(player) player:registerEvent("pvparena") return true end actions.xml <action uniqueid="6040" script="arenapvp.lua"/> pvparena.lua -- CONFIG BEGINS HERE -- local arena = { frompos = {x = 1041, y = 985, z = 9}, topos = {x = 1052, y = 991, z = 9}, exitpos = {x = 1038, y = 988, z = 8} } local checkpvparena = true -- checks if someone is blocking the arena local duel_limit = 15 * 60 -- in seconds local player1pos = {x = 1040, y = 987, z = 8} local leverpos = {x = 1040, y = 988, z = 8} local player2pos = {x = 1040, y = 989, z = 8} local nplayer1pos = {x = 1042, y = 988, z = 9} local nplayer2pos = {x = 1051, y = 988, z = 9} -- CONFIG ENDS HERE -- function lever_back(uid) doTransformItem(uid,1945) return true end function kick_r() if getCreaturesInQuestArea(TYPE_PLAYER, arena.frompos, arena.topos, GET_COUNT) > 1 then for a = arena.frompos.x, arena.topos.x do for b = arena.frompos.y, arena.topos.y do pos = {x=a,y=b,z=11,stackpos = 255} if(isPlayer(getTopCreature(pos).uid)) then doPlayerSendTextMessage(getTopCreature(pos).uid,MESSAGE_INFO_DESCR,"Time up. Round drawn.") doTeleportThing(getTopCreature(pos).uid,arena.exitpos) end end end end return true end local TYPE_PLAYER = 1 local TYPE_MONSTER = 2 local TYPE_NPC = 3 local TYPE_ALL = 4 local GET_COUNT = 1 local GET_UID = 2 function getCreaturesInQuestArea(type, fromPos, toPos, get, countSummon) local types = { [TYPE_PLAYER] = isPlayer, [TYPE_MONSTER] = isMonster, [TYPE_NPC] = isNpc, [TYPE_ALL] = isCreature } local tmp = {} local t = types[type] if not t then return print("[!] --> [Warning - Function::getCreaturesInQuestArea] Unknown type " .. (type or "(nil value)")) end local thing local pos for x = fromPos.x, toPos.x do for y = fromPos.y, toPos.y do for z = fromPos.z, toPos.z do pos = {x = x, y = y, z = z} thing = getTopCreature(pos) if t(thing.uid) then table.insert(tmp, thing.uid) if not countSummon and isSummon(thing.uid) then for i = 1, #tmp do if tmp[i] == thing.uid then table.remove(tmp, i) break end end end end end end end return (get == GET_COUNT and #tmp or get == GET_UID and tmp or print("[Warning - Function::getCreaturesInQuestArea] Unknown type to get " .. (get or "(nil value)"))) end function onUse(player, item, frompos, item2, topos) local cid = player:getId() if item.itemid == 1945 then if isPlayer(getTopCreature(player1pos).uid) == true and isPlayer(getTopCreature(player2pos).uid) == true then if checkpvparena then if getCreaturesInQuestArea(TYPE_PLAYER, arena.frompos, arena.topos, GET_COUNT) > 0 then if getCreaturesInQuestArea(TYPE_PLAYER, arena.frompos, arena.topos, GET_COUNT) == 1 then for c = arena.frompos.x, arena.topos.x do for d = arena.frompos.y, arena.topos.y do pos = {x=c,y=d,z=11, stackpos = 255} if(isPlayer(getTopCreature(pos).uid)) then doPlayerSendTextMessage(getTopCreature(pos).uid,MESSAGE_INFO_DESCR,"You have been kicked from the arena.") doTeleportThing(getTopCreature(pos).uid,arena.exitpos) end end end else arena_counter = getGlobalStorageValue(24510) - os.time() if arena_counter < 0 then for c = arena.frompos.x, arena.topos.x do for d = arena.frompos.y, arena.topos.y do pos = {x=c,y=d,z=11, stackpos = 255} if(isPlayer(getTopCreature(pos).uid)) then doPlayerSendTextMessage(getTopCreature(pos).uid,MESSAGE_INFO_DESCR,"You have been kicked from the arena.") doTeleportThing(getTopCreature(pos).uid,arena.exitpos) end end end else doCreatureSay(cid, "There is still active duel.\n" .. showTimeLeft(arena_counter, true) .. " left.\nPlease wait for your turn.", TALKTYPE_ORANGE_1) pvpaback = addEvent(lever_back, 5000, item.uid) return false end end end end -- let the match begin doSendMagicEffect(player1pos,CONST_ME_POFF) doSendMagicEffect(player2pos,CONST_ME_POFF) doPlayerSendTextMessage(getTopCreature(player1pos).uid,MESSAGE_STATUS_WARNING,"Fight!") doPlayerSendTextMessage(getTopCreature(player2pos).uid,MESSAGE_STATUS_WARNING,"Fight!") doTeleportThing(getTopCreature(player1pos).uid,nplayer1pos) doTeleportThing(getTopCreature(player2pos).uid,nplayer2pos) doSendMagicEffect(nplayer1pos,CONST_ME_TELEPORT) doSendMagicEffect(nplayer2pos,CONST_ME_TELEPORT) doTransformItem(getTileItemById(leverpos, 1945).uid,item.itemid+1) setGlobalStorageValue(24510,os.time() + duel_limit) pvpaback = addEvent(lever_back, 5000, item.uid) if arena_kick_r then stopEvent(arena_kick_r) end arena_kick_r = addEvent(kick_r, duel_limit * 1000) else doCreatureSay(cid, "You need two players to enter the arena.", TALKTYPE_ORANGE_1) pvpaback = addEvent(lever_back, 5000, item.uid) return false end else -- if timer or checking is offline player can push the lever manually if pvpaback then doPlayerSendDefaultCancel(cid, RETURNVALUE_CANNOTUSETHISOBJECT) else doTransformItem(getTileItemById(leverpos, 1946).uid,1945) end end return true end Créditos zbizu.1 ponto
-
AREA1 = { {0, 0, 0}, {0, 3, 0}, {0, 0, 0} } local function sendHealingEffect(cid, position, loopCount) local player = Player(cid) if not player then return end position:sendDistanceEffect(player:getPosition(), CONST_ANI_SMALLHOLY) player:addHealth(math.max(100, 150)) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) if loopCount == 0 then player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA) end end function onCastSpell(creature, var) local playerPos = creature:getPosition() local loopCount = 12 creature:say('Heal me my brothers!', TALKTYPE_MONSTER_SAY) for i = 1, loopCount do local position = Position(playerPos.x + math.random(-4, 3), playerPos.y + math.random(-3, 2), playerPos.z) addEvent(doAreaCombatHealth, i * 75, creature:getId(), COMBAT_PHYSICALDAMAGE, position, createCombatArea(AREA1), 0, 0, CONST_ME_ASSASSIN) addEvent(sendHealingEffect, i * 75, creature:getId(), position, loopCount - i) end return false end local function targetEffect(cid) local player = Player(cid) if not player then return end local effect = CONST_ANI_REDSTAR local orig = player:getPosition() local d1, d2 = {z = orig.z}, {z = orig.z} d1.x = orig.x - 5 d2.x = orig.x + 5 for i = -2, 2 do d1.y = orig.y + i d2.y = d1.y orig:sendDistanceEffect(d1, effect) orig:sendDistanceEffect(d2, effect) end d1.y = orig.y - 3 d2.y = orig.y + 3 for i = -4, 4 do d1.x = orig.x + i d2.x = d1.x orig:sendDistanceEffect(d1, effect) orig:sendDistanceEffect(d2, effect) end end local function backOldPosition(cid, oldPosition) local player = Player(cid) if not player then return end player:teleportTo(oldPosition) player:setGhostMode(false) end local function jumpEffect(cid, target) local player = Player(cid) if not player then return end local target = Creature(target) if target then player:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_EXPLOSION) end end local function jumpOnTarget(cid, target, targetCount, oldPosition) local player = Player(cid) if not player then return end local target = Creature(target) if target then addEvent(targetEffect, 100, cid) player:teleportTo(target:getPosition()) player:setGhostMode(true) doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -1, -100, CONST_ME_ASSASSIN) if targetCount == 0 then addEvent(backOldPosition, 400, cid, oldPosition) end end end local function extractRandomValuesFromTable(tbl) --By Printer(This will make sure not to select a value twice from the table) if #tbl == 0 then return false end return table.remove(tbl, math.random(#tbl)) end function onCastSpell(creature, var) local targets = {} local playerPos = creature:getPosition() local spectators = Game.getSpectators(playerPos, false, false, 0, 10, 0, 10) for i = 1, #spectators do local specs = spectators[i] if specs ~= creature and not specs:isNpc() then targets[#targets+1] = specs end end if #targets == 0 then creature:sendCancelMessage('There is no targets in sight.') playerPos:sendMagicEffect(CONST_ME_POFF) return false end local targetCount = #targets for i = 1, #targets do local randTarget = extractRandomValuesFromTable(targets) addEvent(jumpOnTarget, i * 400, creature:getId(), randTarget:getId(), targetCount - i, playerPos) addEvent(jumpEffect, i * 300, creature:getId(), randTarget:getId()) end return false end local function sendDistanceEffectDelay(cid, fromPos, toPos, effect) local player = Player(cid) if not player then return end fromPos:sendDistanceEffect(toPos, effect) end local function ninjaJumpDash(cid, target, oldPos, lastJump, back) local player = Player(cid) if not player then return end local target = Creature(target) if not target then player:setGhostMode(false) return end if lastJump then player:setGhostMode(false) end if back then player:teleportTo(oldPos) else player:teleportTo(target:getPosition()) end doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -1, -100, CONST_ME_THUNDER) end function onCastSpell(creature, var) local cid = creature:getId() local playerPos = creature:getPosition() creature:setGhostMode(true) addEvent(ninjaJumpDash, 0, cid, target:getId(), playerPos, false, false) addEvent(sendDistanceEffectDelay, 100, cid, playerPos, target:getPosition(), CONST_ANI_ENERGY) addEvent(sendDistanceEffectDelay, 300, cid, target:getPosition(), playerPos, CONST_ANI_ENERGY) addEvent(ninjaJumpDash, 400, cid, target:getId(), playerPos, false, true) addEvent(ninjaJumpDash, 600, cid, target:getId(), playerPos, false, false) addEvent(sendDistanceEffectDelay, 700, cid, playerPos, target:getPosition(), CONST_ANI_ENERGY) addEvent(sendDistanceEffectDelay, 1000, cid, target:getPosition(), playerPos, CONST_ANI_ENERGY) addEvent(ninjaJumpDash, 1100, cid, target:getId(), playerPos, false, true) addEvent(ninjaJumpDash, 1300, cid, target:getId(), playerPos, false, false) addEvent(sendDistanceEffectDelay, 1400, cid, playerPos, target:getPosition(), CONST_ANI_ENERGY) addEvent(sendDistanceEffectDelay, 1700, cid, target:getPosition(), playerPos, CONST_ANI_ENERGY) addEvent(ninjaJumpDash, 1800, cid, target:getId(), playerPos, true, true) return false end function isWalkable(cid, pos) local tile = Tile(pos) if not tile then return false end if tile:queryAdd(cid) == 1 and not tile:hasFlag(TILESTATE_PROTECTIONZONE) then return true end return false end local function jumpBehindTarget(cid, target) local player = Player(cid) local target = Creature(target) local targetPos = target:getPosition() local targetPositions = { north = Position(targetPos.x, targetPos.y-1, targetPos.z), east = Position(targetPos.x+1, targetPos.y, targetPos.z), west = Position(targetPos.x-1, targetPos.y, targetPos.z), south = Position(targetPos.x, targetPos.y+1, targetPos.z) } local targetDir = target:getDirection() if targetDir == NORTH then dir = targetPositions.south elseif targetDir == EAST then dir = targetPositions.west elseif targetDir == WEST then dir = targetPositions.east elseif targetDir == SOUTH then dir = targetPositions.north end return dir end local function oldPos(cid, oldPos) local player = Player(cid) if not player then return end player:teleportTo(oldPos) end local function checkHasTarget(cid, count, oldPos) local player = Player(cid) if not player then return end if count < 1 then player:setGhostMode(false) return end local target = player:getTarget() if target then local behindTarget = jumpBehindTarget(cid, target:getId()) if isWalkable(cid, behindTarget) then player:teleportTo(behindTarget) else player:teleportTo(target:getPosition()) addEvent(backOldPos, 100, cid, oldPos) end player:setDirection(target:getDirection()) player:setGhostMode(false) doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -20, -100, CONST_ME_FIREATTACK) return true end addEvent(checkHasTarget, 1 * 100, cid, count - 1) end function onCastSpell(creature, var) local playerPos = creature:getPosition() creature:setGhostMode(true) playerPos:sendMagicEffect(CONST_ME_POFF) addEvent(checkHasTarget, 1 * 250, creature:getId(), 50, playerPos) return false end Créditos : Printer1 ponto
-
Tem duas versões, em forma de globalevent e talkaction GLOBAL EVENT -- globalevents.xml <globalevent type="startup" name="RainItems" script="rainitems.lua"/> rainitems.lua local config = { items = {{8306,1}, {2157,2}, {7735,1}, {8306,1}, {2184,1}, {9932,1}, {8306,1}, {9693,1}, {2148, 100}}, interval = 1000, -- time between checks areas = { [1] = { startHour = 19, startMin = 15, waves = 10, interval = 10000, chancePerTile = 10, -- % maxItemsPerWave = 15, from = {x = 1021, y = 994, z = 7}, to = {x = 1024, y = 998, z = 7} }, [2] = { startHour = 18, startMin = 43, waves = 10, interval = 10000, chancePerTile = 10, maxItemsPerWave = 15, from = {x = 1026, y = 995, z = 7}, to = {x = 1028, y = 1001, z = 7} } } } local executed = {} function Position.isPathable(pos) local tile = Tile(pos) if tile == nil then return false end return not tile:hasFlag(TILESTATE_BLOCKSOLID) end function rainWave(arena) local from = config.areas[arena].from local to = config.areas[arena].to local items_spawned = 0 for x = from.x, to.x do for y = from.y, to.y do for z = from.z, to.z do if math.random(1, 100) < config.areas[arena].chancePerTile and items_spawned < config.areas[arena].maxItemsPerWave then local pos = {x = x, y = y, z = z} if Position(pos):isPathable() then local item = math.random(1, #config.items) doCreateItem(config.items[item][1], math.random(1, config.items[item][2]), pos) Position(pos):sendMagicEffect(CONST_ME_MAGIC_RED) items_spawned = items_spawned + 1 end end end end end end function startRain(arena) broadcastMessage("Rain item event begins!") for i = 1, config.areas[arena].waves do if i == 1 then rainWave(arena) else addEvent(rainWave, config.areas[arena].interval * (i - 1), arena) end end addEvent(broadcastMessage, config.areas[arena].interval * (config.areas[arena].waves - 1), "Rain items event ended.") end function checkRain() local hour = tonumber(os.date("%H")) local min = tonumber(os.date("%M")) if not executed[hour] then executed[hour] = {} end for i = 1, #config.areas do if hour == config.areas[i].startHour and min == config.areas[i].startMin then if not executed[hour][min] then startRain(i) addEvent(checkRain, config.interval) executed[hour][min] = true end end if tonumber(os.date("%H", os.time() + (30 * 60))) == config.areas[i].startHour and tonumber(os.date("%M", os.time() + (30 * 60))) == config.areas[i].startMin then if not executed[hour][min] then broadcastMessage("Rain items event will start in 30 minutes.") addEvent(checkRain, config.interval) executed[hour][min] = true end end if tonumber(os.date("%H", os.time() + (1 * 60))) == config.areas[i].startHour and tonumber(os.date("%M", os.time() + (1 * 60))) == config.areas[i].startMin then if not executed[hour][min] then broadcastMessage("Rain items event will start in 1 minute.") addEvent(checkRain, config.interval) executed[hour][min] = true end end end addEvent(checkRain, config.interval) end function onStartup() addEvent(checkRain, 100) end TALK ACTION -- talkactions.xml <talkaction words="/rainitems" separator=" " script="rainitems_command.lua"/> rainitems_command.lua local config = { items = {{8306,1}, {2157,2}, {7735,1}, {8306,1}, {2184,1}, {9932,1}, {8306,1}, {9693,1}, {2148, 100}}, interval = 1000, -- time between checks areas = { [1] = { waves = 10, interval = 10000, chancePerTile = 10, -- % maxItemsPerWave = 15, from = {x = 1021, y = 994, z = 7}, to = {x = 1024, y = 998, z = 7} }, [2] = { waves = 10, interval = 10000, chancePerTile = 10, maxItemsPerWave = 15, from = {x = 1026, y = 995, z = 7}, to = {x = 1028, y = 1001, z = 7} } } } function Position.isPathable(pos) local tile = Tile(pos) if tile == nil then return false end return not tile:hasFlag(TILESTATE_BLOCKSOLID) end function rainWave(arena) local from = config.areas[arena].from local to = config.areas[arena].to local items_spawned = 0 for x = from.x, to.x do for y = from.y, to.y do for z = from.z, to.z do if math.random(1, 100) < config.areas[arena].chancePerTile and items_spawned < config.areas[arena].maxItemsPerWave then local pos = {x = x, y = y, z = z} if Position(pos):isPathable() then local item = math.random(1, #config.items) doCreateItem(config.items[item][1], math.random(1, config.items[item][2]), pos) Position(pos):sendMagicEffect(CONST_ME_MAGIC_RED) items_spawned = items_spawned + 1 end end end end end end function startRain(arena) broadcastMessage("Rain item event begins!") for i = 1, config.areas[arena].waves do if i == 1 then rainWave(arena) else addEvent(rainWave, config.areas[arena].interval * (i - 1), arena) end end addEvent(broadcastMessage, config.areas[arena].interval * (config.areas[arena].waves - 1), "Rain items event ended.") end function onSay(player, words, param) if not player:getGroup():getAccess() then return false end if tonumber(param) then startRain(tonumber(param)) else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, words .. " eventid") end return false end Créditos : zbisu1 ponto