• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Прорисовка прохождения пути 2024-11-20

Нет прав для скачивания

Chipercu

Выдающийся
Местный
Сообщения
66
Розыгрыши
0
Репутация
168
Реакции
71
Баллы
1 353
Chipercu добавил(а) новый ресурс:

Прорисовка прохождения пути - Прорисовка прохождения пути

Копаюсь в исходниках Brawery и увидел реализацию пакета ExServerPrimitive, в l2open нет реализации(что в шаре точно нет) Решил использовать его для отрисовки пути при дебаге геодижка,
получилось по интереснее чем просто таргетные точки
Посмотреть вложение 79497

Узнать больше об этом ресурсе...
 

Знаю людей, которые аденой себе рисуют) и никакие им приятности не нужны
 
  • Мне нравится
Реакции: raz
Знаю людей которым ваще ничего не надо , вроде норм живут, правда зимой жалуются мол холодно даже под теплотрассой
 
  • Facepalm
Реакции: raz
Знаю людей, которые аденой себе рисуют) и никакие им приятности не нужны
Знаю людей, которые юзают более удобную версию пакета, с дедупликацией линий и чутка большим выбором геометрических фигур)
 

Вложения

Знаю людей, которые юзают более удобную версию пакета, с дедупликацией линий и чутка большим выбором геометрических фигур)
а вот за такое прям БОЛЬШОЕ СПАСИБО!
 
Знаю людей, которые юзают более удобную версию пакета, с дедупликацией линий и чутка большим выбором геометрических фигур)
Не найдется ли у вас еще реализация этих пакетов?
1732177524167.png 1732177559912.png 1732177598680.png
какую то доп логику как выше не надо, просто интересно какие данные нужно подсовывать, и что они делают
с радаром могу предположить что это то же самое что RadarControl
 

Вложения

  • 1732177487667.webp
    1732177487667.webp
    4,9 КБ · Просмотры: 31
@Chipercu,
ExShowLines нет реализации и я не нашел ее в ПТС
Во вложении S_SHOW_RADAR, S_DELETE_RADAR, S_RADAR_CONTROL и енамы к нему.
 

Вложения

@Chipercu,
ExShowLines нет реализации и я не нашел ее в ПТС
Во вложении S_SHOW_RADAR, S_DELETE_RADAR, S_RADAR_CONTROL и енамы к нему.
Спасибо! меня в showRadar смутило что там структура была указана ddddd , в вашей реализации вижу что он отправляет так же как и Delete - 3 координаты
 
Спасибо! меня в showRadar смутило что там структура была указана ddddd , в вашей реализации вижу что он отправляет так же как и Delete - 3 координаты

v12->Send(v12, "cddd", 170i64, v9, v10, v11);

C++:
bool __fastcall BuilderCmd_show_radar(CUserSocket *pSocket, User *pUser, wchar_t *pBuf)
{
  int v3; // eax
  char v7; // di
  int i; // ebx
  unsigned int v9; // esi
  int v10; // edi
  int v11; // ebx
  CUserSocket *v12; // rax
  wchar_t string[256]; // [rsp+30h] [rbp-1A18h] BYREF
  wchar_t v15[256]; // [rsp+230h] [rbp-1818h] BYREF
  wchar_t v16[2816]; // [rsp+430h] [rbp-1618h] BYREF
  wchar_t *result; // [rsp+1A68h] [rbp+20h] BYREF

  memset(string, 0, (unsigned int)(v3 - 48));
  if ( pBuf )
  {
    result = 0i64;
    v7 = 1;
    for ( i = 0; i < 3; ++i )
    {
      pBuf = GetLeftString(pBuf, &result);
      if ( !result )
      {
        v7 = 0;
        break;
      }
      wcscpy_s(&string[256 * (__int64)i], 0x100ui64, result);
    }
    while ( i < 3 )
    {
      if ( !v7 )
        goto LABEL_14;
      pBuf = GetLeftString(pBuf, &result);
      if ( !result )
      {
        v7 = 1;
        break;
      }
      wcscpy_s(&string[256 * (__int64)i++], 0x100ui64, result);
    }
    if ( !v7 )
    {
LABEL_14:
      pSocket->SendSystemMessage(pSocket, L"SYS", L"//show_radar x y z");
      return 0;
    }
    v9 = wtol(string);
    v10 = wtol(v15);
    v11 = wtol(v16);
    v12 = pUser->GetSocket(pUser);
    v12->Send(v12, "cddd", 170i64, v9, v10, v11);
  }
  return 0;
}
И аналогично удаление.
C++:
bool __fastcall BuilderCmd_del_radar(CUserSocket *pSocket, User *pUser, wchar_t *pBuf)
{
  int v3; // eax
  char v7; // di
  int i; // ebx
  unsigned int v9; // esi
  int v10; // edi
  int v11; // ebx
  CUserSocket *v12; // rax
  wchar_t string[256]; // [rsp+30h] [rbp-1A18h] BYREF
  wchar_t v15[256]; // [rsp+230h] [rbp-1818h] BYREF
  wchar_t v16[2816]; // [rsp+430h] [rbp-1618h] BYREF
  wchar_t *result; // [rsp+1A68h] [rbp+20h] BYREF

  memset(string, 0, (unsigned int)(v3 - 48));
  if ( pBuf )
  {
    result = 0i64;
    v7 = 1;
    for ( i = 0; i < 3; ++i )
    {
      pBuf = GetLeftString(pBuf, &result);
      if ( !result )
      {
        v7 = 0;
        break;
      }
      wcscpy_s(&string[256 * (__int64)i], 0x100ui64, result);
    }
    while ( i < 3 )
    {
      if ( !v7 )
        goto LABEL_14;
      pBuf = GetLeftString(pBuf, &result);
      if ( !result )
      {
        v7 = 1;
        break;
      }
      wcscpy_s(&string[256 * (__int64)i++], 0x100ui64, result);
    }
    if ( !v7 )
    {
LABEL_14:
      pSocket->SendSystemMessage(pSocket, L"SYS", L"//del_radar x y z");
      return 0;
    }
    v9 = wtol(string);
    v10 = wtol(v15);
    v11 = wtol(v16);
    v12 = pUser->GetSocket(pUser);
    v12->Send(v12, "cddd", 184i64, v9, v10, v11);
  }
  return 0;
}
 
