Register for your free account! | Forgot your password?

You last visited: Today at 07:49

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Quest-Update] Achievementsystem

Discussion on [Quest-Update] Achievementsystem within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1

 
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,446
[Quest-Update] Achievementsystem

Heyho,

da ich schon immer der Meinung war, dass die Achievementquest von DaRealFreak etwas unübersichtlich ist, wollte ich "Neulingen" es mal etwas leichter machen und habe sie so geschrieben, dass man leicht alles ersetzen kann.
Auch beim Shop muss man jetzt nicht alles sofort umschreiben.

Was ihr braucht:
- Questlib von Mijago
- Clientdateien vom Achievementsystem

Originalthread von DaRealFreak:

Quest:
Code:
quest achievement_update begin
	state start begin
		-- // shop
		when 20094.chat."Achievement Shop" begin
			local points = pc.getqf("achieve")
			
			
			local category = {"Waffen","Rüstungen","Pvm - Equipment","Uppitems","Truhen","Ringe"}
			
			local list = {
				-- Kategorie 1
				{
				--    Name           Vnum  reward points   
					{"Giftschwert+9", 9985, 3500},
					{"Grollschwert+9", 9986, 3500},
					{"Orchideenglocke+9", 9987, 3500},
					{"Löwenschwert+9", 9988, 3500},
					{"Teufelsflügel-Chakram+9", 9989, 3500},
				},
				-- Kategorie 2
				{
					{"Schwarzstahlpanzer+9", 11299, 1000},
					{"Schwarzwindanzug+9", 11499, 1000},
					{"Magieplattenpanzer+9", 11699, 1000},
					{"Schwarze Kleidung+9", 11899, 1000},
				},
				-- Kategorie 3
				{
					{"Smaragtarmband", 14549, 5000},
					{"Smaragthalskette", 16549, 5000},
					{"Smaragtohrringe", 17549, 5000},
				},
				-- Kategorie 4
				{
					{"Stück Kristall", 30204, 100},
					{"Wasserstein", 27991, 500},
				},
				-- Kategorie 5
				{
					{"Truhe der Macht", 38050, 500},
					{"Truhe des ewigen Winters", 38053, 3000},
					{"Truhe der Könige", 38052, 3000},
				},
				-- Kategorie 6
				{
					{"Halbmondring", 10008, 400},
					{"Ring des Kampfes", 71143, 1500},
					{"Ring des Feuers", 71149, 2500},
					{"Ring des Wassers", 71148, 2500},
					{"Lolli", 71136, 5000},
				}
			}
			
			
			local s = select3(category)
			local menu = {}
			for i = 1, table.getn(list[s]) do
				table.insert(menu, list[s][i][1])
			end
			say_title("Achievement Shop")
			say("Wähle ein Item aus:")
			say()
			local t = select3(menu)
			local reward_item = list[s][t][2]
			local reward_count = list[s][t][3]
			say_title("Achievement Shop")
			say_reward("Achievementpoints: "..points)
			say()
			say("Gewähltes Item: "..item_name(reward_item))
			say_reward(string.format("Das Item kostet %d Achievementpoints", reward_count))
			say()
			if points < reward_count then
				return say("Du hast nicht genügend Achievementpoints")
			end
			if select("Eintauschen","Abbrechen") == 2 then return end
			pc.setqf("achieve", points - reward_count)
			pc.give_item2(reward_item)
		end
		
		
		-- // get points
		when login begin
			mob_data = {
			--  Vnum Points qf                cmdchat
				{691, 20, "691", "achievement ".. mob_name(691) .."_getötet#".. pc.getqf("691") + 1  .."%".. pc.getqf("achieve") + 20},
				{791, 20, "791", "achievement ".. mob_name(791) .."_getötet#".. pc.getqf("791") + 1  .."%".. pc.getqf("achieve") + 20},
				{792, 20, "792", "achievement ".. mob_name(792) .."_getötet#".. pc.getqf("792") + 1  .."%".. pc.getqf("achieve") + 20},
				{1192, 150, "1192", "achievement ".. mob_name(1192) .."_getötet#".. pc.getqf("1192") + 1  .."%".. pc.getqf("achieve") + 20},
			}
			item_data = {
				{12019, 50, "12019", "achievement Blaustahlpanzer+9%".. pc.getqf("achieve") + 50},
				{12029, 50, "12029", "achievement Drachenanzug+9%".. pc.getqf("achieve") + 50},
				{12039, 50, "12039", "achievement Auraplattenpanzer+9%".. pc.getqf("achieve") + 50},
				{12049, 50, "12049", "achievement Drachenkleidung+9%".. pc.getqf("achieve") + 50},
			}
			level_data = {
			-- Level points qf      cmdchat
				{50, 50, "level50", "achievement Level_50_erreicht%".. pc.getqf("achieve") + 50},
				{60, 50, "level60", "achievement Level_60_erreicht%".. pc.getqf("achieve") + 50},
				{70, 50, "level70", "achievement Level_70_erreicht%".. pc.getqf("achieve") + 50},
				{80, 50, "level80", "achievement Level_80_erreicht%".. pc.getqf("achieve") + 50},
				{90, 50, "level90", "achievement Level_90_erreicht%".. pc.getqf("achieve") + 50},
				{99, 50, "level99", "achievement Level_99_erreicht%".. pc.getqf("achieve") + 50},
			}
		end
		when kill with not npc.is_pc() begin
			local vid = npc.get_vid()
			local function in_table(arg)
				for i = 1, table.getn(mob_data) do
					if mob_data[i][1] == arg then
						return i
					end
				end
				return false
			end
			local d = in_table(vid)
			if d ~= false then
				pc.setqf(mob_data[d][3], pc.getqf(mob_data[d][3]) + tonumber(mob_data[d][2]))
				cmdchat(mob_data[d][4])
			end
		end
		when use begin
			local vnum = item.get_vnum()
			local function in_table(arg)
				for i = 1, table.getn(mob_data) do
					if mob_data[i][1] == arg then
						return i
					end
				end
				return false
			end
			local d = in_table(vnum)
			if d ~= false and pc.getqf(tostring(item_data[d][3]) == 0 then
				pc.setqf(item_data[d][3], 1)
				pc.setqf(item_data[d][3], pc.getqf(item_data[d][3]) + tonumber(item_data[d][2]))
				cmdchat(item_data[d][4])
			end
		end
		when levelup begin
			local lvl = pc.get_level()
			local function in_table(arg)
				for i = 1, table.getn(mob_data) do
					if mob_data[i][1] == arg then
						return i
					end
				end
				return false
			end
			local d = in_table(lvl)
			if d ~= false and pc.getqf(tostring(level_data[d][3]) == 0 then
				pc.setqf(level_data[d][3], 1)
				pc.setqf(level_data[d][3], pc.getqf(level_data[d][3]) + tonumber(level_data[d][2]))
				cmdchat(level_data[d][4])
			end
		end
	end
end
Wie man was einfügt:

Ihr kopiert einfach eine Zeile, wie diese:
Code:
{"Giftschwert+9", 9985, 3500},
Und fügt die unter den letzten eingerückten Eintrag ein.

Beispiel:

Code:
{"Giftschwert+9", 9985, 3500},
{"Grollschwert+9", 9986, 3500},
{"Orchideenglocke+9", 9987, 3500},
{"Löwenschwert+9", 9988, 3500},
{"Teufelsflügel-Chakram+9", 9989, 3500},

Wird zu:

{"Giftschwert+9", 9985, 3500},
{"Grollschwert+9", 9986, 3500},
{"Orchideenglocke+9", 9987, 3500},
{"Löwenschwert+9", 9988, 3500},
{"Teufelsflügel-Chakram+9", 9989, 3500},
{"Schwert+9", 19, 3500},
Neue Kategorie:

Falls ihr eine neue Kategorie einfügt, müsst ihr drauf achten, dass die Itemlisten in der richtigen Reihenfolge sind - sonst werden die Items falsch angezeigt.

1. Kategorie in die category Liste eintragen

2.
Code:
{
    {"Schwarzstahlpanzer+9", 11299, 1000},
    {"Schwarzwindanzug+9", 11499, 1000},
    {"Magieplattenpanzer+9", 11699, 1000},
    {"Schwarze Kleidung+9", 11899, 1000},
},
Das ist ein Abschnitt einer Kategorie.
Am einfachsten ist es so einen zu kopieren und unten einzufügen.
Aber vor der letzten geschweiften Klammer - sonst kommt ein Compileerror

Das war's auch.
Falls ihr Fragen habt, könnt ihr sie mir stellen.

MfG.iRemix
Lord iRemix is offline  
Thanks
26 Users
Old 10/08/2013, 17:09   #2
 
.HC'Zeklow's Avatar
 
elite*gold: 0
Join Date: Jun 2012
Posts: 778
Received Thanks: 456
Für Neulinge sicher hilfreich..
Danke
.HC'Zeklow is offline  
Old 10/08/2013, 17:35   #3
 
.Xilent's Avatar
 
elite*gold: 12
Join Date: Jun 2012
Posts: 978
Received Thanks: 860
Danke, Michi Sehr ordentlich geschrieben!
.Xilent is offline  
Old 10/08/2013, 18:36   #4
 
[ViP]Nereus's Avatar
 
elite*gold: 0
Join Date: May 2013
Posts: 265
Received Thanks: 44
Danke ist für leute die nicht so viel plan von Quests haben sehr gut zu gebrauchen Wie mich :P
Thanks
[ViP]Nereus is offline  
Old 10/08/2013, 23:52   #5

 
Mr. 'Avenue™'s Avatar
 
elite*gold: 222
The Black Market: 101/0/0
Join Date: Oct 2012
Posts: 2,369
Received Thanks: 3,389
Sehr sauber-, sowie kurz gehaltener Syntax.
nicht anders zu erwarten :3 Danke!
Mr. 'Avenue™ is offline  
Old 10/09/2013, 17:22   #6
 
Mijago's Avatar
 
elite*gold: 191
Join Date: May 2009
Posts: 1,214
Received Thanks: 2,597
Kleiner Logikfehler:
if s == table.getn(category) then return end
Da du in category kein Abbrechen hast, ist das nicht korrekt.
Abbrechen ist -1 bei select3

if t == table.getn(menu) then return end
Hier das selbe


Nebenbei,
pc.getqf(tostring(level_data[d][3])
das tostring ist total unnötig, denn der Core selbst wandelt sich die Lua value in einen String um, dh bei dir 2x



## Edit:
Jetzt hast du die Zeilen zwar rausgenommen, aber du musst doch dennoch checken, ob die select-Funktion -1 zurück gibt
Mijago is offline  
Thanks
2 Users
Old 10/10/2013, 00:32   #7
 
QuickFlameZ's Avatar
 
elite*gold: 0
Join Date: Mar 2012
Posts: 646
Received Thanks: 696
Michi bist ein verrückter Mongo. Gute Quest. Bis Freitag
Mfg
QuickFlameZ is offline  
Old 10/10/2013, 06:40   #8
 
elite*gold: 32
The Black Market: 120/0/1
Join Date: Mar 2012
Posts: 6,716
Received Thanks: 2,737
Jaja Michi, ich weiß noch vor ca. 1 Jahr.. xD Da haste mich immer gefragt wie man Quest umschreibt oder gar schreibt.. Jetzt randalierst du hier im Questsschreiben. Sehr, sehr nice von dir.. wie eben immer. Hast dich dazu auch noch toll gemacht.
Danke schön.

PS: Kannst dich auch mal wieder in Skype melden, lang nichts mehr von dir gehört!! :>

lG
Syuki
Syuki is offline  
Thanks
1 User
Old 10/10/2013, 08:33   #9
 
elite*gold: 0
Join Date: Oct 2013
Posts: 36
Received Thanks: 12
Sehr schön, danke dir.
Art!om is offline  
Old 10/15/2013, 09:53   #10
 
norbidek's Avatar
 
elite*gold: 0
Join Date: Jul 2012
Posts: 22
Received Thanks: 0
Quote:
quest archive_system begin
state start begin
-- // Sklep
when 20091.chat."Sklep z Osiagnieciami !" begin
local points = pc.getqf("achieve")


local category = {"Wszystkie Ulepszacze", "Wierzchowce", "Pety"}

local list = {
-- Kategoria 1
{
-- Nazwa ID Punkty
{"Zielona Perla x1", 2761, 45},
{"Czerwony Piasek x1", 2165, 65},
{"Zolta Perla x1", 2765, 55},
{"Lodowy Krzystal x1", 2760, 45},
},
-- Kategoria 2
{
{"Pieczec Raptora", 2741, 120},
{"Pieczec Czarnego Jaszczura", 2745, 120},
{"Pieczec Bialego Konia", 2747, 100},
{"Pieczec Martwego Konia", 2748, 100},
},
-- Kategoria 3
{
{"Maly Dzik", 53008, 350},
{"Maly Lew", 53007, 450},
},
}


local s = select3(category)
local menu = {}
for i = 1, table.getn(list[s]) do
table.insert(menu, list[s][i][1])
end
say_title("Sklep Osiagniec")
say_arbuz("Nasza Oferta:")
say()
local t = select3(menu)
local reward_item = list[s][t][2]
local reward_count = list[s][t][3]
say_title("Sklep Osiagniec")
say_reward("Twoje Punkty: "..points)
say()
say_limonka("Pomyslny zakup przedmiotu: "..item_name(reward_item))
say_reward(string.format("Pozostalo %d Punktow Osiagniec.", reward_count))
say()
if points < reward_count then
return say_arbuz("Masz za malo punktow !")
end
if select("Zakup!","Anuluj!") == 2 then return end
pc.setqf("achieve", points - reward_count)
pc.give_item2(reward_item)
end


-- // get points
when login begin
mob_data = {
-- ID Punkty qf cmdchat
{691, 2, "691", "Nowe Osiagniecie ".. mob_name(691) .."zakonczone!#".. pc.getqf("691") + 1 .."%".. pc.getqf("achieve") + 2},
{791, 2, "791", "Nowe Osiagniecie ".. mob_name(791) .."zakonczone!#".. pc.getqf("791") + 1 .."%".. pc.getqf("achieve") + 2},
{792, 2, "792", "Nowe Osiagniecie ".. mob_name(792) .."zakonczone!#".. pc.getqf("792") + 1 .."%".. pc.getqf("achieve") + 2},
{1191, 3, "1191", "Nowe Osiagniecie ".. mob_name(1191) .."zakonczone!#".. pc.getqf("1191") + 1 .."%".. pc.getqf("achieve") + 3},
{1193, 3, "1193", "Nowe Osiagniecie ".. mob_name(1193) .."zakonczone!#".. pc.getqf("1193") + 1 .."%".. pc.getqf("achieve") + 3},
{1094, 3, "1094", "Nowe Osiagniecie ".. mob_name(1094) .."zakonczone!#".. pc.getqf("1094") + 1 .."%".. pc.getqf("achieve") + 3},
{1095, 4, "1095", "Nowe Osiagniecie ".. mob_name(1095) .."zakonczone!#".. pc.getqf("1095") + 1 .."%".. pc.getqf("achieve") + 4},
{1304, 3, "1304", "Nowe Osiagniecie ".. mob_name(1304) .."zakonczone!#".. pc.getqf("1304") + 1 .."%".. pc.getqf("achieve") + 3},
{2697, 5, "2697", "Nowe Osiagniecie ".. mob_name(2697) .."zakonczone!#".. pc.getqf("2697") + 1 .."%".. pc.getqf("achieve") + 4},
{2597, 6, "2597", "Nowe Osiagniecie ".. mob_name(2597) .."zakonczone!#".. pc.getqf("2597") + 1 .."%".. pc.getqf("achieve") + 6},
{16061, 5, "16061", "Nowe Osiagniecie ".. mob_name(16061) .."zakonczone!#".. pc.getqf("16061") + 1 .."%".. pc.getqf("achieve") + 5},
{2599, 5, "2599", "Nowe Osiagniecie ".. mob_name(2599) .."zakonczone!#".. pc.getqf("2599") + 1 .."%".. pc.getqf("achieve") + 5},
{2997, 5, "2997", "Nowe Osiagniecie ".. mob_name(2997) .."zakonczone!#".. pc.getqf("2997") + 1 .."%".. pc.getqf("achieve") + 5},
{2599, 5, "2599", "Nowe Osiagniecie ".. mob_name(2599) .."zakonczone!#".. pc.getqf("2599") + 1 .."%".. pc.getqf("achieve") + 5},
}
item_data = {
{44000, 3, "44000", "Nowe Osiagniecie Szmaragdowe Ubranie+0%".. pc.getqf("achieve") + 3},
{42000, 3, "42000", "Nowe Osiagniecie Szmaragdowa Zbroja+0%".. pc.getqf("achieve") + 3},
{46000, 3, "46000", "Nowe Osiagniecie Szmaragdowy Pancerz+0%".. pc.getqf("achieve") + 3},
{48000, 3, "48000", "Nowe Osiagniecie Szmaragdowa Szata+0%".. pc.getqf("achieve") + 3},
}
level_data = {
-- Level points qf cmdchat
{80, 3, "level80", "Nowe Osiagniecie Level_80_erreicht%".. pc.getqf("achieve") + 3},
{90, 3, "level90", "Nowe Osiagniecie Level_90_erreicht%".. pc.getqf("achieve") + 3},
{99, 3, "level99", "Nowe Osiagniecie Level_99_erreicht%".. pc.getqf("achieve") + 3},
}
end
when kill with not npc.is_pc() begin
local vid = npc.get_vid()
local function in_table(arg)
for i = 1, table.getn(mob_data) do
if mob_data[i][1] == arg then
return i
end
end
return false
end
local d = in_table(vid)
if d ~= false then
pc.setqf(mob_data[d][3], pc.getqf(mob_data[d][3]) + tonumber(mob_data[d][2]))
cmdchat(mob_data[d][4])
end
end
when use begin
local vnum = item.get_vnum()
local function in_table(arg)
for i = 1, table.getn(mob_data) do
if mob_data[i][1] == arg then
return i
end
end
return false
end
local d = in_table(vnum)
if d ~= false and pc.getqf(tostring(item_data[d][3]) == 0 then
pc.setqf(item_data[d][3], 1)
pc.setqf(item_data[d][3], pc.getqf(item_data[d][3]) + tonumber(item_data[d][2]))
cmdchat(item_data[d][4])
end
end
when levelup begin
local lvl = pc.get_level()
local function in_table(arg)
for i = 1, table.getn(mob_data) do
if mob_data[i][1] == arg then
return i
end
end
return false
end
local d = in_table(lvl)
if d ~= false and pc.getqf(tostring(level_data[d][3]) == 0 then
pc.setqf(level_data[d][3], 1)
pc.setqf(level_data[d][3], pc.getqf(level_data[d][3]) + tonumber(level_data[d][2]))
cmdchat(level_data[d][4])
end
end
end
end
Please help me !

norbidek is offline  
Old 10/22/2013, 22:47   #11
 
norbidek's Avatar
 
elite*gold: 0
Join Date: Jul 2012
Posts: 22
Received Thanks: 0
Calls undeclared function! :

in_table
npc.get_vid
select3
norbidek is offline  
Old 10/24/2013, 21:59   #12

 
MetinLegende's Avatar
 
elite*gold: 10
Join Date: Feb 2012
Posts: 1,097
Received Thanks: 574
dann definier die funktionen....
du wirst es doch schaffen das in die quest_functions reinzuschreiben

ich war seit fast 1 1/2 jahren nicht on und komme wieder und es ist immernoch alles gleich jeder will pserver machen aber fast keiner hat ahnung

und zur quest
die gefällt mir zur ausnahme mal echt gut weiß nicht was da alles so released wurde zwecks achievment system aber wenn ich mir das von jetzt anschaue und von wo ich noch aktiv war hast dus echt gut gemacht weiter so
MetinLegende is offline  
Old 10/25/2013, 12:01   #13
 
elite*gold: 0
Join Date: Oct 2013
Posts: 25
Received Thanks: 23
Hey, aufjedenfall schönes Release, neulinge können damit einiges machen!
'Aljehry is offline  
Old 10/29/2013, 17:26   #14
 
elite*gold: 0
Join Date: Aug 2012
Posts: 974
Received Thanks: 89
push wegen fehler
thespeedyy is offline  
Reply

Tags
achievement, achievement system


Similar Threads Similar Threads
[TrinityCore] Achievementsystem - Fertige SQL zum Download!
07/07/2013 - WoW Private Server - 2 Replies
Hallo Community, Ich stelle Euch von meinem Tool erstellte SQL von einem aufgelösten Projekt frei zur Verfügung. Diese SQL kam auf einem Highrateserver zum Einsatz. Was macht dieses? Bei dem Erfolg X bekommt der Spieler ein Brief. Dort können Kisten, Mounts etc. enthalten sein. Was genau, müsst Ihr im Script schauen. Bitte beachtet, dass eine Sicherung der alten Tabelle achievement_reward notwendig ist! Sollte es zu einem Crash beim Start des Servers kommen, sichert Ihr Euch damit...
Problem: Achievementsystem
09/01/2012 - Metin2 Private Server - 0 Replies
Hallo, ich hab das Problem, das beim Achievementsystem die Punkte nicht speichern. Das heißt es steht immer: Deine Achievementpoints steigen auf 53. Aber beim Achievementshop hab ich immer 0 Punkte...
Achievementsystem "erkennt" manche Mobs nicht?
12/04/2011 - Metin2 Private Server - 2 Replies
Heyho, ich war gerade dabei das Achievementsystem zu erweitern. Also Shopquest mit Ownpoints abfrage und all so nem schnick schnack. Dazu noch nen ordentlichen "Trophäenschrank" per Quest in welcher die gesammelten Achievements angeschaut werden können, sowie die der anderen. Naja soweit auch okay, alles geschafft, nur harpert es an EINEM scheiss Punkt. Das Achievement zählt nicht alle Mobs ....



All times are GMT +1. The time now is 07:49.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.