Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/01/12 em todas áreas
-
[Tutorial] Criando Novos Pokemons Para Pda [Iniciantes]
douglahz6996 e um outro reagiu a Yan Oliveira por um tópico no fórum
Bom vejo que muitos membros novos estão com duvidas de como criar novos pokemon no PDA... bom vim ensinar como. 1º Vai em Data/monsters e Crie o novo pokemon.xml e depois adicione ele no monsters.xml 2º Vai em Lib/Configuration e faça isso: Em movestable onde ficam os ataques dele so colocar os ataques vou dar exemplo dos ataques: ["NOME DO POKEMON NOVO"] = {move1 = {name = "Dragon Claw", level = 85, cd = 15, dist = 1, target = 1, f = 60, t = "dragon"}, move2 = {name = "Ember", level = 85, cd = 10, dist = 10, target = 1, f = 42, t = "fire"}, move3 = {name = "Flamethrower", level = 85, cd = 20, dist = 1, target = 0, f = 80, t = "fire"}, move4 = {name = "Fireball", level = 85, cd = 25, dist = 10, target = 1, f = 75, t = "fire"}, move5 = {name = "Fire Fang", level = 85, cd = 20, dist = 1, target = 1, f = 65, t = "fire"}, move6 = {name = "Raging Blast", level = 85, cd = 35, dist = 1, target = 0, f = 100, t = "fire"}, move7 = {name = "Fire Blast", level = 85, cd = 60, dist = 1, target = 0, f = 115, t = "fire"}, move8 = {name = "Wing Attack", level = 90, cd = 35, dist = 1, target = 0, f = 75, t = "flying"}, move9 = {name = "Magma Storm", level = 95, cd = 90, dist = 1, target = 0, f = 95, t = "fire"}, move10 = {name = "Scary Face", level = 90, cd = 50, dist = 1, target = 0, f = 0, t = "ghost"}, move11 = {name = "Rage", level = 85, cd = 40, dist = 1, target = 0, f = 0, t = "dragon"}, Ae se coloca os ataques que desejar, lembrando que f é força pra quem não sabe. e em Status Pokemon Kanto ou Johto mesmo pode add coloque isso: ["NOME DO NOVO POKEMON"] = {offense = 8.5, defense = 7.8, specialattack = 11, vitality = 7.8, agility = 167, exp = 209, level = 85, type = "TIPO DELE", type2 = "2 TIPO DELE"}, Ae vc balanceia ele de acordo a seu gosto. Depois em Fotos add ele: ["NOME DO NOVO POKEMON"]= XXXX, Em XXXX você coloca o id do portrait dele. Depois em Pokescatch add ele: ["NOME DO NOVO POKEMON"] = {chance = XXXX, corpse = YYYY}, Em XXXX a chance de capturar ele e em YYYY o Id do Corpse dele. Depois em Newpokedex add isso ele: ["NOME DO NOVO POKEMON"] = {gender = 875, level = XXXX, storage = 100, stoCatch = 666006}, Em XXXX coloca o level dele. Em OldPokedex add ele: {"NOME DO NOVO POKEMON", XXXX, 1006}, Em XXXX o level dele. E se for add alguma habilidade nele fica la no final, vou dar um exemplo de ele atravessando (GhostWalk) parede vc coloca isso: ["ghostwalk"] = {"Gastly", "Haunter", "Gengar", "Shiny Abra", "Shiny Gengar", "Misdreavus", "NOME DO NOVO POKEMON"}, Bom é isso... sei que é simples, mais fiz um tutorial basico para os iniciantes não ficarem com duvida.2 pontos -
Cave De Giant Spider By Brenomapper'
GodalonexD e um outro reagiu a otmapperbreno por um tópico no fórum
BrenoMapper' Apresento-lhes uma cave de Giant Spider para complementar seu mapa, seja na Área vip, ou onde quiserem. Dados do Mapa: position: x:1300 y:1010 y:7 Total creature count: 108 Total spawn count: 75 Mean creatures per spawn: 1.44 Fotos: Bom pra quem gostou está ai o Link para Download: http://www.4shared.c...enomapper.html? o 4shared possui um sistema de scan. Logo estarei divulgando mais criações minhas. QUEM GOSTOU DA +REP! Obrigado! cave GS by brenomapper.rar2 pontos -
Show Off
masdead e um outro reagiu a SamueLGuedes por um tópico no fórum
Bem eu nao tinha nada pra fazer ai começei a fazer uma cidade, mais primeiro logico, começei um templo e alguns lugares basicos como uma ilha e uma house, só pra treinar. Templo: Ilha: E uma house do lado do templo pra ficar bonito: @Edit (01/12/2012) Uma semi-montanha eu acho: E um vilarejo, esse eu demorei, eu tive que ver alguns tutoriais, acho que nao ficou bom: @Edit (11/12/2012) Outra ilha: @Edit (29/03/2013) para não deixar o tópico sem novidades, aqui vai mais uma obra minha, comentem: Eu vi alguns tutoriais de mapping e me inspirei a criar só que nao ficou muito bom kkk. Mais pra frente eu coloca mais imagens. Mas por inquanto comentem esse ai. Obrigado.2 pontos -
1. Introdução 2. Criando um formato para sua montanha 3. O uso correto das bordas (grounds). 4. O uso correto de gravel 1.Este tutorial trata-se de um lista com diversas dicas para usufruir em suas montanhas, criando a cima de tudo um aspecto mais harmônico. 2. Criando um formato para sua montanha; - O formato recomenda-se somente o uso de raw sem o autoborder. Primeiramente abra o raw pallete, vá em nature, procure o seguinte: -Tenha em mente mais ou menos o formato, comece a fazer-lo, mas não se esqueça tente o máximo possível não deixar parecendo uma forma geométrica, varie!!!! -Caso haja outros andares em sua montanha, apenas suba um andar e continue, como mostra a o foto abaixo (você pode usar um ground qualquer em sua montanha para não se perder): -Por último adicione as bordas em sua montanha (recomendo não usar excessivamente) e as escadas. *Não encha a montanha de bordas!! *Não se esqueça de deixar um local para as escadas. Obs: está dica só foi apresentado o FORMATO. 3.O uso correto das bordas (grounds) -Diversos mappers encontram dificuldades quanto a borda em grounds(em montanhas), temos duas opções a mais fina ( ) ou a mais grossa ( ), quanto ao uso de ambas recomenda-se usar a mais fina em grass, dirt,light dirt e grounds parecidos, já a mais grossa é utilizada para grounds como gravel , rock soil e grounds do gêneros, como mostra o exemplo abaixo: *As bordas encontram-se em raw pallete/borders. -Quando você for mesclar grounds é recomendado o uso das duas, mas como assim?, primeiro mescle os grounds: -Comece sempre no ground em minoria no caso é o rock soil, utilizamos a borda grossa, segue o resultado: -Agora utilizamos a borda mais fina no outro ground (grass). *Agora sua montanha está com as devidas bordas(grounds). 4. O uso correto de gravel: -Diversas pessoas não sabem como distribuir corretamente o gravel e aonde adiciona-lo, bem vamos ao que interessa, primeiro vá em raw pallete/exterior e procure os gravel: -é algo muito simples, basta associar cada gravel a seu devido ground, gravel com tons cinzas seram associados a grounds de pedra, use de acordo com o espaço que tem disponível, mas não em excesso! -Agora vamos aos formatos dos gravels, também é muito simples, primeiramente não recomendo o uso de AUTOBORDER, tente variar o formato de gravel como mostra na imagem abaixo: *O uso do gravel não necessita de mais explicações, é muito simples.2 pontos
-
Hunt Serpent Spawns(Bot) By Brenomapper'
Kombosabo e um outro reagiu a otmapperbreno por um tópico no fórum
BrenoMapper' Apresento-lhes uma cave de Serpent Spawn para complementar seu mapa, seja na Área vip, ou onde quiserem. Dados do Mapa: position: x:1190 y:590 y:8 Total creature count: 33 Total spawn count: 33 Mean creatures per spawn: 1.00 Fotos: Bom pra quem gostou está ai o Link para Download: http://www.4shared.c...enomapper.html? O 4shared possui um sistema de scan. Logo estarei divulgando mais criações minhas. QUEM GOSTOU DA +REP! Obrigado! Cave SP by Bbrenomapper.rar2 pontos -
Apresentação Geral
Gabriel Couto e um outro reagiu a LordZezim por um tópico no fórum
Isso aí. Ainda mais nas férias, vamos redobrar o ritmo!2 pontos -
[Pokemon] PDA By Slicer Pokemon dash advanced editado por slicer, vários bugs retidos. Projeto encerrado! Espero que todos tenham gostado desse 1 ano de trabalho duro! Todas as atualizações: * Leiam e sigam as instruções do Change Log dentro da pasta do patch! Downlaods: PDA By Slicer With Level System v2.9 Full -> http://www.mediafire...z2afuu75zblvmvq PDA By Slicer Without Level System v1.9 Full -> http://www.mediafire...td0l0ip9ajprrbf OTClient editado 2.8/1.8 => http://www.mediafire...1lcbs1fktpm676w Atualizações: EH OBRIGATORIO O USO DESSE CLIENT ABAIXO E USEM O .PIC TB!!!!!!!!! Client v1.9/2.9 => http://www.mediafire...77i414v1hy187fj Patch v1.9 => http://www.mediafire...da4umj3ip18jrf1 Patch v2.9 => http://www.mediafire...7nt275td9afl1fy Patch v1.9.1 => http://www.mediafire.com/?i3flwa3lrd016zl Patch v2.9.1 => http://www.mediafire.com/?m4zhjgn62uow1sp Obs: Atualizaçoes mais antigas estao dentro do spoiler acima!! OTAL.DLL: OBS: caso n esteja aparecendo a barra de moves no client normal do tibia, baixem essa .dll e coloquem na pasta onde fica o Pokemon_nibe.exe ... Otal.rar Patch Correçao! Todos olhem! Bugs na nova atualizaçao? Olhe o spoiler e veja se arruma o problema! Atualizado: 08/02/13 Créditos: Otal.rar1 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
-
Aqui vou postar algumas fotos de meus mapas Não sei de quanto em quanto tempo eu irei postar mais acho que umas 2 prints por semana está bom Comentem por Favor1 ponto
-
Eae Galerinha, é meu Primeiro post no XTibia então sem pisar em mim em ;B Procurei e não achei um tutorial assim então vou postar pra ajudar os iniciantes Eu estarei ensinando como se adiciona sprites prontas com formato .idc Primeira mente você precisara do programa DAT EDITOR Download : Pacote de Sprites Prontas Pokemons Johto Feitos Pelo Purple: Agora com os 125 pokemons, Corpses, Magias e portraits de todos os johto: http://www.4shared.com/file/WWLgCVbT/johtos.html Dat Editor : http://www.multiupload.com/KD9NW6TMF0 Scan Dat Editor: http://www.virustotal.com/file-scan/report.html?id=3c5e94e59df52ef693d12b0543aa66d6f8b0dee89a88bdb1e1cd1ca5d3d13195-1306952621 Novo Scan Pacote de Sprites :http://www.virustotal.com/file-scan/report.html?id=98c2917453f3829817cf36562a34dc627000675528a0ef62f4838cf256584da2-1303932047 Agora vamos começar Depois de baixar o Dat Editor, extraia ele na pasta que você quiser. Abra o dat editor, Vá em : File / Open Procure a pasta do client do seu Server, e nos seus devidos lugares abra o Tibia.dat e Tibia.spr Espere carregar e as sprites do seu client irão aparecer Agora Extraia os pokemons que vocês baixaram , e note que eles estão em formato .idc Vá no dat editor e clique em : Import / Import Itens Vá ate a pasta onde você extraiu os pokemons em formato .idc, segure Ctrl e selecione todos de uma vez As sprites irão aparecer no Canto esquerdo Agora clique em : File / Save Na janelinha clique em Compile Depois que carregar totalmente Feixe a janelinha Más não fexe o Dat Editor Na tabela inferior do Dat Editor tem vários itens, e um deles é o ItemType Pegue esse numero do ItemType e grave ou copie. Abra a pasta do seu Server, clique em : Data / Monsters / Pokes Copie Qualquer Arquivo XML Renomeie para o nome do Pokemon que esta no Dat Editor Abra o arquivo com o bloco de notas. Mude o nome do Pokemon , e Lá onde está escrito : Look Type = ... Mude para o ItemType que esta no dat editor ( que eu falei pra copiar) Volte para a pasta : Data / Monsters Abra o arquivo Monsters.xml Copie qualquer Pokemon, mude o nome para o Pokémon que você criou, e no fim da linha esta escrito o nome do Pokemon .xml Mude para o nome do arquivo que você criou. Lembrete sempre ponha .xml no fim Salve tudo, e Abra o seu Server Proonto novo Pokémon Adicionado :x Se você quiser Adicionar os atakes novos dos pokemons fala isso: Embaixo , lá no xml do pokemon na linha </flags> <attacks> <attack name="nome da magia (tem que existir no seu server)" interval="tempo que o mosntro usa" chance="chance de usar" range="poder da magia" min="dano minimo use sempre o menos EX: -100" max="dano maximo use sempre o menos EX: -200"> </attack> ai vai adicionando as linhas com os novos atakes se o atake ainda não estiver criado vá na pasta Spells crie um xlm da nova magia, edite o nome, vá no dat editor pegue o item type da magia que você quer (o efeito desejado) volte, abra o Spells.xml adicione a sua nova magia. depois faça o que eu disse a cima. crie uma linha no xml do seu pokemon e vá adicionando as magias ^^ use isso para faser os pokemons selvagens '-' Gentee entra no meu novo tutorial , Criando novos itens e corpses com ids proprios http://www.xtibia.com/forum/topic/158900-criando-novos-id-de-items-e-corpses/page__p__1047720#entry1047720 See te Ajudei Dáa um +Rep Ae pro Okaminha ;B não cai o dedo \õ :smile_positivo: Créditos: Psycho Okama < Eoooooo E as sprites convertidas pelo < Purple Fuiz \õ/1 ponto
-
New Baiak Yurots 8.60 Sem Bugs, Novas Caves E Quest By:[God] Willz
RoXoR reagiu a Willzinhoaz por um tópico no fórum
ORIGINAL DO BAIAK, o resto é editado por mim. =] Baiak Yurots V2.2 Oque Mudou ? Mudou a City ta 90% 8.5 Foi Arrumada As Houses. Adicioano Npc Papai Noel no Templo Vende Items 8.54! Novos Items Novos Outifits Novas Hunts E Muito Mais... Baiak Yurots V2.7 Oque Mudou ? Foi Adicionada um Nova Cidade Chamada Baiak City Foi Adidionada Um Teleport no Templo Que Vai para Alumas City's Foi Adicionado Npc de Bless,Pagando Todas as Bless você nao prescisa usar aol... Foi Adicionado Uma Ilha de GM's ... Bug do Account Mananger Arrumado. Novo Executer adicionado,se o ot cai ele salva sozinhoo. E Muito Mas Estara por vim ... Baiak Yurots v1.0.9 Oque Mudou ? Foi Adicionado Sistema Vip.. Foi Adicionado 5 Novos Portais Vip Foi Adicionado Novos Bixos Vip,Warlock Vip,Medusa Vip,Bossing of Baiak.. Foi Adicionado New Quest Baiak Super Foda !! ;D Foi Modificado o Templo Foi Adicionado Mais Treiners ! Entre Alguns Bugs Retirados Baiak Yurots v1.1.0 Oque Mudou ? Mudou o Protocolo de 8.57 para 8.60 Novos Item Novo Outfit Baiak Yurots V1.1.4 Oque Mudou ? Tirei o Pz tool do Templo Fiz o Novo Addon do Outfit do Wayfarer A Vip I é free, portanto o comando !buyvip, foi removido, pois implicava com a vip II. Agora editado by: [GOD] Willz » Arrumei todos aqueles malditos bugs. » renovei o temple »a quest vip 2 agora não é mais em agua. »Adicionei 1 quest nova que da vip wand, vip sword e vip star. » ADICIONADO 2 CAVES PARA LVL 400+ PERFEITAS. » O OT ESTA PERFEITAMENTE BALANCEADO. » RETIREI O MALDITO BUG DO DISCONECTED QUE TRAVAVA TODO O OT. » MAIS DE 75% DAS HOUSES DO TEMPLE ESTÃO COM TREINERS. FOTOS: CITY: TREINER NAS HOUSES: Nova quest que da as novas armas do ot, Wand, 1kk, aol infinito, sword e nova arma de pally. A VIP 2 QUEST NAO ESTA MAIS EM AGUA, E EU MELHOREI ALGUMAS PARTES DELA QUE FOI TIPO: TINHA UMA PARTE DE PROTECTION ZONE QUE PRENDIA QUEM TAVA E ETC. Tps com os bixos atrás (sei que não é muito, mas ) Tps da vip 2 arrumados: Enfin mano esse é o ot e como ele está. eu e meus amigos achamos perfeito. creditos a BAIAK: LULA E A MIM. ACC DO GOD: god/god . BOM PROVEITO DO OT SERVER. GOSTOU? DE REP+. LINK PARA DOWNLOAD: http://www.4shared.c...ts_By__GO.html? Scan: https://www.virustot...sis/1329804079/ (pra quem nao sabe, isso é tipo um anti virus. que vai le dizer se tem virus ou não!.) Tipo todo ot tem seus programas que os anti virus pensao que sao virus, normal. HAIL SHADOW ENCORE TEAM :**** , É NOIX MORODO, Charles, fabiano, joao, wesley, erick, SAUL, BIID, IVO, THIAGO, TWISTER, bruno, yumi, HEITOR, GUSTAVO, GABRIEL, LEANDRO FAAH, EVANDRO. GERAL AKI É O TREM FODA... GALERA DO MAL PORRA. vlws :** quem tiver duvidas podem mandar. =] Server oficial: starvideo.servegame.com temple1.bmp temple2.bmp caves1.bmp caves2.bmp novaquest1.bmp vip2.bmp treiners.bmp1 ponto -
Mapa Estilo Rozinx - Oque Acham ?
Fearlet155 reagiu a gleison157 por um tópico no fórum
MAPA ESTILO ROZINX Novas Vocations 1-Mixed Assassin 2-Spin Assassin 3-Sacred Martyr 4-Loney Star 5-Falling Star 6-Hellborn Deathdriver 7-Supreme Hellborn King 8-Apocalypse Deathbringer 9-Nova Hero 10-Addicted Zealot Para saber como resetar e ganhar a vocation nova basta escrever !promoinfo que mostrara todas informaçoes de como resetar. Novos Monstros Icyd Tripyd Super Nova e muito mais CIDADE COMPLETA TEMPLO DP NPC's ARENA ITENS VIP VIP CITY Créditos: 40% Meu (Pela edição e novos script's) 50% Hannibals (Pelo Base Do Mapa Proprio Dele) http://www.xtibia.co...__fromsearch__1 5% Doidin (Pelo Distro e Dlls) 5% de alguns membros do XTibia pelos Scripts1 ponto -
Como o primeiro programa Beta test foi um sucesso resolvemos aprimora-lo e lançar uma versão 2.0, aguarde em breve mais informações serão disponibilizadas aqui. Então fiquem de olho neste tópico porque só assim você pode ser um dos escolhidos para o teste. Para melhor acompanhar o desenvolvimento do Elysium Online:1 ponto
-
(9.60) Tibia Extreme Rpg
PedroLic reagiu a Felipe1880 por um tópico no fórum
Tibia Extreme Rpg E Pvp http://www.tibiaextreme.com.br Características Mapa Próprio, em constante update (diariamente). Classes balanceadas, tanto no pvp quanto no pvm. Inúmeras quests bem boladas, incentivando o trabalho em equipe. Guild Wars (Já está ocorrendo, corra e escolha sua guilda). Staff séria, não joga. Entre várias outras características, só entrando para ver. Rates Exp - 5x (stages) Skill - 2x Magic - 2x Loot - 1x Hunt Elf Amazon Camp Pvp1 ponto -
Entrada Dark Abra / Charizard Valley
Heinekennn reagiu a Stigal por um tópico no fórum
• Script Porta Dark Abra / Charizard Valley • Nome Do Script: Porta Dark Abra / Charizard Valley Versão: 8.54 Criador: Desconhecido Obs: Pode ser utilizado tanto para porta Dark Abra, quanto porteira Charizard Valley Entrara Com Está ACTION: Vá em "Pasta Servidor > Data > Actions > Scripts", Crie um ARQUIVO.LUA com nome "darkdoor" Adicione isso dentro: function onUse (cid,item,frompos,item2,topos) pos = {x=XXX, y=YYY, z=Z} doTeleportThing(cid,pos) doSendMagicEffect(pos, CONST_ME_TELEPORT) return 1 end Salve e Feche. Agora Abra "Data > Actions > Actions.xml". Adicione essa TAG Dentro: <action actionid="AAAA" event="script" value="darkdoor.lua"/> Salve e Feche. O Player vai sair com esse Movements: Vá em "Data > Movements > Scripts", Crie um ARQUIVO.LUA com o nome de "darktile". Adicione isso dentro: local position = {x= xxxx, y= yyyy, z= zzzz} function onStepIn(cid, item, pos) doTeleportThing(cid, position) doSendMagicEffect(getThingPos(cid), 21) return TRUE end Salve e Feche. Abra "Data > Movements > Movements.xml". Adicione essa tag dentro: <movevent type="StepIn" actionid="AAAA" event="script" value="darktile.lua"/> Salve e Feche. Aviso: XXX= Posição X do pra onde o players vai teleporta YYY= Posição Y do pra onde o players vai teleporta Z= Posição Z do pra onde o players vai teleporta AAAA= Voce coloca qualquer numero q nao teja usando em actions e tabeim vai por na porta.1 ponto -
[Npc] New Egg System [Fix]
GuhPk reagiu a SkyDangerous por um tópico no fórum
Olá, venho trazer o um novo tipo de egg system, que eu tive a ideia de criar e quero agradecer a mega ajuda do ONESHOT crie um arquivo na pasta scripts dos npc com nome de eggsystem.lua 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 onCreatureSayCallback(cid, type, msg) local config = { price = 50000, delay = 5 * 60, control = {10555, 10556}, eggn = 4850 } if not npcHandler:isFocused(cid) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, "care") then local p = (config.price % 1000 == 0 and (config.price / 1000) or config.price) if getPlayerStorageValue(cid, config.control) > os.time() then selfSay("Sorry, but I am already caring one of your eggs.", cid) else selfSay("Do you want me to take care of your egg for ".. p .." ".. (p == config.price and "" or "k") .."?", cid) talkState[talkUser] = 1 end elseif msgcontains(msg, "back") then if getPlayerStorageValue(cid, config.control[2]) == 1 then selfSay("Hello, do you came to pick up your egg?", cid) talkState[talkUser] = 2 else selfSay("Sorry, but I am not caring eggs from you.", cid) end elseif msgcontains(msg, "check") then local t = getPlayerStorageValue(cid, config.control[1]) if getPlayerStorageValue(cid, config.control[2]) == -1 then selfSay("Sorry, but I am not caring eggs from you.", cid) else if t < os.time() then selfSay("Yay, your egg has started to hatch, take it.", cid) setPlayerStorageValue(cid, config.control[1], -1) setPlayerStorageValue(cid, config.control[2], -1) else selfSay("I will be caring your egg for more ".. (math.floor((t - os.time()) / 60) > 0 and "".. math.floor((t - os.time()) / 60) .." minutes and" or "") .." ".. (t - os.time()) % 60 .." seconds.", cid) end end end if talkState[talkUser] == 1 then if msgcontains(msg, "yes") then if getPlayerStorageValue(cid, config.control[2]) == -1 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.control[2], 1) setPlayerStorageValue(cid, config.control[1], os.time()+config.delay) selfSay("Okay! Check back soon.", cid) else selfSay("Sorry, you don't have enough money. You need more ".. (config.price - getPlayerMoney(cid)) .." coins.", cid) end else selfSay("I am already taking care of a egg for you.", cid) end elseif msgcontains(msg, "no") then selfSay("Too pricey for you, heh?", cid) end elseif talkState[talkUser] == 2 then local x = getPlayerStorageValue(cid, config.control) local t = getPlayerStorageValue(cid, config.control[1]) if msgcontains(msg, "yes") then if x > os.time() then local item = doPlayerAddItem(cid, config.eggn, 1) doItemSetAttribute(item, "description", "A hatched egg.") selfSay("Take it!", cid) setPlayerStorageValue(cid, control[2], -1) setPlayerStorageValue(cid, control[1], -1) else selfSay("Sorry, but your egg need care for more ".. (math.floor((t - os.time()) / 60) > 0 and "".. math.floor((t - os.time()) / 60) .." minutes and" or "") .." ".. (t - os.time()) % 60 .." seconds.", cid) end end end return true end npcHandler:setMessage(MESSAGE_GREET, "Hello, |PLAYERNAME|. I am a pet egg carer. Do you want me to {care} your pet eggs? Also you can {check} the egg status and if you have any egg here, you can get it {back}.") npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback) npcHandler:addModule(FocusModule:new()) Agora crie um npc chamado mary <?xml version="1.0" encoding="UTF-8"?> <npc name="Mary" script="eggsystem.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="138" head="20" body="39" legs="45" feet="7" addons="3"/> </npc> Como Funciona: 1- Você pega um ovo qualquer. 2- Leva para o NPC 3- Ele cuidará dele 4- Depois de um tempo você pega ele de volta Função do NPC: ~> Paga 50k para cuidar do seu ovo ~>Checa o tempo necessário para ele chocar ~>Pegar o ovo chocado1 ponto -
1 - Vá até a pasta data/talkactions/scripts e procure pelo arquivo tele.lua. Dentro dele procure por isto: local places = { [1] = {name = "Saffron", id = 3}, [2] = {name = "Cerulean", id = 4}, [3] = {name = "Vermilion", id = 9}, [4] = {name = "Pewter", id = 10}, [5] = {name = "Lavender", id = 5}, [6] = {name = "Fuchsia", id = 6}, [7] = {name = "Celadon", id = 7}, [8] = {name = "Viridian", id = 8}, [9] = {name = "Cinnabar", id = 12}, [10] = {name = "Snow", id = 13}, } E deixe assim: local places = { [1] = {name = "Saffron", id = 3}, [2] = {name = "Cerulean", id = 4}, [3] = {name = "Vermilion", id = 9}, [4] = {name = "Pewter", id = 10}, [5] = {name = "Lavender", id = 5}, [6] = {name = "Fuchsia", id = 6}, [7] = {name = "Celadon", id = 7}, [8] = {name = "Viridian", id = 8}, [9] = {name = "Cinnabar", id = 12}, [10] = {name = "Snow", id = 13}, [11] - {name = "NomeDaNovaCity", id = 14}, } ===================================================================================== 3 - Para agrupar siga este tutorial aqui do Notle: http://www.xtibia.co...item-multiplos/1 ponto
-
acredito q tas usando o centurion neh? se for, ele ta um pouco diferente do meu.. mas achu q a base eh a ms.. 1* tens q criar o atk em si em lib/pokemon moves.lua... no caso, eh soh adicionar mais um.. elseif spell == "xxxxxxxxx" then no arquivo... pegando o resto como base... 2* provavelmente ae ainda tem o lib/moves.lua, entao vai nesse arquivo e adiciona mais uma linha dessa... ["Quick Attack"] = {f = 40, t = "normal"}, no caso.. [ nome do atk ] = {f = força do atk, t = tpw do atk}, 3* vai em lib/configuration.lua e adiciiona o atk na tabela 'movestable = {', nos pokes q vao usar ele neh... 4* vai em spells/spells.xml, e adiciona mais uma linha la.. <instant name="Quick Attack" words="spell000" lvl="1000" mana="0" event="script" value="ps/Quick Attack.lua"></instant> 5* vai em spells/scripts/ps, copia um arquivo la e muda para o nome da nova skills, abre esse arquivo e troca o nome q ta la dentro.. docastspell(cid, "Acid Armor") 6* e por ultimo adiciona o atk nos .xmls dos pokes q vao usar ele... monster/pokes/...1 ponto
-
como eu iria esquecer cara.. s2 ;p fotos ingame:1 ponto
-
Torres D-Lair By Brenomapper'
otmapperbreno reagiu a vital900 por um tópico no fórum
Gostei desta torre de dragão; Uma boa área para se upar.1 ponto -
Script Abrir Porta
masdead reagiu a Openyourmind por uma questão
Tente function onUse(cid, item, frompos, item2, topos) DoorLocked = 5735 -- coloque aqui o ID da porta fechada DoorOpen = 5737 -- coloque aqui o ID da porta aberta uiddoor = 4070 -- coloque aqui o UID da porta idkey = 2088 -- coloque aqui o id da key if item.itemid == idkey and item2.itemid == DoorLocked and item2.uid == uiddoor then doTransformItem(item2.uid,DoorOpen) elseif item.itemid == idkey and item2.itemid == DoorOpen and item2.uid == uiddoor then doTransformItem(item2.uid,DoorLocked) else doPlayerSendTextMessage(cid,22,"Sorry, not possible.") end return 1 end @edit Não vi que ja tinham postado ;(1 ponto -
[Encerrado] Totalmente Global (Altual)
Joaopedefeijao reagiu a Akatsukyi por um tópico no fórum
http://www.4shared.c...eveloped_by.htm ou esse aki http://www.xtibia.com/forum/topic/165076-global-original-sem-bugs/ serve?1 ponto -
1 ponto
-
[Tutorial] Criando Novos Pokemons Para Pda [Iniciantes]
Yan Oliveira reagiu a Stigal por um tópico no fórum
Parabens Yan18, Seu Tutorial foi aprovado. Abraço e obrigado por compartilhar, cst ira ajudar muitos iniciantes!1 ponto -
Na verdade o certo seria assim: local config = { fromItem = 0, -- Item que precissa. toItem = 7702 -- Item que vai transformar. } local str = 22122 --- Id da storage local value = 1 -- Valor da storage function onCastSpell(cid, var) if (getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == config.fromItem or getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid == config.fromItem) and getPlayerStorageValue(cid, str) == value then doPlayerAddItem(cid, config.toItem, 1) else doPlayerSendCancel(cid, "You must have a " .. getItemNameById(config.fromItem) .. " in your hand to cast this spell.") end return true end1 ponto
-
[Encerrado] [Dúvida] - Como Faço Para Adicionar Novos Pokemons No Meu Ot De Poketibia?
igorlukario reagiu a fredpadua por um tópico no fórum
Ué, só adicionar as sprites no cliente, e criar novos de acordo com as oitfits. Alguns tutoriais de add sprs : 1 2 E criando monstros: 1 2 Não ficou muito claro nesses tutoriais, mas o looktype é a roupa do monstro vc coloca de acordo com o numero que vc colocar nas sprites.1 ponto -
[Ajuda Rme] Como Colocar Novos Itens No Raw Pallette
narutochuuu reagiu a VictorFT por uma questão
Já sei acho que isso pode te ajudar. Primeiramente Vá Em Iniciar e procure Remere's Map Editor Em seguida você irá dar um Clique nesta pasta e vai ver "Extensions Folder" de um clique nela Em seguida irá abrir uma pasta com toda as extensions do Seu Remere's Map Editor, eu tenho dois computadores com Extensions diferentes (As Extensions desse computador aqui Notebook é do Alissow). Quando abrir a pasta vá na pasta que você pegou as novas extensions e de um CTRL + C e um CTRL + V na pasta das Extensions e pronto Créditos: VictorFT Alissow por me ensinar a fazer isto. Att. VictorFT1 ponto -
Viro Modinha Pq? [-Diogo]
1579091 reagiu a DiogoTemporario por um tópico no fórum
RarTnE banido por 24h por bostear (em vários tópicos)1 ponto -
[Encerrado] Duvida Simples...
VictorFT reagiu a Openyourmind por um tópico no fórum
Apertei o botão j e escrevi o nome epaminondas doll e apareceu o id e o boneco se ajudei rep + Abraços,1 ponto -
Fan Page Facebook
Piabeta Kun reagiu a Tonynh por uma questão
Fala cara, quanto tempo =p Como a seção está parada, eu pego uns pedidos aqui e outros ali rs Fiz algo bem clean aqui, espero que goste ^^ Capa: http://i.imgur.com/j8jsO.png Avatar: http://i.imgur.com/4KCD4.png1 ponto -
Seu último mapa - your last map
Gabriel Couto reagiu a masdead por um tópico no fórum
Obrigado essa é a primeira aréa de jungle que faço1 ponto -
1 ponto
-
Bom nesse tópico você irá aprender a fazer uma area de gelo , esse tutorial nao muito indicado para iniciantes, mais dá pra pegar boa parte dele como um exemplo para você conseguir subir na carreira de mapper. Parte #1 Parte#2 Parte#3 Parte#4 Parte#51 ponto
-
Po-World [Serve Global]
JooPedr24027461 reagiu a wesley130297 por um tópico no fórum
eu sou feio mais esse cara sé loco1 ponto -
Já Pararam Pra Pensar Sobre O Som?
Notwennewton reagiu a DiogoTemporario por um tópico no fórum
E nossa incrível habilidade de produzi-lo e como ele influi na nossa estrutura celular? Pense nas ondas sonoras como ondas em uma piscina: Com o auxílio de instrumentos inventados pelo homem milênios atrás, nós conseguimos produzir uma variedade enorme de sons (que são como ondas na piscina, mas no ar), e tudo de uma vez só, formando um padrão complexo, um ritmo: É como tentar produzir um padrão complexo de ondas em um líquido, afinal, o ar é um fluído. Sabe quando a chuva faz aquelas ondas nas poças? É como tentar fazer uma chuva que criasse um padrão dessas ondas, isto é, como fazer chover num determinado ritmo, que se altera rapidamente, e que produz um padrão desejado na poça: E isso é extremamente difícil, mas nós o fazemos tão naturalmente e com tamanha facilidade que a maioria nem dá bola. E isso não é tudo, nós já nascemos com um instrumento que produz tais padrões - as cordas vocais: Se não bastasse essa habilidade nata de produzir padrões complexos de ondas mecânicas, essas ondam tem tamanha influência sobre nossa estrutura celular que definem nossa identidade. Quando alguém fala uma coisa que muda seu ponto de vista em determinado assunto, o que está acontecendo é que essa pessoa criou um padrão de ondas mecânicas no ar, que bateram no tambor que você tem no ouvido, e que foram transformadas em impulsos elétricos, que determinaram seu modo de pensar sobre tal assunto - e isso mudou fisicamente a estrutura de seu cérebro! Nós somos capazes de criar padrões sonoros tão complexos que padrão xyz altera a rota abcdefghijklm do neurônio de um outro indivíduo! Se você falar para alguém se matar, é capaz dessa pessoa o fazer. Você conseguiu destruir fisicamente a pessoa apenas criando um padrão sonoro (falando algo). Legal, não? Se eu fosse um alienígena estudando a espécie humana, a comunicação seria meu foco de estudo.1 ponto -
Player Passa no tile se tiver 5 Frags Ou +
daniel1997 reagiu a Vodkartzin por uma questão
na sua lib adc function getPlayerFrags(cid) local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = {date = result:getDataInt("date")} if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = {day = table.maxn(contents.day),week = table.maxn(contents.week),month = table.maxn(contents.month)} return size.day + size.week + size.month end agr o script function onStepIn(cid, item, position, fromPosition) if item.actionid == 14800 and isPlayer(cid) and getPlayerFrags(cid) < 5 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa ter 5 frags para passar sobre esse tile.") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end return true end <movevent type="StepIn" actionid="14800" event="script" value="nome do seu script.lua"/>1 ponto -
Recrutamento - Faça Parte!
Gabriel Couto reagiu a LordZezim por um tópico no fórum
Recrutamento Você trabalha com otserver, tem experiência, e deseja entrar em algum projeto sério, comprometido e dedicado? O Elysium Online pode ser a equipe certa para você! Estamos a procura de pessoas que desejem participar de um servidor que se baseia em RPG, diversão e que leve o jogador em primeiro lugar, que sejam criativas e focadas! Nossa equipe atual é formada por: Administração Geral: Liebl / LordZezim / vital900 Coordenação: LordZezim (Mapping) / Liebl (Scripting) / vital900 (Engine RPG) Mapping: LordZezim / vital900 / Seagull / Vaga / Vaga Scripting: Liebl / jhon992 / Vaga / Vaga Spriting: Wodkko / LadyBrubs / Vaga / Vaga Design: Liebl Programação: LordZezim / Liebl / Vaga Colaboração: MatheusEnjoy (Websites e Coordenação) Se estiver interessado, envie seu formulário aqui, ou se desejar, por Mensagem Privada, contendo as seguintes informações: Nome Completo: Idade: Cargo desejado: Experiência: Por quê ingressar no Elysium: Skype e/ou msn:1 ponto -
[Encerrado] Como Resetar Um Ot Baiak 8.60?
Darknessott reagiu a hummberM por um tópico no fórum
ow esse link nn funciona mais pf posta outro to presizando mt1 ponto -
[Tutorial] Calabouços
aguinho600 reagiu a Koddy por um tópico no fórum
Saudações XTibianos! Venho aqui para abrir a sua mente! Fazê-lo esquecer de todo e qualquer tipo de Prisão que você sequer já viu. Levei um tempo para criá-lo, mas valeu a pena. O meu único pedido é que acompanhe este tutorial até o fim, e ao postar, não esqueça de desabilitar sua assinatura, se possuir imagens. Primeiramente, gostaria de me desculpar pela quantidade de imagens. Foi com a intenção de garantir o aprendizado de todos vocês, leitores. Se alguma imagem não abrir por inteira, atualize seu navegador. Caso o problema continue, selecione a imagem com o botão direito, e clique em Mostrar Imagem. Se mesmo assim o erro persistir, formate o seu computador. Aviso: Este tutorial envolverá outros quatro tutoriais, que serão citados ao longo de sua confortável leitura. Todos eles se encontram aqui mesmo no XTibia, na sessão "Tutoriais de Mapping". Calabouços "Calabouço é o andar mais profundo de um castelo, geralmente utilizado como prisão (como na bastilha), como armazém ou como porão. É descrito em filmes e livros de terror como um lugar com pouca iluminação, muito empoeirado e de difícil acesso." Fonte: Wikipédia Como podemos ver, calabouços são locais no subsolo, ou seja, estão abaixo do nível do mar. E tem como uma de suas utilidades, a prisão. Vamos aprender hoje, a criar um calabouço simples; com uma prisão e um pequeno armazém. Abra seu RME, e crie uma entrada "escondida" para o calabouço, um pouco longe de sua cidade. Será para lá que os prisioneiros irão; em um local isolado. Obs: Em hipótese alguma crie sua prisão ao céu aberto, estilo Yurots. Esse tipo de prisão não é atual, e por não possuir nada de medieval (ou mitológico), não se assemelha em nada com o Tibia. Crie uma área montanhosa ao ar livre para a entrada do calabouço. Coloque pedras, plantas ou árvores para dificultar o acesso, fazendo o jogador andar em diagonal, por exemplo. No caso, fiz uma Montanha de Terra. Se quiser fazer também, mas tem difículdades, aconselho dar uma lida neste tutorial, também feito por mim. Segue abaixo uma pequena lista de ID's que foram utilizados na imagem acima, que podem facilitar a criação de sua passagem para o seu calabouço. Para que a escada "embutida" na montanha funcione, visite este tutorial feito por Kyvorgury, que apesar de simples é bem útil. Créditos à ele. Após criar a entrada para seu calabouço, vamos ao andar inferior. Crie o formato dele, e depois detalhe-o. Caso queira ajuda na criação dela ou na decoração, visite os tutoriais feitos anteriormente por mim: Formando Caves e Detalhando Caves. Lembrando que ao terminar este andar, citarei mais uma vez alguns ID's que foram utilizados. Veja uma imagem de como ficou o piso inferior, feito ao meu estilo. Como podem ver, utilizei tochas nas paredes, algumas raízes de árvores, sempre com pedras. Obs: Os suportes para o carvão não são necessários, inclusive não sei se ficaram bem sendo utilizados aqui, mas como não há outro sprite parecido, usei ele mesmo. Se for um bom spriter, ou caso haja um na sua equipe, tente fazer algo parecido com as tochas da primeira imagem. E continue fazendo o caminho, não muito comprido, nem muito curto. Faça um caminho razoável até o andar inferior. Um comprimento suficiente para fazer o prisioneiro transpirar para chegar, mas não que faça com que ele seja carregado pelo guarda até chegar ao seu local. Como prometido, segue mais uma lista com parte dos ID's que foram utilizados neste andar. No andar inferior, crie uma passagem para os jogadores poderem transitar, e não se esqueça de adicionar o mais importante, as grades! Se tiver dificuldade na criação de uma 'gaiola', segue a dica de como fazê-la. (Faça-as fechadas, deixei aberta pois não há nenhum preso no momento, e é só para demonstração. Após fazer uma área com várias prisões, adicione os detalhes básicos. Crie mais e mais 'compartimentos', caso falte espaço, faça-os no piso inferior. Não se esqueça agora, de adicionar uma "cama" para o prisioneiro, e adicionar os balcões citados penúltima imagem. Adicione também alguns esqueletos, tanto na parede como no chão. Segue aqui alguns ID's que podem ser uilizados. Os ID's da última coluna serão utilizados agora, na criação do seu armazém. O barril d'água foi feito para chuva, mas pode servir de estoque para os condenados. Se quiser fazer o armazém cercado por parede, fique a vontade, só fique atento para não colocar uma parede muito esquisita. No armazém, recomendo fazer um estoque de água (com os dois tipos de barris), e também uma pequena quantidade de armas, para que os guardas do calabouço possam se equipar. Faça o acesso ao armazém com uma grade também, ou com uma porta trancada, que necessite de uma chave para realizar a passagem. É isso aí galera. Acabou. Espero que tenham gostado deste tutorial, e peço que não esqueçam de desabilitar a assinatura, na hora de comentar (sei que vão). Peço desculpas se ficou muito cansativo, mas espero que tenham entendido a ideia de um calabouço. Façam como quiserem. Refaçam. Inventem. Faça o seu próprio Calabouço ao seu estilo. Segue aí mais duas imagens do Calabouço. E... Dica: Em nenhuma das imagens acima me lembrei de utilizar teias de aranha. Elas caem super bem, desde que não seja em excesso, perto das grades dos prisioneiros. Principalmente dentro do armazém, próximo aos móveis e objetos. Obrigado por acompanhar o meu Tutorial até aqui, e peço: não esqueça de criticar. Tem algo que não gostou nas imagens acima? Algum 'bug' na criação do seu Calabouço? Quer elogiar? Faça como queira, apenas não deixe de comentar. Abraços, e até a próxima!1 ponto -
Mapeando Com Seus Amigos. [Rme Beta 3.0]
Gabriel Couto reagiu a LordZezim por um tópico no fórum
Tente apertar a tecla F do teclado, ás vezes o Show Creatures está desligado.1 ponto -
Mapping Show Off
Gabriel Couto reagiu a LordZezim por um tópico no fórum
Neste projeto não iremos desanimar, podem ter a certeza disso. Estamos todos afiados e dando nosso melhor.1 ponto