
Tudo que Yan Liima postou
-
Script de deleta player.
Não, é um globalevents. onStartup(), só é executado quando você abre a distro, antes do servidor ficar on. É ali mesmo onde o nosso querido Vodkart disse. Os tutores do seu servidor tem o ID 2 e 3? Se for o caso deixe assim: `group_id` < 4 Ele vai fazer a verifição e deletar do groupID 3 pra baixo.
-
Cam System 10.98 (TFS 1.3)
Não estarei utilizando esse sistema por conta de não utilizar a mesma versão de distro e Otsverv, e sem contar que o sistema está em faze beta né. Mais venho aqui te parabenizar pelo ótimo trabalho. Sempre deixei bem claro o quanto tu manja em programação, sem contar que me ensinou muito quando apenas era um aprendiz também. Tmj irmão, continue com seus ótimos trabalhos sempre! Bem inovador isso ai, eu sinceramente não vi nada semelhante além do Cast
-
(Resolvido)Script que o player dobra o exp
Creaturescript: local storage = 48999 -- str que precisa ter function onLogin(cid) local rate = 1.3 -- 30%, 1.2 = 20%... if getPlayerStorageValue(cid) == storage then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Você tem "..((rate - 1)*100).."% de exp a mais!") end return true end function onKill(cid, target) if isPlayer(cid) and isMonster(target) then if getPlayerStorageValue(cid) == storage then local exp = getExperienceStage(getPlayerLevel(cid), getVocationInfo(getPlayerVocation(cid)).experienceMultiplier) local count = ((getMonsterInfo(string.lower(getCreatureName(target))).experience*1.3*exp)/2) --30% doPlayerAddExperience(cid, count) addEvent(doSendAnimatedText, 500, getCreaturePosition(cid), '+'..count, math.random(50,60)) end end return true end <event type="login" name="ExpGuild_L" event="script" value="arquivo.lua"/> <event type="kill" name="ExpGuild" event="script" value="arquivo.lua"/> Só registrar o kill no seu login.lua.
-
Vale a pena investir num servidor de TibiaOtserv caseiro?
Cara sinceramente não vejo futuro em um servidor que está sendo comprado. Até porque o que estará sendo vendido para você, será vendido para outros e repassados free para alguns. Se a sua inteção é comprar e apenas colocar online da maneira que você pegou, não compensa! E um servidor que pode ser iguais aos demais online. Servidores repetitivos nunca dão bons resultados, até porque fica uma divisão de players. E sem contar que hoje em dia não está facil para OT-Admin ter um bom resultado com jogadores & lucros. Ao meu ver eu acho que aos poucos a galera anda abandonando este lindo jogo que tem muito mais a ser explorado. E com isso, com os jogadores abandonando esse MMORPG e optando por jogar os jogos da atualidade, só sobra os jogadores fieis dos servidores antigos, no qual estão em alta, digamos assim. Acho mais emocionante quando é algo feito por você, você faz da maneira que você quer. Coloca coisas inovadoras, e assim acaba atraindo jogadores para o seu servidor. Pois ele é novo, é diferente dos demais, é inovador! Se você gastar grana comprando um servidor, e não ter retorno, o dinheiro foi gasto em vão. Já tive um servidor caseiro em 2011, ficou online cerca de 1 ano. E acredite, teve muitos jogadores, muitos mesmo! E o PC era um dos piores, utilizava um que o processador já era fixo na placa-mãe, o pente de memoria era de Notebook... E mesmo com bastante jogadores, ele aguentava tranquilo. Eu só não podia abrir o navegador ksksksks. No seu caso funcionaria numa boa. Ai só iria depender da velocidade da sua internet. É claro que eu te aconselho a usar uma HOST, mas não vejo problema em hostear em sua casa. Proteção e essas coisas, é o de menos, dai nos da um jeito kkk Se precisar de algo, estou à disposição! Antigamente quando eu era a toa, sempre pegava uns aprendiz. Infelizmente muitos abandonou o otserv, e um teve um grande sucesso com o servidor e virou as costas para mim.
-
(Resolvido)Colocar exausted nesse comando
Quando for um script meu pode me marcar que ajudo na questão. Tem como fazer dessa maneira: Ou assim: -- Créditos para Yan Liima - Night criador da script. local time = 4 -- em segundos 1 = 1 segundo 2 = 2 segundos... local config = { storage = 2193, str_seconds = 120, -- storage e segundos } local say_events = {} local function SayText(cid) if isPlayer(cid) == TRUE then if say_events[getPlayerGUID(cid)] ~= nil then if isPlayer(cid) == TRUE then doSendAnimatedText(getPlayerPosition(cid),"Treinando!", math.random(01,255)) end say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000 / 2, cid) doCreatureSetNoMove(cid, true) end end return TRUE end function onSay(cid, words, param, channel) if getPlayerStorageValue(cid, config.storage) > os.time() then return doPlayerSendCancel(cid, "Espere " .. getPlayerStorageValue(cid, config.storage) - os.time() .. " segundos.") end if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Utilize '".. words .. " on' para ligar e '".. words .. " off' para desligar.") return true end if param == "on" then if isPlayer(cid) == TRUE then doSendAnimatedText(getPlayerPosition(cid),"Treinando", math.random(01,255)) end say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000, cid) doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você está em modo 'Training'.") doPlayerSendTextMessage(cid,20,"Para sair do modo 'training' diga ".. words .. " off") setPlayerStorageValue(cid, config.storage, os.time() + config.str_seconds) -- LINHA QUE ADC A O EXAUSTED, SÓ COPIAR PARA OUTRO LOCAL SE NECESSARIO elseif param == "off" then stopEvent(say_events[getPlayerGUID(cid)]) say_events[getPlayerGUID(cid)] = nil doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você não está mais em modo 'Training'.") doCreatureSetNoMove(cid, false) end return TRUE end
-
(Resolvido)dar comando e adicionar storage por tempo ao player selecionado
Melhorar como? Daria pra determinar a storage no proprio comando, verificar se o player existe e apenas aceitar o time em numeros para evitar bug. Ficaria assim: function onSay(cid, words, param) local t = string.explode(param, ",") local player = getPlayerByNameWildcard(t[1]) if(not t[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, words.." player, storage, tempo") return true end if(not player or (isPlayerGhost(player) and getPlayerGhostAccess(player) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[1] .. " não existe ou está offline.") return true end t[3] = tonumber(t[3]) if(not t[3]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Comando requer parametro numerico.") else setPlayerStorageValue(player, t[2], os.time() + t[3]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou a storage: "..t[2].." ao jogador "..t[1].." com o tempo de "..t[3].."!.") end return true end
-
(Resolvido)Adicionar Random outfit
Pensou correto, só faltou saber executar. Veja como ficaria: local looktype = {3025, 3026} -- looktype da outfit. function onUse(cid, item, frompos, item2, topos) local random_outfit = looktype[math.random(1, #looktype)] if getCreatureOutfit(cid).lookType ~= random_outfit then doSetCreatureOutfit(cid, {lookType = random_outfit}, -1) else doPlayerSendTextMessage (cid, 19, "Você já está utilizando esta roupa!") end return true end
-
(Resolvido)Por maximo level nesse script
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 items = { item1 = {6544, 13489}, -- item1 item que será pedido e que será dado na primeira troca } local counts = { count1 = {25, 1}, -- count1 quantidade que será pedido e que será dado na primeira troca } 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, 'kagome') then selfSay('Voce deseja paga '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..' por'.. counts.count1[2] ..' '.. getItemNameById(items.item1[2]) ..'?',cid) talkState[talkUser] = 1 elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then if getPlayerLevel(cid) <= 20 then if getPlayerItemCount(cid, items.item1[1]) >= counts.count1[1] then doPlayerRemoveItem(cid, items.item1[1], counts.count1[1]) doPlayerAddItem(cid, items.item1[2], counts.count1[2]) selfSay('Obrigado! Voce acaba de paga '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..' por '.. counts.count1[2] ..' '.. getItemNameById(items.item1[2]) ..'.', cid) talkState[talkUser] = 0 else selfSay('Voce precisa de '.. counts.count1[1] ..' '.. getItemNameById(items.item1[1]) ..'.', cid) end else selfSay('Voce precisa ter no maximo level 20.', cid) end end end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
[8.60] TFS 0.4 Rev3996 War & Cast
Está sim irmão ?
-
[8.60] TFS 0.4 Rev3996 War & Cast
Salve salve pessoal, no inicio desse ano estava dando uma estudada e mexendo com a TFS 0.4 rev3884, e vi que havia alguns bugs e que não tinha Cast incluso. Com base nisso decidi atualizar e otimizar a source, já que ainda ela é uma das mais utilizadas no mundo de Otserv. Decidi compartilhar esse meu trabalho com vocês! Acredito que possa ser uma das melhores REV atualmente. Conto com o seu feedback, caso haja algum bug, algo que tenha que mudar/optimizar, não exite em avisar aqui no tópico. Toda ajuda será bem vinda xD The Forgotten Server, Tibia Versão: 8.60 O que contém nela? Dentro da pasta contém o config.lua com todas as tag já adicionadas. Não esquecam de executar a Query do Cast na sua DB: Downloads uint8(Effects até 255) Distro: TheForgottenServer.exe Src + datapack: Source & Data Recentes atualizações: GitHub Downloads uint8 sem o CAST incluso Distro: TheForgottenServer.exe Src + datapack: Source & Data ------------------------------------------------------- Downloads uint16(Effects até 65534) Distro: TheForgottenServer.exe Src + datapack: Source & Data É necessário fazer a modificação do Hexadecimal no cliente. Aqui tem um já pronto: Cliente.exe(com mc) ou Cliente.exe(sem mc) (só será necessario se utilizar a src com o uint 16.) Lembrado também que precisa utilizar a lib 000-constant.lua deste datapack. ------------------------------------------------------- Scans: Distro(uint8) & Distro(uint16) Source Cliente Obs: Os virus detectado é um falso positivo, então não se preocupem! A distro foi testada em Windows e em Linux Ubuntu 12.04, 14.04, em ambos funcionaram muito bem! É compatível com 16 também e o 18.04 é necessário fazer uma alteração que é possível encontrar no post desse tópico. É possível compilar em Dev Cpp e Visual-Studio. E para quem se interessa em saber onde se localiza os code do Cast, aqui está uma imagem. Você pode achar procurando por "//CAST" Façam um ótimo aproveito ?
-
Cast system tsf 0.4
@yazanki com base no que o WooX disse, e pelo que eu e ele conversamos. Fiz um script que testei aqui e funcionou perfeitamente. Ele verifica se há jogadores online no cast, se tiver ele irá executar a função a cada 1s(configuravel no xml), para atualizar o valor no banco de dados, assim atualizando no site Em globalevents.xml add: <globalevent name="castViewers" interval="10000" event="script" value="castViewers.lua"/> castViewers.lua: function onThink(interval) for _, pid in ipairs(getCastsOnline()) do local count = 0 local cast = getCastViewers(pid) for _,v in pairs(cast) do count = count + 1 end db.query("UPDATE `players` set `castViewers` = '" .. count .."' where `id` = '".. getPlayerGUID(pid) .."';") end return true end Bem simples xD
-
Cast system tsf 0.4
Seguinte, a questão é facil de responder. Para as informações atualizarem é necessario de um save. Por isso o cast do summ que no caso é o que você utiliza tem o comando /cast update , assim ele atualiza as informações! Vi que você já resolveu a respeito do /cast on, sobre os Viewers creio que teria que mexer na propria source para funcionar de imediato, creio que o Summ não fez isso por conta que poderia causar muito leg, assim ocasiando a um crash. Então toda vez que quiser atualizar as informações, basta usar o comando /cast update.
- [System] Trade Points
- [System] Trade Points
-
[System] Trade Points
@weslwy sobre o primeiro erro, o do creaturescripts.xml, é problema ao ter copiado. As vezes vem caractere inválido, erro do proprio fórum. Tente corrigir ou faça a linha você mesmo, fica até mais fácil. Sobre o segundo , é algum problema no npchandler.lua da sua LIB do NPC. Ou pode ser que você não configurou o ID do item corretamente ou ele é inexistente no items.xml...
- [System] Trade Points
-
(Resolvido)NPC Teleportador
Fiz esse para um rapaz há um tempo atrás, creio que é isso que deseja. Só editar: local DESTINO = {x=1024, y=1026, z=7} -- POS local DESTINO2 = {x=1358, y=669, z=6} -- POS local DESTINO3 = {x=592, y=829, z=7} -- POS local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} 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 getCreatureCondition(cid, CONDITION_INFIGHT) == false then if msgcontains(msg, "viajar") then selfSay("Posso te levar para: {Hakai City}, {Desert City}, {Ice City}", cid) elseif msgcontains(msg, "hakai city") then selfSay("OK!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, 10) elseif msgcontains(msg, "desert city") then selfSay("OK!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO2) doSendMagicEffect(DESTINO2, 10) elseif msgcontains(msg, "ice city") then selfSay("OK!", cid) doSendMagicEffect(getThingPos(cid), 10) npcHandler:releaseFocus(cid) doTeleportThing(cid, DESTINO3) doSendMagicEffect(DESTINO3, 10) end else selfSay("Desculpe, mas você está em batalha.", cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
[System] Trade Points
#Introdução Reparei que muitas pessoas estão atrás desse sistema que o DBOBR e NTOBR usa, e atualmente o VitorSubhi postou um, porém é necessário modificar as sources. Apesar de achar o dele bem melhor, estarei deixando este meu sistema(não é necessário mexer nas sources). #Funcionamente O jogador vai até um NPC e compra um papel, após ter comprado ele pode estar dando trade nesse papel e negociando com algum jogador em troca de qualquer item. Ao finalizar a negociação, os points são transferidos/removidos(caso houver points na conta). Também é possivel comprar o papel por comando, estarei disponibilizando ambos para vocês. #Alguns prints: Estarei deixando o script para vocês em inglês, modifique como quiser Então vamos lá... #Instalação Em data/lib crie um arquivo chamado tradepoints.lua cole isto dentro: Em data/creaturescripts/tradepoints.lua: TAG: <event type="tradeaccept" name="Trade_Points" event="script" value="tradepoints.lua"/> <event type="traderequest" name="Trade_Points_Request" event="script" value="tradepoints.lua"/> login.lua registerCreatureEvent(cid, "Trade_Points") registerCreatureEvent(cid, "Trade_Points_Request") NPC XML: <?xml version="1.0" encoding="UTF-8"?> <npc name="Frodo" script="data/npc/scripts/trade_points.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="275" head="114" body="113" legs="113" feet="113" corpse="2212"/> <parameters> <parameter key="module_shop" value="1" /> <parameter key="message_greet" value="Hello |PLAYERNAME|. I sell some utensils and Premium Points Transfer for you to transfer points to other players, remember to buy use '10' to 10 points." /> </parameters> </npc> Data/npc/scripts/trade_points.lua: Caso queira que a compra do papel seja feita por talkactions, aqui está: Prontinho xD Agradecimentos ao @lordzetros por ajudar na função scanContainer. obs: testado em TFS 0.4
- [8.60] Wodbo Wars v5.9 + Site + Client Download
- [8.60] Wodbo Wars v5.9 + Site + Client Download
-
AJuda Spells.cpp Sources
Se for a exclusive edition ela não é TFS e sim OTX. E eu tenho ela e não tem esse problema ai não. Só configurar o exhaust no spells.xml ou se preferir no proprio arquivo .lua..
- [Modern Acc] Guild Dominante (Página)
-
BARRAS NO OLD CLIENT ?
Da pra fazer por DLL e depois é só hookar no client. A galera que costuma fazer isso vende por um valor bem salgado. Então não espere algo assim pro OLD client de graça
-
(Resolvido)abrir sempre que logar o trade chat , automático
No seu login.lua dentro da função onLogin, antes do ultimo return true coloque: doPlayerOpenChannel(cid, 6) -- 6 é o ID do channel
-
(Resolvido)Script de quando der Look em um item aparecer um Texto
actions.xml <action itemid="ID_DO_ITEM" script="arquivo.lua" /> lua function onUse(cid, item, frompos, item2, topos) doShowTextDialog(cid, 4854, "TEXTO") return true end