Декомпилятор AI (C# source) - MMOCom

Если я не ошибаюсь в виде псевдокода.
Код:
class 0 ai_boss06_baium_stone : default_npc
parameter_define_begin
    int GM_ID 2
parameter_define_end
handler 12 11    //  CREATED
    variable_begin
        "reply"
        "i0"
        "myself"
        "_choiceN"
        "_code"
        "_from_choice"
    variable_end

    push_event    //  myself
    push_const 784            //myself
    add
    fetch_i            //i_ai0
    push_const 1128            //i_ai0
    add
    push_reg_sp
    fetch_i            //expr =
    push_const 0            //unary->INTEGER_CONST
    assign
    shift_sp -1
handler_end
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
ознакомился, для примера был выбран самый "потяжелее" AI xD чтобы как-то оправдывать бесполезность остальной массы файлов?
В нем описаны элементарные вещи и общие принципы, которые давно известны, а также указатели на информацию, которая не имеет конечных понятных значений.

например таймеры пробуждения/слипа и т.п.
int TIMER_INTRO_STANBY = 2001;
int TIMER_IDLE_COMBAT = 2002;
int TIMER_CHECK_DMG_SOURCE = 2003;
int TIMER_CHECK_POS_RESET = 9989;

что тут удивительного по скилам? использования скилов взависимости от кол-ва хп босса?
else if(myself.sm.hp > ((myself.sm.max_hp * 1.000000) / 4.000000))
{
if(gg.Rand(100) < 10)
{
myself.AddUseSkillDesire(c2, @s_thunderbolt, 0, 1, 10000);
}
 
Также если мало доказательств "Гуру", который помогает корейцам писать скрипты и ему не нужен офф источник...

Вот скрипт 1 стадии фреи.
Код:
class ai_icequeen_freya_1st : default_npc
{
parameter:
    float    Attack_DecayRatio = 6.600000;
    float    UseSkill_DecayRatio = 66000.000000;
    float    Attack_BoostValue = 300.000000;
    float    UseSkill_BoostValue = 100000.000000;
    int    Eternal_Blizzard = 411172865;
    int    Eternal_Blizzard_Hard = 411238401;
    int    Ice_Ball = 411435009;
    int    Ice_Ball_Prob = 3333;
    int    Summon_Elemental = 411369473;
    int    Summon_Elemental_Prob = 800;
    int    Self_Nova = 411500545;
    int    Self_Nova_Prob = 1500;
    int    Death_Clack = 411566081;
    int    Death_Clack_Prob = 500;
    int    Death_Clack_Count = 2;
    int    Death_Clack_Count_Hard = 3;
    int    Freya_Anger = 411893761;
    int    ChangeWeapon = 15471;
    int    TIMER_randomize_desire = 2314101;
    int    TIMER_battle_check = 2314102;
    int    TIMER_eternal_blizzard = 2314103;
    int    TIMER_phase1_failed = 2314104;
    int    TIMER_start_moving = 2314105;
    int    TIMER_use_freya_buff = 2314106;
    int    TIMER_enable_death_clack = 2314107;
    int    TIMER_check_evade_speech = 2314108;
    int    TIMER_freya_voice_normal = 2314109;
    int    is_hard_mode = 0;
    int    Dispel_Debuff = 1;
    int    debug_mode = 0;
    string    MAKER_summoner = "schuttgart29_2314_05m1";
    string    MAKER_controller = "schuttgart29_2314_01m1";
    string    MAKER_ice_knight = "schuttgart29_2314_03m1";

handler:
EventHandler
    CREATED(maker0, i0)
    {
        super;
        if(is_hard_mode == 1)
        {
            if(myself.Skill_GetConsumeMP(Freya_Anger) < myself.sm.mp && myself.Skill_GetConsumeHP(Freya_Anger) < myself.sm.hp && myself.Skill_InReuseDelay(Freya_Anger) == 0)
            {
                myself.AddUseSkillDesire(myself.sm, Freya_Anger, 1, 1, 1000000);
            }
            myself.AddTimerEx(TIMER_start_moving, 3000);
        }
        else
        {
            myself.ChangeMoveType(0);
        }
        myself.SetMaxHateListSize(50);
        myself.i_ai0 = 0;
        myself.i_ai1 = 0;
        myself.i_ai2 = 0;
        myself.i_ai3 = 0;
        myself.i_ai4 = 0;
        myself.i_ai5 = 0;
        myself.i_ai6 = 0;
        myself.i_ai7 = 0;
        myself.i_ai8 = 0;
        i0 = myself.InstantZone_GetId();
        maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_ice_knight);
        if(gg.IsNull(maker0) == 0)
        {
            gg.SendMakerScriptEvent(maker0, 23140013, gg.GetIndexFromCreature(myself.sm), 0);
        }
    }

EventHandler
    NO_DESIRE()
    {
        if(myself.i_ai1 == 1)
        {
            if((myself.GetCurrentTick() - myself.i_ai2) > 300)
            {
                if(debug_mode)
                {
                    myself.Shout("전투 시작 후 긴 시간 공격받지 않아 phase1 실패처리");
                }
                myself.i_ai1 = 2;
                myself.AddTimerEx(TIMER_phase1_failed, 1);
            }
        }
        else if(myself.i_ai1 == 3)
        {
        }
    }

EventHandler
    DESIRE_MANIPULATION(speller, desire)
    {
        myself.MakeAttackEvent(speller, desire, 0);
    }

EventHandler
    ATTACKED(attacker, damage, c0, i0, i1, h0, maker0)
    {
        if(myself.sm.hp < (myself.sm.max_hp * 0.020000))
        {
            if(myself.i_ai6 == 0)
            {
                myself.i_ai6 = 1;
                if(myself.i_ai1 != 2)
                {
                    if(debug_mode)
                    {
                        myself.Shout("my_dying. phase1 성공.");
                    }
                    i0 = myself.InstantZone_GetId();
                    maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
                    if(gg.IsNull(maker0) == 0)
                    {
                        gg.SendMakerScriptEvent(maker0, 23140016, 1, 0);
                    }
                    myself.i_ai1 = 3;
                }
                myself.SetVisible(0);
                myself.StopMove();
                myself.RemoveAllDesire();
                myself.Despawn();
            }
        }
        else if(attacker.is_pc == 1 || myself.IsInCategory(12, attacker.class_id) == 1 || myself.IsInCategory(123, attacker.class_id) == 1)
        {
            myself.AddHateInfo(attacker, gg.FloatToInt(damage), 0, 1, 1);
            if(myself.i_ai1 == 0 && myself.i_ai3 == 0)
            {
                if(debug_mode)
                {
                    myself.Shout("first_attack");
                }
                myself.AddTimerEx(TIMER_start_moving, 100);
                myself.i_ai1 = 1;
                myself.i_ai3 = 1;
                myself.AddTimerEx(TIMER_randomize_desire, (30 * 1000));
                if(is_hard_mode == 1)
                {
                    myself.AddTimerEx(TIMER_use_freya_buff, (15 * 1000));
                }
                i0 = myself.InstantZone_GetId();
                maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
                if(gg.IsNull(maker0) == 0)
                {
                    gg.SendMakerScriptEvent(maker0, 23140014, 0, 0);
                }
                myself.BroadcastScriptEvent(23140010, gg.GetIndexFromCreature(attacker), 4000);
            }
            if(myself.i_ai5 == 0)
            {
                myself.i_ai5 = myself.GetCurrentTick();
            }
            myself.i_ai2 = myself.GetCurrentTick();
            if(gg.Rand(100) < 50)
            {
                myself.BroadcastScriptEvent(23140010, gg.GetIndexFromCreature(attacker), 4000);
            }
            if(attacker.yongma_type == 1 && gg.GetAbnormalLevel(attacker, myself.Skill_GetAbnormalType(@s_anti_strider_slow)) <= 0)
            {
                if(myself.Skill_GetConsumeMP(@s_anti_strider_slow) < myself.sm.mp && myself.Skill_GetConsumeHP(@s_anti_strider_slow) < myself.sm.hp && myself.Skill_InReuseDelay(@s_anti_strider_slow) == 0)
                {
                    myself.AddUseSkillDesire(attacker, @s_anti_strider_slow, 0, 1, 1000000);
                }
            }
            if(myself.i_ai0 == 0)
            {
                if(Ice_Ball != 458752001)
                {
                    if(gg.Rand(10000) < Ice_Ball_Prob)
                    {
                        if(myself.DistFromMe(attacker) <= 800)
                        {
                            if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
                            {
                                myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 0, 1000000);
                            }
                        }
                    }
                }
                if(Summon_Elemental != 458752001)
                {
                    if(gg.Rand(10000) < Summon_Elemental_Prob)
                    {
                        if(myself.DistFromMe(attacker) <= 800)
                        {
                            if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
                            {
                                myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 0, 1000000);
                            }
                            myself.i_ai4 = gg.GetIndexFromCreature(attacker);
                        }
                    }
                }
                if(myself.DistFromMe(attacker) < 350 || (myself.GetCurrentTick() - myself.i_ai5) > (60 * 3))
                {
                    if(myself.i_ai0 == 0)
                    {
                        myself.i_ai0 = 1;
                        myself.c_ai0 = attacker;
                        myself.AddTimerEx(TIMER_start_moving, 1);
                    }
                }
            }
            else if(myself.i_ai0 == 1)
            {
                myself.AddAttackDesire(attacker, 1, damage);
                if(Ice_Ball != 458752001)
                {
                    if(gg.Rand(10000) < Ice_Ball_Prob)
                    {
                        if(myself.IsNullCreature(myself.top_desire_target) == 0)
                        {
                            if(gg.Rand(10000) < 5000)
                            {
                                if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
                                {
                                    myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 1, 1000000);
                                }
                            }
                            else if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
                            {
                                myself.AddUseSkillDesire(myself.top_desire_target, Ice_Ball, 0, 1, 1000000);
                            }
                        }
                    }
                }
                if(Summon_Elemental != 458752001)
                {
                    if(gg.Rand(10000) < Summon_Elemental_Prob)
                    {
                        if(myself.IsNullCreature(myself.top_desire_target) == 0)
                        {
                            if(gg.Rand(10000) < 5000)
                            {
                                if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
                                {
                                    myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 1, 1000000);
                                }
                                myself.i_ai4 = gg.GetIndexFromCreature(attacker);
                            }
                            else if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
                            {
                                myself.AddUseSkillDesire(myself.top_desire_target, Summon_Elemental, 0, 1, 1000000);
                            }
                            myself.i_ai4 = gg.GetIndexFromCreature(myself.top_desire_target);
                        }
                    }
                }
                if(Self_Nova != 458752001)
                {
                    if(gg.Rand(10000) < Self_Nova_Prob)
                    {
                        if(myself.Skill_GetConsumeMP(Self_Nova) < myself.sm.mp && myself.Skill_GetConsumeHP(Self_Nova) < myself.sm.hp && myself.Skill_InReuseDelay(Self_Nova) == 0)
                        {
                            myself.AddUseSkillDesire(myself.sm, Self_Nova, 0, 1, 1000000);
                        }
                    }
                }
                if(Death_Clack != 458752001)
                {
                    if(gg.Rand(10000) < Death_Clack_Prob)
                    {
                        if(myself.i_ai7 == 0)
                        {
                            myself.i_ai7 = 1;
                            myself.AddTimerEx(TIMER_enable_death_clack, (15 * 1000));
                            h0 = myself.GetMaxHateInfo(0);
                            if(myself.IsNullCreature(h0.x) == 0)
                            {
                                if(debug_mode)
                                {
                                    myself.Say("죽음의 선고. " + h0.x.name);
                                }
                                myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
                            }
                            if(is_hard_mode != 1)
                            {
                                i0 = Death_Clack_Count;
                            }
                            else
                            {
                                i0 = Death_Clack_Count_Hard;
                            }
                            select(i0)
                            {
                                case 2:
                                    if(myself.GetHateInfoCount() >= 2)
                                    {
                                        (gg.Rand(9) + 1) = 0.GetNthHateInfo()
                                        if(myself.IsNullHateInfo(h0) == 0)
                                        {
                                            if(myself.IsNullCreature(h0.x) == 0)
                                            {
                                                if(debug_mode)
                                                {
                                                    myself.Say("죽음의 선고. " + h0.x.name);
                                                }
                                                myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
                                            }
                                        }
                                    }
                                    break;
                                case 3:
                                    if(myself.GetHateInfoCount() >= 3)
                                    {
                                        (gg.Rand(4) + 1) = 0.GetNthHateInfo()
                                        if(myself.IsNullHateInfo(h0) == 0)
                                        {
                                            if(myself.IsNullCreature(h0.x) == 0)
                                            {
                                                if(debug_mode)
                                                {
                                                    myself.Say("죽음의 선고. " + h0.x.name);
                                                }
                                                myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
                                            }
                                        }
                                        (gg.Rand((myself.GetHateInfoCount() - 1)) + 1) = 0.GetNthHateInfo()
                                        if(myself.IsNullHateInfo(h0) == 0)
                                        {
                                            if(myself.IsNullCreature(h0.x) == 0)
                                            {
                                                if(debug_mode)
                                                {
                                                    myself.Say("죽음의 선고. " + h0.x.name);
                                                }
                                                myself.AddUseSkillDesire(h0.x, Death_Clack, 0, 1, 10000000);
                                            }
                                        }
                                    }
                                    break;
                            }
                        }
                    }
                }
            }
        }
    }

