PHP Code:
-- Achievementsystem
-- Copyright (c) 2014 Yiv
-- Create: 2014/11/02 (YYYY/MM/DD)
achievement = achievement or {}
-- ###############################################
-- ################ CONFIGURATION ################
-- ###############################################
achievement.shop = {
{{19,1,10},{18,1,20},{17,1,25},{16,1,30},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
}
-- A = Achievement
-- AP = Achievement Points
-- Mob-Achievements achievement.mob['VNUM'] = {{KILL_COUNT, AP}}
-- Level-Achievements achievement.level = {{LEVEL, AP}}
achievement.mob = {}
achievement.mob['L'] = {
[2] = {101, 102},
[21] = {101, 102, 103},
[41] = {101, 102, 104},
[51] = {101, 102, 104},
}
achievement.mob[101] = {{10, 5}, {25, 10}, {50, 15}}
achievement.mob[102] = {{29, 29}}
achievement.mob[103] = {{88, 88}, {1337, 1000}}
achievement.mob[104] = {{99, 99}, {2674, 2000}}
achievement.level = {
{2, 5},
{20, 10},
{45, 15},
{900, 20},
{100, 20},
{105, 20},
}
-- ###############################################
-- ########## FUNCTIONS - DO NOT CHANGE ##########
-- ###############################################
--[[
achievement.init
achievement.getNextLevelAchievementInfo
achievement.nextLevelAchievement
achievement.getMobAchievementInfo
achievement.increasePoints
achievement.getf
achievement.setf
achievement.login
achievement.initLevel
achievement.initShop
achievement.initMob
achievement.buyItem
achievement.clientCommunication
]]--
achievement.init = function()
achievement.setf("points", 0)
achievement.setf("level", 1)
end
achievement.getNextLevelAchievementInfo = function()
local n = achievement.getf("level")
if n < 1 or n > table.getn(achievement.level) then
return 0
end
return achievement.level[n]
end
achievement.nextLevelAchievement = function()
achievement.setf("level", (achievement.getf("level") + 1))
end
achievement.getMobAchievementInfo = function(race)
if achievement.mob[race] ~= nil then
return achievement.mob[race]
else
return {}
end
end
achievement.increasePoints = function(points)
achievement.setf("points", (achievement.getf("points") + points))
end
achievement.getf = function(flag)
return pc.getf("achievement", flag)
end
achievement.setf = function(flag, value)
pc.setf("achievement", flag, value)
if flag == "points" then
achievement.clientCommunication("ap_info", value)
end
end
achievement.login = function()
achievement.initLevel()
achievement.initShop()
end
achievement.initLevel = function()
local levelAchievements = ""
table.foreach(achievement.level,
function(index, levelSet)
levelAchievements = string.format("%s,%d_%d", levelAchievements, levelSet[1], levelSet[2])
end
)
levelAchievements = string.sub(levelAchievements, 2)
achievement.clientCommunication("init_level", pc.get_level(), levelAchievements)
end
achievement.initShop = function()
local siVnum = ""
local siCount = ""
local siPrice = ""
table.foreach(achievement.shop,
function(tIndex, tSet)
table.foreach(tSet,
function(index, set)
siVnum = string.format("%s;%d", siVnum, set[1])
siCount = string.format("%s;%d", siCount, set[2])
siPrice = string.format("%s;%d", siPrice, set[3])
end
)
end
)
siVnum = string.sub(siVnum, 2)
siCount = string.sub(siCount, 2)
siPrice = string.sub(siPrice, 2)
achievement.clientCommunication("shop", "c")
achievement.clientCommunication("shop", "vnum", siVnum)
achievement.clientCommunication("shop", "count", siCount)
achievement.clientCommunication("shop", "price", siPrice)
achievement.clientCommunication("shop", "b")
achievement.clientCommunication("ap_info", achievement.getf("points"))
end
achievement.initMob = function()
local mobAchievements = ""
local mobIdxTab = achievement.mob['L'][pc.get_map_index()]
if mobIdxTab ~= nil then
table.foreach(mobIdxTab,
function(index, value)
local mobInfoTab = achievement.getMobAchievementInfo(value)
local mobAchievementsSUB = ""
if mobInfoTab ~= nil then
table.foreach(mobInfoTab,
function(idx, infoSet)
mobAchievementsSUB = string.format("%s;%d", mobAchievementsSUB, infoSet[1])
end
)
mobAchievementsSUB = string.sub(mobAchievementsSUB, 2)
mobAchievementsSUB = string.format("%d_%d_%s", value, achievement.getf(string.format("npc_kills_%d", value)), mobAchievementsSUB)
end
mobAchievements = string.format("%s,%s", mobAchievements, mobAchievementsSUB)
end
)
end
mobAchievements = string.sub(mobAchievements, 2)
achievement.clientCommunication("init_mob", mobAchievements)
end
achievement.buyItem = function(pos)
pos = pos + 1
local row = 1
while pos > 8 do
row = row + 1
pos = pos - 8
end
local itemSet = achievement.shop[row][pos]
local ap = achievement.getf("points")
if ap >= itemSet[3] then
ap = ap - itemSet[3]
achievement.setf("points", ap)
pc.give_item2(itemSet[1], itemSet[2])
achievement.clientCommunication("ap_info", ap)
else
syschat("Du hast nicht genügend Achievement-Punkte um diesen Gegenstand zu kaufen.")
end
end
achievement.clientCommunication = function(param, ...)
local strCmd = string.format("achievement %s#", param)
if not arg or table.getn(arg) < 1 then return end
local i,j = 1,table.getn(arg)
while i <= j do
strCmd = string.format(strCmd.."%s|", tostring(arg[i]))
i = i + 1
end
strCmd = string.sub(strCmd, 1, (string.len(strCmd) - 1))
cmdchat(strCmd)
end