Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 08/06/13 em todas áreas
-
SharpMapTracker 10.10
jaurez e um outro reagiu a arthurluna por um tópico no fórum
SharpMapTracker v0.8.3 update por Jo3Bingham Changelog Adicionado suporte para o cliente Tibia 10,10 Adicionado suporte para novos gravações Tibiacast (v4.14-15) Rastreamento removida dos servidores Open-Tibia correções de bugs baixar SharpMapTracker v0.8.3 bugs conhecidos Por vezes, as áreas de um mapa também são adicionados ao nível acima. Infelizmente, a correção não foi encontrado para isso ainda. notas Você tem que fornecer items.xml, items.otb e Tibia.dat si mesmo. Por causa de uma nova bandeira no arquivo Tibia.dat ea falta de suporte para ele no RME, você deve fazer um pouco de trabalho para obter mapas para abrir em RME2 pontos -
[RESOLVIDO] Mensagem ao morrer
Alexclusive e um outro reagiu a Roksas por uma questão
Farei um aqui para você mais legal, vá em data/creaturescripts/scripts, crie um arquivo chamado deathBroad.lua e adicione dentro: function onKill(cid, target, lastHit) if not isPlayer(target) or not isPlayer(cid) then return true end doBroadcastMessage(""..getCreatureName(target).."["..getPlayerLevel(target).."] acabou de morrer para o jogador "..getCreatureName(cid).."["..getPlayerLevel(cid).."].") return true end Em login.lua adicione: registerCreatureEvent(cid, "deathBroad") E no creaturescripts.xml adicione essa tag: <event type="kill" name="deathBroad" event="script" value="deathBroad.lua"/> Só reiniciar o server e testar2 pontos -
Pokemons por Insaend
MauricioPC reagiu a Insaend por um tópico no fórum
Pokemons em perspecitva 45 graus! Como minha ultima dedicada para o Fórum do Xtibia eu estarei dando meu Adeus ao mundo dos Spriting aqui no fórum e em outros que participo mais como esse foi o que mais me abraço com varias coisas que não só Spriting deixo uma pequena Doação que antes eu estira fazendo para vender mais na falta de comunicação entre partes e quebra de confiança estou doando para qualquer usuário que queira usar esses gráficos. Sim gráficos de pokemons que avia feito, infelizmente não são todos mas ja da uma boa perspectiva do que poderia ser ou ter nos Servidores ATS de pokemons. Link Aqui (R-UP)! Amostra do que os aguarda no link! http://www.youtube.com/watch?v=lZafD9fnzsc Foi muito bom eguando estive no fórum. Um dia quem sabe eu volte mais como Programador e não como spriter, pois programação sempre foi minha meta!1 ponto -
Shinobi Adventure [narutibia]
irandasilvaalve reagiu a Jesteer por um tópico no fórum
O que tem de novo? Vocações: 24 vocações (entre elas 4 obtidas atraves de quest) a naruto, a sasuke, a lee, a sakura, a gaara, a neji, a kiba, a Shikamaru, a hinata, a tenten, a itachi, a killer bee, a kakashi, a Madara [Quest], a Kankuro, a Minato [Quest], a Jiraya [Quest], a Obito, a Kisame, Raikage, Orochimaru, Temari, Yamato, Deidara Quest e sistemas: Todas as quests normais de NTO, e a de vocação que eu criei e uma outra( surpresa hihihi) sistemas novos de: Skull remover,bingo book,mega pill, (sistema que o personagem come uma pilula e fica com skill e ml maior por um determinado período de tempo), Max level mas é regulável e até da pra tirar. correção de todos os bugs existem apenas um que eu não consegui resolver: Avisos: A DB não aceita exclusão de algumas contas então basta você pegar uma DB de outro servidor limpa e coloca no lugar. Algumas SS's: Download Server: Link:http://www.mediafire.com/?7ade1ddhyybdgmu Download client(descompilado): Link:http://www.mediafire.com/download/men89ay90yysysj/SAinstall.exe Créditos: Jesteer -Edições No Servidor em Geral. Robinhood - Criador Do Servidor. Enself - Edições No Servidor em Geral. Bennyyw - Layout Web Site Junior001 - Algumas Sprites Massas. Darkheel -- Criou a outfit do Raikage. V2 update. adicionado: Download http://www.mediafire.com/download/c832fhv7i6r2kdc/naruto.sql (naruto DB MYSQL) http://www.mediafire.com/download/nd7hh0a0o1000ow/htdocs.rar (site) http://www.mediafire.com/download/m88n0z0klwtuzuz/Shinobi_Adventure_client.exe(client com musica) http://www.mediafire.com/download/g8z933186sntw2e/NtoShinobi.rar (servidor V2) http://www.mediafire.com/download/ocmhwgistkfw243/shinobi_adventure_option_2.exe(client comum) trocando de mysql para sqlite1 ponto -
Mapa de Narutibia 8.54 Meu primeiro tópico aqui no x-tibia espero que fique bom. Esse mapa erá do meu server de narutibia o record foi 245 players online,eu editei ele para ficar com uma aparencia melhor os players gostarão muito de jogar e para não esperdiçar o mapa eu resolvi postar ele aqui no x-tibia.Estou postando ele aqui porque parei com o projeto,não vou mexer mais com tibia.E eu tirei o database do servidor porque estava lotado então e só vocês pegarem outra database e colocar na pasta do servidor a posição da account manager para vocês trocarem o database>1027 914 5. Bugs:Só o do Nto Shinob,mais não afeta o server. Informações Server está 90% sem errors 10% é os errors que mostra quando abre o server. Edições:Konoha a cidade principal a Arena e o Templo. Respaws:100% pelo oque eu analizei Prints: Creditos: 1. HoobinHood:por ter criado o Nto Shinob 2. DarkHeel:peguei o mapa do tópico dele como support para min. 3. Makita Eu:Por ter administrado o server bem editado ele,e ter feito ele ter um pouco de sucesso. Obs: No conteúdo do download, o Server o Client já vem junto na pasta do servidor Se for postar o servidor em outro site não esquecer os devidos creditos.1 ponto
-
[Arquivado]Alissow em open source
Eskylo reagiu a comedinhasss por um tópico no fórum
Galera, eu estava analisando e descobri que eu realmente preciso criar um servidor para o publico! Então hoje venho aqui lhes dizer que o Alissow Server agora será Open Souce. O projeto está postado no github para vocês ajudarem com issues e também se quiserem criar um "Fork" do projeto para começarem a fazer suas próprias modificações fiquem a vontade. Link do projeto atual: https://github.com/BrunoDCC/Alissow A galera, e se vocês viam aquelas novidades que ia ter de 9.8 até 9.86 e gostou eu também coloquei o antigo servidor que estava com todas as novidades que eu estava criando (muitas funções foram removidas no atual) é só clicar aqui para obter.1 ponto -
Pet System OOP
PostadorHunter reagiu a Oneshot por um tópico no fórum
Pet System OOP Boa tarde, pessoal. Depois de ver muitos sistemas de pet para Tibia, resolvi desenvolver o meu próprio sistema de pets. O diferencial do meu sistema é que ele é orientado a objetos. Sim, ele trata o pet do jogador como um objeto em Lua e suas ações como métodos. Essa ainda é uma versão básica, que irei aprimorar aos poucos, igual fiz com meu Forge System e Refine System. Por se tratar de uma biblioteca orientada a objetos, ele pode ser usado por qualquer scripter em diversos sistemas, e se bem adaptado, dá até para fazer um Poketibia orientado a objetos. Aliás, os comandos estão bastante semelhantes a Pokétibia. Instalação 1. Crie um arquivo em data/lib com o nome pet-system.lua e cole o conteúdo abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. -- storages for pet system PET_UID = 80001 PET_SPECIE = 80002 PET_LEVEL = 80003 PET_EXPERIENCE = 80004 PET_HEALTH = 80005 PET_HEALTHMAX = 80006 PET_MANA = 80007 PET_MANAMAX = 80008 PET_EXHAUST = 80009 PET_ALIVE = 80010 Pets = {} -- class for pet species PetSpecie = { type = "", basehp = 0, basemp = 0, gainhp = 0, gainmp = 0, spells = {}, evolution = "", evolve = 0, } -- class for pets Pet = { it = nil, attributes = nil, level = 0, experience = 0, health = 0, healthmax = 0, mana = 0, manamax = 0, } -- create new instances of PetSpecie function PetSpecie:new(type, basehp, basemp, gainhp, gainmp, spells, evolution, evolve) local new_specie = { type = type, basehp = basehp, basemp = basemp, gainhp = gainhp, gainmp = gainmp, spells = spells, evolution = evolution, evolve = evolve, } local obj = setmetatable(new_specie, {__index = self}) Pets[type:lower()] = obj return obj end -- create new instances of Pet function PetSpecie:create() local new_pet = { it = nil, attributes = self, level = 1, experience = 0, health = self.basehp, healthmax = self.basehp, mana = self.basemp, manamax = self.basemp, } return setmetatable(new_pet, {__index = Pet}) end -- summon a player pet for the first time function Pet:hatch(cid) if getCreatureStorage(cid, PET_SPECIE) ~= -1 then return doPlayerSendCancel(cid, "You already have a pet.") end local pet = doCreateMonster(self.attributes.type, getCreaturePosition(cid)) if not pet then return false end if not doConvinceCreature(cid, pet) then doRemoveCreature(pet) return false end self:setit(pet) setCreatureMaxHealth(pet, self.healthmax) doCreatureAddHealth(pet, self.healthmax) doCreatureSetStorage(cid, PET_SPECIE, self.attributes.type) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your new pet has born.") self:save() doSendMagicEffect(getCreaturePosition(pet), CONST_ME_HOLYDAMAGE) return self end -- make player pet say something function Pet:say(strt) doCreatureSay(self.it, strt, TALKTYPE_ORANGE_1) end -- gather a summoned player pet back function Pet:back() self:save() doSendMagicEffect(self:position(), CONST_ME_POFF) doCreatureSay(getCreatureMaster(self.it), "It's enough, ".. getCreatureName(self.it)) doRemoveCreature(self.it) end -- free a player pet forever function Pet:release() local cid = getCreatureMaster(self.it) doCreatureSay(cid, "Good bye, ".. getCreatureName(self.it) .."... :'(") doCreatureSetStorage(cid, PET_UID, -1) doCreatureSetStorage(cid, PET_SPECIE, -1) doCreatureSetStorage(cid, PET_LEVEL, -1) doCreatureSetStorage(cid, PET_EXPERIENCE, -1) doCreatureSetStorage(cid, PET_HEALTH, -1) doCreatureSetStorage(cid, PET_HEALTHMAX, -1) doCreatureSetStorage(cid, PET_MANA, -1) doCreatureSetStorage(cid, PET_MANAMAX, -1) doSendMagicEffect(self:position(), CONST_ME_POFF) doRemoveCreature(self.it) end -- add experience to player pet function Pet:addexperience(value) local prevLevel = self.level local nextLevelExp = getExperienceForLevel(self.level + 1) self.experience = self.experience + value while self.experience >= nextLevelExp do self.healthmax = self.healthmax + self.attributes.gainhp self.manamax = self.manamax + self.attributes.gainmp self.level = self.level + 1 nextLevelExp = getExperienceForLevel(self.level + 1) end if prevLevel ~= self.level then self.mana = self.manamax self.health = self.healthmax doPlayerSendTextMessage(getCreatureMaster(self.it), MESSAGE_STATUS_CONSOLE_BLUE, "Your pet advanced from level ".. prevLevel .." to level ".. self.level ..".") setCreatureMaxHealth(self.it, self.healthmax) doCreatureAddHealth(self.it, getCreatureMaxHealth(self.it)) self:save() if self.attributes.evolution then if self.attributes.evolve and self.level >= self.attributes.evolve then doCreatureSay(getCreatureMaster(self.it), "What's happening?!") addEvent(function() local cid = getCreatureMaster(self.it) local position = self:position() doRemoveCreature(self.it) local pet = doCreateMonster(self.attributes.evolution, position) if not doConvinceCreature(cid, pet) then doRemoveCreature(pet) call_pet(cid) return end doCreatureSetStorage(cid, PET_UID, pet) setCreatureMaxHealth(pet, self.healthmax) doCreatureAddHealth(pet, getCreatureMaxHealth(pet)) doSendMagicEffect(getCreaturePosition(pet), CONST_ME_MORTAREA) doCreatureSetStorage(cid, PET_SPECIE, self.attributes.evolution) end, 100) end end end end -- make pet cast a spell function Pet:cast(index) local cid = getCreatureMaster(self.it) if not self.attributes.spells[index] then return doPlayerSendCancel(cid, "This spell is unknown.") end local spell = self.attributes.spells[index] if self.level < spell.level then doPlayerSendCancel(cid, "Your pet doesn't have enough level to cast this spell.") return end if self.mana < spell.mana then doPlayerSendCancel(cid, "Your pet doesn't have enough mana to cast this spell.") return end if getCreatureStorage(cid, PET_EXHAUST) > os.clock() then doSendMagicEffect(self:position(), CONST_ME_POFF) doPlayerSendCancel(cid, "Your pet is exhausted.") return end if spell.target then local target = getCreatureTarget(self.it) if target == 0 then doPlayerSendCancel(cid, "First, select a target.") return end spell.range = spell.range or 1 if getDistanceBetween(self:position(), getCreaturePosition(target)) > spell.range then doPlayerSendCancel(cid, "Too far to cast spell.") return end doSendDistanceShoot(self:position(), getCreaturePosition(target), spell.shooteffect) doTargetCombatHealth(self.it, target, spell.type, -spell.min, -spell.max, spell.effect) else doAreaCombatHealth(self.it, spell.type, self:position(), (spell.area or 0), -min, -max, spell.effect) end self.mana = self.mana - spell.mana doCreatureSetStorage(cid, PET_EXHAUST, os.clock() + (spell.exhaust / 1000)) doCreatureSay(cid, getCreatureName(self.it) ..", use ".. spell.name .."!") self:say(spell.name) end -- set pet uid function Pet:setit(uid) self.it = uid end -- get player pet position function Pet:position() return getCreaturePosition(self.it) end -- move player pet to a direction function Pet:move(direction) local toPosition = getPosByDir(self:position(), direction, 1) if getCreatureStorage(getCreatureMaster(self.it), PET_EXHAUST) > os.clock() then doSendMagicEffect(self:position(), CONST_ME_POFF) doPlayerSendCancel(cid, "Your pet is exhausted.") return end if queryTileAddThing(self.it, toPosition) == RETURNVALUE_NOERROR then doMoveCreature(self.it, direction) doCreatureSetStorage(cid, PET_EXHAUST, os.clock() + 0.5) doCreatureSay(cid, "Move, ".. getCreatureName(self.it) .."!") end end -- save player pet attributes function Pet:save() local cid = getCreatureMaster(self.it) doCreatureSetStorage(cid, PET_UID, self.it) doCreatureSetStorage(cid, PET_SPECIE, getCreatureName(self.it)) doCreatureSetStorage(cid, PET_LEVEL, self.level) doCreatureSetStorage(cid, PET_EXPERIENCE, self.experience) doCreatureSetStorage(cid, PET_HEALTH, self.health) doCreatureSetStorage(cid, PET_HEALTHMAX, self.healthmax) doCreatureSetStorage(cid, PET_MANA, self.mana) doCreatureSetStorage(cid, PET_MANAMAX, self.manamax) end -- get player pet and return instance function get_pet(cid) local uid, it = getCreatureStorage(cid, PET_UID) for _, pet in ipairs(getCreatureSummons(cid)) do if pet == uid then it = pet break end end if not it then return false end local this_pet = { it = it, attributes = Pets[getCreatureName(it):lower()], level = getCreatureStorage(cid, PET_LEVEL), experience = getCreatureStorage(cid, PET_EXPERIENCE), health = getCreatureHealth(it), healthmax = getCreatureMaxHealth(it), mana = getCreatureStorage(cid, PET_MANA), manamax = getCreatureStorage(cid, PET_MANAMAX), } return setmetatable(this_pet, {__index = Pet}) end -- summon a existing player pet function call_pet(cid) if get_pet(cid) then return doPlayerSendCancel(cid, "You cannot summon your pet more than one time.") end if getCreatureStorage(cid, PET_SPECIE) == -1 then return doPlayerSendCancel(cid, "You don't have a pet.") end if getCreatureStorage(cid, PET_ALIVE) == 0 then return doPlayerSendCancel(cid, "You need to revive your pet") end local pet = doCreateMonster(getCreatureStorage(cid, PET_SPECIE), getCreaturePosition(cid)) if not pet then return false end if not doConvinceCreature(cid, pet) then doRemoveCreature(pet) return false end local health, healthmax = getCreatureStorage(cid, PET_HEALTH), getCreatureStorage(cid, PET_HEALTHMAX) setCreatureMaxHealth(pet, healthmax) doCreatureAddHealth(pet, healthmax) doCreatureAddHealth(pet, (health - healthmax)) doCreatureSay(cid, "Go, ".. getCreatureName(pet) .."!") doSendMagicEffect(getCreaturePosition(pet), CONST_ME_MAGIC_GREEN) doCreatureSetStorage(cid, PET_UID, pet) return true end -- is pet function is_pet(cid) return getCreatureMaster(cid) == 0 and false or isPlayer(getCreatureMaster(cid)) end dofile(getDataDir() .."/lib/pet-spells.lua") Pet_Rat = PetSpecie:new("Rat", 20, 0, 5, 5, {[1] = Rock_Throw, [2] = Dark_Bite}, "Cave Rat", 14) Pet_Cave_Rat = PetSpecie:new("Cave Rat", 40, 20, 10, 10, {[1] = Dark_Bite}, "Munster", 32) Pet_Munster = PetSpecie:new("Munster", 100, 50, 20, 20, {[1] = Dark_Bite}, false, false) 2. Crie um arquivo em data/lib com o nome pet-spells.lua e cole o código abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. dofile("data/spells/lib/spells.lua") Dark_Bite = { name = "Dark Bite", level = 1, mana = 100, type = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_BLOCKHIT, shooteffect = CONST_ANI_SMALLSTONE, target = true, range = 1, min = 300, max = 500, area = 0, exhaust = 1000, } Rock_Throw = { name = "Rock Throw", level = 1, mana = 10, type = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_BLOCKHIT, shooteffect = CONST_ANI_NONE, target = true, range = 1, min = 20, max = 25, area = 0, exhaust = 1000, } 3. Crie um arquivo em data/talkactions/scripts, chamado pet-talkactions.lua e cole o conteúdo abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. function onSay(cid, words, param, channel) param = string.explode(param, ":") if param[1]:lower() == "go" then if getTilePzInfo(getCreaturePosition(cid)) then return doPlayerSendCancel(cid, "You cannot call your pet at protection zone.") end local pet = get_pet(cid) if pet then return doPlayerSendCancel(cid, "You cannot call your pet two times.") end call_pet(cid) return true elseif param[1]:lower() == "back" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end pet:back() return true elseif param[1]:lower() == "release" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end pet:release() return true elseif param[1]:lower() == "cast" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end local index = tonumber(param[2]) or 1 pet:cast(index) return true elseif param[1]:lower() == "say" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end pet:say(param[2]) return true elseif param[1]:lower() == "move" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end if not isInArray({"north", "south", "east", "west"}, param[2]:lower()) then return doPlayerSendCancel(cid, "Invalid direction.") end pet:move((_G[param[2]:upper()] or NORTH)) return true elseif param[1]:lower() == "addexp" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end if getPlayerGroupId(cid) < 3 then return doPlayerSendCancel(cid, "You cannot use this command.") end pet:addexperience(tonumber(param[2]) or 0) return true end return true end 4. No talkactions.xml <talkaction words="/pet" event="script" value="pet-talkactions.lua"/> 5. Crie um arquivo em data/creaturescripts/scripts com o nome pet-creaturescripts.lua e adicione o conteúdo abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. function onKill(cid, target, lastHit) local pet = get_pet(cid) if not isMonster(target) or getMonsterInfo(getCreatureName(target)) and getMonsterInfo(getCreatureName(target)).experience == 0 then return true end if not pet then return true end pet:addexperience(getMonsterInfo(getCreatureName(target)).experience) return true end function onDeath(cid, corpse, deathList) if not is_pet(cid) then return true end local master = getCreatureMaster(cid) doPlayerSendTextMessage(master, MESSAGE_EVENT_ADVANCE, "Your pet is dead.") doCreatureSetStorage(master, PET_ALIVE, 0) doCreatureSetStorage(master, PET_HEALTH, getCreatureMaxHealth(cid)) return true end 6. No arquivo login.lua de data/creaturescripts/scripts, adicione: registerCreatureEvent(cid, "PetKill") 7. No arquivo creaturescripts.xml, adicione: <event type="kill" name="PetKill" event="script" value="pet-creaturescripts.lua"/> <event type="death" name="PetDeath" event="script" value="pet-creaturescripts.lua"/> 8. Em cada arquivo XML de cada monstro que servirá como pet, adicione: <script> <event name="PetDeath"/> </script> 9. Mude o flag convinceable de cada monstro que será um tipo de pet. <flag convinceable="1"/> 10. Crie um arquivo chamado pet trainer.lua em data/npc/scripts, adicione: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local petState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local PetPrices = { ["rat"] = {1000, 200}, } function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid if msgcontains(msg, "sell") then local say = "I can offer you these pet species: " for pet_name, k in pairs(PetPrices) do local first = true if Pets[pet_name] then say = say .. (first == true and "" or ", ") .."{".. pet_name .. "}" first = false end end selfSay(say, cid) talkState[talkUser] = 1 elseif msgcontains(msg, "revive") then if getCreatureStorage(cid, PET_SPECIE) == -1 then selfSay("You don't have a pet", cid) return true end if getCreatureStorage(cid, PET_ALIVE) == 0 then if doPlayerRemoveMoney(cid, PetPrices[getCreatureStorage(cid, PET_SPECIE):lower()][2]) then selfSay("Your pet is now alive.", cid) doCreatureSetStorage(cid, PET_ALIVE, 1) else selfSay("Sorry, you need ".. PetPrices[getCreatureStorage(cid, PET_SPECIE)][2] .." gold.", cid) end else selfSay("Sorry, your pet is alive.", cid) end elseif talkState[talkUser] == 1 then if PetPrices[msg] then selfSay("A good choice, so do you want to buy a ".. msg .." pet? It will cost ".. PetPrices[msg][1] .." gold.", cid) talkState[talkUser] = 2 petState[talkUser] = msg else selfSay("Sorry, I don't know this pet specie", cid) end elseif talkState[talkUser] == 2 then if msgcontains(msg, "yes") then if get_pet(cid) or getCreatureStorage(cid, PET_SPECIE) ~= -1 then selfSay("Sorry, you already have a pet.", cid) return true end local pet = petState[talkUser] if getPlayerMoney(cid) < PetPrices[pet][1] then selfSay("Sorry, you don't have enough money", cid) return true end selfSay("This is your new pet, take care of it.", cid) Pets[pet]:create():hatch(cid) elseif msgcontains(msg, "no") then selfSay("Then not.", cid) talkState[talkUser] = 0 end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) 11. Crie um arquivo chamado Pet Trainer.xml em data/npc, adicione: <?xml version="1.0" encoding="UTF-8"?> <npc name="Pet Trainer" script="pet trainer.lua" walkinterval="0" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I {sell} and {revive} pets."/> </parameters> </npc> Configuração O Pet System OOP é todo orientado a objetos. Para criar novas raças de pet é muito, mas muito simples mesmo. Basta uma linha: PetSpecie:new("Rat", 20, 0, 5, 5, {[1] = Rock_Throw, [2] = Dark_Bite}, "Cave Rat", 14) Como segue o modelo abaixo: PetSpecie:new(NOME_DO_MONSTRO, HP_INICIAL, MP_INICIAL, HP_POR_LEVEL, MP_POR_LEVEL, {[1] = MAGIA_1, [2] = MAGIA_2, [3] = MAGIA_3, ...}, NOME_DA_EVOLUÇÃO, LEVEL_DA_EVOLUÇÃO) Caso você não queira que o pet evolua, coloque os dois parâmetros como false. E para criar novas magias, é só seguir o mesmo modelo das duas magias padrão dentro de pet-spells.lua. Demonstração Este sistema está no Github sob a licença Gnu GPL v3. Você pode baixar os scripts aqui. Abraços.1 ponto -
[Encerrado] Sistema Edo Tensei
mateuslucker reagiu a rexslobo por um tópico no fórum
To precisando de um sistema de EDO TENSEI que pegue o corpo depois de morto tipo cath de OTP só q ao invez de pokebola, usar o scroll (ja tenho o id) , se puderem me mandar eu agradesso valendo rep+1 ponto -
[GALERIA] Drigobo no paint
TheuOfficial reagiu a drigobo por um tópico no fórum
Ae pessoas o/ estou abrindo uma galeria pra eu também, quero postar meus trabalhos( não diariamente por falta de tempo) mas sempre que possível, vou procurar postar em um geral, de tudo e mais um pouco, para melhorar e preciso muito kkk conto com a ajuda de vocês. critiquem, elogiem, xinguem, só não ofendam, ainda estou aprendendo. por favor =) pra começo vou postar umas que tenho disponível e alguns modelos haha. Tentei fazer uns modelos sentados me baseando em Ragnarok(notei que tem em alguns servers, mas me baseei em Rag mesmo). Um shinobi, em duas versões ainda vou melhorar ele, mais pra frente haha tentei fazer um guerreiro, mas saio um gladiador no meu ponto de vista( esse foi o mais recente) Um zumbi sem braços e pra encerrar por enquanto um modelo de um zumbi, (incompleto) -------------------- ATUALIZADO Tentei fazer uma capivara (pra primeira até que fiou bem, não? kkk) Editei duas moitas do Tibia pra treinar(kkkk fail) Um out que fiz, (o wesley me ajudou a fazer a cabeça, vlw wesley10) e uma espada(comecei a spritear outs, por isso sou tão ruim, mas estou vendo uns tutor kk) EDIT 04/01/2014 ^^ GOSTOU? REP+ OBS: Sou iniciante então calma aeeee PS: TODAS AS SPRITES POSTADAS AQUI, ESTARÃO/ESTÃO DISPONÍVEL PARA USO DE TODOS, MAS NÃO ESTAREI FINALIZANDO NENHUMA DELAS A PEDIDOS, OBRIGADO!.1 ponto -
Venom's Gallery
Alexclusive reagiu a Venom2 por um tópico no fórum
A area orc que eu fiz pro cam.. ainda não mexi em nada nela depois de mandar pro concurso, mas talvez faça um revamp pra poder usar ela no meu mapa ^^ @Valeo mesmo vital e dumal! vocês que são fodas (: Bonus, Ignora as coisas inacabadas: Coementae!1 ponto -
[RESOLVIDO] Mensagem ao morrer
igorsilveeira reagiu a Maenilse por uma questão
seria possivel sim, adcione esse. function onKill(cid, target, lastHit) if not isPlayer(target) or not isPlayer(cid) then return true end doBroadcastMessage(""..getCreatureName(target).."["..getPlayerLevel(target).."] acabou de morrer para o jogador "..getCreatureName(cid).."["..getPlayerLevel(cid).."].", 27) return true end1 ponto -
[RESOLVIDO] Erro com função
jeffersonfds reagiu a Roksas por uma questão
Tente: function onSay(cid, words, param) local create_pos = {x = 1060, y = 1046, z = 5, stackpos = 255} local tp_pos = {x = 1045, y = 1049, z = 15} if words == "/eventoon" then doCreateTeleport(1387, tp_pos, create_pos) doSendMagicEffect(create_pos, 10) doPlayerSendTextMessage(cid, 28 ,"Portal para o Evento está aberto!") elseif words=="/eventooff" then doRemoveItem(getThingFromPos({x = create_pos.x, y = create_pos.y, z = create_pos.z, stackpos = 1}).uid, 1) doPlayerSendTextMessage(cid, 28 ,"Portal para o Evento fechou!") end return true end @Maelnise Não existe essa função.1 ponto -
[RESOLVIDO] Erro com função
jeffersonfds reagiu a Maenilse por uma questão
tente ae. function onSay(cid, words, param) if words=="/eventoon" then local create_pos = {x=1060 , y=1046 , z=5, stackpos=255} local tp_pos = {x=1045 , y=1049 , z=15} doCreateTeleport(1387, tp_pos , create_pos) doSendMagicEffect(create_pos , 10) doPlayerSendTextMessage(cid, 28 , "Portal para o Evento está aberto!") return TRUE end if words=="/eventooff" then doRemoveItem(getItemById(create_pos,1387)) doPlayerSendTextMessage(cid, 28 , "Portal para o Evento fechou!") end return TRUE end1 ponto -
tenta assim function onStepIn(cid, item, pos) if getPlayerFood(cid) <= 1000 then if getTileInfo(getThingPos(cid)).protection then doSendMagicEffect(getThingPos(cid), 14) doPlayerFeed(cid, 100) end end return true end1 ponto
-
Tenta assim, no script, aonde ta 1000 coloca 0. E da reload1 ponto
-
Introdução Nesse tutorial veremos o que é nature de forma geral. Nature Nature é a representação da natureza no tibia, a qual pode ser demonstrada de varias formas, como por exemplo o deserto, as florestas, pântanos, florestas densas, montanhas, árvores, entre outros... Então podemos dizer que existem varias formas de utilizar\criar\randomizar o nature. Tentando criar algo natural, podemos pegar algumas bases, tanto de uma imagem real, quanto de algum mapper experiente (OBS: tentando não copiar ou plagiar o um trabalho de algum mapper). Exemplos de Nature (Vida real): Aonde se encontra a Natureza (Nature) ? Nature pode se encontrar em qualquer lugar. Pode estar em uma cidade, uma cave, no subsolo. Quase tudo pode ser considerado nature. Para mappear Nature, tenha em mente que nada pode ser fora do normal, por exemplo, colocar uma pedra gigante em cima do telhado. Se uma pedra gigante ficar no telhado a tendencia é que o telhado vai quebrar e pedra vai cair. Temos que pensar que somos a pessoa que vai criar um mapa de jogo, que tem que ser jogável (com RPG) e que esse mapa tenha que ficar com uma aparência bonita, além de agradável. Mapas que são bonitos e agradáveis: Nature em City's Geralmente o nature das cidades, tanto de tibia quanto na vida real, não existe em grande escala, como em florestas. De modo geral, o nature de uma cidade é mais uma coisa simples, como graminhas verdes cortadas, uma plantinha ali, outra aqui, depende do tipo de pessoa. No tibia também não é diferente, depende do mapper, e o seu estilo. Exemplos vida real: Exemplo no Tibia: Montanhas Montanhas são formações naturais que ocorrem devido ao atrito entre duas placas tectônicas. No tibia existem vários tipos de montanhas, desde montanhas simples de pedra até montanhas com fungos. Na criação de montanhas deve-se considerar que pode existir uma cachoeira, uma ponta, passagens secretas; se a montanha vai ser grande ou pequena, larga ou fina, se vai ter árvores ou não. Desertos Desertos são lugares extremamente quentes na parte da manhã, e bem frios ao chegar da noite. Deserto é um tipo de nature um pouco mais difícil (na minha opinião). O deserto é um lugar seco, com areia, alguns cactos, as vezes existe piche, as vezes existem oásis, pouca grama, sem árvores, animais mais hostis e agressivos, como cobras, escorpiões, abelhas, etc.. Pântano Pantano é uma região aonde se encontra muita água e escoamento natural muito devagar, com um ambiente úmido. Pântanos possuem muita água, sem muita terra firme. Possui muitas árvores e plantas, chegando a deixar abafado. Abriga animais selvagens como cobras, aligátores, mosquitos (que podem ser venenosos) entre outros. Créditos pelos mapas: Beto06/Left4Dead/Ethan/DanielZiyak/DuMal/VictorFT/Kausen. Criação do tópico: NextWorld Obrigado a todos1 ponto
-
Os Seus Primeiros passos no RME Esse tutorial vai te mostrar como começar a editar com o Remeres Map Editor(RME) Ao abrir o programa, vemos logo a sua interface. Aqui vai uma explicação básica! Os comandos avançados não seram colocados somente os úteis para quem esta começando. Atalhos "File" - Ou arquivo(em inglês) traz as opções do mapa. ---> New File - Cria um novo mapa ---> Open - Abre um mapa que ja existe(e que você possui) ---> Save - Salva o mapa. ---> Import - São opções de importação necessarias para a criação de novos NPC's e Monstros ---> Reload - Recarrega. "Edit" - Ou Edição(em inglês) Traz as ferramentas para editar o mapa. ---> Goto Position - Vai a uma coordenada específica. ---> Jump to Brush - Pesquise algo(chão, paredes, itens etc.) "Map" - Ferramentas e configurações do mapa, também correções para o mesmo. ---> "Edit Towns" - Edita as cidades, a localização do templo e outras coisas. "View" - Controla o que é visto no editor ---> Não serve para iniciantes "Window" - As janelas na tela. ---> "Terrain Pallete" - É a primeira coisa que você deve clicar! Abre a janela principal de edição e com ela é possivel alternar para as outras. "Floor" Os níveis de elevação. ---> Não é recomendável usar por la, e sim pelas teclas + e - Agora que você ja esta sabendo de algo vamos ao que interessa. Começo do Tutorial 1. Clique em "Window"(nos atalhos) e abra a "Terrain Pallete". Pronto já temos uma base do editor. 2. Aonde esta "Tile Set" selecione "Town" para selecionar as coisas da cidade. E selecione o "White Marble Floor"(Um chão branco.) Como na foto: Depois de fazer isso deixe o "Brush" quadrado e em Size 7, igual na foto: Agora clique em alguma área preta do mapa! O chão ficara igual a o "White Marble Floor", então, em seguida selecione alguma parede na mesma categoria(Towns) mude para o Brush Size 1(o que apenas faz um quadrado) e contorne o chão branco. Ficara mais ou menos assim: Agora aperte o botão "+" para elevar um andar, aonde esta "Town" na categoria, clique para mudar e coloque "Roofs" e escolha algum telhado, em seguida passe exatamente em cima, contornando do lado de dentro a parede colocada, preste muita atenção para não deixar telhado para fora(somente as bordas). Depois disso aperte - para voltar ao andar original. 3. Aonde esta "Terrain Pallete" clique para mudar e selecione a "Doodad Pallete" e em "Tile Set" coloque Interior. Use os objetos decorativos para enfeitar(Lembre-se você agora esta na idade média) Ficara mais ou menos assim: 4. Volte a "Terrain Pallete" e selecione em Tile Set: "Nature". Em volta da casa coloque 'grass'(mato/grama) em boa quantidade de distancia. E em volta da grama coloque a primeira 'agua'(water) que aparece no editor. Pronto! Ficara mais ou menos assim: O tutorial foi feito, pensando em realizar diferentes ações criando uma estrutura básica que ao realizar essas ações você aprende o máximo do que pode ser feito com elas. Agora é só soltar a imaginação para criar o que quiser!1 ponto
-
[RESOLVIDO] [Ajuda] Script de Fome
icarodantas123 reagiu a Roksas por uma questão
Vá em data/movements/scripts, crie um arquivo chamado stepHungry.lua e adicione dentro: function onStepIn(cid, item, pos) if getTileInfo(getThingPos(cid)).protection then doSendMagicEffect(getThingPos(cid), 14) doPlayerFeed(cid, 1000) end return true end Em movements.xml adicione: <movevent type="StepIn" event="script" value="stepHungry.lua"/> Prontinho ^^1 ponto -
Você sabe que tem que morrer para um player né '-'1 ponto
-
vai em data/creaturescripts/scripts copie um arquivo e renomeie para broadcast.lua e cole isso. function onKill(cid, corpse, deathList) if isPlayer(deathList[1]) then return true,doBroadcastMessage(""..getCreatureName(cid).. "[" ..getPlayerLevel(cid) .. "] Matou Facil o Player: " ..getCreatureName(deathList[1]) .. "[" .. getPlayerLevel(deathList[1]) .. "]") end return doBroadcastMessage(""..getCreatureName(cid).."[" .. getPlayerLevel(cid) .. "] Matou Facil o Monstro " .. getCreatureName(deathList[1]) .. ".") end adcione isso no login.lua. registerCreatureEvent(cid, "deathBroadcast") agora adcione essa tag no creaturescripts.xml. <event type="kill" name="deathBroadcast" event="script" value="broadcast.lua"/>1 ponto
-
tente ae. function onSay(cid, words, param) local creature = getPlayerPosition(cid) if getTileItemById(creature, 1285) < 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Já existe uma pedra embaixo de você!") else doCreateItem(pedra, getCreaturePosition(cid)) end return true end1 ponto
-
[Encerrado] shop_history
cobweb reagiu a SkyDarkyes por um tópico no fórum
Apenas se for usar site,se for com site liga tudo certinho não da esse poblema1 ponto -
scripter funciona so que da erro no executável
joseanpereira reagiu a Skymagnum por uma questão
A eu coloquei pra adicionar no máximo 100. Usa ai. function onSay(cid, words, param, channel) local str = string.explode(param, ",") local player = getPlayerByNameWildcard(str[1]) local amount = tonumber(str[2]) or 1 if not(player) then return doPlayerSendTextMessage(cid, 27, "Player not found.") elseif not(amount) then return doPlayerSendTextMessage(cid, 27, words .. " player name, value.") end doPlayerAddExp(player, getExperienceForLevel(amount) - getPlayerExperience(player)) doCreatureAddMana(player, getCreatureMaxMana(player) - getCreatureMana(player)) doCreatureAddHealth(player, getCreatureMaxHealth(player) - getCreatureHealth(player)) return true end1 ponto -
[Encerrado] shop_history
cobweb reagiu a SkyDarkyes por um tópico no fórum
vá pasta do ot/data/globalevents/globalevents.xml,remova a tag shop story1 ponto -
Ficando assim: local k = { speed = 10, tempo = 2, storage = 25442, } local function visible(cid) if not isPlayer(cid) then return true end doCreatureSetHideHealth(cid, false) doChangeSpeed(cid, getCreatureSpeed(cid) - k.speed) end function onCastSpell(cid, var) if getPlayerStorageValue(cid, k.storage) > os.time() then return doPlayerSendCancel(cid, "You are exhausted.") end doCreatureSetHideHealth(cid, true) doSetItemOutfit(cid, 1548, k.tempo*1000) doChangeSpeed(cid, getCreatureSpeed(cid) + k.speed) setPlayerStorageValue(cid, k.storage , os.time() + k.tempo) addEvent(visible, k.tempo*1000, cid) return true end Já havia feito isso em meu Cast System ^^1 ponto
-
tenta mudar isso: doSetCreatureOutfit(cid, {lookType = 0}, k.tempo*1000) para isso: doSetCreatureOutfit(cid, {lookTypeEx = 1548}, k.tempo*1000) e se não der certo, para isso: doSetItemOutfit(cid, 1548, k.tempo*1000)1 ponto
-
Tenta trocar o script do !b por esse aqui function onSay(cid, words, param) local playerGuild = getPlayerGuildId(cid) if playerGuild > 0 then local playerGuildLevel = getPlayerGuildLevel(cid) if playerGuildLevel >= GUILDLEVEL_VICE then local players = getOnlinePlayers() local message = "*Guild* " .. getCreatureName(cid) .. " [" .. getPlayerLevel(cid) .. "]:\n" .. param; for i,playerName in ipairs(players) do local player = getPlayerByName(playerName); if getPlayerGuildId(player) == playerGuild then doPlayerSendTextMessage(player, MESSAGE_STATUS_WARNING, message); end end doPlayerSendCancel(cid, "Message sent to whole guild."); else doPlayerSendCancel(cid, "You have to be at least Vice-Leader to guildcast!"); end else doPlayerSendCancel(cid, "Sorry, you're not in a guild."); end return TRUE end OBS.: não levo créditos pelo script, só ajeitei o que tava no meu ot.1 ponto
-
Wisland - RadBR
felipeomatad reagiu a vinnevinne por um tópico no fórum
vou por no 4shared ja te passo o link ta na mao kkkk : http://www.4shared.com/rar/KfsksBb8/wisland.html1 ponto -
Avatar Zero
pvjf reagiu a Gabrieltxu por um tópico no fórum
Opa Muito bom amigo Espero que continue trazendo mais versões do servidor para o Xtibia. Movido para a Área de Download de Servidores derivados E Destacado na área.1 ponto -
Tendi, então você é designor?1 ponto
-
[Noticias] Pokemon Skyfall
Faelzdanil reagiu a kttallan por um tópico no fórum
ta lgl so que nao acha que ta imitando muito o pxg nao algo de diferente seria bem legal.1 ponto -
1 ponto