Histórico de Curtidas
-
Lyu recebeu reputação de Imperius em Mute no HELP ChannelAguarda aí que eu fiz um tem algum tempo, vou procurar!
*Edit,
Achei, segue abaixo o mesmo:
talkactions.xml
<talkaction default="yes" filter="quotation" logged="no" event="script" value="playersay.lua"/> <talkaction log="yes" group="4" access="3" words="/helpmute" event="script" value="helpmute.lua"/>
playersay.lua
function onSay(cid, words, param, channel) local time = getPlayerStorageValue(cid, 455010) if channel == CHANNEL_HELP and time > os.time() then return doPlayerSendCancel(cid, 'You are muted for ' .. (time - os.time()).. ' second' .. ((time - os.time()) > 1 and 's' or '').. ' in this channel.') end end
helpmute.lua
function onSay(cid, words, param, channel) if param == '' then return doPlayerSendCancel(cid, 'Please, type mute or unmute.') end local tmp = string.explode(param, ',') if isInArray({'mute', 'unmute'}, tmp[1]:lower()) then local default = 600 if isCreature(getCreatureByName(tmp[2])) then setPlayerStorageValue(getCreatureByName(tmp[2]), 455010, tmp[1]:lower() == 'mute' and os.time() + (tmp[3] ~= nil and tonumber(tmp[3]) or default) or -1) doPlayerSendCancel(cid, 'Player ' .. tmp[2] .. ' ' .. (tmp[1]:lower() == 'mute' and 'muted' or 'unmuted') .. '.') else doPlayerSendCancel(cid, 'Player not exists or is off-line.') end end return true end
-
Lyu recebeu reputação de stauro em EMOTE SPELLS DINÂMICO!Fala clã, tudo bom? Então, vi esse tal emote spells em um servidor e decidi fazer, e também, compartilhá-lo com vocês ?
O que é?
É um código simpleszinho que possibilita players escolherem a cor da mensagem das spells por meio de comando, LARANJA ou AMARELO, como nas imagens abaixo:
Vamos aos códigos..
abra game.cpp, na função playerSaySpell, procure por:
if (result == TALKACTION_BREAK) { if (!g_config.getBoolean(ConfigManager::EMOTE_SPELLS)) { return internalCreatureSay(player, TALKTYPE_SAY, words, false); } else { return internalCreatureSay(player, TALKTYPE_MONSTER_SAY, words, false); } } else if (result == TALKACTION_FAILED) { return true; }
e substitua por:
if (result == TALKACTION_BREAK) { int32_t value; player->getStorageValue(203500, value); return internalCreatureSay(player, value == 1 ? TALKTYPE_MONSTER_SAY : TALKTYPE_SAY, words, false); } else if (result == TALKACTION_FAILED) { return true; }
Beleza, agora precisamos de uma talkaction para fazer a alteração de storage, vamos lá..
data/talkactions/scripts/emotespells.lua:
function onSay(player) local switch = player:getStorageValue(203500) == -1 and 1 or -1 player:sendTextMessage(MESSAGE_INFO_DESCR, 'emote spells: (' .. (switch == 1 and 'monster_say' or 'say') .. ')') player:setStorageValue(203500, switch) end
data/talkactions/talkactions.xml:
<talkaction words="!emotespells" script="emotespells.lua"/>
Agora só compilar as sources e pronto?
Versão do TFS: 1.3
Créditos: Lyu (isme)
-
Lyu recebeu reputação de fezeRa em Channel Help Mute (TFS 0.4)Introdução :
Muta um jogador no canal HELP por meio de um comando.
game.cpp
Procure por Game::playerSay, abaixo de player->setIdleTime(0) adicione :
if (channelId == CHANNEL_HELP) { std::string helpmute = "0"; player->getStorage("455010", helpmute); time_t now = time(NULL); time_t seconds = atoi(helpmute.c_str()) - now; if (seconds > 0) { std::stringstream sec; sec << "You are muted for " << seconds << " seconds on this channel."; player->sendTextMessage(MSG_STATUS_SMALL, sec.str()); return false; } }
data/talkactions/scripts/helpmute.lua :
function onSay(cid, words, param) if param == '' then return doPlayerSendCancel(cid, 'Informe o nome do jogador e o tempo em segundos.') end local default = 600 local tmp = string.explode(param, ',') if not isCreature(getCreatureByName(tmp[1])) then return doPlayerSendCancel(cid, 'Jogador inexistente ou off-line.') end setPlayerStorageValue(getCreatureByName(tmp[1]), 455010, os.time() + (tonumber(tmp[2]) or default)) doPlayerSendCancel(cid, 'O jogador ' .. tmp[1] .. ' foi mutado.') return true end
data/talkactions/talkactions.xml :
<talkaction log="yes" group="4" access="3" words="/helpmute" event="script" value="helpmute.lua"/>
Como utilizar?
Para impedir um jogador de falar no Channel Help, utilize o comando /helpmute Playername, segundos. Para resetar os segundos, utilize o mesmo comando só que em segundos, coloque 0. Comando disponível apenas para a acessos superiores, configuração disponível no XML talkactions.xml.
Versão do TFS: 0.4
Créditos: Lyu
-
Lyu recebeu reputação de netuka23 em [8.60][OLD Client] Narutibia (NTO HARD) - Servidor CompletoParabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.
-
Lyu recebeu reputação de Cat em EMOTE SPELLS DINÂMICO!Fala clã, tudo bom? Então, vi esse tal emote spells em um servidor e decidi fazer, e também, compartilhá-lo com vocês ?
O que é?
É um código simpleszinho que possibilita players escolherem a cor da mensagem das spells por meio de comando, LARANJA ou AMARELO, como nas imagens abaixo:
Vamos aos códigos..
abra game.cpp, na função playerSaySpell, procure por:
if (result == TALKACTION_BREAK) { if (!g_config.getBoolean(ConfigManager::EMOTE_SPELLS)) { return internalCreatureSay(player, TALKTYPE_SAY, words, false); } else { return internalCreatureSay(player, TALKTYPE_MONSTER_SAY, words, false); } } else if (result == TALKACTION_FAILED) { return true; }
e substitua por:
if (result == TALKACTION_BREAK) { int32_t value; player->getStorageValue(203500, value); return internalCreatureSay(player, value == 1 ? TALKTYPE_MONSTER_SAY : TALKTYPE_SAY, words, false); } else if (result == TALKACTION_FAILED) { return true; }
Beleza, agora precisamos de uma talkaction para fazer a alteração de storage, vamos lá..
data/talkactions/scripts/emotespells.lua:
function onSay(player) local switch = player:getStorageValue(203500) == -1 and 1 or -1 player:sendTextMessage(MESSAGE_INFO_DESCR, 'emote spells: (' .. (switch == 1 and 'monster_say' or 'say') .. ')') player:setStorageValue(203500, switch) end
data/talkactions/talkactions.xml:
<talkaction words="!emotespells" script="emotespells.lua"/>
Agora só compilar as sources e pronto?
Versão do TFS: 1.3
Créditos: Lyu (isme)
-
Lyu recebeu reputação de Garoto Prodigio em (Resolvido)anti mcolhe de novo, eu editei o post
-
Lyu recebeu reputação de Jeff Delay em Death System 2016 versão frag consecutivo!Fala rapaziada, quanto tempo sem publicar algo aqui! Bom, hoje eu venho trazer um sisteminha que é bem utilizado atualmente.
Estou falando o Death System! Porém, com algumas coisinhas a mais.
Testado em OTX Server 8.60..
Como funciona?
O Death System em alguns servidores possui um channel chamado "Mortes" ou "Death Channel",
mas há alguns servidores que preferem que seja anunciado no default mesmo e a função é informar
quem matou quem, ou quem foi morto por certo monstro.
O que há de novo?
Bom, agora quem matar x jogadores(configurável) e essa quantia for uma consecutiva, será anunciado isso :
E se algum jogador derrotá-lo dentro a consecutiva, será anunciado isso :
Vamos ao sistema :
em data/XML/channels.xml, adicione isso :
<channel id="15" name="Death Channel"/> em data/creaturescripts/creaturescripts.xml :
<event type="death" name="deathchannel" event="script" value="deathchannel.lua"/> em data/creaturescripts/login.lua, adicione isso antes do último return true :
registerCreatureEvent(cid, "deathchannel") em data/creaturescripts/scripts, crie um arquivo deathchannel.lua e cole isso dentro :
-- Coded by Zoom.. local info, win, lose = "%s [Level: %s] foi mort%s pelo %s %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos." local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045 function onDeath(cid, corpse, deathList) if(not isPlayer(cid)) then return true end local target = deathList[1] doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1)) for _, pid in ipairs(getPlayersOnline()) do doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerLevel(cid), getPlayerSex(cid) == 1 and "o" or "a", isPlayer(target) and "player" or "monstro", getCreatureName(target), isPlayer(target) and " [Level: "..getPlayerLevel(target).."]." or "."), TALKTYPE_CHANNEL_ORANGE, 0xF) for _, frag in ipairs(frags) do if(getCreatureStorage(target, storage) == frag) then doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_MANAGEMENT, 0xF) end if(getCreatureStorage(cid, storage) >= frag) then doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_GAMEMASTER_CHANNEL, 0xF) end end end doCreatureSetStorage(cid, storage, 0) return true end Há uma única configuração, que é as consecutivas :
local frags = {10, 15, 20, 25, 30, 35, 40, 45, 50}
completou 10 frags? anuncia! e assim sucessivamente..
Créditos : EU
-
Lyu recebeu reputação de Seitron em EMOTE SPELLS DINÂMICO!Fala clã, tudo bom? Então, vi esse tal emote spells em um servidor e decidi fazer, e também, compartilhá-lo com vocês ?
O que é?
É um código simpleszinho que possibilita players escolherem a cor da mensagem das spells por meio de comando, LARANJA ou AMARELO, como nas imagens abaixo:
Vamos aos códigos..
abra game.cpp, na função playerSaySpell, procure por:
if (result == TALKACTION_BREAK) { if (!g_config.getBoolean(ConfigManager::EMOTE_SPELLS)) { return internalCreatureSay(player, TALKTYPE_SAY, words, false); } else { return internalCreatureSay(player, TALKTYPE_MONSTER_SAY, words, false); } } else if (result == TALKACTION_FAILED) { return true; }
e substitua por:
if (result == TALKACTION_BREAK) { int32_t value; player->getStorageValue(203500, value); return internalCreatureSay(player, value == 1 ? TALKTYPE_MONSTER_SAY : TALKTYPE_SAY, words, false); } else if (result == TALKACTION_FAILED) { return true; }
Beleza, agora precisamos de uma talkaction para fazer a alteração de storage, vamos lá..
data/talkactions/scripts/emotespells.lua:
function onSay(player) local switch = player:getStorageValue(203500) == -1 and 1 or -1 player:sendTextMessage(MESSAGE_INFO_DESCR, 'emote spells: (' .. (switch == 1 and 'monster_say' or 'say') .. ')') player:setStorageValue(203500, switch) end
data/talkactions/talkactions.xml:
<talkaction words="!emotespells" script="emotespells.lua"/>
Agora só compilar as sources e pronto?
Versão do TFS: 1.3
Créditos: Lyu (isme)
-
Lyu recebeu reputação de Lurk em Aprenda a utilizar 'Metamethods' em TFS 0.4Fala clã, hoje irei ensiná-los como agrupar funções em uma classe e usá-las como métodos (similar ao TFS 1.x).
Bom, primeiramente o que são métodos?
Um método é nada mais nada menos que uma função membro de uma classe, destinadas a serem executadas por objetos instanciados.
Bom, não irei se aprofundar no assunto, serei direto. Abaixo segue um exemplo da diferença entre uma função e um método:
doPlayerSendCancel(player, 'Hello World') -- Função sendo chamada player:sendCancel('Hello World') -- Método sendo chamado por um objeto 'player'
Mas afinal, como utilizar métodos em TFS 0.4?
Primeiramente teremos que criar uma lib chamada 110-methods.lua e adicionar o seguinte código:
Lembrando que não estou publicando tudo pronto, apenas ensinando como agrupar. E esse exemplo será somente para funções relacionadas à criaturas (players, monsters, npcs).
ClassCreature = {} -- for creature functions function ClassCreature:new(creature) return setmetatable({uid = creature}, {__index = self}) end function Creature(uid) return ClassCreature:new(uid) end
Feito isso, já podemos começar a converter funções em métodos a partir do próprio arquivo uma abaixo da outra.
Como faremos?
Segue abaixo a conversão da função doPlayerSendCancel:
function ClassCreature:sendCancel(message) return doPlayerSendCancel(self.uid, message) -- (no lugar onde estamos acostumados a colocar cid ou player, colocamos self.uid) end
Agora a conversão da função doPlayerSendTextMessage:
function ClassCreature:sendTextMessage(msg, type) return doPlayerSendTextMessage(self.uid, type, msg) end
Assim já podemos utilizar o método em nossos scripts. Com exemplo, segue abaixo um talkaction:
function onSay(player) player = Creature(player) -- Instância player:sendTextMessage('Olá ' .. player:getName() .. ', este é um exemplo de como utilizar métodos em TFS 0.4 :)', MESSAGE_INFO_DESCR) player:sendCancel('Você está no nível ' .. player:getLevel() .. ', parabéns!') return true end Obs: é sempre necessário instanciar da mesma forma do exemplo para códigos simples. Para mais complexos, pode-se instanciar quantos objetos quiseres.
E para finalizar, irei deixar alguns métodos já agrupados para vocês testarem:
data/lib/110-methods.lua :
ClassCreature = {} -- for creature functions function ClassCreature:new(creature) return setmetatable({uid = creature}, {__index = self}) end function Creature(uid) return ClassCreature:new(uid) end -- Métodos function ClassCreature:getName() return getCreatureName(self.uid) end function ClassCreature:getLevel() return getPlayerLevel(self.uid) end function ClassCreature:getHealth() return getCreatureHealth(self.uid) end function ClassCreature:getMana() return getCreatureMana(self.uid) end function ClassCreature:sendCancel(msg) return doPlayerSendCancel(self.uid, msg) end function ClassCreature:sendTextMessage(msg, type) return doPlayerSendTextMessage(self.uid, type, msg) end function ClassCreature:getPosition() return getThingPos(self.uid) end function ClassCreature:teleportTo(pos) return doTeleportThing(self.uid, pos) end
E é só isso galera, esse é um dos métodos mais simples de se fazer isso. Abraços!
Créditos: Todo meu!
-
Lyu recebeu reputação de felippe reine em Aprendendo sobre funções LUAMuito bem amigo, continue assim, se esforce e pratique bastante que isso é o que dar resultado no aprendizado.
O seu script está ficando interessante, porém possui alguns probleminhas, mas é NORMAL, não se assuste.
O refiz para você estudá-lo e entender algumas coisas, enchi de descrições rsrs
-- variáveis locais (só são acessíveis dentro de escopos ou arquivos caso estejam soltas) local needStorage = 211100 local needLevel = 100 local needItemId = 2545 function onUse(cid, item) -- função/evento com dois argumentos: cid = ID do jogador, item = userdata do Item -- esta verificação abaixo, seria útil para funcionar somente com o itemID informado na variável local ali em cima. if item.itemid == needItemId then -- verifica se o ID do item que está dando USE é igual ao itemId que está na variável local lá em cima. return false -- o script retorna falso e interrompe a execução do restante abaixo, ou seja, para por aqui mesmo. Lembre-se disso. end if getPlayerLevel(cid) < needLevel then -- se o level for menor que o necessário doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você não possui level suficiente.') return false end if getPlayerStorageValue(cid, needStorage) == -1 then -- VERIFICA se o jogador possui a storage informada lá em cima na variável local, no caso, -1 é o valor padrão para storages e significa que não tem caso realmente seja igual a -1. doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Você não possui a storage necessária.') return false end -- ACIMA, você ver que há 3 condições, verifica o item se é o correto, o level e a storage. -- Se passar dessas 3 condições, o código abaixo será executado e validado, neste caso, executando abaixo, significa que o jogador possui todos os requisitos acima. doCreatureAddHealth(cid, 1000 * 1000) -- vida adicionda doCreatureAddMana(cid, 1000 * 1000) -- mana adicionada doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Parabéns, você recebeu uma porrada de HP e MANA.') return true end
Irei lhe indicar alguns editores de textos legais para lhe ajudar a organizar e entender melhor os seus códigos
Notepad++
Sublime Text 3
Atom
Utilizo os 3 e são ótimos, não é bom utilizar notepad normal porque ele não é apropriado para programação, somente texto SHAHUSAHUAS
-
Lyu recebeu reputação de matadinhos em Death System 2016 versão frag consecutivo!tem sim amigo, testa e me diz :
-- Coded by Zoom.. local info, win, lose = "%s [Level: %s] foi mort%s pelo player %s%s", "%s obteve %s frags seguidos após derrotar %s.", "%s acabou de impedir que %s fizesse uma sequência de %s frags seguidos." local frags, storage = {10, 15, 20, 25, 30, 35, 40, 45, 50}, 30045 function onDeath(cid, corpse, deathList) local target = deathList[1] if(not isPlayer(cid) or not isPlayer(target)) then return true end doCreatureSetStorage(target, storage, getCreatureStorage(target, storage) + (getCreatureStorage(target, storage) == -1 and 2 or 1)) for _, pid in ipairs(getPlayersOnline()) do doPlayerSendChannelMessage(pid, '', info:format(getCreatureName(cid), getPlayerLevel(cid), getPlayerSex(cid) == 1 and "o" or "a", getCreatureName(target)," [Level: "..getPlayerLevel(target).."]."), TALKTYPE_CHANNEL_ORANGE, 0xF) for _, frag in ipairs(frags) do if(getCreatureStorage(target, storage) == frag) then doPlayerSendChannelMessage(pid, '', win:format(getCreatureName(target), frag, getCreatureName(cid)), TALKTYPE_CHANNEL_MANAGEMENT, 0xF) end if(getCreatureStorage(cid, storage) >= frag) then doPlayerSendChannelMessage(pid, '', lose:format(getCreatureName(target), getCreatureName(cid), getCreatureStorage(cid, storage)+1), TALKTYPE_GAMEMASTER_CHANNEL, 0xF) end end end doCreatureSetStorage(cid, storage, 0) return true end
-
Lyu recebeu reputação de Toruk em EMOTE SPELLS DINÂMICO!Fala clã, tudo bom? Então, vi esse tal emote spells em um servidor e decidi fazer, e também, compartilhá-lo com vocês ?
O que é?
É um código simpleszinho que possibilita players escolherem a cor da mensagem das spells por meio de comando, LARANJA ou AMARELO, como nas imagens abaixo:
Vamos aos códigos..
abra game.cpp, na função playerSaySpell, procure por:
if (result == TALKACTION_BREAK) { if (!g_config.getBoolean(ConfigManager::EMOTE_SPELLS)) { return internalCreatureSay(player, TALKTYPE_SAY, words, false); } else { return internalCreatureSay(player, TALKTYPE_MONSTER_SAY, words, false); } } else if (result == TALKACTION_FAILED) { return true; }
e substitua por:
if (result == TALKACTION_BREAK) { int32_t value; player->getStorageValue(203500, value); return internalCreatureSay(player, value == 1 ? TALKTYPE_MONSTER_SAY : TALKTYPE_SAY, words, false); } else if (result == TALKACTION_FAILED) { return true; }
Beleza, agora precisamos de uma talkaction para fazer a alteração de storage, vamos lá..
data/talkactions/scripts/emotespells.lua:
function onSay(player) local switch = player:getStorageValue(203500) == -1 and 1 or -1 player:sendTextMessage(MESSAGE_INFO_DESCR, 'emote spells: (' .. (switch == 1 and 'monster_say' or 'say') .. ')') player:setStorageValue(203500, switch) end
data/talkactions/talkactions.xml:
<talkaction words="!emotespells" script="emotespells.lua"/>
Agora só compilar as sources e pronto?
Versão do TFS: 1.3
Créditos: Lyu (isme)
-
Lyu recebeu reputação de Lincoln123123 em Anti Divulgação em LUATestado apenas em TFS 0.4
Em "Data/talkactions", no arquivo talkactions.xml, adicione a tag:
<talkaction default="yes" filter="quotation" logged="no" hidden="yes" event="script" value="antidiv.lua"/> Em "Data/talkactions/scripts", crie um arquivo.LUA e renomeie para antidiv.lua, apague tudo e cole:
local words_, prev = {"org","no-ip","net","com","pl","biz","servegame","br","sytes","info"}, {".",",",";"} function onSay(cid, words) for _, w in ipairs(words_) do for _, p in ipairs(prev) do if(words:lower():find(p..''..w, 1, true)) then return doPlayerSendCancel(cid, 'You can\'t send this message.') end end end end Na tabela prev..
Você pode adicionar na tabela, o que vem antes de "net", "org" e etc..
ex : se eu adicionar um til "~", não vai dá pra divulgar assim : "www.etcetc~org"
{".",",",";"} Já existem 'ponto', 'vírgula' e 'ponto e vírgula' dentro da tabela.
Então é impossível divulgar dos seguintes modos :
entrem aqui otfodao.com
entrem nesse ot baiakzikaofodapakas,com
novo ot lançado hoje, entrem www.otnoob;net
Créditos : EU
-
Lyu deu reputação a lordzetros em Bot Discord Integrado com ServidorBacana! Quando estava ligado a um projeto, pensei em fazer algo bem semelhante, isso vai se tornar algo banal daqui alguns anos, acho importante servidores fazerem esse tipo de integração o quanto antes, sem contar que hoje em dia é um diferencial e muitos players utilizam Discord. Parabéns.
-
Lyu deu reputação a r0bert0lol em [8.60][OLD Client] Narutibia (NTO HARD) - Servidor CompletoOlá galera do TK !
Venho por meio deste tópico, publicar a ultima versão do meu servidor derivado de Tibia NTO Hard juntamente com todos os arquivos necessários para edições.
Confesso que não foi fácil tomar essa decisão, afinal de contas foram mais de 5 anos nessa vida de administrador de otserver e esses arquivos são de muita valia, tenho certeza de que muito do que conquistei e me tornei, é resultante dos servidores que pude administrar. Costumo dizer que não sou programador e que estou mais para um gerente de scripts, todos os meus servidores foram criados com base em arquivos disponibilizados em comunidades como esta, sendo assim, pensei comigo, seria interessante eu disponibilizar e de certa forma contribuir, acredito que esses arquivos ainda podem ser útil para muitos.
O que tem de diferente no NTO Hard ?
Foi feito com muito carinho ! Rs. Eu poderia fazer uma lista (BÍBLIA) do que tem no servidor porém estou sem tempo mas tenho certeza que esse é o servidor NTO mais completo, atual e disponível para ser baixado em qualquer comunidade de otserver.
Veja algumas Imagens !
O que tem nesse Pacote Full de Arquivos NTO Hard ?
Datapack mais recente e completa do servidor. Site Gesior com template própria + AntiDDOS. Client Descompilado + Estendido + DLL Manabar com ajuste na altura da Barra de Vida/Chakra + DLL Proteção para extensão.cab Source OTX compatível com o servidor CabCreator Item Editor que funciona com o item.otb do server Object Builder 0.4.1 Remeres Map Editor Estendido para funcionar com o client do server Pic Editor IP Changer
DOWNLOAD & SCAN
dbresetada.sql
-
Lyu recebeu reputação de DdJs em [12x+] Babylon Teleports Roomque room linda
-
Lyu deu reputação a DdJs em [12x+] Babylon Teleports RoomBaylon Teleports Room
V 12.20+
Download:
TeleportsRoom_V12.otbm
Position [X: 1089 Y: 1034 Z: 5]
RME + Client:
Remere's Map Editor (11-12+) + Client.rar
Imagens:
-
Lyu recebeu reputação de Bruxo Ots em Cam System 10.98 (TFS 1.3)Olá TK, hoje venho publicar um sistema bem interessante que venho mexendo há algumas semanas, estou falando do Cam System, um sistema de nível avançado que coleta packets durante a jogatina e forma uma gravação daquele momento, onde você poderá assistir à essa gravação quantas vezes quiser, como um replay, porém o sistema está limitado somente para fins de estudos e curiosidades. Não recomendo utilizar em seu servidor, pois como está limitado, também está rodando dentro do TFS e pode pesar, já que não tive tempo para otimizá-lo e criar um server próprio somente para assistir às gravações. Também não está serializando/deserializando em arquivos.cam, está salvando na memória. Mais uma vez, não utilize, só estude a principal funcionalidade do sistema.
Bom, o gist já está publicado, você pode acessá-lo aqui ou então baixar a source já com o sistema incluso pronto pra rodar (Lembrando que utilizei a última versão do forgottenserver-master, confira aqui)
Download da Source: src with cam.zip
Scan: https://www.virustotal.com/gui/file/3392c1c31d8bbab5cdc2f7e3c0c766749f3238efd2c36c80575480283b15fc32/detection
Para começar uma nova gravação, utilize /replay start
Para parar uma gravação e salvá-la, utilize /replay stop
feito isso, para assisti-la, deslogue sua conta e na janela de login, deixe o accountname vazio e no password informe replaylist
Então é isso, se algum Programador estiver afim de aplicar otimizações/serialização ao sistema, fique à vontade para contribuir. Este sistema é incrível e pode muito bem dar certo. ?
Vídeo de demonstração:
-
Lyu recebeu reputação de Pedro. em [GESIOR] OTS Layouts - Yinzminino organizado. Muito daora pedrão baleiro, só layout linda?
-
Lyu deu reputação a Pedro. em [GESIOR] OTS Layouts - YinzOlá, estou trazendo diversos Layouts, organizados unicamente em um tópico. Todos estão no github, se você quiser poderá contribuir também.
Quando comecei a mexer com servidores, a questão de layouts era limitadíssima, não tinha quase nenhum Custom, e quando tinha ninguém codava pra gesior, nego simplesmente te dava os psds e se vira.
Eu sempre gostei de fazer mapa proprio, então mapa proprio com tibiarl é feio demais, hoje em dia você tem um caralhão de layouts, então boa sorte.
- Layouts
Aldora Kalaboka-Poke Ascar Nakjila GODLike Wondrous Underscore Envy Fibula Necronia Evoker AiretsamKit MaterialKit WOP Thora PokeStorm
você pode encontrar todos esses layouts no repositório no Github, clicando na branch você pode alterar o layout, ou pelo Readme os links estão organizados.
Você poderá ver uma preview clicando em cada layout;
https://github.com/pedrogiampietro/ots_layouts
-
Lyu recebeu reputação de WooX em Anti Divulgação em LUATestado apenas em TFS 0.4
Em "Data/talkactions", no arquivo talkactions.xml, adicione a tag:
<talkaction default="yes" filter="quotation" logged="no" hidden="yes" event="script" value="antidiv.lua"/> Em "Data/talkactions/scripts", crie um arquivo.LUA e renomeie para antidiv.lua, apague tudo e cole:
local words_, prev = {"org","no-ip","net","com","pl","biz","servegame","br","sytes","info"}, {".",",",";"} function onSay(cid, words) for _, w in ipairs(words_) do for _, p in ipairs(prev) do if(words:lower():find(p..''..w, 1, true)) then return doPlayerSendCancel(cid, 'You can\'t send this message.') end end end end Na tabela prev..
Você pode adicionar na tabela, o que vem antes de "net", "org" e etc..
ex : se eu adicionar um til "~", não vai dá pra divulgar assim : "www.etcetc~org"
{".",",",";"} Já existem 'ponto', 'vírgula' e 'ponto e vírgula' dentro da tabela.
Então é impossível divulgar dos seguintes modos :
entrem aqui otfodao.com
entrem nesse ot baiakzikaofodapakas,com
novo ot lançado hoje, entrem www.otnoob;net
Créditos : EU
-
Lyu recebeu reputação de ITALOx em (Resolvido)Guild BonusTente isso, fiz aqui rapidinho mas não testei (acredito que funcione como você espera)
data/movements/scripts/guildexp.lua
if not guildExperienceBonus then guildExperienceBonus = 0 -- default value; no guild end function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end local guild = player:getGuild() if guild then guildExperienceBonus = guild:getId() player:sendTextMessage(MESSAGE_INFO_DESCR, 'Sua guild agora possui o bônus em experiência.') player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN) end return true end data/movements/movements.xml
<movevent event="StepIn" actionid="33462" script="guildexp.lua" /> data/events/scripts/player.lua
--[[ Atenção, procure a função Player:onGainExperience(source, exp, rawExp) Adicione o código abaixo antes do último return exp ]] local guild = self:getGuild() if guild and guild:getId() == guildExperienceBonus then exp = exp * 1.2 -- 20% bonus end
-
Lyu recebeu reputação de Agaka em (Resolvido)Guild BonusTente isso, fiz aqui rapidinho mas não testei (acredito que funcione como você espera)
data/movements/scripts/guildexp.lua
if not guildExperienceBonus then guildExperienceBonus = 0 -- default value; no guild end function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end local guild = player:getGuild() if guild then guildExperienceBonus = guild:getId() player:sendTextMessage(MESSAGE_INFO_DESCR, 'Sua guild agora possui o bônus em experiência.') player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN) end return true end data/movements/movements.xml
<movevent event="StepIn" actionid="33462" script="guildexp.lua" /> data/events/scripts/player.lua
--[[ Atenção, procure a função Player:onGainExperience(source, exp, rawExp) Adicione o código abaixo antes do último return exp ]] local guild = self:getGuild() if guild and guild:getId() == guildExperienceBonus then exp = exp * 1.2 -- 20% bonus end
-
Lyu recebeu reputação de Avante em (Resolvido)Guild BonusTente isso, fiz aqui rapidinho mas não testei (acredito que funcione como você espera)
data/movements/scripts/guildexp.lua
if not guildExperienceBonus then guildExperienceBonus = 0 -- default value; no guild end function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end local guild = player:getGuild() if guild then guildExperienceBonus = guild:getId() player:sendTextMessage(MESSAGE_INFO_DESCR, 'Sua guild agora possui o bônus em experiência.') player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN) end return true end data/movements/movements.xml
<movevent event="StepIn" actionid="33462" script="guildexp.lua" /> data/events/scripts/player.lua
--[[ Atenção, procure a função Player:onGainExperience(source, exp, rawExp) Adicione o código abaixo antes do último return exp ]] local guild = self:getGuild() if guild and guild:getId() == guildExperienceBonus then exp = exp * 1.2 -- 20% bonus end
-
Lyu recebeu reputação de WooX em Tutorial - Push cruzado e sua históriaTópico muito bonito, história muito legal também, eu queria ter a paciência que você tem com organizações de tópicos kkk Mas então, tá de parabéns irmão pelo esforço em trazer essa informação de forma detalhada ao público, tem meu respeito. Continue nessa pegada que tenho certeza que seu nome vai lá em cima. É nois!