Ir para conteúdo

Novidade: Poketibia 9.60


Posts Recomendados

Mano o serve esta otimo tirando (alguns bugs que tenho certesa que estara corrigido na versão v2) esses caras que falam besteiras, lazarocp nem liga pra eles ,

são crianças mimadas por que não sabem que o client n tem limite e que esse serve e contiuação do pokeB,mas e isso ai broder bom mesmo o serve, vcs que trabalham ou tahalhavão no serve estão de parabens.....mdr.gif

Link para o comentário
Compartilhar em outros sites

 

p2fx2.jpgServidor Poketibia 9.60

(Por Lazarocp)

- Aprovado para download -

- Servidor em desenvolvimento -

Você também pode ajudar!

divisoriap.png

 

• 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.

 

separador.gif

Informações gerais:

 

• Catch/Goback: 90%.

(Havendo apenas um erro no data/creaturescripts/scripts/goback.lua).

 

Ride: 100%

Fly: 95%

Surf: 99%

Blink: 100%

Rock Smash: 100%

Demais: 100%.

 

separador%20blog.jpg

Clan system: 100%.

M1 à M12: 100%.

Portrait System: 100%.

Nurse Joy: 100%.

 

Nota: O nosso mapa está sendo feito do zero (0). Já contamos com seis (06) cidades e vários respawns.

 

separador%20blog.jpg

 

Pokémons:

Primeira geração: 100%

Segunda geração: 100%

Terceira geração: 100%

Quarta geração: 100%

Quinta geração: Retirados.

Sexta geração: Retirados.

Mega Evolutions: Retiradas.

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.

divisoriap.png

Downloads:

 

 

H1pg1gS.png?1

 

CJIsjO0.png?1

OOSLdY8.png?1

 

separador.gif

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.

 

Tópico editado e organizado por Avilack.

 

 

 

 

SO Baixo quando recolocaresm tudo que tiraram

Link para o comentário
Compartilhar em outros sites

Muito Bom o serve não vou criticalo pelos bugs porem você lançara a v2,irei usar como base sua v2,muito obrigado por compartilha,uma pergunta porquê vocês tiraram a 5,6,megas,mega stone do ot? Obrigado REP!

Link para o comentário
Compartilhar em outros sites

E porque nao coloca so a 5 por que a 6 ninguem tem muito menos os megas!

 

ixi pena que não acompanhei o topico,só vai postar pra quem ajudou? ;/ perdi as esperanças de fazer o meu projeto.

Editado por Extremex
Link para o comentário
Compartilhar em outros sites

Se voce conseguir consertar o problema dos attribute que eu disse em outro post, eu devo ajudar

 

 

1 Coisa interessante, parece que ele não aceita "attributes" igual o pda, no PDA...

 

Com meus testes no goback baseado no pda deu apenas 2 problemas...

 

1º - Funcionou tudo direito, só a vida é o problema, se você volta ele com vida cheia tudo bem, se ele toma 1 hit e volta, ele perde o attribute "hp", no caso devia voltar com attribute assim... 0.5192850182409801858295, uma numeração assim, tentei com numeração com 1.1512851, parece q ele não aceita muitos numeros ou não aceita numero com ","

 

Como se o 1º já não fosse o suficiente, temos o 2º

 

2º - Ele perde outros "attributes" que eu coloquei como, "poke" e "btype", perde ao deslogar, da um erro no console relacionado a "Invalid data type"

 

Só vim reportar isso, acredito que seja nas sources...

 

 

 

 

Não sei se vai ajudar mas vou deixar os scripts q tinha feito aqui...

 

Obs.: São baseados no PDA mas tem diferenças...

 

goback.lua (actions)

Problema: como ele perde os attributes não é muito útil...

 

 

function onUse(cid, item, frompos, item2, topos)

if not pokeballs[getItemAttribute(item.uid, "btype")] then return true end
balls = pokeballs[getItemAttribute(item.uid, "btype")]
if item.itemid == balls.all[1] then -- ON
if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must put your pokeball in the correct place!")
return true
end
HP = getItemAttribute(item.uid, "hp")
Pokemon = getItemAttribute(item.uid, "poke")
Boost = getItemAttribute(item.uid, "boost") or 0
if not pokes[Pokemon] then return true end
if tonumber(HP) <= 0 then
doTransformItem(item.uid, balls.all[3])
doItemSetAttribute(item.uid, "hp", 0)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon is fainted.")
return true
end
Poke = pokes[Pokemon]
if getPlayerLevel(cid) < (Poke.level + Boost) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need level "..(Poke.level + Boost).." to use this pokemon.")
return true
end
doSummonMonster(cid, Pokemon)
PK = getCreatureSummons(cid)[1]
if not isCreature(PK) then return true end
adjustStatus(PK, item.uid, true, true)
doTransformItem(item.uid, balls.all[2])
local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", Pokemon)
doCreatureSay(cid, mgo, TALKTYPE_SAY)
doSendMagicEffect(getCreaturePosition(PK), balls.Effect)
return true
elseif item.itemid == balls.all[2] then -- USE
if #getCreatureSummons(cid) <= 0 then
doTransformItem(item.uid, balls.all[3])
doItemSetAttribute(item.uid, "hp", 0)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon is fainted.")
return true
end
PK = getCreatureSummons(cid)[1]
doReturnPokemon(cid, PK, item.uid, balls.Effect)
elseif item.itemid == balls.all[3] then -- OFF
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon is fainted.")
return true
end
return true

end

 

 

goback.lua (creaturescripts)

Obs.: Não testei muito já que algum idiota colocou char de adm lvl 1000+ (e eu tava com preguiça de mudar)

 

function onLogout(cid)

