Raised This Month: $51 Target: $400
 12% 

[Résolu] Rendre un func_breakable non valide


  
 
 
Thread Tools Display Modes
Author Message
Kidev
Veteran Member
Join Date: Jun 2010
Location: France
Old 02-22-2012 , 15:30   [Résolu] Rendre un func_breakable non valide
#1

Salut! J'ai un problème assez particulier. Quand on détruit un func_breakable, il reste valide. Donc un is_valid_entity() sur cette entité retournera 1. Or, j'ai absolument besoin que cette même native me retourne 0 si cette entité n'est plus matérialisé.

J'ai essayer de faire ceci (en pre bien sûr):
PHP Code:
public hamBlockTakeDamagevictiminflictorattackerFloat:damagebits )
{
    if ( 
entity_get_floatvictimEV_FL_health ) <= damage )
    {
        
remove_entityvictim );
        return 
HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;

Mais ça crash (pas tout le temps mais très souvent) quand on casse les func_breakable. Je SUPERCEDE donc aucune fonction n'est appelée avec 'victim'... Et je sèche. Comment rendre cette entité invalide, ou comment la supprimer sans crash?

D'avance merci.
__________________

Last edited by Kidev; 02-23-2012 at 07:22. Reason: Résolu
Kidev is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 02-23-2012 , 00:57   Re: Rendre un func_breakable non valide
#2

Pourquoi à la place de is_valid_entity tu ne check pas plutôt if( entity_get_int(, EV_INT_effects) & EF_NODRAW ), et si ce flag est set tu ne t'occuppes pas de cette entité.
Sinon, en complément, tu peux hooker Ham_CS_Restart en PRE, et si l'entité contient EF_NODRAW tu la removes à ce moment là, puis tu supercedes, ou si tu ne veux pas attendre, dans ton TakeDamage POST tu définis le nextthink tu un petit délai et tu fous dans EV_INT_flags : FL_KILLME, l'entité sera détruite toute seule après ce court délai (surement la meilleure solution).
__________________
- tired and retired -

- my plugins -

Last edited by ConnorMcLeod; 02-23-2012 at 00:59.
ConnorMcLeod is offline
Kidev
Veteran Member
Join Date: Jun 2010
Location: France
Old 02-23-2012 , 04:51   Re: Rendre un func_breakable non valide
#3

Vraiment très bonne idée.

Pour le think, cette méthode me paraît la meilleure mais j'ai besoin de mon pre dans TakeDamage, mais ce n'est pas un problème car je peux ajouter un hook.
Par contre, je dois définir le flag KILLME avant de set le think à 0.1 ou après (dans le think, et la je dois le register)?
__________________
Kidev is offline
Devil259
Veteran Member
Join Date: Dec 2009
Location: France (59)
Old 02-23-2012 , 05:02   Re: Rendre un func_breakable non valide
#4

Quote:
Originally Posted by ConnorMcLeod View Post
tu définis le nextthink tu un petit délai et tu fous dans EV_INT_flags : FL_KILLME, l'entité sera détruite toute seule après ce court délai (surement la meilleure solution).
Quote:
Originally Posted by -Kid- View Post
Par contre, je dois définir le flag KILLME avant de set le think à 0.1 ou après (dans le think, et la je dois le register)?
Avant d'appeler le nextthink.
Au pire, tu teste hein ;)
__________________
You can do anything you set your mind to, man.


Last edited by Devil259; 02-23-2012 at 12:16.
Devil259 is offline
Kidev
Veteran Member
Join Date: Jun 2010
Location: France
Old 02-23-2012 , 06:06   Re: Rendre un func_breakable non valide
#5

Quote:
Originally Posted by Devil259 View Post
Dans le think.
Au pire, tu teste hein ;)
Justement je ne sais pas car dans HLSDK y'a:
PHP Code:
#define FL_KILLME                       (1<<30)     // This entity is marked for death -- This allows the engine to kill ents at the appropriate time 
Donc on peut déduire que 'the appropriate time' c'est au prochain think de l'entité. Je test dans l'aprem et je vous dit.

Donc pour le moment j'ai:
PHP Code:
public hamBlockTakeDamagePostvictiminflictorattackerFloat:damagebits )
{
    if ( 
entity_get_floatvictimEV_FL_health ) <= damage )
    {
        
entity_set_intvictimEV_INT_flagsFL_KILLME );
        
set_pevvictimpev_nextthinkget_gametime( ) + 0.01 );
    }

J'espère que c'est pas dans le think, car il faudrait que je rajoute un tas de truc (certaines de mes entités think, donc faudrait pas les KILL quand il faut pas lol).
C'est aussi à cause de ces think que mon nextthink est très court, pour pas que ça interfère.
__________________

Last edited by Kidev; 02-23-2012 at 07:19.
Kidev is offline
Kidev
Veteran Member
Join Date: Jun 2010
Location: France
Old 02-23-2012 , 07:22   Re: Rendre un func_breakable non valide
#6

Hop résolu, ça marche, merci Connor, et donc j'avais raison Devil ;)
__________________
Kidev is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 02-23-2012 , 10:55   Re: [Résolu] Rendre un func_breakable non valide
#7

Tu peux même foutre dans le forward en pre, vu que ça sera quand même effectué après, tu peux aussi régler le nextthink sur gametime sans délai.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
Old 02-23-2012, 11:23
Devil259
This message has been deleted by Devil259. Reason: mal exprimé
Kidev
Veteran Member
Join Date: Jun 2010
Location: France
Old 02-23-2012 , 11:36   Re: Rendre un func_breakable non valide
#8

Quote:
Originally Posted by Devil259 View Post
Quand je disais dans le think, c'est forcément apres TakeDamage ;)
T'as pas compris lol.
__________________
Kidev is offline
Devil259
Veteran Member
Join Date: Dec 2009
Location: France (59)
Old 02-23-2012 , 12:00   Re: [Résolu] Rendre un func_breakable non valide
#9

Si, tu voulais savoir si tu mettais ton entity_set_int avant le pev_nextthink ou après.
__________________
You can do anything you set your mind to, man.


Last edited by Devil259; 02-23-2012 at 12:16.
Devil259 is offline
Kidev
Veteran Member
Join Date: Jun 2010
Location: France
Old 02-23-2012 , 12:09   Re: [Résolu] Rendre un func_breakable non valide
#10

Et donc le flag il faut le set avant le prochain think car comme j'avais pensé, ce flag ordonne à engine de tuer l'entité au prochain think, et n'ordonne pas de la tuer au moment où il est set. Donc pas dans le think, mais avant.
__________________
Kidev is offline
 



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 06:37.


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