-
Total de itens
77 -
Registro em
-
Última visita
Histórico de Reputação
-
Tredfg deu reputação a caotic em 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
-
Tredfg recebeu reputação de VitinhoVitor em [ERROR] PDA EDIT BY BOLZ
Para botar spoiler faça isso [.spoiler] e o texo aqui dentro e [./spoiler] feixa,exemplo
(Sem os pontos)
-
Tredfg deu reputação a EdMignari em OBD - Object Builder Data
OBD é o formato usado pelo programa Object Builder para exportar e importar objetos no cliente. O tutorial pretende dar dicas básicas para melhor aproveitamento do formato.
Exportando um OBD
1 - Abra seus arquivos do cliente no Object Builder.
2 - Clique no botão exportar que fica abaixo da visualização do objeto ou clique com o direito do mouse sobre o objeto na lista.
3 - Selecione o formato OBD e a versão do cliente.
Importando um arquivo OBD
1 - Clique no botão importar que fica abaixo da visualização do objeto.
2 - Na janela Import Object, selecione o arquivo que deseja importar. Para importar mais de um objeto por vez, arraste os objetos direto do seus arquivos para dentro do programa e solte-os na área de visualização ou na lista de objetos.
Editando OBD
Se você precisa editar apenas um ou alguns OBDs.
1 - Crie novos arquivos spr e dat no Object Builder para sua versão de cliente.
2 - Importe o OBD que você deseja editar.
3 - Faça as alterações necessárias.
3 - Exporte o objeto modificado novamente como OBD.
IDC para OBD
Se você tem alguns IDCs e gostaria de converter pra OBD.
1 - Crie novos arquivos spr e dat no Object Builder para sua versão de cliente.
2 - Compile os arquivos.
3 - Abra os arquivos criados em um editor que suporta IDC e importe os IDCs que você precisa.
4 - Compile os arquivos.
5 - Abra os arquivos compilados novamente no Object Builder e exporte como OBD.
Visualizando o conteúdo dos OBDs
Use o programa Object Viewer para visualizar arquivos OBDs.
Estrutura dos arquivos OBDs (Para desenvolvedores)
Créditos
Edmignari (edmignari@xtibia.com)
-
Tredfg deu reputação a fabiosa em Pokes da 3 geração em formato obd
Iai galera venho aqui trazer pra vocês os arquivos que andei separando pro meu server, demorei um cado mais tai.
Oque contem.
Download.
Scan.
Link para ajudarem vocês com o object e a aprender trocar sprites entre outros.
.Créditos.
.EdMignari por disponibilizar as sprs e dats da PxG.
.Eu por ter distribuídos a cada pasta.
-
Tredfg recebeu reputação de juquete em PokéHouse V1.0 (Editado Por GabrielSv)
Irei abaixar se for bom do rep+!
@Edit Mano na parte que é para abaixar o server vem o client em vez do server,arruma.
-
Tredfg deu reputação a lazarocp em 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.
-
-
Tredfg deu reputação a VictorWEBMaster em [MODERN ACC] Instalação PokeTibia Website
Fala galera XTibiana!!!
Vejo que muitas pessoas tem muita dificuldade em 4 simples passos.
Fiz uma video aula ensinando a instalar sem nenhum problema o modern acc.
Quaisquer duvidas poste neste topico ou abra um na sessao de dúvidas.
-
Tredfg recebeu reputação de Deathred em Adicionar pokemon com level
http://www.xtibia.com/forum/topic/210838-video-aula-completa-como-add-novos-pokemons-no-pda/
-
Tredfg recebeu reputação de RafaKimura em [Duvida] Order Pokétibia
Ata obg zipter então tenta esse qui cara
-
Tredfg recebeu reputação de Deathred em Adicionar pokemon com level
Jah tem tutorial em como adiciona pokemons no pda todos são iguais.
-
Tredfg deu reputação a SamueLGuedes em Adicionando novos pokemons no PDA
Olá Tudo bom... Então galera, varias pessoas já me perguntaram como que eu adiciono Pokemons no PDA Slicer, ou no Meu e etc, se for PDA eu vou ensinar kkk. eo seguinte eu vi o tutorial do Yan18, o dele está certo, só que falta algumas explicações, acho que foi por isso que alguns nao conseguiram '-'. já vou falando e muito simples adicionar um pokemon kkk. vou tentar explicar passo a passo.
Primeiro antes de tudo, iremos criar nosso pokémon no Monsters, vou pegar um pokémon como exemplo, tipo o Shiny magmar (eu gosto dele ele e fodão).
eu vou usar o esquema do Shiny magmar:
<?xml version="1.0" encoding="UTF-8"?> <monster name="Shiny Magmar" nameDescription="a Shiny magmar" race="fire" experience="1072" speed="117" manacost="0"> <health now="160" max="160"/> <look type="XXXX" head="55" body="80" legs="95" feet="113" corpse="XXXX"/> <targetchange interval="10000" chance="0"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="1"/> <flag convinceable="1"/> <flag pushable="1"/> <flag canpushitems="0"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="97"/> <flag runonhealth="0"/> <flag hungerdelay="18"/> </flags> <attacks> <attack name="melee" interval="2000" chance="100" range="1" min="-50" max="-100"/> <attack name="Scratch" interval="2852" chance="29" range="1"/> <attack name="Fire Punch" interval="2946" chance="28" range="1"/> <attack name="Ember" interval="2758" chance="30" range="3"/> <attack name="Flamethrower" interval="3040" chance="28" range="6"/> <attack name="Fireball" interval="2993" chance="28" range="4"/> <attack name="Fire Blast" interval="4027" chance="22" range="6"/> <attack name="Magma Storm" interval="4121" chance="21" range="6"/> <attack name="Sunny Day" interval="4121" chance="21" range="3"/> </attacks> <defenses armor="0" defense="0"> </defenses> <voices interval="5000" chance="10"> <voice sentence="MAGMAR!"/> </voices> <loot> <item id="12152" chance="4000" count="1" countmax="1"/> <item id="12162" chance="5000" countmax="50"/> <item id="11447" chance="100" count="1" countmax="1"/> </loot> <script> <event name="Spawn"/> </script> </monster> salvei como .lua, coloquei no monster.xml.
agora vá em configuration e vamos começar a mecher nos treco ai kkk. Primeiro de tudo, em uma das primeiras linhas vai estar assim:
passivepokemons = { esse é o local aonde nos colocamos o pokemons passivos, ou seja se queremos ou não deixa-los passivos, se o nome do pokemon tipo o magmar não estiver ali ele será agressivo.
agora procure por:
movestable = { em baixo disso irá aparecer a renca de moves dos pokemons '-', vá no ultimo pokemon da lista que no meu caso é o:
["Elder Venusaur"] = {move1 = {name = "Body Slam", level = 56, cd = 12, dist = 1, target = 1, f = 50, t = "normal"}, move2 = {name = "Razor Leaf", level = 12, cd = 7, dist = 4, target = 1, f = 50, t = "grass"}, move3 = {name = "Vine Whip", level = 19, cd = 16, dist = 1, target = 0, f = 55, t = "grass"}, move4 = {name = "Headbutt", level = 16, cd = 12, dist = 1, target = 1, f = 55, t = "normal"}, move5 = {name = "Leech Seed", level = 16, cd = 16, dist = 3, target = 1, f = 1, t = "grass"}, move6 = {name = "Bullet Seed", level = 28, cd = 20, dist = 1, target = 0, f = 75, t = "grass"}, move7 = {name = "Solar Beam", level = 31, cd = 35, dist = 1, target = 0, f = 135, t = "grass"}, move8 = {name = "Sleep Powder", level = 20, cd = 60, dist = 1, target = 0, f = 0, t = "normal"}, move9 = {name = "Stun Spore", level = 18, cd = 35, dist = 1, target = 0, f = 0, t = "normal"}, move10 = {name = "Poison Powder", level = 17, cd = 25, dist = 1, target = 0, f = 0, t = "normal"}, move11 = {name = "Leaf Storm", level = 60, cd = 50, dist = 1, target = 0, f = 100, t = "grass"}, }, } no de vocês concerteza vai estar outro pokemon, mais mesmo assim adicionar outra /\ em baixo do ultimo pokemon, ficando assim:
["Elder Venusaur"] = {move1 = {name = "Body Slam", level = 56, cd = 12, dist = 1, target = 1, f = 50, t = "normal"}, move2 = {name = "Razor Leaf", level = 12, cd = 7, dist = 4, target = 1, f = 50, t = "grass"}, move3 = {name = "Vine Whip", level = 19, cd = 16, dist = 1, target = 0, f = 55, t = "grass"}, move4 = {name = "Headbutt", level = 16, cd = 12, dist = 1, target = 1, f = 55, t = "normal"}, move5 = {name = "Leech Seed", level = 16, cd = 16, dist = 3, target = 1, f = 1, t = "grass"}, move6 = {name = "Bullet Seed", level = 28, cd = 20, dist = 1, target = 0, f = 75, t = "grass"}, move7 = {name = "Solar Beam", level = 31, cd = 35, dist = 1, target = 0, f = 135, t = "grass"}, move8 = {name = "Sleep Powder", level = 20, cd = 60, dist = 1, target = 0, f = 0, t = "normal"}, move9 = {name = "Stun Spore", level = 18, cd = 35, dist = 1, target = 0, f = 0, t = "normal"}, move10 = {name = "Poison Powder", level = 17, cd = 25, dist = 1, target = 0, f = 0, t = "normal"}, move11 = {name = "Leaf Storm", level = 60, cd = 50, dist = 1, target = 0, f = 100, t = "grass"}, }, ["Shiny Magmar"] = {move1 = {name = "Scratch", level = 35, cd = 10, dist = 1, target = 1, f = 40, t = "normal"}, move2 = {name = "Fire Punch", level = 36, cd = 30, dist = 1, target = 1, f = 75, t = "fire"}, move3 = {name = "Ember", level = 32, cd = 10, dist = 4, target = 1, f = 40, t = "fire"}, move4 = {name = "Flamethrower", level = 37, cd = 15, dist = 1, target = 0, f = 80, t = "fire"}, move5 = {name = "Fireball", level = 38, cd = 20, dist = 4, target = 1, f = 65, t = "fire"}, move6 = {name = "Fire Blast", level = 43, cd = 40, dist = 1, target = 0, f = 120, t = "fire"}, move7 = {name = "Magma Storm", level = 46, cd = 90, dist = 1, target = 0, f = 150, t = "fire"}, move8 = {name = "Sunny Day", level = 46, cd = 60, dist = 1, target = 0, f = 0, t = "fire"}, passive1 = {name = "Lava-Electricity", level = 1, cd = 0, dist = 6, target = 0, f = 15, t = "fire"}, }, }
em baixo do movestable tem. os fly, ride, e surf, o meu está assim:
["Moltres"] = {229, 2300}, -- moltres ["Articuno"] = {230, 2100}, -- artic ["Zapdos"] = {224, 2600}, -- zapdos ["Mew"] = {232, 2200}, -- 1000 ["Mewtwo"] = {233, 2200},-- two ["Dragonite"] = {221, 1300},-- nite ["Pidgeot"] = {222, 900}, -- geot ["Fearow"] = {226, 800}, -- fearow ["Aerodactyl"] = {227, 1100}, -- aero ["Charizard"] = {216, 1000}, -- chari ["Porygon"] = {316, 600}, -- porygon ["Shiny Dragonite"] = {1020, 1300},-- Shiny nite ["Shiny Pidgeot"] = {996, 900}, -- Shiny geot ["Shiny Fearow"] = {997, 800}, -- Shiny fearow --alterado v1.5 ["Shiny Charizard"] = {295, 1000}, -- Shiny chari ["Porygon2"] = {648, 890}, -- 2 ["Skarmory"] = {649, 1000}, -- skarmory ["Crobat"] = {652, 1190}, -- crobat ["Dragonair"] = {1112, 1150}, ["Shiny Dragonair"] = {1113, 1400}, ["Noctowl"] = {994, 1000}, ["Farfetch'd"] = {1120, 1000}, --alterado v1.8 \/ ["Shiny Farfetch'd"] = {1121, 1000}, ["Gengar"] = {1123, 1000}, ["Shiny Gengar"] = {1124, 1000}, ["Heracross"] = {1125, 1000}, ["Xatu"] = {1122, 1000}, ["Togekiss"] = {1231, 1000}, ["Staraptor"] = {1234, 1000}, ["Drifblim"] = {1187, 1000}, ["Honchkrow"] = {1203, 1000}, ["Salamence"] = {1415, 1000}, ["Tropius"] = {1398, 1000}, ["Swellow"] = {1397, 1000}, ["Pelipper"] = {1394, 1000}, ["Flygon"] = {1391, 1000}, ["Altaria"] = {1389, 1000}, } rides = { ["Tauros"] = {128, 580}, -- tauros ["Ninetales"] = {129, 800}, -- kyuubi ["Rapidash"] = {130, 800}, -- rapid ["Ponyta"] = {131, 410}, -- ponyta ["Rhyhorn"] = {132, 400}, -- rhyhorn ["Arcanine"] = {12, 900}, -- arcan ["Onix"] = {126, 450}, -- onix ["Venusaur"] = {134, 390}, -- venu ["Dodrio"] = {133, 750}, -- dodrio ["Doduo"] = {135, 420}, -- doduo ["Shiny Tauros"] = {1024, 580}, -- tauros ["Shiny Arcanine"] = {1003, 900}, -- arcan ["Shiny Onix"] = {126, 450}, -- onix --alterado v1.5 ["Shiny Venusaur"] = {1040, 390}, -- venu ["Shiny Onix"] = {293, 480}, -- cristal onix ["Steelix"] = {646, 750}, -- steelix ["Meganium"] = {685, 720}, -- meganium ["Bayleef"] = {686, 555}, -- bayleef ["Stantler"] = {687, 595}, -- stantler ["Houndoom"] = {647, 820}, -- houndoom ["Piloswine"] = {689, 450}, -- piloswine ["Mareep"] = {688, 400}, -- marip ["Shiny Ninetales"] = {1136, 1000}, -- Shiny Ninetales --alterado v1.9 \/ ["Shiny Dodrio"] = {1145, 750}, -- shiny dodrio ["Luxray"] = {1228, 1000}, ["Rampardos"] = {1180, 1000}, ["Bastiodon"] = {1255, 1000}, ["Torkoal"] = {1404, 1000}, ["Mightyena"] = {1393, 1000}, ["Camerupt"] = {1390, 1000}, ["Shelgon"] = {1387, 1000}, ["Metagross"] = {1386, 1000}, ["Manectric"] = {1385, 1000}, ["Aggron"] = {1381, 1000}, ["Absol"] = {1380, 1000}, } surfs = { ["Poliwag"] = {lookType=278, speed = 320}, ["Poliwhirl"] = {lookType=137, speed = 480}, ["Seaking"] = {lookType=269, speed = 520}, ["Dewgong"] = {lookType=183, speed = 700}, ["Blastoise"] = {lookType=184, speed = 850}, ["Tentacruel"] = {lookType=185, speed = 750}, ["Lapras"] = {lookType=186, speed = 960}, ["Gyarados"] = {lookType=187, speed = 1050}, ["Omastar"] = {lookType=188, speed = 680}, ["Kabutops"] = {lookType=189, speed = 840}, ["Poliwrath"] = {lookType=190, speed = 680}, ["Vaporeon"] = {lookType=191, speed = 800}, ["Staryu"] = {lookType=266, speed = 385}, ["Starmie"] = {lookType=267, speed = 685}, ["Goldeen"] = {lookType=268, speed = 355}, ["Seadra"] = {lookType=270, speed = 655}, ["Golduck"] = {lookType=271, speed = 760}, ["Squirtle"] = {lookType=273, speed = 365}, ["Wartortle"] = {lookType=275, speed = 605}, ["Tentacool"] = {lookType=277, speed = 340}, ["Snorlax"] = {lookType=300, speed = 500}, ----------------Shiny---------------------- ["Shiny Blastoise"] = {lookType=658, speed = 935}, ["Shiny Tentacruel"] = {lookType=1014, speed = 825}, ["Shiny Gyarados"] = {lookType=1030, speed = 1155}, ["Shiny Vaporeon"] = {lookType=1032, speed = 880}, --alterado v1.6 ["Shiny Seadra"] = {lookType=1025, speed = 720.5}, ["Shiny Tentacool"] = {lookType=1013, speed = 374}, ["Shiny Snorlax"] = {lookType=1035, speed = 550}, ----------------Johto---------------------- ["Mantine"] = {lookType=636, speed = 820}, ["Totodile"] = {lookType=637, speed = 360}, ["Croconow"] = {lookType=638, speed = 590}, ["Feraligatr"] = {lookType=645, speed = 900}, ["Marill"] = {lookType=639, speed = 340}, ["Azumarill"] = {lookType=642, speed = 680}, ["Quagsire"] = {lookType=643, speed = 740}, ["Kingdra"] = {lookType=644, speed = 1020}, ["Octillery"] = {lookType=641, speed = 600}, ["Wooper"] = {lookType=640, speed = 315}, --------------- Novos -------------------- ["Buizel"] = {lookType=1160, speed = 315}, ["Floatzel"] = {lookType=1158, speed = 350}, ["Gastrodon east"] = {lookType=1222, speed = 200}, ["Gastrodon"] = {lookType=1221, speed = 200}, ["Finneon"] = {lookType=1193, speed = 120}, ["Lumineon"] = {lookType=1192, speed = 120}, -----------hoen------------------------- ["Walrein"] = {lookType=1406, speed = 120}, ["Wingull"] = {lookType=1400, speed = 120}, ["Wailmer"] = {lookType=1399, speed = 120}, ["Swampert"] = {lookType=1395, speed = 120}, ["Ludicolo"] = {lookType=1392, speed = 120}, ["Sharpedo"] = {lookType=1388, speed = 120}, ["Gorebys"] = {lookType=1383, speed = 120}, ["Huntail"] = {lookType=1382, speed = 120}, ["Relicanth"] = {lookType=1402, speed = 120}, ["Linoone"] = {lookType=1379, speed = 120}, ["Spheal"] = {lookType=1378, speed = 120}, ["Mudkip"] = {lookType=1377, speed = 120}, ["Whiscash"] = {lookType=1376, speed = 120}, ["Marshtomp"] = {lookType=1375, speed = 120}, ["Luvdisc"] = {lookType=1374, speed = 120}, ["Lombre"] = {lookType=1373, speed = 120}, ["Barboach"] = {lookType=1372, speed = 120}, ["Finneon"] = {lookType=1193, speed = 120}, ["Piplup"] = {lookType=1211, speed = 350}, ["Prinplup"] = {lookType=1210, speed = 400}, ["Empoleon"] = {lookType=1213, speed = 550}, é o seguinte, para você adicionar um fly para seu pokemon você terá que pegar o numero de looktype dele, um exemplo: 1000, entao você subtrai por 351: 1000-351=649.. em todo os fly surf, e ride, tem que fazer isso se nao nao irá aparecer
o looktype correto.
Continuando.. agorá procure por:
pokes = { em baixo disso irá aparecer isso:
["Bulbasaur"] = {offense = 4.9, defense = 4.9, specialattack = 6.5, vitality = 4.5, agility = 106, exp = 64, level = 20, wildLvl = 20, type = "grass", type2 = "poison"}, Offense: é o quanto ele irá bater corpo a corpo. Defense: é o tanto de defesa que ele irá ter. SpeciealAttack: o tanto que ele irá hitar com seus poderes ou M1.. Etc. Vitality: o tanto de life que ele terá. Exp: o quanto de exp que ele dará ao morrer (algo do tipo kk) Level: o level que precisa-ra ter para usa-lo. Wildlevel: o level dele quando ele for selvagem: Type 1 e 2: o tipo do elemento dele. OBS: Lembrando que isso e por cada level que seu character upar. e nao o quanto ele vai ter para sempre. entao quer dizer que quanto mais você upar mais forte seu pokemon fica, e com mais life tambem.
agorá va no final dessa tabela e adicione mais uma dessas:
["Shiny magmar"] = {offense = 15.9, defense = 19.9, specialattack = 16.5, vitality = 22.5, agility = 351, exp = 602, level = 150, wildLvl = 150, type = "fire", type2 = "no type"}, Nunca tirem o Type2, se tirarem irá dar erro. entao deixem "no type".
agora em:
fotos = { em baixo vai aparecer:
["Bulbasaur"] = 11989, entao e so ir no final dessa tabelinha, e adicionar mais um:
["Shiny Magmar"] = ID DO PORTFOIL, agora procure por:
pokecatches = { em baixo disso:
["Bulbasaur"] = {chance = 500, corpse = 5969}, agora so ir no final da tabela e adicionar mais um:
["Shiny Magmar"] = {chance = CHANCE DE CATH, corpse = ID DO CORPSE}, Lembrando quanto maior o numero do cauth, mais dificil ele ficar de ser capiturado. entao se deixar 100 e muito facil, se deixar 1500, já fica dificil.
continuando, procure por:
newpokedes - { em baixo disso aparece:
["Bulbasaur"] = {gender = 875, level = 18, storage = 1001, stoCatch = 666001},
no final adicionar mais um, lembrando que no storage e stocath, os numeros devem continuar apartir do ultimo adicionado na tabela que no meu caso eo
["Heatran"] = {gender = 500, level = 100, storage = 11757, stoCatch = 666635},
entao pegamos uma copia do magmar e modificamos ela:
["Magmar"] = {gender = 750, level = 150, storage = 11758, stoCatch = 666636},
.. agora procuremos:
oldpokedex = {
em baixo:
{"Bulbasaur", 18, 1001},
bem já adicionado a portfoil do pokemon desejado e so ir no final da tabela e colocar um igual, ficando assim:
{"Shiny magmar", 150, 11737},
lembrando que o numero 11737 ea continuação da ultima storage que estava na tabela que seria a 11736, do heatran.
agora em:
poevo = {
em baixo disso tem:
["Bulbasaur"] = {level = 40, evolution = "Ivysaur", count = 1, stoneid = 11441, stoneid2 = 0},
Level: o level que precisa estar para evoluir seu pokemon. Evolution: para qual pokemon ele irá evoluir Count: quantas stones precisa para evoluir Stoneid: o id da stone que precisa ter para evoluilo, se quiser deixar 1 stone so, deixe o stoneid2, com um 0.
vamos até o final da tabela e adicionamos mais uma, bem ja que o shiny magmar nao tem evolução eu irei criar um shiny magmortar kkk:
["Shiny Magmar"] = {level = 200, evolution = "Shiny magmortar", count = 3, stoneid = XXXXX, stoneid2 = XXXXX},
Lembrete:
agora procure por:
specialabilities = {
e em baixo:
["rock smash"] = {"Shiny Rhydon", "Nidoking", "Nidoqueen", "Dragonite", "Sandshrew", "Sandslash", "Diglett", "Dugtrio", "Primeape", "Machop", "Machoke", "Machamp", "Geodude", "Graveler", "Golem" , "Onix", "Cubone", "Marowak", "Rhyhorn", "Rhydon", "Kangaskhan", "Tauros", "Snorlax", "Poliwrath", "Hitmonlee", "Hitmonchan", "Aerodactyl", "Blastoise","Shiny Nidoking", "Shiny Dragonite", "Shiny Golem", "Shiny Onix", "Shiny Cubone", "Shiny Marowak", "Shiny Snorlax", "Shiny Hitmonlee", "Shiny Hitmontop", "Shiny Hitmonchan", "Shiny Blastoise", "Typhlosion", "Feraligatr", "Furret", "Ledian", "Ampharos", "Politoed", "Quagsire", "Forretress", "Steelix", "Snubbull", "Granbull", "Sudowoodo", "Gligar", "Scizor", "Heracross", "Sneasel", "Ursaring", "Teddiursa", "Slugma", "Magcargo", "Piloswine", "Swinub", "Corsola", "Phanpy", "Donphan", "Tyrogue", "Hitmontop", "Miltank", "Blissey", "Tyranitar", "Pupitar", "Magmortar", "Torterra", "Monferno", "Gible", "Gabite", "Garchomp", "Electivire", "Mamoswine", "Ambipom", "Cranidos"}, ["cut"] = {"Kabutops", "Raticate", "Bulbasaur", "Ivysaur", "Venusaur", "Charmeleon", "Charizard", "Sandshrew", "Sandslash", "Gloom", "Vileplume", "Paras", "Parasect", "Meowth", "Persian", "Bellsprout", "Weepinbell", "Victreebel", "Farfetch'd", "Krabby", "Kingler", "Exeggutor", "Cubone", "Marowak", "Tangela", "Scyther", "Pinsir", "Shiny Raticate", "Shiny Venusaur", "Shiny Charizard", "Shiny Vileplume", "Shiny Paras", "Shiny Parasect", "Shiny Farfetch'd", "Shiny Krabby", "Shiny Kingler", "Shiny Cubone", "Shiny Marowak", "Shiny Tangela", "Shiny Scyther", "Shiny Pinsir", "Chikorita", "Bayleef", "Meganium", "Croconow", "Feraligatr", "Furret", "Bellossom", "Hoppip", "Skiploom", "Jumpluff", "Sunkern", "Sunflora", "Scizor", "Heracross", "Sneasel", "Teddiursa", "Ursaring", "Gligar", "Skarmory", "Turtwig", "Grotle", "Torterra", "Monferno", "Gabite", "Kricketot", "Kricketune", "Mothim"}, ["light"] = {"Shiny Espeon", "Shiny Electrode", "Abra", "Kadabra", "Alakazam", "Magnemite", "Magneton", "Drowzee", "Hypno", "Voltorb", "Electrode", "Mrmime", "Electabuzz", "Jolteon", "Porygon", "Pikachu", "Raichu", "Shiny Abra", "Shiny Alakazam", "Shiny Hypno", "Shiny Voltorb", "Shiny Electrode", "Shiny Electabuzz", "Shiny Jolteon", "Shiny Raichu", "Chinchou", "Lanturn", "Pichu", "Natu", "Xatu", "Mareep", "Flaaffy", "Ampharos", "Espeon", "Porygon2", "Elekid", "Electivire", "Shinx", "Luxio", "Luxray", "Pachirisu"}, ["digholes"] = {"468", "481", "483"}, ["ghostwalk"] = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Darkrai", "Mismagius", "Drifblim"}, ["dig"] = {"Shiny Dodrio", "Shiny Umbreon", "Shiny Espeon", "Shiny Ninetales", "Shiny Rhydon", "Raticate", "Sandshrew", "Sandslash", "Diglett", "Dugtrio", "Primeape", "Machop", "Machoke", "Machamp", "Geodude", "Graveler", "Golem" , "Onix", "Cubone", "Marowak", "Rhyhorn", "Rhydon", "Kangaskhan", "Tauros", "Snorlax", "Eevee", "Flareon", "Jolteon", "Vaporeon", "Vulpix", "Ninetales", "Nidorina", "Nidoqueen", "Nidorino", "Nidoking", "Persian", "Arcanine", "Shiny Raticate", "Shiny Golem" , "Shiny Onix", "Shiny Cubone", "Shiny Marowak", "Shiny Snorlax", "Shiny Flareon", "Shiny Jolteon", "Shiny Vaporeon", "Shiny Nidoking", "Shiny Arcanine", "Typhlosion", "Feraligatr", "Furret", "Espeon", "Umbreon", "Ledian", "Sudowoodo", "Politoed", "Quagsire", "Gligar", "Steelix", "Snubbull", "Granbull", "Heracross", "Dunsparce", "Sneasel", "Teddiursa", "Ursaring", "Piloswine", "Hitmontop", "Larvitar", "Pupitar", "Tyranitar", "Chinchar", "Gible", "Riolu", "Cranidos"}, ["blink"] = {"Shiny Abra", "Shiny Espeon", "Shiny Mr. Mime", "Jynx", "Shiny Jynx", "Hypno", "Shiny Hypno", "Slowking", "Natu", "Xatu", "Espeon", "Mew", "Mewtwo", "Abra", "Kadabra", "Alakazam", "Porygon", "Shiny Abra", "Shiny Alakazam", "Porygon2", "Mr. Mime", "Bronzor"}, ["teleport"] = {"Shiny Mr. Mime", 'Mew', 'Mewtwo', 'Abra', 'Kadabra', 'Alakazam', 'Drowzee', 'Hypno', 'Mr. Mime', 'Porygon', 'Shiny Abra', 'Shiny Alakazam', 'Shiny Hypno', 'Porygon2'}, ["fly"] = {"Xatu", "Heracross", "Farfetch'd", "Shiny Farfetch'd", "Noctowl", "Dragonair", "Shiny Dragonair", "Porygon", "Aerodactyl", "Dragonite", "Charizard", "Pidgeot", "Fearow", "Zapdos", "Moltres", "Articuno", "Mew", "Mewtwo", "Shiny Dragonite", "Shiny Charizard", "Shiny Pidgeot", "Shiny Fearow", "Porygon2", "Skarmory", "Crobat", "Togekiss", "Staraptor", "Drifblim", "Honchkrow", "Salamence", "Tropius", "Flygon", "Altaria", "Pelipper", "Swellow"}, ["ride"] = {"Shiny Dodrio", "Shiny Ninetales", "Shiny Onix", "Venusaur", "Ninetales", "Arcanine", "Ponyta", "Rapidash", "Doduo", "Dodrio", "Onix", "Rhyhorn", "Tauros", "Shiny Venusaur", "Shiny Arcanine", "Steelix", "Houndoom", "Meganium", "Bayleef", "Stantler", "Mareep", "Piloswine", "Luxray", "Rampardos", "Bastiodon", "Torkoal", "Shelgon", "Metagross", "Manectric", "Mightyena", "Camerupt", "Absol"}, ["surf"] = {"Poliwag", "Poliwhirl", "Seaking", "Dewgong", "Blastoise", "Tentacruel", "Lapras", "Gyarados", "Omastar", "Kabutops", "Vaporeon", "Staryu", "Starmie", "Goldeen", "Seadra", "Golduck", "Squirtle", "Wartortle", "Tentacool", "Snorlax", "Poliwrath", "Shiny Blastoise", "Shiny Tentacruel", "Shiny Gyarados", "Shiny Vaporeon", "Shiny Seadra", "Shiny Tentacool", "Shiny Snorlax", "Mantine", "Totodile", "Croconow", "Feraligatr", "Marill", "Azumarill", "Quagsire", "Wooper", "Octillery", "Kingdra", "Piplup", "Prinplup", "Empoleon", "Buizel", "Floatzel", "Gastrodon east", "Gastrodon", "Finneon", "Lumineon", "Wailmer", "Ludicolo", "Mudkip", "Luvdisc", "Lombre", "Sharpedo", "Swampert", "Wingull", "Walrein", "Gorebys", "Huntail", "Linoone", "Spheal", "Barboach", "Marshtomp", "Whiscash"}, ["foresight"] = {"Machamp", "Shiny Hitmonchan", "Shiny Hitmonlee", "Shiny Hitmontop", "Hitmontop", "Hitmonlee", "Hitmonchan", "Chinchar"}, ["counter"] = {"Machamp", "Machoke", "Hitmonchan", "Hitmonlee", "Magmar", "Electabuzz", "Scyther", "Snorlax", "Kangaskhan", "Arcanine", "Shiny Arcanine", "Shiny Snorlax", "Shiny Scyther", "Shiny Hitmonchan", "Shiny Hitmonlee", "Shiny Electabuzz", "Hitmontop", "Shiny Hitmontop", "Magmortar", "Gible", "Gabite"}, ["levitate"] = {"Gengar", "Haunter", "Gastly", "Misdreavus", "Weezing", "Koffing", "Unown", "Shiny Gengar"}, ["evasion"] = {"Scyther", "Scizor", "Hitmonlee", "Hitmonchan", "Hitmontop", "Tyrogue", "Shiny Scyther", "Shiny Hitmonchan", "Shiny Hitmonlee", "Shiny Hitmontop", "Ledian", "Ledyba", "Sneasel"}, ["control mind"] = {'Haunter', 'Gengar', 'Tentacruel', 'Alakazam', 'Shiny Tentacruel', 'Shiny Gengar', 'Shiny Alakazam', 'Slowking'}, ["transform"] = {"Ditto"}, ["levitate_fly"] = {"Gengar", "Shiny Gengar"}, se quiser que o pokemon tenha alguma dessas abilidades e so adicionar o nome dele ali, e cuidado para nao errar nos sinais kkk.
Bem galera e isso, espero ter explicado bem kkk. eu usei meu servidor como base desse tutorial, entao seis vao estranhar os pokemons da 3 e 4 geração kk. abraçs e até. deixe seu comentario do que achou.
Creditos:
Eu (Por criar o topico)
Slicer (Pelo servidor que eu peguei as informações)
Brun123 (Por criar os sistemas dessa tabela, pelo menos eu acho que foi ele kk nao sei).
-
Tredfg recebeu reputação de xRunning em [Encerrado] [PEDIDO]Client Ot Pokemon 2014
Amigo to ta querendo o dat.spr do 7.0?
@EDIT
Irei por pra upload.
@EDIT
[RESOLVIDO]
Dowload Dat e spr
-
Tredfg deu reputação a Benny em [ Pokémon ] Lunus OT Completo
Haha, grande servidor lunus ot, consegui achar aqui pelo computador, e estou postando aqui para vocês
Vantagem e desvantagem dependendo do tipo dos pokémons (agora com múltiplos tipos).
• Order funcional com as habilidades dos pokemons (fly, ride, dig, cut, light, rock smash, blink, move).
• Comandos m1 até m12, desta vez configurado para todos os 151 pokémons.
• Pokémons passivos e agressivos, desta vez feito em c++ (sources) melhorando o desempenho.
• Catch com 4 pokébolas, com limite de 6 pokémons e o 7º indo para o CP.
• Nurse heala todos os pokémons de uma só vez, inclusive retira os status de sleep, burn etc.
• Portrait, go back e todos os outros sistemas mais básicos.
• Pokedex automática, ao usar em um pokémon, o texto é escrito automaticamente (não é necessário ficar editando arquivo por arquivo).
• Pokémons tem seu próprio level e evoluem ao atingir o level necessário sozinhos, alguns usam stones ainda.
• Cada pokémon tem seus status (offense, defense, special attack, agility).
• Comando !cd parar checar os cooldowns do pokémon.
• Sistema TV/Cam e PC.
• Sistemas de felicidade, influenciando no ataque e evolução.
• Sistema de fome.
• Box que da pokémons.
• NPC que troca nick.
• Potions que healam a vida dos pokemons.
• SPR e DAT do tibia original mantidos, e adicionado maioria dos sprites de pokémon.
• Pokemon Statistics (veja quantas vezes tentaram capturar um pokemon/já capturaram ele).
• Fly com apenas 1 chão embaixo do player, e não vários em volta.
• Pokémons de players podem se atacar desde que os donos estejam em uma party
E Tambem ajustes do servidor LunusOT
Todos os pokemons desde Shinys a Johto com forças,vida e ataques ajustados
Pokemons upam até o nível 300
Pokemons selvagens podem ser encontrados até no nível 255
Mapa contando com respaw de pokemons Johtos e quests
Alguns pokemons lendarios no final das quests
Magias novas
Cooldown Bar
Old,Great,Super e Ultra fishing rod
Box ajustada
e mais alguns ajustes.
Download :
Download
Client
Créditos
Equipe Lunus
Flinkton
~Exclusivo XTibia.Com
=)
-
Tredfg recebeu reputação de PoxaGuh em [Encerrado] [POKETIBIA] ERRO
o Bug Do Surf eu posso arruma vc quer o surf free ou premiun porque ai jah te do o certo
@EDIT
Troque o seu Surf.lua por isso aqui.
local function doSendMagicEffecte(pos, effect) addEvent(doSendMagicEffect, 50, pos, effect) end local waters = {11756, 4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825} local flie = {'4820', '4821', '4822', '4823', '4824', '4825'} --alterado v1.6 tabelas agora em configuration.lua! local premium = true function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) or getPlayerAccess(cid) >= 6 then return true end if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end -- TV if isPlayer(cid) and not isPremium(cid) and premium == true then doTeleportThing(cid, fromPosition, false) doPlayerSendCancel(cid, "Only premium members are allowed to surf.") return true end if getCreatureOutfit(cid).lookType == 316 or getCreatureOutfit(cid).lookType == 648 then doSendMagicEffect(fromPosition, 136) end if (getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1) then return true end if #getCreatureSummons(cid) == 0 then doPlayerSendCancel(cid, "You need a pokemon to surf.") doTeleportThing(cid, fromPosition, false) return true end if (not isInArray(specialabilities["surf"], getPokemonName(getCreatureSummons(cid)[1]))) then doPlayerSendCancel(cid, "This pokemon cannot surf.") doTeleportThing(cid, fromPosition, false) return true end if getPlayerStorageValue(cid, 5700) == 1 then doPlayerSendCancel(cid, "You can't do that while is mount in a bike!") doTeleportThing(cid, fromPosition, false) return true end if getPlayerStorageValue(cid, 212124) >= 1 then --alterado v1.6 doPlayerSendCancel(cid, "You can't do it with a pokemon with mind controlled!") doTeleportThing(cid, fromPosition, false) return true end if getPlayerStorageValue(cid, 52480) >= 1 then doPlayerSendCancel(cid, "You can't do it while a duel!") doTeleportThing(cid, fromPosition, false) return true end if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then doPlayerSendCancel(cid, "You can't do it while in the PVP Zone!") doTeleportThing(cid, fromPosition, false) return true end doSetCreatureOutfit(cid, {lookType = surfs[getPokemonName(getCreatureSummons(cid)[1])].lookType + 351}, -1) doCreatureSay(cid, ""..getPokeName(getCreatureSummons(cid)[1])..", lets surf!", 1) doChangeSpeed(cid, -(getCreatureSpeed(cid))) local speed = 75 + PlayerSpeed + getSpeed(getCreatureSummons(cid)[1]) * 8 * speedRate setPlayerStorageValue(cid, 54844, speed) doChangeSpeed(cid, speed) local pct = getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1]) doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", pct) doRemoveCreature(getCreatureSummons(cid)[1]) addEvent(setPlayerStorageValue, 100, cid, 63215, 1) local item = getPlayerSlotItem(cid, 8) if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then addEvent(sendAuraEffect, 120, cid, auraSyst[getItemAttribute(item.uid, "aura")]) end if useOTClient then doPlayerSendCancel(cid, '12//,hide') end return true end local direffects = {30, 49, 9, 51} function onStepOut(cid, item, position, fromPosition) if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end local checkpos = fromPosition checkpos.stackpos = 0 if isInArray(waters, getTileInfo(checkpos).itemid) then if getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 then doSendMagicEffecte(fromPosition, direffects[getCreatureLookDir(cid) + 1]) end end if not isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then if getPlayerStorageValue(cid, 17000) >= 1 then return true end if getPlayerStorageValue(cid, 63215) <= 0 then return true end doRemoveCondition(cid, CONDITION_OUTFIT) setPlayerStorageValue(cid, 63215, -1) local item = getPlayerSlotItem(cid, 8) local pokemon = getItemAttribute(item.uid, "poke") local x = pokes[pokemon] if not x then return true end if getItemAttribute(item.uid, "nick") then doCreatureSay(cid, getItemAttribute(item.uid, "nick")..", I'm tired of surfing!", 1) else doCreatureSay(cid, getItemAttribute(item.uid, "poke")..", I'm tired of surfing!", 1) end doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then pk = doCreateMonster(pokemon, backupPos) if not isCreature(pk) then doPlayerSendCancel(cid, "You can't stop surfing here.") doTeleportThing(cid, fromPosition, false) return true end doConvinceCreature(cid, pk) end doChangeSpeed(pk, getCreatureSpeed(cid)) doChangeSpeed(cid, -getCreatureSpeed(cid)) doRegainSpeed(cid) --alterado v1.6 doTeleportThing(pk, fromPosition, false) doTeleportThing(pk, getThingPos(cid), true) doCreatureSetLookDir(pk, getCreatureLookDir(cid)) adjustStatus(pk, item.uid, true, false, true) if useOTClient then doPlayerSendCancel(cid, '12//,show') end end return true end @Edit e Teu Spawn.lua por esse local shinys = { "Venusaur", "Charizard", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate", "Raichu", "Zubat", "Golbat", "Paras", "Parasect", "Venonat", "Venomoth", "Growlithe", "Arcanine", "Abra", "Alakazam", "Tentacool", "Tentacruel", "Farfetch'd", "Grimer", "Muk", "Gengar", "Onix", "Krabby", "Kingler", "Voltorb", "Electrode", "Cubone", "Marowak", "Hitmonlee", "Hitmonchan", "Tangela", "Horsea", "Seadra", "Scyther", "Jynx", "Electabuzz", "Pinsir", "Magikarp", "Gyarados", "Snorlax", "Dragonair", "Dratini"} local raros = {"Dragonite"} local function ShinyName(cid) if isCreature(cid) then if string.find(tostring(getCreatureName(cid)), "Shiny") then local newName = tostring(getCreatureName(cid)):match("Shiny (.*)") doCreatureSetNick(cid, newName) if isMonster(cid) then doSetCreatureDropLoot(cid, false) end end end end local function doSetRandomGender(cid) if not isCreature(cid) then return true end if isSummon(cid) then return true end local gender = 0 local name = getCreatureName(cid) if not newpokedex[name] then return true end local rate = newpokedex[name].gender if rate == 0 then gender = 3 elseif rate == 1000 then gender = 4 elseif rate == -1 then gender = 0 elseif math.random(1, 1000) <= rate then gender = 4 else gender = 3 end doCreatureSetSkullType(cid, gender) end local function doShiny(cid) if isCreature(cid) then if isSummon(cid) then return true end if getPlayerStorageValue(cid, 74469) >= 1 then return true end if getPlayerStorageValue(cid, 22546) >= 1 then return true end if isNpcSummon(cid) then return true end if isInArray(shinys, getCreatureName(cid)) then transform = math.random(1, 1000) --0.1% chance elseif isInArray(raros, getCreatureName(cid)) then transform = math.random(1, 1000) --0.1% chance else return true end if transform == 10 then doSendMagicEffect(getThingPos(cid), 18) local shi = doCreateMonster("Shiny ".. getCreatureName(cid) .."", getThingPos(cid)) setPlayerStorageValue(shi, 74469, 1) setPlayerStorageValue(cid, 74469, 1) doRemoveCreature(cid) else setPlayerStorageValue(cid, 74469, 1) end else return true end end function onSpawn(cid) registerCreatureEvent(cid, "Experience") registerCreatureEvent(cid, "GeneralConfiguration") registerCreatureEvent(cid, "DirectionSystem") registerCreatureEvent(cid, "CastSystem") if isSummon(cid) then registerCreatureEvent(cid, "SummonDeath") return true end addEvent(doSetRandomGender, 5, cid) addEvent(doShiny, 10, cid) addEvent(ShinyName, 15, cid) addEvent(adjustWildPoke, 5, cid) return true end -
Tredfg deu reputação a heavy2 em [Encerrado] Ajuda Fly Ride surf
Simples vá no Dat/Editor procure a Sprite do Ninetales dando Ride..
Exemplo:
Se o ID La do Dat/Editor for 1651
vc Pega esse ID e Diminui por 351 Ficando 1300. ai vc coloca assim
["Ninetales"] = {1300, 800}, -- kyuubi " E pronto so salvar
OBS: Sempre que for adicionar algum Surf,,Fly,Ride basta pegar o id e diminuir - 351 e pronto
OBS2: ["Ninetales"] = {129, 800}, -- kyuubi "
O 129 é o ID e o 800 é a velocidade
Boa Sorte!
-
-
Tredfg deu reputação a AlexandreKG em [Tutorial] Como Descompilar Client?
Fala XTibianos,trago a voces mais um tutorial para a comunidade.Dessa ves como descompilar client de tibia.
OBS:Downloads no final do topico.
Começando!!!
Crie uma pasta onde vai ficar o client e os arquivos descompilados.
Ficando Assim.
Depois Ponha o Client dentro desta pasta.
Ficando Assim.
Abra o client e o TibiaUnpacker.
Ficando Assim,o processo.
Lá em Process,clique na caixa e procure pelo processo do seu client.
Depois vá em Unpack
Aguarde o Processo,Quando aparecer a mensagem
[Library] Unpacking process has been completed.
O client foi descompilado com sucesso.
Depois vá na pasta onde estava o client e la estará os arquivos.
Prontinho pessoal é isso.
Download:
TibiaUnpacker
Scan:
Aqui
OBS:Nao sei oq tem de virus,é so um arquivo.
mais é 5/44
Créditos:
Mozark001.
-
Tredfg deu reputação a kttallan em [Encerrado] Peça Uma Edição De Map Resolva Seus Scriptar - Derivados
Tipo man primeiro você cria um mapa do 0 ai vocé pega akele pedaço é bota no mapa 0 dps sobe pro floor 6 é coloca a parte de cima assim por diante dps de vocé tiver feito isso vocé feixa o mapa que vocé pegou o pedaço é coloca no map do seu serve.. simples isso caso não consiga me manda um mp com o pedaço do mapa que vocé quer passar.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.