Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------------------
- -- Metin2 Balmora.pl
- -- Achievements System by Bambus3k
- -- System Osiągnięć.
- ----------------------------------------------------
- quest achievements begin
- state start begin
- when login begin
- local chVnum = 0
- achievements.SaveChallenge(chVnum) -- // Wyzwanie_00 // Pierwsze Logowanie //
- achievements.LoadStats()
- achievements.LoadRank()
- loop_timer('OnUpdateAchiev',10.0) -- // Update na wyzwania //
- loop_timer('OnUpdateMeters',1.0) -- // Update na metry // (Informacja: Na Balmora.pl, 1k+ graczy i nie było problemów. Nie wpływa to na wydajność gry.)
- end
- when OnUpdateAchiev.timer begin
- --when login or levelup begin
- local Setting = achievements.Setting()
- if pc.hasguild() and achievements.ChallengeIsGranted(25) == 1 then achievements.SaveChallenge(25)
- elseif pc.is_guild_master() and guild.level(pc.get_guild()) >= Setting.GuildUP[1] and achievements.ChallengeIsGranted(26) == 1 then achievements.SaveChallenge(26)
- elseif pc.is_guild_master() and guild.level(pc.get_guild()) >= Setting.GuildUP[2] and achievements.ChallengeIsGranted(27) == 1 then achievements.SaveChallenge(27)
- elseif pc.is_married() and achievements.ChallengeIsGranted(28) == 1 then achievements.SaveChallenge(28)
- elseif pc.get_alignment() >= Setting.Rank.Przyjazny[1] and pc.get_alignment() < Setting.Rank.Przyjazny[2] and achievements.ChallengeIsGranted(29) == 1 then achievements.SaveChallenge(29)
- elseif pc.get_alignment() >= Setting.Rank.Szlachetny[1] and pc.get_alignment() < Setting.Rank.Szlachetny[2] and achievements.ChallengeIsGranted(30) == 1 then achievements.SaveChallenge(30)
- elseif pc.get_alignment() >= Setting.Rank.Maksymalna and achievements.ChallengeIsGranted(31) == 1 then achievements.SaveChallenge(31)
- elseif pc.get_playtime() >= Setting.PlayTime[1] and achievements.ChallengeIsGranted(32) == 1 then achievements.SaveChallenge(32)
- elseif pc.get_playtime() >= Setting.PlayTime[2] and achievements.ChallengeIsGranted(33) == 1 then achievements.SaveChallenge(33)
- elseif pc.get_playtime() >= Setting.PlayTime[3] and achievements.ChallengeIsGranted(34) == 1 then achievements.SaveChallenge(34)
- end
- end
- when OnUpdateMeters.timer begin
- local Setting = achievements.Setting()
- local Xa, Ya, Xb, Yb = pc.getqf("player_x"), pc.getqf("player_y"), pc.get_local_x(), pc.get_local_y()
- pc.setqf("player_x",Xb)
- pc.setqf("player_y",Yb)
- local dystans = math.floor(math.sqrt(math.pow(Xb-Xa,2)+math.pow(Yb-Ya,2)))
- if horse.is_riding() != 0 then
- local km = pc.getqf("KmKonno")+dystans
- pc.setqf("KmKonno",km)
- cmdchat("stats_save 7|"..km)
- if pc.get_level() >= 60 and km >= Setting.Move.Konno[1] and achievements.ChallengeIsGranted(38) == 1 then achievements.SaveChallenge(38)
- elseif pc.get_level() >= 60 and km >= Setting.Move.Konno[2] and achievements.ChallengeIsGranted(39) == 1 then achievements.SaveChallenge(39)
- elseif pc.get_level() >= 60 and km >= Setting.Move.Konno[3] and achievements.ChallengeIsGranted(40) == 1 then achievements.SaveChallenge(40)
- end
- elseif pc.is_mount() then
- local km = pc.getqf("KmWierz")+dystans
- pc.setqf("KmWierz",km)
- cmdchat("stats_save 8|"..km)
- if pc.get_level() >= 60 and km >= Setting.Move.Wierzchem[1] and achievements.ChallengeIsGranted(41) == 1 then achievements.SaveChallenge(41)
- elseif pc.get_level() >= 60 and km >= Setting.Move.Wierzchem[2] and achievements.ChallengeIsGranted(42) == 1 then achievements.SaveChallenge(42)
- elseif pc.get_level() >= 60 and km >= Setting.Move.Wierzchem[3] and achievements.ChallengeIsGranted(43) == 1 then achievements.SaveChallenge(43)
- end
- else
- local km = pc.getqf("KmPieszo")+dystans
- pc.setqf("KmPieszo",km)
- cmdchat("stats_save 6|"..km)
- if pc.get_level() >= 60 and km >= Setting.Move.Pieszo[1] and achievements.ChallengeIsGranted(35) == 1 then achievements.SaveChallenge(35)
- elseif pc.get_level() >= 60 and km >= Setting.Move.Pieszo[2] and achievements.ChallengeIsGranted(36) == 1 then achievements.SaveChallenge(36)
- elseif pc.get_level() >= 60 and km >= Setting.Move.Pieszo[3] and achievements.ChallengeIsGranted(37) == 1 then achievements.SaveChallenge(37)
- end
- end
- end
- when login or levelup begin -- // Dodałem login, bo levelup nie wykona się, gdy zdobędziemy poziom questem pc.give_exp() //
- local Setting = achievements.Setting()
- local level = pc.get_level()
- if level == Setting.LevelUp[1] and achievements.ChallengeIsGranted(16) == 1 then achievements.SaveChallenge(16)
- elseif level == Setting.LevelUp[2] and achievements.ChallengeIsGranted(17) == 1 then achievements.SaveChallenge(17)
- elseif level == Setting.LevelUp[3] and achievements.ChallengeIsGranted(18) == 1 then achievements.SaveChallenge(18)
- elseif level == Setting.LevelUp[4] and achievements.ChallengeIsGranted(19) == 1 then achievements.SaveChallenge(19)
- elseif level == Setting.LevelUp[5] and achievements.ChallengeIsGranted(20) == 1 then achievements.SaveChallenge(20)
- elseif level == Setting.LevelUp[6] and achievements.ChallengeIsGranted(21) == 1 then achievements.SaveChallenge(21)
- elseif level == Setting.LevelUp[7] and achievements.ChallengeIsGranted(22) == 1 then achievements.SaveChallenge(22)
- elseif level == Setting.LevelUp[8] and achievements.ChallengeIsGranted(23) == 1 then achievements.SaveChallenge(23)
- elseif level == Setting.LevelUp[9] and achievements.ChallengeIsGranted(24) == 1 then achievements.SaveChallenge(24)
- end
- end
- when fish begin -- // Event dopisany w Source //
- local Setting = achievements.Setting()
- local count = pc.getqf("fish")+1 -- // Licznik // Złowione ryby //
- pc.setqf("fish",count)
- if count >= Setting.Fish[1] and achievements.ChallengeIsGranted(44) == 1 then achievements.SaveChallenge(44)
- elseif count >= Setting.Fish[2] and achievements.ChallengeIsGranted(45) == 1 then achievements.SaveChallenge(45)
- elseif count >= Setting.Fish[3] and achievements.ChallengeIsGranted(46) == 1 then achievements.SaveChallenge(46)
- end
- end
- when kill begin
- local Setting = achievements.Setting()
- if npc.is_pc() and npc.empire != pc.get_empire() then -- // Licznik // Zabici z obcego królestwa //
- local count = pc.getqf("otherEmpire")+1
- pc.setqf("otherEmpire",count)
- cmdchat("stats_save 4|"..count)
- if count >= Setting.Kill.Player[1] and achievements.ChallengeIsGranted(13) == 1 then achievements.SaveChallenge(13)
- elseif count >= Setting.Kill.Player[2] and achievements.ChallengeIsGranted(14) == 1 then achievements.SaveChallenge(14)
- elseif count >= Setting.Kill.Player[3] and achievements.ChallengeIsGranted(15) == 1 then achievements.SaveChallenge(15)
- end
- elseif npc.is_pc() and npc.empire == pc.get_empire() then -- // Licznik // Zabici z swojego królestwa //
- local count = pc.getqf("sameEmpire")+1
- pc.setqf("sameEmpire",count)
- cmdchat("stats_save 5|"..pc.getqf("sameEmpire"))
- if count >= Setting.Kill.Player[1] and achievements.ChallengeIsGranted(10) == 1 then achievements.SaveChallenge(10)
- elseif count >= Setting.Kill.Player[2] and achievements.ChallengeIsGranted(11) == 1 then achievements.SaveChallenge(11)
- elseif count >= Setting.Kill.Player[3] and achievements.ChallengeIsGranted(12) == 1 then achievements.SaveChallenge(12)
- end
- elseif not npc.is_pc() and achievements.IsBoss(npc.get_race()) then -- // Licznik // Zabite bossy //
- local Setting = achievements.Setting()
- local count = pc.getqf("bossy")+1
- local m_sex = pc.get_sex()
- local mobRace = npc.get_race()
- pc.setqf("bossy",count)
- cmdchat("stats_save 3|"..count)
- achievements.setCoin(2)
- if count >= Setting.Kill.Boss[1] and achievements.ChallengeIsGranted(4) == 1 then achievements.SaveChallenge(4)
- elseif count >= Setting.Kill.Boss[2] and achievements.ChallengeIsGranted(5) == 1 then achievements.SaveChallenge(5)
- elseif count >= Setting.Kill.Boss[3] and achievements.ChallengeIsGranted(6) == 1 then achievements.SaveChallenge(6)
- end
- if m_sex == 0 then
- notice_all("[CH"..pc.get_channel_id().."] ~~> "..pc.get_name().." [Lv."..pc.get_level().."] zabił Boss'a "..mob_name(mobRace).."!")
- else
- notice_all("[CH"..pc.get_channel_id().."] ~~> "..pc.get_name().." [Lv."..pc.get_level().."] zabiła Boss'a "..mob_name(mobRace).."!")
- end
- elseif not npc.is_pc() and npc.get_race() >= 8001 and npc.get_race() <= 8064 then -- // Licznik // Zniszczone Metiny //
- local count = pc.getqf("metiny")+1
- pc.setqf("metiny",count)
- cmdchat("stats_save 2|"..count)
- achievements.setCoin(1)
- if count >= Setting.Kill.Metin[1] and achievements.ChallengeIsGranted(7) == 1 then achievements.SaveChallenge(7)
- elseif count >= Setting.Kill.Metin[2] and achievements.ChallengeIsGranted(8) == 1 then achievements.SaveChallenge(8)
- elseif count >= Setting.Kill.Metin[3] and achievements.ChallengeIsGranted(9) == 1 then achievements.SaveChallenge(9)
- end
- else -- // Licznik // Zabite potwory //
- local count = pc.getqf("moby")+1
- pc.setqf("moby",count)
- cmdchat("stats_save 1|"..count)
- if count >= Setting.Kill.Mob[1] and achievements.ChallengeIsGranted(1) == 1 then achievements.SaveChallenge(1)
- elseif count >= Setting.Kill.Mob[2] and achievements.ChallengeIsGranted(2) == 1 then achievements.SaveChallenge(2)
- elseif count >= Setting.Kill.Mob[3] and achievements.ChallengeIsGranted(3) == 1 then achievements.SaveChallenge(3)
- end
- end
- end
- when 20007.chat."(GM): Add Premium Coin" with pc.is_gm() begin -- GM Support
- say_title(mob_name(20007).."v2:")
- say("Hi, GameMaster!")
- say("How much Premium Coin you want?")
- say("")
- achievements.setCoin(input())
- end
- function setCoin(value)
- local coin = pc.getqf("points")+value
- pc.setqf("points",coin)
- cmdchat("SetPremiumCoin "..coin)
- end
- function LoadStats()
- local Setting = achievements.Setting()
- cmdchat("SetPremiumCoin "..pc.getqf("points"))
- cmdchat("stats_save 0|"..pc.getqf("moby").."|"..pc.getqf("metiny").."|"..pc.getqf("bossy").."|"..pc.getqf("otherEmpire").."|"..pc.getqf("sameEmpire").."|"..pc.getqf("KmPieszo").."|"..pc.getqf("KmKonno").."|"..pc.getqf("KmWierz")) -- moby,metiny,boss,obce,swoje,kmPieszo,kmKonno,KmWierzchiem
- for i = 0, 57 do
- if pc.getqf(Setting.QuestFlag[i][1]) > 0 then
- cmdchat("achievementHighlight "..i)
- end
- end
- end
- function LoadRank()
- local tablica = tablica("/home/mserv/system/RANK")
- -- load rank player
- local data = "1._Lv."..tablica[1].."_"..tablica[2].."|2._Lv."..tablica[3].."_"..tablica[4].."|3._Lv."..tablica[5].."_"..tablica[6].."|4._Lv."..tablica[7].."_"..tablica[8].."|5._Lv."..tablica[9].."_"..tablica[10].."|6._Lv."..tablica[11].."_"..tablica[12].."|7._Lv."..tablica[13].."_"..tablica[14].."|8._Lv."..tablica[15].."_"..tablica[16].."|9._Lv."..tablica[17].."_"..tablica[18]
- cmdchat("setRankedPlayerData "..data)
- -- lodd rank guild
- local data = "1._Lv."..tablica[22].."_"..tablica[23].."|2._Lv."..tablica[24].."_"..tablica[25].."|3._Lv."..tablica[26].."_"..tablica[27].."|4._Lv."..tablica[28].."_"..tablica[29].."|5._Lv."..tablica[30].."_"..tablica[31].."|6._Lv."..tablica[32].."_"..tablica[33].."|7._Lv."..tablica[34].."_"..tablica[35].."|8._Lv."..tablica[36].."_"..tablica[37].."|9._Lv."..tablica[38].."_"..tablica[39]
- cmdchat("setRankedGuildData "..data)
- end
- function SaveChallenge(chVnum)
- local Setting = achievements.Setting()
- local flag =Setting.QuestFlag[chVnum][1]
- if pc.getqf(flag) > 0 then return end -- // Blokada Multi Zadań //
- pc.setqf(flag,1)
- pc.send_effect_packet(25) -- // Specjalny Efekt Wykonanego Zadania //
- cmdchat("achievementHighlight "..chVnum)
- cmdchat("showPopUp 9|"..Setting.Tytul[chVnum]) -- 9|Tytul (9 - typ PopUp'a)
- achievements.setCoin(Setting.Punkty[chVnum])
- end
- function ChallengeIsGranted(chNum)
- local Setting = achievements.Setting()
- if pc.getqf(Setting.QuestFlag[chNum][1]) ~= 1 and Setting.QuestFlag[chNum][2] == 1 then -- // Sprawdzanie // Niewykonane i aktywne = przyznane. //
- return 1
- else
- return 0
- end
- end
- function IsBoss(npcRace)
- local tabBoss = {2206,2307,1304,691,1901,993,2091,2191,2291,792,1192,2092,2492,5002,2100,3590,3090,3290,3890,3390,3595,3190,3790,3490,3690,3902,3091,3291,3191,3891,3391,3596,3791,3591,3491,3691,6391,6392,6407,6408}
- for i=1, table.getn(tabBoss) do
- if npcRace == tabBoss[i] then
- return true
- end
- end
- return false
- end
- function Setting()
- return
- {
- ['Tytul'] = { -- Tytuły Zadań. Odstęp w kliencie to: _ (podłoga)
- [0] = "Pierwsze_Logowanie,_Gratulujemy!",
- [1] = "Wieczna_wojna,_Gratulujemy!",
- [2] = "Wieczna_wojna,_Gratulujemy!",
- [3] = "Wieczna_wojna,_Gratulujemy!",
- [4] = "Wielcy_muszą_odejść,_Gratulujemy!",
- [5] = "Wielcy_muszą_odejść,_Gratulujemy!",
- [6] = "Wielcy_muszą_odejść,_Gratulujemy!",
- [7] = "Deszcz_Przeklętych_Kamieni,_Gratulujemy!",
- [8] = "Deszcz_Przeklętych_Kamieni,_Gratulujemy!",
- [9] = "Deszcz_Przeklętych_Kamieni,_Gratulujemy!",
- [10] = "Zimna_wojna,_Gratulujemy!",
- [11] = "Zimna_wojna,_Gratulujemy!",
- [12] = "Zimna_wojna,_Gratulujemy!",
- [13] = "Wróg_u_bram,_Gratulujemy!",
- [14] = "Wróg_u_bram,_Gratulujemy!",
- [15] = "Wróg_u_bram,_Gratulujemy!",
- [16] = "Amator,_Gratulujemy!",
- [17] = "Początkujący,_Gratulujemy!",
- [18] = "Profesjonalista,_Gratulujemy!",
- [19] = "Ekspert,_Gratulujemy!",
- [20] = "Maniak_expa!,_Gratulujemy!",
- [21] = "Światowy_mistrz,_Gratulujemy!",
- [22] = "Królewski_poziom,_Gratulujemy!",
- [23] = "Zostań_legendą,_Gratulujemy!",
- [24] = "Maniak_expa!,_Gratulujemy!",
- [25] = "Ja_tu_rządzę,_Gratulujemy!", -- stworzone w OnUpdate
- [26] = "Stowarzyszenie,_Gratulujemy!",
- [27] = "Elitarne_Towarzystwo,_Gratulujemy!",
- [28] = "Zakochana_para,_Gratulujemy!",
- [29] = "Zostań_przyjacielem,_Gratulujemy!",
- [30] = "Rycerze_zdążyli_wyginąć,_Gratulujemy!",
- [31] = "Grzeczny_jak_aniołek,_Gratulujemy!",
- [32] = "Doba,_Gratulujemy!",
- [33] = "7_wschodów_słońca,_Gratulujemy!",
- [34] = "Sen_jest_dla_słabych,_Gratulujemy!",
- [35] = "Zabawa_w_berka,_Gratulujemy!",
- [36] = "Maratończyk,_Gratulujemy!",
- [37] = "Run_Forest,_Run,_Gratulujemy!",
- [38] = "Na_jeźdźca,_Gratulujemy!",
- [39] = "Dżokej,_Gratulujemy!",
- [40] = "Husarz,_Gratulujemy!",
- [41] = "Pan_Wierzchowców,_Gratulujemy!",
- [42] = "Król_Wierzchowców,_Gratulujemy!",
- [43] = "Władca_Wierzchowców,_Gratulujemy!",
- [44] = "Biorą_jak_wściekłe,_Gratulujemy!", -- nowy when Fish begin
- [45] = "Biorą_jak_wściekłe,_Gratulujemy!",
- [46] = "Biorą_jak_wściekłe,_Gratulujemy!",
- [47] = "Początkujący_Górnik,_Gratulujemy!",
- [48] = "Górnik_Maniak,_Gratulujemy!",
- [49] = "Prawdziwy_Sztajger,_Gratulujemy!",
- [50] = "Pierwsza_Wyprawa,_Gratulujemy!", -- dungeony wyłączone, ale wystarczy dodać boss.kill with pc.in_dungeon()
- [51] = "Walczący_z_Orkami,_Gratulujemy!",
- [52] = "Walczący_z_Trupami,_Gratulujemy!",
- [53] = "Arachnofobia?_Raczej_nie!,_Gratulujemy!",
- [54] = "Diabeł_ubiera_się_w_sukienki,_Gratulujemy!",
- [55] = "Alergia_na_Smoki,_Gratulujemy!",
- [56] = "Płonące_stopy,_Gratulujemy!",
- [57] = "Ślizga_sprawa,_Gratulujemy!",
- },
- ['Punkty'] = { -- Punkty za zadania [nr.zad] = kwota
- [0] = 1, [11] = 100, [22] = 0, [33] = 1000, [44] = 200, [55] = 1400,
- [1] = 40, [12] = 400, [23] = 0, [34] = 2000, [45] = 500, [56] = 2000,
- [2] = 400, [13] = 40, [24] = 0, [35] = 100, [46] = 1000, [57] = 2000,
- [3] = 2000, [14] = 100, [25] = 10, [36] = 400, [47] = 40, [58] = 0,
- [4] = 100, [15] = 400, [26] = 40, [37] = 1000, [48] = 400, [59] = 0,
- [5] = 400, [16] = 10, [27] = 200, [38] = 100, [49] = 100, [60] = 0,
- [6] = 1600, [17] = 100, [28] = 100, [39] = 400, [50] = 400, [61] = 0,
- [7] = 60, [18] = 1000, [29] = 40, [40] = 1000, [51] = 600, [62] = 0,
- [8] = 300, [19] = 2000, [30] = 100, [41] = 100, [52] = 800, [63] = 0,
- [9] = 1000, [20] = 2000, [31] = 400, [42] = 400, [53] = 1000, [64] = 0,
- [10] = 40, [21] = 0, [32] = 100, [43] = 1000, [54] = 1200, [65] = 0,
- },
- ['QuestFlag'] = { -- Aktywne Wyzwanie (true = tak / false = nie)
- [0] = {"challenge_00",1}, [10] = {"challenge_10",1}, [20] = {"challenge_20",1}, [30] = {"challenge_30",1},
- [1] = {"challenge_01",1}, [11] = {"challenge_11",1}, [21] = {"challenge_21",0}, [31] = {"challenge_31",1},
- [2] = {"challenge_02",1}, [12] = {"challenge_12",1}, [22] = {"challenge_22",0}, [32] = {"challenge_32",1},
- [3] = {"challenge_03",1}, [13] = {"challenge_13",1}, [23] = {"challenge_23",0}, [33] = {"challenge_33",1},
- [4] = {"challenge_04",1}, [14] = {"challenge_14",1}, [24] = {"challenge_24",0}, [34] = {"challenge_34",1},
- [5] = {"challenge_05",1}, [15] = {"challenge_15",1}, [25] = {"challenge_25",1}, [35] = {"challenge_35",1},
- [6] = {"challenge_06",1}, [16] = {"challenge_16",1}, [26] = {"challenge_26",1}, [36] = {"challenge_36",1},
- [7] = {"challenge_07",1}, [17] = {"challenge_17",1}, [27] = {"challenge_27",1}, [37] = {"challenge_37",1},
- [8] = {"challenge_08",1}, [18] = {"challenge_18",1}, [28] = {"challenge_28",1}, [38] = {"challenge_38",1},
- [9] = {"challenge_09",1}, [19] = {"challenge_19",1}, [29] = {"challenge_29",1}, [39] = {"challenge_39",1},
- [40] = {"challenge_40",1}, [50] = {"challenge_50",0}, [60] = {"challenge_60",0},
- [41] = {"challenge_41",1}, [51] = {"challenge_51",0}, [61] = {"challenge_61",0},
- [42] = {"challenge_42",1}, [52] = {"challenge_52",0}, [62] = {"challenge_62",0},
- [43] = {"challenge_43",1}, [53] = {"challenge_53",0}, [63] = {"challenge_63",0},
- [44] = {"challenge_44",1}, [54] = {"challenge_54",0}, [64] = {"challenge_64",0},
- [45] = {"challenge_45",1}, [55] = {"challenge_55",0}, [65] = {"challenge_65",0},
- [46] = {"challenge_46",1}, [56] = {"challenge_56",0}, [66] = {"challenge_66",0},
- [47] = {"challenge_47",0}, [57] = {"challenge_57",0}, [67] = {"challenge_67",0},
- [48] = {"challenge_48",0}, [58] = {"challenge_58",0}, [68] = {"challenge_68",0},
- [49] = {"challenge_49",0}, [59] = {"challenge_59",0}, [69] = {"challenge_69",0},
- },
- ['Kill'] = {
- ['Mob'] = {10000,250000,1000000},
- ['Boss'] = {100,250,1000},
- ['Metin'] = {200,500,2000},
- ['Player'] = {100,250,1000},
- },
- ['LevelUp'] = {30,60,90,105,120,140,160,180,200},
- ['GuildUP'] = {10,20},
- ['Rank'] = { -- [1] - [2] = zakres.
- ['Przyjazny'] = {1000,4000},
- ['Szlachetny'] = {8000,12000},
- ['Maksymalna'] = 20000, -- wyjątek, max ranga.
- },
- ['PlayTime'] = {1440,10080,40320},
- ['Move'] = {
- ['Pieszo'] = {100000,1000000,10000000},
- ['Konno'] = {200000,2000000,20000000},
- ['Wierzchem'] = {500000,5000000,50000000},
- },
- ['Fish'] = {100,250,500},
- }
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement