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

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

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

      Да я так)), настроение плохое было.., да и мозг уехал :oops:

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

        Вообще я так понял все что можно снимать с клиента - это расстояние до цели, хп/сп гома, его статус и тип цели, ее координаты?
        Из этого много не наработаешь. =/

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

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

          Состояние цели, список действующих лиц на экране, цель цели и т.д. Простор для фантазии. Вон, Рэмпэйдж АИ чего только не вытворяет...

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

            Aiko Star, на счёт каста ничего не придумалось?
            Ну или хотя бы способ определить не "моб атакует хозяина", а "моб идёт к хозяину, собираясь атаковать". На данный момент не для кача это не нужно, но всё же.

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

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

              [code:1smano8l]--------------------------------------------------
              function GetEnemyOf(id) -- this function is not for PvP Mods

              local result = 0
              local actors = GetActors()
              local enemies = {}
              local index = 1
              local target
              for i,v in ipairs(actors) do
              	if (v ~= OwnerID and v ~= myid) then
              		if (IsMonster(v) == 1) then
              			if GetV(V_MOTION, v) ~= MOTION_DEAD then
              				target = GetV(V_TARGET, v)
              				if (target == id) then
              					enemies[index] = v
              					index = index + 1
              				end
              			end
              		end
              	end
              end
              
              local min_dis = 100
              local dis
              for i,v in ipairs(enemies) do
              	dis = GetDistance2(MyID, v)
              	if (dis < min_dis) then
              		result = v
              		min_dis = dis
              	end
              end
              
              return result
              

              end
              [/code:1smano8l]

              Проверка на движение (уже от себя):

              [code:1smano8l]
              local mob_motion = GetV(V_MOTION, MobID)
              if GetV(V_TARGET,MobID)==OwnerID then
              if mob_motion == MOTION_MOVE then
              бла-бла-бла
              elseif mob_motion == MOTION_STAND then
              бу-бу-бу
              elseif mob_motion == MOTION_HIT and MyState ~= ATTACK_ST then -- кто-то другой бьет моба
              бз-бз-бз
              [/code:1smano8l]

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

                Состояние цели - что есть? Стуатусы на цели возвращает?

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

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

                  Состояние - это V_MOTION. Стоит, бьет, идет, кастует, etc. Все ж в гайде написано х_х

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

                    здравствуйте. скачала RampageAI и меня очень раздражает, что когда хим стоит гомункул нарезает вокруг него круги, а не стоит рядом. где это можно отменить, подскажите, пожалуйста? (у меня проблемы с анлийским, сама не разберусь 😃

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

                      Понравился RampageAI. Модифицирую. Очень нехватало возможности задавать в настройках монстров при каком HP и SP их атаковать.

                      uncontrol
                      EnableIdleMove нужно выставить в false

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

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

                        Наверное это сюда.

                        Кто-нибудь пишет продвинутый ИИ?
                        Или может быть кто-то составил документацию по Rampage AI? Очень бы пригодилась.

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

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

                          Какую документацию? Там половина текста - комментарии, чуть ли не к каждой строчке есть свое объяснение О.о

                          Продвинутый АИ писать? После Ремпейджа? 😄

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

                            :roll: Ничего непонял :roll: Разложите пожалуйста по полочкам,что скачать и что куда закидывать.Мне нужен результат чтобы гом далеко не убегал,и чтобы в агресивном режиме использовал скилы.Очень надеюсь на вашу помощ,сам несправлюсь,так как дубовый в этом деле. :roll:

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

                              Скажите пожалуйста как сделать(прописать) локмоб гомункулу?

                              п.с. я ботинок в скриптах >_>

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

                                +1 к Эмико.

                                Что и где именно надо прописать или скачать какой-то мод, чтобы ваниль начинал атаку со скилла? Использую Мирку, с рампэгом не разобралась (желающие помочь - вэлком в аську :oops: )

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

                                  @"Zeno":
                                  Наверное это сюда.

                                  Кто-нибудь пишет продвинутый ИИ?
                                  Или может быть кто-то составил документацию по Rampage AI? Очень бы пригодилась.

                                  Я пишу, но пока работы на работе много.

                                  1 ответ Последний ответ Ответить Цитировать 0
                                  • E Не в сети
                                    Euthanasia M_D_ Заблокирован
                                    отредактировано

                                    Я тоже пишу. С программой настройки и поддержкой наемников. Взял за основу японский SyokaiAI - очень мне у них панель управления на js и html понравилась - и основательно его переделал. Панель управления перевел на русский.

                                    Из каких-то реальных отличий от имеющихся MirAI, Rampage и AzzyAI - имею библиотеку нахождения пути волновым методом. Позволяет гому/мерку возвращаться к хозяину "из-за угла", когда напрямую пройти невозможно (качал гома на корабле). Правда, для серверов на базе Афинки это не очень актуально - на афинке гомы и без того отлично ходят. Но на корабле все-таки есть такие места, где гом может "заблудиться" без возможности возврата к хозяину, даже когда сервер Афинка, а не Aegis.

                                    Сейчас пытаюсь, но никак не могу выкроить время, чтобы сделать поддержку умений для всех наемников. Пока только для мечника 1-2 лвл сделал.

                                    Кстати, по поводу Rampage - в оригинальной RC6 были баги, включая приводящие к kill-steal'у. По ссылке <!-- m --><a class="postlink" href="http://code.google.com/p/rampageai/downloads/list">http://code.google.com/p/rampageai/downloads/list</a><!-- m --> можно скачать исправленную мной версию. Надо бы эту ссылку куда-нибуль закрепить.

                                    А еще, раз уж тут такая тема открылась, хочу упомянуть библиотеку H.A.I.C.K. - Homunculus Artificial Intelligence Creation Kit ~by Sanctus of AsgardRO~.
                                    Ссылка <!-- m --><a class="postlink" href="http://www.asgardro.com/forum/showthread.php?t=17543">http://www.asgardro.com/forum/showthread.php?t=17543</a><!-- m -->

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

                                      Euthanasia M_D_, ежели оно будет работать - памятник тебе при жизни. Вообще интересно было бы посмотреть (с волновым методом не знакома) 😉
                                      Честно - отлов багов в Rampage "на глаз" проводить довольно сложно, особенно не зная о них (а я вот не знала). Надо будет глянуть что ли на досуге, поинтересоваться.

                                      Что касается ХАЙКа... пролистала - в принципе, удобно, но ничего особо выдающегося. Плюс несколько стремно ето использовать, т.к. могут быть баги. Вообще мне как-то боязно чужими функциями пользоваться, не зная алгоритма. А сидеть, вычитывать и вникать в это... долго 🙂

                                      В любом случае, спасибо за информацию, весьма интересно было узнать 😉

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

                                        Из начальной точки распространяем в 4 направлениях волну с шагом в одну клетку. Дальше из каждой точки фронта волны распространяем волну, и т.п. Путь всегда имеет одинаковую (уж не помню, минимальную ли) длину, жрет много памяти 🙂

                                        1 ответ Последний ответ Ответить Цитировать 0
                                        • E Не в сети
                                          Euthanasia M_D_ Заблокирован
                                          отредактировано

                                          Не, не много. Не больше любого другого.
                                          У гома ж область видимости всего 29x29 клеток. Отойдет от хозяина на 15, и пропал.
                                          А карту помнить при любом способе нужно - действительно, много памяти сожрет.
                                          Я, правда, с картами заморачиваться не стал. У меня карт нет.
                                          Я просто запоминаю только те клетки, по которым хоть однажды проходил гом или хим. Этого хватает, чтобы всегда уверенно возвращаться к химу из любой точки, где бы ни находился гом.
                                          А, если потоптаться немного вокруг, то и успешно бегать "за угол" пинать моба.

                                          Т.е. я просто встаю в какое-нибудь место и через несколько минут гом, бегая к мобу и обратно уже имеет необходиое представление об окружающем ландшафте.
                                          А после варпа/телепорта скрипт все равно перезапускается и память при этом освобождается.

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

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

                                            файл AI.lua
                                            [code:1kssvco0]
                                            ...

                                            -- global variable

                                            ...
                                            MyID = 0 -- id гомункула
                                            MyOwnerID = 0 -- id хозяина
                                            ...
                                            OwnerPos1X = 0 -- позиция по x в момен времени t1
                                            OwnerPos1Y = 0 -- позиция по y в момен времени t1
                                            OwnerPos1Tic = 0 -- время t1
                                            OwnerPos2X = 0 -- позиция по x в момен времени t2
                                            OwnerPos2Y = 0 -- позиция по y в момен времени t2
                                            OwnerPos2Tic = 0 -- время t2
                                            Move_Tic_Delai = 1000 -- задержка во времени для координат
                                            DistOvertake = 4 -- дистанция опережения

                                            ...
                                            function OnFOLLOW_ST ()

                                            TraceAI ("OnFOLLOW_ST") -- Говорим, что мы в этом состоянии
                                            
                                            local ownerX, ownerY, myX, myY
                                            ownerX, ownerY = GetV (V_POSITION, MyOwnerID ) -- Запрашиваем позицию хозяина и ...
                                            myX, myY = GetV (V_POSITION,MyID) -- ... гомункула
                                            
                                            
                                            if(GetV (V_POSITION,MyIDOwner)== MOTION_MOVE and ((OwnerPos1X ~= OwnerPos2X) or (OwnerPos1Y ~= OwnerPos2Y))) then -- если хозяин двигается, и можно понять в каком направлении то ....
                                            	local dx=(OwnerPos2X-OwnerPos1X) -- вычисляем примерное направление
                                            	local dy=(OwnerPos2Y-OwnerPos1Y)
                                            	if( OwnerPos2Tic < OwnerPos1Tic ) then -- проверяем какая из позиций последняя так как они меняются местами с интервалом в половину Move_Tic_Delai
                                            		dx=(OwnerPos1X-OwnerPos2X)
                                            		dy=(OwnerPos1Y-OwnerPos2Y)
                                            	end
                                            
                                            	local Nxy= math.sqrt(dx*dx+dy*dy) -- немного математической магии с векторами и нормалями
                                            	dx=dx/Nxy
                                            	dy=dx/Nxy
                                            	move_to_x=ownerX+math.floor(dx*DistOvertake) -- в результате мы получам точку куда нужно двигатся чтобы обогнать хозяина
                                            	move_to_y=ownerY+math.floor(dy*DistOvertake) 
                                            	OnMOVE_CMD(move_to_x,move_to_y)
                                            	return
                                            end
                                            

                                            ...
                                            end
                                            ...
                                            function AI(myid)

                                            if (MyID ~= myid) then -- Если мы еще не занесли ID гомункула в глобальную переменную(тоесть скрипт только что запушен, и функция AI вызывается в первый раз), то ...
                                                MyID = myid -- ... заносим ее и ...
                                                MyOwnerID = GetV (V_OWNER,myid) -- ... тоже самое делаем с ID хозяина
                                            
                                            OwnerPos1Tic = GetTick ()
                                            OwnerPos2Tic = OwnerPos1Tic + (Move_Tic_Delai/2)
                                            	OwnerPos1X, OwnerPos1Y = GetV (V_POSITION, MyOwnerID) -- Запрашиваем позицию хозяина
                                            	OwnerPos2X = OwnerPos1X
                                            OwnerPos2Y = OwnerPos1Y
                                            end
                                            

                                            if ((OwnerPos1Tic + Move_Tic_Delai) < GetTick) then
                                            OwnerPos1Tic = GetTick ()
                                            OwnerPos1X, OwnerPos1Y = GetV (V_POSITION, MyOwnerID) -- Запрашиваем позицию хозяина
                                            end

                                            if ((OwnerPos2Tic + Move_Tic_Delai) < GetTick) then 
                                            OwnerPos2Tic = GetTick ()
                                            	OwnerPos2X, OwnerPos2Y = GetV (V_POSITION, MyOwnerID) -- Запрашиваем позицию хозяина
                                            end
                                            

                                            ...
                                            end
                                            ...

                                            [/code:1kssvco0]

                                            На данный момент я не являюсь счастливым обладателем гомункула :oops: , в следствии чего приведенный выше код не прошел тестирования в боевых условиях и возможно содержит ошибки :oops: . Если кто отважится проверить данный код прошу отписаться здесь или в личку.

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