EventHandler
    USE_SKILL_FINISHED(target, skill_name_id, i0, maker0)
    {
        if(skill_name_id == Summon_Elemental)
        {
            i0 = myself.InstantZone_GetId();
            maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_summoner);
            if(gg.IsNull(maker0) == 0)
            {
                if(myself.IsNullCreature(target) == 0)
                {
                    gg.SendMakerScriptEvent(maker0, 23140012, gg.GetIndexFromCreature(target), gg.GetIndexFromCreature(target));
                }
            }
        }
        else if(skill_name_id == Eternal_Blizzard || skill_name_id == Eternal_Blizzard_Hard)
        {
            if(debug_mode)
            {
                myself.Shout("Use Skill Finished - Eternal Blizzard");
            }
            myself.RemoveAbsoluteDesire();
            if(myself.i_ai8 == 0)
            {
                myself.AddTimerEx(TIMER_check_evade_speech, (10 * 1000));
            }
            else if(gg.Rand(2) == 1)
            {
                if(debug_mode)
                {
                    myself.Say("일반 대사 timer on");
                }
                myself.AddTimerEx(TIMER_freya_voice_normal, ((gg.Rand(15) + 10) * 1000));
            }
        }
    }

EventHandler
    CLAN_ATTACKED(attacker, victim, damage)
    {
        if(attacker.is_pc == 1 || myself.IsInCategory(12, attacker.class_id) == 1 || myself.IsInCategory(123, attacker.class_id) == 1)
        {
            myself.AddHateInfo(attacker, gg.FloatToInt(damage), 0, 1, 1);
            if(myself.i_ai0 == 0)
            {
                if(gg.Rand(10000) < 500)
                {
                    if(myself.DistFromMe(attacker) <= 800)
                    {
                        if(Ice_Ball != 458752001)
                        {
                            if(myself.Skill_GetConsumeMP(Ice_Ball) < myself.sm.mp && myself.Skill_GetConsumeHP(Ice_Ball) < myself.sm.hp && myself.Skill_InReuseDelay(Ice_Ball) == 0)
                            {
                                myself.AddUseSkillDesire(attacker, Ice_Ball, 0, 0, 1000000);
                            }
                        }
                    }
                }
                if(gg.Rand(10000) < 500)
                {
                    if(myself.DistFromMe(attacker) <= 800)
                    {
                        if(Summon_Elemental != 458752001)
                        {
                            if(myself.Skill_GetConsumeMP(Summon_Elemental) < myself.sm.mp && myself.Skill_GetConsumeHP(Summon_Elemental) < myself.sm.hp && myself.Skill_InReuseDelay(Summon_Elemental) == 0)
                            {
                                myself.AddUseSkillDesire(attacker, Summon_Elemental, 0, 1, 1000000);
                            }
                            myself.i_ai4 = gg.GetIndexFromCreature(attacker);
                        }
                    }
                }
            }
        }
    }

