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

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

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

Chipercu

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

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


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

Вложения

  • S_EX_SERVER_PRIMITIVE.zip
    5,5 КБ · Просмотры: 44
а вот за такое прям БОЛЬШОЕ СПАСИБО!
 
Не найдется ли у вас еще реализация этих пакетов?

какую то доп логику как выше не надо, просто интересно какие данные нужно подсовывать, и что они делают
с радаром могу предположить что это то же самое что RadarControl
 

Вложения

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

Вложения

  • packets.zip
    1,7 КБ · Просмотры: 23
Спасибо! меня в 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());
        }
    }
}
 
Спасибо, ExServerPrimitive тоже думал что только перезапуск клиента помогает) оказалось достаточно сделать тп в какой то другой квадрат и обратно
// толщина линии - прям заинтересовал этот параметр) вечером буду тестить)
 
можно к примеру просто послать повторно пакет с тем же именем что рисовал до этого, с цветом 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
 
Последнее редактирование:
Ну вот круто же) а говорят проброс адены хватает.
Я уверен что этой фичи можно еще много разных применений придумать)