Tudo que Lyu postou
-
Mute no HELP Channel
<?xml version="1.0" encoding="UTF-8"?> <channels> <channel id="1" name="Gamemaster Chat" access="3"/> <channel id="2" name="Tutor" access="1"/> <channel id="3" name="Rule Violations" logged="yes"/> <channel id="4" name="Game-Chat"/> <channel id="5" name="Trade" level="8" muted="120" conditionId="3" conditionMessage="You may only place one offer in two minutes."> <vocation id="1-8"/> </channel> <channel id="6" name="Rook Trade" level="2" muted="120" conditionId="3" conditionMessage="You may only place one offer in two minutes."> <vocation id="0"/> </channel> <channel id="7" name="RL-Chat"/> <channel id="8" name="Party"/> <channel id="9" name="Help" logged="yes"/> <channel id="65535" name="Private Chat Channel"/> </channels> Veja também o funcionamento in-game:
-
Mute no HELP Channel
aqui funciona normalmente. Testei apenas em otx 2.6
-
Mute no HELP Channel
/helpmute mute, Playername, time /helpmute unmute, Playername
-
Mute no HELP Channel
Aguarda 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
-
[New Cast System] OTX3 8.60
valeu @tataboy67 meu brother!
-
[New Cast System] OTX3 8.60
Valeu @KotZletY, obrigado pelo apoio! Tamo Junto!
-
[New Cast System] OTX3 8.60
Pois é, triste demais. Então meu bom, a ultima vez que mexi nessa source acho que foi de julho pra agosto, então acredito que ainda tem aquele bugzinho do party que crasha. Mas você pode ir no github do mattyx, pegar a parte em que ele fixa e inserir nessa source.
-
[New Cast System] OTX3 8.60
Fala clã, tudo bom? Então, há um tempo eu estava querendo iniciar um projeto com protocolo 8.60 e tfs atual, mas percebi que não havia cast system público para tal versão to theforgottenserver. Então resolvi eu mesmo adicionar na source ? (Lembrando que peguei o cast system do protocolo 10.11 e adaptei ao 8.60, ambas datapacks foram obtidas gratuitamente a partir do github do Mattyx). O motivo de eu estar publicando é que eu só tenho me fodido ultimamente adiantando material antes de receber o valor combinado (demonstrando que sou um cara legal), mas nem sempre é legal ser legal. Concordam? Ah, e também queria lembrar que meu C++ é meio fraco (na verdade eu parei é de estudar C++ tem um tempo), então se aparecer bugs na source, assumem daí. Mas o cast foi testado bastante e aparenta estar estável, com algumas modificações únicas. Já está compilado e testado para windows 64bits (compilado com Visual Studio 2017) e também compila linux (alguns testes foram feitos no linux e aparenta estar estável também) Em fim, baixem! Scan do theforgottenserver.exe Scan do ZIP Download Here! Créditos : Mattyx e Lyu (is me, por ter adicionado o cast)
-
(Resolvido)PISO QUE DA DANO ALEATORIO
local percent = {min = 10, max = 60} -- entre 10% a 60% de dano. function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end local damage = math.ceil((math.random(percent.min, percent.max) * 0.01) * getCreatureMaxHealth(cid)) doSendMagicEffect(getThingPos(cid), 6) doSendAnimatedText(getThingPos(cid), '- ' .. damage, TEXTCOLOR_LIGHTBLUE) doCreatureAddHealth(cid, - damage) return true end
-
Legendary Lever (Alavanca de Itens Lendários)
haha valeu @tataboy67, tamo junto!
-
Aprenda a utilizar 'Metamethods' em TFS 0.4
haha valeu @Daniel! Organização de tópicos não é o meu forte mas tá valendo ? kkkk
-
Aprenda a utilizar 'Metamethods' em TFS 0.4
Eita, falta de atenção minha kkkkkkk boa observação, obrigado!
-
Legendary Lever (Alavanca de Itens Lendários)
Muito obrigado, @Daniel!
-
Legendary Lever (Alavanca de Itens Lendários)
Fala clã, há um tempo soltei um sistema privado meu no grupo do TK no Discord e hoje resolvi soltar aqui no Fórum também, abaixo irei explicar um pouquinho sobre esse sistema. O que é Legendary Lever? É um sistema de alavancas que vendem itens (aleatórios), similar à uma surprise bag, porém cada item possui x porcento de chances de dropar ao jogador que estiver pagando para tentar a sorte. Qual o objetivo afinal? Bom, na época que desenvolvi esse sistema, era para um cliente meu que acabou desistindo da compra quando eu estava prestes a começar a desenvolver. O objetivo do cara era criar 5 alavancas, onde cada alavanca teria pelo menos 1 item lendário com 3% de chance de dropar ao jogador que estivesse puxando a alavanca, e cada alavanca teria entre 5 a 7 itens ao todo (a maioria itens simples). Mas a ideia por trás de tudo era lucrar com isso, fazer jogadores donatarem mais para poder tentar pegar esses itens lendários (claro, o cara ia ter que gastar muito pra isso). Terminou que resolvi desenvolver esse sistema com proteção contra duplo click, exaustão, logs de ações, etc. Em qual versão posso utilizar esse sistema? Esse sistema foi programado para rodar em TFS 1.x. Se vocês quiserem, em breve posso converter para 0.4 e trazer ao Fórum, mas aí vai depender do feedback Sem mais delongas, vamos ao sistema! antes de tudo, crie uma pasta chamada legendarylever em data/actions/scripts, e dentro da legendarylever crie outra pasta chamada lib. data/actions/scripts/legendarylever/lib/lib.lua : agora abra data/lib/lib.lua e inclua esta linha : dofile('data/actions/scripts/legendarylever/lib/lib.lua') Feito isso, você já pode começar a criar os arquivos das alavancas. Vamos então criar a nossa primeira alavanca! data/actions/scripts/legendarylever/royalcrossbow.lua : data/actions/actions.xml : <action actionid="3370" script="legendarylever/royalcrossbow.lua"/> E por fim, adicione a actionid 3370 em uma alavanca no Remere's Map Editor! ? Para criar novas alavancas, você já deve saber o que se fazer. Sim! CTRL + C CTRL + V no arquivo royalcrossbow.lua, renomea o nome, edite a tabela de itens, preços, premium etc e adicione a tag no XML com uma nova actionid (a actionid põe em uma nova alavanca no Remere's). A configuração não preciso nem explicar né! A única dica que dou, é deixar brodacast = true apenas nos itens mais difíceis de dropar, ou seja, os lendários. Porque isso irá anunciar ao servidor todo que aquele player conseguiu o danado do item haha ? Então é isso, espero que tenham gostado! *Edit: Para salvar log de ações, crie uma pasta chamada randomitems em data/logs. Créditos: Lyu (isme)
-
Erro evento zumb
tá faltando a função isWalkable. Utilize a library do @xWhiteWolf para solucionar.
-
editar esse script
provavelmente você está tentando utilizar scripts do tfs 1.x em 0.4 ou 0.3.6. Necessita-se de uma conversão.
-
Aprenda a utilizar 'Metamethods' em TFS 0.4
Fala 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!
-
(Resolvido)ao dar use no bau o player morre !
function onUse(cid) return doCreatureAddHealth(cid, -getCreatureMaxHealth(cid)) end <action actionid="5543" event="script" value="onehit.lua"/>
-
King Baiak 8.6 - Reestruturando o projeto!
Projeto bacana. Boa sorte @DiegoRulez @tataboy67.
-
attempt to call global 'executeCommand' (a nil value)
Não está encontrando a função executeCommand.
-
Procuro participação em projetos
Qualquer coisa mais tarde lhe mando uma mensagem lá. Abraços!
-
Procuro participação em projetos
eae meu mano @tataboy67! Fiquei sabendo sobre o acontecido relacionado ao seu projeto, é paia essas paradas em. Quiser começar um projetin, bora dar inicio em algo, tô com uns tempos sobrando.
-
Teleport Bug
me diz qual source vocês usam, tenho que dar uma olhada melhor. Como eu disse acima, funcionou no otx 2.6
-
Teleport Bug
algo tá errado, testei na source otx 2.6 e funcionou perfeitamente. Vale lembrar que 'SetDestination encontra-se no início de seu arquivo teleport.cpp, então tá estranho dizer que não está declarado.
-
Teleport Bug
source amiguinho. Se eu achar um tempinho, vou dar uma olhada e lhe informo algo. @Notepad veja se isso resolve: em teleport.cpp, procure por if(Creature* creature = thing->getCreature()) e no início do escopo, adicione isso if(destination == creature->getPosition()) { setDestination(Position(0, 0, 0)); return; } se a posição de destino for a mesma posição do player, o código anula a posição do portal fazendo se tornar apenas um item sem posição configurada.