Полный гайд по инстансам (Kamaloka и что угодно)

1. Нам необходимо создать XML файл в которой будет описан наш инстанц (Для наглядного примера берем Kamaloka)

Путь: gameserver\data\instances\[72] Kamaloka, Hall of the Abyss.xml
Сама схема:
XML:
<!DOCTYPE list SYSTEM "instances.dtd">
<list>
    <instance id="72" name="Kamaloka, Hall of the Abyss" maxChannels="10" collapseIfEmpty="5" timelimit="30" dispelBuffs="true">
        <collapse on-party-dismiss="true" timer="60"/>
        <level min="70" max="80"/>
        <party min="2" max="6"/>
        <return loc="43928 -49144 -792"/>
        <teleport loc="180056 -88968 -7216"/>
        <geodata map="25_15"/>
        <remove itemId="0" count="0" necessary="false"/>
        <give itemId="0" count="0"/>
        <quest id="0"/>
        <reuse resetReuse="30 6 * * *" setUponEntry="true" sharedReuseGroup="1"/> <!-- Instance reuse at 6:30 every day -->
        <spawns>
            <spawn mobId="25657" type="point" respawn="0>
                <coords loc="180375 -88984 -7216"/>
            </spawn>
            <spawn mobId="25658" type="point" respawn="0>
                <coords loc="182168 -88968 -7216"/>
            </spawn>
            <spawn mobId="25659" type="point" respawn="0>
                <coords loc="183911 -88969 -7216 "/>
            </spawn>
        </spawns>
        <doors>
            <door id="25150001" opened="false"/>
            <door id="25150002" opened="false"/>
            <door id="25150003" opened="false"/>
            <door id="25150004" opened="false"/>
        </doors>
    </instance>
</list>

Где:
  • name - название инста
  • maxChannels - сколько может быть создано реплик этого инстанса
  • collapseIfEmpty -время через которое игроков при успешном проходе или истечении времени инстанса будет автоматически закрыт и игроки перемещены в <return loc="43928 -49144 -792"/>
  • timelimit - время жизни инстанса
  • dispelBuffs - удалять баффы при входе в инстанс или нет
  • <collapse on-party-dismiss="true" timer="60"/> - закрывать инстанс и возвращать игроков назад через timer="60" если пати была разорвана
  • <level min="70" max="80"/> - минимальный и максимальный уровень для входа в инстанс
  • <party min="2" max="6"/> - минимальное количество и максимальное количество игроков в пати
  • <teleport loc="180056 -88968 -7216"/> - точка телепорта при входе в инстанс
  • <return loc="43928 -49144 -792"/> - координата в которую будет возвращать игроков при закрытии инстанса
  • <geodata map="25_15"/> - квадрат геодаты текущего инстанса (нужно ставить если у вас есть там двери, нет - можете забить)
  • <remove itemId="0" count="0" necessary="false"/> какой итем нужен для входа в инстанс. По умолчанию ничего не забираем
  • <give itemId="0" count="0"/> - предмет который будет выдан после входа в инстанс
  • <quest id="0"/> - необходимый квест для входа в инстанса.
  • <reuse resetReuse="30 6 * * *" setUponEntry="true" sharedReuseGroup="1"/> - когда произойдёт сброс отката инста. setUponEntry ture -откат ставится сразу после входа, а не по завершению. sharedReuseGroup - шарить его во всю группу инстансов
  • <spawns></spawns> - блок для спауна НПЦ или мобов которые вы хотите или описываете своим скриптом.
  • <doors></doors> - двери которые есть в инсте, обязательно указывать или игроки будут через них пробегать якобы нет геодаты внутри.
  • <add_parameters><param name="hwidLimit" value="true"/></add_parameters> - если активировать этот параметр, откат будет записываться на HWID и не пускать в инст если HWID тот же.
  • <zones></zones> - блок с массивом зон (необязательный). Как пример: <zones><zone name="[my_zone_1]" active="true"/><zone name="[my_zone_1]" active="true"/></zones>


2. Делаем своего НПЦ или берем стандартного id 40031
Пример:
По факту у вас должен быть тип НПЦ <set name="type" value="EventReflectionManager" />
Но так же выкладываю полного

