Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 05/24/13 em todas áreas

  1. BananaFight

    Char Maker

    Esse Mod faz com que seja possível criar novos char na sua acc usando apenas o client. OBS: Ele usa Opcode, e com isso só é possível criar char com um personagem online, Porem o sistema é foi totalmente feito para funcionar com um personagem off, então a menos que você consiga editar as source do server, só será possível criar novos personagens na conta com um char logado, Pois os opcodes só funcionam com um char logado. Nome: Char MakerDescrição: Criado de charAutor: Eduardo Vicente (Banana Fight)Website: www.xtibia.com Client Side Client_Entergame/Entergame.lua Procure por: if modules.game_things.isLoaded() thenprotocolLogin:login(G.host, G.port, G.account, G.password) e embaixo adicione: accountName = G.account Client_Entergame/Characterlist.lua procure por : -- public functions[function CharacterList.init()connect(g_game, { onLoginError = onGameLoginError })connect(g_game, { onUpdateNeeded = onGameUpdateNeeded })connect(g_game, { onConnectionError = onGameConnectionError })connect(g_game, { onGameStart = CharacterList.destroyLoadBox })connect(g_game, { onLoginWait = onLoginWait })connect(g_game, { onGameEnd = CharacterList.showAgain })if G.characters thenCharacterList.create(G.characters, G.characterAccount)endend E substitua por : -- public functions[function CharacterList.init()connect(g_game, { onLoginError = onGameLoginError })connect(g_game, { onUpdateNeeded = onGameUpdateNeeded })connect(g_game, { onConnectionError = onGameConnectionError })connect(g_game, { onGameStart = CharacterList.destroyLoadBox })connect(g_game, { onLoginWait = onLoginWait })connect(g_game, { onGameEnd = CharacterList.showAgain })if G.characters thenCharacterList.create(G.characters, G.characterAccount)endnewChar = g_ui.displayUI('newchar')newChar:hide()endfunction sendAll()local msg = newChar:getChildById('msg')local name = newChar:getChildById('name'):getText()local sex = newChar:getChildById('sex'):getText()local voc = newChar:getChildById('vocation'):getText()local protocol = g_game.getProtocolGame()local sendSexlocal sendVocif sex == "male" thensendSex = 0elsesendSex = 1endif voc == "Sorcerer" thensendVoc = 1elseif voc == "Druid" thensendVoc = 2elseif voc == "Paladin" thensendVoc = 3elsesendVoc = 4endprotocol:sendExtendedOpcode(152, string.format("%s,%s,%d,%d", accountName, name, sendVoc, sendSex))msg:setColor("green")msg:setText("Character "..name.." Created")end Agora Crie um arquivo com o nome newchar.lua, e adiciona isso dentro : MainWindowid: characterCreator!text: tr('New Char')size: 210 250@onEnter: sendAll()Labelid: labelNametext: Choose your name:color: whitetext-auto-resize: trueanchors.top: parent.topanchors.left: parent.leftmargin-top: 2TextEditid: nameanchors.left: parent.leftanchors.right: parent.rightanchors.top: prev.bottommargin-top: 5Labelid: labelSextext: Chose your sextext-auto-resize: truecolor: whiteanchors.left: parent.leftanchors.top: name.bottommargin-top: 10ComboBoxid: sexanchors.left: parent.leftanchors.top: labelSex.bottommargin-top: 5width: 75options:- Male- FemaleLabelid: labelVocationtext: Chose your vocationtext-auto-resize: truecolor: whiteanchors.left: parent.leftanchors.top: sex.bottommargin-top: 10ComboBoxid: vocationanchors.left: parent.leftanchors.top: labelVocation.bottommargin-top: 5width: 100options:- Knight- Paladin- Sorcerer- DruidLabelid: msgtext-auto-resize: trueanchors.left: parent.leftanchors.top: vocation.bottommargin-top: 20Buttonid: creatChartext: Creat Charactercolor: whiteanchors.left: parent.leftanchors.bottom: parent.bottom@onClick: sendAll()Buttonid: canceltext: Cancelcolor: whiteanchors.left: creatChar.rightanchors.right: parent.rightanchors.bottom: parent.bottommargin-left: 10@onClick: newChar:hide() E no chartacterlist.otui, lá no final você apaga os 2 botões de "cancel" e "ok" e substituto por estes : Buttonid: newChartext: New Charwidth: 64anchors.left: parent.leftanchors.bottom: parent.bottom@onClick: newChar:show()Buttonid: buttonOk!text: tr('Ok')width: 64anchors.left: newChar.rightanchors.right: buttonCancel.leftanchors.bottom: parent.bottommargin-right: 10margin-left: 10@onClick: CharacterList.doLogin()Buttonid: buttonCancel!text: tr('Cancel')width: 64anchors.right: parent.rightanchors.bottom: parent.bottom@onClick: CharacterList.hide(true) Server Side Data/Creaturescritps/scripts crie um arquivo chamado exetendedopcode.lua, e adicione isso dentro : local QUERY = "INSERT INTO `players` VALUES (NULL, '%s', 0, 1, %d, 1, %d, 150, 150, 0, 0, 0, 0, 0, 221, 0, 0, 50, 50, 0, 0, 1, 95, 127, 7, 0, 400, %d, 0, 0, 1, 0, 0, 0, '', 0, 0, 0, 151200000, 2, 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, '');"NEW_ACCOUNT_CHAR = 152function onExtendedOpcode(cid, opcode, buffer)if opcode == NEW_ACCOUNT_CHAR thenlocal info = string.explode(buffer, ",")for a = 1, #info doif tonumber(info[a]) theninfo[a] = tonumber(info[a])endenddb.executeQuery(string.format(QUERY, info[2], getAccountIdByAccount(info[1]), info[3], info[4]))endreturn trueend E dentro do creaturescripts.xml adicione : <event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/> O sistema ainda não esta 100% completo, falta a parte que envia uma mensagem de erro quando o char não é criado, Porem eu não irei atualizar esse sistema pelo fato de só funcionar com char online.
    5 pontos
  2. beto06

    Khalin:The New Era

    cara nem se rebaixa tanto..
    3 pontos
  3. Eu tenho net compartilhada - o Ip muda sempre que reinicio o modem, queria saber se tem como eu colocar site em poketibia com net compartilhada, e se teria como tirar o ipchanger/hamachi do client, se tiver como me mandem um tutorial, dou rep+. ~Agradeço desde já~
    3 pontos
  4. Baixei o Tibia no Vapus, mas o Client não abre, é só clicar no .exe que dá Debug .-.
    3 pontos
  5. Olá galerinha do xtibia venho aqui hoje para postar o novo modern acc editado por min eu traduzi ele todo e fiz um template massa para voçês depois falarei mais oque ele tem sem mais delongas o download está ae. Print: Download: http://www.mediafire...7zh3dtg5pznl42e Download Sql: http://www.mediafire.com/?a9549gzo7w6tmgl Scan: pesso que alguem faça para min não sou bom com isso :X PS:COMENTEM OQUE VOÇÊS QUEREM NA V2 CREDITOS: Junior001 Gabrieltxu
    2 pontos
  6. AsMinaPira

    [Encerrado] [Duvida] tag Itens.xml

    Marca as opções no items.otb: -Not Moveable -Always Top e em TopOrder você coloca 3. no Dat Editor marca: -Top 3 - Immoble e claro salva tudo...
    2 pontos
  7. nailo

    Khalin:The New Era

    Mapeio muito melhor que você meu amigo, você é um iniciante ainda,muita coisa para aprender
    2 pontos
  8. Eventide

    Criando seu NPC sem Jiddo

    Pre-requisitos para entender o tutorial Para entender este tutorial é necessario que você saiba sobre tabelas e condicionais(if, else, elseif), tutorial sobre tabelas pode ser encontrado facilmente neste fórum, mas infelizmente o de condicionais parece estar um pouco corroído pelo tempo. Introdução Pra quem não sabe, Jiddo é um sistema de NPCs que nem sempre foi o padrão, hoje em dia é muito difícil encontrar um NPC na sua pasta data que não tenha sido feito nele, ele é simplesmente uma biblioteca feita por cima do sistema padrão, entretanto não é nada flexivel, faço das palavras que o Mock certa vez usou em uma discussão as minhas: "jiido é um pedaço de ferro fundido e o normal é um pedaço de silicone." Basicamente, se você quer fazer um NPC que não é simplesmente um shopper, não use Jiddo, mas aí você me pergunta, porque eu faria um NPC que não é um shopper? Tenta advinha que hoje eu to difícil rçrçrçrç. Brincadeira, fique com um exemplo que seria praticamente impossivel de se fazer com Jiddo: (relevem a tosquera do video, ele é meio antiguinho, eu mesmo morri de rir revendo ele) Eventos Como todo tipo de script, os NPCs também tem eventos, eles são: onThink() Roda sempre. onPlayerEndTrade(cid) Roda sempre que alguém fecha o shop do NPC. onPlayerCloseChannel(cid) Roda sempre que alguém fecha o canal NPC. onCreatureSay(cid, type, msg) Roda quando alguém fala com o NPC. onCreatureDisappear(cid) Roda quando o player(ou um monstro) sai do radius do npc. onCreatureAppear(cid) É ativado quando o player(ou um monstro) entra no radius do npc. O padrão Diferente dos outros tipos de script, os NPCs tem um padrão a ser seguido para poderem funcionar, vou usar neste tutorial o exemplo de como fazer um NPC de compra e venda para que vocês entendam este padrão. Em primeiro lugar você deve copiar e colar isso no seu script: local focuses = {} local function isFocused(cid) for i, v in pairs(focuses) do if(v == cid) then return true end end return false end local function addFocus(cid) if(not isFocused(cid)) then table.insert(focuses, cid) end end local function removeFocus(cid) for i, v in pairs(focuses) do if(v == cid) then table.remove(focuses, i) break end end end local function lookAtFocus() for i, v in pairs(focuses) do if(isPlayer(v)) then doNpcSetCreatureFocus(v) return end end doNpcSetCreatureFocus(0) end Se o NPC for de compra e venda, adicione isso também: local itemWindow = { {id=2160, subType=0, buy=10000, sell=10000, name="Test1"}, {id=2152, subType=0, buy=100, sell=100, name="Test2"}, {id=2148, subType=0, buy=1, sell=1, name="Test3"}, {id=2173, subType=0, buy=10000, sell=5000, name="Test4"} } local items = {} for _, item in ipairs(itemWindow) do items[item.id] = {buyPrice = item.buy, sellPrice = item.sell, subType = item.subType, realName = item.name} end local function getPlayerMoney(cid) return ((getPlayerItemCount(cid, 2160) * 10000) + (getPlayerItemCount(cid, 2152) * 100) + getPlayerItemCount(cid, 2148)) end local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks) if(items[item] == nil) then selfSay("Ehm.. sorry... this shouldn't be there, I'm not selling it.", cid) return end if(getPlayerMoney(cid) >= amount * items[item].buyPrice) then local itemz, i = doNpcSellItem(cid, item, amount, subType, ignoreCap, inBackpacks) if(i < amount) then if(i == 0) then selfSay("Sorry, but you don't have space to take it.", cid) else selfSay("I've sold some for you, but it seems you can't carry more than this. I won't take more money than necessary.", cid) doPlayerRemoveMoney(cid, i * items[item].buyPrice) end else selfSay("Thanks for the money!", cid) doPlayerRemoveMoney(cid, amount * items[item].buyPrice) end else selfSay("Stfu noob, you don't have money.", cid) end end local onSell = function(cid, item, subType, amount, ignoreCap, inBackpacks) if(items[item] == nil) then selfSay("Ehm.. sorry... this shouldn't be there, I'm not buying it.", cid) end if(subType < 1) then subType = -1 end if(doPlayerRemoveItem(cid, item, amount, subType)) then doPlayerAddMoney(cid, items[item].sellPrice * amount) selfSay("Here you are.", cid) else selfSay("No item, no deal.", cid) end end dica: mude as strings do selfSay Agora vamos entender o que faz esse código: isFocused(cid) verifica se o jogador cid está falando com o NPC addFocus(cid) adiciona o jogador cid a lista de jogadores que estão falando com o NPC. removeFocus(cid) remove o jogador da lista de jogadores que estão falando com o NPC. lookAtFocus() força o NPC a olhar pro jogador que está falando com ele. getPlayerMoney(cid) retorna a quantidade de dinheiro que o jogador cid tem.(alguns servidores já vem com essa função) onBuy é a função que é executada toda vez que o jogador compra um item. onSell é a função que é executada quando um jogador vende um item. Agora atenção especial para a tabela itemWindow: local itemWindow = { {id=2160, subType=0, buy=10000, sell=10000, name="Test1"}, {id=2152, subType=0, buy=100, sell=100, name="Test2"}, {id=2148, subType=0, buy=1, sell=1, name="Test3"}, {id=2173, subType=0, buy=10000, sell=5000, name="Test4"} } Nesta tabela você deve configurar os itens que serão vendidos no shop, se você não sabe como funciona uma tabela, procure um tutorial a respeito, mas pra facilitar, simplesmente edite as variaveis dentro da tabela, mantendo as aspas quanto tiver e quando for para apenas vender o item delete o "buy = valor," e para apenas comprar delete o "sell = valor,", para remover ou adicionar itens, não se esqueça que depois do "}" sempre deve haver uma virgula, exceto para o ultimo valor. Padrão para o evento onThink() Existe um código que deve ser sempre copiado para o evento onThink(), qualquer modificação no evento deve ser feita após esse código a não ser que você saiba o que está fazendo: function onThink() for i, focus in pairs(focuses) do if(not isCreature(focus)) then removeFocus(focus) else local distance = getDistanceTo(focus) or -1 if((distance > 4) or (distance == -1)) then selfSay("Hmph!") closeShopWindow(focus) removeFocus(focus) end end end lookAtFocus() end Padrão para o evento onCreatureSay(cid, type, msg) Qual é a primeira coisa que alguem fala pro NPC? Geralmente é o hi, né? Então, você diz hi para o NPC para iniciar uma conversa com ele, portanto devemos verificar antes se o jogador não estava conversando antes, para isso usamos essa condicional: function onCreatureSay(cid, type, msg) if((msg == "hi") and not (isFocused(cid))) then Para só depois o NPC dar as boas vindas ao jogador e adiciona-lo a lista dos conversantes: function onCreatureSay(cid, type, msg) if((msg == "hi") and not (isFocused(cid))) then selfSay("Welcome, ".. getCreatureName(cid) ..".", cid, true) selfSay("Do you want to see my {wares}?", cid) addFocus(cid) Agora, e pra abrir o shop depois que o player disse hi? Verificamos se a variavel do parametro msg é igual a "trade" ou "warez" e tambem verificamos se o jogador está entre a lista de conversantes, afinal ninguem sai falando "deixa eu vê seus item aí mano" sem falar um "oi" antes, né? elseif((isFocused(cid)) and (msg == "wares" or msg == "trade")) then selfSay("Pretty nice, right?", cid) openShopWindow(cid, itemWindow, onBuy, onSell) E o "bye"? como fica nessa história? Praticamente a mesma coisa do trade, só que ao invez de abrir o shop, ele fecha: elseif((isFocused(cid)) and (msg == "bye" or msg == "goodbye" or msg == "cya")) then selfSay("Goodbye!", cid, true) closeShopWindow(cid) removeFocus(cid) E se eu quiser fazer outro tipo de conversa, mais voltada para uma quest, por exemplo? Então você, alem de ter que verificar o que foi dito, deve verificar se algo já foi dito antes, confuso? Vou dar um exemplo pratico, o jogador fala quest para o NPC, então o NPC responde que ele precisa de ajuda mas que é algo complicado e pergunta se você tem certeza, então se você responde que não ele desiste e se responde que sim dá a quest, como fazer isso? Simples, você deve fazer uma variavel com valor zero antes do evento onCreatureSay, quando o jogador falar quest, você dá o valor um pra ela, então quando o player falar yes, você verifica se o valor da variavel é um, não entendeu? De uma olhada em como isso ficaria no script: elseif((isFocused(cid)) and (msg == "quest")) then count = 1 selfSay("Hmm, não sei se você é capaz de fazer o que eu quero, você tem certeza que quer fazer isso?", cid) elseif((isFocused(cid)) and (msg == "yes") and (count == 1)) then selfSay("Então tá! Traga um copo d'agua pra mim que eu te dou um real.", cid) elseif((isFocused(cid)) and (msg == "quest")) then selfSay("Então porque perguntou?", cid) O código final ficaria assim: local count = 0 function onCreatureSay(cid, type, msg) if((msg == "hi") and not (isFocused(cid))) then selfSay("Welcome, ".. getCreatureName(cid) ..".", cid, true) selfSay("Do you want to see my {wares}?", cid) addFocus(cid) elseif((isFocused(cid)) and (msg == "wares" or msg == "trade")) then selfSay("Pretty nice, right?", cid) openShopWindow(cid, itemWindow, onBuy, onSell) elseif((isFocused(cid)) and (msg == "bye" or msg == "goodbye" or msg == "cya")) then selfSay("Goodbye!", cid, true) closeShopWindow(cid) removeFocus(cid) elseif((isFocused(cid)) and (msg == "quest")) then count = 1 selfSay("Hmm, não sei se você é capaz de fazer o que eu quero, você tem certeza que quer fazer isso?", cid) elseif((isFocused(cid)) and (msg == "yes") and (count == 1)) then selfSay("Então tá! Traga um copo d'agua pra mim que eu te dou um real.", cid) elseif((isFocused(cid)) and (msg == "quest")) then selfSay("Então porque perguntou?", cid) end end Bom, esse é o tutorial, qualquer duvida pode recorrer a este tópico ou a seção de dúvidas. vlwflw. Só como consideração final eu gostaria de dizer que esse script de exemplo foi tirado do TFS 0.3.6, não garanto o uso deste metodo em qualquer outra distribuição.
    2 pontos
  9. deixe nos comentarios suas ideias para eu colocar na v2
    2 pontos
  10. BananaFight

    [C++] Opcode versão 8.54+

    Adaptação pra source 8.54+ LEMBRE-SE, ISSO É NA SOURCE DO SERVIDOR Vamos ao código. protocolgame.h Embaixo de void AddShopItem(NetworkMessage_ptr msg, const ShopInfo item); Adicione void parseExtendedOpcode(NetworkMessage& msg);void sendExtendedOpcode(uint8_t opcode, const std::string& buffer); protocolgame.cpp Embaixo de uint32_t key[4] = {msg.GetU32(), msg.GetU32(), msg.GetU32(), msg.GetU32()};enableXTEAEncryption();setXTEAKey(key); Adicione // notifies to otclient that this server can receive extended game protocol opcodesif(operatingSystem >= CLIENTOS_OTCLIENT_LINUX)sendExtendedOpcode(0x00, std::string()); Embaixo de void ProtocolGame::AddShopItem(NetworkMessage_ptr msg, const ShopInfo item){const ItemType& it = Item::items[item.itemId];msg->AddU16(it.clientId);if(it.isSplash() || it.isFluidContainer())msg->AddByte(fluidMap[item.subType % 8]);else if(it.stackable || it.charges)msg->AddByte(item.subType);elsemsg->AddByte(0x01);msg->AddString(item.itemName);msg->AddU32(uint32_t(it.weight * 100));msg->AddU32(item.buyPrice);msg->AddU32(item.sellPrice);} Adicione void ProtocolGame::parseExtendedOpcode(NetworkMessage& msg){uint8_t opcode = msg.GetByte();std::string buffer = msg.GetString();// process additional opcodes via lua script eventaddGameTask(&Game::parsePlayerExtendedOpcode, player->getID(), opcode, buffer);}void ProtocolGame::sendExtendedOpcode(uint8_t opcode, const std::string& buffer){// extended opcodes can only be send to players using otclient, cipsoft's tibia can't understand themNetworkMessage_ptr msg = getOutputBuffer();if(msg){TRACK_MESSAGE(msg);msg->AddByte(0x32);msg->AddByte(opcode);msg->AddString(buffer);}} Embaixo de case 0x1E: // keep alive / ping responseparseReceivePing(msg);break; Adicione case 0x32: // otclient extended opcodeparseExtendedOpcode(msg);break; enums.h Embaixo de enum GuildLevel_t{GUILDLEVEL_NONE = 0,GUILDLEVEL_MEMBER,GUILDLEVEL_VICE,GUILDLEVEL_LEADER}; Substitua o OperatingSystem por este enum OperatingSystem_t{CLIENTOS_LINUX = 0x01,CLIENTOS_WINDOWS = 0x02,CLIENTOS_OTCLIENT_LINUX = 0x0A,CLIENTOS_OTCLIENT_WINDOWS = 0x0B,CLIENTOS_OTCLIENT_MAC = 0x0C,};/ player.h Embaixo de void sendCreatureShield(const Creature* creature) Adicione void sendExtendedOpcode(uint8_t opcode, const std::string& buffer){if(client) client->sendExtendedOpcode(opcode, buffer);} luascript.cpp Embaixo de void LuaScriptInterface::registerFunctions(){ Adicione //doSendPlayerExtendedOpcode(cid, opcode, buffer)lua_register(m_luaState, "doSendPlayerExtendedOpcode", LuaScriptInterface::luaDoSendPlayerExtendedOpcode); Embaixo de SHIFT_OPERATOR(int32_t, LeftShift, <<)SHIFT_OPERATOR(int32_t, RightShift, >>)SHIFT_OPERATOR(uint32_t, ULeftShift, <<)SHIFT_OPERATOR(uint32_t, URightShift, >>)#undef SHIFT_OPERATOR Adicione int32_t LuaScriptInterface::luaDoSendPlayerExtendedOpcode(lua_State* L){//doSendPlayerExtendedOpcode(cid, opcode, buffer)std::string buffer = popString(L);int opcode = popNumber(L);ScriptEnviroment* env = getEnv();if(Player* player = env->getPlayerByUID(popNumber(L))) {player->sendExtendedOpcode(opcode, buffer);lua_pushboolean(L, true);}lua_pushboolean(L, false);return 1;} luascript.h Embaixo de virtual void registerFunctions(); Adicione static int32_t luaDoSendPlayerExtendedOpcode(lua_State* L); creatureevent.h . Substitua CREATURE_EVENT_PREPAREDEATH Por isso CREATURE_EVENT_PREPAREDEATH,CREATURE_EVENT_EXTENDED_OPCODE // otclient additional network opcodes Embaixo de uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Adicione uint32_t executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer); creatureevent.cpp Embaixo de else if(tmpStr == "death")m_type = CREATURE_EVENT_DEATH; Adicione else if(tmpStr == "extendedopcode")m_type = CREATURE_EVENT_EXTENDED_OPCODE; Embaixo de case CREATURE_EVENT_DEATH:return "onDeath"; Adicione case CREATURE_EVENT_EXTENDED_OPCODE:return "onExtendedOpcode"; Embaixo de case CREATURE_EVENT_DEATH:return "cid, corpse, deathList"; Adicione case CREATURE_EVENT_EXTENDED_OPCODE:return "cid, opcode, buffer"; Embaixo de std::cout << "[Error - CreatureEvent::executeFollow] Call stack overflow." << std::endl;return 0;}} Adicione uint32_t CreatureEvent::executeExtendedOpcode(Creature* creature, uint8_t opcode, const std::string& buffer){//onExtendedOpcode(cid, opcode, buffer)if(m_interface->reserveEnv()){ScriptEnviroment* env = m_interface->getEnv();if(m_scripted == EVENT_SCRIPT_BUFFER){env->setRealPos(creature->getPosition());std::stringstream scriptstream;scriptstream << "local cid = " << env->addThing(creature) << std::endl;scriptstream << "local opcode = " << (int)opcode << std::endl;scriptstream << "local buffer = " << buffer.c_str() << 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->setEvent(desc);#endifenv->setScriptId(m_scriptId, m_interface);env->setRealPos(creature->getPosition());lua_State* L = m_interface->getState();m_interface->pushFunction(m_scriptId);lua_pushnumber(L, env->addThing(creature));lua_pushnumber(L, opcode);lua_pushlstring(L, buffer.c_str(), buffer.length());bool result = m_interface->callFunction(3);m_interface->releaseEnv();return result;}}else{std::cout << "[Error - CreatureEvent::executeRemoved] Call stack overflow." << std::endl;return 0;}} game.h Embaixo de int32_t getLightHour() {return lightHour;}void startDecay(Item* item); Adicione void parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer); game.cpp Embaixo de player->sendTextMessage(MSG_INFO_DESCR, buffer);} Adicione void Game::parsePlayerExtendedOpcode(uint32_t playerId, uint8_t opcode, const std::string& buffer){Player* player = getPlayerByID(playerId);if(!player || player->isRemoved())return;CreatureEventList extendedOpcodeEvents = player->getCreatureEvents(CREATURE_EVENT_EXTENDED_OPCODE);for(CreatureEventList::iterator it = extendedOpcodeEvents.begin(); it != extendedOpcodeEvents.end(); ++it)(*it)->executeExtendedOpcode(player, opcode, buffer);} /creaturescripts/creaturescrips.xml <event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/> /creaturescripts/extendedopcode.lua OPCODE_LANGUAGE = 1function onExtendedOpcode(cid, opcode, buffer)if opcode == OPCODE_LANGUAGE then-- otclient languageif buffer == 'en' or buffer == 'pt' then-- example, setting player language, because otclient is multi-language...--doCreatureSetStorage(cid, CREATURE_STORAGE_LANGUAGE, buffer)endelse-- other opcodes can be ignored, and the server will just work fine...endend Créditos : MaXwEllDeN 100% por adaptar o código
    1 ponto
  11. Olá galerinha do Xtibia, estou aqui para postar um bom servidor derivado. Não queria estar postando esse servidor meio que forçado, tendo em vista que foi roubado e tem gente por de trás ganhando dinheiro sujo. Então sem mais delongas, ai esta o NtoShinobi que esta sendo vendido por alguem popular aqui do forum, que prefiro não citar o nome. ------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------ Mapa do servidor conta com 4 vilas -Amegakure -Suna -Mist -Konoha Consta com 14 vocações -Naruto - Sasuke - Sakura - Rock Lee- Neji - Hinata - Kiba - Shikamaru - Tenten - Gaara - Killer Bee - Kakashi - Itachi - [sistema de Graduação] -Genin -Chunin -Jounin -Anbu [sistema de Saga] -transformar -reverter -Serve para trocar a roupa do seu persoangem, ganha umas roupas novas a cada 25 level upado, dependendo da vocação, isso varia muito. -Exemplo, Naruto tem umas 10 roupas, enquanto tenten tem apenas 4. Nada afeta ao personagem, apenas visualmente mesmo. -Caso deseja alterar para ter efeito em alguma coisa, você pode editar em vocations.xml [sistema de Recompensa] -Npc Oinin coloca a cabeça de jogadores a venda por um determinado preço, e se alguem matar o jogador que tem recompensa ganha algo em troca. [Eventos do Servidor] -Evento Guerra Ninja -Evento Assassin -Evento Roube a Bandeira -Evento Tsuki no Me [sistema de Jutsus] -Posso dizer que todos os jutsus são adequados com o anime NARUTO, dando mais realidade no jogo de naruto. -Exemplo, chidori do sasuke, o personagem ao relizar pula até o jogador para acertar o jutsu. [boss] -Tem o enrredo da historia, ao qual deve matar os Boss do jogo, que na verdade são os membros da Akatsuki. -Cada Boss se encontra em uma parte do mapa, logo abaixo vai ter os detalhes do Mapa! [Task] -Npc Anbu, ele se localiza acima dos trainers, ele realiza as famosas task do opentibia no naruto. Bom.. O melhor mesmo é vocês abrirem e verem do que estou falando, e se adequarem ao jogo. =) Algumas imagems: Desde já aviso, que um bom dedicado é o começo para tudo. Eu iniciei o projeto com dedicado fracos, o que causava lag e kicks. Na minha humilde opnião, a ServerSoft é uma boa empresa de host para opentibia, tendo em vista que a equipe da mesma tem conhecimento com o mundo Opentibia. É isso ae galera, conforme o tempo eu estarei postando umas atualizaçõezinhas Link do download - Atualizado dia 29/03/2013 Updates Não irei mais atualizar o servidor por enquanto, pois existem muitos ladrões de conteudos e créditos no forum, então por hora ficara assim. LINKS PARA INICIANTES Para quem nunca criou um servidor de uma pesquisada na area de iniciantes clicando aqui. Para saber como criar um client proprio clique aqui. Ou então entre no site http://vapus.net/customclient e crie por la mesmo. E claro, todos os devidos créditos pelo projeto, mesmo sendo um único script. Naruto Open Wings v1.2 {o começo de tudo} Lks {RobinHood} Jhon992 Eskylo Vodkart Demonbholder Oneshot Slicer SkyMagmum Kydrai Christian Letti LuckOake Acredito que tem os créditos de todos(msm sendo 1 script.lua), mesmo aqueles que nem sabe que ajudaram. Caso faltou alguem é só falar =)
    1 ponto
  12. Roksas

    Regeneration System

    Regeneration System Saudações jovens guerreiros, hoje venho trazer para vocês uma espécie de Buffs, como seria? Você equipa um "Ring of the Count" (Se quiser pode trocar o item), e aí cada vocação tem suas configurações no script, regeneração de HP, SOUL, MP + Effects Instalação Vá em data/movements/scripts, copie algum arquivo da pasta ou crie, com o nome regeneration.lua e adicione isso dentro: Abra o arquivo movements.xml com o bloco de notas e adicione a seguinte tag: <movevent type="Equip" itemid="8752" slot="ring" event="script" value="regeneration.lua"/> Configuração Nesta seguinte parte do código, você encontra: local vocs = { [1] = {regenHp = 5, regenMana = 15, regenSoul = 1, effectTo = 13, secsTo = 5}, [2] = {regenHp = 5, regenMana = 15, regenSoul = 1, effectTo = 13, secsTo = 5}, [3] = {regenHp = 10, regenMana = 10, regenSoul = 1, effectTo = 32, secsTo = 5}, [4] = {regenHp = 15, regenMana = 5, regenSoul = 1, effectTo = 34, secsTo = 5}, [5] = {regenHp = 10, regenMana = 20, regenSoul = 2, effectTo = 30, secsTo = 5}, [6] = {regenHp = 10, regenMana = 20, regenSoul = 2, effectTo = 30, secsTo = 5}, [7] = {regenHp = 20, regenMana = 20, regenSoul = 1, effectTo = 49, secsTo = 5}, [8] = {regenHp = 20, regenMana = 10, regenSoul = 1, effectTo = 44, secsTo = 5}, } Cada linha dessa ("[1], [2], [3], [4]....") representam os IDS das vocações, ou seja de Sorcerer até Elite Knight, as 8. regenHp é quanto de HP reala, regenMana quanto de Mana heala, regenSoul é o Soul (óbvio), effectTo você coloca o ID do efeito que fica saindo para esta vocação, coloquei conforme achei bonito rsrs. E enfim, secsTo você coloca a cada quantos segundos vai acontecer tudo isso com o player Enquanto ele estiver com o item equipado, vai acontecer essas regenerações e efeitos a cada o "secsTo", tudo bem configuradinho no começo do código. E nessa linha: local itemRegenerator = 8752 Você coloca o ITEM ID do item que te da a Regeneration, no caso DEVE ser o mesmo da tag do movements.xml. Demonstração Créditos pelas ideias + imagem: Overxin
    1 ponto
  13. Delaks

    Wpr War V2

    Wpr War V2 Informações: -Templo editado -Nova city -Vocações balanceadas -System de invasaão -Tutores com o comando /newtype -Mudar a cor com comando -Dice System -Novo depot -Nova Àrea de Evento -Houses a venda na nova city -Annihilator editada Imagens: Download: http://www.4shared.c...y8/War_V1.html� Scan: https://www.virustot...sis/1369226119/ Créditos: Delaks Kaiotp Caio Franklin Obrigado pessoal,essa é a Segunda Versão do WPR WAR.
    1 ponto
  14. Olá galera do xtibia desculpe-me por aquele topico de web site la que eu fiz e não postei o download desculpa msm era que eu estavo com um projeto de wodbo 8.54 ai nao tive muito tempo e tambem por um problema no meu PC tive que formatar e eu estavo sem meu notebook, entao eu resouvi fazer outro e aqui esta o download não postarei Prints pois minha internet ta uma merda Download upado no 4shared: Link do download: http://www.4shared.c...junior001.html? Print: Creditos: Junior001 por editar DBO BRasil pela baze Mais uma vez pesso mil desculpas pelo site anterior que nao postei o link do download O Bom é que esse ficou mais bonito Rep se gostar. @Edit: Por favor se alguem puder post o scan para min
    1 ponto
  15. Roksas

    Positioner [v1]

    Positioner [v1] Iaaaae Galera, como vão? Hoje vim lhes apresentar o meu Action. É o Positioner, oque ele faz? O Positioner é um item (ID:1956 - MAPA), ao dar USE, ele grava suas coordenadas, ai você pode ir para aonde quiser. Pode até morrer, dando USE novamente, voltará para aquelas coordenadas (posição) que salvou. Legal né? Eu adaptei alguns códigos que achei para fazê-lo, vamos lá. Vá em data/lib, abra o arquivo 050-function.lua, as vezes pode estar só com o nome function.lua. Lá, na última linha de todas, dê um enter, pule uma linha e acrescente isso: function savePosition(cid) RETORNAR = {x = getPlayerStorageValue(cid, 20000), y = getPlayerStorageValue(cid, 20001), z = getPlayerStorageValue(cid, 20002)} local PLAYER = getPlayerGUID(cid) addEvent(function() if isCreature(cid) then setPlayerStorageValue(PLAYER, 20003, 0) else db.executeQuery("DELETE FROM `player_storage` WHERE `key` = 20003 AND `player_id` = " .. getPlayerGUID(cid) .. ";") end end) end Essa é a nossa função para salvar a position, usei a do SkyMagnum (talkaction) e adaptei para action. No caso, vá em data/actions/scripts, copie algum arquivo dessa pasta e cole. Renomeie para positioner.lua,abra com o bloco de notas, apague oque estiver dentro e cole: Agora no arquivo actions.xml, adicione essa tag: <action itemid="1956" event="script" value="positioner.lua"/> No caso é o item ID 1956 que é um mapa, basta dar USE nele para salvar e dar USE novamente para retornar á position! Se quiser trocar o ID do item na tag pode, mas esse item não pode ser do tipo "Use With..." Beeeeijo grande galera, aguardem por breves versões
    1 ponto
  16. Gabrieltxu

    [Noticias] Pokemon Skyfall

    Servidor Mudou de Nome Por causa de Motivos próprios 24/05/2013: Atualizado o Servidor, Novos Systems : Stages, novo MAP 100% Original, Novos Pokemons Shinys e das novas geraçoes, bugs corrigidos, Atualização no client , Novas quests, novos remakes dos Pokemons, +15 quest add no servidor, Pokemons da 5° geração estão 50%, Pokes da 1° a 4° geração 100% sem Bugs etc.. Algumas Imagens já feitas in game: Imagem do Site Breve mais Noticias!
    1 ponto
  17. pokemonfox123

    Sistema de Pet

    Ola Galera do Xtibia aki venho pra Mostra um sitema de pet Obs: o Sistema não e meu mais eu vou ensina a botalo e editalo Creditos: Snokiuthu: Por fazelo Pokemonfox123: por repostalo e editalo Ta Vamos la: Esse Sistema de pet ede Action Primeiro Vai na pasta data\actions\script e cria um arquivo com nome pet, e coloke isso dentro ta depois vamos no arquivo Action Xml e adicione essa tag Vc pode mudar o Id do item qui vai sair o pet O meu e 11205 mais vc pode mudar a gosto ta vou ensinar a editalo Você esta vendo isso a baixo e simples trocar o Montros e adicionar novos você pode fazer assim Obs:Para o pet não atacar vc vc vai ter qui ir la em Data/Montros ir no Monstro qui vc adicionou e mudar isso Onde Tem Zero vc vai Mudar pra 1 vai ficar assim E Pronto Imagens http://imageshack.us...9/19714900.png/ Creditos Snokiuthu: Por fazelo Pokemonfox123: por repostalo e editalo
    1 ponto
  18. Chaoszinhoo

    Pokemon - Chaosz Server 1.0

    •• [Pokemon] Servidor Chaosz 1.0 •• • Menu: ├ Informações; ├ Edições; ├ Erros; ├ Prints; ├ Download; └ Créditos. • Informações Básicas • • Edições / Ajustes • • Erros Do Servidor • • PrintScreen • • Download's • Download do Servidor Chaosz 1.0 e Client Incluso (4Shared): • Créditos •
    1 ponto
  19. Faelzdanil

    Novos Pokemons

    Ola povo lindo ! Estou trazendo outro conteúdo pra vocês... Agora são os novos Pokemons que a PXG lançou. Não são exatamente novos, e sim com um design diferente e melhorado. Esses pokemons são: Arcanine / Shiny Arcanine; - Contendo Ride Blastoise / Shiny Blastoise; - Contendo Surf Charizard / Shiny Charizard; - Contendo Fly Venusaur / Shiny Venusaur; - Contendo Ride Kabutops; - Contendo Surf Ancient Blastoise; Ancient Charizard; Uma imagem mostrando como eles estão: Bom como podem ter notado, estão bem diferentes e mais bonitos. ( amei o arcanine ) Então é isso ai, espero que tenham gostado. Downloads: Formatos .IDC Link 1 ( SpeedyShare ) Link 2 ( MediaFire ) Link 3 ( 4Shared ) Scan Download: Formatos .bmp Link 1 ( SpeedyShare ) Scan Corpse Kabutops Link 1 ( SpeedyShare ) Créditos: PokeXGames @FlamesAdmin
    1 ponto
  20. Roksas

    [NEW] Dice System

    Dice System Iaae galera suave? Hoje venho trazer á vocês meu novo sistema, é o sistema de Dice (o dado), nele você tem chance de 10%, 30%, 50%, 75% e 100% de cair X itens, tudo configurável. Vamos á instalação Siga para data/actions/scripts crie um arquivo chamado dice.lua e coloque dentro: Agora em actions.xml adicione essa tag: <action itemid="5792" event="script" value="dice.lua"> Configurando: local cfg = {listas = {chance100 = {2494, 2492, 2646}, -- Demon Armor, DSA, Golden Bootschance75 = {2400, 2472, 2470}, -- SOV, MPA, Golden Legschance50 = {2466, 2514, 2640}, -- Golden Armor, MMS, Soft Bootschance30 = {2487, 2498, 2491}, -- Crown Armor, RH, Crown Helmetchance10 = {4, 8, 10, 30, 50, 80}, -- Crystal coins (40k, 80k, 100k...)}} chance100 você coloca os Item IDS mais difíceis de pegar, os de chance 100%, chance75 os de 75% e assim sucessivamente ~~ É isso galera espero que tenham gostado e façam bom uso, vendam o Dice no Shopping, usem a criatividade rsrs. Dúvidas? Sugestões? Críticas/Bugs? Estou aqui para atendê-los! Ideia by vital900
    1 ponto
  21. Bhoris

    Pokemon SxR

    pode fechar
    1 ponto
  22. 2013Krudan

    Show Off ( New Member / XTibia )

    E ai pessoal, Ai vai uma das minhas criações; sou novo neste forum ( na verdade não sou novo ), mas faz muito tempo q eu não entro no Tibia e vou voltar a ativa. Como vcs podem ver, não tem um segundo andar e trabalhei muito os aspectos naturais ( Relevo, Natureza ). Nesta parte do Forum eu gosto muito de receber criticas, sugestões. Comente imagem.bmp
    1 ponto
  23. Não testei... local starterpokes = { ["Charmander"] = {x = 1054, y = 857, z = 7}, } local btype = "normal" function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) > 5 then --level requerido return true end local pokemon = "" for a, b in pairs (starterpokes) do if isPosEqualPos(topos, b) then pokemon = a end end if pokemon == "" then return true end local gender = getRandomGenderByName(pokemon) local happy = 180 local item = doCreateItemEx(2219) doItemSetAttribute(item, "poke", pokemon) doItemSetAttribute(item, "hp", 1) doItemSetAttribute(item, "happy", happy) doItemSetAttribute(item, "gender", gender) doItemSetAttribute(item, "description", "Contains a "..pokemon..".") doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") doPlayerAddItemEx(cid, item, true) doTransformItem(item, pokeballs[btype].on) doPlayerSendTextMessage(cid, 27, "Parabens voce completou a Quest. Pegue seu premio.") doSendMagicEffect(getThingPos(cid), 29) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getThingPos(cid), 27) doSendMagicEffect(getThingPos(cid), 29) return TRUE end Aqui você coloca o nome do pokemon... ["Charmander"] = {x = 1054, y = 857, z = 7}, Aqui o level requerido... if getPlayerLevel(cid) > 5 then return true end No 5 ali você modifica...
    1 ponto
  24. brun123

    [Encerrado] PDA Poketele

    é, tem que registrar no player, não tinha lido o script, só vi o nome na tag "pokemonidle" e fez sentido ser no summon... enfim, basta usar esse script: local efeito = 1 -- coloque 0 para remover o efeito quando o pokemon teleportar local max = 9 -- distancia max entre o pokemon e o player local function doIncreaseSpeed(cid) if not isCreature(cid) then return true end doChangeSpeed(cid, -getCreatureSpeed(cid)) doChangeSpeed(cid, 2.5*(getCreatureBaseSpeed(cid) + getSpeed(cid))) end function onLogin(cid) registerCreatureEvent(cid, "PokemonIdle") return true end function onThink(cid, interval) if not isCreature(cid) then return true end if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then return true end if #getCreatureSummons(cid) >= 1 and not isCreature(getCreatureTarget(cid)) then if getDistanceBetween(getThingPos(cid), getThingPos(getCreatureSummons(cid)[1])) > max then doTeleportThing(getCreatureSummons(cid)[1], getThingPos(cid), false) doSendMagicEffect(getThingPos(cid), 21) end end return true end e essas tags: <event type="think" name="PokemonIdle" event="script" value="poketele.lua"/> <event type="login" name="PokemonIdleLogin" event="script" value="poketele.lua"/>
    1 ponto
  25. brun123

    [Encerrado] [Pedido] Comando /dead

    function onSay(cid, words, param) local player = getPlayerByNameWildcard(param) if not isCreature(player) then return doPlayerSendCancel(cid, "Não existe nenhum jogador com nome "..param.." online.") end doCreatureAddHealth(player, - getCreatureHealth(player)) return true end
    1 ponto
  26. vital900

    Khalin:The New Era

    http://www.xtibia.com/forum/topic/198258-adm-arena-de-mapping/
    1 ponto
  27. Usa o starter.lua como base Fica em data/actions.
    1 ponto
  28. Eventide

    Arena Svargrond

    Vou postar aqui o script da Arena Svargrond, algumas partes do script foram baseadas no script do Gesior. XML do NPC: <npc name="Halvar" script="data/npc/scripts/arena.lua" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="129" head="114" body="119" legs="114" feet="114" corpse="2212"/> </npc> O looktype não está muito certo, se você tiver o certo poste que eu substituo... Script do NPC: (crie com o nome de arena.lua) local focuses = {} local function isFocused(cid) for i, v in pairs(focuses) do if(v == cid) then return true end end return false end local function addFocus(cid) if(not isFocused(cid)) then table.insert(focuses, cid) end end local function removeFocus(cid) for i, v in pairs(focuses) do if(v == cid) then table.remove(focuses, i) break end end end local function lookAtFocus() for i, v in pairs(focuses) do if(isPlayer(v)) then doNpcSetCreatureFocus(v) return end end doNpcSetCreatureFocus(0) end local function getPlayerMoney(cid) return ((getPlayerItemCount(cid, 2160) * 10000) + (getPlayerItemCount(cid, 2152) * 100) + getPlayerItemCount(cid, 2148)) end function onCreatureAppear(cid) end function onCreatureDisappear(cid) if(isFocused(cid)) then selfSay("Hmph!") removeFocus(cid) end end talkstate = 0 function onCreatureSay(cid, type, msg) if((msg == "hi") and not (isFocused(cid))) then addFocus(cid) selfSay("Welcome, ".. getCreatureName(cid) ..". Do you wanna fight at the Arena?", cid) talkstate = 1 elseif isFocused(cid) and talkstate == 1 and msg == "yes" then completed = getPlayerStorageValue(cid, arenaconf.storages.level_completed) current = getPlayerStorageValue(cid, arenaconf.storages.level) money = getPlayerMoney(cid) if getGlobalStorageValue(arenaconf.storages.busy) == -1 then if completed == -1 and current == -1 then if money >= arenaconf.cost[1] then setPlayerStorageValue(cid, arenaconf.storages.level, 1) setPlayerStorageValue(cid, arenaconf.storages.room, 1) current = 1 doPlayerRemoveMoney(cid, arenaconf.cost[1]) selfSay("You will fight at Greenshore level, good luck!", cid) else selfSay("You don't have enough money, you need ".. arenaconf.cost[1] .."gp to fight.", cid) end elseif current == -1 and completed ~= -1 and completed ~= 3 then if money >= arenaconf.cost[completed+1] then setPlayerStorageValue(cid, arenaconf.storages.level, completed+1) setPlayerStorageValue(cid, arenaconf.storages.room, 1) current = completed+1 doPlayerRemoveMoney(cid, arenaconf.cost[current]) selfSay("You will fight at ".. arenaconf.levelname[current] .." level, good luck!", cid) else selfSay("You don't have enough money, you need ".. arenaconf.cost[completed+1] .."gp to fight.", cid) end elseif completed == 3 then selfSay("You already did every arena level.", cid) end else selfSay("Sorry but there is another adventurer fighting right now.", cid) end end end function onPlayerCloseChannel(cid) if(isFocused(cid)) then selfSay("Hmph!") removeFocus(cid) end end function onThink() for i, focus in pairs(focuses) do if(not isCreature(focus)) then removeFocus(focus) else local distance = getDistanceTo(focus) or -1 if((distance > 4) or (distance == -1)) then selfSay("Hmph!") removeFocus(focus) end end end lookAtFocus() end no movements.xml adicione: <movevent type="StepIn" actionid="42321" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42300" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42301" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42302" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42303" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42304" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42305" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42306" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42307" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42308" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42309" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42310" event="script" value="arena teleports.lua"/> <movevent type="StepIn" actionid="42360" event="script" value="arena globet.lua"/> <movevent type="StepOut" actionid="42360" event="script" value="arena globet.lua"/> <movevent type="StepIn" actionid="42370" event="script" value="arena globet.lua"/> <movevent type="StepOut" actionid="42370" event="script" value="arena globet.lua"/> <movevent type="StepIn" actionid="42380" event="script" value="arena globet.lua"/> <movevent type="StepOut" actionid="42380" event="script" value="arena globet.lua"/> crie um arquivo chamado "arena teleports.lua" e adicione: function onStepIn(cid, item, position, fromPosition) room = getPlayerStorageValue(cid, arenaconf.storages.room) level = getPlayerStorageValue(cid, arenaconf.storages.level) if item.actionid == 42321 then setPlayerStorageValue(cid, arenaconf.storages.room, -1) setPlayerStorageValue(cid, arenaconf.storages.level, -1) setGlobalStorageValue(arenaconf.storages.busy, -1) if getCreatureByName(arenaconf.boss[level][room]) ~= nil then doRemoveCreature(getCreatureByName(arenaconf.boss[level][room]), false) end doTeleportThing(cid, arenaconf.position["kick"]) elseif room == 10 and isCreature(getCreatureByName(arenaconf.boss[level][10])) == false then setPlayerStorageValue(cid, arenaconf.storages.room, -1) setPlayerStorageValue(cid, arenaconf.storages.level_completed, level) setPlayerStorageValue(cid, arenaconf.storages.level, -1) setGlobalStorageValue(arenaconf.storages.busy, -1) doTeleportThing(cid, arenaconf.position["rewards"]) elseif room < 10 and item.actionid ~= 42300 and isCreature(getCreatureByName(arenaconf.boss[level][room])) == false then setPlayerStorageValue(cid, arenaconf.storages.room, room+1) room = room+1 setGlobalStorageValue(arenaconf.storages.busy, 1) local pos = arenaconf.position[room] doCreateMonster(arenaconf.boss[level][room], pos) doTeleportThing(cid, {x = (pos.x+1), y = pos.y, z = pos.z}) elseif item.actionid == 42300 then local pos = arenaconf.position[room] doCreateMonster(arenaconf.boss[level][room], pos) doTeleportThing(cid, {x = (pos.x+1), y = pos.y, z = pos.z}) end return true end Crie um arquivo chamado "arena globet.lua" e adicione: STORAGE_GLOBET = {arenaconf.storage_init+6, arenaconf.storage_init+7, arenaconf.storage_init+8} function onStepIn(cid, item, position, fromPosition) local gobletPos = getThingPos(item.uid) level = getPlayerStorageValue(cid, arenaconf.storages.level_completed) glob = getPlayerStorageValue(cid, STORAGE_GLOBET[level]) if item.actionid == 42360 and glob == -1 then if level == 1 then setPlayerStorageValue(cid, STORAGE_GLOBET[1], 1) local goblet = doCreateItemEx(5807, 1) doItemSetAttribute(goblet, "description", "It is given to the courageous victor of the barbarian arena greenhorn difficulty.\nAwarded to " .. getCreatureName(cid) .. ".") doTileAddItemEx({x=gobletPos.x,y=gobletPos.y-1,z=gobletPos.z}, goblet) end elseif item.actionid == 42370 and glob == -1 then if level == 2 then setPlayerStorageValue(cid, STORAGE_GLOBET[2], 1) local goblet = doCreateItemEx(5806, 1) doItemSetAttribute(goblet, "description", "It is given to the courageous victor of the barbarian arena scrapper difficulty.\nAwarded to " .. getCreatureName(cid) .. ".") doTileAddItemEx({x=gobletPos.x,y=gobletPos.y-1,z=gobletPos.z}, goblet) end elseif item.actionid == 42380 and glob == -1 then if level == 3 then setPlayerStorageValue(cid, STORAGE_GLOBET[3], 1) local goblet = doCreateItemEx(5805, 1) doItemSetAttribute(goblet, "description", "It is given to the courageous victor of the barbarian arena warlord difficulty.\nAwarded to " .. getCreatureName(cid) .. ".") doTileAddItemEx({x=gobletPos.x,y=gobletPos.y-1,z=gobletPos.z}, goblet) end end doTransformItem(item.uid, item.itemid - 1) return TRUE end function onStepOut(cid, item, pos) doTransformItem(item.uid, item.itemid + 1) return TRUE end Vá no actions.xml e adicione: <action actionid="42357" event="script" value="global/arena doors.lua"/> <action actionid="42366" event="script" value="global/arena doors.lua"/> <action actionid="42376" event="script" value="global/arena doors.lua"/> <action actionid="42386" event="script" value="global/arena doors.lua"/> <action actionid="42361" event="script" value="global/arena presentbox.lua"/> <action actionid="42362" event="script" value="global/arena sword.lua"/> <action actionid="42363" event="script" value="global/arena axe.lua"/> <action actionid="42364" event="script" value="global/arena club.lua"/> <action actionid="42365" event="script" value="global/arena backpack.lua"/> <action actionid="42371" event="script" value="global/arena presentbox.lua"/> <action actionid="42372" event="script" value="global/arena sword.lua"/> <action actionid="42373" event="script" value="global/arena axe.lua"/> <action actionid="42374" event="script" value="global/arena club.lua"/> <action actionid="42375" event="script" value="global/arena backpack.lua"/> <action actionid="42381" event="script" value="global/arena presentbox.lua"/> <action actionid="42382" event="script" value="global/arena sword.lua"/> <action actionid="42383" event="script" value="global/arena axe.lua"/> <action actionid="42384" event="script" value="global/arena club.lua"/> <action actionid="42385" event="script" value="global/arena backpack.lua"/> Crie um arquivo chamado "arena doors.lua" e adicione nele: function onUse(cid, item, fromPosition, itemEx, toPosition) local cidPosition = getCreaturePosition(cid) if item.actionid ~= 42357 then if (item.actionid == 42366 and getPlayerStorageValue(cid, arenaconf.storages.level_completed) == 1) or (item.actionid == 42376 and getPlayerStorageValue(cid, arenaconf.storages.level_completed) == 2) or (item.actionid == 42386 and getPlayerStorageValue(cid, arenaconf.storages.level_completed) == 3) then if cidPosition.x < toPosition.x then doTeleportThing(cid, {x=toPosition.x+1,y=toPosition.y,z=toPosition.z}, TRUE) else doTeleportThing(cid, {x=toPosition.x-1,y=toPosition.y,z=toPosition.z}, TRUE) end return TRUE else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You can not enter room.") return TRUE end elseif (item.actionid == 42357 and getPlayerStorageValue(cid, arenaconf.storages.level) ~= -1 and getGlobalStorageValue(arenaconf.storages.busy) == -1) then setGlobalStorageValue(arenaconf.storages.busy, 1) if cidPosition.x < toPosition.x then doTeleportThing(cid, {x=toPosition.x+1,y=toPosition.y,z=toPosition.z}, TRUE) else doTeleportThing(cid, {x=toPosition.x-1,y=toPosition.y,z=toPosition.z}, TRUE) end return TRUE else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You must pay first.") return TRUE end return FALSE end Crie um arquivo chamdo "arena sword.lua" e adicione: STORAGE_CHEST = {arenaconf.storage_init+3, arenaconf.storage_init+4, arenaconf.storage_init+5} function onUse(cid, item, fromPosition, itemEx, toPosition) level = getPlayerStorageValue(cid, arenaconf.storages.level_completed) if getPlayerStorageValue(cid, STORAGE_CHEST[level]) == -1 then setPlayerStorageValue(cid, STORAGE_CHEST[level], 1) doPlayerAddItem(cid, getItemIdByName(arenaconf.reward["sword"][level])) return true end return true end Crie um arquivo com o nome de "arena axe.lua" e adicione: STORAGE_CHEST = {arenaconf.storage_init+3, arenaconf.storage_init+4, arenaconf.storage_init+5} function onUse(cid, item, fromPosition, itemEx, toPosition) level = getPlayerStorageValue(cid, arenaconf.storages.level_completed) if getPlayerStorageValue(cid, STORAGE_CHEST[level]) == -1 then setPlayerStorageValue(cid, STORAGE_CHEST[level], 1) doPlayerAddItem(cid, getItemIdByName(arenaconf.reward["axe"][level])) return true end return true end Crie um arquivo chamado "arena club.lua" e coloque nele: STORAGE_CHEST = {arenaconf.storage_init+3, arenaconf.storage_init+4, arenaconf.storage_init+5} function onUse(cid, item, fromPosition, itemEx, toPosition) level = getPlayerStorageValue(cid, arenaconf.storages.level_completed) if getPlayerStorageValue(cid, STORAGE_CHEST[level]) == -1 then setPlayerStorageValue(cid, STORAGE_CHEST[level], 1) doPlayerAddItem(cid, getItemIdByName(arenaconf.reward["club"][level])) return true end return true end Crie um arquivo chamado "arena presentbox.lua" e coloque isso nele: STORAGE_CHEST = {arenaconf.storage_init+3, arenaconf.storage_init+4, arenaconf.storage_init+5} function onUse(cid, item, fromPosition, itemEx, toPosition) level = getPlayerStorageValue(cid, arenaconf.storages.level_completed) if getPlayerStorageValue(cid, STORAGE_CHEST[level]) == -1 then setPlayerStorageValue(cid, STORAGE_CHEST[level], 1) pb = doPlayerAddItem(cid, 1990) for t = 1,#arenaconf.reward["presentbox"][level] do doAddContainerItem(pb, getItemIdByName(arenaconf.reward["presentbox"][level][t][1]), arenaconf.reward["presentbox"][level][t][2]) end return true end return true end Crie um arquivo chamdo "arena backpack.lua" e coloque isso nele: STORAGE_CHEST = {arenaconf.storage_init+3, arenaconf.storage_init+4, arenaconf.storage_init+5} function onUse(cid, item, fromPosition, itemEx, toPosition) level = getPlayerStorageValue(cid, arenaconf.storages.level_completed) if getPlayerStorageValue(cid, STORAGE_CHEST[level]) == -1 then setPlayerStorageValue(cid, STORAGE_CHEST[level], 1) bp = doPlayerAddItem(cid, 7342) for t = 1,#arenaconf.reward["backpack"][level] do doAddContainerItem(bp, getItemIdByName(arenaconf.reward["backpack"][level][t][1]), arenaconf.reward["backpack"][level][t][2]) end return true end return true end Agora neste código é que você configurará informações como a posição das salas dos bixos, a sala de recompensas, pra onde o player será kicado quando desistir e todo o resto: arenaconf = {} arenaconf.storage_init = 60000 arenaconf.storages = {} arenaconf.storages.busy = arenaconf.storage_init -- global storage arenaconf.storages.level = arenaconf.storage_init arenaconf.storages.level_completed = arenaconf.storage_init+1 arenaconf.storages.room = arenaconf.storage_init+2 arenaconf.cost = {1000, 5000, 10000} arenaconf.levelname = {"Greenshore", "Scrapper", "Warlord"} arenaconf.boss = {} arenaconf.boss[1] = {"Achad", "Axeitus Headbanger", "Bloodpaw", "Bovinus", "Colerian the Barbarian", "Cursed Gladiator", "Frostfur", "Orcus the Cruel", "Rocky", "The Hairy One"} arenaconf.boss[2] = {"Avalanche", "Drasilia", "Grimgor Guteater", "Kreebosh the Exile", "Slim", "Spirit of Earth", "Spirit of Fire", "Spirit of Water", "The Dark Sorcerer", "The Hag"} arenaconf.boss[3] = {"Darakan the Executioner", "Deathbringer", "Fallen Mooh'Tah Master Ghar", "Gnorre Chyllson", "Norgle Glacierbeard", "Svoren the Mad", "The Masked Marauder", "The Obliverator", "The Pit Lord", "Webster"} arenaconf.position = {} arenaconf.position[1] = {x = 1059, y = 1067, z = 7} arenaconf.position[2] = {x = 1044, y = 1067, z = 7} arenaconf.position[3] = {x = 1030, y = 1067, z = 7} arenaconf.position[4] = {x = 1016, y = 1067, z = 7} arenaconf.position[5] = {x = 1053, y = 1051, z = 7} arenaconf.position[6] = {x = 1038, y = 1051, z = 7} arenaconf.position[7] = {x = 1023, y = 1051, z = 7} arenaconf.position[8] = {x = 1045, y = 1039, z = 7} arenaconf.position[9] = {x = 1030, y = 1039, z = 7} arenaconf.position[10] = {x = 1037, y = 1025, z = 7} arenaconf.position["kick"] = {x = 32222, y = 31094, z = 7} arenaconf.position["rewards"] = {x = 1071, y = 1049, z = 6} arenaconf.reward = {} arenaconf.reward["presentbox"] = {} arenaconf.reward["presentbox"][1] = {{"Piggy Bank", 1}, {"Surprise Bag", 1}, {"Bar of Chocolate", 1}, {"Candy", 10}, {"Ice Cream", 1}} arenaconf.reward["presentbox"][2] = {{"Baby Seal Doll", 1}, {"Bar of Chocolate", 1}, {"Ice Cream", 1}, {"Candy", 10}} arenaconf.reward["presentbox"][3] = {{"Panda Teddy", 1}, {"Bar of Chocolate", 1}, {"Ice Cream", 1}, {"Candy", 10}} arenaconf.reward["backpack"] = {} arenaconf.reward["backpack"][1] = {{"Sniper Arrow", 100}, {"Onyx Arrow", 100}} arenaconf.reward["backpack"][2] = {{"great fireball rune", 50}, {"heavy magic missile rune", 50}, {"Power Bolt", 200}, {"Onyx Arrow", 100}} arenaconf.reward["backpack"][3] = {{"Infernal Bolt", 100}, {"Mastermind Potion", 1}, {"Bullseye Potion", 1}, {"Sudden Death Rune", 50}, {"Ultimate Healing Rune", 50}} arenaconf.reward["axe"] = {"Headchopper", "Heroic Axe", "Royal Axe"} arenaconf.reward["sword"] = {"Blacksteel Sword", "Mystic Blade", "Justice Seeker"} arenaconf.reward["club"] = {"Orcish Maul", "Cranial Basher", "Blessed Sceptre"} Esse código você colocará dentro da pasta lib com o nome de arena.lua, depois disso você tem que pegar um código qualquer desta pasta e adicionar isso no começo ou no final: dofile(getDataDir() .. "lib/arena.lua") Clique aqui para baixar o mapa com os actionids já configurados edit: tinha um pequeno problema com o arquivo arena doors.lua que já foi resolvido
    1 ponto
  29. Vá em data/globalevents/scripts, crie um arquivo chamado auto_give.lua e adicione dentro: Em globalevents.xml adicione a seguinte tag: <globalevent name="AutoGive" interval="3600" event="script" value="auto_give.lua"/>
    1 ponto
  30. Hawking

    New armor !²

    Olá, obrigado pela resposta e pela critica construtiva, vou editar e atualizar o poste, gostei da sua ideia.
    1 ponto
  31. Troca por este aqui:
    1 ponto
  32. AlexandreKG

    Internet GVT+Wi-Fi+TV

    Já respondi deu certo sim.
    1 ponto
  33. SkyLigh

    Votação ADS #86

    Skyligh & Alexclusive
    1 ponto
  34. Se mais alguem precisar de ajuda Só mandar msg para mim
    1 ponto
  35. Fique claro que ninguém é obrigado a ajudar você, você está em um fórum de tibia onde ajuda quem quer.Todos tem uma vida fora do computador, não só você.Muitos ficam ocupados e as vezes dão uma passada aqui para tentar exclarecer as dúvidas do pessoal, então não reclame. -Topic Quem tiver alguma dúvida perante algum erro, poste uma imagem junto com o erro, para ficar mais simples de resolve-lo.
    1 ponto
  36. LuckinhaSan

    OTServ usando 1 lua_State

    Esta é uma solução para um problema bem conhecido no otserv que não podemos compartilhar variáveis ​​entre os scripts Lua em actions, creaturescripts, talkactions... Sua idéia consiste em combinar todos lua_State em uma variável estática em LuaInterface, em seguida, tornando o sistema compatível eventos e mudanças npc/moviments registerEvents function. O diff foi feita no TFS rev. 3777 Aqui está o arquivo git diff: http://pastebin.com/K44Fchf7 Créditos - Baxnie
    1 ponto
  37. pega a versao 1.9.1 -ou 2.9.1 caso esteja usando a 2.9...-
    1 ponto
  38. Fala Ai Bando De Frescos Galerinha Do Xtibia Hj Eu Estarei Pondo Pra Download Algumas Sprites Pra Deixar Seu Cp Mais Lindo Do Que Eu Download:http://www.mediafire...7fqm3grdggvsu3m No Kit Contem: Healadoras Vermelhas Balcoes Vermelhos Depot Vermelho Escada Rolante Vermelha Pokebola Cp(Aquela Do PxG) Magic Forcefield(Teleport)Vermelho Paredes Vermelhas Balcoes Azuis PxG E Mais Algumas Frescurinhas Uma Print De Algumas Coisas Que Nao Contem Legenda (Ja Que Eu Nao Faço Muita Coisa No Xtibia Resolvi Fazer Isso hehe) (Creditos Ao PxG Pelas:Paredes Vermelhas,Pokebola Cp,Depot Vermelho,Balcoes Azuis PxG,Escada Rolante Vermelha,Healadora Vermelha,Tambem Tem Algumas Frescurinhas La Deles) (Obs:Todas As Sprites Estao Em Idc)
    1 ponto
  39. eahaushuae, tem uns erros engraçados nesse script ae sky... isso aqui: for loop = 1, p do val = loop end é a mesma coisa que: val = p nessa parte: local tab = getPlayersOnline()[p - val] você vai tentar acessar o índice 0 da tabela, e isso vai dar erro, e mesmo se conseguisse acessar um índice correto, tab teria o valor do uid de apenas um player, então essa parte: for players = 1, p do name = name .. getCreatureName(tab) .. (c < players and ", " or ".") c = c + 1 end resultaria em algo do tipo: Joao, Joao, Joao, Joao, Joao, Joao, Joao, Joao, Joao, Joao. e o certo é \n para pular linha, o "/n" iria aparecer na tela do player e ia ficar feiosinho não tenho certeza, mas acho que o cliente do tibia não pula linha no chat, então \n nesse caso seria simplesmente ignorado aqui o script: function onSay(cid, words, param, channel) local players = getPlayersOnline() local count = #players local ultimos = {} for n = count, count - math.min(10, count - 1), -1 do table.insert(ultimos, getCreatureName(players[n])) end doPlayerSendTextMessage(cid, 27, count.." jogador"..(count > 1 and "es" or "").." online.") doPlayerSendTextMessage(cid, 27, "Último"..(count > 1 and "s" or "").." jogador"..(count > 1 and "es" or "").." a entrar"..(count > 1 and "em" or "")..": "..table.concat(ultimos, ", ")..".") return true end basta apagar tudo que está escrito no seu script de !online e colar esse código acima
    1 ponto
  40. AlexandreKG

    Internet GVT+Wi-Fi+TV

    Eu uso o mesmo pacote porém a minha é 20 mb, o seu é o PowerBox GVT?
    1 ponto
  41. Alexclusive

    PEDIDO MARCA

    Assim?
    1 ponto
  42. Alexclusive

    PEDIDO MARCA

    Cara, tentei hehe: 01: 02: Qualquer coisa fala ai
    1 ponto
  43. Outhrow

    [SERVER FECHADO] Pokemon Zapto

    Server Fechado.
    1 ponto
  44. Outhrow

    [Tutorial]Criando Website Com Xampp

    Erro #1045 - Access denied for user 'alisson'@'localhost' (using password: YES)
    1 ponto
  45. Alexclusive

    O Primeiro Photoshop 1.0

    né..
    1 ponto
  46. Roksas

    Positioner [v1]

    @fael Obrigado. @Slicer Oi? Como assim identizar cara?
    1 ponto
  47. Rafu

    Baiak Edited [8.60]

    Olá Galera!! Vim Trazer Meu Mapa Baiak Oq mudou: Vip City Area Teleports Vip Etc. Imagens: Novo link:http://www.mediafire.com/?74tcofy6p2ybq5b ______________________________________________________________________________________________________________________________________________________________ Gostou Da Rep Custa Nada..
    1 ponto
  48. Até quem fim saiu! muitos caras estavam ganhando emcima desse projeto, e muitos queriam criar um narutibia, por ser um servidor otimo. Obrigado por ser Humilde e disponibilizar para nos do Xtibia! Abraços!
    1 ponto
  49. Dark-X

    Como Criar Quest!

    Criando Quest Muitas pessoas ainda nao sabem ou se confundem ao criar um bau de quest, esse tutorial aqui vai ensinar direitinho como criar um. Este tutorial é dividido em 4 passos. Criando Quest -Passo 1 - Script.lua crie um arquivo.lua novo, ele deve ficar localizado na pasta data/actions/scripts e escreva isto nele: function onUse(cid, item, frompos, item2, topos) if item.uid == X then queststatus = getPlayerStorageValue(cid,Y) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Z") item_uid = doPlayerAddItem(cid,ID,Q) setPlayerStorageValue(cid,Y,1) else doPlayerSendTextMessage(cid,22,"O baú está vazio.") end else return 0 end return 1 end Passo 2 - Configurando o Script.lua Note que no script acima tem algumas variaveis: "X", "Y", "Z", Q e ""ID" e em um bau de quest isso é que tem que ser configuravel... vou ensinar agora o que deve ser substituidos por essas letras e como fazer: 2.a - Configurando X Esta variavel devera ser substituida por um numero maior que 1000, vc vai selecionar este numero pelo seu MAP EDITOR. Abra seu editor, va no bau onde fica localizada a quest entao clique com o botao direito no item e selecione PROPRIEDADES. Vai apareçer 2 opções: Action ID e Unique ID, unique id é o que nos interessa... entao onde tem unique id vc seleciona um numero a seu gosto.. como EXEMPLO vamos usar 2000. 2.b - Configurando Y Esta variavel é chamada de DATA KEY e é o codigo que diz se o player fez ou nao esta quest. ESTE NUMERO É A IDENTIDADE DA QUEST, SE 2 QUESTS TIVEREM A MESMA DATA KEY VAI DAR PROBLEMA NA QUEST, entao certifique-se que nenhuma outra quest/action possui este numero que vc vai escolher... *Dica: Eu aconselho a usar o mesmo numero do uniqueid por uma questao de organização até. Seguindo a dica entao vamos usar neste exemplo o numero 2000. PS: este numero apareçe 2x no script, lembre-se de por ele corretamente nos 2 lugares, este numero nao precisa ser igual ao unique id, vc pode escolher outro, eu estou colocando o mesmo numero por uma questao de praticidade. 2.c - Configurando Z Este é o mais facil, Z sera substituido pelo nome do item que a quest da (isso é aquele texto verinho que apareçe quando vc pega um item. Neste exemplo vamos usar umaMagic Sword. 2.d - Configurando Q Este é bem simples tambem, e é configuravel apenas quando o item é contavel como dinheiro, bolts e etc... quando o ITEM NAO É CONTAVEL entao esta variavel fica sempre 1. Como Magic Sword nao é um item contavel entao Q vai ser 1. 2.e - Configurando ID Este é bem facinho de se configurar, nada mais é que o ID do item que o player vai ganhar. Como no exemplo escolhi o item Magic Sword temos que usar o ID dela certo? smile.gif O id da magic sworde é 2400. PS: este id é de OT 7.4, o ID da magic sword em ot 7.5 é outro.. Passo 3 - Substituindo as Variaveis. Voltando agora ao script, vamos substituir os valores, substituindo tudo direitinho no script vai ficar assim: function onUse(cid, item, frompos, item2, topos) if item.uid == 2000 then queststatus = getPlayerStorageValue(cid,2000) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Magic Sword") item_uid = doPlayerAddItem(cid,2400,1) setPlayerStorageValue(cid,2000,1) else doPlayerSendTextMessage(cid,22,"O baú está vazio.") end else return 0 end return 1 end Esta quase acabando!!! Passo 4 - Adicionando o Script.lua nos Actions. Antes de tudo lembre-se que o seu arquivo ate agora nao tem nome, como este bau da uma magic sword como item, entao vamos por o nome dele de MagicSwordQuest. Agora va no actions.xml e abra em bloco de notas, e adicione isto la: <action uniqueid="2000" script="MagicSwordQuest.lua" /> Salve e Feche. Pronto, sua quest foi criada com sucessso!!! Passo 5 - Como fazer quest de escolha (OPCIONAL) Agora para quem quier aprender como faz baus estilo o da annihilator, 2 baus ou mais, e vc só pode pegar um item, irei ensinar agora. é bem simples, vou tentar explicar como funfa e vou postar exemplo. nao tem o script inicial postado aqui? pronto, se for 2 baus vc junta 2 scripts em um só, se for 4, 4 scripts em um só, sendo que quando se faz isso se adiciona else antes dos outros if. vou fazer um exemplo com 3 baus ok? smile.gif vamos lá. function onUse(cid, item, frompos, item2, topos) if item.uid == X¹ then --primeiro bau-- queststatus = getPlayerStorageValue(cid,Y) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Z¹") item_uid = doPlayerAddItem(cid,ID¹,Q) setPlayerStorageValue(cid,Y,1) else doPlayerSendTextMessage(cid,22,"O baú está vazio.") end elseif item.uid == X² then --segundo bau-- queststatus = getPlayerStorageValue(cid,Y) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Z²") item_uid = doPlayerAddItem(cid,ID²,Q) setPlayerStorageValue(cid,Y,1) else doPlayerSendTextMessage(cid,22,"O baú está vazio.") end elseif item.uid == X³ then --terceiro bau-- queststatus = getPlayerStorageValue(cid,Y) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Z³") item_uid = doPlayerAddItem(cid,ID³,Q) setPlayerStorageValue(cid,Y,1) else doPlayerSendTextMessage(cid,22,"O baú está vazio.") end else return 0 end return 1 end Para configurar é bem simples, é igual a um script normal, vc tem que preencher as variaves normalmente. nota: vc vai notar uma diferença neste script, alem do elseif, vc pode ver que tem variaves diferentes assim: X¹, X² e X³. vou ensinar como vc vai configurar. o X é unique id, vc vai configurar como em um script normal, só que x¹ é diferente de x² que é diferente de x³. O mesmo se aplica aos Z's, aos ID's, note que nao tem varios "Y", ou seja, o Y do primeiro bau é = ao do segundo e = ao do terceiro. --Partindo para o exemplo pratico-- eu aconselho vc a fazer os UNIQUEIDS seguidos como no exemplo pratico. X¹ = 3000 X² = 3001 X³ = 3002 Y = 3000. Z¹ e ID¹ = Magic Sword (2400) Z² e ID² = SCA (2431) Z³ e ID³ = TH (2421) PS: todos estes ids sao para 7.4, nao sei os de 7.5 decorados. --Substituindo as variaveis-- fuction onUse(cid, item, frompos, item2, topos) if item.uid == 3000 then --primeiro bau-- queststatus = getPlayerStorageValue(cid,3000) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Magic Sword") item_uid = doPlayerAddItem(cid,2400,1) setPlayerStorageValue(cid,3000,1) else doPlayerSendTextMessage(cid,22,"Vc ja pegou um dos 3 items.") end elseif item.uid == 3001 then --segundo bau-- queststatus = getPlayerStorageValue(cid,3000) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Stonecutter Axe") item_uid = doPlayerAddItem(cid,2431,1) setPlayerStorageValue(cid,3000,1) else doPlayerSendTextMessage(cid,22,"Vc ja pegou um dos 3 items.") end elseif item.uid == 3002 then --terceiro bau-- queststatus = getPlayerStorageValue(cid,3000) if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você achou um(a) Thunder Hammer") item_uid = doPlayerAddItem(cid,2421,1) setPlayerStorageValue(cid,3000,1) else doPlayerSendTextMessage(cid,22,"Vc ja pegou um dos 3 items.") end else return 0 end return 1 end feche, salve e escolha o nome do seu script/quest exemplo: armas.lua --Adicionando no actions.xml-- abra o action.xml e adicione as tags dos baus. --armas quest-- <action uniqueid="3000" script="armas.lua" /> <action uniqueid="3001" script="armas.lua" /> <action uniqueid="3002" script="armas.lua" /> --end armas quest-- É isso aí... espero que ajude! By Dark-X
    1 ponto
  50. nailo

    Khalin:The New Era

    Alertado por mim, por falta de respeito aos usuários. Alex lhe deu rep -, pelo xingamento.
    -1 pontos
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...