Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/11/15 em todas áreas
-
Serpent Island (Dragon + Serpent spawn + Medusa)
Subhe reagiu a Administrador por um tópico no fórum
SERPENT ISLAND (Dragons + Serpent spawn + Medusa) Versão: 8.60 Recomendado: 50-200 DOWNLOAD SENHA PARA EXTRAIR: www.xtibia.com IMAGENS:1 ponto -
Conteúdo: Imagens Mapa não incluso Downloads: Removendo Bugs de itens (como order, fishing, etc) Sistemas feitos para o PDE: Tutoriais feitos para o PDE: Bugs reportados:1 ponto
-
Compilando TFS 1.3 com vídeo-aula
JapaSuetsugu reagiu a Bruno por um tópico no fórum
Compilando TFS 1.3 no Windows 1. Baixe os softwares requeridos Para compilar o The Forgotten Server no Windows, você vai precisar: Visual Studio 2015 (Compilador) TFS SDK v3.2 (libs) Libs do Boost C++ (32-bits, 64-bits) 2. Instale os softwares requeridos Após ter baixado os softwares listados na etapa acima, comece instalando o Visual Studio e Boost C++. Extraia o TFS SDK v3.2 em qualquer pasta do seu computador e execute o arquivo "register_tfssdk_env.bat" para setar a variável de ambiente do local onde está o TFS SDK, assim nosso compilador irá encontrar as libs quando começar a compilar. Mova o arquivo "register_boost_env.bat" da pasta do TFS SDK para a pasta onde você instalou as libs do Boost C++ e execute-o (se você seguiu os passos do instalador, está esta na pasta chamada boost_1_62_0). 3. Baixe as sources Se você possuir o Git Client instalado, você poderá clonar a última cópia com este comando: > git clone https://github.com/otland/forgottenserver.git Se você não possuir o Git Client instalado, você poderá baixar a última cópia do The Forgotten Server através do link: https://github.com/otland/forgottenserver/archive/master.zip 4. Compilando Procure o diretório vc14 na pasta do The Forgotten Server que você baixou, e abra o arquivo "theforgottenserver.sln". Isso deverá iniciar o Visual Studio 2015 e você estará pronto para continuar. Para configurar a compilação, navegue para Build -> Configuration Manager no menu superior. Um popup deverá aparecer onde você poderá escolher entre "Release" ou "Debug" para compilar, escolha também para qual Platadorma você irá compilar: 32-bits (Win32) ou 64-bits (x64). Para iniciar a compilação, abra o menu Build novamente e clique em Build Solution (Ctrl + Shift + B). 5. Vídeo-aula 6. Créditos Mark - Autor do tutorial e do projeto The Forgotten Server Bruno Minervino - Tradução e gravação do vídeo1 ponto -
Avatar Zero
Alison Queiroz reagiu a 115757 por um tópico no fórum
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 -
(SoT) Script of Tales #01
Night Wolf reagiu a Caronte por um tópico no fórum
Bem vindos! Bem vindos... Á primeiríssima edição do SoT! Se você é scripter, gosta de um desafio e curte interagir com a comunidade, então participe deste evento. O evento SoT tem como objetivos promover a interação entre scripters da comunidade, dar a oportunidade de membros conquistarem prêmios e trocar conhecimento sobre a área. Aproveitando o espírito natalino com essa edição mega criativa, espero ver bastante participantes. Calendário 11/12/2015 - Lançamento e Início 05/01/2016 - Prazo para enviar o script 05-07/01/2016 - Avaliações dos jurados 07-08/01/2016 - Resultado Premiação 1º Lugar • Indicação à xTibia Gold Achievement 2015 (Conquista Exclusiva) • O Melhor Scripter (Conquista exclusiva) • Gold (Conquista) • 25 Rep 2º Lugar • Indicação à xTibia Silver Achievement 2015 (Conquista Exclusiva) • Silver (Conquista) • 15 Rep 3º Lugar • Bronze (Conquista) • 10 Rep Regras • Aplicam-se as regras gerais do fórum neste evento • Em caso de plágio, o participante será eliminado e poderá ser punido • Calendário, premiação e regras estão sujeitos a mudanças • Todos os trabalhos serão liberados à comunidade depois do evento1 ponto -
Reward Chest & Boss Reward
SkyLigh reagiu a MatheusGlad por um tópico no fórum
Creditos: Baseado no code do cbrm: https://otland.net/threads/reward-chest-boss-reward-tfs-1-2.233397/ Instruções:: src/const.h: Embaixo de... ITEM_MARKET = 14405, ...Adicione: ITEM_REWARD_BAG = 21518, ITEM_REWARD_CHEST = 21584, REWARD_CHEST_DEPOTID = 99, src/depotchest.h: Embaixo de... explicit DepotChest(uint16_t _type); ...Adicione: uint32_t getDepotId() const { return depotId; } void setDepotId(uint32_t id) { depotId = id; } Embaixo de... uint32_t maxDepotItems; ...Adicione: uint32_t depotId; src/depotchest.cpp: Embaixo de... maxDepotItems = 1500; ...Adicione: depotId = 0; Em cima de... return Container::queryAdd(index, thing, count, flags, actor); ...Adicione: if (actor != nullptr && getDepotId() == REWARD_CHEST_DEPOTID) { return RETURNVALUE_NOTPOSSIBLE; } src/depotlocker.h: Em cima de... //cylinder implementations ...Adicione: void setMaxLockerItems(uint32_t maxitems) { maxSize = maxitems; } src/player.h: Embaixo de... DepotLocker* getDepotLocker(uint32_t depotId); ...Adicione: DepotChest* getRewardBag(uint32_t depotId, bool autoCreate); DepotLocker* getRewardChest(uint16_t itemId); src/player.cpp: Em cima de... void Player::sendCancelMessage(ReturnValue message) const ...Adicione: DepotChest* Player::getRewardBag(uint32_t depotId, bool autoCreate) { auto it = depotChests.find(depotId); if (it != depotChests.end()) { return it->second; } if (!autoCreate) { return nullptr; } DepotChest* bagReward = new DepotChest(ITEM_REWARD_BAG); bagReward->setDepotId(depotId); bagReward->incrementReferenceCounter(); bagReward->setMaxDepotItems(getMaxDepotItems()); depotChests[depotId] = bagReward; return bagReward; } DepotLocker* Player::getRewardChest(uint16_t itemId) { auto it = depotLockerMap.find(REWARD_CHEST_DEPOTID); if (it != depotLockerMap.end()) { it->second->setID(itemId); return it->second; } DepotLocker* rewardChest = new DepotLocker(ITEM_REWARD_CHEST); rewardChest->setID(itemId); rewardChest->setDepotId(REWARD_CHEST_DEPOTID); rewardChest->setMaxLockerItems(1); rewardChest->internalAddThing(getRewardBag(REWARD_CHEST_DEPOTID, true)); depotLockerMap[REWARD_CHEST_DEPOTID] = rewardChest; return rewardChest; } Em player.cpp, container.cpp, inbox.cpp: Mude: if (!item->isPickupable()) { Por: if (item->getID() != 21518 && !item->isPickupable()) { 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; } Por: //reward chest and depot container if (item->getActionId() == ITEM_REWARD_CHEST || item->getID() == ITEM_REWARD_CHEST) { DepotLocker* myRewardChest = player->getRewardChest(item->getID()); myRewardChest->setParent(item->getTile()); openContainer = myRewardChest; player->setLastDepotId(REWARD_CHEST_DEPOTID); } 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/game.cpp: Em cima de... if (!item->isPushable() || item->hasAttribute(ITEM_ATTRIBUTE_UNIQUEID)) { ...Adicione: if (item->getID() == ITEM_REWARD_BAG || item->getActionId() == ITEM_REWARD_CHEST) { player->sendCancelMessage(RETURNVALUE_NOTMOVEABLE); return; } src/monsters.h: Embaixo de... int32_t subType; int32_t actionId; std::string text; ...Adicione: bool uniquedrop; Embaixo de... actionId = -1; ...Adicione: uniquedrop = false; Embaixo de... bool hiddenHealth; ...Adicione: bool rewardChest; src/monsters.cpp: Embaixo de... healthMax = 100; ...Adicione: rewardChest = false; Embaixo de... } else if (strcasecmp(attrName, "hidehealth") == 0) { mType->hiddenHealth = attr.as_bool(); ...Adicione: } else if (strcasecmp(attrName, "rewardchest") == 0) { mType->rewardChest = attr.as_bool(); Em cima de... if ((attr = node.attribute("actionId"))) { ...Adicione: if ((attr = node.attribute("uniquedrop"))) { lootBlock.uniquedrop = attr.as_bool(); } src/iologindata.cpp: Embaixo de... //load depot items ...Adicione: player->getRewardChest(ITEM_REWARD_CHEST); Mude: if (pid >= 0 && pid < 100) { DepotChest* depotChest = player->getDepotChest(pid, true); if (depotChest) { depotChest->internalAddThing(item); } Por: if (pid >= 0 && pid < 100) { if (pid == REWARD_CHEST_DEPOTID) { DepotChest* depotChest = player->getRewardBag(pid, true); if (depotChest) { depotChest->internalAddThing(item); } } else { DepotChest* depotChest = player->getDepotChest(pid, true); if (depotChest) { depotChest->internalAddThing(item); } } src/luascript.h: Em cima de... // Combat ...Adicione: // Reward static int luaItemGetNameDescription(lua_State* L); static int luaMonsterTypeUseRewardChest(lua_State* L); src/luascript.cpp: Em cima de... // Party registerClass("Party", "", nullptr); ...Adicione: // Reward registerMethod("MonsterType", "useRewardChest", LuaScriptInterface::luaMonsterTypeUseRewardChest); registerMethod("Item", "getNameDescription", LuaScriptInterface::luaItemGetNameDescription); Em cima de... // Combat int LuaScriptInterface::luaCombatCreate(lua_State* L) ...Adicione: int LuaScriptInterface::luaItemGetNameDescription(lua_State* L) { // item:getNameDescription() const Item* item = getUserdata<const Item>(L, 1); int32_t subType; bool addArticle = true; if (item) { subType = item->getSubType(); const ItemType& it = Item::items[item->getID()]; std::ostringstream s; const std::string& name = (item ? item->getName() : it.name); if (!name.empty()) { if (it.stackable && subType > 1) { if (it.showCount) { s << subType << ' '; } s << (item ? item->getPluralName() : it.getPluralName()); } else { if (addArticle) { const std::string& article = (item ? item->getArticle() : it.article); if (!article.empty()) { s << article << ' '; } } s << name; } } else { s << "an item of type " << it.id; } pushString(L, s.str()); } else { lua_pushnil(L); } return 1; } int LuaScriptInterface::luaMonsterTypeUseRewardChest(lua_State* L) { // monsterType:useRewardChest() MonsterType* monsterType = getUserdata<MonsterType>(L, 1); if (monsterType) { pushBoolean(L, monsterType->rewardChest); } else { lua_pushnil(L); } return 1; } Mude: int LuaScriptInterface::luaMonsterTypeGetLoot(lua_State* L) { // monsterType:getLoot() MonsterType* monsterType = getUserdata<MonsterType>(L, 1); if (!monsterType) { lua_pushnil(L); return 1; } static const std::function<void(const std::vector<LootBlock>&)> parseLoot = [&](const std::vector<LootBlock>& lootList) { lua_createtable(L, lootList.size(), 0); int index = 0; for (const auto& lootBlock : lootList) { lua_createtable(L, 0, 7); setField(L, "itemId", lootBlock.id); setField(L, "chance", lootBlock.chance); setField(L, "subType", lootBlock.subType); setField(L, "maxCount", lootBlock.countmax); setField(L, "actionId", lootBlock.actionId); setField(L, "text", lootBlock.text); parseLoot(lootBlock.childLoot); lua_setfield(L, -2, "childLoot"); lua_rawseti(L, -2, ++index); } }; parseLoot(monsterType->lootItems); return 1; } Por: int LuaScriptInterface::luaMonsterTypeGetLoot(lua_State* L) { // monsterType:getLoot() MonsterType* monsterType = getUserdata<MonsterType>(L, 1); if (!monsterType) { lua_pushnil(L); return 1; } static const std::function<void(const std::vector<LootBlock>&)> parseLoot = [&](const std::vector<LootBlock>& lootList) { lua_createtable(L, lootList.size(), 0); int index = 0; for (const auto& lootBlock : lootList) { lua_createtable(L, 0, 8); setField(L, "itemId", lootBlock.id); setField(L, "chance", lootBlock.chance); setField(L, "subType", lootBlock.subType); setField(L, "maxCount", lootBlock.countmax); setField(L, "actionId", lootBlock.actionId); setField(L, "text", lootBlock.text); pushBoolean(L, lootBlock.uniquedrop); lua_setfield(L, -2, "uniquedrop"); parseLoot(lootBlock.childLoot); lua_setfield(L, -2, "childLoot"); lua_rawseti(L, -2, ++index); } }; parseLoot(monsterType->lootItems); return 1; } Pronto, a parte de C++ acabou agora o resto: Adicione @ data/items/items/xml <item id="21518" article="a" name="reward container"> <attribute key="weight" value="1800" /> <attribute key="containersize" value="100" /> <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/creaturescripts/creaturescripts.xml <event type="kill" name="RewardLoot" script="rewardloot.lua"/> Registre @ data/creaturescripts/scripts/login.lua player:registerEvent("RewardLoot") Crie data/creaturescripts/scripts/rewardloot.lua: function sort_descending(t) local tmp = {} for k, v in pairs(t) do table.insert(tmp, {k, v}) end table.sort(tmp, function(a, b) return a[2] > b[2] end) return tmp end function table.find(t, v) for i,x in pairs(t) do if x == v then return true end end end function Player:addItemRewardBag(itemid, count) local rewardbag = self:getDepotChest(99) return rewardbag:addItem(itemid, count) end function MonsterType:getBossReward(chance, unique) local ret = {} local function randomItem(lootBlock, chance) local randvalue = math.random(0, 100000) / (getConfigInfo("rateLoot") * chance) if randvalue < lootBlock.chance then if (ItemType(lootBlock.itemId):isStackable()) then return (randvalue%lootBlock.maxCount) + 1 else return 1 end end end local lootBlockList = self:getLoot() for _, loot in pairs(lootBlockList) do local rd = randomItem(loot, chance) if rd then if loot.uniquedrop then if unique then table.insert(ret, {loot, rd}) end else table.insert(ret, {loot, rd}) end end end return ret end BossLoot = {} BossUids = {} function BossLoot:new(boss) if not table.find(BossUids, boss:getId()) then table.insert(BossUids, boss:getId()) return setmetatable({creature=boss}, {__index = BossLoot}) end end function BossLoot:updateDamage() if self.creature then local tmp = {} local totaldmg = 0 for killer, damage in pairs(self.creature:getDamageMap()) do totaldmg = totaldmg+damage.total tmp[killer] = damage.total end self.players = sort_descending(tmp) self.totaldmg = totaldmg else error("Creature not found.") end end function BossLoot:setRewards() if self.totaldmg and self.creature then if getConfigInfo("rateLoot") > 0 then local mt = MonsterType(self.creature:getName()) for i, playertab in ipairs(self.players) do local loot if i == 1 then loot = mt:getBossReward(playertab[2] / self.totaldmg, true) else loot = mt:getBossReward(playertab[2] / self.totaldmg, false) end table.insert(self.players[i], loot) end end else error("Error") end end function BossLoot:addRewards() if self.players and self.players[1] and self.players[1][3] then for i, playertab in ipairs(self.players) do local player = Player(playertab[1]) if player then local str = "The following items are available in your reward chest: " for i, lootTable in ipairs(playertab[3]) do local item = player:addItemRewardBag(lootTable[1].itemId, math.ceil(lootTable[2])) if item then str = str .. item:getNameDescription() .. ", " end end str = str:sub(1, #str-2) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, str) end end else error("Error") end end function onKill(creature, target) if (Monster(target) ~= nil) then local mt = MonsterType(target:getName()) if mt:useRewardChest() then local loot = BossLoot:new(target) if loot then local corpse = Item(doCreateItem(MonsterType(target:getName()):getCorpseId(), 1, target:getPosition())) corpse:decay() target:setDropLoot(false) loot:updateDamage() loot:setRewards() loot:addRewards() corpse:setAttribute('aid', 21584) end end end end COMO USAR !! Simplesmente adicione essa flag no monstro: <flag rewardchest="1" /> Você tambem pode fazer um drop ser unique, assim somente a pessoa que fez a maior parte do dano vai pegar esse item. <item id="5903" chance="100000" uniquedrop="1" /><!-- ferumbras' hat -->1 ponto -
1 ponto
-
Avatar Lost é um servidor de Tibia alternativo baseado no anime Avatar, o último dobrador de ar. Cada vocação pode controlar um dos 4 elementos "Água, Terra, Ar ou Fogo", visto que cada elemento tem pontos fortes e fracos. O servidor busca um PvP envolvente e uma jogabilidade diferenciada. _________________________________________________________________________________________________________________________________________________ Client Próprio (o ant virus pode dar falso alerta!) Ou client tibia 8.60 + ipchanger: avalt.servegame.com CRIAR CONTAS COM ACC MANAGER 1/1 --- TEMPORARIO _________________________________________________________________________________________________________________________________________________ Exclusividades: • Mapa próprio baseado no anime adaptado para a jogabilidade. • Tasks únicas. • Sistema de water pouch (refil para usar magias de agua). • 15 tipos de magias únicas para cada vocação. • Auto regeneração escalonável (não precisa de food). • Sistema de bosses. • Danos das magias baseadas em level escalonável. • Refinamento de equipamentos. • Animações na utilização das magias. • Sistema de localização pelo mapa. _________________________________________________________________________________________________________________________________________________ Imagens foto ilustrativas: • Nações • Mapa mundo _________________________________________________________________________________________________________________________________________________ Curta nossa página e fique ligado1 ponto
-
Remere's Map Editor 10.90
Administrador reagiu a Bruno por um tópico no fórum
Atualizado para versão 10.901 ponto -
World of Piece é um MMORPG em 2D baseado no anime One Piece, onde está sendo feitos sistemas inovadores, novas sprites e um mapa baseado no anime, já estamos com uma equipe fechada e muito experiente. Ao criar sua conta, você poderá optar por até 7 (Sete) vocações diferentes (Personagens do Anime): - Luffy. - Zoro. - Sanji. - Ace. - Nami. - Usopp. - Chopper. No Jogo há o sistema de profissões, onde ao atingir um determinado level será desbloqueado 3 profissões diferentes (Médico, Cozinheiro e Construtor). Todos terão sua vantagem e sua função em seu bando pirata, fazendo com que um dependa do outro, pois para construir um barco você irá precisar do Construtor, por exemplo, assim como para conseguir as potions você precisará do Médico e para conseguir as comidas que irão te dar alguns benefícios, será necessário um Cozinheiro. O Sistema de PvP será travado em incríveis batalhas, onde todas as vocações terão suas funções nessa batalha épica! Além disso, todos sabemos que o mundo de One Piece é enorme e que para se aventurar nessas grandes aventuras é necessário uma boa navegação, não? Pois no World Of Piece você poderá navegar através desses mares e se aventurar nesse mundo incrível, cheio de mistérios! E não para por aí! O Jogo ainda conta com uma super Quest que segue todas as Sagas do Anime, ainda em desenvolvimento essa Saga se estende até Loguetown! Além disso, há várias outras quests que você encontrará explorando o mundo de World Of Piece! https://www.youtube.com/embed/ZVwt5L2uv0E O Lançamento Oficial irá ocorrer nesta sexta-feira (17/07/15) às 18:00 (GMT -3:00). O site (www.worldofpieceonline.com) já foi liberado para a criação de Contas e realizar Doações. Você poderá encontrar o Spotlight de todos os personagens com informações completas em nosso Fórum: http://forum.worldofpieceonline.com/forumdisplay.php/41-Spotlight Curtam nossa página no Facebook! https://www.facebook.com/worldofpiece1 ponto
-
Show Off (Gwix)
Shakkatsun reagiu a Gwix por um tópico no fórum
Realmente, a Zanknore antiga possuía apenas 1 estátua dwarf no templo, e pelo fato de ser sujo o pessoal acha que isso é característico. RPGísticamente falando (nisso eu me baseio em LOTR, porque o Tibia também tem muita ligação com o LOTR = Lord of the Rings) Os anões possuem construções lindas e grandiosas, porém rústicas, isso que eu quis incorporar na nova Zanknore, incrementando gemas e etc, as paredes escolhidas não foram escolhidas à toa, nelas tem escrituras rúnicas dos anões (Onde Tolkien se inspirou no alfabeto Futhark - Viking). Na verdade acho que o pessoal não gostou muito da entrada e achou o mapa todo seria daquela forma. Vou postar um mapa de uma forma diferente hoje1 ponto -
Se nenhum de cima dar certo, tente assim: function getPlayerReset(cid) local qr = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..getPlayerGUID(cid)..";") rss = qr:getDataInt("reset", getPlayerGUID(cid)) if rss < 0 then rss = 0 end return rss end local config = { storage = 12312, -- storage (coloque uma livre do seu servidor) reset = 10, -- reset minimo tempo = 1, -- tempo em hora pos = {x = 123, y = 456, z = 7} -- pos que iá levar o jogador } function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerStorageValue(cid,config.storage) < 0 then setPlayerStorageValue(cid,config.storage,0) end if getPlayerReset(cid) < config.reset then doPlayerSendCancel(cid, 'Você precisa de '.. config.reset ..' reset'.. (config.reset <= 1 and '' or 's') ..' para usar este item.') return true end if getPlayerStorageValue(cid,config.storage) >= os.time() then mostrartempo = getPlayerStorageValue(cid,config.storage) doPlayerSendCancel(cid, 'Você só pode usar esse item às ' .. os.date("%X",mostrartempo ) .. ' horas.') return true end doTeleportThing(cid, config.pos) setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo * 60 * 60)) return true end1 ponto
-
function getPlayerReset(cid) local pid = getPlayerGUID(cid) local qr = db.getResult("SELECT `reset` FROM `players` WHERE `id`= ".. pid..";") rss = qr:getDataInt("reset", pid) if not rss or not tonumber(rss) then rss = 0 end return rss end local hours = 1 -- tempo em horas local position = {x = 123, y = 456, z = 7} function onUse(cid, item) if getPlayerReset(cid) >= 10 then if getPlayerStorageValue(cid, 4954)-os.time() <= 0 then doTeleportThing(cid, position) setPlayerStorageValue(cid, 4954, os.time() + hours * 60 * 60) else doPlayerSendCancel(cid, "You need to wait: ".. getPlayerStorageValue(cid, 4954) - os.time() .."s to use this again.") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "You need 10 resets to do this") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) end return true end1 ponto
-
1 ponto
-
Global 10/11.5 + OtherWorld + Hearth of Destruction Quest+ Eventos
Jackgoku reagiu a Administrador por um tópico no fórum
Servidor muito maneiro! Recomendo!1 ponto -
Obrigado, Bolz. Fico grato com os elogios, haha. Espero que realmente tenha admirado o trabalho. Abraços!1 ponto
-
Avatar Zero
guida reagiu a SamueLGuedes por um tópico no fórum
Cara, gostei muito, ta de parabens todos que se dedicaram a esse otserv. resp+ para tu.1 ponto -
Colocando ![Aol] Infinito
Poweryin reagiu a Meunomeefeiozik por um tópico no fórum
Iae Xtibia ! Vinho Trazer Um Tutorial Novo ! Aki nao sei se existe se existe ,Desculpe! Entao O Script E O Seguinte E O Seguinte ! Ele Poem O Aol ! Infinito No Seu Ot ! Entao Vamos Ao Script ! vá até data\creaturescripts\scripts e crie um arquivo.lua e renomeie para aolinfinity.lua dentro coloque: vá até data\creaturescripts\scripts e crie um arquivo.lua e renomeie para aolinfinity.lua dentro coloque: function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isPlayer(cid) == true then if (getPlayerSlotItem(cid, 2).itemid == 2173) then doCreatureSetDropLoot(cid, false) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) return TRUE end end return TRUE end vá até data\creaturescripts\scripts e crie um arquivo.lua e renomeie para aolinfinity.lua dentro coloque: em data\creaturescripts\scripts\login.lua adiciona a linha: creaturescripts.xml adicione: <event type="preparedeath" name="onPrepareDeathinifi" event="script" value="aolinfinity.lua"/> Agr A 2 Parte Do Script ! vc tem que modifica agr no items.xml tbm Entao E So !! Abra !! Coisa Importante Do Tutorial !! Creditos ! Vodkart1 ponto