Nagradzanie gracza przy awansowaniu
Poniżej znajduje się pełna instrukcja instalacji systemu nagradzania graczy przy awansach poziomu doświadczenia.
Skrypt dzieli się na trzy zasadnicze części:
- nagradzanie przedmiotami za zdobycie odpowiedniego poziomu doświadczenia
- leczenie postaci (hp/mana) przy awansie
- wyświetlenie animacji tekstowej z napisem "gratz" przy awansie
Dwa ostatnie moduły można włączać/wyłączać w zależności od upodobań. Moduł nagradzania jest podstawą w tym skrypcie.
I. Instalacja
1. W folderze ' triggers/scripts/' należy utworzyć plik ' onLevel.lua' i wkleić poniższy kod:
Kod PHP:
-- ################################################### -- ## Created by: Piotr Nowak (Matem) ## -- ## Date: 04.04.2013 ## -- ## Exclusive for RonIT.pl ## -- ## Support for this script: ## -- ## http://forum.ronit.pl/forumdisplay.php?fid=22 ## -- ###################################################
function onTrigger(cid, thing1, pos1, thing2, pos2, trigger, text) -- ################################# -- ## INSTRUKCJA DODAWANIA NAGROD ## -- ################################# -- -- Nalezy edytowac wylacznie pojedyncze linie konfiguracji -- Przykładowa linika z nagrodą: -- WAŻNE - KAŻDA LINIA MUSI BYĆ ZAKOŃCZONA PRZECINKIEM! -- {id = 1, prizeLVL = 50, vocation = 0, onlyPremium = 0, itemReward = {id = 3233, subtype = 0}}, -- id - unikalny klucz nagrody, kazda nagroda MUSI miec swoj unikalny identyfikator -- level - nalezy wstawic poziom na ktorym gracz otrzyma nagrode -- vocation - numer profesji (5 - kazdy gracz, 4 - knight, 3 - paladin, 2 - druid, 1 - sorcerer, 0 - brak profesji) -- onlyPremium - decyduje czy nagroda jest dla wszystkich graczy, czy tylko z kontem premium (0 - wszyscy, 1 - tylko premium) -- itemReward - definicja nagrody na danym poziomie - dla mniej doswiadczonych uzytkownikow zalecana jest jedynie zmiana ID przedmiotu -- - bardziej zaawansowani gracze moga umieszczac tutaj cale zestawy nagrod (w plecakach) -- - itemReward = 0, jeżeli gracz ma nie dostawac nagrody w postaci przedmiotow -- ####################################################### -- ## PONIZSZY KOD EDYTUJESZ NA WLASNA ODPOWIEDZIALNOSC ## -- ####################################################### local config = { {id = 1, level = 50, vocation = 4, onlyPremium = 0, itemReward = {id = 3233}}, -- bright sword, lvl 50, knight {id = 2, level = 50, vocation = 3, onlyPremium = 0, itemReward = {id = 4328}}, -- elite crossbow, lvl 50, paladyn {id = 3, level = 50, vocation = 2, onlyPremium = 0, itemReward = {id = 4341}}, -- tesla staff, lvl 50, druid {id = 4, level = 50, vocation = 1, onlyPremium = 0, itemReward = {id = 4341}}, -- tesla staff, lvl 50, sorcerer {id = 5, level = 10, vocation = 5, onlyPremium = 0, itemReward = {id = 2981, count = 10}}, -- 10x crystal coin, lvl 10, all vocations {id = 6, level = 100, vocation = 5, onlyPremium = 0, itemReward = {id = 2981, count = 100}}, -- 100x crystal coin, lvl 100, all vocations } local fullRestore = true -- true - uzupelnianie HP/MP przy awansie -- false - wylaczenie opcji local congratzMSG = true -- true - wlaczenie animacji GRATZ przy awansie -- false - wylaczenie opcji -- ############################### -- ## NIE ZMIENIAC NIC PONIZEJ! ## -- ############################### local newLVL = getPlayerLevel(cid) local rSV = SV_TRIGGERS["REWARD_ON_LEVEL"] local trueConfig = {} for _, prize in pairs(config) do if newLVL == prize.level and getPlayerStorageValue(cid, rSV) < newLVL and (prize.vocation == getPlayerVocation(cid) or prize.vocation == 5) and (prize.onlyPremium == 0 or (prize.onlyPremium == 1 and getPlayerPACC(cid) >= 1)) then table.insert(trueConfig, prize) end end
if #trueConfig >= 1 then for _, p in pairs(trueConfig) do local ret = 0 if type(p.itemReward) == "table" and p.itemReward ~= nil then if (doPlayerAddItemTable(cid, p.itemReward) ~= 0) then doPlayerSendTextMessage(cid, 22, "Congratz! You can find reward in your backpack.") log(cid, "<lvlPrize.lua> Adding reward {"..p.id.."} items to player {"..getPlayerName(cid).."}") setPlayerStorageValue(cid, rSV, newLVL) end end end else --doPlayerSendTextMessage(cid, 22, "Sorry, there are no rewards for this advance.") end -- ################################# -- ## RESTORING HP/MP ON LEVEL UP ## -- ################################# if fullRestore == true then doPlayerAddMana(cid,999999) if getPlayerHealth(cid) > 0 then doPlayerAddHealth(cid,999999) end end -- ###################### -- ## CONGRATZ MESSAGE ## -- ###################### if congratzMSG == true then local ppos = getPlayerPosition(cid) local positions = { {x=ppos.x, y=ppos.y, z=ppos.z}, {x=ppos.x-1, y=ppos.y-1, z=ppos.z}, {x=ppos.x-1, y=ppos.y, z=ppos.z}, {x=ppos.x-1, y=ppos.y+1, z=ppos.z}, {x=ppos.x, y=ppos.y+1, z=ppos.z}, {x=ppos.x+1, y=ppos.y+1, z=ppos.z}, {x=ppos.x+1, y=ppos.y, z=ppos.z}, {x=ppos.x+1, y=ppos.y-1, z=ppos.z}, {x=ppos.x, y=ppos.y-1, z=ppos.z}, } local time_delay = 0 for _, pos in pairs(positions) do addEvent(doSendAnimatedText,time_delay,pos,'Gratz',RED) addEvent(doSendMagicEffect,time_delay,pos,12) time_delay = time_delay + 300 end end return 1 end
2. W pliku ' triggers/triggers.xml' należy dodać poniższy kod:
Kod PHP:
<trigger id="15" type="ON_LEVELUP" script="onLevel.lua"> <level value="0" /> </trigger>
NALEŻY PAMIĘTAĆ O ZMIANIE ID TRIGGER'A
3. W pliku ' lua/global.lua' należy wyszukać poniższy kod
Kod PHP:
SV_QUESTS = { (...) jakiś kod --(...)--- }
i dodać po tym: (pamiętając o zmianie SV na wolne
Kod PHP:
SV_TRIGGERS = { ["REWARD_ON_LEVEL"] = 11000, }
Jeżeli mamy już SV_TRIGGERS w pliku global.lua, należy jedynie skopiować identyfikatory.
II. Konfiguracja
Kod PHP:
local config = { {id = 1, level = 50, vocation = 4, onlyPremium = 0, itemReward = {id = 3233}}, -- bright sword, lvl 50, knight {id = 2, level = 50, vocation = 3, onlyPremium = 0, itemReward = {id = 4328}}, -- elite crossbow, lvl 50, paladyn {id = 3, level = 50, vocation = 2, onlyPremium = 0, itemReward = {id = 4341}}, -- tesla staff, lvl 50, druid {id = 4, level = 50, vocation = 1, onlyPremium = 0, itemReward = {id = 4341}}, -- tesla staff, lvl 50, sorcerer {id = 5, level = 10, vocation = 5, onlyPremium = 0, itemReward = {id = 2981, count = 10}}, -- 10x crystal coin, lvl 10, all vocations {id = 6, level = 100, vocation = 5, onlyPremium = 0, itemReward = {id = 2981, count = 100}}, -- 100x crystal coin, lvl 100, all vocations } local fullRestore = true -- true - uzupelnianie HP/MP przy awansie -- false - wylaczenie opcji local congratzMSG = true -- true - wlaczenie animacji GRATZ przy awansie -- false - wylaczenie opcji
Nalezy edytowac wylacznie pojedyncze linie konfiguracji
Przykładowa linika z nagrodą:
WAŻNE - KAŻDA LINIA MUSI BYĆ ZAKOŃCZONA PRZECINKIEM!
{id = 1, prizeLVL = 50, vocation = 0, onlyPremium = 0, itemReward = {id = 3233, subtype = 0}},
id - unikalny klucz nagrody, kazda nagroda MUSI miec swoj unikalny identyfikator
level - nalezy wstawic poziom na ktorym gracz otrzyma nagrode
vocation - numer profesji (5 - kazdy gracz, 4 - knight, 3 - paladin, 2 - druid, 1 - sorcerer, 0 - brak profesji)
onlyPremium - decyduje czy nagroda jest dla wszystkich graczy, czy tylko z kontem premium (0 - wszyscy, 1 - tylko premium)
itemReward - definicja nagrody na danym poziomie - dla mniej doswiadczonych uzytkownikow zalecana jest jedynie zmiana ID przedmiotu
- bardziej zaawansowani gracze moga umieszczac tutaj cale zestawy nagrod (w plecakach)
- itemReward = 0, jeżeli gracz ma nie dostawac nagrody w postaci przedmiotow
|