if not isCreature(cid) then return true end
thisitem = getPlayerSlotItem(cid, 8)
if thisitem.uid <= 0 then return true end
if not pokeballs[getItemAttribute(thisitem.uid, "btype")] then return true end
pokename = getItemAttribute(thisitem.uid, "poke")
btype = getItemAttribute(thisitem.uid, "btype")
balls = pokeballs[btype]
if #getCreatureSummons(cid) >= 1 and thisitem.uid > 1 then
summon = getCreatureSummons(cid)[1]
doTransformItem(thisitem.uid, balls.all[1])
doSendMagicEffect(getThingPos(summon), balls.Effect)
doRemoveCreature(summon)
end
return true
end
deathtexts = {"Oh no! POKENAME, come back!", "Come back, POKENAME!", "That's enough, POKENAME!", "You did well, POKENAME!",
"You need to rest, POKENAME!", "Nice job, POKENAME!", "POKENAME, you are too hurt!"}
function onDeath(cid, deathList)
local owner = getCreatureMaster(cid)
local thisball = getPlayerSlotItem(owner, 8)
local ballName = getItemAttribute(thisball.uid, "poke")
btype = getItemAttribute(thisball.uid, "btype")
balls = pokeballs[btype]
doSendMagicEffect(getThingPos(cid), balls.Effect)
doTransformItem(thisball.uid, balls.all[3])
local say = deathtexts[math.random(#deathtexts)]
doCreatureSay(owner, string.gsub(say, "POKENAME", getCreatureName(cid)), TALKTYPE_SAY)
doItemSetAttribute(thisball.uid, "hp", 0)
doRemoveCreature(cid)
return false

end

 

 

cb.lua (talkactions)

Obs.: Não tava pegando aqui, acredito q seja por causa do attribute não funcionar direito...

 

 

function onSay(cid, words, param)

if not pokes[param] then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, a pokemon with the name "..param.." doesn't exists.")
return true
end
addPokemonToPlayer(cid, param, "poke")
return true

end

 

 

testes.lua (talkactions)

Obs.: Comando para ver como ficava os attributes depois de soltar, voltar, matar o poke...

 

function onSay(cid, words, param)

item = getPlayerSlotItem(cid, 8)
str = ""
if getItemAttribute(item.uid, "poke") then
str = "Pokename: "..getItemAttribute(item.uid, "poke").."\n"
end
if getItemAttribute(item.uid, "btype") then
str = str.."Ball: "..getItemAttribute(item.uid, "btype").."\n"
end
if getItemAttribute(item.uid, "hp") then
str = str.."HP: "..getItemAttribute(item.uid, "hp").."\n"
end
print(str)
return true

end

 

 

zereflib.lua

Obs.: São todas as funções/configurações utilizadas nos scripts que eu fiz, algumas funções foram alteradas e outras apenas movidas, se for testar veja se as funções não existem em outro lugar para evitar conflitos/bugs

 

HPwild = 18

HPsummon = 20
PlayerSpeed = 280
pokes = {
["Bulbasaur"] = {vit = 14.5, off = 14.9, def = 16.5, spc = 16.5, agi = 207, level = 20, wildLvl = 25, portrait = 11989, type = "grass", type2 = "poison"},
}
pokeballs = {
["poke"] = {Effect = 10, distEffecton = 10, all = {19294, 19295, 19296}},
}
gobackmsgs = {
[1] = {go = "Go, doka!", back = "Come back, doka!"},
[2] = {go = "Let's do it, doka!", back = "Thanks for helping, doka!"},
[3] = {go = "I choose you, doka!", back = "That's enough, come back!"},
[4] = {go = "I need your help, doka!", back = "You were great, doka!"},
[5] = {go = "Let's fight, doka!", back = "Excellent work, doka!"},
[6] = {go = "It's battle time, doka!", back = "Well done, doka!"},
[7] = {go = "It's your turn, doka!", back = "You need to rest, doka!"},
[8] = {go = "doka, let's battle!", back = "Hurry back, doka!"},
[9] = {go = "Show your strength, doka!", back = "You did your best, doka!"}
}
function addPokemonToPlayer(cid, name, type, boost)
if not isCreature(cid) then return false end
if not pokes[name] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 1) return false end
if not pokeballs[type] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 1) return false end
balls = pokeballs[type]
if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) then
item = doCreateItemEx(19294)
end
if not item then return false end
doItemSetAttribute(item, "poke", name)
doItemSetAttribute(item, "hp", 1)
doItemSetAttribute(item, "description", "Contains a "..name..".")
doItemSetAttribute(item, "btype", type)
if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then
doItemSetAttribute(item, "boost", boost)
end
if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) then
doPlayerSendMailByName(getCreatureName(cid), item, 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are already holding six pokemons, so your new pokemon was sent to your depot.")
end
doTransformItem(item, balls.all[1])
return true
end
function doReturnPokemon(cid, pokemon, pokeball, effect)
if not pokeball then
pokeball = getPlayerSlotItem(cid, 8).uid
end
pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))
local pokename = getCreatureName(pokemon)
local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename)
balls = pokeballs[getItemAttribute(pokeball, "btype")]
doItemSetAttribute(pokeball, "hp", math.abs(pokelife))
doItemSetAttribute(pokeball, "aid", math.abs(pokelife))
doTransformItem(pokeball, balls.all[1])
doCreatureSay(cid, mbk, TALKTYPE_SAY)
doSendMagicEffect(getCreaturePosition(pokemon), balls.Effect)
doRemoveCreature(pokemon)
return true
end
function adjustStatus(pk, item, health, vite)
if not isCreature(pk) then return true end
name = getCreatureName(pk)
setPlayerStorageValue(pk, 1001, pokes[name].off * (getMasterLevel(pk) + getPokemonBoost(pk)))
setPlayerStorageValue(pk, 1002, pokes[name].def)
setPlayerStorageValue(pk, 1003, pokes[name].agi)
setPlayerStorageValue(pk, 1004, pokes[name].vit * (getMasterLevel(pk) + getPokemonBoost(pk)))
setPlayerStorageValue(pk, 1005, pokes[name].spc * (getMasterLevel(pk) + getPokemonBoost(pk)))
if vite == true then
local pct = getCreatureHealth(pk) / getCreatureMaxHealth(pk)
local vit = getVitality(pk)
setCreatureMaxHealth(pk, ( vit * HPsummon ))
doCreatureAddHealth(pk, pct * vit * HPsummon)
end
doRegainSpeed(pk)
if health == true then
local mh = HPsummon * getVitality(pk)
local rd = 1 - (tonumber(getItemAttribute(item, "hp")))
setCreatureMaxHealth(pk, mh)
doCreatureAddHealth(pk, getCreatureMaxHealth(pk))
doCreatureAddHealth(pk, -(getCreatureMaxHealth(pk) * rd))
end
return true
end
function doRegainSpeed(cid)
if not isCreature(cid) then return true end
local speed = PlayerSpeed
if isMonster(cid) then
speed = getSpeed(cid)
elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
speed = PlayerSpeed * getPlayerGroupId(cid)
end
doChangeSpeed(cid, -getCreatureSpeed(cid))
if getCreatureCondition(cid, CONDITION_PARALYZE) == true then
doRemoveCondition(cid, CONDITION_PARALYZE)
addEvent(doAddCondition, 10, cid, paralizeArea2)
end
doChangeSpeed(cid, speed)
return speed
end
function getOffense(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1001))
end
function getDefense(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1002))
end
function getSpeed(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1003))
end
function getVitality(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1004))
end
function getSpecialAttack(cid)
if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1005))
end
function getMasterLevel(poke)
if not isSummon(poke) then return 0 end
return getPlayerLevel(getCreatureMaster(poke))
end
function getPokemonBoost(poke)
if not isSummon(poke) then return 0 end
return getItemAttribute(getPlayerSlotItem(getCreatureMaster(poke), 8).uid, "boost") or 0

