Ronit.GAMES
System Świątyń podnoszących exp serwera. - Printable Version

+- Ronit.GAMES (https://forum.ronit.games)
+-- Forum: RonEngine Support / Wsparcie dla RonEngine (https://forum.ronit.games/forumdisplay.php?fid=18)
+--- Forum: LUA/XML Scripting / Skryptowanie LUA/XML (https://forum.ronit.games/forumdisplay.php?fid=22)
+--- Thread: System Świątyń podnoszących exp serwera. (/showthread.php?tid=268)



System Świątyń podnoszących exp serwera. - Miziak - 26-03-2011

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=190y=406z=7}
}

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

local arrs = {
    {{
101},
     {
000},
     {
101}},
    {{
010},
     {
101},
     {
010}}
}
    
local eff = {ME_GIANTICEME_FIREATTACKME_BIGPLANTSME_ENERGYHIT}

-- 
local lib start
GV_DAY 
1000
GV_ITEMID 
1001
GV_DONATES_COUNT 
1002
--GVS_TOP_DONATORS = {1003100410051006100710081009101010111012}
GV_DONATES_COUNT_OLD 1013
-- local lib end

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

function onTrigger(cidbaseitemtoposmoveitem_triggertext)
    if(
trigger.id == 49)then
        local day 
tonumber(os.date("*t")["wday"])
        if(
getGlobalValue(GV_DAY) ~= day)then
            setGlobalValue
(GV_DAYday)
            
setGlobalValue(GV_DONATES_COUNT_OLDgetGlobalValue(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_COUNT0)
            
local rand items[math.random(1#items)]
            
setGlobalValue(GV_ITEMIDrand.itemid)
        
end

        
for _,v in pairs(temples) do
            if(
v.== topos.and v.== topos.and v.== topos.z)then
                
if(getGlobalValue(GV_ITEMID) == moveitem.itemid)then
                    local dc 
getGlobalValue(GV_DONATES_COUNT)
                    if(
dc <= 0)then
                        setGlobalValue
(GV_DONATES_COUNT1)
                    else
                        
setGlobalValue(GV_DONATES_COUNTdc+1)
                    
end
                    
                    local sv 
getPlayerStorageValue(cidSV_TEMPLE_SYS)
                    if(
sv <= 0)then
                        setPlayerStorageValue
(cidSV_TEMPLE_SYS1)
                    else
                        
setPlayerStorageValue(cidSV_TEMPLE_SYSsv+1)
                    
end
                    
                    
--[[local save = {}
                    for 
i=19do
                        
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[2end)
                    
                    
local c 1
                    
for i=19do
                        
setGlobalValue(GVS_TOP_DONATORS[i], save[c][1])
                        
setGlobalValue(GVS_TOP_DONATORS[i+1], save[c][2])
                        
c+1
                    end
]]
                    
                    
addEvent(function()
                                
doRemoveItem(moveitem.uidmoveitem.type)
                                
doSendMagicEffect(toposME_HITBYFIRE)
                                
doSendMagicEffect(toposME_HOLYAREA)
                                
doSendAnimatedText({x=topos.x-1y=topos.yz=topos.z}, 'Dziekuje'YELLOW)
                                
doSendAnimatedText(topos'za'YELLOW)
                                
doSendAnimatedText({x=topos.x+1y=topos.yz=topos.z}, 'dary!'YELLOW)
                                
doPlayerSendTextMessage(cid22'Dziekujemy za ' .. getItemName(cidgetGlobalValue(GV_ITEMID)) .. "!")
                             
end4500nil)
                    for 
0do
                        if(
n%== 0)then
                            addEvent
(function()
                                
doSendMagicEffectInArea(toposeff[n+1], arrs[1])
                            
endn*1000nil)
                        else
                            
addEvent(function()
                                
doSendMagicEffectInArea(toposeff[n+1], arrs[2])
                            
endn*1000nil)
                        
end
                    end
                
else
                    
doSendAnimatedText({x=topos.x-1y=topos.yz=topos.z}, 'Nie'YELLOW)
                    
doSendAnimatedText(topos'chce'YELLOW)
                    
doSendAnimatedText({x=topos.x+1y=topos.yz=topos.z}, 'tego!'YELLOW)
                    
doRemoveItem(moveitem.uidmoveitem.type)
                    
doPlayerAddItem(cidmoveitem.itemid1moveitem.type)
                    
doSendMagicEffect(toposME_MORTAREA)
                    
doPlayerSendTextMessage(cid22'Dzis oczekujemy ' .. getItemName(cidgetGlobalValue(GV_ITEMID)) .. '! A nie ' .. getItemName(cidmoveitem.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_DAYday)
            
setGlobalValue(GV_DONATES_COUNT_OLDgetGlobalValue(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_COUNT0)
            
local rand items[math.random(1#items)]
            
setGlobalValue(GV_ITEMIDrand.itemid)
        
end
        
if(isPlayer(cid) == 1)then
            local text 
'Dzis Bogowie oczekuja od nas ' .. getItemName(cidgetGlobalValue(GV_ITEMID)) .. '. Zlozylismy juz ' .. getGlobalValue(GV_DONATES_COUNT) .. ' ofiar.'
            
doPlayerSendTextMessage(cid22text)
        
end
    end
return 1
end 

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


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

W tablicy:
PHP Code:
local items = {
        {
itemid=2973power=0.001},
        {
itemid=2969power=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.


RE: System Świątyń podnoszących exp serwera. - Iker - 26-03-2011

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"??


RE: System Świątyń podnoszących exp serwera. - Radhez92 - 26-03-2011

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.


RE: System Świątyń podnoszących exp serwera. - Meritus - 27-03-2011

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

Jest uzależnione od przedmiotu. Na razie nie wprowadzajcie tego, jutro Miziak będzie jeszcze poprawiał ten tutorial i doda pare opcji.


RE: System Świątyń podnoszących exp serwera. - Radhez92 - 27-03-2011

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


RE: System Świątyń podnoszących exp serwera. - Iker - 28-03-2011

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.


RE: System Świątyń podnoszących exp serwera. - Miziak - 28-03-2011

Skrypt aktualny gotowy do testowania.


RE: System Świątyń podnoszących exp serwera. - Iker - 28-03-2011

Gdzie można to testować? Bo mam parę miesięcy w łóżku przez złamaną nogę to zająłbym się czymś.