Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/23/16 em %
-
Pokemon PDA XTIBIA
Nooob II e um outro reagiu a Lordbaxx por um tópico no fórum
A realidade é que já encheu o saco esse papo. Se não quer postar as sources, pra que cria o tópico dizendo que é open? Isso além de ser vergonhoso é infantil. Toda essa comoção da comunidade em prol de ajudar você com ISSO ai, e você tem coragem de dizer que estão errados em pedir uma coisa que você mesmo disse que teria (as sources)??. Aproveita quando for formatar o PC e formata sua mente junto!! Fica com Deus. Atenciosamente, Douglas!2 pontos -
[PXG]As Novas Remakes.
MaxxSilva e um outro reagiu a NatsuRush por um tópico no fórum
Só recortar as imagens. Bonus:2 pontos -
lua for
samlecter e um outro reagiu a Night Wolf por uma questão
como será essa tabela LOCAIS? ela só terá 100, 200, 300, 400, 500? Pra que que serve esse código? lv seria o level do player?. Você pode fazer assim local loc = LOCAIS[0] for i = 100, 500, 100 do if LOCAIS[i] and lv > i then loc = LOCAIS[i] end end2 pontos -
Boa tarde pessoal, tudo bem? Hoje resolvi fazer um tutorial sobre dois recursos muito simples e úteis na hora de criar magias diferentes, inovadoras e divertidas. Motivação Eu nunca soube fazer spells direito, achava chato e monótono, portanto nunca procurei saber mais. Essa semana, acabei fazendo um evento que a recompensa era uma magia, então quis fazer algo diferente e bonito, que fugisse um pouco do padrão (dê uma olhada em: http://www.xtibia.com/forum/topic/238734-luna-event-bonus-spell-inspirado-no-sot-01/#entry1680858). Só que, na minha busca por aprender mais sobre as spells, eu vi que é um tanto nebuloso a parte de dano e de callbacks. Os tutoriais os utilizam nos scripts demonstrativos mas falam pouco a respeito. Li muito, descobri algumas coisas no empirismo e outras nas sources do TFS e me senti motivado a reunir tudo que encontrei em um tutorial. Importante: Este não é um tutorial que vai ensinar a criar uma spell, existem milhares com esse objetivo aqui no fórum e na internet em geral. O foco aqui é estudar dois recursos que podem tornar o processo criativo de spells muito mais interessante, divertido e único, abrindo possibilidades diferentes do que simplesmente uma magia que solta um efeito e dá dano. Bom, chega de mimimi e vamos ao que interessa. Conceitos Vamos começar definindo nossos dois objetos de estudo. Fórmulas, como o próprio nome já define, são expressões matemáticas usadas para representar algum valor. No nosso caso, as fórmulas de dano das magias são expressões matemáticas que sintetizam e representam o dano da nossa magia. Callbacks são, traduzindo ao pé da letra, funções que ligam de volta. Definindo melhor, são funções que disparam ações quando determinado evento/acontecimento ocorre. Isso é, elas nos dão um retorno a um evento ou chamad. Exemplos: addEvent, é um callback muito útil que dispara com o tempo chamando uma função; onDeath é um callback que dispara quando determinada criatura morre. Uma vez entendido teoricamente o que vamos estudar, mãos a obra. Entendendo Fórmulas O controle das fórmulas de dano das spells é feito pela função setCombatFormula, cuja chamada default é mostrada abaixo: setCombatFormula(combat, formulaType, min_a, min_b, max_a, max_b, min_lvl, max_lvl, min_mlvl, max_mlvl, min_dmg, max_dmg) Combat é o objeto combate em questão, normalmente ele é instanciado no inicio dos arquivos de spells como local combat = createCombatObject(). É esse objeto que controla, a partir de seus parâmetros, toda a dinâmica das spells: efeitos, dano, área, etc. Min_a e Max_a são múltiplicadores das fórmulas de dano máximo e mínimo Min_b e Max_b são números base das fórmulas de dano máximo e mínimo Min_lvl e Max_lvl são ponderadores do level na fórmula de dano máximo e mínimo baseado em ML, dividem o lvl do player. Min_mlvl e Max_mlvl são ponderadores do magic level na fórmula de dano máximo e mínimo baseado em ML, multiplicam o ml do player. Min_dmg e Max_dmg são os limites do dano máximo e mínimo, o menor dano possível é min_dmg e o maior dano possível é max_dmg. formulaType são os diferentes tipos de fórmulas que podem ser usados, isso é, formas diferentes de como os parâmetros de dano que foram passado serão utilizados. Existem três tipos relevantes de fórmulas, existe um quarto chamado undefined ou 0. Porém nele todos os parâmetros são zero. São eles: COMBAT_FORMULA_LEVELMAGIC ou 1 Essa é a fórmula mais completa das três, utiliza de todos os parâmetros para definir o dano máximo e mínimo. Basicamente, a fórmula de dano é Dano mínimo = ((player_level / min_lvl + player_mlvl) * min_mlvl) * min_a + min_b) Dano máximo = ((player_level / max_lvl + player_mlvl * max_mlvl) * max_a + max_b) Se dano mínimo > min_dmg, então dano mínimo = min_dmg Se dano máximo > max_dmg, então dano máximo = max_dmg Considerações importantes, o valor final de dano máximo e dano mínimo deve ser negativo, o mesmo vale para os valores de min_dmg e max_dmg. Portanto, para evitar confusão vai uma dica simples: Sempre coloque min_a, min_b, max_a, max_b, min_dmg e max_dmg negativos e o restante positivo. COMBAT_FORMULA_SKILL ou 2 Mais simples que o anterior, só utiliza em seu cálculo os parâmetros min_b, max_a e max_b. Leva em consideração, como veremos, level, arma e skill (referente à arma que ele estiver empunhando) do player. Min_dmg não serve para esse caso, mas max_dmg ainda vale como no anterior. Dano mínimo = min_b Dano máximo = Dano_Calculado * max_a + max_b Se dano máximo > max_dmg, então dano máximo = max_dmg Aqui Dano_Calculado é o calculo do seu dano com a sua arma, levando em conta seu level e skills. Novamente, o valor final dos danos deve ser negativo. Aqui, use todes os valores negativos e não terá problemas. COMBAT_FORMULA_DAMAGE ou 3 A mais simples das três, leva em consideração somente min_b, que será o dano mínimo e max_b, que será o dano máximo. Para não ter problemas, use valores negativos. A respeito das fórmulas é isso. São as três fórmulas pré-definidas e seus funcionamentos. Callbacks Nosso estudo sobre callbacks vai se basear na função setCombatCallback que faz o controle dos callbacks dos objetos de combate. A seguir, a declaração da função setCombatCallback: setCombatCallback(combat, callbackType, “nome da funcao”) Vamos explicar primeiro o que essa função faz. Ela adiciona ao objeto combat especificado uma função como retorno a um determinado tipo de evento. Cada tipo de callback é referente a um evento e espera da função que você passou como parâmetro alguns parâmetros. Por exemplo, queremos adicionar um callback do tipo X com a função de retorno functionX, sabendo que callbacks do tipo x esperam funções que recebam x1, x2 e x3 como parâmetro. Então temos que definir a função functionX e criar a chamada do callback: function functionX(x1, x2, x3) code end setCombatCallback(combat, X, “functionX”) Acredito que tenham entendido um pouco do funcionamento, agora vou explicar cada tipo de callback. Temos quatro tipos, mostrados a seguir: CALLBACK_PARAM_LEVELMAGICVALUE ou 1 Esse callback é definido para disparar quando o dano é aplicado. Não consegui descobrir exatamente em que momento ele é chamado, mas, quando definido, toda vez que sua magia causa dano ele vai disparar a função para a qual foi programado. Ele é utilizado para reprogramar a forma como o dano vai ser calculado. A grande sacada aqui é que você pode definir as formulas de dano como você bem entender (levando em conta level e ml) e melhor se encaixar ao seu propósito. Esse callback espera funções que recebam os parâmetros: cid, level, maglevel e um retorno com os valores máximos e mínimos de dano. Uma definição para esse callback seria: function functionX(cid, level, maglevel) min = -maglevel*1.1 + level max = -maglevel*2.2 + level*1.1 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, “functionX”) CALLBACK_PARAM_SKILLVALUE ou 2 Similar ao anterior, porém danos com base em skills, esse callback é definido para disparar quando o dano é aplicado. Não consegui descobrir exatamente em que momento ele é chamado, mas, quando definido, toda vez que sua magia causa dano ele vai disparar a função para a qual foi programado. Ele é utilizado para reprogramar a forma como o dano vai ser calculado. A grande sacada aqui é que você pode definir as formulas de dano como você bem entender (levando em conta skills, level, ataque da arma e modo de ataque) e melhor se encaixar ao seu propósito. Esse callback espera funções que recebam os parâmetros: formulaBySkill(cid, level, skill, attack, p, factor) e um retorno com os valores máximos e mínimos de dano. Uma definição para esse callback seria: function functionX (cid, level, skill, attack, factor) min = -(1.2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor) max = -(2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor) return min, max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, “functionX”) Observação importante: no servidor que eu tenho aqui, por algum motivo sobrenatural desconhecido, tem um parâmetro nulo extra entre attack e factor. Então, se você tentar usar isso no seu servidor e der erro “factor attempt to call nil value” ou algo do tipo use isso: function functionX (cid, level, skill, attack, vazio, factor) Nos sources que eu olhei esse parâmetro não existe, não achei nada a respeito dele e ele é sempre 0. Se alguém souber o que ele significa, se ele significar algo, comente ai. CALLBACK_PARAM_TARGETTILE ou 3 Esse callback é definido para disparar quando a magia atinge cada um dos tiles definidos em sua área. Ele pode ter uma diversidade de aplicações, que envolvem customizar efeitos e ações da magia de acordo com o tile que ela atinge. Vai depender da sua criatividade, mas há um leque infinito de coisas que podem ser feitas. Exemplo: Se uma área de neve for atingida por uma magia de fogo, ela descongela e vira um tile de terra ou pedra; se em um dos tiles que a magia acertar houver um item, esse item vai para a bp do player; em determinado tipo de terreno a magia dá um dano extra; e por ai vai. Esse callback espera funções que recebam os parâmetros: cid e tile. Uma definição para esse callback seria: function onTargetTile(cid, tile) addEvent(doSendMagicEffect, x*350, tile, config.effects.hit) End setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") CALLBACK_PARAM_TARGETCREATURE ou 4 Esse callback é parecido com o anterior. Ele é definido para disparar quando a magia atinge um criatura dentro da área de atuação dela. Ele pode ter uma diversidade de aplicações, que envolvem customizar efeitos e ações da magia de acordo com o tipo de criatura (diferentes monstros, se é player ou não, etc) que ela atinge. Vai depender da sua criatividade, mas há um leque infinito de coisas que podem ser feitas. Exemplo: Se um fire elemental for atingido por uma magia de fogo a vida dele aumenta ou um novo fire elemental surge; se o alvo da magia for um player há um dano adicional; se um monstro for atingido por essa magia ele é convencido e passa ate ajudar; e por ai vai Em uma magia como a que eu fiz para o evento luna, por exemplo, que dá vários hits ao longo de uma execução dela, cada hit dispara esse callback. Uma aplicação seria, então, a cada hit há uma chance de congelar e imobilizar o player. Esse callback espera funções que recebam os parâmetros: cid e target. Uma definição para esse callback seria: function onTargetCreature(cid, target) local chance = math.random(1, 18) if getGlobalStorageValue(5545) == -1 and isPlayer(target) and chance == 1 then registerCreatureEvent(target, "NoAtt") registerCreatureEvent(target, "NoSpell") registerCreatureEvent(target, "NoTgt") setGlobalStorageValue(config.storages.event, 1) addEvent(setGlobalStorageValue, 3000, 5545, -1) end chance = math.random(1, 15) if chance == 1 then doSendMagicEffect(getCreaturePosition(target), config.effects.hit) doCreatureSetNoMove(target, true) doSetItemOutfit(target, config.frozen_humans[math.random(1, #config.frozen_humans)], 1500) addEvent(backToMovement, 1800, target) end end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") Bom gente, foi isso o que consegui coletar, entender e aprender sobre as fórmulas de dano e callbacks das magias. Qualquer coisa que queiram acrescentar ou corrigir, fiquem a vontade para comentar. Espero que gostem. Abraços,1 ponto
-
mapa Informações: Dados criatura: Cidade de dados / House: Screenshots: _______________________________ _____________ Alguns problemas Download + Scan Créditos:1 ponto
-
Formando Equipe.
lokoga reagiu a Marco Oliveira por um tópico no fórum
Mini Historia: Ah algum tempo atrás comecei a jogar tíbia global, depois de alguns meses alcancei o tão sonhado lvl 100, foi um pouco demorado mas fui pegando o jeito. Então fui curtir o bom e velho PVP e percebi que meu RP não era o suficiente para druids do mesmo level, o meu gran san é implacável. Então partir para os servidores com RLMap, mas nenhum é fiel ao mapa, sempre possui áreas donates e itens editados. ATÉ OS SERVIDORES ESTÃO SE TORNANDO PAYTOWIN ? Então chega disso tudo. vamos ao que realmente interessa. Um pouco sobre mim: Eu estou na areá de OTServ a algum tempo, mais ou menos desda época de 2008 estou nessa vida. Já coleciono alguns OTServs de sucesso nessa minha jornada, alguns duraram alguns meses mas nenhum realmente vingou. Dai veio a ideia de formular um OTServ serio e que dure tempo o bastante para entrar para historia. Sobre o Projeto: Eu gostaria de formular uma equipe para desenvolver um OTServ que atualize junto com o tibia, assim tendo sempre os novos conteúdos e sendo leal ao global. E que também tenha uma boa host para aguentar no minimo 500/600 players online simultaneamente. Mas para isso vou precisar de uma boa equipe, com mappers e scripter's, de inicio o servidor não é para gerar um luco e sim para pagar ao menos a host, estão tive a ideia de vender alguns addons e quem sabe alguns itens de quest como por exemplo a soft boots. isso pode ser um pouco do PAYTOWIN que eu disse no inicio ? Acredito eu que sim, porem se torna necessário. Se você estiver interessado em entrar para esse equipe basta comentar no tópico ou me mandar um email. (ABAIXO ESTÃO MEUS CONTATOS). Skype: marco.olivers Email: marcomoa@@Hotmail.com1 ponto -
Olá Xtibia.com, Estou aqui para-lhes disponibilizar em torno de 120 Sprites BEM desejadas por todos da autoria do Pokexgames,Motivo da liberação? R:Sou uns (Se não o unico) que traz Sprites da Pokexgames,então resolvi traze-las para vocês. Créditos:Kaleudd(Eu): pela descompilação e liberação. Pokexgames:Pela Criação de todas Spr presente dentro desse pacote. Caso postar em algum outro lugar,postar os créditos a min e a pxg,Obg =) O que contém nesse pacote? R:Corpos,Looktypes e alguns Itens do Halloween da pxg. Umas prints de alguns pokemons e corpses. Download + Scan: Gostou Rep+,quem sabe eu traga mais quando sair novas?1 ponto
-
Serei breve: com esta pequena modificação, o creatureevent onTarget poderá ser executado por monstros. Nas sources do seu servidor, abra o arquivo monster.cpp e procure por: if(it == targetList.end()) { //Target not found in our target list. #ifdef __DEBUG__ std::cout << "Target not found in targetList." << std::endl; #endif return false; } Abaixo deste bloco de código, coloque: CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET); for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it) { if(!(*it)->executeTarget(this, creature)) return false; } Depois, no código da função: void Monster::doAttacking(uint32_t interval) Abaixo de: if(!attackedCreature || (isSummon() && attackedCreature == this)) return; coloque: if(Creature* creature = attackedCreature->getCreature()) { CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET); for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it) { if(!(*it)->executeTarget(this, creature)) { setFollowCreature(NULL); setAttackedCreature(NULL); searchTarget(TARGETSEARCH_NEAREST); break; } } } Exemplo do que pode ser feito com esta alteração: Monstro não atacando jogador com X storagedata/creaturescripts/scripts: local storage = xxx function onTarget(cid, target) if isMonster(cid) and isPlayer(target) and getPlayerStorageValue(target, storage) > -1 then return false end return true end Tag: <event type="target" name="blockTarget" event="script" value="nome_do_arquivo.lua"/> No arquivo .XML do monstro, acima de: </monster> coloque: <script> <event name="blockTarget"/> </script>1 ponto
-
Pokemon Enigma Online (24 hrs)
Lordbaxx reagiu a RodriigoRobson por um tópico no fórum
POKEMON ENIGMA ONLINE - HOST HOSPEDADO NO BRASIL (PING 20 A 50) SEM LAG - 60 MB UPLINK [ATENÇÃO CLIENT ATUALIZADO] - DOWNLOAD CLIENT V2.0 LINK1: http://www.mediafire.com/…/btfp8…/Client+PokeEnigma+v2.0.rar - DOWNLOAD CLIENT V2.0 LINK2: https://mega.nz/… - SITE OFICIAL: https://pokeenigma.blogspot.com/ - COMUNIDADE OFICIAL: https://www.facebook.com/PokeEnigmaOnline/ - Vantagem de VIP ACCOUNT: (Catch + Exp + Boost + VIP Potion + /aloot) - Servidor Ultilizado: Pokemon Uncharted (POUNC) - DUEL POR PARTY (PARECIDO COM PXG) - 680 Pokemons (250 Pokemons Enigmas) Pokes Exclusivos! - 1 a 2 Geraçao - 1 Geração ( 150 Shiny) - 2 Geração (8 Shiny) - Geração Enigmas (250 Enigmas) - 19 Pokes Novos - Torneio System Proprio 3 Modalidades(Prata/Ouro/Bronze) - Loteria adicionado - Mega-Task (Proprio Separados por Elementos e Automatico) - Auto loot - Vip adicionado - Evento Invasao 100% - Evento Torneio 100% 3 Modalidades (Prata/Ouro/Bronze) - Evento Golden Arena 100% - Evento BattleField 100% - Evento DeathMatch 100% - Npc Teleport QUESTS e OUTLANDS - PVP SYSTEM POR LAVANCA (COM SCORE) - PVP TEAM (COM SCORE) - Pokemon Passivo (c++) - Boost Vip (Dobrando a Força) +80 - Boost Free +50 - Reset System (influenciando na Força dos Pokes) - Win e Lose Score (influenciando na Força dos Pokes) - Cassino System (Podendo Trocar por Ditto/Porygon/Eevee) - 5 Balls (Pokeball/GreatBall/SuperBall/UltraBall/MasterBall) - Respawn Status Random (Respaw dos Status dos Pokemons Aleatorio) - Pokemons Balanceado - Respawn Status Aleatorio (Algums Pokemons vao Nascer com Status Mais Fortes) - Pokemon Collector - Rare Candy - Potions/Revives/Medicine - Surf e Fly e Ride - Nick System 100% - Pokemon Passivo e Agressivo 100% - Pokedex 100% - Aura System 100% - Goback system 100% - Duel System 100% (Por Party) - Order 100% - Catch Channel 100% - Catch System 100% - Travel System 100% - Evolution 100% - Boost Machine 100% - Gym System 100% - Clan System 100% - Fishing System 100% - Teleport System 100%1 ponto -
Pergaminho de Xp
kaleudd reagiu a luizmachado1 por um tópico no fórum
Testado Base:Bolz v2.5 Script By luizmachado1 1-PRIMEIRO SCRIPT AQUI NO XTIBIA PERGAMINHO DE LEVEL. VAMOS LÁ 1-CRIAR 1 ARQUIVO COM NOME Item.lua ------------Script-By-Luizmachado1----------------- function onUse(cid, item, frompos, item2, topos) level_cid = 100 doPlayerSendTextMessage(cid, 19,"[PERGAMINHO 100%] VC GANHOU 100 LEVEL.") doPlayerAddLevel(cid, level_cid) doRemoveItem(item.uid) end Essa Script Serve Para Adicionar Level Quando da 1 click no item quer vc escolher 2- adicionar a tag no actions.xml tag <action itemid="item_id" event="script" value="Item.lua"/>1 ponto -
/commands para TFS 1.1
Felipe Moraes reagiu a kaleudd por um tópico no fórum
instalação: Em talkactions.xml adicione: <talkaction words="/commands" script="commands.lua" /> Em talkactions/scripts crie um arquivo chamado commands.lua e adicione: function onSay(cid, words, param) local p = Player(cid) local file = io.open("data/talkactions/talkactions.xml", "r+") local str = "" local text = "" for line in (file:lines()) do str = str.."\n"..line end file:close() for a in string.gmatch(str, '<talkaction words="(.-)"') do text = text..'\n'..a end p:showTextDialog(2160, text) return true end como funciona: créditos: Snowsz1 ponto -
[Tutorial] Como editar texto em .lua com acentos ortográficos.
Sertthoon reagiu a Lord Stryton por um tópico no fórum
Fala galera, sou o [ADM]Harlock do Pokémon Underwater, e hoje vim mostrar a vocês como por acentos quando estiver editando seus scripts. Por exemplo: Você vê; Você está vendo; Está carregando, Pokémon. 1- Primeiro baixe o Notepad ++ (Clique aqui) Escolha um Script para editar: local pokes = { ["Charmander"] = {level = 16, go = "Vai Charmander", back = "Volte Charmander."}, ["Charmeleon"] = {level = 35, go = "Vai Charmeleon", back = "Volte Demon."}, ["Charizard"] = {level = 75, go = "Vai Dragon Lord", back = "Volte Dragon Lord."}, ["Mewtwo"] = {level = 8, go = "Vai Mewtwo", back = "Volte Mewtwo"}, } local msgunica = false function onUse(cid, item, frompos, item2, topos) local maxh = tonumber(getItemAttribute(item.uid, "poke"):match("/(.+)]")) local health = tonumber(getItemAttribute(item.uid, "poke"):match("%[(.-)/")) if item.itemid == pokeout then if health ~= nil and health <= 0 then return doPlayerSendCancel(cid, "Seu pokémon está desmaiado.") end if #getCreatureSummons(cid) >= 1 then for _,z in pairs(getCreatureSummons(cid)) do if getItemAttribute(item.uid, "poke"):find(getCreatureName(z)) then doTransformItem(item.uid, pokein) if msgunica then doCreatureSay(cid, "Volte, " .. getCreatureName(z), TALKTYPE_ORANGE_1) else doCreatureSay(cid, pokes[getCreatureName(z)].back, TALKTYPE_ORANGE_1) end doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke"):sub(1, findLetter(getItemAttribute(item.uid, "poke"), ".")) .. " HP = ["..getCreatureHealth(z).."/"..getCreatureMaxHealth(z).."]") setPlayerStorageValue(cid, 61204, 0) doSendMagicEffect(getCreaturePosition(z), 10) return doRemoveCreature(z) end end end elseif item.itemid == pokein then if not canSummon(cid) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHROOM) end if getPlayerStorageValue(cid, 63215) >= 1 then return doPlayerSendCancel(cid, "Você não pode usar seu pokémon enquanto estiver surfando.") end if getPlayerStorageValue(cid, 62314) >= 1 then return doPlayerSendCancel(cid, "Você não pode usar seu pokémon enquanto estiver voando.") end if getPlayerStorageValue(cid, 59987) >= 1 then return doPlayerSendCancel(cid, "Você não pode usar seu pokémon enquanto estiver montando.") end for i,x in pairs(pokes) do if #getCreatureSummons(cid) >= 1 then return doPlayerSendCancel(cid, "Você já chamou um pokémon..") end if i == getItemAttribute(item.uid, "poke"):sub(9, findLetter(getItemAttribute(item.uid, "poke"), "'")-1) then if getPlayerLevel(cid) >= x.level then pk = doSummonCreature(i, getThingPosition(cid)) doConvinceCreature(cid, pk) setCreatureMaxHealth(pk, tonumber(getItemAttribute(item.uid, "poke"):match("/(.+)]"))) doCreatureAddHealth(pk, maxh) doCreatureAddHealth(pk, health-maxh) doTransformItem(item.uid, pokeout) if msgunica then doCreatureSay(cid, "Vai, " .. i, TALKTYPE_ORANGE_1) else doCreatureSay(cid, x.go, TALKTYPE_ORANGE_1) end doItemSetAttribute(item.uid, "poke", getItemAttribute(item.uid, "poke"):sub(1, findLetter(getItemAttribute(item.uid, "poke"), "."))) doSendMagicEffect(getCreaturePosition(pk), 10) setPlayerStorageValue(cid, 61204, 1) registerCreatureEvent(pk, "DiePoke") registerCreatureEvent(cid, "PlayerPokeDeath") registerCreatureEvent(cid, "LogoutPoke") break else doPlayerSendCancel(cid, "Você precisa ser level "..x.level.." ou maior para usar este pokémon.") end end end end return TRUE end 2- Agora na parte superior do seu Notepad. "Formatar" e Escolha Codificação em ANSI Print: E pronto, edite com acentos Ortográficos e salve! [ADM] Harlock1 ponto -
Bem útil e simples. Legal pra quem ta começando ver exemplo de acesso de arquivo em lua. Valeu, Abraços.1 ponto
-
Pokemon Enigma Online (24 hrs)
RodriigoRobson reagiu a Lordbaxx por um tópico no fórum
Sempre desconfiei do POUNC, é um baita servidor (pra quem consegue trabalhar com ele), parabéns pelo projeto, curti.1 ponto -
1 ponto
-
1 ponto
-
pokemon moves.lua (data/lib): areas.lua: ionDelugeArea = { {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 2, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0} } exp2.0.lua (data/creaturescripts/scripts): Abaixo de: local damageCombat = combat Coloque: if getPlayerStorageValue(attacker, 2919) > os.time() then damageCombat = ELECTRICDAMAGE end No mesmo arquivo, abaixo de: if isSummon(attacker) and getPlayerStorageValue(getCreatureMaster(attacker), 86228) >= 1 then valor = valor*getClanPorcent(getCreatureMaster(attacker), combat, "atk") elseif isSummon(cid) and getPlayerStorageValue(getCreatureMaster(cid), 86228) >= 1 then valor = valor - (valor*getClanPorcent(getCreatureMaster(cid), combat, "def", pokes[getCreatureName(cid)].type, pokes[getCreatureName(cid)].type2)) end Coloque:1 ponto
-
Cara, você não está usando a PokéDex numa corpse. Está usando no asfalto.1 ponto
-
Troque: if not isCreature(item2.uid) then local name = getItemNameById(item2.itemid) if name:find("fainted") then name = doCorrectPokemonName(name:gsub("fainted ", "")) if isOutlanderPokemon(getCreatureName(item2.uid)) then return false end if pokes[poke].dex then if getPlayerStorageValue(cid, pokes[poke].dex) <= 0 then local exp = pokes[poke].level * rate doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..getCreatureName(item2.uid).." in your pokedex!") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have gained "..exp.." experience points.") doSendMagicEffect(getThingPos(cid), 210) doPlayerAddExperience(cid, exp) setPlayerStorageValue(cid, pokes[poke].dex, 1) doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8)) else doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8)) end end end return true end por: if not isCreature(item2.uid) then print("Usou em item.") local name = getItemNameById(item2.itemid) print("Nome do item: "..name) if name:find("fainted") then name = doCorrectPokemonName(name:gsub("fainted ", "")) print("Nome do pokemon: "..name) if isOutlanderPokemon(getCreatureName(item2.uid)) then return false end if pokes[poke].dex then print("Esta na tabela.") if getPlayerStorageValue(cid, pokes[poke].dex) <= 0 then local exp = pokes[poke].level * rate doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..getCreatureName(item2.uid).." in your pokedex!") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have gained "..exp.." experience points.") doSendMagicEffect(getThingPos(cid), 210) doPlayerAddExperience(cid, exp) setPlayerStorageValue(cid, pokes[poke].dex, 1) doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8)) else doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8)) end end end return true end E informe o que for imprimido no console.1 ponto
-
Saberia dizer se as corpses dos pokémons do seu servidor são "defeated pokemon_name" ou "fainted pokemon_name"? Eu não pretendia adaptar o código para outras bases diferentes da que usei, mas vou abrir uma exceção.1 ponto
-
Aparentemente a versão do PDA que você usa não é a mesma que a minha. Tente assim: Se der algum erro na distro, por favor, avise.1 ponto
-
Você tem que configurar um por um, da seguinte forma: ir na pasta "data/monsters/pokes/Geracao 1/", por exemplo (pode variar em "Geracao 1", "Geracao 2", e "Shiny"), abrir o arquivo de seu pokémon, e na parte onde está "<attacks>", você vai mudando o ataque que você quiser. Se quiser diminuir o spam, você meche em "interval" (exemplo: se o interval está em 5000, quer dizer que a cada 5 segundos ele tentará usar o ataque) e em "chance" (exemplo: se a chance está em 20, quer dizer que a cada vez que ele for tentar usar o ataque, que está determinado no interval, ele terá uma chance de 20% de usá-lo).1 ponto