end

 

 

E como o cb não tava pegando direito pra testar era só colocar assim...

 

/attr set attribute poke "Bulbasaur"

/attr set attribute hp 1

/attr set attribute btype "poke"

 

Bem to sem teclado então não vou falar mais...

Depois vou ver se configuro tudo em apenas 2 attributes para ver oq da...

Link para o comentário
Compartilhar em outros sites

Estava passando o olho pelos códigos do Zeref, e percebi uma espécie de "erro" no código do /cb. Suponho que, no parâmetro da talkaction citada, todos vocês colocam o nome do pokémon inteiramente minúsculo, certo? Neste caso, como (talvez obviamente) é configurado em pokes o nome correto do pokémon (Bulbasaur, e não bulbasaur), seria enviada a mensagem informando que o pokémon não existe. O porque, para quem não entendeu, é este: quando há uma condição com pokes[param], é verificado se na tabela citada - pokes -, existe algum elemento com nome param. Como param é o parâmetro da talkaction, na verdade seria verificado se "existe o pokémon do parâmetro". E como não há elemento algum chamado bulbasaur - exemplificando, novamente -, e sim, Bulbasaur, a mensagem seria enviada.

Enfim, para corrigir isso, fiz o seguinte:

Adicionei em lib a seguinte função:

function getCorrectNameOfPokemon(name)
local str = ""
    if type(name) ~= "string" then name = tostring(name) end
    for poke, _ in pairs(pokes) do
        if poke:lower() == name:lower() then
            return poke
        end
    end
    return false
end
Alterando o código do cb com a função acima, o resultado seria:
function onSay(cid, words, param)
local pokemon = getCorrectNameOfPokemon(param)
    if not pokemon then
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, a pokemon with the name "..param.." doesn't exists.")
    end
    addPokemonToPlayer(cid, pokemon, "poke")
    return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

 

Estava passando o olho pelos códigos do Zeref, e percebi uma espécie de "erro" no código do /cb. Suponho que, no parâmetro da talkaction citada, todos vocês colocam o nome do pokémon inteiramente minúsculo, certo? Neste caso, como (talvez obviamente) é configurado em pokes o nome correto do pokémon (Bulbasaur, e não bulbasaur), seria enviada a mensagem informando que o pokémon não existe. O porque, para quem não entendeu, é este: quando há uma condição com pokes[param], é verificado se na tabela citada - pokes -, existe algum elemento com nome param. Como param é o parâmetro da talkaction, na verdade seria verificado se "existe o pokémon do parâmetro". E como não há elemento algum chamado bulbasaur - exemplificando, novamente -, e sim, Bulbasaur, a mensagem seria enviada.

Enfim, para corrigir isso, fiz o seguinte:

Adicionei em lib a seguinte função:

function getCorrectNameOfPokemon(name)
local str = ""
    if type(name) ~= "string" then name = tostring(name) end
    for poke, _ in pairs(pokes) do
        if poke:lower() == name:lower() then
            return poke
        end
    end
    return false
end
Alterando o código do cb com a função acima, o resultado seria:
function onSay(cid, words, param)
local pokemon = getCorrectNameOfPokemon(param)
    if not pokemon then
        return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, a pokemon with the name "..param.." doesn't exists.")
    end
    addPokemonToPlayer(cid, pokemon, "poke")
    return true
end

 

Como disse antes ainda acho sem necessidade e do jeito atual é melhor para o futuro

Obs.: Nego é tão puxa saco que não deve ter entendido nada mas curtiu só porque é moderador

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...