Histórico de Curtidas
-
poko360 recebeu reputação de Fiapets em [IMPORTANTE] nuker derrubando os servers por ai, use esse codigo para evitar ser nukadoNao sei se estou postando na area correta mas.... vamo la
Um player esta visitando quase todos os server e derrubando por um sistema de party (ele se dá auto-party) com o bot fazendo enviar pacotes inválidos que acabam crashando a sua distro:
depois que fiz isso, meu server voltou ao normal (ja esta 7 dias online, desde seu ultimo nuke)
procurei e achei em outro forum, e vi um cidadão de deus que encontrou a solução. (Creditos: Gesior.pl)
ele diz que o codigo é pra TFS 0.4 r3777
vamos ao que interessa:
Em game.cpp (nas sources) , procure por:
adicione isso daqui A CIMA dessa linha
-
poko360 recebeu reputação de Aragllov em nao consigo soltar magic wall black skull ajudafuncionou perfeitamente, mt obrigado
-
poko360 deu reputação a Aragllov em nao consigo soltar magic wall black skull ajudaMagic wall não é runa de suporte, vc pode colocar como suporte e ver se funciona
-
poko360 deu reputação a J The Creator em Somar storage a cada hit que eu atacarNa function onUseWeapon, tente desta forma:
function onUseWeapon(cid, var) local ret = doCombat(cid, combat, var) if(ret == LUA_ERROR) then return LUA_ERROR end -- Aumenta a storage em +1 setPlayerStorageValue(cid, 51400, getPlayerStorageValue(cid, 51400) + 1) return true end
-
poko360 deu reputação a marcoshps11 em [otcv8] Como utilizar - Ip fixo, spr, encrypt, auto update* Áudio de saudação *
Neste tutorial, irei ensinar alguns passos inicias para utilizar o OTClientV8
1º Passo: Como fixar ip e colocar a spr no local correto
- Faço o download no link: https://github.com/OTCv8/otclientv8
- Extraia o arquivo
- Dentro da pasta principal, vá até o arquivo init.lua
Neste trecho, precisará remover os comentários --[[ e ]]:
Servers = { --[[ OTClientV8 = "http://otclient.ovh/api/login.php", OTClientV8c = "otclient.ovh:7171", OTClientV8Test = "http://otclient.ovh/api/login2.php", LocalTestServ = "127.0.0.1:7171:1098:110:30:93" ]] }
Ficando assim:
Servers = { Meuserver = "127.0.0.1:7171:1098" } ficando na seguinte configuração NOME = "IP:PORTA:VERSÃO"
Para fixar e não aparecer a lista de servers, basta alterar:
ALLOW_CUSTOM_SERVERS = true -- if true it shows option ANOTHER on server list
Para:
ALLOW_CUSTOM_SERVERS = false -- if true it shows option ANOTHER on server list
Caso queira trocar o nome do aplicativo é só mudar
g_app.setName("OTCv8") trocando o "OTCv8" para o nome desejado, lembrando que isto irá alterar apenas o nome da janela do aplicativo
Incluir a SPR/Dat:
Para incluir, basta ir na pasta data, criar uma nova pasta e renomear com o nome "things" e depois criar uma outra pasta dentro dela com o nome da versão que desejar utilizar, exemplos:
* 800
* 860
* 910
* 1100
dentro desta pasta, incluir as respectivas spr/dat da versão correspondente
Um vídeo objetivo do conteúdo citado acima:
2º Passo: Remover campo "Token" da tela inicial
Apesar de ser algo simples, vejo muitos perguntarem como remover este campo, vamos lá:
- Vá até a pasta modules -> client_entergame
- Abra o arquivo entergame.lua
- Na linha 380 remova ou comente o trecho:
enterGame:getChildById('accountTokenTextEdit'):clearText()
- Na linha 412 remova ou comente o trecho:
G.authenticatorToken = enterGame:getChildById('accountTokenTextEdit'):getText()
- salve o arquivo
- na mesma pasta, abra o arquivo entergame.otui
- da linha 32 a 44 remova ou comente o seguinte trecho:
MenuLabel !text: tr('Token') anchors.left: prev.left anchors.top: prev.bottom text-auto-resize: true margin-top: 8 TextEdit id: accountTokenTextEdit anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom margin-top: 2
Um vídeo objetivo do conteúdo citado acima:
3º Passo: como encriptar os arquivos
- Recomendo inicialmente criar uma cópia da pasta que ira encriptar, pois não é reversivo
- Copie o endereço da pasta onde estão os arquivos
- Abra o cmd e navegue até esta pasta utilizando o comando cd (link do endereço da pasta)
- utilize o comando otclient_dx.exe --encrypt
- Aguarde o sistema sinalizar que os arquivos foram encriptados
PS: a pasta do modulo bot ( modules -> game_bot ) não pode ser encriptado, remova ela antes deste processo.
Um vídeo objetivo do conteúdo citado acima:
4º Passo: Utilizando o auto update
IMPORTANTE:
Este processo precisa ser feito exatamente como demonstrado, qualquer link errado o sistema não irá funcionar.
- Dentro da pasta API, abra o arquivo updater_advanced.php
em $files_dir = "/var/www/otclient/files"; é a pasta onde conterá os arquivos do otclient para download, lembrando que o caminho precisa estar especificada desde a pasta inicial
em $files_url = "http://otclient.ovh/files"; é o link que você pode utilizar o navegador para acessar a pasta "files" a mesma pasta do processo anterior.
em $checksum_update_interval = 60; é o tempo em segundos, que o update levará para checkar se há alguma atualização ( não é necesário alterar )
- Na sua vps, dentro da pasta do SITE, cria uma pasta chamada API e outra pasta dentro dela chamada FILES
- Envie o arquivo updater_advanced.php para a pasta API
- De permissão 777 para pasta e subpasta API
* voltando aos arquivos do otclient *
- Abra o arquivo init.lua
aconselho alterar o "APP_NAME = "otclientv8", pois é o nome da pasta que ficará salva nos arquivos temporários, isso evitará conflitos com versões já existe no pc
altere o campo updater, colocando o endereço apontado para o arquivo updater_advanced.php enviado para o seu site nos passos anteriores.
- Após as edições anteriores, salve o arquivo
- Compacte os arquivos data, layout, modules e init.lua, renomeando para data.zip ( obrigatoriamente precisa ser zip )
- Exclua os arquivos zipados e os demais desnecessários para os jogadores.
Atenção: o auto update só funcionará se os arquivos estiverem zipado conforme descrito.
- Envie todos os arquivos para a pasta files em sua vps ( recomendo zipar para enviar, poupara processamento e tempo de envio )
- Após enviar, extraia os arquivos NA VPS, os arquivos no pc devem continuar zipado
- Atenção nesta parte, as pastas e arquivo data / layout / modules / init.lua necessáriamente precisam estar na mesma pasta do executáveis, conforme time 4:20 no vídeo que deixarei disponível no final.
lembrando: o update só aceitará arquivos editados após o tempo estipulado em checksum_update_interval , se fizer edições antes deste tempo, o sistema não irá considerar
Um vídeo objetivo do conteúdo citado acima:
-
poko360 recebeu reputação de koyotestark em (Resolvido)Players comando !save@ViitinG
qual seria o !save para tfs 0.4?
-
poko360 recebeu reputação de FeeTads em (Resolvido)exp potion de acordo com posição do rankfuncionou perfeitamente, mt obrigado man, Rep++
-
poko360 deu reputação a FeeTads em (Resolvido)exp potion de acordo com posição do ranktira o break desse segundo kkkkkk coloca assim:
if NaoEstaCinco == 0 then if item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, expOutros) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) return true end end
-
poko360 deu reputação a FeeTads em (Resolvido)exp potion de acordo com posição do ranktenta trocar a função do top pra essa:
function getNameTopServer() -- eu alteraria pra getNameTopCinco local i = 1 local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {} if (query:getID() ~= -1) then while(true) do name[i] = query:getDataString("name") i = i + 1 if not(query:next()) then break end end end return name end
e troca a outra por essa, vou colocar pra printar, me manda o que aparece no console quando tenta usar
local name = getNameTopServer() local exp = {5, 4, 3, 2, 1} local NaoEstaCinco = 0 local expOutros = 1 for j=1, 5 do if name[j] == getPlayerName(cid) and item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, exp[j]) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) NaoEstaCinco = 1 break return true end end if NaoEstaCinco == 0 then if item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, expOutros) doSendMagicEffect(frompos,efeito2) setPlayerStorageValue(cid, limitedeuso, os.time() + 420) doPlayerSendTextMessage(cid,22,texto) end end
-
poko360 deu reputação a Kramer em Ping / Estabilidade / VPSO Ping do Brasil é na faixa de 20 a 50.
Em dallas é 150 a 250 é uma diferença gritante a latência que está alta mesmo.
-
poko360 recebeu reputação de So volto tarde em Mostrar os segundos que faltam pro boss nascerfuncionou!, obg
-
poko360 deu reputação a Sun em Mostrar os segundos que faltam pro boss nascerlocal colorMsg = "orange" local tableBoss = { ["Amazon"] = {seconds = 10, newBoss = "Demon"} } local function timer(position, duration, color) for i = 0, (duration - 1) do addEvent(function() doSendAnimatedText(position, tostring(duration - i), color) end, i * 1000) end end function onKill(cid, target, damage, flags) if isPlayer(target) then return true end local boss = tableBoss[getCreatureName(target)] if not boss then return true end local position = getThingPos(target) doPlayerSendTextMessage(cid, MESSAGE_TYPES[colorMsg], "The boss will be born in " .. boss.seconds .. " seconds.") timer(position, boss.seconds, COLOR_RED) addEvent(doCreateMonster, boss.seconds * 1000, boss.newBoss, position) return true end
creaturescript.xml
<event type="kill" name="event nome" event="script" value="script name.lua"/> login.lua
registerCreatureEvent(cid, "nome do evento")
@poko360 pelo que entendi foi isso, não entendi a necessidade de colocar verificação para não criar dois boss se você matou o anterior.
-
poko360 deu reputação a So volto tarde em Mostrar os segundos que faltam pro boss nascervocê pode tirar o respawn e colocar um globalevent "onstartup" (se nao me falha a memoria) para que, quando o servidor iniciar, o monstro nascer em determinada posição
-
poko360 deu reputação a Cerberus em (Resolvido)Summon que cura o Playervai ser assim configurando monstro primeiro
Tag do creatureevent
<event type="cast" name="cura" event="script" value="Cura.lua"/> dentro do creatureevent o script com nome de Cura.lua
agora vai no spelll na TAG.
dentro da pasta Summon/Gnomo cria o arquivo chamado Gnomo.lua e poe isso dentro
pode marcar esse como melhor resposta ao terminar blz.... ai vai ajuda outros com a mesma duvida.
-
poko360 deu reputação a LeoTK em Como faço pra meu summon dar exeta res?ja fez o test com a skill original do exeta res porém colocar pro monstro usar?
OBS: pra registrar no monstro esse tipo de ataque não é pelo nome exeta res e sim pelo nome Challenge ou para o nome que for usar
Script
XML
<instant name="Challenge" words="exeta res" lvl="20" mana="30" prem="1" aggressive="0" exhaustion="1000" needlearn="0" event="script" value="support/challenge.lua"> <vocation id="0"/> </instant>
-
poko360 deu reputação a Sun em pvp enforced por creaturescriptSe quer deixar fixo deixe
mLevel = 500
Não se esqueça de deixar rep+ e colocar a resposta como solucao, para ajudar mais pessoas!
-
poko360 deu reputação a Sun em pvp enforced por creaturescriptse você retirar a storage, todo player que morrer independente irá ganhar xp!
só vc remover está linha
if getPlayerStorageValue(target, 2310) == -1 then return true end
-
poko360 deu reputação a Sun em pvp enforced por creaturescriptfunction onDeath(cid, corpse, deathList) local position = getPlayerPosition(deathList[1]) local target = getCreatureTarget(deathList[1]) local mLevel = getPlayerLevel(cid) <= getPlayerLevel(target) and 500 or 5000 if getPlayerStorageValue(target, 2310) == -1 then return true end doSendAnimatedText(position, "+" .. tostring((getPlayerExperience(target) / mLevel) .. "exp", COLOR_RED) doCreatureAddHealth(deathList[1], 1000) doPlayerAddExperience(deathList[1], (getPlayerExperience(target) / mLevel)) return true end perdão a demora, está ai o script!
não se esqueça de registrar no login.lua e colocar a tag no xml!
<event type="death" name="PvpEnforced" event="script" value="death.lua"/> e em login.lua
registerCreatureEvent(cid, "PvpEnforced")
lembrando!, não altere nada no script, você pode alterar apenas a storage
tá ai o funcionamento!.
@poko360
lembrando se te ajudei rep+ e coloque como {Solução}
-
poko360 deu reputação a 9k22 em Minha database nao aceita numero decimalSeu value esta como INT. Troca ele para text e muda o collation como na imagem que mostrei.
Creio que não vai bugar a não ser que você tenha algum script que puxe o valor da tabela retornando getDataInt
-
poko360 recebeu reputação de Balkalima em Sword batendo por levelpo meu patrão, os cara so manda script dificil
toma ai meu xuxu, facinho facinho
*em distance é o skill que voce quer botar (distance significa as skills axe,club,sword e bow) (NAO USE PRA STAFF)
*0.0023*2 <<< esse numero é um calculo que fiz, calculando skill vezes level vezes dano ( que é 0.0023*2) , vc pode mudar a seu gosto
qualquer duvida so perguntar
-
poko360 recebeu reputação de XboxStreet em [PEDIDO]Spell Drena Vida de Playerradicione a tag
no script
-
poko360 recebeu reputação de DouGlaS Mapper em (Resolvido)Ajuste em Script de DNTfunction timeString(timeDiff) local dateFormat = { {"day", timeDiff / 60 / 60 / 24}, {"hour", timeDiff / 60 / 60 % 24}, {"minute", timeDiff / 60 % 60}, {"second", timeDiff % 60} } local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find("second") then local a, b = ret:find(" and ") ret = ret:sub(b+1) end return ret end function onSay(cid, words, param) if(words == "!donater") then if doPlayerRemoveItem(cid, 9663, 1) == TRUE then local days = 30 local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(cid, 457382) local timenow = os.time() if getPlayerStorageValue(cid, 457382) - os.time() <= 0 then time = timenow + daysvalue else time = storageplayer + daysvalue end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de DNT no seu character.") setPlayerStorageValue(cid, 457382, time) local quantity = math.floor((getPlayerStorageValue(cid, 457382) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce tem ".. quantity .." dias de DNT restantes.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce precisa do item Donater Acess para usar este comando.") end elseif(words == "!donaterdays") then local time = timeString(-(os.time() - getPlayerStorageValue(cid, 457382))) local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(cid, 457382) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce tem ".. time .." de DNT no seu character.") elseif(words == "/adddonater") then local t = string.explode(param, ",") if not t[2] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end local player = getPlayerByName(t[1]) local name = getCreatureName(player) local days = t[2] local pid = getPlayerByNameWildcard(t[1]) if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn\'t exist or is offline.") return TRUE end local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(player, 457382) local timenow = os.time() local time = storageplayer <= 0 and (timenow + daysvalue) or (storageplayer + daysvalue) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de DNT no seu character.") setPlayerStorageValue(player, 457382, time) local quantity = math.floor((getPlayerStorageValue(player, 457382) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Voce tem "..quantity.." dias de DNT restantes.") end return true end testa ai, e me fala
-
poko360 recebeu reputação de Pifafa em (Resolvido)Client 8.60só abrir o ObjectBuilder e jogar no seu cliente proprio
female.obdmale.obd
-
poko360 deu reputação a ikaroangelo21 em [Action] script de exp potionUsa esse MOD, melhor.
<?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Exp Potion" version="1.0" author="Vodkart" contact="DISCORD: vodkart#6090" enabled="yes"> <config name="exppotion"><![CDATA[ exp_info = {rate = 0.2, storage = {354870,354871,354872}, minutes = 30} -- rate 0.2 = 20% function convertTime(a) if(type(tonumber(a)) == "number" and a > 0) then if (a <= 3599) then local minute = math.floor(a/60) local second = a - (60 * minute) if(second == 0) then return ((minute)..((minute > 1) and " minutos" or " minuto")) else return ((minute ~= 0) and ((minute>1) and minute.." minutos e " or minute.." minuto e ").. ((second>1) and second.." segundos" or second.." segundo") or ((second>1) and second.." segundos" or second.. " segundo")) end else local hour = math.floor(a/3600) local minute = math.floor((a - (hour * 3600))/60) local second = (a - (3600 * hour) - (minute * 60)) if (minute == 0 and second > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(second..((second > 1) and " segundos" or " segundo")) elseif (second == 0 and minute > 0) then return (hour..((hour > 1) and " horas e " or " hora e "))..(minute..((minute > 1) and " minutos" or " minuto")) elseif (second == 0 and minute == 0) then return (hour..((hour > 1) and " horas" or " hora")) end return (hour..((hour > 1) and " horas, " or " hora, "))..(minute..((minute > 1) and " minutos e " or " minuto e "))..(second..((second > 1) and " segundos" or " segundo")) end end end ]]></config> <event type="login" name="ExpPotionLogin" event="script"><![CDATA[ domodlib('exppotion') function onLogin(cid) if getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() > 0 then registerCreatureEvent(cid, "ExpPotionThink") local rates = getPlayerRates(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você ainda tem "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time()).." de Exp Potion.") doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+exp_info.rate) setPlayerStorageValue(cid, exp_info.storage[3], 1) -- registro end return true end]]></event> <event type="think" name="ExpPotionThink" event="script"><![CDATA[ domodlib('exppotion') function onThink(cid, interval) if getPlayerStorageValue(cid, exp_info.storage[3]) > 0 and getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() <= 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sua Exp Potion acabou!") -- doPlayerSetExperienceRate(cid, getPlayerStorageValue(cid, exp_info.storage[2])) local rates = getPlayerRates(cid) doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]-exp_info.rate) setPlayerStorageValue(cid, exp_info.storage[3], 0) -- registro end return true end]]></event> <talkaction words="!exppotion;/exppotion;!exp;/exp" event="buffer"><![CDATA[ domodlib('exppotion') return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() <= 0 and "Você não possui Exp Potion ativa no momento." or "Você tem "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time()).." de exp potion.")]]></talkaction> <action itemid="12698" event="script"><![CDATA[ domodlib('exppotion') function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() > 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você não pode usar outra Exp Potion pois ainda possui uma ativa. Ainda restam: "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time())..".") return true end local rates = getPlayerRates(cid) -- setPlayerStorageValue(cid, exp_info.storage[2], rates[SKILL__LEVEL]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você ativou Exp potion por "..exp_info.minutes.." minutos! Durante este tempo, você receberá +20% exp de monstros. Para saber o tempo, digite: /exppotion") setPlayerStorageValue(cid, exp_info.storage[1], os.time()+exp_info.minutes*60) setPlayerStorageValue(cid, exp_info.storage[3], 1) -- registro doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+exp_info.rate) registerCreatureEvent(cid, "ExpPotionThink") doRemoveItem(item.uid,1) return true end]]></action> </mod>
-
poko360 deu reputação a Vodkart em Tempo em Scriptfunction timeString(timeDiff) local dateFormat = { {"day", timeDiff / 60 / 60 / 24}, {"hour", timeDiff / 60 / 60 % 24}, {"minute", timeDiff / 60 % 60}, {"second", timeDiff % 60} } local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find("second") then local a, b = ret:find(" and ") ret = ret:sub(b+1) end return ret end function onSay(cid, words, param) if getPlayerStorageValue(cid,49015) - os.time() <= 0 then doPlayerSendTextMessage(cid, 23,"você não tem Exp Potion ativa.") return true end local time = timeString((os.time() - getPlayerStorageValue(cid, 49015))) return doPlayerSendTextMessage(cid, 23,"você ainda tem "..time.." de Exp Potion.") end