Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Metin2 > Metin2 Private Server
You last visited: Today at 19:57

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

Advertisement



Refine-Set auslesen per Quest

Discussion on Refine-Set auslesen per Quest within the Metin2 Private Server forum part of the Metin2 category.

Reply
 
Old   #1
 
elite*gold: 15
Join Date: Mar 2009
Posts: 295
Received Thanks: 150
Refine-Set auslesen per Quest

Hallo Leute,

gibt es eine Möglichkeit die Uppitems, die benötigt werden zum uppen eines Item´s, auszulesen über einen Questbefehl?

"item.get_over9_material_vnum(item.get_vnum()) " liefert mir leider nur eine 0 zurück.

MFG Lordechen
Lordechen is offline  
Old 03/03/2016, 12:59   #2

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Am einfachsten würde es gehen wenn du beim laden der questlib einen table füllst mit den Daten (Durch eine mysql_query)
rollback is offline  
Old 03/03/2016, 19:05   #3
 
gerald500's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
Quote:
Originally Posted by Seחsi View Post
Am einfachsten würde es gehen wenn du beim laden der questlib einen table füllst mit den Daten (Durch eine mysql_query)
er kann doch einfach eine funktion machen die nur die uppitems für das eine item abfrägt

ungefähr so ?

Code:
		function get_upp_items(itemVnum)
			local refine_set = tonumber(mysq_query("SELECT refine_set FROM player.item_proto WHERE vnum='"..itemVnum.."';").refine_set[1])
			local q = mysql_query("SELECT * FROM player.refine_proto WHERE id='"..refine_set.."';")
			if q == "ERROR" or refine_set =="ERROR" then return false end
			local uppitems = {{q.vnum0[1],q.count0[1]},{q.vnum1[1],q.count1[1]},{q.vnum2[1],q.count2[1]},{q.vnum3[1],q.count3[1]},{q.vnum4[1],q.count4[1]}}
			return uppitems
		end
Hab nämlich sowas irgendwie schonmal versucht sprich eine tabelle in der questlib erstellen und sie via mysql_query zu laden, es war recht viel was ich rein laden wollte dann hat irgendwie mein server nicht mehr gestartet ?
gerald500 is offline  
Old 03/03/2016, 19:35   #4

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Quote:
Originally Posted by gerald500 View Post
er kann doch einfach eine funktion machen die nur die uppitems für das eine item abfrägt

ungefähr so ?

Code:
		function get_upp_items(itemVnum)
			local refine_set = tonumber(mysq_query("SELECT refine_set FROM player.item_proto WHERE vnum='"..itemVnum.."';").refine_set[1])
			local q = mysql_query("SELECT * FROM player.refine_proto WHERE id='"..refine_set.."';")
			if q == "ERROR" or refine_set =="ERROR" then return false end
			local uppitems = {{q.vnum0[1],q.count0[1]},{q.vnum1[1],q.count1[1]},{q.vnum2[1],q.count2[1]},{q.vnum3[1],q.count3[1]},{q.vnum4[1],q.count4[1]}}
			return uppitems
		end
Hab nämlich sowas irgendwie schonmal versucht sprich eine tabelle in der questlib erstellen und sie via mysql_query zu laden, es war recht viel was ich rein laden wollte dann hat irgendwie mein server nicht mehr gestartet ?
Wenn der Server dann nicht mehr gestartet hat hast du etwas falsch gemacht. Der Vorteil das beim Laden der questlib zu machen ist, dass die Informationen im Speicher verbleiben und beim Funktionsaufruf keine Query mehr gemacht werden muss.

Code:
local ITEM_INFO_TABLE = {}