XML:
<npc id="40031" name="Pathfinder Worker" title="Dimensional Manager">
   <set name="aggroRange" value="0" />
   <set name="ai_type" value="CharacterAI" />
   <set name="baseAtkRange" value="40" />
   <set name="baseCON" value="43" />
   <set name="baseCritRate" value="40" />
   <set name="baseDEX" value="30" />
   <set name="baseHpMax" value="2444.468" />
   <set name="baseHpRate" value="1" />
   <set name="baseHpReg" value="7.5" />
   <set name="baseINT" value="21" />
   <set name="baseMAtk" value="780" />
   <set name="baseMAtkSpd" value="500" />
   <set name="baseMDef" value="382" />
   <set name="baseMEN" value="20" />
   <set name="baseMpMax" value="1345.8" />
   <set name="baseMpReg" value="2.7" />
   <set name="basePAtk" value="1303" />
   <set name="basePAtkSpd" value="253" />
   <set name="basePDef" value="471" />
   <set name="baseRunSpd" value="120" />
   <set name="baseSTR" value="40" />
   <set name="baseShldDef" value="0" />
   <set name="baseShldRate" value="0" />
   <set name="baseWIT" value="20" />
   <set name="baseWalkSpd" value="30" />
   <set name="collision_height" value="23.0" />
   <set name="collision_radius" value="8.0" />
   <set name="level" value="70" />
   <set name="rewardExp" value="0" />
   <set name="rewardRp" value="0" />
   <set name="rewardSp" value="0" />
   <set name="shots" value="NONE" />
   <set name="texture" value="" />
   <set name="displayId" value="35579"/>
   <set name="type" value="EventReflectionManager" />
   <skills>
      <skill id="4416" level="14" /> <!--Humans-->
   </skills>
   <attributes>
      <defence attribute="fire" value="150" />
      <defence attribute="water" value="150" />
      <defence attribute="wind" value="150" />
      <defence attribute="earth" value="150" />
      <defence attribute="holy" value="150" />
      <defence attribute="unholy" value="150" />
   </attributes>
</npc>

Теперь смотрим его диалог и наглядно цепляем к нему вход в нужный нам инстанс:
Путь обязательно должен быть gameserver\data\html\events\instances\40031.htm
Теперь сам диалог:
и сразу смотрим на строку [npc_%objectId%_Chat 1|Войти в Камалоку.] которое перекинет нас для входа в инстанс 40031-1.htm

HTML:
Pathfinder Worker:

Да? Хотите войти в Камалоку?

[npc_%objectId%_event_instance 72|Войти в Камалоку, Зал Бездны (Уровень 70-80).]

Где npc_%objectId%_event_instance 72 id нашего инстанца! Который мы уже предварительно создали в gameserver\data\instances\[72] Kamaloka, Hall of the Abyss.xml

3. Как открывать двери или делать любые какие угодно вам действия при убийстве Рейдов или мобов внутри инстанса. Мы рассмотрим конкретно открытия дверей и вам необходимо знать хотя бы чуток яву.
Переходим к примеру:
Где при убийстве моба id 25657 будет открываться дверь id 25150002 и при убийстве 25658 будет открываться дверь id 25150003.
У самих же этих мобов id 25657 и id 25658 в data/npc стоит тип <set name="type" value="EventReflectionMob"/>
Вы можете создавать любой нужный себе сценарий или открывать двери при убийстве нужного вам моба внутри инстанса.
Исходный код прикладываю, как компилировать ваши скрипты и загружать их >>> Гайд <<<

Java:
package npc.model;

import l2.gameserver.instancemanager.ReflectionManager;
import l2.gameserver.model.Creature;
import l2.gameserver.model.instances.DoorInstance;
import l2.gameserver.model.instances.MonsterInstance;
import l2.gameserver.templates.npc.NpcTemplate;

public class EventReflectionMobInstance extends MonsterInstance
{
  public EventReflectionMobInstance(int objectId, NpcTemplate template)
  {
    super(objectId, template);
  }

  @Override
  protected void onDeath(Creature killer)
  {
    super.onDeath(killer);
    if(getReflection() == killer.getReflection() && getReflection() != ReflectionManager.DEFAULT)
    {
      switch(getNpcId())
      {
        case 25657:
        {
          DoorInstance door = getReflection().getDoor(25150002);
          if(door != null)
          {
            door.openMe();
          }
        }
        break;
        case 25658:
        {
          DoorInstance door = getReflection().getDoor(25150003);
          if(door != null)
          {
            door.openMe();
          }
        }
        break;
      }
    }
  }
}

Вся система ограничена лишь вашей фантазией и при минимальных знаниях вы можете создавать какие угодно инстансы с любыми сценариями и событиями. Все в ваших руках!
 
Last edited:
Скрипт не нужен ибо есть АИшка.

XML:
    <ai_params>
      <set name="transformChance" value="10"/>
      <set name="transformOnDead" value="21378"/>
      <set name="transformSpawnAmount" value="5"/>
      <set name="transformSpawnRndRadius" value="120"/>
    </ai_params>
Пример использования в xml инстов можно?
А то сделал подобное, и что-то подсказывает мне что я не прав
Code:
<spawn mobId="19230" type="point">
                <ai_params>
                    <set name="transformChance" value="100"/>
                    <set name="transformOnDead" value="19229"/>
                    <set name="transformSpawnAmount" value="5"/>
                    <set name="transformSpawnRndRadius" value="120"/>
                </ai_params>
                <coords loc="-110281 22041 -10576"/>
            </spawn>
 
Пример использования в xml инстов можно?
А то сделал подобное, и что-то подсказывает мне что я не прав
Code:
<spawn mobId="19230" type="point">
                <ai_params>
                    <set name="transformChance" value="100"/>
                    <set name="transformOnDead" value="19229"/>
                    <set name="transformSpawnAmount" value="5"/>
                    <set name="transformSpawnRndRadius" value="120"/>
                </ai_params>
                <coords loc="-110281 22041 -10576"/>
            </spawn>
Ну такого я ещё не встречал никогда:D:D:D:D:D
Эту аишку нужно вставить в НПЦ.
1673693940585.png
 
Заметил еще такую вещь:

При убийстве финального босса из примера не дает эксп.
В чем может быть проблема?
 
Заметил еще такую вещь:

При убийстве финального босса из примера не дает эксп.
В чем может быть проблема?
В нпц мб эксп не прописан, или разница в лвл большая
 
1 моб который дает эксп (Скрины 1 -2) <set name="type" value="EventReflectionMob"/>

Code:
<npc id="41009" name="Veridan" title="">
    <set name="aggroRange" value="250"/>
    <set name="ai_type" value="Fighter"/>
    <set name="baseAtkRange" value="40"/>
    <set name="baseCON" value="57"/>
    <set name="baseCritRate" value="40"/>
    <set name="baseDEX" value="73"/>
    <set name="baseHpMax" value="49000.185"/>
    <set name="baseHpRate" value="1"/>
    <set name="baseHpReg" value="23.504"/>
    <set name="baseINT" value="76"/>
    <set name="baseMAtk" value="10"/>
    <set name="baseMAtkSpd" value="3819"/>
    <set name="baseMDef" value="247"/>
    <set name="baseMEN" value="80"/>
    <set name="baseMpMax" value="358.32"/>
    <set name="baseMpReg" value="1.8"/>
    <set name="basePAtk" value="387"/>
    <set name="basePAtkSpd" value="253"/>
    <set name="basePDef" value="456"/>
    <set name="baseRunSpd" value="190"/>
    <set name="baseSTR" value="60"/>
    <set name="baseShldDef" value="0"/>
    <set name="baseShldRate" value="0"/>
    <set name="baseWIT" value="70"/>
    <set name="baseWalkSpd" value="53"/>
    <set name="collision_height" value="63.0"/>
    <set name="collision_radius" value="30.0"/>
    <set name="level" value="32"/>
    <set name="rewardExp" value="410000"/>
    <set name="rewardRp" value="456"/>
    <set name="rewardSp" value="35500"/>
    <set name="shots" value="NONE"/>
    <set name="texture" value=""/>
    <set name="type" value="EventReflectionMob"/>
    <set name="displayId" value="25881"/>
    <equip>
      <rhand item_id="6364"/>
      <!--Doom Dagger-->
    </equip>
    <skills>
      <skill id="4045" level="1"/>
      <!--Resist Full Magic Attack-->
      <skill id="4197" level="3"/>
      <!--Hold-->
      <skill id="4408" level="1"/>
      <!--HP Increase (1x)-->
      <skill id="4409" level="1"/>
      <!--MP Increase (1x)-->
      <skill id="4410" level="11"/>
      <!--Average P. Atk.-->
      <skill id="4411" level="11"/>
      <!--Average M. Atk.-->
      <skill id="4412" level="11"/>
      <!--Average P. Def.-->
      <skill id="4413" level="11"/>
      <!--Average M. Def.-->
      <skill id="4414" level="2"/>
      <!--Daggers-->
      <skill id="4416" level="9"/>
     </skills>
