PDA

View Full Version : FULL TopPos with overtaking



Paho
29th April 2016, 21:31
zom.gsc CallbackKilled:
if(attacker.position>1)
attacker thread scripts\top::kilstat();


init() {
precacheString( & "^4Т^7воя ^4н^7овая ^4п^7озиция^2:^2");
precacheString( & "^4Y^7our ^4n^7ew ^4p^7osition^2:^2");
}

onPlayerConnecting() //read all stats when a player connected
{
self.killplayers = self.stats["killszom"];
if (self.killplayers == 0) {
sql = "SELECT killszom FROM `Accounts`";
mysql_query(level.mysql, sql);
result = mysql_store_result(level.mysql);
self.position = mysql_num_rows(result); //how many positions
self scripts\ _mysql::mysql_write();
} else {
self.position = self.stats["toppos"];
}
}

kilstat() //when a zombie killing
{
self.position = self.stats["toppos"];
statik1 = int(self.position - 1);
sql = "SELECT killszom, login FROM `Accounts` WHERE `toppos`='" + statik1 + "'"; //position to know where to make a request to find out how many kills the player below us
mysql_query(level.mysql, sql);
result = mysql_store_result(level.mysql);
row = mysql_fetch_row(result);
ab = int(row[0]); //kills below us Player
ba = row[1]; //login below us Player
if (self.killplayers > ab) //if the player's previous kills more kills in the top, then go ahead
{
statik2 = int(self.position);
sql = "UPDATE `Accounts` SET " +
"toppos='" + statik2 + "' " +
"WHERE login='" + ba + "'"; //up, who have overtaken, we give him our position
mysql_query(level.mysql, sql);
player = self;
players = getEntArray("player", "classname");
for (x = 0; x < players.size; x++) {
if (players[x].pers["loginname"] == ba) //if the one overtaken - online? - Write it in a variable position, and say that it surpassed
{
players[x].position = self.position;
players[x] iprintlnbold("Have overtaken ", self.name);
}
}
self.position--; //give yourself a position on one line below
sql = "UPDATE `Accounts` SET " +
"toppos='" + self.position + "' " +
"WHERE login='" + self.stats["loginname"] + "'";
mysql_query(level.mysql, sql);
mysql_free_result(result);
///
player = self;
players = getEntArray("player", "classname");
for (i = 0; i < players.size; i++) {
if (players.pers["language"] == "1")
players[i] iprintln(self.name + " ^4н^7овая ^4п^7озиция^2:^7" + self.position);
else if (players[i].pers["language"] == "0")
players[i] iprintln(self.name + " ^4n^7ew ^4p^7osition^2:^7" + self.position);
}
if (self.pers["language"] == "1")
self iprintlnbold("^4Т^7воя ^4н^7овая ^4п^7озиция^2:^2" + self.position);
else if (self.pers["language"] == "0")
self iprintlnbold("^4Y^7our ^4n^7ew ^4p^7osition^2:^2" + self.position);
}
}
BUT during the game at some moment straying column toppos. [I]ONLY toppos! WHY!? pls Help
For example, who was in the first position is reset to the last.

Paho
30th April 2016, 10:55
pls help :eek::confused:

IzNoGoD
30th April 2016, 11:38
I have no idea what you're trying to accomplish.

maxdamage99
1st May 2016, 11:11
TOP PLAYERS, PLAYERS SORT BY KILLS, UNDERSTAND?
EXAMPLE:


TOP POS: NAME PLAYER: KILLS(PTS):
==1== ^1Freddy 312511
==2== Unknown Soldier 286388
==3== Played.nL.28 175262

IzNoGoD
1st May 2016, 15:20
SELECT name, kills FROM tablename_here ORDER BY kills DESC LIMIT 10

I'm pretty sure this is NOT exactly what you want, but this follows your request. So please clarify your request.

maxdamage99
2nd May 2016, 17:39
your query make TOP10, we want TOP(ALLPLAYERS) :)

IzNoGoD
2nd May 2016, 18:19
then change the 10 to whatever number you want.

If that does not answer your question, ask it again, provide some paint image, tell the same thing 3x in different wording. Try to get your question past the language barrier.

I'm fine with doing some MySQL query writing for you, if you provide information about your database and can actually make your question clear.

