stand_position [Research]

« Older   Newer »
 
  Share  
.
  1.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Ciao ragazzi, e mi rivolgo in particolare a Ricky e Supreme

    Sarebbe interessante trovare negli script penso contenuti in SUBAI il motivo per il quale se si ordina ad un esercito di andare in un punto "abbastanza" lontano (non so quantificare la lontananza) e poi si preme S i soldati si fermano esattamente nel punto in cui si trovano, mentre se si mandano in un punto vicino questo non accade.

    Per spiegarmi , se mando l'eroe in un punto diciamo vicino al foro partendo da fuori la porta e poi premo S accade questo

    EpsIGJo

    mentre se lo mando sempre in un punto di fronte all'eroe e oltre al punto in cui voglio fermarmi ma abbastanza vicino alla porta nella quale sto entrando, e poi premo S, accade questo:

    ETaPIuB

    sarebbe bello e utile se qualcuno indagasse (si potrebbe correggere lo script e/o migliorarlo). potete verificare voi stessi questo fatto provando in gioco.

    attendo news,

    Razor
     
    .
  2.     +1   -1
     
    .
    Avatar

    Signore
    """""""

    Group
    Member
    Posts
    102,483
    Reputation
    +88

    Status
    Anonymous
    Il codice penso che č questo:

    CODICE
    // void, Obj me

    Unit  this, u;
    point pt;
    int   range;
    bool  bSleeped;

    this = me.AsUnit();

    if (.IsValid) // leave parry mode at new command
    .SetParryMode(false);

    while( ! .Stop( 1000 ));
    pt = .posRH;
    range = 120;

    while(.IsAlive)
    {
           if (.CmdCount() > 1)
                   break;
           if( .IsRanged )
           {
                   u = .BestTargetInRange( pt, .range );
                   while( u.IsAlive && .IsValidTarget( u ) && .IsVisible)
                   {
                           bSleeped = false;
                           while( .Attack( u ))
                           {
                                   if( ! .IsVisible ) break;
                                   bSleeped = true;
                           }
                           if( ! bSleeped ) Sleep( 50 );
                           u = .BestTargetInRange( pt, .range );
                   }
           }
           else
           {
                   u = .BestTargetInRange( pt, range );
                   while( u.IsAlive && .IsValidTarget( u ) && .IsVisible)
                   {
                           bSleeped = false;
                           while( ! .GotoAttack( u, 1500, true, -1 ))
                           {
                                   bSleeped = true;
                                   u = .BestTargetInRange( pt, range );
                                   if( !u.IsAlive || ! .IsValidTarget( u )) break;
                                   if( !.IsVisible ) break;
                           }
                           if( u.IsAlive && .IsValidTarget( u ) && .IsVisible)
                           {
                                   while( .Attack( u ))
                                   {
                                           if( ! .IsVisible ) break;
                                           bSleeped = true;
                                   }
                           }
                           if( ! bSleeped ) Sleep( 50 );
                           u = .BestTargetInRange( pt, range );
                   }
           }
           if( ! u.IsAlive && ( pt.x != .posRH.x || pt.y != .posRH.y ))
           {
                   while( ! .Goto( pt, 0, 2000, false, -1 ));
           }
           else
                   .Idle(1793);
    }


    Lo analizzerň meglio dopo perchč devo scoprire cosa serve il ParryMod e il GotoAttack
     
    .
  3.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Parry mod č Contenimento.
     
    .
  4.     +1   -1
     
    .
    Avatar

    Signore
    """""""

    Group
    Member
    Posts
    102,483
    Reputation
    +88

    Status
    Anonymous
    Accade solo alle unitŕ vincolate all'eroe?
     
    .
  5.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Si, cioe seleziono l eroe e faccio quei movimenti, quindi penso che guarderei hero_stand_position.vs o come si chiama

    L unico modo per fermare le unitŕ nel posto senza che si sciolgano e senza eroe č mandarle dentro un forte/foro/grotta, e poi premere s
     
    .
  6.     +1   -1
     
    .
    Avatar

    Signore
    """""""

    Group
    Member
    Posts
    102,483
    Reputation
    +88

    Status
    Anonymous
    Dal codice di stand position l'unitŕ non sta in stand position ma attacca se nel caso si trova una unitŕ nemica vicina(se č un arciere anche nel raggio di 600 unitŕ)

    Potrebbe invece riguardare un comando dell'eroe anche se dubito perchč questo file stand position riguarda tutte le unitŕ e quindi anche gli eroi,se esiste un file che specifica il comportamento delle unitŕ ad ogni comando dell'eroe allora probabilmente č li la causa di questo piccolo problema.

    Se l'eroe si ferma subito allora questo file non ha colpe.

    Io penso che il file Hero_stand_ground.vs sia il responsabile,dal codice si puň dedurre che le unitŕ stanno ferme nel caso in cui l'eroe gli viene dato il comando hold_position o stand_position:

    CODICE
    //void, Obj me, point pt

    Hero  this;
    point dest;
    int   formed,i;

    this = me.AsHero();

    dest = GetVec(.posRH, pt, 16);

    for (i = 0; i < .army.count; i += 1)
           .army[i].SetCommand("stand_position");

    .SetCommand("stand_position");


    Comunque qui ci sono 2 errori: il primo errore č che la variabile dest non č utilizzata(anche se gli viene assegnato un valore),poi anche la variabile formed non č usata.

    Anche questo file potrebbe centrare si chiama Hero_holdPosition.vs

    CODICE
    // void, Obj me

    Hero this;
    Unit u;
    Building b;
    point pt;
    int i;
     
    this = me.AsHero();

    pt = .posRH;

    .FormSetupAndMoveTo(pt,0,0,true);
    while(.HasPath())
    {
           .FormKeepMoving(1500);
    }

    .army.SetCommand("hold_position");

    u = .BestTargetForPos();
    while(1)
    {
           if(u.IsAlive())
           {
                   while(u.IsAlive())
                   {
                           while(!.Attack(u))
                           {
                                   u = .BestTargetForPos();
                                   if(!u.IsValid()) break;
                           }
                           if(u.IsAlive)
                           {
                                   for(i = 0; i < 3; i+=1)
                                   {
                                           if(!.Attack(u)) break;
                                   }
                           }
                           u = .BestTargetForPos();
                   }
           }
           else
           {
                   .Idle(2000);
                   u = .BestTargetForPos();
           }
    }
     
    .
  7.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Puoi fare delle prove mettendo quel file nella cartella Data/Subai creata manualmente affianco a gbr.exe e verificare i risultati. ;-)
     
    .
  8.     +1   -1
     
    .
    Avatar

    Signore
    """""""

    Group
    Member
    Posts
    102,483
    Reputation
    +88

    Status
    Anonymous
    La causa penso che sia:

    .FormSetupAndMoveTo(pt,0,0,true);

    che non so cosa significa ma penso che l'eroe si muove nel punto pt

    Trovato basta che togli idle

    In pratica il suo funzionamento non č diverso dalle unitŕ,ma se l'eroe non trova nemici vicini allora si ferma dopo 2 secondi indicato da Idle

    Idle(2000); č una funzione latente,comunque non so ma penso che se si tratta di un eroe questo file venga eseguito prima di unit_standposition.vs

    e questa funzione "ritarda" lo stand position dell'eroe e/o delle sue unita
     
    .
  9.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Hai provato in gioco a fare questo "bug" ? Per capirne bene la causa, prima si deve osservare bene quello che accade
     
    .
  10.     +1   -1
     
    .
    Avatar

    Signore
    """""""

    Group
    Member
    Posts
    102,483
    Reputation
    +88

    Status
    Anonymous
    Penso che sia la funzione idle,infatti se la togli funziona ho provato io stesso,ma idle non ho ancora capito bene cosa fa oltre a far attendere.
     
    .
  11.     +1   -1
     
    .
    Avatar

    Ricky

    Group
    Eroi
    Posts
    4,930
    Reputation
    +197
    Location
    Tourin (Italy)

    Status
    Anonymous
    A quanto sembra, Supreme ha giŕ risolto :)
     
    .
  12.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Se ha risolto, metta in allegato il file vs infetto modificato e proviamo a metterlo in gioco, voglio vedere per credere :)
     
    .
  13.     +1   -1
     
    .
    Avatar

    Signore
    """""""

    Group
    Member
    Posts
    102,483
    Reputation
    +88

    Status
    Anonymous
    Ma basta che lo estrai con arch e lo metti sul percorso principale di imperium,togli idle,ci metti 1 minuto a farlo.
     
    .
  14.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Va beh, ora provo
     
    .
  15.     +1   -1
     
    .
    Avatar

    Guerriero
    """

    Group
    Member
    Posts
    1,823
    Reputation
    +274
    Location
    Giza

    Status
    Offline
    Non č quello...

    CODE
    // void, Obj me

    Hero this;
    Unit u;
    Building b;
    point pt;
    int i;
     
    this = me.AsHero();

    pt = .posRH;

    .FormSetupAndMoveTo(pt,0,0,true);
    while(.HasPath())
    {
           .FormKeepMoving(1500);
    }

    .army.SetCommand("hold_position");

    u = .BestTargetForPos();
    while(1)
    {
           if(u.IsAlive())
           {
                   while(u.IsAlive())
                   {
                           while(!.Attack(u))
                           {
                                   u = .BestTargetForPos();
                                   if(!u.IsValid()) break;
                           }
                           if(u.IsAlive)
                           {
                                   for(i = 0; i < 3; i+=1)
                                   {
                                           if(!.Attack(u)) break;
                                   }
                           }
                           u = .BestTargetForPos();
                   }
           }
           else
           {
                   u = .BestTargetForPos();
           }
    }


    Questo č il file che ho messo in SUBAI, non č cambiato nulla in gioco
     
    .
29 replies since 22/9/2016, 13:44   208 views
  Share  
.