1
Pet System TFs 1.2 Miér Jun 08, 2016 9:28 am
Cheka

Miembro

primero vamos a lib y vamos a crear un archivo llamado.
- Código:
('data.lib/pets_lib.lua')
despues vamos a data/chatchannels/chatchannels.xml y agregamos esto
- Código:
<channel id="10" name="Pet" script="pet.lua" />
despues creamos un script y pegamos esto con este nombre
data/chatchannels/scripts/pet.lua
ahora abrimos y pegamos esto
- Código:
function onJoin(player)
player:petSystemMessage("Type '!petcommands' to see pet commands list.")
local petUid = player:getPetUid()
if petUid == 0 then
player:summonPet( player:getPosition() )
elseif petUid == -1 then
player:petSystemMessage("You don't have pet.")
elseif petUid == -2 then
player:petSystemMessage("Your pet is dead.")
end
return true
end
function onLeave(player)
player:doRemovePet()
return true
end
function onSpeak(player, type, message)
return
end
ahora en, data/creaturescripts/creaturescripts pegamos esto
- Código:
<event type="preparedeath" name="PetDeath" script="pet_creaturescript.lua" />
<event type="kill" name="PetKill" script="pet_creaturescript.lua" />
<event type="login" name="PetOwnerLogin" script="pet_owner_creaturescripts.lua" />
<event type="logout" name="PetOwnerLogout" script="pet_owner_creaturescripts.lua" />
<event type="preparedeath" name="PetOwnerDeath" script="pet_owner_creaturescripts.lua" />
ahora creamos los archivos y abrimos el primero data/creaturescripts/scripts/pet_creaturescript.lua y pegamos esto
- Código:
function onPrepareDeath(creature, killer)
local player = creature:getMaster()
if player then
player:setPetUid(-2)
player:setPetLostHealth(0)
player:petSystemMessage("Your pet has died.")
end
return true
end
function onKill(creature, target)
if target:isMonster() then
local player = creature:getMaster()
local experience = (target:getType()):getExperience()
player:addPetExp(experience)
end
return true
end
ahora este, data/creaturescripts/scripts/pet_owner_creaturescripts.lua.
- Código:
function onLogin(player)
for _, event in pairs({"PetOwnerLogout", "PetOwnerDeath"}) do
player:registerEvent(event)
end
player:openChannel(PETS.CHANNELID)
return true
end
function onLogout(player)
return player:doRemovePet()
end
function onPrepareDeath(creature, killer)
local petUid = creature:getPetUid()
local pet = Creature(petUid)
if pet and pet:isCreature() then
creature:doRemovePet()
creature:setPetUid(-2)
creature:setPetLostHealth(0)
end
return true
end
ahora vamos a data/talkactions/talkactions.xml y pegamos esto
- Código:
<talkaction words="!petadd" separator=" " script="pet_add.lua" />
<talkaction words="!petcatch" script="pet_catch.lua" />
<talkaction words="!petcommands" script="pet_commands.lua" />
<talkaction words="!petheal" script="pet_heal.lua" />
<talkaction words="!petrelease" script="pet_release.lua" />
<talkaction words="!petrevive" script="pet_revive.lua" />
<talkaction words="!petinfo" script="pet_status.lua" />
Ahora creamos los archivos.
- Código:
data/talkactions/scripts/pet_add.lua
- Código:
function onSay(player, words, param, channel)
if player:getGroup():getId() >= 3 then
if tonumber(param) ~= nil and tonumber(param) <= table.maxn(PETS.IDENTIFICATION) then
player:doRemovePet()
player:doResetPet()
if player:doAddPet(tonumber(param)) then
player:petSystemMessage("New pet added!")
else
player:petSystemMessage("Can't add pet!")
end
end
end
return false
end
ahora el otro
- Código:
data/talkactions/scripts/pet_catch.lua
- Código:
function onSay(player, words, param, channel)
local target = player:getTarget()
local ropeId = 2120
if player:getItemCount(ropeId) == 0 then
player:petSystemMessage('You need rope to catch any monster.')
return false
end
if player:getPetUid() > -1 then
player:petSystemMessage("You have one pet!")
return false
end
if not target or not target:isMonster() then
player:petSystemMessage("You can catch only monsters!")
return false
end
local targetMaster = target:getMaster()
if targetMaster and targetMaster:isPlayer() then
player:petSystemMessage("You can catch only wild monster.")
return false
end
-- addPetByName
local mobName = ''
local mobNumber = ''
for number_, name_ in ipairs(PETS.IDENTIFICATION) do
if name_.name == getCreatureName(target) then
mobName = name_.name
mobNumber = number_
break
end
end
if mobName == '' then
player:petSystemMessage("You can't catch this monster.")
return false
end
-- / addPetByName
if not player:canGetPet(mobNumber) then
player:petSystemMessage(PETS.IDENTIFICATION[mobNumber].info)
return false
end
local catchChance = 1 + (1 - target:getHealth() / target:getMaxHealth() ) *100
if catchChance >= math.random(100) then
player:doResetPet()
player:doAddPet(tonumber(mobNumber))
player:setPetLostHealth(catchChance * player:getPetMaxHealth() / 100 )
local targetPosition = target:getPosition()
target:remove()
targetPosition:sendMagicEffect(CONST_ME_POFF)
player:petSystemMessage("You catched a " .. string.lower(mobName) .."!")
else
player:petSystemMessage("Try one more time!")
end
return false
end
el 3 archivo.
- Código:
data/talkactions/scripts/pet_commands.lua
- Código:
function onSay(player, words, param, channel)
player:petSystemMessage("!petinfo")
player:petSystemMessage("!petcatch")
player:petSystemMessage("!petrevive")
player:petSystemMessage("!petrelease")
player:petSystemMessage("!petheal")
return false
end
el 4 archivo.
- Código:
data/talkactions/scripts/pet_heal.lua
- Código:
function onSay(player, words, param, channel)
local petUid = player:getPetUid()
if petUid == -1 then
player:petSystemMessage("You don't have a pet!")
elseif petUid == -2 then
player:petSystemMessage("Your pet is death!")
elseif petUid == 0 then
local lostHealth = player:getPetLostHealth()
local soulNeded = PETS.CONFIG.healSoulBase + lostHealth * PETS.CONFIG.healSoulCost
if lostHealth == 0 then
player:petSystemMessage("Your don't need healing!")
elseif player:getSoul() >= soulNeded then
player:addSoul(-soulNeded)
player:setPetLostHealth(0)
player:petSystemMessage("You healed pet ".. lostHealth .. " health, it cost " .. soulNeded .." soul points.")
else
player:petSystemMessage("You don't have ".. soulNeded .." soul points!")
end
elseif petUid >= 0 then
local pet = Creature(petUid)
local lostHealth = pet:getMaxHealth() - pet:getHealth()
local soulNeded = PETS.CONFIG.healSoulBase + lostHealth * PETS.CONFIG.healSoulCost
if lostHealth == 0 then
player:petSystemMessage("Your don't need healing!")
elseif player:getSoul() >= soulNeded then
player:addSoul(-soulNeded)
pet:addHealth(lostHealth)
player:petSystemMessage("You healed pet ".. lostHealth .. " health, it cost " .. soulNeded .." soul points.")
else
player:petSystemMessage("You don't have ".. soulNeded .." soul points!")
end
end
return false
end
el 5 archivo .
- Código:
data/talkactions/scripts/pet_release.lua
- Código:
function onSay(player, words, param, channel)
local petUid = player:getPetUid()
if petUid >= 0 or petUid == -2 then
player:doRemovePet()
player:doResetPet()
player:petSystemMessage("Pet released!")
elseif petUid == -1 then
player:petSystemMessage("You don't have pet!")
end
return false
end
el 6 archivo.
- Código:
data/talkactions/scripts/pet_revive.lua
- Código:
function onSay(player, words, param, channel)
local petUid = player:getPetUid()
if petUid == -1 then
player:petSystemMessage("You don't have a pet!")
elseif petUid >= 0 then
player:petSystemMessage("Your pet is live!")
elseif petUid == -2 then
local petLevel = player:getPetLevel()
local soulNeded = petLevel * PETS.CONFIG.reviveSoulLevelCost + PETS.CONFIG.reviveSoulBaseCost
soulNeded = soulNeded > 100 and 100 or soulNeded
if player:getSoul() >= soulNeded then
player:addSoul(-soulNeded)
player:setPetUid(0)
player:setPetLostHealth(0)
local playerPosition = player:getPosition()
playerPosition:sendMagicEffect(CONST_ME_HOLYAREA)
player:petSystemMessage("Your pet is revived!")
else
player:petSystemMessage("You don't have enought souul points!")
end
end
return false
end
el 7 archivo y ultimo.
- Código:
data/talkactions/scripts/pet_status.lua
- Código:
function onSay(player, words, param, channel)
local petUid = player:getPetUid()
local text = ''
if petUid == nil or petUid == -1 then
text = "You don't have pet."
elseif petUid == -2 then
text = "Your pet is dead."
else
local pet = Creature(petUid)
if pet ~= nil and pet:isCreature() then
text = "\n Type: "..pet:getName()..
" \n Health: "..pet:getHealth().."/"..pet:getMaxHealth()..
" \n Exp: "..player:getPetExperience()..
"\n Lvl: "..player:getPetLevel()
else
text = "Your's pet is offline."
end
end
player:petSystemMessage(text)
return false
end
Ahora creen los mostros.
- Código:
data/monster/monsters.xml
- Código:
<monster name="PET_Cat" file="pets/cat.xml"/>
<monster name="PET_Dog" file="pets/dog.xml"/>
<monster name="PET_Husky" file="pets/husky.xml"/>
<monster name="PET_Wolf" file="pets/wolf.xml"/>
<monster name="PET_War Wolf" file="pets/war wolf.xml"/>
<monster name="PET_Bear" file="pets/bear.xml"/>
<monster name="PET_Seagull" file="pets/seagull.xml"/> <!-- -->
<monster name="PET_Parrot" file="pets/parrot.xml"/>
<monster name="PET_Chicken" file="pets/chicken.xml"/>
<monster name="PET_Sheep" file="pets/sheep.xml"/>
<monster name="PET_Elephant" file="pets/elephant.xml"/>
<monster name="PET_Lion" file="pets/lion.xml"/>
<monster name="PET_Tiger" file="pets/tiger.xml"/>
<monster name="PET_Penguin" file="pets/penguin.xml"/> <!-- -->
<monster name="PET_Mechanic Golem" file="pets/mechanic golem.xml"/>
<monster name="PET_Undead Slave" file="pets/undead slave.xml"/>
<monster name="PET_Stronger Husky" file="pets/stronger husky.xml"/>
<monster name="PET_Black Sheep" file="pets/black sheep.xml"/>
<monster name="PET_Mammoth" file="pets/mammoth.xml"/>
<monster name="PET_Snake" file="pets/snake.xml"/>
<monster name="PET_Cobra" file="pets/cobra.xml"/>
pegan esto en cada mostro que crean con estas caracteristicas.
- Código:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Wolf" nameDescription="a wolf" race="blood" experience="18" speed="195" manacost="0">
<health now="25" max="25"/>
<look type="27" corpse="5968"/>
<targetchange interval="2000" chance="0"/>
<strategy attack="100" defense="0"/>
<flags>
<flag summonable="0"/>
<flag attackable="1"/>
<flag hostile="1"/>
<flag illusionable="1"/>
<flag convinceable="1"/>
<flag pushable="1"/>
<flag canpushitems="0"/>
<flag canpushcreatures="0"/>
<flag targetdistance="1"/>
<flag staticattack="90"/>
<flag runonhealth="1"/>
</flags>
<attacks>
<attack name="melee" interval="1500" skill="19" attack="22"/>
</attacks>
<defenses armor="1" defense="4"/>
<elements>
<element earthPercent="10"/>
<element holyPercent="10"/>
<element icePercent="-5"/>
<elemetn deathPercent="-5"/>
</elements>
</monster>
bueno si quieren todos los mostros bajan este archivo.
- Código:
https://github.com/yrpen/lua-scripts/tree/master/pets_system/monsters/pets
ya me largo bueno si tienen problema avisan denme me gusta chaolin. aaa otra cosa no probar con el GM con player.