Ir para conteúdo

Featured Replies

Postado

Eae galera do Tibiaking Hj Vou Postar um Script de um Amigo meu de PET System... que foi testado em Serve nas Versoes 9,43 e 8,60 heh' Num esta Perfeito mais é Uma Super Base xD Então vamos Lá

Crie um Arquivo em data/lib chamado animais de Estimação.lua e coloque Isso


--Circles

AREA_CIRCLE2X2 =

{

{0, 1, 1, 1, 0},

{1, 1, 1, 1, 1},

{1, 1, 3, 1, 1},

{1, 1, 1, 1, 1},

{0, 1, 1, 1, 0}

}


AREA_CIRCLE3X3 =

{

{0, 0, 1, 1, 1, 0, 0},

{0, 1, 1, 1, 1, 1, 0},

{1, 1, 1, 1, 1, 1, 1},

{1, 1, 1, 3, 1, 1, 1},

{1, 1, 1, 1, 1, 1, 1},

{0, 1, 1, 1, 1, 1, 0},

{0, 0, 1, 1, 1, 0, 0}

}


-- Crosses

AREA_CROSS1X1 =

{

{0, 1, 0},

{1, 3, 1},

{0, 1, 0}

}


AREA_CROSS5X5 =

{

{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},

{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},

{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},

{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}

}


AREA_CROSS6X6 =

{

{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},

{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},

{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},

{0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},

{0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}

}


--Squares

AREA_SQUARE1X1 =

{

{1, 1, 1},

{1, 3, 1},

{1, 1, 1}

}


-- Walls

AREA_WALLFIELD = {

{1, 1, 3, 1, 1}

}


AREADIAGONAL_WALLFIELD =

{

{0, 0, 0, 0, 1},

{0, 0, 0, 1, 1},

{0, 1, 3, 1, 0},

{1, 1, 0, 0, 0},

{1, 0, 0, 0, 0},

}


TYPE_NEAR = 1

TYPE_DISTANCE = 2


petExhaust = 3 --in seconds

petSayExhaust = 3 --in seconds


petGainTicks =

{

health = {func = doCreatureAddHealth, time = 3000, count = 1},

mana = {func = doCreatureAddMana, time = 3000, count = 2}

}


petGainHealth = 30

petGainMana = 30

petExpRate = 1.3


carryItems = 10


petItemsBase = 1250

petItems = {}

blockedItems = {6132, 2195}


for i = 1, carryItems do

table.insert(petItems, petItemsBase + i)

end


petBase = 61200

petStorages =

{

pet = petBase + 1,

level = petBase + 2,

exp = petBase + 3,

items = petBase + 4,

isPet = petBase + 5,

isDead = petBase + 6,

exhaust = petBase + 7,

sayExhaust = petBase + 8,

moveExhaust = petBase + 9,

health = petBase + 10,

mana = petBase + 11

}


reviveCost = 1000


pets =

