Raised This Month: $ Target: $400
 0% 

Ham_Item_PreFrame problème


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
eXtrem
Member
Join Date: Jul 2011
Old 03-06-2012 , 15:35   Ham_Item_PreFrame problème
#1

Bien le bonjour,

Je tente de hooker Ham_Spawn, Ham_Killed, Ham_Item_PreFrame et Ham_TakeDamage sur les bots de CZ.

J'ai trouvé ce plugin de Connor qui créé un multiforward pour pouvoir utiliser RegisterHamFromEntity quand le premier bot est créé (il me semble).

J'ai donc tenté de faire fonctionner le code que voici, mais sans succès.

PHP Code:
#define GetTeam(%1)  get_pdata_int(%1,114)
#define SetTeam(%1,%2)  set_pdata_int(%1,114,%2)

const TASKID_REVIVE           =   1337;
const 
TASKID_COUNTDOWN        =   133789;

new 
g_iNumberSound33 ] , g_iSecondsCountDown33 ] , maClasse33 ];

enum 
{
    
CLASS_ONE,
    
CLASS_TWO,
    
CLASS_THREE
}

new const 
szNameClasses[ ][ ] = 
{
    
"Classe1",
    
"Classe2",
    
"Classe3"
}

new const 
Float:flHealthClasses[ ] = 
{
    
700.0,
    
600.0,
    
300.0
}

new const 
Float:flSpeedClasses[ ] = 
{
    
0.0 ,
    
280.0 ,
    
600.0
}

public 
plugin_init( )
{
    
RegisterHamHam_Spawn"player""fwSpawn");
    
RegisterHamHam_Killed"player""fwKilled" );
    
RegisterHamHam_Item_PreFrame"player""fwItemPreFrame");
    
RegisterHamHam_TakeDamage"player""fwTakeDamage" );
}

public 
client_putinserverid )
{
    
maClasseid ] = -1;
}

public 
cz_ham_bot_registerableid 
{
    
RegisterHamFromEntityHam_Spawnid"fwSpawn"true );
    
RegisterHamFromEntityHam_Item_PreFrameid"fwItemPreFrame"true );
    
RegisterHamFromEntityHam_TakeDamageid"fwTakeDamage" );
    
RegisterHamFromEntityHam_Killedid"fwKilled" );
    
    
maClasseid ] = -1;
}

public 
fwSpawnid 
{
    if( 
task_existsTASKID_REVIVE+id ) ) 
    {
        
remove_taskTASKID_REVIVE+id );
    }
    
    if( 
task_existsTASKID_COUNTDOWN+id ) ) 
    {
        
remove_taskTASKID_COUNTDOWN+id );
    }

    if( 
is_user_aliveid ) ) 
    {
        if( 
GetTeamid ) == 
        {
            
maClasseid ] = random_num0charsmaxszNameClasses ) );
            
set_pevidpev_healthflHealthClassesmaClasseid ] ] );
            
set_pevidpev_maxspeedflSpeedClassesmaClasseid ] ] );
            
            if( !
is_user_botid ) ) 
            {
                
client_printidprint_center"Tu es un %s"szNameClassesmaClasseid ] ] );
            }
        }
        
        else 
        {
            
g_iZombieClassid ] = -1;
        }
    }
}

public 
fwKilledvictim 
{    
    new 
timeTask;
    
    if( 
GetTeamvictim ) == 
    {
        new 
szSound32 ];
        
        switch( 
maClassevictim ] ) 
        {
            case 
CLASS_ONEcopyszSoundcharsmaxszSound ), szSoundClassOne );
            case 
CLASS_TWOcopyszSoundcharsmaxszSound ), szSoundClassTwo );
            case 
CLASS_THREEcopyszSoundcharsmaxszSound ), szSoundClassThree );
        }
        
        
emit_soundvictimCHAN_AUTOszSound1.0ATTN_NONE0PITCH_NORM );
        
        
timeTask 2;
    }
    
    else 
    {
        
timeTask 35;
    }

    
g_iSecondsCountDownvictim ] = timeTask;
    
    
set_task1.0"CountDown"victim+TASKID_COUNTDOWN__"a"timeTask );
    
set_taskfloattimeTask ), "Revive"victim+TASKID_REVIVE );
}

public 
Reviveplayer 
{
    
player -= TASKID_REVIVE;
    
    if( !
is_user_aliveplayer ) ) 
    {
        
ExecuteHamBHam_CS_RoundRespawnplayer );
    }
}
        
public 
CountDownplayer 
{
    
player -= TASKID_COUNTDOWN;
    
    
set_hudmessage255255255, -1.00.206.00.9__, -);
    
show_hudmessageplayer"Tu respawn dans %d secondes", --g_iSecondsCountDownplayer ] );
}

public 
fwItemPreFrameid 
{
    if( 
is_user_aliveid ) && GetTeamid ) == && maClasseid ] > && pevidpev_maxspeed ) != -1.0 
    {
        
set_pevidpev_maxspeedflSpeedClassesmaClasseid ] ] );
    }
}

public 
fwTakeDamagevictim inflictor attacker Float:damage damagebits )
{
    if( 
is_user_aliveattacker ) && GetTeamattacker ) == 
    {
        if( 
attacker != victim 
        {
            new 
szSound32 ];
            
            switch( 
maClasseattacker ] ) 
            {
                case 
CLASS_ONE
                {
                    if( !
g_iNumberSoundattacker ] ) 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassOneShot );
                        
g_iNumberSoundattacker ] = 1;
                    }
                    
                    else 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassOneShot2 );
                        
g_iNumberSoundattacker ] = 0;
                    }
                }
                case 
CLASS_TWO
                {
                    if( !
g_iNumberSoundattacker ] ) 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassTwoShot );
                        
g_iNumberSoundattacker ] = 1;
                    }
                    
                    else 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassTwoShot2 );
                        
g_iNumberSoundattacker ] = 0;
                    }
                }
                case 
CLASS_THREE
                {
                    
copyszSoundcharsmaxszSound ), szSoundClassThreeShot );
                }
            }
            
            
emit_soundattackerCHAN_AUTOszSound1.0ATTN_NONE0PITCH_NORM );
        }
    }
}

public 
eventRoundRestart( ) 

    
TaskRemove( );
}

public 
eventRoundEnd( ) 
{
    
TaskRemove( );
}

TaskRemove( ) 
{
    new 
iPlayers32 ], iNumid;
    
get_playersiPlayersiNum"h" );
    
    for( new 
0iNumi++ ) 
    {
        
id iPlayers];
        if( 
task_existsTASKID_REVIVE+id ) ) 
        {
            
remove_taskTASKID_REVIVE+id );
        }
        
        if( 
task_existsTASKID_COUNTDOWN+id ) ) 
        {
            
remove_taskTASKID_COUNTDOWN+id );
        }
    }

Je vous ai mis quasiment tout le code, mais c'est juste pour que vous ayez les principales informations, mais mon problème concerne particulièrement Ham_Item_PreFrame.

Quand j'ajoute deux bots en terroristes (donc ils seront automatiquement proches l'un de l'autre), le serveur plante, sans erreur logs, ni erreur console.

Le crash se produit au contact de deux terroristes. D'ailleurs, les terroristes sont dans un bug, invisible pour les autres, et parfois bloqués.

Lorsque j'enlève le code avec Item_PreFrame, le bug n'y ai plus.

J'ai pourtant fait tous les checks nécessaires pour éviter les index hors des limites.

Je ne vois vraiment pas d'où vient le problème, quelqu'un pourrait m'éclaircir s'il vous plaît ?

D'avance merci.

Last edited by eXtrem; 03-06-2012 at 15:42.
eXtrem is offline
 


Thread Tools
Display Modes

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 20:27.


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