Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/15/13 em todas áreas

  1. Fir3element

    Wisland - RadBR

    A cidade foi feita pela equipe do RadBR, só estou postando pra vocês =P Falta um pedaço do castelo e da quest dos 10k, mas o resto está completo. Posição do templo: 543, 521, 7 Download: http://www.mediafire...glx7v2akja3y7e2 Scan: https://www.virustot...sis/1371140684/ wisland.rar
    2 pontos
  2. Olá xtibianos! Acredito que esse seja meu primeiro tutorial feito por mim mesmo aqui no fórum, espero que gostem e aprovem Rep + Introdução: Nesse tutorial, vou lhes ensinar como instalar e configurar o sistema de PagSeguro automático, para que quando o pagamento for Aprovado pelo PagSeguro, o sistema entregar os pontos automaticamente. Testado e funcionando em Gesior e Modern Acc. Funciona para qualquer versão de Tibia, desde que seja em MySQL. Quando você for testar, pode acontecer que os pontos sejam entregues com um atraso de no máximo 5~10 minutos depois de Aprovado o pagamento, porém, geralmente os pontos são entregues NA HORA do Aprovado pagamento. Instalação: Primeiramente vamos adicionar uma tabela na sua DataBase do MySQL, Executem esta query para criar a tabela: Feito isso, vamos editar ou adicionar se você já não tiver, essas linhas no seu htdocs/config/config.php : Depois, vamos adicionar essas linhas no seu htdocs/index.php : Agora, troque todo o seu htdocs/shopsystem.php (pode variar, mas no gesior geralmente é shopsystem.php)por este: Também troque todo o seu htdocs/donate.php (pode variar, mas no gesior geralmente é donate.php) por este: Agora, crie um novo arquivo .php com o nome pag_retorno.php com este conteúdo: Por último mas não menos importante, entre no site do PagSeguro e logue, após logar, vai aparecer várias opções na parte inferior do site do PagSeguro, clique em "Retorno Automático". Nesta página, é onde você gera o seu Token PagSeguro e configura sua URL de retorno. Você deve ativar a URL de retorno, e colocar este link na URL de Retorno: Pronto, já está tudo OK, agora vou ensinar como configurar algumas partes de alguns arquivos que citei acima. Configuração Adicional: Depois que você já alterou as informações no config.php no que é pedido, algumas alterações devem ser feitas também no arquivo htdocs/pag_retorno.php : (não esqueça de editar as partes que pedem informações sobre usuario, senha, nome db do MYSQL) 1 - Nas linhas: Você deve alterar o que está sendo pedido, e no "127.0.0.1", se você usa seu site no mesmo PC ou Dedicado/VPS que o seu Server, pode deixar "127.0.0.1" mesmo, se não (no caso de usar domínio), deve colocar ali o seu IP Externo Numérico do Server. 2 - Nas linhas: Esta parte é a que entrega os pontos automaticamente pra account, se você tem algum tipo de promoção no seu server, deve alterar aqui conforme sua promoção, exemplo: Se você tem a promoção de Double Points no seu Server, deve alterar: Por este: Para que os pontos sejam DOBRADOS na hora de entregar automaticamente, entendeu? Bom Galera, é isso aí, espero que gostem. Dúvidas, Sugestões ou Críticas, postem aqui para que eu possa atender a todos. Créditos: Tutorial feito 100% por mim (Lucas502 - xtibia.com) Te Ajudei? Então REP+ aew! EDIT: Adicionados Spoilers para melhor visualização do tópico.
    1 ponto
  3. Fir3z

    Exori Bong - Sugar Vida do Target

    Bom, eu tinha criado um sv, mas tive que parar por não ter retorno... criei vários scripts, magias, mapas, etc... pra não ficar tudo parado vou disponibilizar algumas coisas feitas por mim Demorei pra fazer esse script, ele podia estar bem mais simples (mas não sei como fazer isso, assim funciona... então XD) Oque faz: Essa magia simplesmente rouba a vida do target e te da a mesma vida, tinha feito isso para um knight, então os efeitos estão para knights... é só trocar caso queira (: Imagemzinha básica da magia funcionando Exori Bong.lua: function onCastSpell(cid, var) local playerpos = getCreaturePosition(cid) local target = getCreatureTarget(cid) local trapos = getCreaturePosition(target) local level = getPlayerLevel(cid) local numero1 = (level*1.5) -- Dano Mínimo local numero2 = (level*2.5) -- Dano Máximo for i = numero1, numero2 do levelz = (math.random(numero2)) end doCreatureAddHealth(target, -levelz) doSendAnimatedText(trapos, levelz, 180) doCreatureAddHealth(cid, levelz) doCreatureAddMana(cid, -300) -- Quanto Vai Gastar de Mana doSendMagicEffect(trapos, 9) doSendMagicEffect(playerpos, 12) doSendDistanceShoot(trapos, playerpos, 40) return TRUE endspells.xml: <instant name="Exori Bong" words="exori bong" lvl="80" mana="300" prem="1" range="3" needtarget="1" blockwalls="1" needweapon="1" exhaustion="2000" needlearn="0" event="script" value="attack/exori bong.lua"> <vocation id="4"/> <vocation id="8"/> </instant>Espero que gostem da mágia
    1 ponto
  4. Olá caro amigos do XTibia. Venho aqui apresentar pra vocês no momento a melhor REV 3884 100% works. Quando eu digo 100% works, são todos os bugs e erros fixados, apresentamos os seguinte conteúdo nessa REV: - Fix/Patch Hotkey que pode haver lag/freeze no servidor. - Limite de peso de items no Mailbox 5000oz. - Anti-Push Enable 1sec. - PushTime Enable 1sec. (config.lua mudar pushCreatureDelay = 1 * 1) - Anti-Divulgação 100% (Não pode enviar links nem com espaço (ex: www .site. com)). - Anti-Clone items NPC (Hotkey Elfbot Patched/Fixed) - Proteção para jogador não levar debug. - Anti-Lag (correções na REV 0.4 , 0% de erros ao compilar) - Fix/Patched server closed connection MySQL. - Level e Vocação apareçem na tela de Login. - Auto Attack + Runa + Spells ao mesmo tempo. (Não tem exhaust É UM BUG DA REV 3884 CORRIGIDO POR MIM) - All hits works 100% players/monsters - Script já incluso na source para não ser banido da OTServlist.org Protocolo: 8.60 Tipo de Distro: CONSOLE E outras coisas que não me lembro por colocar, mais enfim, é a REV 3884 mais segura que eu fiz no momento... Essa versão é FREE, vou fazer mais atualizações, porém não vou postar, então usem e abusem dessa ultima atualização! Crio qualquer tipo de Distro com Dual Weapons, ou qualquer outro comando a escolha ( skype: igorp999 ) Downloads: Download (pasta data caso queira passar seu TFS para 0.4) http://www.sendspace.com/file/qjekej ATENÇÃO: Tome cuidado ao passar, peça a alguem experiente, pois podera bugar e parar o funcionamento de vários scripts do teu ATS. Distro atualizada 08/06/2013 (more bugs fixed) http://www.sendspace.com/file/d8rlf9 Distro atualizada (COM WAR SYSTEM) 08/06/2013 (more bugs fixed) http://www.sendspace.com/file/kcsite Dlls da distro: http://www.sendspace.com/file/2xyu6q Scans: Dlls.rar https://www.virustot...sis/1370769175/ data.rar https://www.virustot...sis/1370769136/ Distro IgorPereira.exe https://www.virustot...sis/1370769123/ Distro IgorPereira.exe (WAR SYSTEM) https://www.virustot...sis/1370790278/ WAR SYSTEM Se baixou com WAR SYSTEM leia abaixo como terminar a instalação. Execute essa SQL em sua database. CREATE TABLE IF NOT EXISTS `guild_wars` ( `id` INT NOT NULL AUTO_INCREMENT, `guild_id` INT NOT NULL, `enemy_id` INT NOT NULL, `begin` BIGINT NOT NULL DEFAULT '0', `end` BIGINT NOT NULL DEFAULT '0', `frags` INT UNSIGNED NOT NULL DEFAULT '0', `payment` BIGINT UNSIGNED NOT NULL DEFAULT '0', `guild_kills` INT UNSIGNED NOT NULL DEFAULT '0', `enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `status` (`status`), KEY `guild_id` (`guild_id`), KEY `enemy_id` (`enemy_id`) ) ENGINE=InnoDB; ALTER TABLE `guild_wars` ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`; CREATE TABLE IF NOT EXISTS `guild_kills` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `guild_id` INT NOT NULL, `war_id` INT NOT NULL, `death_id` INT NOT NULL ) ENGINE = InnoDB; ALTER TABLE `guild_kills` ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0; Entre na pasta do seu OTServ/data/talkactions/talkactions.xml <talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/> <talkaction words="/balance" channel="0" event="script" value="balance.lua" desc="(Guild channel command) Balance management."/> Crie um arquivo dentro da scripts na talkactions chamado "WAR.LUA" talkactions/scripts/war.lua function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0) return true end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0) return true end local enemy = getGuildId(t[2]) if(not enemy) then doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0) return true end if(enemy == guild) then doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0) return true end local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy) if(tmp:getID() ~= -1) then enemyName = tmp:getDataString("name") tmp:free() end if(isInArray({"accept", "reject", "cancel"}, t[1])) then local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild if(t[1] == "cancel") then query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy end tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0") if(tmp:getID() == -1) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end if(t[1] == "accept") then local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment") _tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0) return true end db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild) end query = "UPDATE `guild_wars` SET " local msg = "accepted " .. enemyName .. " invitation to war." if(t[1] == "reject") then query = query .. "`end` = " .. os.time() .. ", `status` = 2" msg = "rejected " .. enemyName .. " invitation to war." elseif(t[1] == "cancel") then query = query .. "`end` = " .. os.time() .. ", `status` = 3" msg = "canceled invitation to a war with " .. enemyName .. "." else query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1" end query = query .. " WHERE `id` = " .. tmp:getDataInt("id") if(t[1] == "accept") then doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD) doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY) end tmp:free() db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE) return true end if(t[1] == "invite") then local str = "" tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)") if(tmp:getID() ~= -1) then if(tmp:getDataInt("status") == 0) then if(tmp:getDataInt("guild_id") == guild) then str = "You have already invited " .. enemyName .. " to war." else str = enemyName .. " have already invited you to war." end else str = "You are already on a war with " .. enemyName .. "." end tmp:free() end if(str ~= "") then doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0) return true end local frags = tonumber(t[3]) if(frags ~= nil) then frags = math.max(10, math.min(1000, frags)) else frags = 100 end local payment = tonumber(t[4]) if(payment ~= nil) then payment = math.max(100000, math.min(1000000000, payment)) tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0) return true end db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild) else payment = 0 end local begining, ending = os.time(), tonumber(t[5]) if(ending ~= nil and ending ~= 0) then ending = begining + (ending * 86400) else ending = 0 end db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");") doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE) return true end if(not isInArray({"end", "finish"}, t[1])) then return false end local status = (t[1] == "end" and 1 or 4) tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status) if(tmp:getID() ~= -1) then local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id") tmp:free() doGuildRemoveEnemy(guild, enemy) doGuildRemoveEnemy(enemy, guild) db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end if(status == 4) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1") if(tmp:getID() ~= -1) then if(tmp:getDataInt("end") > 0) then tmp:free() doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id") tmp:free() db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end Crie um arquivo dentro da scripts na talkactions chamado "BALANCE.LUA" talkactions/scripts/balance.lua local function isValidMoney(value) if(value == nil) then return false end return (value > 0 and value <= 99999999999999) end function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(guild == 0) then return false end local t = string.explode(param, ' ', 1) if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then if(t[1] == 'pick') then local money = { tonumber(t[2]) } if(not isValidMoney(money[1])) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end money[2] = result:getDataLong('balance') result:free() if(money[1] > money[2]) then doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0) return true end if(not db.executeQuery('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then return false end doPlayerAddMoney(cid, money[1]) doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0) else doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0) end elseif(t[1] == 'donate') then local money = tonumber(t[2]) if(not isValidMoney(money)) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end if(getPlayerMoney(cid) < money) then doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0) return true end if(not doPlayerRemoveMoney(cid, money)) then return false end db.executeQuery('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;') doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0) else local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0) result:free() end return true end Passo IMPORTANTE: Crie um arquivo chamado "101-war.lua" na pasta data/lib WAR_GUILD = 0 WAR_ENEMY = 1 WARINFO_LIMIT = 2 Agora em creaturescripts/scripts/start.lua ou init.lua adicione: db.executeQuery("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (os.time() - 2 * 86400) .. ";") db.executeQuery("UPDATE `guild_wars` SET `status` = 5, `end` = " .. os.time() .. " WHERE `status` = 1 AND `end` > 0 AND `end` < " .. os.time() .. ";") Sistema 100% Funcionando, enjoy @TESTEM E COMENTEM & REP ++. Thank you. Abraços, boa utilidade a todos.
    1 ponto
  5. Djonga

    Anti-Nuker {Uploaded By: LordJanden}

    Eae galera do XTibia Vim trazer um Anti-Nuker O trabalho dele é proteger as portas que seu OT usa, evitando que o seu OT caia por causa de jogadores que "Nukaram" seu servidor. Ele também grava o log, para se por acaso seu servidor cair, você possa saber os motivos. Além de muuuitas outras funcionalidades. Download Disponibilizarei o Scan, porém deu que tem um virús, que meu Anti-virús não detectou, más , tá aê. Scan PrintScreen Ajudei? REP+ pô.
    1 ponto
  6. Fir3element

    Distro 8.6

    http://prdownloads.sourceforge.net/devpaks/openssl-0.9.8a-1cm.DevPak instala com o packmanager
    1 ponto
  7. Slicer

    Action de Bêbado.

    /\ soh eu achu q esse cara quer aumentar os posts fazendo essa droga de comentario? reportou? blz... nao precisa ficar comentando toda vez q faz isso --' tao bom quando n se tem mods num forum n? achu q metade dos posts deles sao desse tpw... ¬¬
    1 ponto
  8. math.floor(exhaustion.get(cid, storage) / (3600))
    1 ponto
  9. zandro3210

    Criar Casas No Rme

    Rme Iniciante É meu primeiro tutorial,criticas e sugestões a vontade.Vamos Começar 1ºProgramas Utilizados Rme(Site Oficial)Caso você use 8.60,e tem problemas aqui vai um Tutorial do felipitovis 2ºApós entrar no Rme com o Mapa Aberto Crie Uma Casa de sua preferencia 3°exemplo:Caso o Local da Casa é Uma cidade nova que você criou Aperte Alt+t"Para registrar a cidade nova" aparecerá Imagem abaixo \/ *Clique add Aparecerá Unnamed Town coloque o nome de sua cidade em baixo tem temple position coloque o local do templo e de Ok 4ºAgora vá lá em cima tem file,edit... clique em Window e depois House Palette Aparecerá como posso dizer...janela procure pelo nome da cidade que você colocou,o nome da minha cidade é Roma agora lá embaixo você clica add e editar 5º name coloca o nome da house exemplo "House 1" *Rent/Id deixe 0 mesmo xD *não clique no Guildhall e de Ok 6ºo Final Preste atenção para não errar Casa Esquerda é Antes Casa Direita é Depois na frente da porta da casa direita tem uma mancha de agua mais não deu pra ver muito bem (Desculpas =/ ) Va em add House tile,coloque em toda a House até na porta Depois clique Select Exit e coloque na frente da porta da sua House Pronto Lembrando que o House tile quando coloca fica uma cor diferente é poco mais é notavel e quando coloca Select Exit na frente da porta fica uma mancha de agua Se Gostou REP+ Bônus Preço da House (Mini Tutorial) Vá na Pasta do seu Otserv e entre no arquivo Config.lua Aperte Control + F e Digite "Houses" Aparecerá Provavelmente isso a baixo caso não é só dar uma procurada -- Houses buyableAndSellableHouses = true // (comprar e vender casas dentro do jogo) houseNeedPremium = true // (necessitar de premium para comprar casa) bedsRequirePremium = true // (necessitar de premium para usar cama) levelToBuyHouse = 75 // (nível para comprar casa) housesPerAccount = 0 // (acredito que seja uma casa por char assim) houseRentAsPrice = false housePriceAsRent = false housePriceEachSquare = 1000 // (Cada SQM equivale a 1k. Para mudar modifique o número) houseRentPeriod = "never" // (quem compra a casa nunca perde) houseCleanOld = 0 // (acho que esvazia depois de um certo tempo) guildHalls = false // (alguma coisa a ver com guild house o/) Explicação Cada Sqm vale pelo informação Acima 1000gp ou seja 1k Observe>>-- housePriceEachSquare = 1000 SQM é cada quadradinho Conclusão se sua casa tiver 10 Sqm e estiver com a mesma configuração que a minha,essa casa valerá [10x1000=10000] Resposta 10000gp ou 10k Legenda True Quer Dizer SIm False Quer Dizer Não Creditos:zandro32 Pra quem eventou o Rme (É necessario eu por isso ? ) felipitovis 139(Pela Otima Sugestão ) Ps:Comentar faz Bem
    1 ponto
  10. Slicer

    Action de Bêbado.

    oia... nao me dou bem com conditions mas... ve ae... local time = 15 --sem seg local condition1 = createConditionObject(CONDITION_DRUNK) setConditionParam(condition1, CONDITION_PARAM_TICKS, time*1000) function onUse(cid, item, frompos, item2, topos) doAddCondition(cid, condition1) return true end
    1 ponto
  11. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk veio tu eh retardado soh pode... nao tem como eu me conter... vai estudar e aprender alguma coisa vai... nao sabes de nd e fica ae flando bosta... eh ngm vai te ajudar ms... ot-adm de merda... ps: eu ajudo quem eu quero... e vc n esta na lista ps²: tu n sabe nem reconhecer a porra do sistema q tu quer... se mata...
    1 ponto
  12. Pokerangers

    [Encerrado] Bug

    Bom, Aparentemente, é a localização do Templo, Só interpretar esse Bug, Temple Position is wrong. Contact with the administration Posição Temple está errado. O contato com a administração Verifique isso, ou tente ir no Sqlite no seu Server, e mudar a localização do player, Coloque sua acc no templo, e muda a localização do player para uma igual a sua, Tente isso, Abraço
    1 ponto
  13. HeelNox

    Naruto Shinobi Life !

    Minato = 300 Kisame = 500 Nagato = 216 Madara = 209 (Madara esta fraco .) Obito = 400 Comandos Tente /tsui open Tente /ctf open ou Start
    1 ponto
  14. local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 17) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, 20, 5, 20, 5) arr1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 3, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } local area1 = createCombatArea(arr1) setCombatArea(combat1, area1) local function onCastSpell1(parameters) doCombat(parameters.cid, parameters.combat1, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var, combat1 = combat1 } addEvent(onCastSpell1, 100, parameters) return TRUE end
    1 ponto
  15. Fir3element

    Retirando level do look

    ja vi 3 sistemas igual esse pela net.. de próprio n tem nada sakosap @jake1 pra fazer isso tem que editar o client e as source
    1 ponto
  16. Slicer

    Potion Healando o Chão

    altera essa parte... function onUse(cid, item, position, itemEx) local Potions = Pots[item.itemid] Potions.uid = item.uid Potions:heal(itemEx.uid) return true end para... function onUse(cid, item, position, itemEx) if not isPlayer(itemEx.uid) then doPlayerSendCancel(cid, "Use only in players") return true end local Potions = Pots[item.itemid] Potions.uid = item.uid Potions:heal(itemEx.uid) return true end
    1 ponto
  17. Skymagnum

    Tile

    function onStepIn(cid, item, fromPosition, toPosition) if isPlayer(cid) then if getPlayerAccess(cid) > 2 then return doPlayerSendTextMessage(cid, 27, "Bem vindo.") end end return doTeleportThing(cid, fromPosition, false) end
    1 ponto
  18. curruwilliam

    Show OFF - Guardian Server

    É isso é um problema, breve vamos testar, ai arrumamos.. Obrigado Atualização:
    1 ponto
  19. Junior001

    Naruto Shinobi Life !

    tente esses aqui: /ctf /ctftrap /tsui /assassin
    1 ponto
  20. Slicer

    Remover Monstro

    pelo q intendi tu quer q o summon suma depois de um tempo e q tb caso o usuario use denovo a magia remova o summon certo? se for, toma ae...
    1 ponto
  21. Enself

    Utevo Res Clone

    Reportado para moverem/ Duvida sanada
    1 ponto
  22. LordroL

    Sou lindo né

    o cara acima é retardado.
    1 ponto
  23. Ficou meio ruim, faz tempo que não mexo com photoshop. Mas ai, tenho que ir pra escola então fiz rápido.. Avatar: Sign: @Edit O cara passa aqui, pega as imagens e nem se quer comenta, ou agradece. Parabéns pra mim, o burro que ainda fez. Se eu ficar afim posto o PSD e uma imagem sem o nome para todos terem
    1 ponto
  24. brun123

    [Encerrado] [Dúvida] Fishing PDA

    é porque o servidor usa uma variável do tipo unsigned long int pra armazenar a skill tries que precisa pra certa skill chegar em tal level, e o alcance desse tipo de variável é de 0 até 2^32 - 1, a fórmula pra calcular as tries de um certo level é: TRIES_NO_LEVEL = SKILL_BASE * SKILL_FORMULA^(LEVEL - 11) SKILL_BASE e SKILL_FORMULA são duas propriedades da vocation do player nesse vocations.xml que vocês estão usando, só está definido o SKILL_FORMULA das skills, o valor do SKILL_BASE assume o padrão do servidor quando não definido, no caso do fishing é 20. substituindo o "TRIES_NO_LEVEL" pelo alcance máximo do tipo de variável e usando skill_base como 20 e skill_formula como 3, o level deveria ir só até o 28, depois disso o comportamento é imprevisível obviamente skill_formula não pode ser um número menor que 1, isso faria com que ficasse cada vez mais fácil upar de level, e se for 1, isso faz com que todo level seja necessário o mesmo número de tries para upar skill_base deve ser inteiro e quanto maior, mais difícil de upar a skill também para alterar a base basta fazer assim no xml: <skill fishing="1.3" fishBase="40"/>
    1 ponto
  25. Amigo o Distro é usado em 4 Servidores Global , e isso não acontece não, e quando testei também isso não acontecia, e Perder loot erro no distro? Acho que isso não existe, Problema no seu "creaturescripts" em algum script relacionado do mesmo. Obrigado até mais.
    1 ponto
  26. Lucasmml

    Galeria De LuquitossML

    Obrigado Soul ;D. E pra dar um up aqui na minha galeria eu fiz uma sprite de zuera aqui agora kkk descubram vocês mesmo quem é.
    1 ponto
  27. sky, seu loop do for é executado apenas uma vez e a captura é feita incorretamente... o certo seria algo assim: function getAllMonsterNames() local tmp = {} local file = io.open("monsters.xml", "r") for i in file:read("*a"):gmatch("<(.-)>") do local name = i:match('.+name="(.-)".+') if name then table.insert(tmp, name) end end return tmp end mas o problema dessa função é que sempre que um player fizer login, o servidor vai ter que abrir o monsters.xml, fazer um loop considerável e depois fechar o arquivo (coisa que faltou na função) e se vários players logarem ao mesmo tempo, o server pode travar... então o mais correto seria abrir o arquivo apenas uma vez e armazenar os nomes dos monstros lidos e guardar as informações em uma variável que permanece até que o servidor feche, assim o arquivo só será aberto uma vez usa esse script: local xml = io.open(getDataDir().."monster/monsters.xml", "r") local monsters = false if xml then local text = xml:read("*all") xml:close() monsters = {} for monstername in text:gmatch('name="(.-)"') do table.insert(monsters, monstername) end end function onLogin(cid) if monsters and isInArray(monsters, getCreatureName(cid)) then return false end return true end
    1 ponto
  28. Faltando a Blusa Do Cruzeiro em
    1 ponto
  29. mano quando a Premium dos player acaba ele não volta a cidade free ele fica preso la na cidade premium que ele estava como ageitar para quando a premium acabar o char volta automaticamente a cidade free ou seja dorion ?
    1 ponto
  30. Stigal

    [Source] Naruto Shinobi Online

    Conteudo: Source Naruto Shinobi (By RobinHood) Criado por: Lks e sua equipe. Liberado por: Beeki Re-Upado por: Stigal Complementos: Junto com a sources vem Server+Modern Acc Para Narutibia! Topico Do Servidor: Click Aqui! - Link Download: (4Shared) - http://www.4shared.c...ce_NTO_Sh.html? Scan - Click Aqui! - Atenciosamente, Stigal.
    1 ponto
  31. tibiaa4e

    Pasta Data - Monstros

    Pasta Enciclopedia com todos os links de outros tutoriais ! Link do Tópico Principal Parte II – Monstros Esse será meu tutorial de monstros mudado para versão 8.21+, eu refiz ele pois eu acho que estava apesar de muito bom obsoleto e preferi refaze-lo ao invés de apenas muda-lo. Os ataques e defesas explicarei ao final. Aqui o exemplo de monstro : <?xml version="1.0" encoding="UTF-8"?> <monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="280" manacost="0"> <health now="8200" max="8200"/> <look type="35" corpse="5995"/> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="82" attack="80" /> <attack name="demon gfb" interval="5700" chance="80" min="-180" max="-250" /> <attack name="mana drain" interval="10000" chance="70" /> <attack name="demon geb" interval="9000" chance="75" min="-360" max="-480" /> <attack name="Fire Field" interval="5600" chance="85" /> </attacks> <defenses armor="50" defense="45"> <defense name="healing" interval="1000" chance="15" min="90" max="200"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="15" speedchange="200" duration="20000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <elements> <element firePercent="100"/> <element physicalPercent="25"/> <element earthpercent="20"/> <element energyPercent="20"/> <element deathPercent="20"/> <element icePercent="-25"/> <element holyPercent="-10"/> </elements> <immunities> <immunity lifedrain="1"/> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities> <summons maxSummons="2"> <summon name="fire elemental" interval="6000" chance="40" max="2"/> </summons> <voices interval="5000" chance="10"> <voice sentence="Your soul will be mine!" yell="1"/> <voice sentence="MUHAHAHAHA!" yell="1"/> <voice sentence="CHAMEK ATH UTHUL ARAK!" yell="1"/> <voice sentence="I SMELL FEEEEAAAAAR!"/> <voice sentence="Your resistance is futile!" yell="0"/> </voices> <loot capacity="350"> <item id="2148" countmax="20" chance1="100000" chancemax="90000" /> gold <item id="2148" countmax="90" chance1="70000" chancemax="63000" /> gold <item id="2148" countmax="100" chance1="42000" chancemax="9800" /> gold <item id="2152" countmax="3" chance1="6600" chancemax="1200" /> platinum <item id="2151" countmax="7" chance1="5600" chancemax="3000" /> talon <item id="2795" countmax="6" chance1="12000" chancemax="800" /> fire mush <item id="2171" chance="7200" /> platinum a <item id="2462" chance="4500" /> devil h <item id="2179" chance="4200" /> gold ring <item id="7591" chance="5300" /> Great Health <item id="7590" chance="5200" /> Great Mana <item id="2470" chance="1400" /> golden legs <item id="2472" chance="800" /> magic plate amor <item id="1987" chance="100000"> <inside> <item id="2149" countmax="3" chance1="12000" chancemax="2001" /> small emerald <item id="2148" countmax="100" chance1="10888" chancemax="9200" /> gold <item id="2387" chance="48000" /> double a <item id="2176" chance="9999" /> orb <item id="2418" chance="7600" /> golden s <item id="1982" chance="7300" /> purpel tome <item id="2214" chance="6820" /> roh <item id="2396" chance="6800"/> ice rapier <item id="2165" chance="6860" /> stealth ring <item id="2432" chance="6200" /> fire a <item id="2164" chance="5100" /> might r <item id="2393" chance="4100"/> giant sword <item id="2520" chance="3200" /> demon shield <item id="5954" countmax="1" chance1="2600" chancemax="0" /> demon horn <item id="7368" countmax="5" chance1="2300" chancemax="0" /> assasin star <item id="2514" chance="1450" /> msm <item id="7382" chance="1300"/> demonrage sword <item id="7393" chance="900" /> demon trophy </inside> </item> </loot> </monster> Vou explica-lo passo a passo o que significa e ao final tentar enteder como se faz ele. <monster name="Demon" nameDescription="Demon" race="fire" experience="6000" speed="280" manacost="0"> <health now="8200" max="8200"/> <look type="35" head="0" body="0" legs="0" feet="0" addons="0" corpse="5995" /> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> Monster Name : É o nome que dele que aparece ou para ser sumonado ou colocado no map editor. nameDescription : É o nome que aparecera ao dar look. Lembrando que a significa um ou seja só se usa em boss. race : A raça dele. Ou seja o tipo de "sangue " que sai ao tomar dano. Existe 4 raças listadas abaixo : venom : Venenosa, como Giant Spider, spider ou outros insetos. blood : Blood é o mais normal sai sangue quando morre. Como Wolfs,trolls e outros tipos de humanos. undead : Mortos, ou seja só sai aquele dano, como Skeletons, Vampire ou Mummys. fire : Raça de fogo, como Demons,Fire elemental e outros. experience : A experiencia que ele da ao ser morto. speed : A velocidade inicial dele, lembrando que um player lvl 1 tem 220 de velocidade. Para fazer monstros que são "estatuas", coloque speedy 0. manacost : A mana que prescisara para ele ser sumonado, caso seja 0 ele não poderá ser sumonado. E também é valida para convece-lo Health now : A vida que o monstro iniciara ao ser sumonado ou dar spawn. max : Esse é o health maximo. looktype : O id da roupa do monstro. head : É a cor da cabeça do monstro. body : É a cor do tronco do monstro. legs : É a cor da perna do monstro. feet : É a cor do pé do monstro. (caso não seja um editavel pode ser retirado.) addons : É o numero de addons.(0-sem, 1- addon 1, 2 -addon 2 e 3-Todos os addons). corpse : O corpo dele quando ele morre (pode ser qualquer item.). target change interval: É o quanto em milessegundos o monstro demora para tentar mudar de alvo.(1000 = 1 segundo). chanche: A chanche de ele tentar mudar de alvo (maximo é 100). strategy attack: Isso funciona como o sistema do player de ataque defesa. O calculo de attack e defesa não pode ultrapassar 100. Então normalmente os monstros vem com 100 de ataque e 0 de defesa. Um monstro como mais defesa pode ser mudado. defense: Ler acima. Nessa parte, talvez você queira fazer um monstro com o jeito de um item, como aquelas torres de ankhrahmun. Para isso troque a linha do looktype para essa : <look typeex="1560"/> Onde esse numero é o id do item. Tabela de cores Agora vamos explicar a parte de flags. <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> summonable : Se ele pode ou não ser sumonado por players. A mana é configurada no manacost. attackable : Se ele pode ser atacado. Por exemplo aquelas torres magicas de ank não podem. hostile : Se ele é hostil ou não. Chickens, deer não são hostis. illusionable : Se ele pode ser usado pela spells "utevo res ina". convinceable : Se ele pode ser convencido pela runa. pushable : Se ele pode ou não ser "empurrado". canpushitems : Se ele empurra ou não itens. (caso não seja possivel empurrar o item, ele destruira. canpushcreatures : Se ele empurra ou não criaturas. Caso não seja possivel empurrar e a criatura tiver menos health que seu dano maximo ele a matará). targetdistance : O quanto de sqm ele atacará o player. (caso faça monstros não hostis coloque + de 4. Tente não colocar mais de 8) staticattack : É a chanche de o monstro ficar parado. Porém ao colocar muito pouco ele não ficará nem um segundo parado. runonhealth : Qual o minimo de vida para ele correr. Caso ele "heale" e isso passar desse valor, ele voltará a atacar. Agora sobre elements (imunidades). Lembrando que valores negativos querem dizer fraqueza e positivos é boa defesa contra o elemento. <elements> <element firePercent="100"/> <element physicalPercent="25"/> <element earthpercent="20"/> <element energyPercent="20"/> <element deathPercent="20"/> <element icePercent="-25"/> <element holyPercent="-10"/> </elements> fire : O quanto de imunidade a fogo ele terá. physical : O quanto de imunidade a fisico ele terá (Melee e Explosion Spell). earth : A antiga poison. energy : O quanto de imunidade a energy. death: O quanto de imunidade a morte (Death Strike e Sudden Death). ice : O quanto de imunidade a gelo ele terá. holy : O quanto de imunidade a benção ele terá (apenas paladinos tem esse tipo de spell). Nas imunidades é apenas colocar os nomes. E o monstro terá imunidade, hoje em dia é usado para elementos não citados acima e outros tipos. Os que existem são physical fire earth ou poison energy death ice holy lifedrain paralyze outfit drunk invisible drown (dano dos monstro de agua) Agora a parte de summons : <summons maxSummons="2"> <summon name="fire elemental" interval="6000" chance="40" max="2"/> </summons> maxSummons : Numero maximo de summons que ele poderá ter vivas. summon name : O nome do monstro que ele sumonará. interval : De quanto em quanto tempo ele tentará sumonar o monstro em milessegundos. chanche : A chanche de ele tentar sumonar. max : O maximo que ele sumonará vivos esse monstro. (pelo amor deixe isso maior que o maximo dele.) Agora a parte dos gritos: <voices interval="5000" chance="10"> <voice sentence="Your soul will be mine!" yell="1"/> <voice sentence="MUHAHAHAHA!" yell="1"/> <voice sentence="CHAMEK ATH UTHUL ARAK!" yell="1"/> <voice sentence="I SMELL FEEEEAAAAAR!"/> <voice sentence="Your resistance is futile!" yell="0"/> </voices> interval: De quanto em quanto tempo ele tentará falar. chanche: De quanto em quanto tempo ele poderá falar. voice sentence: A fala que ele irá falar. yell: Se essa fala será um grito ou não. Agora o que eu considero uma das partes mais importantes do monstro. Infelizmente a maioria das pessoas, não se interressam por ela E seus monstros ficam uma verdadeira merda... <loot capacity="250"> <item id="2148" countmax="20" chance1="100000" chancemax="90000" /> gold <item id="2148" countmax="90" chance1="70000" chancemax="63000" /> gold <item id="2148" countmax="100" chance1="42000" chancemax="9800" /> gold <item id="2152" countmax="3" chance1="6600" chancemax="1200" /> platinum <item id="2151" countmax="7" chance1="5600" chancemax="3000" /> talon <item id="2795" countmax="6" chance1="12000" chancemax="800" /> fire mush <item id="2171" chance="7200" /> platinum a <item id="2462" chance="4500" /> devil h <item id="2179" chance="4200" /> gold ring <item id="7591" chance="5300" /> Great Health <item id="7590" chance="5200" /> Great Mana <item id="2470" chance="1400" /> golden legs <item id="2472" chance="800" /> magic plate amor <item id="1987" chance="100000"> <inside> <item id="2149" countmax="3" chance1="12000" chancemax="2001" /> small emerald <item id="2148" countmax="100" chance1="10888" chancemax="9200" /> gold <item id="2387" chance="48000" /> double a <item id="2176" chance="9999" /> orb <item id="2418" chance="7600" /> golden s <item id="1982" chance="7300" /> purpel tome <item id="2214" chance="6820" /> roh <item id="2396" chance="6800"/> ice rapier <item id="2165" chance="6860" /> stealth ring <item id="2432" chance="6200" /> fire a <item id="2164" chance="5100" /> might r <item id="2393" chance="4100"/> giant sword <item id="2520" chance="3200" /> demon shield <item id="5954" countmax="1" chance1="2600" chancemax="0" /> demon horn <item id="7368" countmax="5" chance1="2300" chancemax="0" /> assasin star <item id="2514" chance="1450" /> msm <item id="7382" chance="1300"/> demonrage sword <item id="7393" chance="900" /> demon trophy </inside> </item> </loot> loot capacity : O maximo que o monstro terá de itens dentro de si, Lembrando que dificilmente um monstro que vem muita coisa passa de 180. itemid: O id do item que ele dropará. countmax: O maximo que o item virá, podendo ser stackable ou não. Porém prefiro usar so para stackable. (não use isso para dar mais de 100, pois fica ridiculo.) chanche1: A chanche que o monstro dará o item. chanchemax: A chanche de ele dar a quantidade maxima do item. Agora algumas dicas : -Como a linguagem é xml, adicione o nome do item que ele dar, para se for editar, você não se confude. Pode colcoar sem nenhum caractere especial -Coloque sempre monstros com bag, para isso faça isso : <item id="1987" chance="100000"> <inside> <item id="7393" chance="900" /> demon trophy </inside> </item> Ou seja não feche a tag do item 1987 (bag de rook), e abra a tag inside (dentro) e coloque tudo o que quiser, (não faça cair mais de 8 itens na bag), depois feche a tag inside e feche a tag item. Ai a bag so virá quando cair algo dentro, se quiser fazer bags vazias coloque ela como um item normal separado. - Não faça um monstro que não seja boss cair muitos itens, pois fica ridiculo. - Se quiser que um monstro drope um item sempre (como os pharaos dropam aqueles itens, faça ele com chanche 1000000, ai ele sempre cairá. Bem agora é a parte legal dos monstros, bem legal é no começo é um verdadeiro saco, depois fica muito legal (Eu por exemplo adorei fazer 250 monstros no zorzin ot, e agora ter que fazer denovo pq o tibia mudo tudo ¬¬). Bem eu ensinarei como fazer spells em monstros, porém você poderá usar as feitas em spells tradicional, (eu uso as minhas antigas). Vou explicar essa do demon. <attacks> <attack name="melee" interval="2000" skill="82" attack="80" /> <attack name="demon gfb" interval="5700" chance="80" min="-180" max="-250" /> <attack name="mana drain" interval="10000" chance="70" /> <attack name="demon geb" interval="9000" chance="75" min="-360" max="-480" /> <attack name="Fire Field" interval="5600" chance="85" /> </attacks> attack name: Nome da magia, alguns nomes são reservados para já constar a condição (explicados mais a frente). Para usar as magias ja criadas use o nome dela. interval: Tempo em milessegundos, que ele atacará. chanche: A chanche de ele atacar o player. skill : Só pode ser usado com o nome Melee, siginifica o skill do monstro attack: Seria o ataque da arma do monstro (imaginaria). Bem nesse monstro ele usa magias criadas por mim que estão no spells. Agora vamos fingir que eu fiquei fresco, e não quero mais usar magias do spells, pq kero limprar 1kb do meu hd. Então vou refazer todas elas dentro do monstro. Começando pela geb (Great Energy Beam): Lembra que eu falei que tem as palavras reservadas ? Então cada magia do Tibia tem sua condição e esses nomes ja dão o tipo dela. "melee", "physical", "poison", "earth", "fire", "ice", "freeze", "energy", "drown", "death", "curse", "holy", "lifedrain", "manadrain", "healing", "speed", "outfit", "invisible", "drunk", "firefield", "poisonfield", "energyfield", "firecondition", "poisoncondition", "energycondition", "drowncondition", "freezecondition", "cursecondition" Só para os duvidosos curse é death e dazzled é benção. Pelo amor de deus, não me façam explicar cada um dos nomes reservado. Pelo nome já da pra imaginar. Agora que já temos isso Vamos construir nossa GEB Ela fica assim : attack name="energy" interval="9000" chance="30" length="8" spread="0" min="-380" max="-420"> <attribute key="areaEffect" value="purpleenergy"/> </attack> Esse length e spread são definições do tamanho dela. Onde : length - comprimento. spread - seria mais ou menos a largura. radius - raio da magia. Ou seja o numero de sqm em relação ao centro para as pontas. Acredito que essa será a parte mais complicada de explicar. EU prefiro dar por exemplos. Imagine as seguintes magias a firewave, great energy beam e Great fireball. Para fazer uma firewave deviamos usar isso length="4", spread="4"; A great energy beam : lenght="8", spread="0" A Great Fireball : radius="4" Para explicar o radius tem essa figura {0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 8, 8, 7, 8, 8, 0, 0, 0, 0}, {0, 0, 0, 8, 7, 6, 6, 6, 7, 8, 0, 0, 0}, {0, 0, 8, 7, 6, 5, 5, 5, 6, 7, 8, 0, 0}, {0, 8, 7, 6, 5, 4, 4, 4, 5, 6, 7, 8, 0}, {0, 8, 6, 5, 4, 3, 2, 3, 4, 5, 6, 8, 0}, {8, 7, 6, 5, 4, 2, 1, 2, 4, 5, 6, 7, 8}, {0, 8, 6, 5, 4, 3, 2, 3, 4, 5, 6, 8, 0}, {0, 8, 7, 6, 5, 4, 4, 4, 5, 6, 7, 8, 0}, {0, 0, 8, 7, 6, 5, 5, 5, 6, 7, 8, 0, 0}, {0, 0, 0, 8, 7, 6, 6, 6, 7, 8, 0, 0, 0}, {0, 0, 0, 0, 8, 8, 7, 8, 8, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0} Ou seja com raio 8 ele abrangerá tudo isso. Então ele ficará um tipo de triangulo, tornando nossa vida mais pratica. O length seria simplesmente o numero 1,2,3,4,5,6,7,8. Ou seja , uma reta O spread sempre é usado junto com o length. O spread maximo é contado apenas no ultimo sqm do length, então ele ficaria assim : {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0}, {0, 1, 1, 1, 0}, {0, 0, 3, 0, 0}Sendo o 3 o primeiro sqm da magia. Ao sqm de numero 4, ele fica com 4 de largura e vai diminuindo até que fique em 0. Meio complicado de explicar, tente fazer testes que você encontrará facilmente. Bem isso você ja sabe, como fazer magias espontaneas. Agora tem aquelas magias que os montros tacam na direção do player Para isso acontecer apenas adicione a tag target="1" range="7" Target ou alvo é para ele tacar no monstros. E range o maximo de sqm ele poderá tacar no alvo. Pois muito bem, agora tentei explicar, o modo de fabricar as distancias dela. Agora tem mais duas magias que tem prefixos diferentes, que é outfit e paralyze ou haste. As duas tem uma diferença em comum que é duration, que seria o tempo que durará o efeito speedchange para paralyze ou haste (coloque valores negativos para diminuir, se tiver em defesa só o player será afetado, se tiver em defesa o monstro será afetado). item="id" ou monster="nome" para o item ou monstro que o atacado virará ao receber a magia. Exemplo de magia que paraliza <attack name="speed" interval="7600" chance="30" range="7" speedchange="-600" duration="20000"> <attribute key="areaEffect" value="icetornado"/> </attack> E muda outfit <attack name="outfit" interval="11900" chance="40" range="7" item="7172" duration="8000"> <attribute key="areaEffect" value="blueshimmer"/> <attribute key="shootEffect" value="snowball"/> </attack> Para que o player fique bebado é so colocar o nome drunk e a duração. Para ele tacar fiels também é a mesma coisa, só colocar o nome. Para lifedrain coloque o nome e os efeitos Bem se você entendeu essa explicação muito confusa, parabens mesmo. Se não tente ler umas 2x que acho que vc entenderá. Se não entendeu, vá a merda xD A ultima parte dos ataques é tentar fazer os efeitos. Os nomes em xml são diferentes dos que são em LUa, porém como eu aqui Só quero facilitar suas vidas eu fiz uma tabela enoorme e chata que mostra elas. Primeiro vamos explicar os efeitos : <attribute key="shootEffect" value="poison"/> <attribute key="areaEffect" value="redshimmer"/> shootEffect é o efeito que sai quando a magia é disparada. areaEffect é quando ele chega. Isso é facim, so saber as tags corretas aqui vai a tabela de shootEffect. Essas { e } é que eu copiei das sources... Para compara-las a lua, teste os efeitos com !x "1,2,3 e talz Agora os areaEffect Para verificar esses de o comando !z"1,2,3 sei la Isso so funciona no TFS, duvido que a porcaria do Ares tenha essa talk action. Bem aqui se encerra o tutorial de monstros, esse fico mais completo, talvez confuso se houver muitas reclamações posso tentar melhorar, já que como to sem internet fiz isso no notepad++, e é meio estranho... Agora vai as dicas para fazer bons monstros. Dicas Faça monstros "reais", não misturem elementos, ao não ser que eles sejam magos tipo warlock. O loot deve ser equivalente a sua força Não adianta um Wolf dar magic plate armor, claro que tem suas exceções. Tente fazer loots lerdos para ots com exp até 20 Pois não tem graça matar 5 demons e pegar magic plate armor e goldens legs. O legal é quando você pegar um loot maximo, você se sentir orgulhoso. Monstros de água devem ter velocidades maiores e não podem ser usados em chão normal, pq eles seriam ultra-velozes, e monstros de terra em agua seriam verdadeiras largatas. No tibia hoje em dia os elementos tem fraquezas para outros e fortes em outros. A ordem é Ice < energy < earth < fire < ice Então se o monstro for nativo do gelo, ele será forte contra fogo e fraco contra energia. E mesmo um monstro de gelo não pode dar uma dragon robe, ficaria estranho. O grande problema que eu vejo é na montagem de Boss. Normalmente eles dão loots estupendos e são extremamente impossivel de matar, porque tacam diversas magias e tem sangue exurberante. Dependendo da exp do seu ot, faça uns mais brandos. Respawns Diversifique os monstros, não faça um ot que ao chegar em um nivel alto ele fique morando em um certo tipo de monstro, como demons. Os monstros que normalmente são lucrativos pelo dano/exp são dragons (dragon,dl,frost). Crie areas grandes deles, e também de outros mais visados. Como demons, behemoths, criaturas de POI. Se você criar um monstro faça ele um legal, que de um loot razoavel (de preferencia raro). Em areas de quests, faça monstros que se "deem" beem. Por exemplo uma area com Fire Elemental, não pode ter bichos que não tem imunidade a fogo, porque ele mataria todos. Para criar Boss, não use respawn fixo no map editor, use a raids, que tem um tutorial (ou terá em breve) na aba da seção Para que o boss seja esperado e não uma coisa normal e chata. Encerro esse tutorial, esperando que seja util para todos vocês e esperem as proximas partes. O comentario é a principal comunicação COmento se gostou ou não de sugestões, reclamações ou me ofenda sei la. Espero que tenha ajudado bastante.
    1 ponto
  32. SamueLGuedes

    !taunt system

    @SmiX Sim eu tenho um diferente aqui, vou modificar o post. e dos erros ortograficos eu nao sou bom nisso kkk. @EDIT topico modificado, script modificado do slicer postado.
    1 ponto
  33. Gente,peço que vcs postem o que acharam,porque realmente desanima trazer um tuto desse tamanho,separar,por cor,code,tudo bonitinho, e vcs só olharem e irem embora! Pessoal,jah vo avisando,esse tutorial não é meu,é de um usuário chamado Lucas321 de um certo fórum aí... -------------------------------------- Aprenda a fazer seus próprios Monstros, Spells e NPC Basicamente scripts sao o conjunto dos códigos que formam os arquivos de players, monster, spells, etc. Nesse tutorial vou ensinar tudo, pra vc sair daqui fazendo monstros, spells e tudo mais. E se no final houver alguma duvida poste aqui que serei grato em ajudar. Neste Tutorial existem varios comandos básicos, bons para iniciantes, parte por parte é explicada, visando um maior entendimento sobre o assunto. Vamos lá! SPELLS Primeiro vamos falar sobre as spells Existem as spells de instant e as spells de rune, as spells de instant sao aquelas em q o monstro usa nele, e as de runa ele vai usar em vc. Entao a primeira coisa que precisamos fazer é decidir se vamos fazer uma spell de runa ou de instant, vou mostrar aqui apenas um exemplo, se nao o topico ficara muito grande. Vamos começar, seguindo um exemplo de uma magia minha: Primeiro, crie um arquivo chamado crossover.lua, na pasta Data>Spells>Instant Começamos o script com isso: area = {{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},} Essa é a area em que a magia ira pegar, o numero 0 simboliza os espaços que a magia nao pega e os numeros 1, os lugares onde acontecerá a magia, no exemplo acima, é uma magia em forma de cruz Pulamos entao uma linha e acrescentamos isso: attackType = ATTACK_PHYSICALneedDirection = falseareaEffect = NM_ME_YELLOW_RINGSanimationEffect = NM_ANI_NONEhitEffect = NM_ME_HIT_AREAdamageEffect = NM_ME_DRAW_BLOODanimationColor = BLACK_WHITEoffensive = truedrawblood = true Vamos às explicações: attackType = o tipo de ataque que será, no exemplo será um ataque fisico, mas tbm poderia ser um ataque de fogo, ou de energy needDirection = se o ataque precisa de direção, como as firewaves areaEffect = o tipo de animação que saira na area na magia animationEffect = a animação de quando o player sofrer dano da magia damageEffect = o efeito que saira quando o player receber o dano animationColor = a cor da animação da Magia offensive = se a magia é de ataque ou nao drawblood = se embaixo do player vai sair sangue quando ele receber a magia Explicado, pulamos uma linha e adicionamos: UltimateExplosionObject = MagicDamageObject(attackType, animationEffect, hitEffect, damageEffect, animationColor, offensive, drawblood, 0, 0) Essa é a função que fara com q oq explicamos acima funcione, pulamos outra linha e acrescentamos: function onCast(cid, creaturePos, level, maglv, var)centerpos = {x=creaturePos.x, y=creaturePos.y, z=creaturePos.z}n = tonumber(var)if n ~= nil then-- bugged-- ultimateExplosionObject.minDmg = var+0-- UltimateExplosionObject.maxDmg = var+0UltimateExplosionObject.minDmg = 0UltimateExplosionObject.maxDmg = 0 elseUltimateExplosionObject.minDmg = (level * 2 + maglv * 3) * 2.6 - 30UltimateExplosionObject.maxDmg = (level * 2 + maglv * 3) * 3.0 end Essa é a fórmula do Dano que o player irá tomar ao receber a magia, agora pra finalizar adiconamos: return doAreaMagic(cid, centerpos, needDirection, areaEffect, area, UltimateExplosionObject:ordered())end Pronto ja terminamos nossa primeira spell, agora para faze-la funcionar precisamos acrescenta-la aou arquivo spells.xml vamos lá, na pasta Data>Spells abra o arquivo spells.xml e na sessao de INSTANT, acrescente esta linha: spell name="CrossOver" words="crossover" maglv="12" mana="160" enabled="1"><vocation id="2" /><vocation id="1" /></spell> Explicando: spell name = nome da magia (pode ser qualquer um) words = as palavras magicas que terao que ser ditas pra magia funcionar (tem q ser igual ao nome do script da magia) magvl = maglv necessario para usar essa magia mana = mana que será gasta enabled = se a magia esta abilitada ou nao vocation id = para quais vocações essa magia funcionará, no caso acima ela so funciona pra sorc e druid ------------------ MONSTERS Spell criada, vamos passar para o Monstro que usara esta spell Crie um arquivo .xml com um nome qualquer na pasta Data>Monsters <?xml version="1.0"?><monster name="The Flash" level="500" maglevel="70" experience="1000" pushable="0" armor="80" defense="90" canpushitems="1" staticattack="50" changetarget="200" speed="100000"><health now="25000" max="25000"/><look type="134" head="94" body="94" legs="94" feet="79" corpse="4246"/><combat targetdistance="4" runonhealth="0"/><attacks><attack type="instant" name="flash_light" exhaustion="500" cycleticks="8000" probability="40"/></attacks><defenses><defense immunity="physical"/><defense immunity="paralyze"/></defenses><voices><voice sentence="HEHE Vem me pegar!!"/><voice sentence="Bah, ja dei 5 voltas e vc ai parado!"/></voices><summons maxSummons="2"><summon name="Chicken" chance="5000"/></summons><loot></loot></monster> Esse é um exemplo de um monstro que eu criei, escolhi ele pq ele apresenta quase todas as funções de um monster, vamos as explicações que realmente interessam monster name = nome do monstro, esse nome é oq aparecerá quando vc sumonar ele experience = a experiencia que ele dá, geralmente é um numero normal, parecido com o do Tibia, pois no config.lua é que a exp é multiplicada, portanto se vc colocar mto alto aqui, vai ficar absurda canpushitems = se o monstro pode mover objetos changetarget = dificuldade ou facilidade do monstro mudar de alvo combat targetdistance = a distancia em sqm em que o monstro ficará do player runonhealth = o life em que o monstro correrá do player <summons> = comando para ele sumonar um monstro <loot> = aqui vc ajusta os items e o dinheiro, com a chance (Vamos falar sobre isso mais a frente) e etc <attacks> = sao os ataques que seu monstro usará, tem os attack do tipo meele (dano fisico), distance (arrows, bolts, etc), instant (magias de instant), rune (magias de rune) <defenses> = aqui é pra vc colocar se o seu monstro vai ser imune a alguma coisa, exemplo: Demon é imune a fogo, entao vc poe lá: <defense immunity="fire"/> <voices> = qual será a mensagem que ele dirá (aquela msg laranja) </monster> = funciona como um end, finaliza o script Vamos falar sobre o looktype e a lootchance: "Ah eu quero criar um Boss dos orc, mas nao sei quais sao as roupinhas" Abaixo a lista dos looktypes dos monstros mais comums {["Orc Warlord"] = 2, ["War Wolf"] = 3, ["Orc Ridder"] = 4, ["Orc"] = 5, ["Orc Shaman"] =6, ["Orc Warrior"] = 7, ["Orc Berserker"] = 8, ["Necromancer"] = 9, ["Black Sheep"] = 13, ["Sheep"] = 14, ["Trol"] = 15, ["Bear"] = 16, ["Beholder"] = 17, ["Ghoul"] = 18, ["Slime"] = 19, ["Rat"]= 21, ["Cyclops"] = 22, ["Minotaur Mage"] = 23, ["Minotaur Archer"] = 24, ["Minotaur"] = 25, ["Rotworm"] = 26, ["Wolf"] = 27, ["Snake"] = 28, ["Minotaur Guard"] =29, ["Spider"] = 30, ["Deer"] = 31, ["Dog"] = 32, ["Skeleton"] = 33, ["Dragon"] = 34, ["Poison Spider"] = 36, ["Demon Skeleton"] = 37, ["Giant Spider"] = 38, ["Dragon Lord"] = 39, ["Fire Devil"] = 40, ["Lion"] = 41, ["Polar Bear"] = 42, ["Scorpion"] = 43, ["Wasp"]= 44, ["Bug"] = 45, ["Ghost"] = 48, ["Fire Elemental"] = 49, ["Orc Spearman"] = 50, ["Djinn"] =51, ["Winter Wolf"] = 52, ["Frost Troll"]=53, ["Witch"] = 54, ["Behemot"] =55, ["Cave Rat"] = 56, ["Monk"] = 57, ["Priestess"] = 58, ["Orc Leader"] = 59, ["Pig"] = 60, ["Goblin"] = 61, ["Elf"] = 62, ["Elf Arcanist"] = 63, ["Elf Scout"] = 64, ["Mummy"] = 65, ["Dwarf Geomancer"] = 66, ["Stone Golem"] = 67, ["Vampire"] = 68, ["Dwarf"] = 69, ["Dwarf Guard"] = 70, ["Dwarf Soldier"] = 71, ["Rabbit"] = 74, ["Swamp Troll"] = 76} E a lootchance "Eu quero fazer um faraó, mas quero que item fulano caia toda hora e que item ciclano caia mto raramente", entao ai vai a lista da loot chance: --100000= all time----50000= each 2 time----33333= each 3 time----20000= each 5 time----10000= each 10 time----6666= each 15 time----5000 = each 20 time----4000 = each 25 time----3333 = each 30 time----2857 = each 35 time----2500 = each 40 time----2222 = each 45 time----2000 = each 50 time----1818 = each 55 time----1666 = each 60 time----1538 = each 65 time----1428 = each 70 time----1333 = each 75 time----1000 = each 100 time----909 = each 110 time----833 = each 120 time----800 = each 125 time--666 = each 150 time----588 = each 170 time----555 = each 180 time----500 = each 200 time----400 = each 250 time----333 = each 300 time-- NPC Bom ja criamos uma spell, um monstro, vamos criar um NPC, que quando vc pedir ele sumone um monstro pra vc Começamos a função de um NPC com isso focus = 0contador = 0talk_start = 0target = 0following = falseattacking = falsefunction onThingMove(creature, thing, oldpos, oldstackpos)endfunction onCreatureAppear(creature)endfunction onCreatureDisappear(cid, pos)if focus == cid thenselfSay('Ate breve.')focus = 0contador = 0talk_start = 0endendfunction onCreatureTurn(creature)endfunction msgcontains(txt, str)return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))endfunction onCreatureSay(cid, type, msg)msg = string.lower(msg) Bom, depois disso acrescentamos: if ((string.find(msg, '(%a*)hi(%a*)')) and (focus == 0)) and getDistanceToCreature(cid) < 3 thenselfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?')focus = cidcontador = 1talk_start = os.clock()end Quando vc falar HI pra ele ele vai te dizer: selfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?') Dai pulamos uma linha e acrescentamos: if string.find(msg, '(%a*)hi(%a*)') and (focus ~= cid) and getDistanceToCreature(cid) < 3 thenselfSay('Espere ' .. creatureGetName(cid) .. '!')end Isso é, se alguem chegar e falar Hi e ele estiver falando com vc, ele vai dizer para o outro: selfSay('Espere ' .. creatureGetName(cid) .. '!') Entao agora para responder a pergunta que o Npc nos fez, pulamos uma linha e colocamos: if msgcontains(msg, 'yes') and focus == cid and contador == 1 thenselfSay('/m trainer')talk_start = os.clock()end No caso, quando vc falar yes, ele vai sumonar um trainer,aqui vc poderia substituir por qualquer outro bixo, entao fechamos o script com isso: if string.find(msg, '(%a*)bye(%a*)') and focus == cid and getDistanceToCreature(cid) < 3 thenselfSay('Ate Breve jovem ' .. creatureGetName(cid) .. '!')focus = 0talk_start = 0endendfunction onCreatureChangeOutfit(creature)endfunction onThink()if (os.clock() - talk_start) > 30 thenif focus > 0 thenselfSay('Próximo Por favor...')endfocus = 0contador = 0endend Que nada mais é do q, oq ele fala e faz depois que vc fala BYE, e oq ele fala e faz depois que vc se afasta muito dele. Vamos explicar algumas funções dos NPCs: selfSay = oq ele irá falar em resposta a algo q vc disse buy(cid,itemid,qtd,price) = mto usada para Npcs que compram e vendem, esta função serve para vc comprar algo de um Npc sell(cid,itemid,qtd,price) = igual ao explicado acima, so que serve para vc vender algo para o npc DICAS * Nunca faça monstros fortes demais, primeiro avalie a força dos jogadores do seu server e faça um monstro que eles consigam matar, mesmo que para isso ralem bastante, ninguem gosta de ver um monstro ignorante matando todo mundo, isso acaba com a graça *Faça spells balanceadas para todas as vocações, fazer uma spell onde so o druida é beneficiado, fica ruim, se fizer uma spell forte para o druida, tente fazer uma para o pally, o kina e o sorc, ou de a eles algum beneficio que o druida nao tem *Existem várias funções q podem ser usadas nos Npcs, tente tirar o máximo de proveito disso para fazer quests, eventos, etc Vlw e Comentem! Postem elogios, criticas, duvidas e sugestoes! Estou aqui para ajuda-los //Lucas321 -------------------------------- LEMBRANDO,CRÉDITOS A ELE,E NÃO A MIM.
    1 ponto
  34. Doidin

    [Action] Removedor De Frags!

    Removedor de Frags! Fala galera olha eu aqui de novo, a um tempo atrás eu postei um script aqui e falaram que eu tinha "ripado" ele, portando eu retirei aquele script mesmo sem ter copiado nada para não dar maiores problemas e resolvi criar outro com a mesma função. Não venham com esse papo de plágio, okay! Ta vamos parar de papo e vamos logo ao Script que é o que interessa né!? =) Vá até a pasta "Actions" entre na pasta "Script" e crie um arquivo com o nome de RemoveFrags.lua com isto dentro dele: -- [( Script created by Doidin for XTibia.com )] -- function onUse(cid, item, fromPosition, item2, toPosisition) local rskulls = {green = SKULL_GREEN, red = SKULL_RED, black = SKULL_BLACK} if isInArray(rskulls, getPlayerSkullType(cid)) then doPlayerSendCancel(cid,"You don't remover your frags and skulls.") doSendMagicEffect(getPlayerPosition(cid), 2) else db.executeQuery("UPDATE `killers` SET `unjustified` = 0 WHERE `id` IN (SELECT `kill_id` FROM `player_killers` WHERE `player_id` = " .. getPlayerGUID(cid) .. ")") doCreatureSetSkullType(cid, 0) doCreatureSay(cid, "Your frags and skulls is cleaned!", 19) doSendMagicEffect(getPlayerPosition(cid), 26) doRemoveItem(item.uid, 1) return TRUE end end Agora volte até a pasta "Actions" e abra o arquivo "Actions.xml" e adicione esta Tag nele: <action itemid="5468" event="script" value="RemoveFrags.lua"/> Pronto galera é isso ai, divirtam-se! :nuts:
    1 ponto
  35. Caidera

    Fazendo Quest Complicadas...

    Bom... antes de tudo queria agradecer ao Héliton por me ensinar a fazer isso. Esse tutorial é para aquelas pessoas que já estão de saco cheio de quest do estilo Anihilator(não sei escrever ) ou Demon Helmet, que você entra numa sala com um monte de bicho, mata tudo e pega o premio. Esta que eu vou demonstrar aqui vai ser mais ou menos assim mas de qualquer forma é mais trabalhosa. Vou passar a quest toda aqui você só vão precisar configurar. vamos lá vou explicar a quest primeiro: - Você acha uma mesinha com uma alavanca do lado, e um tile que afunda. Sobe no tile. coloca o objeto em cima da mesinha e é teleportado. Action: Pelo mapa você coloca um unique id na alavanca, vamos pegar por exemplo 5000(pode ser qualquer número, desde que já não seja usado ) ai no arquivo actions.xml você adiciona essa linha: Sendo que o nome do script é onde vai ficar as informações que vem abaixo: Ai em cima já tem tudo o que modificar =P explicado. Tá agora o cara foi teleportado para o outro lugar =) Nesse outro lugar você anda e pá =P... ai tem outra sala com alguns bichos e uma alavanca, que ao puxar nasce o boss da quest. Vamos explicar agora: No mapa na alavanca você coloca outro unique ID, por exemplo 5001(já que o 5000 tá sendo usado na action ali de cima) E adiciona no actions.xml isso: Onde o nome_do_script vai ser o que está aqui em baixo: Ai nasce o boss, você e seu time caem na porrada com ele, o matam e pegam o loot da quest... Bom poderia acabar aqui, ter um teleport para fora do lugar e pronto =)... mas porque não colocar alavancas =P onde o cara tem que puxar a certa se não é teleportado para um lugar onde provavelmente morre, outro para um lugar longinquo seria interessante não? =P Bom caso você queira que tenha só um teleport no final da quest o tutorial acaba aqui Caso queria que tenha as alavancas nós continuaremos vamos lá então: O exemplo que o Héliton me passou foi com 3 alavancas, passarei assim pois se for fazer com quatro será o mesmo esquema só o script vai aumentar de tamanho. Você vai lá no mapa e coloca as três alavancas e coloca os uniques ids também, pegaremos 5003, 5004 e 5005(tem que ser diferente dos outros) Em actions.xml você adiciona: Ai no script(que eu nome-ei por alavboss) vai ficar assim: Bom é isso =), ali você escolhe a alavanca que você quer que funcione e pá. Tutorial termina aqui. P.S.: segundo quem codo esses actions(Héliton) pode ter 1 ou 2 bugs. qualquer coisa se você testo as actions e deu bug me manda uma PM ou avisa aqui mesmo que eu tentarei consertar ou falarei com ele x) P.S.²: CRÉDITOS PELA CRIAÇÃO DO CODE PARA HÉLITON Só para depois não falarem que eu coloquei créditos =) Atenciosamente, Caidera
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...