Paho
3rd May 2016, 12:27
need to display each player's position, number of kills to the next position, if the player has overtaken - changing position + iprint new pos.
looking at the script does not understand?
working script with file operations:

init()
{
precacheString(&"^4“^7во¤ ^4н^7ова¤ ^4п^7озици¤^2:^2");
precacheString(&"^4Y^7our ^4n^7ew ^4p^7osition^2:^2");
}
onPlayerConnecting()
{
p=self;
f=openfile("yourlogin/"+p.pers["loginname"]+".txt","read");
if(f==-1)
p.killplayers=0;
else
{
freadln(f);
p.killplayers = int(fgetarg(f,0));
closefile(f);
}
f=openfile("killstatlogin/"+p.pers["loginname"]+".txt","read");
if(f==-1)
{
f=openfile("lastpos1/"+"statistik1"+".txt","read");
freadln(f);
p.lastpos = int(fgetarg(f,0));
closefile(f);
p.lastpos++;
p.position = p.lastpos;
f=openfile("lastpos1/"+"statistik1"+".txt", "write");
fprintln(f, p.lastpos);
closefile(f);
f=openfile("killstatlogin/"+p.pers["loginname"]+".txt", "write");
fprintln(f, p.position);
closefile(f);
f=openfile("yourpos1/"+p.position+".txt", "write");
fprintln(f, p.pers["loginname"]);
closefile(f);
}
else
{
freadln(f);
p.position = int(fgetarg(f,0));
closefile(f);
}
f=openfile("yourlogin/"+p.pers["loginname"]+".txt","write");
fprintln(f, p.killplayers);
fprintln(f, p.name);
closefile(f);
}
kilstat()
{
player=self;
f=openfile("killstatlogin/"+self.pers["loginname"]+".txt","read");
freadln(f);
self.position = int(fgetarg(f,0));
closefile(f);
f=openfile("yourlogin/"+self.pers["loginname"]+".txt","write");
fprintln(f, self.killplayers);
fprintln(f, self.name);
closefile(f);
if(self.position > 1 )
{
self.playetop = self.position;
self.playetop--;
f=openfile("yourpos1/"+self.playetop+".txt","read");
freadln(f);
self.playerguid = fgetarg(f,0);
closefile(f);
f=openfile("yourlogin/"+self.playerguid+".txt","read");
freadln(f);
self.playerfrags = int(fgetarg(f,0));
closefile(f);
if(self.killplayers>self.playerfrags)
{
f=openfile("yourpos1/"+self.playetop+".txt", "write");
fprintln(f, self.pers["loginname"]);
closefile(f);
f=openfile("yourpos1/"+self.position+".txt", "write");
fprintln(f, self.playerguid);
closefile(f);
f=openfile("killstatlogin/"+self.playerguid+".txt", "write");
fprintln(f, self.position);
closefile(f);
f=openfile("killstatlogin/"+self.pers["loginname"]+".txt", "write");
fprintln(f, self.playetop);
closefile(f);
self.position = self.playetop;
players = getEntArray("player", "classname");
for(x = 0; x < players.size; x++)
{
if(players[x].pers["loginname"]==self.playerguid)
{
players[x].position = (self.playetop+1);
}
}
fuck=0;
self.posintop destroy();
self.posintop = newClientHudElem(self);
self.posintop.alignX = "center";
self.posintop.alignY = "middle";
self.posintop.x = 320;
self.posintop.y = 150;
self.posintop.fontscale = 1;
self.posintop.alpha = 0.25;
if(self.pers["language"]=="1")
self.posintop.label = &"^4“^7во¤ ^4н^7ова¤ ^4п^7озици¤^2:^2";
else
self.posintop.label = &"^4Y^7our ^4n^7ew ^4p^7osition^2:^2";
self.posintop setValue(self.position);
for(i = 0; i < 10; i++)
{
self.posintop.fontscale = 1+fuck;
self.posintop.alpha = 0.5+fuck;
self.posintop setValue(self.position);
fuck+=0.15;
wait 0.05;
}
wait 1;
fuck=0;
for(i = 0; i < 10; i++)
{
self.posintop.alpha = 0.5-fuck;
self.posintop setValue(self.position);
fuck+=0.15;
wait 0.1;
}
self.posintop destroy();
self endon("gandon");//предотвращаем написание текстовки более одного раза, например при взрыве с C4
wait 0.05;//все вайты вход¤т в промежуток endon - notify
for(i=0;i<players.size;i++)
{
if(players[i].pers["language"]=="1")
players[i] iprintln(self.name + " ^4н^7ова¤ ^4п^7озици¤^2:^7"+self.position);
else if(players[i].pers["language"]=="0")
players[i] iprintln(self.name + " ^4n^7ew ^4p^7osition^2:^7"+self.position);
}
self notify("gandon");
}
}
}

