Register for your free account! | Forgot your password?
Rust Cheats
Rust Cheats

You last visited: Today at 20:27

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

Advertisement



[RELEASE] Achievementsystem

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

Reply
 
Old   #1
 
Yiv's Avatar
 
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
[RELEASE] Achievementsystem



Liebe Community,

da der Auftraggeber des Achievementsystems nicht mehr erreichbar ist, habe ich mich entschlossen - bevor es auf meiner Festplatte vergammelt -, das System zu releasen. Seht als Nach-Weihnachts / Silvester-Release

Download im Anhang! ()

Für alle, die eine Python Version unter 2.5 benutzen: Da in der uiachievement.py kurze if-Statements benutzt werden, müsst ihr die Version für unter 2.5 noch extra downloaden und diese statt der anderen nutzen. ()

Achievementsystem-Demonstration

Einbau - Serverside:
Zuerst ladet ihr die achievementsystem.lua und die achievementsystem_extension.lua in euer Questverzeichnis (ggf. Unterordner/whatever).

Nun tragt ihr in die questlib.lua unten folgendes ein (evtl. den Pfad anpassen):
Code:
dofile("locale/germany/quest/achievementsystem_extension.lua")
Anschließend tragt ihr noch diese Befehle in eure quest_functions ein:
Code:
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


Einbau - Clientside:
Ihr packt den heruntergeladenen yiv work-Ordner in ein Archiv (bspw. in ETC) und packt das Archiv.

Nun entpackt ihr euer root-Archiv und fügt dort die uiachievement.py ein.

Anschließend öffnet ihr eure constInfo.py und fügt folgendes ein:
Code:
# YIV WORK: Achievement
CQC = 0
CQC_INFO = ""
Nun öffnet ihr eure interfacemodule.py und sucht nach def OpenQuestWindow(self, skin, idx): und fügt dort an den Anfang der Funktion folgendes ein:
Code:
		# YIV WORK: Achievement
		if constInfo.CQC == 1:
			return

Als letztes öffnet ihr nun noch die game.py und fügt ganz oben bei den imports diesen import ein
Code:
import uiAchievement
Nun sucht nach dem Konstruktor der GameWindow Klasse (def __init__(self, stream)) und fügt dort, fast am Ende, unter
Code:
		self.playerGauge = uiPlayerGauge.PlayerGauge(self)
		self.playerGauge.Hide()
noch das hinzu:
Code:
		# YIV WORK: Achievement
		self.achievementWindow = uiAchievement.AchievementBoard()
		self.achievementWindow.Close()

Nun sucht ihr - immernoch in der game.py - nach def Close(self): und fügt unter
Code:
self.ClearDictionary()
noch das hinzu:
Code:
		# YIV WORK: Achievement
		self.achievementWindow.Close()
		self.achievementWindow = None

Sucht nun nach def __BuildKeyDict(self): und fügt dort, irgendwo unter onPressKeyDict = {} nochfolgendes hinzu:
Code:
		# YIV WORK: Achievement
		onPressKeyDict[app.DIK_F6]	= lambda : self.achievementWindow.ToggleVisible()
Ihr seht hier, dass durch app.DIK_F6 die Taste F6 belegt wird, um das Achievement-Fenster zu öffnen/zu schließen. Falls diese Taste schon vergeben sein sollte, benutzt am besten einfach eine freie F-Taste oder irgendeine andere Taste, die eben noch nicht in Benutzung ist (bspw. X -> app.DIK_X).
Nun sucht ihr nach def __ServerCommand_Build(self): und fügt folgendes in das serverCommandList-Array ein:
Code:
			# YIV WORK: Achievement
			"achievement"			: self.achievementWindow.HandleAchievementServerCommand,
			"cqc_start"				: self.cqcStart,
			"cqc_get"				: self.cqcGet,
			"cqc_end"				: self.cqcEnd,

Als letztes fügt ihr nun noch am Ende der game.py folgendes ein:
Code:
	# YIV WORK: Achievement
	def cqcStart(self):
		constInfo.CQC = 1

	def cqcGet(self):
		net.SendQuestInputStringPacket(str(constInfo.CQC_INFO))

	def cqcEnd(self):
		constInfo.CQC_INFO = None
		constInfo.CQC = 0


