AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



Le Deal du moment : -29%
PC portable Gamer ERAZER DEPUTY P60 – ...
Voir le deal
999.99 €

Partagez
 

 [VX] Anti-lag_Mhd

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
vincentmhd
Maire Lv.9
Maire Lv.9
vincentmhd


Masculin Age : 36
Inscrit le : 04/02/2009
Messages : 326

[VX] Anti-lag_Mhd Empty
MessageSujet: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeLun 26 Oct 2009 - 3:26

Anti-lag_Mhd



-Introduction

Cet anti-lag est assez personnel. Il nécéssite le script d'opacité progressive de moi-même, car il répond à un besoin spécifique. Grâce au concours de Septembre, j'ai vu les limites de ce dernier script, d'où cette solution en réponse.

-Description

Ce script anti-lag ne s'occupe que des maps. Il ne se base pas sur la distance avec le player, ni même si l'event est visible sur le screen. Son principe repose sur la fonction de l'event indiqué par commentaire et l'update en fonction de son utilité, limitant les updates inutiles, mais demandant plus d'attention au maker.

-Le script

Code:
#==============================================================================
#
#                                Anti-lag Mhd.v1
#
#===============================================================================
#
#Vincentmhd
#26/10/09
#http://vincentmhdmaker.canalblog.com/
#
#v0 -> v1Mise en thread de certaines commandes
#
#=====================================NOTE======================================
#
#
#-------------------------------------------------------------------------------
#
#===============================================================================


=begin

Ce script passerelle permettrerait de mettre toutes les setup d'event de mes
script dans une seule boucle, donc de gagner du FPS.


Cet anti-lag est assez different des autres, il n'a pas de rayon d'action. Il
se base sur l'utilité de l'event que vous définissez en commentaire. Les updates
seront redéfinies en fonction.

Le script reconnait les flags mis en commentaire et agit en fonction.

Flag::   
 
  - DECO
  Présent sur la map seulement pour décorer, pas de mouvements, pas
  d'animations, pas de commandes, pas de pages multiples. C'est la base.
  Juste une sprite.
 
  - OPACITY
  Cet event réagira au changement d'opacité. S'il le flag OPACITY CODE ou
  OPACITY PARAM est déjà présent pas la peine de le ré-écrire.
 
  - ANIM
  Cet event pourra être animé. Son animation dépend du rayon anti-lag.
 
  - MOVABLE
  Cet event pourra être déplacé automatiquement ou manuellement.
 
  - PAGE
  Cet event a plusieurs pages. Mais ne contient pas de commandes d'events.
 
  - COMMANDE
  Cet event a des commandes à réaliser.
 
  Les flags sont cumullables et pas de flag fera que votre event fonctionnera
  normalement.

=end


#==============================================================================#
#                                                                              #
#Cet alias me permet de mettre tous les alias de la setup_events dans une seule#
#boucle pour gagner en rapidité.                                              #
#                                                                              #
#==============================================================================#
class Game_Event
  def movable_update
    if jumping?                # Jumping
      update_jump
    elsif moving?              # Moving
      update_move
    else                        # Stopped
      update_stop
    end
    if @wait_count > 0          # Waiting
      @wait_count -= 1
    elsif @move_route_forcing  # Forced move route
      move_type_custom
    elsif not @locked          # Not locked
      update_self_movement
    end
  end
 
  def anim_update
    #J'ai du diviser par 2!? je ne comprend pas vraiment pourquoi.
    if moving?
      if @walk_anime
        @anime_count += 0.75
      elsif @step_anime
        @anime_count += 0.5
      end
    else
      if @step_anime
        @anime_count += 0.5
      elsif @pattern != @original_pattern
        @anime_count += 0.75
      end
    end
    update_animation
  end

  def command_update
    check_event_trigger_auto                    # Check autorun event
    if @interpreter != nil                      # Now parallel processing?
      unless @interpreter.running?              # Not running
        @interpreter.setup(@list, @event.id)    # Set up
      end
      @interpreter.update                      # Update interpreter
    end
  end
end

