Tudo que Naze postou
-
(Resolvido)Derivado [Pedido] Usar x item em um monstro e ganhar outfit
Assim que tiver tempo ajeito pra tu
-
Otimizado: AutoLoot in Sources for Otx(2 ou menor)
boa se funciono ta blz, agr q percebi realmente erro meu, pois check retorna true se ta na lista tbm, vou corrigir no post depois.
-
Otimizado: AutoLoot in Sources for Otx(2 ou menor)
O erase tem q usar iterator, tente usa assim void Player::removeAutoLoot(uint16_t id) { if(checkAutoLoot(id)) { return; } std::list<uint16_t>::iterator it = AutoLoot.begin(); for(; it != AutoLoot.end(); ++it) { if((*it) == id) { AutoLoot.remove(it); break; } } } caso de erro tbm na parte do monsters.cpp olha os comentários no post da tfs 0.4 que postei a solução. @edit Formatação saiu bugada q tô no celular mas dá uma ajeitada aí kkk
-
(Resolvido)Derivado [Pedido] Usar x item em um monstro e ganhar outfit
dessa forma poderá usar mais outfit caso queira, testa ae local cfg = { {name = "Outfit Dragon", mob = "bug", outfit_male = 367, outfit_female = 366, addon = "1"}, -- name = nome da outfit, mob = nome do monstro {name = "Outfit Lord", mob = "dragon lord", outfit_male = 367, outfit_female = 366, addon = "2"}, -- outfit_male = lookType da outfit de homem, outfit_female = lookType da outfit de mulher {name = "Outfit Frost", mob = "dragon frost", outfit_male = 367, outfit_female = 366, addon = "3"}, -- addon = (1 = somendo addon 1) (2 = somente addon 2) (3 = todos addons) } function onUse(player, item, fromPosition, target, toPositio) local monster = Monster(target) if monster then for i, _ in pairs(cfg) do if (_.mob:lower() == monster:getName():lower()) then local lookType = player:getSex() % 2 and _.outfit_male or _.outfit_female if not player:hasOutfit(lookType, _.addon) then player:addOutfitAddon(lookType, _.addon) player:sendTextMessage(22, "Voce ganhou a ".. _.name ..". Parabens") monster:remove() item:remove(1) return true end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Voce ja tem essa outfit") return false end end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Esse monstro nao e valido") return false end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_RED, "Isso nao e possivel") return false end
-
Client 10 com sprites 12.52.10382 + sprites custom
Obrigado pela contribuição meu bom.
-
Spell attackk
doSendDistanceShoot(fromPos, toPos, type) usa essa função e pega as posições como pegou no doSendMagicEffect
-
Usar Spell so com Players.
Este tópico foi movido para a seção de Suporte Otserv Alternativo
- Otimizado: AutoLoot in Sources for TFS 0.3.6, TFS 0.4
- Otimizado: AutoLoot in Sources for TFS 0.3.6, TFS 0.4
-
erro ao compilar
Este tópico foi movido para a seção de Suporte Otserv.
-
OTC Bloquear oldcliente
Tem uma função na src que verifica o client, pode usa ela no login e bloquear login de oldclient, limitar apenas o seu.
-
Algum cliente+server (com source) de poketibia
Não entendo muito de poketibia mas essa acredito q seja uma boa base com tudo q pediu
- Otimizado: AutoLoot in Sources for TFS 0.3.6, TFS 0.4
- [VIDEO] Virtualiza Linux Com Acesso "localhost" Direto do Windows
-
(Resolvido)Erro no sistema Porta no Automática igual pxg
Tenta dessa forma, apenas coloquei checagem se item existe, se continuar funcionando vai parar os erros. function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getTileItemById(pos, porta[1]).uid > 0 then for i = 1, 2 do addEvent(function() local item = getTileItemById(pos, i == 1 and porta[1] or porta[2]).uid if item > 0 then doTransformItem(item, porta[i + 1]) end end, i * delay) end end return true end function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor) local tab = {} for _, pid in ipairs(getPlayersOnline()) do if getTileInfo(getCreaturePosition(pid)).actionid == action then table.insert(tab, pid) end end if #tab == 0 then if getTileItemById(pos, porta[3]).uid > 0 then for i = 1, 2 do addEvent(function() local item = getTileItemById(pos, i == 1 and porta[3] or porta[2]).uid if item > 0 then doTransformItem(item, porta[i == 1 and 2 or 1]) end end, i * delay) end end end return true end @EDIT Só postei a funções então só modifica elas mas a variáveis do início continua.
-
(Resolvido)Erro no sistema Porta no Automática igual pxg
Da erro e fica como? A porta aberta, meia-aberta ou fechada? É só quando entra mesmo (onStepIn) ou quando sai tbm (onStepOut)? Ou só da erro mas funciona normalmente?
-
spells que trapa a frente do jogador
Então vc queria q mandasse a parede conforme a direção que ele está virado?
-
TFS para OTX
Pra transforma tfs em otx é um trabalho grande e desnecessário, pq tá trocando 6 por meia dúzia, mas ainda prefiro tfs. Você deveria é pegar uma otx e roda seu servidor e corrigir tudo que aparece de incompatibilidade se realmente quiser usar ela.
-
Otimizado: AutoLoot in Sources for Otx(2 ou menor)
Uns dos problemas das maiorias dos otserv casual que estão online é o autoloot, alguns com erros e defeito na checagem dos containers e sempre consumindo muito por ser em lua fazendo checagens de tile, corpo, itens e etc. Por isso decidi da uma contribuição a essa comunidade que me evoluiu bastante um autoloot diretamente na source na função que insere os itens no corpo, otimizando em 100% na hr da entrega do item, e não tendo problemas ocasionais como corpos sobre corpos ou varias bags. Esse sistema já é bem comum quando comprado, mas gratuito acredito que ainda não tinha disponível, então fiz esse totalmente do 0 na source tfs 0.4 rev 3999 (do yan) e passei para Otx corrigindo alguns erros de compatibilidade. Atenção na instalação! Qualquer problema pra compilar que envolva as linhas presente no código verifique novamente se instalou corretamente antes de pedir ajuda para evitar flood. Qualquer bug, erro ou mal funcionamento encontrado pode postar que estarei corrigindo, mas não irei customizar a seu agrado, você consegue fazer isso sozinho com atenção e calma, e se precisa de ajuda é só posta as duvidas. Imagens do Sistema: Características: -> Otimizado executando apenas funções necessarias -> Comandos simples e praticos -> !autoloot on/off //Autoloot estara sempre ligado, e caso queria desliga use '!autoloot off' -> !autoloot bank/bag //Define para onde ira o dinheiro coletado, direto banco ou no inventario -> !autoloot list //Lista todos itens adicionados para coleta -> !autoloot clear/clean //Remove todos itens da lista -> !autoloot add, name item, name item, ... //Adiciona itens na lista, podendo adicionar quantos quiser de uma vez. Ele retorna um messagem dizendo os itens que foram adicionados e os que deram erro e não foram adicionados, talvez por escrito errado, ja existente na lista, na lista de bloquados, etc. -> !autoloot remove, item name, item name, ... //Remove itens da lista, com a mesma logica do add. -> Opções configuravel pelo Config.lua -> AutoLoot_MoneyIDs //IDs dos Itens Moedas do servidor como gold coins, platinium coins, crystal coins. -> AutoLoot_BlockIDs //IDs dos itens bloqueados para autoloot -> AutoLoot_MaxItem //Quantidade maxima de itens para adicionar a lista -> Sistema livres de bugs ou logs de erros. Instalação: Toda instalação será feita na source, exceto por 1 linha em talkactions.xml e 3 variáveis no config.lua Otx : Link para TFS -> https://tibiaking.com/forums/topic/101079-otimizado-autoloot-in-sources-for-tfs-036-tfs-04/ Caso ocorra algum erro na compilação so mandar que ajudo a resolver, testei apenas em uma otx que tenho então nao sei se pode sugir outros problemas. Nas versões atual da Otx para servidores 10+ não ira funcionar pois algumas funções são diferente e não irei corrigir agora, em breve passo o mesmo pra tfs 1.3 e otx3. Esse sistema foi totalmente feito por mim, mas dou créditos também ao @Mathias Kenfi por me ajudar muito na evolução em lua/c++ e a tabela sql é a mesma usada no quick autoloot 1.3 postado por Pedriinz
-
[TFS 1.3] Problema com terceira prey slot
Quando você cria um char e loga a primeira vez vem os 3 liberados? Não tou familiarizado com client 12+, mas se sim, isso deve ter alguma opção no config.lua, ou ele pega dos samples seus vc teria q modificar ai, caso for o samples vc modifica na database do contrario esqueça a database e o iologindata.cpp alias volta as alterações que vc fez, o iologindata.cpp apenas carrega as informações que ta na database e seta no char, e ao desloga sava elas na database novamente. Você mudando ai não ira influenciar mesmo pois o jogo nao comunica com a database pra saber se vc tem prey, somente no login e logout, vc teria que usar a função mostrada ai pra desbloquar player->preySlotUnlocked[slotNum] = valor; onde slotNum é o qual slot 0 a 2, e valor é 0 ou 1 como vc disse, feito isso quando ele efetuar o logout ira salvar, e hr q logar ira puxar oq foi salvo. Como vc pode definir isso corretamente nao sei te falar pois nao conheço nada desse sistema, mas em gambiarras poderia colocar uma verificação de storage no fim do load, se tiver ela seta a função unlocked e vende a storage no gamestore, ou se souber editar o gamestore pode fazer por ele mesmo setar ela... Não posso te ajuda especificamente pq nao sei, e nao to com tempo pra aprende, mas se tentar ou tiver duvida so pergunta.
-
Spell attackk
Removi o verificação de storage que havia pois nao tava sendo utilizada, e quando erra dara o effect que tava nela: doSendAnimatedText(getThingPos(cid), "MISS!", 180) Testa ai avisa se der erro. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if (isPlayer(target)) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Voce so pode usar em jogadores.") return false end if (getCreatureHealth(target) > getCreatureMaxHealth(target) * 0.20) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "O alvo tem que estar com menos de 20% da vida.") return false end local chance = 0.5 local spellname = "Execute" local hp = -10000 if chance >= math.random() then doSendMagicEffect(getPlayerPosition(cid), 49) doCreatureAddHealth(target, hp) doCombat(cid, combat, var) return true else doSendAnimatedText(getThingPos(cid), "MISS!", 180) return false end end
-
Otimizado: AutoLoot in Sources for TFS 0.3.6, TFS 0.4
Uns dos problemas das maiorias dos otserv casual que estão online é o autoloot, alguns com erros e defeito na checagem dos containers e sempre consumindo muito por ser em lua fazendo checagens de tile, corpo, itens e etc. Por isso decidi da uma contribuição a essa comunidade que me evoluiu bastante um autoloot diretamente na source na função que insere os itens no corpo, otimizando em 100% na hr da entrega do item, e não tendo problemas ocasionais como corpos sobre corpos ou varias bags. Esse sistema já é bem comum quando comprado, mas gratuito acredito que ainda não tinha disponível, então fiz esse totalmente do 0 na source tfs 0.4 rev 3999 (do yan). Atenção na instalação! Qualquer problema pra compilar que envolva as linhas presente no código verifique novamente se instalou corretamente antes de pedir ajuda para evitar flood. Qualquer bug, erro ou mal funcionamento encontrado pode postar que estarei corrigindo, mas não irei customizar a seu agrado, você consegue fazer isso sozinho com atenção e calma, e se precisa de ajuda é só posta as duvidas. Imagens do Sistema: Características: -> Otimizado executando apenas funções necessarias -> Comandos simples e praticos -> !autoloot on/off //Autoloot estara sempre ligado, e caso queria desliga use '!autoloot off' -> !autoloot bank/bag //Define para onde ira o dinheiro coletado, direto banco ou no inventario -> !autoloot list //Lista todos itens adicionados para coleta -> !autoloot clear/clean //Remove todos itens da lista -> !autoloot add, name item, name item, ... //Adiciona itens na lista, podendo adicionar quantos quiser de uma vez. Ele retorna um messagem dizendo os itens que foram adicionados e os que deram erro e não foram adicionados, talvez por escrito errado, ja existente na lista, na lista de bloquados, etc. -> !autoloot remove, item name, item name, ... //Remove itens da lista, com a mesma logica do add. -> Opções configuravel pelo Config.lua -> AutoLoot_MoneyIDs //IDs dos Itens Moedas do servidor como gold coins, platinium coins, crystal coins. -> AutoLoot_BlockIDs //IDs dos itens bloqueados para autoloot -> AutoLoot_MaxItem //Quantidade maxima de itens para adicionar a lista -> Sistema livres de bugs ou logs de erros. Instalação: Toda instalação será feita na source, exceto por 1 linha em talkactions.xml e 3 variáveis no config.lua TFS 0.4 : Link para Otx -> https://tibiaking.com/forums/topic/101086-otimizado-autoloot-in-sources-for-otx2-ou-menor/ Nas versões atual da TFS para servidores 10+ não ira funcionar pois algumas funções são diferente e não irei corrigir agora, em breve passo o mesmo pra tfs 1.x e otx3. Esse sistema foi totalmente feito por mim, mas dou créditos também ao @Mathias Kenfi por me ajudar muito na evolução em lua/c++ e a tabela sql é a mesma usada no quick autoloot 1.3 postado por Pedriinz @Edit: Quem usa source de derivados caso ocorra erro aplica as alterações dos comentários abaixo. Pequena correção em talkactions.cpp na parte remove na linha if(!player->checkAutoLoot(itemId)), para if(player->checkAutoLoot(itemId))
-
(Resolvido)Wand OF elements
Poderia compartilha a solução quando consegue mesmo por conta própria ajuda bastante futuramente. Pra quem tiver mesmo problema é pq a função q da o dano está com AddEvent, mesmo que seja pouco milissegundos a velocidade do player é mais rápida e o atk chega num local q o player não tá mais. So trocar essa linha: addEvent(doAreaCombatHealth, 100, cid, wx.dmg, getThingPos(target), 0, -min, -max, wx.ef) Por essa: doAreaCombatHealth(cid, wx.dmg, getThingPos(target), 0, -min, -max, wx.ef)
-
(Resolvido)Totem com managain ou lifegain
Oq quer não é difícil se realmente quer tenta fazer você precisa criar um movements, onEquip e um onDeEquip com esse item, fazer uma verificação de q se ele não for equipado no slot correto que queria retorna false (return false), caso seja equipado no slot certo, ira dar os efeito q deseja. Aqui tem um pequeno tutorial basico de movements: link Aqui tem um script de um item parecido com oq quer se nao igual: link E procure outros onEquip e onDeEquip e tente entender como funciona q vai conseguir. Qualquer duvida so mandar demoro mais respondo. @edit, e claro no onDeEquip colocar para retirar os efeitos q colocou na hr de equipar.
-
Script teleport
local config = { pz = false, -- false battle = true, -- trues custo = false, -- false need_level = false, -- false premium = true, -- true exhaust = 5, -- tempo em segundos storage, value = 1110102, 1 -- key da storage, e seu valor } local free = { ["azeroth"] ={ pos = {x=613, y=1056, z=7}, price = 0}, ["esdra"] ={ pos = {x=1091, y=2272, z=4}, price = 0}, ["elsera"] ={ pos = {x=342, y=101, z=6}, price = 0}, ["saragoka"] ={ pos = {x=628, y=879, z=7}, price = 0}, ["gloria"] ={ pos = {x=797, y=821, z=7}, price = 0}, ["avalon"] ={ pos = {x=2096, y=949, z=7}, price = 0}, ["edileia"] ={ pos = {x=581, y=2327, z=6}, price = 0}, ["khalarar"] ={ -- pos = {x=1369, y=1122, z=7}, price = 0}, ["varmor"] ={ -- pos = {x=407, y=633, z=7}, price = 0}, ["nevasta"] ={ -- pos = {x=2431, y=1337, z=7}, price = 0}, ["shurima"] ={ -- pos = {x=1833, y=2183, z=5}, price = 0}, ["orcpromo"] ={ -- pos = {x=2569, y=2186, z=5}, price = 0}, ["arena"] ={ pos = {x=2129, y=925, z=10}, price = 0}, ["midgarde"] ={ pos = {x=3630, y=1870, z=6}, price = 0}, ["formagor"] ={ -- pos = {x=2619, y=2086, z=4}, price = 0}, } local premium = { ["behemoth2"] ={ pos = {x=230, y=478, z=0}, price = 0}, ["behemoth3"] ={ pos = {x=1616, y=2236, z=8}, price = 0}, ["behemoth4"] ={ pos = {x=738, y=896, z=7}, price = 0}, ["behemoth5"] ={ pos = {x=708, y=962, z=10}, price = 0}, ["dragon6"] ={ pos = {x=1585, y=992, z=7}, price = 0}, ["pirate"] ={ pos = {x=147, y=935, z=7}, price = 0}, ["macacos"] ={ pos = {x=775, y=2105, z=7}, price = 0}, ["hellhound3"] ={ pos = {x=866, y=2358, z=6}, price = 0}, } function onSay(cid, words, param) local param, str, var = param:lower(),"", isPremium(cid) and premium or free if param == "" or param == "list" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "--=[ FREE ]=--") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "CIDADES: azeroth, avalon, gloria, saragoka, elsera, edileia, khalarar, varmor, nevasta, shurima, formagor, esdra, midgarde. ( orcpromo, arena )") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "--=[ VIPS ]=--") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "HUNT LEVEL 8 a 30: troll, amazon, mino1, mino2, elf1, dworc, barbarian1, barbarian2, bonelord, orc1, orc2. ( treineroff )") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "HUNT LEVEL 30 a 50: cyclops1, cyclops2, cyclops3, cyclops4, pirate, vamp1, vamp2, lightvale, macacos, scarab, dwarf1, dwarf2, dragonhatchling1, dragonhatchling2.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "HUNT LEVEL 50 a 80: banshee, wyvern, hero1, hero2, dragon1, dragon2, dragon3, dragon4, dragon5, dragon6, dragon7, blacknight1, blacknight2, hydra1, hydra2, hydra3, hydra4, spider1, spider2, icespider1, icespider2.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "HUNT LEVEL 80 a 100: behemoth1, behemoth2, behemoth3, behemoth4, behemoth5, northland, frost1, frost2, frost3, frost4, frost5, volcan, rhun, defiler1, defiler2, bograider1, bograider2, nightmare1, nightmare2, quaras.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "HUNT LEVEL 100 a 200: hellhound1, hellhound2, hellhound3, fury, warlock1, warlock2, warlock3, demon1, demon2, demon3, undead1, undead2, deathvale, erediunvale, serpent1, serpent2, spiritfire, wyrm, dark, erechvale, behedemon, higelf.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "HUNT LEVEL 200+: northen, elemental, lizard1, lizard2, lizard3, medusa1, medusa2, oxyurus, terminator1, terminator2, jugger1, jugger2, solarian, bloodboil, valemordor, demonictoad.") return true end local a = var[param] if not(a) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Use comando /ir veja os lugares onde você pode ir.") doSendMagicEffect(getCreaturePosition(cid), 2) return true elseif config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você precisa estar em protection zone pra poder teleportar.") return true elseif getCreatureCondition(cid, CONDITION_INFIGHT) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode se teleportar em uma batalha.") return true elseif config.custo == true and doPlayerRemoveMoney(cid, a.price) == FALSE then doPlayerSendTextMessage(cid, 22, "Desculpe,voce nâo tem dinheiro suficiente. Voce precisa "..a.price.." gp para ser teleportado.") return true end if (getPlayerStogageValue(cid, 1110101) - os.time()) > os.time() then doPlayerSendTextMessage(cid, 22, "Aguarde alguns segundos para usar teletransporte novamente.") return true end setPlayerStorageValue(cid, 1110101, os.time() + exhaust) setPlayerStorageValue(cid, storage, value) doSendMagicEffect(getCreaturePosition(cid), 27) doTeleportThing(cid, a.pos) doSendMagicEffect(a.pos, CONST_ME_BIGCLOUDS) return true end