[Release] erweiterte Questflags per MySQL

06/06/2015 12:19 rollback#1
Damit könnt ihr in einer Questflag einen String und eine Nummer speichern, diese Einzeln oder gleichzeitig abfragen und wenns mal sein muss direkt in der Datenbank bearbeiten, ohne den Server zu rebooten.

Nichts großes aber bestimmt hilfreich für manche ;)

SQL:
Code:
CREATE TABLE questflag (
	pid int(11) NOT NULL,
	qid int(5) NOT NULL,
	flagname varchar(50) NOT NULL,
	flag_num int(100) NOT NULL DEFAULT 0,
	flag_str varchar(100) NOT NULL DEFAULT '',
	set_time datetime NOT NULL,
	PRIMARY KEY(pid, qid, flagname)
);
LUA:
Code:
local getqf_query = "SELECT flag_num, flag_str FROM player.questflag WHERE pid = %s AND qid = %s AND flagname = '%s' LIMIT 1;"
local setqf_query = "INSERT INTO player.questflag (pid, qid, flagname, flag_num, flag_str, set_time) VALUES (%s, %s, '%s', %s, %s, CURRENT_TIMESTAMP) ON DUPLICATE KEY UPDATE flag_num = %s, flag_str = %s, set_time = CURRENT_TIMESTAMP;"

function pc.getf(questindex, flagname)
	local qf = mysql_query(string.format(getqf_query, pc.get_player_id(), questindex, flagname))
	if not qf or table.getn(qf) < 1 then
		return {0, ""}
	end
	return {tonumber(qf.flag_num[1]), qf.flag_str[1]}
end

function pc.getf_num(questindex, flagname)
	return pc.getf(questindex, flagname)[1]
end

function pc.getf_str(questindex, flagname)
	return pc.getf(questindex, flagname)[2]
end

function pc.setf(questindex, flagname, flag_num, flag_str)
	mysql_query(string.format(setqf_query, pc.get_player_id(), questindex, flagname, flag_num, "'"..flag_str.."'", flag_num, "'"..flag_str.."'"))
end

function pc.setf_num(questindex, flagname, flag_num)
	mysql_query(string.format(setqf_query, pc.get_player_id(), questindex, flagname, flag_num, "flag_str", flag_num, "flag_str"))
end

function pc.setf_str(questindex, flagname, flag_str)
	mysql_query(string.format(setqf_query, pc.get_player_id(), questindex, flagname, "flag_num", "'"..flag_str.."'", "flag_num", "'"..flag_str.."'"))
end

function pc.getqf(flagname)
	return pc.getf(q.getcurrentquestindex(), flagname)
end

function pc.getqf_num(flagname)
	return pc.getf_num(q.getcurrentquestindex(), flagname)
end

function pc.getqf_str(flagname)
	return pc.getf_str(q.getcurrentquestindex(), flagname)
end

function pc.setqf(flagname, flag_num, flag_str)
	pc.setf(q.getcurrentquestindex(), flagname, flag_num, flag_str)
end

function pc.setqf_num(flagname, flag_num)
	pc.setf_num(q.getcurrentquestindex(), flagname, flag_num)
end

function pc.setqf_str(flagname, flag_str)
	pc.setf_str(q.getcurrentquestindex(), flagname, flag_str)
end
Viel Spaß damit!

EDIT:

Quote:
Originally Posted by It's me, 1093 View Post
Habe ich überlegt zu machen allerdings finde ich es für mich so wie es ist angenehmer.

Hier die andere Möglichkeit:
Code:
function pc.setqf(flagname, flag)
	({pc.setqf_num, pc.setqf_str})[type(flag) == "number" and 1 or 2](flagname, flag)
end
06/06/2015 12:20 Fearn#2
Wie immer : Super Geil! :D
06/06/2015 12:21 #Metho#3
Direkt mal nutzen :) Erspart Zeit :9
06/06/2015 12:35 .Kibito#4
ich finde du hast dort zu viele funktionen.
am besten wäre es wenn pc.setqf einfach checkt ob es sich um einen int oder einen string handelt und von selbst dann aussucht wie er es einträgt
06/06/2015 13:10 DasSchwarzeT#5
Quote:
Originally Posted by .Kibito View Post
ich finde du hast dort zu viele funktionen.
am besten wäre es wenn pc.setqf einfach checkt ob es sich um einen int oder einen string handelt und von selbst dann aussucht wie er es einträgt
Sollte über die type-Funktion ja eigentlich kein Problem sein
06/06/2015 13:13 KΛIƬӨ#6
Quote:
Originally Posted by srsly not DasSchwarzeT View Post
Sollte über die type-Funktion ja eigentlich kein Problem sein
Code:
 if type(pc.getqf("flag")) == 'number' then
meinst es so?

btt: nett.
06/06/2015 13:19 rollback#7
Quote:
Originally Posted by .Kibito View Post
ich finde du hast dort zu viele funktionen.
am besten wäre es wenn pc.setqf einfach checkt ob es sich um einen int oder einen string handelt und von selbst dann aussucht wie er es einträgt
Habe ich überlegt zu machen allerdings finde ich es für mich so wie es ist angenehmer.

Hier die andere Möglichkeit:
Code:
function pc.setqf(flagname, flag)
	({pc.setqf_num, pc.setqf_str})[type(flag) == "number" and 1 or 2](flagname, flag)
end
06/06/2015 17:29 AnTii™#8
Wie du sagtest, nichts großes aber wirklich nett und zu gebrauchen :)

Danke dir.
06/06/2015 17:51 Dev'Malum#9
Zehr zupah, tanke tir!
06/06/2015 21:28 Fydes#10
Sauber, wie immer.
06/07/2015 00:28 mcmst54321#11
Gute Arbeit :)