
Histórico de Curtidas
-
Whyzin deu reputação a luanluciano93 em Clean Database by luanluciano93Este script realiza limpezas na database toda vez que o servidor é iniciado, com o intuito principal de não sobrecarrega-lá.
Ele funciona conforme a configuração:
- Deletando personagens inativos há X meses.
- Deletando contas que estão vazias (que não tem personagens criados) há X meses.
- Deixando as casas livres caso o seu dono não entre no jogo por mais de X dias.
- Deletando os invites de casas feitos por ex-moradores caso a casa não tenha dono.
- Deletando guilds que foram criadas há X dias e que tem menos de Y membros.
Crédito: luanluciano93, Leu e Cjaker.
-- <globalevent type="startup" name="CleanDatabase" script="cleanDatabase.lua" /> --[[ Este script realiza limpezas na database toda vez que o servidor é iniciado, com o intuito principal de não sobrecarrega-lá. Ele funciona conforme a configuração: - Deletando personagens inativos há X meses. - Deletando contas que estão vazias (que não tem personagens criados) há X meses. - Deixando as casas livres caso o seu dono não entre no jogo por mais de X dias. - Deletando os invites de casas feitos por ex-moradores caso a casa não tenha dono. - Deletando guilds que foram criadas há X dias e que tem menos de Y membros. Crédito: luanluciano93, Leu e Cjaker. ]]-- local inactiveMonthsToDeleteCharacter = 1 -- quantos meses o player precisa ficar inativo para ser deletado. local emptyAccountMonths = 1 -- quantos meses uma conta precisa ficar sem nenhum character criado para ser deletada. local inactiveDaysToCleanHouse = 7 -- quantos dias o player precisa ficar inativo para perder a house. local inactiveDaysToCleanGuildWithFewPlayers = 10 -- quantos dias após a criação da guild irá verificar a quantidade mínima de players. local minimumGuildMembers = 5 -- quantidade minima de membros para a guild não entrar na verificação. local function executeDatabase(fromClause) local totalClear = 0 local resultId = db.storeQuery("SELECT COUNT(*) AS `count` FROM ".. fromClause) if resultId ~= false then totalClear = result.getNumber(resultId, 'count') result.free(resultId) if totalClear > 0 then db.query("DELETE FROM ".. fromClause) end end return totalClear end local function doCheckInactivePlayer() -- deleta automaticamente o dados das tabelas "houses, player_items, player_depotitems, player_deaths, guilds, player_storage" local timeStamp = os.time() - (86400 * (inactiveMonthsToDeleteCharacter * 30)) local fromClause = "`players` WHERE `group_id` = 1 AND lastlogin <= ".. timeStamp return executeDatabase(fromClause) end local function doCheckEmptyAccounts() -- deleta automaticamente o dados das tabelas "player_viplist" local timeStamp = os.time() - (86400 * (emptyAccountMonths * 30)) local fromClause = "`accounts` WHERE `accounts`.`creation` <= ".. timeStamp .." AND NOT EXISTS (SELECT `id` FROM `players` WHERE `accounts`.`id` = `players`.`account_id`)" return executeDatabase(fromClause) end local function doCheckInactiveHouses() local timeStamp = os.time() - (86400 * (inactiveDaysToCleanHouse * 24)) local totalClear = 0 local resultId = db.storeQuery("SELECT `houses`.`owner`, `houses`.`id` FROM `houses`, `players` WHERE `houses`.`owner` != 0 AND `houses`.`owner` = `players`.`id` AND `players`.`lastlogin` <= " .. timeStamp .. ";") if resultId ~= false then repeat local owner = result.getNumber(resultId, "owner") local houseId = result.getNumber(resultId, "id") local house = House(houseId) if house and (owner > 0) then house:setOwnerGuid(0) totalClear = totalClear + 1 end until not result.next(resultId) result.free(resultId) end return totalClear end local function doCheckInactiveHouseLists() -- Apagando "house_lists" do player local fromClause = "`house_lists` WHERE EXISTS (SELECT `id` FROM `houses` WHERE `house_lists`.`house_id` = `houses`.`id` AND `houses`.`owner` = 0)" return executeDatabase(fromClause) end local function doCheckInactiveGuilds() -- deleta automaticamente o dados das tabelas "guild_invites, guild_membership, guild_ranks" local timeStamp = os.time() - (86400 * (inactiveDaysToCleanGuildWithFewPlayers * 24)) local fromClause = "`guilds` WHERE `guilds`.`creationdata` <= ".. timeStamp .." AND (SELECT COUNT(*) from `guild_membership` WHERE `guild_membership`.`guild_id` = `guilds`.`id`) < " .. minimumGuildMembers .. "" return executeDatabase(fromClause) end -- Executando as funções de limpeza ao iniciar o servidor. function onStartup() print("[[ DATABASE CLEAN ]]") local inactivePlayer = doCheckInactivePlayer() if inactivePlayer > 0 then print(">> ".. inactivePlayer .. " deleted inactive players.") end local emptyAccounts = doCheckEmptyAccounts() if emptyAccounts > 0 then print(">> ".. emptyAccounts .." empty deleted accounts.") end local inactiveHouses = doCheckInactiveHouses() if inactiveHouses > 0 then print(">> ".. inactiveHouses .." houses that were expropriated.") end local inactiveHouseLists = doCheckInactiveHouseLists() if inactiveHouseLists > 0 then print(">> ".. inactiveHouseLists .." deleted inactive house lists.") end local inactiveGuilds = doCheckInactiveGuilds() if inactiveGuilds > 0 then print(">> ".. inactiveGuilds .." deleted inactive guilds.") end addEvent(saveServer, 10000) end
-
Whyzin deu reputação a Killua em Como usar addEventUsando addEvent
O uso do addEvent tem inúmeras utilidades e pode ser complicado para algumas pessoas, inclusive era para mim quando eu estava começando a aprender LUA.
Para que serve o addEvent?
Para "chamar" uma função após um periodo de tempo, ou seja, executar uma função após um tempo estipulado.
O addEvent tem como parâmetros: callback, delay e ...
addEvent(callback, delay, ...)
Onde callback é a função que será chamada, delay é o tempo (em milissegundos) até que se chame essa função e ... são os parâmetros que a função chamada utiliza. Exemplo:
addEvent(doBroadcastMessage, 1000, "Bom dia", 23) Aqui, após 1 segundo (1000 ms), a função doBroadcastMessage(message, type) será executada com os parâmetros message = "Bom dia" e type = 23.
O addEvent pode ser usado de duas maneiras:
Chamando uma função existente ou criando uma nova função.
Para chamar uma função existente, basta usar como acima, para usá-lo para criar uma nova função, usa-se assim, por exemplo:
addEvent(function() if isCreature(cid) then doPlayerAddItem(cid, 2160, 10) doPlayerSendTextMessage(cid, 25, "Voce ganhou 10k.") end end, 1000) Assim é basicamente a mesma coisa, mas pude colocar várias funções dentro de um único addEvent e mantive o delay 1000 (1 segundo).
Obs: Precisei usar 2 ends, um para fechar function() e outro para fechar o if.
Atenção! Além disso, existe uma outra diferença entre as duas formas de uso, vou tentar explicar da melhor maneira possível:
Quando usamos o addEvent com uma função já existente (1o exemplo), as informações usadas serão as geradas no momento em que o evento foi chamado, por exemplo:
function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 10 then doPlayerSendTextMessage(cid, 25, "Uma pedra sera criada na sua posiçao dentro de 2 segundos.") addEvent(doCreateItem, 2000, 1308, 1, getThingPos(cid)) end return true end Se usarmos assim, a pedra será criada na posição onde o jogador se encontrava no momento em que "deu use" e não onde ele estará 2 segundos depois. Se você quiser que a pedra seja criada na nova posição do jogador (pos de 2 segundos depois), você deve fazer uma nova checagem, criando uma função:
function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) > 10 then doPlayerSendTextMessage(cid, 25, "Uma pedra sera criada na sua posiçao dentro de 2 segundos.") addEvent(function() if isCreature(cid) then doCreateItem(1308, 1, getThingPos(cid)) end end, 2000) end return true end Atenção novamente: A checagem if isCreature(cid) que utilizei, é muito importante para um addEvent que envolva criaturas. Se você executasse o addEvent sem a checagem e o player logasse ou morresse antes desses 2 segundos se passarem, daria um erro na distro e interromperia o resto do script.
Recursão
Uma outra ótima funcionalidade dos addEvents é a recursão, ou seja, criar um evento que fica se repetindo. É simplesmente um addEvent chamando a sí mesmo.
Para usar, crie uma função, exemplo:
function respawnMonster(name, pos) if doCreateMonster(name, pos) then doBroadcastMessage(name.." nasceu!") end addEvent(respawnMonster, 10000, name, pos) end Quando chamada, esta função ficará criando um monstro e uma determinada área a cada 10 segundos, sem nunca parar.
Para chamar a função, seria assim:
respawnMonster("Demon", {x = 123, y = 123, z = 5}) Considerações
Reloads param os addEvents. Se um script talkaction executou um addEvent programado para acontecer depois de 5 minutos e se dentro deste intervalo de tempo, você usar /reload talkactions, o addEvent será interrompido.
Erros no código podem fazer o evento ser interrompido, preste sempre atenção.
Se ainda ficou com alguma dúvida, poste aqui.
-
Whyzin deu reputação a thalia em Video Aula - Aprenda ser um scripter.Bom galera, tudo certo? XD
Então galera, como todo mundo me pedia ajuda com scripts, decidir criar um canal no youtube focado bastante
em como se tornar um script, no canal vai ter videos ensinando "scriptar" e como interpretar um script... enfim!
Se inscrevam no canal e ajude a divulga-lo galera!
muito obrigado a sua atenção, aqui vai o link do canal junto com
o primeiro vídeo!
Canal:
http://www.youtube.com/user/NWEnsina
#1 Vídeo - OT Scripting #1 - function onUse, if/else.
Explicando Script #1 - Talkaction trocar 1kk por X [TK]
Site/Blog:
http://www.nwensina.blogspot.com.br
OT Scripting #2 - Function onUse, itemEx e Positions + funções [NW]
youtube.com/watch?v=SzR43PZO10I
PS: O TK não permiti mais que 2 links de mídia
mas é só copiar e colar no navegador (:
-
Whyzin deu reputação a Kimoszin em Criando Spells para seu servidor!Ola gaaaaaaalera, é com muito prazer que venho trazer esse primeiro tutorial meu como Aprendiz do TibiaKing,
Spells:
Bom, spells sao as magias do nosso servidor, elas servem tanto para healar, atacar, dar suporte e etc ...
Criar magias é algo muito simples, vc mesmo poderam criar quantas magias quiserem para o seu servidor seguindo esse tutorial,
Muito bem, vamos começar ...
Spells de Curar (Healing)
Obrigado a Todos,
Estou terminando de fazer o SpellMaker para facilitar a vida de vc,
Abraços
-
Whyzin deu reputação a Natanael Beckman em DEV C++ Compilando TFS no WindowsDEV C++, aprenda a compila uma source TFS!
Downloads(Baixe de acordo as configurações do seu windows):
DEV C++ CONFIGURADO PARA 32BITS
DEV C++ CONFIGURADO PARA 64BITS
REV 3884 TFS 0.4
Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
======================================
Abra o DEV C++:
======================================
======================================
Abra a Source:
======================================
======================================
Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
======================================
=============================================================
======================================
Aguarde carregar todos os arquivos:
======================================
======================================
Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
======================================
======================================
Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
======================================
======================================
Se der tudo certo em Log vai estar como mostra a imagem abaixo:
======================================
======================================
Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
======================================
===========================================
Só isso galera tutorial rápido resumido e útil!
Créditos Natanael Beckman!
===========================================
Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
Abra o DEV-C++, clique em File> New> Project:
Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
-D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
-lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK. Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project: Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9: OpenSSL 0.9.8 1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
Clica aqui \/ -
Whyzin deu reputação a Ootsutsuki em [Simples] Texto piscando no OTVocê cria na pasta data/globalevents/scripts
-
Whyzin deu reputação a Ootsutsuki em [Simples] Texto piscando no OTOlá vi que você tem uma duvida resolvi ajudar mas do meu jeito, Ok?
vá em data/globalevents/scripts e crie um arquivo chamado texto e adicione isso:
Verde: Mensagem que ira aparecer
Vermelho: Posição onde a mensagem vai aparecer
depois vá em data/globalevents e abra o arquivo globalevents.XML e adicione isso no final antes do </globalevents>
Verde: Nome do arquivo .lua que você criou
(OBS: a mensagem que ira aparecer é a que vai ficar subindo no piso )
Créditos: Server Nto Skulls V5.0 do King Of Narutibia & Ootsutsuki
-
Whyzin deu reputação a Luizpaiva em {Pedido}como eu posso colocar novos itens no meu rme?Trocando os itens de seu Remere's Map Editor
Bom, vejo que muitas pessoas tem dificuldades em trocar os itens de seu RME.
Mas como assim, trocar os itens do meu RME???
Voce ja viu no rme, o "Raw Pallete" , ai em tileset o "Other", la fica alguns itens. No seu RME, eles podem estar na versao do tibia 8.54,
vou ensinar a voces a colocarem uma versao mais atualizada, ou a que voces quiserem.
Então vamos lá:
Vá na pasta do seu RME (provavelmente será essa: computador>disco local (C:)>arquivos de programa>remere's map editor) e a pasta será assim: (SS)
2. Clique em Data:
3. Agora, dentro da pasta Data estará assim:
4. Agora voce vai na pasta da versao do seu mapa, por exemplo, alguns mapas abrem com o tibia 8.54 e outros com 8.6 (depende da versão do mapa, aqui no tutorial será com o 8.6, mas caso voce queira fazer com outra versao só fazer o mesmo na pasta da versao que voce queira).
Clique em 8.6:
5. Agora dentro da pasta 860, estará assim:
6. Agora dentro da pasta tem esses itens, e no meios deles tem isto:
Agora apague-os.
7. Agora, voce escolhe, se quer pegar itens atualizados, (8.7...) ou da pasta do seu ot, se voce quiser pegar da pasta do seu ot, vá na pasta do seu ot e vá em data/itens/ dentro da pasta, provavelmente tera 3 itens la:
Items.xml
items (em bloco de notas)
randomization
Copie o items.xml e o items em bloco de notas
8. Agora que copiou os 2, vá em computador>disco local (C:)>arquivos de programa>remere's map editor>data>860
e cole os dois la, agora feche e abra seu RME.
Pronto.
Gostou
-
Whyzin deu reputação a estopa em Portas Abrem mas OTserv não!mano isso ngm ensina mais como sou gentil vou ensinar vc se ajudei rep + emmmm
as portas para desbloquearem são:
7171 - tcp/udp
7172 - tcp/udp
8000 - tcp/udp
caso use site desbloquei a porta
80 - tcp/udp
-
Whyzin deu reputação a dhiol em Portas Abrem mas OTserv não!primeiramente você tem que desbloquear as portas do seu firewall! Puts o que é firewall onde fica isso?
R: firewall pode ser definidido como uma barreira de proteção, que controla o tráfego de dados entre seu computador e a Internet (ou entre a rede onde seu computador está instalado e a Internet). Seu objetivo é permitir somente a transmissão e a recepção de dados autorizados. Existem firewalls baseados na combinação de hardware e software e firewalls baseados somente em software. "ok mais já sabia o que é firewall".
vamos com calma ta você pode saber mais outras pessoas não sabe.
quem ultiliza Windows 7.
* Para abrir Firewall do Windows, clique no botão Iniciar e em Painel de Controle. Na caixa de pesquisa, digite firewall e clique em Firewall do Windows.
* depois vá até
No painel esquerdo, clique em Configurações avançadas. É necessário ter permissão do administrador Se você for solicitado a informar uma senha de administrador ou sua confirmação, digite a senha ou forneça a confirmação.
Na caixa de diálogo Firewall do Windows com Segurança Avançada, no painel esquerdo, clique em Regras de Entrada, e, no painel direito, clique em Nova Regra.
Siga as instruções do Assistente para Nova Regra de Entrada.
Se você estiver com dificuldades para permitir que outros computadores se comuniquem com seu computador através do Firewall do Windows, tente usar a solução de problemas das Conexões de Entrada para localizar e acorrigir automaticamente alguns problemas comuns.
Para abrir a solução de problemas de Conexões de Entrada, clique no botão Iniciar e em Painel de Controle. Na caixa de pesquisa, digite solução de problemas e clique em Solução de Problemas. Clique em Exibir tudo e em Conexões de Entrada.
apois isso ta ok vamos para configuração do moden Tg 862, a final é que nos estávamos esperando
entre no gateway do seu moden, no meu caso, meu gateway é 192.168.0.1
ok apois tudo isso vc digita seu login e sua senha chave.
siga esse padrão, firewall/virtual server presta atenção
você ira add as portas 7171 e 7172 como to no meu celular não tem como tira umas prints
siga esse modo
name server: open tibia
port open: 7171. 7171
tcp
seu ip que ira ser liberado no meu caso
192.168.0.2
port saída: 7172. 7172
aqui será close tibia
depois mesma coisa no port 7172. 7172
tcp
192.168.0.2
port saída 7171. 7171
pronto portas liberadas próxima etapa muito importante
para que a porta não feche vc terá que add elas em outro lugar.
vamos lá vai na opção port trigger aqui é diferente vc ira coloca assim
add serve name: open tibia
port 7171 7171
tcp
7171. 7171
depois vc terá que fazer mesma coisa no port tigger
so que será assim
close tibia
port 7172. 7172
tcp
7172. 7172
pronto agr so abrir seu ot normalmente podes coloca no-ip um ip name ou numero
aviso o ip do seu modem tem que fica na configuração lua assim (config.lua/ip serve lenbra do 127.0.0.1? aqui vc ira coloca ip do seu moden no meu caso 184.18.55.117 ) nao coloca ip name do no-ip que não entrara
outra coisa ip que vc configuro no virtual serve é o que tem que ta sempre no endereço IP de sua máquina no meu caso 192.168.0.2 so vou poder colocar online com esse ip ou o que eu add no virtual server.
espero ter ajudados vcs a abrir um server online com moden TG 862 Moden da net virtua.
se forem postar esse pequeno tutorial pf coloque meus créditos obrigado