</npc>

2 тип моба (Не дает эксп скрины 3-4) Тип стоит ReflectionBoss
Code:
<npc id="41010" name="Zellaka" title="Raid Boss">
   <set name="aggroRange" value="0"/>
    <set name="ai_type" value="Fighter"/>
    <set name="baseAtkRange" value="40"/>
    <set name="baseCON" value="57"/>
    <set name="baseCritRate" value="40"/>
    <set name="baseDEX" value="73"/>
    <set name="baseHpMax" value="49000.185"/>
    <set name="baseHpRate" value="1"/>
    <set name="baseHpReg" value="23.504"/>
    <set name="baseINT" value="76"/>
    <set name="baseMAtk" value="10"/>
    <set name="baseMAtkSpd" value="3819"/>
    <set name="baseMDef" value="247"/>
    <set name="baseMEN" value="80"/>
    <set name="baseMpMax" value="358.32"/>
    <set name="baseMpReg" value="1.8"/>
    <set name="basePAtk" value="387"/>
    <set name="basePAtkSpd" value="253"/>
    <set name="basePDef" value="456"/>
    <set name="baseRunSpd" value="190"/>
    <set name="baseSTR" value="60"/>
    <set name="baseShldDef" value="0"/>
    <set name="baseShldRate" value="0"/>
    <set name="baseWIT" value="70"/>
    <set name="baseWalkSpd" value="53"/>
    <set name="collision_height" value="63.0"/>
    <set name="collision_radius" value="30.0"/>
    <set name="level" value="32"/>
    <set name="rewardExp" value="410000"/>
    <set name="rewardRp" value="456"/>
    <set name="rewardSp" value="35500"/>
    <set name="shots" value="NONE"/>
    <set name="texture" value=""/>
    <set name="displayId" value="25882"/>
    <set name="type" value="ReflectionBoss"/>
    <skills>
      <skill id="4408" level="1"/>
      <!--HP Increase (1x)-->
      <skill id="4409" level="1"/>
      <!--MP Increase (1x)-->
      <skill id="4410" level="11"/>
      <!--Average P. Atk.-->
      <skill id="4411" level="11"/>
      <!--Average M. Atk.-->
      <skill id="4412" level="11"/>
      <!--Average P. Def.-->
      <skill id="4413" level="11"/>
      <!--Average M. Def.-->
      <skill id="4414" level="2"/>
      <!--Standard Type-->
      <skill id="4415" level="3"/>
      <!--One-handed Sword-->
      <skill id="4045" level="1"/>
      <!--Resist Full Magic Attack-->
      <skill id="4416" level="9"/>
      <skill id="4494" level="1"/>
      <!--Raid Boss-->
      <skill id="4722" level="3"/>
      <!--BOSS Strike-->
      <skill id="5025" level="1"/>
      <!--Raid Boss - Level 30-->
    </skills>
    <attributes>
      <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"/>
      <defence attribute="unholy" value="0"/>
    </attributes>
    <rewardlist type="RATED_GROUPED">
      <group chance="60.65">
        <reward item_id="395" min="1" max="1" chance="32.8894"/>
        <reward item_id="417" min="4" max="12" chance="6.5657"/>
        <reward item_id="1942" min="53" max="157" chance="13.7404"/>
        <reward item_id="1943" min="24" max="72" chance="46.8045"/>
      </group>
      <group chance="61.6941">
        <reward item_id="224" min="1" max="1" chance="7.7671"/>
        <reward item_id="1660" min="1" max="1" chance="7.7671"/>
        <reward item_id="2038" min="4" max="12" chance="55.0864"/>
        <reward item_id="2044" min="8" max="22" chance="29.3794"/>
      </group>
      <group chance="75.9788">
        <reward item_id="4553" min="1" max="3" chance="43.9024"/>
        <reward item_id="4554" min="2" max="4" chance="29.2683"/>
        <reward item_id="4555" min="2" max="6" chance="21.9512"/>
        <reward item_id="6575" min="1" max="1" chance="4.8781"/>
      </group>
    </rewardlist>
  </npc>

