Odpowiedz 
Nagradzanie gracza przy awansowaniu
08-05-2013, 11:31 PM
Post: #1
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(cidthing1pos1thing2pos2triggertext)
    
    -- 
#################################
    
-- ## 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 1prizeLVL 50vocation 0onlyPremium 0itemReward = {id 3233subtype 0}},
    -- 
id unikalny klucz nagrodykazda nagroda MUSI miec swoj unikalny identyfikator
    
-- level nalezy wstawic poziom na ktorym gracz otrzyma nagrode
    
-- vocation numer profesji (kazdy graczknightpaladindruidsorcererbrak profesji)
    -- 
onlyPremium decyduje czy nagroda jest dla wszystkich graczyczy tylko z kontem premium (wszyscytylko 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 0jeżeli gracz ma nie dostawac nagrody w postaci przedmiotow
    
    
-- #######################################################
    
-- ## PONIZSZY KOD EDYTUJESZ NA WLASNA ODPOWIEDZIALNOSC ##
    
-- #######################################################
        
    
local config = {
            {
id 1level 50vocation 4onlyPremium 0itemReward = {id 3233}}, -- bright swordlvl 50knight
            
{id 2level 50vocation 3onlyPremium 0itemReward = {id 4328}}, -- elite crossbowlvl 50paladyn
            
{id 3level 50vocation 2onlyPremium 0itemReward = {id 4341}}, -- tesla stafflvl 50druid    
            
{id 4level 50vocation 1onlyPremium 0itemReward = {id 4341}}, -- tesla stafflvl 50sorcerer
            
{id 5level 10vocation 5onlyPremium 0itemReward = {id 2981count 10}}, -- 10x crystal coinlvl 10all vocations
            
{id 6level 100vocation 5onlyPremium 0itemReward = {id 2981count 100}}, -- 100x crystal coinlvl 100all 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(cidrSV) < newLVL and (prize.vocation == getPlayerVocation(cid) or prize.vocation == 5) and (prize.onlyPremium == or (prize.onlyPremium == and getPlayerPACC(cid) >= 1)) then table.insert(trueConfigprizeend
    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(cidp.itemReward) ~= 0then
                    doPlayerSendTextMessage
(cid22"Congratz! You can find reward in your backpack.")
                    
log(cid"<lvlPrize.lua> Adding reward {"..p.id.."} items to player {"..getPlayerName(cid).."}")
                    
setPlayerStorageValue(cidrSVnewLVL)
                
end
            end            
        end
    
else
        --
doPlayerSendTextMessage(cid22"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,999999end
    end
    
    
-- ######################
    
-- ## CONGRATZ MESSAGE ##
    
-- ######################
    
    
if congratzMSG    == true then
        local ppos 
getPlayerPosition(cid)
        
        
local positions = {
            {
x=ppos.xy=ppos.yz=ppos.z},
            {
x=ppos.x-1y=ppos.y-1z=ppos.z},
            {
x=ppos.x-1y=ppos.yz=ppos.z},
            {
x=ppos.x-1y=ppos.y+1z=ppos.z},
            {
x=ppos.xy=ppos.y+1z=ppos.z},
            {
x=ppos.x+1y=ppos.y+1z=ppos.z},
            {
x=ppos.x+1y=ppos.yz=ppos.z},
            {
x=ppos.x+1y=ppos.y-1z=ppos.z},
            {
x=ppos.xy=ppos.y-1z=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 1level 50vocation 4onlyPremium 0itemReward = {id 3233}}, -- bright swordlvl 50knight
            
{id 2level 50vocation 3onlyPremium 0itemReward = {id 4328}}, -- elite crossbowlvl 50paladyn
            
{id 3level 50vocation 2onlyPremium 0itemReward = {id 4341}}, -- tesla stafflvl 50druid    
            
{id 4level 50vocation 1onlyPremium 0itemReward = {id 4341}}, -- tesla stafflvl 50sorcerer
            
{id 5level 10vocation 5onlyPremium 0itemReward = {id 2981count 10}}, -- 10x crystal coinlvl 10all vocations
            
{id 6level 100vocation 5onlyPremium 0itemReward = {id 2981count 100}}, -- 100x crystal coinlvl 100all 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
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości