OBD é o formato usado pelo programa Object Builder para exportar e importar objetos no cliente. O tutorial pretende dar dicas básicas para melhor aproveitamento do formato.
Exportando um OBD
1 - Abra seus arquivos do cliente no Object Builder. 2 - Clique no botão exportar que fica abaixo da visualização do objeto ou clique com o direito do mouse sobre o objeto na lista.
3 - Selecione o formato OBD e a versão do cliente.
Importando um arquivo OBD
1 - Clique no botão importar que fica abaixo da visualização do objeto. 2 - Na janela Import Object, selecione o arquivo que deseja importar. Para importar mais de um objeto por vez, arraste os objetos direto do seus arquivos para dentro do programa e solte-os na área de visualização ou na lista de objetos.
Editando OBD
Se você precisa editar apenas um ou alguns OBDs.
1 - Crie novos arquivos spr e dat no Object Builder para sua versão de cliente. 2 - Importe o OBD que você deseja editar. 3 - Faça as alterações necessárias. 3 - Exporte o objeto modificado novamente como OBD.
IDC para OBD
Se você tem alguns IDCs e gostaria de converter pra OBD.
1 - Crie novos arquivos spr e dat no Object Builder para sua versão de cliente.
2 - Compile os arquivos. 3 - Abra os arquivos criados em um editor que suporta IDC e importe os IDCs que você precisa. 4 - Compile os arquivos. 5 - Abra os arquivos compilados novamente no Object Builder e exporte como OBD.
Visualizando o conteúdo dos OBDs
Use o programa Object Viewer para visualizar arquivos OBDs.
Estrutura dos arquivos OBDs (Para desenvolvedores)
Servidor Poketibia 9.60 (Por Lazarocp)
- Aprovado para download -
- Servidor em desenvolvimento - Você também pode ajudar!
• O servidor ainda não se encontra 100%, possui erros simples nas sources.
• Os Scripts ainda estão desorganizados (peço desculpas).
○ Este servidor está na versão 9.60, sendo assim, tive que mexer nos scripts para deixá-lo funcional.
Informações gerais:
• Catch/Goback: 90%.
(Havendo apenas um erro no data/creaturescripts/scripts/goback.lua).
Nota: O nosso mapa está sendo feito do zero (0). Já contamos com seis (06) cidades e vários respawns.
Pokémons:
Primeira geração: 100% Segunda geração: 100% Terceira geração: 100% Quarta geração: 100% -- Evolução por stones: 100% Race e Combat: 100% Pokedex: 95% (Pokedex com descrição do pokémon e onde encontrá-lo. A função "onde encontrá-los", só está disponível em alguns Pokemons).
Sistema de Pokémons iniciais: 100%
• Novas Pokébolas!
• Mega Stones: Retiradas.
Downloads:
Removidos , Servidor desatualizado e ultrapassado XD
Créditos:
Criação e postagem: Lazarocp
• Ao divulgar ou utilizar, favor mantenham os devidos créditos.
• REP'S serão sempre bem vindos, obrigado.
Fala galera XTibiana!!!
Vejo que muitas pessoas tem muita dificuldade em 4 simples passos.
Fiz uma video aula ensinando a instalar sem nenhum problema o modern acc.
Quaisquer duvidas poste neste topico ou abra um na sessao de dúvidas.
Olá Tudo bom... Então galera, varias pessoas já me perguntaram como que eu adiciono Pokemons no PDA Slicer, ou no Meu e etc, se for PDA eu vou ensinar kkk. eo seguinte eu vi o tutorial do Yan18, o dele está certo, só que falta algumas explicações, acho que foi por isso que alguns nao conseguiram '-'. já vou falando e muito simples adicionar um pokemon kkk. vou tentar explicar passo a passo.
Primeiro antes de tudo, iremos criar nosso pokémon no Monsters, vou pegar um pokémon como exemplo, tipo o Shiny magmar (eu gosto dele ele e fodão).
agora vá em configuration e vamos começar a mecher nos treco ai kkk. Primeiro de tudo, em uma das primeiras linhas vai estar assim:
passivepokemons = {
esse é o local aonde nos colocamos o pokemons passivos, ou seja se queremos ou não deixa-los passivos, se o nome do pokemon tipo o magmar não estiver ali ele será agressivo.
agora procure por:
movestable = {
em baixo disso irá aparecer a renca de moves dos pokemons '-', vá no ultimo pokemon da lista que no meu caso é o:
["Elder Venusaur"] = {move1 = {name = "Body Slam", level = 56, cd = 12, dist = 1, target = 1, f = 50, t = "normal"},
move2 = {name = "Razor Leaf", level = 12, cd = 7, dist = 4, target = 1, f = 50, t = "grass"},
move3 = {name = "Vine Whip", level = 19, cd = 16, dist = 1, target = 0, f = 55, t = "grass"},
move4 = {name = "Headbutt", level = 16, cd = 12, dist = 1, target = 1, f = 55, t = "normal"},
move5 = {name = "Leech Seed", level = 16, cd = 16, dist = 3, target = 1, f = 1, t = "grass"},
move6 = {name = "Bullet Seed", level = 28, cd = 20, dist = 1, target = 0, f = 75, t = "grass"},
move7 = {name = "Solar Beam", level = 31, cd = 35, dist = 1, target = 0, f = 135, t = "grass"},
move8 = {name = "Sleep Powder", level = 20, cd = 60, dist = 1, target = 0, f = 0, t = "normal"},
move9 = {name = "Stun Spore", level = 18, cd = 35, dist = 1, target = 0, f = 0, t = "normal"},
move10 = {name = "Poison Powder", level = 17, cd = 25, dist = 1, target = 0, f = 0, t = "normal"},
move11 = {name = "Leaf Storm", level = 60, cd = 50, dist = 1, target = 0, f = 100, t = "grass"},
},
}
no de vocês concerteza vai estar outro pokemon, mais mesmo assim adicionar outra /\ em baixo do ultimo pokemon, ficando assim:
["Elder Venusaur"] = {move1 = {name = "Body Slam", level = 56, cd = 12, dist = 1, target = 1, f = 50, t = "normal"},
move2 = {name = "Razor Leaf", level = 12, cd = 7, dist = 4, target = 1, f = 50, t = "grass"},
move3 = {name = "Vine Whip", level = 19, cd = 16, dist = 1, target = 0, f = 55, t = "grass"},
move4 = {name = "Headbutt", level = 16, cd = 12, dist = 1, target = 1, f = 55, t = "normal"},
move5 = {name = "Leech Seed", level = 16, cd = 16, dist = 3, target = 1, f = 1, t = "grass"},
move6 = {name = "Bullet Seed", level = 28, cd = 20, dist = 1, target = 0, f = 75, t = "grass"},
move7 = {name = "Solar Beam", level = 31, cd = 35, dist = 1, target = 0, f = 135, t = "grass"},
move8 = {name = "Sleep Powder", level = 20, cd = 60, dist = 1, target = 0, f = 0, t = "normal"},
move9 = {name = "Stun Spore", level = 18, cd = 35, dist = 1, target = 0, f = 0, t = "normal"},
move10 = {name = "Poison Powder", level = 17, cd = 25, dist = 1, target = 0, f = 0, t = "normal"},
move11 = {name = "Leaf Storm", level = 60, cd = 50, dist = 1, target = 0, f = 100, t = "grass"},
},
["Shiny Magmar"] = {move1 = {name = "Scratch", level = 35, cd = 10, dist = 1, target = 1, f = 40, t = "normal"},
move2 = {name = "Fire Punch", level = 36, cd = 30, dist = 1, target = 1, f = 75, t = "fire"},
move3 = {name = "Ember", level = 32, cd = 10, dist = 4, target = 1, f = 40, t = "fire"},
move4 = {name = "Flamethrower", level = 37, cd = 15, dist = 1, target = 0, f = 80, t = "fire"},
move5 = {name = "Fireball", level = 38, cd = 20, dist = 4, target = 1, f = 65, t = "fire"},
move6 = {name = "Fire Blast", level = 43, cd = 40, dist = 1, target = 0, f = 120, t = "fire"},
move7 = {name = "Magma Storm", level = 46, cd = 90, dist = 1, target = 0, f = 150, t = "fire"},
move8 = {name = "Sunny Day", level = 46, cd = 60, dist = 1, target = 0, f = 0, t = "fire"},
passive1 = {name = "Lava-Electricity", level = 1, cd = 0, dist = 6, target = 0, f = 15, t = "fire"},
},
}
em baixo do movestable tem. os fly, ride, e surf, o meu está assim:
pokes = {
em baixo disso irá aparecer isso:
["Bulbasaur"] = {offense = 4.9, defense = 4.9, specialattack = 6.5, vitality = 4.5, agility = 106, exp = 64, level = 20, wildLvl = 20, type = "grass", type2 = "poison"},
Offense: é o quanto ele irá bater corpo a corpo.
Defense: é o tanto de defesa que ele irá ter.
SpeciealAttack: o tanto que ele irá hitar com seus poderes ou M1.. Etc.
Vitality: o tanto de life que ele terá.
Exp: o quanto de exp que ele dará ao morrer (algo do tipo kk)
Level: o level que precisa-ra ter para usa-lo.
Wildlevel: o level dele quando ele for selvagem:
Type 1 e 2: o tipo do elemento dele.
OBS: Lembrando que isso e por cada level que seu character upar. e nao o quanto ele vai ter para sempre. entao quer dizer que quanto mais você upar mais forte seu pokemon fica, e com mais life tambem.
agorá va no final dessa tabela e adicione mais uma dessas:
["Shiny magmar"] = {offense = 15.9, defense = 19.9, specialattack = 16.5, vitality = 22.5, agility = 351, exp = 602, level = 150, wildLvl = 150, type = "fire", type2 = "no type"},
Nunca tirem o Type2, se tirarem irá dar erro. entao deixem "no type".
agora em:
fotos = {
em baixo vai aparecer:
["Bulbasaur"] = 11989,
entao e so ir no final dessa tabelinha, e adicionar mais um:
["Shiny Magmar"] = ID DO PORTFOIL,
agora procure por:
pokecatches = {
em baixo disso:
["Bulbasaur"] = {chance = 500, corpse = 5969},
agora so ir no final da tabela e adicionar mais um:
["Shiny Magmar"] = {chance = CHANCE DE CATH, corpse = ID DO CORPSE},
Lembrando quanto maior o numero do cauth, mais dificil ele ficar de ser capiturado. entao se deixar 100 e muito facil, se deixar 1500, já fica dificil.
Level: o level que precisa estar para evoluir seu pokemon.
Evolution: para qual pokemon ele irá evoluir
Count: quantas stones precisa para evoluir
Stoneid: o id da stone que precisa ter para evoluilo, se quiser deixar 1 stone so, deixe o stoneid2, com um 0.
vamos até o final da tabela e adicionamos mais uma, bem ja que o shiny magmar nao tem evolução eu irei criar um shiny magmortar kkk:
Bem galera e isso, espero ter explicado bem kkk. eu usei meu servidor como base desse tutorial, entao seis vao estranhar os pokemons da 3 e 4 geração kk. abraçs e até. deixe seu comentario do que achou.
Creditos:
Eu (Por criar o topico)
Slicer (Pelo servidor que eu peguei as informações)
Brun123 (Por criar os sistemas dessa tabela, pelo menos eu acho que foi ele kk nao sei).
Haha, grande servidor lunus ot, consegui achar aqui pelo computador, e estou postando aqui para vocês
Vantagem e desvantagem dependendo do tipo dos pokémons (agora com múltiplos tipos).
• Order funcional com as habilidades dos pokemons (fly, ride, dig, cut, light, rock smash, blink, move).
• Comandos m1 até m12, desta vez configurado para todos os 151 pokémons.
• Pokémons passivos e agressivos, desta vez feito em c++ (sources) melhorando o desempenho.
• Catch com 4 pokébolas, com limite de 6 pokémons e o 7º indo para o CP.
• Nurse heala todos os pokémons de uma só vez, inclusive retira os status de sleep, burn etc.
• Portrait, go back e todos os outros sistemas mais básicos.
• Pokedex automática, ao usar em um pokémon, o texto é escrito automaticamente (não é necessário ficar editando arquivo por arquivo).
• Pokémons tem seu próprio level e evoluem ao atingir o level necessário sozinhos, alguns usam stones ainda.
• Cada pokémon tem seus status (offense, defense, special attack, agility).
• Comando !cd parar checar os cooldowns do pokémon.
• Sistema TV/Cam e PC.
• Sistemas de felicidade, influenciando no ataque e evolução.
• Sistema de fome.
• Box que da pokémons.
• NPC que troca nick.
• Potions que healam a vida dos pokemons.
• SPR e DAT do tibia original mantidos, e adicionado maioria dos sprites de pokémon.
• Pokemon Statistics (veja quantas vezes tentaram capturar um pokemon/já capturaram ele).
• Fly com apenas 1 chão embaixo do player, e não vários em volta.
• Pokémons de players podem se atacar desde que os donos estejam em uma party
E Tambem ajustes do servidor LunusOT
Todos os pokemons desde Shinys a Johto com forças,vida e ataques ajustados
Pokemons upam até o nível 300
Pokemons selvagens podem ser encontrados até no nível 255
Mapa contando com respaw de pokemons Johtos e quests
Alguns pokemons lendarios no final das quests
Magias novas
Cooldown Bar
Old,Great,Super e Ultra fishing rod
Box ajustada
e mais alguns ajustes.
Download :
o Bug Do Surf eu posso arruma vc quer o surf free ou premiun porque ai jah te do o certo
@EDIT
Troque o seu Surf.lua por isso aqui.
local function doSendMagicEffecte(pos, effect)
addEvent(doSendMagicEffect, 50, pos, effect)
end
local waters = {11756, 4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825}
local flie = {'4820', '4821', '4822', '4823', '4824', '4825'}
--alterado v1.6 tabelas agora em configuration.lua!
local premium = true
function onStepIn(cid, item, position, fromPosition)
if not isPlayer(cid) or getPlayerAccess(cid) >= 6 then
return true
end
if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end -- TV
if isPlayer(cid) and not isPremium(cid) and premium == true then
doTeleportThing(cid, fromPosition, false)
doPlayerSendCancel(cid, "Only premium members are allowed to surf.")
return true
end
if getCreatureOutfit(cid).lookType == 316 or getCreatureOutfit(cid).lookType == 648 then
doSendMagicEffect(fromPosition, 136)
end
if (getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1) then
return true
end
if #getCreatureSummons(cid) == 0 then
doPlayerSendCancel(cid, "You need a pokemon to surf.")
doTeleportThing(cid, fromPosition, false)
return true
end
if (not isInArray(specialabilities["surf"], getPokemonName(getCreatureSummons(cid)[1]))) then
doPlayerSendCancel(cid, "This pokemon cannot surf.")
doTeleportThing(cid, fromPosition, false)
return true
end
if getPlayerStorageValue(cid, 5700) == 1 then
doPlayerSendCancel(cid, "You can't do that while is mount in a bike!")
doTeleportThing(cid, fromPosition, false)
return true
end
if getPlayerStorageValue(cid, 212124) >= 1 then --alterado v1.6
doPlayerSendCancel(cid, "You can't do it with a pokemon with mind controlled!")
doTeleportThing(cid, fromPosition, false)
return true
end
if getPlayerStorageValue(cid, 52480) >= 1 then
doPlayerSendCancel(cid, "You can't do it while a duel!")
doTeleportThing(cid, fromPosition, false)
return true
end
if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then
doPlayerSendCancel(cid, "You can't do it while in the PVP Zone!")
doTeleportThing(cid, fromPosition, false)
return true
end
doSetCreatureOutfit(cid, {lookType = surfs[getPokemonName(getCreatureSummons(cid)[1])].lookType + 351}, -1)
doCreatureSay(cid, ""..getPokeName(getCreatureSummons(cid)[1])..", lets surf!", 1)
doChangeSpeed(cid, -(getCreatureSpeed(cid)))
local speed = 75 + PlayerSpeed + getSpeed(getCreatureSummons(cid)[1]) * 8 * speedRate
setPlayerStorageValue(cid, 54844, speed)
doChangeSpeed(cid, speed)
local pct = getCreatureHealth(getCreatureSummons(cid)[1]) / getCreatureMaxHealth(getCreatureSummons(cid)[1])
doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", pct)
doRemoveCreature(getCreatureSummons(cid)[1])
addEvent(setPlayerStorageValue, 100, cid, 63215, 1)
local item = getPlayerSlotItem(cid, 8)
if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) <= 0 then
addEvent(sendAuraEffect, 120, cid, auraSyst[getItemAttribute(item.uid, "aura")])
end
if useOTClient then
doPlayerSendCancel(cid, '12//,hide')
end
return true
end
local direffects = {30, 49, 9, 51}
function onStepOut(cid, item, position, fromPosition)
if isPlayer(cid) and getCreatureOutfit(cid).lookType == 814 then return false end
local checkpos = fromPosition
checkpos.stackpos = 0
if isInArray(waters, getTileInfo(checkpos).itemid) then
if getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 then
doSendMagicEffecte(fromPosition, direffects[getCreatureLookDir(cid) + 1])
end
end
if not isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then
if getPlayerStorageValue(cid, 17000) >= 1 then return true end
if getPlayerStorageValue(cid, 63215) <= 0 then return true end
doRemoveCondition(cid, CONDITION_OUTFIT)
setPlayerStorageValue(cid, 63215, -1)
local item = getPlayerSlotItem(cid, 8)
local pokemon = getItemAttribute(item.uid, "poke")
local x = pokes[pokemon]
if not x then return true end
if getItemAttribute(item.uid, "nick") then
doCreatureSay(cid, getItemAttribute(item.uid, "nick")..", I'm tired of surfing!", 1)
else
doCreatureSay(cid, getItemAttribute(item.uid, "poke")..", I'm tired of surfing!", 1)
end
doSummonMonster(cid, pokemon)
local pk = getCreatureSummons(cid)[1]
if not isCreature(pk) then
pk = doCreateMonster(pokemon, backupPos)
if not isCreature(pk) then
doPlayerSendCancel(cid, "You can't stop surfing here.")
doTeleportThing(cid, fromPosition, false)
return true
end
doConvinceCreature(cid, pk)
end
doChangeSpeed(pk, getCreatureSpeed(cid))
doChangeSpeed(cid, -getCreatureSpeed(cid))
doRegainSpeed(cid) --alterado v1.6
doTeleportThing(pk, fromPosition, false)
doTeleportThing(pk, getThingPos(cid), true)
doCreatureSetLookDir(pk, getCreatureLookDir(cid))
adjustStatus(pk, item.uid, true, false, true)
if useOTClient then
doPlayerSendCancel(cid, '12//,show')
end
end
return true
end
@Edit e Teu Spawn.lua por esse
local shinys = {
"Venusaur", "Charizard", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate", "Raichu", "Zubat", "Golbat", "Paras", "Parasect",
"Venonat", "Venomoth", "Growlithe", "Arcanine", "Abra", "Alakazam", "Tentacool", "Tentacruel", "Farfetch'd", "Grimer", "Muk", "Gengar", "Onix", "Krabby",
"Kingler", "Voltorb", "Electrode", "Cubone", "Marowak", "Hitmonlee", "Hitmonchan", "Tangela", "Horsea", "Seadra", "Scyther", "Jynx", "Electabuzz", "Pinsir",
"Magikarp", "Gyarados", "Snorlax", "Dragonair", "Dratini"}
local raros = {"Dragonite"}
local function ShinyName(cid)
if isCreature(cid) then
if string.find(tostring(getCreatureName(cid)), "Shiny") then
local newName = tostring(getCreatureName(cid)):match("Shiny (.*)")
doCreatureSetNick(cid, newName)
if isMonster(cid) then
doSetCreatureDropLoot(cid, false)
end
end
end
end
local function doSetRandomGender(cid)
if not isCreature(cid) then return true end
if isSummon(cid) then return true end
local gender = 0
local name = getCreatureName(cid)
if not newpokedex[name] then return true end
local rate = newpokedex[name].gender
if rate == 0 then
gender = 3
elseif rate == 1000 then
gender = 4
elseif rate == -1 then
gender = 0
elseif math.random(1, 1000) <= rate then
gender = 4
else
gender = 3
end
doCreatureSetSkullType(cid, gender)
end
local function doShiny(cid)
if isCreature(cid) then
if isSummon(cid) then return true end
if getPlayerStorageValue(cid, 74469) >= 1 then return true end
if getPlayerStorageValue(cid, 22546) >= 1 then return true end
if isNpcSummon(cid) then return true end
if isInArray(shinys, getCreatureName(cid)) then
transform = math.random(1, 1000) --0.1% chance
elseif isInArray(raros, getCreatureName(cid)) then
transform = math.random(1, 1000) --0.1% chance
else
return true
end
if transform == 10 then
doSendMagicEffect(getThingPos(cid), 18)
local shi = doCreateMonster("Shiny ".. getCreatureName(cid) .."", getThingPos(cid))
setPlayerStorageValue(shi, 74469, 1)
setPlayerStorageValue(cid, 74469, 1)
doRemoveCreature(cid)
else
setPlayerStorageValue(cid, 74469, 1)
end
else
return true
end
end
function onSpawn(cid)
registerCreatureEvent(cid, "Experience")
registerCreatureEvent(cid, "GeneralConfiguration")
registerCreatureEvent(cid, "DirectionSystem")
registerCreatureEvent(cid, "CastSystem")
if isSummon(cid) then
registerCreatureEvent(cid, "SummonDeath")
return true
end
addEvent(doSetRandomGender, 5, cid)
addEvent(doShiny, 10, cid)
addEvent(ShinyName, 15, cid)
addEvent(adjustWildPoke, 5, cid)
return true
end
Simples vá no Dat/Editor procure a Sprite do Ninetales dando Ride..
Exemplo:
Se o ID La do Dat/Editor for 1651
vc Pega esse ID e Diminui por 351 Ficando 1300. ai vc coloca assim
["Ninetales"] = {1300, 800}, -- kyuubi " E pronto so salvar
OBS: Sempre que for adicionar algum Surf,,Fly,Ride basta pegar o id e diminuir - 351 e pronto
Tipo man primeiro você cria um mapa do 0 ai vocé pega akele pedaço é bota no mapa 0 dps sobe pro floor 6 é coloca a parte de cima assim por diante dps de vocé tiver feito isso vocé feixa o mapa que vocé pegou o pedaço é coloca no map do seu serve.. simples isso caso não consiga me manda um mp com o pedaço do mapa que vocé quer passar.
Quem Está Navegando
0 membros estão online
Nenhum usuário registrado visualizando esta página.