Skip to content
La2Base
Home
DownloadsWikiForumFAQ
Search
ruen
Sign up Login
HomeFilesWikiLogin
  • Home
  • Downloads
  • Wiki
  • FAQ
  • Contact Us
  • About
  • Rules
  • Privacy
  • Terms of Service

© 2026 la2base.com · All rights reserved

ruen
Forum/Помощь и Поддержка/Рейты На Квесты
Search

Рейты На Квесты

11 replies208 viewsCurrently viewing: 1
H
humark

User

Новичок

Posts: 22

На форуме с: 02/01/2008

Репутация: +1

Рейтинг: 0

· 07/02/2008, 01:51 PM

Кто в АИ разбирается и можешь помочь понять что нужно менять в АИ, чтобы улучшить шанс выпадания квест-итема, ниже приведен декомпилированный код моба Varka Footman:

Код
/***************************************************************************
*                                Change Log
*                            ------------------
*   01.07.2008
*   Script Decompiled by SauDecompiler, Alamat Edition v2.0
*    
*
***************************************************************************/

class 1 ketra_orc_footman : warrior_ag_casting_3skill_approach_stone
{
handler:
    EventHandler MY_DYING(always_list,code_info,i4,i9,last_attacker,lparty,member,random1_list,target)
    {
        always_list = gg::AllocCodeInfoList();
        random1_list = gg::AllocCodeInfoList();
        target = last_attacker;
        if( 1 )
        {
            always_list::SetInfo(0,target);
        }
        if( gg::IsNull(lparty) == 0 )
        {
            for(i9 = 0; i9 < lparty.member_count; i9 = ( i9 + 1 ))
            {
                target = myself::GetMemberOfParty(lparty,i9);
                if( 1 )
                {
                    always_list::SetInfo(0,target);
                }
            }
        }
        target = last_attacker;
        if( myself::HaveMemo(target,611) == 1 && ( ( ( ( ( ( ( ( ( myself::OwnItemCount(target,7221) + myself::OwnItemCount(target,7222) ) + myself::OwnItemCount(target,7223) ) + myself::OwnItemCount(target,7224) ) + myself::OwnItemCount(target,7225) ) == 0 && myself::OwnItemCount(target,7226) < 100 ) || ( myself::OwnItemCount(target,7221) >= 1 && myself::OwnItemCount(target,7226) < 200 ) ) || ( myself::OwnItemCount(target,7222) >= 1 && myself::OwnItemCount(target,7226) < 300 ) ) || ( myself::OwnItemCount(target,7223) >= 1 && myself::OwnItemCount(target,7226) < 300 ) ) || ( myself::OwnItemCount(target,7224) >= 1 && myself::OwnItemCount(target,7226) < 400 ) ) )
        {
            random1_list::SetInfo(1,target);
        }
        if( gg::IsNull(lparty) == 0 )
        {
            for(i9 = 0; i9 < lparty.member_count; i9 = ( i9 + 1 ))
            {
                target = myself::GetMemberOfParty(lparty,i9);
                if( myself::HaveMemo(target,611) == 1 && ( ( ( ( ( ( ( ( ( myself::OwnItemCount(target,7221) + myself::OwnItemCount(target,7222) ) + myself::OwnItemCount(target,7223) ) + myself::OwnItemCount(target,7224) ) + myself::OwnItemCount(target,7225) ) == 0 && myself::OwnItemCount(target,7226) < 100 ) || ( myself::OwnItemCount(target,7221) >= 1 && myself::OwnItemCount(target,7226) < 200 ) ) || ( myself::OwnItemCount(target,7222) >= 1 && myself::OwnItemCount(target,7226) < 300 ) ) || ( myself::OwnItemCount(target,7223) >= 1 && myself::OwnItemCount(target,7226) < 300 ) ) || ( myself::OwnItemCount(target,7224) >= 1 && myself::OwnItemCount(target,7226) < 400 ) ) )
                {
                    random1_list::SetInfo(1,target);
                }
            }
        }
        target = last_attacker;
        if( myself::HaveMemo(target,612) == 1 && myself::GetMemoState(target,612) == ( ( 1 * 10 ) + 1 ) )
        {
            random1_list::SetInfo(2,target);
        }
        if( gg::IsNull(lparty) == 0 )
        {
            for(i9 = 0; i9 < lparty.member_count; i9 = ( i9 + 1 ))
            {
                target = myself::GetMemberOfParty(lparty,i9);
                if( myself::HaveMemo(target,612) == 1 && myself::GetMemoState(target,612) == ( ( 1 * 10 ) + 1 ) )
                {
                    random1_list::SetInfo(2,target);
                }
            }
        }
        while( gg::IsNull(code_info = always_list::Next()) == 0 )
        {
            if( code_info.code == 0 )
            {
                myself::SetCurrentQuestID(605);
                myself::SetCurrentQuestID(605);
                if( myself::OwnItemCount(target,7215) >= 1 )
                {
                    myself::DeleteItem1(target,7215,myself::OwnItemCount(target,7215));
                    myself::GiveItem1(target,7214,1);
                }
                else
                {
                    if( myself::OwnItemCount(target,7214) >= 1 )
                    {
                        myself::DeleteItem1(target,7214,myself::OwnItemCount(target,7214));
                        myself::GiveItem1(target,7213,1);
                    }
                    else
                    {
                        if( myself::OwnItemCount(target,7213) >= 1 )
                        {
                            myself::DeleteItem1(target,7213,myself::OwnItemCount(target,7213));
                            myself::GiveItem1(target,7212,1);
                        }
                        else
                        {
                            if( myself::OwnItemCount(target,7212) >= 1 )
                            {
                                myself::DeleteItem1(target,7212,myself::OwnItemCount(target,7212));
                                myself::GiveItem1(target,7211,1);
                            }
                            else
                            {
                                if( myself::OwnItemCount(target,7211) >= 1 )
                                {
                                    myself::DeleteItem1(target,7211,myself::OwnItemCount(target,7211));
                                }
                            }
                        }
                    }
                }
                if( myself::HaveMemo(target,605) )
                {
                    myself::RemoveMemo(target,605);
                    myself::AddLog(2,target,605);
                    myself::DeleteItem1(target,7216,myself::OwnItemCount(target,7216));
                    myself::DeleteItem1(target,7217,myself::OwnItemCount(target,7217));
                    myself::DeleteItem1(target,7218,myself::OwnItemCount(target,7218));
                }
                if( myself::HaveMemo(target,606) )
                {
                    myself::RemoveMemo(target,606);
                    myself::AddLog(2,target,606);
                    myself::DeleteItem1(target,7233,myself::OwnItemCount(target,7233));
                }
                if( myself::HaveMemo(target,607) )
                {
                    myself::RemoveMemo(target,607);
                    myself::AddLog(2,target,607);
                    myself::DeleteItem1(target,7235,myself::OwnItemCount(target,7235));
                }
                if( myself::HaveMemo(target,608) )
                {
                    myself::RemoveMemo(target,608);
                    myself::AddLog(2,target,608);
                    myself::DeleteItem1(target,7236,myself::OwnItemCount(target,7236));
                }
                if( myself::HaveMemo(target,609) )
                {
                    myself::RemoveMemo(target,609);
                    myself::AddLog(2,target,609);
                    myself::DeleteItem1(target,7237,myself::OwnItemCount(target,7237));
                }
                if( myself::HaveMemo(target,610) )
                {
                    myself::RemoveMemo(target,610);
                    myself::AddLog(2,target,610);
                    myself::DeleteItem1(target,7239,myself::OwnItemCount(target,7239));
                }
            }
        }
        code_info = random1_list::RandomSelectOne();
        if( gg::IsNull(code_info) == 0 )
        {
            switch(code_info.code)
            {
                case 1:
                {
                    myself::SetCurrentQuestID(611);
                    target = code_info::RandomSelectOne();
                    if( gg::IsNull(target) == 0 && myself::DistFromMe(target) <= 1500 )
                    {
                        i4 = gg::Rand(1000);
                        if( i4 < 500 )
                        {
                            myself::GiveItem1(target,7226,1);
                            myself::SoundEffect(target,"ItemSound.quest_itemget");
                        }
                    }
                    break;
                }
                case 2:
                {
                    myself::SetCurrentQuestID(612);
                    target = code_info::RandomSelectOne();
                    if( gg::IsNull(target) == 0 && myself::DistFromMe(target) <= 1500 )
                    {
                        if( 1 == 1 )
                        {
                            i4 = gg::Rand(1000);
                            if( i4 < 500 && 500 != 0 )
                            {
                                if( 1 != 0 && 1 == 1 )
                                {
                                    myself::GiveItem1(target,7234,1);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself::GiveItem1(target,0,0);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself::GiveItem1(target,0,0);
                                }
                                myself::SoundEffect(target,"ItemSound.quest_itemget");
                            }
                            else
                            {
                                if( i4 < ( 500 + 0 ) && 0 != 0 )
                                {
                                    if( 0 != 0 && 1 == 1 )
                                    {
                                        myself::GiveItem1(target,7234,0);
                                    }
                                    if( 0 != 0 && 0 == 1 )
                                    {
                                        myself::GiveItem1(target,0,0);
                                    }
                                    if( 0 != 0 && 0 == 1 )
                                    {
                                        myself::GiveItem1(target,0,0);
                                    }
                                    myself::SoundEffect(target,"ItemSound.quest_itemget");
                                }
                                else
                                {
                                    if( i4 < ( ( 500 + 0 ) + 0 ) && 0 != 0 )
                                    {
                                        if( 0 != 0 && 1 == 1 )
                                        {
                                            myself::GiveItem1(target,7234,0);
                                        }
                                        if( 0 != 0 && 0 == 1 )
                                        {
                                            myself::GiveItem1(target,0,0);
                                        }
                                        if( 0 != 0 && 0 == 1 )
                                        {
                                            myself::GiveItem1(target,0,0);
                                        }
                                        myself::SoundEffect(target,"ItemSound.quest_itemget");
                                    }
                                }
                            }
                        }
                    }
                    break;
                }
            }
        }
        super;
    }