EventHandler
    SEE_CREATURE(creature)
    {
        if(myself.i_ai0 == 1)
        {
            if(creature.is_pc == 0 && myself.IsInCategory(12, creature.class_id) == 0)
            {
                return;
            }
        }
        if(creature.is_pc == 1 || myself.IsInCategory(12, creature.class_id) == 1 || myself.IsInCategory(123, creature.class_id) == 1)
        {
            myself.AddHateInfo(creature, 100, 0, 1, 1);
            myself.MakeAttackEvent(creature, 200, 0);
        }
    }

EventHandler
    SEE_SPELL(speller)
    {
        if(speller.is_pc == 1 || myself.IsInCategory(12, speller.class_id) == 1 || myself.IsInCategory(123, speller.class_id))
        {
            myself.AddHateInfo(speller, 50, 0, 1, 1);
        }
    }

EventHandler
    SCRIPT_EVENT(script_event_arg1, script_event_arg2, i0, c0, h0)
    {
        if(script_event_arg1 == 23140044)
        {
            myself.AddTimerEx(TIMER_start_moving, 1);
        }
        else if(script_event_arg1 == 23140046)
        {
            c0 = gg.GetCreatureFromIndex(script_event_arg2);
            if(myself.IsNullCreature(c0) == 0)
            {
                h0 = myself.GetMaxHateInfo(0);
                if(myself.IsNullHateInfo(h0) == 0)
                {
                    if(myself.IsNullCreature(h0.x) == 0)
                    {
                        gg.SendScriptEvent(c0, 23140047, gg.GetIndexFromCreature(h0.x));
                    }
                }
            }
        }
        else if(script_event_arg1 == 23140020)
        {
            myself.Despawn();
        }
    }