У обоих одинаковые статы и награда в экспе и сп
 

Attachments

  • 1 тип Моб Жив.jpg
    1 тип Моб Жив.jpg
    590.4 KB · Views: 73
  • 1 тип Моб мертв.jpg
    1 тип Моб мертв.jpg
    581.2 KB · Views: 72
  • 2 тип РБ Жив.jpg
    2 тип РБ Жив.jpg
    483 KB · Views: 63
  • 2 тип РБ мертв.jpg
    2 тип РБ мертв.jpg
    475.3 KB · Views: 72
Почему просто рейдбосс не поставить
Тогда не закроется инста. Это ласт РБ
Ошибку в гс не выдаёт? Разве есть такой тип нпс?
Тип РБ брал из примера. ГС не ругается
Code:
<npc id="25659" name="Death Lord" title="Dimensional Boss">
        <set name="aggroRange" value="0"/>
        <set name="ai_type" value="Fighter"/>
        <set name="baseAtkRange" value="40"/>
        <set name="baseCON" value="57"/>
        <set name="baseCritRate" value="40"/>
        <set name="baseDEX" value="73"/>
        <set name="baseHpMax" value="794874.503"/>
        <set name="baseHpRate" value="1"/>
        <set name="baseHpReg" value="308.041"/>
        <set name="baseINT" value="76"/>
        <set name="baseMAtk" value="6133"/>
        <set name="baseMAtkSpd" value="1972"/>
        <set name="baseMDef" value="851"/>
        <set name="baseMEN" value="80"/>
        <set name="baseMpMax" value="1507.8"/>
        <set name="baseMpReg" value="3"/>
        <set name="basePAtk" value="9568"/>
        <set name="basePAtkSpd" value="253"/>
        <set name="basePDef" value="1571"/>
        <set name="baseRunSpd" value="190"/>
        <set name="baseSTR" value="60"/>
        <set name="baseShldDef" value="0"/>
        <set name="baseShldRate" value="0"/>
        <set name="baseWIT" value="70"/>
        <set name="baseWalkSpd" value="40"/>
        <set name="collision_height" value="61.5"/>
        <set name="collision_radius" value="31.0"/>
        <set name="level" value="75"/>
        <set name="rewardExp" value="2238750"/>
        <set name="rewardRp" value="3172"/>
        <set name="rewardSp" value="1054472"/>
        <set name="shots" value="NONE"/>
        <set name="texture" value=""/>
        <set name="type" value="ReflectionBoss"/>
        <set name="displayId" value="25276"/>
        <equip>
            <rhand item_id="78"/>
            <!--Great Sword-->
        </equip>
        <skills>
            <skill id="4045" level="1"/>
            <!--Resist Full Magic Attack-->
            <skill id="4168" level="8"/>
            <!--BOSS Strike-->
            <skill id="4172" level="8"/>
            <!--Stun-->
            <skill id="4176" level="8"/>
            <!--BOSS Reflect Damage-->
            <skill id="4177" level="8"/>
            <!--BOSS Cancel Magic-->
            <skill id="4273" level="3"/>
            <!--Resist Daggers/Rapier Weapon-->
            <skill id="4274" level="1"/>
            <!--Blunt Weapon Weak Point-->
            <skill id="4275" level="2"/>
            <!--Sacred Attack Weak Point-->
            <skill id="4278" level="1"/>
            <!--Dark Attack-->
            <skill id="4408" level="1"/>
            <!--HP Increase (1x)-->
            <skill id="4409" level="1"/>
            <!--MP Increase (1x)-->
            <skill id="4410" level="11"/>
            <!--Average P. Atk.-->
            <skill id="4411" level="11"/>
            <!--Average M. Atk.-->
            <skill id="4412" level="11"/>
            <!--Average P. Def.-->
            <skill id="4413" level="11"/>
            <!--Average M. Def.-->
            <skill id="4414" level="2"/>
            <!--Standard Type-->
            <skill id="4415" level="3"/>
            <!--One-handed Sword-->
            <skill id="4416" level="1"/>
            <!--Undead-->
            <skill id="4494" level="1"/>
            <!--Raid Boss-->
            <skill id="4892" level="1"/>
            <!--Raid Boss - Level 75-->
        </skills>
        <attributes>
            <attack attribute="unholy" value="0"/>
            <defence attribute="fire" value="0"/>
            <defence attribute="water" value="0"/>
            <defence attribute="wind" value="0"/>
            <defence attribute="earth" value="0"/>
            <defence attribute="unholy" value="0"/>
        </attributes>
        <rewardlist type="RATED_GROUPED">
            <group chance="99.0625">
                <reward item_id="6726" min="1" max="1" chance="2.5079"/>
                <reward item_id="6725" min="1" max="1" chance="5.0157"/>
                <reward item_id="6724" min="1" max="1" chance="3.3483"/>
                <reward item_id="6700" min="14" max="42" chance="26.4848"/>
                <reward item_id="6699" min="40" max="120" chance="16.8767"/>
                <reward item_id="6698" min="81" max="243" chance="7.5107"/>
                <reward item_id="6696" min="4" max="12" chance="38.2559"/>
            </group>
            <group chance="28.9819">
                <reward item_id="6688" min="8" max="22" chance="68.6486"/>
                <reward item_id="6372" min="1" max="1" chance="1.9525"/>
                <reward item_id="6364" min="1" max="1" chance="1.9525"/>
                <reward item_id="6578" min="1" max="1" chance="27.4464"/>
            </group>
            <group chance="89.4876">
                <reward item_id="3936" min="1" max="1" chance="100.0"/>
            </group>
        </rewardlist>
    </npc>




