|
You last visited: Today at 06:00
Advertisement
[R]Quest für Spieler(GK)
Discussion on [R]Quest für Spieler(GK) within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
03/04/2013, 12:51
|
#16
|
elite*gold: 0
Join Date: Mar 2012
Posts: 765
Received Thanks: 535
|
Quote:
Originally Posted by Anohros
Hallo,
an der Quest muss noch so einiges verbessert werden.
Alleine für die Gilden-Statistiken wurden 4 unnötige Abfragen aufgewendet, das kann besser gelöst werden:
Code:
SELECT
win,
loss,
draw,
COUNT(pid) AS members,
player.name AS master,
player.online AS masterOnline
FROM
player.guild
JOIN
player.guild_member
ON (
guild_member.guild_id = guild.id
)
JOIN
player.player
ON (
player.id = guild.master
)
WHERE
guild.name = '" .. guildName .. "'
Du bist dir schon bewusst, das mit deinen 6 Abfragen für die Gilden-Statistiken auch 6 Prozesse gestartet werden?
Mit freundlichen Grüßen
Anohros
|
ich habe nicht wirklich Ahnung von mysql, habe es auch seit kurzem gelernt.
Die quest habe ich nicht für mich geschrieben sondern für euch, mit der Hoffnung das man es noch erweitern kann.
mfg Noa
€.@ dstyl kann folgende gründe habe
-Du hast deine eigene Gilde ausgewählt
-Du hast die Gilde anderer falsch eingegeben
-Du hast eine Leere Tabelle ausgewählt
-Der wer in der Tabelle beträgt nil<- existiert nicht
|
|
|
03/04/2013, 13:50
|
#17
|
elite*gold: 120
Join Date: Mar 2009
Posts: 3,409
Received Thanks: 1,738
|
Wenn man kein 12 MB Root/Hamachi/locale hat, sollten die paar Abfragen MySQL nichts ausmachen.
Danke für's Release.
|
|
|
03/04/2013, 13:53
|
#18
|
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
|
@Noa:
Danke für deine Antwort.
Also eigene Gilde auszuwählen habe ich versucht, kam halt die besagte Meldung jedoch geht es bei anderen ebenfalls nicht.
Die Eingabe der anderen Gilde/n war 100% richtig, ging trotzdem nicht. :/
Was genau meinst du mit "Leere Tabelle" ?
Mit "nil" meinst du, denke ich mal, ebenfalls eine falsche Eingabe bzw. keine Eingabe oder?
|
|
|
03/04/2013, 14:47
|
#19
|
elite*gold: 0
Join Date: Mar 2012
Posts: 765
Received Thanks: 535
|
vll benutzt du einfach die falschen mysql funktionen, hier ist meine
PHP Code:
mysql_query = function(query) --2 local rt = io.open('CONFIG','r'):read('*all') local pre= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') 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) 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] = b out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = b end) end return out end
|
|
|
03/04/2013, 14:51
|
#20
|
elite*gold: 906
Join Date: Sep 2009
Posts: 17,295
Received Thanks: 4,399
|
Sehr gutes Release! Sehr gut, danke dafür, kann man gebrauchen.
|
|
|
03/04/2013, 15:25
|
#21
|
elite*gold: 252
Join Date: Mar 2008
Posts: 3,111
Received Thanks: 3,911
|
man braucht die tabelle nicht bearbeiten, alles was man braucht, ist schon drin.
Solltest drüber nachdenken, schließlich gibt es auch online statistiken.. Man kann ganz einfach mittels "last_play"-Spalte auch so den onlinestatus des Gildenleaders überprüfen.
|
|
|
03/04/2013, 15:43
|
#22
|
elite*gold: 0
Join Date: Oct 2009
Posts: 428
Received Thanks: 192
|
Quote:
Originally Posted by ©by Noa
vll benutzt du einfach die falschen mysql funktionen, hier ist meine
PHP Code:
mysql_query = function(query) --2 local rt = io.open('CONFIG','r'):read('*all') local pre= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') 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) 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] = b out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = b end) end return out end
|
Habe nur die Schnittstelle von Hanashi drinne..
|
|
|
03/04/2013, 16:04
|
#23
|
elite*gold: 30
Join Date: Jul 2010
Posts: 1,627
Received Thanks: 1,450
|
Quote:
Originally Posted by .Alessa
man braucht die tabelle nicht bearbeiten, alles was man braucht, ist schon drin.
Solltest drüber nachdenken, schließlich gibt es auch online statistiken.. Man kann ganz einfach mittels "last_play"-Spalte auch so den onlinestatus des Gildenleaders überprüfen.
|
Oder, wenn es nicht so tragisch iss oder Lebenswichtig..
Find_pc_name oder wie es heisst..
|
|
|
03/04/2013, 16:18
|
#24
|
elite*gold: 1862
Join Date: Jan 2009
Posts: 3,725
Received Thanks: 7,671
|
Channelübergreifend sind solche Befehle wie z.B. "find_pc_name" nicht immer oder garnicht.
|
|
|
03/04/2013, 17:07
|
#25
|
elite*gold: 5
Join Date: Oct 2010
Posts: 1,692
Received Thanks: 1,772
|
PHP Code:
when login with pc.is_guild_master() begin mysql_query("UPDATE player.player SET GuiM='Online' WHERE name='"..pc.get_name().."';") end when logout with pc.is_guild_master() begin mysql_query("UPDATE player.player SET GuiM='Offline' WHERE name='"..pc.get_name().."';") en
Überlastet das nicht total?
|
|
|
03/04/2013, 17:29
|
#26
|
elite*gold: 120
Join Date: Mar 2009
Posts: 3,409
Received Thanks: 1,738
|
Quote:
Originally Posted by DasKuchen
PHP Code:
when login with pc.is_guild_master() begin mysql_query("UPDATE player.player SET GuiM='Online' WHERE name='"..pc.get_name().."';") end when logout with pc.is_guild_master() begin mysql_query("UPDATE player.player SET GuiM='Offline' WHERE name='"..pc.get_name().."';") en
Überlastet das nicht total?
|
Wie man's nimmt.
Hängt von der Root Leistung ab.
Nehmen wir mal an, ein Server hat 500 Spieler (gleichzeitig online).
Demnach haben die auch keinen "Überroot".
Aber das sollte, denke ich mal, nichts überlasten, weil ja nicht alle ADHS haben und einloggen,ausloggen,einloggen,ausloggen usw.
Hat ein Server ca 1500-2000 Spieler, haben die auch ein dementsprechenden Root.
Kann sein, dass auf solchen Servern viele ADHS-Kinder rumrennen, aber wenn man einen erfolgreichen Server hat, wird man schon 'ne Lösung finden.
|
|
|
03/04/2013, 17:31
|
#27
|
elite*gold: 0
Join Date: Mar 2012
Posts: 765
Received Thanks: 535
|
Quote:
Originally Posted by DasKuchen
PHP Code:
when login with pc.is_guild_master() begin mysql_query("UPDATE player.player SET GuiM='Online' WHERE name='"..pc.get_name().."';") end when logout with pc.is_guild_master() begin mysql_query("UPDATE player.player SET GuiM='Offline' WHERE name='"..pc.get_name().."';") en
Überlastet das nicht total?
|
deswegen ist es auch auf pc.is_guild_master() beschränkt
|
|
|
03/04/2013, 18:21
|
#28
|
elite*gold: 0
Join Date: Feb 2010
Posts: 7,221
Received Thanks: 6,758
|
when login / logout ist übrigens bei jedem Mapwechsel aktiv - daher sehr lastig.
|
|
|
03/04/2013, 19:18
|
#29
|
elite*gold: 0
Join Date: May 2011
Posts: 254
Received Thanks: 68
|
Very Nice!!!!
|
|
|
03/04/2013, 21:51
|
#30
|
elite*gold: 99
Join Date: Aug 2009
Posts: 4,296
Received Thanks: 5,092
|
Quote:
Originally Posted by IgorGlock
Ich würde nie einen "String" bzw. Zeichenkette abspeichern für eine 0/1 Abfrage.
Dafür gibt's "boolean", kannst "true" oder "false" setzen. Sehr sparsame Variante.
Alternativ gibt's Int (tinyint?) Variante, hier speicherst du einfach eine 0 oder eine 1 o.ä. Zahlen.
Für ca. 100 000 Charaktere wäre das Wort "Offline" ein Resourcenlastiges Wort.
Beschäftige dich damit
|
|
|
|
Similar Threads
|
[Quest-Release]Wartungsmodus Quest /Kick all Player/Spieler login nach Char..W. kick
04/02/2018 - Metin2 PServer Guides & Strategies - 30 Replies
Hallo da mir langweilig war und ich eine quest auf meinem PC gesehn habe
durch diese eine Idee ausgelöst wurde
Release ich nun die Idee falls public Sry -.-
Ablauf
Beim NPC Wartungsmodus aktivieren
eine Zeit (minuten) angeben über 30..
alle 5 minuten wird ein notice all ausgegeben
nach der angebenen Zeit werden alle Spieler gekickt und
Und das Spielen Ingame gesperrt...
|
All times are GMT +2. The time now is 06:00.
|
|