EventHandler
    TIMER_FIRED_EX(timer_id, i0, i1, i2, maker0, h0)
    {
        super;
        if(timer_id == TIMER_randomize_desire)
        {
            if(gg.Rand(2) == 1)
            {
                myself.RandomizeAttackDesire();
            }
            myself.AddTimerEx(TIMER_randomize_desire, (30 * 1000));
        }
        if(timer_id == TIMER_eternal_blizzard)
        {
            i0 = myself.InstantZone_GetId();
            maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
            if(gg.IsNull(maker0) == 0)
            {
                gg.SendMakerScriptEvent(maker0, 23140070, 0, 0);
                gg.SendMakerScriptEvent(maker0, 23140067, 0, 0);
            }
            if(is_hard_mode == 1)
            {
                if(debug_mode)
                {
                    myself.Say("하드모드 타이머");
                }
                myself.AddUseSkillDesire(myself.sm, Eternal_Blizzard_Hard, 0, 1, -1);
                myself.AddTimerEx(TIMER_eternal_blizzard, ((gg.Rand(5) + 40) * 1000));
            }
            else if(debug_mode)
            {
                myself.Say("일반모드 타이머");
            }
            myself.AddUseSkillDesire(myself.sm, Eternal_Blizzard, 0, 1, -1);
            myself.AddTimerEx(TIMER_eternal_blizzard, ((gg.Rand(5) + 55) * 1000));
        }
        if(timer_id == TIMER_phase1_failed)
        {
            if(debug_mode)
            {
                myself.Shout("phase1 실패.");
            }
            i0 = myself.InstantZone_GetId();
            maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
            if(gg.IsNull(maker0) == 0)
            {
                gg.SendMakerScriptEvent(maker0, 23140016, 2, 0);
            }
            myself.sm.absolute_defence = 1;
            myself.sm.no_attack_damage = 1;
        }
        if(timer_id == TIMER_start_moving)
        {
            if(myself.i_ai0 == 0)
            {
                myself.RemoveAllDesire();
                if(myself.IsNullCreature(myself.c_ai0) == 0)
                {
                    myself.AddAttackDesire(myself.c_ai0, 1, 1000);
                }
                myself.AddMoveToDesire(114730, -114805, -11200, 50);
                myself.i_ai0 = 1;
                myself.AddTimerEx(TIMER_eternal_blizzard, (60 * 1000));
                gg.BroadcastOnScreenMsgStr(myself.sm, 4000, 5, 1, 0, 0, 0, 1, 5000, 0, gg.MakeFString(1801097, "", "", "", "", ""));
            }
        }
        if(timer_id == TIMER_use_freya_buff)
        {
            myself.BroadcastScriptEvent(23140062, 0, 1000);
            myself.AddTimerEx(TIMER_use_freya_buff, (15 * 1000));
        }
        if(timer_id == TIMER_enable_death_clack)
        {
            myself.i_ai7 = 0;
        }
        if(timer_id == TIMER_check_evade_speech)
        {
            if(myself.i_ai8 == 0)
            {
                h0 = myself.GetMaxHateInfo(0);
                if(myself.IsNullHateInfo(h0) == 0)
                {
                    if(myself.IsNullCreature(h0.x) == 0)
                    {
                        if(gg.GetAbnormalLevel(h0.x, myself.Skill_GetAbnormalType(@s_freya_pillar_of_frozen1)) != 2)
                        {
                            if(debug_mode)
                            {
                                myself.Say("이터널 블리자드 회피!");
                            }
                            myself.i_ai8 = 1;
                            i0 = myself.InstantZone_GetId();
                            maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
                            if(gg.IsNull(maker0) == 0)
                            {
                                gg.SendMakerScriptEvent(maker0, 23140066, 0, 0);
                            }
                        }
                        else if(debug_mode)
                        {
                            myself.Say("이터널 블리자드 강타!");
                        }
                    }
                }
            }
        }
        if(timer_id == TIMER_freya_voice_normal)
        {
            i0 = myself.InstantZone_GetId();
            maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
            if(gg.IsNull(maker0) == 0)
            {
                gg.SendMakerScriptEvent(maker0, 23140068, 0, 0);
            }
        }
    }

EventHandler
    MY_DYING(i0, i1, c0, c1, maker0, i2, c2)
    {
        if(myself.i_ai1 != 2)
        {
            if(debug_mode)
            {
                myself.Shout("my_dying. phase1 성공.");
            }
            i0 = myself.InstantZone_GetId();
            maker0 = gg.InstantZone_GetNpcMaker(i0, MAKER_controller);
            if(gg.IsNull(maker0) == 0)
            {
                gg.SendMakerScriptEvent(maker0, 23140016, 1, 0);
            }
            myself.i_ai1 = 3;
        }
    }

EventHandler
    DEBUG_AI(creature, reply)
    {
        if(reply == 1)
        {
            if(debug_mode)
            {
                myself.Say("1 : 패배");
                myself.AddTimerEx(TIMER_phase1_failed, 1000);
            }
        }
    }

}

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

П.С. Уважаемый, вы же выпилились с данного форума... Или вам просто деваться уже некуда, с вашим характером, вас уже везде забанили...
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Давай лучше расмотрим полезность остальных 95% файлов
Весомость твоих аргументов стала таять на глазах, и чтобы её как-то компенсировать в ход пошли примитивные саркастические уколы?)
А давай посмотрим также на остальные 95% файлов и определим их степень полезности, которые имеют примерны вид:

//***********************************************************************
//*| SauDecompiler | Ported to С# CjlaBuK, Keeper | Design Rage | ©2012*
//***********************************************************************


class a_o_g_fort_doorman_a : fortress_doorkeeper
{
}


Мне перед тобой не нужно оправдаваться нон, то что у меня - мне известно, в твоей колхозной оценке это не нуждается. Д
 

Вам видимо не известно что такое наследование.... Корейцы такой народ что каждому НПЦ делают свой АИ, пусть в нем не будет смысловой нагрузки, вся механика данного НПЦ описана в классе fortress_doorkeeper или его родителе.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Да мне известно и про родителей и про бабушек, и про наследство, но их тут нет в твоем паке. А следовательно никакой информации из этого не извлеч. А то что тут видно - уже давно известно и давно реализовано. Отсюда вывод - полезность данной информации чуть меньше чем 0.
 
