• Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Ronit.GAMES RonEngine Support / Wsparcie dla RonEngine LUA/XML Scripting / Skryptowanie LUA/XML System Świątyń podnoszących exp serwera.

 
  • 0 Vote(s) - 0 Average
System Świątyń podnoszących exp serwera.
Miziak
Offline

Programmer C++ / LUA / PHP
Posts: 3
Threads: 2
Joined: Feb 2011
Reputation: 0
#1
26-03-2011, 02:55 PM (This post was last modified: 31-03-2011, 08:31 PM by Miziak.)
Witam,

System polegający na rzucaniu `bogom` w ofierze przedmiotów od ilości wrzuconych przedmiotów zależy o ile % zostanie zwiększony exprate servera.

Implementacja:
Do data/actions/scripts/triggers dodajemy plik templesys.lua i uzupełniamy go tym:
PHP Code:
-- # Author: Paweł Mizio
-- # Version: 1.0
-- # Name: Temple System
-- # Date: 26.03.2011r

local temples = {
        {
x=190, y=406, z=7}
}

local items = {
        {
itemid=2973, power=0.001},
        {
itemid=2969, power=0.0001}
}

local arrs = {
    {{
1, 0, 1},
     {
0, 0, 0},
     {
1, 0, 1}},
    {{
0, 1, 0},
     {
1, 0, 1},
     {
0, 1, 0}}
}
    
local eff = {ME_GIANTICE, ME_FIREATTACK, ME_BIGPLANTS, ME_ENERGYHIT}

-- 
local lib start
GV_DAY 
= 1000
GV_ITEMID 
= 1001
GV_DONATES_COUNT 
= 1002
--GVS_TOP_DONATORS = {1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012}
GV_DONATES_COUNT_OLD = 1013
-- local lib end

local 
function getItemTemplePower(id, tbl)
    for 
_,v in pairs(tbl) do
        if(
v.itemid == id)then
            
return v.power
        end
    end
return 0
end

function onTrigger(cid, baseitem, topos, moveitem, _, trigger, text)
    if(
trigger.id == 49)then
        local day 
= tonumber(os.date("*t")["wday"])
        if(
getGlobalValue(GV_DAY) ~= day)then
            setGlobalValue
(GV_DAY, day)
            
setGlobalValue(GV_DONATES_COUNT_OLD, getGlobalValue(GV_DONATES_COUNT))
            
local prec = getGlobalValue(GV_DONATES_COUNT_OLD)*getItemTemplePower(getGlobalValue(GV_ITEMID), items)
            
local confexp = getServerGlobalExp()
            
setServerExp(confexp + ((confexp*prec)/100))
            
setGlobalValue(GV_DONATES_COUNT, 0)
            
