Написание сервера для lineage 2 chronicle 1 на node.js

Прикручивайте как дело дойдет до аи, от птс)))))
 

Какой смысл прикручивать ай? Если для начала нужно разобраться с геодвигом и мувингом. После этого смотреть в скилл двиг, всё взаимодействует между собой и в самом конце только заниматься ай, который и квесты и не только содержит
 
Какой смысл прикручивать ай? Если для начала нужно разобраться с геодвигом и мувингом. После этого смотреть в скилл двиг, всё взаимодействует между собой и в самом конце только заниматься ай, который и квесты и не только содержит
Так я и написал как дойдет дело до аи, я не говорил сейчас, чуть внимательнее!
 
Скрипты, мувинг, система акторов с таймерами и машиной состояний, система скиллов (эффекты, скоуп, кондишны, визуал-эффекты и тд), это и есть база, сам движок.

Я спросил про скрипты, чтобы увидеть серьзность намерений автора. Про гео/мувинг давно все ясно - это автор не реализует. Наивно думать, что если за 10 лет в L2J никто не смог гео-двиг запилить нормальный, то тут удастся. Соответственно, если у нет представления, что со всем этим контентов ввиде скриптов (АИ и остальных) делать - ничего не взлетит :)

P.S. подскажи как понять на сервере, что персонаж атаковал цель. Сейчас я меняю флаг сразу при получении пакета RequestAttack.
Таймер же. Есть base attack speed /attack speed multiplier. Они показывают, через сколько фактически произойдет удар. Эти данные высылаются клиенту, чтобы синхронизировать скорость атаки в клиенте и "скорость" на сервере.
 
Я спросил про скрипты, чтобы увидеть серьзность намерений автора. Про гео/мувинг давно все ясно - это автор не реализует. Наивно думать, что если за 10 лет в L2J никто не смог гео-двиг запилить нормальный, то тут удастся. Если у нет представления, что со всем этим Г делать - ничего не взлетит :)
Я бы так не говорил, на не публичных форках давно перепиленные данные механики и не только. Просто в паблике такого нету, а у кого есть он не будет делиться.
 
Кстати, автор, когда захочешь квесты, могу скинуть вехи на +-90% готовые под ИЛ в основном.

P.S. Когда-то юзал одного бота, и он спокойно работал на всех защитах этих АС, СГ, Стрикс, для автоквестов пришлось сделать вехи.
Оставил себе на случай если когда-то придет в голову сделать автоквесты на серваке л2, чтоб персонаж как бот, сам выполнял квесты и бегал по нужным траекториям к NPC и не врезался ни в какие препятствия (что-то похожее нынче делают в мобильных версиях игры).

В принципе это для таких извращений подойдет возможно)
 
Как вернуть состояние чара из атаки в обычное?

Я перерыл 3 java сборки но так и не нашёл ответа) после удара у меня чар находится в состоянии атаки. В java есть константа STATE_IDLE но я не нашёл пакет, в который она передаётся. В пакете userInfo или statusupdate нет ничего подобного. Пакет ActionFailed тоже не дал результата
 
Как вернуть состояние чара из атаки в обычное?

Я перерыл 3 java сборки но так и не нашёл ответа) после удара у меня чар находится в состоянии атаки. В java есть константа STATE_IDLE но я не нашёл пакет, в который она передаётся. В пакете userInfo или statusupdate нет ничего подобного. Пакет ActionFailed тоже не дал результата
Предположу в пакете charinfo или userinfo есть что то типо isCombat, может еще какие attack* пакеты
 
C++:
    ServerToClientPacket_AutoAttackStart = 59,                 
    ServerToClientPacket_AutoAttackStop = 60,
Вместе с isCombat в charinfo/userinfo
 
C++:
    ServerToClientPacket_AutoAttackStart = 59,                
    ServerToClientPacket_AutoAttackStop = 60,
Вместе с isCombat в charinfo/userinfo
Вот пакет из явы
там я не вижу что-то похожее на isCombat
 
Java:
public void updatePvPStatus()
    {
        if (getPvpFlag() == 0) startPvPFlag();
        if (getPvpFlag() != 0) setlastPvpAttack (System.currentTimeMillis()); //update last pvp ATTACK controller
    }

writeD(_cha.getPvpFlag()); // 0-non-pvp 1-pvp = violett name
 
Java:
public void updatePvPStatus()
    {
        if (getPvpFlag() == 0) startPvPFlag();
        if (getPvpFlag() != 0) setlastPvpAttack (System.currentTimeMillis()); //update last pvp ATTACK controller
    }

writeD(_cha.getPvpFlag()); // 0-non-pvp 1-pvp = violett name

Это только за флаг отвечает) и никак не меняет состояния чара в атаке.
 
Я наверное просто так скинул? В котором идёт дальше задача, которая это всё проверяет и ставит флаги
 
Как вернуть состояние чара из атаки в обычное?

Я перерыл 3 java сборки но так и не нашёл ответа) после удара у меня чар находится в состоянии атаки. В java есть константа STATE_IDLE но я не нашёл пакет, в который она передаётся. В пакете userInfo или statusupdate нет ничего подобного. Пакет ActionFailed тоже не дал результата
Java:
public class AutoAttackStop extends L2GameServerPacket
{
    private final int _targetObjId;
    
    /**
     * @param targetObjId
     */
    public AutoAttackStop(int targetObjId)
    {
        _targetObjId = targetObjId;
    }
    
    @Override
    protected final void writeImpl()
    {
        writeC(0x26);//HF
        writeD(_targetObjId);
    }
}
 
Вы не путаете тут пвп флаг и состояние атаки (когда чар или нпс занимают боевую позицию)?
Для состояния атаки передать надо флаг + выслать пакеты которые я упомянул выше.