local itemInfoResult = mysql_query("SELECT item.vnum, item.locale_name, refine.vnum0, refine.count0, refine.vnum1, refine.count1, refine.vnum2, refine.count2, refine.vnum3, refine.count3 FROM player.item_proto item INNER JOIN player.refine_proto refine ON item.refine_set = refine.id;")
if itemInfoResult then
	for _, dataset in ipairs(itemInfoResult) do
		local vnum = tonumber(dataset[1])
		local name = dataset[2]
		
		local refineSet = {}
		
		for i = 3, 9, 2 do
			local vnum = tonumber(dataset[i])
			local count = tonumber(dataset[i + 1])
			
			if vnum >= 1 and count >= 1 then
				table.insert(refineSet, {vnum = vnum, count = count})
			end
		end
		
		ITEM_INFO_TABLE[vnum] = {vnum = vnum, name = name, refineSet = refineSet}
	end
end


function item.getRefineset(vnum)
	vnum = vnum or item.get_vnum()

	local itemInfo = ITEM_INFO_TABLE[vnum]
	if not itemInfo then return nil end
	
	return itemInfo.refineSet
end
rollback is offline  
Old 03/03/2016, 19:49   #5
 
gerald500's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
Quote:
Originally Posted by Seחsi View Post
Wenn der Server dann nicht mehr gestartet hat hast du etwas falsch gemacht. Der Vorteil das beim Laden der questlib zu machen ist, dass die Informationen im Speicher verbleiben und beim Funktionsaufruf keine Query mehr gemacht werden muss.

Code:
local ITEM_INFO_TABLE = {}

local itemInfoResult = mysql_query("SELECT item.vnum, item.locale_name, refine.vnum0, refine.count0, refine.vnum1, refine.count1, refine.vnum2, refine.count2, refine.vnum3, refine.count3 FROM player.item_proto item INNER JOIN player.refine_proto refine ON item.refine_set = refine.id;")
if itemInfoResult then
	for _, dataset in ipairs(itemInfoResult) do
		local vnum = tonumber(dataset[1])
		local name = dataset[2]
		
		local refineSet = {}
		
		for i = 3, 9, 2 do
			local vnum = tonumber(dataset[i])
			local count = tonumber(dataset[i + 1])
			
			if vnum >= 0 and count >= 0 then
				table.insert(refineSet, {vnum = vnum, count = count})
			end
		end
		
		ITEM_INFO_TABLE[vnum] = {vnum = vnum, name = name, refineSet = refineSet}
	end
end


function item.getRefineset(vnum)
	vnum = vnum or item.get_vnum()

	local itemInfo = ITEM_INFO_TABLE[vnum]
	if not itemInfo then return nil end
	
	return itemInfo.refineSet
end
ne hab ich nicht mister, wenn ich deinen stuff in meine questlib lade dann startet der server nicht mehr
gerald500 is offline  
Old 03/03/2016, 21:33   #6

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Quote:
Originally Posted by gerald500 View Post
ne hab ich nicht mister, wenn ich deinen stuff in meine questlib lade dann startet der server nicht mehr
deine mysql_query funktion gibt das ergebnis auch anders zurück als die, die ich nutze
rollback is offline  
Old 03/04/2016, 16:42   #7
 
gerald500's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
Quote:
Originally Posted by Seחsi View Post
deine mysql_query funktion gibt das ergebnis auch anders zurück als die, die ich nutze
dann solltest du ihm vielleicht auch deine mysql_query funktion dazugeben ?
gerald500 is offline  
Old 03/04/2016, 17:13   #8

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Quote:
Originally Posted by gerald500 View Post
dann solltest du ihm vielleicht auch deine mysql_query funktion dazugeben ?
Ich habe aktuell keine, weil ich weder aufgesetzte Files noch eine questlib oder so auf meinem PC habe. Ich weiss nur, dass es da verschiedenste Funktion für gibt - die, die ich immer genutzt habe hat es eben in diesem Format zurückgegeben:

col1col2
Sensenmann105
gerald500500

Code:
mysql_query("SELECT * FROM example;")

-->
{
	{"Sensenmann", "105"},
	{"gerald500", "500"}
}
und bei deiner:
Code:
mysql_query("SELECT * FROM example;")

