Jump to content

Search the Community

Showing results for tags 'action'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Recursos
    • Suporte
    • Pedidos
    • Downloads
  • OFF-Topic

Categories

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

Found 850 results

  1. antes de pedir tentei fazer ou apenas pegar de outros severs mais não consigo se alguem se quiser me ajudar ficarei grato .........sever base e poke flash e la o sistema de order e por icone e não da para dar mover no pokemon , obg.
  2. Fala ae galera, venho por meio deste tópico anunciar um novo poketibia, o Pokemon New. Informações do servidor(Pokemon New): *Sistema de nature dos pokemons 100% *Sistema daycare 100% *Mega evolução por talkaction 100% *Ditto system 100% *Smeargle system 100% *Kanto ,johto,hoen,sinnoh,unova,kalos 100% *Todos os pokemons e seus devidos respawn e megas 100% *Sistema de história das quests 100% *Sistema de pesca 100% *Sistema de daily 30% *Sistema de duel 90% *Sistema de torneios 100% *Golden arena 100% *Ícones 90% *Autoloot igual pxg 100% *Up 100% *Caugt 100% Download: http://www.mediafire.com/?p12w8kkzbwmn8cg Venha se divertir conosco
  3. Galera do XTibia, venho trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro ou items. São 70 leveis de Mining que vão upando conforme você minera. Enfim, vamos ao script: actions\scripts\mining.lua: Em terra, você coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo você só consegue minerar skull, no nv 70 você vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script: local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } o storage é onde vai salvar o seu nível chance é a chance de pegar um item cada vez que minera. k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10. experience é o storage que fica salvo sua experiencia. Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players. e no actions.xml: <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser. PS: Uma fotinha pra vcs verem Autor: WhiteWolf
  4. Train system V 1.0 Venho Aqui Trazer Esse System bem Legal Com script script você só precisa adicionar um AID (no trem), e apenas adicionar o costume ferroviário! Adicionar isso em actions.xml: <action itemid="7131" event="script" value="railbymock.lua" /><action itemid="7132" event="script" value="railbymock.lua" /> E em railbymock.lua adicione: --Script by mock the bear--Configlocal SPEED = 200local PLAYERSPEED = 250--Endlocal RAILS = {7121, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130} --Thxy rails itemid by nord :Plocal CART = {[0] = 7132, [2] = 7132, [3] =7131, [1] =7131}local CONFIG = {[7121] = 0,[7122] = 0,[7123] = {EAST, SOUTH},[7124] = {WEST, SOUTH},[7125] = {EAST, NORTH},[7126] = {WEST, NORTH},[7127] = 0,[7128] = 0,[7129] = 0,[7130] = 0,--Random}local reverse = {[0] = 2, 3, 0, 1} -- All that table was made by nord.local function moveTrain(cid, frompos, direc)local tabif not isPlayer(cid) thenreturnendlocal pos = getCreaturePosition(cid)local rar = findRail(pos)if not rar thendoPlayerSetNoMove(cid, false)doRemoveCondition(cid, CONDITION_OUTFIT)doChangeSpeed(cid, -PLAYERSPEED)doMoveCreature(cid, direc)elsetab = CONFIG[rar]if tab and type(tab) == 'table' thendirec = tab[tab[1] == reverse[direc] and 2 or 1] -- by nord hereenddoSetItemOutfit(cid, CART[direc], -1)doMoveCreature(cid, direc)addEvent(moveTrain, SPEED, cid, pos,direc)endendfunction findRail(p)local p_ = {x=p.x, y=p.y, z=p.z}for i=0,10 dop_.stackpos = ilocal t = getTileThingByPos(p_)if isInArray(RAILS, t.itemid) thenreturn t.itemid,t.uidendendendfunction onUse(cid, item, frompos) --Script by mock the bearif hasCondition(cid, CONDITION_OUTFIT) or (item.actionid < 500 and item.actionid > 503) thenreturn falseenddoTeleportThing(cid, frompos, false)doPlayerSetNoMove(cid, true)doChangeSpeed(cid, PLAYERSPEED)addEvent(moveTrain, SPEED, cid, frompos, item.actionid-500)return trueend Creditos: Autor: Mock Testado em: TFS 0.3.6
  5. Galera do Xtibia To com um bug na minha GOback alguem ai pode me ajuda pfv
  6. Galera vou ser bem objetivo no problema. Consegui montar a Yalahar Quest no server. E está funcionando normal, as waves, o sqm no void, só poder clicar 1x no globo, os portais fechando... O que não funcionou é que em certo momento o Azerus da sala DEVERIA ser removido, para entrar o Azerus1. Mas isso não funciona e ficam dois Azerus na sala. Bem como o clear da room também não funciona e os próximos a fazer já começam com bixos que sobraram. movements/scripts function onStepIn(cid, item, position, fromPosition)--Config-->local queststatus = getPlayerStorageValue(cid, 50001)--EndConfig--> if item.actionid == 1974 and queststatus == -1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "It seems by defeating Azerus you have stoped this army from entering your world! Better leave this ghastly place forever.") setPlayerStorageValue(cid, 4765, 1) return TRUEendif item.actionid == 1973 and queststatus == -1 then-- Here is the code start:starting={x = 480, y = 178, z = 7, stackpos = 253}checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}ending={x = 500, y = 199, z = 7, stackpos = 253}players=0totalmonsters=0monster = {}repeatcreature= getThingfromPos(checking) if creature.itemid > 0 then if getPlayerAccess(creature.uid) == 0 then players=players+1 end if getPlayerAccess(creature.uid) ~= 0 and getPlayerAccess(creature.uid) ~= 3 then totalmonsters=totalmonsters+1 monster[totalmonsters]=creature.uid end endchecking.x=checking.x+1 if checking.x>ending.x then checking.x=starting.x checking.y=checking.y+1 enduntil checking.y>ending.yif players==0 thentrash= {x = 470, y = 188, z = 7}current=0repeatcurrent=current+1doTeleportThing(monster[current],trash)until current>=totalmonstersend-- Here is the end of itdoTeleportThing(cid, player_pos_entrada)doSendMagicEffect(player_pos_entrada, 10)elsedoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You already done this quest!')endend action/scripts function onUse(cid, item, frompos, item2, topos) --Config-->local statue_pos = {x = 490, y = 188, z = 7}local new_portal_pos = {x = 490, y = 189, z = 7, stackpos = 1}local new_pos = {x = 542, y = 196, z = 5}local crystal_pos = {x = 490, y = 197, z = 7}--End Config--> function Potwoory1() doCreateMonster('Rift Brood', {x = statue_pos.x+1, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Brood', {x = statue_pos.x-1, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Brood', {x = statue_pos.x, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x-1, y = statue_pos.y, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x+1, y = statue_pos.y, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x+1, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x-1, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster("Azerus", {x = statue_pos.x-1, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) addEvent(Potwoory2, 7 * 700)end function Potwoory2() doCreateMonster('Rift Brood', {x = statue_pos.x+1, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Brood', {x = statue_pos.x-1, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Brood', {x = statue_pos.x, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x-1, y = statue_pos.y, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x+1, y = statue_pos.y, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x+1, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x-1, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster("Azerus", {x = statue_pos.x-1, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) addEvent(Potwory2, 30 * 1000)end function Potwoory3() removeFieldsTile() removeAzerusMonstersInArea() doCreateMonster('Rift Brood', {x = statue_pos.x-1, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Brood', {x = statue_pos.x, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x-1, y = statue_pos.y, z = statue_pos.z, stackpos = 253}) doCreateMonster('Rift Worm', {x = statue_pos.x+1, y = statue_pos.y, z = statue_pos.z, stackpos = 253}) doCreateMonster("Azerus1", {x = statue_pos.x-1, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) addEvent(Potwory3, 35 * 1000)end function Potwoory4()removeFieldsTile() removeAzerusMonstersInArea() doCreateMonster('Azerus', {x = statue_pos.x, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('War Golem', {x = statue_pos.x+1, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('War Golem', {x = statue_pos.x-1, y = statue_pos.y+1, z = statue_pos.z, stackpos = 253}) doCreateMonster('War Golem', {x = statue_pos.x, y = statue_pos.y-1, z = statue_pos.z, stackpos = 253}) doCreateMonster('War Golem', {x = statue_pos.x-1, y = statue_pos.y, z = statue_pos.z, stackpos = 253})end function NewPortal()doCreateTeleport(1387, new_pos, new_portal_pos)addEvent(RemoveAll, 30 * 1000)end function RemoveAll()doRemoveItem(getThingfromPos(new_portal_pos).uid,1)doItemSetAttribute(getTileItemById(crystal_pos, 7493).uid, "aid", 57500)end if item.aid == 57500 and getThingfromPos(new_portal_pos).itemid ~= 17668 thendoCreateItem(17668,1,new_portal_pos)addEvent(Potwoory1, 0)doItemSetAttribute(getTileItemById(crystal_pos, 7493).uid, "aid", 57501)elsedoPlayerSendTextMessage(cid,18,"Sorry, not possible.")endreturn TRUEend Agradeço quem puder ajudar.
  7. Vou usar esse script para que o player só passe pelo sqm se tiver todos storageid. Mas está montado da forma errada... function onStepIn(cid, item, pos)local position = {x = 830, y = 70, z = 7}local position2 = {x = 830, y = 69, z = 7}if (getPlayerStorageValue(cid, 10274, 10275, 10276, 10277, 10278, 10279, 10280) == 1 thendoTeleportThing(cid, position)doSendMagicEffect(position,10)elsedoTeleportThing(cid, position2)doSendMagicEffect(position2,10)endend
  8. Olá colegas, Estou fazendo o possível pra tirar apenas as dúvidas que eu não encontro forma de resolver e surgiu mais uma. Na Pits of Inferno tem uma parte que você precisa ter o The Holy Tible para passar pelo SQM X e ser transportado para SQM Y, caso não tenha o livro nada acontece. É esse script que desejo. 1. Para evitar spam, vou deixar outra dúvida aqui também. 2. Criei com ajuda do pessoal aqui do fórum um monstro que quando morre abre o portal para X local. Até ai tudo bem, mas o portal abre sempre onde o monstro morre, queria que ele abrisse em uma coordenada XYZ. local config = {message = "Take the Blue Tome, you have 60 seconds to leave! The room will collapse!",timeToRemove = 60, -- secondsteleportId = 1387,bosses = {["Raging Halcrof"] = {teleportPos = {x = 1071, y = 1124, z = 10, stackpos = 1}, toPos = {x = 1066, y = 1125, z = 6}}}}local function removal(position)doRemoveThing(getTileItemById(position, config.teleportId).uid, 1)return TRUEendfunction onDeath(cid, corpse, killer)registerCreatureEvent(cid, "halcrofteleport")local position = getCreaturePosition(cid)for name, pos in pairs(config.bosses) doif name == getCreatureName(cid) thenteleport = doCreateTeleport(config.teleportId, pos, position)doCreatureSay(cid, config.message, TALKTYPE_ORANGE_1)addEvent(removal, config.timeToRemove * 1000, position)doSendMagicEffect(position,10)endendreturn TRUEend Esse é o script que estou usando mas não está funcionando. Ele abre o portal no corpo do monstro e não está enviando o player para posição desejada. 3. Esse é um NPC que o jogador vai desafiar se tiver lvl 100+ pode aceitar, então é movido para sala. Onde luta com o boss e se o player morrer pode tentar novamente, mas se conseguir eu queria criar um storageid onde o npc checasse se o player já derrotou o boss e se sim, não pode fazer de novo. local tab = { level = 100, pos = {x = 1071, y = 1135, z = 10}}local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endfunction creatureSayCallback(cid, type, msg) if (not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if (msgcontains(msg, 'challenge')) then talkState[talkUser] = 1 selfSay('You are sure you want to go? You can not return.', cid) elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if (getPlayerLevel(cid) <= tab.level) then talkState[talkUser] = 0 doTeleportThing(cid, tab.pos) doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT) else talkState[talkUser] = 0 selfSay('I can only challenge players with level '..tab.level..' or less.', cid) end elseif (msgcontains(msg, 'no') and talkState[talkUser] == 1) then talkState[talkUser] = 0 selfSay('Come back when you are ready learner.', cid) end return trueendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new()) Agradeço desde já galera.
  9. Instalando 1. Abra sua pagina characters.php 2. Substitua por: Créditos: Kernox - criador original do script
  10. Iae galera ... Queria saber se existiria a possibilidade de vcs disponibilizarem um script que funcionasse com storage. No caso seria um outfits e uma spells por storage. Se tiver como, agradeço desde de ja ! =D
  11. Visto que agora e aonda do tfs 1.2 vou trazer umas paradas do forum gringo. E como não vi no forum, acho que e bizu. Addon doll e Mount Doll por Modal Window... é fácil e simples. Primeiro vamos precisar instalar o modal window. va em data/lib/lib.lua e adiciona: dofile('data/lib/modalwindow.lua') Depois na pasta data/Lib crie um arquivo chamado modalwindow e adiciona esse code. Agora em data/creaturescripts/creaturescripts.xml Add a tag. <event type="modalwindow" name="ModalWindowHelper" script="modalwindowhelper.lua" /> Agora crie um arquivo chamado modalwindowhelper. e add o code nele. Pronto a parte da janela esta feita, agora vamos ao Addon em actions.xml add. <action itemid="ITEMID" script="addon_doll.lua"/> em item id coloque o id que desejar, depois disso crie um arquivo chamado de addon_doll.lua e add. em global.lua add dofile('data/lib/addon_doll.lua') para finalizar cria um arquivo em /data/lib/ com o nome de addon_doll.lua e add o code. Pronto Addon Doll Finalizado vamos ao Mount.... No arquivo /data/actions/actions.xml add. <action itemid="ITEMID" script="mount_doll.lua"/> Agora em /data/actions/scripts crie um arquivo com o nome mount_doll.lua e add. Agora no arquivo data/global.xml add. dofile('data/lib/mount_doll.lua') agora em /data/lib/ crie um arquivo com o nome "mount_doll.lua" e add. Pronto codigo finalizado. Espero que seja útil, lembrando não foi eu quem fiz, mais qualquer duvida e so falar que tento ajudar. foi o membro Strutz de um fórum gringo. Créditos todo dele.
  12. Testado em TFS 1.2, 10.77/78 Baseado em: http://www.tibia.com/news/?subtopic=newsarchive&id=2486 http://portaltibia.com.br/teaser-3-recompensa-para-quem-precisa-de-recompensa/ INSTRUÇÕES Execute a query na database: CREATE TABLE IF NOT EXISTS `player_rewardchest` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_id` int(11) NOT NULL, `reward` text NOT NULL, `date` bigint(20) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB; src/const.h Antes de... ITEM_MARKET = 14405 Adicione: ITEM_REWARD_CHEST = 21584, REWARD_CHEST_DEPOT = 99, src/depotchest.h Antes de: explicit DepotChest(uint16_t _type); Adicione: uint32_t getDepotId() const { return depotId; } void setDepotId(uint32_t id) { depotId = id; } Antes de: uint32_t maxDepotItems; Adicione: uint32_t depotId;src/depotchest.cpp Antes de: maxDepotItems = 1500; Adicione: depotId = 0; Acima de: return Container::queryAdd(index, thing, count, flags, actor); Adicione: if (actor != nullptr && getDepotId() == REWARD_CHEST_DEPOT) { return RETURNVALUE_NOTPOSSIBLE; }src/depotlocker.h Acima de: //cylinder implementations Adicione: void setMaxLockerItems(uint32_t maxitems) { maxSize = maxitems; } src/luascript.h Acima de: static int luaContainerGetSize(lua_State* L); Adicione static int luaContainerGetContentDescription(lua_State* L); src/luascript.cpp Acima de: registerMethod("Container", "getSize", LuaScriptInterface::luaContainerGetSize); Adicione: registerMethod("Container", "getContentDescription", LuaScriptInterface::luaContainerGetContentDescription); Acima: int LuaScriptInterface::luaContainerGetSize(lua_State* L) Adicione: int LuaScriptInterface::luaContainerGetContentDescription(lua_State* L) { // container:getContentDescription() Container* container = getUserdata<Container>(L, 1); if (container) { std::ostringstream ss; ss << container->getContentDescription(); pushString(L, ss.str()); } else { lua_pushnil(L); } return 1; } src/actions.cpp Mude: //depot container if (DepotLocker* depot = container->getDepotLocker()) { DepotLocker* myDepotLocker = player->getDepotLocker(depot->getDepotId()); myDepotLocker->setParent(depot->getParent()->getTile()); openContainer = myDepotLocker; player->setLastDepotId(depot->getDepotId()); } else { openContainer = container; } Para: //reward chest and depot container if (item->getID() == ITEM_REWARD_CHEST) { DepotLocker* myRewardChest = player->getRewardChest(); myRewardChest->setParent(item->getTile()); openContainer = myRewardChest; player->setLastDepotId(REWARD_CHEST_DEPOT); } else if (DepotLocker* depot = container->getDepotLocker()) { DepotLocker* myDepotLocker = player->getDepotLocker(depot->getDepotId()); myDepotLocker->setParent(depot->getParent()->getTile()); openContainer = myDepotLocker; player->setLastDepotId(depot->getDepotId()); } else { openContainer = container; } src/player.h Antes de: DepotLocker* getDepotLocker(uint32_t depotId); Adicione: DepotLocker* getRewardChest(); src/player.cpp Antes de: DepotChest* depotChest = new DepotChest(ITEM_DEPOT); Adicione: depotChest->setDepotId(depotId); Acima de: void Player::sendCancelMessage(ReturnValue message) const Adicione: DepotLocker* Player::getRewardChest() { auto it = depotLockerMap.find(REWARD_CHEST_DEPOT); if (it != depotLockerMap.end()) { inbox->setParent(it->second); return it->second; } DepotLocker* rewardChest = new DepotLocker(ITEM_LOCKER1); rewardChest->setDepotId(REWARD_CHEST_DEPOT); rewardChest->setMaxLockerItems(1); rewardChest->internalAddThing(getDepotChest(REWARD_CHEST_DEPOT, true)); depotLockerMap[REWARD_CHEST_DEPOT] = rewardChest; return rewardChest; } On player.cpp, container.cpp, inbox.cpp Mude: if (!item->isPickupable()) { Para: if (item->getID() != 21518 && !item->isPickupable()) { Adicione @ data/actions/actions.xml <!-- Reward Chest System --> <action itemid="21584" script="reward_chest.lua"/> <action actionid="21584" script="reward_chest.lua"/> Crie @ data/actions/scripts/reward_chest.lua function onUse(player, item, fromPosition, target, toPosition, isHotkey) --Reward Chest if item:getId() == 21584 then if player:getExhaustion(REWARD_CHEST.STORAGE) > 0 then return player:sendCancelMessage('You need to wait ' .. string.diff(player:getStorageValue(REWARD_CHEST.STORAGE)-os.time()) .. ' before using this chest again.') end player:updateRewardChest() --Boss Corpse elseif item:getActionId() == 21584 then local reward = REWARD_CHEST.LOOT[tonumber(item:getAttribute('text'))][player:getGuid()] if reward ~= nil then local rewardBag = Container(doCreateItemEx(REWARD_CHEST.CONTAINER, 1)) addContainerItems(rewardBag, reward) if player:getCapacity() < rewardBag:getCapacity() then return player:sendCancelMessage(RETURNVALUE_NOTENOUGHCAPACITY) end if player:addItemEx(rewardBag, false) == RETURNVALUE_NOERROR then REWARD_CHEST.LOOT[tonumber(item:getAttribute('text'))][player:getGuid()] = nil player:sendCancelMessage('You have picked a reward container.') else player:sendCancelMessage(RETURNVALUE_NOTENOUGHROOM) return true end end end return false end Adicione @ data/creaturescripts/creaturescripts.xml <event type="kill" name="RewardChest" script="reward_chest.lua"/> Register @data/creaturescripts/scripts/login.lua player:registerEvent("RewardChest") Crie @ data/creaturescripts/scripts/reward_chest.lua REWARD_CHEST = { BOSSES = {"Bibby Bloodbath", "Chizzoron the Distorter", "Ferumbras", "Furyosa", "Gaz'haragoth", "Ghazbaran", "Hirintror", "Jaul", "Mad Mage", "Mawhawk", "Morgaroth", "Obujos", "Ocyakao", "Omrafir", "Orshabaal", "Raging Mage", "Tanjis", "The Mutated Pumpkin", "The Pale Count", "The Welter", "Tyrn", "White Pale", "Zulazza the Corruptor", "Zushuka"}, LOOT = {}, DECAY = {}, DEPOT_ID = 99, CONTAINER = 21518, EXPIRE = 7*24*60*60, --days to erase stored rewards STORAGE = 18394, --player storage for chest exhaustion EXHAUST = 5*60, --time allowed to use again the chest } function table.find(t, value, sensitive) local sensitive = sensitive or true if(not sensitive and type(value) == 'string') then for i, v in pairs(t) do if(type(v) == 'string') then if(v:lower() == value:lower()) then return i end end end return nil end for i, v in pairs(t) do if(v == value) then return i end end return nil end function table.serialize(x, recur) local t = type(x) recur = recur or {} if(t == nil) then return "nil" elseif(t == "string") then return string.format("%q", x) elseif(t == "number") then return tostring(x) elseif(t == "boolean") then return x and "true" or "false" elseif(getmetatable(x)) then error("Can not serialize a table that has a metatable associated with it.") elseif(t == "table") then if(table.find(recur, x)) then error("Can not serialize recursive tables.") end table.insert(recur, x) local s = "{" for k, v in pairs(x) do s = s .. "[" .. table.serialize(k, recur) .. "]" .. " = " .. table.serialize(v, recur) .. ", " end return s:sub(0, s:len() - 2) .. "}" end error("Can not serialize value of type '" .. t .. "'.") end function table.unserialize(str) return loadstring('return ' .. str)() end function addContainerItems(container, items) for k, v in pairs(items) do if ItemType(k):isContainer() then local newBag = Container(doCreateItemEx(k, 1)) addContainerItems(newBag, v) container:addItemEx(newBag) else container:addItem(v[1], v[2]) end end end function MonsterType.createLootItem(self, lootBlock, chance) local lootTable, itemCount = {}, 0 local randvalue = math.random(0, 100000) / (getConfigInfo("rateLoot") * chance) if randvalue < lootBlock.chance then if (ItemType(lootBlock.itemId):isStackable()) then itemCount = randvalue % lootBlock.maxCount + 1 else itemCount = 1 end end while itemCount > 0 do local n = math.min(itemCount, 100) itemCount = itemCount - n table.insert(lootTable, {lootBlock.itemId, n}) end return lootTable end function MonsterType.getBossReward(self, chance) local result = {} if getConfigInfo("rateLoot") > 0 then for _, loot in pairs(self:getLoot()) do local itemList = self:createLootItem(loot, chance) if itemList then for _, item in ipairs(itemList) do table.insert(result, item) end end end end return result end function getDecayTime(id) local decayTime = 0 do local o = io.open('data/items/items.xml','r') file = o:read('*a') o:close() end local function sumDecayTime(corpse) for attr in file:gmatch('<item.-id="' .. corpse ..'"(.-)</item>') do local decayTo = attr:match('<attribute.-key="decayTo".-value="(.-)".-/>') local duration = attr:match('<attribute.-key="duration".-value="(.-)".-/>') decayTime = decayTime + duration if tonumber(decayTo) > 0 then sumDecayTime(decayTo) end break end end sumDecayTime(id) return decayTime end function loadCorpses() for _, name in ipairs(REWARD_CHEST.BOSSES) do if MonsterType(name) ~= nil then REWARD_CHEST.DECAY[name] = getDecayTime(MonsterType(name):getCorpseId()) end end end addEvent(loadCorpses, 0) function getPlayerByGUID(guid) for _, player in ipairs(Game.getPlayers()) do if guid == player:getGuid() then return player end end return nil end function Player.addReward(self, reward, time, id) local LootBag = Container(doCreateItemEx(REWARD_CHEST.CONTAINER, 1)) LootBag:setAttribute('text', time) addContainerItems(LootBag, reward) if id then db.query('DELETE FROM player_rewardchest WHERE id = ' .. id .. ';') end return self:getDepotChest(REWARD_CHEST.DEPOT_ID, true):addItemEx(LootBag) end function doSaveReward(uid, name) for GUID, items in pairs(REWARD_CHEST.LOOT[uid]) do local player = getPlayerByGUID(GUID) if player ~= nil then player:addReward(items, os.time()) player:sendTextMessage(MESSAGE_INFO_DESCR, 'Your reward container from ' .. name .. ' was moved to your reward chest.') else db.query('INSERT INTO player_rewardchest VALUES (NULL, ' .. GUID ..', "' .. table.serialize(items) ..'", ' .. os.time() ..');') end end REWARD_CHEST.LOOT[uid] = nil end function Player.updateRewardChest(self) db.query('DELETE FROM player_rewardchest WHERE TIME_TO_SEC(TIMEDIFF(NOW(), FROM_UNIXTIME(date))) >= '.. REWARD_CHEST.EXPIRE ..';') local Query = db.storeQuery('SELECT id, reward, date FROM player_rewardchest WHERE player_id = '.. self:getGuid() ..';') if Query ~= false then repeat local rewardBag = table.unserialize(result.getDataString(Query, 'reward')) self:addReward(rewardBag, result.getDataInt(Query, 'date'), result.getDataInt(Query, 'id')) until not result.next(Query) result.free(Query) end local depotChest = self:getDepotChest(REWARD_CHEST.DEPOT_ID, true) for index = (depotChest:getSize() - 1), 0, -1 do local container = depotChest:getItem(index) if (container:getAttribute('text') ~= nil) and (tonumber(container:getAttribute('text')) + REWARD_CHEST.EXPIRE < os.time()) then container:remove() end end return self:setExhaustion(REWARD_CHEST.STORAGE, REWARD_CHEST.EXHAUST) end function string.diff(self) local format = { {'day', self / 60 / 60 / 24}, {'hour', self / 60 / 60 % 24}, {'minute', self / 60 % 60}, {'second', self % 60} } local out = {} for k, t in ipairs(format) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find('second') then local a, b = ret:find(' and ') ret = ret:sub(b+1) end return ret end function doBossReward(monster, corpse) REWARD_CHEST.LOOT[corpse:getUniqueId()] = {} corpse:setAttribute('aid', 21584) corpse:setAttribute('text', corpse:getUniqueId()) for killer, damage in pairs(monster:getDamageMap()) do local player, str = Player(killer), 'Loot of ' .. MonsterType(monster:getName()):getNameDescription() .. ': ' if player ~= nil then local rewardBag = doCreateItemEx(REWARD_CHEST.CONTAINER) if player:getStamina() > 840 then local loot = MonsterType(monster:getName()):getBossReward(damage.total/monster:getMaxHealth()) if #loot > 0 then addContainerItems(Container(rewardBag), loot) REWARD_CHEST.LOOT[corpse:getUniqueId()][player:getGuid()] = loot str = str .. Container(rewardBag):getContentDescription() else str = str .. 'nothing' end else str = str .. 'nothing (due to low stamina)' end player:sendTextMessage(MESSAGE_INFO_DESCR, str .. '.') end end addEvent(doSaveReward, REWARD_CHEST.DECAY[monster:getName()]*1000, corpse:getUniqueId(), MonsterType(monster:getName()):getNameDescription()) end function onKill(creature, target) if (Monster(target) ~= nil) and isInArray(REWARD_CHEST.BOSSES, target:getName()) then local corpse = Item(doCreateItem(MonsterType(target:getName()):getCorpseId(), 1, target:getPosition())) corpse:decay() target:setDropLoot(false) doBossReward(target, corpse) end end Adicione @ data/items/items.xml <item id="21518" article="a" name="reward container"> <attribute key="weight" value="1800" /> <attribute key="containersize" value="24" /> <attribute key="slotType" value="backpack" /> </item> <item id="21584" article="a" name="reward chest"> <attribute key="type" value="depot" /> <attribute key="containerSize" value="1" /> <attribute key="description" value="This chest contains your rewards earned in battles." /> </item> Adicione @ data/lib/core/player.lua function Player.setExhaustion(self, value, time) return self:setStorageValue(value, time + os.time()) end function Player.getExhaustion(self, value) local storage = self:getStorageValue(value) if storage <= 0 then return 0 end return storage - os.time() end Créditos @Cbrm @Dalkon @gugahoa @Colandus @Cykotitan @Printer
  13. Oi. Vim trazer esse sistema postado por nosso amigo zbizu da comunidade otland. Se não sabe como funciona, veja o exemplo abaixo. Espero que seja útil! 07:39 You see a mastermind shield (Def:37). It weighs 57.00 oz. [shield.+5%] [mp.+10%] [melee.+2%] 07:40 You see a crossbow (Range:5). It weighs 40.00 oz. [shield.+2%] [mp.+14%] [hp.+4%] SLOT SYSTEM global.lua function getItemAttack(uid) return ItemType(getThing(uid).itemid):getAttack() end function getItemDefense(uid) return ItemType(getThing(uid).itemid):getDefense() end function getItemArmor(uid) return ItemType(getThing(uid).itemid):getArmor() end function getItemWeaponType(uid) return ItemType(getThing(uid).itemid):getWeaponType() end function isArmor(uid) if (getItemArmor(uid) ~= 0 and getItemWeaponType(uid) == 0) then return true else return false end end function isWeapon(uid) return (getItemWeaponType(uid) > 0 and getItemWeaponType(uid) ~= 4) end function isShield(uid) return getItemWeaponType(uid) == 4 end function isBow(uid) return (getItemWeaponType(uid) == 5 and (not ItemType(getThing(uid).itemid):isStackable())) end actions.xml <action itemid="8300" script="slot.lua"/> slot.lua action local conf = {maxSlotCount=3,ignoredIds={}}function choose(...) local arg = {...} return arg[math.random(1,#arg)]endfunction onUse(cid, item, fromPosition, itemEx, toPosition) if item.uid == 0 or item.itemid == 0 then return false end toPosition.stackpos = 255 if isInArray(conf.ignoredIds, itemEx.itemid) or isItemStackable(itemEx.uid) or itemEx.itemid == 0 or itemEx.type > 1 or not(isArmor(itemEx.uid) or isWeapon(itemEx.uid) or isShield(itemEx.uid)) then return false end if isCreature(itemEx.uid) then return false end local nam = Item(itemEx.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION) function getper() local n = 1 for i=1,10 do n = n+math.random(0,10) if n < 8*i then break end end return n end function getSlotCount(nam) local c = 0 for _ in nam:gmatch('%[(.-)%]') do c = c+1 end return c end if getSlotCount(nam) < conf.maxSlotCount then local l = choose('hp','mp','ml','melee','shield','dist') local p = getper() doSendMagicEffect(toPosition,30) nam = nam..' ['..l..'.+'..p..'%]' doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,l..'.+'..p..'%') doSetItemSpecialDescription(itemEx.uid, nam) doRemoveItem(item.uid,1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Slot limit reached.") end return trueend creaturescripts.xml <event type="login" name="SlotLogin" script="slot.lua"/> slot.lua creaturescripts local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}for i=1,300 do conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50) setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF_SPELL, 1) setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1) setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100+i) conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51) setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF_SPELL, 1) setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1) setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 100+i) conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52) setConditionParam(conditionML[i], CONDITION_PARAM_BUFF_SPELL, 1) setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1) setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICPOINTSPERCENT, 100+i) conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53) setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF_SPELL, 1) setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1) setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_MELEEPERCENT, 100+i) conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54) setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF_SPELL, 1) setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1) setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i) conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55) setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF_SPELL, 1) setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1) setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)endfunction getSlotType(n) if not n then return false end if n:match('%[(.+)%]') then n = n:match('%[(.+)%]') if n == '?' then return 0,n else return n:match('(.-)%.([+-])(%d+)%%') end else return false endendlocal function loadSet(cid)local player = Player(cid)if not player then return false end local t = {} for slot=1,9 do t[slot] = '' local s = getPlayerSlotItem(player,slot).uid if s ~= 0 then t[slot] = Item(s):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION) end end return tendfunction chk(cid,f) if not Player(cid) then return false end local t = loadSet(cid) if not t then return false end for i=1,#f do if f[i] ~= t[i] then equip(player,nil,slot) break end end addEvent(chk,2000,cid,t)endfunction check_slot(aab, i) if i == 5 or i == 6 then if isWeapon(aab) or isShield(aab) or isBow(aab) then return true end else return true endreturn falseendfunction equip(player,item,slot) local t = {} if item then local mm,sinal,qto = getSlotType(Item(item.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION)) t[mm] = tonumber(qto) end for i=1,9 do if i ~= slot then if getPlayerSlotItem(player,i).itemid ~= 0 then local aab = getPlayerSlotItem(player,i).uid if aab and check_slot(aab,i) then for _ in Item(aab):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION):gmatch('(%[.-%])') do local mm,sinal,qto2 = getSlotType(_) if mm then if not t[mm] then t[mm] = 0 end t[mm] = t[mm]+tonumber(qto2) t[mm] = t[mm] > 300 and 300 or t[mm] end end end end end end local fu = 0 local ca = {} local s = '' for sl,n in pairs(t) do fu = fu+1 s = s..''..n..'% more of '..sl..'\n' if sl == 'hp' then player:addCondition(conditionHP[tonumber(n)]) ca[50] = 1 doSendTutorial(player,19) elseif sl == 'mp' then player:addCondition(conditionMP[tonumber(n)]) ca[51] = 1 doSendTutorial(player,19) elseif sl == 'ml' then player:addCondition(conditionML[tonumber(n)]) ca[52] = 1 elseif sl == 'melee' then player:addCondition(conditionCLUB[tonumber(n)]) ca[53] = 1 elseif sl == 'shield' then player:addCondition(conditionSHI[tonumber(n)]) ca[54] = 1 elseif sl == 'dist' then player:addCondition(conditionDIST[tonumber(n)]) ca[55] = 1 end end if fu > 0 then for i=50,55 do if not ca[i] then doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i) end end else for i=50,55 do doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i) end end return trueendfunction onLogin(player) equip(player,nil,slot)local cid = player:getId() addEvent(chk,2000,cid,loadSet(cid)) return trueend SLOT REMOVER actions.xml <action itemid="8299" script="slotremove.lua"/> slotremove.lua function getSlotType_full(n) if not n then return false end if n:match('%[(.+)%]') then n = n:match('%[(.+)%]') if n == '?' then return 0,n else return n end else return false endendfunction onUse(cid, item, fromPosition, itemEx, toPosition)item_slots_a = 0item_slots_n = ""item_slots_t = {} for _ in Item(itemEx.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION):gmatch('(%[.-%])') do item_slots_a = item_slots_a + 1 item_slots_t[item_slots_a] = getSlotType_full(_) end if item_slots_t[1] == nil then return false end for i = 1, #item_slots_t - 1 do item_slots_n = item_slots_n .. "[" .. item_slots_t[i] .. "]" end doRemoveItem(item.uid,1) doSendMagicEffect(toPosition,CONST_ME_MAGIC_RED) doSetItemSpecialDescription(itemEx.uid, item_slots_n) doPlayerSendTextMessage(cid,20,"Attribute removed.")return trueend
  14. Fala galera, vim compartilhar com vcs um dos sistemas que eu fiz baseado no jogo Bird Hunt e que foi imbutido em alguns servidores famosos, sendo o Korelin um deles. Obs: Testado em TFS 0.3.6 mas deve funcionar em TFS 0.4 sem problema aqui tem uma pequena imagem demonstrando o sistema sendo utilizado: Bom, antes de tudo eu vou ensinar vocês a criar um mapa apropriado pois isso é 90% das dificuldades que os players enfrentam quando tentam adicionar o sistema. Inicialmente vc vai precisar criar uma area no seu mapa editor +- parecida com a que eu fiz na imagem abaixo: Feito isso vc deverá colocar uniqueid 16480 na porta e actionid 14874 em todos os lugares que o player pode percorrer (da placa pra \/ todos os quadrados verdes deverão conter esse actionid) Colocado os ids, vc deverá fazer a sala à prova de bugs, para isso você terá que seguir essas especificações: Note que em verde são os lugares que vc deverá colocar protect zone e em roxo os locais onde vc deve colocar no logout zone. Agora perceba que nas posições onde o player irá andar, você vai colocar tanto no logout zone como protect zone, isso pra evitar ele de matar o bixo com spells e pra evitar que ele deslogue durante o mini game. Essa contagem de sqms eu vou explicar mais tarde na configuração do script, mas tenham ela em mente. Agora vamos aos scripts: Comece criando em data/lib um arquivo chamado 045- Bird Hunt Lib.lua e colocando isso dentro dele: Feito isso vá em data/actions/scripts e adicione um arquivo chamado seagul.lua que deverá conter: e adicione em actions.xml: <action uniqueid="16480" event="script" value="seagul.lua"/> Agora vá em data/movements/scripts e crie um arquivo chamado seagulmove.lua com o seguinte conteúdo: E adicione as tags em movements.xml: <movevent type="StepIn" actionid="14872" event="script" value="seagulmove.lua"/> <movevent type="StepOut" actionid="14872" event="script" value="seagulmove.lua"/> Agora, pra deixar nosso sistema mais real e difícil, altere a velocidade do seagul de 200 pra 300 na pasta data/monsters/Birds/seagull.xml eu alterei tb a quantidade de vida q ele começa a fugir pra vida atual dele e fiz outras alterações pra tornar mais difícil, mas isso é com vcs. A maioria das coisas tá bem compreensível, com exceção das duas primeiras linhas de actions: rangecima = {x = -8, y = -4}, -- distancia em x e y da topos (ate a pos de cima) rangebaixo = {x = 0, y = 4}, -- distancia em x e y da topos (ate a pos de baixo) é aqui que entra aquela imagem, vc vai considerar a porta (o ponto cinza) como sendo nossa origem, ou seja, o ponto (0,0) rangecima é a distancia que eu tenho que percorrer em x e y pra chegar até a ponta de cima < e rangebaixo é a distancia que eu tenho que percorrer em x e y pra chegar até a ponta de baixo. Se vcs mudarem o tamanho da sala, fiquem ligados nisso. Obs: algumas pessoas fazem a sala virada pra direita também, nesse caso vc mantém a actions (pode usar inclusive o mesmo arquivo), só tem que alterar o movements pois lá vc define se é direita ou esquerda. É isso, espero que tenham gostado. O jogo é só por diversão mas vc pode alterar a função de atirar pra ganhar dinheiro por cada acerto ou então criar um npc que vc te dá X premio dependendo do seu recorde.. podendo esse premio inclusive ser uma key pra uma quest. Usem a imaginação e espero que aproveitem esse sistema. Abraços do Lobo.
  15. Olá, vim trazer à comunidade esse código. Ele permite adicionar tempo para resetar a dh quest. Ele foi postado originalmente pelo membro Lundrial, da otland. Bem, não há mais o que dizer. DH LEVER TIME lever.lua local timetoreset = 5 -- Time to reset the quest in minutes.local objectid = xxxx -- Id of the item Blocking the pathlocal p = { Position(x, y, z), -- Position of the item blocking the path Position(x, y, z), -- Teleport Creation position Position(x, y, z) -- Position where it sends you}function onUse(cid, item, fromPosition, itemEx, toPosition, isHotkey) local stone = Tile(p[1]) local tp = Tile(p[2]) if item.itemid == 1945 then cid:sendTextMessage(MESSAGE_EVENT_ORANGE, 'The object in your path has been removed for ' .. timetoreset .. ' minutes.') doCreateTeleport(1387, p[3], p[2]) stone:getItemById(objectid):remove() p[1]:sendMagicEffect(CONST_ME_POFF) p[2]:sendMagicEffect(CONST_ME_TELEPORT) Item(item.uid):transform(1946) addEvent(function(stonePos) Game.createItem(objectid, 1, stonePos) stonePos:sendMagicEffect(CONST_ME_TELEPORT) p[2]:sendMagicEffect(CONST_ME_POFF) tp:getItemById(1387):remove() Tile(toPosition):getItemById(1946):transform(1945) end, timetoreset * 60000, stone:getPosition()) elseif item.itemid == 1946 then return false end return trueend
  16. Créditos totais à Kazuza. Versão: Testada somente na "10.31". (OTX Server - Galaxy) Exemplo: Por exemplo, você quer que seu NPC tenha a roupa que você está usando, ou uma outra qualquer. Porem você não quer perder tempo, então você digita: /outfit e irá aparecer no seu CHAT: <look type="128" head="117" body="5" legs="0" feet="116" addons="1" mount="0"/> Pronto, só copiar e colar no seu npc. Tutorial Data > TalkActions> Scripts, crie "Outfit.lua". OBS: Se tiver montaria use este: function onSay(cid, words, param) r = getCreatureOutfit(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '<look type="'..r.lookType..'" head="'..r.lookHead..'" body="'..r.lookBody..'" legs="'..r.lookLegs..'" feet="'..r.lookFeet..'" addons="'..r.lookAddons..'" mount="'..r.lookMount..'"/>') return true end Se não, use este: function onSay(cid, words, param) r = getCreatureOutfit(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '<look type="'..r.lookType..'" head="'..r.lookHead..'" body="'..r.lookBody..'" legs="'..r.lookLegs..'" feet="'..r.lookFeet..'" addons="'..r.lookAddons..'"/>') return true end "Data > TalkActions" em talkactions.xml adicione: <talkaction log="yes" group="4" access="3" words="/outfit" event="script" value="outfit.lua"/>
  17. Demonstração O script consiste em fazer um minigame da Snake (lá do nokia, heheh). Quanto mais a "cobra" pegar os bolos/comida irá acrescentar mais e mais caixas/blocos ao seu "corpo". Instalação: snakesys.lua (data/lib) [EDITE DE ACORDO COM SEU SERVIDOR] Edite essas linhas em sua lib para combinar com o mapa: itemid=1860, freeglobalstorage=28103, -- se nao souber mexer, nao mexa itemFood=6394, controlpos= {x = 28, y = 198, z = 6}, -- posiçao onde o player vai ficar exitpos = {x = 36, y = 190, z = 7}, -- posiçao que o player vai sair centerpos= {x = 27, y = 197, z = 7}, -- posiçao central wallID = 1486, -- id da parede ao redor da arena interval = 300, -- velocidade no qual a cobra ira se mover Quatro pisos ao redor da posição de controle: local generated = { {x = 28, y = 197, z = 6}, {x = 29, y = 198, z = 6}, {x = 28, y = 199, z = 6}, {x = 27, y = 198, z = 6} } Primeiro piso: Segundo piso: actions.xml (data/actions) <action actionid="200" script="snake.lua"/> snake.lua (data/actions/scripts) function onUse(player, item, fromPosition, itemEx, toPosition) if (Game.getStorageValue(SNAKE.freeglobalstorage)) ~= 1 then player:teleportTo(SNAKE.controlpos) SNAKE.timer(player.uid,1,nil,1000) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Segure o CTRL e use as setas para controlar a cobra.') SNAKE.generateFood() else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Aguarde, por favor.') end end PS: Peguei de um fórum que estava em inglês e traduzi. PS²: É um script antigo porém funcional. Créditos: Mock the bear
  18. Oi, gente queria um script, que se um player pisar em uma tile, outro qualquer player so possa pisar la depois de 30 minutos... Ex.:Eu pisei em uma tile pra entrar em uma quest, ai outro player QUALQUER, foi tentar fazer o mesmo, só que não conseguiu, porque eu ja havia pisado antes, e ainda não se passou 30 mins. Objetivo: eu coloquei uma action id em uma tile do servidor que quando eu pisar nela vou ser teletransportado para uma tal area, agora quero uma unique id, como a pedida, que ao pisar, outro player so possa pisar lá, depois de 30 minutos, se ele pisar ele sera interrompido no caminho, com a mensagem:"O portal ainda não está pronto para uso, espere alguns minutos" espero que tenham entendido , quem me ajudar dou Reputação+
  19. Auguem pode me ajudar nesse bug ele acontece quando auguem captura um pokémon
  20. Seguinte Galera, No meu server tem um outfit exclusivo, você só pode usa-lo se matar o boss Gonka... Acontece que Queria Achar a Pasta a onde Edito ele... E aparece uma mensagem assim no chat 13:54 Você não é digno de usar esse outfit. Somente aqueles que derrotaram o Gonka podem usá-lo. Queria Pedir a Ajuda de Voces onde Posso Encontrar este Arquivo nas Pastas do Meu Server... exemplo;actions,creaturescripts...
  21. Cara, estou 2 dias tentando resolver esse problema está impossível... :'( " O POKÉMON NÃO TÁ EVOLUINDO " Abaixo tá o script level system Ajudem pls
  22. Ola amigos, sera que alguem poderia modificar meu duel system do PDA para poder mandar ou aceitar duel apenas em uma area do mapa, no caso criarei uma area destinada para duelos. Duel do order em actions. Duel System da lib. Basicamente acho eu seria colocar uma tabela de x, y, z das cordenadas da area que poderia se mandar ou aceitar o duel. kkk só acho, sou noob em scripts. Desde ja agradeço e rep+
  23. Então galera a um tempo resetei meu servidor que é MYSQL, desde então meu exiva tem mostrado que o player exivado está offline, não funciona de jeito nenhum, tem como alguem me ajudar ? se não souber a solução desse problema peço uma talkaction ou spell que tenha a mesma função pois já estou perdendo players por causa disso desde já agradeço muito qualquer ajuda !
  24. Olá, estou tentando fazer que o valor de um storage apareça na minha janela de skills do otclient, mas não estou conseguindo,ja tentei atravez de talkaction e extendedopcode mas não sei fazer o otclient receber e adaptar não achei nada muito detalhado ensinando, eu quero fazer o numero do storage 16900 aparecer do lado do Kanto Caughts: EDIT: Ja consegui resolver, podem fechar o topico.
  25. Eu queria um script que, quando um player usasse este item = 5905, ele dará ao player um desses items dentro de uma bp = 6548, 6547, 6549.. eu queria que a escolha escorresse a mesma chance para os 3 items. alguns detalhes importantes> após o player usar o item 5905, ele some e só assim é adicionado outro item... o maximo de item qe o player pode ganhar dentro da bp é 1 ... eu gostaria q saísse um efeito e um falante na posição do player após o uso, e uma msg no default pra ele em laranja..
×
×
  • Create New...