Tudo que FeeTads postou
-
max absorb all
se não me engano pra isso não, mas pra isso basta vc add uma correção if(player->getHealth() > (player->getMaxHealth()*0.02)) ... executa life leech/absorb assim o script desses atributos só executa se o player tiver +2% de life
-
max absorb all
salve rapaziada, vi que tem bastante procura por esse sistema de "proteção" contra player que por algum motivo ficam com proteção 100% de algum elemento ou dano, por exemplo MIGHT RING (-20% death) + SSA (-80% Death), totalizando 100% de proteção contra o elemento death, ou seja, o player fica imortal, pra previnir isso, vai aqui 2 commits caso vc saiba mexer com github: commit 1: max absorb all commit 2: fix, max protect all caso saiba mexer com github, estão os 2 commits, caso não saiba siga o passo a passo abaixo: vá até configmanager.cpp procure por: m_confString[MAP_AUTHOR] = getGlobalString("mapAuthor", "Unknown"); ACIMA adicione: m_confBool[USE_MAX_ABSORBALL] = getGlobalBool("useMaxAbsorbAll", false); m_confDouble[MAX_ABSORB_PERCENT] = getGlobalDouble("maxAbsorbPercent", 80.0f); agora vá configmanager.h procure por: RATE_MONSTER_DEFENSE, ACIMA adicione: MAX_ABSORB_PERCENT, Agora procure por: BROADCAST_BANISHMENTS, ABAIXO adicione: USE_MAX_ABSORBALL, agora vá em Player.cpp procure por: BlockType_t Player::blockHit(Creature* attacker, CombatType_t combatType, int32_t& damage, bool checkDefense/* = false*/, bool checkArmor/* = false*/, bool reflect/* = true*/, bool field/* = false*/, bool element/* = false*/) { Essa função faz a abosrção do dano DENTRO dessa função, procure por: damage -= blocked; if(damage <= 0) { damage = 0; blockType = BLOCK_DEFENSE; } TROQUE ISSO por isso: if(g_config.getBool(ConfigManager::USE_MAX_ABSORBALL)){ double maxAbsorb = (g_config.getDouble(ConfigManager::MAX_ABSORB_PERCENT) / 100.0); damage -= (blocked > (damage*maxAbsorb) ? (damage*maxAbsorb) : blocked); }else{ damage -= blocked; } if(damage <= 0) { damage = 0; blockType = BLOCK_DEFENSE; } Feito isso, RECOMPILE a source. e adicione no seu config.lua: useMaxAbsorbAll = true maxAbsorbPercent = 80.0 e pronto, agora seu ot não vai mais ter player imortal por causa de protect all. explicando: useMaxAbsorbAll = false --// se for false = sistema desativado, fica imortal > true = sistema ativado, não fica imortal maxAbsorbPercent = 80.0 --// 80 = 80%, se você quer que o maximo de protect all seja 50%, coloque 50 Créditos a mim, fiz esse sistema e postei no github.
- Erro MySql
- [OTX 2.x / 8.60] - OTSERVER
-
[OTX 2.x / 8.60] - OTSERVER
Opa rapaziadaa beleza? Hoje estou disponibilizando uma source OTX 2, baseada na otx 2.x do mattyx - aqui, essa source que estou disponibilizando é um pouco diferente, com algumas features a mais do que a OTX padrão, como muitos sabem, a OTX serve apenas para abrir o seu OT, essa estou disponibilizando com algumas features, onde disponibilizei até scripts do TK, ou usando scripts do TK, tais como o autoloot na source do Naze, o projeto é pra Otserv 8.60. Está sendo desenvolvido no github (projeto github) onde posto atualizações diárias do datapack e source. Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou no próprio github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações. Edit: MatheusJP2 Adicionado como contribuidor, ajudando a estender pra source custom LINK: https://github.com/FeTads/otxserver/tree/custom Essa Tree será pra implementar sistemas pra custom tibia / derivados, como sistema de aura, shaders, etc.. voltado para a modificação para OTC. Edit systems Added: Max Absorb All: (protect SSA + Might Ring, você coloca o máximo de protect all que pode ser atingido, caso o player passe disso é ignorado, o maximo de protect vai ser o que está no config.lua) Commit max absorb all edit: fixed all system Delete Players With Monster Name: Deleta o player com nome de monstro, ou com nome proibido (alteravel pelo config.lua), caso vc deixe "deletePlayersWithMonsterName = false", irá apenas renomear o player aleatóriamente sem deleta-lo, ele não conseguirá logar com nome de monstro ou nome proibido. ps: Esse script pega o monster.xml todo, então mesmo que você adicione novos monstros, não precisar mexer em nada, ele ja vai pegar o novo monstro, mesmo sem precisar derrubar o Ot etc.. deletePlayersWithMonsterName = true forbiddenNames = "gm;adm;cm;support;god;tutor;god ; god; adm;adm ; gm;gm ; cm;cm ;" --// other names here edit: 30/10 modifyDamageInK = true (essa função ativada irá modificar a saida do dano pra K, por exemplo 219000 > 219.0K / 2.000.000 > 2.00 KK). modifyExperienceInK = true (esas função também mudará a saida normal pra K, isso é bom em high EXP pra arrumar aquela exp "-2147483647", de muita EXP, irá mudar pra "+2.14 Bi Exp"). 17/01 Last Changes: displayBroadcastLog = true - Desabilita os logs de broadcast do server na distro, aqueles logs de eventos etc... deixa a distro mais limpa. (by kizuno18) enableCriticalAndDodgeSource = true - (Sistema de Dodge E Critical de StatsChange pra source, deixa mais clean, mais leve, e o sistema pega em monstros, sem a necessidade de registrar o evento, previne bugs.) pushInProtectZone = false - Sistema para desabilitar o push de player em PZ, impossibilitando que players empurrem outros players dentro do PZ. SpyCast: Sistema de SPY, pra GM+ ver a tela dos jogadores, como se eles estivessem de cast aberto, GM spy não mostra aviso nenhum que vc está monitorando o player, (sistema de telescope, se o player clicar no item com actionId configurado, mostra os players com cast on), Para GM+ mostra todos os players logados, independente se estão de cast on, para players mostra somente players com cast on. SendProgressbar: Sistema para feature do OTC, necessário saber usar e compilar o otcv8 com a modificação SetCreatureSpeed: Sistema usado pra setar a quantidade exata de speed de alguma criatura/player, usado no sistema de roleta (ainda não disponivel do datapack). (Projeto github) Informações: º 8.60 º Baseado na OTX 2.x mattyx º Lib global (sistema pesadex) º Informações / changelog Dúvidas, erros, dicas e contribuições: Caso tenha dúvidas, ou queira resolver algum bug/erro, dar dicas para o projeto, ou também ajudar em sua construção, crie um issue / pull requests pelo github ou use esse tópico. Créditos: FeTads (FeeTads#0246) mattyx (source base e datapack) Reason182 (fixes e mais) Luxx (meu sócio de servidor, ajudou com teste) Daniel (spriter e dev junior) ADM Mario (cara brabo dos mapas e testes, achador de bug profissional) Luan Luciano (cara brabo que no inicio me ajudou d++) MatheusJP2 (Editor e contribuidor com implementações pra Tree custom source) Download: O download pode ser feito diretamente no github, ou clonando o projeto via git. How Compile: Windows Tutorial - Linux(Ubuntu) Tutorial Sistemas adicionado até o momento, todos 100% e sem bug.
-
Vocation Sai assim que desloga
Tem algum outro script seu que mexe com vocação? digite no terminal da sua maquina (se for linux): grep -ir "setplayervocation" CAMINHO/PRAPASTA/data/ exemplo: grep -ir "setplayervocation" /home/otserv/data/ se for windows faça a busca pelo vscode ou notepad++ em todos os arquivos da pasta data se houver algo, manda print de quais existem
-
para usa essa chest precisa ser level 300 alguem sabe bota o level 300 pra da use na chest
seria uma boa otimizar o script mano, desse modo ele ta bem "mal feito" local config = { items = { {2160, 300}, {2383, 1}, {2390, 1}, {10518, 1}, {2471, 1}, {2646, 1}, {2469, 1}, {2523, 1}, {2494, 1}, {8926, 1}, {7431, 1}, {7368, 1}, {8910, 1}, {2789, 100}, {1664, 1} } } function onUse(cid, item, frompos, item2, topos) if item.uid == 1664 then queststatus = getPlayerStorageValue(cid,1664) if queststatus == -1 then doPlayerSendTextMessage(cid,25,"Parabens Ganho 3kk.") for i=1, #config.items do doPlayerAddItem(cid, config.items[i][1], config.items[i][2]) end else doPlayerSendTextMessage(cid,22,"Voce ja pegou o bonus") end end return true end fica mais organizado e mais legivel
-
Comandos Lua 10.98
esses scripts são de TFS, creio que pode ser revscript dependendo da versão da engine, essas functions existem na lib ou na source > luascript.cpp Player:addItem(item,quantidade) > existe na source em luascript.cpp, lá estão todas as funções que podem ser usadas dentro do servidor via luascript
-
[SQLite] -=[TFS]=- 0.4 8.60 Sistema Cast System.
Não existe a função "getPlayerSpectators" na sua source, tenta rever o github da TFS ou OTX, pela versão da sua engine, e pegue esse script do luascripts.cpp
-
(Resolvido)Macro
UI.Separator() local itemList = { 3364, 3366, 3414, 3420, 3392, 3386, 3079, 3360, 3436} -- item id here --Make By Feetads macro(500, "Sell with spellwand", function() for _, container in pairs(g_game.getContainers()) do for _, item in ipairs(container:getItems()) do if table.find(itemList, item:getId()) then useWith(789, item) -- spellwand id end end end end)
-
[SQL] -=[TFS]=- 0.4 8.69 ALGUEM PODE ME AJUDA NESSE SCRIPT PARECE QUE NÃO ESTA FUNCIONANDO ELE NÃO ATACA COM BOOSTER ATTACK STONE
Você registrou esse script no creatureScript.xml? tem que registrar o evento dele tbm no login.lua registerCreatureEvent("NOME_DO_EVENTO")
- Npc de Task Progressivo
-
Problema na barra de Life e Mana
Este tópico foi movido para a seção de Suporte Otserv.
-
Problema na barra de Life e Mana
https://tibiaking.com/forums/topic/55507-resolvidopedido-hp-mp-por-porcentagem/ só ver como ta o script na source, e fazer ao contraio, modificando o script de que faz a contagem pelo script padrão.
-
[SOURCE DO PDA]
3 são DLL e 3 não sei, pode ser apenas código biblioteca, não sei, mas eh bom vc dar uma averiguada antes de executar
-
[SOURCE DO PDA]
posta o scan do arquivo tbm pra ser aprovado.
-
(Resolvido)Corrigir Spell tfs 1.4.2
tenta colocar assim então function spellCallback(cid, position, count) if Creature(cid) then if count > 0 or math.random(0, 1) == 1 then position:sendMagicEffect(CONST_ME_HITBYFIRE) doAreaCombat(cid, COMBAT_FIREDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT) end if count < 5 then count = count + 1 addEvent(spellCallback, math.random(1000, 4000), cid, cid:getPosition(), count) end end end function onTargetTile(creature, position) spellCallback(creature:getId(), position, 0) end local combat = Combat() combat:setArea(createCombatArea(AREA_CIRCLE5X5)) combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(creature, variant, isHotkey) return combat:execute(creature, variant) end
-
(Resolvido)Corrigir Spell tfs 1.4.2
vc chama um evento chamando a "position" que ja foi passada la atras, ou seja, ela é fixa. troque pra: addEvent(spellCallback, math.random(1000, 4000), cid, cid:getPosition(), count) lembrando que "cid" era usado na OTX, recomendo vc trocar cid por player. creio que você não precisa da função onTargetTile mas caso precisa troque position por creature:getPosition()
-
(Resolvido)Eu quando ligo meu ot da esse erro na parte monster
ta ai o erro provavelmente vc comentou tipo: -- demon quando deveria ser <!-- demon --> quando você comenta no arquivo XML o comentário deve ser <!-- comentário --> o erro está na linha 87, veja o que tem na 87 e retire/arrume
-
weapons que regenera hp/mp
no caso você busca pelo sistema de life e mana leech Life e Mana Leech-- (Regenera, de acordo com a % atribuida, a partir de dano causado)
-
weapons que regenera hp/mp
da uma olhada aqui
-
Correções gesior/myacc + configurações + proteções (ddos?)
Salve rapaziada do TK e da comunidade de tibia Otserv. Recentemente alguns invejosos estão atacando servidores (DDoS), bugando o guilds de varios sites (tirando o lider e membros), assim buga a guild e muita coisa no OT. Eles vão até o teu servidor e se passam por "adm do deletebra", já ouvi a uns tempos algumas pessoas falando disso, mas como eu tinha contato isso caiu por terra facilmente, um deles foi o ADM brendo, dono do antigo strongerFusion, onde ele me contou toda essa história, essa foi a primeira vez que me foi relatado sobre isso, hoje vejo que está parecendo ser mais frequente. Caso qualquer pessoa entre no seu OT se passando pelo ADM do deletebra, favor entrar em contato comigo via discord: FeeTads#0246 Te ajudarei a resolver problemas que eles exploram sem cobrar nada por isso, para provar que não necessito atacar outros OT's para ter algum publico. Já tenho em mente quem pode ser essas pessoas, caso alguém tenha numero de telefone, nome real, ou alguma informação a mais dessas pessoas atacando e se passando por mim ou meu sócio, favor enviar no discord, irei atrás de resolver isso. Vou deixar aqui alguns tutoriais de coisas básicas para você conseguir proteger o seu site desses SQL injections, e mais algumas coisinhas, caso futuramente eu resolva outros bugs explorados, vou postar aqui as correções. Configurando CloudFlare (SSL) E subDominio (sv.seuIP) Após isso para que a pessoa não entre no site pelo (sv.seudominio.com.br) abra o index.php da pasta raiz (está dentro da pasta html) if($_SERVER['HTTP_HOST'] == 'sv.seuDominio.com.br') { header("Location: https://seuDominio.com.br"); } if($_SERVER['HTTP_HOST'] == 'IP NUMÉRICO') { header("Location: https://seuDominio.com.br"); } Isso fará que quando a pessoa tente entrar no seu site usando meios não seguros (DNS only) ele redirecione pro seguro > proxiado pela cloudflare _________________________________________________________________________________________________________________________________________ CORREÇÃO GUILDS.PHP / INJECTION SQL TIRANDO LIDER DA GUILD PROTEÇÕES PARA DIMINUIR EFEITOS DE DDoS Espero que isso ajude a muitos, a se prevenir de pessoas que tentam atacar OT's se passando por outros, ou até que vão la pedir pontos para jogar se não eles irão atacar, se prevenir de pessoas mal intencionadas. PS: Caso você tenha no seu site a pagine "house" e "tickets" recomendo retirar do seu site, pois há maneira de injetar SQL por esses arquivos. Vou postar em breve o tickets arrumado. Boa sorte rapaziada, se cuidem, e caso alguém faça isso, por favor entre em contato comigo.
- Mapas Hunts & Quests 10.98 RME (Glacial Projetos)
-
Teleport de boss com tempo.
adiciona um action ID e faz um movement com esse actions, +/- assim local config = { -- [action id] = {storage = STORAGE DA ACTION/BOSS, timer = tempo em horas, teleport_to = {posição que irá teleportar o player}} [41411] = {storage = 3131312, timer = 2 --[[em horas]], teleport_to = {x=1,y=1,z=7}}, } -- caso queira, pode tirar essa função daqui e colocar na pasta lib > data/lib, -- se ATENTE em tirar o "local" na frente da function caso mova pra lib local function getTimeString(self) local format = { {'dia', self / 60 / 60 / 24}, {'hora', self / 60 / 60 % 24}, {'minuto', self / 60 % 60}, {'segundo', self % 60} } local out = {} for k, t in ipairs(format) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find('segundo') then local a, b = ret:find(' e ') ret = ret:sub(b+1) end return ret end function onStepIn(cid, item, pos, fromPos) local posAid = config[item.actionid] if posAid then if getPlayerStorageValue(cid, posAid.storage) - os.time() < 0 then setPlayerStorageValue(cid, posAid.storage, os.time()+posAid.timer*60*60) doTeleportThing(cid, posAid.teleport_to, true) else doPlayerSendCancel(cid, "Sorry, you need wait "..getTimeString(getPlayerStorageValue(cid, posAid.storage) - os.time()).." to enter again!") doTeleportThing(cid, fromPos, true) end end return true end com esse script, quando o player subir em cima do tile com a action Id 41411 (exemplo, vc pode colocar qualquer uma desde que não repita de outras scripts). subiu em cima do tile com essa action > sera teleportado pro local "teleport_to" caso ele tenha a storage menos que o os.time() (tempo da maquina, não mexer ali), ele irá setar 2h de cooldown para entrar de novo se não, teleporta ele pra tras. registrar no XML do movements também basicamente é apenas isso
- [TFS 0.4] Treasure Chest Lottery + PHP Page