Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 12/31/15 em todas áreas

  1. Bluester

    [Pokemon] Servidor PokeStage

    Eae XTibianos, hoje venho liberar à vocês a base Pokémon Stage, que muitos vêm me pedindo ! ( Só avisando, é PDA e contém bugs que não são difíceis de se resolver ) Bom, então vamos ao que interessa ? • Menu: ├ Informações; ├ Erros/bugs; ├ Sistemas básicos; ├ Prints; ├ Download; └ Creditos. - Informações Básicas - - Prints do Servidor - http://imgur.com/sSdRNIr http://imgur.com/YN7XYrK http://imgur.com/SlUEjo2 http://imgur.com/mydBWJx http://imgur.com/zpJLuzL http://imgur.com/pgHYFtG - Erros/Bugs - - Sistemas básicos - - Downloads - Servidor + Client (Mediafire): (Sprites do Cllient estão na pasta: Client/data/images/topbuttons/ui/854 Scan: Caso alguém possa fazer scan para mim, agradeço... Minha net está ruim. Mas creio que tenha algumas DLLs podem ser acusadas como arquivos maliciosos, mas nada que afete o PC. - Creditos - Eu - Bluester vudi Slicer GabrielTXU Jair Kevick por alguns prints Se tiver mais alguém, me avisem. Não autorizo postar esse Servidor em outro fórum. Conteúdo do XTibia.
    3 pontos
  2. 115757

    Avatar Zero

    Introdução Este é um OT feito por mim juntamente com o kikim da padaria, mas como não tivemos tempo de deixá-lo online e continuá-lo por conta dos estudos, iremos deixar o download e algumas informações básicas. Recomendo uma experiência de 5x a 15x, pois o mapa foi feito exclusivamente para uma RPG mais vívido (sem tp's ou semelhantes). Mapa 60% próprio (créditos ao kingdom age pelo resto). Acesse o site para outras informações, para tutoriais e explicação de alguns sistemas (incluindo magias, também): Link para o site As Vocações Air Bender: São dobradores pouco agressivos. Suas dobras são voltadas para evitar conflito, empurram e puxam com mais facilidade que os outros dobradores, e também são mais velozes que os outros dobradores. Fire Bender: São os dobradores com maior dano. É voltado especialmente para causar o máximo de estrago possível em seus oponentes. Earth Bender: É uma vocação balanceada. Causam um bom dano, empurram e fazem barreiras, porém possui menos eficiência que as outras. Water Benders: São dobradores voltados para o suporte. Eles curam, retiram status (envenamento, drunk), mas possuem um dano mediano. Sistemas Water Pouch: mana para dobradores de água. Nosso water pouch utiliza um sistema diferentes, por isso, viste está página para saber como usá-lo. Forja: Para forjar você deve usar um iron hammer para criar itens à partir de outros, como explica esta página. Mineração: Feito para tirar iron ore e gold nugget de um terreno de terra. Fundamental para a forja, como pode ser visto aqui. Cortar árvores: Assim como a mineração, é fundamental para forjar certos itens, especialmente flechas e bolts. Veja mais detalhadamente aqui. Água ambiente: Certas de magias de água, como w-fish e w-tsnunami, necessitam estar perto da água para serem utilizadas. Imagens Proteja-se das dobras criando uma barreira de pedra! Com um poderoso raio, destrua seus oponentes! ...Você é raio de saudade, meteoro da paixão!... Provoque uma poderosa tempestade para esmagar seus inimigos! Informações Nós não fizemos nenhuma house, então deixaremos a rigor do editor criá-las ou deletá-las. As spells estão parcialmente balanceadas, ou seja, se encontrarem algum bug ou spell OP (muito forte), fale no tópico. Este servidor foi inspirado no Taelin (ou Korelin, para muitos). Taelin foi um antigo servidor de Avatar, muito elogiado por seus jogadores. Importante: como o server não utiliza mana (só para o waterpouch, que nem é propriamente dito uma mana), nós não fizemos o uso de Magic Level na construção ou evolução das magias. Tudo se baseia em level, apenas. Download e Scan Lembrando que o servidor é 8.60 e não faz o uso de client próprio. Senha do god: god / 123456 DOWNLOAD SCAN Créditos e Considerações Finais Obrigado a todos que se recordarem de terem ajudado (pois não foram poucos) e outros que me lembro por ter auxiliado a criação e corrigido alguns bugs. E obrigado a você, que chegou até aqui e fará bom uso do conteúdo. E algumas considerações especiais: Kikim da Padaria: principal editor do OT. Sem ele nada teria acontecido. Oneshot: falecido do fórum, porém seus tópicos foram mais que importantes para a criação das spells. Roksas: obrigado pela assistência e dedicação. Craigmabbit: ajudou na criação de algumas magias mais complexas.
    1 ponto
  3. Oneshot

    Monstros Passivos

    Monstros Passivos Muito bom dia, galera. Sabe, eu estava estudando como funcionam os servidores de pokémons, aqueles que ainda estão começando, embriões de bons servidores, não grandes servidores como o Poke Brasil Online (PokeBro). O problema de todos esses servidores, é que todos são dependentes de sistemas criados pelo brun123 (se não me engano) dentro das sources, ou seja, esses servidores são dependentes do executável compilado do PDA, entre outros. A pedido de um amigo, eu desenvolvi o sistema de monstros passivos. Sim aquele sistema que dá um upgrade na inteligência artificial das criaturas, onde algumas podem atacar o jogador assim que o ver, outras podem atacar apenas quando for atacadas. É um sistema muito básico mesmo, eu fiz com C++ e Lua por puro comodismo, e pretendo deixar mais avançado apenas com C++ e uso de flags nos XMLs. Se você quiser usar, sinta-se a vontade. No seu arquivo monster.h, procure por: bool isHostile() {return mType->isHostile;} Substitua por: bool isHostile() const { std::string value; if(!getStorage("hostile", value)) return mType->isHostile; return booleanString(value); } No seu arquivo monster.cpp, procure por: Monster::selectTarget Dentro da função, procure por: if(!isTarget(creature)) return false; Adicione abaixo: if(!isHostile()) return false; No diretório creaturescripts/scripts, crie um novo arquivo com nome passive.lua e adicione: PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados. function onCombat(cid, target) if isMonster(target) then if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then doCreatureSetStorage(target, "hostile", 1) end doMonsterSetTarget(target, cid) end return true end No mesmo diretório, abra o arquivo login.lua e adicione: registerCreatureEvent(cid, "PassiveSystem") No diretório creaturescripts/, abra o arquivo creaturescripts.xml e adicione: <event type="combat" name="PassiveSystem" event="script" value="passive.lua"/> Agora é só compilar seu servidor, sem a pasta obj, ou seja, dê um Rebuild All e correr pro abraço com seu sistema de monstros passivos. Abraços, Oneshot.
    1 ponto
  4. zipter98

    Mega Evolution System (PxG)

    Base usada: PDA by Slicer, v1.9 Para quem não conhece o sistema de mega evoluções, recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem Held Itens). Instalação do sistema (atenção nos detalhes) data/lib: cooldown bar.lua: Troque o código da função getNewMoveTable(table, n) por este: function getNewMoveTable(table, n) if table == nil then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} local returnValue = moves if n then returnValue = moves[n] end return returnValueend No código da função doUpdateMoves(cid), troque o segundo: table.insert(ret, "n/n,") por: local mEvolveif not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then if not isInArray(ret, "Mega Evolution,") then table.insert(ret, "Mega Evolution,") mEvolve = true endendif not mEvolve then table.insert(ret, "n/n,")end Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6 por: min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1 --alterado v1.6 Código da spell: elseif spell == "Mega Evolution" then local effect = xxx --Efeito de mega evolução. if isSummon(cid) then local pid = getCreatureMaster(cid) if isPlayer(pid) then local ball = getPlayerSlotItem(pid, 8).uid if ball > 0 then local attr = getItemAttribute(ball, "megaStone") if attr and megaEvolutions[attr] then local oldPosition, oldLookdir, health_percent_lost = getThingPos(cid), getCreatureLookDir(cid), (getCreatureMaxHealth(cid) - getCreatureHealth(cid)) * 100 / getCreatureMaxHealth(cid) doItemSetAttribute(ball, "poke", megaEvolutions[attr][2]) doSendMagicEffect(getThingPos(cid), effect) doRemoveCreature(cid) doSummonMonster(pid, megaEvolutions[attr][2]) local newPoke = getCreatureSummons(pid)[1] doTeleportThing(newPoke, oldPosition, false) doCreatureSetLookDir(newPoke, oldLookdir) adjustStatus(newPoke, ball, true, false) doCreatureAddHealth(newPoke, -(health_percent_lost * getCreatureMaxHealth(newPoke) / 100)) if useKpdoDlls then addEvent(doUpdateMoves, 5, pid) end end end end end Depois, em configuration.lua: megaEvolutions = { --[itemid] = {"poke_name", "mega_evolution"}, [11638] = {"Charizard", "Mega Charizard X"}, [11639] = {"Charizard", "Mega Charizard Y"},} Agora, em data/actions/scripts, código da mega stone: function onUse(cid, item) local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid if not mEvolution then return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.") elseif ball < 1 then return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif #getCreatureSummons(cid) > 0 then return doPlayerSendCancel(cid, "Return your pokemon.") elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.") elseif getItemAttribute(ball, "megaStone") then return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.") end doItemSetAttribute(ball, "megaStone", item.itemid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".") doRemoveItem(item.uid) return trueend Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then return trueend coloque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end Depois, em data/creaturescripts/scripts, look.lua: Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque: local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone")if megaStone then extraInfo = getItemNameById(megaStone) if pokename:find("Mega") then pokename = megaEvolutions[megaStone][1] endend Depois, acima do primeiro: doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque: if extraInfo ~= "" then table.insert(str, "\nIt's holding a(n) "..extraInfo..".")end Já em data/talkactions/scripts, move1.lua: Abaixo de: function doAlertReady(cid, id, movename, n, cd) coloque: if movename == "Mega Evolution" then return true end Troque: if not move then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end por: if not move then local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") if not isMega or name:find("Mega") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local moveTable, index = getNewMoveTable(movestable[name]), 0 for i = 1, 12 do if not moveTable[i] then index = i break end end if tonumber(it) ~= index then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local needCds = true --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown. if needCds then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.") end end end move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0} end E troque: doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por: local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!"if move.name == "Mega Evolution" then spellMessage = "Mega Evolve!"enddoCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY) Se não quiser que o "Mega" apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then nick = getItemAttribute(item, "nick")end coloque: if nick:find("Mega") then nick = nick:match("Mega (.*)") if not pokes[nick] then nick = nick:explode(" ")[1] end end Caso queiram que cada mega evolução tenha um clã específico: Em move1.lua, acima de: move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} coloque: local megaEvoClans = { --[mega_stone_id] = "clan_name", [91912] = "Volcanic", [91913] = "Seavell", --etc,}if megaEvoClans[isMega] then if getPlayerClanName(cid) ~= megaEvoClans[isMega] then return doPlayerSendCancel(cid, "You can't mega evolve this pokemon.") endend Finalizando o tópico após uma pequena reestruturação na indexação, gostaria de levantar algo que acredito ser bem claro: o sistema é cheio de detalhes, muitas vezes minuciosos. Um simples erro e bugs aparecem por toda parte. Se você encontrou algum, pelo menos uma das duas seguintes condições acontecem: Base DIFERENTE da usada. Peço desculpas, mas não pretendo adaptar o sistema para todas as bases diferentes que aparecerem. Se a base for a mesma, você com certeza errou em algum ponto da instalação. O sistema foi testado inúmeras vezes, não apenas por mim, e seu funcionamento foi seguidamente comprovado. Façam bom uso, invocadores.
    1 ponto
  5. Gabrieltxu

    [Pokemon Open-Source] Pokemon Ex 3.0

    Conteudo Retirado.
    1 ponto
  6. Sinceramente, não sei qual a área mais adequada para um complemento a um sistema, mas w/e. Este complemento é designado a possibilidade de uso da PokéDex em corpses de pokémons, podendo obter suas informações. Sim, simples assim. data/actions/scripts, pokedex.lua: Troque: if not isCreature(item2.uid) then return true end por: if not isCreature(item2.uid) then local name = getItemNameById(item2.itemid) if name:find("fainted") then name = doCorrectPokemonName(name:gsub("fainted ", "")) if not getPlayerInfoAboutPokemon(cid, name).dex then local exp = newpokedex[name].level * rate doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..name.." and received "..exp.." experience points.") doSendMagicEffect(getThingPos(cid), 210) doPlayerAddExperience(cid, exp) doAddPokemonInDexList(cid, name) else doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8)) end end return true end Testado em PDA v1.9, por Slicer.
    1 ponto
  7. Conteudo Retirado.
    1 ponto
  8. Strogman

    Perfect nick system 100%

    exclusividade xtibia porfavor não postar em outro forum system exclusivo para o xtibia Bom vi muito gente a traz desse sistema e, então resolvi fazer esse nick para ajudar a galera que quer sair do Lixo do pda e começar um projeto bom com os open source. para quem não sabe, nick system é um system muito popular na família dos poketibias, é um system que muda o nome/adiciona um apelido no personagem, muda o nome de exibição no client o nome que fica em cima do personagem no jogo. fulano: Gristony como essa função funciona? Gristony: exatamente igual a do pda! Em ProtocolGame.cpp em baixo de: void ProtocolGameAddShopItem(NetworkMessage_ptr msg, const ShopInfo item){ const ItemType& it = Itemitems[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); else msg->AddByte(0x01); msg->AddString(item.itemName); msg->AddU32(uint32_t(it.weight * 100)); msg->AddU32(item.buyPrice); msg->AddU32(item.sellPrice);} adicione: void ProtocolGamereloadCreature(const Creature* creature){ if(!canSee(creature)) return; // we are cheating the client in here! uint32_t stackpos = creature->getTile()->getClientIndexOfThing(player, creature); if(stackpos >= 10) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); stdlist<uint32_t>iterator it = stdfind(knownCreatureList.begin(), knownCreatureList.end(), creature->getID()); if(it != knownCreatureList.end()) { RemoveTileItem(msg, creature->getPosition(), stackpos); msg->AddByte(0x6A); msg->AddPosition(creature->getPosition()); msg->AddByte(stackpos); AddCreature(msg, creature, false, creature->getID()); } else AddTileCreature(msg, creature->getPosition(), stackpos, creature); }}void ProtocolGamesendCreatureNick(const Creature* creature){ reloadCreature(creature);} Em ProtocolGame.h em baixo de: void sendQuestInfo(Quest* quest); adicione: void reloadCreature(const Creature* creature);void sendCreatureNick(const Creature* creature); Em Player.h em baixo de: void sendCreatureShield(const Creature* creature) {if(client) client->sendCreatureShield(creature);} adicione: void sendCreatureNick(const Creature* creature) {if(client) client->sendCreatureNick(creature);} Em Creature.cpp em baixo de: partyShield = SHIELD_NONE; adicione: Nick = ""; Em Creature.h em baixo de: virtual const Monster* getMonster() const {return NULL;} adicione: stdstring Nick; Luascript.cpp em baixo de: //doPlayerSendCancel(cid, text) lua_register(m_luaState, "doPlayerSendCancel", LuaScriptInterfaceluaDoPlayerSendCancel); adicione: //doCreatureSetNick(cid, nick) lua_register(m_luaState, "doCreatureSetNick", LuaScriptInterfaceluaDoCreatureSetNick); em baixo de: int32_t LuaScriptInterfaceluaDoPlayerSendCancel(lua_State* L){ //doPlayerSendCancel(cid, text) stdstring text = popString(L); ScriptEnviroment* env = getEnv(); if(const Player* player = env->getPlayerByUID(popNumber(L))) { player->sendCancel(text); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1;} adicione: int32_t LuaScriptInterfaceluaDoCreatureSetNick(lua_State* L){ //doCreatureSetNick(cid, nick) ScriptEnviroment* env = getEnv(); stdstring nick = popString(L); Creature* creature = env->getCreatureByUID(popNumber(L)); if(creature) { SpectatorVec list; g_game.getSpectators(list, creature->getPosition()); Player* player = NULL; creature->Nick = nick; for(SpectatorVecconst_iterator it = list.begin(); it != list.end(); ++it) { if(player = (*it)->getPlayer()) { player->sendCreatureNick(creature); break; } } }else{ lua_pushnil(L); } return 1;} Em Luascript.h em baixo de: static int32_t luaDoRemoveItem(lua_State* L); adicione: static int32_t luaDoCreatureSetNick(lua_State* L); Em Protocolgame.cpp procure por: void ProtocolGameAddCreature(NetworkMessage_ptr msg, const Creature* creature, bool known, uint32_t remove){ if(!known) { em baixo de: msg->AddU32(creature->getID()); adicione: stdstring nick = creature->getName(); if (creature->Nick != "") nick = creature->Nick; substitua: msg->AddString(creature->getHideName() ? "" : creature->getName()); por: msg->AddString(creature->getHideName() ? "" : nick); Obs: compilar em rebuild all ou sem os arquivos .obj exemplo de uso: doCreatureSetNick(getCreatureSummons(cid)[1], "Gristony") Creditos Gristony façam bom uso do code pequenos grilos
    1 ponto
  9. Então pessoal, eu e o Stevensky (Mapper), elaboramos duas ideias para quando o player enjuar de ser o pokemon que ele escolheu, que no caso no inicio é o Bulbasaur, Charamander e Squirtle, Então para vocês terem uma ideia Mais ou menos de qual votar, o player vai ser chamado de Corey e ele é um Charmander, então o Corey, não quer ser mais um charmander, ele quer ser o Horsea e ele tem o Egg do Horsea, então vamos apresentar nossas ideias para resolver o problema do Corey kk 1º Ideia: 2º Ideia: Então, qual das duas ideias é mais inovadora? Mais divertida? Mais Original? E que vocês achem que combina mais com o ot? Responda a enquete para tirarmos nossa dúvida e não esqueça de dar sua opnião nos comentários
    1 ponto
  10. Maguito

    Pokemon PDA XTIBIA

    tem que confiar na boa intenção do autor do tópico. As vezes liberando a source, puxam pra um projeto privado e abandonam o forum. "Eu" só liberaria quando ja tivesse uma boa base para todos.
    1 ponto
  11. Posso tentar te ajudar se quiser, te mandei um convite no skype.
    1 ponto
  12. se esta morrando facil voce tem que ir na pasta spells e mexer nas magias em actions e mexer nas potions
    1 ponto
  13. zipter98

    Uma pequena ajuda.

    Troque: cfg.refuel = 5 * 60 * 1000 por: cfg.refuel = 5 * 60
    1 ponto
  14. Administrador

    Players Broadcast

    Esse sistema foi feito por Mark Samman. Level mínimo, preço da transmissão, tempo entre as transmissões; e como é exibido no bate-papo, pode ser configurado. O sistema foi modificado por Hokku pra 1.1 data/talkactions/scripts/broadcast22.lua local config = { storage = 19400, -- change to an non used storage if u use it cor = "advance", -- No working on TFS 1.1, edit line 21 param tempo = 2, -- in minutes price = 1000, -- price of each bc level = 100 -- lvl requiered to use bc } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*60)) Game.broadcastMessage("[ALL] "..getCreatureName(cid)..": "..param.."", MESSAGE_STATUS_CONSOLE_ORANGE) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You have successfully sent a broadcast, now you'll have to wait " ..config.tempo.. " minute(s) until you broadcast again.") else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end end data/talkactions.xml <talkaction words="/all" separator=" " script="broadcast22.lua"/>
    1 ponto
  15. [C++] doCreatureCastSpell (0.3.6pl1) Escrito e testado: 0.3.6PL1 [8.54 - 8.60] Salve galera da Eks, eu fui procurar na internet sobre essa função e vi que já tentaram cria-la, porém não conseguiram, ou se conseguiram nunca postaram. Então eu resolvi faze-la para vocês, e eu percebi que ninguém nunca tinha feito, por causa de uma dúvida, e um certo grau de dificuldade. Certamente, eu tive uma dificuldade no começo, porém ao desenvolver da função eu percebi que não era nada de mais. Então eu trago aqui pra vocês esta função, cuja a ideia é fazer com que a criatura (jogador ou monstro) a utilize uma magia pelo nome dela, importante lembrar que o nome da magia, não é as palavras mágicas, exemplo: "utani hur" é a palavra mágica e "haste" é o nome da magia. Enfim, sem mais delongas e vamos aos códigos Vá ao arquivo "LuaScript.cpp" e procure por: //doPlayerAddExperience(cid, amount) lua_register(m_luaState, "doPlayerAddExperience", LuaScriptInterface::luaDoPlayerAddExperience); E abaixo adicione: //doCreatureCastSpell // by OrochiElf. lua_register(m_luaState, "doCreatureCastSpell", LuaScriptInterface::luaDoCreatureCastSpell); Agora procure por: E abaixo adicione: int32_t LuaScriptInterface::luaDoCreatureCastSpell(lua_State* L) // by OrochiElf. { //doCreatureCastSpell(cid, spellname) std::string spellName = popString(L); ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) { InstantSpell* spell = g_spells->getInstantSpellByName(spellName); if(!spell) { lua_pushboolean(L, false); return 1; } Creature* target = creature->getAttackedCreature(); if(target) spell->castSpell(creature, target); else spell->castSpell(creature, creature); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Agora vá ao arquivo "LuaScript.h" e procure por: static int32_t luaDoPlayerAddItem(lua_State* L); E abaixo adicione: static int32_t luaDoCreatureCastSpell(lua_State* L); // by OrochiElf Exemplo, eu tenho um pet, e quero que ele utilize a magia de "utani hur" - "haste". Talkaction Code: function onSay(cid, words, param, channel) local summon = getCreatureSummons(cid)[1] if isCreature(summon) then doCreatureCastSpell(summon, "haste") end return true end Esta função é muito requisitada para fazer servidores de pokémon, evitando gambiarras. Que foi o motivo para qual eu desenvolvi ela Créditos. Tony Araújo (OrochiElf) 100%
    1 ponto
  16. bagdarapaq

    Naruto 7.92

    Bom estou com um ot de naruto 7.92 ai vai ums prints DOWNLOAD SCAN QUEM CONSEGUIR DEIXAR MANDA O IP QUERO JOGAR TBM CREDITOS :TIBIANET
    1 ponto
  17. Vlw Galerinha. espero que gostem do servidor
    1 ponto
  18. Tem sim amiguinho. Testei aqui e está normal o link.
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...