Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 03/10/14 em %

  1. 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
    2 pontos
  2. lazarocp

    Novidade: Poketibia 9.60

    Servidor Poketibia 9.60 (Por Lazarocp) - Aprovado para download - - Servidor em desenvolvimento - Você também pode ajudar! • O servidor ainda não se encontra 100%, possui erros simples nas sources. • Os Scripts ainda estão desorganizados (peço desculpas). ○ Este servidor está na versão 9.60, sendo assim, tive que mexer nos scripts para deixá-lo funcional. Informações gerais: • Catch/Goback: 90%. (Havendo apenas um erro no data/creaturescripts/scripts/goback.lua). Ride: 100% Fly: 95% Surf: 99% Blink: 100% Rock Smash: 100% Demais: 100%. Clan system: 100%. M1 à M12: 100%. Portrait System: 100%. Nurse Joy: 100%. Nota: O nosso mapa está sendo feito do zero (0). Já contamos com seis (06) cidades e vários respawns. Pokémons: Primeira geração: 100% Segunda geração: 100% Terceira geração: 100% Quarta geração: 100% -- Evolução por stones: 100% Race e Combat: 100% Pokedex: 95% (Pokedex com descrição do pokémon e onde encontrá-lo. A função "onde encontrá-los", só está disponível em alguns Pokemons). Sistema de Pokémons iniciais: 100% • Novas Pokébolas! • Mega Stones: Retiradas. Downloads: Removidos , Servidor desatualizado e ultrapassado XD Créditos: Criação e postagem: Lazarocp • Ao divulgar ou utilizar, favor mantenham os devidos créditos. • REP'S serão sempre bem vindos, obrigado. Tópico editado e organizado por Avilack.
    2 pontos
  3. xSONYx

    [SHOWOFF] Sony

    Estou aprendendo galera, criticas construtivas, porfavor. Tem muitas mais, mas são do meu projeto e não quero divulgar ainda mas, em breve posto. Treinando Outfits Treinando itens OBS: Me consulte caso queira usa-las.
    2 pontos
  4. comedinhasss

    Swamp

    Resolvi brincar com o mapa e acho que ficou legal pra um Show Off :3 Ps. não mappeio assim desde 2010, deixe sua critica :3 Só mudei a swamp e o herb já foi removido (coisa do alissow) :v
    2 pontos
  5. edu6279

    me ajudem com esse bug

    Tente: SeuOT\data\talkactions Abra o Arquivo: Talkactions.xml e adicione a Tag: <talkaction words="#f#ightmode" event="script" value="fightMode.lua"/>
    2 pontos
  6. edu6279

    ME AJUDEM PLS

    Tente OTclient\modules\game_menuTop Abra o arquivo: mod_topMenu Procure por: local player = g_game.getLocalPlayer() g_game.useInventoryItem(player:getInventoryItem(10):getId()) end Apenas troque o numero para 3
    2 pontos
  7. rogeriocene

    Big War Kamikaze V.1

    BigWar Kamikaze Versao 1.0 Novidades: -Novo Visual Do Templo -Npcs Vendendo Vip e Itens PowerW -Area Vip -Novas Magias: Paladin: Distance Up (buff) , Kamikaze con Mages: Magic Up (Buff) , Kamikaze Knight: Knight up (Buff) , exori kamikaze -Novos Sets: Kamikaze Set & God Of War Set -Pots Healando Bem -Vocaçoes totalmente balanceadas -3 Novas quests: Anihi Vip, Bigwar Weapons, Kamikaze Quest -Area vip Com Alvanca 3x Xp -Shop Vendendo Itens Vip -Bau Que deixa [VIP] no nome -Mapa Sem Bugs -Players Começao com full outfitss -Ant Mc ( Quando um player mata o msm ip ele perdelv) -Systema De Loteria -Frags No Look - Novos Bosses: God Mage & God Knight Algumas Imagens do Server: Templo: Quests: Anihi Vip: Area Vip: Link Do Download: http://www.mediafire.com/download/tzplusyz9thr8hp/Kamikaze+War.rar Scan: https://www.virustotal.com/pt/url/4c884f832f554d28788760d2e8f326a7368360b3dc06e36cdf2eabf75926d961/analysis/1394333786/ Gostaram?? Comentem e curtao para ajudar o Topico
    1 ponto
  8. Olá Galerinha Tibiana! Durante 3 anos o baiak ainda está se atualizando cada vez mais e agora eu venho trazer a nova versao 10.10 não esta 100% mais garanto que vao gostar,entao vamos ver oque há de novo nele ? Essa Nova Versão eu conseguir criar em apenas 2 dias e meio e nao deu tempo de testar mais se houver bugs comentem por favor. Versão x10.1- 1.0 Oque há de novo ? • Todas as mountarias da versao 10.10 • Todos os outfits 10.10 • Todos os items 10.10 • Monsters ainda em andamento. • Templo com cara de 10.10 • City Vip com novo visual 10.10 • War System 100% - Comandos :/war invite,nomedaguildrival outra guild ativar a war /accept war,guildrival cancelar war . /war cancel,guildrival • Cast System 100% - Comandos:!cast list para ver casts abertos,!cast nomedoplayer para entrar, !cast exit para sair do cast que voce está !cast on para voce abrir um cast e !cast off para sair • Novo Npc no templo que vende items 10.10 • Novo npc que vende items vip • Bug das houses retirados • Bug da Sql retirado • Novos Comandos /rank !mount nomedamount !addon nomedoaddon !changesex !buyhouse,!leavehouse,alana res,!sellhouse funcionando 100% e muito mais que nao veio na cabeça mais quando eu lembrar posto. O Servidor está em SQL pronto para por online e os erros do distro nao encomodam o server. • Baiak Yurots V5.2 Oque Mudou ? •Tirei bug das houses •Tirei todos os erro do distro •Arrumei o lado >> da city vip agora mais rox. • Baiak Yurots V5.1 Oque Mudou ? • Mudei a Quest do templo lv 150 ganha 2kk agora ganha só 500k • Melhorei os teleports master lv 300+ agora tem 4 novas quest e 2 hunt + • Mudei respaw de todas as hunts free , vip e master agora ta 5x melhor. • Mudei Tempo da loteria tava 15 em 15 minutos agora ta de 1 em 1 hora. • Melhorei a Exori gran do kina. • Mudei os loot do monster bosses agora igual da versao 10.30 do global • Adicionei quest do addon doll na area d lvel 300+ • Adicionei Quest do 2kk na area d Lvl 300+ • Adicionei Quest do necromancer shield na area de Lv 300+ • Adicionei Quest do Dwarven Set e hornede helmet na area de level 300+ • Adicionei o novo monster Master Medusa Lv 300+ • Adicionei 2 novas hunt de Master Medusa. Se eu lembrar mas alguma coisa eu posto. :S • Baiak Yurots V5.0 Oque Mudou ? • Agora a City Está Maior Mais Bonita e Com Mais Houses. • Novo Sistema de Treiner não prescisa andar muito para axar um livre. • Novos monstros vip ( Sea Serpent Vip , Hellhound vip , night mare vip , fury vip ) novos monstros master ( hydra master , frost master , grim master e demon master). • Nova Quest Master Com Armas Para todas as vocaçao. • Agora o NPC VIP Vende e compra items vip, pois se voce pegar item vip de algum red algo assim voce pode vender mais so que o npc compra 60% mais barato ☺ • Novo Npc que vender Red Remover. • Novo Templo. • Novas Quests. • Novo Depot. • Novos Commandos ( !food Compra 100 , !topfrags Ver quem é o top frag , !glist ver as guild do server e !glist Nameguild para ver os player da guild. • Teleports Free e vip Agora com nova cara. • Novo Caminho Para Poi no mesmo lugar so que mais bonito. • Addon agora é com addon doll npc Varkhal Vende. • Systema de Loteria a cada 2 Horas. • Nova arena de team god que organiza. E muito Mais .. Novos Items. Master vip Quest Teleports Master Templo vip Templo city Teleports Master Teleport Free Documento baiak original O Server Está FULL EM SQL Só Baixar e Por Online Abaixo ! Download Baiak 10.10 13/01/2014 - >http://www.4shared.com/rar/hOppT8_kba/Baiak_1010.html Scan Baiak 10.10 -> https://www.virustotal.com/pt-br/file/e18224ffa86a7a034e66d9d57e441cd179ed24a842fdcf9b532266227877f501/analysis/1389761678/ Testado 32bits windowns 7. acc do god -> god/god Creditos 10% GOD Bon | Por editar em 2008 90% Baiak Lula = Luizbaiak | Por editar2010 a 2014 Contato Face -> https://www.facebook...zhenrique.baiak Email -> Baiaklula@gmail.com Obrigado bom jogo! GOSTOU? DE REP+.
    1 ponto
  9. Olá xtibia e todo os usúarios, por meio desse topico resolvi criar um tutorial como ADICIONAR icon system ao servidor, sem desloga vamos lá? Servidor usado para adicionar icon system http://www.xtibia.com/forum/topic/201018-pxo-server-11-by-smix/ Bom.. como o server dele já vem istalado o systema de icon system fica até mais facil, vamos lá? logo apoís abaixa-lo o servidor vamo ao primeiro passo para adicionar icon. 1* irei usar como TESTE 3 IDS do item.otb 13590,13591 e 13592. Bom o ID 13590 sera usado como 'On' Icone On.(Icone Vivo). o ID 13591 sera usado como icone OFF/icone morto. e o ID 13592 sera usado como USÊ/Icone sendo usado. agora vamos lá nas modificações dos scripts? Action configurações. Agora vamos para a parte de LIB. Mais tome muito atenção aqui, porque tem que faze bem certinho se não bugara muitas coisas. Lib configurações. agora vamos as configurações no movements. Movements configurações. Agora vamos ao item.xml
    1 ponto
  10. Conteudo Retirado.
    1 ponto
  11. Assunto: Passando o seu servidor de narutibia de 8.54 para 8.60. Tutorial: Baixe o servidor "Crying Dasmon Forgotten Server 8.60" & o "RME" (ou qualquer outro editor que funcione na versão 8.60). Abra o mapa do Forgotten Server e vá em: File > Import > Map Depois de importado dê save e apague tudo da pasta data do Forgotten Server (menos a pasta World do mapa) e coloque as do NTO Shinobi. Após isto configure a config.lua para mysql (phpmyadmin) e pronto. Bugs: Caso dê bug nos Monsters/NPC do seu server, abra seu mapa no RME e vá em: File > Import > NPC or Monster Selecione todos os arquivos .xml de npc e monster da sua pasta data. Downloads: Crying Dasmon Forgotten Server 8.60 RME Creditos: Vegettotaku (eu, pelo tutorial) Naruto Shinobi [Hoobin Hood] (Pelo Server) Crying Dasmon (Pelo Server)
    1 ponto
  12. Frenvius

    Fairy Tail Online [FTO]

    Gráfico Olá, eu sou Frenvius, Spriter/Desginer do projeto Fairy Tail Online. Fará um mês desde que voltamos com o projeto, estamos focados, trabalhando dia e noite para um melhor desempenho do servidor. Até então, estivemos acumulando conteúdo para mostrarmos a vocês durante um certo período. Este é apenas um exemplo Gráfico do nosso game, toda parte gráfica será desenvolvida por mim. Estaremos trabalhando com o gráfico para que ele fique agradável aos olhos de todos, escolhemos muito bem as cores, para assim termos um gráfico bonito fugindo do padrão de outros servidores e da temática do Tibia. Sugestões são sempre bem vindas, o game é feito a gosto de quem joga. Guild System - Level O Guild System é um dos sistemas mais importantes, o jogo inteiro está ligado nele [Praticamente]. Cada usuário poderá se ingressar ou criar uma nova guilda, para executar uma das ações, ele não poderá ser membro de nenhuma. Para criar uma guilda, será necessário no mínimo alcançar o nível 30 [valor ainda não definido]; Individualmente, cada guilda possuirá seu level e experiência. A cada monstro morto por um membro, a guilda receberá 10% da experiência total da criatura morta (Não será descontado no que o player ganhará). Como este é um sistema muito longo, ele será dividido em três partes e a cada dois dias será lançado um novo teaser sobre ele. Dica: Quanto mais usuários ativos em sua guilda, mais experiência ela receberá, mais level ela terá. Guild System - Request Board Como na série Fairy Tail, os magos que pertencem as guildas fazem trabalhos pela comissão. Esses trabalhos estão expostos em um quadro, qualquer um pode pega-los. Um esquema de como funcionará no jogo: Qualquer jogador poderá pegar uma task no Request Board de sua guilda. - Ninguém poderá fazer duas tasks ao mesmo tempo. - Após o jogador pegar a task no quadro, ela nunca mais poderá ser feita. [Existe exceções]; - As tasks irão aparecer no quadro de acordo com o nível da Guilda. Quanto maior for o nível dela, maior vai ser a dificuldade delas e maior a quantidade de tasks para serem realizadas. Guild System - Flags A ideia desse sistema veio de um jogo chamado Ragnarök. O que queremos propor é que as guildas com as maiores influências no jogo terá sua marca exposta para todos os jogadores em bandeiras que estarão nas cidades. Um dos fatores que contribuirá é o level da guilda. - Não será necessário baixar uma nova atualização a cada nova influência. - Os jogadores poderão fazer upload do ícone de suas guildas pelo site, para representar a guilda no site. [sem perspectiva 45º] - A ideia desse sistema foi para que tivesse uma valorização na força das guildas, não que seja a única. Paperdoll System Paperdoll é a representação dos equipamentos utilizados pelo personagem possibilitando a criação das mais variadas combinações, desde os cabelos, roupas, armas, acessórios e outros. Próximo Teaser: --/--/-- Forum
    1 ponto
  13. felippepsa

    Galeria Felippepsa

    Olá pessoal como estou fazendo remake de tudo decidi refazer o topico. Sasuke Remake : Sasuke com cabelo mais claro : Madara Rikudou Akatsuki Remake : Bastão Obito Rikudou : Bastão Rikudou Sennin : Bastão Madara Rikudou : Espada : Espada Kakashi (Criança) : Novas : Sabre de Luz : Pra Zoar : Objetos de Hokey : Ainda estou terminando algumas sprites. Embreve mais remakes.
    1 ponto
  14. u n d e r

    Estrutura modificada

    Boa tarde Xtibianos, qual a boa para este final de semana? Nossa equipe está tão motivada, que não para. A cada segundo, estamos nos movimentando buscando melhorar esta comunidade que voltou a crescer. Antes de "startar" as notícias, gostaria de agradecer a cada um que dia após dia tem elogiado e também criticado de forma construtiva as nuances de nosso fórum. 1º Aprovação de downloads Uma crítica esta semana nos chamou a atenção, para ler na íntegra, acesso o link abaixo: http://www.xtibia.com/forum/topic/229440-sugestao-aprovacao-de-downloads/ Para solucionarmos a situação, estaremos analisando membros de bom desempenho, que entenda e com uma boa conduta dentro de nosso fórum para estagiar nas seções de aprovações. Queremos de uma vez por todas, evitar que tópicos se acumulem nesta área, agilizando o processo e garantindo que todo o conteúdo seja liberado, atentando-se para a qualidade e segurança dos downloads disponibilizados. Obviamente estamos expostos a diversas situações, portanto, é muito importante também a colaboração de vocês para conseguirmos rastrear qualquer conteúdo nocivo ao usuário ou visitante do fórum. 2º Área de atendimento http://www.xtibia.com/forum/topic/229602-area-de-atendimento/ Com o objetivo de evitar qualquer "desvio" na interpretação do nosso fórum de atendimento aos membros do Xtibia, optamos por alterar a tratativa do nome. O atendimento funciona mais como um "retorno dos usuários", ou seja, um "feedback" do que acontece em nossa comunidade. Certo? Partindo este principio, mudamos o título e descrição para que nenhum usuário novo possa interpretar de maneira errada e se confundir com os sub-fórums de suporte específico. 3º Suporte a otserv http://www.xtibia.com/forum/forum/988-suporte-otserv/ Opa, se melhoramos a área de atendimento, agora nomeada, Feedback, porque não melhorarmos nosso suporte a Otserv? Seguindo a linha de raciocínio, preservamos o que o Xtibia tem de exclusividade em relação a qualquer outro fórum atual. Áreas específicas para atendimento e pedidos de "n coisas". No entanto, estas áreas as vezes estão escondidas e se tornam de difícil acesso para usuários novos ou preguiçosos. Este problema deverá ser solucionado, com um novo fórum de redirecionamento, facilmente encontrado nas seções do Xtibia: 4º Open Tibia Client http://www.xtibia.com/forum/forum/917-open-tibia-client-oficial-brasileiro/ Entendemos que o Otclient é um projeto que foi idealizado pelo brasileiro Edubart. Tratando-se de um projeto, por si só, deduzimos que patrocinamos oficialmente tal área e que portanto nada melhor do que enquadrá-lo em nossa área de projetos patrocinados. "Ah Alê, fica muito escondido!" Toda semana estamos trabalhando em meios de divulgação que potencialize os acessos a concursos e projetos do Xtibia. Além do Facebook, excelente ferramenta de publicação, vocês têm acompanhado que o fórum recebeu uma tarja de anúncios no topo. Esta tarja muda a cada 3 dias mais ou menos! 5º Layout http://www.xtibia.com/forum/topic/229215-barra-negra/ A barra superior, que funciona como um breadcrumb em nosso fórum foi melhorada. Testamos em resoluções de 1024x768 alguns tópicos que possuem títulos grandes e conseguimos melhorar a exibição, evitando a "quebra do layout". Peço que continuem averiguando isso e reportem se encontrarem falhas. ____________________________________________________________________________ Importante: vocês notaram que nosso chat está desativado. Gostaria de aproveitar o ensejo para explicarmos a respeito. Nosso fórum das últimas semanas recebeu um número bem maior de visitas do que o acostumado. Estamos crescendo e isso é realmente muito bom e agradecemos o empenho de toda equipe e membros. Com este cenário, nosso chat passou a ter mais uso, "estourando" entre aspas, a capacidade de requisições. Isso tudo está sendo analisado e melhorado, não se preocupem. Neste meio tempo, pedimos que aguentem os ânimos até criarmos uma solução ideal! Deixo claro que estamos nos movimentando para resolver o mais rápido. Por hoje é só, a semana foi bem agitada. Desejo a vocês um ótimo final de semana e boa diversão!
    1 ponto
  15. Tony Araujo

    Website - Imagens

    Introdução Olá galera do XTibia estou aqui para mostrar para vocês algumas imagens do site do Arton, o mesmo ainda está em construção mas já da para postar algumas imagens espero que gostem, não se esqueçam de escrever suas opiniões, sugestões etc, aí em baixo. Teoria Nosso webmaster TheKiiinger tentou fazer um website que não fosse enjoativo, cansativo e pesado, e para isso ele fez 3 coisas: - O site possui 6 cores diferentes que a cada 3 horas ao atualizar à pagina ela irá trocar de cor, deixando o site menos enjoativo de se utilizar no dia a dia; - O site ficou bem limpo, mas sem perder a beleza, de forma que não fique cansativa para a vista; - O site possui pouca imagem e muito CSS (Linguagem de programação em que você "desenha" o seu site), fazendo com que o site seja acessado rapidamente por qualquer internet. Além de tudo isso o site irá possuir uma ampla página de configurações, de modo que você possa adaptar o site da forma que você preferir. Previews Imagens Ícones Barra de Rolagem Topo Menu topo Menu lado Sistema de páginas Copyright Páginas prontas Notícias Ver notícias Obs: nesta página quando uma imagem é muito grande ela é redimensionada, e se você passar o mouse sobre uma imagem redimencionada, ao lado dela irá aparecer um cículo com a imagem em tamanho real na posição aonde o seu mouse está na imagem: Downloads Direitos sobre o site Imagens: Bruno Alves e TheKiiinger; Design: TheKiiinger; Códigos: TheKiiinger e criadores dos sitemas que utilizamos; Sistemas utilizados: - Modern AAC (Modificado por Thekiiinger) - jQuery - Orbit (Modificado por Thekiiinger) - Magnifying glass (Modificado por Thekiiinger)
    1 ponto
  16. Isso nao é um erro, e sim uma proteção contra Nukers, que logam varios chars para derrubar o ot va na pasta: data\creaturescripts\scripts e procure por um arquivo com o nome anti_nuker dai vc editar para 2 player com o mesmo ip poderem entrar
    1 ponto
  17. Frenvius

    Fairy Tail Online [FTO]

    Sim, estão sendo providenciados esses sprites xD
    1 ponto
  18. zipter98

    Script com Tempo

    function onSay(cid, words) local pos = {x = 1054, y = 1052, z = 7} local storage = 91971 if getPlayerStorageValue(cid, storage) > os.time() then return doPlayerSendCancel(cid, "Você só pode usar esta talkaction de 1 em 1 hora.") else doSendMagicEffect(getPlayerPosition(cid), 53) doPlayerSendCancel(cid, "Teleportado!") doTeleportThing(cid, pos) setPlayerStorageValue(cid, storage, os.time() + 60 * 60) end return true end
    1 ponto
  19. IvanAppel

    Fábrica de Clients

    É que tipo, as versões acima de 10.1 acho que tem algo para não poder criar em client cipsoft, que a cipsoft fez para ngm criar, e a versão 10.35 não saiu no otclient então tens que esperar o próximo update ;c
    1 ponto
  20. lazarocp

    Novidade: Poketibia 9.60

    .
    1 ponto
  21. Piabeta Kun

    Global Gesior By PiabetaMan01 2.0

    achievements system varia os storages de 20001 a 20999 e a lista de achievements esta no config.php digamos que tenha o achievements annihilator com id 81 ou seja seu storage é 20081, basta aplicar uma quest com storage id 20081 e alterar o cid value para a quantidade de pontos que esse achievement ira dar,ou seja, assim que o cara fizer a quest que da esse storage id com o cid value desejado aparecerá no site o achievement desejado com os pontos desejados!
    1 ponto
  22. Avuenja

    Fairy Tail Online [FTO]

    Você já atingiu seu limite de reputações positivas para hoje Foda Frenvius!
    1 ponto
  23. Shoguns

    [Arquivado]bot necessidade?

    o tibia da Cipsoft? ou seja o Global? se acha que não tem BOT? lá tem 15 mil On por dia de manhan, quando atualizam a versão do client que os BOT Ficam parados ate fazerem outro BOT... cai de 15 mil pra 5 mil....
    1 ponto
  24. vá no mysql do xampp ( http://localhost:8090/phpmyadmin/ ) ou ( http://localhost/phpmyadmin/) vá no sql depois vai em account depos click em editar ( a conta ue vai ser adm ) depos procure PAGE ACESS e coloque 6 e aperta enter , agora logue nessa conta e tera o ADMIN do site boa sorte ^^
    1 ponto
  25. Fiz apenas a tela de login por enquanto, ele está identificando perfeitamente no banco de dados. Agora tenho que ver com meus programadores se eles conseguiram entender algo do código flash. Pois é um tibia em mxmlx sei la oqye... ta dificil pra caramba de decifrar e compilar.
    1 ponto
  26. masdead

    [Show Off] Thiago Carvalho

    Não está bem terminado mas é só pra não deixar o tópico morrer de novo. (Abra a imagem em outra guia para ver em melhor qualidade)
    1 ponto
  27. edu6279

    ME AJUDEM PLS

    esse erro do #f#ightmode nao tem absolutamente nada haver com o erro da bag, mais blz, erro do fightmode http://www.xtibia.com/forum/topic/229572-me-ajudem-com-esse-bug/
    1 ponto
  28. comedinhasss

    Swamp

    Verdade, realmente ficou estranho. Acho que agora melhorou
    1 ponto
  29. VictorWEBMaster

    [Encerrado] Vps

    Amigo, tutorial é 2009 porém vai te ajudar http://www.xtibia.com/forum/topic/125132-novo-ip-fixo-sem-no-ip/
    1 ponto
  30. Pikenoh

    [SIMPLES]Comando para verificar fome

    Bom galera, aqui está o meu primeiro script. Ele é bem básico e até um pouco inútil mas, pode ajudar. Explicação: O player digita !fome e se ele estiver com fome e se precisar comer, recebe uma mensagem dizendo: "Você está com fome." Se a fome dele não estiver no limite, recebe uma mensagem que diz: "Faltam (x) segundos para você ficar com fome." Sendo x = segundos. Vamos ao script. 1º: data > talkactions > scripts Crie "fome.lua" e dentro coloque: 2º: data > talkactions > talkactions.xml Insira a seguinte linha: OBS.: Antes de criticar, lembre-se que este é o meu primeiro script, ainda estou aprendendo. Obrigado a todos.
    1 ponto
  31. Madarada

    Website - Imagens

    As artes estão boas mais pra um website ta com poluição visual.Tem muita cor sobreposta e traço encima se traço não se sabe exatamente o que o site quer passar para quem o visita. na minha opinião é isso. Aqui temos dois modelos de site: - com cores saturadas e sobrepostas causando aquela ardência nos olhos - outro com cores suaves e com pouca variação de tonalidade http://narutorozfighter.webnode.com.br/#! http://www.perspectives45.com/
    1 ponto
  32. de boas cara faça bom uso do servidor ai , vlw flw
    1 ponto
  33. /\ deve ser algum erro de Sprite para cair do nada o client , tente ver qual é o ID do corpo dele para ver se não é um item bugado
    1 ponto
  34. Movido para sessao correta.
    1 ponto
  35. Renanzinho2v

    Terroristas Yourots 8.7

    Créditos ao dexpironfox pois foi editado em cima do ot do topico dele! para baixa o ot Clique aqui Para fazer o download da pasta world clique aqui! Templo: Dp Templo vip: Tp's: Scan Estive um tempo parado e acho que ainda vo ficar mais um pouco, mas vo postar aqui o ot inteiro atualizado...Acho q n é a versao mais atualizada q eu fiz e n divulguei mas essa ai foi a ultima q hospedei! Download
    1 ponto
  36. pera é algo no for entao.. vou arrumar e ja edito kk function isWalkable(pos, creature, pz, proj) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end local creature = getTopCreature(pos) if creature.type > 0 then return false end if getTilePzInfo(pos) and not pz then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function onCastSpell(cid, var) local pos = getThingPosition(getCreatureTarget(cid)) for x = -1,1 do for y = -1,1 do posicao = {x = pos.x + x, y = pos.y + y, z = pos.z} if isWalkable(posicao) and posicao ~= {x = pos.x,y = pos.y,z = pos.z} then doCreateItem(5750,1,posicao) end end end addEvent(function() for x = -1,1 do for y = -1,1 do posicao = {x = pos.x + x, y = pos.y + y, z = pos.z} if getTileItemById(posicao, 5750).uid > 0 then doRemoveItem(getTileItemById(posicao, 5750).uid) end end end end,5*1000) return true end teste agora
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...