class Game_Map
 
  ANIM_R = 20

  def opacity_update_all
    for i in 0...$game_map_opacities.size
      @events[$game_map_opacities[i]].op_update
    end
  end
 
  def anim_update_all
    for i in 0...$game_map_animations.size
      if (((@events[$game_map_animations[i]].x - $game_player.x).abs <= ANIM_R)||((@events[$game_map_animations[i]].y - $game_player.y).abs <= ANIM_R))
        @events[$game_map_animations[i]].anim_update
      end
    end
  end
 
  def movable_update_all
    for i in 0...$game_map_movables.size
      @events[$game_map_movables[i]].movable_update
    end
  end
 
  def setup_events
    #script d'opacité progressive
    $game_opacity.tab              = []        # Tableau des opacités
   
    #script d'Anti-lag
    $game_map_events              = []        # Tableau des events normaux
    $game_map_decorations          = []        # Tableau des décorations
    $game_map_opacities            = []        # Tableau des opacités variables
    $game_map_animations          = []        # Tableau des events animables
    $game_map_movables            = []        # Tableau des events déplaçables
    $game_map_multipages          = []        # Tableau des events à pls pages
    $game_map_commandes            = []        # Tableau des events à commandes

 
    @events = {}          # Map event
    for i in @map.events.keys
      @events[i] = Game_Event.new(@map_id, @map.events[i])
      if @events[i] != nil
        type = 0
        anti = 0
        recurrance = true
        if @events[i].list != nil
        for j in 0...@events[i].list.size
          if @events[i].list[j].code == 108
            a = ""
            a = @events[i].list[j].parameters.to_s
           
            #==================================================================#
            #                          PASSABILITY                            #
            #==================================================================#
            if a[0,11] == "PASSABILITY"
              ligne = ""
              ligne = @events[i].list[j].parameters.to_s
              for j in 0...4
                info = ""
                info = ligne[(12 + j), 1]
                if info == "T"
                  @events[i].p[j]=true
                else
                  @events[i].p[j]=false
                end
              end
            end
            #==================================================================#
            #                          OPACITY                                #
            #==================================================================#
            if a[0,12] == "OPACITY CODE"
              target = a[13, 3].to_i
              code = a[17, a.size - 17].to_s
            end
            param = []
            if a[0,13] == "OPACITY PARAM"
              n = 14
              j = 0
              while (a[n]!= nil)
                param[j] = a[n,2].to_i
                j+=1
                n+=3
              end
              if (code != "")
                $game_opacity.tab += [[@events[i].id,code,param,nil,target]]
              end
            end
            #==================================================================#
            #                            ANTI-LAG                            #
            #==================================================================#
            if a[0,4] == "DECO"
              type = 1
              recurrance = false
            end
            if a[0,7] == "OPACITY"
              type = 2
              recurrance = false
            end
            if a[0,5] == "ANIM"
              type = 3
              recurrance = false
            end
            if a[0,7] == "MOVABLE"
              type = 4
              recurrance = false
            end
            if a[0,4] == "PAGE"
              type = 5
              recurrance = false
            end
            if a[0,4] == "COMMANDE"
              type = 6
              recurrance = false
            end
           
            if type != anti
              if recurrance == false
                case type
                when 1
                  $game_map_decorations += [@events[i].id] 
                when 2
                  $game_map_opacities  += [@events[i].id] 
                when 3
                  $game_map_animations  += [@events[i].id]
                when 4
                  $game_map_movables    += [@events[i].id]
                when 5
                  $game_map_multipages  += [@events[i].id]
                when 6
                  $game_map_commandes  += [@events[i].id]           
                end
                recurrance = true
                anti = type
              end
            end
          end
        end
        end
        if type==0
            $game_map_events  += [@events[i].id]
        end
      end
    end
    @common_events = {}                          # Common event
    for i in 1...$data_common_events.size
      @common_events[i] = Game_CommonEvent.new(i)
    end
    $game_opacity.update(true,0)
  end
 
#-------------------------------------------------------------------------------
# * Update Events
#-------------------------------------------------------------------------------
  def update_events
   
    for i in 0...$game_map_events.size
      @events[$game_map_events[i]].update
      #print(" event n°" + $game_map_events[i].to_s)
    end
   
    $opacity_runner = Thread.new {$game_map.opacity_update_all}
   
    $amin_runner = Thread.new {$game_map.anim_update_all}
   
    $movable_runner = Thread.new {$game_map.movable_update_all}
   
    for i in 0...$game_map_commandes.size
      @events[$game_map_commandes[i]].command_update
    end
   
    for common_event in @common_events.values
      common_event.update
    end
  end
 
 
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
  def refresh
    if @map_id > 0
        for i in 0...$game_map_events.size
          @events[$game_map_events[i]].refresh
          #print(" event n°" + $game_map_events[i].to_s)
        end
        for i in 0...$game_map_multipages.size
          @events[$game_map_multipages[i]].refresh
          #print(" event n°" + $game_map_events[i].to_s)
        end
        for i in 0...$game_map_commandes.size
          @events[$game_map_commandes[i]].refresh
          #print(" event n°" + $game_map_events[i].to_s)
        end
      for common_event in @common_events.values
        common_event.refresh
      end
    end
    @need_refresh = false
  end

