• Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Ronit.GAMES RonEngine Support / Wsparcie dla RonEngine LUA/XML Scripting / Skryptowanie LUA/XML Nagradzanie gracza przy awansowaniu

 
  • 0 Vote(s) - 0 Average
Nagradzanie gracza przy awansowaniu
czarnowidz
Offline

Uzytkownik
Posts: 11
Threads: 6
Joined: Jun 2010
Reputation: 0
#1
08-05-2013, 11:31 PM
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:
PHP Code:
-- ###################################################
-- ## 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:
PHP Code:
<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
PHP Code:
SV_QUESTS = {
                             (...) 
jakiś kod
    
--(...)---
} 

i dodać po tym: (pamiętając o zmianie SV na wolne
PHP Code:
SV_TRIGGERS = {
    [
"REWARD_ON_LEVEL"] = 11000,
} 
Jeżeli mamy już SV_TRIGGERS w pliku global.lua, należy jedynie skopiować identyfikatory.

II. Konfiguracja
PHP Code:
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, on‌lyPremium = 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
« Next Oldest | Next Newest »

Users browsing this thread: 1 Guest(s)



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Designed by D&D - Powered by MyBB

Linear Mode
Threaded Mode