UPD: Вообще не идет эксп с любых РБ О_о
 

Attachments

  • Безымянный.jpg
    Безымянный.jpg
    231.7 KB · Views: 27
Last edited:
Тогда не закроется инста. Это ласт РБ

Редактируешь список нпц в клиенте, добавляешь его руками в сборку и никаких матов




UPD: Вообще не идет эксп с любых РБ О_о
Поставь дефолт конфиги с репы, свои сохрани в другую папку. Если там все ок оо смотри через winmerge например разницу
 
<party min="2" max="6"/>
Парни, подскажите пожалуйста, если кол-во человек выставляется больше одного, то то пати залетает по ПЛу (проверка идёт на наличие предмета только у него) или у каждого кто в пати должен быть итем?
Я пока только подобрался к этому вопросу, не судите строго

И ещё такой момент, если мне нужно сделать инстанс доступным для всех (всего мира) по предмету, но как сделать чтобы могло в один инстанс залетать много разных игроков, чтобы он имел формат локации со своими пвп зонами и тд, это можно сделать? или всё ограниченно кол-вом инстанс и кол-вом человек в пати
 
Last edited:
Если включен параметр:
<param name="hwidLimit" value="true"/>

То как должен сбрасывать инстанс скрипт на сброс отката.
Сейчас стоит вот так:
player.removeInstanceReusesByGroupId(4);
Но не сбрасывает по HWID
 
Если включен параметр:
<param name="hwidLimit" value="true"/>

То как должен сбрасывать инстанс скрипт на сброс отката.
Сейчас стоит вот так:

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

Как вариант дописать в скрипт сброс каждого инстанса по ид.
 
public void setReuse(Player var1, int var2, long var3) {
this.setReuse(var1.getObjectId(), var2, var3);
InstantZone var5 = InstantZoneHolder.getInstance().getInstantZone(var2);
String var6;
if (var5 != null && var5.isHwidLimited() && var1.getNetConnection() != null && (var6 = var1.getNetConnection().getHwid()) != null && !StringUtils.isBlank(var6)) {
this.setHwidReuse(var2, var6, var3);
}

}
 
Back
Top