Копаюсь в исходниках Brawery и увидел реализацию пакета ExServerPrimitive, в l2open нет реализации(что в шаре точно нет) Решил использовать его для отрисовки пути при дебаге геодижка,
получилось по интереснее чем просто таргетные точки
Посмотреть вложение 79497
Знаю людей, которые юзают более удобную версию пакета, с дедупликацией линий и чутка большим выбором геометрических фигур)Знаю людей, которые аденой себе рисуют) и никакие им приятности не нужны
а вот за такое прям БОЛЬШОЕ СПАСИБО!Знаю людей, которые юзают более удобную версию пакета, с дедупликацией линий и чутка большим выбором геометрических фигур)
Не найдется ли у вас еще реализация этих пакетов?Знаю людей, которые юзают более удобную версию пакета, с дедупликацией линий и чутка большим выбором геометрических фигур)
Спасибо! меня в showRadar смутило что там структура была указана ddddd , в вашей реализации вижу что он отправляет так же как и Delete - 3 координатыChipercu,
ExShowLines нет реализации и я не нашел ее в ПТС
Во вложении S_SHOW_RADAR, S_DELETE_RADAR, S_RADAR_CONTROL и енамы к нему.
Спасибо! меня в showRadar смутило что там структура была указана ddddd , в вашей реализации вижу что он отправляет так же как и Delete - 3 координаты
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;
}
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 нет реализации и я не нашел ее в ПТС
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);
}
}
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 тоже думал что только перезапуск клиента помогает) оказалось достаточно сделать тп в какой то другой квадрат и обратнону формально оно реализовано, но в немного поломанном виде - линии то пакетом нарисовать можно, но не убрать - они так и будут показываться даже после перезахода в игру. помогает только полный перезапуск клиента.
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); } }
можно к примеру просто послать повторно пакет с тем же именем что рисовал до этого, с цветом 0 и с одной точкой (например текущими координатами), чтобы убрать нарисованное ранее.Спасибо, ExServerPrimitive тоже думал что только перезапуск клиента помогает) оказалось достаточно сделать тп в какой то другой квадрат и обратно
Вот блин) а я пытался отправить тем же именем только координаты в 0 ставил)) не работаломожно к примеру просто послать повторно пакет с тем же именем что рисовал до этого, с цветом 0 и с одной точкой (например текущими координатами), чтобы убрать нарисованное ранее.
Вот тоже подумал вечером реализовать прорисовку зон, спавнов, маршрутов по которым нпс-ы бегают, с возможностью редактировать прям в клиенте. Странно что существуют такие удобные пакеты, и ни в одной шарной сборке до сих пор нет такого функционала(видимо разрабы только под себя что то такое пилят), вроде нет ничего сверх сложного в реализации , а многим админам это сэкономило бы кучу времени)Я у себя этот пакет юзаю для визуального рисования новых зон и территорий спавнов, с последующим скидыванием нарисованного в файл.
Ну и просто для визуализации уже имеющихся зон/спавнов.
Про прикручивание к прорисовке путей тоже думал, но пока особо сильных потребностей не было в этом.
В acis реализовано уже как года 2)Вот тоже подумал вечером реализовать прорисовку зон, спавнов, маршрутов по которым нпс-ы бегают, с возможностью редактировать прям в клиенте. Странно что существуют такие удобные пакеты, и ни в одной шарной сборке до сих пор нет такого функционала(видимо разрабы только под себя что то такое пилят), вроде нет ничего сверх сложного в реализации , а многим админам это сэкономило бы кучу времени)
О, я тоже так рисую)Я у себя этот пакет юзаю для визуального рисования новых зон и территорий спавнов, с последующим скидыванием нарисованного в файл.
Ну и просто для визуализации уже имеющихся зон/спавнов.
Про прикручивание к прорисовке путей тоже думал, но пока особо сильных потребностей не было в этом.
Ну вот круто же) а говорят проброс адены хватает.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?