RMEx / RME

Extension tool for RPGMaker VXAce
http://rmex.github.io/
MIT License
41 stars 10 forks source link

event_erase(id) plante quand l'événement "id" n'existe pas #228

Closed Zer0zer0x closed 6 years ago

Zer0zer0x commented 6 years ago

Salut ! Si j'utilise event_erase(4) et que l'événement "4" n'existe pas, le jeu plante.

Ca arrive malheureusement dans certains processus par balayage que je ne peux pas autant contrôler que ça... :(

C'est d'autant plus embêtant que RPG Maker crée parfois des "Trous" entre les ID (genre 4, 5, 7 avec un 6 manquant, parce qu'on l'a delete dans l'éditeur et qu'RM n'adapte pas à la volée).

Serait-il possible de simplement ignorer la commande dans ce genre de cas, pour éviter le crash ? :)

Des bisous !

BastienDuplessier commented 6 years ago

Je suis en train de voir cette histoire et je pense que l'on ne va rien changer. Je pense que c'est une très mauvaise pratique de "balayer" les ID d'events principalement à cause de ce genre de problèmes là. Pour éviter ce genre de soucis, je pense que tu devrais essayer d'utiliser les sélecteurs 'évènement. http://www.rpgmakervx-fr.com/t20432-tuto-rme-base-selecteurs Ils vont te renvoyer une liste d'ids que tu vas pouvoir exploiter ensuite. Là tu seras sur de ne jamais taper dans un évent qui n'existe pas.

Zer0zer0x commented 6 years ago

Je connais déjà ces sélecteurs et ne peux pas m'en servir dans mon cas de figure. :( (Réinitialiser totalement une map quand on en sort, y compris les événements qui ont été invoke dessus.)

BastienDuplessier commented 6 years ago

Suffit que tu gardes dans une variable l'ID de tous les events que t'as créé non ?

xvw commented 6 years ago

ou alors utiliser http://rmex.github.io/RMEDoc/#fresh_event_id qui construit intelligement les ID d'event en cas d'invocation :)

Zer0zer0x commented 6 years ago

J'utilise déjà fresh_event_id... :/ Pourquoi s'obstiner à ne pas laisser le jeu tourner en ignorant l'erreur comme je l'ai demandé ? :(

Vous êtes vilains.

BastienDuplessier commented 6 years ago

Après, si tu veux vraiment empècher de planter... t'as juste à faire ça :

erase_event(id) rescue nil

Ca te permet d'ignorer l'erreur toi même. Si on bloque l'erreur comme tu le souhaite, ça risque d'induire en erreur les gens qui vont executer la commande, croire que tout s'est bien passé alors que l'event existe pas. Maintenant si nous, programmeurs expérimentés, te disons que ta méthode n'est pas une bonne idée c'est peut être que c'est vraiment une mauvaise idée et que ça risque d'avoir des impacts très négatifs sur les performances de ton jeu. Bref, tu as tes deux solutions.

Zer0zer0x commented 6 years ago

Je vais faire crade avec rescue (je connaissais pas) ! Merci beaucoup ! ^^