ZI
action

[PDA] PokéDex em corpses de pokémons

Por zipter98, 08 de ago. de 2015 em Mods, funções e outros

pda
pokedex
corpse
14
3k
zipter98Z
08 de agosto de 2015 às 01:44

Sinceramente, não sei qual a área mais adequada para um complemento a um sistema, mas w/e.

Este complemento é designado a possibilidade de uso da PokéDex em corpses de pokémons, podendo obter suas informações.

Sim, simples assim.

data/actions/scripts, pokedex.lua:

Troque:

if not isCreature(item2.uid) then
    return true
end
por:
if not isCreature(item2.uid) then
    local name = getItemNameById(item2.itemid)
    if name:find("fainted") then
        name = doCorrectPokemonName(name:gsub("fainted ", ""))
        if not getPlayerInfoAboutPokemon(cid, name).dex then
            local exp = newpokedex[name].level * rate
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..name.." and received "..exp.." experience points.")
            doSendMagicEffect(getThingPos(cid), 210)
            doPlayerAddExperience(cid, exp)
            doAddPokemonInDexList(cid, name)
        else
            doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8))
        end
    end
    return true
end
Testado em PDA v1.9, por Slicer.

Editado Agosto 8 por zipter98

StrogmanS
08 de agosto de 2015 às 07:27

boa ideia bem inovador e util as vezes você tá em uma hunt forte e quer da dex mais não consegue pq se der pode acabar morrendo etc

08 de agosto de 2015 às 11:29

Bem,eu testei aqui e quando dou dex no corpo nao acontece nada,somente no pokemon como sempre era

 

Meu Pokedex.lua do actions.

local rate = 50

function onUse(cid, item, fromPos, item2, toPos)
 
if not isCreature(item2.uid) then
    local name = getItemNameById(item2.itemid)
    if name:find("fainted") then
        name = doCorrectPokemonName(name:gsub("fainted ", ""))
        if not getPlayerInfoAboutPokemon(cid, name).dex then
            local exp = newpokedex[name].level * rate
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..name.." and received "..exp.." experience points.")
            doSendMagicEffect(getThingPos(cid), 210)
            doPlayerAddExperience(cid, exp)
            doAddPokemonInDexList(cid, name)
        else
            doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8).uid)
        end
    end
    return true
end

local poke = getCreatureName(item2.uid)

	if isMonster(item2.uid) then
		local this = newpokedex[getCreatureName(item2.uid)]
		local myball = 0
		if isSummon(item2.uid) then
		myball = getPlayerSlotItem(getCreatureMaster(item2.uid), 8)
		end
		if isOutlanderPokemon(getCreatureName(item2.uid)) then return false end
		if pokes[poke].dex then
			if getPlayerStorageValue(cid, pokes[poke].dex) <= 0 then
				exp = pokes[poke].level * rate
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..getCreatureName(item2.uid).." in your pokedex!")
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have gained "..exp.." experience points.")
				doSendMagicEffect(getThingPos(cid), 210)
				doPlayerAddExperience(cid, exp)
				setPlayerStorageValue(cid, pokes[poke].dex, 1)
				doShowPokedexRegistration(cid, item2, myball)
			return true
			else
				doShowPokedexRegistration(cid, item2, myball)
			return true
			end
		end
		doShowPokedexRegistration(cid, item2, myball)
	return true
	end

if not isPlayer(item2.uid) then return true end

	local kanto = 0
	local johto = 0
	local other = 0
	for i = 1, #oldpokedex do
			if i <= 151 then
				kanto = kanto+1
		    elseif i <= 251 and i > 151 then
				johto = johto+1
		    elseif i >= 252 then
				other = other+1
		    end
	end														   --alterado v1.6

	local player = getRecorderPlayer(toPos, cid)

	if cid == player then
		 doPlayerSendTextMessage(cid, 27, "You has unlocked "..kanto.." kanto's and "..johto.." johto's and "..other.." other's pokémons until now.") 
		 doPlayerSetVocation(cid, 9) --alterado v1.6
		 openChannelDialog(cid)
	end

return true
end
zipter98Z
08 de agosto de 2015 às 15:36

Aparentemente a versão do PDA que você usa não é a mesma que a minha. Tente assim:

 

 

local rate = 50
 