Anpassen der Achievements & des Achievementshops:
Alle Anpassungen finden in der achievementsystem_extension.lua statt!
Ihr findet in Zeile 12 das Array der Items im Achievementshop:
Code:
achievement.shop = {
	{{14,1,10},{19,1,20},{11209,1,25},{11219,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}},
}
Hier habe ich 4 Items (Schwert+4, Schwert+9, Mönchsplattenpanzer+9 und Eisenplattenpanzer+9) als Beispiele hinzugefügt. Ein Item-Eintrag ist folgendermaßen aufgebaut:
Code:
{VNUM, ANZAHL, PREIS}
Der Achievementshop ist 8 x 8 Slots groß (8 Zeilen zu je 8 Spalten) und dementsprechend ist auch das Array aufgebaut.

Für die Anpassung der Achievements findet ihr in der unbearbeiteten Datei in Zeile 29 die Definition der Mob-Achievements und in Zeile 41 die Definition der Level-Achievements.
Die Level-Achievements sollten eig. selbsterklärend sein, aber es ist zu beachten, dass sie der Reihe nach geordnet sein müssen, also das Level 20-Achievement folgt dem Level 10 Achievement und nicht umgekehrt.
Aufbau:
Code:
{LEVEL, ACHIEVEMENTPUNTKE}
Die Mob-Achievements sind ein wenig anders. Ich habe beispielsweise mal 4 Achievements angelegt.
Code:
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}}
Der Aufbau sieht also folgendermaßen aus:
Code:
achievement.mob[VNUM] = {...}
Ein Mob kann mehrere Achievements haben, diese müssen einfach durch ein Komma getrennt angegeben werden. Der Wildhund hat aktuell beispielsweise 3 Achievements (10 Kills, 25 Kills und 50 Kills). Ein Achievement ist so aufgebaut:
Code:
{KILLS, ACHIEVEMENTPUNKTE}
Nun habt ihr schonmal für einen Mob die Achievements eingestellt, es ist aber noch nicht verfügbar. Der Mob muss erst in Zeile 30 für ausgewählte Maps "freigeschalten" werden.
Code:
achievement.mob['L'] = {
	[1] = {101, 102},
	[21] = {101, 102, 103},
	[41] = {101, 102, 104},
}
Auf der Map mit Index 1 kann man also die Achievements für die Mobs mit den Vnums 101 & 102 erhalten, auf der Map mit dem Index 21 die Achievements für 101, 102 & 103 und auf der Map mit dem Index 41 die Achievements für 101, 102 & 104.



Achievement-Coupons Quest
Hier noch eine kleine Erweiterung: Diese Quest ermöglicht es euch, Achievement-Coupons hinzuzufügen. Einfach in die Quest-Liste (locale_list / quest_list / etc.) eintragen, die ID's und Werte anpassen und fertig.

Code:
quest achievement_coupons begin
	state start begin
		when 30093.use or 30094.use or 30095.use or 30096.use begin
			local points = ({
				[30093] = 25,
				[30094] = 50,
				[30095] = 100,
				[30096] = 200
			})[item.get_vnum()]
			achievement.increasePoints(points)
			item.remove()
		end
	end
end


Ich denke, das sollten nun die meisten hinbekommen, wer dennoch Fragen und/oder Probleme hat, kann natürlich hier im Thread Hilfe suchen.