Видимо вы слепой...
Код:
class fortress_doorkeeper : doorkeeper
{
parameter:
    string    DoorName3 = "";
    string    DoorName4 = "";
    int    dominion_id = 81;

handler:
EventHandler
    TALKED(talker)
    {
        if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
        {
            if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
            {
                myself.ShowPage(talker, fnUnderSiege);
            }
            else
            {
                myself.ShowPage(talker, fnHi);
            }
        }
        else
        {
            myself.ShowPage(talker, fnNotMyLord);
        }
    }

EventHandler
    MENU_SELECTED(talker, ask, reply, fhtml0)
    {
        if(ask == -201)
        {
            if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
            {
                if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
                {
                    myself.ShowPage(talker, fnUnderSiege);
                }
                else
                {
                    select(reply)
                    {
                        case 1:
                            gg.Castle_GateOpenClose2(DoorName1, 0);
                            gg.Castle_GateOpenClose2(DoorName2, 0);
                            if(myself.IsNullString(DoorName3) == 0)
                            {
                                gg.Castle_GateOpenClose2(DoorName3, 0);
                            }
                            if(myself.IsNullString(DoorName4) == 0)
                            {
                                gg.Castle_GateOpenClose2(DoorName4, 0);
                            }
                            break;
                        case 2:
                            gg.Castle_GateOpenClose2(DoorName1, 1);
                            gg.Castle_GateOpenClose2(DoorName2, 1);
                            if(myself.IsNullString(DoorName3) == 0)
                            {
                                gg.Castle_GateOpenClose2(DoorName3, 1);
                            }
                            if(myself.IsNullString(DoorName4) == 0)
                            {
                                gg.Castle_GateOpenClose2(DoorName4, 1);
                            }
                            break;
                    }
                }
            }
            else
            {
                myself.ShowPage(talker, fnNotMyLord);
            }
        }
        if(ask == -202)
        {
            if(myself.IsMyLord(talker) || myself.Castle_GetPledgeState(talker) == 2 || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
            {
                select(reply)
                {
                    case 1:
                        myself.InstantTeleport(talker, pos_x01, pos_y01, pos_z01);
                        break;
                    case 2:
                        myself.InstantTeleport(talker, pos_x02, pos_y02, pos_z02);
                        break;
                }
            }
            else
            {
                myself.ShowPage(talker, fnNotMyLord);
            }
        }
    }

}
Код:
class doorkeeper : citizen
{
parameter:
    string    DoorName1 = "";
    string    DoorName2 = "";
    string    fnHi = "gludio_outter_doorman001.htm";
    string    fnNotMyLord = "gludio_outter_doorman002.htm";
    string    fnUnderSiege = "gludio_outter_doorman003.htm";
    int    pos_x01 = 1;
    int    pos_y01 = 1;
    int    pos_z01 = 1;
    int    pos_x02 = 1;
    int    pos_y02 = 1;
    int    pos_z02 = 1;
    int    dominion_id = 81;

handler:
EventHandler
    TALKED(talker)
    {
        if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
        {
            if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
            {
                if(myself.IsMyLord(talker) || myself.Castle_GetPledgeState(talker) == 2 || (myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
                {
                    myself.ShowPage(talker, fnHi);
                }
                else
                {
                    myself.ShowPage(talker, fnUnderSiege);
                }
            }
            else
            {
                myself.ShowPage(talker, fnHi);
            }
        }
        else
        {
            myself.ShowPage(talker, fnNotMyLord);
        }
    }

EventHandler
    MENU_SELECTED(talker, ask, reply, fhtml0)
    {
        if(ask == -201)
        {
            if(myself.IsMyLord(talker) || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
            {
                if(myself.Castle_IsUnderSiege() || gg.GetDominionWarState(dominion_id) == 5)
                {
                    myself.ShowPage(talker, fnUnderSiege);
                }
                else
                {
                    select(reply)
                    {
                        case 1:
                            gg.Castle_GateOpenClose2(DoorName1, 0);
                            gg.Castle_GateOpenClose2(DoorName2, 0);
                            break;
                        case 2:
                            gg.Castle_GateOpenClose2(DoorName1, 1);
                            gg.Castle_GateOpenClose2(DoorName2, 1);
                            break;
                    }
                }
            }
            else
            {
                myself.ShowPage(talker, fnNotMyLord);
            }
        }
        if(ask == -202)
        {
            if(myself.IsMyLord(talker) || myself.Castle_GetPledgeState(talker) == 2 || (myself.HavePledgePower(talker, 16) && myself.Castle_GetPledgeId() == talker.pledge_id && talker.pledge_id != 0))
            {
                select(reply)
                {
                    case 1:
                        myself.InstantTeleport(talker, pos_x01, pos_y01, pos_z01);
                        break;
                    case 2:
                        myself.InstantTeleport(talker, pos_x02, pos_y02, pos_z02);
                        break;
                }
            }
            else
            {
                myself.ShowPage(talker, fnNotMyLord);
            }
        }
    }

}
Код:
class citizen : default_npc
{
parameter:
    string    fnHi = "chi.htm";
    string    fnFeudInfo = "defaultfeudinfo.htm";
    string    fnNoFeudInfo = "nofeudinfo.htm";
    string    fnBracketL = "[";
    string    fnBracketR = "]";
    string    fnFlagMan = "flagman.htm";
    int    MoveAroundSocial = 0;
    int    MoveAroundSocial1 = 0;
    string    ai_type = "pet_around_pet_manager";
    int    HavePet = 0;
    int    silhouette = 1020130;
    int    FriendShip1 = 0;
    int    FriendShip2 = 0;
    int    FriendShip3 = 0;
    int    FriendShip4 = 0;
    int    FriendShip5 = 0;
    string    fnNoFriend = "citizen_html";
    int    NoFnHi = 0;

handler:
EventHandler
    TALKED(talker)
    {
        if(NoFnHi == 1)
        {
            return;
        }
        if(FriendShip1 == 0)
        {
            myself.ShowPage(talker, fnHi);
        }
        else if(gg.OwnItemCount(talker, @gludio_feud_flag) > 0 || gg.OwnItemCount(talker, @dion_feud_flag) > 0 || gg.OwnItemCount(talker, @giran_feud_flag) > 0 || gg.OwnItemCount(talker, @oren_feud_flag) > 0 || gg.OwnItemCount(talker, @aden_feud_flag) > 0 || gg.OwnItemCount(talker, @innadrille_feud_flag) > 0 || gg.OwnItemCount(talker, @godad_feud_flag) > 0 || gg.OwnItemCount(talker, @rune_feud_flag) > 0 || gg.OwnItemCount(talker, @schuttgart_feud_flag) > 0)
        {
            myself.ShowPage(talker, fnFlagMan);
        }
        else if(gg.OwnItemCount(talker, FriendShip1) > 0 || gg.OwnItemCount(talker, FriendShip2) > 0 || gg.OwnItemCount(talker, FriendShip3) > 0 || gg.OwnItemCount(talker, FriendShip4) > 0 || gg.OwnItemCount(talker, FriendShip5) > 0)
        {
            myself.ShowPage(talker, fnHi);
        }
        else
        {
            myself.ShowPage(talker, fnNoFriend);
        }
    }

EventHandler
    CREATED()
    {
        if(MoveAroundSocial > 0 || MoveAroundSocial1 > 0)
        {
            myself.AddTimerEx(1671, 10000);
        }
        if(HavePet == 1)
        {
        }
        super;
    }

EventHandler
    TIMER_FIRED_EX(timer_id)
    {
        if(timer_id == 1671)
        {
            if(myself.sm.hp > (myself.sm.max_hp * 0.400000) && myself.sm.alive != 0 && myself.p_state != 3)
            {
                if(MoveAroundSocial > 0 || MoveAroundSocial1 > 0)
                {
                    if(MoveAroundSocial > 0 && gg.Rand(100) < 40)
                    {
                        myself.AddEffectActionDesire(myself.sm, 3, ((MoveAroundSocial * 1000) / 30), 50);
                    }
                    else if(MoveAroundSocial1 > 0 && gg.Rand(100) < 40)
                    {
                        myself.AddEffectActionDesire(myself.sm, 2, ((MoveAroundSocial1 * 1000) / 30), 50);
                    }
                }
            }
            myself.AddTimerEx(1671, 10000);
        }
        super;
    }

EventHandler
    MENU_SELECTED(talker, ask, reply, fhtml0)
    {
        if(ask == -1000)
        {
            select(reply)
            {
                case 0:
                    myself.ShowPage(talker, fnHi);
                    break;
                case 1:
                    if(myself.sm.residence_id > 0)
                    {
                        if(myself.Castle_GetPledgeId())
                        {
                            myself.FHTML_SetFileName(fhtml0, fnFeudInfo);
                            myself.FHTML_SetStr(fhtml0, "my_pledge_name", myself.Castle_GetPledgeName());
                            myself.FHTML_SetStr(fhtml0, "my_owner_name", myself.Castle_GetOwnerName());
                            myself.FHTML_SetInt(fhtml0, "current_tax_rate", myself.Residence_GetTaxRateCurrent());
                        }
                        else
                        {
                            myself.FHTML_SetFileName(fhtml0, fnNoFeudInfo);
                        }
                        if(myself.sm.residence_id < 7)
                        {
                            myself.FHTML_SetStr(fhtml0, "kingdom_name", gg.MakeFString(1001000, "", "", "", "", ""));
                        }
                        else
                        {
                            myself.FHTML_SetStr(fhtml0, "kingdom_name", gg.MakeFString(1001100, "", "", "", "", ""));
                        }
                        myself.FHTML_SetStr(fhtml0, "feud_name", gg.MakeFString((1001000 + myself.sm.residence_id), "", "", "", "", ""));
                        myself.ShowFHTML(talker, fhtml0);
                    }
                    break;
            }
        }
        else if(ask == -303)
        {
            if(reply == 579)
            {
                if(talker.level >= 40 && talker.level < 46)
                {
                    if(talker.race == 5)
                    {
                        myself.ShowMultisell(603, talker);
                    }
                    else
                    {
                        myself.ShowMultisell(reply, talker);
                    }
                }
            }
            else if(reply == 580)
            {
                if(talker.level >= 46 && talker.level < 52)
                {
                    if(talker.race == 5)
                    {
                        myself.ShowMultisell(604, talker);
                    }
                    else
                    {
                        myself.ShowMultisell(reply, talker);
                    }
                }
            }
            else if(reply == 581)
            {
                if(talker.level >= 52)
                {
                    if(talker.race == 5)
                    {
                        myself.ShowMultisell(605, talker);
                    }
                    else
                    {
                        myself.ShowMultisell(reply, talker);
                    }
                }
            }
            else
            {
                myself.ShowMultisell(reply, talker);
            }
        }
        else if(ask == -503)
        {
            if(reply == 100)
            {
                myself.ShowVariationMakeWindow(talker);
            }
            else if(reply == 200)
            {
                myself.ShowVariationCancelWindow(talker);
            }
        }
        else if(ask == -601)
        {
            if(reply == 0)
            {
                if(gg.OwnItemCount(talker, @welcome_l2_ticket_weapon) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_armor) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_etc) <= 0)
                {
                    myself.ShowPage(talker, "welcomeback003.htm");
                }
                else
                {
                    myself.ShowPage(talker, "welcomeback004.htm");
                }
            }
            else if(reply == 1)
            {
                if(gg.OwnItemCount(talker, @welcome_l2_ticket_weapon) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_armor) <= 0 && gg.OwnItemCount(talker, @welcome_l2_ticket_etc) <= 0)
                {
                    myself.ShowPage(talker, "welcome_lin2_cat002.htm");
                }
                else
                {
                    myself.ShowPage(talker, "welcome_lin2_cat004.htm");
                }
            }
            else if(reply == 2)
            {
                if(talker.level < 20)
                {
                    myself.ShowMultisell(583, talker);
                }
                else if(talker.level >= 20 && talker.level < 40)
                {
                    myself.ShowMultisell(584, talker);
                }
                else if(talker.level >= 40 && talker.level < 52)
                {
                    myself.ShowMultisell(585, talker);
                }
                else if(talker.level >= 52 && talker.level < 61)
                {
                    myself.ShowMultisell(586, talker);
                }
                else if(talker.level >= 61 && talker.level < 76)
                {
                    myself.ShowMultisell(587, talker);
                }
                else if(talker.level >= 76)
                {
                    myself.ShowMultisell(588, talker);
                }
            }
            else if(reply == 3)
            {
                if(talker.level < 20)
                {
                    myself.ShowMultisell(589, talker);
                }
                else if(talker.level >= 20 && talker.level < 40)
                {
                    myself.ShowMultisell(590, talker);
                }
                else if(talker.level >= 40 && talker.level < 52)
                {
                    myself.ShowMultisell(591, talker);
                }
                else if(talker.level >= 52 && talker.level < 61)
                {
                    myself.ShowMultisell(592, talker);
                }
                else if(talker.level >= 61 && talker.level < 76)
                {
                    myself.ShowMultisell(593, talker);
                }
                else if(talker.level >= 76)
                {
                    myself.ShowMultisell(594, talker);
                }
            }
            else if(reply == 4)
            {
                if(talker.level < 20)
                {
                    myself.ShowMultisell(595, talker);
                }
                else if(talker.level >= 20 && talker.level < 40)
                {
                    myself.ShowMultisell(596, talker);
                }
                else if(talker.level >= 40 && talker.level < 52)
                {
                    myself.ShowMultisell(597, talker);
                }
                else if(talker.level >= 52 && talker.level < 61)
                {
                    myself.ShowMultisell(598, talker);
                }
                else if(talker.level >= 61 && talker.level < 76)
                {
                    myself.ShowMultisell(601, talker);
                }
                else if(talker.level >= 76)
                {
                    myself.ShowMultisell(600, talker);
                }
            }
        }
    }

}
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
привязка к лорду, проверка осадного состояния, проверка прав на пользование, показ пары хтмлок и телепорт по координатом.
ну теперь заживем, как без этого обходились? ну и что - что это все сделано со временым лыжи 2008 года, ЗАТО ТЕПЕРЬПТСКАКНАОФЕ xD
в некоторых местах ДАЖИЛУЧШЕ.

Ты понимаешь что эта элементарщина давно есть везде?

showMultisell
showHtml
teleportPosition
xD

Примерный состав всего этого xD
Это давно известно, давно реализовано. Никакой ценности не представляет.

Меня умоляли вернуться, когда увидили что ты тут начал со своими ПТСами творить.
 
Последнее редактирование модератором:
Все с вами ясно, вы один из тех людей который кричат "У нас все по офу" хотя в глаза не видели ПТС скрипты... Я вам дал лишь пример того чего вы не нашли, а ценность не ценность "данного" кода не вам оценивать.

Я нечего с ними не творил, просто взял себе на заметку инфу. где можно глянуть что не нужно.

П.С. Вас не умоляли, просто вас не куда не приняли больше, вот и вернулись. Чувствую скоро и отсюда вас выпилят.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Ясно так ясно. Ты опубликовал для кого? - Для пользователей. Я пользователь, я оценил. Я с 2008 года в этой теме, и видел все что существует. То что ты мне показал файлы, их ценность не увиличивает, в них нет полезной информации, обо всем этом давно известно и все это давно реализовано.

Чувствую скоро и отсюда вас выпилят.
Ну выпилят и [А по щам?] с ним, я от этого никак не страдаю. А вот тот факт, что у многих это мечта - доставляет некое удовлетворение.
Возможно я социопат xD

У тебя же это мечта? Чтобы меня выпилили? Иначе мне не понятно, зачем ты в каждый свой пост стал вставлять это xD
 
Вы не думали что люди, которые это пилили в 2008, опирались на данные скрипты? И людям которые пилят всякие плюшки "аля конфиг\кб\тогл автоцп и тд" конечно нечего тут смотреть.

Возможно из-за того что я не проявляю симпатии к людям которые ставят себя выше всех... Если вам это не интересно, или вы не умеете нечего кроме запиливания ПВП плюх, то не означает что тут нет нечего полезного и некому это не интересно.
 
Последнее редактирование модератором:
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Конечно, мне об этом известно. Мы какой вопрос рассматриваем сейчас? Мы сейчас рассматриваем вопрос о "полезности" данных файлов.
Если в 2008 году на них опирались, то с чего вдруг их ценность как-то сейчас измениться? На данном этапе развития эмуляторов эти файлы НИКАКОЙ ценности не представляют, т.к. этот функционал давно реализован. И ценность эмулятора сейчас кокраз составляет дополнительный контент, гибкость настроек и обилие раличного кастомизирующего функционала.
 
Веселый тред)))
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Последнее редактирование модератором:
Этот функционал мог браться из скриптов ИТ, и не факт что в хрониках Фрея он не изменился... Так же есть инфа которой нет в Финале\ИТ.
Почему я должен ставить себя ниже тех, кого я выше? Я не садомазахист xD
А чем вы выше любого пользователя на этом форуме? Своим ЭГО?