end


-Installation

Ce script n'échappe pas à la régle du "copiez en dessous de material".
Il nécéssite le script d'opacité progressive en l'état.

-Utilisation

Le script reconnait les flags suivants mis en commentaire et agit en fonction. Dès que vous mettez un flag dans un event, il ne l'update plus que pour laou les parties indiquées par commentaire. En triant et selectionnant, les events, j'espère gagner du FPS vu que le principal des events encombrants ne servent qu'à la déco.
Flag::

- DECO
Présent sur la map seulement pour décorer, pas de mouvements, pas
d'animations, pas de commandes, pas de pages multiples. C'est la base.
Juste une sprite.

- OPACITY
Cet event réagira au changement d'opacité. S'il le flag OPACITY CODE ou
OPACITY PARAM est déjà présent pas la peine de le ré-écrire.

- ANIM
Cet event pourra être animé. Son animation dépend du rayon anti-lag.

- MOVABLE
Cet event pourra être déplacé automatiquement ou manuellement.

- PAGE
Cet event a plusieurs pages. Mais ne contient pas de commandes d'events.

- COMMANDE
Cet event a des commandes à réaliser.

Les flags sont cumullables et l'absence de flag fera que votre event fonctionnera
normalement.

-Démo

A faire... peut-être pour le concours de la toune#2...

-Crédit: Vincentmhd


Dernière édition par vincentmhd le Lun 26 Oct 2009 - 12:24, édité 3 fois
Revenir en haut Aller en bas
Elezia
Roi des Lapinous
Roi des Lapinous
Elezia


Masculin Age : 33
Inscrit le : 11/10/2008
Messages : 2291

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeLun 26 Oct 2009 - 6:23

Salut Vincent,

Désolé de pas avoir réagi avant sur ton script d'opacité, mais merci c'est du beau boulot je vais m'amuser à le tester avec l'anti-lag, je t'en dirais plus.
+3 en script +1 aide à la vie du forum.
Revenir en haut Aller en bas
vincentmhd
Maire Lv.9
Maire Lv.9
vincentmhd


Masculin Age : 36
Inscrit le : 04/02/2009
Messages : 326

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeLun 26 Oct 2009 - 11:52

J'essais d'être cohérent dans le dévellopement de mes scripts.

Il y aura sans doute des modifications de celui-ci, ce n'est qu'un premier jet, un anti-lag performant est long à construire...

D'ailleurs, il n'est pas miraculeux, avec ma map principale du concours "Sortez-moi d'ici", je passe sur mon pc de ~15 FPS sans à ~30 FPS avec pour 211 events sur une map de 56x74.

J'ai déjà des idées d'améliorations...

Edit:: Idées ajoutées...
Euh j'abuse peut-être des threads, il peut y avoir des désynchronisations. Enfin n'étant pas expert, s'il y a un problème dites-le.
Revenir en haut Aller en bas
Sylfurion
Mage Lv.11
Mage Lv.11
Sylfurion


Masculin Age : 27
Inscrit le : 02/03/2009
Messages : 513

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeDim 8 Nov 2009 - 9:31

Euh moi ça bug :

Script 'Anti-lag Mhd.V1' line 142: NoMethodError occured
undefined method 'tab=' for nil:NilClass

voici la ligne 142 :

Code:
    $game_opacity.tab              = []        # Tableau des opacités

merci d'avance

Ciao

Sylfurion

PS : c'est surement parce qu'il manque le script d'opacité progressive de toi, je ne sais pas où il est ...

EDIT : Ah trouver : https://rpg-maker-vx.bbactif.com/partage-de-scripts-f24/opacite-progressive-et-gestionnaire-t5896.htm

je l'insère en dessous de ton anti lag et sa me met :