-->
{
	col1 = {"Sensenmann", "gerald500"},
	col2 = {"105", "500"},
}

Mit deiner mysql_query müsste es also so klappen:
Code:
local ITEM_INFO_TABLE = {}

local itemInfoResult = mysql_query("SELECT item.vnum AS vnum, item.locale_name AS name, refine.vnum0 AS vnum0, refine.count0 AS count0, refine.vnum1 AS vnum1, refine.count1 AS count1, refine.vnum2 AS vnum2, refine.count2 AS count2, refine.vnum3 AS vnum3, refine.count3 AS count3 FROM player.item_proto item INNER JOIN player.refine_proto refine ON item.refine_set = refine.id;")
if itemInfoResult then
	for i = 1, table.getn(itemInfoResult.vnum) do
		local vnum = itemInfoResult.vnum[i]
		local name = itemInfoResult.name[i]
		
		local vnum0 = tonumber(itemInfoResult.vnum0[i])
		local count0 = tonumber(itemInfoResult.count0[i])
		local vnum1 = tonumber(itemInfoResult.vnum1[i])
		local count1 = tonumber(itemInfoResult.count1[i])
		local vnum2 = tonumber(itemInfoResult.vnum2[i])
		local count2 = tonumber(itemInfoResult.count2[i])
		local vnum3 = tonumber(itemInfoResult.vnum3[i])
		local count3 = tonumber(itemInfoResult.count3[i])
		
		
		local refineSet = {}
		
		if vnum0 >= 1 and count0 >= 1 then
			table.insert(refineSet, {vnum = vnum0, count = count0})
		end
		if vnum1 >= 1 and count1 >= 1 then
			table.insert(refineSet, {vnum = vnum1, count = count1})
		end
		if vnum2 >= 1 and count2 >= 1 then
			table.insert(refineSet, {vnum = vnum2, count = count2})
		end
		if vnum3 >= 1 and count3 >= 1 then
			table.insert(refineSet, {vnum = vnum3, count = count3})
		end
		
		ITEM_INFO_TABLE[vnum] = {vnum = vnum, name = name, refineSet = refineSet}
	end
end


function item.getRefineset(vnum)
	vnum = vnum or item.get_vnum()

	local itemInfo = ITEM_INFO_TABLE[vnum]
	if not itemInfo then return nil end
	
	return itemInfo.refineSet
end
rollback is offline  
Old 03/05/2016, 01:32   #9
 
gerald500's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
Quote:
Originally Posted by Seחsi View Post
Ich habe aktuell keine, weil ich weder aufgesetzte Files noch eine questlib oder so auf meinem PC habe. Ich weiss nur, dass es da verschiedenste Funktion für gibt - die, die ich immer genutzt habe hat es eben in diesem Format zurückgegeben:

col1col2
Sensenmann105
gerald500500

Code:
mysql_query("SELECT * FROM example;")

-->
{
	{"Sensenmann", "105"},
	{"gerald500", "500"}
}
und bei deiner:
Code:
mysql_query("SELECT * FROM example;")

-->
{
	col1 = {"Sensenmann", "gerald500"},
	col2 = {"105", "500"},
}

Mit deiner mysql_query müsste es also so klappen:
Code:
local ITEM_INFO_TABLE = {}

