Discussion on [R] (Quest) Grundgerüst für eine PVP-Rangliste within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
Ich hatte diese Quest (die full) für jemanden geschrieben, der sich leider etwas vertan hatte mit seiner Beschreibung von dem, was er wollte, doch ich will nicht, dass das auch auf meiner Platte verstaubt, ohne Nutzen, deshalb gebe ich sie euch c:
Es ist ein Grundgerüst für eine PVP-Rangliste.
Einmal (half mysql) mit Speicherung in Questflags, ein mal (full MySQL) pur in MySQL.
Die halt-MySQL Rangliste updatet sich ca alle 6 Minuten, die full-MySQL Rangliste ist immer Up2Date - ist dafür aber auch belastender! Ansonsten aber komplett identisch. Die Rangliste wird Farbig, je nach Reich des Spielers.
Es ist nur ein kleines Delay von 4 Minuten eingebaut, was selbstverständlich keinen allzu guten Push-Schutz ergibt!
Die Punkte, die man erhält, können auf allerlei Kriterien ausgeweitet werden, wie etwa eigene TP etc.
Benötigt werden
npc.get_vid und mysql_query
Diese Quests sollen nur ein Grundgerüst darstellen, sind Standalone aber auch komplett lauffähig!
CREATE TABLE player.pvp_points ( `pid` int NULL , `points` int NULL , PRIMARY KEY (`pid`) ); --]] state start begin when kill with npc.is_pc() begin if get_time() - pc.getqf "gpoint_time" < 0 then return end local data = { me = { lv = pc.get_level(), em = pc.get_empire(), }, opp = {} } local me = pc.select(npc.get_vid()) data.opp = { lv = pc.get_level(), em = pc.get_empire(), pi = party.is_party(), pl = party.is_leader(), pn = party.get_near_count() } pc.select(me) if math.abs(data.me.lv-data.opp.lv) > 15 then -- 15 LVL unterschied MAXIMAL return end local points = data.opp.em ~= data.me.em and 3 or 1 -- 3 Punkte bei "Ausländischem" Gegner, 1 bei "Einheimischen" if data.opp.pi and data.opp.pn > 0 then -- +1 Punkt, wenn Gegner in einer Gruppe ist und mind. ein Mitglied in der nähe ist points = points+1 end if data.opp.pi and data.opp.pn > 0 and data.opp.pl then -- +1 Punkt, wenn Gegner in einer Gruppe ist und mind. ein Mitglied in der nähe ist UND er Gildenleiter ist points = points+1 end notice("Du hast "..points.." PVP-Punkte erhalten!") pc.setqf("gpoint_time",get_time()+4*60) -- 4m delay mysql_query("insert into player.pvp_points VALUES("..pc.get_player_id()..","..points"..) ON DUPLICATE KEY UPDATE points=points+"..points) end when 9010.chat."PVP-Rangliste" begin say_title"PVP-Rangliste" say "Welche Rangliste möchtest du dir ansehen?" local sel = select("Alle Reiche","Rotes Reich","Gelbes Reich","Blaues Reich","Keine") if sel == 5 then return end local query = "select player.name, player_index.empire,pvp_points.points from pvp_points INNER JOIN player.player ON player.id = pvp_points.pid INNER JOIN player.player_index ON player.account_id = player_index.id" if sel > 1 then query = query.." where player_index.empire == "..(sel-1) end local out = mysql_query(query.." ORDER BY points DESC LIMIT 100")-- Zur Sicherheit nur 100 if type(out) ~= "table" or type(out[1]) ~= "table" then say "Es gab leider keine Resultate!" return end local num,sel = 1,1 local max = table.getn(out) repeat for i = math.max(num,1),math.min(max,num+9) do if out[i] then local colors = ({{205, 92, 92},{255,215,0},{135, 206, 250}})[out[i][2]] say('[COLOR r;'..(colors[1]/255)..'|g;'..(colors[2]/255)..'|b;'..(colors[3]/255)..']'..i.." - "..out[i][1]..": "..out[i][3]) else say("-err-") end end say_reward"Was möchtest du tun?" if num +10 > max then sel = select{"Zurück","Abbrechen"} sel = sel == 2 and 3 or 1 elseif num == 1 then sel = select("Weiter","Abbrechen")+1 else sel = select("Zurück","Weiter","Abbrechen") end num = math.abs(num + (sel == 1 and -10 or 10)) until sel == 3 end end end
quest gkp begin --[[ by Mijago benötigt npc.get_vid, mysql_query * Ressourcenschonender * Rangliste Updatet nur ca alle 6 Minuten. --]] state start begin when kill with npc.is_pc() begin if get_time() - pc.getqf "gpoint_time" < 0 then return end local data = { me = { lv = pc.get_level(), em = pc.get_empire(), }, opp = {} } local me = pc.select(npc.get_vid()) data.opp = { lv = pc.get_level(), em = pc.get_empire(), pi = party.is_party(), pl = party.is_leader(), pn = party.get_near_count() } pc.select(me) if math.abs(data.me.lv-data.opp.lv) > 15 then -- 15 LVL unterschied MAXIMAL return end local points = data.opp.em ~= data.me.em and 3 or 1 -- 3 Punkte bei "Ausländischem" Gegner, 1 bei "Einheimischen" if data.opp.pi and data.opp.pn > 0 then -- +1 Punkt, wenn Gegner in einer Gruppe ist und mind. ein Mitglied in der nähe ist points = points+1 end if data.opp.pi and data.opp.pn > 0 and data.opp.pl then -- +1 Punkt, wenn Gegner in einer Gruppe ist und mind. ein Mitglied in der nähe ist UND er Gildenleiter ist points = points+1 end notice("Du hast "..points.." PVP-Punkte erhalten!") pc.setqf("pvp_points",pc.getqf("pvp_points")+points) pc.setqf("gpoint_time",get_time()+4*60) -- 4m delay end when 9010.chat."PVP-Rangliste" begin say_title"PVP-Rangliste" say "Welche Rangliste möchtest du dir ansehen?" local sel = select("Alle Reiche","Rotes Reich","Gelbes Reich","Blaues Reich","Keine") if sel == 5 then return end local query = "select player.name, player_index.empire,quest.lValue from quest INNER JOIN player.player ON player.id = quest.dwpid INNER JOIN player.player_index ON player.account_id = player_index.id where quest.szName = "..string.format("%q","gkp").." and szState = "..string.format("%q","pvp_points") if sel > 1 then query = query.." and player_index.empire == "..(sel-1) end local out = mysql_query(query.." ORDER BY points DESC LIMIT 100")-- Zur Sicherheit nur 100 if type(out) ~= "table" or type(out[1]) ~= "table" then say "Es gab leider keine Resultate!" return end local num,sel = 1,1 local max = table.getn(out) repeat for i = math.max(num,1),math.min(max,num+9) do if out[i] then local colors = ({{205, 92, 92},{255,215,0},{135, 206, 250}})[out[i][2]] say('[COLOR r;'..(colors[1]/255)..'|g;'..(colors[2]/255)..'|b;'..(colors[3]/255)..']'..i.." - "..out[i][1]..": "..out[i][3]) else say("-err-") end end say_reward"Was möchtest du tun?" if num +10 > max then sel = select{"Zurück","Abbrechen"} sel = sel == 2 and 3 or 1 elseif num == 1 then sel = select("Weiter","Abbrechen")+1 else sel = select("Zurück","Weiter","Abbrechen") end num = math.abs(num + (sel == 1 and -10 or 10)) until sel == 3 end end end
Wie mache ich mit eine Myqsl Homepage wo Regi und Rangliste immer an ist? 01/08/2011 - Main - 2 Replies Hey brauche Hilfe hab's schon überall gesucht aber nie gefunden also:
Wie mache ich mir eine myqsl Homepage wo ein Itemshop eine Rangliste und Regi und so alles dabei ist nicht mit xaamp (oda so)
So schaut meine jetztige aus. -->. perfectemetin2 - Home
och behühe mich sehr eine Seite wie zB. www.Xtrememt2.de zu bekommen aber wie mache ich so eine Seite bitte hilft mit ich wäre eich seehhhhhrrrr dankbar ich Stelle meinen Server ja dann auf Homeroot und habe einen Itemshop also verdiene...
[Frage]Rangliste by Shani's HP & Starterset Quest 07/07/2010 - Metin2 Private Server - 0 Replies Muh,
ich wollt ma schnell fragen ( für die die die HP kennen )
wie kann man by Shanis's HP bei der Rangliste die GM's aus der Rangliste weg lassen...
besser gesagt is das nicht nur by Shani sondern
bei jeder Rangliste gibts da ne Möglichkeit die GM's iwie auszublenden?
2. Frage
will eine regiseite auf hamachi+rangliste+itemshop 06/01/2010 - Metin2 Private Server - 3 Replies hallo ich wollt fragen welches des einfachste und beste itemshop+rang ist??
und wie es funktioniert weil habe eins http://www.elitepvpers.com/forum/metin2-pserver-gui des-strategies/450503-release-m2-hompage-scriptet- byxface-v-1-1-a.html
, aber ich versteh es nicht wie es geht??
könnt ihr mir mal erklären wie das geht bei mir steht nur Msql on aber world und der rest off
Suche Eine Rangliste! 01/06/2010 - Metin2 Private Server - 4 Replies Hey EPvP.
Ich bin auf der suche nach einer Rangliste mit:
Platz|
Name|
Level|
EXP|
Reich|
Und Geschlecht!