|
You last visited: Today at 19:57
Advertisement
Refine-Set auslesen per Quest
Discussion on Refine-Set auslesen per Quest within the Metin2 Private Server forum part of the Metin2 category.
03/03/2016, 12:33
|
#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
|
|
|
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)
|
|
|
03/03/2016, 19:05
|
#3
|
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
|
Quote:
Originally Posted by Seחsi
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 ?
|
|
|
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
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
|
|
|
03/03/2016, 19:49
|
#5
|
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
|
Quote:
Originally Posted by Seחsi
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
|
|
|
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
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
|
|
|
03/04/2016, 16:42
|
#7
|
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
|
Quote:
Originally Posted by Seחsi
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 ?
|
|
|
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
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:
col1 | col2 |
---|
Sensenmann | 105 | gerald500 | 500 |
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
|
|
|
03/05/2016, 01:32
|
#9
|
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
|
Quote:
Originally Posted by Seחsi
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:
col1 | col2 |
---|
Sensenmann | 105 | gerald500 | 500 |
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
|
|
|
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
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
|
|
|
03/05/2016, 10:10
|
#11
|
elite*gold: 150
Join Date: Sep 2010
Posts: 1,049
Received Thanks: 275
|
Quote:
Originally Posted by Seחsi
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
|
|
|
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)
|
|
|
03/05/2016, 13:23
|
#13
|
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
|
|
|
|
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.
|
|