Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 07/18/15 em %
-
Stream Live tfs 1.0 e 1.2
mulino e 2 outros reagiu a Masterlokinhon por um tópico no fórum
Olá Xtibianos, Vim trazer sistema de stream para seu site. faça o download dos arquivos: sql stream outfit imagens streamglobalevents Como funciona: Quando o server tiver abrindo ele carrega o mapa e envia para o mysql isso da um delay de 20 segundos +- e ele fica enviando informação da posição dos players para o mysql a cada 1 segundo Adicionar: executes os arquivos na pasta sql no seu banco de dados do seu servidor do tibia extraia a pasta stream para o seu site o arquivo loadplayer.data.php coloque na pasta principal do seu site extraia as pastas outfit e imagens para dentro da pasta stream que você extraiu no seu site extraia a pasta streamglobalevents dentro da pasta globalevents/scripts do seu servidor caso queira usar no tfs 1.2 edite streamloadplayer.lua por esse adicione as seguintes tags no globalevents.xml dentro da pasta globalevents <globalevent name="streamLoadMap" type="startup" script="streamloadmap.lua"/> <globalevent name="streamLoadPlayer" interval="1000" script="streamloadplayer.lua"/> Como usar: configure os arquivos dentro da pasta globalevents aonde estraiu streamloadmap.lua e streamloadplayer.lua local stream = { pos = {x = 1006, y = 993, z = 5}, -- A POSIÇÃO DO CENTRO DA STREAM posmax = {x = 20, y = 16} -- NÃO MUDE NADA }configure o arquivo mysql.php com as informação do seu MYSQL $mysql = mysql_connect("HOST", "USER", "PASSWORD"); if (!$mysql) die ("<h1>ERROR: mysql</h1>"); $db = mysql_select_db("DB"); para adicionar o stream para seu site só colocar include('stream/index.php'); Correções:[21/07/2015] correção de imagens no site [21/07/2015] correção dos nomes no site [21/07/2015] melhoramento no carregamento da página [21/07/2015] bug de carregamento de player no tfs 1.2 [21/07/2015] tfs 1.2 mostra summon e criaturas Imagens: https://youtu.be/DtzIdveeA_U Créditos: EU que fiz o script todo Kamil Karkus por fornecer o outfit.php e as imagens DkAngel - Pelo video3 pontos -
Pokemon Dash v6 reupload by Valakinhas
CoowboyLu e um outro reagiu a valakas por um tópico no fórum
• Menu: ├ Informações; ├ Prints; ├ Download; └ Creditos. • Informações Basicas • • print screen • • download+scan • client/serve/source: http://www.mediafire.com/download/7zuy27ymn7nhnj7/dash+v6+reupload.rar scan: https://www.virustotal.com/pt/file/f8cd451fecabccc09b683e5928a0f186ec11f278628ab0c81e157628f91c6826/analysis/1436901745/ • Creditos • brun123 n lembro o resto2 pontos -
Olá a todos, Bem como o título já diz tudo, essa é a minha primeira sprite. Fiz do bulbasaur, pois ele é o primeiro pokemon que aparece na dex. Quero opiniões, dicas, críticas etc... Por favor, que sejam construtivas e que me ajudem a melhorar. Vou colocar aqui a versão 32x32 e uma ampliada com tamanho de 512x512 para que possam ver melhor. 32x32 512x512 Depois de jogar no servidor a spr eu achei ela muito estranha, ai resolvi mudar... Vou postar aqui abaixo a mudança. Até. 32x32 512x512 Agora feito em pespectiva do tibia 32x32 512x512 @Atualização 21/07 Agora foi a vez do ivysaur! 32x32 512x512 Até mais, Delkawy.2 pontos
-
Introdução: É uma wand que ataca vários elementos aleatoriamente, porém não somente isso, você pode travar um único elemento através de uma talkaction. OBS: Testado em tfs 0.4 Instalação: Vá até data/weapons/scripts e crie um arquivo chamando wandelementos.lua e coloque o seguinte conteúdo: local min, max = 1700,1900 --Ataque mínino e ataque máximo local w = { [1] = {ef = 36, sh = 3, dmg = COMBAT_FIREDAMAGE}, [2] = {ef = 42, sh = 28, dmg = COMBAT_ICEDAMAGE}, [3] = {ef = 46, sh = 38, dmg = COMBAT_POISONDAMAGE}, [4] = {ef = 17, sh = 31, dmg = COMBAT_DEATHDAMAGE}, [5] = {ef = 47, sh = 35, dmg = COMBAT_ENERGYDAMAGE}, [6] = {ef = 36, sh = 31, dmg = COMBAT_PHYSICALDAMAGE}, [7] = {ef = 49, sh = 37, dmg = COMBAT_HOLYDAMAGE} } function onUseWeapon(cid, var) local effect = getPlayerStorageValue(cid, 4561) local target = getCreatureTarget(cid) if target ~= 0 then local wx = w[effect] or w[math.random(#w)] doSendDistanceShoot(getThingPos(cid), getThingPos(target), wx.sh) addEvent(doAreaCombatHealth, 100, cid, wx.dmg, getThingPos(target), 0, -min, -max, wx.ef) end return true end Altere o min e max de acordo com sua necessidade. Agora vá em data/weapons/weapons.xml e coloque o seguinte conteúdo: <wand id="7424" level="100" mana="30" event="script" value="wandelementos.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="5" showInDescription="0"/> <vocation id="6" showInDescription="0"/> </wand> Altere o id, level e mana de acordo com sua necessidade. Agora vamos configurar a talkaction que troca os elementos. Vá até data/talkactions/scripts e crie um arquivo chamando elementos.lua e coloque o seguinte conteúdo: local config = { wand_id = 7424, --ID da wand types = { ["all"] = -1, --Ataca os elementos aleatoriamente ["fire"] = 1, ["ice"] = 2, ["poison"] = 3, ["death"] = 4, ["energy"] = 5, ["physical"] = 6, ["holy"] = 7 } } function onSay(cid, words, param) local wand_left = getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid local wand_right = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid if wand_left ~= config.wand_id and wand_right ~= config.wand_id then doPlayerSendCancel(cid, "Voce deve estar equipado com uma ".. getItemNameById(config.wand_id) .." para usar este comando.") return true end if config.types[param] then setPlayerStorageValue(cid, 4561, config.types[param]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Sua wand ira atacar ".. param .. ".") else local str = "" for i, _ in pairs(config.types) do str = str .. ", ".. i end doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, "Os elementos disponiveis sao: ".. string.sub(str, 3, #str) ..".") end return true end Altere o wand_id conforme configurado em weapons. Agora vá em data/talkactions/talkactions.xml e coloque o seguinte conteúdo: <talkaction words="!elemento;/elemento" event="script" value="elementos.lua"/> Exemplo de funcionamento: Agradeço MaXwEllDeN pela ajuda.2 pontos
-
Vá em \htdocs\layouts\seulayout\layout.php Pesquisa por: <div id="forum" class="menuitem"> e desça até o primeiro </div> Logo após o final do código adicione <div id="eventos" class="menuitem"> <span onclick="MenuItemAction('eventos')"> <div class="MenuButton" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/button-background.gif);"> <div onmouseover="MouseOverMenuItem(this);" onmouseout="MouseOutMenuItem(this);"><div class="Button" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/button-background-over.gif);"></div> <span id="forum_Lights" class="Lights"> <div class="light_lu" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/green-light.gif);"></div> <div class="light_ld" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/green-light.gif);"></div> <div class="light_ru" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/green-light.gif);"></div> </span> <div id="forum_Icon" class="Icon" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-eventos.gif);"></div> <div id="forum_Label" class="Label" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/label-eventos.gif);"></div> <div id="forum_Extend" class="Extend" style="background-image: url(<?PHP echo $layout_name; ?>/images/general/plus.gif);"></div> </div> </div> </span> <div id="eventos_Submenu" class="Submenu"> <a href="?subtopic=forum"> <div id="submenu_eventos" class="Submenuitem" onmouseover="MouseOverSubmenuItem(this)" onmouseout="MouseOutSubmenuItem(this)"> <div class="LeftChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div> <div id="ActiveSubmenuItemIcon_forum" class="ActiveSubmenuItemIcon" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);"></div> <div id="ActiveSubmenuItemLabel_forum" class="SubmenuitemLabel">Eventos do Server</div> <div class="RightChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div> </div> </a> </div> </div> A imagem do botão deve estar como /images/menu/icon-eventos.gif2 pontos
-
[C++] Pokemon Ghost System
MasterDino reagiu a Tony Araujo por um tópico no fórum
[C++] Pokemon Ghost System Fala galera da Eks, hoje eu venho postar pra vocês um conteúdo que particularmente eu acho muito bom. Esse sistema faz com que o pokemon cuja o nome seja "Gastly, Haunter ou Gengar" (é possível adicionar mais pokemons), passe por dentro das paredes. Instalação: Vá em creature.cpp, e procure por void Creature::getPathSearchParams(const Creature* creature, FindPathParams& fpp) const { fpp.fullPathSearch = !hasFollowPath; E abaixo adicione: if(creature->isPlayerSummon()) { if(!creature->getMaster()->hasCondition(CONDITION_INFIGHT)) { if(creature->getName() == "Gengar") fpp.clearSight = false; if(creature->getName() == "Haunter") fpp.clearSight = false; if(creature->getName() == "Gastly") fpp.clearSight = false; } } Espero que façam bom uso Créditos: Tony Araújo (OrochiElf)1 ponto -
Mapa feito por AnneMotta: Mapa Battlefield.rar scan: https://www.virustot...sis/1346548669/ Imagens do mapa: Descrição: - O evento é automático e acontece em determinado dia e hora da semana - Logo após é aberto um teleport então apenar um número limitado de players entra no evento - São formados por dois times, os "Black Assassins" e os "Red Barbarians" - Os times são balanceados automaticamente, quando o último jogador entra, esse teleport é fechado e depois de 5 minutos o evento começa, os 5 minutos são para os players ter tempo de planejar um ataque. - O sistema tem por finalidade matar todos do time inimigo, e os players que sobreviverem recebem um prêmio. Bônus: - Durante o evento é mostrado na tela somente dos jogadores que estão no evento um placar de times. - Até o último player entrar no evento, ficam mandando broadcast dizendo quanto players faltam para dar inicio ao jogo. - Se o evento abrir e não atingir a meta de players colocada, o evento é finalizado e os players voltam para o templo. Lembre-se: - De colocar Pvp Tool na área - De colocar área NoLogout Imagens: Instalação: Data/Lib Data/CreatureScript Data/Globalevents Data/Movements Como configurar: Configuração dos Times: Configurar Datas do evento: Configuração Paredes:1 ponto
-
Global Full [CLIENTS COMPATÍVEIS] 10 e 11.5. [BUGS E DOWNLOAD] BAIXEM E REPORTEM EM: OTXGlobal Full [FEATURES] NEW DEPOT, NEW SPAWN, NEW CAST SYSTEM, NEW NPC SYSTEM VIA BANK BALANCE, NEW CRITICAL BOOST SYSTEM, NEW POTIONS, REWARD SYSTEM, PREY ... [MAPA] FULL GLOBAL MAP WITH FEYRIST TODAS CIDADES E NOVAS AREAS TODAS QUESTS FUNCIONANDO! [EVENTS] WAR-ANTIENTROSA [CONTATO] SKYPE: onjogos WHATSAPP: (66) 998427-4493 [Créditos]Tfs 1.2 Developers -Zbizu - Pitis91 - MatheusMkalo - Gesior - Lundrial - M4G0 - Fish04k - Printer - Djarek - Ninjalulz - Slavidodo - Thexamx - Socket2810 - Ciroc -Absolute - Gordonbay - Mitsuig - Alissonfgp - Gunz - Bruno Minervino - Comedinha -Hirako - Maya - Mattyx14 – Darkjav - Viking Tibia1 ponto
-
onDropLoot(cid, item)
Soulviling reagiu a caotic por um tópico no fórum
Ola galera xtibianaaa. Event droploot acontece quando um monstro ou player dropa 1 item. Vamos la: Vá em creatureevent.cpp e 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; } Logo em seguida coloque: 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; } Procure: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; Coloque em seguida: else if(tmpStr == "droploot") m_type = CREATURE_EVENT_DROPLOOT; Logo apos procure: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; Coloque abaixo: case CREATURE_EVENT_DROPLOOT: return "onDropLoot"; Procure: case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; Coloque embaixo: 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; } } Coloque logo apos: 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; } } Vá em creatureevent.h e procure:CREATURE_EVENT_PREPAREDEATH, Coloque abaixo: CREATURE_EVENT_DROPLOOT Procure: uint32_t executeTarget(Creature* creature, Creature* target); Coloque abaixo: uint32_t executeDropLoot(Creature* creature, Item* item); Vá em player.h na função: void Player::dropLoot(Container* corpse) Troque por esta função: 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]); } } } } Vá em monster.cpp e procure: 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()); } Evento em uso: 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 end1 ponto -
(7.6) Armia 6.6.6
EugenioGmD reagiu a FelipeXT por um tópico no fórum
Olá Xtibianos Hoje venho postar mais um otserver 7.6, Armia 6.6.6 scan, print e down abaixo! Prints ► Download e Scan Otserv! » Scan:https://www.virustotal.com/pt/file/9a11bfa99717f9c72d13eac234a1e986cb692a2ae4ea2e715c9a27cddcf2ae24/analysis/1431723771/ » Download:http://www.mediafire.com/download/r75nxlp5zi4hn8j/ARMIA_6.6.6.rar ► Atençao! Evite baixar OTservers sem scans.1 ponto -
1 ponto
-
1 ponto
-
Conteúdo aprovado, muito obrigado por compartilhar conosco.1 ponto
-
Subistitua https://mega.nz/#!Zo5lGSqY!VVTi4_eSAXNpeiuJA3WnfqG29oovKfnX1kJir17Wrsg Edite a imagem em /images/menu/label-eventos.gif Crie um arquivo com o mesmo nome do gif acima1 ponto
-
Stream Live tfs 1.0 e 1.2
DeCarvalho reagiu a Masterlokinhon por um tópico no fórum
<globalevent name="streamLoadMap" type="startup" script="streamloadmap.lua"/> <globalevent name="streamLoadPlayer" interval="1000" script="streamloadplayer.lua"/> Você colocou certinho ? da uma olhada no mysql vai no stream_map ve se tem alguma coisa lah ? Abre o localhost/stream, vê se vai aparecer algum erro e se vai ficar preto tbm ?1 ponto -
Stream Live tfs 1.0 e 1.2
DeCarvalho reagiu a Masterlokinhon por um tópico no fórum
1 ponto -
Stream Live tfs 1.0 e 1.2
DeCarvalho reagiu a Masterlokinhon por um tópico no fórum
Posta um print pra eu ver. você deu o include e configuro o mysql.php certinho ?1 ponto -
Qualquer bug é so fala. É um movement: .lua -- Do not remove the credits -- -- [MOVEMENT] Porta que abre automáticamente -- -- Developed by Rigby (João Vitor) -- -- Xtibia.com -- local porta = {7777, 8888, 9999} -- porta fechada, porta meio aberta, porta aberta local pos = {x = 1063, y = 1033, z = 7} -- local onde vai fica a porta local delay = 100 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada local action = 5555 -- action que ta no .xml, se muda la vai ter que muda aqui também function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getTileItemById(pos, porta[1]).uid > 0 then for i = 1, 2 do addEvent(function() doTransformItem(getTileItemById(pos, i == 1 and porta[1] or porta[2]).uid, porta[i + 1]) 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() doTransformItem(getTileItemById(pos, i == 1 and porta[3] or porta[2]).uid, porta[i == 1 and 2 or 1]) end, i * delay) end end end return true end .xml <movevent type="StepIn" actionid="5555" event="script" value="Nomedoscript.lua"/> <movevent type="StepOut" actionid="5555" event="script" value="Nomedoscript.lua"/>1 ponto
-
Stream Live tfs 1.0 e 1.2
DeCarvalho reagiu a Masterlokinhon por um tópico no fórum
Vlw DkAngel, aconteceu alguma erro na hora de abrir o ot-server ? ou no site? talvez funcione no 1.2 vou da um olhada acho que as função são as mesmas.1 ponto -
Avatar < Original https://riffsofwisdom.files.wordpress.com/2012/03/stevie_ray_vaughan.jpg1 ponto
-
faço as palavras do Benny as minhas1 ponto
-
Realmente. VOcê tem talento, bro Continue postando1 ponto
-
[ Bug ] Otclient, Com Video
Developer Berg reagiu a nociam por um tópico no fórum
Como posso de explicar é alguma informação a mais que o servidor ta mandando e o client não ta lendo. Faz um teste abre o seu arquivo things. lua e exclua essas opção se tiver se nao tiver coloque se nao for isso nao sei o que pode ser. g_game.enableFeature(GameMagicEffectU16)1 ponto -
pq ta fazendo pelo nome? acessa pelo id do player que não tem erro local coNdConf = { needPz = true, -- Precisa estar em Pz pra resetar? [true, false] needPa = false, -- Precisa ser Premium Account Pra resetar? [true, false] withe = false, -- Players com Pk Withe podem resetar? [true, false] red = false, -- Players com Pk Red pode resetar? [true, false] battle = false, -- Players precisão estar sem battle pra resetar? [true, false] teleport = true, -- Teleportar Player para o templo após resetar? [true, false] look = true, -- Aparecer Resets no Look do Player? [true, false] resetConf = { Level = 350, -- Level Necessário para Resetar. [Valor] backLvl = 100 -- Level que voltará após o Reset. [Valor] } } function getPlayerReset(cid) local check = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..getPlayerGUID(cid)) return check:getDataInt("reset") <= 0 and 0 or check:getDataInt("reset") end function onSay(cid, words, param) local resetValue = getPlayerReset(cid) + 1 if getPlayerLevel(cid) < coNdConf.resetConf.Level then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return true elseif coNdConf.needPz and not getTilePzInfo(getCreaturePosition(cid)) then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar em Protection Zone Para Resetar. -") return true elseif coNdConf.needPa == true and not isPremium(cid) then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa ser Premium Account para Resetar. -") return true elseif not coNdConf.withe and getCreatureSkullType(cid) == 3 then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Withe. -") return true elseif not coNdConf.red and getCreatureSkullType(cid) == 4 then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Red. -") return true elseif coNdConf.battle and getCreatureCondition(cid, CONDITION_INFIGHT) then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar sem Battle para Resetar. -") return true end doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doRemoveCreature(cid) db.query("UPDATE `players` SET `reset` = " .. resetValue .. ", `level` = "..coNdConf.resetConf.Level..", `experience` = "..getExperienceForLevel(coNdConf.resetConf.Level)..", `description` = "..(coNdConf.look and "[Resets: "..resetValue.."]" or "").." WHERE `id`= "..getPlayerGUID(cid)) return true end1 ponto
-
Source Linux vs Windows
roriscrave reagiu a Bruno por um tópico no fórum
Tem vários tutoriais ensinando a como fazer man...quando você abre o arquivo no dev, ele já tem algumas libs, as que não tem, precisa baixar, tudo você acha naquela parte de downloads, nas funcionalidades do próprio dev.1 ponto -
Substitiu ai local effectt = 35 -- coloque o efeito que você que local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, 10 * 60 * 1000) -- 10 minutes setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, 3) setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, -10) setConditionParam(condition, CONDITION_PARAM_BUFF) function onUse(cid, item, fromPosition, itemEx, toPosition) if(not isSorcerer(cid) and not isDruid(cid)) then doCreatureSay(cid, "Only sorcerers and druids may drink this fluid.", TALKTYPE_ORANGE_1, cid) return true end doAddCondition(cid, condition) doSendMagicEffect(fromPosition, CONST_ME_MAGIC_RED) doRemoveItem(item.uid) doCreatureSay(cid, "You feel smarter.", TALKTYPE_ORANGE_1, cid) effect(cid, effectt) for a = 1, (10 * 60) do addEvent(effect, a * 1000, cid, effectt) end return true end function effect(cid, effect) if not isCreature(cid) then return true end doSendMagicEffect(getThingPos(cid), effect) return true end1 ponto
-
Global 10/11.5 + OtherWorld + Hearth of Destruction Quest+ Eventos
Administrador reagiu a GOD Bon por um tópico no fórum
Amigo compilei para você e deixei já pronto para rodar. Funcionou normalmente aqui. Um REP+ como feedback. Link do Global 32 Bits no servidor mega https://mega.co.nz/#!Q0oEHS6S!-T3qgSbFFBxC6-DJBxDKSyiz5g8YklqbnR5sfCBuswE @MitSuig Se desejar anexar ao tópico deixo aqui minha contribuição. Atenciosamente, Bon1 ponto -
onOpenContainer(cid, item)
Soulviling reagiu a caotic por um tópico no fórum
Eae galera xtibiaanna! Desenvolvi o evento OpenContainer para sair da configs do actions afinal e necessario especificar o id do item e isto limita muito, Vá em creatureevents.cpp e procure else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; e coloque isto embaixo : else if(tmpStr == "opencontainer") m_type = CREATURE_EVENT_OPENCONTAINER; Continuando procure: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; E coloque seguidamente: case CREATURE_EVENT_OPENCONTAINER: return "onOpenContainer"; Continuado creatureevents.cpp procure: case CREATURE_EVENT_KILL: return "cid, target, lastHit"; E coloque embaixo: case CREATURE_EVENT_OPENCONTAINER: return "cid, item"; EMBAIXO DA FUNÇÃO uint32_t CreatureEvent::executeOutfit(Creature* creature, const Outfit_t& old, const Outfit_t& current) Coloque: uint32_t CreatureEvent::executeOpenContainer(Player* player, Container* container) { //onOpenContainer(cid, container) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", container, env->addThing(container)); 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)); LuaScriptInterface::pushThing(L, container, env->addThing(container)); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeThink] Call stack overflow." << std::endl; return 0; } } Agora em creatureevents.h procure: uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Embaixo coloque: uint32_t executeOpenContainer(Player* player, Container* container); Procure em creatureevents.h: CREATURE_EVENT_DEATH, Coloque embaixo: CREATURE_EVENT_OPENCONTAINER, Vá em action.cpp e procure: if(Container* container = item->getContainer()) { if(container->getCorpseOwner() && !player->canOpenCorpse(container->getCorpseOwner()) && g_config.getBool(ConfigManager::CHECK_CORPSE_OWNER)) return RET_YOUARENOTTHEOWNER; Coloque emabaixo: bool deny = false; CreatureEventList talkEvents = player->getCreatureEvents(CREATURE_EVENT_OPENCONTAINER); for(CreatureEventList::iterator it = talkEvents.begin(); it != talkEvents.end(); ++it) { if(!(*it)->executeOpenContainer(player, container)) { deny = true; } }1 ponto -
Anonymous Channel
Soulviling reagiu a comedinhasss por um tópico no fórum
Nome: Anonymous Channel Versão: 2.0 Suportada: Tfs 0.3 e 0.4 Descrição: Quer atender o servidor mais sem ser descoberto? Mas quer configurar isso pelo config.lua? Eis a solução Em configmanager.cpp procure: m_confNumber[PACKETS_PER_SECOND] = getGlobalNumber("packetsPerSecond", 50); Abaixo adicione: m_confNumber[ANONYMOUS_CHANNEL] = getGlobalNumber("gmAnonymousInChannel", 0); Em configmanager.h procure: PACKETS_PER_SECOND, Abaixo adicione: ANONYMOUS_CHANNEL, Em game.cpp procure: case MSG_CHANNEL: { if(channelId == CHANNEL_HELP) { if(player->hasFlag(PlayerFlag_TalkOrangeHelpChannel)) type = MSG_CHANNEL_HIGHLIGHT; if(player->hasFlag(PlayerFlag_CanTalkRedChannel)) type = MSG_GAMEMASTER_CHANNEL; } break; } Substitua por: case MSG_CHANNEL: { if(channelId == CHANNEL_HELP) { if(player->hasFlag(PlayerFlag_TalkOrangeHelpChannel)) type = MSG_CHANNEL_HIGHLIGHT; if(player->hasFlag(PlayerFlag_CanTalkRedChannel)) type = MSG_GAMEMASTER_CHANNEL; if(g_config.getNumber(ConfigManager::ANONYMOUS_CHANNEL) == 1) { if(player->hasFlag(PlayerFlag_CanTalkRedChannelAnonymous)) { if(text.length() < 251) return g_chat.talk(player, type, text, channelId, statementId, true); } } } if(g_config.getNumber(ConfigManager::ANONYMOUS_CHANNEL) == 2) { if(player->hasFlag(PlayerFlag_CanTalkRedChannelAnonymous)) { if(text.length() < 251) return g_chat.talk(player, type, text, channelId, statementId, true); } } break; } Em config.lua adicione: gmAnonymousInChanel = 0 Configurando: gmAnonymousInChannel modifique para = 0 - Normal; 1 - Help Channel; 2 - All channels Créditos: Comedinha Outros fóruns (Versão antiga)1 ponto -
Vlw mesmo manin Fiz isso pra ajudar os iniciantes.1 ponto
-
Addon Bonus
MonsterB0SS reagiu a JulioNakanishi por um tópico no fórum
Não sei se aqui é o lugar certo, mas ta ai; Sistema de bonus quando adquiri o outfit full Testado apenas em 8.60 Vá em PastaDoSeuOt/data/XML/outfits e mude: <outfit id="1"> <list gender="0" lookType="136" name=" Citizen "> <attribute speed="10"/> <stats maxHealth="100"/> </list> <list gender="1" lookType="128" name=" Citizen "> <attribute speed="10"/> <stats maxHealth="100"/> </list> </outfit> <outfit id="2"> <list gender="0" lookType="137" name=" Hunter "> <skills dist="3"/> </list> <list gender="1" lookType="129" name=" Hunter "> <skills dist="3"/> </list> </outfit> <outfit id="3"> <list gender="0" lookType="138" name=" Mage "> <stats magLevel="2"/> <stats maxMana="200"/> </list> <list gender="1" lookType="130" name=" Mage "> <stats magLevel="2"/> <stats maxMana="200"/> </list> </outfit> <outfit id="4"> <list gender="0" lookType="139" name=" Knight "> <skills sword="3"/> </list> <list gender="1" lookType="131" name=" Knight "> <skills sword="3"/> </list> </outfit> <outfit id="5" premium="yes"> <list gender="0" lookType="140" name=" Noblewoman "> <skills club="3"/> </list> <list gender="1" lookType="132" name=" Nobleman "> <skills club="3"/> </list> </outfit> <outfit id="6" premium="yes"> <list gender="0" lookType="141" name=" Summoner "> <stats magLevel="3"/> <stats maxMana="200"/> </list> <list gender="1" lookType="133" name=" Summoner "> <stats magLevel="2"/> <stats maxMana="200"/> </list> </outfit> <outfit id="7" premium="yes"> <list gender="0" lookType="142" name="Warrior"> <skills melee="3"/> </list> <list gender="1" lookType="134" name="Warrior"> <skills melee="3"/> </list> </outfit> <outfit id="8" premium="yes"> <list gender="0" lookType="147" name="Barbarian"> <skills axe="5"/> <skills sword="2"/> <skills club="2"/> <stats maxHealth="200"/> </list> <list gender="1" lookType="143" name="Barbarian"> <skills axe="3"/> <skills sword="2"/> <skills club="2"/> <stats maxHealth="200"/> </list> </outfit> <outfit id="9" premium="yes"> <list gender="0" lookType="148" name="Druid"> <stats magLevel="3"/> <absorb percentPoison="5"/> </list> <list gender="1" lookType="144" name="Druid"> <stats magLevel="3"/> <absorb percentPoison="5"/> </list> </outfit> <outfit id="10" premium="yes"> <list gender="0" lookType="149" name="Wizard"> <stats magLevel="1"/> <stats maxHealth="100"/> <stats maxMana="200"/> <absorb percentDeath="5"/> </list> <list gender="1" lookType="145" name="Wizard"> <stats magLevel="1"/> <stats maxHealth="100"/> <stats maxMana="200"/> <absorb percentDeath="5"/> </list> </outfit> <outfit id="11" premium="yes"> <list gender="0" lookType="150" name="Oriental"> <stats maxHealth="200"/> <stats maxMana="200"/> <attribute speed="50"/> </list> <list gender="1" lookType="146" name="Oriental"> <stats maxHealth="200"/> <stats maxMana="200"/> <attribute speed="50"/> </list> </outfit> <outfit id="12" premium="yes"> <list gender="0" lookType="155" name="Pirate"> <stats maxHealth="100"/> <skills club="5"/> </list> <list gender="1" lookType="151" name="Pirate"> <stats maxHealth="100"/> <skills club="5"/> </list> </outfit> <outfit id="13" premium="yes" > <list gender="0" lookType="156" name="Assassin"> <attribute speed="80"/> <skills dist="3"/> <stats magLevel="2"/> </list> <list gender="1" lookType="152" name="Assassin"> <attribute speed="80"/> <skills dist="3"/> <stats magLevel="2"/> </list> </outfit> <outfit id="14" premium="yes" > <list gender="0" lookType="157" name="Beggar"> <absorb percentAll="5"/> </list> <list gender="1" lookType="153" name="Beggar"> <absorb percentAll="5"/> </list> </outfit> <outfit id="15" premium="yes" > <list gender="0" lookType="158" name="Shaman"> <stats magLevel="2"/> <absorb percentEnergy="5"/> </list> <list gender="1" lookType="154" name="Shaman"> <stats magLevel="2"/> <absorb percentEnergy="5"/> </list> </outfit> <outfit id="16" premium="yes" > <list gender="0" lookType="252" name="Norsewoman"> <skills shielding="5"/> <absorb percentIce="15"/> <stats maxHealth="200"/> <skills club="3"/> <stats magLevel="2"/> </list> <list gender="1" lookType="251" name="Norseman"> <skills shielding="5"/> <absorb percentIce="15"/> <stats maxHealth="200"/> <skills club="3"/> <stats magLevel="2"/> </list> </outfit> <outfit id="17" premium="yes" > <list gender="0" lookType="269" name="Nightmare"> <skills shielding="5"/> <absorb percentPhysical="15"/> </list> <list gender="1" lookType="268" name="Nightmare"> <skills shielding="5"/> <absorb percentPhysical="15"/> </list> </outfit> <outfit id="18" premium="yes"> <list gender="0" lookType="270" name="Jester"> <stats maxMana="100"/> <attribute speed="50"/> <stats maxHealth="100"/> </list> <list gender="1" lookType="273" name="Jester"> <stats maxMana="100"/> <attribute speed="50"/> <stats maxHealth="100"/> </list> </outfit> <outfit id="19" premium="yes"> <list gender="0" lookType="279" name="Brotherhood"> <stats magLevel="3"/> <absorb percentDeath="5"/> <stats maxHealth="100"/> </list> <list gender="1" lookType="278" name="Brotherhood"> <stats magLevel="3"/> <absorb percentDeath="5"/> <stats maxHealth="100"/> </list> </outfit> <outfit id="20" premium="yes" > <list gender="0" lookType="288" name="Demonhunter"> <attribute speed="10"/> <stats maxHealth="300"/> <absorb percentFire="5"/> </list> <list gender="1" lookType="289" name="Demonhunter"> <attribute speed="10"/> <stats maxHealth="300"/> <absorb percentFire="5"/> </list> </outfit> <outfit id="21" premium="yes" > <list gender="0" lookType="324" name="Yalaharian"> <attribute speed="20"/> <stats magLevel="2"/> <stats maxHealth="250"/> <stats maxMana="250"/> </list> <list gender="1" lookType="325" name="Yalaharian"> <attribute speed="20"/> <stats magLevel="2"/> <stats maxHealth="250"/> <stats maxMana="250"/> </list> </outfit> <outfit id="22" premium="yes"> <list gender="0" lookType="336" name="Warmaster"> <stats maxMana="200"/> <stats maxHealth="200"/> <stats magLevel="2"/> <absorb percentHoly="5"/> </list> <list gender="1" lookType="335" name="Warmaster"> <stats maxMana="200"/> <stats maxHealth="200"/> <stats magLevel="2"/> <absorb percentHoly="5"/> </list> </outfit> Explicação: Vermelho: nome do outfit Verde: o bonus que vai dar com o outfit full não tem muito oque explicar,é só mudar os add que você quiser. Deixarei o download do outfits.xml completo (com os bonus) para quem quiser: Outfits.xml(4Shared) - (Foi testado apenas em 8.6) Scan1 ponto