AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Slot Reservation code help (https://forums.alliedmods.net/showthread.php?t=25104)

BoK | Krazy 03-07-2006 20:40

Slot Reservation code help
 
Ok what I am trying to do a minor change on (Admin Slots f117bomb Style http://forums.alliedmods.net/showthread.php?p=7527). Right now I is working fine for me. I just want to change the part when you join the server and it is full. Right now it just disconnects you from connecting to the server and say a message in your console, but I want the server to kick them from the server and putting the reason why in the kick message.

This is the orginal code that I am using (What I tried is below):
Code:

/* AMX Mod X script.
*
* (c) 2003, OLO
* This file is provided as is (no warranties).
*
* Set you server max_players to 1 above the desirered value (ie. 21 or 33).
* Query programs will see max_players -1 as max. Admins with reservation
* can connect when there is 20/20 and player with worst ping or least play time
* will be kicked.
*
* Cvar:
* amx_reservation <value>
* 1 - Kicks the Player with shortest playing time when an admin connects to a full server.
* 2 - Kick the Player with the highest ping when an admin connects to a full server.
*/

#include <amxmodx>
#include <amxmisc>

// Comment if you don't want to hide true max_players 
//#define HIDE_RESERVEDSLOTS

public plugin_init()
{
        register_plugin("Slots Reservation","0.9.7","f117bomb")
        register_cvar("amx_reservation","1")
       
        #if defined HIDE_RESERVEDSLOTS
        set_cvar_num( "sv_visiblemaxplayers" , get_maxplayers() - 1 )
        #endif
       
}

public client_authorized(id) {

        new maxplayers = get_maxplayers()
        new players = get_playersnum( 1 )
        new limit = maxplayers - 1
        new resType = get_cvar_num( "amx_reservation" )
        new who
       
        if ( players > limit ) //21/20
        {
                if ( get_user_flags(id) & ADMIN_RESERVATION )
                {
                        switch(resType) {   
                                case 1:
                                        who = kickFresh()
                                case 2:
                                        who = kickLag()
                        }
                        if(who)  {
                                new name[32]
                                  get_user_name( who, name , 31 )
                                  client_cmd(id,"echo ^"* %s was kicked to free this slot^"" ,name )
                          }
                        return PLUGIN_CONTINUE
                }

                if ( is_user_bot(id) )
                        server_cmd("kick #%d", get_user_userid(id)  )
                else
                        client_cmd(id,"echo ^"Server is Full. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^";disconnect")
                       
                return PLUGIN_HANDLED // block connect in other plugins (especially in consgreet)       
        }
        return PLUGIN_CONTINUE
}

kickLag() {
        new who = 0, ping, loss, worst = -1
        new maxplayers = get_maxplayers()
        for(new i = 1; i <= maxplayers; ++i) {
                if ( !is_user_connected(i) && !is_user_connecting(i) )
                        continue // not used slot 
                if (get_user_flags(i)&ADMIN_RESERVATION)
                        continue // has reservation, skip him
                get_user_ping(i,ping,loss) // get ping
                if ( ping > worst ) {
                        worst = ping
                        who = i
                }
        }
        if(who)
                if ( is_user_bot(who) )
                        server_cmd("kick #%d", get_user_userid(who)  )
                else
                        server_cmd("kick #%d ^"Dropped to free a slot. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
        return who 
}

kickFresh() {
        new who = 0, itime, shortest = 0x7fffffff
        new maxplayers = get_maxplayers()
        for(new i = 1; i <= maxplayers; ++i){
                if ( !is_user_connected(i) && !is_user_connecting(i) )
                        continue // not used slot
                if (get_user_flags(i)&ADMIN_RESERVATION)
                        continue // has reservation, skip him
                itime = get_user_time(i) // get user playing time with connection duration 
                if ( shortest > itime ) {
                        shortest = itime
                        who = i
                }
        }
        if(who)
                if ( is_user_bot(who) )
                        server_cmd("kick #%d", get_user_userid(who)  )
                else
                        server_cmd("kick #%d ^"Dropped to free a slot. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
        return who
}


This is what I tried to change to get it to work the way I wanted it to:
Code:

if ( is_user_bot(id) )
                        server_cmd("kick #%d", get_user_userid(id)  )
                else
                        client_cmd(id,"echo ^"Server is Full. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^";disconnect")

to
Code:

if ( is_user_bot(id) )
                        server_cmd("kick #%d", get_user_userid(id)  )
                else
                        server_cmd("kick #%d ^"Server is Full. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))

All that happens is that people can join the 21st slot on my server because I think the server executes the kick command so fast that they are not fully connected to the server yet.

Des12 03-08-2006 18:21

Code:

/* AMX Mod X script.
*
* (c) 2003, OLO
* This file is provided as is (no warranties).
*
* Set you server max_players to 1 above the desirered value (ie. 21 or 33).
* Query programs will see max_players -1 as max. Admins with reservation
* can connect when there is 20/20 and player with worst ping or least play time
* will be kicked.
*
* Cvar:
* amx_reservation <value>
* 1 - Kicks the Player with shortest playing time when an admin connects to a full server.
* 2 - Kick the Player with the highest ping when an admin connects to a full server.
*/

#include <amxmodx>
#include <amxmisc>

// Comment if you don't want to hide true max_players
//#define HIDE_RESERVEDSLOTS

public plugin_init()
{
  register_plugin("Slots Reservation","0.9.7","f117bomb")
  register_cvar("amx_reservation","1")
 
  #if defined HIDE_RESERVEDSLOTS
  set_cvar_num( "sv_visiblemaxplayers" , get_maxplayers() - 1 )
  #endif
 
}

public client_putinserver(id) {

  new maxplayers = get_maxplayers()
  new players = get_playersnum( 1 )
  new limit = maxplayers - 1
  new resType = get_cvar_num( "amx_reservation" )
  new who
 
  if ( players > limit ) //21/20
  {
      if ( get_user_flags(id) & ADMIN_RESERVATION )
      {
        switch(resType) {   
            case 1:
              who = kickFresh()
            case 2:
              who = kickLag()
        }
        if(who)  {
            new name[32]
              get_user_name( who, name , 31 )
              client_cmd(id,"echo ^"* %s was kicked to free this slot^"" ,name )
            }
        return PLUGIN_CONTINUE
      }

      if ( is_user_bot(id) )
        server_cmd("kick #%d", get_user_userid(id)  )
      else
                        client_cmd(id,"echo ^"Server is Full. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^";disconnect")
       
      return PLUGIN_HANDLED // block connect in other plugins (especially in consgreet) 
  }
  return PLUGIN_CONTINUE
}

kickLag() {
  new who = 0, ping, loss, worst = -1
  new maxplayers = get_maxplayers()
  for(new i = 1; i <= maxplayers; ++i) {
      if ( !is_user_connected(i) && !is_user_connecting(i) )
        continue // not used slot
      if (get_user_flags(i)&ADMIN_RESERVATION)
        continue // has reservation, skip him
      get_user_ping(i,ping,loss) // get ping
      if ( ping > worst ) {
        worst = ping
        who = i
      }
  }
  if(who)
      if ( is_user_bot(who) )
        server_cmd("kick #%d", get_user_userid(who)  )
      else
        server_cmd("kick #%d ^"Dropped to free a slot. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
  return who
}

kickFresh() {
  new who = 0, itime, shortest = 0x7fffffff
  new maxplayers = get_maxplayers()
  for(new i = 1; i <= maxplayers; ++i){
      if ( !is_user_connected(i) && !is_user_connecting(i) )
        continue // not used slot
      if (get_user_flags(i)&ADMIN_RESERVATION)
        continue // has reservation, skip him
      itime = get_user_time(i) // get user playing time with connection duration
      if ( shortest > itime ) {
        shortest = itime
        who = i
      }
  }
  if(who)
      if ( is_user_bot(who) )
        server_cmd("kick #%d", get_user_userid(who)  )
      else
        server_cmd("kick #%d ^"Dropped to free a slot. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
  return who
}


BoK | Krazy 03-08-2006 22:26

You code did not work. I could join and it would not kick.


All I saw you change was this:
Code:

public client_authorized(id) {
to
Code:

public client_putinserver(id) {

So I changed some of the code and got this and I was positive that this code would work to do what I wanted, but I was wrong and It did not work:
Code:

/* AMX Mod X script.
*
* (c) 2003, OLO
* This file is provided as is (no warranties).
*
* Set you server max_players to 1 above the desirered value (ie. 21 or 33).
* Query programs will see max_players -1 as max. Admins with reservation
* can connect when there is 20/20 and player with worst ping or least play time
* will be kicked.
*
* Cvar:
* amx_reservation <value>
* 1 - Kicks the Player with shortest playing time when an admin connects to a full server.
* 2 - Kick the Player with the highest ping when an admin connects to a full server.
*/

#include <amxmodx>
#include <amxmisc>

// Comment if you don't want to hide true max_players 
//#define HIDE_RESERVEDSLOTS

public plugin_init()
{
        register_plugin("Slots Reservation","0.9.7","f117bomb")
        register_cvar("amx_reservation","1")
       
        #if defined HIDE_RESERVEDSLOTS
        set_cvar_num( "sv_visiblemaxplayers" , get_maxplayers() - 1 )
        #endif
       
}

public client_putinserver(id) {

        new maxplayers = get_maxplayers()
        new players = get_playersnum( 1 )
        new limit = maxplayers - 1
        new resType = get_cvar_num( "amx_reservation" )
        new who
       
        if ( players > limit ) //21/20
        {
                if ( get_user_flags(id) & ADMIN_RESERVATION )
                {
                        switch(resType) {   
                                case 1:
                                        who = kickFresh()
                                case 2:
                                        who = kickLag()
                        }
                        if(who)  {
                                new name[32]
                                  get_user_name( who, name , 31 )
                                  client_cmd(id,"echo ^"* %s was kicked to free this slot^"" ,name )
                          }
                        return PLUGIN_CONTINUE
                }

                if ( is_user_bot(id) )
                        server_cmd("kick #%d", get_user_userid(id)  )
                else
                        server_cmd("kick #%d ^"Server is Full. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
                       
                return PLUGIN_HANDLED // block connect in other plugins (especially in consgreet)       
        }
        return PLUGIN_CONTINUE
}

kickLag() {
        new who = 0, ping, loss, worst = -1
        new maxplayers = get_maxplayers()
        for(new i = 1; i <= maxplayers; ++i) {
                if ( !is_user_connected(i) && !is_user_connecting(i) )
                        continue // not used slot 
                if (get_user_flags(i)&ADMIN_RESERVATION)
                        continue // has reservation, skip him
                get_user_ping(i,ping,loss) // get ping
                if ( ping > worst ) {
                        worst = ping
                        who = i
                }
        }
        if(who)
                if ( is_user_bot(who) )
                        server_cmd("kick #%d", get_user_userid(who)  )
                else
                        server_cmd("kick #%d ^"Dropped to free a slot. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
        return who 
}

kickFresh() {
        new who = 0, itime, shortest = 0x7fffffff
        new maxplayers = get_maxplayers()
        for(new i = 1; i <= maxplayers; ++i){
                if ( !is_user_connected(i) && !is_user_connecting(i) )
                        continue // not used slot
                if (get_user_flags(i)&ADMIN_RESERVATION)
                        continue // has reservation, skip him
                itime = get_user_time(i) // get user playing time with connection duration 
                if ( shortest > itime ) {
                        shortest = itime
                        who = i
                }
        }
        if(who)
                if ( is_user_bot(who) )
                        server_cmd("kick #%d", get_user_userid(who)  )
                else
                        server_cmd("kick #%d ^"Dropped to free a slot. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
        return who
}

The code above will kick users inside for an admin if it is full and say the kick message, but anyone can just join on the slot reservation slot and it will not kick them with the message.

Does anyone see why this does not work? I am stumped.

BoK | Krazy 03-12-2006 22:16

In this code how could I make it delay the kick function for like 5 secs:
Code:

if(who)
      if ( is_user_bot(who) )
        server_cmd("kick #%d", get_user_userid(who)  )
      else
        server_cmd("kick #%d ^"Dropped to free a slot. Buy a slot reservation at www.brothersofkhaos.com for $5/month and this will not happen.^"",get_user_userid(who))
  return who 
}



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

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