AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   top2 or 3 damagers in array (https://forums.alliedmods.net/showthread.php?t=87172)

Hunter-Digital 03-07-2009 17:23

top2 or 3 damagers in array
 
I don't really know how to explain this but I'm trying to get from an array the top 3 (minus the killer, that's 2 to calculate) players who made the most damage to a player... also check if the players did at least 25% damage to that player.

I managed to this:

Code:

new g_iDamage[33][33]
 
public event_damage(id)
{
  static hitzone, weapon, attacker
  attacker = get_user_attacker(id, weapon, hitzone)
  g_iDamage[attacker][id] += read_data(2)
}
 
public event_death()
{
  static id, weapon, hitplace, mindamage, killer, killer2, damage, damage2, i
  id = read_data(2)
  killer = get_user_attacker(id, weapon, hitplace)
 
  damage = g_iDamage[killer][id]
  killer2 = 0
  damage2 = 0
  mindamage = 25
 
  for(i = 1; i <= 32; i++) /* but this is not pretty good... */
  {
    if(g_iDamage[i][id] >= mindamage && g_iDamage[i][id] >= damage2)
    {
      damage2 = g_iDamage[i][id]
      killer2 = i
    }
  }
}

This is made for two killers... but I need 3... also I cannot seem to make even for two corectly, can any1 help ? :mrgreen:

anakin_cstrike 03-08-2009 05:30

Re: top2 or 3 damagers in array
 
I don't know if this is correct, but i think i'll give you a start.
Code:
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #define MAX_PLAYERS    32 #define TOP        3 new Array:g_storeplayers, g_maxplayers; new Float:g_fDamage[ MAX_PLAYERS+1 ][ MAX_PLAYERS+1 ]; public plugin_init() {     RegisterHam(  Ham_TakeDamage, "player", "ham_player_takedamage", 1 );     RegisterHam( Ham_Killed, "player", "ham_player_killed", 1 );         g_storeplayers = ArrayCreate( 1 );     g_maxplayers = get_maxplayers(); } public ham_player_takedamage( victim, inflictor, attacker, Float:damage, damagebits ) {     if( victim == attacker )         return HAM_IGNORED;             static Float:f_Damage;     pev( victim, pev_dmg_take, f_Damage );         g_fDamage[ attacker ][ victim ] += f_Damage;     return HAM_IGNORED; } public ham_player_killed( victim, killer, shouldgib ) {     static         Float:f_kDamage,         Float:f_MinDamage,         Float:f_MaxDamage,         i_Positon;             i_Positon = ArrayGetSlot( killer );     f_kDamage = g_fDamage[ killer ][ victim ];     f_MinDamage = 25.0;         for( new i; i <= g_maxplayers; i++ )     {         if( !is_user_connected( i ) )             continue;                 if( f_kDamage >= f_MinDamage )         {             if( i_Positon != -1 )                 ArrayDeleteItem( g_storeplayers, i );             ArrayPushCell( g_storeplayers, i );         }                 if( ArraySize( g_storeplayers ) >= TOP )             ArrayDeleteItem( g_storeplayers, i-1 );                 if( f_kDamage > f_MaxDamage )             f_MaxDamage = f_kDamage;     } } // eXo jNr public ArrayGetSlot( index ) {     for( new i; i < TOP; i++ )         if( ArrayGetCell( g_storeplayers, i ) == index )             return i;     return -1; }

Hunter-Digital 03-08-2009 06:01

Re: top2 or 3 damagers in array
 
Okay, thanks, I'll test it out :}

but-uhm... I'm lost... what variable do I print ? :lol:

anakin_cstrike 03-08-2009 07:00

Re: top2 or 3 damagers in array
 
Code:
ArrayGetCell( g_storeplayers, i );


All times are GMT -4. The time now is 08:59.

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