Jump to content
×
×
  • Create New...
  • 0

psoul Usar Habilidade (Surf, Ride, Fly...) se tiver insígnia.


Go to solution Solved by Deadpool,

Question

Versão do Servidor: TFS - 1.0
Tipo de Script: actions
Código:
 

    

Fala ae galera, tudo bem ?

 

Gostaria de permitir o uso da habilidade do pokemon como Surf, ride, fly, apenas se o player tiver passado de determinado ginásio, vinculando assim o uso da abilidade com a insígnia adiquirida. Retirando o vip como obrigatório.

Alguém sabe onde consigo adicionar o script ou mesmo a linha de checagem (acho que é o mais provável) para que isso seja possível ?

 

Acredito que eu tenha que add a checagem no script abaixo.

Spoiler

local holes = {[468] = 469, [481] = 482, [483] = 484, [7932] = 7933, [8579] = 8585}
local grasses = {[2782] = 2781, [3985] = 3984}
local debris = 1336

local POKEMON_FAST_MOUNT_CONDITION = createConditionObject(CONDITION_HASTE, 999, -1, CONDITION_SUBID.HASTE.FAST_MOUNT)
setConditionParam(POKEMON_FAST_MOUNT_CONDITION, CONDITION_PARAM_SPEED, 120)

-- Abilities Speed START
RIDE_SPEED = {
    ["Ponyta"] = 120,
    ["Rapidash"] = 140,
    ["Doduo"] = 120,
    ["Dodrio"] = 140,
    ["Arcanine"] = 140,
    ["Ninetales"] = 140,
    ["Onix"] = 130,
    ["Tauros"] = 140,
    ["Rhyhorn"] = 130,
    ["Venusaur"] = 120,
    -- 2nd Gen
    ["Bayleef"] = 120,
    ["Meganium"] = 140,
    ["Mareep"] = 120,
    ["Girafarig"] = 130,
    ["Steelix"] = 140,
    ["Piloswine"] = 130,
    ["Houndoom"] = 140,
    ["Stantler"] = 130,
    -- 3rd Gen
    ["Metagross"] = 130,
    ["Manectric"] = 140,
    ["Absol"] = 130,
    ["Lairon"] = 120,
    ["Aggron"] = 120,
    ["Shelgon"] = 120,
    ["Camerupt"] = 110,
    ["Mightyena"] = 120,
    ["Torkoal"] = 100,
}

local tmp = table.deepcopy(RIDE_SPEED)
for name, speed in pairs(RIDE_SPEED) do
    tmp[string.concat("Shiny ", name)] = speed
end
RIDE_SPEED = tmp

