Histórico de Curtidas
-
Jhonny Bravo deu reputação a Yan Liima em Depot Locker System@Jhonny Bravo @LeoTK
Era só um adicional aquilo. Acaba sendo meio inutil por conta do quadro, NPC e os demais sistemas. Mas caso queiram, ai está. Adaptei para essa versão do sistema:
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)Salvar local do ADMSeria isso?
ou esse
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)dar comando e adicionar storage por tempo ao player selecionadoMelhorar 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
-
Jhonny Bravo deu reputação a Yan Liima em [8.60] TFS 0.4 Rev3996 War & CastSalve 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 ?
-
Jhonny Bravo deu reputação a Yan Liima em [8.60] Wodbo Wars v5.9 + Site + Client DownloadSalve salve galera do TK! Hoje vos trago o Wodbo Wars versão 5.9(de 2016)
Creio que muitos daqui que joga dbo deve conhecer esse servidor, atualmente ele está online!
Pra quem não sabe eu já fui da equipe, ajudei a dar inicio ao projeto, corrigindo bugs, scripts,mexendo com site,db etc... Por conta de mesquice do Arkam, ele me tirou da equipe e ai rolou treta entre eu e ele.
Muitos já devem saber a história. Enfim...
Decidi trazer para vocês pois faz muito tempo que a galera vive enchendo o saco para mim postar.
E como esse servidor não tem nenhum valor para mim, só guardava e não postava por respeito ao Matheus P.(Arkam), mesmo tendo nossas intrigas, ele é um grande rapaz. Decidi postar, já que o mesmo não liga mais!
Imagens:
Bom, não estarei postando a distro original, estarei deixando a que ele utilizou no inicio. Recomendo vocês baixarem alguma src(source) e compilarem. Recomendo utilizar a do @Fir3element.
No site dele oficial tem um bug de gerar várias vezes a RK, concertei isso para vocês. Assim podendo gerar apenas uma vez!
A base utilizado nesse servidor foi o Dbo Hunter(criado pelo Renan), esse servidor tem umas gambiarras, mas creio que irá ajudar muitas pessoas que não tem muita experiência de começar do 0. Utilizem como base, sejam criativos e entre pra concorrência
DOWNLOAD:
Créditos:
Matheus Pacheco(Arkam or Arkamed)
Yan Liima(Night)
As vezes certas pessoas se aproveita de outras para poder chegar longe. ;(
Façam um bom aproveito, abraços!
-
Jhonny Bravo deu reputação a Yan Liima em [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
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)Ajuda Script de Ban@Lyu god
Segue a correção meninas, e vê se funciona:
local reasons = {[1] = 2, [2] = 5, [3] = 12, [4] = 19} function isBanned(GUID) local query = db.getResult("SELECT active FROM bans WHERE param = "..GUID) if query:getID() > -1 then repeat if query:getDataInt("active") == 1 then return true end until not query:next() query:free() -- somente se query:getID() for maior que -1 end return false end function onSay(cid, words, param) if param:lower() == "reasons" then return doPlayerSendTextMessage(cid, 27, "1 - unsuitable name, 2 - spamming, 3 - use of unnoficial software, 4 - destructive behaviour.") end local param = string.explode(param, ',') if words == "!ban" then local adminid = getPlayerGUID(cid) local player_name = param[1] local days = type(tonumber(param[2])) == 'number' and tonumber(param[2]) * 24 * 3600 or false local comment = param[3] local reason = reasons[tonumber(param[4])] or 19 if not param[1] then doPlayerSendTextMessage(cid, 27, "Command requires parameters: name, days, comment, reason.") elseif not getPlayerGUIDByName(player_name) then doPlayerSendTextMessage(cid, 27, "Invalid player.") elseif not days then doPlayerSendTextMessage(cid, 27, "Invalid number of days.") else if not comment then comment = "No comment was added" end local player_to_ban = getPlayerGUIDByName(player_name) if isBanned(player_to_ban) then return doPlayerSendTextMessage(cid, 27, "This player is already banned.") end local func = db.query or db.executeQuery if func('INSERT INTO bans (type, value, param, active, expires, added, admin_id, comment, reason, action) VALUES (3, 3, '..player_to_ban..', 1, '..os.time() + days..', '..os.time()..', '..adminid..', "'..comment..'", '..reason..', 2)') then doPlayerSendTextMessage(cid, 27, "Player "..player_name.." has been banned.") local kick = getCreatureByName(player_name) if kick then doRemoveCreature(kick) end else doPlayerSendTextMessage(cid, 27, "Error while banning.") end end elseif words == "!unban" then local player_name = param[1] local unban_player = getPlayerGUIDByName(player_name) if unban_player then local func = db.query or db.executeQuery if not isBanned(unban_player) then return doPlayerSendTextMessage(cid, 27, "Player is currently not banned.") end if func("UPDATE bans SET active = 0 WHERE param = "..unban_player) then doPlayerSendTextMessage(cid, 27, "Player "..player_name.." has been successfully unbanned.") else doPlayerSendTextMessage(cid, 27, "Error while unbanning.") end else doPlayerSendTextMessage(cid, 27, "Invalid player name specified.") end end return true end
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)player mata outro e ganha item ,dinheiro e xp.@Storm thanks! só faltou o #items que também é necessario alterar.
@EmoooooPra que serveria o anti MC? bom, tenta ai:
local config = { items = {{2160,20},{2148,2}}, -- ID DO ITEM, QUANTIDADE level = 1, -- Quanto irá adicionar de level storage = 673420 -- Storage } function onDeath(cid, corpse, deathList) if not isPlayer(cid) then return true end local killer = deathList[1] local ip = true if #config > 0 and isInArray(config,getPlayerIp(killer)) then ip = false end if ip and isPlayer(killer) and getPlayerStorageValue(killer, config.storage) <= 0 then doPlayerAddExperience(killer, (getPlayerExperience(cid) + config.level)) for i = 1, #config.items do doPlayerAddItem(killer, config.items[i][1], config.items[i][2]) setPlayerStorageValue(killer, config.storage, 1) end return true end return true end function onLogin(cid) registerCreatureEvent(cid, "LootPlayerDeath") return true end Apenas com a storage:
local config = { items = {{2160,20},{2148,2}}, -- ID DO ITEM, QUANTIDADE level = 1, -- Quanto irá adicionar de level storage = 673420 } function onDeath(cid, corpse, deathList) if not isPlayer(cid) then return true end local killer = deathList[1] if isPlayer(killer) and getPlayerStorageValue(killer, config.storage) <= 0 then doPlayerAddExperience(killer, (getPlayerExperience(cid) + config.level)) for i = 1, #config.items do doPlayerAddItem(killer, config.items[i][1], config.items[i][2]) setPlayerStorageValue(killer, config.storage, 1) end return true end return true end function onLogin(cid) registerCreatureEvent(cid, "LootPlayerDeath") return true end
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)player mata outro e ganha item ,dinheiro e xp.Creaturescripts.
function onDeath(cid, corpse, deathList) if not isPlayer(cid) then return true end local killer = deathList[1] local items = {{2160,20},{2148,2}} -- ID DO ITEM, QUANTIDADE if isPlayer(killer) then doPlayerAddExperience(killer, (getPlayerExperience(cid) + 1)) -- Irá adicionar 1 de level. for i = 1, #items do doPlayerAddItem(killer, items[i][1], items[i][2]) end return true end return true end function onLogin(cid) registerCreatureEvent(cid, "LootPlayerDeath") return true end <event type="login" name="LootPlayerLogin" event="script" value="arquivo.lua"/> <event type="death" name="LootPlayerDeath" event="script" value="arquivo.lua"/>
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)Remover todos de uma area as X horasObrigado por me trocar pelo Vod , seus porra
local sala = {{x = 93, y = 84, z = 7}, {x = 101, y = 191, z = 7}} -- Canto superior esquerdo/inferior direito da sala onde os jogadores vão estar function onTime() for _, cid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(cid), sala[1], sala[2]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(cid, 22, "Você foi teleportado para o templo delicia.") end end return true end <globalevent name="Teleport" time="01:52:10" event="script" value="arquivo.lua"/>
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)Sistema de Exausted@damiaotorresO script está certo, isso é erro ao copiar. Só apagar o "?". Se for necessario leia esse tutorial:
@Bolletox tu não fez nada além de alterar os segundos. Daria no mesmo. O problema é apenas vir um caractere inválido ao copiar o script.
-
Jhonny Bravo deu reputação a Yan Liima em (Resolvido)Sistema de Exaustedfunction onUse(cid, item, fromPosition, itemEx, toPosition) local porcentagem = math.random(1, 10) local exhausted_seconds = 1.8 -- Segundos de exhausted local exhausted_storage = 74800 if(os.time() < getPlayerStorageValue(cid, exhausted_storage)) then doSendMagicEffect(fromPosition, CONST_ME_POFF) doPlayerSendCancel(cid, "You are exhausted.") else doCreatureAddHealth(cid, getCreatureMaxHealth(cid) * (porcentagem / 10)) setPlayerStorageValue(cid, exhausted_storage, os.time() + exhausted_seconds) doSendAnimatedText(getThingPos(cid), "Pérola", 71) doSendMagicEffect(getCreaturePosition(cid), 29) doPlayerSendTextMessage(cid,19, porcentagem.."% do seu hp total foi healado!") doRemoveItem(item.uid, 1) end return true end
-
Jhonny Bravo deu reputação a Yan Liima em Script de recuperar stamina em zona protegidaUtilizei o script que eu ja tinha feito, apenas editei.
Bom não entendi aquele 0.5, mas vamos la...
em movements/scripts/ crie um arquivo.lua e cole isso dentro:
local config = { addStamina = 1, -- quantos de stamina irá adicionar delay = 1, -- tempo para adicionar a stamina em minutos msg = 0.5, -- Só pra exibição de valor mesmo... } stamina = {} local function staminadd(cid) if not isPlayer(cid) then stamina[cid] = nil return true end doPlayerSetStamina(cid, getPlayerStamina(cid) + config.addStamina) stamina[cid] = addEvent(staminadd, config.delay*60*1000, cid) end function onStepIn(cid) if isPlayer(cid) then if getTileInfo(getThingPos(cid)).protection then if getPlayerStorageValue(cid, sta) < os.time() then doPlayerSendTextMessage(cid, 20, "{Stamina Recovery} Sua stamina começou a se recuperar, o fator de recuperação é de "..config.msg.." em relação as condições normais.") setPlayerStorageValue(cid, sta, os.time() + 300) end stamina[cid] = addEvent(staminadd, config.delay*60*1000, cid) end end return true end function onStepOut(cid) if isPlayer(cid) then stopEvent(stamina[cid]) stamina[cid] = nil end return true end No seu movements.xml coloque isso:
<movevent type="StepIn" itemid="7351" event="script" value="arquivo.lua"/> <movevent type="StepOut" itemid="7351" event="script" value="arquivo.lua"/> Troque: 7351 pelo ID do seu tile(piso). Caso em outras zonas protegida o piso seja diferente só por assim, Ex: 7351-7352...
O delay da mensagem está setado para 5 minutos.