maxdamage99
3rd May 2016, 12:28
Omfg, man you think SERVER NO CRASH by query:

SELECT name, kills FROM tablename_here ORDER BY kills DESC LIMIT 6000
per every 2-3 seconds

IzNoGoD
3rd May 2016, 13:22
What do you need the top 6000 for.

EXPLAIN YOUR DAMN QUESTION.

milepunta
3rd May 2016, 15:06
just remove LIMIT if you want all players

Paho
3rd May 2016, 17:38
need to find the nearest kills and swap places with him, notifying this(print new pos by player)
2column:
pos and kills

IzNoGoD
3rd May 2016, 18:03
SELECT MIN(kills)+1 FROM TABLEHERE WHERE player_id != YOUROWNPLAYER_ID AND kills >= YOUROWNKILLS

SELECT player_id FROM TABLEHERE WHERE player_id != YOUROWNPLAYER_ID AND kills >= YOUROWNOLDKILLS AND kills < YOUROWNNEWKILLS

these?

First one to check how much to next pos++, second one to find all players that you passed by doing a kill

Paho
3rd May 2016, 20:50
thanks, i will test this.
I will try, At the moment my sketch:

sql = "SELECT COUNT(killszom) FROM Accounts WHERE login != '" + self.stats["loginname"] + "' AND killszom >= '" + self.lastkillplayers + "' AND killszom < '" + self.killplayers + "'";
mysql_query(level.mysql, sql);
result = mysql_store_result(level.mysql);
row = mysql_fetch_row(result);
countstrings = int(row[0]);//number of players in the interval killings
if(countstrings>=1)//continue to execute queries if there are ahead
{
sql = "SELECT `login` FROM Accounts WHERE `login` != '" + self.stats["loginname"] + "' AND killszom >= '" + self.lastkillplayers + "' AND killszom < '" + self.killplayers + "'";//this query displays logins players below us in a position, then you can give one to each array, thereby relegating them
mysql_query(level.mysql, sql);
result = mysql_store_result(level.mysql);
row = mysql_fetch_row(result);
list=[];
for(i=0;i<countstrings;i++)
{
list[i]=row[0];
sql = "UPDATE `Accounts` SET toppos=toppos+1 WHERE login='" + list[i] + "'";
mysql_query(level.mysql, sql);
}
sql = "SELECT MAX(toppos) FROM Accounts WHERE `login` != '" + self.stats["loginname"] + "' AND killszom = '" + self.lastkillplayers + "'";
mysql_query(level.mysql, sql);
result = mysql_store_result(level.mysql);
row = mysql_fetch_row(result);
max=row[0];
sql = "SELECT MIN(toppos) FROM Accounts WHERE `login` != '" + self.stats["loginname"] + "' AND killszom = '" + self.lastkillplayers + "'";
mysql_query(level.mysql, sql);
result = mysql_store_result(level.mysql);
row = mysql_fetch_row(result);
min=row[0];
sql = "UPDATE `Accounts` SET toppos=toppos-'"+(max-min+1)+"' WHERE login='" + self.stats["loginname"] + "'";
mysql_query(level.mysql, sql);
}

IzNoGoD
3rd May 2016, 23:17
Please dont store ranknumbers in your mysql. Select them when retrieving the data.

Else your mysql database might become corrupt + it requires a LOT of IO to update all 1k+ players below you whenever you pass someone.

Paho
3rd May 2016, 23:47
can be more? mysql_free_result(result) after store?

IzNoGoD
4th May 2016, 09:01
I still have no idea what you are trying to accomplish EXACTLY.

Tell me what you want to do. More details. Better explanations.

Paho
4th May 2016, 12:11
Metastas!S:
1102
In my mod:
Menu is working, but when switching players between positions - position(toppos in database) is broken
1104