local itemInfoResult = mysql_query("SELECT item.vnum AS vnum, item.locale_name AS name, refine.vnum0 AS vnum0, refine.count0 AS count0, refine.vnum1 AS vnum1, refine.count1 AS count1, refine.vnum2 AS vnum2, refine.count2 AS count2, refine.vnum3 AS vnum3, refine.count3 AS count3 FROM player.item_proto item INNER JOIN player.refine_proto refine ON item.refine_set = refine.id;")
if itemInfoResult then
	for i = 1, table.getn(itemInfoResult.vnum) do
		local vnum = itemInfoResult.vnum[i]
		local name = itemInfoResult.name[i]
		
		local vnum0 = tonumber(itemInfoResult.vnum0[i])
		local count0 = tonumber(itemInfoResult.count0[i])
		local vnum1 = tonumber(itemInfoResult.vnum1[i])
		local count1 = tonumber(itemInfoResult.count1[i])
		local vnum2 = tonumber(itemInfoResult.vnum2[i])
		local count2 = tonumber(itemInfoResult.count2[i])
		local vnum3 = tonumber(itemInfoResult.vnum3[i])
		local count3 = tonumber(itemInfoResult.count3[i])
		
		
		local refineSet = {}
		
		if vnum0 >= 0 and count0 >= 0 then
			table.insert(refineSet, {vnum = vnum0, count = count0})
		end
		if vnum1 >= 0 and count1 >= 0 then
			table.insert(refineSet, {vnum = vnum1, count = count1})
		end
		if vnum2 >= 0 and count2 >= 0 then
			table.insert(refineSet, {vnum = vnum2, count = count2})
		end
		if vnum3 >= 0 and count3 >= 0 then
			table.insert(refineSet, {vnum = vnum3, count = count3})
		end
		
		ITEM_INFO_TABLE[vnum] = {vnum = vnum, name = name, refineSet = refineSet}
	end
end


function item.getRefineset(vnum)
	vnum = vnum or item.get_vnum()

	local itemInfo = ITEM_INFO_TABLE[vnum]
	if not itemInfo then return nil end
	
	return itemInfo.refineSet
end
danke aber ich weiß schon wie ich meine mysql_query funktion hand haben muss allerdings geht das trotzdem nicht in der questlib in einer normalen quest gehts allerdings frag mich nicht wieso.


ich sparr mir immer alle mysql_querys für sowas weil ich einfach einen txt auszug mache von der tabelle alle leerzeichen mit einem delimiter ersetze und es danach mit der io libary in eine tabelle lese
gerald500 is offline  
Old 03/05/2016, 01:51   #10

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Quote:
Originally Posted by gerald500 View Post
danke aber ich weiß schon wie ich meine mysql_query funktion hand haben muss allerdings geht das trotzdem nicht in der questlib in einer normalen quest gehts allerdings frag mich nicht wieso.


ich sparr mir immer alle mysql_querys für sowas weil ich einfach einen txt auszug mache von der tabelle alle leerzeichen mit einem delimiter ersetze und es danach mit der io libary in eine tabelle lese
Komisch, hab es gerade nochmal auf einem Server von einem Freund probiert und da klappts ohne Probleme ...
In der syserr müsste ja ein Fehler stehen wenn es nicht klappt. Kannst du den mal posten?

EDIT:
Hast du den Code denn auch nach der Deklaration (bzw. dem dofile) der mysql_query-Funktion gelegt?

EDIT2:
Hier mal mein Test-Code und das Ergebnis:
Code:
local file = io.open(get_locale_base_path() .. "/quest/item_info_test.txt", "w")
local gifti = ITEM_INFO_TABLE[188]

file:write(string.format("Name: %s\n", gifti.name))
file:write(string.format("Vnum: %d\n", gifti.vnum))
file:write("Refineset:\n")

for _, refineItem in ipairs(gifti.refineSet) do
	file:write(string.format("	Vnum: %d, Anzahl: %d\n", refineItem.vnum, refineItem.count))
end

file:close()
Code:
Name: Giftschwert+8
Vnum: 188
Refineset:
	Vnum: 27994, Anzahl: 1
rollback is offline  
Old 03/05/2016, 10:10   #11
 
gerald500's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
Quote:
Originally Posted by Seחsi View Post
Komisch, hab es gerade nochmal auf einem Server von einem Freund probiert und da klappts ohne Probleme ...
In der syserr müsste ja ein Fehler stehen wenn es nicht klappt. Kannst du den mal posten?

