Raised This Month: $ Target: $400
 0% 

Count Player Leaves


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 06-17-2014 , 09:17   Re: Count Player Leaves
Reply With Quote #1

I want to count how many times the player leaves server but not count the retry command.

So:

PHP Code:
new gDisc

public client_disconnect(id

        
gDisc++ 
        
SaveLeave(id

Why not simply do this ?

Last edited by HamletEagle; 06-17-2014 at 09:17.
HamletEagle is offline
Nextra
Veteran Member
Join Date: Apr 2008
Location: Germany
Old 06-17-2014 , 11:22   Re: Count Player Leaves
Reply With Quote #2

You need to work with SteamIDs here, using a Trie is usually the best option for that. Just using the client entity index is not reliable because they are not constant for any one client. If player a leaves and player b connects afterwards they will have the same index.

PHP Code:
#include <amxmodx>

#define RETRY_TIME 10.0

new Trie:g_last_leaveTrie:g_leave_countg_steamid[33][33];

public 
plugin_init() {
   
g_last_leave TrieCreate();
   
g_leave_count TrieCreate();
}

public 
client_authorized(client) {
   
get_user_authid(clientg_steamid[client], charsmax(g_steamid[]));

   new 
Float:last;
   if (
TrieGetCell(g_last_leaveg_steamid[client], last) && get_gametime() - last <= RETRY_TIME) {
      new 
count;
      
TrieGetCell(g_leave_countg_steamid[client], count);

      
TrieSetCell(g_leave_countg_steamid[client], count 1);
   }
}

public 
client_disconnect(client) {
   
TrieSetCell(g_last_leaveg_steamid[client], get_gametime());

   new 
count;
   
TrieGetCell(g_leave_countg_steamid[client], count);
   
TrieSetCell(g_leave_countg_steamid[client], count 1);

This is a very basic example. On client_disconnect we save the last time the player disconnected and increment the leave count by one. If the player reconnects within RETRY_TIME seconds we decrement the counter by one.
__________________
In Flames we trust!
Nextra is offline
pepe_thugs
Senior Member
Join Date: Aug 2010
Location: Portugal , Braga
Old 06-17-2014 , 16:36   Re: Count Player Leaves
Reply With Quote #3

Quote:
Originally Posted by HamletEagle View Post

Why not simply do this ?
Because i want to count how many times the player disconnect but count when player disconnect more than 10 seconds.

@Nextra Thanks but one more question i can use a global count because i want to run one function to save this in sqlx?
Like this:

PHP Code:

#include <amxmodx>

#define RETRY_TIME 10.0

new Trie:g_last_leaveTrie:g_leave_countg_steamid[33][33];
new 
count[33]

public 
plugin_init() {
   
g_last_leave TrieCreate();
   
g_leave_count TrieCreate();
}

public 
client_authorized(client) {
   
get_user_authid(clientg_steamid[client], charsmax(g_steamid[]));

   new 
Float:last;
   if (
TrieGetCell(g_last_leaveg_steamid[client], last) && get_gametime() - last <= RETRY_TIME) {

      
TrieGetCell(g_leave_countg_steamid[client], count[client]);

      
TrieSetCell(g_leave_countg_steamid[client], count[client]--);
   }
}

public 
client_disconnect(client) {
   
TrieSetCell(g_last_leaveg_steamid[client], get_gametime());

   
TrieGetCell(g_leave_countg_steamid[client], count[client]);
   
TrieSetCell(g_leave_countg_steamid[client], count[client]++);


Last edited by pepe_thugs; 06-17-2014 at 16:37.
pepe_thugs is offline
Nextra
Veteran Member
Join Date: Apr 2008
Location: Germany
Old 06-17-2014 , 18:42   Re: Count Player Leaves
Reply With Quote #4

Storing the counts globally based on player index is pointless. As multiple people have told you the indexes are meaningless after a user disconnects. The code you have posted above will break because of this. I repeat: Indexes are not permanent! There is a reason I used the tries to work with steamids instead of player indexes.

If you want a per-user count use my code. Add a global counter if you want, but do it separately from the player counts.

If you want only a global count you can remove everything regarding the g_leave_count trie and just work with the global counter.


/edit: Please try to actually understand what I did with the code. Your changes break it completely and shows that you did not understand it at all.
__________________
In Flames we trust!

Last edited by Nextra; 06-17-2014 at 18:47.
Nextra is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 21:13.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode