Nie tylko o Tibii i OTS...
Witam was Chciałem powiedzieć że skrypt nie jest mój
W 100% działa bo sprawdzałem !!!
Do dzieła :
1.Tak jak u Player ,mana i zycie wzrasta wraz z levelem.
2.Mozesz sprawic ze twoje zwierze zacznie mowic.
3.Pet moze gromadzic itemy w zaloznosci ile dasz mu miejsca .
4.Wraz z levelem zmienia sie jego nazwa .
5.Twoje zwierze posiada Magic Level, zwieksza sie on wraz z ucyciem czarow.
6.Pet posiada mane tak jak zwykly player,tyllko zeby ja odzyskac nie potrzebuje jedzenia.
7.Gdy ty albo pet zginiecie muisz zaplaci u npc wskrzeszajacego zwierzaka zeby go odrodzic.
Dzieje sie to tylko wtedy gdy ty albo pet zginiesz(nie gdy sie wylogujesz)
8.Sila peta autoamtycznie sie zapisuje,wiec moze tylko sie zwiekszac.
9.Wpisujac odpowiednia komende dowiadujesz sie wszystko o swoim zwierzaku.
10.Mozesz zsummowac peta lub go zchowac kiedy tylko chcesz.
Pierwszy Krok
Tworzymy kolejno pliki w glownym folderze OTS'a (tam gdzie znajduje sie Config.Lua)
petConfig.lua
Spoiler:
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+1,
petUid = base+2,
petExha = base+3,
petDamage = base+4,
petManaSpent = base+5,
petIsOnline = base+6,
petMana = base+7,
petIsHealing = base+8,
petCap = base+9
}
petItems = {}
maxItems = 20 --Max items the pet can carry
for i = 1, maxItems do
petItems[i] = base+9+i
end
--Pets, dependiong on the level
pets = {{level = 100, name = "GoD Demon"},
{level = 60, name = "Demon Lord"},
{level = 50, name = "Dark Demon"},
{level = 40, name = "Fire Demon"},
{level = 30, name = "Demon Senior"},
{level = 20, name = "Black Demon"},
{level = 10, name = "Demon Junior"},
{level = 0, name = "Demonek"}
}
--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 = 60exhausted = 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
!petinfo.lua
Spoiler:
dofile("./petConfig.lua")
function onSay(cid, words, param)
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 FALSE
end
!petsay.lua
Spoiler:
dofile("./petConfig.lua")
function onSay(cid, words, param)
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 FALSE
end
!petcarry.lua
Spoiler:
dofile("./petConfig.lua")
function onSay(cid, words, param)
local mySto = 0
local daPet = getPlayerStorageValue(cid, storages.petUid)
if param == "clear" then
for i = 1, table.maxn(petItems) do
doCreatureSay(daPet, '' .. petItems[i] .. '', TALKTYPE_ORANGE_1)
end
end
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, table.maxn(petItems) do
if getPlayerStorageValue(cid, petItems) == 0 or getPlayerStorageValue(cid, petItems) == -1 then
mySto = b
break
end
end
if mySto ~= 0 then
local theID = carryingItem.itemid
if isItemStackable(theID) == 1 then
doRemoveItem(carryingItem.uid, carryingItem.type)
else
doRemoveItem(carryingItem.uid, 1)
end
setPlayerStorageValue(cid, petItems[mySto], theID)
doCreatureSay(daPet, 'Hmm, ' .. getItemName(theID) .. ', I\'ll save it on my ' .. mySto .. ' bag!', TALKTYPE_ORANGE_1)
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 FALSE
end
[b]!pet.lua
Spoiler:
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 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, table.maxn(pets) do
if pets[i].level <= getPlayerLevel(cid) then
myPet = pets[i].name
break
end
end
myPetUid = doPlayerAddSummon(cid, myPet, getCreaturePosition(cid))
setPlayerStorageValue(cid, storages.petUid, myPetUid)
if myPetUid ~= -1 then
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 FALSE
en
!petattack
Spoiler:
dofile("./petConfig.lua")
function onSay(cid, words, param)
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 TIEMPO_ESPERA = 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))*magicLevelRate 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)
if TIEMPO_ESPERA - TIEMPO > TIEMPO_ESPERA or CRONOMETRO == -1 then
setPlayerStorageValue(cid, storages.petExha, CRONOMETRO2+1)
end
for i = 1, table.maxn(attacks) do
if param == attacks[i].param then
myAttack = i
break
end
end
if myAttack ~= 0 then
if getPlayerStorageValue(cid, storages.petMana) >= attacks[myAttack].manaSpent then
if attacks[myAttack].needLevel <= getPlayerLevel(cid) and attacks[myAttack].needMag <=
getPlayerStorageValue(cid, storages.petMag) then
if attacks[myAttack].exhausted - TIEMPO <= 0 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)
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)
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, table.maxn(frases))] .. '!', 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 FALSE
end
!petgetitem.lua
Spoiler:
dofile("./petConfig.lua")
function onSay(cid, words, param)
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
doPlayerAddItem(cid, getPlayerStorageValue(cid, petItems[getCount(param)]), 1)
doCreatureSay(daPet, 'Here is your ' .. getItemName(getPlayerStorageValue(cid, petItems[param])) .. '', TALKTYPE_ORANGE_1)
setPlayerStorageValue(cid, petItems[param], 0)
end
end
end
end
end
return FALSE
end
KROK DRUGI
Edytujemy Plik logout.lua w folderze data\creaturescripts\scripts. Na początku pliku dodajemy:
Spoiler:
dofile("./petConfig.lua")
A w środku pomiędzy funkcją onLogut:
Spoiler:
if isCreature(getPlayerStorageValue(cid, storages.petUid)) == 1 then
if getPlayerStorageValue(cid, storages.petIsOnline) == 2 then
setPlayerStorageValue(cid, storages.petIsOnline, 1)
end
end
Tak zeby caly plik wygladal tak :
Spoiler:
dofile("./petConfig.lua")
function onLogout(cid)
if isCreature(getPlayerStorageValue(cid, storages.petUid)) == 1 then
if getPlayerStorageValue(cid, storages.petIsOnline) == 2 then
setPlayerStorageValue(cid, storages.petIsOnline, 1)
end
end
return TRUE
end
Jak Używać Komendy W Grze
Pet info : ta komenda informuje cię o najważniejszych informacjach dotyczących Peta. Możliwe parametry dla komendy
(!petinfo "parametr):
magic level - Pokazuje Mlvl Peta.
mana - Pokazuje Manne Peta.
health - Pokazuje ilość HP Peta.
!petsay ta komenda pozwala na wyświetlenie mowy Peta.
!petcarry pozwala na zebranie przez Peta przedmiotu leżącego pod nim.Np.
!pet tą komenda przywolujemy lub chowamy naszego Peta :
!petattack - tą komendą rozkazujemy Petowi zaatakować wroga:
!petgetitem- tą komendą bierzemy itemy, które wcześniej daliśmy Petowi. Musisz pamietac jakie dales itemy potworkowi ,bo tego nieda sie sprawdzic!.
A tu NPC wskrzeszający naszego Peta:
Spoiler:
local focus = 0
local talk_start = 0
local talk_state = 0
local costPerLevel = 300
dofile("./petConfig.lua")
function onThingMove(creature, thing, oldpos, oldstackpos)
end
function onCreatureAppear(creature)
end
function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('How rude!.')
focus = 0
talk_start = 0
end
end
function onCreatureTurn(creature)
end
function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end
function onCreatureSay(cid, type, msg)
msg = string.lower(msg)
if getDistanceToCreature(cid) < 4 then
if (msgcontains(msg, 'hi') and (focus == 0)) then
selfSay('Hello ' .. creatureGetName(cid) .. '! I can take you to the train!')
focus = cid
talk_start = os.clock()
elseif msgcontains(msg, 'hi') and (focus ~= cid) then
selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')
end
if msgcontains(msg, 'revive') and focus == cid then
if isCreature(getPlayerStorageValue(cid, storages.petUid)) == 0 then
if getPlayerStorageValue(cid, storages.petIsOnline) == 2 then
selfSay('YOUR PET DIED?!, YOU\'R A BAD OWNER, THIS WILL COST YOU ' .. getPlayerLevel(cid)*costPerLevel .. ' GOLD COINS!, AGREE?!')
talk_state = 1
else
selfSay('Your pet is alive.')
end
else
selfSay('Your pet is standing next to you.')
end
talk_start = os.clock()
end
if msgcontains(msg, 'yes') and focus == cid and talk_state == 1 then
if doPlayerRemoveMoney(cid, getPlayerLevel(cid)*costPerLevel) == 1 then
setPlayerStorageValue(cid, storages.petIsOnline, 1)
selfSay('You can now summon again your pet.')
else
selfSay('You don\'t have enought money.')
end
talk_state = 0
talk_start = os.clock()
end
if msgcontains(msg, 'bye') then
selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
focus = 0
talk_start = 0
talk_state = 0
end
end
end
function onCreatureChangeOutfit(creature)
end
function onThink()
doNpcSetCreatureFocus(focus)
if (os.clock() - talk_start) > 30 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
talk_state = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 5 then
talk_state = 0
selfSay('Good bye then.')
talk_state = 0
focus = 0
end
end
end
Mi ten skrypt sie podoba I niepisać komentarzy żal itd. bardzo o to proszę Myślę że sie przyda
Offline
jestes najlepszy : D
Offline
Coś takiego już kiedyś widziałem na forum ale już nie ma i nie dokładne było ;s
Gdyby ktoś zrobił to na otsie to moge zagrać, skrypcik fajny Dam Ci plusa za to ^^
@Down
Napisał, że nie jego to co płaczesz? -.-"
Ostatnio edytowany przez Robert (2009-04-11 07:08:27)
Offline
@up
NIEUMISZ CZYTAĆ ?!Napisałem że skrypt nie mój chyba nie ?? umisz czytać ...Czytanie ze zrozumieniem sie kłania !!!
Offline
Umiejętność szukania się kłania, Ferrugineus
http://tibia11.pun.pl/viewtopic.php?id=2594
Tutaj jest temat taki sam (albo podobny) do tego
Ogólnie skrypt ze screenów wygląda na fajny, aczkolwiek ja coś kiedyś pokręciłam i na otsie mi nie działał
Offline
@carmenn
ale w tamtym starym temacie nie ma zdjęc a tutaj są
@topic
skrypt ładny kiedyś chciałem go dodac do swojego ots ale miałem cały czas crashe
Offline
Zbanowany
Juz ten temat byl -.- daleko xD
Offline
@up
No na h.uj spamujesz ?? już mnie pani upomniała xD
@Topppic Trendy ;d
Dzięki za komentarze
Offline
Zbanowany
No widziałem już ten skrypt i chyba nawet z takimi samymy lub podobnymi zdjęciemi,,,, powiem, że nawet pomysłowy skrypt myśle nad wrzuceniem go na mój ots.
Ostatnio edytowany przez Mr Pawlo (2009-04-11 12:54:21)
Offline
kurcze nie moge zrobic bo nie mam pliki logout.lua co robic?
Offline
Stwórz go i skopiuj przykład tego pliku w poście Ferrugineusa
Offline
ludzie mi sie nie podoba 1/10 a to 1 za checi
Offline
@up
jeżeli chcesz oceniać to rozkręć posta np.dlaczego itd. a nie takie coś bo to jest spam
@Top
dzięki za komentarze ;]
Offline
ale fajny skrypcik
czegos takiego jeszcze nie widzialem
Offline