Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/16/14 em todas áreas
-
[Tutorial]Optimizando Teclado
VictorWEBMaster e 4 outros reagiu a AnneMotta por um tópico no fórum
Bom esse titulo do tópico fico umas bosta mais eu não sabia como colocar rs. Bom eu estava caçando no tibia global quando percebi que eu estava tomando muitos hits quando eu andava com as setas do teclado pois dava umas pequenas travadinhas, fui pesquisar sobre o assunto se tinha como arrumar ou algo do tipo, acabei por achar um negocio que me ajudou muito em outro site e resolvi postar aqui com a minha explicação, abraço. - Não necessita baixar nenhum programa - É fácil de se faz - Caso não goste é simples desfazer - Ajuda muito quem caça na mão no Tibia Global quanto em OTserver - Acho eu que ajuda quem joga derivados sem bot também ------------------------------------------------------------------------------------- Vamos lá... Primeiro você deve clicar no botão do windows e procure por Teclado ------------------------------------------------------------------------------------- Abra o Teclado, o seu devera estar mais o menos assim ------------------------------------------------------------------------------------- Você deve deixar as duas barras de cima no máximo(--->) assim ------------------------------------------------------------------------------------- Ai basta você clicar em Aplicar e depois em OK e testar no seu tibia, eu testei e simplesmente adorei pois fica bem melhor pra caçar. Caso não veja diferença faça o teste... Deixe a as 2 barras no minimo(<---) de Aplicar, vá até o tibia e segure a letra A, você vai ver que vai ir travando... Depois deixe as 2 barras no máximo(--->) de Aplicar e teste novamente Texto e imagens feitos por Markin Exclusivo XTibia, See ya! -------------------------------------------------------------------- Caso você queria melhorar um pouco mais ainda faça o download deste Regristro(.reg): Aqui De um duplo clique em cima do registro, de ok e depois reinicie o computador, eu estou usando e é bem util... Caso não queria mais ou tenha algum problema com o mesmo baixe esse Registro Original(.reg): Aqui Créditos ao TibiaBR por disponibilizar o Registro, abraço. Comente, é de graça (:5 pontos -
Lista dos Storages Utilizados no Servidor
vinnevinne e 3 outros reagiu a Omega por um tópico no fórum
Na verdade é basicamente uma função a parte, mas o modo mais fácil de ativar ela é uma talkaction. Ela vai criar um arquivo de texto ordenando todos os storages que já foram usados por pelo menos algum jogador dentro do seu servidor. Somente chaves numéricas serão consideradas. Código storagelist.lua em talkactions/scripts function getUsedStoragesList() local storages = db.getResult("SELECT DISTINCT key FROM player_storage ORDER BY key") if not storages or storages:getID() == -1 then return false end local str = "Essas são as storages que foram usadas pelo menos uma vez no seu servidor:\n\n" local count = 1 repeat local key = storages:getDataInt("key") if tonumber(key) > 0 then str = str .. count .. " - " .. key .. "\n" count = count + 1 end until not storages:next() if str then local file = io.open("Used Storage List.txt", "w+") file:write(str) file:close() return true end return false end function onSay(cid, words, param) if getUsedStoragesList() then doPlayerSendTextMessage(cid, 27, "Lista criada com sucesso na pasta do seu servidor.") else doPlayerSendTextMessage(cid, 27, "Não foi possível criar a lista.") end return true end Tag Em talkactions.xml, adicione: <talkaction words="/storagelist" access="5" event="script" value="storagelist.lua"/> Use com o GOD/Admin e olhe na pasta do seu servidor. Abra o arquivo Used Storage List.txt. A cada novo uso, a lista é atualizada.4 pontos -
Hello Bom, hoje eu estava precisando de renders, então fui pegando uma por uma, até que cheguei em 200 renders, então resolvi compartilhar com vocês Informações : •Assassin's Creed = 13 •Grand Chase = 20 •Halo = 10 •League Of Legends = 45 •Mario = 26 •Sonic = 19 •Street Fighter = 19 •Tekken = 25 •Zelda = 23 •Total = 200 Renders Imagens : Downloads : •Grand Chase •Halo •Mario •Assassin's Creed •Zelda •Street Fighter •Sonic •LoL - League Of Legends •Tekken (Uploading .. ) Bom, separei por pastas, assim fica melhor pro pessoal fazer o download, e tal .. Abraços, Flinkton4 pontos
-
Baiak Deasung Editado (Versão beta) , 8.6
Xpretroool e 2 outros reagiu a FabioDias por um tópico no fórum
O Que Contêm no Servidor: ├ Zumbie Event ├ Woe Event ├ Castle War ├ Hunts Novas └Área Donate Modificações: ├ Templo ├ Retirado Bug vip2 ├ Retirado Bug da exp ├ Retirado Bug que joga 1kk no chão ├ Retirado Bug que da item editado └ Entre Outros! Imagem #1: Imagem #2: Scan: Download: Créditos: ├The Forgotten Server├ Baiak yurots └ Fabio Dias Por Editar O server └ Pudimdoce pelo Scan e Download3 pontos -
A equipe do Elënor está doando este layout para uso livre, façam bom uso. °Preview° °Download° °Scan° °+PSD+°2 pontos
-
Killua Raids System É um sistema normal de raids, compatível com quase todas versões do TFS (testado no 0.3.6 e 0.4), que acontecem automaticamente no local desejado, com dia e hora marcada. Instalando: Crie amoebaRaids.lua em data/globalevents/scripts e coloque isto: No globalevents.xml coloque essa tag: <globalevent name="AmoebaRaids" interval="60" event="script" value="amoebaRaids.lua"/> Configurar: A configuração é toda feita nessa tabela: local raids = { {name = "Monstros de fogo", monsters = {"Demon", "Dragon Lord", "Fire Devil"}, boss = "Orshabaal", fromPoss = {x=150, y=37, z=7}, toPoss = {x=157, y=42, z=7}, dates = {"Thursday-15:00", "Saturday-22:12"}, maxMonsters = 15}, {name = "Dragons", monsters = {"Dragon", "Dragon Lord", "Dragon Hatchling"}, boss = "Demodras", fromPoss = {x=1, y=1, z=1}, toPoss = {x=1, y=1, z=1}, dates = {"Monday-12:01", "Sunday-20:10"}, maxMonsters = 20} } name é o nome da invasão, que vai aparecer no broadcast. monsters são os monstros que vão ser criados na invasão. boss é o boss que nasce depois de x segundos após todos os monstros serem criados. fromPoss é o canto superior esquerdo da área onde a invasão vai ocorrer. toPoss é o canto inferior direito da área onde a invasão vai ocorrer. dates são as datas (dias e horarios) em que as invasões ocorrerão. Sendo sempre escritas nesse formato "Dia(em inglês)-hora:minuto" . Exemplo "Monday-12:01". A primeira letra deve ser maiúscula. maxMonsters é o número de monstros que vão ser criados na invasão, sem contar o boss. timeBoss é o tempo (em segundos) que o boss leva pra nascer após todos os outros monstros terem sido criados. Espero que gostem.2 pontos
-
Avatar - Assinatura - Banner - Sign - Background -
homersapiens e um outro reagiu a Alexclusive por uma questão
Tinha começado sem terminar: Que tal:2 pontos -
A vida me ensinou a nunca desistir, nem ganhar, nem perder, mas procurar evoluir:2 pontos
-
Avatar - Assinatura - Banner - Sign - Background -
homersapiens e um outro reagiu a Benny por uma questão
Olá amigo, =) Tentei fazer aqui .. segue : Aqui vai =) Avatar Assinatura Só dei um tratamento básico no seu avatar rs.2 pontos -
Exp Por Hit V4.0
jeanflamengo reagiu a meubk por um tópico no fórum
Instalação Primeiramente abra a pasta de seu ot, e procure pelo arquivo config.lua e procure por essas 2 linhas : experienceStages = false rateExperience = 50 se o experienceStages tiver ativado mude para false, pois o Stages é configurado no próprio script, e é muito importante o rateExperience tiver como 0, exemplo: experienceStages = false rateExperience = 0 agora entre na pasta creaturescripts/scripts e crie um arquivo lua, chamado exphit.lua e cole o seguinte código: para versões mais antigas como 8.54, 8.6 use : para versões mais novas como 9.8 : na mesma pasta procure pelo arquivo login.lua, e em cima de return true, adc a seguinte linha: registerCreatureEvent(cid, "ExpHit") volte na pasta anterior creaturescripts, e procure pelo arquivo creaturescritps.xml e cole as 2 tags: <event type="statschange" name="ExpGain" event="script" value="exphit.lua"/> <event type="combat" name="ExpHit" event="script" value="exphit.lua"/> para configurar a exp, que era configurada no config.lua está no começo do arquivo exphit.lua , e as configurações da party tbem, dos anéis, e até pode ser usado stages agora, segue abaixo o exemplo: -- CONFIGURAÇÕES DE EXPERIENCIA -- useStages = false -- Usar sistema de Stages , true/false premiumMultipliqueExp = 2 -- Players Premiums terão exp multiplicada, caso não querer deixe 1. rateExp = 50 -- Exp caso não for usar stages. local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.) ["1-50"] = 50, ["51-100"] = 45, ["101-150"] = 40, ["151-200"] = 35, ["201-250"] = 30, ["251-300"] = 25, ["351-400"] = 20, } ultimateExp = 15 -- exp que vai usar caso o level do player não tiver mais na tabela . -- CONFIGURAÇÕES DA PARTY partyPorcent = 40 -- Quantos Porcento da exp vai para os membros da party levelBlockParty = 1000 -- Diferença Maxima de Level permitida para membro da party ganhar exp. expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp. expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp. expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp. -- CONFIGURAÇÕES DE RINGS -- local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP. [3048] = 2, [3049] = 4, [3050] = 6, } -- FIM DAS CONFIGURAÇÕES ---- Log V2.0 : Log V3.0 ( 03/02/2013 ) : Log V4.0 ( 12/11/2013 ) :1 ponto -
Vip System by Account 1.0 By Kydrai Este é um vip system por account, ou seja, um sistema de vip válido para todos os characters de uma determinada conta. O script foi testado no TFS 0.3.6 - 8.54. E no site Gesior 0.3.4 beta4. Em caso de erros ou dúvidas é só postar. Funções do Script Função necessária para começar a usar o script: installVip() -> Cria a coluna no banco de dados para usar o sistema de vip (testei somente em sqlite, mas acredito que funcione em mysql) Funções que utilizam o account id: doTeleportPlayersByAccount(acc, topos) -> Teleporta todos os players da account getVipTimeByAccount(acc) -> Pega o tempo de vip setVipTimeByAccount(acc, time) -> Edita o tempo de vip getVipDaysByAccount(acc) -> Pega o tempo de vip em dias isVipAccount(acc) -> Verifica se é vip addVipDaysByAccount(acc, days) -> Adiciona dias de vip doRemoveVipDaysByAccount(acc, days) -> Remove dias de vip getVipDateByAccount(acc) -> Pega a data e hora que irá terminar a vip Funções que utilizam o creature id (cid): doTeleportPlayers(cid, topos) -> Teleporta todos os players da account getVipTime(cid) -> Pega o tempo de vip setVipTime(cid, time) -> Edita o tempo de vip getVipDays(cid) -> Pega o tempo de vip em dias isVip(cid) -> Verifica se é vip addVipDays(cid, days) -> Adiciona dias de vip doRemoveVipDays(cid, days) -> Remove dias de vip getVipDate(cid) -> Pega a data e hora que irá terminar a vip Inserindo as funções Abra a pasta data/lib, crie um arquivo lua e coloque: vipAccount.lua --[[ Name: Vip System by Account Version: 1.0 Author: Kydrai Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ [Functions] -- Install installVip() -- By Account doTeleportPlayersByAccount(acc, topos) getVipTimeByAccount(acc) setVipTimeByAccount(acc, time) getVipDaysByAccount(acc) isVipAccount(acc) addVipDaysByAccount(acc, days) doRemoveVipDaysByAccount(acc, days) getVipDateByAccount(acc) -- By Player doTeleportPlayers(cid, topos) getVipTime(cid) setVipTime(cid, time) getVipDays(cid) isVip(cid) addVipDays(cid, days) doRemoveVipDays(cid, days) getVipDate(cid) ]]-- -- Install function installVip() if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then print("[Vip System] Vip System instalado com sucesso!") return TRUE end print("[Vip System] Não foi possível instalar o Vip System!") return FALSE end -- By Account function doTeleportPlayersByAccount(acc, topos) if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then return TRUE end return FALSE end function getVipTimeByAccount(acc) local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";") if vip:getID() == -1 then print("[Vip System] Account not found!") return FALSE end return vip:getDataInt("viptime") end function setVipTimeByAccount(acc, time) if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then return TRUE end return FALSE end function getVipDaysByAccount(acc) local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) return days <= 0 and 0 or days end function isVipAccount(acc) return getVipDaysByAccount(acc) > 0 and TRUE or FALSE end function addVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) setVipTimeByAccount(acc, time) return TRUE end return FALSE end function doRemoveVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local time = vipTime - daysValue setVipTimeByAccount(acc, (time <= 0 and 1 or time)) return TRUE end return FALSE end function getVipDateByAccount(acc) if isVipAccount(acc) then local vipTime = getVipTimeByAccount(acc) return os.date("%d/%m/%y %X", vipTime) end return FALSE end -- By Player function doTeleportPlayers(cid, topos) doTeleportPlayersByAccount(getPlayerAccountId(cid), topos) end function getVipTime(cid) return getVipTimeByAccount(getPlayerAccountId(cid)) end function setVipTime(cid, time) return setVipTimeByAccount(getPlayerAccountId(cid), time) end function getVipDays(cid) return getVipDaysByAccount(getPlayerAccountId(cid)) end function isVip(cid) return isVipAccount(getPlayerAccountId(cid)) end function addVipDays(cid, days) return addVipDaysByAccount(getPlayerAccountId(cid), days) end function doRemoveVipDays(cid, days) return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days) end function getVipDate(cid) return getVipDateByAccount(getPlayerAccountId(cid)) end Exemplos de uso Talkaction GOD: /installvip /addvip name, days /removevip name, days /checkvip name Player: /buyvip /vipdays talkactions.xml: <talkaction log="yes" access="5" words="/installvip;/addvip;/removevip;/checkvip" event="script" value="vipaccgod.lua"/> <talkaction words="/buyvip;/vipdays" event="script" value="vipaccplayer.lua"/> vipaccgod.lua: function onSay(cid, words, param, channel) local t = param:explode(",") local name, days = t[1], tonumber(t[2]) if words == "/installvip" then if installVip() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Vip System instalado com sucesso!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não foi possível instalar o Vip System!") end elseif words == "/addvip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then addVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip ao "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar dia(s) de vip a este player.") end elseif words == "/removevip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then doRemoveVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você retirou "..days.." dia(s) de vip do "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar dia(s) de vip a este player.") end elseif words == "/checkvip" then if name then local acc = getAccountIdByName(name) if acc ~= 0 then local duration = getVipDateByAccount(acc) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..name.." possui "..getVipDaysByAccount(acc).." dias de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode visualizar os dias de vip a este player.") end end return TRUE end vipaccplayer.lua: function onSay(cid, words, param, channel) if words == "/buyvip" then local price = 1000000 local days = 30 if doPlayerRemoveMoney(cid, price) then addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Movement (Tile) Coloque actionid 15000 em um tile onde somente os vips poderão passar. movements.xml: <movevent type="StepIn" actionid="15000" event="script" value="viptile.lua"/> viptile.lua: function onStepIn(cid, item, position, fromPosition) if isVip(cid) == FALSE then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players vip podem passar.") end return TRUE end Creaturescript (Login) Quando player logar irá verificar se a vip do player acabou, se sim então irá teleportar todos os players da account para o templo, se não irá mostrar o tempo da vip. creaturescripts.xml: <event type="login" name="viplogin" script="viplogin.lua"/> viplogin.lua: function onLogin(cid) local vip = isVip(cid) if getVipTime(cid) > 0 and vip == FALSE then local townid = 1 doPlayerSetTown(cid, townid) local templePos = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, templePos, false) setVipTime(cid, 0) doTeleportPlayers(cid, templePos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua Vip acabou!") elseif vip == TRUE then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Action (Door) Coloque actionid 15001 na door onde somente os vips poderão passar. Use a porta gate of expertise (id: 1227) actions.xml: <action actionid="15001" script="vipdoor.lua"/> vipdoor.lua: function onUse(cid, item, fromPosition, itemEx, toPosition) if isVip(cid) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Somente players vip podem passar.") elseif item.itemid == 1227 then doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, toPosition) end return TRUE end NPC (Vendedor de VIP) vipnpc.xml: <?xml version="1.0" encoding="UTF-8"?> <npc name="Vendedor de VIP" script="vipnpc.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I sell {vip} days."/> </parameters> </npc> vipnpc.lua: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function buyVip(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if doPlayerRemoveMoney(cid, parameters.price) then addVipDays(cid, parameters.days) npcHandler:say('Thanks, you buy '..parameters.days..' vip days. You have '..getVipDays(cid)..' vip days.', cid) else npcHandler:say('Sorry, you don\'t have enough money.', cid) end npcHandler:resetNpc() return true end local node1 = keywordHandler:addKeyword({'vip'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want buy 30 vip days for 1000000 gp\'s?'}) node1:addChildKeyword({'yes'}, buyVip, {price = 1000000, days = 30}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then.', reset = true}) npcHandler:addModule(FocusModule:new()) Erros e Soluções Configurando o Gesior Com essa configuração irá aparecer o vip status do player no site e será possível vender vip pelo site. Se eu esqueci de alguma coisa é só avisar. accountmanagement.php Depois de: if(!$account_logged->isPremium()) $account_status = '<b><font color="red">Free Account</font></b>'; else $account_status = '<b><font color="green">Premium Account, '.$account_logged->getPremDays().' days left</font></b>'; Adicione: if(!$account_logged->isVip()) $account_vip_status = '<b><font color="red">Not Vip Account</font></b>'; else $account_vip_status = '<b><font color="green">Vip Account, '.$account_logged->getVipDays().' days left</font></b>'; Depois de: <td class="LabelV" >Account Status:</td><td>'.$account_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" > Adicione: <td class="LabelV" >Account Vip Status:</td><td>'.$account_vip_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" > pot/OTS_Account.php Substitua: private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0); Por: private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0, 'viptime' => 0); Substitua: $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch(); Por: $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('viptime') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch(); Substitua: $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']); Por: $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('viptime') . ' = ' . (int) $this->data['viptime'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']); Depois de: public function getPremDays() { if( !isset($this->data['premdays']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return $this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])); } Adicione: public function getVipDays() { if( !isset($this->data['viptime']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return ceil(($this->data['viptime'] - time()) / (24*60*60)); } Depois de: public function isPremium() { return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0); } Adicione: public function isVip() { return ceil(($this->data['viptime'] - time()) / (24*60*60)) > 0; } characters.php Substitua: if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Vip Status:</TD>'; $vip = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$config['site']['show_vip_storage'].';')->fetch(); if($vip == false) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } } Por: if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Account Vip Status:</TD>'; if(!$account->isVip()) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } } shopsystem.php (+Créditos ao GM Bekman) Substitua: if($buy_offer['type'] == 'pacc') { $player_premdays = $buy_player_account->getCustomField('premdays'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); $buy_player_account->setCustomField('premdays', $player_premdays+$buy_offer['days']); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_premdays == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>PACC added!</h2><b>'.$buy_offer['days'].' days</b> of Premium Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } Por: if($buy_offer['type'] == 'pacc') { $player_viptime = $buy_player_account->getCustomField('viptime'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); if($player_viptime > 0) $buy_player_account->setCustomField('viptime', $player_viptime + ($buy_offer['days'] * 24 * 60 * 60)); else $buy_player_account->setCustomField('viptime', time() + ($buy_offer['days'] * 24 * 60 * 60)); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_viptime == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>VIP Days added!</h2><b>'.$buy_offer['days'].' days</b> of Vip Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } Links Úteis 01- [Gesior Acc] Vendedo Vip Pelo Pacc Créditos: GM Bekman 02- Double Exp Para Vip Créditos: Vodkart 03- Outfits Só Para Jogadores Vips Créditos: Vodkart1 ponto
-
Fazer criaturas conversarem.
CMPunkWWE reagiu a fitaisolante por um tópico no fórum
Fala XTibianos, vim aqui postar um script muito simples, porem criativo e que eu nunca vi aqui no XTibia. É uma talkaction em que você faz um player falar, npc ou monstro. Obs: Os monstros ou NPC, se tiver mais de 1 criatura com o mesmo nome, somente uma vai falar, que é a primeira que seu char vai ir até ele por /goto Foto da talkaction: Vamos ao código, vá em talkactions/scripts e dê ctrl + c e ctrl + v em um arquivo qualquer e renomeie para criaturasfalar.lua, e coloque isso dentro: function onSay(cid, words, param) local t = string.explode(param, ",") doCreatureSay(getCreatureByName(t[1]), t[2], 1) return true end Agora abra o talkactions.xml e coloque essa tag: <talkaction log="yes" words="/falar" access="5" event="script" value="criaturasfalar.lua"/> É isso galera, abraços!1 ponto -
Help em Imagem.
interpolbr reagiu a wreymar por uma questão
Eae Pessoal Tou aqui para fazer um pedido... Foi pq eu deixo uma Imagem Transparente e Fica uns Lugarzinhos Brancos Na imagem ainda Deixando a imagem feia se for possivel alguem mim ensina a Deixar A >> Imagem Transparente e sem Ficar Lugar Branco Nela Tipo essa ae Olha como fica Queria Deixar uma Imagem Transparente e Ela não ficar com esses Lugares Pitados de Branco!! Rep+++ quem Mim ajuda1 ponto -
[Spell] Paralyze
viniciusBIG reagiu a Stigal por um tópico no fórum
Nome: Spell Paralyze Função: Paralyza o monstro/player deixando lerdos. Versão: Testada somente na "8.54". Créditos: Stigal. "Pasta Servidor > Data > Spell > Scripts" crie "newparalyze.lua" e adicione: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) local condition = createConditionObject(CONDITION_PARALYZE) setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) setConditionFormula(condition, -0.9, 0, -0.9, 0) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end - "Pasta Servidor > Data > Spell" em spell.xml adicione: <instant name="paralyze" words="paralyze" lvl="40" mana="70" prem="0" range="5" needtarget="1" blockwalls="1" needweapon="1" exhaustion="2000" needlearn="0" script="newparalyze.lua"> <vocation name="VOCAÇÃO1"/> <vocation name="VOCAÇÃO2"/> </instant> - - - Atenciosamente, Stigal.1 ponto -
Galera to Tk, vim aki posta meu 1 topico. ja vi muitas gente tentando criar ou mudar ip de cliente Propio. vo posta um pequeno tutorial e basico 90% garantido vamus la 1° vai no site do vapus http://vapus.net/customclient em (Address (Over 20 chars will result in IP) voce colca seu IP. OBS: se for pra mandar pra alguem vc coloca o ip do seu serve, que pega la no no-ip. exemplo:otpokemaniaco.zapto.org, mas se for pra vc entrar na sua maquina coloque o ip do seu pc. exemplo: 192.168.1.1 2° la em (Hacks (Only MC work with 9.1+!) vc marka apenas 1,2,3 e 5 quadrinho so isso. 3° em (Versions) vc escolhe a versao do seu serve: exemplo 8.54 4° e por ultimo so clicar em (Make me a Client!) e so aguarda. 5° quando termina, seu client vai tar feito, agora e so substituir pelo cleint do serve q vc baixo. exemplo: vc vai na pasta do client q vc baixo do serve, ve se os (EXECUTE, SPR,e DAT) ta com o nome de tibia exemplo (tibia, tibia.spr e tibia.dat) se nao tiver renomei e depois coloca seu client na pasta e substitua. pronto seu cliente ja esta pronto pra jogar. galera nao coloquei foto pq estava com preça, mas da proxima eu faço melhor. REP++++1 ponto
-
Quest
vinnevinne reagiu a AnneMotta por uma questão
local vocation = 2 -- Vocação que pode fazer a quest local itemadd = 2160 -- Item que vai ganhar na quest local storage = 42262 -- Só alterar se for preciso function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, storage) >= -1 then if getPlayerVocation(cid) == vocation then doPlayerAddItem(cid, itemadd, 1) doPlayerSendTextMessage(cid,22,"Você ganhou um item: "..getItemNameById(itemadd).."!") doSendMagicEffect(getPlayerPosition(cid), 28) doPlayerSetStorageValue(cid, storage, 1) else doPlayerSendTextMessage(cid,22,"Desculpe mais você não é um Elder Druid.") doSendMagicEffect(getPlayerPosition(cid), 2) end else doPlayerSendTextMessage(cid,22,"Desculpe mais você já fez esta quest.") doSendMagicEffect(getPlayerPosition(cid), 2) end return TRUE end <action actionid="24251" event="script" value="nomedoarquivo.lua"/>1 ponto -
Você tem quê criar o "channel" dos novos pokémons em channels.xml (faça baseando-se nos channels de pokémons já existentes).1 ponto
-
Segunda Edição.
interpolbr reagiu a wreymar por um tópico no fórum
1 ponto -
Diabolic Imp e Dragon Lord No título está Diabolic Imp + Dragon Lord, isso ocorre pois o Diabolic Imp sempre aparecerá no Tibia junto ao Dragon Lord (cuidado, o contrário não acontece sempre!) Então, vamos começar a fazer o mapa? Nosso mapa começa com a base, é claro! Faça ela desse modo: Primeiro faça o chão todo com frozen mud rock (id 7062 a 7066), que é um chão de pedra mais escuro. Agora, desligue seu auto border e faça o seguinte: Coloque lava nos cantos e também no meio. Coloque chão normal de pedra em alguns cantos. As paredes do local (não estão no tutorial) podem ser feitas com montanha normal ooooou a própria lava envolvendo o local. Lembrando que ele sempre é subterrâneo! Agora, vamos começar a fazer as bordas, primeiro você deve usar as as bordas pretas finas (rock: 7067 a 7078). Use do jeito que achar melhor, mas é muito bom que você tente brincar com elas, formando novos formatos não convencionais, como alguns na imagem seguinte! Perceberam como algumas bordas ficaram diferentes do convencional? É só brincar com elas! Agora você vai trocar algumas dessas bordas pelas bordas pretas grossas (dark rock: 7079 a 7090). É só substituir em cima! Podem perceber que o visual ficou muito melhor, correto? Agora vou indicar a vocês os principais itens de detalhe dessa área! Agora, nos cantos e no meio as jagged stones escuras, do jeito que preferir. As jagged stones claras você deve colocar somente em cima da parte de chão de pedra comum! Para achar essas stones, é só apertar o botão J no teclado e escrever seu nome que, assim, todas irão aparecer! Agora você vai colocar mais detalhes essenciais de nature: Pedras Andáveis (stones: 3610 a 3614) - Todos Lugares. Debris Andáveis (debris: 3648 a 3656) - Todos Lugares. Fire Fields (id 1489) - Na lava. Lava Holes (id 388 e 389) - Ao lado da lava. Stalagmites (id 386 e 391) - Todos Lugares e sempre em grupos de 3~4. Agora você pode completar um pouco isso mais com tufos de grama vivos em cima do chão de pedra normal e também alguns secos (queimados) em cima do chão escuro. Id dos secos: 10737 a 10740. Créditos: Anyur1 ponto
-
Diabolic Imp e Dragon Lord
RastaLegion reagiu a beto06 por um tópico no fórum
formato ficou zuado na minha opinião =d e quase impossível de se andar, falando em jogabilidade.1 ponto -
[LIFE THREAD] Justinno the Pretty
JustinnoTibianno reagiu a AnneMotta por um tópico no fórum
#Partiu #Desert #Quest1 ponto -
Olha vai em (data/actions/scripts) e Abre o boost.lua e apaga tudo la dentro e Cola isso.. Agora va em (data/actions/actions.xml) Apertar Ctrl+F e Procure por a Palavra Boost, Substitua a Tag antiga do boost.lua que estava la por essa... Salve, e de Reload no seu Serv.......Depois fala ai no que deu Atenção se Tiver algum Pokemon no seu Otserver que você queria que possa boostar e não esta ai e so editar assim... Vermelho - Nome do Pokemon Verde - Stone para Boostar ele Ajudei? REP+1 ponto
-
Baiak Deasung Editado (Versão beta) , 8.6
Fabio Henrique Dias reagiu a FabioDias por um tópico no fórum
ja li e estou de acordo só que daquele jeito e não cosigo! Apenas assim! me desculpe mas não sei postar imagens daquela forma e o link de download tbm não, sei dechar daquela forma.1 ponto -
1 ponto
-
ah sim, também tentei fazer aehuhaeu aqui :1 ponto
-
1 ponto
-
Nosso bem legal, Parabéns. Rep+ por compartilhar.1 ponto
-
1 ponto
-
Baiak Deasung Editado (Versão beta) , 8.6
Xpretroool reagiu a FabioDias por um tópico no fórum
Desculpe mas o mapa ja veio assim! ja tentei remover esses trojan mas so que não sai! e sao inofenciveis!1 ponto -
Olá abigos e abigas, fiz um script aqui meio atrasado para o natal rs, bom eu até que gostei espero que vocês achem algo útil para ele. Abra a pasta NPC crie um arquivo com nome papainoel.xml e adicione isso dentro: <?xml version="1.0"?> <npc name="Papai Noel" script="data/npc/scripts/papainoel.lua" walkinterval="1000" floorchange="0"> <health now="100" max="100"/> <look type="160" head="0" body="112" legs="93" feet="95"/> <parameters> <parameter key="message_greet" value="Ho-Ho! {|PLAYERNAME|}, para pegar seu presente basta voce falar {present druid}, {present sorcerer}, {present knight} ou {present paladin}!" /> </parameters> </npc> Depois abra a pasta NPC/scripts crie um arquivo com o nome papainoel.lua e adicione isso dentro: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local itemdruid = {{2160, 100}, {9778, 1}, {6512, 1}} -- itens que Elder Druid ira ganhar local itemsorcerer = {{2160, 100}, {8867, 1}, {6512, 1}} -- itens que Master Sorcerer ira ganhar local itemknight = {{2160, 100}, {2472, 1}, {6512, 1}} -- itens que Elite Knight ira ganhar local itempaladin = {{2160, 100}, {2500, 1}, {6512, 1}} -- itens que Royal Paladin ira ganhar local a = { level = 150, -- Level para falar com o Papai Noel storage = 72621, -- Não trocar } if msgcontains(msg, 'present druid') then if getPlayerStorageValue(cid,a.storage) == -1 then if getPlayerVocation(cid) == 6 then if getPlayerLevel(cid) >= a.level then selfSay('Ho-ho Feliz Natal '..getPlayerName(cid)..', você recebeu seus itens de {Druid}!', cid) for _, b in pairs(itemdruid) do doPlayerAddItem(cid, b[1], b[2]) doSendMagicEffect(getPlayerPosition(cid), 28) setPlayerStorageValue(cid,a.storage,1) end else doSendMagicEffect(getPlayerPosition(cid), 2) selfSay('{'..getPlayerName(cid)..'} você precisa ser level {'..a.level..'} para receber sua recompensa, faltam apenas {'..a.level - getPlayerLevel(cid)..'}. Ho-ho!', cid) end else selfSay('Voce não é {Elder Druid} '..getPlayerName(cid)..'!', cid) end else selfSay('{'..getPlayerName(cid)..'} voce ja pegou seu presente!', cid) end end if msgcontains(msg, 'present sorcerer') then if getPlayerStorageValue(cid,a.storage) == -1 then if getPlayerVocation(cid) == 5 then if getPlayerLevel(cid) >= a.level then selfSay('Ho-ho Feliz Natal '..getPlayerName(cid)..', você recebeu seus itens de {Sorcerer}!', cid) for _, b in pairs(itemsorcerer) do doPlayerAddItem(cid, b[1], b[2]) doSendMagicEffect(getPlayerPosition(cid), 28) setPlayerStorageValue(cid,a.storage,1) end else doSendMagicEffect(getPlayerPosition(cid), 2) selfSay('{'..getPlayerName(cid)..'} você precisa ser level {'..a.level..'} para receber sua recompensa, faltam apenas {'..a.level - getPlayerLevel(cid)..'}. Ho-ho!', cid) end else selfSay('Voce não é {Master Sorcerer} '..getPlayerName(cid)..'!', cid) end else selfSay('{'..getPlayerName(cid)..'} voce ja pegou seu presente!', cid) end end if msgcontains(msg, 'present knight') then if getPlayerStorageValue(cid,a.storage) == -1 then if getPlayerVocation(cid) == 8 then if getPlayerLevel(cid) >= a.level then selfSay('Ho-ho Feliz Natal '..getPlayerName(cid)..', você recebeu seus itens de {Knight}!', cid) for _, b in pairs(itemknight) do doPlayerAddItem(cid, b[1], b[2]) doSendMagicEffect(getPlayerPosition(cid), 28) setPlayerStorageValue(cid,a.storage,1) end else doSendMagicEffect(getPlayerPosition(cid), 2) selfSay('{'..getPlayerName(cid)..'} você precisa ser level {'..a.level..'} para receber sua recompensa, faltam apenas {'..a.level - getPlayerLevel(cid)..'}. Ho-ho!', cid) end else selfSay('Voce não é {Elite Knight} '..getPlayerName(cid)..'!', cid) end else selfSay('{'..getPlayerName(cid)..'} voce ja pegou seu presente!', cid) end end if msgcontains(msg, 'present paladin') then if getPlayerStorageValue(cid,a.storage) == -1 then if getPlayerVocation(cid) == 7 then if getPlayerLevel(cid) >= a.level then selfSay('Ho-ho Feliz Natal '..getPlayerName(cid)..', você recebeu seus itens de {Paladin}!', cid) for _, b in pairs(itempaladin) do doPlayerAddItem(cid, b[1], b[2]) doSendMagicEffect(getPlayerPosition(cid), 28) setPlayerStorageValue(cid,a.storage,1) end else doSendMagicEffect(getPlayerPosition(cid), 2) selfSay('{'..getPlayerName(cid)..'} você precisa ser level {'..a.level..'} para receber sua recompensa, faltam apenas {'..a.level - getPlayerLevel(cid)..'}. Ho-ho!', cid) end else selfSay('Voce não é {Royal Paladin} '..getPlayerName(cid)..'!', cid) end else selfSay('{'..getPlayerName(cid)..'} voce ja pegou seu presente!', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Configurar editando esta parte: local itemdruid = {{2160, 100}, {9778, 1}, {6512, 1}} -- itens que Elder Druid ira ganhar local itemsorcerer = {{2160, 100}, {8867, 1}, {6512, 1}} -- itens que Master Sorcerer ira ganhar local itemknight = {{2160, 100}, {2472, 1}, {6512, 1}} -- itens que Elite Knight ira ganhar local itempaladin = {{2160, 100}, {2500, 1}, {6512, 1}} -- itens que Royal Paladin ira ganhar local a = { level = 150, -- Level para falar com o Papai Noel storage = 72621, -- Não trocar } Informações: - O npc verificar a vocação do player e adiciona itens conforme sua vocação. - O level minimo para se usar o NPC é 150 - Só pode pegar o presente uma vez - Itens e level minimo configurável. Imagens do NPC: Ao falar com o npc: NPC verificando que o player pediu o presente que não é da sua vocação: NPC verificando que o player não tem o level minimo para pegar o presente e informando quantos leveis faltam para o player poder pegar o presente: Mensagem ao receber o presente: NPC informando que o player já pegou o presente: Créditos: Maarkiin(AnneMotta)1 ponto
-
A minha Ultima sprite Do Alakazam Peço desculpas pela imagem estar ruim mais vou Mostrar Alakazam : http://imagizer.imageshack.us/v2/1600x1200q90/823/vm37.png1 ponto
-
não dê zoom na imagem, fica difícil de avaliar.. afinal você mapeia com esse zoom?1 ponto
-
1 ponto
-
Mais o player vai receber os 3 presentes ou é 1 dos 3, aleatório?1 ponto
-
Seu Ultimo Sprite.
Nyco reagiu a Helton Muniz por um tópico no fórum
Sou iniciante tentando melhorar né.1 ponto -
[Life Thread] Transloko
vital900 reagiu a Piabeta Kun por um tópico no fórum
so complementando a sua duvida, para chares com skill abaixo do 80 de shield o melhor eh armor, acima disso melhro eh zaoan legs, logo depois melhro que todos eh dwarven legs, depois so trocando por uma ornate legs, em caso de duvida sobre armas de 2 maos, elas compençao em caso de skill de ataque ser maior que shield, pois o caucule de def de armas two handed sao por skil de ataque basta caucular a def da arma para ver se compensa, no caso de jogadores de sword a melhro opçao apos o lvl 75 é a aveger, so sendo trocada depois por uma shiny blade, as abxio da shiny nao compençao, as veses athe uma espada de 1 mao eh melhro usar sem shield para ser feito o cauculo com skill de ataque, se voce tem muito mais skill ofensiva que defensiva eh claro!1 ponto -
[Life Thread] Maarkiin Voltandoajogar
vital900 reagiu a Piabeta Kun por um tópico no fórum
eu que indiquei, task full time até o lvl 50 pelo menos gera um lucro absurdo fora que juntar boss points pra matar boss de ancient scarab eh op na grana! dropou um broche = 400 a 600k na mao por broche! acho que vo fazer um topico de pergunte ao piabeta, ja to pro em up low lv que da pra tirar varias duvidas de all! se alguem pagar uma transfer eu vo pra calmera! u.u1 ponto -
Desculpa amigo, mas .. Tem um ano que sou cadastrado no fórum, mas sempre estou ajudando quando posso. Já você, nunca vi sanar uma dúvida, sempre tem tópico seu na área de pedidos, se fosse um usuário exemplar, poderia ter se registrado ontem, que com certeza seria possivel a mudança do teu nome. Não vejo um motivo para você reclamar, então, tente ajudar uma comunidade, não só sugar, e sugar .. =) Abraços, Flink~1 ponto
-
E as classes vão ser Elf , Blade Knight , Soul Master, Magic Gladiator?'-' zoa parei kk' Dahora (: O fera tu disse que precisa de um rpg maker né?1 ponto
-
2 Pedidos- Avatar+Logo
Helton Muniz reagiu a Benny por uma questão
olá monster então, eu fiz o bg do pokémon só.. pois não achei nada que de um flow legal, com o tema muk sorry ~1 ponto -
Mensageiro não é possível ativar ele por comando e desativar depois se querer posso fazer um Duvida sanada reportado1 ponto
-
Mudança de nome
masdead reagiu a Alexclusive por um tópico no fórum
Nome alterado com sucesso! Fiz essa alteração como forma de agradecimento por tudo que você já fez a favor da comunidade.E DuMal não era muito seu tipo... @topic Fiz as alterações até o Thiago! Darei continuidade assim que possível! Aproveitem os nomes novos e façam dele uma nova era! Faça valer a pena o meu esforço e a oportunidade dada a vocês. Atenciosamente, Alexandre.1 ponto -
[Ajuda] Spell não da dano
viniciusBIG reagiu a VanWilder por uma questão
Tenta Assim local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ANI_EXPLOSION) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_NONE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -120.2, 1, -125.2, 1) local arr= { {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,1,1,1,0,0,0,0}, {0,0,0,1,1,1,1,1,0,0,0}, {0,0,1,1,1,1,1,1,1,0,0}, {0,1,1,1,1,2,1,1,1,1,0}, {0,0,1,1,1,1,1,1,1,0,0}, {0,0,0,1,1,1,1,1,0,0,0}, {0,0,0,0,1,1,1,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}, } local area = createCombatArea(arr) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end1 ponto -
viado mas sua mãe me feeda todo dia de noite eu chego com ghost pela sala e dps uso flash pra ir pro quarto e rushar o inibidor dela1 ponto
-
DigiWO Fala galera, hoje eu vim aprensetar um projeto em que participo como mapper. Algumas imagens ao ir para tirar as ss eu vi erros e ja corrigi mais fiquei com preguiça de re-upar as imagens. Espero que gostem. Todas as NOVAS sprites são da autoria de nossos spriters (insaend e flyckks). (deu um erro na hora de digimon voar mais só aconteceu ali.. testei novamente e estava normal) (foi editada) Se não gostou apenas não comente. Não me interessa se existem outros projetos do mesmo tipo, caso venha falar destes eu vou procurar os moderadores da seção para tomarem as devidas medidas. É um projeto novo e que esta em plena atividade, não temos datas de lançamento prevista porem já ocorreram alguns tests internos, e PROVAVELMENTE em pouco tempo haverá tests abertos e para fãs selecionados. Obrigado e espero que gostem. Para estar por dentro das novidades: http://www.facebook....?ref=ts&fref=ts (inclusive videos dos tests internos, com varios ataques e sprites). Ps: existem muitas outras sprites, mais algumas nao serão mostradas para ficar um gosto de quero mais. (todas as existentes já estão configuradas)1 ponto
-
Entendendo o que é: #RPG# Role Playing Game Oiq! Visto que tem muita gente buscando servidores alternativos de Tibia com uma história que foge ao que vemos normalmente, resolvi fazer esse artigo/tutorial. Em alguns tópicos pessoas buscam opiniões diferentes sobre como adicionar RPG e outras criticam o mesmo. Mexer com RPG normalmente é algo complicado, que engloba um assunto enorme. Existem diversos modelos diferentes de RPG, vou tentar abordar o básico aqui, mostrando exemplos de como criar personagens (e como caracterizar os mesmos), citarei alguns exemplos de RPGs que são bons como base e claro, como adequar isso ao que vemos no clima do Tibia. Let's go! Indíce: #1 Introdução ao RPG #2 Entendendo a importância dos NPCs #3 Caracterizando os NPCs #4 Criando sua história #5 Roleplay "Forfun" #6 Importância do Mapping #7 Importância do Scripting #8 Ligando sua história à criação de seus personagens #9 Referências #10 Finalizando -------------------- #1 Introdução ao RPG -------------------- Nos dias atuais é cada vez mais fácil abrir um otserver: diferentes opções permitem que um iniciante baixe um servidor pronto e não tenha que mexer em absolutamente nada pra começar o jogo. Entretanto, uma minoria de servidores vem se destacando por abordar um tema que até então era quase que exclusividade do Tibia Global: o Roleplaying! Segundo o Wikipédia, RPG (Role-Playing Game) é "um tipo de jogo em que os jogadores assumem os papéis de personagens e criam narrativas colaborativamente. O progresso de um jogo se dá de acordo com um sistema de regras predeterminado, dentro das quais os jogadores podem improvisar livremente. As escolhas dos jogadores determinam a direção que o jogo irá tomar". No Tibia, temos um MMORPG, que seria um RPG online massivo para múltiplos jogadores. Enjoado dos servers sempre iguais, os jogadores tem buscado opções que saiam do mesmo feijão com arroz. Um bom exemplo é o sucesso do Pokémon Online (SVKE). O jogo não tem uma história hiper-detalhada por trás (até porque pega a história já pronta do jogo/anime) mas também não segue o que costumamos ver por ai. Os NPCs são todos editados (inclusive outfits) e passam diferentes missões/quests: Note que o jogo aposta em NPCs com alusões a pessoas reais. Vou utilizar esse mesmo exemplo em breve pra mostrar que não é apenas o outfit editado. O problema em torno disso é que muita² gente pensa que adicionar RPG se limita em adicionar um novo NPC que passe uma missão e pronto. Errados! -------------------- #2 Entendendo a importância dos NPCs -------------------- Novamente pegando a ajuda do Wikipédia, veja o que tem a dizer sobre NPC: "Um personagem não-jogável/manipulável (do inglês, Non-player Character ou NPC) é um personagem de qualquer jogo eletrônico que não pode ser controlado por um jogador mas se envolve de alguma forma no enredo de um jogo. Ele exerce um papel específico cuja finalidade é a simples interatividade com o jogador". Note que o NPC não pode ser controlado pelo jogador, mas se envolve no enredo do jogo. Ou seja, se você for quer realmente adicionar o RolePlay ao seu servidor, o modo mais fácil é através dos NPCs. Eles que levam as informações do enredo (história) do jogo pra os jogadores. Eles devem fazer parte desse enredo, devem ter uma história - as vezes complexas (detalhadas) e em outras simples (objetivas). Basicamente, os NPCs Tibianos se dividem em 3 grupos com base na sua importância in-game: Mercadores, Missões e Suporte. Mercadores: são os responsáveis pela compra e venda de bens ou pela prestação de serviços. Estão presentes em todas cidades Tibianas e são indispensaveis pro andamento do comércio. Também considero como Mercador NPCs que vendem bless, por exemplo. Missões: Os NPCs típicos das quests. São eles que te passam as missões e te dão as recompensas depois. Suporte: Os NPCs que ajudam os das missões. As vezes aparecem no meio das quests apenas pra um papo rápido, quando dão alguma dica sobre o que você deve fazer. Também considero como suporte NPCs do templo, por exemplo. Agora a pergunta: qual desses grupos se adequam ao RPG? A resposta é: Todos! Não pense que só porque um NPC trabalha numa loja ele não pode ter uma ou mais histórias. Um bom exemplo pra isso é o NPC Sam, de Thais. Ele é o mercador da cidade, isso todo mundo sabe. Mas tem uma história por trás (suporte) e te passa missão numa quest também: SPOILER Ele troca uma An Old And Used Backpack por uma Dwarven Armor. Perto do Sam temos o NPC Frodo , que embora não passe missões também vende itens (poucos) mas pode te dar um suporte enorme quanto a história do jogo. Veja aqui: http://www.tibiawiki.com.br/wiki/Frodo/Transcrições O mais interessante desse NPC é a quantidade de respostas que ele dá pra diferentes assuntos. -------------------- #3 Caracterizando os NPCs -------------------- Existem alguns detalhes nas características dos NPCs que indicam quem eles são e como vivem. Separei 3 detalhes básicos: Físicas: O outfit que o NPC usa diz muito sobre ele. Cor do cabelo pode indicar idade, cor da roupa pode definir uma religião e o outfit pode definir situação financeira (já imaginou beggar rico ou king pobre? estranho ). Comunicação: O modo de falar também influencia muito sobre ele. O uso de gírias, palavrões ou carinhos pode mudar sua impressão sobre alguém, não é? Localização: o lugar onde vive é o terceiro ponto e chega pra dar ênfase ao clima que você criou com os outros dois detalhes: imagine um mendingo, que fala com gírias e xinga muito, vivendo num castelo. É estranho, certo? Então, o mapping é sim necessário pra uma boa interpretação de personagem! Lembra que falei do Pokémon Online? Note todos esses detalhes presentes: Os NPCs tem o outfit personalizado e dentro do personagem. Falam com gírias, gangsta! E sua localização, numa esquina, fecha o quadro. Quem pensou nisso no PO teve uma noção de RPG! É isso. Em resumo dessa parte: Os NPCs não devem ser apenas um boneco parado no meio do nada: utilize eles e seus detalhes pra ligar os jogadores a história do seu jogo. -------------------- #4 Criando sua história -------------------- Tá ai a parte que a galera tem mais dificuldade. Nem todo mundo nasce com criatividade pra virar escritor de roteiros de cinema, logo criar uma história vira um desafio enorme. O que mais surge é aquela velha história: o heroi amava uma princesa que foi sequestrada por um vilão demoniaco e blablabla... chega! Isso já é clichê a 20 anos nos jogos do Mário. Que tal mudar isso? essanaopodiafaltar O melhor modo de criar uma história é buscar referências em outras. Pode parecer algo feio, mas te garanto, é MUITO comum. As alusões mais simples por exemplo são uma boa pedida (e o Tibia está cheio, veja clicando aqui). Você faz uma brincadeira com alguém de outra história, já te ajuda a compor o personagem. Mas o melhor mesmo é buscar coisas que você vive. Seus amigos, parentes, professores... todas essas pessoas podem interferir um pouco na história. Os personagens de Harry Potter, por exemplo, são baseados nos amigos da escritora J.K Rowling na infância. Claro que isso não precisa ficar exposto, basta você mesmo saber. Aquele sua prima gostosa pode dar nome à atendente de uma taverna, por exemplo. Ela é loira? Põe no Outfit. Ela usa decote? Também... e por ai vai. Outro ponto legal é utilizar histórias que acontecem com você e transformar em coisas in-game. Uma história engraçada que você viva pode virar uma quest por diversão no jogo. Um exemplo disso é a série de jogos do Mario . Os inimigos Chain Chomps (aquelas bolas de ferro com uma corrente amarrada numa madeira) remetem a uma história que o criador do jogo viveu. Quando era mais novo foi atacado por um cachorro, mas ao fugir o canino ficou preso pelo tamanho da sua coleira. Veja mais aqui: http://www.reinodocogumelo.com/2010/09/o-feroz-dossie-dos-chain-chomps.html Também é interessante essa materia que fala sobre os Dry Bones (inimigo frequente da série). Talvez tenha sido criado com alusão a bíblia sagrada: http://www.reinodocogumelo.com/2010/03/os-dry-bones-sao-uma-alusao-biblia.html Notou como os grandes escritores e gamers imitam a vida pra utilizar na arte? -------------------- #5 Roleplay "Forfun" -------------------- Eu nem ia adicionar isso nesse artigo/tutorial, mas no fim achei interessante. Essa é uma modalidade que tem crescido no Tibia Global, que são as missões mais por diversão. Normalmente dão recompensas no final, mas não é nada tão significativo como um item de full set. Esse tipo de RPG é ótimo pra quebrar a rotina conhecida dos MMORPGs - level level level venderloot level level quest level level. Um exemplo é essa quest: http://www.tibiawiki.com.br/Troll_Sabotage_Quest/Spoiler Eu nunca fiz ela no global(até porque não é do meu tempo), mas lendo o spoiler da pra ver a Cip pensando em coisas legais como pegar distância pra dar um salto. Nessa classe entram os Achievements. -------------------- #6 Importância do Mapping -------------------- Eu disse acima que o mapping é importante pra compor o personagem. Aqui vou explicar melhor o motivo! Quando se trata de entrar no clima do personagem, o número dedetalhes na região que ele estiver aumenta as chances de você se sentir parte viva daquela história. Veja o exemplo abaixo: Em qual das duas imagens parece mais que você realmente está num cemitério? A primeira, certo? (sempretemumtrollpradizerqueasegundaimagempassamai sessaideia) Logo, se você deseja deixar seu server com o clima de RPG, procure um bom mapper. Ele vai saber passar o clima que você precisa pra o jogo. Entretanto, um ponto que acho bom ressaltar: o mapa overdetailed (com excesso de detalhes) é interessante quando se trata de caracterizar um personagem... mas é péssimo quando usado em todo mapa. Em alguns lugares, o melhor mesmo é ser simples e objetivo. Até porque assim o jogador tem mais espaço pra andar e tal. Então, fica a dica Outro ponto interessante quanto ao mapping é o shape (formato) do mesmo. Caso você vá fazer uma ilha com um clima demoniaco, não faz sentido ser em formato de coração, certo? Mas ficaria legal em formato de caveira. Pouca gente repara nessas coisas, mas é bom analisar o mapping/RPG desde o começo - a base da área que você vai criar descreve um pouco sobre ela -------------------- #7 Importância do Scripting -------------------- Agora que já disse porque o uso de mapas bem feitos, vou explicar o motivo dos scripts O Tibia em si te dá uma série de coisas já pronta que podem ser interessantes in-game. Entretanto, quando se trata de sair da rotina, é sempre interessante uma novidade que te prenda aquilo: é ai que entram os scripts Atualmente, nos OTs ervers mais influentes é possível fazer dezenas de coisas que não são do Tibia Original. Quem já se aventurou pela cidade de Ankrahmun e se imaginava voando de verdade no tapete? Pois é, com os scripts e o conhecimento que se tem hoje isso já é possível. Logo, se você deseja deixar seu server com o roleplay mais prático (sem ser apenas conversa) um bom nível de scripting é importante Um bom exemplo que ilustra tanto o mapping quanto o scripting é o jogo Kingdom Age. Assista o trailer e diga o que sente: -------------------- #8 Ligando sua história à criação de seus personagens -------------------- Agora que você já sabe como caracterizar o seu NPC ou o personagem de sua história, vamos a um passo a passo rápido sobre como criar ele. O primeiro ponto, pra mim, é ter um esboço da história em mente. Quando você tem uma noção do que quer fazer fica mais fácil do que querer criar uma história sem nenhum pré-planejamento. Vou dar um exemplos aqui de algumas características interessantes na criação: Note que só por essa base eu já tenho material pra criar duas áreas: a vila de Wyzzor (semi-abandonada) e a cidade de Chooz. Junto com essas áreas vem os personagens: as pessoas que ainda vivem em Wyzzor, as que foram pra Chooz, as que lutaram e ainda lutam nessa batalha e claro: os minotauros! Não dá pra criar uma história mostrando apenas um dos lados... é injusto! Alias, eu acho até mais interessante apostar na criação de uma bela cidade de minotaurs no subsolo estilo Mintwallin. IMPORTANTE Algo que não pode de forma alguma deixar passar: as histórias paralelas! Quando se fala de roleplay, não pense que deve ter apenas uma história principal. Nesse exemplo que dei da pra notar que o foco é na batalha entre minotaurs e humanos, mas quem disse que não podem ter histórias menores? Elas que dão motivação a procurar segredos. Alguns exemplos: Paixão entre um certo Minotaur e uma Humana (zoofilia tibiana? ahueaheua) Familias separadas entre cidades Reféns capturados pelos Minotaurs Familias não sabem se seus parentes estão vivos ou mortos Enfim, em 20 segundos pensei em 4 coisas que podem ser úteis como quests e histórias. E pra finalizar, algo importantíssimo: os NPCs devem responder sobre os outros! Não faz sentido dois NPCs morarem na mesma casa (um no térreo e o outro no primeiro andar, por exemplo) e ao perguntar o nome do outro eles não falarem nada. Não deu pra entender? Vou explicar: Note que usei a personalidade dos dois memes da internet nas suas respostas. O Cool mais gentil e safado enquanto o Fuu é mais stressado. Tá, não foi um bom exemplo, mas deu pra entender DHUSADHU Novamente vou usar o exemplo do Frodo, NPC de Thais, pra você ver a quantidade de histórias paralelas que ele se relaciona: http://www.tibiawiki.com.br/wiki/Frodo/Transcrições Nessa parte é legal o uso de referências a coisas reais... é o que vai ver no próximo tópico: -------------------- #9 Referências -------------------- Já falei de algumas até aqui: Mário, Harry Potter, Biblía, Pokémon, etc. O mais importante quanto as referências é saber procurar. A vida te mostra várias coisas que podem servir como referência: seja jogos, filmes livros e etc. Que tal a partir de agora, ao ver um outro jogo, pensar se aquilo não pode ser levado pro ar Tibiano? Sem sair do próprio Tibia, já tentou analisar o jogo pelo lado roleplay? O artigo da Cipsoft desse mês, sobre as rotworms, deixa o RPG beeeeeem claro. Leia você mesmo aqui: http://forums.tibiabr.com/showthread.php?t=399797 Aposto que nunca mais vai ver uma Rotworm do mesmo jeito :3 Um exemplo externo agora: Castlevania! O jogo tem um bestiario enorme, com várias criaturas iguais ao Tibia. A história também anda pelo mesmo clima medieval-mistico. Se você começar a jogar e pensar no Tibia, verá como dá pra fazer uma coisa legal Ainda no ar medieval, temos a série Final Fanttasy (principalmente os antigos). Mas essa nem vou comentar muito, já que tem um ATS em desenvolvimento baseado na série - melhor ser original =P Caso queira fugir do Tibia e buscar algo mais moderno, também tem bons RPGs. Um exemplo é o jogo Earthbound: lá você não encontra dragões nem cavaleiros, os inimigos vão de punks a hippies, passando por satanistas de uma seita. -------------------- #10 Finalizando -------------------- Como disse no começo, essa área do Roleplaying é bem ampla. Escrevi um pouco aqui no tutorial, mas sempre sobra áreas pra comentar. Caso tenha alguma sugestão de como incrementar o tutorial, comente! Caso tenha dúvida sobre alguma área, também comente. Eu sei que no geral deve ter ficado até chato o tuto. Mas, caso você realmente queira deixar seu server com RPG, não se deixe levar pela preguiça: você acaba levando mais pra sua vida do que os R$ que o server pode faturar: de uma forma ou de outra, você cria histórias que parecem livros sem notar Utilizar a criatividade é sempre bom Créditos pra TibiaWiki, os respectivos donos dos jogos Pokémon Online e Kingdom Age e todas as referências que usei aqui (Mario, Harry Potter, etc). Espero que gostem, gastei algumas horas pra fazer isso =) Se gostou agradeça Isso motiva a fazer novos tutoriais e não te custa nada1 ponto
-
Serve para que o jogador até determinado level não perca Skill,Exp,Loot ao morrer(configurável) creaturescript/script levelprotection.lua V1 é uma versão totalmente configurável,magic,exp,skills! V2 -- é uma versão já configurada, false para não perder skills e level e true vai perder tudo. creaturescript.xml <event type="death" name="ProtectLevel" event="script" value="levelprotection.lua"/> creaturescript/script/login.lua adicione: registerCreatureEvent(cid, "ProtectLevel")1 ponto
-
Interessante, mas esse evento que você citou tem outro nome, conheço ele e já pensei em desenvolver para postar... Mas quem sabe né? Uma coisa de cada vez1 ponto