Что это за цифры такие?)
ИД пакетов для С1 протокола
 
вот структура пакета charinfo из c4 где присутствует переменная isInFight, как там в С1 я не знаю
Код:
03=CharInfo:
    d(X)
    d(Y)
    d(Z)
    d(Heading)
    d(ObjectID)
    s(Name)
    d(Race)
    d(Sex)
    d(ClassID:Get.ClassID)
    d(DHair)
    d(Head:Get.Func01)
    d(RHand:Get.Func01)
    d(LHand:Get.Func01)
    d(Gloves:Get.Func01)
    d(Chest:Get.Func01)
    d(Legs:Get.Func01)
    d(Feet:Get.Func01)
    d(Back:Get.Func01)
    d(LRHand:Get.Func01)
    d(Hair:Get.Func01)
    d(PvpFlag)
    d(Karma)
    d(MSpeed)
    d(PSpeed)
    d(PvpFlag)
    d(Karma)
    d(runSpd)
    d(walkSpd)
    d(swimRSpd)
    d(swimWSpd)
    d(flRunSpd)
    d(flWalkSpd)
    d(flyRSpd)
    d(flyWSpd)
    f(SpdMul)
    f(ASpdMul)
    f(collisRadius)
    f(collisHeight)
    d(HairStyle)
    d(HairColor)
    d(Face)
    s(Title)
    d(clanID)
    d(clanCrest)
    d(allyID)
    d(allyCrest)
    d(siegeFlag)
    c(isStand)
    c(isRun)
    c(isInFight)
    c(isAlikeDead)
    c(Invis)
    c(Mount)
    c(shop)
    h(cubics:For.0001)
        h(cubID)
    c(findparty)
    d(abnEffects)
    c(RecomLeft)
    h(RecomHave)
    d(classID:Get.ClassID)
    d(maxCP)
    d(curCP)
    c(isMounted)
    c(Team)
    d(clanBigCrestId)
    c(isNoble)
    c(isHero)
    c(isFishing)
    d(fishX)
    d(fishY)
    d(fishZ)
    d(NameColor:Get.FCol)
    c(isRun)
    d(d)
    d(PItem)
    d(PledgeClass)
    d(?PledgeColor:Get.FCol)
    d(TitleColor:Get.FCol)
    d(Cursed)
 
NCSoft как будто бы специально писал код, чтобы проще эмули было делать. Правило одно - в 90% случаев новые параметры в пакетах добавляются в конец. С4 пакеты в большинстве своем обратно совместимы с пакетами С1 (так как новые параметры добавлены в конец, С1 просто игнорирует их и читает те что ему известны). isInFight тут на своем месте.

Все это С2+. Все что перед этим - С1
C++:
    c(RecomLeft)
    h(RecomHave)
    d(classID:Get.ClassID)
    d(maxCP)
    d(curCP)
    c(isMounted)
    c(Team)
    d(clanBigCrestId)
    c(isNoble)
    c(isHero)
    c(isFishing)
    d(fishX)
    d(fishY)
    d(fishZ)
    d(NameColor:Get.FCol)
    c(isRun)
    d(d)
    d(PItem)
    d(PledgeClass)
    d(?PledgeColor:Get.FCol)
    d(TitleColor:Get.FCol)
    d(Cursed)
 
вот структура пакета charinfo из c4 где присутствует переменная isInFight, как там в С1 я не знаю
Код:
03=CharInfo:
    d(X)
    d(Y)
    d(Z)
    d(Heading)
    d(ObjectID)
    s(Name)
    d(Race)
    d(Sex)
    d(ClassID:Get.ClassID)
    d(DHair)
    d(Head:Get.Func01)
    d(RHand:Get.Func01)
    d(LHand:Get.Func01)
    d(Gloves:Get.Func01)
    d(Chest:Get.Func01)
    d(Legs:Get.Func01)
    d(Feet:Get.Func01)
    d(Back:Get.Func01)
    d(LRHand:Get.Func01)
    d(Hair:Get.Func01)
    d(PvpFlag)
    d(Karma)
    d(MSpeed)
    d(PSpeed)
    d(PvpFlag)
    d(Karma)
    d(runSpd)
    d(walkSpd)
    d(swimRSpd)
    d(swimWSpd)
    d(flRunSpd)
    d(flWalkSpd)
    d(flyRSpd)
    d(flyWSpd)
    f(SpdMul)
    f(ASpdMul)
    f(collisRadius)
    f(collisHeight)
    d(HairStyle)
    d(HairColor)
    d(Face)
    s(Title)
    d(clanID)
    d(clanCrest)
    d(allyID)
    d(allyCrest)
    d(siegeFlag)
    c(isStand)
    c(isRun)
    c(isInFight)
    c(isAlikeDead)
    c(Invis)
    c(Mount)
    c(shop)
    h(cubics:For.0001)
        h(cubID)
    c(findparty)
    d(abnEffects)
    c(RecomLeft)
    h(RecomHave)
    d(classID:Get.ClassID)
    d(maxCP)
    d(curCP)
    c(isMounted)
    c(Team)
    d(clanBigCrestId)
    c(isNoble)
    c(isHero)
    c(isFishing)
    d(fishX)
    d(fishY)
    d(fishZ)
    d(NameColor:Get.FCol)
    c(isRun)
    d(d)
    d(PItem)
    d(PledgeClass)
    d(?PledgeColor:Get.FCol)
    d(TitleColor:Get.FCol)
    d(Cursed)
А выше скидывал пакет. Там нет такого. Откуда эти данные ?
 
Назад
Сверху Снизу