Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/25/15 em %

  1. gabrielbsales

    Aumentar Limite De Efeitos

    Bom, todos acham 255 efeitos muito pouco, né? Então tá aí, pra quem quiser aumentar esse limite pra 65,535. Mas como nem tudo é perfeito, pra fazer isso você precisará estar usando OTClient e também ter as sources do seu servidor. PS: Só testei em 8.54 Vamos ás edições do servidor: No protocolgame.cpp: No protocolgame.h: No game.cpp: No game.h: No player.h: Bom, agora falta editar no const.h: Está quase pronto, agora, falta fazer o client aceitar esses dados, pra isso, em otclient/modules/game_things/things.lua, em baixo de: local version = g_game.getClientVersion() Adicine: g_game.enableFeature(GameMagicEffectU16) Pronto, se fizer tudo corretamente, funcionará \o Bom, Lordbaxx disponibilizou a sua source(de poketibia) com o limite estendido: Créditos: Featzen(100%)
    10 pontos
  2. RigBy

    Limite de player por sala

    Limite de player por sala Introdução: Esse script pode ser bem útil para baiak onde as salas tão sempre cheia de player upando ou então para eventos. O script simplesmente checa a quantidade de player que tem dentro da sala, caso não tenha atingido o limite o player pode entrar caso não, manda uma mensagem falando que a sala esta lotada. Exemplo de uso: pode servir até para a anihilator ou demon aok, invitando que um segundo time entre na sala antes que o primeiro acabe. Caso a sala esteja lotada. Caso não. Em data/movement/script, crie LimiteArea.lua e adicione. Em movement/movement.xml Adicione essa tag E depois adicionar o actionid no piso ou teleport pelo mapa editor. O script é fácil de se configurar mas caso tenha algum problema pode posta ai que eu vou ajuda. Caso você adicione mais locais você terá que adicione na tag também.
    4 pontos
  3. Parabéns pelo conteúdo! Já trabalhei neste website. Quero deixar bem claro um erro que este site possuí. Programei para o servidor ChineloBR, e perante várias invasões o administrador resolveu comprar um website, pois bem. Este é o website Abra o pages/account.php, lá procure por "luan", ou apenas procure o código: elseif($action == 'luan') { $player = stripslashes(ucwords(strtolower(trim($_REQUEST['character'])))); $points = $_POST['points']; if(empty($player)) { ECHO '<div class="well"> <h2> Add Premium-points </h2> <form action="" method="post"> <B> Enter Character Name: </B> <input type="text" name="character"><br> <B> Enter Points Amount:</B> <input type="text" name="points"><br><br> <input type="submit" value="Submit"> </form></center><form action="adminpanel" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form> </DIV>'; } else { $player_data = $SQL->query("SELECT * FROM `players` WHERE `name` = '".$player."';")->fetch(); $SQL->query("UPDATE `accounts` SET `premium_points` = `premium_points` + '".$points."' WHERE `id` = '".$player_data['account_id']."'"); ECHO '<div class="well"> <b><center>'.$points.' Premium Points added to the account of <i>'.$player.'</i> ! </b></center><br> <form action="adminpanel" method="post" ><input name="submit" type="submit" value="Back" title="Back"/></form> </div>'; } } Encontrei este "sistema" feito pelo autor do website para se valorizar meio servidores novatos e veteranos meio a confiança do website. Sistema basicamente libera a quem acessa o link http://site/account&action=luan permissão toda e por completa a adição de pontos no servidor. Fiquem atentos! Website é de confiança? Então procure se informar do autor. Este eu posso afirmar que não é.
    4 pontos
  4. Boa @@VictorWEBMaster, parabéns pela atitude. Quanto ao membro que criou o site, sem o que falar, o coordenadorzinho vendedor do outro fórum, difícil, precário, nojento.
    3 pontos
  5. Em action .lua local items = {2650, 2674, 7752, 4343, 5345, 4345} -- items que vai ganha function onUse(cid, item, fromPosition, itemEx, toPosition) for i,_ in pairs(items) do doPlayerGiveItem(cid, items[i], 1) doRemoveItem(item.uid, 1) end return true end .xml - tag <action itemid="ITEM QUE VAI CLICAR" event="script" value="Nomedoscript.lua"/>
    2 pontos
  6. Deixa do jeito que está agora, está certo.
    2 pontos
  7. Piabeta Kun

    Novos items no test server privado!

    Bem galera, estou aqui de volta trazendo algumas novidades do mundo tibiano, os novos itens serão postados a imagem abaixo e terão suas descrições listadas na ordem da imagem! 06:00 You see a fur armor (Arm:11, protection earth +5%, ice +5%). It can only be wielded properly by players of level 50 or higher. It weighs 49.00 oz. 06:00 You see a wolf backpack (Vol:20). It weighs 18.00 oz. 06:00 You see a wereboar loincloth (Arm:6). It weighs 13.00 oz. 06:00 You see badger boots (Arm:2, speed +10). It can only be wielded properly by players of level 60 or higher. It weighs 12.00 oz. 06:00 You see oriental shoes (Arm:2, speed +15). It can only be wielded properly by sorcerers and druids of level 80 or higher. It weighs 5.00 oz. e o novo helmet que só consegui ver no market! (dizem por ai que ele poderá ser encantado em 4 tipo de elementos) Trago mais novidades do test server em breve!
    2 pontos
  8. gabrielbsales

    Smeargle System[PXG]

    Bom, como um individuo(Vudi) não sabe cumprir o que fala, vou postar o sistema aqui.(não cabe ao post explicar aqui) Bom, aqui está o smeargle system, igual o da PxG. Vamos lá. 1 - Vá na pasta Lib, substitua seu cooldown bar.lua por isso: 2 - Ainda no Lib, no fim(depois do ultimo end) do Some Functions.lua, adicione isso: 3 - Agora no order.lua, do Actions, em baixo de: Adicione: 4 - Se seu servidor ja tiver os spells, sketch 1, sketch 2... Substitua por esses(data/lib/pokemon moves.lua): Se não, use os mesmos acima, não esqueça de adicionar no spells.xml. 5 - Agora, vá em talkactions/scripst, abra o move1.lua e substitua: Por Depois: Por: Pronto, se tiver feito tudo certo, funcionará. Como ficará: Como usar: Créditos: Eu(Todo o script)
    1 ponto
  9. 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 Tibia
    1 ponto
  10. Baiak Extreme OTProjects 0.7 - O MELHOR BAIAK! (8.60) Servidor feito pela Otprojects. Fala galera estou aqui para apresentar o novo Baiak Extreme, A OTProjects trabalhou muito tempo neste servidor. Ele custava cerca de 35 Reais na loja da OTprojects, mas foi liberado de graça e eu estou repassando pra vocês. Este servidor é um dos Mapas Baiak mais completos, possui WoE, Dota, Coliseum, Zombie e outros Eventos. Tá esperando o que? Confira logo! Cidades: ├ Baiak City ├ Desert City ├ Hydraland ├ Yalahar (Cidade VIP) └ Thais Imagem #1: Templo - Baiak City Imagem #2: Glacial Area Imagem #3: Baiak City O Que Contêm no Servidor: ├ Eventos Exclusivos : ├DotA ├ WoE ├ Coliseum ├ Zombie Event ├ Yalahar como City VIP ├ City do Baiak Totalmente Reformulada. ├ Novos Teleports e Quests ├ War Castle ├ Novos NPC'S ├ War System. └ TFS 0.4 DEV Rev: 3777 Já Compilado. Lista Das Principais Quests (Todas Funcionando 100%): ├ The Annihilator Quest ├ Demon Helmet Quest ├ Firewalker Boots Quest ├ The Inquisition Quest ├ The Pits of Inferno Quest ├ The Demon Oak Quest └ In Service of Yalahar Quest Update 0.7: - Sem o Bug dos Stages - Com TFS 0.4 REV 3884 - O MELHOR PARA WINDOWS - Crashes no Console Removidos - Agora em MYSQL, Recomendo que usem o Xampp e o Gesior para fazer o Site. Senha do God: god/god Como Abrir o Mapa Caso dê Erro: Vai no RME Aperta em File>New>Import Map e Selecione o Mapa do Baiak Extreme. Download & Scan ATENÇÃO: UTILIZE MYSQL para Melhor Resultado! Download Os vírus acusados estão no Distro, o Servidor está Limpo! ATENÇÃO! Para o MELHOR FUNCIONAMENTO DO OT, Recomendo que USEM MYSQL! Créditos:
    1 ponto
  11. 1 ponto
  12. caotic

    TV System by caotic

    Eae galeerrra xtibiana. Venho disponibilizar o famoso sistema de televisão poketibiano completo o sistema foi feito para ambos os clients tibianos. O sistema permite você assistir outro players jogando assim você fica sem usar itens,falar(so pm), se movimentar e etc... Vamos la: Vá em luascript.cpp e procure: int32_t LuaScriptInterface::luaGetTopCreature(lua_State* L) { //getTopCreature(pos) PositionEx pos; popPosition(L, pos); ScriptEnviroment* env = getEnv(); Tile* tile = g_game.getTile(pos); if(!tile) { pushThing(L, NULL, 0); return 1; } Thing* thing = tile->getTopCreature(); if(!thing || !thing->getCreature()) { pushThing(L, NULL, 0); return 1; } pushThing(L, thing, env->addThing(thing)); return 1; } E coloque embaixo: int32_t LuaScriptInterface::luaGetAllsTvs(lua_State* L) { //getAllsTvs(cid) ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Tvlist::iterator it; it = player->tv.begin(); lua_newtable(L); uint32_t tableplayers = 1; for(uint32_t i = 1; it != player->tv.end(); ++it, ++i) { Player* players = env->getPlayerByUID(*it); if (players) { lua_pushnumber(L, tableplayers); lua_pushnumber(L, env->addThing(players)); pushTable(L); tableplayers = tableplayers+1; } } return 1; } int32_t LuaScriptInterface::luaSetPlayerTv(lua_State* L) { ScriptEnviroment* env = getEnv(); Player* player_tv = env->getPlayerByUID(popNumber(L)); Creature* creature = env->getCreatureByUID(popNumber(L)); if (!creature) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } Player* player = creature->getPlayer(); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if (!player_tv) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } player_tv->tv.push_back(player->getID()); SpectatorVec::iterator it; SpectatorVec list = g_game.getSpectators(player->getPosition()); Player* tmpPlayer = NULL; Condition* condition = NULL; if((condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_GAMEMASTER, -1, 0, false, GAMEMASTER_INVISIBLE))) { creature->setHideName(false); player->addCondition(condition); g_game.internalCreatureChangeVisible(creature, VISIBLE_GHOST_DISAPPEAR); for(it = list.begin(); it != list.end(); ++it) { if((tmpPlayer = (*it)->getPlayer()) && !tmpPlayer->canSeeCreature(player)) tmpPlayer->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF); } for(AutoList<Player>::iterator pit = Player::autoList.begin(); pit != Player::autoList.end(); ++pit) { if(!pit->second->canSeeCreature(player)) pit->second->notifyLogOut(player); } IOLoginData::getInstance()->updateOnlineStatus(player->getGUID(), false); if(player->isTrading()) g_game.internalCloseTrade(player); player->clearPartyInvitations(); if(player->getParty()) player->getParty()->leave(player); g_game.internalTeleport(player, player_tv->getPosition(), true); } lua_pushboolean(L, true); } int32_t LuaScriptInterface::luaDoSendChannelsTv(lua_State* L) { ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } player->sendChannelsDialog(true); lua_pushboolean(L, true); return 1; } int32_t LuaScriptInterface::luaDoRemovePlayerTv(lua_State* L) { ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); Player* creature = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } for(std::list<uint32_t>::iterator it = player->tv.begin(); it != player->tv.end(); ++it) { if ((*it) == creature->getID()) { Tvlist tv = player->tv; if (!creature) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Player* player_tv = creature->getPlayer(); if (!player) { return 1; } SpectatorVec::iterator its; SpectatorVec list = g_game.getSpectators(player_tv->getPosition()); Player* tmpPlayer = NULL; Condition* condition = NULL; creature->setHideName(false); if((condition = player_tv->getCondition(CONDITION_GAMEMASTER, CONDITIONID_DEFAULT, GAMEMASTER_INVISIBLE))) { IOLoginData::getInstance()->updateOnlineStatus(player_tv->getGUID(), true); for(AutoList<Player>::iterator pit = Player::autoList.begin(); pit != Player::autoList.end(); ++pit) { if(!pit->second->canSeeCreature(player_tv)) pit->second->notifyLogIn(player_tv); } for(its = list.begin(); its != list.end(); ++its) { if((tmpPlayer = (*its)->getPlayer()) && !tmpPlayer->canSeeCreature(player_tv)) tmpPlayer->sendMagicEffect(player_tv->getPosition(), MAGIC_EFFECT_TELEPORT); } player_tv->removeCondition(condition); g_game.internalCreatureChangeVisible(creature, VISIBLE_GHOST_APPEAR); *it = NULL; } } } lua_pushboolean(L, true); } Continuando em luascript.cpp procure: //doCreatureSay(uid, text[, type = SPEAK_SAY[, ghost = false[, cid = 0[, pos]]]]) lua_register(m_luaState, "doCreatureSay", LuaScriptInterface::luaDoCreatureSay); Coloque embaixo: //doRemovePlayerTv(cid, id) lua_register(m_luaState, "removePlayerTv", LuaScriptInterface::luaDoRemovePlayerTv); //getAllsTv() lua_register(m_luaState, "getTvs", LuaScriptInterface::luaGetAllsTvs); //setPlayerTv(cid, player) lua_register(m_luaState, "setPlayerTv", LuaScriptInterface::luaSetPlayerTv); //doSendChannelstTv(cid) lua_register(m_luaState, "doSendChannelsTv", LuaScriptInterface::luaDoSendChannelsTv); Em luascript.h procure: static int32_t luaGetPlayerParty(lua_State* L); Coloque embaixo: static int32_t luaGetAllsTvs(lua_State* L); static int32_t luaSetPlayerTv(lua_State* L); static int32_t luaDoSendChannelsTv(lua_State* L); static int32_t luaDoRemovePlayerTv(lua_State* L); Vamos agora em game.cpp: Procure: bool Game::playerSay(uint32_t playerId, uint16_t channelId, SpeakClasses type, const std::string& receiver, const std::string& text) E substitua função por esta nova função: bool Game::playerSay(uint32_t playerId, uint16_t channelId, SpeakClasses type, const std::string& receiver, const std::string& text) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; std::string str; if (player->getStorage(34421, str) && str == "true") { if (type == SPEAK_SAY) { player->getStorage(292924, str); player->sendTextMessage(MSG_STATUS_SMALL, str.c_str()); return false; } switch(type) { case SPEAK_WHISPER: return playerWhisper(player, text); case SPEAK_YELL: return playerYell(player, text); case SPEAK_PRIVATE: case SPEAK_PRIVATE_RED: case SPEAK_RVR_ANSWER: return playerSpeakTo(player, type, receiver, text); case SPEAK_CHANNEL_O: case SPEAK_CHANNEL_Y: case SPEAK_CHANNEL_RN: case SPEAK_CHANNEL_RA: case SPEAK_CHANNEL_W: { if(playerTalkToChannel(player, type, text, channelId)) return true; return playerSay(playerId, 0, SPEAK_SAY, receiver, text); } case SPEAK_BROADCAST: return playerBroadcastMessage(player, SPEAK_BROADCAST, text); case SPEAK_RVR_CHANNEL: return playerReportRuleViolation(player, text); case SPEAK_RVR_CONTINUE: return playerContinueReport(player, text); default: break; } internalCreatureSay(player, SPEAK_SAY, text, false); return false; } uint32_t muteTime = 0; bool muted = player->isMuted(channelId, type, muteTime); if(muted) { char buffer[75]; sprintf(buffer, "You are still muted for %d seconds.", muteTime); player->sendTextMessage(MSG_STATUS_SMALL, buffer); return false; } if(player->isAccountManager()) { player->removeMessageBuffer(); return internalCreatureSay(player, SPEAK_SAY, text, false); } if(g_talkActions->onPlayerSay(player, type == SPEAK_SAY ? CHANNEL_DEFAULT : channelId, text, false)) return true; if(!muted) { ReturnValue ret = RET_NOERROR; if(!muteTime) { ret = g_spells->onPlayerSay(player, text); if(ret == RET_NOERROR || (ret == RET_NEEDEXCHANGE && !g_config.getBool(ConfigManager::BUFFER_SPELL_FAILURE))) return true; } player->removeMessageBuffer(); if(ret == RET_NEEDEXCHANGE) return true; } switch(type) { case SPEAK_SAY: return internalCreatureSay(player, SPEAK_SAY, text, false); case SPEAK_WHISPER: return playerWhisper(player, text); case SPEAK_YELL: return playerYell(player, text); case SPEAK_PRIVATE: case SPEAK_PRIVATE_RED: case SPEAK_RVR_ANSWER: return playerSpeakTo(player, type, receiver, text); case SPEAK_CHANNEL_O: case SPEAK_CHANNEL_Y: case SPEAK_CHANNEL_RN: case SPEAK_CHANNEL_RA: case SPEAK_CHANNEL_W: { if(playerTalkToChannel(player, type, text, channelId)) return true; return playerSay(playerId, 0, SPEAK_SAY, receiver, text); } case SPEAK_PRIVATE_PN: return playerSpeakToNpc(player, text); case SPEAK_BROADCAST: return playerBroadcastMessage(player, SPEAK_BROADCAST, text); case SPEAK_RVR_CHANNEL: return playerReportRuleViolation(player, text); case SPEAK_RVR_CONTINUE: return playerContinueReport(player, text); default: break; } return false; } Continuando em game.cpp procure a função: ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) E substitua por esta função: ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) { const Position& currentPos = creature->getPosition(); Cylinder* fromTile = creature->getTile(); Cylinder* toTile = NULL; Position destPos = getNextPosition(direction, currentPos); if(direction < SOUTHWEST && creature->getPlayer()) { Tile* tmpTile = NULL; if(currentPos.z != 8 && creature->getTile()->hasHeight(3)) //try go up { if((!(tmpTile = map->getTile(Position(currentPos.x, currentPos.y, currentPos.z - 1))) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position(destPos.x, destPos.y, destPos.z - 1))) && tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID)) { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z--; } } else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position( destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z++; } } ReturnValue ret = RET_NOTPOSSIBLE; if((toTile = map->getTile(destPos))) ret = internalMoveCreature(NULL, creature, fromTile, toTile, flags); if(ret != RET_NOERROR) { if(Player* player = creature->getPlayer()) { player->sendCancelMessage(ret); player->sendCancelWalk(); } } Player* player = creature->getPlayer(); if (player) { Tvlist::iterator it; it = player->tv.begin(); for(uint32_t i = 1; it != player->tv.end(); ++it, ++i) { Player* players = getPlayerByID(*it); if (players) { internalTeleport(players, player->getPosition(), true, 0); } } } return ret; } Procure a função: bool Game::playerRequestChannels(uint32_t playerId) Substitua a função por: bool Game::playerRequestChannels(uint32_t playerId) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; player->sendChannelsDialog(false); return true; } Agora vamos a protocolgame.cpp e procure a função; void ProtocolGame::sendChannelsDialog(bool tv) E substitua por esta função: void ProtocolGame::sendChannelsDialog(bool tv) { NetworkMessage_ptr msg = getOutputBuffer(); std::string str; if(msg) { if (tv) { uint16_t bytes = 0; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { it->second->getStorage(22120, str); if (str == "true") { bytes = bytes+1; } } if (bytes < 1) { player->sendCancel("Não há nenhuma tv online"); return; } TRACK_MESSAGE(msg); msg->AddByte(0xAB); msg->AddByte(bytes); uint16_t id = 200; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { it->second->getStorage(22120, str); if (str == "true") { id = id+1; it->second->getStorage(12121, str); msg->AddU16(id); msg->AddString(str); } } return; } TRACK_MESSAGE(msg); msg->AddByte(0xAB); ChannelList list = g_chat.getChannelList(player); msg->AddByte(list.size()); for(ChannelList::iterator it = list.begin(); it != list.end(); ++it) { if(ChatChannel* channel = (*it)) { msg->AddU16(channel->getId()); msg->AddString(channel->getName()); } } } } Procure em protocolgame.h a seguinta declaração: void sendChannelsDialog(); Substitua por: void sendChannelsDialog(bool tv); Agora vamos em player.h e procure: void sendChannelsDialog() {if(client) client->sendChannelsDialog();} E substitua por: void sendChannelsDialog(bool tv) {if(client) client->sendChannelsDialog(tv);} Procure denovo em player.h: typedef std::list<Party*> PartyList; E adicione embaixo: typedef std::list<uint32_t> Tvlist; Continuando em player.h procure: AttackedSet attackedSet; Coloque embaixo: Tvlist tv; Vamos denovo a protocolgame.cpp e procure: if(player->isAccountManager()) { switch(recvbyte) { case 0x14: parseLogout(msg); break; case 0x96: parseSay(msg); break; default: sendCancelWalk(); break; } } Coloque embaixo: std::string str; if (player->getStorage(34421, str) && str == "true") { player->getStorage(292924, str); switch(recvbyte) { case 0x14: parseLogout(msg); break; case 0x96: parseSay(msg); break; case 0x97: // request channels parseGetChannels(msg); break; case 0x98: // open channel parseOpenChannel(msg); break; case 0x99: // close channel parseCloseChannel(msg); break; case 0x9A: // open priv parseOpenPriv(msg); break; case 0x1E: // keep alive / ping response parseReceivePing(msg); break; default: player->sendTextMessage(MSG_INFO_DESCR, str); break; } Seguidamente vá em creatureevent.cpp e procure: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; Coloque embaixo: else if(tmpStr == "selecttv") m_type = CREATURE_EVENT_SELECTTV; Procure depois: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; Coloque embaixo: case CREATURE_EVENT_SELECTTV: return "onSelectTv"; Procure: case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; Coloque embaixo: case CREATURE_EVENT_SELECTTV: return "cid, id"; Procure: uint32_t CreatureEvent::executeChannelJoin(Player* player, uint16_t channelId, UsersMap usersMap) { //onJoinChannel(cid, channel, users) 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; scriptstream << "local channel = " << channelId << std::endl; scriptstream << "local users = {}" << std::endl; for(UsersMap::iterator it = usersMap.begin(); it != usersMap.end(); ++it) scriptstream << "users:insert(" << env->addThing(it->second) << ")" << 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); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushnumber(L, channelId); UsersMap::iterator it = usersMap.begin(); lua_newtable(L); for(int32_t i = 1; it != usersMap.end(); ++it, ++i) { lua_pushnumber(L, i); lua_pushnumber(L, env->addThing(it->second)); lua_settable(L, -3); } bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeChannelJoin] Call stack overflow." << std::endl; return 0; } } Coloque embaixo: uint32_t CreatureEvent::executeSelectTv(Player* player, uint16_t id) { //onSelectTv(cid, id) 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; scriptstream << "local id = " << id << 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); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushnumber(L, id); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeChannelJoin] Call stack overflow." << std::endl; return 0; } } Vá em creatureevent.h e procure: CREATURE_EVENT_ATTACK, Coloque embaixo: CREATURE_EVENT_SELECTTV Procure continuando em creatureevent.h: uint32_t executeCombat(Creature* creature, Creature* target); Coloque embaixo: uint32_t executeSelectTv(Player* player, uint16_t id); Vá agora em game.cpp denovo e procure a função: bool Game::playerOpenChannel(uint32_t playerId, uint16_t channelId) Substitua a função por: bool Game::playerOpenChannel(uint32_t playerId, uint16_t channelId) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; if (channelId >= 200) { CreatureEventList tvEvents = player->getCreatureEvents(CREATURE_EVENT_SELECTTV); for(CreatureEventList::iterator it = tvEvents.begin(); it != tvEvents.end(); ++it) (*it)->executeSelectTv(player, channelId); return true; } ChatChannel* channel = g_chat.addUserToChannel(player, channelId); if(!channel) { #ifdef __DEBUG_CHAT__ std::cout << "Game::playerOpenChannel - failed adding user to channel." << std::endl; #endif return false; } if(channel->getId() != CHANNEL_RVR) player->sendChannel(channel->getId(), channel->getName()); else player->sendRuleViolationsChannel(channel->getId()); return true; } Vá em data/lib e crie um novo arquivo lua chamado tv system: names = {} storage_hastv = 22120 storage_watchtv = 34421 storage_nametv = 12121 storage_idwatchtv = 21213 storage_msgwatch = 292924 storage_namewatchtv = 21923 storage_save_group_id = 63732 smallerros = false ERROR_ID_NOT_FOUND = "ERROR\nPLAYER NOT FOUND\nSet Storage FALSE ON LOGIN" MSG_TV_SYSTEM = "Esta ação não e possivel você esta assistindo" MSG_CREATE_TV = "Parabéns, você criou sua TV " MSG_LOGOUT_TV = "Você saiu da tv " MSG_LOGOUT_TV_TOWN = "Você retornou a sua cidade " ID_ITEM_TV = 1949 ---- IMPORTANTE ID DA SUA CAM(CAMERA) MSG_WATCH_TV = "Você esta assitindo a uma tv" MSG_HAS_TV = "Você ja tem tv" MSG_NO_HAS_TV = "Você não tem tv" MSG_ENTER_PLAYER = "Um novo player entrou - " MININUM_STRING_CARACTER = 4 HAS_TV = "Você ja tem uma tv" MSG_DELETE_TV = "Você deletou sua channel com sucesso" MSG_WATCH_TV_ENTER_TV = "Você entrou na channel " NAME_WRONG = "Nome incorreto" MSG_HAS_NAME_TV = "Desculpe, ja existe uma tv com este nome escolha outro por favor" function setBooleanStorage(cid, storage, bool) if not bool then setPlayerStorageValue(cid, storage, -1) return true end setPlayerStorageValue(cid, storage, "true") return true end function checkFindStrings(str, array) for i=1, #array do if string.find(str, array[i]) then return true end end return false end function playerHasTv(cid) return getPlayerStorageValue(cid, storage_hastv) == "true" and true end function playerWatchTv(cid) return getPlayerStorageValue(cid, storage_watchtv) == "true" and true end function getTvOnlines() local t = {} local online = getPlayersOnline() for i=1, #online do if playerHasTv(online[i]) then table.insert(t, online[i]) end end return t end function getNamesTv(sep) local tvs = getTvOnlines() str = "" for i=1, #tvs do str = str..sep..getTvName(tvs[i]) end return str end function getIdByTvName(name) local tvs = getTvOnlines() for i=1, #tvs do if tvs[i] == name then return name end end return false end function stopWatchAllsPlayerTv(id) local onlines = getTvs(id) for i=1, #onlines do playerStopWatchTv(onlines[i]) end return true end function getNameTv(id) if not isPlayer(id) then print(ERROR_ID_NOT_FOUND) return false end local storage = getPlayerStorageValue(id, storage_nametv) if storage ~= -1 then return storage end return "" end function createNewTv(cid, name) if #name < MININUM_STRING_CARACTER or checkFindStrings(name, names) then doPlayerSendCancel(cid, NAME_WRONG) return false end local tvs = getTvOnlines() for i=1, #tvs do if getNameTv(tvs[i]) == name then doPlayerSendCancel(cid, MSG_HAS_NAME_TV) return false end end if playerHasTv(cid) then doPlayerSendCancel(cid, MSG_HAS_TV) return false end if playerWatchTv(cid) then doPlayerSendCancel(cid, MSG_WATCH_TV) return false end setBooleanStorage(cid, storage_hastv, true) setPlayerStorageValue(cid, storage_nametv, name) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_CREATE_TV..name) return true end function getTvNameById(id) if not isPlayer(id) then print(ERROR_ID_NOT_FOUND) return false end return getPlayerStorageValue(id, storage_nametv) end function playerWatchTv(cid, id) if not isPlayer(id) then if smallerros then print(ERROR_ID_NOT_FOUND) end return false end if playerHasTv(cid) then doPlayerSendCancel(cid, MSG_HAS_TV) return false end if playerWatchTv(cid) then doPlayerSendCancel(cid, MSG_WATCH_TV) return false end local name = getTvNameById(id) setBooleanStorage(cid, storage_watchtv, true) setPlayerStorageValue(cid, storage_msgwatch, MSG_TV_SYSTEM) setPlayerStorageValue(cid, storage_idwatchtv, id) setPlayerStorageValue(cid, storage_namewatchtv, name) setPlayerStorageValue(cid, storage_save_group_id, getPlayerGroupId(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_WATCH_TV_ENTER_TV) doPlayerSendTextMessage(id, MESSAGE_STATUS_CONSOLE_BLUE, MSG_ENTER_PLAYER..getCreatureName(cid)) setPlayerTv(cid, id) return true end function playerStopWatchTv(cid) local id = getPlayerStorageValue(cid, storage_idwatchtv) local name = getPlayerStorageValue(cid, storage_namewatchtv) local town = getPlayerTown(cid) local namet = getTownName(town) local post = getTownTemplePosition(town) if getPlayerStorageValue(cid, storage_watchtv) ~= "true" then return true end removePlayerTv(cid, id) setBooleanStorage(cid, storage_watchtv, false) setPlayerStorageValue(cid, storage_idwatchtv, -1) setPlayerStorageValue(cid, storage_namewatchtv, -1) setPlayerGroupId(cid, getPlayerStorageValue(cid, storage_save_group_id)) doTeleportThing(cid, post) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_LOGOUT_TV..name) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_LOGOUT_TV_TOWN..namet) return true end function deleteTv(cid) if getPlayerStorageValue(cid, 22120) ~= "true" then return false end stopWatchAllsPlayerTv(cid) setBooleanStorage(cid, storage_hastv) setPlayerStorageValue(cid, storage_nametv, -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_DELETE_TV) return true end Agora vamos em actions e crie um arquivo lua chamado tv e coloque: function onUse(cid, item, fromPosition, itemEx, toPosition) doSendChannelsTv(cid) end Vá em actions.xml e coloque a seguinte configurando com o id da sua tv: Agora vamos em talkactions e crie um novo arquivo lua chamado delete e coloque isto: function onSay(cid, words, param, channel) deleteTv(cid) return true end Agora vamos em talkactions.xml e coloque a seguinte tag: <talkaction words="/delete" event="script" value="delete.lua"/> Agora vamos a creaturescripts e crie um arquivo lua chamado createTv e coloque: function onTextEdit(cid, it:em, newText) if item.itemid == ID_ITEM_TV then createNewTv(cid, newText) return true end return true end Crie outro chamado de tv e coloque: function onSelectTv(cid, id) local tv = getTvOnlines() local idstarter = 200 for i=1, #tv do local tv = tv[i] local sub_id = i+idstarter if sub_id == id then playerWatchTv(cid, tv) end end return true end Crie outro chamado de tvlogout : function onLogout(cid) if isPlayer(cid) then deleteTv(cid) playerStopWatchTv(cid) end return true end Vá em creaturescripts.xml e coloque as seguintes as tags: <event type="textedit" name="newTv" event="script" value="createTv.lua"/> <event type="selecttv" name="selecttv" event="script" value="tv.lua"/> <event type="logout" name="tvlogout" event="script" value="tvlogout.lua"/> Vá em data/xml/group.xml e abra o arquivo e coloque o novo group: <group id="8" name="Tv" flags="3845069447162" customFlags="2097151" access="1" violationReasons="4" nameViolationFlags="2"/> Video do sistema em execução: E recomendavel NUNCA modificar as storages porques estão ligados aos codigos. Para mudar o id da camera e so mudar a variavel ID_ITEM_TV Para deletar uma tv diga o comand /delete
    1 ponto
  13. Lordbaxx

    [Sprites] Paredes e pisos PxG (NEW)

    Bom as sprites das paredes das houses do PxG quem quiser utilizar, foi um amigo e membro da equipe do meu projeto quem as cortou e arrumou não as mandarei prontas mas quem quiser utilizar ai está: Para uso público, basta cortar e adicionar. Créditos: PxG DFTR The Nexo
    1 ponto
  14. Fala manolos e manolas Meu nome é Felipe sou de Curitiba e nasci em 92. Talvez a galera me conheça mais por moskitinho meu nick aqui no fórum; ou ainda pelo Life Thread do Belfahar Swot, que graças à vocês foi sucesso enquanto durou. Resumindo muito minha história com o Tibia... O conheci em 2004, mas comecei a jogar quando Elera foi fundada. Passados alguns anos e muitas, muitas... Eu disse muitas! Idas e vindas pelo game, me firmei em Astera, onde desenvolvi toda a história do Belfahar Swot. Como a maioria sabe o Belfahar foi hackeado o que me fez parar de jogar quando retornei do Haiti no final de 2013, então agora resolvi começar do zero uma nova história com o Evodrael the Cutucador eu espero que vocês acompanhem. Vou usar pra postar fotos de outros 3 chars que criei mas apenas acompanhando o LT pra saber deles! Atualizações do Life Thread todas ás terças e no FL Cast todos os domingos. {X} [ ] Level 50 [ ] Level 80 [ ] Muitas tasks [ ] Ser um MS blocker (luck mode) [ ] Wizard Outfit Full [ ] Dragonling Mount Level 8 Então galera, eu continuo com minha vida militar ativa então não esperam grandiosos posts, mas vou me esforçar pra trazer sempre algo divertido de se acompanhar além de ups e mais ups.
    1 ponto
  15. Eu hoje preso para uma jogabilidade no tibia marcha para jesus 9.0 esse projeto marcha para jesus 9.0 reune varios player tibiano internacional parao projeto. A origem do projeto surgiu des de quando os chares começaram sua marcha anda que ne msodlado isso viro uma obsesao para o Pedrinho que enfureceu os nobres maçons e isso levo ao ponto ao fil da moeda a kilação total de otdos seres viventes do tibia pelo ruthle apocalypse que tem pro sinal uma grnade porcentagem extra de vida para nossos tibianos. Em fim a historia é simpels triste algunbs drunks alguns paralsye e pro fim defeated mais agora que a fenix naceu das cinzas estou disposto a cria um conjunto cerimonial para todo player tibiano a conquista do prologo é o que desconheço para atribuir qualquer presente da vida para uma pessoa que é uma conta no PxG ou Tibia Global (Muito-Raro) o fato que eu queria uma simples questão de que formasse um conjunto de guild e destruisse aquele boss encapetado que mata os plaeyr em um hit e isso que me faz relembrar do global por que não criam uam guild apra matar aquele boss dos inferno a questao é que não tem criatividade para destruir tal boss que apra alguns parece um gigante masi para outros parece uma grande desvantagem para todos os player assim desistem de jogar o global por que não querem dilatar sua mana em um bixo sem futuroi e forever alone mais pasmem vemos que todo tibiano tem seu dom de cria competetividade com as cosias e isso é bom o por que não tem muitos arquitetos tibianos levando sua mente pra loucura e surtando tendo ao ponto que larga o client do tibia para se interna em uma clinica de reabilitação ezqauisofrenica o fato que o tibia esta na pior fase do mundo em que pdoemos ver os jgoadores na vida real se prejudicando e queimando neuronios com bobeiras isso é triste de se ver. Prólogo o que se refere uma questao impar de um plural par o que se trata das pessoas equivalerem um grão de feijao e nã oserem doemsticadas por esquilos sutis e isso que estão fazendo é uma ridicularidade com o projeto inicial marcha para jesus 9.0 pro uqe nao é jsuto um servidor da reset e volta ocmo floor por que isso ira acabar com os player literarios e leechers do jogo o que tem a levar o fudnamento das coisas tibianas é o que um player age a atitude de um jogador perante ao outro conforme me disseram via PM. "Pessoa 1 -Dois filho pra cria imagina a notoicia," "Pessoa 2 by Agressor-Lamentavel vamo ai vai chover de linguiça" pro que nao é justo só por que eu usei bot em um server tipo elera-pvp e o player vim e me kilar s´po que eu usei bot conforme ob botters avaçam os prologos tambem por que somos muitos prologos e estamos em terra de gigantes e isso é o que se trata em relação a MASS PKALIZAÇÃO em tudo conforme o avanço mais mortes aparenta conforme disse os titulares da linha nao tem conversa. o fato que hoje em dia vemos muitos tibianos se perdendo pro questoes de unanimizades é o ideal para que nao teremso vivido eras glaciais do yarshal edited com seu velho truique de poison edited dependendo das circunstancia de editamento conforme o mundo vai avançanmdo o Pedro vai se aprimorando A Morte vem em questao de segundos e o querido Daniel do xt esta com a bola toda para adminsitra o jogo para todo o mundo o fato do prologo ser em questao muito suvvanil é obvio que nao irei citar o quanto disse ao xicao o quanto ele é feio e gordo por que na osabe joga tibia e o meu tio chicao ele sabe de mulher mais na ode jogo eu nao quero um dia ve uma mulher se esfregando em mim na rl apezar das outfit inicial tibiana de female me deixar exitado mais nao vem ao caso o que ocorre hoje aparentemente é que estão se dividindo em dois a partes em que nao querem de geito maneira que o povo saiba o que se trata o ensinamento daos tibianos na RL a rede de televisoes mandadas pro pessoas extrangeiras de familais ricas estão querendo desvantagear os devantageados e isso me preucupa por que eu sou gore fein que doi e tem mutias meninas afi mde mim por que eu sou um macho pelo preto mais nao quero ir pra ciam delas apesar de eu gostar delas. Eu creio que um dia as pessoas irao se queixar uma das outras e fazeram ocm que todo o tipo de raça nojenta igual esse bujerba de playhers que kilam os outros sem ao emnos pergunta tu es um bilandem e isso é o uqe me choca e me amchuca por dentro por que nao tera funcionamento proprio uma possivel coletiva de gente que domesticaram seus pcs para kilamento de bytes do G1 por exemplo nao inventaram algo novo para poder sanar em fora isso você tem que cria e basta você querer. O que eu esotu me refereindo é que tem mostrado a anos um jogador tibiano a fazer coisas que nao podem ser ja mais questionadasp or umas pessoas que nao tem o que fazer por que nao querem ou pro que deixam de fazer a pezar dos pezares e isso é o que me leva a raiva eu fico agfressivo pro que nao querem me deixar sero que eu sou uma pessoa que gosta de pudim de queijo e bacon frito com ovo e isso me machuca me machuca mesmo quando eu fui pro mundo do tibia eu me joguei de um penhasco e entrei nesse mundo que os player ja fizeram o que tinha que ser feito pegar top e ser Mr Fodao do jogo e isso me machuca poro dentro de formas que me faz desprender de todo tipo de rivaldiade doemstical e me torna com isso um ser mais abrochante em relação com as frutas do campo pro que quando você esta jgoando tibia você se perde no mundo do Mantus e vai para o mundo do genocide city zone e isso é o que me refere de todo os angulos possiveis que estão disposto a em desturir a qualquer momento com uam emga explosao KABUMMMMMMM... que pode levar uma cidade de tanks igual tank wars shocwacve apra 999,999 Scored por que seu copntador de post nao auemnta seu epnis infelizmente e isso que em machuca pro nao defudnir ele por esta em eutanasia tibiana que é ficar o tempo todo no jogo e nao se dedicar a vida real e isso me leva a cre em uma seguinte frase que voces ja mais ouviram alguem citar ela na vida real. "Eu sou isso, ou eu sou ao contrario."
    1 ponto
  16. Ué, você configurou corretamente o nome do monstro no código (letras maiúsculas e minúsculas fazem diferença)? local config = { name = "xxx", --nome do monstro vocId = xxx, --vocation id } function onTarget(cid, target) if isMonster(cid) and isPlayer(target) then if getPlayerVocation(target) ~= config.vocId then return false end elseif isPlayer(cid) and isMonster(target) then if getCreatureName(target) == config.name and getPlayerVocation(cid) ~= config.vocId then return doPlayerSendCancel(cid, "você não pode atacar esta criatura.") and false end end return true end function onStatsChange(cid, attacker, type, combat, value) if isMonster(attacker) and isPlayer(cid) then if getPlayerVocation(cid) ~= config.vocId then return false end elseif isPlayer(attacker) and isMonster(cid) and type == STATSCHANGE_HEALTHLOSS then if getCreatureName(cid) == config.name and getPlayerVocation(attacker) ~= config.vocId then return doPlayerSendCancel(attacker, "você não pode atacar esta criatura.") and false end end return true end
    1 ponto
  17. #topico local level = 50 -- level que precisa ter para usar o item local items = {2650, 2674} -- items que vai ganha function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerLevel(cid) >= level then doRemoveItem(item.uid, 1) for i,_ in pairs(items) do doPlayerGiveItem(cid, items[i], 1) end else doPlayerSendCancel(cid, "Você precisa ser level "..level.." para usar o item.") end return true end #joão cria um tópico com seu pedido ps: não tinha visto o topico do skymagnum ai em cima(energia ta caindo toda hora aqui)
    1 ponto
  18. function onUse(cid, item) local _items = {{2160, 10}, {2159, 10}} if getPlayerLevel(cid) >= 150 then for i, q in pairs(_items) do doPlayerAddItem(cid, q[1], q[2]) end doRemoveItem(item.uid, 1) else doPlayerSendCancel(cid, "You can not use this") end return true end
    1 ponto
  19. RigBy

    CRITICAL SISTEMA DIFERENTE

    Acho que ninguém não ta fazendo, então vou começar a fazer amanha.
    1 ponto
  20. HeelNox

    Limite de player por sala

    Parabéns bro, evoluiu muito desde a época.
    1 ponto
  21. gabrielbsales

    Aumentar Limite De Efeitos

    Que é isso garoto, guarde seu reto pra alguem que lhe ame HAEUAEHUAHEAUEHAUEAUEAHUEHU
    1 ponto
  22. Mega Bomb

    [Show Off] Mega Bomb s2

    Agradeço elogios e sugestões ... to sem criatividade, saiu isso =s
    1 ponto
  23. Bruno

    Limite de player por sala

    É um excelente script, parabéns! Obrigado por compartilhar conosco.
    1 ponto
  24. Bruno

    Gesior 1.0 [TFS 1.O] NEW

    Vá na pasta do site, abra o arquivo install.txt e altera de "127.0.0.1" para "192.168.0.1".
    1 ponto
  25. Bruno

    xMapShape v1.0.1

    Posso colocar uma funcionalidade aleatória para isso, exemplo: Do ID 4620 até o 4630 vai gerando grounds aleatórios para não deixa tudo no mesmo id.
    1 ponto
  26. RigBy

    Magia virar passiva

    Pronto .lua local porcetagem = 50 -- 50% dele solta a magia durante o combate local magia = "blood rage" -- magia que ele ira solta, tem que ser o nome da magia e não a palavra magica local storage = 5834843857 -- storage que vai ser usada, o valor é 1 para ser ativado function onCombat(cid, target) if isPlayer(cid) then if getPlayerStorageValue(cid, storage) == 1 then if math.random (0, 100) <= porcetagem then doCreatureCastSpell(cid, magia) end end end return true end function onStatsChange(cid, attacker, type, combat, value) if isPlayer(cid) then if getPlayerStorageValue(cid, storage) == 1 then if combat ~= COMBAT_HEALING then if math.random (0, 100) <= porcetagem then doCreatureCastSpell(cid, magia) end end end end return true end .xml <event type="StatsChange" name="Passivee" event="script" value="NomedoScript.lua"/> <event type="combat" name="Passive" event="script" value="NomedoScript.lua"/> Login.lua antes do ultimo end registerCreatureEvent(cid, "Passive") registerCreatureEvent(cid, "Passivee")
    1 ponto
  27. RigBy

    Teleport por vocação

    opa foi mal, tinha mudado para onUse tem querer(ja editei la) Você tem que usar os dois em conjunto, tanto o globalevent(vai criar o teleport no dia marcado) e o movement(o que teleporta e impede que outras vocações teleport)
    1 ponto
  28. Opá ai sim manolo, atualizações todas ás terças.
    1 ponto
  29. gabrielbsales

    Aumentar Limite De Efeitos

    Não me lembro se tem a opção no otclient, kk.
    1 ponto
  30. gabrielbsales

    Aumentar Limite De Efeitos

    Zet0, use spoilers, por favor. Em game.h, em baixo de //animation help functions. Quando não achar algo do tipo, procure sem os prefixos, no caso, Game:: Avronex, fica parecendo que tu tem raiva de mim :\ UHAEHUAE Esse aqui serve:http://www.xtibia.com/forum/topic/233498-otcclient-067-para-74-ha-1071/
    1 ponto
  31. gabrielbsales

    Aumentar Limite De Efeitos

    Então procure sem o prefixo ProtocolGame void sendMagicEffect(const Position& pos, uint8_t type); Ou algo similiar.
    1 ponto
  32. Administrador

    xMapShape v1.0.1

    Você se refere à um sistema randômico. É interessante e desafiador. Poderia acrescentar a isso uma ferramenta opcional que permitisse o usuário escolher diferentes IDS para uma cor. O que acha ?
    1 ponto
  33. VictorWEBMaster

    [10.35+] GM Island

    Ficou pica em Daniel, parabéns pelo trabalho!
    1 ponto
  34. RigBy

    Teleport por vocação

    não precisa juntar os script so basta substituir o que cria o teleport no dia da semana por esse(não esqueça de configura) e deixa o movement. local config = { day = "Monday","Wednesday","Friday","Sunday", pos = {x=1023, y=1023, z=7}, time = 5, -- tempo que o teleport ira sumir em minutos msg_open = "O Portal vai se abrir em 5 minutos.", msg_close = "O Portal se fechou." action = XXXX -- aqui você coloca o action id } local function DelTp() local t = getTileItemById(config.pos, 1387) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(config.pos, CONST_ME_POFF) end end function onTimer() if (os.date("%A") == config.day) then local item = doCreateItem(1387, 1, config.pos) doItemSetAttribute(item, "aid", config.action) doBroadcastMessage(config.msg_open) addEvent(DelTp, config.time*60*1000) addEvent(doBroadcastMessage, config.time*60*1000, config.msg_close) end return true end
    1 ponto
  35. Zuperion

    xMapShape v1.0.1

    Sugestão: A água bem que poderia adicionar outros grounds de water com ID's diferentes aleatoriamente sobre a água. Porque tipo, a water do cujo ID 4620, só adiciona esse mesmo "piso" de água sobre o mar, o ideal seria esse ID acrescenta-se outros ID's de water aleatoriamente sobre o mar. Tipo esses: Digo o mesmo em relação ao grass, (o gramado).
    1 ponto
  36. yuriantunes9

    PokeGOD v0.1 - Open Source

    Obg, os reportes vai ajudar mto!
    1 ponto
  37. Sou novo aqui, e já arrumei algo pra fazer =P Estarei acompanhando, pois também é bom pra eu aprender um pouco mais sobre as hunts e etc.
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...