MOTR logo
    • Категории
    • Последние
    • Популярные
    • Метки
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Гайд по написанию скриптов для гомункулусов

    Запланировано Прикреплена Закрыта Перенесена Жизнь в пробирке
    528 Сообщения 60 Posters 51.3k Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • MerlM Не в сети
      Merl
      отредактировано

      iSe, для начала хотелось бы знать использует ли ванилька скилы самостоятельно. Другими словами: проблема в неиспользовании скилов, или слишком большом перерыве между скилами. Либо же в том, что при определенном уроне СП скилы перестают кастоваться скилы (СП не сливается полностью).

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

      С rc7 by Nakayama (если имеется ввиду этот) проблем никогда не было, кажись он даже рекомендовался самим Faithful (создателем скрипта). Какие именно были проведены изменения я правда не вникал.

      1 ответ Последний ответ Ответить Цитировать 0
      • iSeI Не в сети
        iSe
        отредактировано

        поставил rc7 от Накаямы в принципе картина та же.. появляется не агрессивный моб в зоне видимости - ванилька кидает на него 1 болт (сама) и бежит в атаку и бьет обычными ударами при том что сп у нее еще 80-100% она все равно бьет обычными уларами, повторных попыток кинуться болтом ванилька не предпренимает.
        Хочется чтобы было: ванилька видит отреспившегося моба - кидает на него болты пока есть сп и после кидается в бой с обычными ударами, пожже скопив СП еще на один болт - кидается опять болтом, сама, без постороннего вмешательства. На то ведь он и ИИ (искусственный интелект) чтобы самому за меня думать ^_^

        1 ответ Последний ответ Ответить Цитировать 0
        • MerlM Не в сети
          Merl
          отредактировано

          iSe, проблема понятна, предполагаемое решение:

          открываем файл:
          "папка с игрой"\AI\USER_AI\Conf\Monsters.lua

          Находим там (по идее в саааамом конце)
          [code:38hbj47j]DefaultMonsterSettings = { многабукоф }[/code:38hbj47j]

          Где-то в скобках будет стоять
          skMax=1 (вероятно 1, это число ограничивает количество кастов по одному стандартному мобу, -1 означает бесконечность)

          исправляем на
          skMax=-1

          Сохраняем, перезапускаем гома (например чар селектом или Rest-Call) и по идее все должно быть в порядке. Если нет будем думать дальше.

          Для пояснения: стандартными являются все мобы, которые не были определены отдельно (например грибочки, планты химов определены изначально отдельно). Отдельно можно определить любого другого моба, тогда поведения гомункула на нем будет отличаться от других (ну например более низкий приоритет, ограничение по количеству кастов, бить только с расстояния)

          1 ответ Последний ответ Ответить Цитировать 0
          • iSeI Не в сети
            iSe
            отредактировано

            Спасибо, помогло, эффективность гома реско выросла) Спамит болтами как саг под брагой ^_^

            1 ответ Последний ответ Ответить Цитировать 0
            • MJM Не в сети
              MJ
              отредактировано

              замучалась ==
              где (и как, и можно ли) в Рампейдже прописать, чтобы гом не атаковал нового моба, если у него, скажем, меньше 30% хп и 5% сп?
              (та, я нупко =
              😃

              1 ответ Последний ответ Ответить Цитировать 0
              • ZenoZ Не в сети
                Zeno Модераторы
                отредактировано

                Нельзя. Нужен модификация. Например, у меня существуют такие параметры как atkHP и atkSP, для тех или иных монстров.

                Правила общения на форуме

                1 ответ Последний ответ Ответить Цитировать 0
                • MJM Не в сети
                  MJ
                  отредактировано

                  хм. а можно попросить вас выложить кусок этого скрипта?

                  как я понимаю, такая настройка возможна в мираи, но не для типа монстра. не очень хочется переходить снова на него =/

                  1 ответ Последний ответ Ответить Цитировать 0
                  • ZenoZ Не в сети
                    Zeno Модераторы
                    отредактировано

                    А я не помню где я это дописывал. Надо брать чистый и сравнивать, а потом из дифов вырезать нужные кусочки. 😃

                    Пример:
                    [code:j4095g5f]{ 1881, prio=4, atkHP=50, atkSP=61 }, -- Lesavka[/code:j4095g5f]

                    Правила общения на форуме

                    1 ответ Последний ответ Ответить Цитировать 0
                    • Aiko StarA Не в сети
                      Aiko Star
                      отредактировано

                      Зено, не жмотничай. Это идет в процедуре взятия инфы из таблицы прописанных мобов.

                      1 ответ Последний ответ Ответить Цитировать 0
                      • ZenoZ Не в сети
                        Zeno Модераторы
                        отредактировано

                        ..\AI\USER_AI\MonSupport.lua 80
                        [code:sht2cj71]-- Verify monster settings
                        function VerifyMonSettings(t,defaultTable,id)
                        -- Parameter names
                        local argNames = { nil, "prio", "atk", "skLvl", "skDly", "skMax", "aSkLv", "aSkDl",
                        "aSkMx", "defOnly", "kite", "ffa", "hlBm", "mammo", "aTer", "aBmb", "atkHP", "atkSP" }[/code:sht2cj71]
                        ..\AI\USER_AI\MonSupport.lua 235
                        [code:sht2cj71]-- Check if we are allowed to melee the monster
                        function MAttackAllowed(actor)
                        -- Get the monster's table
                        local t = MDBTable(actor)

                        -- Check if it's not attaking us
                        if (GetV(V_TARGET,actor) ~= OwnerID) and (GetV(V_TARGET,actor) ~= HomunID) then
                        	-- Check if HP or SP is higher than needed
                        	if (ActorHPPercent(HomunID) < t[17])
                        	or (ActorSPAmount(HomunID) < t[18])
                        	-- Check if skill is not paused
                        	or (t[4] > 0 and PauseAttackSkill)
                        	then
                        		return false
                        	end
                        end
                        
                        -- Return the melee allowed value
                        return t[3]
                        

                        end[/code:sht2cj71]
                        ..\AI\USER_AI\MonSupport.lua 377
                        [code:sht2cj71] -- Get the monster's table
                        local t = MDBTable(actor)

                        -- Check if it's not attaking us
                        if (GetV(V_TARGET,actor) ~= OwnerID) and (GetV(V_TARGET,actor) ~= HomunID) then
                        	-- Check if HP or SP is higher than needed
                        	if (ActorHPPercent(HomunID) < t[17]) or (ActorSPAmount(HomunID) < t[18]) then
                        		return false
                        	end
                        end
                        
                        -- Check if level is greater than 0 and we haven't casted too often
                        --	against them
                        if t[4] > 0 and MSkillMaxCasts(actor) > ActorData[actor].Count.HomuSkill then
                        	return true
                        end[/code:sht2cj71]
                        

                        ..\AI\USER_AI\Conf\Monsters.lua 97
                        [code:sht2cj71] - "atkHP" число HP в процентах ниже которого гомункул не будет проявлять
                        агрессию, если его или хозяина не бьют.

                        - "atkSP" число SP при котором гомункул начнет атаковать.[/code:sht2cj71]
                        

                        ..\AI\USER_AI\Conf\Monsters.lua 211
                        [code:sht2cj71]DefaultMonsterSettings = { nil, prio=1, atk=true, skLvl=5, skDly=500, skMax=-1, aSkLv=5,
                        aSkDl=1000, aSkMx=-1, defOnly=false, kite=false, ffa=false,
                        hlBm=false, mammo=0, aTer=0, aBmb=0, atkHP=10, atkSP=0 }[/code:sht2cj71]

                        Правила общения на форуме

                        1 ответ Последний ответ Ответить Цитировать 0
                        • JdMJ Не в сети
                          JdM
                          отредактировано

                          а MirAI случайно никто не модифицировал?
                          не знаю как сделать, чтоб гомункул атаковал мобов другого гомункула
                          пример: в пати 2 хима, один гомункул танчит мобов мой их бьёт

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

                          заранее спасибо

                          1 ответ Последний ответ Ответить Цитировать 0
                          • Aiko StarA Не в сети
                            Aiko Star
                            отредактировано

                            М... поиграться с описанием друзей, имхо. Если оно есть в мирке.

                            1 ответ Последний ответ Ответить Цитировать 0
                            • ZenoZ Не в сети
                              Zeno Модераторы
                              отредактировано

                              Проверить есть ли сопосоставление гомункула с хозяином можно добавив хозяина в список друзей. В этом случае киллстил у гомукула этого "друга" будет разрешен, если сопоставление существует и работает. Иначе вам надо придумать и написать (или стырить) алгоритм сопоставления.

                              Правила общения на форуме

                              1 ответ Последний ответ Ответить Цитировать 0
                              • Aiko StarA Не в сети
                                Aiko Star
                                отредактировано

                                Откуда сопоставление? id у хозяев и покемонов разные должны быть. Надо тупо добавлять хомяка чужого в список друзей.

                                1 ответ Последний ответ Ответить Цитировать 0
                                • ZenoZ Не в сети
                                  Zeno Модераторы
                                  отредактировано

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

                                  Правила общения на форуме

                                  1 ответ Последний ответ Ответить Цитировать 0
                                  • ZakalduiZ Не в сети
                                    Zakaldui
                                    отредактировано

                                    Много букаф, не проще вместо всего написанного было выложить несколько готовых файлов?:)

                                    1 ответ Последний ответ Ответить Цитировать 0
                                    • Aiko StarA Не в сети
                                      Aiko Star
                                      отредактировано

                                      Кто не хочет разбираться в этих букафах, тому хватит и немодифицированной мирки 🙂

                                      1 ответ Последний ответ Ответить Цитировать 0
                                      • F Не в сети
                                        Frosthy
                                        отредактировано

                                        Клиент выдаёт системное сообщение о том, что гомункул проголодался, когда показатель голода опускается до 10%. Можно ли сделать так, чтобы такое сообщение появлялось при достижении, скажем, 12%?

                                        1 ответ Последний ответ Ответить Цитировать 0
                                        • A Не в сети
                                          Ave
                                          отредактировано

                                          Так и не смогла разобраться в настройке AI функции агрессивности и пассивности. Мой гомункул - Амистр, который по умолчанию пассивный и атакует только тех, кто напал на него\меня. Подскажите пожалуйста где можно изменить его поведение на агрессивное? Я в мирке прописала мобов и тактику, применяемую к ним, но когда хожу по карте - амистр тормозит.. хоть и нападает первым, но почему-то, чтобы он это сделал, мне нужно подойти к мобу самой и стоять рядом... Брр.. ничего не понимаю. И не знаю как сделать так, чтоб он в радиусе видимости убивал всё живое ~_~ ... Хотелось бы наиболее точный ответ, т.к. со скриптами я не особо дружу. Какой именно файл, где конкретно и что вписывать. Заранее спасибо.

                                          1 ответ Последний ответ Ответить Цитировать 0
                                          • iDityanI Не в сети
                                            iDityan
                                            отредактировано

                                            @"Ave":
                                            Так и не смогла разобраться в настройке AI функции агрессивности и пассивности. ... Хотелось бы наиболее точный ответ, т.к. со скриптами я не особо дружу. Какой именно файл, где конкретно и что вписывать. Заранее спасибо.
                                            В стандартный AI можно внести следующие изменения (изменения отмечены символом ">", их не нужно писать), в файл AI.lua.
                                            [code:3w361xvm]
                                            ...

                                            -- global variable

                                            ...
                                            MyID = 0 -- id гомункула

                                            MyOwner = 0 -- id хозяина
                                            ...


                                            ...
                                            -------------- state process --------------------
                                            function OnIDLE_ST ()

                                            TraceAI ("OnIDLE_ST")

                                            local cmd = List.popleft(ResCmdList)
                                            if (cmd ~= nil) then
                                            ProcessCommand (cmd) -- ї№ѕа ён•Йѕо Гіё®
                                            return
                                            end

                                            local object = GetOwnerEnemy (MyID)
                                            if (object ~= 0) then -- MYOWNER_ATTACKED_IN
                                            MyState = CHASE_ST
                                            MyEnemy = object
                                            TraceAI ("IDLE_ST -> CHASE_ST : MYOWNER_ATTACKED_IN")
                                            return
                                            end

                                            object = GetMyEnemy (MyID)
                                            if (object ~= 0) then -- ATTACKED_IN
                                            MyState = CHASE_ST
                                            MyEnemy = object
                                            TraceAI ("IDLE_ST -> CHASE_ST : ATTACKED_IN")
                                            return
                                            end

                                            object = GetV (V_TARGET,MyOwner)
                                            if (object ~= 0) then
                                            MyState = CHASE_ST
                                            MyEnemy = object
                                            TraceAI ("IDLE_ST -> CHASE_ST : ATTACKED_IN")
                                            return
                                            end
                                            local distance = GetDistanceFromOwner(MyID)
                                            if ( distance > 3 or distance == -1) then -- MYOWNER_OUTSIGNT_IN
                                            MyState = FOLLOW_ST
                                            TraceAI ("IDLE_ST -> FOLLOW_ST")
                                            return;
                                            end
                                            end
                                            ...
                                            function OnCHASE_ST ()
                                            TraceAI ("OnCHASE_ST")
                                            if (true == IsOutOfSight(MyOwner,MyEnemy)) then -- ENEMY_OUTSIGHT_IN
                                            MyState = IDLE_ST
                                            MyEnemy = 0
                                            MyDestX, MyDestY = 0,0
                                            TraceAI ("CHASE_ST -> IDLE_ST : ENEMY_OUTSIGHT_IN")
                                            return
                                            end
                                            if (true == IsInAttackSight(MyID,MyEnemy)) then -- ENEMY_INATTACKSIGHT_IN
                                            MyState = ATTACK_ST
                                            TraceAI ("CHASE_ST -> ATTACK_ST : ENEMY_INATTACKSIGHT_IN")
                                            return
                                            end
                                            local x, y = GetV (V_POSITION,MyEnemy)
                                            if (MyDestX ~= x or MyDestY ~= y) then -- DESTCHANGED_IN
                                            MyDestX, MyDestY = GetV (V_POSITION,MyEnemy);
                                            Move (MyID,MyDestX,MyDestY)
                                            TraceAI ("CHASE_ST -> CHASE_ST : DESTCHANGED_IN")
                                            return
                                            end
                                            end
                                            ...
                                            function GetMyEnemy (myid)
                                            local result = 0

                                            result = GetMyEnemyB (myid)
                                            

                                            return result
                                            end
                                            ...


                                            -- ј±°шЗь GetMyEnemy

                                            function GetMyEnemyB (myid)
                                            local result = 0
                                            local owner = GetV (V_OWNER,myid)
                                            local actors = GetActors ()
                                            local enemys = {}
                                            local index = 1
                                            local type
                                            local SeePC = 0
                                            for i,v in ipairs(actors) do
                                            if (v ~= owner and v ~= myid) then

                                              if (1 == IsMonster(v))	then
                                              	enemys[index] = v
                                              	index = index+1
                                              else
                                              	SeePC = 1
                                              end
                                            
                                              end
                                            

                                            end

                                            if (SeePC == 1) then
                                            return GetMyEnemyA (myid)
                                            end
                                            local min_dis = 100
                                            local dis
                                            for i,v in ipairs(enemys) do
                                            dis = GetDistance2 (myid,v)
                                            if (dis < min_dis) then
                                            result = v
                                            min_dis = dis
                                            end
                                            end
                                            return result
                                            end
                                            ...
                                            function AI(myid)
                                            MyID = myid
                                            MyOwner = GetV(V_OWNER, MyID)
                                            ...
                                            end
                                            ...
                                            [/code:3w361xvm]
                                            Этого будет вполне достаточно чтобы гомункул атаковал мобов в поле видимости, не убегал за приделы видимости, не атаковал игроков и не килстил у них (за исключением случая атаки игрока из-за области видимости).
                                            Что касается мира, то возможно не правильно указан радиус, в приделах которого можно атаковать, т.к. я не пользуюсь миром то ничего больше конкретного сказать не могу.

                                            1 ответ Последний ответ Ответить Цитировать 0
                                            • Первое сообщение
                                              Последнее сообщение