Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.phpMédailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Les patrols irrationnels

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 17/02/13 22:51    Sujet du message: Les patrols irrationnels Citer

Me revoilà avec de nouveaux bugs Very Happy.
J'aimerais bien comprendre d'où viennent les patrols irrationnels.
Dans ma map, ça arrive toujours à la même unité, et à chaque fois. J'ai beau changer les points d'arrivée et de départ, elle fait toujours n'importe quoi : un aller retour puis elle stoppe net.
Sinon j'ai aussi fait une lib' pour des patrols plus complexes, à plusieurs points, et là aussi j'ai des bugs. C'est à chaque fois les mêmes unités qui buguent, mais pas à chaque partie. Voici le code :

Jass:
library ComplexPatrol uses Mob

private struct PatrolList

    readonly thistype next
    readonly rect rect
   
    static method create takes rect r returns thistype
        local thistype this = thistype.allocate()
        set this.next = 0
        set this.rect = r
        return this
    endmethod

    method add takes rect r returns thistype
        set this.next = thistype.allocate()
        set this.next.rect = r
        return this.next
    endmethod
   
    method addList takes thistype l returns nothing
        set this.next = l
    endmethod
   
    method destroy takes nothing returns nothing
        set this.rect = null
        call this.deallocate()
    endmethod

endstruct

struct ComplexPatrol extends Mob

    private region r = null
    private trigger t = null
    private PatrolList p = 0
    private PatrolList l = 0
    private PatrolList c = 0
   
    public boolean wantDestroy = false

    static method create takes integer i, rect a returns thistype
        local thistype this = thistype.allocate(i, GetRectCenterX(a), GetRectCenterY(a), 0)
        set this.t = CreateTrigger()
        set this.r = CreateRegion()
        set this.p = PatrolList.create(a)
        set this.l = this.p
        set this.c = this.p
        call TriggerRegisterEnterRegion(this.t, this.r, null)
        call TriggerAddCondition(this.t, Filter(function thistype.enter))
        return this
    endmethod

    method onDestroy takes nothing returns nothing
        loop
            call p.destroy()
            exitwhen p == l
            set p = p.next
        endloop
        call DestroyTrigger(t)
        set t = null
        call RemoveRegion(r)
        set r = null
    endmethod

    method launch takes nothing returns thistype
        if this.c != 0 and this.c.rect != null then
            call RegionAddRect(this.r, this.c.rect)
            if IsUnitInRegion(this.r, this.unit) then
                call RegionClearRect(this.r, this.c.rect)
                set this.c = this.c.next
                call this.launch()
            else
                call IssuePointOrder(this.unit, "move", GetRectCenterX(this.c.rect), GetRectCenterY(this.c.rect))
            endif
        endif
        return this
    endmethod

    private static method enter takes nothing returns boolean
        local thistype this = Mob[GetEnteringUnit()]
        if this.r == GetTriggeringRegion() then
            call RegionClearRect(this.r, this.c.rect)
            set this.c = this.c.next
            call this.launch()
        endif
        return false
    endmethod
   
    method add takes rect r returns thistype
        set this.l = this.l.add(r)
        return this
    endmethod
   
    method looping takes nothing returns thistype
        call this.l.addList(this.p)
        return this
    endmethod

endstruct

endlibrary


L'unité reviens à son point de départ, alors que, j'ai vérifié (avec des ptits effets spéciaux Razz), les coordonnées de l'endroit où elle est censée aller sont bonnes.
Par contre j'ai pas encore vérifié si elle reçoit un ordre. Dans ce cas, ça serait pas très dur à corriger (on détecte l'ordre et s'il est mauvais, on redonne le bon).

@War : J'ai pas encore testé LinearPatrol, mais c'est pas un peu bourrin de redonner l'ordre toutes les x secondes? D'autant plus que j'ai testé de redonner l'ordre à l'unité qui bug (avec un patrol simple) et ça marche pas : elle refait un aller retour puis stoppe.

Edit : Après test, lorsqu'un bug dans ma lib' survient, l'unité reçoit un ordre, juste après le bon ordre, la ramenant à la position où elle a été créée. C'est possible que ce soit l'ordinateur, mais j'en doute puisque c'est toujours la même unité au même endroit.

Edit #2 : Yeahhh ! Bon, j'ai mis les patrols au joueur 11 (ordinateur) à la place du joueur 15, et plus de mouvements irrationnels ! J'ai aussi essayé de corriger les mouvements irrationnels de ma lib' avec la technique décrite plus haut et ça fonctionne plutôt bien Smile.

Bon bah sujet résolu.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 18/02/13 11:07    Sujet du message: Re: Les patrols irrationnels Citer

EDIT Tirlititi : Pas besoin de quoter le précédent message dans son intégralité...

à ton avis pourquoi j'ai utilisé le bot 11 ? pas pour bloquer un slot, c'est parce que les neutres vont vouloir faire revenir l'unité à son point de départ, et que après ça les bloques.

si tu veux outrepasser la limite d'unité pour 1 joueur (je connais plus le nombre) et ne pas bloquer un slot, je te conseil de faire comme dans murloc slide : aléatoirement tu donnes l'unité à joueur 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 et tu lui supprime le contrôle avec une fonction dont le nom m'échappe.
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 super_mouton
Floodozaurus


Inscrit le: 21 Aoû 2007
Messages: 2072
Sujets: 51
Spécialité en worldedit: Harceller vos maps de critiques !! ';..;'
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 18/02/13 21:27    Sujet du message: Re: Les patrols irrationnels Citer

fulldragon a écrit:
et tu lui supprime le contrôle avec une fonction dont le nom m'échappe.


Tu parles de la capacité infestation ? De toute façon il y a plus d'une manière d'y arriver.
_________________
Dessine moi un Bizzardbizzare ! Very Happy
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com