{

[1] =

{

	 monster = "orc spearman",

	 vocations = {1, 2, 3, 4},

	 level = 30,

	 attacks =

	 {

		 [1] = {name = "", level = 30, petLevel = 30, mana = 50, type = TYPE_DISTANCE, range = 10, combat = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_NONE, distEffect = CONST_ANI_SPEAR, damageMin = 0.7, damageMax = 1.0}

	 }

},

[2] =

{

	 monster = "fire devil",

	 vocations = {1, 2},

	 level = 60,

	 attacks =

	 {

		 [1] = {name = "Fire Strike", level = 60, petLevel = 60, mana = 100, type = TYPE_DISTANCE, combat = COMBAT_FIREDAMAGE, effect = CONST_ME_FIREDAMAGE, distEffect = CONST_ANI_FIRE, damageMin = 1.5, damageMax = 2.0}

	 }

},

[3] =

{

	 monster = "minotaur guard",

	 vocations = {3, 4},

	 level = 60,

	 attacks =

	 {

		 [1] = {name = "Punch", level = 60, petLevel = 60, mana = 55, type = TYPE_NEAR, combat = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_BLOOD, distEffect = CONST_ANI_NONE, damageMin = 1.5, damageMax = 2.0}

	 }

},

[4] =

{

	 monster = "water elemental",

	 vocations = {2},

	 level = 95,

	 attacks =

	 {

		 [1] = {name = "Ice Bomb", level = 100, petLevel = 100, mana = 250, type = TYPE_DISTANCE, range = 3, combat = COMBAT_ICEDAMAGE, effect = CONST_ME_ICEAREA, distEffect = CONST_ANI_ICE, damageMin = 1.5, damageMax = 2.0, area = {{0, 0, 1, 0, 0}, {0, 1, 3, 1, 0}, {0, 0, 1, 0, 0}}},

		 [2] = {name = "Poison Strike", level = 95, petLevel = 95, mana = 80, type = TYPE_DISTANCE, range = 8, combat = COMBAT_EARTHDAMAGE, effect = CONST_ME_GREENRINGS, distEffect = CONST_ANI_POISON, damageMin = 1.2, damageMax = 1.8}

	 }

},

[5] =

{

	 monster = "fire elemental",

	 vocations = {1},

	 level = 95,

	 attacks =

	 {

		 [1] = {name = "Fire Bomb", level = 100, petLevel = 100, mana = 250, type = TYPE_DISTANCE, range = 3, combat = COMBAT_FIREDAMAGE, effect = CONST_ME_FIREDAMAGE, distEffect = CONST_ANI_FIRE, damageMin = 1.5, damageMax = 2.0, area = {{0, 0, 1, 0, 0}, {0, 1, 3, 1, 0}, {0, 0, 1, 0, 0}}},

		 [2] = {name = "Fire Strike", level = 95, petLevel = 95, mana = 80, type = TYPE_DISTANCE, range = 3, combat = COMBAT_FIREDAMAGE, effect = CONST_ME_FIREDAMAGE, distEffect = CONST_ANI_FIRE, damageMin = 1.2, damageMax = 1.8}

	 }

},

[6] =

{

	 monster = "orc warlord",

	 vocations = {4},

	 level = 95,

	 attacks =

	 {

		 [1] = {name = "Throw Knife", level = 95, petLevel = 95, mana = 80, type = TYPE_DISTANCE, combat = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_BLOOD, distEffect = CONST_ANI_THROWINGKNIFE, damageMin = 1.5, damageMax = 2.0}

	 }

},

[7] =

{

	 monster = "golem",

	 vocations = {3},

	 level = 95,

	 attacks =

	 {

		 [1] = {name = "Throw Stone", level = 95, petLevel = 95, mana = 80, type = TYPE_DISTANCE, combat = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_BLOOD, distEffect = CONST_ANI_LARGEROCK, damageMin = 1.5, damageMax = 2.0}

	 }

},

[8] =

{

	 monster = "wyrm",

	 vocations = {1, 2, 3, 4},

	 level = 135

},

[9] =

{

	 monster = "dragon lord",

	 vocations = {1, 2, 3, 4},

	 level = 200,

	 attacks =

	 {

		 [1] = {name = "Fire Bomb", level = 200, petLevel = 200, mana = 300, type = TYPE_DISTANCE, range = 3, combat = COMBAT_FIREDAMAGE, effect = CONST_ME_FIREAREA, distEffect = CONST_ANI_FIRE, damageMin = 1.5, damageMax = 2.0, area = AREA_CROSS1X1},

		 [2] = {name = "Fire Storm", level = 205, petLevel = 220, mana = 700, type = TYPE_NEAR, range = 8, combat = COMBAT_FIREDAMAGE, effect = CONST_ME_FIREAREA, distEffect = CONST_ANI_FIRE, damageMin = 1.8, damageMax = 2.5, area = AREA_CROSS5X5},

		 [3] = {name = "Fire Explosion", level = 203, petLevel = 210, mana = 450, type = TYPE_DISTANCE, range = 6, combat = COMBAT_FIREDAMAGE, effect = CONST_ME_EXPLOSIONHIT, distEffect = CONST_ANI_FIRE, damageMin = 1.5, damageMax = 2.1, area = AREA_CIRCLE2X2},

		 [4] = {name = "Scratch", level = 201, petLevel = 205, mana = 150, type = TYPE_NEAR, range = 1, combat = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_HITAREA, distEffect = CONST_ANI_FIRE, damageMin = 1.3, damageMax = 1.8},

		 [5] = {name = "Fire Strike", level = 203, petLevel = 210, mana = 100, type = TYPE_DISTANCE, range = 3, combat = COMBAT_FIREDAMAGE, effect = CONST_ME_EXPLOSIONAREA, distEffect = CONST_ANI_FIRE, damageMin = 1.8, damageMax = 1.9}

	 }

}

}


