Changeset - 05ac6cf70850
[Not reviewed]
default
0 2 0
Silverwing - 8 years ago 2017-01-09 10:37:01

Zayslanotrr battle updated
2 files changed with 229 insertions and 206 deletions:
0 comments (0 inline, 0 general)
journey_zayslanotrr.lua
Show inline comments
 
@@ -1196,14 +1196,14 @@ za_plaetlarr_fight = battlefield {
 
    nam = "Заисланотр, улица";
 
    plX = 4;
 
    plY = 1;
 
    map = {
 
        {2,0,0,0,0,0,2};
 
        {2,0,0,0,0,0,2};
 
        {2,1,0,0,0,0,2};
 
        {2,0,0,0,0,1,2};
 
        {2,1,1,0,0,0,2};
 
        {2,0,0,0,1,1,2};
 
        {2,0,0,0,0,0,2};
 
        {2,0,0,0,0,0,2};
 
        {2,0,0,0,0,0,2};
 
    };
 
    obstacle = "images/stones.png";
 
    lose = "game_over_za_fight";
 
@@ -1308,12 +1308,13 @@ za_cmbt_phaetlarr = combatant {
 
                    s.hasSpear = false;
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Фаэтларр бросает копье в " .. enemy.disp2 .. " и попадает. ");
 
                else
 
                    pn("Фаэтларр бросает копье в " .. enemy.disp2 .. ", но промахивается. ");
 
                end;
 
                return;
 
            end;
 
        else
 
            if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                if (enemy.hasSpear) then
 
                    enemy.hasSpear = false;
 
@@ -1326,83 +1327,12 @@ za_cmbt_phaetlarr = combatant {
 
            end;
 
        end;
 
        
 
        s.x = path.p[2][1];
 
        s.y = path.p[2][2];
 
        pn("Фаэтларр идет к " .. enemy.disp3 .. ". ");
 

	
 
        if (true) then
 
            return;
 
        end;
 

	
 
        local enemies = {  };
 
        for item=1,#here().obj do
 
            local obj = here().obj[item];
 
            if (obj.enemy and obj.hp > 0) then
 
                table.insert(enemies, obj);
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
        end);
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        -- AI Order:
 
        -- If has spear and enemy is far   - throw spear
 
        -- If has spear and enemy is close - hit with spear
 
        -- if spear is nearer than any enemy - walk towards spear
 
        -- walk towards nearest enemy
 
        -- If enemy close and enemy has spear - take spear from enemy
 
        -- If enemy close and enemy doesn't have spear - hit with claws
 
        
 
        if (s.hasSpear and dist == 1) then
 
            if (rnd(4) > 1) then
 
                pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); 
 
            end;
 
        elseif (s.hasSpear and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
        elseif (s.hasSpear and dist < 4) then
 
            s.hasSpear = false;
 
            if (rnd(4) > dist) then
 
                enemy.hp = enemy.hp - 2;
 
                pn("Фаэтларр бросает копье в " .. enemy.disp2 .. " и попадает. ");
 
            else
 
                
 
                pn("Фаэтларр бросает копье в " .. enemy.disp2 .. ", но промахивается. ");
 
            end;
 
        elseif dist == 0 then
 
            if (enemy.hasSpear) then
 
                enemy.hasSpear = false;
 
                s.hasSpear = true;
 
                pn("Фаэтларр забирает копье у " .. enemy.disp2 .. ". ");
 
            else
 
                enemy.hp = enemy.hp - 1;
 
                pn("Фаэтларр бьет " .. enemy.disp2 .. " и попадает. ");
 
            end;
 
        else
 
            if (enemy.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (enemy.x < s.x) then
 
                s.x = s.x - 1;
 
            end;
 
            
 
            if (enemy.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (enemy.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
            pn("Фаэтларр идет к " .. enemy.disp3 .. ". ");
 
        end;
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Фаэтларр} готов к бою. ]];
 
        else
 
            return [[ {Фаэтларр} без сознания. ]];
 
@@ -1424,59 +1354,79 @@ za_cmbt_learr = combatant {
 
    hasSpear = true;
 
    make_turn = function(s)
 
        local enemies = {  };
 
        for item=1,#here().obj do
 
            local obj = here().obj[item];
 
            if (obj.enemy and obj.hp > 0) then
 
                table.insert(enemies, obj);
 
                local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y);
 
                if (p) then
 
                    table.insert(enemies, {
 
                        o = obj,
 
                        p = p
 
                    });
 
                end;
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            pn("Леарр ждет. ");
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
            return (a.p.l < b.p.l);
 
        end);
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        local enemy = enemies[1].o;
 
        local path = enemies[1].p;
 
        for i = 1,#enemies do
 
            print(enemies[i].p.l);
 
        end;
 
        -- AI Order:
 
        -- If has spear and enemy is far   - throw spear
 
        -- If has spear and enemy is close - hit with spear
 
        -- if spear is nearer than any enemy - walk towards spear
 
        -- walk towards nearest enemy
 
        -- If enemy close and enemy has spear - take spear from enemy
 
        -- If enemy close and enemy doesn't have spear - hit with claws
 
        
 
        if (s.hasSpear and dist == 1) then
 
            if (rnd(4) > 1) then
 
                pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 

	
 
        if s.hasSpear then
 
            if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then
 
                --50%
 
                if (rnd(2) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                else
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. ");
 
                end;
 
                return;
 
            elseif  (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then
 
                --75%
 
                if (rnd(4) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                else
 
                    pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. ");
 
                end;
 
                return;
 
            elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                --100%
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); 
 
                pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
                return;
 
            end;
 
        elseif (s.hasSpear and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. ");
 
        elseif dist == 0 then
 
            enemy.hp = enemy.hp - 1;
 
            pn("Леарр бьет " .. enemy.disp2 .. " и попадает. ");
 
        else
 
            if (enemy.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (enemy.x < s.x) then
 
                s.x = s.x - 1;
 
            if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                enemy.hp = enemy.hp - 1;
 
                pn("Леарр бьет " .. enemy.disp2 .. " и попадает. ");
 
                return;
 
            end;
 
            
 
            if (enemy.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (enemy.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
            pn("Леарр идет к " .. enemy.disp3 .. ". ");
 
        end;
 
        
 
        s.x = path.p[2][1];
 
        s.y = path.p[2][2];
 
        pn("Леарр идет к " .. enemy.disp3 .. ". ");
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Леарр} готова к бою. ]];
 
        else
 
            return [[ {Леарр} без сознания. ]];
 
@@ -1498,64 +1448,89 @@ za_cmbt_wright = combatant {
 
    hasHarpoon = true;
 
    make_turn = function(s)
 
        local enemies = {  };
 
        for item=1,#here().obj do
 
            local obj = here().obj[item];
 
            if (obj.enemy and obj.hp > 0) then
 
                table.insert(enemies, obj);
 
                local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y);
 
                if (p) then
 
                    table.insert(enemies, {
 
                        o = obj,
 
                        p = p
 
                    });
 
                end;
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            pn("Райт ждет. ");
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
            return (a.p.l < b.p.l);
 
        end);
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        local enemy = enemies[1].o;
 
        local path = enemies[1].p;
 
        
 
        if (s.x ~= 6 or s.y ~=3) then
 
            local ppath = here():getWalkDistance(s.x, s.y, 6, 3);
 
            if (ppath.l < path.l) then
 
                s.x = ppath.p[2][1];
 
                s.y = ppath.p[2][2];
 
                pn("Райт идет к укрытию");
 
            end;
 
        end;
 
        
 
        -- AI Order:
 
        -- If has harpoon and enemy is far - shoot
 
        -- If has harpoon and enemy is close - hit with harpoon
 
        -- walk towards nearest enemy
 
        
 
        if (s.hasHarpoon and dist == 1) then
 
            if (rnd(4) > 1) then
 
        if (s.hasHarpoon) then
 
            if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then
 
                --50%
 
                if (rnd(2) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif  (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then
 
                --75%
 
                if (rnd(4) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                --100%
 
                enemy.hp = enemy.hp - 2;
 
                pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
                return;
 
            else
 
                pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y);
 
                if (rnd(4) > dist - 2) then
 
                    s.hasSpear = false;
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            end;
 
        elseif (s.hasHarpoon and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
        elseif (s.hasHarpoon and dist < 4) then
 
            s.hasHarpoon = false;
 
            if (rnd(4) > dist) then
 
                pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");    
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
            end;
 
        elseif (not s.hasHarpoon) then
 
        else
 
            s.hasHarpoon = true;
 
            pn("Райт перезаряжает ружье. ");
 
        else
 
            if (enemy.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (enemy.x < s.x) then
 
                s.x = s.x - 1;
 
            end;
 
            
 
            if (enemy.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (enemy.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
            pn("Райт идет к " .. enemy.disp3 .. ". ");
 
        end;
 
        
 
        s.x = path.p[2][1];
 
        s.y = path.p[2][2];
 
        pn("Райт идет к " .. enemy.disp3 .. ". ");
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Райт} готов к бою. ]];
 
        else
 
            return [[ {Райт} без сознания. ]];
 
@@ -1577,64 +1552,89 @@ za_cmbt_radcliffe = combatant {
 
    hasHarpoon = true;
 
    make_turn = function(s)
 
        local enemies = {  };
 
        for item=1,#here().obj do
 
            local obj = here().obj[item];
 
            if (obj.enemy and obj.hp > 0) then
 
                table.insert(enemies, obj);
 
                local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y);
 
                if (p) then
 
                    table.insert(enemies, {
 
                        o = obj,
 
                        p = p
 
                    });
 
                end;
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            pn("Рэдклифф ждет. ");
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
            return (a.p.l < b.p.l);
 
        end);
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        local enemy = enemies[1].o;
 
        local path = enemies[1].p;
 
        
 
        if (s.x ~= 6 or s.y ~=3) then
 
            local ppath = here():getWalkDistance(s.x, s.y, 6, 3);
 
            if (ppath.l < path.l) then
 
                s.x = ppath.p[2][1];
 
                s.y = ppath.p[2][2];
 
                pn("Рэдклифф идет к укрытию");
 
            end;
 
        end;
 
        
 
        -- AI Order:
 
        -- If has harpoon and enemy is far - shoot
 
        -- If has harpoon and enemy is close - hit with harpoon
 
        -- walk towards nearest enemy
 
        
 
        if (s.hasHarpoon and dist == 1) then
 
            if (rnd(4) > 1) then
 
        if (s.hasHarpoon) then
 
            if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then
 
                --50%
 
                if (rnd(2) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif  (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then
 
                --75%
 
                if (rnd(4) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                --100%
 
                enemy.hp = enemy.hp - 2;
 
                pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
                return;
 
            else
 
                pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y);
 
                if (rnd(4) > dist - 2) then
 
                    s.hasSpear = false;
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            end;
 
        elseif (s.hasHarpoon and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
        elseif (s.hasHarpoon and dist < 4) then
 
            s.hasHarpoon = false;
 
            if (rnd(4) > dist) then
 
                pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");    
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
            end;
 
        elseif (not s.hasHarpoon) then
 
        else
 
            s.hasHarpoon = true;
 
            pn("Рэдклифф перезаряжает ружье. ");
 
        else
 
            if (enemy.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (enemy.x < s.x) then
 
                s.x = s.x - 1;
 
            end;
 
            
 
            if (enemy.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (enemy.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
            pn("Рэдклифф идет к " .. enemy.disp3 .. ". ");
 
        end;
 
        
 
        s.x = path.p[2][1];
 
        s.y = path.p[2][2];
 
        pn("Рэдклифф идет к " .. enemy.disp3 .. ". ");
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Рэдклифф} готов к бою. ]];
 
        else
 
            return [[ {Рэдклифф} без сознания. ]];
 
@@ -1656,68 +1656,91 @@ za_cmbt_anna = combatant {
 
    hasHarpoon = true;
 
    make_turn = function(s)
 
        local enemies = {  };
 
        for item=1,#here().obj do
 
            local obj = here().obj[item];
 
            if (obj.enemy and obj.hp > 0) then
 
                table.insert(enemies, obj);
 
                local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y);
 
                if (p) then
 
                    table.insert(enemies, {
 
                        o = obj,
 
                        p = p
 
                    });
 
                end;
 
            end;
 
        end;
 
        if (#enemies == 0) then
 
            pn("Анна ждет. ");
 
            return;
 
        end;
 
        table.sort(enemies, function(a, b)
 
            return (here().getDistance(s.x, s.y, b.x, b.y) > here().getDistance(s.x, s.y, a.x, a.y));
 
            return (a.p.l < b.p.l);
 
        end);
 
        local enemy = enemies[1].o;
 
        local path = enemies[1].p;
 
        
 
        local pldist = here().getDistance(s.x, s.y, pl.x, pl.y);
 
        if (s.x ~= 6 or s.y ~=3) then
 
            local ppath = here():getWalkDistance(s.x, s.y, 6, 3);
 
            if (ppath.l < path.l) then
 
                s.x = ppath.p[2][1];
 
                s.y = ppath.p[2][2];
 
                pn("Анна идет к укрытию");
 
            end;
 
        end;
 
        
 
        local enemy = enemies[1];
 
        local dist = here().getDistance(s.x, s.y, enemy.x, enemy.y);
 
        -- AI Order:
 
        -- If has harpoon and enemy is far - shoot
 
        -- If has harpoon and enemy is close - hit with harpoon
 
        -- walk towards nearest enemy
 
        
 
        if (s.hasHarpoon and dist == 1) then
 
            if (rnd(4) > 1) then
 
        if (s.hasHarpoon) then
 
            if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then
 
                --50%
 
                if (rnd(2) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif  (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then
 
                --75%
 
                if (rnd(4) > 1) then
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or
 
                s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then
 
                --100%
 
                enemy.hp = enemy.hp - 2;
 
                pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                enemy.hp = enemy.hp - 2;
 
                return;
 
            else
 
                pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y);
 
                if (rnd(4) > dist - 2) then
 
                    s.hasSpear = false;
 
                    enemy.hp = enemy.hp - 2;
 
                    pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");
 
                else
 
                    pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
                end;
 
                return;
 
            end;
 
        elseif (s.hasHarpoon and dist == 0) then
 
            enemy.hp = enemy.hp - 2;
 
            pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. ");
 
        elseif (s.hasHarpoon and dist < 4) then
 
            s.hasHarpoon = false;
 
            if (rnd(4) > dist) then
 
                pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном и попадает. ");    
 
                enemy.hp = enemy.hp - 2;
 
            else
 
                pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); 
 
            end;
 
        elseif (not s.hasHarpoon) then
 
        else
 
            s.hasHarpoon = true;
 
            pn("Анна перезаряжает ружье. ");
 
        elseif (pldist > 0) then
 
            if (pl.x > s.x) then
 
                s.x = s.x + 1;
 
            elseif (pl.x < s.x) then
 
                s.x = s.x - 1;
 
            end;
 
            
 
            if (pl.y > s.y) then
 
                s.y = s.y + 1;
 
            elseif (pl.y < s.y) then
 
                s.y = s.y - 1;
 
            end;
 
            
 
        end;
 
        
 
        local plpath = here():getWalkDistance(s.x, s.y, pl.x, pl.y);
 
        if (plpath.l > 2) then
 
            s.x = plpath.p[2][1];
 
            s.y = plpath.p[2][2];
 
            pn("Анна идет к вам. ");
 
        else
 
            pn("Анна ждет ваших действий. ");
 
        end;
 
    end;
 
    dsc = function(s)
 
        if (s.hp > 0) then
 
            return [[ {Анна} готова к бою. ]];
 
        else
main.lua
Show inline comments
 
@@ -243,13 +243,13 @@ function init()
 
    put(item_harpoon, pl);
 
    put(item_colt, pl);
 
    --ven_shark.position = "55";
 
	--pl.where = "za_plaetlarr_fight";
 
    pl.where = "za_phaetlarr_fight_intro";
 
    move(submarine_leviathan, "za_temple_back_entrance_foot");
 
    --char_anna.follow = true;
 
    char_anna.follow = true;
 
    --pl.where = "ven_chest_look";
 
    --move(ven_shark, "ven_temple_l1");
 
    
 
	--put(item_suit, pl);
 
	
 
	-- pl.where = warehouse_32;
0 comments (0 inline, 0 general)