JachuPL

char_bonus.quest

Nov 1st, 2013
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.39 KB | None | 0 0
  1. quest char_bonus begin
  2.     state start begin
  3.         function setting()
  4.             return{
  5.                 ["chrTytul"] = "System Gniewu",
  6.                 ["chrOpis1"] = "System Gniewu uaktywnia się, gdy Twoja postać osiąga określony poziom.",
  7.                 ["chrOpis2"] = "Twoja postać raz na dwie godziny może otrzymać losowy bonus na określony przedział czasu.",
  8.                
  9.                 --W tej tablicy trzymam ID bonusów, które ma dostać każda z klas
  10.                 ["chrJobBonusTable"] = {
  11.                
  12.                     [0] = {3, 4},   --Wojownik
  13.                     [1] = {4, 5},   --Ninja
  14.                     [2] = {5, 6},   --Sura
  15.                     [3] = {6, 3},   --Szaman
  16.                 },
  17.                
  18.                 --W tej tablicy trzymam czas trwania bonusu (w minutach)
  19.                 ["chrApplyDurationTable"] = {5, 10, 15, 30, 60},
  20.                
  21.                 --W tych tablicach trzymam wartości bonusów:
  22.                 ["chrStatValueTable"] = {1, 2, 4, 8, 16,},              --statystyk
  23.                 ["chrPercValueTable"] = {2, 4, 6, 8, 10, 12, 15,},      --procentowych
  24.                 ["chrDefAttValueTable"] = {15, 30, 45, 60,},            --obrona, atak, unik, odbicie
  25.                 ["chrhValueTable"] = {500, 1200, 1500, 2000, 2500,},    --max pż i pe
  26.                
  27.                 --W tych tablicach trzymam ID bonusów:
  28.                 ["chrPercBonusIDTable"] = {7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 59, 60, 61, 62, 63, 71, 72,},   --mających wartość wyrażaną w %
  29.                 ["chrStatIDTable"] = {3, 4, 5, 6,}, --statystyk
  30.                 ["chrDefAttIDTable"] = {53, 54,},   --obrony, ataku, uniku, odbicia
  31.                 ["chrhIDTable"] = {1, 2,},          --max pż i pe
  32.                
  33.                 --Ta funkcja steruje sposobem nadawania wartości bonusu. Jeśli jest ustawiona na 1, wartość jest obliczana ze wzoru przechowywanego w stałej computeValueSyntax, zaś jeśli jest 0 - jest losowana z tablicy
  34.                 ["isComputeValueMode"] = 0,        
  35.                
  36.                 --Tutaj jest wzór na wartość bonusu jeśli isComputeValueMode jest równe 1
  37.                 ["ComputeValueSyntax"] = math.ceil((pc.get_level() * (1/3)) + 9.75),
  38.                
  39.                 --Ta stała przechowuje czas po jakim znowu nadaje się bonusy
  40.                 ["chrNextBonusTime"] = 1*60*60*2,
  41.             }
  42.         end
  43.        
  44.         when login or letter or button or info or mount or unmount begin
  45.             --[[ Tego używałem do debugowania
  46.             test_chat(get_time().." != "..pc.getqf("next_bonus_time"))
  47.             test_chat("następny bonus za "..pc.getqf("next_bonus_time")-get_time().."s") ]]--
  48.            
  49.             if get_time() >= pc.getqf("next_bonus_time") then   --Jeśli można od nowa nadać bonus (dosł: czas serwera jest większy od wymaganego)
  50.                 local settings = char_bonus.setting()
  51.                 local bonus
  52.                 local wartosc
  53.                 local czas = settings.chrApplyDurationTable[number(1, table.getn(settings.chrApplyDurationTable))] * 60     --losuję sobie czas z tablicy i mnożę przez 60, czyli liczbę sekund w minucie
  54.                 for i = 1, table.getn(settings.chrJobBonusTable[pc.get_job()]) do       --pętla nadaje dwa bonusy
  55.                     bonus = settings.chrJobBonusTable[pc.get_job()][i] 
  56.                     if bonus == 0 then return end   --jeśli wartość bonusu wynosi 0 to pętla wraca.
  57.                     if settings.isComputeValueMode == 0 then    --jeśli tryb przeliczania wartości jest ustawiony na 0
  58.                         if table_is_in(settings.chrStatIDTable, bonus) then --jeśli w tablicy znajduje się bonus
  59.                             wartosc = settings.chrStatValueTable[number(1, table.getn(settings.chrStatValueTable))] --nadajemy wartość zgodną z typem bonusu
  60.                         end
  61.                        
  62.                         if table_is_in(settings.chrPercBonusIDTable, bonus) then    --powtórka z rozrywki
  63.                             wartosc = settings.chrPercValueTable[number(1, table.getn(settings.chrPercValueTable))] --powtórka z rozrywki
  64.                         end
  65.                        
  66.                         if table_is_in(settings.chrDefAttIDTable, bonus) then   --powtórka z rozrywki
  67.                             wartosc = settings.chrDefAttValueTable[number(1, table.getn(settings.chrDefAttValueTable))] --powtórka z rozrywki
  68.                         end
  69.                        
  70.                         if table_is_in(settings.chrhIDTable, bonus) then    --powtórka z rozrywki
  71.                             wartosc = settings.chrhValueTable[number(1, table.getn(settings.chrhValueTable))]   --powtórka z rozrywki
  72.                         end
  73.                     else    --a jeśli jednak jest 1 to
  74.                         wartosc = settings.ComputeValueSyntax   --liczymy wartość z odpowiedniego wzoru
  75.                         end
  76.                     affect.add_collect(tonumber(bonus), wartosc, czas)  --nadajemy bonus
  77.                     syschat("Twoja postać otrzymała bonus: "..bonus.." o wartości "..wartosc.." na okres czasu "..czas.." sekund.")
  78.                 end
  79.                 pc.setqf("next_bonus_time", get_time() + settings.chrNextBonusTime) --ustawiamy czas następnego nadania bonusów
  80.             end        
  81.         end
  82.     end
  83. end
Advertisement
Add Comment
Please, Sign In to add comment