Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Update the skills

Discussion in 'Gaias Retaliation ORPG' started by galactcus, Jun 8, 2016.

  1. galactcus

    galactcus

    Joined:
    Feb 11, 2010
    Messages:
    487
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Can someone please update the skills at abilities guide in the guides & database section??

    im without war 3 for some days and i want to think about what skills to get in my char but that guide is very old... :X
     
  2. Jumbo

    Jumbo

    Joined:
    Jun 22, 2007
    Messages:
    1,296
    Resources:
    0
    Resources:
    0
    Write to Alex. And give him some rep in the process - for the work he's done.
     
  3. Ira

    Ira

    Joined:
    Apr 18, 2016
    Messages:
    104
    Resources:
    0
    Resources:
    0
    you could also just write a new guide yourself
     
  4. galactcus

    galactcus

    Joined:
    Feb 11, 2010
    Messages:
    487
    Resources:
    1
    Maps:
    1
    Resources:
    1
    like i said genius im without warcraft so i cant see the new skills or their order... so i cant make an guid myself ¬¬
    that's why i want to know if someone did
     
  5. Ethical

    Ethical

    Joined:
    Nov 30, 2014
    Messages:
    71
    Resources:
    0
    Resources:
    0
    if you want something at least be polite until you receive it
     
  6. Ira

    Ira

    Joined:
    Apr 18, 2016
    Messages:
    104
    Resources:
    0
    Resources:
    0
    if you are without warcraft anyways what do you really need the guide for? planing ahead? relearning abilitys is really cheap is the latest versions you can just reskill everytime you need something diffrent.
     
  7. Alright

    Alright

    Joined:
    May 20, 2014
    Messages:
    230
    Resources:
    0
    Resources:
    0
    I'd totally be up for updating the guide, if someone wants me to. It wouldn't take me long to figure out the skills/talents, if Alex is inactive (he hasn't logged on for a month or so), and I'm super bored anyway. I'd probably need to ask him for permission to use his format though.
     
  8. ALEXz407

    ALEXz407

    Joined:
    Aug 23, 2014
    Messages:
    206
    Resources:
    2
    Tutorials:
    2
    Resources:
    2
    To be honest, abilities guide is pretty hard to maintain atm. I just do not have enough time for it (work, business trips, personal life, other games, etc :)
    That's why I making a Perl script which will generate guide automatically. I will share it in guide thread, so anybody can use it later if I disappear for long time :)
    Script code. It does not pretend to be the most optimal code, but it works :)
    Code (Text):

    #!/usr/bin/env perl
    no warnings 'experimental::smartmatch';

    my $r = {};
    my $ih = do 'hero_id.ini';
    my $iz = do 'target_types.ini';
    my $il = do 'ability_levels.ini';
    my $ii = do 'icons.ini';
    my $ia = do 'ability_data.ini';
    my $cfg = do 'convert.cfg';
    my $ability_regex = $cfg->{ability_regex};

    #
    # Take these lines from war3map.j
    #
    open FILE, "<ability_init_calls.txt" or die;
        while (<FILE>) {
            s/[\(|\)]//g;
            s/$ability_regex//;
            my $t = $1;
            my $f = [ grep { s/\'//g; 1 } split ',' ];
            if ( $t eq $cfg->{basic_ability_function_name} ) {
                $r->{$ih->{$f->[0]}}->{$il->{$f->[6]}}->{$f->[5]} = {
                    cd => $f->[8],
                    st => $f->[9],
                    tp => $iz->{$f->[10]},
                };
            } else {
                $r->{$ih->{$f->[0]}}->{$il->{$f->[4]}}->{$f->[3]} = {
                    cd => $f->[6],
                    st => $f->[7],
                    tp => $iz->{$f->[8]},
                };
            }
        }
    close FILE;

    my $dic = {};
    my $cur = '';
    open FILE, "<CampaignAbilityFunc.txt" or die;
        while (<FILE>) {
            s/\|c..(......)/[COLOR=#$1\]/g;
            s/\|r/[\/COLOR\]/g;
            /^\[(.*)\]$/;
            if ( $1 ) {
                $cur = $1;
                next;
            }
            /^(.+?)=(.+)$/;
            my $nam = $1;
            my $val = $2;
            /()/;
            $val =~ s/\|n/\n/g;
            $val =~ s/^"|"$//g;
            my $n;
            for ( split '","', $val ) {
                $dic->{$cur}->{$nam}->{++$n} = $_;
            }
        }
    close FILE;

    my $slk = {};
    $cur = '';
    open FILE, "<AbilityData.slk" or die;
        while (<FILE>) {
            /^C;X.*?;Y.*?;K"(.*)"$/;
            if ( $1 ) {
                $cur = $1;
                next;
            }
            /^C;X(.*?);K(.*)$/;
            my $id  = $1;
            my $val = $2;
            if ( $cur eq 'alias' ) {
                $val =~ s/"//g;
                $val =~ s/(\d*)$//;
                $slk->{$id} = {
                    v => $val,
                    n => $1,
                };
            } else {
                $dic->{$cur}->{$slk->{$id}->{v}}->{$slk->{$id}->{n} || 1} = $2;
            }
            /()()/;
        }
    close FILE;

    open FILE, ">guide.txt" or die;

    print FILE '[point]Top[/point][CENTER][SIZE=3]Jump to: '.(join ' | ', map { sprintf "[goto=%s]%s[/goto]", $_, $_ } ( @{$cfg->{linked}}, 'Bottom' ) )."[/SIZE]\n";
    print FILE $cfg->{header};

    for my $hero ( qw/ Squire Berserker Crusader Ranger Hunter Druid Thief Assassin Bard Cleric Bishop Monk Magician Necromancer Sorcerer Mystic Hexblade Psion / ) {
        if ( $hero ~~ @{$cfg->{linked}} ) {
            print FILE $cfg->{line};
            printf FILE "[point]%s[/point]", $hero;
        }
        printf FILE "[otablei][tr][td][IMG]%s[/IMG][/td][td][keepspace][SIZE=5] %s[/SIZE][/keepspace][/td][/tr][/otablei]",($cfg->{url}.$ii->{h}->{$hero}),$hero;
        print FILE '
    [otable]
    [tr]
    [titletd][CENTER]BTN[/CENTER][/titletd]
    [titletd][CENTER]Icon[/CENTER][/titletd]
    [titletd][CENTER]Name[/CENTER][/titletd]
    [titletd][CENTER]Description[/CENTER][/titletd]
    [titletd][CENTER]Mana[/CENTER][/titletd]
    [titletd][CENTER]Casttime[/CENTER][/titletd]
    [titletd][CENTER]Cooldown[/CENTER][/titletd]
    [titletd][CENTER]Talents[/CENTER][/titletd]
    [/tr]
    ';

        for my $order ( sort {$a <=> $b} keys %{$r->{$hero}} ) {
            for my $ability ( sort keys %{$r->{$hero}->{$order}} ) {
                print FILE "[tr]\n";
                printf FILE "[td][CENTER][COLOR=Yellow][SIZE=5][B]%s[/B][/SIZE]\n\n[COLOR=White][SIZE=2][B]%s[/B][/SIZE][/COLOR][/COLOR][/CENTER][/td]\n",$dic->{$ability}->{Hotkey}->{1},$order;
                printf FILE "[td][IMG]%s[/IMG][/td]\n",($cfg->{url}.$ii->{a}->{$dic->{$ability}->{Name}->{1}});
                printf FILE "[td]%s[/td]\n",$dic->{$ability}->{Name}->{1};
                my $desc = $dic->{$ability}->{Ubertip}->{1};
                $desc =~ s/\[COLOR=#ccccff\]Cooldown:.*//s;
                printf FILE "[td]%s[/td]\n",$desc;
                printf FILE "[td][CENTER][COLOR=RoyalBlue]%s[/COLOR][/CENTER][/td]\n",($dic->{$ability}->{Cost}->{1} || '-');
                printf FILE "[td][CENTER]%s[/CENTER][/td]\n",
                    $ia->{$dic->{$ability}->{Name}->{1}}->{cast}
                        ? $ia->{$dic->{$ability}->{Name}->{1}}->{cast} < 0
                            ? '[COLOR=Gray]-[/COLOR]'
                            : $ia->{$dic->{$ability}->{Name}->{1}}->{cast} > 9000
                                ? '[COLOR=Magenta]Channel[/COLOR]'
                                : $ia->{$dic->{$ability}->{Name}->{1}}->{cast} > 3
                                    ? sprintf '[COLOR=Orange]%s sec[/COLOR]', $ia->{$dic->{$ability}->{Name}->{1}}->{cast}
                                    : sprintf '[COLOR=Yellow]%s sec[/COLOR]', $ia->{$dic->{$ability}->{Name}->{1}}->{cast}
                        : '[COLOR=White]Instant[/COLOR]'
                ;
                printf FILE "[td][CENTER]%s%s[/CENTER][/td]\n",
                    $ia->{$dic->{$ability}->{Name}->{1}}->{cool} ? sprintf "[COLOR=Gray]%s[/COLOR]\n\n", $ia->{$dic->{$ability}->{Name}->{1}}->{cool} : '',
                    $dic->{$ability}->{Cool}->{1}
                        ? $dic->{$ability}->{Cool}->{1} < 1
                            ? sprintf '[COLOR=White]%s sec[/COLOR]', $dic->{$ability}->{Cool}->{1}
                            : $dic->{$ability}->{Cool}->{1} < 30
                                ? sprintf '[COLOR=Yellow]%s sec[/COLOR]', $dic->{$ability}->{Cool}->{1}
                                : sprintf '[COLOR=Orange]%s sec[/COLOR]', $dic->{$ability}->{Cool}->{1}
                        : '[COLOR=Gray]Passive[/COLOR]'
                ;
                printf FILE "[td]";

                for my $thero ( sort keys %{$ia->{$dic->{$ability}->{Name}->{1}}->{tals}} ) {
                    printf FILE '[otablei][tr][td][IMG]%s[/IMG][/td][td]',($cfg->{url}.$ii->{h}->{$thero});
                    printf FILE "[B]%s:[/B] %s\n", $_->[0], $_->[1] for @{$ia->{$dic->{$ability}->{Name}->{1}}->{tals}->{$thero}};
                    print FILE "[/td][/tr][/otablei]";
                }
                printf FILE "[/td]\n";
                print FILE "[/tr]\n";
            }
        }

        print FILE '
    [/otable]
    ';

    }

    print FILE $cfg->{line};
    print FILE '[point]Bottom[/point][CENTER][SIZE=3]Jump to: '.(join ' | ', map { sprintf "[goto=%s]%s[/goto]", $_, $_ } ( 'Top', @{$cfg->{linked}} ) )."[/SIZE]\n";
    print FILE $cfg->{attachments};

    close FILE;

     
    New layout example
    [​IMG]

    [​IMG] Cleric
    BTN
    Icon Name Description
    Mana
    Casttime
    Cooldown
    Talents
    Q

    1
    [​IMG] Heal Heals a friendly target for Spellpower x 5.
    9
    2.5 sec
    0.5 sec
    [​IMG] 40: mana cost -20%
    [​IMG] 25: replenish 1% of max mana to the target healed
    25: cast time -50% if used on oneself
    Q

    1
    [​IMG] Soul Strike A blast of magic strikes the target. Deals Spellpower x 3 magic damage. Deals 150% damage to undead units.
    8
    2.5 sec
    0.5 sec
    [​IMG] 40: removes Weakened Soul spell damage malus
    [​IMG] 25: 33% chance to hit an additional target
    W

    3
    [​IMG] Crippling Curse Deals Spellpower x 7 shadow damage over 15 seconds.
    7
    Instant
    15 sec
    [​IMG] 40: spell crit chance +10% on debuffed targets (self)
    45: replenishes 2 mana per tick
    45: cooldown -50%
    [​IMG] 45: attacks against debuffed targets ignore armor (self)
    45: 5% chance on attacks to debuff target
    W

    3
    [​IMG] Sunfire Conjures an explosion of purifying energy, dealing Spellpower x 2.0 fire damage to all units within a small area around the caster. Undead units take double damage.
    9
    ???
    18 sec
    Z

    7
    [​IMG] Confidence Increases resistances of all nearby friendly units by 15 and evasion by 3%.
    -
    -
    Passive
    [​IMG] 35: resistance bonus +7%
    Z

    7
    [​IMG] Burst of Light The caster releases a massive amount of holy energy, healing all nearby friendly units around the caster for Spellpower x 7.
    Creates no threat.
    15
    Instant
    90 sec
    [​IMG] 35: cooldown -30%
    A

    13
    [​IMG] Ressurection Brings the target back to life with 50% HP and 20% MP. Cooldown resets when out of combat.
    50
    10 sec
    Reset

    300 sec
    A

    13
    [​IMG] Symbol Of Fury Imbues the target with divine fury. Increasing attackspeed by 20% and spellhaste by 30%. Lasts 45 seconds.
    8
    Instant
    60 sec
    [​IMG] 30: attack speed bonus +10%
    [​IMG] 30: duration +15 sec

     
    Last edited: Jun 13, 2016
  9. Alright

    Alright

    Joined:
    May 20, 2014
    Messages:
    230
    Resources:
    0
    Resources:
    0
    That's a cool script although new forum platform so code might not work/be updated, I don't mind taking over if you don't have the time to finish. I'd need a few days figuring out abilities and such but should be super simple.
     
  10. Devlain

    Devlain

    Joined:
    Jul 14, 2014
    Messages:
    75
    Resources:
    0
    Resources:
    0
    Alex, I have to say it. You work seems pretty impressive to me. I only code in Javascript so I don't understand all of your code and I know there could be things to optimize, but as far as I know, the code is super-functional and amazing.
     
  11. ALEXz407

    ALEXz407

    Joined:
    Aug 23, 2014
    Messages:
    206
    Resources:
    2
    Tutorials:
    2
    Resources:
    2
    Thanks :)

    Well. New forum settings are pretty restrictive, so I can not update old guide: too much images in one post :)

    I think to create new guide from a scratch: place all images to the gallery and make 1 post per base&advanced classes (6 posts in a row + 1 extra for technical information), so 200 images limit will not be overrided.
    Found workaround - just replace class icons with names in talents list. :)
     
    Last edited: Jun 13, 2016