
Solutions
-
WooX's post in [Login ERROR / Cast System - TFS 0.4] O que está causando isso? was marked as the answerDepois do erro, quando você abrir o Tibia novamente vai ter as informações. Ou, dependendo da versão da distro, você pode pegar nos logs do datapack. Se não me engano o arquivo de log chama client_assertions.
-
WooX's post in (Resolvido)Problema na instalação do phpmyadmin no debian 8.0 was marked as the answerIsso ta com cara de chmod 777 na pasta de configurações em, roda isso e manda o resultado aqui.
ls -lh /etc/phpmyadmin
-
WooX's post in (Resolvido)script pra explorar 100% do mapa was marked as the answerBom, outros alem de você vieram me pedir o link também, hoje eu vi que recentemente um membro da equipe postou um link para o dito fórum, então acho que não teria problema eu postar também.
https://otland.net/threads/tfs-1-2-minimap-generator-map-scanner.262275/
-
WooX's post in (Resolvido)[pedido] exhaust na alavanca was marked as the answerUsa global storage.
-
WooX's post in (Resolvido)(pedido) duração do HASTE (utani hur e gran hur) was marked as the answerNessa linha
setConditionParam(condition, CONDITION_PARAM_TICKS, 22000) o tempo de duração é definido em milisegundos.
-
WooX's post in (Resolvido)Usar potion e abrir corpos mortos/puxar ring was marked as the answerProcure pela função bool Actions::useItemEx e onde estiver assim:
player->setNextActionTask(NULL); player->stopWalk(); player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::EX_ACTIONS_DELAY_INTERVAL) - SCHEDULER_MINTICKS); Altere para:
int32_t potions[] = {7620, 7589, 7590}; // IDs potions int16_t potionID = item->getID(); if(std::find(std::begin(potions), std::end(potions), potionID) == std::end(potions)) { player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::EX_ACTIONS_DELAY_INTERVAL)); } player->stopWalk();
Lembrando que isso vai retirar o exausted exActions de todas os items adicionados ali, terá que ser adicionado exausted no script lua das poções.
-
WooX's post in (Resolvido)Linux - Uso alto da CPU [OTX] was marked as the answerSim, há diferença entre uma VPS virtualizada com CPU de 2.6GHz e outra com um i7 ou Ryzen da vida que alcança seus 5.0GHz, você não precisa de fato migrar para um dedicado se não tem condição, mas busque ao menos uma VPS que te ofereça melhor performance no quesito processamento, dê prioridade ao clock do cpu no lugar da quantidade de núcleos.
-
WooX's post in (Resolvido)Proteção nas houses was marked as the answerQual source está utilizando? Se você está usando 0.x e não possui essa função provavelmente está utilizando TFS Exclusive Edition, ela não é necessária pois já existe a função onThrow, que faz o que a onMoveItem faz e até permite fazer coisas que a onMoveItem não consegue.
Abaixo está um script com a função onThrow, porem antes quero dizer sobre um problema que ambos os scripts não cobrem. Este script não vai impedir o convidado na casa de usar items, se tiver uma mana potion na casa por exemplo, ele não vai conseguir pegar e nem mover, mas vai poder usar em si ou em outros, por isso o correto para uma sistema como este é fazer diretamente na source.
--<event type="login" name="HouseProtectionRegister" event="script" value="house_protection.lua"/> --<event type="throw" name="HouseProtection" event="script" value="house_protection.lua"/> function onThrow(cid, item, fromPosition, toPosition) if fromPosition.x ~= 65535 and getHouseFromPos(fromPosition) then if getHouseOwner(getHouseFromPos(fromPosition)) ~= getPlayerGUID(cid) then doPlayerSendCancel(cid, "You can't take nor move someone else's stuff on their own house.") return false end elseif toPosition.x ~= 65535 and getHouseFromPos(toPosition) then if getHouseOwner(getHouseFromPos(toPosition)) ~= getPlayerGUID(cid) then doPlayerSendCancel(cid, "You can't throw things on someone else's house.") return false end end return true end function onLogin(cid) registerCreatureEvent(cid, "HouseProtection") return true end
Ps: se mais pessoas se interessarem eu posso escrever em C++ depois.
-
WooX's post in (Resolvido)Adicionar Position X/Y nessa script was marked as the answerlocal effects = { --_GOKU_-- [4] = 106, } local offsetX = 0 local offsetY = 0 function onThink(interval) for _, pid in ipairs(getPlayersOnline()) do local effect = effects[getPlayerVocation(pid)] if(effect) then local pos = getThingPos(pid) pos.x = pos.x + offsetX pos.y = pos.y + offsetY doSendMagicEffect(pos, effect) end end return true end
-
WooX's post in (Resolvido)Account Manager com cidade was marked as the answerSe não me engano o TFS 0.4 editado pelo Fir3Element já tem isso e tem aqui no fórum, da uma procurada.
-
WooX's post in (Resolvido)Erro na hora de criar conta was marked as the answerRoda na sua database.
SET GLOBAL SQL_MODE = '';
-
WooX's post in (Resolvido)Dúvidas compilação distro linux was marked as the answerUma distro compilada em uma versão ou arquitetura diferente do linux não vai rodar em outra. Você tem que recompilar a source na versão do Linux que está usando, o processo para compilação pode variar dependendo de que source está usando.
-
WooX's post in (Resolvido)Ajuda com auto save de 30 em 30 minutos para TFS 1.3 was marked as the answerO script de save já vem pro padrão na maioria dos datapacks, basta configura o tempo de execução em globalevents.
-
WooX's post in (Resolvido)Damage Player X Monster was marked as the answerÉ consequência da alteração que pediu, mas ainda da pra alterar o código, só que ai o black skull receberia o dobro de dano que o player hita em monstro, dependendo do seu balanceamento, isso ficaria um absurdo. Mas se mesmo assim você quiser, aqui está.
if(change < 0 && caster && caster->getPlayer() && target->getPlayer() && target->getPlayer()->getSkull() == SKULL_BLACK) change = change * 2;
-
WooX's post in (Resolvido)SCRIPT RESET So pode upar ate o level de reset was marked as the answerEsse erro que você mandou não parece estar completo e também testei aqui e funcionou normal. Mas fiz mais 1 edit, testa de novo.
-
WooX's post in (Resolvido)AJUDA NESSA MSG was marked as the answer--<event type="login" name="loginMsg" event="script" value="loginmsg.lua"/>-- function onLogin(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Free bless ate level 20.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Domine o castelo e ganhe mais Exp.") return true end
-
WooX's post in (Resolvido)Account Manager 1/1 nao funciona was marked as the answerVerifica na database o password do acc manager, tem que estar assim:
356a192b7913b04c54574d18c28d46e6395428ab
-
WooX's post in (Resolvido)spell dando erro no console was marked as the answertroca a função spellCallback para esta:
function spellCallback(param) if param.count > 0 or math.random(0, 1) == 1 then doSendMagicEffect(param.pos, CONST_ME_MORTAREA) doAreaCombatHealth(param.cid, COMBAT_DEATHDAMAGE, param.pos, 0, -3000, -8000, CONST_ME_EXPLOSIONHIT) end if(param.count < 2) then param.count = param.count + 1 addEvent(function() if isCreature(param.cid) then spellCallback(param) end end, math.random(1000, 4000)) end end
-
WooX's post in (Resolvido)[Creaturescript] Script de pvp enforced was marked as the answerVocê não precisa dessa parte
local target = getCreatureTarget(cid) Pois a própria função onKill já possui o target, retira essa linha que tudo deve funcionar normalmente.
-
WooX's post in (Resolvido)exausth ao andar enquanto pota was marked as the answerComenta onde estiver essa linha:
player->stopWalk(); Deixa assim:
//player->stopWalk();
-
WooX's post in (Resolvido)[Cast System] OTX 8.60 was marked as the answerO problema é que você está utilizando OTX2 que sim, possui o cast system do elf nas sources. Mas você está utilizando as funções Lua do cast do summ, que vem no TFS 0.4, assim não vai funcionar mesmo.
A função correta seria:
doPlayerSetSpectators
Caso não possua a talkaction, aqui está.
Edit: Impossível ele ter achado as funções, pois elas não existem no OTX, as funções são do cast system do summ, que geralmente vem no TFS 0.4. Então, ou você simplesmente pegou os arquivos spectators.cpp e spectators.h (que são do cast system do elf e não existem no TFS 0.4) e jogou no TFS 0.4, ou a alguém tentou adicionar essas funções do cast do summ que é totalmente diferente do que o elf fez, e obviamente não fez um bom trabalho.
-
WooX's post in (Resolvido)Alteração Distro was marked as the answerAdicionaram no repositório, faz as alterações.
https://github.com/mattyx14/otxserver/commit/3b9f089b1cdf260e4fe64f6f43380ef77169b400
-
WooX's post in (Resolvido)[AJUDA] Spell de teleport estilo Goku! was marked as the answerlocal cooldown = 10 * 60 function onSay(cid, words, param) if exhaustion.get(cid, 30000) then doPlayerSendCancel(cid, "You can only teleport again after ".. exhaustion.get(cid, 30000) .." seconds.") elseif (param == "") then doPlayerSendCancel(cid, "You need to choose to whom you going to teleport.") end local target = getPlayerByName(param) if (target ~= nil) then local oldPos = getThingPos(cid) local newPos = getClosestFreeTile(cid, getThingPos(target), true, false) doSendMagicEffect(oldPos, CONST_ME_POFF) doSendMagicEffect(newPos, CONST_ME_TELEPORT) doTeleportThing(cid, newPos) exhaustion.set(cid, 30000, cooldown) else doPlayerSendCancel(cid, "This player does not exist.") end return true end
-
WooX's post in (Resolvido)Monstros nao atacar summon was marked as the answerVolta seu combat.cpp para o original pro dano voltar a pegar. Pra não pegar target nos summons faz essa alteração.
Em monster.cpp onde está:
bool Monster::isTarget(Creature* creature) { return (!creature->isRemoved() && creature->isAttackable() && creature->getZone() != ZONE_PROTECTION && canSeeCreature(creature) && creature->getPosition().z == getPosition().z); } Muda para:
bool Monster::isTarget(Creature* creature) { return (!creature->isRemoved() && creature->isAttackable() && !creature->isPlayerSummon() && creature->getZone() != ZONE_PROTECTION && canSeeCreature(creature) && creature->getPosition().z == getPosition().z); }
-
WooX's post in (Resolvido){PEDIDO} Player morrer e ficar cm auréola na cabeça was marked as the answerNão tive tempo de testar.
--<event type="death" name="deathAureola" event="script" value="aureola.lua"/>-- --<event type="login" name="loginAureola" event="script" value="aureola.lua"/>-- local time = 3 * 60 -- Tempo que ficará com a aureola local repeatAfter = 2 -- Tempo para repetir o efeito local effect = 69 -- ID do efeito local storage = 36678 function onDeath(cid, corpse, deathList) setPlayerStorageValue(cid, storage, os.time() + time) return true end function onLogin(cid) registerCreatureEvent(cid, "deathAureola") if getPlayerStorageValue(cid, storage) > os.time() then doSendRecursiveEffect(cid, getPlayerStorageValue(cid, storage) - os.time()) end return true end function doSendRecursiveEffect(cid, time) if isCreature(cid) then if time > 0 then doSendMagicEffect(getThingPos(cid), effect) addEvent(doSendRecursiveEffect, repeatAfter*1000, cid, time-repeatAfter) else setPlayerStorageValue(cid, storage, 0) return end end end