ExShowLines нет реализации и я не нашел ее в ПТС
ну формально оно реализовано, но в немного поломанном виде - линии то пакетом нарисовать можно, но не убрать - они так и будут показываться даже после перезахода в игру. помогает только полный перезапуск клиента.
Java:
package l2p.gameserver.network.s2c.debug;

import java.util.ArrayList;
import java.util.List;

import l2p.commons.geometry.Point3D;
import l2p.gameserver.model.Player;
import l2p.gameserver.network.components.ServerPackets;
import l2p.gameserver.network.s2c.L2GameServerPacket;

public class ExShowLines extends L2GameServerPacket
{
    private int _objId, _depth;
    private int[] _color;
    private List<Point3D> _points = new ArrayList<>();

    public ExShowLines(Player player, int depth, int[] color)
    {
        _objId = player.getObjectId();
        _depth = depth;
        _color = color;
    }

    public void addPoint(Point3D point)
    {
        _points.add(point);
    }

    public void addPoint(int x, int y, int z)
    {
        _points.add(new Point3D(x, y, z));
    }

    @Override
    protected void writeImpl()
    {
        writeId(ServerPackets.EX_SHOW_LINES);
        writeH(_points.size()); // количество точек
        writeD(_depth); // толщина линии
        writeC(_color[0]); // цвет линии (R)
        writeC(_color[1]); // цвет линии (G)
        writeC(_color[2]); // цвет линии (B)

        for (Point3D point : _points)
        {
            writeD(point.getX());
            writeD(point.getY());
            writeD(point.getZ());
        }

        writeD(_objId);
    }
}

Из рисовалок еще есть EX_SHOW_TERRITORY, но тоже достаточно коряво работающее
Java:
package l2p.gameserver.network.s2c.debug;

import java.util.List;

import l2p.commons.geometry.Point2D;
import l2p.gameserver.network.components.ServerPackets;
import l2p.gameserver.network.s2c.L2GameServerPacket;

public class ExShowTerritory extends L2GameServerPacket
{
    private int _maxZ, _minZ;
    private List<Point2D> _points;

    public ExShowTerritory(List<Point2D> points, int maxZ, int minZ)
    {
        _points = points;
        _maxZ = maxZ;
        _minZ = minZ;
    }

    @Override
    protected void writeImpl()
    {
        writeId(ServerPackets.EX_SHOW_TERRITORY);

        writeD(_points.size());
        writeD(_maxZ);
        writeD(_minZ);

        for (Point2D point : _points)
        {
            writeD(point.getX());
            writeD(point.getY());
        }
    }
}
 
ну формально оно реализовано, но в немного поломанном виде - линии то пакетом нарисовать можно, но не убрать - они так и будут показываться даже после перезахода в игру. помогает только полный перезапуск клиента.
Java:
package l2p.gameserver.network.s2c.debug;