function gainStat(pid, stat)


if pid and pid > 0 and isMonster(pid) then

	 stat.func(pid, stat.count)

end

addEvent(gainStat, stat.time, pid, stat)

end


function getLevelByExp(exp)

return math.floor((math.sqrt(3) * math.sqrt(243*(exp+1)^2-48600*(exp+1)+3680000)+27 * (exp+1)-2700)^(1/3)/30^(2/3)-(5*10^(2/3))/(3^(1/3)*(math.sqrt(3)*math.sqrt(243*(exp+1)^2-48600*(exp+1)+3680000)+27*(exp+1)-2700)^(1/3))+2)

end


function getPetInfo(pet)

if isNumber(pet) then

	 return pets[pet] or false

else

	 for _, v in pairs(pets) do

		 if pet:lower() == v.monster then

		 return v

		 end

	 end

end

return false

end


function getPetByLevel(cid)

local level = getPlayerLevel(cid)

local pet

for i = 1, #pets do

	 v = pets[i]

	 if level >= v.level and isInArray(v.vocations, getPlayerVocation(cid)) then

		 pet = v

	 end

end

return (pet ~= nil and pet or false)

end


function getAttackFormula(pid, attack)

return {

		 min = ((getPetLevel(pid) * 2) * (1 + attack.damageMin) + getPetLevel(pid)) / 2.5,

		 max = ((getPetLevel(pid) * 3) * (1 + attack.damageMax) + getPetLevel(pid)) / 2.5

		 }

end


function doAttack(pid, target, param)


local pet = getPetInfo(getCreatureName(pid))

if pet then

	 if pet.attacks and pet.attacks[param] then

		 local attack = pet.attacks[param]

		 if target > 0 and attack.type and attack.type == TYPE_DISTANCE and getDistanceBetween(getCreaturePosition(pid), getCreaturePosition(target)) > (attack.range or 3) or attack.type == TYPE_NEAR and target > 0 and getDistanceBetween(getCreaturePosition(pid), getCreaturePosition(target)) > attack.range then

		 return doPlayerSendCancel(getCreatureMaster(pid), "Target is too far.") and doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF)

		 end

		 if target > 0 and not isSightClear(getCreaturePosition(pid), getCreaturePosition(target), true) then

		 return doPlayerSendCancel(getCreatureMaster(pid), "There is not enough room.") and doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF)

		 end

		 if target == 0 then

		 return doPlayerSendCancel(getCreatureMaster(pid), "Please select a target first.") and doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF)

		 end

		 if getPlayerLevel(getCreatureMaster(pid)) < attack.level then

		 return doPlayerSendCancel(getCreatureMaster(pid), "You need level " .. attack.level .. " or higher to use this attack.") and doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF)

		 end

		 if getPetLevel(pid) < attack.petLevel then

		 return doPlayerSendCancel(getCreatureMaster(pid), "Your pet needs level " .. attack.petLevel .. " or higher to use this attack.") and doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF)

		 end

		 if attack.mana and getCreatureMana(pid) < attack.mana then

		 return doPlayerSendCancel(getCreatureMaster(pid), "Your pet does not have enough mana.") and doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF)

		 end

		 if attack.area then

		 doCastAreaAttack(pid, target, attack.area, attack)

		 else

		 doTargetCombatHealth(pid, target, attack.combat, -getAttackFormula(pid, attack).min, -getAttackFormula(pid, attack).max, attack.effect)

		 end

		 doCreatureAddMana(pid, -attack.mana)

		 return doSendDistanceShoot(getCreaturePosition(pid), (attack.type == TYPE_DISTANCE and getCreaturePosition(target) or getCreaturePosition(pid)), attack.distEffect) and doCreatureSay(pid, attack.name, TALKTYPE_MONSTER)

	 else

		 return doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF)

	 end

