|
You last visited: Today at 11:24
Advertisement
[Release]PvP Rangliste
Discussion on [Release]PvP Rangliste within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.
03/07/2013, 20:05
|
#1
|
elite*gold: 50
Join Date: Mar 2013
Posts: 2,401
Received Thanks: 1,613
|
[Release]PvP Rangliste
Code:
quest pvp_kills_rank begin
state start begin
when login begin
local pid = mysql_query("select id from player.player where name='"..pc.get_name().."' LIMIT 1")
table.foreachi(pid,function(i,l)
pc.setqf("pid", l[1])
end)
local set = mysql_query("INSERT INTO pvp_kills (name, kills, pid) VALUES ('"..pc.get_name().."', 0, "..pc.getqf("pid")..")")
pc.setqf("pvp_kills_rank", 0)
set_state(select_kills)
end
end
state select_kills begin
when login begin
local get1 = mysql_query("select name from pvp_kills where pid= "..pc.getqf("pid").." LIMIT 1")
if get1 ~= pc.get_name() then
mysql_query("UPDATE pvp_kills SET name = '"..pc.get_name().."' WHERE pid = '"..pc.getqf("pid").."' LIMIT 1")
end
end
when kill with npc.is_pc() begin
mysql_query("UPDATE pvp_kills SET kills = kills+1 WHERE pid = '"..pc.getqf("pid").."' LIMIT 1")
pp = mysql_query("select name,kills from pvp_kills ORDER BY kills desc LIMIT 15")
table.foreachi(pp,function(i,l)
if l[1]== pc.get_name() then
if pc.getqf("pvp_kills_rank") ~= i then
pc.setqf("pvp_kills_rank", i)
chat("Du bist nun auf Rang "..i.." der PvP Rangliste")
if i==1 then
notice_all(pc.get_name().." ist nun auf Platz 1 der PvP Rangliste")
end
end
end
end)
end
when 9003.chat."Killrangliste" begin
say_title("Ranglisten")
say("Was möchtest du tun?")
local s = select("Gesamte Liste", "Mein Rang", "Spieler suchen", "Abbrechen")
if s == 4 then
return
end
if s == 1 then
pp = mysql_query("select name,kills from pvp_kills ORDER BY kills desc LIMIT 15")
say("Rang - Name - Kills")
pc.setqf("pvp_kills_rank",0)
table.foreachi(pp,function(i,l)
say(i.." - "..l[1].." - "..l[2])
end)
elseif s == 2 then
pp = mysql_query("select name,kills from pvp_kills where pid="..pc.getqf("pid").." ORDER BY kills desc LIMIT 1")
say_title("Mein Rang")
say("Rang - Name - Kills")
pc.setqf("pvp_kills_rank",0)
table.foreachi(pp,function(i,l)
say(i.." - "..l[1].." - "..l[2])
end)
elseif s == 3 then
say_title("Spieler suchen")
say("Gib den Namen des zu suchenden ein")
local name = input()
if name == '' then
say_title("Fehler")
say("Das Eingabefeld ist leer")
else
pp = mysql_query("select name,kills from pvp_kills where name='"..name.."' ORDER BY kills desc LIMIT 1")
say_title("Spieler suchen")
say("Rang - Name - Kills")
pc.setqf("pvp_kills_rank",0)
table.foreachi(pp,function(i,l)
say(i.." - "..l[1].." - "..l[2])
end)
end
end
end
end
end
Credits:
Mijago für die Questlib + Die Funktion, die Spieler in der Rangliste auszugeben.
Zu erstellen:
Code:
-- ----------------------------
-- Table structure for `pvp_kills`
-- ----------------------------
DROP TABLE IF EXISTS `pvp_kills`;
CREATE TABLE `pvp_kills` (
`name` text,
`kills` int(255) default NULL,
`pid` int(244) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Falls Verbesserungsvorschläge bestehen -> Bitte PNen
PS: Ich hab an Server gedacht, bei denen die Namensänderung aktiviert ist
|
|
|
03/07/2013, 20:08
|
#2
|
elite*gold: 0
Join Date: Mar 2013
Posts: 103
Received Thanks: 9
|
Nice!
|
|
|
03/07/2013, 20:10
|
#3
|
elite*gold: 5
Join Date: Oct 2010
Posts: 1,692
Received Thanks: 1,772
|
PHP Code:
when login begin local pid = mysql_query("select id from player.player where name='"..pc.get_name().."' LIMIT 1") table.foreachi(pid,function(i,l) pc.setqf("pid", l[1]) end) local set = mysql_query("INSERT INTO pvp_kills (name, kills, pid) VALUES ('"..pc.get_name().."', 0, "..pc.getqf("pid")..")") pc.setqf("pvp_kills_rank", 0) set_state(select_kills) end
Überlastung?
|
|
|
03/07/2013, 20:11
|
#4
|
elite*gold: 50
Join Date: Mar 2013
Posts: 2,401
Received Thanks: 1,613
|
Wieso sollte das ne Überlastung geben? oO
|
|
|
03/07/2013, 20:12
|
#5
|
elite*gold: 5
Join Date: Oct 2010
Posts: 1,692
Received Thanks: 1,772
|
Wenn man z.B. 200 aktive Spieler hat und bei jedem Login sprich auch warp
er eine Query ausführt (ich nehme an ,dass es überlastet sicher bin ich mir nicht).
|
|
|
03/07/2013, 20:13
|
#6
|
elite*gold: 120
Join Date: Mar 2009
Posts: 3,409
Received Thanks: 1,738
|
Ist einfach, wenn man's von Mijagos Ingameranking abschreibt.
Code:
table.foreachi(pp,function(i,l)
say(i.." - "..l[1].." - "..l[2])
end)
Erkenne ich alleine daran.
|
|
|
03/07/2013, 20:15
|
#7
|
elite*gold: 50
Join Date: Mar 2013
Posts: 2,401
Received Thanks: 1,613
|
Ja stimmt schon wenn so viele Aktiv sind. Aber denke nen guter Root steckt das locker weg ^-^
Aber das was du quotiert hast ist nur beim ersten login.
Den Namecheck kann man allerdings rausnehmen wenn der Server eh keine Namenänderung hat. Dann wird der Core nicht belastet
@.Remix
Mijago steht in den Credits. Mit Mysql Ergebnissen ausgeben kannte ich mich noch nicht aus. Also hab ich mir andere Quests angeguckt um zu begreifen wies geht.
Sonst nur in PhP damit gearbeitet
|
|
|
03/08/2013, 01:10
|
#8
|
elite*gold: 0
Join Date: Sep 2012
Posts: 176
Received Thanks: 172
|
Für was gibts die Function pc.get_player_id()?
Btw, wenn du sowieso jeden in die neue Tabelle schreibst, wieso dann nicht
gleich ne neue Spalte in der player Tabelle?
Mfg
|
|
|
03/08/2013, 06:43
|
#9
|
elite*gold: 0
Join Date: Aug 2011
Posts: 336
Received Thanks: 37
|
Quote:
Originally Posted by »Sakazuki
Für was gibts die Function pc.get_player_id()?
Btw, wenn du sowieso jeden in die neue Tabelle schreibst, wieso dann nicht
gleich ne neue Spalte in der player Tabelle?
Mfg
|
wegen der namensänderung
|
|
|
03/08/2013, 17:35
|
#10
|
elite*gold: 0
Join Date: Mar 2013
Posts: 51
Received Thanks: 17
|
Danke wird evt benutzt ^^
|
|
|
01/18/2015, 00:23
|
#11
|
elite*gold: 313
Join Date: Apr 2013
Posts: 585
Received Thanks: 122
|
|
|
|
01/18/2015, 08:19
|
#12
|
elite*gold: 83
Join Date: Nov 2013
Posts: 2,891
Received Thanks: 2,764
|
wenn das hier sowieso gepusht wird, ich würde anstatt den namen einzutragen nur die kills und player_id eintragen und den namen per inner join aus der player tabelle abrufen (namensänderung und so).
PHP Code:
quest pvp_kills_rank begin state start begin when login begin local set = mysql_query("INSERT INTO pvp_kills (kills, pid) VALUES (0, "..pc.get_player_id()..");") pc.setqf("pvp_kills_rank", 0) set_state(select_kills) end end state select_kills begin when kill with npc.is_pc() begin mysql_query("UPDATE pvp_kills SET kills = kills+1 WHERE pid = '"..pc.get_player_id().."' LIMIT 1") pp = mysql_query("select player.name, pvp_kills.kills from pvp_kills inner join player WHERE pvp_kills.pid = player.id ORDER BY kills desc LIMIT 15") table.foreachi(pp,function(i,l) if l[1]== pc.get_name() then if pc.getqf("pvp_kills_rank") ~= i then pc.setqf("pvp_kills_rank", i) chat("Du bist nun auf Rang "..i.." der PvP Rangliste") if i==1 then notice_all(pc.get_name().." ist nun auf Platz 1 der PvP Rangliste") end end end end) end when 9003.chat."Killrangliste" begin say_title("Ranglisten") say("Was möchtest du tun?") local s = select("Gesamte Liste", "Mein Rang", "Spieler suchen", "Abbrechen") if s == 4 then return end if s == 1 then pp = mysql_query("select player.name, pvp_kills.kills from pvp_kills inner join player WHERE pvp_kills.pid = player.id ORDER BY kills desc LIMIT 15") say("Rang - Name - Kills") pc.setqf("pvp_kills_rank",0) table.foreachi(pp,function(i,l) say(i.." - "..l[1].." - "..l[2]) end) elseif s == 2 then pp = mysql_query("select player.name, pvp_kills.kills from pvp_kills inner join player where pvp_kills.pid="..pc.get_player_id().." AND pvp_kills.pid = player.id ORDER BY kills desc LIMIT 1") say_title("Mein Rang") say("Rang - Name - Kills") pc.setqf("pvp_kills_rank",0) table.foreachi(pp,function(i,l) say(i.." - "..l[1].." - "..l[2]) end) elseif s == 3 then say_title("Spieler suchen") say("Gib den Namen des zu suchenden ein") local name = input() if name == '' then say_title("Fehler") say("Das Eingabefeld ist leer") else pp = mysql_query("select player.name, pvp_kills.kills from pvp_kills inner join where name='"..name.."' AND pvp_kills.pid = player.id ORDER BY kills desc LIMIT 1") say_title("Spieler suchen") say("Rang - Name - Kills") pc.setqf("pvp_kills_rank",0) table.foreachi(pp,function(i,l) say(i.." - "..l[1].." - "..l[2]) end) end end end end end
nicht getestet .. ^^
|
|
|
01/18/2015, 12:05
|
#13
|
elite*gold: 0
Join Date: Jan 2015
Posts: 106
Received Thanks: 52
|
Wieso macht es jeder so unnormal umständlich?
Code:
quest ingamerank begin
state start begin
when kill with npc.is_pc() begin
mysql_query("update player.player set pvp_kills = pvp_kills + 1 where name = ".. pc.name)
end
when 20095.chat."PvP Ranking" begin
say_title("PvP Ranking")
local s = select("Rangliste","Spieler suchen", "Abbrechen")
say_title("PvP Ranking")
if s == 3 then return
elseif s == 1 then
for k,v in pairs(mysql_query("select * from player.player order by pvp_kills desc limit 10;")) do
say(k .." - ".. v.name .." - ".. v.pvp_kills)
end
elseif s == 2 then
say("Gib einen Spielernamen an")
say()
local p = input()
if p == "" or string.find(p, ";") then return end
say_title("PvP Ranking")
if tonumber(mysql_query("select count(*) from player.player where name = ".. p)[1][1]) then
return say("Der Spieler existiert nicht")
end
p = mysql_query("select * from player.player where name = ".. p)
say(p[1].name .. " - ".. p[1].pvp_kills)
end
end
end
end
|
|
|
01/18/2015, 12:16
|
#14
|
elite*gold: 0
Join Date: Nov 2010
Posts: 113
Received Thanks: 118
|
sieht gut aus danke
|
|
|
01/18/2015, 12:18
|
#15
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
Eh. Ja.
Das ist umständlich
Code:
-- by kilroy.
quest pvp_ranking begin
state start begin
when 20011.chat."PvP-Rangliste" begin
pvp_ranking.seite1()
end
when kill with npc.is_pc() begin
vid = npc.get_vid()
myVid = pc.select(vid)
player_id = pc.get_player_id()
pc.select(myVid)
if get_time() >= pc.getqf(tostring(player_id).."_time") then
pc.setqf(tostring(player_id).."_time", get_time()+60*2)
if tonumber(mysql_query("select count(*) from player.PvP_Ranking where name = '"..pc.get_name().."';")[1][1]) == 0 then
-- Wenn der Name noch nicht existiert, füge ein
mysql_query("INSERT player.PvP_Ranking SET name = '"..pc.get_name().."';")
mysql_query("UPDATE player.PvP_Ranking SET kills = 1 WHERE name = '"..pc.get_name().."';")
mysql_query("UPDATE player.PvP_Ranking SET reich = '"..pc.get_empire().."' WHERE name = '"..pc.get_name().."';")
else
mysql_query("UPDATE player.PvP_Ranking SET kills = kills+1 WHERE name = '"..pc.get_name().."';")
end
end
end
function seite1()
say_title("PvP Rangliste")
say("")
s = select("Global", "Rot", "Gelb", "Blau", "Abbrechen")
if s==5 then
return
elseif s==1 then
pvp_ranking.global()
elseif s==2 then
pvp_ranking.rot()
elseif s==3 then
pvp_ranking.gelb()
elseif s==4 then
pvp_ranking.blau()
end
end
function global()
say_title("Global")
a = select("Eigener Rang", "Rangliste", "Spielersuche", "Zurück", "Abbrechen")
if a==1 then
pvp_ranking.own_rang(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' order by kills DESC;"))
elseif a==2 then
pvp_ranking.make_rangliste(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' order by kills DESC;"))
elseif a==3 then
say_title("Spielersuche")
say("")
say("Gib den Namen ein.")
name = input()
if name=="" then return end
if string.find(name, "(%W)")!= nil then syschat("Dieser Name enthält Sonderzeichen.") return end
pvp_ranking.search_rang(name, mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' order by kills DESC;"))
elseif a==4 then
pvp_ranking.seite1()
elseif a==5 then
return
end
end
function rot()
say_title("Reich Rot")
a = select("Eigener Rang", "Rangliste", "Spielersuche", "Zurück", "Abbrechen")
if a==1 then
if pc.get_empire()!=1 then
say_title("Eigener Rang")
say("")
say("Du gehörst nicht dem roten Reich an.")
return
end
pvp_ranking.own_rang(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 1 order by kills DESC;"))
elseif a==2 then
pvp_ranking.make_rangliste(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 1 order by kills DESC;"))
elseif a==3 then
say_title("Spielersuche")
say("")
say("Gib den Namen ein.")
name = input()
if name=="" then return end
if string.find(name, "(%W)")!= nil then syschat("Dieser Name enthält Sonderzeichen.") return end
pvp_ranking.search_rang(name, mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 1 order by kills DESC;"))
elseif a==4 then
pvp_ranking.seite1()
elseif a==5 then
return
end
end
function gelb()
say_title("Reich Gelb")
a = select("Eigener Rang", "Rangliste", "Spielersuche", "Zurück", "Abbrechen")
if a==1 then
if pc.get_empire()!=2 then
say_title("Eigener Rang")
say("")
say("Du gehörst nicht dem roten Reich an.")
return
end
pvp_ranking.own_rang(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 2 order by kills DESC;"))
elseif a==2 then
pvp_ranking.make_rangliste(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 2 order by kills DESC;"))
elseif a==3 then
say_title("Spielersuche")
say("")
say("Gib den Namen ein.")
name = input()
if name=="" then return end
if string.find(name, "(%W)")!= nil then syschat("Dieser Name enthält Sonderzeichen.") return end
pvp_ranking.search_rang(name, mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 2 order by kills DESC;"))
elseif a==4 then
pvp_ranking.seite1()
elseif a==5 then
return
end
end
function blau()
say_title("Reich Blau")
a = select("Eigener Rang", "Rangliste", "Spielersuche", "Zurück", "Abbrechen")
if a==1 then
if pc.get_empire()!=3 then
say_title("Eigener Rang")
say("")
say("Du gehörst nicht dem roten Reich an.")
return
end
pvp_ranking.own_rang(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 3 order by kills DESC;"))
elseif a==2 then
pvp_ranking.make_rangliste(mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 3 order by kills DESC;"))
elseif a==3 then
say_title("Spielersuche")
say("")
say("Gib den Namen ein.")
name = input()
if name=="" then return end
if string.find(name, "(%W)")!= nil then syschat("Dieser Name enthält Sonderzeichen.") return end
pvp_ranking.search_rang(name, mysql_query("SELECT * from player.PvP_Ranking where name not like '[%' and reich = 3 order by kills DESC;"))
elseif a==4 then
pvp_ranking.seite1()
elseif a==5 then
return
end
end
function make_rangliste(list)
if list.name==nil then return end
rang_len = table.getn(list.name)
ende = 0
for a = 1, rang_len, 1 do -- Rangliste Seite
say_title("PvP-Ranking Seite "..a)
say("")
for b = 1, 10, 1 do -- Ranglisten Einträge
local c = 10* ( a - 1 ) + b
if list.name[c]==pc.get_name() then
say(color256(255, 255, 0)..""..c..". "..list.name[c]..", Kills: "..list.kills[c]..""..color256(196, 196, 196))
else
say(c..". "..list.name[c]..", Kills: "..list.kills[c])
end
if c==rang_len then ende=1 break end
end
if a==1 and ende==1 then
s=select("Hauptmenu", "Abbrechen")
if s==1 then
pvp_ranking.seite1()
break
elseif s==2 then
return
end
elseif a==1 then
s=select("Weiter", "Hauptmenu", "Abbrechen")
if s==2 then
pvp_ranking.seite1()
break
elseif s==3 then
return
end
elseif ende==1 then
ende=0
s=select("Zurück", "Hauptmenu", "Abbrechen")
if s==1 then
a=a-2
elseif s==2 then
pvp_ranking.seite1()
break
elseif s==3 then
return
end
else
s = select("Weiter", "Zurück", "Hauptmenu", "Abbrechen")
if s==2 then
a=a-2
elseif s == 3 then
pvp_ranking.seite1()
break
elseif s==4 then
return
end
end
end
end
function own_rang(list)
if list.name==nil then return end
rang_len = table.getn(list.name)
pos = 0
ende = 0
say_title("Eigener Rang")
say("")
for i=1, rang_len, 1 do -- Finde Spielerposition
if list.name[i]==pc.get_name() then
pos = i
break
end
end
if pos==0 then say("Du bist nicht in der Liste.") return end
if pos-4<=0 then
for i=1,pos,1 do
if pos-i==1 then
pos = pos-i
break
end
end
else
pos = pos-4
end
for c = pos, pos+8, 1 do -- Rangliste
if list.kills[c]==nil then ende=1 break end
if list.name[c]==pc.get_name() then
say(color256(255, 255, 0)..""..c..". "..list.name[c]..", Kills: "..list.kills[c]..""..color256(196, 196, 196))
else
say(c..". "..list.name[c]..", Kills: "..list.kills[c])
end
if c==pos+8 then ende=1 break end
end
if ende==1 then
if select("Hauptmenu", "Schließen")==2 then return end
pvp_ranking.seite1()
end
end
function search_rang(name, list)
if list.name==nil then return end
rang_len = table.getn(list.name)
pos = 0
ende = 0
say_title(name.."'s Rang")
say("")
for i=1, rang_len, 1 do -- Finde Spielerposition
if list.name[i]==name then
pos = i
break
end
end
if pos==0 then say(name.." ist nicht in der Liste.") return end
if pos-4<=0 then
for i=1,pos,1 do
if pos-i==1 then
pos = pos-i
break
end
end
else
pos = pos-4
end
for c = pos, pos+8, 1 do -- Rangliste
if list.kills[c]==nil then ende=1 break end
if list.name[c]==pc.get_name() then
say(color256(255, 255, 0)..""..c..". "..list.name[c]..", Kills: "..list.kills[c]..""..color256(196, 196, 196))
else
if list.name[c]==name then
say(color256(255, 255, 0)..""..c..". "..list.name[c]..", Kills: "..list.kills[c]..""..color256(196, 196, 196))
else
say(c..". "..list.name[c]..", Kills: "..list.kills[c])
end
end
if c==pos+8 then ende=1 break end
end
if ende==1 then
if select("Hauptmenu", "Schließen")==2 then return end
pvp_ranking.seite1()
end
end
end
end
zum erstellen:
Code:
DROP TABLE IF EXISTS `PvP_Ranking`;
CREATE TABLE `PvP_Ranking` (
`name` varchar(254) NOT NULL,
`kills` int(100) NOT NULL,
`reich` int(1) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
|
 |
|
Similar Threads
|
[Release]100% Funktionstüchtige PvP Rangliste, GM effect + Map 1 Design
10/12/2013 - Metin2 PServer Guides & Strategies - 33 Replies
Tagchen
da mich viele Leute genervt haben und das Zeug brauchen release ich es mal spart euch die dummen kommentare für die die null erfahrung mit sowas haben is es ausreichend die Rangliste ist mit dem KillGui von .Avenue™ kombiniert
also das müsstet ihr schon drinne haben is nicht schwer ;)
aber denke mal es geht auch ohne :P
Der Rest müsste eigentlich klar sein.
erstmal die Query
Navicat auf dein server connecten Account strg und Q Drücken dann das einfügen und auf run fertig
by...
|
[Release]Ingame PvP Rangliste
06/22/2013 - Metin2 PServer Guides & Strategies - 29 Replies
Hier Release ich eine Ingame PvP Rangliste
Die Query dazu müsst ihr euch selbst machen , jedoch sollte das nicht so schwer sein.
*INFO* Alle Kilsl die von den Spieler gemacht werden , werden in der DB geloggt und addiert. Mann kann dann beim NPC nachschauen wie jeweils die Top Leute aus den Reichen stehen (Global , Rote, Blaues , Gelbes)
Ich habe als Grundlage die Quest von Mijago benutzt die in seinem ersten Video geschrieben wurde. Ingame Rangliste.
Hier ein riesen Danke an ihn.
|
[Release] Boss Rangliste by Corex
04/18/2013 - Metin2 PServer Guides & Strategies - 11 Replies
Hey Elitepvpers,
hier release ich das Boss Ranglisten Script (v1.1) by Corex.
Inhalt v1.1 :
Azrael
Wasserdrache
Eishexe
|
[Release] Boss Rangliste by Corex
02/19/2013 - Metin2 Guides & Templates - 0 Replies
Please #Close
|
All times are GMT +1. The time now is 11:25.
|
|