function onUse(cid, item, fromPos, item2, toPos)
 
    if not isCreature(item2.uid) then
        local name = getItemNameById(item2.itemid)
        if name:find("fainted") then
            name = doCorrectPokemonName(name:gsub("fainted ", ""))
            if isOutlanderPokemon(getCreatureName(item2.uid)) then return false end
            if pokes[poke].dex then
                if getPlayerStorageValue(cid, pokes[poke].dex) <= 0 then
                    local exp = pokes[poke].level * rate
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..getCreatureName(item2.uid).." in your pokedex!")
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have gained "..exp.." experience points.")
                    doSendMagicEffect(getThingPos(cid), 210)
                    doPlayerAddExperience(cid, exp)
                    setPlayerStorageValue(cid, pokes[poke].dex, 1)
                    doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8))
                else
                    doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8))
                end
            end
        end
        return true
    end

    local poke = getCreatureName(item2.uid)

    if isMonster(item2.uid) then
        local this = newpokedex[getCreatureName(item2.uid)]
        local myball = 0
        if isSummon(item2.uid) then
            myball = getPlayerSlotItem(getCreatureMaster(item2.uid), 8)
        end
        if isOutlanderPokemon(getCreatureName(item2.uid)) then return false end
        if pokes[poke].dex then
            if getPlayerStorageValue(cid, pokes[poke].dex) <= 0 then
                exp = pokes[poke].level * rate
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..getCreatureName(item2.uid).." in your pokedex!")
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have gained "..exp.." experience points.")
                doSendMagicEffect(getThingPos(cid), 210)
                doPlayerAddExperience(cid, exp)
                setPlayerStorageValue(cid, pokes[poke].dex, 1)
                doShowPokedexRegistration(cid, item2, myball)
                return true
            else
                doShowPokedexRegistration(cid, item2, myball)
                return true
            end
        end
        doShowPokedexRegistration(cid, item2, myball)
        return true
    end

    if not isPlayer(item2.uid) then return true end

    local kanto = 0
    local johto = 0
    local other = 0
    for i = 1, #oldpokedex do
        if i <= 151 then
            kanto = kanto+1
        elseif i <= 251 and i > 151 then
            johto = johto+1
        elseif i >= 252 then
            other = other+1
        end
    end														   --alterado v1.6

    local player = getRecorderPlayer(toPos, cid)

    if cid == player then
        doPlayerSendTextMessage(cid, 27, "You has unlocked "..kanto.." kanto's and "..johto.." johto's and "..other.." other's pokémons until now.") 
        doPlayerSetVocation(cid, 9) --alterado v1.6
        openChannelDialog(cid)
    end

    return true
end 

 

 

Se der algum erro na distro, por favor, avise.

Editado Agosto 8 por zipter98

08 de agosto de 2015 às 20:03

Bem,troquei pelo seu e continua o problema,ao dar dex em pokes morto,nao acontece nada,e tmb nao aparece nenhum erro '-'

zipter98Z
08 de agosto de 2015 às 23:42

Saberia dizer se as corpses dos pokémons do seu servidor são "defeated pokemon_name" ou "fainted pokemon_name"? Eu não pretendia adaptar o código para outras bases diferentes da que usei, mas vou abrir uma exceção.

Editado Agosto 8 por zipter98

09 de agosto de 2015 às 19:30

Bem,eles sao Fainted charmander <um exemplo


@up?

zipter98Z
09 de agosto de 2015 às 19:41

Troque:

if not isCreature(item2.uid) then
    local name = getItemNameById(item2.itemid)
    if name:find("fainted") then
        name = doCorrectPokemonName(name:gsub("fainted ", ""))
        if isOutlanderPokemon(getCreatureName(item2.uid)) then return false end
        if pokes[poke].dex then
            if getPlayerStorageValue(cid, pokes[poke].dex) <= 0 then
                local exp = pokes[poke].level * rate
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..getCreatureName(item2.uid).." in your pokedex!")
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have gained "..exp.." experience points.")
                doSendMagicEffect(getThingPos(cid), 210)
                doPlayerAddExperience(cid, exp)
                setPlayerStorageValue(cid, pokes[poke].dex, 1)
                doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8))
            else
                doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8))
            end
        end
    end
    return true
end
por:
if not isCreature(item2.uid) then
    print("Usou em item.")
    local name = getItemNameById(item2.itemid)
    print("Nome do item: "..name)
    if name:find("fainted") then
        name = doCorrectPokemonName(name:gsub("fainted ", ""))
        print("Nome do pokemon: "..name)
        if isOutlanderPokemon(getCreatureName(item2.uid)) then return false end
        if pokes[poke].dex then
            print("Esta na tabela.")
            if getPlayerStorageValue(cid, pokes[poke].dex) <= 0 then
                local exp = pokes[poke].level * rate
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have unlocked "..getCreatureName(item2.uid).." in your pokedex!")
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have gained "..exp.." experience points.")
                doSendMagicEffect(getThingPos(cid), 210)
                doPlayerAddExperience(cid, exp)
                setPlayerStorageValue(cid, pokes[poke].dex, 1)
                doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8))
            else
                doShowPokedexRegistration(cid, name, getPlayerSlotItem(cid, 8))
            end
        end
    end
    return true
end
E informe o que for imprimido no console.

Editado Agosto 9 por zipter98

09 de agosto de 2015 às 20:17

ando dou dex nos pokes mortos aparece isso agora

[09/08/2015 20:15:04] Usou em item.
[09/08/2015 20:15:04] Nome do item: asphalt

 

na distro!!!

zipter98Z
09 de agosto de 2015 às 20:35

Cara, você não está usando a PokéDex numa corpse. Está usando no asfalto.

09 de agosto de 2015 às 20:42

Usei no corpo.porem aparece como se o corpo tivesse invisível e da dez em baixo do corpo testei em vários corpos se poke

zipter98Z
09 de agosto de 2015 às 21:04

O problema está nas corpses, não no sistema.

1 mês depois...
RumplestiltiskinR
08 de setembro de 2015 às 13:28

Zipter, posso te fazer um pedido ? Eu ficaria muito agradecido se começasse a desenvolver sistemas para a base PokéCyan, afinal, creio que seja a mais utilizada...

Por favor ! :D
Vlw

Editado Setembro 8 por Rumplestiltiskin

6 meses depois...
LoouisL
16 de março de 2016 às 21:43

O problema está nas corpses, não no sistema.

Tbm adoraria alguns sistemas para a base cyan