RIDE_SPEED_CONDITIONS = {}
for name, speed in pairs(RIDE_SPEED) do
    RIDE_SPEED_CONDITIONS[name] = {}

    RIDE_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(RIDE_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))

    RIDE_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(RIDE_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(RIDE_SPEED)
RIDE_SPEED = nil

FLY_SPEED = {
    -- 1st Gen
    ["Pidgeot"] = 180,
    ["Fearow"] = 180,
    ["Charizard"] = 190,
    ["Dragonite"] = 190,
    ["Aerodactyl"] = 190,
    ["Zapdos"] = 200,
    ["Moltres"] = 200,
    ["Articuno"] = 200,
    ["Mew"] = 220,
    ["Mewtwo"] = 220,
    ["Porygon"] = 190,
    ["Farfetchd"] = 180,
    ["Dragonair"] = 190,
    -- 2nd Gen
    ["Noctowl"] = 180,
    ["Crobat"] = 190,
    ["Xatu"] = 180,
    ["Heracross"] = 180,
    ["Skarmory"] = 180,
    ["Porygon2"] = 190,
    -- 3rd Gen
    ["Altaria"] = 180,
    ["Flygon"] = 190,
    ["Latias"] = 200,
    ["Latios"] = 200,
    ["Pelipper"] = 170,
    ["Rayquaza"] = 200,
    ["Salamence"] = 190,
    ["Swablu"] = 180,
    ["Swellow"] = 200,
    ["Tropius"] = 180,
    ["Vibrava"] = 190,
    ["Wingull"] = 180,
}

local tmp = table.deepcopy(FLY_SPEED)
for name, speed in pairs(FLY_SPEED) do
    tmp[string.concat("Shiny ", name)] = speed
end
FLY_SPEED = tmp

FLY_SPEED_CONDITIONS = {}
for name, speed in pairs(FLY_SPEED) do
    FLY_SPEED_CONDITIONS[name] = {}

    FLY_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(FLY_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))

    FLY_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(FLY_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(FLY_SPEED)
FLY_SPEED = nil

LEVITATE_SPEED = {
    -- 1st Gen
    ["Gengar"] = 190,
    -- Shiny
    --["Shiny Gengar"] = 190,
}

local tmp = table.deepcopy(LEVITATE_SPEED)
for name, speed in pairs(LEVITATE_SPEED) do
    tmp[string.concat("Shiny ", name)] = speed
end
LEVITATE_SPEED = tmp

LEVITATE_SPEED_CONDITIONS = {}
for name, speed in pairs(LEVITATE_SPEED) do
    LEVITATE_SPEED_CONDITIONS[name] = {}

    LEVITATE_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(LEVITATE_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))

    LEVITATE_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(LEVITATE_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(LEVITATE_SPEED)
LEVITATE_SPEED = nil

SURF_SPEED = {
    -- 1st Gen
    ["Squirtle"] = 180,
    ["Wartortle"] = 190,
    ["Blastoise"] = 200,
    ["Poliwag"] = 160,
    ["Poliwhirl"] = 190,
    ["Poliwrath"] = 200,
    ["Goldeen"] = 180,
    ["Seaking"] = 190,
    ["Tentacool"] = 180,
    ["Tentacruel"] = 200,
    ["Staryu"] = 180,
    ["Starmie"] = 190,
    ["Dewgong"] = 190,
    ["Lapras"] = 190,
    ["Gyarados"] = 200,
    ["Omastar"] = 190,
    ["Kabutops"] = 200,
    ["Vaporeon"] = 190,
    ["Seadra"] = 190,
    ["Golduck"] = 190,
    ["Snorlax"] = 180,
    -- 2nd Gen
    ["Totodile"] = 180,
    ["Croconaw"] = 190,
    ["Feraligatr"] = 200,
    ["Marill"] = 160,
    ["Azumarill"] = 190,
    ["Politoed"] = 200,
    ["Wooper"] = 160,
    ["Quagsire"] = 190,
    ["Octillery"] = 190,
    ["Mantine"] = 190,
    ["Kingdra"] = 200,
    -- 3rd Gen
    ["Aggron"] = 160,
    ["Azurill"] = 160,
    ["Barboach"] = 170,
    ["Carvanha"] = 170,
    ["Clamperl"] = 170,
    ["Corphish"] = 170,
    ["Crawdaunt"] = 190,
    ["Feebas"] = 170,
    ["Gorebyss"] = 190,
    ["Hariyama"] = 160,
    ["Huntail"] = 190,
    ["Kyogre"] = 200,
    ["Latias"] = 200,
    ["Latios"] = 200,
    ["Linoone"] = 160,
    ["Lombre"] = 170,
    ["Lotad"] = 160,
    ["Ludicolo"] = 180,
    ["Luvdisc"] = 170,
    ["Makuhita"] = 160,
    ["Marshtomp"] = 180,
    ["Milotic"] = 190,
    ["Mudkip"] = 170,
    ["Pelipper"] = 180,
    ["Rayquaza"] = 200,
    ["Relicanth"] = 170,
    ["Sealeo"] = 170,
    ["Sharpedo"] = 190,
    ["Spheal"] = 160,
    ["Swampert"] = 170,
    ["Wailmer"] = 160,
    ["Wailord"] = 170,
    ["Walrein"] = 170,
    ["Zigzagoon"] = 160,
    ["Whiscash"] = 180,
}

local tmp = table.deepcopy(SURF_SPEED)
for name, speed in pairs(SURF_SPEED) do
    tmp[string.concat("Shiny ", name)] = speed
end
SURF_SPEED = tmp

SURF_SPEED_CONDITIONS = {}
for name, speed in pairs(SURF_SPEED) do
    SURF_SPEED_CONDITIONS[name] = {}

    SURF_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(SURF_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))

    SURF_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(SURF_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(SURF_SPEED)
SURF_SPEED = nil

DIVE_SPEED = {
    -- 1st Gen
    ["Squirtle"] = 160,
    ["Wartortle"] = 170,
    ["Blastoise"] = 180,
    ["Poliwag"] = 160,
    ["Poliwhirl"] = 170,
    ["Poliwrath"] = 180,
    ["Goldeen"] = 160,
    ["Seaking"] = 170,
    ["Tentacool"] = 160,
    ["Tentacruel"] = 180,
    ["Staryu"] = 160,
    ["Starmie"] = 170,
    ["Dewgong"] = 170,
    ["Lapras"] = 170,
    ["Gyarados"] = 180,
    ["Omastar"] = 170,
    ["Kabutops"] = 180,
    ["Vaporeon"] = 170,
    ["Seadra"] = 170,
    ["Golduck"] = 170,
    -- 2nd Gen
    ["Totodile"] = 160,
    ["Croconaw"] = 170,
    ["Feraligatr"] = 180,
    ["Marill"] = 140,
    ["Azumarill"] = 170,
    ["Politoed"] = 180,
    ["Wooper"] = 140,
    ["Quagsire"] = 170,
    ["Octillery"] = 170,
    ["Mantine"] = 170,
    ["Kingdra"] = 180,
    -- 3rd Gen
    ["Carvanha"] = 170,
    ["Clamperl"] = 170,
    ["Crawdaunt"] = 190,
    ["Feebas"] = 170,
    ["Gorebyss"] = 190,
    ["Huntail"] = 190,
    ["Kyogre"] = 200,
    ["Lombre"] = 170,
    ["Ludicolo"] = 180,
    ["Luvdisc"] = 170,
    ["Marshtomp"] = 180,
    ["Milotic"] = 190,
    ["Rayquaza"] = 200,
    ["Relicanth"] = 170,
    ["Sealeo"] = 170,
    ["Sharpedo"] = 190,
    ["Spheal"] = 160,
    ["Swampert"] = 170,
    ["Wailmer"] = 160,
    ["Wailord"] = 170,
    ["Walrein"] = 170,
    ["Whiscash"] = 180,
}

local tmp = table.deepcopy(DIVE_SPEED)
for name, speed in pairs(DIVE_SPEED) do
    tmp[string.concat("Shiny ", name)] = speed
end
DIVE_SPEED = tmp

DIVE_SPEED_CONDITIONS = {}
for name, speed in pairs(DIVE_SPEED) do
    DIVE_SPEED_CONDITIONS[name] = {}

    DIVE_SPEED_CONDITIONS[name].default = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(DIVE_SPEED_CONDITIONS[name].default, CONDITION_PARAM_SPEED, (speed * 1.2))

    DIVE_SPEED_CONDITIONS[name].mastery = createConditionObject(CONDITION_HASTE, -1, -1, CONDITION_SUBID.HASTE.ABILITIES)
    setConditionParam(DIVE_SPEED_CONDITIONS[name].mastery, CONDITION_PARAM_SPEED, (speed * 1.2) * 1.5)
end
table.clear(DIVE_SPEED)
DIVE_SPEED = nil

function getAbilitySpeedCondition(cid)
    if (isFlying(cid)) then
        local name = getPlayerPokemonName(cid, true)
        return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.FLY_SPEED) and
                (FLY_SPEED_CONDITIONS[name] and FLY_SPEED_CONDITIONS[name].mastery or nil) or
                (FLY_SPEED_CONDITIONS[name] and FLY_SPEED_CONDITIONS[name].default or nil)

    elseif (isLevitating(cid)) then
        local name = getPlayerPokemonName(cid, true)
        return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.LEVITATE_SPEED) and
                (LEVITATE_SPEED_CONDITIONS[name] and LEVITATE_SPEED_CONDITIONS[name].mastery or nil) or
                (LEVITATE_SPEED_CONDITIONS[name] and LEVITATE_SPEED_CONDITIONS[name].default or nil)

    elseif (isRiding(cid)) then
        local name = getPlayerPokemonName(cid, true)
        return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.RIDE_SPEED) and
                (RIDE_SPEED_CONDITIONS[name] and RIDE_SPEED_CONDITIONS[name].mastery or nil) or
                (RIDE_SPEED_CONDITIONS[name] and RIDE_SPEED_CONDITIONS[name].default or nil)

    elseif (isSurfing(cid)) then
        local name = getPlayerPokemonName(cid, true)
        return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.SURF_SPEED) and
                (SURF_SPEED_CONDITIONS[name] and SURF_SPEED_CONDITIONS[name].mastery or nil) or
                (SURF_SPEED_CONDITIONS[name] and SURF_SPEED_CONDITIONS[name].default or nil)

    elseif (isDiving(cid)) then
        local name = getPlayerPokemonName(cid, true)
        return doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.DIVE_SPEED) and
                (DIVE_SPEED_CONDITIONS[name] and DIVE_SPEED_CONDITIONS[name].mastery or nil) or
                (DIVE_SPEED_CONDITIONS[name] and DIVE_SPEED_CONDITIONS[name].default or nil)
    end

    return nil
end

-- Abilities Speed END

local function checkRide(cid, pokemon, playerPosition, ticks)
    if (isCreature(cid) and isCreature(pokemon)) then
        local toPosition = getCreaturePosition(cid)
        if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
            if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
                doBallSaveStats(pokemon, getPlayerBall(cid).uid)
                doRemoveCreature(pokemon)
                setRidingStatus(cid, true)
                setPlayerVulnerable(cid, true)
                doPlayerUpdateOutfit(cid)
                setCreatureMaxMana(cid, 0)
                doPlayerAddMana(cid, -getCreatureMana(cid), false)

            elseif (ticks > 1) then
                doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
                addEvent(checkRide, 500, cid, pokemon, playerPosition, ticks - 1)
            end
        end
    end
end

function ride(cid)
    local toPosition = getCreaturePosition(cid)
    local pokemon = getPlayerPokemon(cid)
    local targetPos = getPositionAdjacent(pokemon, toPosition, true)
    local pos = getCreaturePosition(pokemon)

    if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
            (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
                    getPathToEx(pokemon, targetPos))) then
        doCreatureSay(cid, string.format(__L(cid, "%s , let's ride!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        if (targetPos) then
            doCreatureWalkToPosition(pokemon, targetPos)
        end
        checkRide(cid, pokemon, toPosition, 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end

function deRide(cid)
    if (doPokemonCall(cid, getPlayerBall(cid))) then
        doPlayerRemoveAbilitySpeedCondition(cid)
    end
end

local function checkFly(cid, pokemon, playerPosition, ticks)
    if (isCreature(cid) and isCreature(pokemon)) then
        local toPosition = getCreaturePosition(cid)
        if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
            if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
                local name = getPokemonReferenceName(pokemon)

                doBallSaveStats(pokemon, getPlayerBall(cid).uid)
                doRemoveCreature(pokemon)
                setFlyingStatus(cid, true)
                setPlayerVulnerable(cid, true)
                doPlayerUpdateOutfit(cid)
                setCreatureMaxMana(cid, 0)
                doPlayerAddMana(cid, -getCreatureMana(cid), false)

                if (name == "Porygon") then
                    doSendMagicEffect(getCreaturePosition(cid), EFFECT_BIG_PORYGON)
                end

            elseif (ticks > 1) then
                doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
                addEvent(checkFly, 500, cid, pokemon, playerPosition, ticks - 1)
            end
        end
    end
end

function fly(cid)
    local toPosition = getCreaturePosition(cid)
    local pokemon = getPlayerPokemon(cid)
    local targetPos = getPositionAdjacent(pokemon, toPosition, true)
    local pos = getCreaturePosition(pokemon)

    if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
            (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
                    getPathToEx(pokemon, targetPos))) then
        doCreatureSay(cid, string.format(__L(cid, "%s, let's fly!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        if (targetPos) then
            doCreatureWalkToPosition(pokemon, targetPos)
        end
        checkFly(cid, pokemon, toPosition, 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end

function deFly(cid)
    if (doPokemonCall(cid, getPlayerBall(cid))) then
        doPlayerRemoveAbilitySpeedCondition(cid)
    end
end

local function checkSurf(cid, pokemon, newPosition, playerPosition, ticks)
    if (isCreature(cid) and isCreature(pokemon)) then
        local toPosition = getCreaturePosition(cid)
        if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
            if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
                doTeleportThing(cid, newPosition, false)
                doCreatureSay(cid, string.format(__L(cid, "%s, let's surf!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
                doBallSaveStats(pokemon, getPlayerBall(cid).uid)
                doRemoveCreature(pokemon)
                setSurfingStatus(cid, true)
                setPlayerVulnerable(cid, true)
                doPlayerUpdateOutfit(cid)
                setCreatureMaxMana(cid, 0)
                doPlayerAddMana(cid, -getCreatureMana(cid), false)

            elseif (ticks > 1) then
                doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
                addEvent(checkSurf, 500, cid, pokemon, newPosition, playerPosition, ticks - 1)
            end
        end
    end
end

function surf(cid, newPosition, toPosition)
    if (not toPosition) then -- When called by Oxygen Mask
        toPosition = getCreaturePosition(cid)
    end

    local pokemon = getPlayerPokemon(cid)
    local targetPos = getPositionAdjacent(pokemon, toPosition, true)
    local pos = getCreaturePosition(pokemon)

    if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
            (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
                    getPathToEx(pokemon, targetPos))) then
        doCreatureSay(cid, string.format(__L(cid, "%s, let's surf!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        if (targetPos) then
            doCreatureWalkToPosition(pokemon, targetPos)
        end
        checkSurf(cid, pokemon, newPosition, getPlayerPosition(cid), 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end

function deSurf(cid, newPosition)
    local oldPos = getCreaturePosition(cid)
    doTeleportThing(cid, newPosition, false)
    if (doPokemonCall(cid, getPlayerBall(cid))) then
        doPlayerRemoveAbilitySpeedCondition(cid)
    else
        doTeleportThing(cid, oldPos, false)
    end
end

local function checkDive(cid, pokemon, playerPosition, ticks)
    if (isCreature(cid) and isCreature(pokemon)) then
        local toPosition = getCreaturePosition(cid)
        if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
            if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
                doBallSaveStats(pokemon, getPlayerBall(cid).uid)
                doRemoveCreature(pokemon)
                setDivingStatus(cid, true)
                setSurfingStatus(cid, false)
                setPlayerVulnerable(cid, true)
                doPlayerUpdateOutfit(cid)
                setCreatureMaxMana(cid, 0)
                doPlayerAddMana(cid, -getCreatureMana(cid), false)

            elseif (ticks > 1) then
                doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
                addEvent(checkDive, 500, cid, pokemon, playerPosition, ticks - 1)
            end
        end
    end
end

function dive(cid)
    if (isPokemonOnline(cid)) then
        local toPosition = getCreaturePosition(cid)
        local pokemon = getPlayerPokemon(cid)
        local targetPos = getPositionAdjacent(pokemon, toPosition, true)
        local pos = getCreaturePosition(pokemon)

        if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
                (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
                        getPathToEx(pokemon, targetPos))) then
            doCreatureSay(cid, string.format(__L(cid, "%s, let's dive!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
            if (targetPos) then
                doCreatureWalkToPosition(pokemon, targetPos)
            end
            checkDive(cid, pokemon, toPosition, 20)
        else
            doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        end

    else
        setDivingStatus(cid, true)
        setSurfingStatus(cid, false)
        setPlayerVulnerable(cid, true)
        doPlayerUpdateOutfit(cid)
        setCreatureMaxMana(cid, 0)
        doPlayerAddMana(cid, -getCreatureMana(cid), false)
    end
end

function deDive(cid)
    doPlayerRemoveAbilitySpeedCondition(cid)
    doPokemonCall(cid, getPlayerBall(cid))
end

function light(cid)
    local pokemon = getPlayerPokemon(cid)

    doCreatureSay(cid, string.format(__L(cid, "%s, turn on the lights!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
    doAddCondition(pokemon, lightCondition)
    doSendMagicEffect(getCreaturePosition(pokemon), EFFECT_GREEN_BUFF)
end

function deLight(cid)
    local pokemon = getPlayerPokemon(cid)

    doCreatureSay(cid, string.format(__L(cid, "%s, turn off the lights!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
    doRemoveCondition(pokemon, CONDITION_LIGHT)
    doSendMagicEffect(getCreaturePosition(pokemon), EFFECT_GREEN_BUFF)
end

local function checkDig(cid, itemEx, toPosition, ticks)
    if (isCreature(cid)) then
        if (getDistanceBetween(getCreaturePosition(cid), toPosition) < 2) then
            local cidPos = getCreaturePosition(cid)

            doCreatureSetLookDirection(cid, getDirectionTo(cidPos, toPosition))
            itemEx.uid = getTileItemById(toPosition, itemEx.itemid).uid
            doTransformItem(itemEx.uid, holes[itemEx.itemid])
            doDecayItem(itemEx.uid)
            doSendDistanceShoot(cidPos, toPosition, PROJECTILE_GRAVEL)
            doSendMagicEffect(toPosition, EFFECT_SCRATCH)
            doCreatureWalkToPosition(cid, getCreaturePosition(cid)) -- Stop Walk

        elseif (ticks > 1) then
            addEvent(checkDig, 500, cid, itemEx, toPosition, ticks - 1)
        end
    end
end

function dig(cid, itemEx, toPosition)
    local pokemon = getPlayerPokemon(cid)
    local pos = getCreaturePosition(pokemon)
    local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
            getPositionAdjacent(pokemon, toPosition, true))

    if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
            getPathToEx(pokemon, targetPos)) then
        doCreatureSay(cid, string.format(__L(cid, "%s, dig it!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        doCreatureWalkToPosition(pokemon, targetPos)
        checkDig(pokemon, itemEx, toPosition, 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end

local function checkCut(cid, itemEx, toPosition, ticks)
    if (isCreature(cid)) then
        if (getDistanceBetween(getCreaturePosition(cid), toPosition) < 2) then
            doCreatureSetLookDirection(cid, getDirectionTo(getCreaturePosition(cid), toPosition))
            itemEx.uid = getTileItemById(toPosition, itemEx.itemid).uid
            doTransformItem(itemEx.uid, grasses[itemEx.itemid])
            doDecayItem(itemEx.uid)
            doSendMagicEffect(toPosition, EFFECT_SCRATCH)
            PokemonAbility.afterCut(getCreatureMaster(cid), cid, toPosition)

        elseif (ticks > 1) then
            addEvent(checkCut, 500, cid, itemEx, toPosition, ticks - 1)
        end
    end
end

function cut(cid, itemEx, toPosition)
    local pokemon = getPlayerPokemon(cid)
    local pos = getCreaturePosition(pokemon)
    local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
            getPositionAdjacent(pokemon, toPosition, true))

    if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
            getPathToEx(pokemon, targetPos)) then
        doCreatureSay(cid, string.format(__L(cid, "%s, cut it!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        doCreatureWalkToPosition(pokemon, targetPos)
        checkCut(pokemon, itemEx, toPosition, 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end

local function checkRockSmash(cid, itemEx, toPosition, ticks)
    if (isCreature(cid)) then
        if (getDistanceBetween(getCreaturePosition(cid), toPosition) < 2) then
            local a = getTileItemById(toPosition, itemEx.itemid).uid
            local createDebris = true

            while (a ~= nil and a > 0) do
                if (itemEx.itemid == 18742) then -- Ice Pillar
                    doCreateItem(18741, 1, toPosition) -- Ice Block
                    createDebris = false

                    addEvent(function(pos) doCreateItem(18742, 1, pos) end, 60000, toPosition) -- Re-create Ice Pillar

                elseif (itemEx.itemid == 23563) then -- Closed door Kanto Main 10
                    local positions = {
                        {x = 5026, y = 489, z = 7},
                        {x = 5026, y = 490, z = 7}
                    }

                    for k, v in pairs(positions) do
                        if (getSamePosition(toPosition, v)) then
                            doRemoveItem(getTileItemById({x = 5026, y = 491, z = 7}, 20230).uid)
                            doCreateItem(20133, 1, {x = 5026, y = 491, z = 7}) -- Open Door
                            createDebris = false
                            addEvent(function()
                                doRemoveItem(getTileItemById({x = 5026, y = 491, z = 7}, 20133).uid)
                                doCreateItem(20230, 1, {x = 5026, y = 491, z = 7}) -- Open Door
                            end, 60 * 1000)
                        end
                    end
                    
                    break
                end

                doRemoveItem(a)
                a = getTileItemById(toPosition, itemEx.itemid).uid
            end

            local cidPos = getCreaturePosition(cid)

            doCreatureSetLookDirection(cid, getDirectionTo(cidPos, toPosition))
            doSendDistanceShoot(cidPos, toPosition, PROJECTILE_GRAVEL)
            doSendMagicEffect(toPosition, EFFECT_EARTH_EXPLOSION)

            if (createDebris) then
                doDecayItem(doCreateItem(debris, 1, toPosition))
            end

            PokemonAbility.afterRockSmash(getCreatureMaster(cid), cid, toPosition)

        elseif (ticks > 1) then
            addEvent(checkRockSmash, 500, cid, itemEx, toPosition, ticks - 1)
        end
    end
end

function rockSmash(cid, itemEx, toPosition)
    local pokemon = getPlayerPokemon(cid)
    local pos = getCreaturePosition(pokemon)
    local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
            getPositionAdjacent(pokemon, toPosition, true))

    if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
            getPathToEx(pokemon, targetPos)) then
        doCreatureSay(cid, string.format(__L(cid, "%s, smash it!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        doCreatureWalkToPosition(pokemon, targetPos)
        checkRockSmash(pokemon, itemEx, toPosition, 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end
--[[
local HEADBUTT_KANTO = {
    {skill = 0, pokemons = {"Caterpie", "Weedle"}},
    {skill = 15, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow"}},
    {skill = 30, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod"}},
    {skill = 45, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat"}},
    {skill = 60, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey"}},
    {skill = 80, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute"}},
    {skill = 100, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto"}},
    {skill = 130, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree"}},
    {skill = 160, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat"}},
    {skill = 200, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth"}},
    {skill = 230, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth", "Pinsir"}},
    {skill = 260, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth", "Pinsir", "Farfetchd"}},
    {skill = 300, pokemons = {"Caterpie", "Weedle", "Pidgey", "Spearow", "Kakuna", "Metapod", "Ekans", "Venonat", "Mankey", "Exeggcute", "Pidgeotto", "Beedrill", "Butterfree", "Arbok", "Golbat", "Venomoth", "Pinsir", "Farfetchd", "Scyther"}},
}

local HEADBUTT_ORANGE_ARCHIPELAGO = {
    {skill = 0, pokemons = {"Caterpie", "Weedle"}},
    {skill = 15, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot"}},
    {skill = 30, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak"}},
    {skill = 45, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat"}},
    {skill = 60, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom"}},
    {skill = 80, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma"}},
    {skill = 100, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto"}},
    {skill = 130, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree"}},
    {skill = 160, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian"}},
    {skill = 200, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados"}},
    {skill = 230, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados", "Pineco"}},
    {skill = 260, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados", "Pineco", "Heracross"}},
    {skill = 300, pokemons = {"Caterpie", "Weedle", "Sentret", "Hoothoot", "Ledyba", "Spinarak", "Furret", "Venonat", "Aipom", "Yanma", "Pidgeotto", "Beedrill", "Butterfree", "Noctowl", "Ledian", "Ariados", "Pineco", "Heracross", "Forretress"}},
}

local SHINY_CHANCE = getConfigValue("shinyAppearChance")
local HEADBUTT_EXHAUST_CONDITION = createConditionObject(CONDITION_EXHAUST, 12 * 1000, false, CONDITION_SUBID.EXHAUST.ABILITYHEADBUTT)

local function getPlayerHeadbuttablePokemons(cid)
    local playerSkill = getPlayerSkill(cid, PLAYER_SKILL_HEADBUTTING)
    local pokemon_by_skill = getPlayerInsideOrangeArchipelago(cid) and HEADBUTT_ORANGE_ARCHIPELAGO
            or HEADBUTT_KANTO
    for i = #pokemon_by_skill, 1, -1 do
        if (pokemon_by_skill[i].skill <= playerSkill) then
            return pokemon_by_skill[i].pokemons
        end
    end
end

local function checkHeadbutt(cid, itemEx, toPosition, ticks)
    if (isCreature(cid)) then
        if (getDistanceBetween(getCreaturePosition(cid), toPosition) == 1) then
            local master = getCreatureMaster(cid)
            local headbuttSkill = getPlayerSkillLevel(master, PLAYER_SKILL_HEADBUTTING)
            local cidPos = getCreaturePosition(cid)

            itemEx.uid = getTileItemById(toPosition, itemEx.itemid).uid
            doTransformItem(itemEx.uid, itemEx.itemid + 1)
            doDecayItem(itemEx.uid)
            doCreatureSetLookDirection(cid, getDirectionTo(getCreaturePosition(cid), toPosition))

            doSendMagicEffect(cidPos, EFFECT_CONFUSE_STARS)
            doSendMagicEffect(toPosition, EFFECT_TREE_FALLING_LEAVES)
            doSendDistanceShoot(cidPos, toPosition, PROJECTILE_GRAVEL)

            doPlayerSendTextMessage(master, MESSAGE_STATUS_CONSOLE_BLUE, "You find something!")
            doSendMagicEffect(cidPos, EFFECT_EMOTION_EXCLAMATION)

            local headbuttablePokemons = getPlayerHeadbuttablePokemons(master)
            local randomHeadbuttablePokemon = headbuttablePokemons[math.random(1, #headbuttablePokemons)]

            local amount, i = math.ceil((headbuttSkill + 1) / 75)
            if (randomHeadbuttablePokemon == "Scyther" or randomHeadbuttablePokemon == "Pinsir" or randomHeadbuttablePokemon == "Farfetchd") then
                amount = 1
            end
            local amount = getRandom(1, amount)
            if (amount > 4) then
                amount = 4
            end

            if (HEADBUTT_KANTO[#HEADBUTT_KANTO].skill > getPlayerSkill(master, PLAYER_SKILL_HEADBUTTING)) then
                doPlayerAddSkillTry(master, PLAYER_SKILL_HEADBUTTING, math.ceil(30 / (headbuttSkill + 1)))
            end

            for i = 1, amount do
                local pokemonName = randomHeadbuttablePokemon
                if (getRandom(0, SHINY_CHANCE) == 0) then
                    pokemonName = getMonsterInfo(pokemonName).shiny
                end
                local pokemon = doSummonCreature(pokemonName, getCreaturePosition(cid))

                addEvent(doRemoveCreature, 3 * 60 * 1000, pokemon, true, false) -- remove creature after 2 min, force remove and dont show error
                setMonsterUniqueTarget(pokemon, master)
            end
        elseif (ticks > 1) then
            addEvent(checkHeadbutt, 1000, cid, itemEx, toPosition, ticks - 1)
        end
    end
end

function headbutt(cid, itemEx, toPosition)
    local pokemon = getPlayerPokemon(cid)
    if (getCreatureCondition(pokemon, CONDITION_EXHAUST, 5)) then
        doPlayerSendCancel(cid, "Your Pokemon is exhaust.")
        return
    end

    local pos = getCreaturePosition(pokemon)
    local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
            getPositionAdjacent(pokemon, toPosition, true))

    if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
            getPathToEx(pokemon, targetPos)) then
        doCreatureSay(cid, getCreatureNickname(pokemon) .. ", headbutt it!", TALKTYPE_MONSTER)
        doCreatureWalkToPosition(pokemon, targetPos)
        checkHeadbutt(pokemon, itemEx, toPosition, 20)
        doAddCondition(pokemon, HEADBUTT_EXHAUST_CONDITION)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end
]]
function blink(cid, toPosition)
    local pokemon = getPlayerPokemon(cid)
    local pokemonPosition = getCreaturePosition(pokemon)

    doCreatureSay(cid, string.format(__L(cid, "%s, blink!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
    doTeleportThing(pokemon, toPosition, false)
    doSendMagicEffect(pokemonPosition, EFFECT_TELEPORT_TWO)
    doSendMagicEffect(toPosition, EFFECT_TELEPORT_TWO)
    doCreatureSetStorage(cid, playersStorages.blink, os.time())
    doPlayerSendPokemonStatusAdd(cid, 17393, (doMasteryAdvantageCheck(cid, MASTERY_ADVANTAGES.BLINK_COOLDOWN) and 7 or 10))
end
-- TRANSFORM
local TRANSFORM_EXHAUST_CONDITION = createConditionObject(CONDITION_EXHAUST, 20 * 60 * 1000 + 1, false, CONDITION_SUBID.EXHAUST.ABILITYTRANSFORM)
--[[local function deTransform(cid, outfit, baseSpeed)
    if(isCreature(cid)) then
        local master = getCreatureMaster(cid)

        doCreatureChangeOutfit(cid, outfit)
        setCreatureBaseSpeed(cid, baseSpeed)
        doSendMagicEffect(getCreaturePosition(cid), EFFECT_DITTO_TRANSFORM)
        doCreatureSetStorage(cid, pokemonsStorages.transform, EMPTY_STORAGE)
        doPlayerUpdatePokemonIcons(master, getCreatureName(cid))
        setBallCurrentTransform(getPlayerBall(master).uid, nil)
    end
end]]

function doAbilitieTransform(cid, pokemon, target, targetName, afterDismount)
    if (getCreatureCondition(pokemon, CONDITION_EXHAUST, 6)) then
        doPlayerSendCancel(cid, "Your Pokemon is exhaust.")

    elseif (target and getMonsterSpecialAbility(target) == POKEMON_SPECIAL_ABILITY_IDS.SUMMI) then
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)

    else
        if (not targetName) then
            targetName = getCreatureName(target)
        end

        if (not afterDismount) then
            if (getPokemonBlockTransform(targetName)) then
                doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
                return
            end

            if (target and getMonsterLevel(pokemon) < getMonsterLevel(target)) then
                doPlayerSendCancel(cid, "Your Pokemon cannot transform into a higher level Pokemon.")
                return
            end

            if (getPokemonEvolveLevel(targetName) > getMonsterLevel(pokemon)) then
                doPlayerSendCancel(cid, string.format(__L(cid, "Your Pokemon need at least level %s to transform into that Pokemon."), getPokemonEvolveLevel(targetName)))
                return
            end

            local reqEnergy
            if (isShinyName(targetName)) then
                reqEnergy = math.ceil(getPokemonMaxEnergy(pokemon) * 0.4)
            else
                reqEnergy = math.ceil(getPokemonMaxEnergy(pokemon) * 0.3)
            end

            if (getPokemonEnergy(pokemon) < reqEnergy) then
                doPlayerSendCancel(cid, string.format(__L(cid, "Your Pokemon need at least %s energy to transform into this Pokemon."), reqEnergy))
                return
            end

            doPokemonAddEnergy(pokemon, -reqEnergy)
        end

        local ball = getPlayerBall(cid)

        doPlayerUpdatePokemonIcons(cid, targetName, true)
        doCreatureSetStorage(pokemon, pokemonsStorages.transform, targetName)
        doCreatureChangeOutfit(pokemon, getMonsterInfo(targetName).outfit)
        setCreatureBaseSpeed(pokemon, getMonsterInfo(targetName).baseSpeed)

        if (not afterDismount) then
            doSendMagicEffect(getCreaturePosition(pokemon), EFFECT_DITTO_TRANSFORM)
            doCreatureSay(cid, string.format(__L(cid, "%s, transform!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
            doAddCondition(pokemon, TRANSFORM_EXHAUST_CONDITION)
            doBallSaveTransformMemory(ball.uid, targetName)
            setBallCurrentTransform(ball.uid, targetName)
        end
    end
end

local function checkLevitate(cid, pokemon, playerPosition, ticks)
    if (isCreature(cid) and isCreature(pokemon)) then
        local toPosition = getCreaturePosition(cid)
        if (getSamePosition(toPosition, playerPosition)) then -- If the player moves, we cannot secure that this is a mountable position
            if (getDistanceBetween(getCreaturePosition(pokemon), toPosition) < 2) then
                doBallSaveStats(pokemon, getPlayerBall(cid).uid)
                doRemoveCreature(pokemon)
                setLevitatingStatus(cid, true)
                setPlayerVulnerable(cid, true)
                doPlayerUpdateOutfit(cid)
                setCreatureMaxMana(cid, 0)
                doPlayerAddMana(cid, -getCreatureMana(cid), false)

            elseif (ticks > 1) then
                doAddCondition(pokemon, POKEMON_FAST_MOUNT_CONDITION) -- Speed up Pokemon reaching player
                addEvent(checkLevitate, 500, cid, pokemon, playerPosition, ticks - 1)
            end
        end
    end
end

function levitate(cid)
    local toPosition = getCreaturePosition(cid)
    local pokemon = getPlayerPokemon(cid)
    local targetPos = getPositionAdjacent(pokemon, toPosition, true)
    local pos = getCreaturePosition(pokemon)

    if ((not targetPos and getDistanceBetween(pos, toPosition) <= 1) or
            (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
                    getPathToEx(pokemon, targetPos))) then
        doCreatureSay(cid, string.format(__L(cid, "%s, let's levitate!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        if (targetPos) then
            doCreatureWalkToPosition(pokemon, targetPos)
        end
        checkLevitate(cid, pokemon, toPosition, 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end

function deLevitate(cid)
    if (doPokemonCall(cid, getPlayerBall(cid))) then
        doPlayerRemoveAbilitySpeedCondition(cid)
    end
end
 

Se puderem da uma força, agradeço.

Abraço !

Edited by thloko
Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 1
  • Solution
5 horas atrás, Nysman disse:

Seu system é por lib?

ele ta usando psoul..

 

pro rock smash, vai em data/lib/ps/events/actions e abre o abilities:

 

  if (getPokemonAbilityAvailable(nil, POKEMON_ABILITIES.ROCK_SMASH, pokemonName)) then

e troca por:

                if (getPokemonAbilityAvailable(nil, POKEMON_ABILITIES.ROCK_SMASH, pokemonName)) and (getCreatureStorage(cid, 9764) == QUEST_STATUS.FINISHED) then

agra vai no seu npc brock, e no começo tem algo como 

local ROCK_SMASH = 9764
local function giveTm(cid)
    doCreatureSetStorage(cid, TM_STORAGE, QUEST_STATUS.FINISHED)
    doPlayerSafeAddItem(cid, 17369, 1, true, true, true) -- TM 33 Selfdestruct
end

ai vc coloca assim:

local TM_STORAGE = 8401
local ROCK_SMASH = 9764
local function giveTm(cid)
    doCreatureSetStorage(cid, TM_STORAGE, QUEST_STATUS.FINISHED)
    doCreatureSetStorage(cid, ROCK_SMASH, QUEST_STATUS.FINISHED)
    doPlayerSafeAddItem(cid, 18929, 1, true, false, true) -- TM 65 Fire Punch
end

.

é só vc fazer a msm logica nas outras habilidades/npcs, que da certo ^^

Edited by Deadpool
Link to post
Share on other sites
  • 0

Basta adicionar essa função nos nos arquivos que você queira:

local flag = 0
 for i = 12252, 12259 do --- Id das insígnias
        if getPlayerItemCount(cid, i) >= 1 then
           flag = flag + 1
    end

função que check se possui as insígnias

if flag == 8 then

Essa é a função da msg que vai aparecer ao tentar utilizar:

 

doPlayerSendCancel(cid, "Você precisa de todas as insígnias para passar por aqui.")

Seu script tá em branco!

Edited by Nysman
Link to post
Share on other sites
  • 0

 

Em 27/10/2020 em 22:38, Nysman disse:

Seu script tá em branco!

Obrigado por avisar, adicionei lá.

 

Então, vou dar um exemplo mais completo:

 

Gostaria de liberar o Rock Smash após derrotar o Brock. 

A parte que tenho que incluir o código seria essa?

Spoiler

local function checkRockSmash(cid, itemEx, toPosition, ticks)
    if (isCreature(cid)) then
        if (getDistanceBetween(getCreaturePosition(cid), toPosition) < 2) then
            local a = getTileItemById(toPosition, itemEx.itemid).uid
            local createDebris = true

            while (a ~= nil and a > 0) do
                if (itemEx.itemid == 18742) then -- Ice Pillar
                    doCreateItem(18741, 1, toPosition) -- Ice Block
                    createDebris = false

                    addEvent(function(pos) doCreateItem(18742, 1, pos) end, 60000, toPosition) -- Re-create Ice Pillar

                elseif (itemEx.itemid == 23563) then -- Closed door Kanto Main 10
                    local positions = {
                        {x = 5026, y = 489, z = 7},
                        {x = 5026, y = 490, z = 7}
                    }

                    for k, v in pairs(positions) do
                        if (getSamePosition(toPosition, v)) then
                            doRemoveItem(getTileItemById({x = 5026, y = 491, z = 7}, 20230).uid)
                            doCreateItem(20133, 1, {x = 5026, y = 491, z = 7}) -- Open Door
                            createDebris = false
                            addEvent(function()
                                doRemoveItem(getTileItemById({x = 5026, y = 491, z = 7}, 20133).uid)
                                doCreateItem(20230, 1, {x = 5026, y = 491, z = 7}) -- Open Door
                            end, 60 * 1000)
                        end
                    end
                    
                    break
                end

                doRemoveItem(a)
                a = getTileItemById(toPosition, itemEx.itemid).uid
            end

            local cidPos = getCreaturePosition(cid)

            doCreatureSetLookDirection(cid, getDirectionTo(cidPos, toPosition))
            doSendDistanceShoot(cidPos, toPosition, PROJECTILE_GRAVEL)
            doSendMagicEffect(toPosition, EFFECT_EARTH_EXPLOSION)

            if (createDebris) then
                doDecayItem(doCreateItem(debris, 1, toPosition))
            end

            PokemonAbility.afterRockSmash(getCreatureMaster(cid), cid, toPosition)

        elseif (ticks > 1) then
            addEvent(checkRockSmash, 500, cid, itemEx, toPosition, ticks - 1)
        end
    end
end

function rockSmash(cid, itemEx, toPosition)
    local pokemon = getPlayerPokemon(cid)
    local pos = getCreaturePosition(pokemon)
    local targetPos = (getDistanceBetween(pos, toPosition) <= 1 and toPosition or
            getPositionAdjacent(pokemon, toPosition, true))

    if (targetPos and isSightClear(pos, targetPos, true) and getDistanceBetween(targetPos, toPosition) <= 1 and
            getPathToEx(pokemon, targetPos)) then
        doCreatureSay(cid, string.format(__L(cid, "%s, smash it!"), getCreatureNickname(pokemon)), TALKTYPE_MONSTER)
        doCreatureWalkToPosition(pokemon, targetPos)
        checkRockSmash(pokemon, itemEx, toPosition, 20)
    else
        doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
    end
end

 

Abaixo está o script do Brock:

Spoiler

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler, CONVERSATION_DEFAULT)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

local TM_STORAGE = 8398
local function giveTm(cid)
    doCreatureSetStorage(cid, TM_STORAGE, QUEST_STATUS.FINISHED)
    doPlayerSafeAddItem(cid, 17369, 1, true, true, true) -- TM 33 Selfdestruct
end

local npcBattle = NpcBattle:new(getNpcName(), 9101, 9508, npcHandler)
npcBattle:setPokemons({"Geodude", "Geodude", "Onix"})
npcBattle:setRewardBaseExp(5000)
npcBattle:setRewardBadge(BADGES.BOULDER)
npcBattle:setRewardRespect()
npcBattle:setPayRespect(5)
npcBattle:setOneWin(true)
npcBattle:setDifficulty(20)
npcBattle:setRequiredMessage("You must first defeat the GYM trainers before battle against me.")
npcBattle:setRequired(function(cid)
                        return getPlayerDefeatedNPC(cid, "Lonnie Boedeker") and
                                getPlayerDefeatedNPC(cid, "Erik Shakespeare") and
                                getPlayerDefeatedNPC(cid, "Noemi Retherford") and
                                getPlayerDefeatedNPC(cid, "Marylou Whitbeck")
                        end)
npcBattle:setOnWin(function(cid)
    doPlayerAchievementCheck(cid, ACHIEVEMENT_IDS.BOULDER_BADGE)
    giveTm(cid)
end)
npcBattle:setPokemonDefeatExperienced(true)

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink()    npcHandler:onThink() end

function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end

    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

    if (msgcontains(msg, 'tm')) then
        if (not getPlayerDefeatedNPC(cid, getNpcName())) then
            selfSay("You must defeat me before receive your reward.", cid)

        elseif (getCreatureStorage(cid, TM_STORAGE) == QUEST_STATUS.FINISHED) then
            selfSay("You already got this reward.", cid)

        else
            giveTm(cid)
            selfSay("Oh, here is!", cid)
        end
        
    elseif (getPlayerDefeatedNPC(cid, getNpcName())) then
        npcHandler.talkState[talkUser] = doQuestTalk(cid, getNpcName(), msg, npcHandler.talkState[talkUser])

    elseif (msgcontains(msg, 'battle') or msgcontains(msg, 'fight') or msgcontains(msg, 'duel')) then
        talkState[talkUser] =  npcBattle:doTalkStart(getNpcId(), cid)

    elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) then
        talkState[talkUser] =  npcBattle:doTalkEnd(getNpcId(), cid, talkState[talkUser])

    else
        selfSay("Ok..", cid)
    end
    return true
end

npcHandler:setCallback(CALLBACK_GREET, function(cid)
  if (getSamePosition(getNpcPos(), {x = 5521, y = 234, z = 6})) then
    return false
  end

    if (not npcHandler:isInRange(cid)) then
        return false
    end

    return true
end)

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 

 

 

22 horas atrás, brazvct disse:

É melhor colocar por storage e configurar a recompensa do lider como storage em vez de item

Sou leigo nessa parte, se puder e quiser é claro, dar uma explicação mais detalhada será muito bem vinda.

Qualquer informação é de grande ajuda.

Edited by thloko
Link to post
Share on other sites
  • 0
1 hora atrás, Deadpool disse:

ele ta usando psoul..

 

pro rock smash, vai em data/lib/ps/events/actions e abre o abilities:

 


  if (getPokemonAbilityAvailable(nil, POKEMON_ABILITIES.ROCK_SMASH, pokemonName)) then

e troca por:


                if (getPokemonAbilityAvailable(nil, POKEMON_ABILITIES.ROCK_SMASH, pokemonName)) and (getCreatureStorage(cid, 9764) == QUEST_STATUS.FINISHED) then

agra vai no seu npc brock, e no começo tem algo como 


local ROCK_SMASH = 9764
local function giveTm(cid)
    doCreatureSetStorage(cid, TM_STORAGE, QUEST_STATUS.FINISHED)
    doPlayerSafeAddItem(cid, 17369, 1, true, true, true) -- TM 33 Selfdestruct
end

ai vc coloca assim:


local TM_STORAGE = 8401
local ROCK_SMASH = 9764
local function giveTm(cid)
    doCreatureSetStorage(cid, TM_STORAGE, QUEST_STATUS.FINISHED)
    doCreatureSetStorage(cid, ROCK_SMASH, QUEST_STATUS.FINISHED)
    doPlayerSafeAddItem(cid, 18929, 1, true, false, true) -- TM 65 Fire Punch
end

.

é só vc fazer a msm logica nas outras habilidades/npcs, que da certo ^^

Muito obrigado mano, deu certo !

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.


    Administrador |  Diretor |  Coordenador |  Moderador |  Suporter |  Estagiário |  Herói
  • Similar Content

    • By dso15
      Estava tentando compilar o client psoul e aparentemente o que me limita são esses 2 arquivos que impedem o jogo de abrir
       
      crypt.cpp
       
      crypt.h
       
      eles estão dentro da pasta framework
       
      aparentemente ele tem duas chaves criptografadas porem não tenho a minima ideia de como resolver
    • By dso15
      OLA A TODOS FAREI UM TUTORIAL COMPLETO EM RELAÇÃO A BASE PSOUL, POIS TEM MUITA GENTE PERGUNTANDO COMO EU FIZ O SITE FUNCIONAR, ESSA É A PARE SIMPLES MAS VAMOS LA.
      PRIMEIRO VC FAZ O DOWNLOAD DA BASE QUE SE ENCONTRA AQUI.
       
      PokeAimar (Level System) 8.54 2020 (Com Sources) - Alternative Tibia Servers - xTibia - Sua comunidade de Otserv e Tibia
       
      VOU FAZER TUDO RELATIVO AO PSOUL, NO CASO SITE E ETC.
       
      O SITE DO PSOUL ESTÁ EM OUTRO SITE NAO SEI SE POSSO POSTAR O LINK AQUI 
       
      PRA FAZER O SITE FUNCIONAR VC PRECISA USAR O PHP 5.6 EU PARTICULARMENTE USO XAMPP
      QUE SE ENCONTRA AQUI
       
       XAMPP
      SCAN: VirusTotal
       
       
      BLZ, FEITO ISSO VAMOS CONFIGURAR O SERVER 
      VÁ NA PASTA DO SERVER ABRA O CONFIG.LUA
       
      ACHE
      sqlDatabase = "genesis"
       
      MUDER PARA 
      sqlDatabase = "server"
       
      ACHE encryptionType = "sha256"
       
      MUNDE PARA encryptionType = "sha1"
      AGORA VÁ EM C:\xampp\htdocs E COLOQUE O SITE LA
       
      DEPOIS VÁ EM C:\xampp\htdocs\app\Config\database.php
       
      ACHE 'database' => 'genesis', //'data',
       
      MUDE PARA 'database' => 'server', //'data',
       
      DEPOIS VÁ EM C:\xampp\htdocs\app\Config\email.php
      ACHE 
         

      MUDE PARA
       
      AGORA VÁ EM C:\xampp\htdocs\app\Config\core.php
       
      ACHE Configure::write('Security.type', 'sha256');

      MUNDE PARA Configure::write('Security.type', 'sha1');
       
      FEITO ISSO ABRA O PAINEL DE CONTROLE DO XAMPP E LIGUE AS DUAS PRIMEIRAS OPÇOES
       


      APOS ISSO CLIQUE EM admin DA PARTE DO mysql
       

       
      ELE VAI TE LEVAR PRA CÁ
       


      BAIXEM ESSA DATABASE --- BD_Zot.zip
      SCAN VirusTotal
       

      VÁ EM NOVO E CRIE UM BANCO DE DADOS COM O NOME server E USE A OPÇÃO colação ELA É A PRIMEIRA

       
      AGORA VÁ EM IMPORTAR E SELECIONE A DATABASE QUE VC BAIXOU 
       
      APOS IMPORTAR
       
      VÁ NO PAINEL DE CONTROLE DO XAMPP E LIGUE O apache APOS ISSO CLIQUE EM admin DA PARTE DO apache
       
      ISSO VAI TE LEVAR PARA O SITE
       
      AGORA CRIE SUA CONTA LIGUE O SERVIDOR E JOGUE 
       
      QUANDO VC LIGAR O SERVIDOR ELE VAI CRIAR ALGUMAS DATABASE ALTOMATICAMENTE ISSO É NORMAL
      NA PROXIMA VEZ QUE LIGAR NAO VAI CRIAR MAIS
       
      PRA VC QUE QUER APENAS JOGAR O TUTORIAL FINALIZA AQUI, AGORA PRA ADMS CONTINUA
      -----------------------------------------------------------------------------------------------------------------------------
      COMPILAR SOURCE
       
      LEMBRANDO QUE AS SOURCES TEM QUE SER A DO POKEAIMAR POIS ELE É BASE PSOUL
       
      PARA COMPILAR A SOURCE VC PRECISA BAIXAR O DEV

      QUE SE ENCONTRA AQUI BAIXE DE ACORDO COM A VERSÃO DO SEU WINDOWS 32 OU 64 BITS

      32 BITS 
      SCAN VirusTotal
      64 BITS
      SCAN VirusTotal
       
      FEITO ISSO BAIXE O OPENSSL
      QUE SE ENCOTRA AQUI
      OPEN SSL
      SCAN: VirusTotal
       
      AGORA ABRA SUA SOURCE NA PASTA DA SUA SOURCE
       
      EM Source Server\dev-cpp\obj APAGUE TUDO DENTRO DA OBJ
      E EM Source Server\dev-cpp APAGUE O .EXE QUE ESTÁ LÁ

      APOS FEITO ISSO ABRA O DEV E VÁ EM tools --> package manager
      E INSTALE O OPENSSL QUE VC BAIXOU
       
       
      AGORA ABRA SUA SOURCE E VA EM otserv.cpp
      PROCURE POR
      else if(encryptionType == "sha256")
          {
              g_config.setNumber(ConfigManager::ENCRYPTION, ENCRYPTION_SHA256);
              std::cout << "> Using SHA256 encryption" << std::endl;
          }
          
      DEPOIS APAGUE E SALVE O ARQUIVO
      AGORA E SO COMPILAR E SER FELIZ
       
       
      -----------------------------------------------------------------------------------------------
      SOBRE COMPILAR O OTC 
      ESTOU SEGUINDO ESSE TUTORIAL
       
       
      O CLIENT COMPILA POREM QUANDO VOU ABRIR DA ESSE ERRO
       


      ESTOU TENTANDO ACHAR UMA SOULUÇÃO
       
      CASO ALGUEM PRECISE DE AJUDA COMENTA AI OU ME CHAMA NO WHATSZAPP NÃO TENHO MUITO CONHECIMENTO MAS JA SEI ALGO: (65) 998157796
      -----------------------------------------------------------------------------------------------
      BASICAMENTE A DATA PACK QUE EU USO E A CORIGIDA PELO JAIRKEVICK ESSA *ESTÁ NO TOPO DO TOPICO*:
      O CLIENT QUE USO É DO AIMAR ESSE *NO DOWLOAD NORMAL*:
      O SITE QUE USO ESTÁ POSTADO EM OUTRO SITE SE ME DERREM PERMISSÃO POSTO O LINK
      A SOURCE QUE USO É A DO POKEAIMAR ESSA *NO DOWLOAD NORMAL*: 
       
      -----------------------------------------------------------------------------------------------
      SE ALGUEM CONSEGUIR COMPILAR O OTCLIENT COMENTA AI!
      -----------------------------------------------------------------------------------------------
      -----------------------------------------------------------------------------------------------
      NÃO QUERO NENHUM CREDITO POR ISSO APENAS QUERO AJUDAR A COMUNIDADE QUE ATÉ O MOMENTO SE MOSTROU BEM INDIVIDUALISTA EM RELAÇÃO A ESTÁ BASE
      -----------------------------------------------------------------------------------------------

       
       
       
       
       
       
       
       
       
       
       
    • By Slytherin
      Bom dia, Boa tarde e boa noite. Tipo, eu baixei a base Psoul do @Jair Kevick. e ela esta me complicando. tipo ela pede para usa o PHP 5.6.40 e dai tudo bem, quando coloca abre o http://localhost/ e o http://localhost/phpmyadmin/ , dai quando inicia o servidor ele instala umas tabelas e quando fui olhar o http://localhost/phpmyadmin/ da esse erro https://ibb.co/tbtybyK <('-'<). Ou seja ele esta pedindo para que eu mude a versão do PHP para 7.1.3, e dai quando eu mudo ele abre o http://localhost/phpmyadmin/ porem o http://localhost/ para de funciona https://ibb.co/6sRknPT. 
       
       
    • By gristony
      Boa noite pessoal, quero convidá-los para conhecer um pouco sobre o nosso projeto “Pokemon Online SVKE”, para quem não lembra ou não chegou a conhecer, o poke svke foi o primeiro servidor de poketibia e fez muito sucesso em 2010, ele foi fechado e vendido alguns meses depois para a atual PokexGames, estamos falando de 10 anos de updates constantes no game, se distanciar cada vez mais do seu antecessor svke, para quem quer relembrar os velhos tempos, sentir aquela adrenalina e nostalgia que com o passar dos anos foi perdida ou quer conhecer como era o primeiro poketibia raiz que existiu, então fiquem ligados que o nosso objetivo é trazer as origens mais profundas do svke, já estamos à algum tempo trabalhando para deixar tudo o mais semelhante possível, para que cada momento em game, seja nostálgico para o jogador, se você ficou interessado por favor dê uma passada no nosso site, e nossas redes sociais no Discord e Facebook. Venham trazer de volta esse passado glorioso e se divertir de verdade.
      OBS: Open Beta daqui a pouquinho fiquem de olho no discord iremos colocar o client lá e assim que sair irei editar aqui tbm.

      Website: http://www.pokesvke.com
      Discord: https://discord.gg/8bsVGzb8jZ
      Facebook: https://www.facebook.com/PokemonOnlineSVKE