    EventHandler ATTACKED(attacker,damage)
    {
        myself::SetCurrentQuestID(615);
        if( myself::HaveMemo(attacker,615) && myself::GetMemoState(attacker,615) == 2 )
        {
            myself::SetMemoState(attacker,615,3);
            myself::CreateOnePrivateEx(1031685,"asefas_eye",0,0,myself::FloatToInt(myself.sm.x),myself::FloatToInt(myself.sm.y),myself::FloatToInt(myself.sm.z),0,0,0,0);
            if( myself::Skill_GetConsumeMP(1164033) < myself.sm.mp && myself::Skill_GetConsumeHP(1164033) < myself.sm.hp && myself::Skill_InReuseDelay(1164033) == 0 )
            {
                myself::AddUseSkillDesire(attacker,1164033,0,1,10000000);
            }
        }
        super;
    }

}

0
A
aorychkov

User

Участник

Posts: 57

На форуме с: 01/22/2008

Репутация: +41

Рейтинг: 0

· 07/02/2008, 05:28 PM

i4 = gg::Rand(1000);
if( i4 < 500 )

0
H
humark

User

Новичок

Posts: 22

На форуме с: 02/01/2008

Репутация: +1

Рейтинг: 0

· 07/02/2008, 05:42 PM

А на что его нужно изменить? И какие примерно соотношения?

0
A
aorychkov

User

Участник

Posts: 57

На форуме с: 01/22/2008

Репутация: +41

Рейтинг: 0

· 07/02/2008, 06:14 PM

humark: А на что его нужно изменить? И какие примерно соотношения?


i4 = gg::Rand(1000);
присвоить переменной i4 случайное число в интервале 0 - 999
if( i4 < 500 )
ну и дальше, если i4 меньше 500, выполнить действия...

дальше объяснять?

0
H
humark

User

Новичок

Posts: 22

На форуме с: 02/01/2008

Репутация: +1

Рейтинг: 0

· 07/02/2008, 07:28 PM

Т.е.
1000 - общее количество возможного получения предмета, чем меньше - тем больше шанс..
если выпадает шанс менее 500 - то получаю опр. вещь, или выполняется действие правильно, если нет - то нет...

0
A
aorychkov

User

Участник

Posts: 57

На форуме с: 01/22/2008

Репутация: +41

Рейтинг: 0

· 07/02/2008, 08:21 PM

humark: Т.е.
1000 - общее количество возможного получения предмета, чем меньше - тем больше шанс..
если выпадает шанс менее 500 - то получаю опр. вещь, или выполняется действие правильно, если нет - то нет...


у тебя в процедуре ясно прописано ведь.
если i4 меньше 500 дать итем - q_ketra_badge_grunt (id 7226).

в аи лучше не лезть, если слабо знаешь программирование.
компиллятор саурона, как впрочем и остальные, имеет много багов.
без знания ассемблера врядли пролучишь нормальный результат.

что касается этого моба, то шанс там стоит нормальный, даже для больших рейтов.
менять его не стоит.

0
A
alchy

User

Новичок

Posts: 10

На форуме с: 11/07/2007

Репутация: +4

Рейтинг: 0

· 07/04/2008, 07:21 AM

рендом всегда стремится к увеличению,

{
i4 = gg::Rand(1000); - рендом из массива значений равного 1000
if( i4 < 500 ) - если рендом меньше 500
{
myself::GiveItem1(target,7226,1); - даём итем. id:7226 колличеством 1
myself::SoundEffect(target,"ItemSound.quest_itemget"); - выдаём звуковой эффект получения квестового итема
}
}

всё очень просто если начать разбираться в коде и понимать его.

0
H
humark

User

Новичок

Posts: 22

На форуме с: 02/01/2008

Репутация: +1

Рейтинг: 0

· 07/04/2008, 08:28 AM

Тут всё понятно) А вот в компилированном коде, как изменить количество выпадаемых предметов? Вот тут например 1 падает, как в АИ и где изменить на 3 скажем?
пс. У кого есть норм компилятор, мой пишет Error parsing file skill,item,manual =(, качал с ПП

0
A
aorychkov

User

Участник

Posts: 57

На форуме с: 01/22/2008

Репутация: +41

Рейтинг: 0

· 07/04/2008, 09:03 AM

humark: Тут всё понятно) А вот в компилированном коде, как изменить количество выпадаемых предметов? Вот тут например 1 падает, как в АИ и где изменить на 3 скажем?
пс. У кого есть норм компилятор, мой пишет Error parsing file skill,item,manual =(, качал с ПП


либо кодировка файлов skill_pch.txt, item_pch.txt, manual_pch.txt не та, должна быть ANSI, либо этих файлов у тебя нет вообще.

я так понял, декомпилировал в nasc ты сам?
возьми исходный код в ассемблере и по комментариям сравни с nasc.
найти функции GiveItem1 и Rand труда не составит.
с параметрами тоже разберешься...

0
H
humark

User

Новичок

Posts: 22

На форуме с: 02/01/2008

Репутация: +1

Рейтинг: 0

· 07/04/2008, 10:02 AM

Спасибо в АИ всё поправил =)

0
H
humark

User

Новичок

Posts: 22

На форуме с: 02/01/2008

Репутация: +1

Рейтинг: 0

· 07/17/2008, 01:20 PM

Вот опять проблема)
Есть код:

Код
case 2:
                    myself->SetCurrentQuestID(606);
                    target = code_info->RandomSelectOne();
                    if( target->() == 0 && myself->DistFromMe(target) <= 1500 )
                    {
                        if( 1 == 1 )
                        {
                            i4 = gg->Rand(1000);
                            if( i4 < 500 && 500 != 0 )
                            {
                                if( 1 != 0 && 1 == 1 )
                                {
                                    myself->GiveItem1(target,7233,1);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself->GiveItem1(target,0,0);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself->GiveItem1(target,0,0);
                                }
                                myself->SoundEffect(target,"ItemSound.quest_itemget");
                            }
                            else if( i4 < ( 500 + 0 ) && 0 != 0 )
                            {
                                if( 0 != 0 && 1 == 1 )
                                {
                                    myself->GiveItem1(target,7233,0);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself->GiveItem1(target,0,0);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself->GiveItem1(target,0,0);
                                }
                                myself->SoundEffect(target,"ItemSound.quest_itemget");
                            }
                            else if( i4 < ( ( 500 + 0 ) + 0 ) && 0 != 0 )
                            {
                                if( 0 != 0 && 1 == 1 )
                                {
                                    myself->GiveItem1(target,7233,0);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself->GiveItem1(target,0,0);
                                }
                                if( 0 != 0 && 0 == 1 )
                                {
                                    myself->GiveItem1(target,0,0);
                                }
                                myself->SoundEffect(target,"ItemSound.quest_itemget");
                            }
                        }
                    }
                    break;


В нем падает итем 7233, как сделать шанс равный 100%?, т.е. чтобы падало с каждого моба, что и на что поменять нужно? Заранее спс..

0
Topic is closed for replies