• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

scripts update

stonger

New Member
Joined
Oct 27, 2009
Messages
32
Reaction score
0
hi, can some1 update these scripts?
im using TFS 0.3.5

it is a pet system. The scripts are for an older version.

i give rep =D.

well, here are the scripts:

PHP:
dofile("./petConfig.lua")
                 


function doPlayerAddSummon(cid, name, pos)
    local MyCreature = doSummonCreature(name, pos)    
    doConvinceCreature(cid, MyCreature)
    return MyCreature
end


local myPet = ""
local myPetUid = 0

function onSay(cid, words, param)
    
    if isExhausted(cid) == 1 then
        return 0
    end
    if getPlayerStorageValue(cid, storages.petMag) == -1 then
        setPlayerStorageValue(cid, storages.petMag, 0)
    end
    if isCreature(getPlayerStorageValue(cid, storages.petUid)) == 0 then
        if getTilePzInfo(getCreaturePosition(cid)) == 0 then
            if getPlayerStorageValue(cid, storages.petIsOnline) == 1 or getPlayerStorageValue(cid, storages.petIsOnline) == -1 then
                for i = 1, #pets do
                    if isInArray(pets[i].vocations, getPlayerVocation(cid)) == 1 then
                        for k = 1, #pets[i].pets do                            
                            if pets[i].pets[k].level <= getPlayerLevel(cid) then
                                myPet = pets[i].pets[k].name
                                break
                            end
                        end
                    break
                    end
                end
                myPetUid = doPlayerAddSummon(cid, myPet, getCreaturePosition(cid))
                if myPetUid ~= -1 then
                    setPlayerStorageValue(cid, storages.petUid, myPetUid)
                    if getPlayerStorageValue(cid, storages.petDamage) ~= 0 and getPlayerStorageValue(cid, storages.petDamage) ~= -1  then
                        if getPlayerStorageValue(cid, storages.petDamage) < getCreatureMaxHealth(getPlayerStorageValue(cid, storages.petUid)) then
                            doCreatureAddHealth(getPlayerStorageValue(cid, storages.petUid), getPlayerStorageValue(cid, storages.petDamage)*-1)
                        end
                    end
                    doChangeSpeed(myPetUid, getCreatureBaseSpeed(cid) - getCreatureBaseSpeed(myPetUid))
                    doCreatureSay(myPetUid, 'Hello!', TALKTYPE_ORANGE_1)
                    addMana({cid = cid})
                    setPlayerStorageValue(cid, storages.petIsOnline, 2)
                else
                    doPlayerSendCancel(cid, 'Not enought room.')
                end
            else            
                doPlayerSendCancel(cid, 'Your pet died! You have to revive it.')
            end
        else
            doPlayerSendCancel(cid, 'You cannot summon your pet in PZ.')
        end        
    else
    local daPet = getPlayerStorageValue(cid, storages.petUid)
        setPlayerStorageValue(cid, storages.petDamage, getCreatureMaxHealth(daPet) - getCreatureHealth(daPet))
        doCreatureSay(daPet, 'Byebye !', TALKTYPE_ORANGE_1)
        setPlayerStorageValue(cid, storages.petIsOnline, 1)
        doSendMagicEffect(getCreaturePosition(daPet), CONST_ME_POFF)
        doRemoveCreature(daPet)
    end
    return setExhausted(cid)
end

PHP:
dofile("./petConfig.lua")         
function onSay(cid, words, param)

    if isExhausted(cid) == 1 then
        return 0
    end
    
    local lookDirs = {[0] = {x = 0, y = -1},
                      [1] = {x = 1, y = 0},
                      [2] = {x = 0, y = 1},
                      [3] = {x = -1, y = 0}
                     }

    local myAttack = 0 
    local CRONOMETRO = 0
    local CRONOMETRO2 = 0
    local TIEMPO = 0

function formulaAttack(magicLevel, level, maxb, maxa, minb, mina)
    return {minD = (level * 2 + magicLevel * 3) * (1 + mina) + minb,
            maxD = (level * 2 + magicLevel * 3) * (1 + maxb) + maxa
           }
end
    function getPetMlvl(manaSpent)
        local i = 0
        while manaSpent >= (1600 * (1.2^i)) do
            i = i + 1
        end
        return i
    end

    local daPet = getPlayerStorageValue(cid, storages.petUid)
    if isCreature(daPet) == 1 then 
        if param ~= nil then
    
            param = string.lower(param)
            local petPos = getCreaturePosition(daPet)
            local lookDir = getPlayerLookDir(cid) -- getPlayerLookDir(daPet plz ! ! !)
            local damage = {}
            CRONOMETRO = getPlayerStorageValue(cid, storages.petExha)
            CRONOMETRO2 = os.clock()
            TIEMPO = os.difftime(CRONOMETRO2, CRONOMETRO)

            for i = 1, #attacks do
                if param == attacks[i].param then
                    myAttack = i
                    break
                end
            end

            if myAttack ~= 0 then
                if attacks[myAttack].exhausted - TIEMPO > attacks[myAttack].exhausted or CRONOMETRO == -1 then
                    setPlayerStorageValue(cid, storages.petExha, CRONOMETRO2+1)
                end
                if getPlayerStorageValue(cid, storages.petMana) >= attacks[myAttack].manaSpent then
                    if attacks[myAttack].needLevel <= getPlayerLevel(cid) then
                        if attacks[myAttack].needMag <= getPlayerStorageValue(cid, storages.petMag) then
                            if attacks[myAttack].exhausted - TIEMPO <= 0 then
                                if attacks[myAttack].theFunction == false then
                                    damage = formulaAttack(getPlayerStorageValue(cid, storages.petMag), getPlayerLevel(cid),  attacks[myAttack].formula.maxb, attacks[myAttack].formula.maxa, attacks[myAttack].formula.minb, attacks[myAttack].formula.mina)
                                    doAreaCombatHealth(daPet*((attacks[myAttack].self - 1)*-1), attacks[myAttack].combatType, {x = petPos.x + attacks[myAttack].range*lookDirs[lookDir].x, y = petPos.y + attacks[myAttack].range*lookDirs[lookDir].y, z = petPos.z}, attacks[myAttack].area, math.floor(damage.minD*-1*attacks[myAttack].offensive), math.floor(damage.maxD*-1*attacks[myAttack].offensive), attacks[myAttack].combatAni)
                                else
                                    attacks[myAttack].theFunction({cid = cid, words = words, param = param})
                                end
                                doCreatureSay(daPet, '' .. param .. '!', TALKTYPE_ORANGE_1)
                                if getPlayerStorageValue(cid, storages.petIsHealing) == 0 or getPlayerStorageValue(cid, storages.petIsHealing) == -1 then
                                    addEvent(addMana, manaGainTicks, {cid = cid})
                                    setPlayerStorageValue(cid, storages.petIsHealing, 1)
                                end
                                setPlayerStorageValue(cid, storages.petExha, CRONOMETRO2+1)
                                setPlayerStorageValue(cid, storages.petManaSpent, getPlayerStorageValue(cid, storages.petManaSpent) + attacks[myAttack].manaSpent*magicLevelRate)
                                setPlayerStorageValue(cid, storages.petMana, getPlayerStorageValue(cid, storages.petMana) - attacks[myAttack].manaSpent)
                                if getPetMlvl(getPlayerStorageValue(cid, storages.petManaSpent)) > getPlayerStorageValue(cid, storages.petMag) then
                                    setPlayerStorageValue(cid,  storages.petMag, getPetMlvl(getPlayerStorageValue(cid, storages.petManaSpent)))
                                    doCreatureSay(daPet, 'You advanced to magic level ' .. getPlayerStorageValue(cid, storages.petMag) .. '!', TALKTYPE_ORANGE_1)
                                end
                            else
                                doCreatureSay(daPet, '' .. frases[math.random(1, #frases)] .. '!', TALKTYPE_ORANGE_1)
                            end
                        else
                            doCreatureSay(daPet, 'My magic level is too low!', TALKTYPE_ORANGE_1)
                        end
                    else
                        doCreatureSay(daPet, 'AAh Im out of mana!', TALKTYPE_ORANGE_1)
                    end
                else
                    doCreatureSay(daPet, 'Woups! I can\'t use that spell yet', TALKTYPE_ORANGE_1)
                end                
            else
                ----------------special attacks ?----------------------
            end
        else
            doPlayerSendCancel(cid, 'You must spesific a spell.')
        end
    else
        doPlayerSendCancel(cid, 'You haven\'t call your pet!.')
    end
    return setExhausted(cid)
end

PHP:
dofile("./petConfig.lua")
function onSay(cid, words, param)

    if isExhausted(cid) == 1 then
        return 0
    end
    local mySto = 0
    local daPet = getPlayerStorageValue(cid, storages.petUid)
    if isCreature(daPet) == 1 then
        local pos = getCreaturePosition(daPet)
        local a = 1
        while a < 10 do
            if getItemWeight(getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = a}).itemid, 1) ~= 0  then
                break
            end
            a = a + 1
        end
        local carryingItem = getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = a})
        if getItemWeight(carryingItem.itemid, 1) ~= 0 then
            if isContainer(carryingItem.uid) == 0 then
                for b = 1, #petItems do
                    if getPlayerStorageValue(cid, petItems[b]) == 0 or getPlayerStorageValue(cid, petItems[b]) == -1 then
                        mySto = b
                        break
                    end
                end
                local count = 1
                if mySto ~= 0 then
                    local theID = carryingItem.itemid
                    if isItemStackable(theID) == 1 then
                        count = carryingItem.type
                        doRemoveItem(carryingItem.uid, carryingItem.type)
                    else
                        doRemoveItem(carryingItem.uid, 1)
                    end
                    setPlayerStorageValue(cid, petItems[mySto], theID*1000+count)
                    if count == 1 then
                        doCreatureSay(daPet, 'Hmm, a ' .. getItemName(theID) .. ', I\'ll save it on my bag number ' .. mySto .. '!', TALKTYPE_ORANGE_1)
                    else
                        doCreatureSay(daPet, 'Hmm, ' .. count .. ' ' .. getItemName(theID) .. 's, I\'ll save them on my bag number ' .. mySto .. '!', TALKTYPE_ORANGE_1)
                    end
                else
                    doCreatureSay(daPet, 'I have no space!', TALKTYPE_ORANGE_1)
                end
            else
                doCreatureSay(daPet, 'I can\'t take containers!', TALKTYPE_ORANGE_1)
            end
        else
            doCreatureSay(daPet, 'I can\'t see any item!', TALKTYPE_ORANGE_1)
        end
    else
        doPlayerSendCancel(cid, 'You haven\'t call your pet!')
    end
    return setExhausted(cid)
end

PHP:
dofile("./petConfig.lua")
function onSay(cid, words, param)
    if isExhausted(cid) == 1 then
        return 0
    end
    local daPet = getPlayerStorageValue(cid, storages.petUid)
    if isCreature(daPet) == 1 then
        if param ~= "" then
            param = tonumber(param)
            if type(param) == "number" then
                if param <= maxItems then
                    if getPlayerStorageValue(cid, petItems[param]) ~= 0 and getPlayerStorageValue(cid, petItems[param]) ~= -1 then
                        local that = getPlayerStorageValue(cid, petItems[param])
                        local item = math.floor(that/1000)
                        local count = that-item*1000
                        doPlayerAddItem(cid, item, count)
                        if count == 1 then
                            doCreatureSay(daPet, 'Here is your ' .. getItemName(item) .. '', TALKTYPE_ORANGE_1)
                        else
                            doCreatureSay(daPet, 'Here are your ' .. count .. ' ' .. getItemName(item) .. 's', TALKTYPE_ORANGE_1)
                        end
                        setPlayerStorageValue(cid, petItems[param], 0)
                    end
                end
            end
        end
    end
return setExhausted(cid)
end

PHP:
dofile("./petConfig.lua")
function onSay(cid, words, param)
    if isExhausted(cid) == 1 then
        return 0
    end
    local request = 0
    local daPet = getPlayerStorageValue(cid, storages.petUid)
    if isCreature(daPet) == 1 then
        param = string.lower(param)
        if param == "magic level" then
            request = getPlayerStorageValue(cid, storages.petMag)
        elseif param == "mana" then        
            request = getPlayerStorageValue(cid, storages.petMana)
        elseif param == "health" then
            request = getCreatureHealth(daPet)
        end
        if request ~= 0 then
            doPlayerSendTextMessage(cid, 19, 'Pet ' .. param .. ': ' .. request .. '.')
        end
    else
        doPlayerSendCancel(cid, 'You haven\'t call your pet!')
    end
    return setExhausted(cid)
end

PHP:
dofile("./petConfig.lua")
function onSay(cid, words, param)
    if isExhausted(cid) == 1 then
        return 0
    end

    local daPet = getPlayerStorageValue(cid, storages.petUid)
    if isCreature(daPet) == 1 then
        if param ~= nil then
            if string.len(param) < lenght then        
                doCreatureSay(daPet, '' .. param .. '', TALKTYPE_ORANGE_1)
            else
                doPlayerSendCancel(cid, 'No more than ' .. lenght .. ' character. ')
            end
        else
            doPlayerSendCancel(cid, 'You must enter a text')
        end        
    else
        doPlayerSendCancel(cid, 'You haven\'t call your pet!')
    end    
    return setExhausted(cid)
end

PHP:
-- --
--( made by FedeVI ) --
--____________ -- 
frases = {Men, im still exhausted!, Ok, in one momment, afff, again!, meh, one second}
lenght = 39 -- maximun lenght the !petsay can have...
manaGainTicks = 3000 -- 
--how fast the pet gains mana
manaGainAmmount = 10 --
manaGainPerLevel = 20 -- mana that gains the pet for each level the player gain
magicLevelRate = 0.25 -- how faster the pet will gain mlvl compared to real tibia, 0.5 = 2 times faster, 0.25 = 4 times faster and soo...
base = 2000 --base storage. All storages will depend of this number
storages = {
petMag = base,
petUid = base+1,
petExha = base+2,
petDamage = base+3,
petManaSpent = base+4,
petIsOnline = base+5,
petMana = base+6,
petIsHealing = base+7,
petCap = base+8
}

petItems = {}
maxItems = 10 --Max items the pet can carry
for i = 1, maxItems do
petItems[i] = base+8+i
end
--Pets, dependiong on the level
pets = {{level = 100, name = demon},
{level = 60, name = Dragons},
{level = 50, name = Dwarf Geomancers},
{level = 40, name = Demon Skeleton},
{level = 30, name = Fire Devil},
{level = 20, name = Minotaur Archer},
{level = 10, name = Minotaur},
{level = 0, name = Rat}
}
--attacks of the pet. !petattack param
--It's pretty easy how to config, I think it doesn't need an extra explanation.
attacks = {{param = energy, offensive = 1, needLevel = 20, self = 0, needMag = 10, manaSpent = 60, exhausted = 1, range = 6, combatType = COMBAT_ENERGYDAMAGE, combatAni = CONST_ME_ENERGYAREA, area = 2, 
formula = {maxb = 0.4, maxa = 30, minb = 0.5, mina = 0},
},
{param = exori, offensive = 1, needLevel = 40, self = 0, needMag = 5, manaSpent = 145, exhausted = 1, range = 0, combatType = COMBAT_PHYSICALDAMAGE, combatAni = CONST_ME_HITAREA, area = 2, 
formula = {maxb = 0.6, maxa = 30, minb = 1.2, mina = 0},
},
{param = fireball, offensive = 1, needLevel = 50, self = 0, needMag = 15, manaSpent = 100, exhausted = 1, range = 3, combatType = COMBAT_FIREDAMAGE, combatAni = CONST_ME_FIREAREA, area = 6, 
formula = {maxb = 0.6, maxa = 30, minb = 1.2, mina = 0}
},
{param = mini energy, offensive = 1, needLevel = 0, self = 0, needMag = 0, manaSpent = 20, exhausted = 1, range = 1, combatType = COMBAT_ENERGYDAMAGE, combatAni = CONST_ME_ENERGYAREA, area = 1, 
formula = {maxb = 0.13, maxa = 0, minb = 0.262, mina = 0}
},
{param = health, offensive = -1, needLevel = 10, self = 1, needMag = 0, manaSpent = 100, exhausted = 2, range = 0, combatType = COMBAT_HEALING, combatAni = CONST_ME_MAGIC_BLUE, area = 1, 
formula = {maxb = 0.4, maxa = 20, minb = 0.7, mina = 0}
}
}
function addMana(a)
local cid = a.cid
local petManaMax = getPlayerLevel(cid)manaGainPerLevel
if getPlayerStorageValue(cid, storages.petMana)  petManaMax then
if petManaMax - getPlayerStorageValue(cid, storages.petMana)  10 then
setPlayerStorageValue(cid, storages.petMana, getPlayerStorageValue(cid, storages.petMana) + petManaMax - getPlayerStorageValue(cid, storages.petMana))
else
setPlayerStorageValue(cid, storages.petMana, getPlayerStorageValue(cid, storages.petMana) + 10)
end
addEvent(addMana, manaGainTicks, {cid = cid})
else
setPlayerStorageValue(cid, storages.petIsHealing, 0)
end
end


and thats it.
=D thanks a lot.

meybe some1 can tell me what good pet system is in the forum because i cant find any1 good.
 
Back
Top