import java.util.ArrayList;
import java.util.List;

import l2p.commons.geometry.Point3D;
import l2p.gameserver.model.Player;
import l2p.gameserver.network.components.ServerPackets;
import l2p.gameserver.network.s2c.L2GameServerPacket;

public class ExShowLines extends L2GameServerPacket
{
    private int _objId, _depth;
    private int[] _color;
    private List<Point3D> _points = new ArrayList<>();

    public ExShowLines(Player player, int depth, int[] color)
    {
        _objId = player.getObjectId();
        _depth = depth;
        _color = color;
    }

    public void addPoint(Point3D point)
    {
        _points.add(point);
    }

    public void addPoint(int x, int y, int z)
    {
        _points.add(new Point3D(x, y, z));
    }

    @Override
    protected void writeImpl()
    {
        writeId(ServerPackets.EX_SHOW_LINES);
        writeH(_points.size()); // количество точек
        writeD(_depth); // толщина линии
        writeC(_color[0]); // цвет линии (R)
        writeC(_color[1]); // цвет линии (G)
        writeC(_color[2]); // цвет линии (B)

        for (Point3D point : _points)
        {
            writeD(point.getX());
            writeD(point.getY());
            writeD(point.getZ());
        }

        writeD(_objId);
    }
}
Спасибо, ExServerPrimitive тоже думал что только перезапуск клиента помогает) оказалось достаточно сделать тп в какой то другой квадрат и обратно
// толщина линии - прям заинтересовал этот параметр) вечером буду тестить)
 
Спасибо, ExServerPrimitive тоже думал что только перезапуск клиента помогает) оказалось достаточно сделать тп в какой то другой квадрат и обратно
можно к примеру просто послать повторно пакет с тем же именем что рисовал до этого, с цветом 0 и с одной точкой (например текущими координатами), чтобы убрать нарисованное ранее.
 
можно к примеру просто послать повторно пакет с тем же именем что рисовал до этого, с цветом 0 и с одной точкой (например текущими координатами), чтобы убрать нарисованное ранее.
Вот блин) а я пытался отправить тем же именем только координаты в 0 ставил)) не работало
 
Я у себя этот пакет юзаю для визуального рисования новых зон и территорий спавнов, с последующим скидыванием нарисованного в файл.
Ну и просто для визуализации уже имеющихся зон/спавнов.
Про прикручивание к прорисовке путей тоже думал, но пока особо сильных потребностей не было в этом.
 
Я у себя этот пакет юзаю для визуального рисования новых зон и территорий спавнов, с последующим скидыванием нарисованного в файл.
Ну и просто для визуализации уже имеющихся зон/спавнов.
Про прикручивание к прорисовке путей тоже думал, но пока особо сильных потребностей не было в этом.
Вот тоже подумал вечером реализовать прорисовку зон, спавнов, маршрутов по которым нпс-ы бегают, с возможностью редактировать прям в клиенте. Странно что существуют такие удобные пакеты, и ни в одной шарной сборке до сих пор нет такого функционала(видимо разрабы только под себя что то такое пилят), вроде нет ничего сверх сложного в реализации , а многим админам это сэкономило бы кучу времени)
 
Вот тоже подумал вечером реализовать прорисовку зон, спавнов, маршрутов по которым нпс-ы бегают, с возможностью редактировать прям в клиенте. Странно что существуют такие удобные пакеты, и ни в одной шарной сборке до сих пор нет такого функционала(видимо разрабы только под себя что то такое пилят), вроде нет ничего сверх сложного в реализации , а многим админам это сэкономило бы кучу времени)
В acis реализовано уже как года 2)
 
Это interlude ( )
 
Я у себя этот пакет юзаю для визуального рисования новых зон и территорий спавнов, с последующим скидыванием нарисованного в файл.
Ну и просто для визуализации уже имеющихся зон/спавнов.
Про прикручивание к прорисовке путей тоже думал, но пока особо сильных потребностей не было в этом.
О, я тоже так рисую)
Посмотреть вложение Peek 2024-07-22 07-33.mp4
Посмотреть вложение 4358913770176966219.mp4
Посмотреть вложение Peek 2024-10-21 23-04.mp4
Посмотреть вложение 313554168565981771.mp4
Посмотреть вложение Peek 2024-10-16 13-12.mp4
 
Последнее редактирование:
Ну вот круто же) а говорят проброс адены хватает.
Я уверен что этой фичи можно еще много разных применений придумать)
 
Назад
Сверху Снизу