- Dołączył
- Sierpień 18, 2009
- Posty
- 225
- Liczba reakcji
- 11
Witam. Mam do was pro?b?, co doda? do kodu, aby wy?wietla?o po klikni?ciu na gracza ilo?? wykonanych reborn?w, i ?eby pokazywa?o, ?e wykona?e? reborn na chacie, a nie na grze (tzn. napisy na chacie, a nie te bia?e jak "sorry, not possible")
Prosz? o pomoc, poni?ej kod:
Prosz? o pomoc, poni?ej kod:
Kod:
local config = {
needLevelToReborn = 200, -- wymagany level, aby moc uzyc rebornu
levelAfterReborn = 8, -- jaki level bedzie mial gracz po uzyciu rebornu
onlyInProtectionZone = false, -- czy skryptu mozna uzywac tylko w pz (true/false)
rebornCountStorage = 10002, -- storage, w ktorym skrypt bedzie zapisywac ilosc storage'ow (0 lub false aby wylaczyc)
newHealthAfterReborn = 180, -- ilosc hp, ktora postac bedzie miala po rebornie (ustaw false, aby wylaczyc)
newManaAfterReborn = 100, -- ilosc many, ktora postac bedzie miala po rebornie (ustaw false, aby wylaczyc)
vocationAfterReborn = { -- jaka profesja ma byc ustawiona po rebornie (zaleznie od wczesniejszej profesji) (aby wylaczyc, ustaw false lub zakomentuj/wyczysc tabele)
-- [id_profesji_przed_rebornem] = {voc = id_profesji_po_rebornie, outfit = {outfit_po_rebornie} } (mozesz tez ustawic sam outfit, bez profesji, lub na odwrot, wystarczy ustawic false tam, gdzie potrzeba)
[1] = {voc = 2, outfit = {lookType=137, lookHead=102, lookBody=11, lookLegs=68, lookFeet=24, lookAddons=3}},
[2] = {voc = 1, outfit = {lookType=137, lookHead=70, lookBody=52, lookLegs=20, lookFeet=76, lookAddons=3}},
[3] = {voc = 4, outfit = {lookType=137, lookHead=102, lookBody=11, lookLegs=68, lookFeet=24, lookAddons=3}},
[4] = {voc = 3, outfit = {lookType=137, lookHead=70, lookBody=52, lookLegs=20, lookFeet=76, lookAddons=3}},
[5] = {voc = 6, outfit = {lookType=137, lookHead=102, lookBody=11, lookLegs=68, lookFeet=24, lookAddons=3}},
[6] = {voc = 5, outfit = {lookType=137, lookHead=70, lookBody=52, lookLegs=20, lookFeet=76, lookAddons=3}},
[7] = {voc = 8, outfit = {lookType=137, lookHead=102, lookBody=11, lookLegs=68, lookFeet=24, lookAddons=3}},
[8] = {voc = 7, outfit = {lookType=137, lookHead=70, lookBody=52, lookLegs=20, lookFeet=76, lookAddons=3}},
},
effects = { -- tabela z efektami
enabled = true, -- czy wyswietlanie ciekawego efektu ma byc aktywowane (true / false)
range = 5, -- w jakim zasiegu od gracza ma sie pojawiac efekt (nie ma sensu ustawiac wiekszego niz 9-10, lecz mozna)
speed = 200, -- predkosc efektow w milisekundach
playerEffect = CONST_ME_HOLYAREA, -- efekt, ktory sie wyswietli na graczu
effectListImplode = {CONST_ME_HOLYDAMAGE, CONST_ME_LOSEENERGY}, -- lista efektow, ktore sie wyswietlaja, podczas gdy efekt zbliza sie do gracza
effectListExplode = {CONST_ME_FIREAREA, CONST_ME_FIREATTACK} -- lista efektow "eksplozji"
}
}
function onSay(cid, words, param, channel)
if(param == "count") then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You have done reborn " .. math.max(0, getPlayerStorageValue(cid, config.rebornCountStorage)) .. " times. You need " .. math.max(0, config.needLevelToReborn-getPlayerLevel(cid)) .. " levels to make next reborn.") end
local pos, level = getCreaturePosition(cid), getPlayerLevel(cid)
if(level < config.needLevelToReborn) then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You need at least level " .. config.needLevelToReborn .. " to reborn. You still need " .. config.needLevelToReborn - level .. " levels.")
doSendMagicEffect(pos, CONST_ME_POFF)
return 1
end
if(config.onlyInProtectionZone and not getTilePzInfo(pos)) then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You must be in the protection zone before reborn.")
doSendMagicEffect(pos, CONST_ME_POFF)
return 1
end
local function doReborn(cid, pos) -- specjalnie dalem w formie funkcji, abym mogl uzyc w addEvencie. Co do pamieci, to jest ona zwalniana, gdy wyjdzie z bloku
local added = false -- klopoty z zla iloscia capa podczas rebornu z zmiana profesji zmusily mnie do malego obejscia - nie kazdy silnik musi miec doPlayerSetMaxCapacity, wiec posluguje sie calkowitym resetowaniem poziomu, by potem doPlayerAddLevel nadal wlasciwa ilosc capa.
if(type(config.vocationAfterReborn) == 'table' and #config.vocationAfterReborn > 0) then
local info = config.vocationAfterReborn[getPlayerVocation(cid)]
if(info ~= nil) then
if(type(info.voc) == 'number') then
doPlayerAddLevel(cid, 1 - level) -- teraz skryptowi jest blizej do prawdziwego reborna, bo gracz odradza sie az od samych podstaw :s
if(type(doPlayerSetMaxCapacity) == 'function') then -- po powrocie do 1 levela gracz zwykle ma ustawione 0 capa a domyslnie nowe postacie maja 400, wiec bez tej funkcji "znika" 400 capa (no i przy tak napisanym skrypcie nie musze uzywac getVocationInfo)
doPlayerSetMaxCapacity(cid, 400)
end
doPlayerSetVocation(cid, info.voc)
doPlayerAddLevel(cid, config.levelAfterReborn - 1)
added = true
end
if(type(info.outfit) == 'table') then doCreatureChangeOutfit(cid, info.outfit) end
end
end
if(not added) then doPlayerAddLevel(cid, config.levelAfterReborn - level) end -- profesja sie nie zmienia, wiec nie potrzeba trickow, by ilosc capa byla dobra
if(config.rebornCountStorage) then
setPlayerStorageValue(cid, config.rebornCountStorage, math.max(getPlayerStorageValue(cid, config.rebornCountStorage)+1, 1))
end
if(config.newHealthAfterReborn) then
setCreatureMaxHealth(cid, config.newHealthAfterReborn)
doCreatureAddHealth(cid, (getCreatureHealth(cid) < 4 and -1 or 1)) -- odswiezanie ilosci hp w kliencie, bo inaczej gracz nie zauwazy zmian (przynajmniej w 8.x)
end
if(type(config.newManaAfterReborn) == 'number') then
setCreatureMaxMana(cid, config.newManaAfterReborn)
doPlayerAddMana(cid, config.newManaAfterReborn - getPlayerMana(cid))
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have succesful reborned!")
doSendMagicEffect(pos, config.effects.playerEffect)
end
if(config.effects.enabled) then
local function eff_func(params) -- funkcja na szybkie znajdowanie okregu dookola danej pozycji (nie wszyscy uzytkownicy musza go rozumiec, zeby dzialal)
local effect = params.list[params.n%#params.list+1]
doSendMagicEffect({x=pos.x-params.n, y=pos.y, z=pos.z}, effect)
doSendMagicEffect({x=pos.x+params.n, y=pos.y, z=pos.z}, effect)
for i = (params.inset and params.n or 0), (params.inset and 0 or params.n), (params.inset and -1 or 1) do
doSendMagicEffect({x=params.pos.x-i, y=pos.y-(params.n-i), z=pos.z}, effect)
doSendMagicEffect({x=params.pos.x-i, y=pos.y+(params.n-i), z=pos.z}, effect)
doSendMagicEffect({x=params.pos.x+i, y=pos.y+(params.n-i), z=pos.z}, effect)
doSendMagicEffect({x=params.pos.x+i, y=pos.y-(params.n-i), z=pos.z}, effect)
end
if(params.inset and params.n > params.ennd or params.n < params.ennd) then
params.n = params.n - (params.inset and 1 or -1)
addEvent(eff_func, config.effects.speed, params)
elseif(params.cid and isPlayer(params.cid) --[[unikanie bledow, gdy gracz zniknie z gry]]) then
doReborn(params.cid, params.pos)
addEvent(eff_func, config.effects.speed, {pos=params.pos, n=1, ennd=config.effects.range, list=config.effects.effectListExplode, inset=false})
end
end
addEvent(eff_func, config.effects.speed, {pos=pos, n=config.effects.range, list=config.effects.effectListImplode, ennd=1, inset=true, cid=cid})
else
doReborn(cid, pos)
end
return 1
end