local rand = items[math.random(1, #items)]
            
setGlobalValue(GV_ITEMID, rand.itemid)
        
end

        
for _,v in pairs(temples) do
            if(
v.x == topos.x and v.y == topos.y and v.z == topos.z)then
                
if(getGlobalValue(GV_ITEMID) == moveitem.itemid)then
                    local dc 
= getGlobalValue(GV_DONATES_COUNT)
                    if(
dc <= 0)then
                        setGlobalValue
(GV_DONATES_COUNT, 1)
                    else
                        
setGlobalValue(GV_DONATES_COUNT, dc+1)
                    
end
                    
                    local sv 
= getPlayerStorageValue(cid, SV_TEMPLE_SYS)
                    if(
sv <= 0)then
                        setPlayerStorageValue
(cid, SV_TEMPLE_SYS, 1)
                    else
                        
setPlayerStorageValue(cid, SV_TEMPLE_SYS, sv+1)
                    
end
                    
                    
--[[local save = {}
                    for 
i=1, 9, 2 do
                        
table.insert(save, {getGlobalValue(GVS_TOP_DONATORS[i]), getGlobalValue(GVS_TOP_DONATORS[i+1])})
                    
end
                    
                    local bool 
= false
                    
for i,_ in pairs(save) do
                        if(
save[i][1] == getPlayerGUID(cid))then
                            save
[i][2] = sv + 1
                            bool 
= false
                            
break
                        else
                            
bool = true
                        end
                    end
                    
                    
if(bool)then
                        table
.insert(save, {getPlayerGUID(cid), sv+1})
                    
end
                    
                    table
.sort(save, function(a,b) return a[2]>b[2] end)
                    
                    
local c = 1
                    
for i=1, 9, 2 do
                        
setGlobalValue(GVS_TOP_DONATORS[i], save[c][1])
                        
setGlobalValue(GVS_TOP_DONATORS[i+1], save[c][2])
                        
c = c+1
                    end
]]
                    
                    
addEvent(function()
                                
doRemoveItem(moveitem.uid, moveitem.type)
                                
doSendMagicEffect(topos, ME_HITBYFIRE)
                                
doSendMagicEffect(topos, ME_HOLYAREA)
                                
doSendAnimatedText({x=topos.x-1, y=topos.y, z=topos.z}, 'Dziekuje', YELLOW)
                                
doSendAnimatedText(topos, 'za', YELLOW)
                                
doSendAnimatedText({x=topos.x+1, y=topos.y, z=topos.z}, 'dary!', YELLOW)
                                
doPlayerSendTextMessage(cid, 22, 'Dziekujemy za ' .. getItemName(cid, getGlobalValue(GV_ITEMID)) .. "!")
                             
end, 4500, nil)
                    for 
n = 0, 3 do
                        if(
n%2 == 0)then
                            addEvent
(function()
                                
doSendMagicEffectInArea(topos, eff[n+1], arrs[1])
                            
end, n*1000, nil)
                        else
                            
addEvent(function()
                                
doSendMagicEffectInArea(topos, eff[n+1], arrs[2])
                            
end, n*1000, nil)
                        
end
                    end
                
else
                    
doSendAnimatedText({x=topos.x-1, y=topos.y, z=topos.z}, 'Nie', YELLOW)
                    
doSendAnimatedText(topos, 'chce', YELLOW)
                    
doSendAnimatedText({x=topos.x+1, y=topos.y, z=topos.z}, 'tego!', YELLOW)
                    
doRemoveItem(moveitem.uid, moveitem.type)
                    
doPlayerAddItem(cid, moveitem.itemid, 1, moveitem.type)
                    
doSendMagicEffect(topos, ME_MORTAREA)
                    
doPlayerSendTextMessage(cid, 22, 'Dzis oczekujemy ' .. getItemName(cid, getGlobalValue(GV_ITEMID)) .. '! A nie ' .. getItemName(cid, moveitem.itemid) .. "!")
                
end
                
break
            
end
        end
    
elseif(trigger.id == 50)then
            local prec 
= getGlobalValue(GV_DONATES_COUNT_OLD)*getItemTemplePower(getGlobalValue(GV_ITEMID), items)
            
local confexp = getServerGlobalExp()
            
setServerExp(confexp + ((confexp*prec)/100))
    elseif(
trigger.id == 51)then
        local day 
= tonumber(os.date("*t")["wday"])
        if(
getGlobalValue(GV_DAY) ~= day)then
            setGlobalValue
(GV_DAY, day)
            
setGlobalValue(GV_DONATES_COUNT_OLD, getGlobalValue(GV_DONATES_COUNT))
            
local prec = getGlobalValue(GV_DONATES_COUNT_OLD)*getItemTemplePower(getGlobalValue(GV_ITEMID), items)
            
local confexp = getServerGlobalExp()
            
setServerExp(confexp + ((confexp*prec)/100))
            
setGlobalValue(GV_DONATES_COUNT, 0)
            
local rand = items[math.random(1, #items)]
            
setGlobalValue(GV_ITEMID, rand.itemid)
        
end
        
if(isPlayer(cid) == 1)then
            local text 
= 'Dzis Bogowie oczekuja od nas ' .. getItemName(cid, getGlobalValue(GV_ITEMID)) .. '. Zlozylismy juz ' .. getGlobalValue(GV_DONATES_COUNT) .. ' ofiar.'
            
doPlayerSendTextMessage(cid, 22, text)
        
end
    end
return 1
end 

W tablicy:
PHP Code:
local temples = {
        {
x=190, y=406, z=7}
} 

Definiujemy wszystkie ołtarze na których będą składane ofiary.

W tablicy:
PHP Code:
local items = {
        {
itemid=2973, power=0.001},
        {
itemid=2969, power=0.0001}
} 
Definiujemy jakie przedmioty mają być losowane do składania ofiar.
  • itemid to oczywiście ID przedmiotu.
  • power to współczynnik obliczający o ile procent zwiększony bd exp rate, liczony według wzoru: liczba_darowanych_przedmiotów * współczynnik = procent zwiększający exp

Po skonfigurowaniu skryptu dodajemy wpis do triggers.xml:
PHP Code:
<!-- Temple System Start -->
    <
trigger id="Proszę_podać_id_triggera" type="ON_ITEMTHROW" script="triggers/templesys.lua">
        <
item itemid="ID_outarza_na_który_rzucamy" />
    </
trigger>
    <
trigger id="Proszę_podać_id_triggera" type="ON_SERVERSTART" script="triggers/templesys.lua" />
    <
trigger id="Proszę_podać_id_triggera" type="ON_SAY" script="triggers/templesys.lua">
        <
say id="1" words="!donates" />
    </
trigger>
<!-- 
Temple System Stop --> 

Dodałem komendę !donates sprawdza ona jaki item dziś przyjmują `bogowie` oraz skrypt startowy który ustawia exp z przed ewentualnego crasha.

To chyba wszystko,
Pozdrawiam.
Iker
Offline

Uzytkownik

Posts: 3
Threads: 0
Joined: Jul 2010
Reputation: 0
#2
26-03-2011, 10:56 PM
Jak wygląda ten efekt z tym tekstem? "Dziękuje za ofiary "? xD Żart.
Nie, a tak serio to na jaki 'okres' czasu będzie zwiększony exp?
Powinno to być uzależnione od wartości przedmiotu, wtedy może być bardziej atrakcyjny.
Bo to jest na "dni"??
Radhez92
Offline

Uzytkownik

Posts: 4
Threads: 0
Joined: Dec 2010
Reputation: 0
#3
26-03-2011, 11:12 PM
Nie testowałem jeszcze tego ale może dzisiaj prze testuje, ja bym to proponował na godziny i tak jak iker napisał w zależności od item że im lepszy item tym większy czas(godziny,minuty) i więcej expa.
Meritus
Offline

Uzytkownik

Posts: 28
Threads: 19
Joined: Jun 2010
Reputation: 4
#4
27-03-2011, 02:06 AM (This post was last modified: 27-03-2011, 02:06 AM by Meritus.)
PHP Code:
local items = {
        {
itemid=2973, power=0.001},
        {
itemid=2969, power=0.0001}
} 
Jest uzależnione od przedmiotu. Na razie nie wprowadzajcie tego, jutro Miziak będzie jeszcze poprawiał ten tutorial i doda pare opcji.
Radhez92
Offline

Uzytkownik

Posts: 4
Threads: 0
Joined: Dec 2010
Reputation: 0
#5
27-03-2011, 10:41 PM
Na początku nie zrozumiałem tego ale teraz przeczytałem znowu tytuł tematu i według mnie to trochę nie ogarnięte jak dobrze zrozumiałem to ten skrypt ma podnosić exp dla całego serwera ? Lepiej to zrobić że podnosi exp dla osoby która składa te itemy na ołtarzu taka propozycja
Iker
Offline

Uzytkownik

Posts: 3
Threads: 0
Joined: Jul 2010
Reputation: 0
#6
28-03-2011, 07:39 PM (This post was last modified: 28-03-2011, 07:40 PM by Iker.)
Nie bo to by było trochę nie sprawiedliwe ... lepszy gracz, lepsze itemy, większy będzie mieć exp i będzie szybciej expił niż gracz z mniejszym poziomem.

Trzeba trochę pomyśleć. Graczom by to nie pasowało.
Miziak
Offline

Programmer C++ / LUA / PHP
Posts: 3
Threads: 2
Joined: Feb 2011
Reputation: 0
#7
28-03-2011, 09:34 PM
Skrypt aktualny gotowy do testowania.
Iker
Offline

Uzytkownik

Posts: 3
Threads: 0
Joined: Jul 2010
Reputation: 0
#8
28-03-2011, 09:40 PM
Gdzie można to testować? Bo mam parę miesięcy w łóżku przez złamaną nogę to zająłbym się czymś.
« 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