Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 02/12/14 em todas áreas
-
[5] - Aplicações em OTservers (I)
chateadoagr e 2 outros reagiu a Omega por um tópico no fórum
Aplicando em OTServers - I Muito foi desenvolvido desde o início dos OTServers e, embora muitos não tenham observado isso, esse desenvolvimento foi lento. Inicialmente, era muito difícil criar scripts para OTS's, porque o suporte para tal era pequeno. Os primeiros scripts desenvolvidos eram somente actions e spells. Movements, globalevents, talkactions e, finalmente, creaturescripts foram introduzidos posteriormente. Por isso, vamos começar com aplicações básicas de actions, que são scripts que definem uma função chamada quando o jogador usa um item. Antes disso, vamos começar entendendo como funcionam os OTServers: o código-fonte, que é compilado e se transforma, em última instância, naquele executável que serve para abrir o servidor, é feito em C++, uma outra linguagem de programação. Essa parte define toda a base do servidor e é mais complicada de se editar, pois toda vez ele terá que ser compilado novamente. Por isso, utiliza-se Lua, uma linguagem de fácil edição. O código-fonte ou source code ou simplesmente, sources do servidor define o que acontecerá com as informações recebidas pelo cliente. Quando um jogador clica em um item, esse clique é enviado para o servidor, que encaminha essa resposta para um script Lua do tipo action. O servidor, então, lê esse código Lua e o executa. E é aí que nós, scripters Lua, entramos. Até agora abordamos um código para um baú de quest, mas com funções fictícias. Os códigos-fonte mais usados são os desenvolvidos pelo The Forgotten Server Team, mais conhecidos como TFS. Nele, existem várias funções que podemos usar em nossos códigos Lua. Vamos usar algumas funções dele a seguir, para criarmos um script de um baú de quest de verdade. Primeiramente, vamos pensar nas restrições: um baú de quest deve poder ser aberto apenas uma vez, certo? Essa é nossa primeira condição. Além disso, talvez queiramos fazer um baú específico para uma vocação. Essa será nossa segunda condição. Então, o jogador terá duas condições para cumprir e deverá receber uma mensagem avisando se não cumprir cada condição. Caso ambas sejam cumpridas, ele deverá ganhar a recompensa e algo que evite que ele abra novamente o baú. Vamos criar um esboço do código: Agora precisamos traduzir isso para as funções utilizadas e entendidas pelo servidor: a função básica, que é chamada quando um item é usado, se chama onUse e seus dois primeiros parâmetros são cid e item. Precisamos entender o que é o cid. Cada criatura dentro do servidor tem um número de identificação único para ela. Esse número é denominado cid – creature identification. Para executarmos alguma função para uma criatura ou para conseguirmos informação sobre essa criatura, precisaremos fornecer seu número de identificação como parâmetro dessa função. Segue no link uma lista de algumas das várias funções existentes nos servidores 8.6 – aqui. Várias informações dos jogadores podem ser guardadas no banco de dados do servidor (mais sobre isso no capítulo de Banco de dados e SQL). Inclusive informações que chamamos de storages, que podem ser usados para guardar números e strings e não são apagados quando o jogador loga ou morre. Para manipulá-los, podemos utilizar a função setPlayerStorageValue(cid, storageKey, value) e getPlayerStorageValue(cid, storageKey). Cada storage tem uma chave de identificação (storageKey). Se ele não tiver um valor definido, seu valor padrão é -1. Portanto, podemos utilizar essas funções para verificar se o jogador já fez ou não a quest, dessa forma: if getPlayerStorageValue(cid, storageKey) == -1 then jogador não fez a quest! else jogador já fez a quest! end Utilizando a lista das funções, tente selecionar as que você deverá usar para o script do baú. OBS.: deve-se ter cuidado para não repetir o número de um storageKey, pois pode haver conflito entre dois scripts diferentes. Assim, você pode escolher aleatoriamente um número com 6 ou mais algarismos, fazendo com que a chance de repetição seja muito pequena ou listando os storages que você já usou e conferindo para não repetir. Para verificar quais storages já foram usadas, utilize essa talkaction. Assim como várias outras constantes do servidor, cada vocação é associada a um número: sorcerer = 1, druid = 2, paladin = 3 e knight = 4. Para promotions, soma-se 4 ao número da vocação. Para ver o valor dessas e das outras constantes, vá na pasta data do seu servidor e procure pelo arquivo 000-constant.lua dentro da pasta lib. O script do nosso baú deverá ficar com uma cara mais ou menos assim: http://pastebin.com/BVQVzqhi Não se preocupe se você ainda não entendeu totalmente esse código, em breve você poderá fazê-lo completamente sozinho, se já não pode. Essa foi apenas uma introdução a aplicações em OTServers.3 pontos -
Mudança de nome
leleeuh e um outro reagiu a Alexclusive por um tópico no fórum
Nome alterado com sucesso! Tempo de conta suficiente para uma alteração. Nome alterado com sucesso! Já vi muito coisa boa sua pela comunidade, já vi que você fez parte de nossa equipe e colaborou bastante. Por isso fiz a alteração. Pedido negado! Amigo, você criou sua conta a pouco tempo, apenas pense melhor em um nome e crie outra. Se você leu o tópico, deve saber os requisitos. Pedido negado! Motivo não convincente e seu nome é bem melhor que muitos por ai. Se o nome te incomoda tanto, sugiro que crie outra conta, tendo em vista que você possui poucos posts e pontos de reputação. Nome alterado com sucesso. Marcelo, fiz a alteração por que markindoOt e tenso...Aproveite a oportunidade. Nome alterado com sucesso! Pelos seus 32 anos de conta! kkkkkk Nome alterado com sucesso! Pelo fato de você já ter tentado criar outra conta com o mesmo nome, desta vez resolvi fazer a alteração pra ti. Aproveite! Nome alterado com sucesso! Fico feliz que esteja voltando, espero que a mudança de nome te estimule a ajudar ainda mais a comunidade. Acho que resolvi todos por aqui! Bom galera, obrigado a todos pelos votos de confiança e pelo apoio nessa decisão tomada por mim. Foi o apoio de vocês que me motivaram a fazer isso. |Se seu pedido foi atendido, faça valer o meu esforço e tempo em ter feito a mudança| (CABE A VOCÊ FAZER SEU NOME VIRAR UMA LENDA!) |Se seu pedido foi negado, faça por merecer que talvez na próxima sue pedido seja aceito| TÓPICO FECHADO! (Sem previsão para reabertura...)2 pontos -
Bússola
Desnecessario e um outro reagiu a 20cm por um tópico no fórum
Olá amigos, esse script mostra as direções em inglês e português e a direção que você está olhando no momento. É legal para saber pra onde correr na hora do exiva, e é legal adicionar o item compass na lista de itens iniciais que vêm na bolsa do jogador novo.(id 11219). tag: <action itemid="11219" script="compass.lua"/> compass.lua: local d = {[0]="Norte",[1]="Leste",[2]="Sul",[3]="Oeste"} function onUse(cid,item,fromPosition,itemEx,toPosition) doPlayerPopupFYI(cid, " Bússola:\n N\n W-¦-E\n S\n\nN: North (Norte)\nW: West (Oeste)\nE: East (Leste)\nS: South (Sul)\nVocê está olhando em direção "..d[getCreatureLookDirection(cid)]..".") return true end screenshot (bbcode todo bugado) obs. se estiverem erradas as posições leste e oeste, me avisem. Usei como base a rosa dos ventos da vida e real e não jogo mais tibia, então não lembro como funciona.2 pontos -
Mapa World of Warcraft
warriorfrog e um outro reagiu a oktober15 por uma questão
download do mapa: https://www.mediafire.com/?zxeb356x63toqd1 scan: https://www.virustotal.com/pt/file/e64a02d04f5741e79a91a17ad2fd8df24d8e4fceee207aad3336a5b44e33965c/analysis/1392185663/ créditos: ? não sei quem criou esse mapa eu só tenho o mapa, nao tenho nenhum script de quests e npcs que tem nele, vo fica devendo.. mapa muito bacana faça bom uso dele rs.. e dsclp a demora2 pontos -
Pokémon Mysterion [Dowload] !
Lucioclecio1 reagiu a StyloMaldoso por um tópico no fórum
Eai galerinha..tudo bem? Hoje estou aqui para postar o dowload do meu servidor (pokémon mysterion) que esteve online durante as férias desse ano. Bom o caotic tinha postado a versão dele, com level system e varias coisas no otClient de inovador, porém muitos não gostarao do level system e resolvi posta a minha versão. OBS: o servidor está com mapa do PDA, voces podem pegar o mapa do caotic e usarem no meu servidor sem poblema, porque eu que fiz ele e e adpatei para o servídor. OBS²: O servidor esta com uns erro de "Duplicate move event found" Ao ligar, relaxa..isso é normal..é do icone porque tipo, você joga o icone no chão e puxa ele pra bag voltando icone e não em bag, eu não consegui adpta o systema de uniqueItem com o do icone por isso fica esses "errinho" ao iniciar. OBS³: o Systema de icone está dando para volta para ball, porém na proxima versão irei retirar isso e decha pra sempre icone (menos bug). E o ultimo OBS: irei atalizar o servidor sim, porém com sem preça, a proxima versão já estara o mapa do pokémon mysterion (se eu achar..) e alguns ajuste nos systema. Bom, estou sem tempo para postar informações O oque contém no servidor? TUDO que à no PDA v1.9.1 + minhas edicações. icone system, editações em script etc etc. Uma print para vocês terem noção doque estão abaixando. enfím, o dowload ! http://www.4shared.com/rar/91igaENK/Server.html? E Também a proxíma versão talvez pode demorar para sair, porque a escola está pegando muito pesado huaha, intão tenho que me dedica meu tempo todo aos estudos para ser alguem na vida (ihuul), a proxima atalização talvez demore ou não para sair, mais não depedem de min, já di a base abaxem e faça as proprías editações ! credítos. Slicer (por ter me ajudado em boa parte dos SCRIPT, e a basê "PDA V1.9.1) Eu Brun123 (poke DASH)1 ponto -
[Pokemon] Servidor Skyfall - Completo
Josemir rosendo reagiu a Gabrieltxu por um tópico no fórum
Conteudo Retirado.1 ponto -
Ai galera, estarei disponibilizando meu servidor para download. Quem nao conhece, era o servidor "POKEUNDERSTORM". Tenho como base o PDA 1.9.1 e sofreu diversas alterações feitas por mim, concertei alguns bugs que causavam lag, outros que davam crash, enfim, chega de falar e vamos ao que interessa. ScreenShot's: IMPORTANTE: Comandos do servidor: Correções: ICON SYSTEM Dicas para trocar IP do cliente: Link's: Servidor -- Download: http://www.4shared.com/rar/Lme59xNh/Servidor.html Scan: https://www.virustotal.com/pt/file/49a1522a332decbd8a2f05c69186afdf2d89c8d64d81a66368947bbc482f91e3/analysis/ Client -- Download: http://www.4shared.com/rar/HJicMH5H/Cliente_1.html Scan: https://www.virustotal.com/pt/file/90c09b74ff00ba013540fab8dfcff7c1fb3f9ed371fb1a319be69946cb04cf3f/analysis/1374171948/ Espero que gostem, que continuem com o meu antigo projeto. Obrigado a todos, boa sorte ;D Creditos: Brun123 pelo PDA Slicer por suas modificações Faelzdanil por algumas SPRITES Stylomaldoso por algumas modificações no mapa. Smix por fornecer a base do script do sistema de Icons. A mim por organizar e implementar alguns scripts. Toda comunidade Xtibia que sempre me ajudou.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 -
[8.6] World of warcraft mapa para OTserver
chateadoagr reagiu a oktober15 por um tópico no fórum
Galera venho aqui postar o mapa para otserver baseado no mapa do World of Warcraft.. O mapa é bem bacana, bem detalhado e parece ter uma boa jogabilidade esta no meu pc a muito, MUITO tempo. obs: só possui o mapa, sem nenhum script de quests ou npcs que tem nele Versão: 8.60 download do mapa: https://www.mediafire.com/?zxeb356x63toqd1 scan: https://www.virustotal.com/pt/file/e64a02d04f5741e79a91a17ad2fd8df24d8e4fceee207aad3336a5b44e33965c/analysis/1392185663/ créditos: (?) não sei quem criou esse mapa, se alguém souber me fala que ponho aqui1 ponto -
[ajuda] nao consigo dxa ot on ?
kazaana reagiu a vinioliveira por um tópico no fórum
O Erro ja foi resolvido via chat.1 ponto -
[Encerrado]Formação de Equipe - BIOHAZARD ONLINE
Desnecessario reagiu a BrenoNeto por um tópico no fórum
Já é um começo ^^, ficou até legalzinho. Galera, estou fazendo a recepção do hospital de Raccoon City. Ainda não ta nem perto de ficar pronto, mas o que acham do que está pronto comparado com a img no spoiler? (ANTIGA) @NOVA @NOVA IMAGEM!1 ponto -
Porta com limite de level
leleeuh reagiu a DuuhCarvalho por uma questão
local porta = 3065 -- id da porta local uid = 9095 -- UniqueID local level = 400 -- limite de lvl function onUse(cid, item, frompos, item2, topos) if item.uid == uid and item.itemid == porta then if getPlayerLevel(cid) <= level then doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_RED) else doPlayerSendTextMessage(cid, 22, "Você passou do limite de level para entrar nessa porta.") end end return TRUE end e em actions.xml <action uniqueid="9095" script="NomeDoArquivo.lua" />1 ponto -
Server/mapa Pda
pablopablo reagiu a xandeloko por um tópico no fórum
http://www.xtibia.com/forum/topic/225008-pokexvnzl/1 ponto -
Boa tarde pessoal, hoje eu vou postar um tutorial para vocês que eu achei no bog Arte no Corel! Pra mim isso é a coisa mais importante que existe no mundo da publicidade, as cores. Então, sem mais delongas, vamos para a explicação. Antes de explicar qual o significado de 4×0, 4×1 e 4×4 temos que entender o que é CMYK. A união e o conjunto de quatro cores CMYK são denominados policromia, com a mistura destas cores se obtém uma grande variedade de cores. Combinando essas cores se forma as imagens, em materiais gráficos. Essa sigla é conhecida pelos designers por todo lugar, mas é um assunto que confunde muitas pessoas, mais precisamente aos nossos clientes, que por sinal não são obrigados a saber, mas a nossa missão é explicar e passar todas as informações, assim passando mais segurança e confiança de nossos serviços. C CYAN = CIANO M MAGENTA = MAGENTA Y YELLOW = AMARELO É isso ai pessoal, espero que tenham entendido, qualquer coisa estarei a disposição para tirar dúvidas. Hoje a noite em um tutorial de como fazer um cartão de visita com verniz localizado! Abraços.1 ponto
-
Efeito no item
Duuhzinhow reagiu a tiago1234 por uma questão
Ja tento adicionar o item em data\weapons? tenta adiciona em weapons.xml e dps faz o script na pasta data\weapons\scripts.....1 ponto -
Duel system, naturia clan, e level system[poketibia]
UploadPedro reagiu a heavy2 por um tópico no fórum
1 - Qual versão do PDA vc utiliza ? a ultima que o Slicer postou ? 2 - Qual erro aparece no Distro ? OBS: Dependendo do erro pode ser que seja necessário utilizar o RME. 3 - Eu poderia até lhe ajudar a retirar o level system, porem eu iria perder meu tempo todo, sendo que já tem aqui mesmo no Xtibia a versão PDA do Slicer Sem Level System... 4 - Vejo que vc é Novo no Xtibia, vou te ensinar uma coisa. Não Utilize o REP+ como "Moeda" de troca, o Rep é uma maneira de vc agradecer por alguem ter te ajudado de alguma maneira, e não uma moeda que "Me ajudemmm tá valendo Rep!" 5 - Em relação aos erros baixe uma versão mais atualizada do PDA vou deixar Link abaixo. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Link do PDA By Slicer - Sem Level System ~1 ponto -
[Encerrado]Bleach Online: Recruitment (SPRITER)
RemigiuszTadyszak reagiu a Legnus por um tópico no fórum
Null have reason.. Have some forums about OT Server, you can find members that understand .. But here are so hard this. ;/ But add me skype, and i can give you one or two sprites of Bleach, how incentive. ^^1 ponto -
[ajuda] map editor ?
Destruidorbk reagiu a vinioliveira por um tópico no fórum
veja se o nome do nomedomap.otbm e se o nome do spawn esta assim : nomedomap-spawn.xml por o spawn ser um complemento do otbm eles tem q ter nomes especificos1 ponto -
Talkaction simples...
assinho3k reagiu a DuuhCarvalho por uma questão
faz assim : cria um arquivo.text na pasta do seu ot com o nome informação e escreva oq vc quiser dentro, pois é oq vai aparecer no ot .. agr em data/talkactions/scripts crie um arquivo.lua com o nome info.lua e dentro cole isso : function onSay(cid, words, param) file = io.open('informação.txt','r') texto = file:read(-1) doShowTextDialog(cid,7528,texto) file:close() end agr em talkactions.mlx coloque a tag : <talkaction words="!informacao" event="script" value="info.lua"/> não use ´ ` ~ ç ... faça tudo como falei so mude oq vai aparecer no ot .1 ponto -
Não quero mudar o Nome, mas e uma boa Iniciativa da parte de vocês tentar fazer isso.1 ponto
-
Like Box Com Fundo Branco
VictorWEBMaster reagiu a hellcoreot por um tópico no fórum
Olá vim postar como fazer seu like box igual do globalwar com fundo branco: Vá em www/layouts/tibiacom/layout.php Abrá e procure(ctrl+F) por if($config['site']['screenoftheday'] == 1) logo após ?> adicione isso: <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/pt_BR/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <div id="LikeBox" style="background-color:#ffffff; data-width="180" data-height="300""> <div class="fb-like-box" data-href="http://www.facebook.com/pages/seulinkaqui" data-width="180" data-height="300" data-colorscheme="light" data-show-faces="true" data-stream="false" data-header="false"></div> </div> só mudar isso para sua pagina do facebook: data-href="http://www.facebook.com/pager/seulinkaqui" Para mudar a cor basta mudar onde está #ffffff (#ffffff = branco!) é a cor! <div id="LikeBox" style="background-color:#ffffff; data-width="180" data-height="300""> Esse link tem os códigos das cores AQUI ss: Pronto qualquer duvida só postar!1 ponto -
[X-Redação] Resultado
Alexclusive reagiu a Mophus por um tópico no fórum
Parabéns aos vencedores, e feliz aniversário ao nosso grande fórum, XTIBIA 2013 - 8 Anos de muito conteúdo e amizade!1 ponto -
Mensagens Automáticas! Fala galerinha XTibiana, Bom agora são exatamente 03:30 da manha e eu estou sem po** nenhuma pra fazer.. =) Então resolvi fazer um sisteminha de mensagens automaticas para por no seu servidor, ele é bem simples porem bastante usado! :forward: O sistema funciona assim, você poem 5 frases e elas serão mostradas uma por uma aleatoriamente no seu servidor... Vamos aos scripts: Vá até a pasta "globalevents" entre na pasta "scripts" e faça um script chamado "mensagem.lua" e coloque este código dentro: -- [( Script created by Doidin for XTibia.com )] -- function onThink(interval, lastExecution) MENSAGEM = { "FRASE 1", "FRASE 2", "FRASE 3", "FRASE 4", "FRASE 5", } doBroadcastMessage(MENSAGEM[math.random(1,#MENSAGEM)],22) return TRUE end FRASE = Substitua pela frase que você quiser... Agora volte a pasta "globalevents" e abra o arquivo "globalevents.xml" e adicione esta tag: <globalevent name="mensagem" interval="500" script="mensagem.lua"/> Pronto agora você tem mensagens automáticas no seu servidor! =) Abraços...1 ponto
-
[Blood Castle] Evento Otimizado![12/04/14]
ZaneraGlobal reagiu a Alexclusive por um tópico no fórum
Legal cara, um evento a mais né? rs Obrigado por compartilhar! Obs: Coloquei os acentos pra ti1 ponto -
[Actions] Como Faser Um Bau De Quest
FL4REON reagiu a darkalvaro por um tópico no fórum
Bom galera hoje estou aqui no meu segundo post e muita gente como alguns amigos meus não sabem fazer bau para quest, mas hoje vou ensinar como se faz! começando com o script... Copie uma pasta .lua e cole em server/data/actions/quests e renomei para qualquer nome que você quiser no meu caso vou usar "dhelmet". Agora abra-o e cole o seguinte script: function onUse(cid, item, frompos, item2, topos) if item.uid == 34586 then queststatus = getPlayerStorageValue(cid,8456) if queststatus == -1 then doPlayerSendTextMessage(cid,22,"Você completou a quest, parabéns!") doPlayerAddItem(cid,2493,1) setPlayerStorageValue(cid,8456,1) else doPlayerSendTextMessage(cid,22,"Você já pegou o item") end end end Legenda: Em Azul é o unique id que você vai colocar no bau pelo rme editor. Em vermelho você coloca qualquer numero que não esteja em nenhum script de quest. Em laranja é a mensagem que irá aparecer quando o player abrir o bau. Em Verde é o id do item que o player vai receber. Em Roxo é a quantidade de itens que o player irá ganhar quando clicar no bau. Em marrom você coloca o mesmo numero do 2° passo. Em rosa você coloca a mensagem que irá aparecer se o player tentar abrir o bau mais de 1 vez. Agora você vai em server/data/actions e abre o actions.xml, e coloca o seguinte: <action uniqueid="34586" event="script" value="quests/dhelmet.lua"> Legenda: Em verde você coloca o numero do 2° passo. Em cinza você coloca o nome do arquivo .lua, no meu caso dhelmet. Pronto!, agora só falta você colocar o id da quest no bau pelo rme!, não sabe como?, não se preocupe vou ensinar agora! Primeiro clique no bau com o botão direito do mouse e vai em properties ou propriedades como na imagem abaixo. Agora no "unique id" coloque o numero que você colocou no 2° passo, no meu caso 8456. E de ok! Prontim! fácil neh?, lembrando que fiz esse tutorial para iniciantes! por isso não venham me criticar!, se ajudei da REP+ ae!</action>1 ponto -
Novo Baiak-Hits 8.60 Sem Bugs
Diegobankai reagiu a tomax por um tópico no fórum
Novo Mapa Baiak 8.60 Sem Bugs Baiak-Hits Mapa Com 95% Dos Bugs Corrigidos Templo Modificado Tps Free 100% Modificado Areá Vip 1 Modificada Areá Vip 2 Modificado Foi Colocada Nova Entrada Tps Vip 1 Modificado Tps Vip 2 Modificados Depot Modificado Algumas Hunts Modificadas Mapa Já Vem Com (Portsafe Anti-Nuker) (sqlitestudio-2.1.4) (No-IP) E Muito Mas Confira Algumas Imagens Lembrando que as Imagens É Do RME. (Em sima dos TPS Sobe Os Nome's) Templo Depot Tps Free ^Aqui em baixo tem mais uma partinha do TPS que foi cortada da imagem^ Quests Vip 1 Tps Vip 1 Vip 2 Nova Entrada Para Os Tps Vip 2 Tps Vip 2 Scan Lembrando que é meu primeiro tópico de mapa. Acc god/god Download Clique Aqui (Tamanho Em Winrar 15MB) Se Gostou Um Rep Ai ><1 ponto -
Tutorial Sobre Arrays
Luga03 reagiu a Tprocheira por um tópico no fórum
Tutorial sobre arrays -- Nível Intermediário Proibida a cópia não autorizada! Tutorial de minha autoria! Olá a todos. Neste tutorial, ensinarei o básico sobre arrays. Por que utiliza-la? Maior organização, facilitando a 'manutenção' do seu script, deixando-o 'mais limpo' e carregando menos a CPU. Exemplo: É melhor usarmos: do que: Em outras palavras, ele vai, indiretamente, utilizar menos CPU. Agradecimentos especiais aos usuários Rento e Cayan por darem uma explicação mais profunda sobre arrays -Como utilizar? As arrays tem uma sintaxe até que fácil de se entender, ficando no meio de duas chaves ({}) Na maioria dos casos, se usa da seguinte maneira: Agora, vamos analisar a sua estrutura. { Esse símbolo inicia a array. 'Orc', Essa é uma variável dentro da array. Chamamos de variável pois ali poderia ter um Demon, Dragon, e até mesmo posições! Ao final de uma variável, é colocada uma vírgula (,) indicando que existe outra variável após esta. Lembre-se sempre de colocar áspas ao citar nome de monstros. ('monstro') 'Orc Rider' Nesta variável, da para perceber a falta da vírgula após a mesma. Isso significa que esta é a ultima variável da array. } Esse símbolo termina a array. Agora, vamos a alguns exemplos (EBAA!!) O que este script faz: (Script deixado em negrito para maior visualização das cores) Se o <a href='#' onClick="hwClick1535116586397(-137805199);return false;" style='cursor: hand; color:#006600; text-decoration:underline; border-bottom:dotted 1px;' onmouseover="hw1535116586397(event, this, '-137805199'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " oncontextmenu="return false;">player</a> estiver em alguma destas posições, ele manda a mensagem "You are inside an array!". Agora, vamos analisar as partes. (vamos dar uma de novatos agora) A parte em laranja é a nossa array. A parte em vermelho é o início da nossa função. No caso, um moveevent. A parte em preto é o corpo do script. Ai dentro, você coloca o que quiser Notem que a função function onStepIn(cid, item, item2, position, fromPosition) funciona no The Forgotten Server, ajuste a mesma para a sua distribuição. --Atualização ~ Parte avançada. Agora, vamos aprender a trabalhar com tabelas (Arrays) de verdade, utilizando comandos, e identificando formas de ser retirar informações de uma array. --Dando valor à uma variável de acordo com uma posição na tabela. Você pode utilizar isso de várias maneiras no mundo de Open Tibia. Vamos começar da forma mais simples. Quando você for retirar uma informação de sua array, você tem que saber qual a posição daquela variável. Exemplo: local names = {"John", "Peter", "Ralph", "Mike"} O nome John é o primeiro nome da tabela, sendo assim, ele é o ID 1 da tabela. Da mesma maneira, Peter é o segundo membro da tabela, tendo o ID 2. Para retirar alguma informação da tabela, usamos a seguinte estrutura: nomedatabela[id] Por exemplo, se eu querer atribuir à variável var1, o nome John, eu utilizo o seguinte comando: local var1 = names[1] Simples assim. Da mesma maneira, podemos utilizar um valor randomizado para atribuir um valor à variável, da seguinte maneira: local chance = math.random(1, 4) local names = {"John", "Peter", "Ralph", "Mike"} local var1 = names[chance] Simples assim. --Carregando uma variável de uma tabela. A maioria dos scripters usam isso diariamente e não sabem! Digamos que você tem a seguinte tabela: ids = {[2160] = "crystal_coin", [2148] = "gold_coin", [100] = "void"} E você quer utilizar uma dessas variáveis em seu script. Ao invés de você fazer da seguinte maneira: local item = ids[1] Você faz da seguinte maneira: local item = ids.crystal_coin Para isso utilizamos a seguinte base: nomedatabel.nomedavariável Simples assim. Mas você se pergunta, onde eu uso isso? Aqui vai: local player = getPlayerPosition(cid) local pos = {x = [b]player.x[/b], y = 500, z = 7} Viram? --Removendo valores de uma tabela. Para isso, usamos o seguinte comando: table.remove(nomedatabela.posição) Exemplo: local var1 = {"Carl", "Mike", "Peter"} table.remove(var1, 2) Isso irá remover o nome Mike da tabela. --Adicionando valores à tabela. Utuilizamos o seguinte comando: table.insert(nomedatabela, posiçãodesejada, valor) Note que o valor posiçãodesejada é opcional. Mas sem ele, a variável vai ser adicionada no final da tabela Exemplo: local var1 = {"Carl", "Mike", "Peter"} table.insert(var1, "James") Isso adiciona a variável James na ultima posição, deixando a tabela assim: local var1 = {"Carl", "Mike", "Peter", "James"} Se você quisesse adicionar no primeiro lugar, seria assim: local var1 = {"Carl", "Mike", "Peter"} table.insert(var1, 1, "James") Isso deixaria a tabela assim: local var1 = {"James", "Carl", "Mike", "Peter"} Também, é possível adicionar um valor à uma tabela da seguinte maneira: local var1 = {"Carl", "Mike", "Peter"} var1[2] = "James" Isso adicionaria a variável James no lugar de Mike. Se você quiser adicionar a variável no último lugar, faça o seguinte: local var1 = {"Carl", "Mike", "Peter"} var1[4] = "James" Usando a seguinte base: nomedatabela[posiçãodesejada] = variável Estarei atualizando com mais informações. Tprocheira1 ponto -
Rank Frags !
rogeriocene reagiu a 1027929 por uma questão
Bom achei esse daqui espero que pegue com você! Vai no talkactions/scripts e abra seu ranks.lua e substitua por isso: function getPlayerNameByGUID2(n) local c = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..n..";") if c:getID() == -1 then return "SQL_ERROR["..n.."]" end return c:getDataString("name") end function onSay(cid, words, param) local max = 10 local letters_to_next = 20 local skills = { ['fist'] = 0, ['club'] = 1, ['sword'] = 2, ['axe'] = 3, ['distance'] = 4, ['shielding'] = 5, ['fishing'] = 6, ['dist'] = 4, ['shield'] = 5, ['fish'] = 6, } local name_now local name = "Highscores\n" local rkn = 0 local no_break = 0 param = string.lower(param) dofile('config.lua') if param == "" or param == "level" and ( param ~= "magic" and param == "ml") and skills[param] == nil then name = name.."\n" name = name.."Ranking Level - Nome do Jogador\n" local v = db.getResult("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT 0,"..(max)..";") repeat no_break = no_break +1 if v:getID() == -1 then break end rkn = rkn+1 name_now, l = v:getDataString("name"), string.len(v:getDataString("name")) space = "" for i=1, letters_to_next-l do space = space.." " end name = name..rkn..". ["..v:getDataInt("level") .."] - "..name_now..space.." ".."\n" if no_break >= 20 then break end until v:next() == false elseif param == "magic" or param == "ml" then name = name.."\n" name = name.."Ranking Magic - Nome do Jogador\n" local v = db.getResult("SELECT `name`, `level`, `maglevel` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT 0,"..(max)..";") repeat if v:getID() == -1 then break end rkn = rkn+1 name_now, l = v:getDataString("name"), string.len(v:getDataString("name")) space = "" for i=1, letters_to_next-l do space = space.." " end name = name..rkn..". ["..v:getDataInt("maglevel").."] - "..name_now..space.." ".." ".."".."\n" until v:next() == false elseif param == "kills" or param == "killer" or param == "kill" or param == "frag" or param == "frags" then name = name.."\n" name = name.."Ranking Frags\n" local v = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = 90190 ORDER BY cast(value as INTEGER) DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("player_id")..']' end name = name..kk..". ["..v:getDataInt("value").."] - "..name_now..space.." \n" until v:next() == false elseif skills[param] ~= nil then name = name.."\n" name = name.."Ranking "..param.." fighting - Nome do Jogador\n" local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..skills[param].." ORDER BY `value` DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("player_id")..']' end name = name..kk..". ["..v:getDataInt("value").."] - "..name_now..space.." \n" until v:next() == false end if name ~= "Highscore\n" then doPlayerPopupFYI(cid, name) end return TRUE end Esse script é só você pegar esse código e colocar no lugar do seu Rank e assim vai ter !rank magic,sword,frags etc...1 ponto