-
Total de itens
189 -
Registro em
-
Última visita
Tudo que Eventide postou
-
Smartphones são a pior invenção já feita, um computador de bolso, veja só, não basta ficar isolado neste mundo digital quando se está em casa, agora cada vez mais as pessoas se isolam até mesmo em reuniões sociais, quantas vezes você já viu em uma roda de pessoas conversando alguém isolado teclando no seu smartphone? Quantas vezes você não estava andando com alguém, falava, falava e nada de resposta porque a pessoa estava com um fone de ouvido ou xingando muito no twitter? Quantas vezes você não foi esse individuo? Em resumo, smartphones além de ser praticamente exclusivo para fins lúdicos, é caríssimo e está transformando as pessoas em seres antissociais de forma mais avassaladora do que a internet e a televisão. Fora que o fetichismo de mercadoria criado ao redor dessa marca chega a ser quase comparável ao da industria automobilística, chega ao ponto de fanboys ficarem putos porque alguém que pagou menos poderá ter acesso a um aplicativo que até então era exclusivo, como aconteceu com o instagram, maioria das pessoas estão pagando mais pela marca do que pela qualidade do produto, um mac, por exemplo, só vale a pena se você trabalha com edição de video e som, para outras coisas é jogar dinheiro no lixo para ter um notebook com uma maçã desenhada.
-
Comprar IPB? Tá de brincadeira? O phpBB é de graça e é melhor, tem MUITO mais plugin e MUITO mais template, único sistema de fórum que vale a pena comprar é o vbull.
-
talkaction Talkaction !online Informações em excesso... Como reduzir?
pergunta respondeu ao je19921992 de Eventide em Scripts
Apenas copie e cole o script, hora bolas... Agora que eu vi que você quer tambem que apresente apenas os 10 primeiros jogadores, achei que queria que apresentasse só o numero de jogadores, então fica um pouco diferente: local config = { showGamemasters = getBooleanFromString(getConfigValue('displayGamemastersWithOnlineCommand')) } function onSay(cid, words, param, channel) local players = getPlayersOnline() local strings = {""} local i, position = 1, 1 local added = false for n, pid in ipairs(players) do if added and n <= 10 then if(i > (position * 7)) then strings[position] = strings[position] .. "," position = position + 1 strings[position] = "" else strings[position] = i == 1 and "" or strings[position] .. ", " end end if((config.showGamemasters or getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES) or not getPlayerCustomFlagValue(pid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) and (not isPlayerGhost(pid) or getPlayerGhostAccess(cid) >= getPlayerGhostAccess(pid))) then strings[position] = strings[position] .. getCreatureName(pid) .. " [" .. getPlayerLevel(pid) .. "]" i = i + 1 added = true else added = false end end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, (i - 1) .. " player(s) online:") for i, str in ipairs(strings) do if(str:sub(str:len()) ~= ",") then str = str .. "." end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str) end return true end Esse script aqui deve restringir aos primeiros 10 jogadores.- 10 respostas
-
- !online
- online.lua
- (e 2 mais)
-
Pre-requisitos para entender o tutorial Para entender este tutorial é necessario que você saiba sobre tabelas e condicionais(if, else, elseif), tutorial sobre tabelas pode ser encontrado facilmente neste fórum, mas infelizmente o de condicionais parece estar um pouco corroído pelo tempo. Introdução Pra quem não sabe, Jiddo é um sistema de NPCs que nem sempre foi o padrão, hoje em dia é muito difícil encontrar um NPC na sua pasta data que não tenha sido feito nele, ele é simplesmente uma biblioteca feita por cima do sistema padrão, entretanto não é nada flexivel, faço das palavras que o Mock certa vez usou em uma discussão as minhas: "jiido é um pedaço de ferro fundido e o normal é um pedaço de silicone." Basicamente, se você quer fazer um NPC que não é simplesmente um shopper, não use Jiddo, mas aí você me pergunta, porque eu faria um NPC que não é um shopper? Tenta advinha que hoje eu to difícil rçrçrçrç. Brincadeira, fique com um exemplo que seria praticamente impossivel de se fazer com Jiddo: (relevem a tosquera do video, ele é meio antiguinho, eu mesmo morri de rir revendo ele) Eventos Como todo tipo de script, os NPCs também tem eventos, eles são: onThink() Roda sempre. onPlayerEndTrade(cid) Roda sempre que alguém fecha o shop do NPC. onPlayerCloseChannel(cid) Roda sempre que alguém fecha o canal NPC. onCreatureSay(cid, type, msg) Roda quando alguém fala com o NPC. onCreatureDisappear(cid) Roda quando o player(ou um monstro) sai do radius do npc. onCreatureAppear(cid) É ativado quando o player(ou um monstro) entra no radius do npc. O padrão Diferente dos outros tipos de script, os NPCs tem um padrão a ser seguido para poderem funcionar, vou usar neste tutorial o exemplo de como fazer um NPC de compra e venda para que vocês entendam este padrão. Em primeiro lugar você deve copiar e colar isso no seu script: local focuses = {} local function isFocused(cid) for i, v in pairs(focuses) do if(v == cid) then return true end end return false end local function addFocus(cid) if(not isFocused(cid)) then table.insert(focuses, cid) end end local function removeFocus(cid) for i, v in pairs(focuses) do if(v == cid) then table.remove(focuses, i) break end end end local function lookAtFocus() for i, v in pairs(focuses) do if(isPlayer(v)) then doNpcSetCreatureFocus(v) return end end doNpcSetCreatureFocus(0) end Se o NPC for de compra e venda, adicione isso também: local itemWindow = { {id=2160, subType=0, buy=10000, sell=10000, name="Test1"}, {id=2152, subType=0, buy=100, sell=100, name="Test2"}, {id=2148, subType=0, buy=1, sell=1, name="Test3"}, {id=2173, subType=0, buy=10000, sell=5000, name="Test4"} } local items = {} for _, item in ipairs(itemWindow) do items[item.id] = {buyPrice = item.buy, sellPrice = item.sell, subType = item.subType, realName = item.name} end local function getPlayerMoney(cid) return ((getPlayerItemCount(cid, 2160) * 10000) + (getPlayerItemCount(cid, 2152) * 100) + getPlayerItemCount(cid, 2148)) end local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks) if(items[item] == nil) then selfSay("Ehm.. sorry... this shouldn't be there, I'm not selling it.", cid) return end if(getPlayerMoney(cid) >= amount * items[item].buyPrice) then local itemz, i = doNpcSellItem(cid, item, amount, subType, ignoreCap, inBackpacks) if(i < amount) then if(i == 0) then selfSay("Sorry, but you don't have space to take it.", cid) else selfSay("I've sold some for you, but it seems you can't carry more than this. I won't take more money than necessary.", cid) doPlayerRemoveMoney(cid, i * items[item].buyPrice) end else selfSay("Thanks for the money!", cid) doPlayerRemoveMoney(cid, amount * items[item].buyPrice) end else selfSay("Stfu noob, you don't have money.", cid) end end local onSell = function(cid, item, subType, amount, ignoreCap, inBackpacks) if(items[item] == nil) then selfSay("Ehm.. sorry... this shouldn't be there, I'm not buying it.", cid) end if(subType < 1) then subType = -1 end if(doPlayerRemoveItem(cid, item, amount, subType)) then doPlayerAddMoney(cid, items[item].sellPrice * amount) selfSay("Here you are.", cid) else selfSay("No item, no deal.", cid) end end dica: mude as strings do selfSay Agora vamos entender o que faz esse código: isFocused(cid) verifica se o jogador cid está falando com o NPC addFocus(cid) adiciona o jogador cid a lista de jogadores que estão falando com o NPC. removeFocus(cid) remove o jogador da lista de jogadores que estão falando com o NPC. lookAtFocus() força o NPC a olhar pro jogador que está falando com ele. getPlayerMoney(cid) retorna a quantidade de dinheiro que o jogador cid tem.(alguns servidores já vem com essa função) onBuy é a função que é executada toda vez que o jogador compra um item. onSell é a função que é executada quando um jogador vende um item. Agora atenção especial para a tabela itemWindow: local itemWindow = { {id=2160, subType=0, buy=10000, sell=10000, name="Test1"}, {id=2152, subType=0, buy=100, sell=100, name="Test2"}, {id=2148, subType=0, buy=1, sell=1, name="Test3"}, {id=2173, subType=0, buy=10000, sell=5000, name="Test4"} } Nesta tabela você deve configurar os itens que serão vendidos no shop, se você não sabe como funciona uma tabela, procure um tutorial a respeito, mas pra facilitar, simplesmente edite as variaveis dentro da tabela, mantendo as aspas quanto tiver e quando for para apenas vender o item delete o "buy = valor," e para apenas comprar delete o "sell = valor,", para remover ou adicionar itens, não se esqueça que depois do "}" sempre deve haver uma virgula, exceto para o ultimo valor. Padrão para o evento onThink() Existe um código que deve ser sempre copiado para o evento onThink(), qualquer modificação no evento deve ser feita após esse código a não ser que você saiba o que está fazendo: function onThink() for i, focus in pairs(focuses) do if(not isCreature(focus)) then removeFocus(focus) else local distance = getDistanceTo(focus) or -1 if((distance > 4) or (distance == -1)) then selfSay("Hmph!") closeShopWindow(focus) removeFocus(focus) end end end lookAtFocus() end Padrão para o evento onCreatureSay(cid, type, msg) Qual é a primeira coisa que alguem fala pro NPC? Geralmente é o hi, né? Então, você diz hi para o NPC para iniciar uma conversa com ele, portanto devemos verificar antes se o jogador não estava conversando antes, para isso usamos essa condicional: function onCreatureSay(cid, type, msg) if((msg == "hi") and not (isFocused(cid))) then Para só depois o NPC dar as boas vindas ao jogador e adiciona-lo a lista dos conversantes: function onCreatureSay(cid, type, msg) if((msg == "hi") and not (isFocused(cid))) then selfSay("Welcome, ".. getCreatureName(cid) ..".", cid, true) selfSay("Do you want to see my {wares}?", cid) addFocus(cid) Agora, e pra abrir o shop depois que o player disse hi? Verificamos se a variavel do parametro msg é igual a "trade" ou "warez" e tambem verificamos se o jogador está entre a lista de conversantes, afinal ninguem sai falando "deixa eu vê seus item aí mano" sem falar um "oi" antes, né? elseif((isFocused(cid)) and (msg == "wares" or msg == "trade")) then selfSay("Pretty nice, right?", cid) openShopWindow(cid, itemWindow, onBuy, onSell) E o "bye"? como fica nessa história? Praticamente a mesma coisa do trade, só que ao invez de abrir o shop, ele fecha: elseif((isFocused(cid)) and (msg == "bye" or msg == "goodbye" or msg == "cya")) then selfSay("Goodbye!", cid, true) closeShopWindow(cid) removeFocus(cid) E se eu quiser fazer outro tipo de conversa, mais voltada para uma quest, por exemplo? Então você, alem de ter que verificar o que foi dito, deve verificar se algo já foi dito antes, confuso? Vou dar um exemplo pratico, o jogador fala quest para o NPC, então o NPC responde que ele precisa de ajuda mas que é algo complicado e pergunta se você tem certeza, então se você responde que não ele desiste e se responde que sim dá a quest, como fazer isso? Simples, você deve fazer uma variavel com valor zero antes do evento onCreatureSay, quando o jogador falar quest, você dá o valor um pra ela, então quando o player falar yes, você verifica se o valor da variavel é um, não entendeu? De uma olhada em como isso ficaria no script: elseif((isFocused(cid)) and (msg == "quest")) then count = 1 selfSay("Hmm, não sei se você é capaz de fazer o que eu quero, você tem certeza que quer fazer isso?", cid) elseif((isFocused(cid)) and (msg == "yes") and (count == 1)) then selfSay("Então tá! Traga um copo d'agua pra mim que eu te dou um real.", cid) elseif((isFocused(cid)) and (msg == "quest")) then selfSay("Então porque perguntou?", cid) O código final ficaria assim: local count = 0 function onCreatureSay(cid, type, msg) if((msg == "hi") and not (isFocused(cid))) then selfSay("Welcome, ".. getCreatureName(cid) ..".", cid, true) selfSay("Do you want to see my {wares}?", cid) addFocus(cid) elseif((isFocused(cid)) and (msg == "wares" or msg == "trade")) then selfSay("Pretty nice, right?", cid) openShopWindow(cid, itemWindow, onBuy, onSell) elseif((isFocused(cid)) and (msg == "bye" or msg == "goodbye" or msg == "cya")) then selfSay("Goodbye!", cid, true) closeShopWindow(cid) removeFocus(cid) elseif((isFocused(cid)) and (msg == "quest")) then count = 1 selfSay("Hmm, não sei se você é capaz de fazer o que eu quero, você tem certeza que quer fazer isso?", cid) elseif((isFocused(cid)) and (msg == "yes") and (count == 1)) then selfSay("Então tá! Traga um copo d'agua pra mim que eu te dou um real.", cid) elseif((isFocused(cid)) and (msg == "quest")) then selfSay("Então porque perguntou?", cid) end end Bom, esse é o tutorial, qualquer duvida pode recorrer a este tópico ou a seção de dúvidas. vlwflw. Só como consideração final eu gostaria de dizer que esse script de exemplo foi tirado do TFS 0.3.6, não garanto o uso deste metodo em qualquer outra distribuição.
-
[Lua] Mega Tutorial De Oop [Avançado]
tópico respondeu ao SkyDangerous de Eventide em Tutoriais de Scripting
Eu já tinha feito um tutorial sobre isso há muito tempo atrás, mas o seu com certeza está bem melhor formatado, entretanto poderia ter dado mais exemplos práticos e explicado mais detalhadamente, pra quem achou difícil usar as metatables, existem algumas bibliotecas que facilitam o trabalho com POO em Lua: classlib: http://lua-users.org...eritanceClasses http://code.google.c.../downloads/list LOOP: http://loop.luaforge.net/ Ambas vem junto com o Lua For Windows, mas requerem instalação para serem usadas em otserv. obs: nunca usei nenhuma das duas pois acho desnecessário usar classes em Lua, use por sua conta em risco. -
talkaction Talkaction !online Informações em excesso... Como reduzir?
pergunta respondeu ao je19921992 de Eventide em Scripts
Amigo, você deveria ter postado isso na seção de dúvidas, aqui é para scripts prontos, fora isso, coloque o script sempre entre as tags [.code][./code](tire os pontos) Para arrumar, substitua o seu código por este: function onSay(cid, words, param, channel) players = getOnlinePlayers() doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Existem ".. #players .." jogadores conectados ao servidor") end- 10 respostas
-
- !online
- online.lua
- (e 2 mais)
-
[Tutorial] Criando paredes usando Grounds
tópico respondeu ao wesleyt10 de Eventide em Tutoriais de Spriting
Adorei a dica, mas você poderia especificar melhor como chega a isso: Infelizmente o ditado de que uma imagem fala mais que mil palavras não se aplica a tutoriais. -
é inegável que seria um mundo muito mais organizado e até justo, mas o preço a se pagar por ele não valia a pena.
-
Deu certo, muito obrigado, só que agora surgiu outro problema... Quando ele pede pra eu colocar a pasta do Tibia, ele fala que não consegue carregar o tibia.spr e o tibia.dat, e agora?
-
Pelo titulo deve ser esse mesmo, mas eu não estou conseguindo abrir ele aqui, quando eu puxei ele pro simone map editor ele acusou que o mapa usa um items.otb mais novo do que o meu, então eu coloquei um mais novo junto com um tibia.spr e um tibia.dat e ele acusou invalid tibia.dat... Acredito que o simone não suporta versões mais novas, mas infelizmente tenho que usa-lo porque o RME não quer pegar de jeito nenhum no meu computador, eu recebo o seguinte erro: E sim, eu já atualizei o msvc.
-
[Arquivado]Qual sua intenção no fórum?
tópico respondeu ao Alexclusive de Eventide em Noticias - Arquivo
Já participava de outras comunidades de otserv brasileiras e internacionais, quando fui banido por 1 mês por fazer flamewar em uma comunidade resolvi ver qual que era a do xtibia, isso foi em 2008, na época existia uma vaga para a equipe que se não me engano chamava otdev(pelo menos era isso que tinha na minha assinatura quando eu voltei), era como uma gratificação pra quem trás conteúdo pro fórum, eu era responsável pela área de scripting e programação, depois de alguns meses resolvi sair e parei de frequentar o xtibia, no final de 2009 parei de mexer com otserv e agora em 2013 resolvi voltar e ao me deparar com a decadência das comunidades como um todo e vendo que inclusive a otfans, berço do open tibia tinha acabado percebi que teria que voltar o xtibia por falta de opção, minha intenção com as comunidades de open tibia, além da interação com outros usuários(durante minha adolescência quase inteira, maioria dos meus amigos eram da internet, acho que eu conversava mais com alguns do que com a minha mãe) sempre foi aprender com a comunidade para depois contribuir com a mesma, aprendi muito com o open tibia e suas comunidades, assim como acredito que ajudei muitas pessoas e essas pessoas fizeram o mesmo com outras pessoas e assim segue, fico muito triste ao ver que esse ciclo está se interrompendo, ou talvez ficando mais lento, talvez isso seja pela falta de usuários, talvez pela falte de quem ensine, talvez pela falta de quem queira aprender... Eu não sei bem... -
[Arquivado]Cade Os Ats Inovadores ? #desabafo
tópico respondeu ao JulioNakanishi de Eventide em Noticias - Arquivo
Usar bot em servidor de mapa próprio é mais complicado porque não tem waypoints e scripts prontos, Tibiano é preguiçoso. Se fazer um servidor mapa global crescer e se sustentar hoje em dia já está difícil, imagina um ATS... Se existisse uma comunidade tão interessante quanto a do Open Tibia eu já teria migrado, fico muito triste ao ver a situação. -
Lembrando que é possível usar bibliotecas de outras linguagens em Lua pelo ALIEN: http://alien.luaforge.net/ Entretanto, não é um método confiável e pode não funcionar com certas bibliotecas.
-
Poderia postar o mod Khalinnevera e dizer o que ele faz por favor? Parece que esse erro é resultado de algo de que você fez na criação desse mod. Você mesmo compilou o otclient? Directx ou OpenGL? Qual é o protocolo do servidor?
-
V1: V2: Criticas construtivas, por favor.
-
Preciso do mapa da quest da Arena, quem puder me ajudar além de dar rep+ eu vou disponibilizar o script que vou fazer pra ela aqui no xtibia! Meu servidor é 8.6. Desde já agradecido.
-
Gostei do fundo, mas você poderia ter diminuído um pouco a render pra não cortar o cabelo e essa tipografia está um pouco ilegivel, principalmente a parte do chelsea e incompreensivel-london.
-
Gostei muito dessa, parabéns, só achei que faltou um pouco desse efeito de fumaça na menina(a direita), ficou meio solido demais...
-
Ficou legal, só falta um pouco de fluxo, e as renders mais em contexto com os efeitos e o fundo.
-
O fundo tá perfeito, adorei, mas essa tipografia aí tá ruim demais por dois motivos: 1° mal uso de outerglow 2° fonte feia e de difícil leitura E essa render aí, vou nem comentar... poderia ter feito até sem render que seria 200x melhor
-
overpower e moonshadow
-
gratz, já tentei ficar sem os 2 várias vezes, meu máximo são 3 dias...
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.