Odpowiedz 
System Świątyń podnoszących exp serwera.
26-03-2011, 02:55 PM (Ten post był ostatnio modyfikowany: 31-03-2011 08:31 PM przez Miziak.)
Post: #1
System Świątyń podnoszących exp serwera.
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:
Kod PHP:
-- # 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:
Kod PHP:
local temples = {
        {
x=190y=406z=7}


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

W tablicy:
Kod PHP:
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:
Kod PHP:
<!-- 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.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
26-03-2011, 10:56 PM
Post: #2
RE: System Świątyń podnoszących exp serwera.
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"??
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
26-03-2011, 11:12 PM
Post: #3
RE: System Świątyń podnoszących exp serwera.
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.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
27-03-2011, 02:06 AM (Ten post był ostatnio modyfikowany: 27-03-2011 02:06 AM przez Meritus.)
Post: #4
RE: System Świątyń podnoszących exp serwera.
Kod PHP:
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.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
27-03-2011, 10:41 PM
Post: #5
RE: System Świątyń podnoszących exp serwera.
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
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
28-03-2011, 07:39 PM (Ten post był ostatnio modyfikowany: 28-03-2011 07:40 PM przez Iker.)
Post: #6
RE: System Świątyń podnoszących exp serwera.
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.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
28-03-2011, 09:34 PM
Post: #7
RE: System Świątyń podnoszących exp serwera.
Skrypt aktualny gotowy do testowania.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
28-03-2011, 09:40 PM
Post: #8
RE: System Świątyń podnoszących exp serwera.
Gdzie można to testować? Bo mam parę miesięcy w łóżku przez złamaną nogę to zająłbym się czymś.
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


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