EDIT:
Hast du den Code denn auch nach der Deklaration (bzw. dem dofile) der mysql_query-Funktion gelegt?

EDIT2:
Hier mal mein Test-Code und das Ergebnis:
Code:
local file = io.open(get_locale_base_path() .. "/quest/item_info_test.txt", "w")
local gifti = ITEM_INFO_TABLE[188]

file:write(string.format("Name: %s\n", gifti.name))
file:write(string.format("Vnum: %d\n", gifti.vnum))
file:write("Refineset:\n")

for _, refineItem in ipairs(gifti.refineSet) do
	file:write(string.format("	Vnum: %d, Anzahl: %d\n", refineItem.vnum, refineItem.count))
end

file:close()
Code:
Name: Giftschwert+8
Vnum: 188
Refineset:
	Vnum: 27994, Anzahl: 1
aus Txt funtzt einwandfrei, wenn ich den fehler haette dann wuesst ich ja worans liegt ^^

Zu deiner frage ja natuerlich
gerald500 is offline  
Old 03/05/2016, 12:40   #12

 
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
Wenn die game sich aber wegen einem Fehler in der questlib nicht starten lässt wird eig. immer ein Fehler angezeigt (sowohl in der Konsole als auch in der syserr).

Die einzigen Fehler die ich mir jetzt vorstellen könnte sind:
Code:
attempt to call global mysql_query (a nil value)
und
Code:
attempt to index global itemInfoResult (a nil value)
rollback is offline  
Old 03/05/2016, 13:23   #13
 
gerald500's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
Wieso sollte ich den luegen xd.
Es ist nun mal so und in der konsole kommt nur ein fehler bei einem syntax error

Es ist eh wayne mit txts gehts ja

Gesendet von meinem S30 mit Hilfe von Elitepvpers, bereitgestellt von appyet.com
gerald500 is offline  
Reply


Similar Threads Similar Threads
Metin2 in Quest tabelle auslesen
07/14/2015 - Metin2 Private Server - 6 Replies
Hallo Epvp, ist es möglich in einer quest eine Tabelle in Navicat auslesen zu lassen? Also z.b. Soll in der Datenbank account die spalte "name" angezeigt werden. Wäre gut, wenn jemand schnell helfen könnte. lg
Chat per Quest auslesen?
06/05/2014 - Metin2 Private Server - 7 Replies
Hallo EPvP, ich wollt mal fragen ob es einen Befehl/Möglichkeit gibt, den Ingame-Chat auszulesen. Beispiel: Spieler A schreibt: "Der Server War2 ist viel besser!" Jetzt will ich den Chat auslesen und per Quest abfragen: "Hat der Spieler das Wort 'Server War2' benutzt? Wenn ja, banne den Spieler vom Server."
[FIX]DoRefineWithScroll: REFINE : Unknown refine scroll
07/27/2013 - Metin2 PServer Guides & Strategies - 9 Replies
Hi, falls euch der fehler DoRefineWithScroll: REFINE : Unknown refine scroll item in der syserr auf den sack geht habe ich hier eine Lösung für euch wie ihr es fixt. 1. Player Datenbank öffnen 2. refine_proto tabelle öffnen 3. Oben links auf "file" und dann auf "Query Table.." klicken 4. folgendes einfügen und oben auf "Run" klicken UPDATE player.refine_proto SET count0='0' WHERE vnum0='0'; UPDATE player.refine_proto SET count1='0' WHERE vnum1='0'; UPDATE player.refine_proto SET...
over 9 refine with quest
05/17/2013 - Metin2 Private Server - 4 Replies
hi epvpers, i want to upgrade an item with quest. for example, refine vnum is set in the item_proto as 12010 but i want to upgrade this item to 25000 with quest function. there are some quest functions (like item.can_over9refine, item.over9refine, enable_over9refine, item.change_to_over9) but i dont know how to use. is there anybody could help me?



All times are GMT +2. The time now is 19:57.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.