Special Thanks:
Lee - Because of Brathering
Poccix - HA!
NyBu - Weil darum und Designs
DasSchwarzeT - Bischt du plöd?
JuleZ (aka. x"Kazuki) - Will auch mal in die Special Thanks

Mit freundlichen Grüßen
Yiv



Unterstützt durch:
Attached Files
File Type: rar Achievementsystem by Yiv.rar (29.7 KB, 1369 views)
File Type: rar uiachievement (for python under 2_5).rar (3.2 KB, 558 views)
File Type: rar uiachievement (v1.1 - fixed - all python versions).rar (3.2 KB, 898 views)
Yiv is offline  
Thanks
85 Users
Old 12/31/2014, 13:47   #2
 
elite*gold: 183
Join Date: Feb 2010
Posts: 597
Received Thanks: 221
Hey,
Sieht sehr gut aus
Danke das du es mit uns teilst

mfg
Cynaide™ is offline  
Thanks
2 Users
Old 12/31/2014, 13:49   #3
 
Alergix2's Avatar
 
elite*gold: 103
Join Date: Aug 2014
Posts: 1,425
Received Thanks: 315
Respekt !!
Hammer geil bestes Release
Alergix2 is offline  
Thanks
1 User
Old 12/31/2014, 13:53   #4
 
elite*gold: 2
Join Date: Jun 2013
Posts: 1,063
Received Thanks: 1,724
Ui schniekes Teilchen.
ProfessorEnte is offline  
Thanks
1 User
Old 12/31/2014, 13:54   #5
 
'venToX's Avatar
 
elite*gold: 4
Join Date: Feb 2013
Posts: 572
Received Thanks: 1,037
Wahrscheinlich das beste Achievementsystem, das bisher publiziert wurde, danke :'P
'venToX is offline  
Thanks
2 Users
Old 12/31/2014, 13:56   #6
 
nybu's Avatar
 
elite*gold: 0
Join Date: May 2011
Posts: 2,806
Received Thanks: 8,536
Dat Werbung <3
Mega geiles Release! Hab gehört demnächst kommt noch was krasses von dir?

*hust*
nybu is offline  
Thanks
3 Users
Old 12/31/2014, 13:58   #7
 
Snal™'s Avatar
 
elite*gold: 10
Join Date: Dec 2014
Posts: 64
Received Thanks: 6
Top Release Funktioniert


Gruß
Snal™ 1 Beitrag Wupp
Snal™ is offline  
Thanks
1 User
Old 12/31/2014, 14:03   #8
 
.SliceR's Avatar
 
elite*gold: 29
Join Date: Aug 2010
Posts: 855
Received Thanks: 522
Sehr, sehr geil!
.SliceR is offline  
Thanks
1 User
Old 12/31/2014, 14:07   #9
 
Fydes's Avatar
 
elite*gold: 0
Join Date: Mar 2014
Posts: 1,619
Received Thanks: 984
Schnieke nice, thx
Fydes is offline  
Thanks
1 User
Old 12/31/2014, 14:17   #10

 
k1lL3rb0rN's Avatar
 
elite*gold: 20
Join Date: Oct 2007
Posts: 1,317
Received Thanks: 1,167
Super Mega geiles Rilies!
Ein dickes #3 dafür
k1lL3rb0rN is offline  
Thanks
1 User
Old 12/31/2014, 14:19   #11
 
Shaytan 's Avatar
 
elite*gold: 0
Join Date: Feb 2014
Posts: 478
Received Thanks: 564
Hammer danke dir für das Release euch allen einen guten rutsch
Shaytan  is offline  
Old 12/31/2014, 14:21   #12
 
x"Kazuki's Avatar
 
elite*gold: 50
Join Date: Aug 2014
Posts: 508
Received Thanks: 201
Schlecht. #ironie

Super mega extremst bestes Release.
Endlich mal ein Special Thanks.

*freu*
x"Kazuki is offline  
Thanks
1 User
Old 12/31/2014, 14:49   #13
 
Snal™'s Avatar
 
elite*gold: 10
Join Date: Dec 2014
Posts: 64
Received Thanks: 6
HTML Code:
1231 14:47:10020 :: CPythonPlayer::SetItemData(dwSlotIndex=1, itemIndex=727269) - Failed to item data

1231 14:47:12470 :: Traceback (most recent call last):

1231 14:47:12470 ::   File "networkModule.py", line 231, in SetGamePhase

1231 14:47:12470 ::   File "system.py", line 130, in __pack_import

1231 14:47:12470 ::   File "system.py", line 110, in _process_result

1231 14:47:12470 ::   File "game.py", line 30, in ?

1231 14:47:12470 ::   File "system.py", line 130, in __pack_import

1231 14:47:12470 ::   File "
1231 14:47:12470 :: <string>
1231 14:47:12470 :: ", line 
1231 14:47:12470 :: 67
1231 14:47:12470 :: 

1231 14:47:12470 ::     
1231 14:47:12470 :: self.val = self.val if self.val <= self.valMax else self.valMax

1231 14:47:12470 ::     
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 ::  
1231 14:47:12470 :: ^

1231 14:47:12470 :: SyntaxError
1231 14:47:12470 :: : 
1231 14:47:12470 :: invalid syntax
1231 14:47:12470 :: 
mhm Tabs stimmen eigendlich , woran könnte es liegen
Snal™ is offline  
Thanks
1 User
Old 12/31/2014, 14:51   #14
 
Tuora's Avatar
 
elite*gold: 0
Join Date: Jun 2014
Posts: 1,046
Received Thanks: 956
Super,danke dir sehr nützlich
Tuora is offline  
Old 12/31/2014, 14:51   #15
 
Poccix's Avatar
 
elite*gold: 44
Join Date: Dec 2009
Posts: 1,696
Received Thanks: 3,833
Zeile 67 ist ein Syntax Error lieber Mensch zwei über mir :3 Post mal die Zeile.
____

Sieht schön aus kleiner !
Poccix is offline  
Reply


Similar Threads Similar Threads
[Quest-Update] Achievementsystem
10/29/2013 - Metin2 PServer Guides & Strategies - 13 Replies
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: Klick
[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 20:28.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

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