Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/26/13 em todas áreas
-
Pet System OOP
PostadorHunter e 6 outros 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.7 pontos -
3 pontos
-
Like Box Com Fundo Branco
VictorWEBMaster e um outro 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!2 pontos -
Saudações XTibianos! Hoje estou trazendo mais uma entrevista, dessa vez com nosso ilustríssimo Oneshot! Na entrevista de hoje, vocês acompanharão um pouco sobre ele, e as possíveis e futuras mudanças com a sua chegada a coordenação! Preparem a pipoca, e boa leitura! Faaaala Oneshot! É um prazer estar entrevistando você hoje =p Para começarmos, que tal nos dizer qual seu nome e sua idade? - Meu nome é Bruno Lopes, 19 anos. Como você conheceu o XTibia? - Eu estava na minha 5ª série, Tibia no auge da versão 7.6, um colega de classe criou então o primeiro "servidor pirata" (era como nós chamávamos na época) de Tibia que eu vi na vida. Na época, eu era bem pirralhinho, então vivia pedindo para ele me colocar de GM em troca de lições-de-casa (yeah, rly). Até que um dia eu me irritei e fui pesquisar no Google - Com vários resultados, encontrei o XTibia no meio deles. Como, e o que te levou a conhecer/jogar o game Tibia? - Para falar a verdade mesmo, eu nunca joguei Tibia a fundo. Joguei durante a versão 7.6, e nunca cheguei ao level 8 para sair de Rookgaard. O que te levou a procurar o aprendizado pela programação? Você já participou de outras áreas do fórum além desta? - Bom, quando eu resolvi fuçar realmente com OTServ, criar meu próprio servidor, já estávamos na versão 7.92. O que eu só fazia, era ser um simples OT-Admin, eu só entrava nos fóruns para baixar magias, monstros e actions. Só que eu era um pouco orgulhoso, me recusava a criar tópicos pedindo algo. Então, por exemplo, a primeira magia que eu baixei foi aquela famosa Ultimate Explosion com o efeito de sudden death que quase existe em todos servidores, eu fuçava em tudo tentando entender como funcionava. O primeiro sistema que fui fuçar foi um do tal do Colex, um sistema de sorvete. Até então eu não sabia programar, me davam crises de querer aprender, ia na internet ler os tutoriais e não entendia nada, aquilo parecia uma mistura de russo e mandarim para mim. O tempo (muito tempo) foi passando, eu migrei de Open Tibia para RPG Maker e quando voltei para Open Tibia, notei que eu tinha desenvolvido uma estranha facilidade de me adaptar e aprender as linguagens de programação e foi quase como mágica com a linguagem Lua. Todos te conheciam como o "eterno colaborador", e agora, como é ter o tão almejado cargo de coordenador? Você sente que fez um bom trabalho até agora? - Nah, as pessoas que não me conhecem, me chamam mais de "bipolar", por eu ter entrado inúmeras vezes como Colaborador e ter saído da equipe todas elas. Para ter ideia, na minha primeira entrada como Colab., este era um cargo sem acesso nenhum, funcionava mais como um título para aqueles que contribuíam bastante com o fórum. Hoje, sim, Colaborador virou um cargo que tem papel de sub-moderação no Éks, com acessos moderativos e tudo mais. Assumo, "Eterno Colaborador", eu roubei do grande Won Helder, o "Eterno Coordenador/Diretor". E, sim, eu sempre almejei o cargo de coordenação e agradeço muito a oportunidade que o Ranieri Lorde do Fogo está me dando e se ele reconheceu meu trabalho, acho que estou fazendo algo de bom para o Éks Agora como coordenador de programação e scripting, quais são seus projetos e/ou planejamentos para ambas as seções? Novos concursos, novos tipos de tutoriais... o que vem por aí? - A seção de programação não tem movimento, uma vez que C++, a linguagem da programação nas sources, é bem mais complicada que Lua. Nem a área de Pedidos é frequentada, uma vez que os OT-admins, não sabem discernir entre scripting e programação. Pode notar que muitas das vezes, eles criam tópicos de pedidos em Scripting que só podem ser realizados com edições nas sources. Acho que a seção só iria ser movimentada, se Poketibia fosse open source, aí iam chover pedidos lá dentro. Meu plano para a área é tentar semear interesse nela, e caso isso não funcione, recorrer a fusão da área de Programação como uma sub-seção de Scripting, como ela existe em todos os fóruns gringos. Para a área de Scripting, planejo organizar ela, criar novas regras de postagem, "limpar a sujeira" e, com isso, dar início aos planos principais. Dois novos concursos irão ser iniciados, um de caráter semanal de avaliação, o "X-Script of the Week" e um de caráter "arena" ao estilo do "Quem ganha, fica". E também o projeto "Escola de Scripting" que foi iniciado por um ex-colaborador também irá voltar, dessa vez definitivo, mais organizado e com 100% de chances de dar certo. Com ele, irei transformar OT-admins em scripters iniciantes, e quem sabe, esses scripters iniciantes comecem a colaborar com o fórum em busca de aprender mais e mais. Essa é uma pergunta que sempre costumo fazer. Qual a sua visão sobre o atual XTibia? O que você acha da atual equipe, e da organização em si? - O Open Tibia tem sofrido uma queda no público interessado e todos os fóruns voltados para isso, sofrem com isso. O XTibia, hoje, é o maior fórum brasileiro de Open Tibia, com mais usuários e maior conteúdo - isso - porque lá, no início, ele foi criado como um fórum de suporte e não uma porcaria para dar lucro, como um outro fórum aí que já está falindo. Acho que a equipe do XTibia atual é uma das melhores, com algumas exceções. Acredito que o certo é contratar pessoas para equipe que sejam maduras, não briguem por qualquer "coisinha" e, por favor, saibam o bom português, pelo menos o do ensino fundamental. A organização do fórum, bom, eu não posso dizer muito sobre as outras áreas, pois não as frequento o bastante para ter uma opinião. Mas sobre a área de Scripting, ela está caótica, existe um abismo entre pedidos de scripts e entrada de conteúdo na seção, o que resulta naquela seção monstra de 10 páginas de pedidos. Fora que os usuários hoje em dia, não querem nem mais pesquisar o fórum pelo que eles querem, ou seja, a maioria do que tem na seção de pedidos, tem no fórum. Mas estou planejando tudo como disse acima, para que isso não aconteça mais. No momento, há algo que é preciso melhorar dentro da comunidade? O que seria isso, e como melhorar? - Como disse acima, acho que é necessário ensinar os novos usuários de alguma forma sobre postagens em seções incorretas, pedidos repetidos e etcétera. Também acho que com a entrada de 2013, nosso velho e bom XTibia poderia ganhar um remake, com um novo portal, um novo banner, uma nova skin, uma reorganização das seções no geral, acho que isso é necessário para agradar e atrair os usuários. Do seu ponto de vista, qual a seção mais "famosa" e mais promissora aqui no XTibia? - Acho que as seções de Mapping e Design são as mais famosas, com muitos usuários colaborando, e transbordando interesse em aprender. Mas eu não vou perder para os coordenadores delas, né, Tony? Então logo Scripting estará mais uma vez no auge. Baseada na pergunta anterior, qual a seção que atualmente, precisa de mais atenção da parte da equipe e da comunidade em si? Porque? E há algo que você possa dizer para melhorá-la? - Acho que a seção de Spriting está mais abandonada até que a seção de Programação, ela não tem coordenador, ou pelo menos, acho que ele faz por não existir. Então acho que a equipe precisa tomar uma decisão quanto a ela, existem, sim, usuários querendo colaborador com conteúdo, como a grande quantidade de tutoriais em avaliação, mas não existe ninguém para incentivar esses usuários. Existe algum projeto ativo que lhe chame mais a atenção? (Organização, elaboração, criatividade, etc.) - Existem dois, na verdade, um é o DigiWo que parece estar ficando muito bom e porque eu já gostei bastante de Digimon. E o outro é o Bulls Yurots, um remake incrível do Yurots na versão atual do Tibia, que acho bastante promissor com o Anyur de mapper. A equipe é composta por vários membros. Para você, destes membros há algum principal destaque? - Nossa, são muitos. Lá vai a lista. Lordfire - Esse é um ótimo administrador, ele ganhou minha confiança depois de mostrar que realmente se importa e gosta do fórum. Tonynh - O cara entra de coordenador e, como mágica, traz a seção de Design dos mortos. É uma grande inspiração para mim, quero fazer isso também com a seção de Scripting. Anyur - Bom, depois de começar como moderador, ser promovido a coordenador, ter um monte de gente brigando com ele e querendo derrubar ele, o cara conquistou seu lugar como Diretor e foi merecido. Não tive muita oportunidade de conhecer ele melhor, mas acho que ele deve ser nota 10. Qual o membro da comunidade que você mais se identifica aqui no fórum? (Pode ser da equipe ou não.) - É o meu pupilo LuckOake. Eu vejo nele minha vontade de aprender Lua quando eu era iniciante. Acho que foi por isso mesmo que decidi tentar ensinar tudo que sei para ele. Para finalizarmos, você tem algo para dizer para os usuários que lerão esta entrevista? =p Obrigado a todos que vão ler essa entrevista gigante e aguardem a "Era de Ouro" do Scripting, haha. FIM DA ENTREVISTA Obrigado ao Oneshot por ceder um pouco de seu tempo para dar essa entrevista! Ótimas respostas! E é isso, espero que todos vocês tenham gostado da entrevista com esse cara incrível! =p MIAU É ISSO AÍ!2 pontos
-
Não me recordo de você, apenas espero que não tenha em mente que meu trabalho no fórum se resumia a banir ou fechar tópicos, se for este o caso ira demorar mais um tempo até eu ser esquecido. Agora, estarei torcendo para que você faça o que eu sempre gostei de fazer, postar versões boas de open tibia, bons mapas, bons scripts e ainda ter folego para aturar engraçadinhos hehe.2 pontos
-
depois de um tempo sem mappear fiz essa entrada pra um templo comentem ae2 pontos
-
[Encerrado] Dat Editor Para Tibia 8.54
narutomaniacos e um outro reagiu a danilinho79 por um tópico no fórum
Cara, isso ele sabe né, o problema é com a versão, se liga ¬¬. Vou tentar ajudar dnv... me adiciona no msn: danilinho79@hotmail.com aí eu te mando o meu dat editor, que eu tb uso no meu servidor 8.542 pontos -
Galeria do Anyur
Tonynh e um outro reagiu a Gabriel Couto por um tópico no fórum
Obrigado pelos comentários e dicas, são as primeiras sim! Estou ainda me acostumando com as funções do photoshop também ^^ +Bonus Sign Steve McGarrett [Personagem de série que assisto]2 pontos -
Não entendi direito se você queria SIGN ou FANBAR, no caso fiz uma fan bar, caso você não queira e queira que eu faça uma sign, só avisar que eu irei fazer e te entrego.2 pontos
-
Mapa feito por AnneMotta: Mapa Battlefield.rar scan: https://www.virustot...sis/1346548669/ Imagens do mapa: Descrição: - O evento é automático e acontece em determinado dia e hora da semana - Logo após é aberto um teleport então apenar um número limitado de players entra no evento - São formados por dois times, os "Black Assassins" e os "Red Barbarians" - Os times são balanceados automaticamente, quando o último jogador entra, esse teleport é fechado e depois de 5 minutos o evento começa, os 5 minutos são para os players ter tempo de planejar um ataque. - O sistema tem por finalidade matar todos do time inimigo, e os players que sobreviverem recebem um prêmio. Bônus: - Durante o evento é mostrado na tela somente dos jogadores que estão no evento um placar de times. - Até o último player entrar no evento, ficam mandando broadcast dizendo quanto players faltam para dar inicio ao jogo. - Se o evento abrir e não atingir a meta de players colocada, o evento é finalizado e os players voltam para o templo. Lembre-se: - De colocar Pvp Tool na área - De colocar área NoLogout Imagens: Instalação: Data/Lib Data/CreatureScript Data/Globalevents Data/Movements Como configurar: Configuração dos Times: Configurar Datas do evento: Configuração Paredes:1 ponto
-
[Pokemon] Kpdo Full Edited Gablei
Daniel S reagiu a Gabrieltxu por um tópico no fórum
Olá Galerinha do Xtibia Hj vou Postar um Map Full KPDO editado por min 1° Num sei se é essa área correta 2° Varios Lugares do map foi eu q editei Por Min fiko Muito Massa mais Num sei Por vcs! 3° Não Sei o Site para Por Scan Mais eu garanto que num tem virus Bom Agora Vou Mostrar Algumas Fotos de Algums Lugares que eu editei! espero que gostem comesei a Ser map esses dias Agora Por Ultimo e Mais necesario o Map <--- AvÀ Link para Download: http://www.mediafire...c6apnvoiwfoq2g1 Com o Map vem as SPR e DAT que eu usei para editar Mais uma vez eu digo se gostou da REP++ Porfavor num vai cair a mão1 ponto -
Vip System by Account 1.0 By Kydrai Este é um vip system por account, ou seja, um sistema de vip válido para todos os characters de uma determinada conta. O script foi testado no TFS 0.3.6 - 8.54. E no site Gesior 0.3.4 beta4. Em caso de erros ou dúvidas é só postar. Funções do Script Função necessária para começar a usar o script: installVip() -> Cria a coluna no banco de dados para usar o sistema de vip (testei somente em sqlite, mas acredito que funcione em mysql) Funções que utilizam o account id: doTeleportPlayersByAccount(acc, topos) -> Teleporta todos os players da account getVipTimeByAccount(acc) -> Pega o tempo de vip setVipTimeByAccount(acc, time) -> Edita o tempo de vip getVipDaysByAccount(acc) -> Pega o tempo de vip em dias isVipAccount(acc) -> Verifica se é vip addVipDaysByAccount(acc, days) -> Adiciona dias de vip doRemoveVipDaysByAccount(acc, days) -> Remove dias de vip getVipDateByAccount(acc) -> Pega a data e hora que irá terminar a vip Funções que utilizam o creature id (cid): doTeleportPlayers(cid, topos) -> Teleporta todos os players da account getVipTime(cid) -> Pega o tempo de vip setVipTime(cid, time) -> Edita o tempo de vip getVipDays(cid) -> Pega o tempo de vip em dias isVip(cid) -> Verifica se é vip addVipDays(cid, days) -> Adiciona dias de vip doRemoveVipDays(cid, days) -> Remove dias de vip getVipDate(cid) -> Pega a data e hora que irá terminar a vip Inserindo as funções Abra a pasta data/lib, crie um arquivo lua e coloque: vipAccount.lua --[[ Name: Vip System by Account Version: 1.0 Author: Kydrai Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ [Functions] -- Install installVip() -- By Account doTeleportPlayersByAccount(acc, topos) getVipTimeByAccount(acc) setVipTimeByAccount(acc, time) getVipDaysByAccount(acc) isVipAccount(acc) addVipDaysByAccount(acc, days) doRemoveVipDaysByAccount(acc, days) getVipDateByAccount(acc) -- By Player doTeleportPlayers(cid, topos) getVipTime(cid) setVipTime(cid, time) getVipDays(cid) isVip(cid) addVipDays(cid, days) doRemoveVipDays(cid, days) getVipDate(cid) ]]-- -- Install function installVip() if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then print("[Vip System] Vip System instalado com sucesso!") return TRUE end print("[Vip System] Não foi possível instalar o Vip System!") return FALSE end -- By Account function doTeleportPlayersByAccount(acc, topos) if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then return TRUE end return FALSE end function getVipTimeByAccount(acc) local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";") if vip:getID() == -1 then print("[Vip System] Account not found!") return FALSE end return vip:getDataInt("viptime") end function setVipTimeByAccount(acc, time) if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then return TRUE end return FALSE end function getVipDaysByAccount(acc) local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) return days <= 0 and 0 or days end function isVipAccount(acc) return getVipDaysByAccount(acc) > 0 and TRUE or FALSE end function addVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) setVipTimeByAccount(acc, time) return TRUE end return FALSE end function doRemoveVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local time = vipTime - daysValue setVipTimeByAccount(acc, (time <= 0 and 1 or time)) return TRUE end return FALSE end function getVipDateByAccount(acc) if isVipAccount(acc) then local vipTime = getVipTimeByAccount(acc) return os.date("%d/%m/%y %X", vipTime) end return FALSE end -- By Player function doTeleportPlayers(cid, topos) doTeleportPlayersByAccount(getPlayerAccountId(cid), topos) end function getVipTime(cid) return getVipTimeByAccount(getPlayerAccountId(cid)) end function setVipTime(cid, time) return setVipTimeByAccount(getPlayerAccountId(cid), time) end function getVipDays(cid) return getVipDaysByAccount(getPlayerAccountId(cid)) end function isVip(cid) return isVipAccount(getPlayerAccountId(cid)) end function addVipDays(cid, days) return addVipDaysByAccount(getPlayerAccountId(cid), days) end function doRemoveVipDays(cid, days) return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days) end function getVipDate(cid) return getVipDateByAccount(getPlayerAccountId(cid)) end Exemplos de uso Talkaction GOD: /installvip /addvip name, days /removevip name, days /checkvip name Player: /buyvip /vipdays talkactions.xml: <talkaction log="yes" access="5" words="/installvip;/addvip;/removevip;/checkvip" event="script" value="vipaccgod.lua"/> <talkaction words="/buyvip;/vipdays" event="script" value="vipaccplayer.lua"/> vipaccgod.lua: function onSay(cid, words, param, channel) local t = param:explode(",") local name, days = t[1], tonumber(t[2]) if words == "/installvip" then if installVip() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Vip System instalado com sucesso!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não foi possível instalar o Vip System!") end elseif words == "/addvip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then addVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip ao "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar dia(s) de vip a este player.") end elseif words == "/removevip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then doRemoveVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você retirou "..days.." dia(s) de vip do "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar dia(s) de vip a este player.") end elseif words == "/checkvip" then if name then local acc = getAccountIdByName(name) if acc ~= 0 then local duration = getVipDateByAccount(acc) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..name.." possui "..getVipDaysByAccount(acc).." dias de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode visualizar os dias de vip a este player.") end end return TRUE end vipaccplayer.lua: function onSay(cid, words, param, channel) if words == "/buyvip" then local price = 1000000 local days = 30 if doPlayerRemoveMoney(cid, price) then addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Movement (Tile) Coloque actionid 15000 em um tile onde somente os vips poderão passar. movements.xml: <movevent type="StepIn" actionid="15000" event="script" value="viptile.lua"/> viptile.lua: function onStepIn(cid, item, position, fromPosition) if isVip(cid) == FALSE then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players vip podem passar.") end return TRUE end Creaturescript (Login) Quando player logar irá verificar se a vip do player acabou, se sim então irá teleportar todos os players da account para o templo, se não irá mostrar o tempo da vip. creaturescripts.xml: <event type="login" name="viplogin" script="viplogin.lua"/> viplogin.lua: function onLogin(cid) local vip = isVip(cid) if getVipTime(cid) > 0 and vip == FALSE then local townid = 1 doPlayerSetTown(cid, townid) local templePos = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, templePos, false) setVipTime(cid, 0) doTeleportPlayers(cid, templePos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua Vip acabou!") elseif vip == TRUE then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Action (Door) Coloque actionid 15001 na door onde somente os vips poderão passar. Use a porta gate of expertise (id: 1227) actions.xml: <action actionid="15001" script="vipdoor.lua"/> vipdoor.lua: function onUse(cid, item, fromPosition, itemEx, toPosition) if isVip(cid) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Somente players vip podem passar.") elseif item.itemid == 1227 then doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, toPosition) end return TRUE end NPC (Vendedor de VIP) vipnpc.xml: <?xml version="1.0" encoding="UTF-8"?> <npc name="Vendedor de VIP" script="vipnpc.lua" walkinterval="2000" 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 {vip} days."/> </parameters> </npc> vipnpc.lua: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) 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 function buyVip(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if doPlayerRemoveMoney(cid, parameters.price) then addVipDays(cid, parameters.days) npcHandler:say('Thanks, you buy '..parameters.days..' vip days. You have '..getVipDays(cid)..' vip days.', cid) else npcHandler:say('Sorry, you don\'t have enough money.', cid) end npcHandler:resetNpc() return true end local node1 = keywordHandler:addKeyword({'vip'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want buy 30 vip days for 1000000 gp\'s?'}) node1:addChildKeyword({'yes'}, buyVip, {price = 1000000, days = 30}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then.', reset = true}) npcHandler:addModule(FocusModule:new()) Erros e Soluções Configurando o Gesior Com essa configuração irá aparecer o vip status do player no site e será possível vender vip pelo site. Se eu esqueci de alguma coisa é só avisar. accountmanagement.php Depois de: if(!$account_logged->isPremium()) $account_status = '<b><font color="red">Free Account</font></b>'; else $account_status = '<b><font color="green">Premium Account, '.$account_logged->getPremDays().' days left</font></b>'; Adicione: if(!$account_logged->isVip()) $account_vip_status = '<b><font color="red">Not Vip Account</font></b>'; else $account_vip_status = '<b><font color="green">Vip Account, '.$account_logged->getVipDays().' days left</font></b>'; Depois de: <td class="LabelV" >Account Status:</td><td>'.$account_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" > Adicione: <td class="LabelV" >Account Vip Status:</td><td>'.$account_vip_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" > pot/OTS_Account.php Substitua: private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0); Por: private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0, 'viptime' => 0); Substitua: $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch(); Por: $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('viptime') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch(); Substitua: $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']); Por: $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('viptime') . ' = ' . (int) $this->data['viptime'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']); Depois de: public function getPremDays() { if( !isset($this->data['premdays']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return $this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])); } Adicione: public function getVipDays() { if( !isset($this->data['viptime']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return ceil(($this->data['viptime'] - time()) / (24*60*60)); } Depois de: public function isPremium() { return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0); } Adicione: public function isVip() { return ceil(($this->data['viptime'] - time()) / (24*60*60)) > 0; } characters.php Substitua: if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Vip Status:</TD>'; $vip = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$config['site']['show_vip_storage'].';')->fetch(); if($vip == false) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } } Por: if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Account Vip Status:</TD>'; if(!$account->isVip()) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } } shopsystem.php (+Créditos ao GM Bekman) Substitua: if($buy_offer['type'] == 'pacc') { $player_premdays = $buy_player_account->getCustomField('premdays'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); $buy_player_account->setCustomField('premdays', $player_premdays+$buy_offer['days']); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_premdays == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>PACC added!</h2><b>'.$buy_offer['days'].' days</b> of Premium Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } Por: if($buy_offer['type'] == 'pacc') { $player_viptime = $buy_player_account->getCustomField('viptime'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); if($player_viptime > 0) $buy_player_account->setCustomField('viptime', $player_viptime + ($buy_offer['days'] * 24 * 60 * 60)); else $buy_player_account->setCustomField('viptime', time() + ($buy_offer['days'] * 24 * 60 * 60)); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_viptime == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>VIP Days added!</h2><b>'.$buy_offer['days'].' days</b> of Vip Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } Links Úteis 01- [Gesior Acc] Vendedo Vip Pelo Pacc Créditos: GM Bekman 02- Double Exp Para Vip Créditos: Vodkart 03- Outfits Só Para Jogadores Vips Créditos: Vodkart1 ponto
-
Esta é uma Ilha redirecionada para War e Player Kill's, Façam Bom proveito. Feito por Virczek. Fotos: Download: Clique aqui1 ponto
-
FAAALA GALERES Eu (DE NOVO) trouxe pra vocês um sistema. MAAAS dessa vez, não é um sistema qualquer. Dessa vez é aquele tão cobiçado sistema de banimento do servidor RadBr! O que é: É um sistema de banimento através de warnings setadas pelo GOD em um player, e outro player poderá desbanir este já banido por barras (Default ID: 9971), dependendo do número de warnings. Script: Configurando: Imagens: Uso: /ban Nome,Motivo,Warnings* !unban Nome *OBS: Não é obrigatório especificar as warnings no comando /ban. Se não forem especificadas, serão adicionadas +1 warning automaticamente. (Exemplo: /ban Nome,Motivo) Observações: - Sou lindo, eu sei Créditos: - LuckOake (Pelo Sistema)1 ponto
-
[Gesior Plus] [Chaito Soft]
MassterServer reagiu a W0lfer por um tópico no fórum
Descrição: O mais completo website usado atualmente pelos melhores servidor, pois além de possuir uma funcionabilidade incrível conta com interatividade para os players. Com todos os script que se encontra de melhor. Oque possui? - Ranking Lateral 100% - Anti SQL Injection 100% - Videos System (Script: Compartilhamento de videos de “WAR,QUESTS,HUNTS”) - Pagseguro Automático (Script: Faz a verificação e envia pontos automáticamente aos donantes) - Menu Events (Script: Permite aos players visualizarem todos os eventos que você possui) - Buy Points 100% RL (Script: Sistema de doação idêntico ao Tibia.com) - Create Account 100% RL (Script: Criação de conta e character de uma só vez oque facilita para os players) - Visual do Tibia.com mais atualizado possível - Paginas Ranking e Guilds idênticas ao Tibia.com - Character’ Page (Totalmente customizada com um visual muito legal) - Shop system (Script: Possui subdivisões para melhor organizar suas vendas) - Entre outras coisas… Download Créditos: ChaitoSoft1 ponto -
Sabe aquele negocio chato de quando vc tem que mudar level ou editar algum char que voçê tem que ir no phpmyadmin etc? poisé isso acabou! :b Crie uma pasta em C:\xampp\htdocs com o nome: adminpro.php e cole isso: <?PHP //README: if nick contain "'" use "\'". For example: nick = The'Knight so use in the form The\'Knight ,,,-WORKS! if($group_id_of_acc_logged >= $config['site']['access_admin_panel']) { $main_content .= 'Welcome to advanced admin panel! Mainly you can edit players. Coded by <a href="http://otland.net/members/turs0n/">turson</a>'; //admin panel menu (player+account) $main_content .= '<br /><br /><div style="width:100%;border:1px solid #c6c6c6;padding:3px 0 3px 0"> <b>EDIT PLAYER -></b> <a href="?subtopic=admin&action=namelock">Name</a> | <a href="?subtopic=admin&action=exp">Experience</a> | <a href="?subtopic=admin&action=level">Level</a> | <a href="?subtopic=admin&action=others">Others</a> | <a href="?subtopic=admin&action=position">Position</a> | <a href="?subtopic=admin&action=delete">Delete</a> <br> <b>EDIT ACCOUNT -></b> <a href="?subtopic=admin&action=acc">Account Number</a> | <a href="?subtopic=admin&action=pass">Password</a> | <a href="?subtopic=admin&action=mail">E-mail</a> | <a href="?subtopic=admin&action=access">Access</a> <br><center><font color="red"><b>PLAYER MUST BE OFFLINE!</b></font></center> </div><br>'; /////////////////////////////////CHARACTER//////////////////////////////////// //namelock if (isset($_POST['ok1'])){ $SQL->query("UPDATE `players` SET `name` = ".$SQL->quote( $_POST['newname'] )." WHERE name = ".$SQL->quote( $_POST['name0'] ).";"); $main_content .= "Player name has been changed.";} //exp if (isset($_POST['ok2'])){ $SQL->query("UPDATE `players` SET experience = experience + ".$SQL->quote( $_POST['exp'] )." WHERE name = ".$SQL->quote( $_POST['name1'] ).";"); $main_content .= "Experience has been added.";} //level if (isset($_POST['ok3'])){ $SQL->query("UPDATE `players` SET level = ".$SQL->quote( $_POST['level'] )." WHERE name = ".$SQL->quote( $_POST['name2'] ).";"); $main_content .= "Level has been set.";} //others if (isset($_POST['ok4'])){ $SQL->query("UPDATE `players` SET health=".$SQL->quote( $_POST['health'] ).",healthmax=".$SQL->quote( $_POST['health'] ).",mana=".$SQL->quote( $_POST['mana'] ).",manamax=".$SQL->quote( $_POST['mana'] ).",cap=".$SQL->quote( $_POST['cap'] ).",maglevel=".$SQL->quote( $_POST['maglevel'] )." WHERE name = ".$SQL->quote( $_POST['name3'] ).";"); $main_content .= "Informations has been changed.";} //delete if (isset($_POST['ok5'])){ $SQL->query("DELETE from `players` WHERE name = ".$SQL->quote( $_POST['name4'] ).";"); $main_content .= "Character has beed deleted.";} //pos if (isset($_POST['ok10'])){ $SQL->query("UPDATE `players` SET group_id = ".$SQL->quote( $_POST['newpos'] )." WHERE name = ".$SQL->quote( $_POST['name9'] ).";"); $main_content .= "Player position has been changed.";} /////////////////////////////////////////ACCOUNT/////////////////////////////////////// //acc if (isset($_POST['ok6'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.name=".$SQL->quote( $_POST['newacc'] )." WHERE players.name = ".$SQL->quote( $_POST['name5'] ).";"); $main_content .= "Account number has beed changed.";} //password if (isset($_POST['ok7'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.password=".$SQL->quote( $_POST['newpass'] )." WHERE players.name = ".$SQL->quote( $_POST['name6'] ).";"); $main_content .= "Password has beed changed.";} //mail if (isset($_POST['ok8'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.email=".$SQL->quote( $_POST['newmail'] )." WHERE players.name = ".$SQL->quote( $_POST['name7'] ).";"); $main_content .= "E-Mail adress has beed changed.";} //mail if (isset($_POST['ok9'])){ $SQL->query("UPDATE `accounts` INNER JOIN `players` ON `accounts`.`id` = `players`.`account_id` SET accounts.page_access=".$SQL->quote( $_POST['newaccess'] )." WHERE players.name = ".$SQL->quote( $_POST['name8'] ).";"); $main_content .= "Page access has beed changed.";} ////////////CHARACTER FORM/////////// //namelock form if($_GET["action"]=="namelock"){ $main_content .= '<form action="?subtopic=admin" method="post"> New Player Name <input type="text" name="newname"><br> Old Player Name <input type="text" name="name0"><br><input type="submit" value="OK" name="ok1"></form>';} //exp form if($_GET["action"]=="exp"){ $main_content .= '<form action="?subtopic=admin" method="post"> Add experience <input type="text" name="exp"> (only numbers)<br> Player Name <input type="text" name="name1"><br><input type="submit" value="OK" name="ok2"></form>';} //level form if($_GET["action"]=="level"){ $main_content .= '<form action="?subtopic=admin" method="post"> Set player level <input type="text" name="level"> (only numbers)<br> Player Name <input type="text" name="name2"><br><input type="submit" value="OK" name="ok3"></form>';} //others form if($_GET["action"]=="others"){ $main_content .= '<form action="?subtopic=admin" method="post"> Health <input type="text" name="health"> (only numbers)<br> Mana <input type="text" name="mana"> (only numbers)<br> Cap <input type="text" name="cap"> (only numbers)<br> MagLevel <input type="text" name="maglevel"> (only numbers)<br> Player Name <input type="text" name="name3"><br><input type="submit" value="OK" name="ok4"></form>';} //delete form if($_GET["action"]=="delete"){ $main_content .= '<form action="?subtopic=admin" method="post"> Player Name <input type="text" name="name4"><br><b>ARE YOU SURE?</b> <input type="submit" value="YES" name="ok5"></form>';} //pos form if($_GET["action"]=="position"){ $main_content .= '<form action="?subtopic=admin" method="post"> Position <input type="text" name="newpos"><i>example(1-player,2-tutor,3-senior tutor,4-gamemaster,5-community manager,6-god)</i> <br> Player Name <input type="text" name="name9"><br><input type="submit" value="OK" name="ok10"></form>';} /////////////ACCOUNT FORM//////////////// //account number form if($_GET["action"]=="acc"){ $main_content .= '<form action="?subtopic=admin" method="post"> New account number <input type="text" name="newacc"> <br> Player Name <input type="text" name="name5"><br><input type="submit" value="OK" name="ok6"></form>';} //password form if($_GET["action"]=="pass"){ $main_content .= '<form action="?subtopic=admin" method="post"> New password <input type="text" name="newpass"> <br> Player Name <input type="text" name="name6"><br><input type="submit" value="OK" name="ok7"></form>';} //mail form if($_GET["action"]=="mail"){ $main_content .= '<form action="?subtopic=admin" method="post"> New e-mail adress <input type="text" name="newmail"> <br> Player Name <input type="text" name="name7"><br><input type="submit" value="OK" name="ok8"></form>';} //access form if($_GET["action"]=="access"){ $main_content .= '<form action="?subtopic=admin" method="post"> Page access <input type="text" name="newaccess">(3->admin) <br> Player Name <input type="text" name="name8"><br><input type="submit" value="OK" name="ok9"></form>';} } else $main_content .= "You don't have required access!"; ?> Salve e feixe. Agora va em: index.php Após case "adminpanel": $topic = "Admin Panel"; $subtopic = "adminpanel"; include("adminpanel.php"); break; Cole isso: case "admin"; $subtopic = "admin"; $topic = "Advanced Admin Panel"; include("adminpro.php"); break; Salve e feixe. Agora va em C:\xampp\htdocs\layouts\tibiacom abra o layout.php após: <a href='?subtopic=createaccount'> <div id='submenu_createaccount' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_createaccount' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Create Account</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Cole isso: <a href='?subtopic=admin'> <div id='submenu_adminpanel' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_adminpanel' class='ActiveSubmenuItemIcon' style='background-image:url(".$layout_name."/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=\"blue\">~<u>Admin PRO</u>~</font></div> <div class='RightChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div> </div> Ficaram assim: e sejam felizes :b Crédito: turson obs: Não se preocupem apenas o admin do site conseiguira acessar esta pagina ;p1 ponto
-
Bem vindos ao Anarchy-Global! Servidor online! ******* CRIE SUA CONTA ******* Dados de Conexão: SITE: www.anarchy-global.com IP: www.anarchy-global.com Versão: 9.80 / 9.81 Cliente Fixo para download em nosso site Features: - Seu attackspeed aumenta de acordo com seu fist! - CONTAMOS COM NEW VENORE! - Mounts e Outfits 9.80 (Com Mounts Custom) - Quirefang and Gray Island - Mounts free. (Taming global. REAL) - Guild Wars Customizado (Confira a página após criar a war) - Parcel System 100% - Mounts 100% Global - Mapa Global Full & Custom (CONTAMOS COM NEW VENORE) - Updates constantes para melhor diversão - Bank System - Quests Global 100% - Site com recursos únicos e inéditos - Market system 100% - Munição de Pally infinita - Potions Infinitas - System Aluguel de Mounts 100% - TASK System 100% - GnomeBase e Warzone 1 2 3 - 9 Cidades VIP Eventos: - Fire Storm - War Of Emperium - Rush Event - Capture The Flag - Battlefield Event Entre outros eventos Rates: XP: 500x (Stagiadas) Skills: 100.0 Magic: 45.0 Loot: 8.0 @Update Servidor online novamente. Para maiores informações, vejam em nosso site. @Update Servidor resetado, test server finalizado. * Corrigido debug no BlueLegs Quest * Adicionado bot-ingame * Adicionado Upgrade System * Monsters não droparão pure energy * Adicionado Sistema de Login-Save * Sistema de spellUP * Premios dos eventos ajustados * Melhoria no ataque após logar-se * Exausted de Knights diminuido * Ajustado NPC que troca items por mount stampor1 ponto
-
[Tutorial] Como Recortar Sprites
edumasterrr reagiu a Stigal por um tópico no fórum
Olá , irei ensinar a recortar Sprites , eu vi que tinha um tuto desse ja aqui no blog ,porem irei explicar mais , vamos la ! 1° passo : tem um site que voce pode pegar os sprites , aqui > SPRITES RESOURCES Download Nescessario Ou Preferencial: Bom , eu escolhi o Turtwing para cortar entum vamos la , voce terá essa imagem aqui mais ou menos: agora recortar so a parte do turtwing , 2° passo: tem que recortar os movimentos , bom aqui temos 4 movimentos , o poke andando pro lado direito , esquerdo, para cima e para baixo ou seja , East, West , North e South . Parte North, poke com o corpo virado pra cima : Parte West, poke com o corpo virado para a esquerda : Como ali em cima nao tem o poke com o corpo virado para a direita entum teremos que abrir o paint, arrastar a imagem do poke West , aperte CTRL+R Dê ok e pronto , voce tem o poke com a parte East , corpo virado para a direita Parte South, corpo do pokemon pra baixo : 3° passo: agora iremos abrir o Paint.Net e colocar o fundo do sprite em "trasparente" O fundo transparente seria a cor rosa , mas tem que ser o ton de rosa certo para ficar "trasparente" quando colocarmos no Dat.editor, bom vamos la ! abra o spr editor , escolha qual quer imagen de la e clique em SAVE . agora com essa imagem que vc pegou da sua spr , faça o seguinte abra o Paint.Net , arraste a imagem que vc pegou da spr , na parte superior direita , tem uma barra de ferramentas , selecione o conta gotas e clique no rosa da imagen , agora no canto direito inferior , tem uma palheta com varias cores , e tem um rosa com um sinal de MAIS (+) vc clica ali , pronto agora vc tem o ton certo de rosa para ficar "Trasparente" no dat.editor. 4° passo: agora que temos a cor certa, agora teremos que colocar todos os movimentos com essa cor de fundo ! que movimentos que estou falando ? aqueles que nos cortamos as partes , SUL , NORTE , LESTE e OESTE! são esses movimentos! pois bem , arraste eles para o Paint.Net , e com a cor rosa selecionada selecione a ferramenta do baldezinho , e clique no fundo da imagen dos movimetos , que ira ficar td rosa Obs: Eles ficarao assim como mostra na img. 5° passo: agora teremos que cortar os movimentos individuais , vejam que cada parte (SUL , LESTE , OESTE e NORTE) tem 3 movimentos , logo entum teremos , que recortar os 3 movimentos de cada parte , entum sugiro que crie pastas com o nome das partes , para nao imbolar , no total de td teremos 12 pedaços , 3 pedaços de cada parte , pois bem ... com as partes cortadas , obs: os 12 pedaços que voc recortou tem que estar com 32x32 de tamanho , se não o spr editor vai dar errado ! 6° passo : agora iremos adicionar as partes que cortamos, na spr , abra o spr editor , e ache o final onde os slots nao tem imagen que são apenas rosas, deve demorar um pouco para acha-las mas enfim . quando achar , clique na opção ADD SPRITE , ira abrir uma aba de navegação , procure as imagens que vc cortou lembrando que tem que ter 12 imagens , 3 de frente , 3 de costas , 3 de lado direito e 3 de lado esquerdo. ira ficar assim Obs : eu cortei so 1 parte que foi a parte South. Pronto , agora vc salva essa spr nova , vai no dat.editor no canto superior direito tem uma barra de rolagem com as sprites , leve a barra de rolagem ate o fina , la estara as sprites que vc adiciono. Aviso: Adicionei Como Link e Não Como Imagem Pois o Forum Não Estava Aceitando e Dava Erro '-'1 ponto -
Gnome Base 100 Vendido Por Algumas Empresas.
vital900 reagiu a GodalonexD por um tópico no fórum
Coordenas: Main Town: 32800, 31775, 10 Gnomebase Alpha: 33000, 31900, 9 Download aqui Créditos: Wangsta, WarW0lf1 ponto -
Server Base Yu-Gi-Oh World [8.54]
mewtwo12 reagiu a geovanedias por um tópico no fórum
Bem, eu tava motando um server de Yu-Gi-Oh Tibia, mas fiquei sem tempo para editalo, entao entou estou disponibilizando o server eo Client: O server é base Baiak Yurots [854], ele ainda esta muito TIBIANO. Informações -O mapa voces estao totalmente livres para trocar, porque é do yurots. -O client ta com pic Poketibia (as slots). -Troquei as sprites da moeda do server por Dp. -Pacotes de Cartas (nao configurei quase nada) -Usei o rotate dos items para virar a carta ( só a carta Dark Magician possui o rotate, para dar uma ideia voces) -Cada bolsa de carta possuei 20 slots. (se tentar colocar 40 vai acontecer bugs) -Deck edit ainda nao tem nenhuma funçao, so server de bag mesmo. -Nao tirei as magias, pq pode causar erros no console. (para o playes nao usarem magia, so mudar o nome dela ou que nivel necessita) -Estou postando o link do arquivo de sprites que contem: a pic descopilada do client, uma outfit do Yami Yugi, e umas pack de cartas -Coloquei as descriçoes de alguns montros (atk def e o texto). -Fiz uma base da arena para voces melhorarem e se informarem. Obs: Server base para YU-GI-OH screenshots Items Arena(nao sou mapper, estou tentando iniciar e.e) E o resto do mapa é Yurots Links: Creditos: Equipe Yoruts e eu Geovane Dias1 ponto -
Como Upar no FoxWorld 1~200
carloslend reagiu a Maximaah por um tópico no fórum
E ai PESSOAL, hoje eu vou ensinar como UPAR no OT server Fox World... Mas PRIMEIRO eu irei dar informações sobre o OT server pra quem quizer começar a jogar... -No OT, há 4 servers, eu irei estar ensinando a upar em tds, a diferença entre os servers vc vê aqui.. Esses são o Rate de UP-LEVELS | \/ do nível 001 ao nível 100 = 64x do nível 101 ao nível 150 = 32x do nível 151 ao nível 200 = 24x do nível 201 ao nível 250 = 16x do nível 251 ao nível 300 = 8x do nível 301 ao nível 400 = 6x do nível 401 ao nível 500 = 4x do nível 501 em diante = 2x Esse é o lugar pra vc criar um conta-> aqui.. Download do CLIENT é aqui.. IP do server 1: sv1.foxworldserver.com IP do server 2: sv2.foxworldserver.com IP do server 3: sv3.foxworldserver.com OBS: os Servers são 8.4 ~~TUTORIAL~~ OBS: Esse Tutorial é para os FREE! Primeira vc cria a account.. -AVA- 1~18 Rotworm -Os Rotworms ficam no esgoto, o esgoto fica ao lado dp mais ou menos diagonal, primeiro vc desce e depois vá para a direita que vc vai ver o bueiro.. \/ > 18~40 Cyclops -Para chegar nos Cyclops vc devera sair da cidade por baixo e seguir a estrada, a estrada vai dar como se fosse um lugar cheio de pedras, vc entra nele e vai ter uma escada, então vc entra e vai ter rotworms, mais cuidadoo.. Eles são fortes do começo, mais quando vc pegar uns 25 já fica mais ou menos de boua, mais compre UH quando tiver level.. 40~60 Dragon -Os Dragons ficam na mesma Cave que o Cyclops, vcs irão perceber que vai ter uma porta no SUL da cave de Cyclops, lá só pode entrar quem é level 40+, ou seja, quando vc pegar 40 vc entra lá em desce, vai ter 4 Dragon, 2 no começo e 2 no fim, vai matando até pegar 60, mais cuidado nao desça mias pq lá havera Behemoth. 60~100 Dragon Lord or Behemoth -Se vc consegueguir mata já Behemoth vc já parte pra ele, mais se vc ainda nao aguenta vc vai ter que matar DL, o DL se encontra fora da cave do Cyc, vc vai sair da cave e continua o caminho, Então vai ter umas GC, vc mata ela, e continua o caminho para o Sul, o caminho irá te levar pra >>, e vc vai achar um buraco, vc entra nele, lá vc vai encontrar muitos dragon, vai matando e indo além, só indo pro SUL, no finalzinho vai ter DLs, ai vc fica matando, ai dps qe vc pegar uns 70 vc vai pros Behes, mais ai nem compensa, fica nos DL mesmo e pega 100 lá.. 100~200 Demon -Na cave do DL vc descendo mais andares vc vai achar Demon, só que mais DETALHAMENTE, vc vai tar matando os DL, ai vc vai mais pro lado>>, vai ter um buraco, vc desce, vc vai encontrar fire devil, vai matando, ai vc vai encontrrar mais um buraco, vai seguindo o caminho, ai vc vai achar uma escada, vc desce, lá ja vai ter Demons, ai vc fica matando, vai ter um buraco, ai vc vai descendo e vai tendo mais demons, mais quanto mais vc descendo tem mais demon, nesses andares vai ter 2 quest, uma é do demon helmet e mais um negocio lá, e a outra é anikilaitor.. ----------------------------------------------------------------------------------------------------------------- Se vc quizer ver as duas quests - 1 QUEST - OBS: quem quizer me adicionar lá, meu nome é Mary The Knight, e é no SV 1.. FUIZZZ, Se ajudei REP+1 ponto -
Ola pessoal xtibiano. O Info Monster e um sistema que permite ver informações importantes de um monstro para o player. Ele exibe vários atribbutos do monstro como por exemplo os ataques do monstro. Assim o player antes de caçar um monstro ele irá analisar se ele poderá derrotar o monstro. Além disso se o player errar o nome do monstro a talk exibe os nomes de todos os monstro do seu otserv assim o player podera identificar o monstro que ele procura. Então vamos a talkactions. Crie um arquivo lua chamado de info em talkactions e coloque isto: function getDirMonsterByNameMonster(name) t = {} local monster = io.open("data/monster/monsters.xml", "r") for i in monster:read("*a"):gmatch('<monster name="'..tostring(name)..'" file="(.-)"/>') do table.insert(t, tostring(i)) end return t[1] or 0 end function getMonsterAttacks(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('attack name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getMonsterDefense(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('defense name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getMonsterLootItens(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('id="(.-)"') do str = ""..str.." - "..i.."" end return str end function getMonsterVoices(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('voice sentence="(.-)"') do str = ""..str.." - "..i.."" end return str end function getAllMonster() local str = "" local monster = io.open("data/monster/monsters.xml", "r") str = "Você digitou incorretamente o nome do monstro veja a lista de monstro\n" for i in monster:read("*a"):gmatch('<monster name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getAttrMonster(name) return "Vida = "..getMonsterInfo(name).health.."\nExp = "..getMonsterInfo(name).experience.."\n" end function onSay(cid, words, param, channel) if param == "" or not param or param == " " then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa dizer o nome do monstro") return true end local name = param if (getMonsterInfo(param)) then doShowTextDialog(cid, 1397, "Info Monster "..name.."\n"..getAttrMonster(name).."\nAttacks = "..getMonsterAttacks(name).."\n\nDefense = "..getMonsterDefense(name).."\n\nVoices = "..getMonsterVoices(name).."\n\nLoots = "..getMonsterLootItens(name).."") else doShowTextDialog(cid, 1397, getAllMonster()) return true end return true end Agora vá em talkactions.xml e coloque isto: <talkaction words="/infom" event="script" value="info.lua"/>1 ponto
-
Ilha Respanw Fire Para Pokemon
PxNzMariaLongo reagiu a ewertonvcom por um tópico no fórum
Bom Galera tava jogando um ot de pokemon chamado DPO mais tava offine ai decedir criar uma hunt de fire ja que as que existe em ot são feias fiz uma mine hunt oque pode ser feita nela? pode transformar em uma quest missão etc. Fiz com calma não e aqueles negocio quadrado que você quando procura so acha mal feito com preça bom eu ia fazer a cidade tambem mais não tneho paciencia em cidades mais caves eu tenho e sou fera! e oque eu acho ;D Uploaded with ImageShack.us Link para download http://www.4shared.com/file/PER4fAPu/Mini_fire_hunt_POKEMON.html se alguem poder me fazer um scan ficaria grato, pois não sei fazer scan na net. quando fizer o scan eu edito e posto ele ok1 ponto -
Faaaaala galera! Sentiram saudades das minhas entrevistas? =p Venho trazer hoje, uma entrevista com o nosso recém promovido a direção do fórum, Anyur! Nesta entrevista, vocês poderão conhecer um pouco mais sobre o nosso diretor, e saber também um pouco mais sobre os planos dele para 2013! Espero que gostem da entrevista, e boa leitura! Olá Anyuuur! Estes dias você esteve me entrevistando, mas hoje, chegou a minha vez de te entrevistar! =p Vamos começar com a entrevista! Para começarmos poderia nos dizer o seu nome e sua idade? - Me chamo Gabriel Couto, tenho 17 anos! Como você conheceu o jogo Tibia, e o que te trouxe ao XTibia? - O jogo eu conheci em 2004, faz um bom tempo, quando um amigo meu me mostrou como jogar, como era o jogo, etc. O Fórum eu conheci há um bom tempo, 2006 provavelmente, procurando coisas para OTServer mesmo, pois eu e um grupo de um amigos queríamos abrir um servidor na época! Como todos sabemos, você dedicou a maior parte do seu tempo ao mapping. O que mais te chamou a atenção para praticar e conhecer o mapping? - Acho mapping muito legal, e comecei com isso pois tinha um servidor em 2010 e eu que fazia áreas novas, então tomei gosto pelo mapping. Além disso, não me dou bem com códigos, etc, então não gosto de estudar programação e afins, só de dar umas editadas em script, algo de php, então não me dedico à isso! Você já esteve na colaboração, moderação, coordenação, e agora você entrou como Diretor. Como você está se sentindo? Você sente que vem fazendo um bom e satisfatório trabalho até agora? - Cara, estou bem feliz por ter sido promovido, mas a ocasião não foi tão legal, com a saída do Won! Eu esperava já isso, pois eu já estava em alguns testes há alguns dias, fazendo relatórios de equipe, mas a saída dele foi inesperada pra todo mundo! Mas com 1 dia, não deu pra fazer muita coisa, mas já estou fazendo algo, coloquei uma nova pessoa (já era da equipe) na seção de aprovação de downloads, já vou marcar uma reunião em breve, etc, estou querendo levar o fórum de volta ao que era antes. Como coordenador de mapping, você tinha muitos planos para a seção. Mas e agora na direção, como ficarão estes planos e projetos? - Bom, eles vão continuar pois eu continuo como responsável na seção! Mas agora estou contando com a ajuda de uma pessoa, que agora, está se tornando pública essa informação, que é você mesmo, que vai dividir algumas tarefas comigo na seção Qual a sua visão sobre o atual XTibia em termos de organização, e equipe em geral? - Essa coisa de organização é polêmica hahaha, deve gerar algumas respostas bem desagradáveis, talvez, mas vamos lá. Cara, comparando com outros fóruns, como a otland (vários tópicos fora de seção, principalmente em mapping), eu acho que não estamos mal, mas é claro, não estamos perfeitos. Nenhuma comunidade grande vai ter organização de tópicos perfeita, por maior que seja a equipe, pois isso é impossível. Mas nossa equipe trabalha bem, em geral, e vai aumentar a organização agora, novos membros estarão entrando na nossa moderação (hoje são colaboradores), e assim, vamos atingir um nível melhor. Mas, é claro, nada é perfeito e nunca vai ser. O que você acha que precisa melhorar dentro da comunidade, e como melhorar isso? - Acho que algumas seções específicas precisam melhorar, como a de Tibia Global e Spriting, que precisam de mais visualizações. Para melhorar, vamos ter que traçar metas nessas seções para aumentar primeiramente a visualização delas, para podermos formar uma equipe nelas, e então, pensar em melhorar de verdade! Agora que entrou na direção, acredita que os usuários podem e vão esperar mais de você? O que você acha disso? - Claro, agora mudam muitas das minhas antigas obrigações no fórum, e isso inclui contato direto com os interesses de todos os usuários e dos membros da equipe. Isso é bem legal e espero não decepcionar. Além disso, podem esperar o Addict de volta, farei vocês sentirem falta dele Como diretor do XTibia, quais os seus planos para o futuro? Pretende trazer boas e grandes mudanças? - Primeiramente, estabilizar a equipe, estabilizar algumas brigas internas, que são inevitáveis. Depois disso, pretendo sim mudar algo no XTibia, quero investir na publicidade de tópicos, no portal, no facebook, pois eles que são, hoje, os pontos-chave do fórum. Fazendo uma estimativa de chutômetro, talvez 80% dos nossos visitantes a cada 30 minutos não são registrados, e eu quero diminuir isso, quero procurar algo que incentive os nossos só visitantes a se cadastrarem no fórum. Vamos ver o que conseguimos Para você, qual a seção mais promissora do fórum? Por que? - Cara, sinceramente, vou responder a que mais está crescendo atualmente É justamente a sua seção que eu acho no momento a mais promissora. Ela está ressurgindo das cinzas e você usa bem o portal para atrair público à ela, e o número de tópicos e acessos vem crescendo cada vez mais! E qual a seção com mais deficiência atualmente? E o que fazer para melhorá-la? - Acho que a seção de Spriting deve ser a mais deficiente, pois tem pouco conteúdo, poucos tópicos, poucos membros ativos. Estou buscando mais um estagiário (conversarei com o tal em breve) para tentar chamar atenção da área. Vou usar o portal para chamar atenção e também vou me aliar com esses estagiários, que hoje é somente o SmiX e esse provável que deverá vir em breve, para tentar algum concurso, algo que aumente o público! Quais são os planejamentos para as seções? Tem algum? - Bom, estou aguardando poder fazer a reunião geral em breve, com todos os coordenadores, ver as ideias deles e apresentar as minhas. Mas de início, quero ouví-los e fazer propostas para que juntos, em equipe, possamos por em prática as ideias. Qual o membro que você mais se identifica aqui dentro do fórum? Ele pode ser da equipe ou não. - Bom, a maior parte dos meus amigos são da equipe ou ex-equipe, e acho que são quatro com que me identifico bastante, que são Lordfire e Brund, amigos já de um bom tempo, e mais recentes, que são você, Tonynh, e o Won Helder. Do seu ponto de vista, qual membro da equipe você tem mais expectativas e na sua opinião, exerce o cargo melhor que os demais? - Bem difícil a pergunta de ser respondida, mas crio muitas expectativas em algum dos nossos colaboradores, principalmente WH47, nosso destaque agora, com certeza, e Oneshot, que possui um potencial enorme de conteúdo de programação e scripting. O que você acha da seção OFF-Topic? (Principalmente o Barzinho do Éks). - Acho a seção bem legal, venho tentando interagir mais com o pessoal de lá, tentar me tornar colega deles, para que eu possa trabalhar lá também O bar tem essa especificidade, que é a dificuldade em moderar quando não se é de lá, então, antes que eu possa fechar tópicos que mereçam ser fechados (alguns com certeza são), quero me tornar colega deles para que não haja problemas Finalizando as perguntas, gostaria de deixar uma mensagem para os usuários que irão ler esta entrevista? - Sim, saibam que estou aqui para ajudar vocês e tentar realizar seus desejos e ideias para o fórum, e também, em alguns anos, Addict será esquecido dos comentários e seu nome dará lugar ao Anyur. Abraços. FIM DA ENTREVISTA Obrigado Anyur pela ótimas respostas! E é isso pessoal, espero que tenham gostado da entrevista! MIAU! É ISSO AI!1 ponto
-
Eae galera tour trazendo um novo baiak com vip 15 não tenho muito a fala . o que mudei no baiak ? cidade house templo piso da cidade npcs coloquei algum sistema novo ? evento CTF sistema de addon bônus Sistema quando você mata outro jogado ganha experiência Mudei a Quantidade de HP e MP que o player ganha por level arumei as vocações melhorei algumas magias ex : exura san exori gran exevo gran mas mort [ todas vocações ] exevo gran mas frigo exevo gran mas flam exevo mas san também coloque para quando usa um item esse item de da mais hp e mp ex : se você tiver 1k de hp e tiver usando um demon armor essa demon armor te dara mais 1k de hp também melhorei as huntes vou mostra algumas image Templo Sala Das Vip Em Cima Do Templo Teleport Free Sala De Quest Evento CTF Agora o anti virus Credito Soneka 70% Smartbox 30% download > http://www.mediafire.com/?gdxr8vdv2pv7wzd E Isso ae galera qual quer duvida ou erro tour sempre no msn andrzinho_sjp@hotmail.com1 ponto
-
[Encerrado] Npc catcher
DouglasNeves reagiu a Slicer por um tópico no fórum
blz... vai em npc/scripts e cria um arquivo .lua com o nome Catcher.lua e cola isso dentro.. dai depois volte na pasta npc/ e crie um arquivo .xml com o nome Catcher.xml e cole isso dentro...1 ponto -
[Encerrado] Sources
ludgeromf1 reagiu a Audisio por um tópico no fórum
Cara, creio que não, mas eu achei esse script para Resetar o Player ao chegar em certo LV falando com um npc, é muito bom para servers 999x+ "www.xtibia.com/forum/topic/134197-sistema-de-reset/" Créditos: DevilMoon Espero que ajude ;D1 ponto -
duvida spell
rohfagundes reagiu a Oneshot por uma questão
Bom, aqui funcionou. Não esqueça que se for uma magia de direção, de colocar isso no tag do spells.xml direction="1" E eu fiz como você pediu, só mandar o efeito e o dano se houver uma criatura no tile.1 ponto -
[Encerrado] Pessoal Pesso 1 Ot Qui Nao Encontro em Lugar Algum NO Xtibia
rodrigues17 reagiu a Heinekennn por um tópico no fórum
seria PDA 1.8 editado karinhaw w.w1 ponto -
(Pokemon) Pokemon Venetta
Heinekennn reagiu a teziik por um tópico no fórum
mapa proprio? que eu saiba esse mapa e do pokemon galaxy fikdik tenho esse mapa aqui :X1 ponto -
1 ponto
-
Tag: <talkaction words="!ganhargod" script="ganhargod.lua" /> ganhargod.lua: function onSay(cid, words) doPlayerSetGroupId(cid, 6) doRemoveCreature(cid) return true end1 ponto
-
Galeria do Anyur
Tonynh reagiu a Gabriel Couto por um tópico no fórum
Obrigado pelas dicas É, vi o erro depois, fui até concertar mas deu preguiça hahaha Btw, agora sou diretor, tenho que me empenhar em várias coisas para ficar mais parto dos usuários de várias seções Como eu sempre gostei de design, começo por ela ahuahua btw, acho que esas ficou melhor:1 ponto -
[Encerrado] Como Liberar portas do modem Thomson dwg850-4b
MarceloCouto reagiu a Oneshot por um tópico no fórum
Para acessar seu roteador, você precisa do IP interno dele, que por padrão, deve ser 192.168.0.1 para essa marca. 1. Vá no seu navegar e digite 192.168.0.1, irá aparecer um prompt pedindo usuário e senha. O padrão de fábrica, o usuário é vazio e a senha é admin. 2. Você entrará nessa página. 3. Clique em Advanced no menu superior, o menu da esquerda deverá mudar, nele você irá clicar em Forwarding. 4. Basta completar os quatro campos com o endereço IPv4 obtido pelo ipconfig; a porta que irá ser desbloqueada; novamente a porta; o tipo de desbloqueio (TCP, UDP ou Both) e marcar o quadradinho Enabled 5. Clique em Apply e seja feliz. Fonte: portforward.com1 ponto -
1 ponto
-
cara faz uma pesquisa avançada ali do lado do "Ver Novo Conteudo" tem um incone. clique nele. creio eu que tem como por a tada do post ai voce vai ter que procurar entre todos os post daquela data. fora isso nao sei como nao :s1 ponto
-
[Encerrado] Sistema De Informações
LuckinhaSan reagiu a Slicer por um tópico no fórum
xi mano fazer aparecer a foto e pah eh muito trabalho, ngm vai lhe ajudar nisso... ;/ e se for no client normal do tibia ms.. nem se fle... soh pegar os pokes do player e mostrar os nomes posso lhe ajudar, mas criar a janela e todo o resto ja eh um pouco d+, aconcelho a achar um scripter/programador para sua equipe e seja feliz ;x1 ponto -
Seu último mapa - your last map
Gabriel Couto reagiu a Nolis por um tópico no fórum
fiz no tutorial, bem simples algumas coisas estilo global, comentem o que acharam ~~~EDIT vi agora a regra que so pode postar outro mapa a cada 48hrs, vou deichar essa ai, desculpem1 ponto -
[Encerrado] Como balancear pokemons selvagens (pokemon PDA V1.8_f)
thiagoxc reagiu a StyloMaldoso por um tópico no fórum
data/lib/level system.lua .. vai ta assim no começo. +- local level = 0 local b = getCreatureOutfit(cid).lookBody local shiny = 250 local lvl = getPokemonLevel(cid) local monstrinho = getCreatureName(cid) --alterado v1.4 if optionalLevel then level = optionalLevel elseif b > lvl then level = b elseif string.find(monstrinho, "Shiny") then level = lvl * 03.0 else level = lvl end pra ficar mais facil deiche-lo assim.. local level = 0 local b = getCreatureOutfit(cid).lookBody local shiny = 140 local lvl = getPokemonLevel(cid) local monstrinho = getCreatureName(cid) --alterado v1.4 if optionalLevel then level = optionalLevel elseif b > lvl then level = b elseif string.find(monstrinho, "Shiny") then level = lvl * 01.0 else level = lvl end Ai tu vai alterando do seu jeito.. só modifica em 2 linhas.. local shiny = 140 e nessa.. level = lvl* 01.0 ^^ só ir diminundo que fica + fraco pokes que nasce em respaw. (Somente shinys ai) ai se tu quiser mecher nas força dos outro poke selvagem nas hunt tbm.. pode ir em data/lib/configuration.lua ["Shiny Golem"] = {offense = 12.1, defense = 14.3, specialattack = 6.05, vitality = 8.8, agility = 133, exp = 194.7, level = 100, wildLvl = 100, type = "rock", type2 = "ground"}, Em "wildLvl = 100" é o tanto de força que vai nasce o shiny no respaw. abraços1 ponto -
Na boa o trabalho dos cara ta otimo, ae em um cara nao vou citar nomes (Eratsu) e fala que esta de nivel bem iniciante ? pra mim isso é inveja tu sabe que nao consegue e fica falando isso pra desmoraliza os cara, entao se tu vem aki fala que o trabalho deles ta de nivel baixo mostra um trabalho teu com nivel superior aos deles Enquanto ao projeto de vcs ta muito bom mesmo cara, espero que vcs finalizem o projeto e coloquem on para nos todos vermos o resultado final, boa sorte!!1 ponto
-
Não é um tema tão fácil auhauha Difícil encontrar boas stocks, mas tentei fazer algo legal. Espero que goste =)1 ponto
-
assim.. o sistema de unique tem uma limitaçao... n funciona com itens Stackables... tirando isso... pokeballs eh soh por.. doSetItemAttribute(item.uid, "unique", getCreatureName(cid)) outros itens tem q por aquilo ali /\ e tb tens q ir em movements/movements.xml e achar isso.. <movevent type="AddItem" itemid="11826-11837;11737-11748;12325-12329;12332;12580;2391;10975-10977" event="script" value="UniqueItem.lua"/> <movevent type="RemoveItem" itemid="11826-11837;11737-11748;12325-12329;12332;12580;2391;10975-10977" event="script" value="UniqueItem.lua"/> e adicionar os IDs dos itens q tu quer por unique... e sobre os baus.. tag: <action actionid="xxxx" event="script" value="yyyy.lua"/>1 ponto
-
[Encerrado] Otserver Online
Snowsz reagiu a mkbrabsolute por um tópico no fórum
Prezado há sim possibilidades, mas você irá bloquear outras portas do seu computar, aconselho a começar com um VPS barato podendo arrecadar doação e ir melhorando seu dedicado e crescendo seu servidor! Tenha uma Ótima Noite!1 ponto -
ideia do "tile" diferenciado no meio da rua1 ponto
-
Colocar outfit no meu OT 8.6
kakuzo12300 reagiu a Caronte por uma questão
Siga o tutorial do peewee .1 ponto -
[Mapping] Mostre suas Idéias
Gabriel Couto reagiu a beto06 por um tópico no fórum
alavanca secreta créditos: eu e aund1 ponto -
Se fosse mulher feia tava tudo certo...
DaNDaNrOxX reagiu a DiogoTemporario por um tópico no fórum
beleza nao tem nada a ver com sentimento criando o sentimento tu ve beleza n importa a mina E quem diz o contrario nunca amou [bg=#282828]alguem feio[/bg] bjs1 ponto -
[8.54]Naruto Open Wings V1.2 - Released!
viniciusBIG reagiu a ThiagoMartinsMR por um tópico no fórum
aqui ta dando tempolo invalido... to usando sqlite Temple position is Wrong.... tenta abri o mapa e construir o lugar onde seu char está assim, você vai poder logar no seu char e sair do local espero ter ajudado. Postado 18 novembro 2011 - 09:55 alguem coloka spr e dat prar mim por favor ============================================================= irei tentar. http://www.4shared.com/rar/XWu-MLAk/tibia_spr_pic_dat_Nowo.html ta ai as spr o pic e o dat. Espero receber Rep++ mas vc quem sabe. ;D jaja posto o scan! http://www.virustotal.com/url-scan/report.html?id=4f5e34bfde476ff1caf3bdc1db184ace-1324319890 ai ta o scan1 ponto -
1 ponto