Это про вас "Чем ниже человек душой,тем выше задирает нос. Он носом тянется туда, куда душою не дорос." ©Омар Хайям
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
А чем вы выше любого пользователя на этом форуме? Своим ЭГО?
Я где-то говорил что я выше любого пользователя? Только определенных. Зачем так коверкать ситуацию. Можем рассмотреть на конкретном примере, на твоем например и например в этой сфере я выше тебя потому что:

1. Самостоятельно, в одиночку, реализовал и обслуживал проекты тысячники (l2nova.com, linerage.ru, mistworld.ru, lineage2.club).
2. Уже несколько лет веду собственную разработку и имею хорошую базу клиентов.
3. На данном этапе мой эмулятор самый реализованный, самый стабильный, самый безопасный и с наибольшим кол-вом дополнительного качественного и реально уникального контента.
4. Я дипломированный специалист, два высших образования МГАПИ (Инженер по специальности вычислительные машины, комплексы, системы и сети) и РАНХиГС (государственное и муниципальное управление).
5. Обладаю грамотно построенной речью и аналитическим складом ума.

xD

Ты кто? Человек-интерлюд с крыльями? Сделаю "за пивко" или 50 рублей? xD
 

1. Тут я промолчу, не в курсе.
2. И что тут такого? Я тоже веду собственную разработку уже несколько лет.
3. Пруфы?
4. Не показатель.
5. Аналитическое мышление у вас храмает.