Script 'Fade opacity.v2' line 65: TypeError occurred
Opacity is not a module

la ligne 65 :

Code:
module OPACITY

merci d'avance

Ciao

Sylfurion
Revenir en haut Aller en bas
vincentmhd
Maire Lv.9
Maire Lv.9
vincentmhd


Masculin Age : 36
Inscrit le : 04/02/2009
Messages : 326

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeDim 8 Nov 2009 - 13:22

Essaye en inserant le script d'opacité avant l'anti-lag, j'ai fait comme cela dans tout mes tests...
Cependant cette erreur ne s'est pas produite lorsque j'ai fait l'inversion.

Le texte de l'erreur signifie que OPACITY est utilisée par un autre script, sûrement en tant que variable globale. J'ai modifier le script d'Opacité pour donner un nom moins évident au module.

Tu as d'autres scripts avec ces 2 là?
(je croise les doigts que non sinon je ne sais pas d'où vient l'erreur)
Revenir en haut Aller en bas
Sylfurion
Mage Lv.11
Mage Lv.11
Sylfurion


Masculin Age : 27
Inscrit le : 02/03/2009
Messages : 513

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeDim 8 Nov 2009 - 17:44

Oh oui j'en ai plein de script ^^, mais tu veux surement parler de script qui gère l'opacité ^^, je vais d'abord essayer en changeant l'ordre des deux scripts

2min ...

La syntaxe d'erreur qui parlant du script Fade Opacity ne s'affiche plus, mais il met a la place une autre syntaxe d'erreur

Script 'Anti-lag Mhd.V1' line 142: NoMethodError occured
undefined method 'tab=' for nil:NilClass

voici la ligne 142 :

Code:
    $game_opacity.tab              = []        # Tableau des opacités

la syntaxe d'erreur du script Fade opacity apparaissait quand je n'avais pas encore mis ton anti-lag, mais maintenant que je l'ai remis, sa rebug, avec le premier message d'erreur ( voir ci dessus ^^ )

voila ciao

Sylfurion

PS : Et sinon je n'ai aucun script qui ne gère l'opacité a pars Fade Opacity ^^
Revenir en haut Aller en bas
vincentmhd
Maire Lv.9
Maire Lv.9
vincentmhd


Masculin Age : 36
Inscrit le : 04/02/2009
Messages : 326

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeDim 8 Nov 2009 - 21:46

Il doit y avoir une interaction avec un autre script quelquepart. Une fonction surchargée commune sans alias. Avec les versions de l'anti-lag et du gestionnaire d'opacité mis en ligne sur le fofo dans un projet vierge je ne rencontre pas le problème, ni même dans mes tests.

L'erreur intervient à la compilation ou à l'usage?

Le plus simple pour résoudre ton souci serait de me filer un lien vers ton projet par MP ou la liste des autres scripts, et je ferai du sur-mesure...
Revenir en haut Aller en bas
Sylfurion
Mage Lv.11
Mage Lv.11
Sylfurion


Masculin Age : 27
Inscrit le : 02/03/2009
Messages : 513

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeMar 10 Nov 2009 - 16:08

Alors en fait le bug vient juste après l'ecran titre, je fait nouvelle partie et bam sa me fait buger je t'envoie mes scripts par MP ...
Revenir en haut Aller en bas
Flopan
Habitant Lv.6
Habitant Lv.6
avatar


Masculin Age : 26
Avertissements : 3
Inscrit le : 10/11/2010
Messages : 112

[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitimeMer 20 Avr 2011 - 12:41

Salut,

Je up le sujet, car le script à un blem :


Citation :
Script 'Anti-Lag' line 141: NoMethoError occured

undefined method `tab='for nil:NilClass

ça me dit ça quand je veux démarrer mon jeu

Merci.
Revenir en haut Aller en bas
http://starshack.fr.cr/
Contenu sponsorisé




[VX] Anti-lag_Mhd Empty
MessageSujet: Re: [VX] Anti-lag_Mhd   [VX] Anti-lag_Mhd Icon_minitime

Revenir en haut Aller en bas
 

[VX] Anti-lag_Mhd

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» [VX] Anti-lag
» ADD-ON SBS anti-frappe double
» Demande de script anti game-over
» [Résolu] Problème avec anti lag
» Anti-Lag pour grande ville

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Scripts :: Scripts VX - RGSS2 :: Utilitaires-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit