Hallu,
ich habe eine Pet-Quest mit MYSQL-Abfrage, diese habe ich auf meinen alten Serverfiles ohne Probleme benutzen können, ich habe dort auch die selbe Schnittstelle benutzt. Bei meinen neuen Files, klappt das mit der MYSQL-Erweiterung nicht mehr, es kann daran liegen, dass das MYSQL Kennwort ein !@# hat, per hand kann ich mich so auch nicht einloggen.... Ich habe deshalb in der Erweiterung schon:
PHP Code:
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
zu
PHP Code:
os.execute("mysql -u mt2pet --password='test' --e='"..string.format('%q',query).."' > "..fi) -- für MySQL51
geändert und so lasse ich den Server ja über einen anderen User, als in den Configs bestimmt connecten. Dennoch geht die Abfrage noch immer nicht. Syserr bleibt leer....
quest haustiere begin
state start begin
-- Setzt den neuen Petnamen in die Datenbank ein
function set_pet_name(name)
mysql_query("DELETE FROM player.pet_name WHERE id = \\'"..pc.get_player_id().."\\'")
mysql_query("INSERT INTO player.pet_name(id, name) VALUES(\\'"..pc.get_player_id().."\\', \\'"..name.."\\')")
end
-- Holt sich den Petnamen aus der Datenbank
function get_pet_name()
local pet_name = mysql_query("SELECT * FROM player.pet_name WHERE id = \\'"..pc.get_player_id().."\\'")
return (pet_name.name or {pc.get_name().."'s Haustier"})[1]
end
-- Feuer-Phönix
when 53001.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(22)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Rentierjunges
when 53002.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(24)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Eis-Phönix
when 53003.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(23)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Baby-Azrael
when 53005.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(25)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Baby-Wolfs
when 53006.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(26)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Baby-Löwen
when 53007.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(27)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Baby-Keiler
when 53008.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(28)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Baby-Tiger
when 53009.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(29)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Baby-Eisbär
when 53014.use begin
if pet.is_summon() then
pet.unsummon()
chat("Dein Haustier verabschiedet sich nun von dir!")
affect.remove_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.remove_collect(apply.MAX_HP, 1000, 60*60*8)
else
local old_level = horse.get_level()
local old_name = horse.get_name()
horse.set_level(30)
horse.set_name(haustiere.get_pet_name())
pet.summon()
horse.set_level(old_level)
horse.set_name(old_name)
affect.add_collect(apply.ATT_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.DEF_GRADE_BONUS, 100, 60*60*8)
affect.add_collect(apply.MAX_HP, 1000, 60*60*8)
end
end
-- Namenskette - Namensändung des Haustiers
when 71110.use begin
say_title("Namenskette :")
say("")
say("Hier kannst du deinem Haustier einen neuen")
say("Namen geben. Damit kannst du dein Haustier")
say("über alle anderen hervorheben.")
say("")
akna = haustiere.get_pet_name()
if string.len(akna) == 0 then
say_reward("Dein Haustier besitzt bis jetzt keinen Namen.")
else
say_reward("Der aktuelle Name deines Haustieres lautet: "..akna)
end
say("")
say("Möchtest du fortfahren?")
say("")
local s=select("Umbenennen", "Abbrechen")
if s==2 then
return
end
say_title("Namenskette :")
say("")
say("Bitte gib hier den neuen Namen deines")
say("Haustieres ein.")
local x = input()
if string.len(x) < 2 then
say_title("Namenskette :")
say("Der eingegeben Name ist zu kurz.")
say("")
say_reward("Der neue Name muss aus")
say_reward("mind. 2 Zeichen bestehen.")
say("")
return
elseif string.len(x) > 12 then
say_title("Namenskette :")
say("Der eingegeben Name ist zu lang.")
say("")
say_reward("Der neue Name darf max.")
say_reward("aus 12 Zeichen bestehen.")
say("")
return
end
haustiere.set_pet_name(x)
chat("Haustier erfolgreich umbenannt")
pc.remove_item(71110, 1)
end
end
end
PS: Ich habe es per
PHP Code:
local pet_name = os.execute("mysql -u mt2pet --password='test' --e='SELECT name FROM player.pet_name WHERE id = '"..pc.get_player_id().."';'")
Sicher dass du MySQL 5.1 und nicht 5.5 hast? Die Funktion bietet beides, jedoch ist 5.5 standardmäßig auskommentiert (Steht ja extra in der Zeile dabei).
Standardmäßig sieht die MySQL-Funktion so aus: ()
Code:
mysql_query = function(query)
if not pre then
local rt = io.open('CONFIG','r'):read('*all')
pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
end
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
-- os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tonumber(b) or b or 'NULL'
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tonumber(b) or b or 'NULL'
end) end
return out
end
Möchtest du sie mit 5.5 nutzen, so musst du die Kommentare austauschen:
Code:
mysql_query = function(query)
if not pre then
local rt = io.open('CONFIG','r'):read('*all')
pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
end
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
-- os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tonumber(b) or b or 'NULL'
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tonumber(b) or b or 'NULL'
end) end
return out
end
Nur ein kleiner Lösungsansatz c:
Dann noch eine kleine Anpassung für dich:
Code:
mysql_query = function(query)
local user = 'a';
local pass = 'b';
local pre = ' -u'..user.. '-p'..pass
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
-- os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tonumber(b) or b or 'NULL'
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tonumber(b) or b or 'NULL'
end) end
return out
end
Weiterhin MySQL-Version beachten; Tippe bei dir lediglich auf eine Fehlkonfiguration
Die Änderung solltest du eigl nicht brauchen, denn er nimmt ja 1:1 den MySQL-User des Cores, das heißt, er hat die selben Rechte.
Der Meister selber *-*
Danke erstmal für deine Antwort, an das MYSQL 5.5 hatte ich auch schon gedacht und getestet hat leider nicht funktioniert...
Deine zweite Lösung habe ich gerade getestet, natürlich habe ich den MYSQL-User eingetragen, funktioniert leider auch nicht. Wenn ich die Querrys per Hand in Vbox eingebe:
mysql -u mt2pet --password='test' --e='SELECT * FROM player.pet_name WHERE id = '12345';
Ich seh's mir heute Abend eventuell mal an, ich schicke dir eine PN mit meiner Skype-ID, dann kannst du mich hinzufügen. Ich werde die dann die Tage mal unter die Arme greifen.
MySQL <=> Quest abfrage Problem 04/03/2013 - Metin2 Private Server - 12 Replies Moin,
Ich habe ein kleines Problem mit meiner Quest, und zwar wollte ich mit Hilfe einer mysql_query - Abfrage die Coins eines Accounts auslesen, nur leider klappt es nicht ganz...
Hier mal der ausschnitt der Quest:
elseif f==3 then
say_title("Lagerverwalter:")
say("Gebe nun den Spielernamen ein.")
local name_of_char_to_check_coins = input()
Quest mit MySQL-Abfrage 01/14/2013 - Metin2 Private Server - 2 Replies Wie man aus der Überschrift schon entnehmen kann, hab ich eine Frage zu Quests und zwar: Wenn ich mit os.execute arbeite, lässt sich damit etwas aus der Datenbank abfragen, weil updaten kann man ja die db, aber eben das abfragen.
Ich würde mich über konstruktive Antworten freuen.
[mysql]Abfrage? 12/13/2012 - Metin2 Private Server - 9 Replies Wie kann ich in einer quest eine Mysql abfrage machen?
zb Das Geld von mein gerade gespielten Spieler??
MySQL Abfrage item_proto 04/18/2011 - Metin2 Private Server - 3 Replies ich möchte ganz einfach und simpel
alle codes anzeigen lassen in einer Tabelle :
Name:
Code:
das wars
das ist mein bisheriger code
<?php
[PHP]Mysql Abfrage Problem 08/30/2010 - Web Development - 4 Replies Hallo zusammen,
ich wollte mal fragen ob mit jemand hier helfen kann.
Ich habe Folgende Funktion
public function getStats()
{
if($this->getLogin())
{
$sql = "SELECT * FROM character WHERE accountID = '".$this->getAccID()."'";
$stats = Game::getDB()->getFirstRow($sql);