Сразу ответ на вопрос: "Ты кто? Человек-интерлюд с крыльями?", нет я человек-"Дракон ветра" с крыльями.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
1. В гугл зайди и ютуб.
2. Давай оценим, где посмотреть?
3. Какие такие пруфы, если бы было иначе, я бы для своих проектов купил ЛЮБОЙ исходный код из существующих и работал бы на нем, но таких сборок нет xD
4. Показатель, зачеты сдавал головой. Или показатель твои 9 классов школы №9 в гор. Кривой Рог?
5. Не нуждаюсь в оценках колхоза.

"И что тут такого", пздц xD топ отмаза
А то - что я делаю и это можно посмотреть. и этим пользуются. А у тебя что есть? Давай посмотрим чего ты там сделал? Давай посмотрим кто этим пользуется?

Компетентность твоих рассуждений и весомость доводов, прямо-пропорциональны твоим достижениям в этой сфере. И для любого образованного человека, твое НЕТ будет в 10 раз менее убидительнее чем мое ДА.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Другой вопрос в личном восприятии личности. Вот например ко мне лезет какой-то нуб с тупыми вопросами и надеждой на халяву получить консультацию/помощь или еще что-то. И он будет лезть, долбиться, пока я его не пошлю на [А по щам?]. А когда посылаю - он бежит на форум писать что я говно и сборка моя говно и собака моя говно. Логика понятна?

Когда начинают сравнивать моя сборку Grind VS "что-угодно", эти обиженные чайки налетают в трид с одной целью - мстить за ущемленное чувство достоинства и не имея ни малейшей компетентности, не ознакомившись с продуктом никак, давать ему оценку.

Вот эта картина стоит перед глазами образованных людей. А колхоз вроде тебя, летает стаями чаек и продолжает "говно, не адекватен, лучше взять другую сборку и т.п." xD
 
А вот если судить просто объективно, Grind работает, имеет клиентов, получает прибыль и заметьте ПЛОХИХ ОТЗЫВОВ ЕГО КЛИЕНТОВ НЕТ!
если кто то просто от своей "тупости" решил - grind-team = ГОВНО, зачем всему миру навязывать ДИБИЛЬНОЕ и не обоснованное мнение и советовать - "Уууу только не grind-team"?
Ответ 1-н - ОТ ЗАВЕСТИ!
умный поймёт, дурак осудит... ЗОЛОТЫЕ СЛОВА!

что т нас куда то понесло от темы :rofl1:
 
Последнее редактирование модератором: