Histórico de Curtidas
-
grafit recebeu reputação de joaaoinacio em [7.4, 7.6, 7.72] Tibia Classic BotTibia Classic Bot
Versões 7.4 , 7.6 e 7.72
Esse é um dos poucos bots e o mais completo para estas versões mais antigas... Eu tenho acompanhado desde a versão 1.6.4 dele (atual 1.6.8). Segue abaixo algumas das hotkeys que podem ser usadas nele:
Para que a hotkey fique "automática" ela deve ser adicionada na parte persistent , caso contrário a hotkey só será ativada uma vez.
Download:
https://mega.co.nz/#!x41jxAqa!sqL7cfy3_p-4wjfOrPB1qpUq_UrHuUd46G1wBJVn9nI
Scan:
https://www.virustotal.com/pt/file/b86169815eeddbaef3808be3d60e523b8a73a18113056ee516f10efd61105207/analysis/1400633901/
Créditos: Xavious
O BOT também pode ser encontrado no seguinte link: http://tpforums.org/forum/threads/3889-7-4-7-6-7-72-ClassicBotter-1-6-8
-
grafit recebeu reputação de Cat em [AJUDA AQUI] SERVIDOR EM LINUX NÃO ACESSABoa noite @MatheusTeixeira94
Eu também não sou nenhum expert..só estou tentando te ajudar, ok?
O que eu consegui entender com o que vc disse foi que você tá apontando as portas 80, 7171 e 7172 pro ip 192.168.15.21 que é o ip de um roteador, certo?
No meu entendimento você teria que apontar as portas pro IP 192.168.1.106, que é o IP da máquina onde está o server(certo?), e o computador que você for acessar esse server precisa estar conectado no mesmo roteador que distribuiu o ip 192.168.1.106
-
grafit recebeu reputação de Augusto em Restarter + Salvar log do consolePara facilitar o monitoramento dos meus servidores em linux eu utilizo um comando chamado tee
Para configurar é necessário criar um arquivo no seu servidor, de preferência na pasta raiz do server.
No meu caso, criei um chamado server.sh
#!/bin/bash ulimit -c unlimited while true; do TEMPO="$(date +'%d-%m-%Y-%H-%M')" ./tfs | tee "serverlog_____"$TEMPO".log"; done
Esse script é um restarter de linux normal, ou seja, fica em looping verificando se o TFS está ativo, caso não esteja ele o executa o comando ./tfs | tee "serverlog(dia_anterior)_____"$TEMPO".log
A função deste comando é ligar o TFS salvando o log do dia anterior em um arquivo, que é salvo na mesma pasta onde está o arquivo server.sh
Exemplo do log:
Espero que também seja útil para vocês.
-
grafit recebeu reputação de Storm em [Função] getPlayersInAreaFunção que retorna os players que estão numa área específica
function getPlayersInArea(fromPos, toPos) -- function by amoeba13 playersInArea = {} for x = fromPos.x, toPos.x do for y = fromPos.y, toPos.y do for z = fromPos.z, toPos.z do totalArea = {x=x, y=y, z=z} playerz = getTopCreature(totalArea) if isPlayer(playerz.uid) then table.insert(playersInArea, playerz.uid) end end end end return playersInArea end Exemplo de uso:
function onSay(cid, words, param, channel) local area = getPlayersInArea({x = 153, y = 50, z = 7}, {x = 156, y = 53, z = 7}) if area then for i = 1, (#area) do doTeleportThing(area[i], {x = 160, y = 51, z = 7}, false) end end return true end Créditos: Killua
-
grafit recebeu reputação de Cat em Atualização em breve! Nova Equipe, redução de ADS, site mais rápido e outras novidades!Sou membro da comunidade desde 2010 e acompanho todas as atualizações desde então. Sem sombra de dúvidas a melhor mudança foi a remoção de tantos ADS. Estragava a navegação no fórum e provavelmente perdemos muitos colaboradores por conta do mau uso. Parabéns pelas atualizações e vamos para os 15 anos de TK
-
grafit recebeu reputação de L3K0T em Atualização em breve! Nova Equipe, redução de ADS, site mais rápido e outras novidades!Sou membro da comunidade desde 2010 e acompanho todas as atualizações desde então. Sem sombra de dúvidas a melhor mudança foi a remoção de tantos ADS. Estragava a navegação no fórum e provavelmente perdemos muitos colaboradores por conta do mau uso. Parabéns pelas atualizações e vamos para os 15 anos de TK
-
grafit recebeu reputação de Polguilo em Atualização em breve! Nova Equipe, redução de ADS, site mais rápido e outras novidades!Sou membro da comunidade desde 2010 e acompanho todas as atualizações desde então. Sem sombra de dúvidas a melhor mudança foi a remoção de tantos ADS. Estragava a navegação no fórum e provavelmente perdemos muitos colaboradores por conta do mau uso. Parabéns pelas atualizações e vamos para os 15 anos de TK
-
grafit recebeu reputação de luanluciano93 em Restarter + Salvar log do consolePara facilitar o monitoramento dos meus servidores em linux eu utilizo um comando chamado tee
Para configurar é necessário criar um arquivo no seu servidor, de preferência na pasta raiz do server.
No meu caso, criei um chamado server.sh
#!/bin/bash ulimit -c unlimited while true; do TEMPO="$(date +'%d-%m-%Y-%H-%M')" ./tfs | tee "serverlog_____"$TEMPO".log"; done
Esse script é um restarter de linux normal, ou seja, fica em looping verificando se o TFS está ativo, caso não esteja ele o executa o comando ./tfs | tee "serverlog(dia_anterior)_____"$TEMPO".log
A função deste comando é ligar o TFS salvando o log do dia anterior em um arquivo, que é salvo na mesma pasta onde está o arquivo server.sh
Exemplo do log:
Espero que também seja útil para vocês.
-
grafit deu reputação a DdJs em [Link Quebrado] The Magician's Library | Cave Hunt | 10.98@grafit Tanto no mapa, quanto nos mobs que deixei lá tem base na secret library do tibia global. Custom é só no sentido de serem monstros alterados, eu mexi no xp, attack e life deles para ficarem parecidos com os da library original, mas as sprites são de bichos que já existiam nessa versão, lá na pasta tem um .txt com as explicações e tudo. Na minha concepção é um respawn especificamente para high level (500, 600, 700 e por ai vai). Mas caso você não queira usar aqueles mobs que eu coloquei junto, uma dica é usar monstros que são da classe sorcerers nesse lugar para 'condizer com o tema', não faria sentido um respawn desse com mobs de roshamuul, por exemplo.
Caso você se pergunte o por que de ser melhor uma cave que só level 500+ possa usufruir, é exatamente por causa do tamanho, uma cave desse tipo, se você deixa com monstros que level 200 podem caçar, vem uma pt de level 350-400 e se apodera do lugar, como se fosse uma mina de ouro pelo tamanho, e 'quebra' o respawn pela facilidade deles de matar os mobs. Agora se for algo mais hard, visando leveis acima de 480/500 pode-se criar um balanço e permitir que 3 até 4 pts nessa faixa de level (500+) cacem no local ao mesmo tempo.
-
grafit deu reputação a DdJs em [Link Quebrado] The Magician's Library | Cave Hunt | 10.98The Magician's Library
Version: 10.98
[Scan]
Type: .Rar
Size: 229KB
Position(s): [X: 1011 Y: 1030 Z: 10]
File password: tibiaking
Images:
-
grafit recebeu reputação de LeoTK em Restarter + Salvar log do consolePara facilitar o monitoramento dos meus servidores em linux eu utilizo um comando chamado tee
Para configurar é necessário criar um arquivo no seu servidor, de preferência na pasta raiz do server.
No meu caso, criei um chamado server.sh
#!/bin/bash ulimit -c unlimited while true; do TEMPO="$(date +'%d-%m-%Y-%H-%M')" ./tfs | tee "serverlog_____"$TEMPO".log"; done
Esse script é um restarter de linux normal, ou seja, fica em looping verificando se o TFS está ativo, caso não esteja ele o executa o comando ./tfs | tee "serverlog(dia_anterior)_____"$TEMPO".log
A função deste comando é ligar o TFS salvando o log do dia anterior em um arquivo, que é salvo na mesma pasta onde está o arquivo server.sh
Exemplo do log:
Espero que também seja útil para vocês.
-
grafit recebeu reputação de amora murder em Problemas com FRAG!Antes de tudo eu queria pedir desculpas por estar revivendo o tópico mas eu estive com o mesmo problema e não achei em lugar algum a solução..
Depois de muito procurar pelo fix desse bug eu achei a solução.
No seu config.lua a deathlist está desativada
-- Deathlist deathListEnabled = "no" deathListRequiredTime = 1 * 60 * 1000 deathAssistCount = 20 maxDeathRecords = 5
Ative essa função e o problema será resolvido!
-- Deathlist deathListEnabled = "yes" deathListRequiredTime = 1 * 60 * 1000 deathAssistCount = 20 maxDeathRecords = 5 -
grafit recebeu reputação de tuliocharles123 em Problemas com FRAG!Antes de tudo eu queria pedir desculpas por estar revivendo o tópico mas eu estive com o mesmo problema e não achei em lugar algum a solução..
Depois de muito procurar pelo fix desse bug eu achei a solução.
No seu config.lua a deathlist está desativada
-- Deathlist deathListEnabled = "no" deathListRequiredTime = 1 * 60 * 1000 deathAssistCount = 20 maxDeathRecords = 5
Ative essa função e o problema será resolvido!
-- Deathlist deathListEnabled = "yes" deathListRequiredTime = 1 * 60 * 1000 deathAssistCount = 20 maxDeathRecords = 5 -
grafit recebeu reputação de Raziel Frehley em [Função] getPlayersInAreaFunção que retorna os players que estão numa área específica
function getPlayersInArea(fromPos, toPos) -- function by amoeba13 playersInArea = {} for x = fromPos.x, toPos.x do for y = fromPos.y, toPos.y do for z = fromPos.z, toPos.z do totalArea = {x=x, y=y, z=z} playerz = getTopCreature(totalArea) if isPlayer(playerz.uid) then table.insert(playersInArea, playerz.uid) end end end end return playersInArea end Exemplo de uso:
function onSay(cid, words, param, channel) local area = getPlayersInArea({x = 153, y = 50, z = 7}, {x = 156, y = 53, z = 7}) if area then for i = 1, (#area) do doTeleportThing(area[i], {x = 160, y = 51, z = 7}, false) end end return true end Créditos: Killua
-
grafit deu reputação a Dwarfer em Job SystemACABOU A MOLEZA! Você que sempre fez os NPC's trabalharem dia e noite, disponíveis a qualquer momento mesmo que seja apenas para receber um "hi, buy rope, yes". A COISA MUDOU! Agora você vai ter que ralar. E olhe que os monstros estão com muito gold para gastar devido às mortes de aventureiros, despreparados de AOL ou de bençãos, que acabam por deixar dinheiro nas suas backpacks. VÁ TRABALHAR, SEU VAGAB..!
Depois dessa ladainha toda, estava eu testando algumas funções, umas coisitas aqui e ali e ao misturar tudo saiu isso aí meio que sem querer. Tem uns pontos que podem ser melhorados, mas como disse serviu apenas como uns testes para mim, mas resolvi compartilhar, mesmo sendo simplesinho. Acho que será útil para servidor com um pouquinho de RPG. Testado em TFS 0.4 e versão 8.60.
O Job System é um sistema no qual o player atenderá pedidos dos monstros. Cada pedido correto, o player ganha 1 job point que pode ser utilizado para comprar itens no npc ou como você queira fazer, em quests, acessos, seja lá o que for. O funcionamento é demonstrado no vídeo abaixo:
Segue o código do sistema (MOD) e do NPC.
jobsystem.xml
CONFIGURAÇÃO:
Desde que configure corretamente o mapa, não tem praticamente nada para modificar.
monsters = { [1] = {"Amazon", "Dwarf", "Elf Scout"}, [2] = {"Barbarian Bloodwalker", "Dwarf Guard", "Warlock"}, [3] = {"Vampire Bride", "Dwarf Geomancer", "Infernalist"} }
times = { deal = 30, lever = 2 } Aqui deal é o tempo em segundos entre cada pedido. Lever é o tempo em minutos para poder usar a alavanca novamente. Aconselho deixá-los nesses valores, já testei e funcionou certinho assim.
A configuração ocorre praticamente no mapa:
1 - Crie uma "loja" do mesmo tamanho e com a mesma configuração que as mostradas no vídeo e na imagem abaixo. Apenas com a posição do meio livre.
Não importa a "orientação" da loja. A única exigência é que a alavanca sempre esteja do lado do braço direito do char, conforme a imagem.
MUITO IMPORTANTE: NÃO USE ITENS STACKABLES NA LOJA
2. Definindo o rank da loja:
ALAVANCA DE ACTION ID:
4421 - Rank Apprentice
4422 - Rank Merchant
4423 - Rank Rashid
3. Todos os itens que não devem ser arrastados (itens da loja ou de decoração que não devam ser arrastados como o royal axe que mostrei lá no vídeo) devem receber o actionid 4420.
4. Os pisos onde os monstros serão criados devem ter actionid 4420. Além disso, ser área no-pvp e no logout (apenas por precaução).
5. Toda a área restante deve ser Protection Zone (PZ). Além disso, os locais do centro da loja onde os players ficarão devem ser No Logout Area.
Dwarfer.xml
job.lua
Configuração do NPC:
promote = {tomerchant = 50, torashid = 100}, tomerchant = 50 -> São necessários 50 pontos no rank Apprentice para avançar
torashid = 100 -> São necessários 100 pontos no rank Merchant para avançar
entice_rank = {-- Apprentice [2154] = {price = 1}, [2158] = {price = 3}, [2155] = {price = 7}, [2156] = {price = 100} }, merchant_rank = { -- Merchant [1998] = {price = 15}, [5950] = {price = 25}, [1987] = {price = 70}, [2402] = {price = 100} }, rashid_rank = { -- Rashid [9993] = {price = 15}, [9992] = {price = 25}, [9992] = {price = 70}, [7399] = {price = 100}} }
[id_do_item] = {price = preço do item} que aparecerá na lista do NPC.
É isso aí, seus vagal's
-
grafit deu reputação a Dyego em Zenfia Online MappingObrigado Grafit, todas essas sprites são Free to use doadas por vários Spriters, só algumas que eu comprei mesmo, mais será de uso livre também
-
-
Troca essa linha:
double shareExperience = (experience / (double)(memberList.size() + 1));
por
double shareExperience = experience;
E apaga essas duas linhas que estão abaixo:
if(experience > (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT)) shareExperience += (experience * (double)(g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100));
Compila de novo e vê se dá certo
-
grafit recebeu reputação de apollo333 em erro ao iniciar servidorapt-get install libmysqlclient-dev Se mesmo assim não for, tente:
install mysql-server -y
-
grafit deu reputação a Infesty em Procuro sócio programador/scripter. Sou MapperOlá amigos, estou a procura de um sócio pra desenvolvermos um OTserv. Fui mapper durante 4 anos e estou voltando agora. Já trabalhei no radbr e fui bastante conhecido em outros fóruns, como OTland, xtibia e otservbrasil. Como faz muito tempo, infelizmente perdi todas as fotos dos meus trabalho. Contudo, já iniciei os trabalhos de mapping deste novo projeto.
Sobre o projeto:
Muita coisa ainda deve ser discutida, mas ja tenho a base do jogo idealizada. Não quero dar muitas informações aqui, mas será mapa próprio e 2 reinos principais. Tenho o intuito de regastar a jogabilidade do tibia e fazer um ats que preze pela habilidade dos players, da forma que idealizei, usar BOT poderá trazer até desvantagens.. Será um jogo que buscará mais ainda o lado medieval (mais ainda que o tibia), como reinos que disputam entre sí. Os jogadores terão a chance de terem um destaque em tal sociedade (como rei, mão do rei, gladiador, nobre,etc). Isso tudo associado a magias/skills que sejam atribuidas a players com habilidade, como em MOBAS. Ex: o player que errar magias ou usa-lá indevidamente será punido de alguma forma.
Sobre o sócio:
O lucro será dividido 50%~50%, desde que o investimento seja feito nessa proporção. Acredito que o investimento não sera muito alto; Ainda tem a hipótese de chamar um terceiro sócio (amigo meu) que tem uma internet que aguenta 100 ~ 150 players, usaríamos-á até termos dinheiro para uma hospedagem,etc...
Procuro alguém com mais de 16 anos que seja responsável e que trabalhe. Não precisa se dedicar o dia todo, pois eu também tenho outros compromissos como faculdade, por exemplo. Mas temos que produzir, pelo meu planejamento da pra deixar o servidor on em 2 meses.
Missão/visão:
Acredito que com essa base que pensei, o jogo terá muita aceitação. Seria como um global MELHORADO, com um novo mapa, xp baixa e uma experiência que faça os players sentirem-se ambição em serem os melhores. O objetivo é mais de 1000 players on e um servidor que dure anos.
Obrigado, infesty.
-
grafit recebeu reputação de Nork em [7.4, 7.6, 7.72] Tibia Classic BotTibia Classic Bot
Versões 7.4 , 7.6 e 7.72
Esse é um dos poucos bots e o mais completo para estas versões mais antigas... Eu tenho acompanhado desde a versão 1.6.4 dele (atual 1.6.8). Segue abaixo algumas das hotkeys que podem ser usadas nele:
Para que a hotkey fique "automática" ela deve ser adicionada na parte persistent , caso contrário a hotkey só será ativada uma vez.
Download:
https://mega.co.nz/#!x41jxAqa!sqL7cfy3_p-4wjfOrPB1qpUq_UrHuUd46G1wBJVn9nI
Scan:
https://www.virustotal.com/pt/file/b86169815eeddbaef3808be3d60e523b8a73a18113056ee516f10efd61105207/analysis/1400633901/
Créditos: Xavious
O BOT também pode ser encontrado no seguinte link: http://tpforums.org/forum/threads/3889-7-4-7-6-7-72-ClassicBotter-1-6-8
-
grafit deu reputação a Snowsz em [TFS 1.3 10.98] ALUNIA 2020 - Styller CustomVocê primeiro deveria ler o negócio e interpretar corretamente, o servidor está em desenvolvimento seu "projeto de lee sin". Uma coisa que usuários deveriam aprender é parar de reclamar que falta DLL, .exe, uma coisa ou outra, ninguém é obrigado a estar postando projetos pessoais e ainda mais deixar open atualizando, se quiser essas coisas, aprendam a fazer também, não é só receber tudo de mão beijada não.
@luanluciano93 massa ver que ainda está trabalhando em algo, só acho um erro ter deixando o whatsapp ai hueheaaeheua, vai aparecer nego igual esse /\ enchendo teu saco por algo que você não é obrigado a fazer querendo tudo de mão beijada, depois tira que fica sussa xD.
-
grafit recebeu reputação de joe rod em [C++] onDropLoot(cid, item)Event droploot acontece quando um monstro ou player dropa 1 item.
Em creatureevent.cpp procure:
bool CreatureEvents::playerLogin(Player* player) { //fire global event if is registered bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if(it->second->getEventType() == CREATURE_EVENT_LOGIN && !it->second->executeLogin(player) && result) result = false; } return result; Adicione abaixo:
bool CreatureEvents::dropLoot(Creature* creature, Item* item) { bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if(it->second->getEventType() == CREATURE_EVENT_DROPLOOT && !it->second->executeDropLoot(creature, item)) result = false; } return result; } Ainda em creatureevents.cpp procure:
else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; Adicione abaixo:
else if(tmpStr == "droploot") m_type = CREATURE_EVENT_DROPLOOT; Procure:
case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; Adicione abaixo:
case CREATURE_EVENT_DROPLOOT: return "onDropLoot"; Procure:
case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; Adicione abaixo:
case CREATURE_EVENT_DROPLOOT: return "cid, item"; Procure:
uint32_t CreatureEvent::executeLogout(Player* player, bool forceLogout) { //onLogout(cid, forceLogout) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; scriptstream << "local forceLogout = " << (forceLogout ? "true" : "false") << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushboolean(L, forceLogout); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeLogout] Call stack overflow." << std::endl; return 0; } } Adicione abaixo:
uint32_t CreatureEvent::executeDropLoot(Creature* creature, Item* item) { //onDropLoot(cid, item) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); LuaScriptInterface::pushThing(L, item, env->addThing(item)); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeDropLoot] Call stack overflow." << std::endl; return 0; } } Em creatureevent.h procure:
CREATURE_EVENT_PREPAREDEATH, Adicione abaixo:
CREATURE_EVENT_DROPLOOT Procure:
uint32_t executeTarget(Creature* creature, Creature* target); Adicione abaixo:
uint32_t executeDropLoot(Creature* creature, Item* item); Agora em player.h procure a função:
void Player::dropLoot(Container* corpse) Troque por:
void Player::dropLoot(Container* corpse) { if(!corpse || lootDrop != LOOT_DROP_FULL) return; uint32_t start = g_config.getNumber(ConfigManager::BLESS_REDUCTION_BASE), loss = lossPercent[LOSS_CONTAINERS], bless = getBlessings(); while(bless > 0 && loss > 0) { loss -= start; start -= g_config.getNumber(ConfigManager::BLESS_REDUCTION_DECREAMENT); bless--; } uint32_t itemLoss = (uint32_t)std::floor((5. + loss) * lossPercent[LOSS_ITEMS] / 1000.); for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { Item* item = inventory[i]; if(!item) continue; Creature* creature = NULL; bool deny = false;item creature = g_game.getCreatureByID(getID()); CreatureEventList droploot = getCreatureEvents(CREATURE_EVENT_DROPLOOT); for(CreatureEventList::iterator it = droploot.begin(); it != droploot.end(); ++it) { if(!(*it)->executeDropLoot(this, item)) deny = true; } if(!deny) { uint32_t rand = random_range(1, 100); if(skull > SKULL_WHITE || (item->getContainer() && rand < loss) || (!item->getContainer() && rand < itemLoss)) { g_game.internalMoveItem(NULL, this, corpse, INDEX_WHEREEVER, item, item->getItemCount(), 0); sendRemoveInventoryItem((slots_t)i, inventory[(slots_t)i]); } } } } Em monster.cpp procure:
void MonsterType::dropLoot(Container* corpse) { if(corpse && lootDrop == LOOT_DROP_FULL) mType->dropLoot(corpse); } Troque por:
void MonsterType::dropLoot(Container* corpse) { Item* tmpItem = NULL; for(LootItems::const_iterator it = lootItems.begin(); it != lootItems.end() && !corpse->full(); ++it) { uint32_t owner = corpse->getCorpseOwner(); Creature* creature = g_game.getCreatureByID(owner); if((tmpItem = createLoot(*it)) && g_creatureEvents->dropLoot(creature, tmpItem)) { if(Container* container = tmpItem->getContainer()) { if(createChildLoot(container, (*it))) corpse->__internalAddThing(tmpItem); else delete container; } else corpse->__internalAddThing(tmpItem); } } corpse->__startDecaying(); uint32_t ownerId = corpse->getCorpseOwner(); if(!ownerId) return; Player* owner = g_game.getPlayerByID(ownerId); if(!owner) return; LootMessage_t message = lootMessage; if(message == LOOTMSG_IGNORE) message = (LootMessage_t)g_config.getNumber(ConfigManager::LOOT_MESSAGE); if(message < LOOTMSG_PLAYER) return; std::stringstream ss; ss << "Loot of " << nameDescription << ": " << corpse->getContentDescription() << "."; if(owner->getParty() && message > LOOTMSG_PLAYER) owner->getParty()->broadcastMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); else if(message == LOOTMSG_PLAYER || message == LOOTMSG_BOTH) owner->sendTextMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); } Exemplo de uso da função:
function onDropLoot(cid, item) local block = {2221, 1221, 2922} for i=1, #block do if item.itemid == block[i] then return false end end return true end Créditos: Caotic
-
grafit recebeu reputação de subhe em [AJUDA} Erro buffer:onDeathValeu meu camarada!!
Qualquer coisa estamos aí.
Abraço
-
grafit recebeu reputação de Miragem em Ajuda com OTPANELConfigurar um servidor tanto em Linux como no Windows é muito simples, só necessita de atenção.
Além do mais existe a comunidade do Tibia King pra auxiliar as pessoas.
Esses sistemas aí pra ajudar a configurar servidor serve só pra pegar o dinheiro de quem é bobo, sem falar que usando isso você não aprende a configurar um servidor e vai sempre depender desse suporte "24h".
Qualquer dúvida eu me disponho a ajudar, e o melhor, sem cobrar nada.
Abraço!