Добавление своего AI

BlueBarsik

Heir
Customer
День добрый. Решил тут к новым боссам прикрутить хоть какое-то подобие AI самописного (переписать баюма если честно xD) и вот проблема:

Для примера взял AI из Скриптов от ящера

Code:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package ai;

import java.util.Iterator;
import java.util.List;
import l2.commons.util.Rnd;
import l2.gameserver.ai.CtrlEvent;
import l2.gameserver.ai.Fighter;
import l2.gameserver.model.Creature;
import l2.gameserver.model.instances.NpcInstance;
import l2.gameserver.scripts.Functions;

public class DeluLizardmanSpecialCommander extends Fighter {
    private boolean bC = false;

    public DeluLizardmanSpecialCommander(NpcInstance var1) {
        super(var1);
    }

    protected void onEvtSpawn() {
        this.bC = false;
        super.onEvtSpawn();
    }

    protected void onEvtAttacked(Creature var1, int var2) {
        NpcInstance var3 = this.getActor();
        if (Rnd.chance(40) && !this.bC) {
            this.bC = true;
            Functions.npcSay(var3, "Come on my fellows, assist me here!");
            List var4 = var3.getAroundNpc(1000, 300);
            if (var4 != null && !var4.isEmpty()) {
                Iterator var5 = var4.iterator();

                while(var5.hasNext()) {
                    NpcInstance var6 = (NpcInstance)var5.next();
                    if (var6.isMonster()) {
                        var6.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, var1, 5000);
                    }
                }
            }
        }

        super.onEvtAttacked(var1, var2);
    }
}

Переписал только название класса на IstinaSpecial. Пошел в настройки мобов и прописал там <set name="ai_type" value="IstinaSpecial"/>. При входе в игру заспавнил себе и Ящера (21107) и своего моба. В итоге в настройках Ящера все красиво, его AI прописан, а вот с моим мобов проблема. В настройках AI при шифт клике указан AI: CharacterAI, естественно моб перестал реагировать на какие либо провокации с моей стороны. В чем может быть проблема, мб кто-то занимался подобным
 
День добрый. Решил тут к новым боссам прикрутить хоть какое-то подобие AI самописного (переписать баюма если честно xD) и вот проблема:

Для примера взял AI из Скриптов от ящера

Code:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package ai;

import java.util.Iterator;
import java.util.List;
import l2.commons.util.Rnd;
import l2.gameserver.ai.CtrlEvent;
import l2.gameserver.ai.Fighter;
import l2.gameserver.model.Creature;
import l2.gameserver.model.instances.NpcInstance;
import l2.gameserver.scripts.Functions;

public class DeluLizardmanSpecialCommander extends Fighter {
    private boolean bC = false;

    public DeluLizardmanSpecialCommander(NpcInstance var1) {
        super(var1);
    }

    protected void onEvtSpawn() {
        this.bC = false;
        super.onEvtSpawn();
    }

    protected void onEvtAttacked(Creature var1, int var2) {
        NpcInstance var3 = this.getActor();
        if (Rnd.chance(40) && !this.bC) {
            this.bC = true;
            Functions.npcSay(var3, "Come on my fellows, assist me here!");
            List var4 = var3.getAroundNpc(1000, 300);
            if (var4 != null && !var4.isEmpty()) {
                Iterator var5 = var4.iterator();

                while(var5.hasNext()) {
                    NpcInstance var6 = (NpcInstance)var5.next();
                    if (var6.isMonster()) {
                        var6.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, var1, 5000);
                    }
                }
            }
        }

        super.onEvtAttacked(var1, var2);
    }
}

Переписал только название класса на IstinaSpecial. Пошел в настройки мобов и прописал там <set name="ai_type" value="IstinaSpecial"/>. При входе в игру заспавнил себе и Ящера (21107) и своего моба. В итоге в настройках Ящера все красиво, его AI прописан, а вот с моим мобов проблема. В настройках AI при шифт клике указан AI: CharacterAI, естественно моб перестал реагировать на какие либо провокации с моей стороны. В чем может быть проблема, мб кто-то занимался подобным
Логи загрузки смотри, ошибок нет?
Добавлял сам лично много аи, проблем не было.
Проверь нпц, правильно ли ты сделал все
 
Логи загрузки смотри, ошибок нет?
Добавлял сам лично много аи, проблем не было.
Проверь нпц, правильно ли ты сделал все
Я тебя обманул, я добавлял npc type, они прекрасно работали
 
Логи загрузки смотри, ошибок нет?
Добавлял сам лично много аи, проблем не было.
Проверь нпц, правильно ли ты сделал все
В логах ошибок не увидел (по логу загрузки ГС смотрел)

Если прикрутить к моему моду Аи который уже есть то всё работает, мне кажется в скриптах что-то ещё крутить надо
 
Косяк найден, надо в следующий раз внимательнее смотреть расширение файла. Вместо ext был extl
 
Глянул баюма в соло, из проблем часто спелы юзает и не бьёт с руки, и как я понял бьёт только танка
 
Мб кто может подсказать в чем проблема:

Взял из баюма работу со спелами. Выбор цели, Hasmap, и как он кастует спелы:
var1 - босс
var2 - игрок с агром
Code:
 case 2:
                //Сладкая булочка продолжает бить танка, и изредка плеваться в него скилом
                System.out.println("Stage 2");
                if (!var1.isDead() && Rnd.chance(40) && !this.bC){
                    System.out.println("Юзаем спелл");
                    HashMap var8 = new HashMap();
                    double skillRange = var1.getDistance((GameObject) var2);
                    System.out.println("Дистанция до цели " + skillRange);
                    System.out.println("Заклинание " + this.bcC);
                    System.out.println("На кого кастуем " + var2);
                    this.addDesiredSkill(var8, (Creature)var2, skillRange, this.bcC);
                    return true;
                } else {
                    this.addTaskAttack((Creature) var2);
                    return true;
                }

Stage 2
Юзаем спелл
Дистанция до цели 59.405386961116584
Заклинание Yoke Status[id=14219,lvl=1]
На кого кастуем Test29[268477536]

По выводам System.out можно судить что все моменты в addDesiredSkill читаются
Code:
 this.addDesiredSkill(var8, (Creature)var2, skillRange, this.bcC);

Проблема в том, что способность не юзается, прописывал ее себе и все прекрасно работает (через ctrl игрок-игрок, флагнутый игрок-игрок, по мобам)

Code:
<skill id="14219" levels="1" name="Death Blow">
    <set name="icon" val="icon.skill0003"/>
    <set name="power" val="5000000"/>
    <set name="magicLevel" val="75"/>
    <set name="castRange" val="1000"/>
    <set name="hitTime" val="1000"/>
    <set name="target" val="TARGET_ONE"/>
    <set name="skillType" val="PDAM"/>
    <set name="operateType" val="OP_ACTIVE"/>
  </skill>

У моба скилл тоже прописан

Code:
<npc id="29195" name="Istina" title="Queen of Annihilation">
    <set name="aggroRange" value="0"/>
    <set name="ai_type" value="IstinaSpecial"/>
    <set name="baseAtkRange" value="40"/>
    <set name="baseCON" value="43"/>
    <set name="baseCritRate" value="40"/>
    <set name="baseDEX" value="30"/>
    <set name="baseHpMax" value="777772.738"/>
    <set name="baseHpRate" value="2"/>
    <set name="baseHpReg" value="4.5"/>
    <set name="baseINT" value="21"/>
    <set name="baseMAtk" value="89"/>
    <set name="baseMAtkSpd" value="333"/>
    <set name="baseMDef" value="125"/>
    <set name="baseMEN" value="20"/>
    <set name="baseMpMax" value="40002.6"/>
    <set name="baseMpReg" value="1.8"/>
    <set name="basePAtk" value="191"/>
    <set name="basePAtkSpd" value="253"/>
    <set name="basePDef" value="170"/>
    <set name="baseRunSpd" value="135"/>
    <set name="baseSTR" value="40"/>
    <set name="baseShldDef" value="0"/>
    <set name="baseShldRate" value="0"/>
    <set name="baseWIT" value="20"/>
    <set name="baseWalkSpd" value="52"/>
    <set name="collision_height" value="30.0"/>
    <set name="collision_radius" value="12.0"/>
    <set name="level" value="80"/>
    <set name="rewardExp" value="3627"/>
    <set name="rewardRp" value="0"/>
    <set name="rewardSp" value="214"/>
    <set name="shots" value="NONE"/>
    <set name="texture" value=""/>
    <set name="type" value="Monster"/>
     <skills>
      <skill id="14219" level="1"/>
      <!--Mark Dedath-->
    </skills>
    <attributes>
      <attack attribute="holy" value="0"/>
      <defence attribute="fire" value="0"/>
      <defence attribute="water" value="0"/>
      <defence attribute="wind" value="0"/>
      <defence attribute="earth" value="0"/>
      <defence attribute="holy" value="0"/>
    </attributes>
  </npc>
 
@Deazer можно ли как-то через скрипты вывести сообщение такого типа? И если да то как
 

Attachments

  • Screenshot_2023-01-21-18-02-52-788_com.google.android.youtube.webp
    Screenshot_2023-01-21-18-02-52-788_com.google.android.youtube.webp
    202.3 KB · Views: 23
@Deazer можно ли как-то через скрипты вывести сообщение такого типа? И если да то как
Так это обычное систем месадж, тебе надо редачить систем месадж дат файл, там ставится вывод на экран
Вывести на экран можно в любое положение и любое сообщение
 
Так это обычное систем месадж, тебе надо редачить систем месадж дат файл, там ставится вывод на экран
Вывести на экран можно в любое положение и любое сообщение
Бегло глянул Датник там ид сообщения и текст, вопрос как в скрипте вывести этот ид
 
Бегло глянул Датник там ид сообщения и текст, вопрос как в скрипте вывести этот ид
Посмотри как выводятся другие сообщение в других скриптах
Скопировать и прикрутить там где тебе надо
 
Посмотри как выводятся другие сообщение в других скриптах
Скопировать и прикрутить там где тебе надо
Нашёл как выводить любые кастомные сообщения, датник трогать кстати не пришлось
 
Нашёл как выводить любые кастомные сообщения, датник трогать кстати не пришлось
Ну в датнике можно например прохождение спойла на экран вывести, или убийство рб или что угодно)
 
Back
Top