else

	 return doSendMagicEffect(getCreaturePosition(pid), CONST_ME_POFF) and doPlayerSendCancel(getCreatureMaster(pid), "There is a tecnical problem, please contact a gamemaster.")

end

end


function callPet(cid)


for i = 1, #petStorages do

	 if getCreatureStorage(cid, petStorages[i]) < 0 then

		 doCreatureSetStorage(cid, petStorages[i], 0)

	 end

end


local pet = getPetByLevel(cid)

if not pet then

	 return doPlayerSendCancel(cid, "You do not have enough level to call a pet.")

end


local ret = doCreateMonster(pet.monster, getCreaturePosition(cid))


if getCreatureStorage(cid, petStorages.level) < 1 then

	 doCreatureSetStorage(cid, petStorages.level, pet.level)

end


if getCreatureStorage(cid, petStorages.exp) < 1 then

	 doCreatureSetStorage(cid, petStorages.exp, getExperienceForLevel(pet.level))

end


if getCreatureStorage(cid, petStorages.level) < pet.level then

	 doCreatureSetStorage(cid, petStorages.level, pet.level)

elseif getPlayerLevel(cid) * 3 < getCreatureStorage(cid, petStorages.level) then

	 doCreatureSetStorage(cid, petStorages.level, (getPetByLevel(cid).level or 0))

	 doCreatureSetStorage(cid, petStorages.exp, getExperienceForLevel((getPetByLevel(cid).level or 0)))

end


if getLevelByExp(getCreatureStorage(cid, petStorages.exp)) < getCreatureStorage(cid, petStorages.level) then

	 doCreatureSetStorage(cid, petStorages.exp, getExperienceForLevel(getCreatureStorage(cid, petStorages.level)))

end


if getCreatureStorage(cid, petStorages.health) < 1 then

	 doCreatureSetStorage(cid, petStorages.health, getCreatureStorage(cid, petStorages.level) * petGainHealth)

end


if getCreatureStorage(cid, petStorages.mana) < 1 then

	 doCreatureSetStorage(cid, petStorages.mana, getCreatureStorage(cid, petStorages.level) * petGainMana)

end


doCreatureSetStorage(ret, petStorages.level, getCreatureStorage(cid, petStorages.level))

doCreatureSetStorage(ret, petStorages.exp, getCreatureStorage(cid, petStorages.exp))


doConvinceCreature(cid, ret)

doCreatureSetStorage(ret, petStorages.isPet, 1)

doSendMagicEffect(getCreaturePosition(ret), CONST_ME_TELEPORT)

setCreatureMaxHealth(ret, getPetLevel(ret) * petGainHealth)

doCreatureAddHealth(ret, -getCreatureHealth(ret) + getCreatureStorage(cid, petStorages.health))

setCreatureMaxMana(ret, getPetLevel(ret) * petGainMana)

doCreatureAddMana(ret, -getCreatureMana(ret) + getCreatureStorage(cid, petStorages.mana))

for _, v in pairs(petGainTicks) do

	 gainStat(ret, v)

end

return doCreatureSay(cid, "Go pet!", TALKTYPE_SAY)

end


function doCastAreaAttack(pid, target, area, attack)

local center = {}

local areaxx = {}

center.y = math.floor(#area/2)+1

for y = 1, #area do

	 for x = 1, #area[y] do

		 local number = area[y][x]

		 if number > 0 then

		 center.x = math.floor(table.getn(area[y])/2)+1

		 if attack.type == TYPE_DISTANCE then

			 table.insert(areaxx, {x = getCreaturePosition(target).x + x - center.x, y = getCreaturePosition(target).y + y - center.y, z = getCreaturePosition(target).z})

		 else

			 table.insert(areaxx, {x = getCreaturePosition(pid).x + x - center.x, y = getCreaturePosition(pid).y + y - center.y, z = getCreaturePosition(pid).z})

		 end		

		 end

	 end

end

for i = 1, #areaxx do

	 doAreaCombatHealth(pid, attack.combat, areaxx[i], 0, -getAttackFormula(pid, attack).min, -getAttackFormula(pid, attack).max, attack.effect)

end

end


function isPet(pid)

return getCreatureStorage(pid, petStorages.isPet) > 0 and true or false

end


function doPetAddExperience(pid, exp)


doCreatureSetStorage(pid, petStorages.exp, getCreatureStorage(pid, petStorages.exp) + exp)

doCreatureSetStorage(getCreatureMaster(pid), petStorages.exp, getPetExperience(pid))

doSendAnimatedText(getCreaturePosition(pid), exp, getConfigValue("gainExperienceColor"))

return true

end


function getPetExperience(pid)

return getCreatureStorage(pid, petStorages.exp)

end


function getPetLevel(pid)

return getCreatureStorage(pid, petStorages.level)

end


function doPetSetLevel(pid, level)


doCreatureSetStorage(pid, petStorages.level, level)

doCreatureSetStorage(getCreatureMaster(pid), petStorages.level, level)

setCreatureMaxHealth(pid, getPetLevel(pid) * petGainHealth)

setCreatureMaxMana(pid, getPetLevel(pid) * petGainMana)

return true

end


function getPlayerPet(cid)

local pet

if #getCreatureSummons(cid) < 1 then

	 pet = false

end


for _, it in ipairs(getCreatureSummons(cid)) do

	 if isPet(it) then

		 pet = it

		 break

	 end

end

return pet

end


function getTopItem(p)

p.stackpos = 0

local v = getThingFromPos(p)

repeat

	 p.stackpos = p.stackpos + 1

	 v = getThingFromPos(p)

until v.itemid == 0

p.stackpos = p.stackpos - 1

return getThingFromPos(p)

end

agora em data/creaturescripts criamos 3 Arquivos um chamado petdeath.lua e coloque isso dentro dele:

function onDeath(cid, corpse, deathList)


if not isMonster(cid) or not isPet(cid) then return true end


doCreatureSetStorage(getCreatureMaster(cid), petStorages.isDead, 1)

doPlayerSendTextMessage(getCreatureMaster(cid), MESSAGE_STATUS_CONSOLE_BLUE, "Your pet is dead.")

return true

end

petstats.lua e coloque isso dentro dele:

function onStatsChange(cid, attacker, type, combat, value)


if getPlayerPet(cid) and getPlayerPet(cid) == attacker then

	 return false

end

return true

end

petkill.lua e coloque isso dentro dele:

function onKill(cid, target, lastHit)


if not isMonster(target) or getConfigValue("rateExperience") < 0.1 or getMonsterInfo(getCreatureName(target)) and getMonsterInfo(getCreatureName(target)).experience < 1 then return true end


local pet = getPlayerPet(cid)

if pet then

	 doPetAddExperience(pet, getMonsterInfo(getCreatureName(target)).experience * petExpRate)

	 if getLevelByExp(getPetExperience(pet)) > getPetLevel(pet) then

		 doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Your pet advanced from level " .. getPetLevel(pet) .. " to level " .. getLevelByExp(getPetExperience(pet)) .. ".")

		 doPetSetLevel(pet, getLevelByExp(getPetExperience(pet)))

	 end

end

return true

end

adicione em login.lua os Eventos

registerCreatureEvent(cid, "petKill")

registerCreatureEvent(cid, "petDeath")

registerCreatureEvent(cid, "petSta")

e em creaturescripts.xml

<event type="kill" name="petKill" event="script" value="petkill.lua"/>

<event type="death" name="petDeath" event="script" value="petdeath.lua"/>

<event type="statschange" name="petStats" event="script" value="petstats.lua"/>

vamo agora em data/talkactions/scripts/e crie o arquivo pet.lua

<talkaction words="!pet" event="script" value="pet.lua"/>

Agora umas Img do System:

!pet call // Chamar/retirar mascote.

!pet take // La mascota coge el objeto que esta debajo suyo.

!pet items // Muestra los objetos que tiene la mascota.

!pet attack:index // Atacas con la mascota. Ejemplo: !pet attack:2

!pet give:index // Coger un objeto de la mascota. Ex: !pet give:4

!pet say:text // Haces hablar a tu mascota. Ex: !pet say:Hello World

!pet move:direction //Mueves a la mascota. Ex: !pet move:northeast

!pet mana/health:amount // añade/remueve mana/vida a tu mascota (SOLO para gamemasters)

creditos falção and Me


local l =

{

["north"] = NORTH,

["east"] = EAST,

["south"] = SOUTH,

["west"] = WEST,

["southwest"] = SOUTHWEST,

["southeast"] = SOUTHEAST,

["northwest"] = NORTHWEST,

["northeast"] = NORTHEAST

}

--fixed by falcon--

function onSay(cid, words, param, channel)

if(param == '') then

	 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")

	 return true

end


if param:lower() == "call" then

	 if getCreatureStorage(cid, petStorages.isDead) > 0 then

		 return doPlayerSendCancel(cid, "You need to revive your pet first.")

	 end

	 if getTilePzInfo(getCreaturePosition(cid)) then

		 return doPlayerSendCancel(cid, "You cannot call your pet in protection zone.")

	 end

	 local pet = getPlayerPet(cid)

	 if not pet then

		 return callPet(cid)

	 else

		 doCreatureSetStorage(cid, petStorages.health, getCreatureHealth(pet))

		 doCreatureSetStorage(cid, petStorages.mana, getCreatureMana(pet))

		 doSendMagicEffect(getCreaturePosition(pet), CONST_ME_POFF)

		 doRemoveCreature(pet)

		 return doCreatureSay(cid, "It's enough!", TALKTYPE_SAY)

	 end

elseif param:lower() == "info" then

	 local pet = getPlayerPet(cid)

	 if pet then

		 local pet_ = getPetInfo(getCreatureName(pet))

		 local attacks = ""

		 if pet_.attacks and #pet_.attacks > 0 then

		 for i = 1, #pet_.attacks do

			 attacks = attacks .. "Attack ID: " .. i .. "\n" .. (pet_.attacks[i].name ~= "" and " Name: " .. pet_.attacks[i].name .. "\n" or "") .. " Level: " .. pet_.attacks[i].level .. "\n Pet level: " .. pet_.attacks[i].petLevel .. "\n Pet mana: " .. pet_.attacks[i].mana .. "\n"

		 end

		 end

		 return doShowTextDialog(cid, 1948, "Here is your pet info:\n" ..

		 "\nName: " .. getCreatureName(pet) ..

		 "\nHealth: " .. getCreatureHealth(pet) .. "-" .. getCreatureMaxHealth(pet) ..

		 "\nMana: " .. getCreatureMana(pet) .. "-" .. getCreatureMaxMana(pet) ..

		 "\nLevel: " .. getPetLevel(pet) ..

		 "\nExperience: " .. getPetExperience(pet) ..

		 "\n-----Attacks-----\n" .. (attacks ~= "" and attacks or "No attacks"))

	 else

		 return doPlayerSendCancel(cid, "Please call your pet first.")

	 end

elseif param:lower() == "take" then

	 local pet = getPlayerPet(cid)

	 if not pet then

		 return doPlayerSendCancel(cid, "Please call your pet first.")

	 end


	 local slot = 0

	 for i = 1, carryItems do

		 if getCreatureStorage(cid, petItems[i]) < 1 then

		 slot = i

		 break

		 end

	 end


	 if slot == 0 then

		 return doPlayerSendCancel(cid, "You only can carry " .. carryItems .. " items.")

	 end


	 local item = getTopItem(getCreaturePosition(pet))

	 if getItemWeightById(item.itemid, 1) and getItemWeightById(item.itemid, 1) < 1 then

		 return doPlayerSendCancel(cid, "There is no item to carry.")

	 end


	 if isInArray(blockedItems, item.itemid) then

		 return doPlayerSendCancel(cid, "You cannot carry this item.")

	 end

	 doCreatureSetStorage(cid, petItems[slot], item.itemid * 1000 + (item.type > 0 and item.type or 1))

	 doRemoveItem(item.uid)

	 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You take an item.")

	 return true

elseif param:lower() == "items" then

	 local list = "Here is the list of items:\n"

	 for i = 1, carryItems do

		 if getCreatureStorage(cid, petItems[i]) < 1 then

		 list = list .. "\n" .. i .. ". Empty."

		 else

		 local thing = getCreatureStorage(cid, petItems[i])

		 local item = math.floor(thing / 1000)

		 local count = thing - item * 1000

		 list = list .. "\n" .. i .. ". x" .. count .. " " .. getItemNameById(item) .. "."

		 end

	 end


	 return doShowTextDialog(cid, 1948, list)

else

	 param = string.explode(param, ":")

	 if param[1]:lower() == "attack" then

		 local pet = getPlayerPet(cid)

		 if not pet then

		 return doPlayerSendCancel(cid, "Please call your pet first.")

		 end

		 if not param[2] or not isNumber(param[2]) or tonumber(param[2]) < 1 then

		 return doPlayerSendCancel(cid, "No attack index specified.")

		 end


		 if exhaustion.get(cid, petStorages.exhaust) then

		 return doPlayerSendCancel(cid, "You are exhausted.") and doSendMagicEffect(getCreaturePosition(getCreatureSummons(cid)[1]), CONST_ME_POFF)

		 end


		 doAttack(pet, getCreatureTarget(cid), tonumber(param[2]))

		 exhaustion.set(cid, petStorages.exhaust, petExhaust)

	 elseif param[1]:lower() == "give" then

		 local pet = getPlayerPet(cid)

		 if not pet then

		 return doPlayerSendCancel(cid, "Please call your pet first.")

		 end

		 if not param[2] or not isNumber(param[2]) or tonumber(param[2]) < 1 then

		 return doPlayerSendCancel(cid, "No slot specified.")

		 end


		 if getCreatureStorage(cid, petItems[tonumber(param[2])]) > 0 then

		 local thing = getCreatureStorage(cid, petItems[tonumber(param[2])])

		 local item = math.floor(thing/1000)

		 local count = thing-item*1000

		 doPlayerAddItem(cid, item, count)

		 doCreatureSetStorage(cid, petItems[tonumber(param[2])], 0)

		 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You get an item.")

		 else

		 return doPlayerSendCancel(cid, "This slot is empty.")

		 end

	 elseif param[1]:lower() == "say" then

		 local pet = getPlayerPet(cid)

		 if not pet then

		 return doPlayerSendCancel(cid, "Please call your pet first.")

		 end

		 if not param[2] or param[2] == "" then

		 return doPlayerSendCancel(cid, "Command param required.")

		 end


		 if exhaustion.get(cid, petStorages.sayExhaust) then

		 return doPlayerSendCancel(cid, "You are exhausted.") and doSendMagicEffect(getCreaturePosition(getCreatureSummons(cid)[1]), CONST_ME_POFF)

		 end


		 doCreatureSay(pet, param[2], TALKTYPE_MONSTER)

		 exhaustion.set(cid, petStorages.sayExhaust, petExhaust)

	 elseif param[1]:lower() == "move" then

		 local pet = getPlayerPet(cid)

		 if not pet then

		 return doPlayerSendCancel(cid, "Please call your pet first.")

		 end

		 if not param[2] or param[2] == "" then

		 return doPlayerSendCancel(cid, "Command param required.")

		 end


		 if exhaustion.get(cid, petStorages.moveExhaust) then

		 return doPlayerSendCancel(cid, "You are exhausted.") and doSendMagicEffect(getCreaturePosition(getCreatureSummons(cid)[1]), CONST_ME_POFF)

		 end


		 local dir

		 if l[param[2]:lower()] then

		 dir = l[param[2]:lower()]

		 local toPos = getPosByDir(getCreaturePosition(pet), dir, 1)

		 local ret = queryTileAddThing(pet, toPos)

		 if ret == RETURNVALUE_NOERROR then

			 doMoveCreature(pet, dir)

			 exhaustion.set(cid, petStorages.moveExhaust, petExhaust)

		 else

			 return doPlayerSendCancel(cid, "There is not enough room.") and doSendMagicEffect(getCreaturePosition(pet), CONST_ME_POFF)

		 end

		 else

		 return doPlayerSendCancel(cid, "No direction specified.")

		 end

	 elseif isInArray({"mana", "health"}, param[1]:lower()) then

		 if getPlayerGroupId(cid) < 3 then

		 return false

		 end

		 local pet = getPlayerPet(cid)

		 if not pet then

		 return doPlayerSendCancel(cid, "Please call your pet first.")

		 end

		 if not param[2] or not isNumber(param[2]) then

		 return doPlayerSendCancel(cid, "Command param required.")

		 end


		 if param[1]:lower() == "health" then

		 doCreatureAddHealth(pet, tonumber(param[2]))

		 elseif param[1]:lower() == "mana" then

		 doCreatureAddMana(pet, tonumber(param[2]))

		 end

		 return doSendMagicEffect(getCreaturePosition(pet), (param[1]:lower() == "health" and CONST_ME_MAGIC_RED or CONST_ME_MAGIC_BLUE))

	 end

end

return true

end

e adicione isso em talkactions.xml
xksw45.png6tiyqb.pngauunhf.png2nqu139.png
Comandos que achei em Espanhol:

Meu Ultimo projeto em desenvolvimento!

 

http://www.tibiaking.com/forum/topic/47753-show-off-ultimo-projeto-para-download/

 

 

Grupo do facebook para OtServidores! (Divulgação + Criação de Equipe)

 

https://www.facebook.com/groups/otservidores/

 

Postado

cara a hora que eu fui testar apareceu esta mensagem ( 20:06 Command param required. )

oque devo faze ? te dou rep++

Postado
  • Autor

Então cara Foi oq eu falei no Post Não Foi eu que Fiz o System Só o Topico meu Amigo me mando o System e fiz esse Topico e Tipo é Uma base 95% Completa xD Mals Mais Num Sei te ajudar

Meu Ultimo projeto em desenvolvimento!

 

http://www.tibiaking.com/forum/topic/47753-show-off-ultimo-projeto-para-download/

 

 

Grupo do facebook para OtServidores! (Divulgação + Criação de Equipe)

 

https://www.facebook.com/groups/otservidores/

 

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo