You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(18) |
Oct
(11) |
Nov
(9) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
|
Feb
(6) |
Mar
|
Apr
(10) |
May
(38) |
Jun
(15) |
Jul
(32) |
Aug
|
Sep
(17) |
Oct
(11) |
Nov
|
Dec
(14) |
2006 |
Jan
(2) |
Feb
(5) |
Mar
(3) |
Apr
(2) |
May
(3) |
Jun
(7) |
Jul
|
Aug
|
Sep
(3) |
Oct
(2) |
Nov
(6) |
Dec
(3) |
2007 |
Jan
|
Feb
(17) |
Mar
(5) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
(11) |
Feb
|
Mar
|
Apr
(4) |
May
|
Jun
(6) |
Jul
|
Aug
|
Sep
(6) |
Oct
(4) |
Nov
(1) |
Dec
|
2009 |
Jan
(3) |
Feb
(2) |
Mar
(4) |
Apr
|
May
(4) |
Jun
(3) |
Jul
|
Aug
(5) |
Sep
(3) |
Oct
(2) |
Nov
|
Dec
(6) |
2010 |
Jan
|
Feb
(6) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
(8) |
Aug
|
Sep
(2) |
Oct
(2) |
Nov
(4) |
Dec
(5) |
2013 |
Jan
(2) |
Feb
|
Mar
(2) |
Apr
(2) |
May
(1) |
Jun
(2) |
Jul
(2) |
Aug
(2) |
Sep
|
Oct
(2) |
Nov
(2) |
Dec
(2) |
2014 |
Jan
(3) |
Feb
(2) |
Mar
(3) |
Apr
(4) |
May
(4) |
Jun
(3) |
Jul
(4) |
Aug
(5) |
Sep
|
Oct
(2) |
Nov
(5) |
Dec
(2) |
2015 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
(10) |
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(4) |
Aug
(2) |
Sep
(2) |
Oct
(3) |
Nov
(4) |
Dec
(2) |
2017 |
Jan
(2) |
Feb
|
Mar
(2) |
Apr
(4) |
May
(2) |
Jun
(2) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
2018 |
Jan
(4) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
(2) |
Jun
(2) |
Jul
(8) |
Aug
(2) |
Sep
(2) |
Oct
(2) |
Nov
(4) |
Dec
(6) |
2019 |
Jan
(2) |
Feb
(2) |
Mar
(2) |
Apr
(4) |
May
(2) |
Jun
(3) |
Jul
(3) |
Aug
(2) |
Sep
(2) |
Oct
(13) |
Nov
(6) |
Dec
(4) |
2020 |
Jan
(7) |
Feb
(7) |
Mar
(7) |
Apr
(8) |
May
(5) |
Jun
(3) |
Jul
(10) |
Aug
(4) |
Sep
|
Oct
(37) |
Nov
(30) |
Dec
(8) |
2021 |
Jan
(14) |
Feb
(9) |
Mar
(7) |
Apr
(17) |
May
(3) |
Jun
(10) |
Jul
(7) |
Aug
(3) |
Sep
(3) |
Oct
(4) |
Nov
(15) |
Dec
(22) |
2022 |
Jan
(3) |
Feb
(3) |
Mar
(3) |
Apr
(3) |
May
(3) |
Jun
(3) |
Jul
(3) |
Aug
(5) |
Sep
(6) |
Oct
(4) |
Nov
(34) |
Dec
(17) |
2023 |
Jan
(3) |
Feb
(3) |
Mar
(29) |
Apr
(2) |
May
(18) |
Jun
(12) |
Jul
(12) |
Aug
(2) |
Sep
(7) |
Oct
(2) |
Nov
(2) |
Dec
(2) |
2024 |
Jan
(2) |
Feb
(10) |
Mar
(17) |
Apr
(6) |
May
(3) |
Jun
(9) |
Jul
(22) |
Aug
(48) |
Sep
(3) |
Oct
(2) |
Nov
(2) |
Dec
(8) |
2025 |
Jan
(3) |
Feb
(2) |
Mar
(9) |
Apr
(7) |
May
(3) |
Jun
(3) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <cn...@us...> - 2024-07-14 17:11:11
|
Revision: 1493 http://sourceforge.net/p/seq/svn/1493 Author: cn187 Date: 2024-07-14 17:11:08 +0000 (Sun, 14 Jul 2024) Log Message: ----------- Allow configuration of map line/location colors Modified Paths: -------------- showeq/branches/cn187_devel/src/Makefile.am showeq/branches/cn187_devel/src/interface.cpp showeq/branches/cn187_devel/src/interface.h showeq/branches/cn187_devel/src/map.cpp showeq/branches/cn187_devel/src/map.h showeq/branches/cn187_devel/src/mapcore.cpp showeq/branches/cn187_devel/src/mapcore.h Added Paths: ----------- showeq/branches/cn187_devel/src/mapcolors.h Modified: showeq/branches/cn187_devel/src/Makefile.am =================================================================== --- showeq/branches/cn187_devel/src/Makefile.am 2024-07-13 17:42:11 UTC (rev 1492) +++ showeq/branches/cn187_devel/src/Makefile.am 2024-07-14 17:11:08 UTC (rev 1493) @@ -113,7 +113,7 @@ EXTRA_DIST = h2info.pl -noinst_HEADERS = classes.h compass.h everquest.h interface.h main.h map.h filter.h vpacket.h editor.h packet.h packetcapture.h packetcommon.h packetformat.h packetstream.h packetfragment.h packetinfo.h races.h skills.h spells.h util.h experiencelog.h combatlog.h spawn.h spawnshell.h spawnlist.h spellshell.h spelllist.h languages.h weapons.h weapons1.h weapons27.h weapons28.h weapons29.h weapons2a.h weapons2b.h weapons2c.h weapons2d.h weapons2e.h weapons2f.h weapons30.h weapons4e.h decode.h cgiconv.h skilllist.h statlist.h deity.h player.h crctab.h filtermgr.h point.h pointarray.h mapcore.h category.h compassframe.h group.h guild.h fixpt.h netdiag.h zones.h logger.h xmlconv.h xmlpreferences.h seqwindow.h seqlistview.h zonemgr.h spawnmonitor.h spawnpointlist.h typenames.h spawnlistcommon.h spawnlist2.h datetimemgr.h spawnlog.h packetlog.h datalocationmgr.h eqstr.h messages.h messagefilter.h messagewindow.h messageshell.h terminal.h filteredspawnlog.h messagefilterdialog.h diagnosticmessages.h mapicon.h mapicondialog.h mapicondialog.ui filternotifications.h netstream.h guildshell.h guildlist.h bazaarlog.h message.h s_everquest.h staticspells.h packetcaptureprovider.h +noinst_HEADERS = classes.h compass.h everquest.h interface.h main.h map.h filter.h vpacket.h editor.h packet.h packetcapture.h packetcommon.h packetformat.h packetstream.h packetfragment.h packetinfo.h races.h skills.h spells.h util.h experiencelog.h combatlog.h spawn.h spawnshell.h spawnlist.h spellshell.h spelllist.h languages.h weapons.h weapons1.h weapons27.h weapons28.h weapons29.h weapons2a.h weapons2b.h weapons2c.h weapons2d.h weapons2e.h weapons2f.h weapons30.h weapons4e.h decode.h cgiconv.h skilllist.h statlist.h deity.h player.h crctab.h filtermgr.h point.h pointarray.h mapcore.h category.h compassframe.h group.h guild.h fixpt.h netdiag.h zones.h logger.h xmlconv.h xmlpreferences.h seqwindow.h seqlistview.h zonemgr.h spawnmonitor.h spawnpointlist.h typenames.h spawnlistcommon.h spawnlist2.h datetimemgr.h spawnlog.h packetlog.h datalocationmgr.h eqstr.h messages.h messagefilter.h messagewindow.h messageshell.h terminal.h filteredspawnlog.h messagefilterdialog.h diagnosticmessages.h mapicon.h mapicondialog.h mapicondialog.ui filternotifications.h netstream.h guildshell.h guildlist.h bazaarlog.h message.h s_everquest.h staticspells.h packetcaptureprovider.h mapcolors.h CLEANFILES = $(nodist_showeq_SOURCES) Modified: showeq/branches/cn187_devel/src/interface.cpp =================================================================== --- showeq/branches/cn187_devel/src/interface.cpp 2024-07-13 17:42:11 UTC (rev 1492) +++ showeq/branches/cn187_devel/src/interface.cpp 2024-07-14 17:11:08 UTC (rev 1493) @@ -155,7 +155,8 @@ m_netDiag(0), m_messageFilterDialog(0), m_guildListWindow(0), - m_deviceList(enumerateNetworkDevices()) + m_deviceList(enumerateNetworkDevices()), + m_mapColorDialog(new MapColorDialog()) { setObjectName(name); setWindowFlags(Qt::Window); @@ -1164,6 +1165,8 @@ pOptMenu->addMenu(conColorBaseMenu); + pOptMenu->addAction("Map Colors...", this, SLOT(select_opt_mapColors())); + m_action_opt_UseUpdateRadius = pOptMenu->addAction("Use EQ's Update Radius", this, SLOT(toggle_opt_UseUpdateRadius())); m_action_opt_UseUpdateRadius->setCheckable(true); @@ -4671,6 +4674,11 @@ } } +void EQInterface::select_opt_mapColors() +{ + m_mapColorDialog->show(); +} + void EQInterface::setExp(uint32_t totalExp, uint32_t totalTick, uint32_t minExpLevel, uint32_t maxExpLevel, uint32_t tickExpLevel) Modified: showeq/branches/cn187_devel/src/interface.h =================================================================== --- showeq/branches/cn187_devel/src/interface.h 2024-07-13 17:42:11 UTC (rev 1492) +++ showeq/branches/cn187_devel/src/interface.h 2024-07-14 17:11:08 UTC (rev 1493) @@ -43,6 +43,7 @@ #include "packetlog.h" #include "message.h" #include "messagefilter.h" +#include "map.h" //-------------------------------------------------- // forward declarations @@ -266,6 +267,7 @@ void toggle_opt_RetardedCoords(bool enable); void toggle_opt_SystimeSpawntime(bool enable); void select_opt_conColorBase(QAction* con); + void select_opt_mapColors(); void toggle_view_SpawnList(); void toggle_view_SpawnList2(); void toggle_view_SpawnPointList(); @@ -503,6 +505,8 @@ QStringList m_StringList; QDialog *dialogbox; + MapColorDialog* m_mapColorDialog; + bool m_isSkillListDocked; bool m_isStatListDocked; bool m_isMapDocked[maxNumMaps]; Modified: showeq/branches/cn187_devel/src/map.cpp =================================================================== --- showeq/branches/cn187_devel/src/map.cpp 2024-07-13 17:42:11 UTC (rev 1492) +++ showeq/branches/cn187_devel/src/map.cpp 2024-07-14 17:11:08 UTC (rev 1493) @@ -68,6 +68,8 @@ #include <QImageWriter> #include <QMenu> #include <QWidgetAction> +#include <QGridLayout> +#include <QCommonStyle> #if 1 // ZBTEMP: Until we setup a better way to enter location name/color #include <QInputDialog> @@ -5668,7 +5670,127 @@ } } +MapColorDialog::MapColorDialog(QWidget* parent) : QDialog(parent) +{ + #define X(a,b) m_color_base_table[b] = a; + SEQMAP_COLOR_TABLE + #undef X + setWindowTitle("Map Colors"); + + loadUserColors(); + + QVBoxLayout* vbox = new QVBoxLayout(this); + + QGridLayout* gridLayout = new QGridLayout(); + vbox->addLayout(gridLayout); + + int col = 0; + int row = 0; + for (int i = 0; i < SEQMAP_NUM_COLORS; ++i) + { + row = floor(i / 8); + col = i % 8; + + m_color_pb[i] = new QPushButton(QString::number(i), this); + m_color_pb[i]->setStyle(new QCommonStyle()); + m_color_pb[i]->setPalette(QPalette(QColor(m_color_user_table[i]))); + m_color_pb[i]->setProperty("colorIndex", i); + connect(m_color_pb[i], SIGNAL(clicked()), this, SLOT(selectColor())); + + gridLayout->addWidget(m_color_pb[i], row, col); + } + + QHBoxLayout* hbox = new QHBoxLayout(); + vbox->addItem(new QSpacerItem(20, 25)); + vbox->addLayout(hbox); + + QPushButton* resetButton = new QPushButton("Reset"); + resetButton->setDefault(false); + resetButton->setAutoDefault(false); + hbox->addWidget(resetButton); + connect(resetButton, SIGNAL(clicked()), this, SLOT(resetDialog())); + + QPushButton* defaultsButton = new QPushButton("Load Defaults"); + defaultsButton->setDefault(false); + defaultsButton->setAutoDefault(false); + hbox->addWidget(defaultsButton); + connect(defaultsButton, SIGNAL(clicked()), this, SLOT(loadDefaults())); + + hbox->addItem(new QSpacerItem(20, 1)); + + QPushButton* okButton = new QPushButton("Ok"); + okButton->setDefault(false); + okButton->setAutoDefault(false); + hbox->addWidget(okButton); + connect(okButton, SIGNAL(clicked()), this, SLOT(acceptDialog())); + + QPushButton* cancelButton = new QPushButton("Cancel"); + okButton->setDefault(false); + okButton->setAutoDefault(false); + hbox->addWidget(cancelButton); + connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); + + setLayout(vbox); + + resetDialog(); +} + +MapColorDialog::~MapColorDialog() +{ } + +void MapColorDialog::resetDialog() +{ + loadUserColors(); + for (int i=0; i<SEQMAP_NUM_COLORS; ++i) + m_color_pb[i]->setPalette(QPalette(QColor(m_color_user_table[i]))); +} + +void MapColorDialog::acceptDialog() +{ + updateUserColors(); + done(QDialog::Accepted); +} + +void MapColorDialog::loadDefaults() +{ + for (int i=0; i<SEQMAP_NUM_COLORS; ++i) + { + m_color_user_table[i] = m_color_base_table[i]; + m_color_pb[i]->setPalette(QPalette(QColor(m_color_base_table[i]))); + } +} + +void MapColorDialog::loadUserColors() +{ + for (int i=0; i<SEQMAP_NUM_COLORS; ++i) + m_color_user_table[i] = pSEQPrefs->getPrefString("MapColor" + QString::number(i), + "MapColors", m_color_base_table[i]); +} + +void MapColorDialog::updateUserColors() +{ + for (int i=0; i<SEQMAP_NUM_COLORS; ++i) + pSEQPrefs->setPrefString("MapColor" + QString::number(i), "MapColors", m_color_user_table[i]); +} + + + +void MapColorDialog::selectColor() +{ + QPushButton* pb = qobject_cast<QPushButton*>(sender()); + if (!pb) return; + + QColor newColor = QColorDialog::getColor(pb->palette().color(backgroundRole()), this); + if (newColor.isValid()) + { + int i = pb->property("colorIndex").toInt(); + m_color_user_table[i] = newColor.name(); + pb->setPalette(QPalette(QColor(m_color_user_table[i]))); + } + +} + #ifndef QMAKEBUILD #include "map.moc" #endif Modified: showeq/branches/cn187_devel/src/map.h =================================================================== --- showeq/branches/cn187_devel/src/map.h 2024-07-13 17:42:11 UTC (rev 1492) +++ showeq/branches/cn187_devel/src/map.h 2024-07-14 17:11:08 UTC (rev 1493) @@ -44,6 +44,7 @@ #include <QPen> #include <QBrush> #include <QElapsedTimer> +#include <QPushButton> // includes required for MapMenu #include <QMenu> @@ -69,6 +70,7 @@ #include "seqwindow.h" #include "spawn.h" #include "mapicon.h" +#include "mapcolors.h" //---------------------------------------------------------------------- // forward declarations @@ -105,6 +107,8 @@ tFOVClassic = 2 }; + + //---------------------------------------------------------------------- // constants const int maxFrameTimes = 40; @@ -790,5 +794,29 @@ QAction* m_action_bottomControl_Options; }; +class MapColorDialog : public QDialog +{ + Q_OBJECT + + public: + MapColorDialog(QWidget* parent=0); + ~MapColorDialog(); + + private slots: + void selectColor(); + void resetDialog(); + void acceptDialog(); + void loadDefaults(); + + private: + void loadUserColors(); + void updateUserColors(); + + QString m_color_base_table[SEQMAP_NUM_COLORS]; + QString m_color_user_table[SEQMAP_NUM_COLORS]; + QPushButton* m_color_pb[SEQMAP_NUM_COLORS]; + +}; + #endif // _EQMAP_H_ Added: showeq/branches/cn187_devel/src/mapcolors.h =================================================================== --- showeq/branches/cn187_devel/src/mapcolors.h (rev 0) +++ showeq/branches/cn187_devel/src/mapcolors.h 2024-07-14 17:11:08 UTC (rev 1493) @@ -0,0 +1,95 @@ +/* + * mapcolors.h + * Copyright 2024 by the respective ShowEQ Developers + * + * This file is part of ShowEQ. + * http://www.sourceforge.net/projects/seq + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +//colors used in SEQ maps, and after converting SOE maps. +#ifndef SEQMAP_COLORS_H +#define SEQMAP_COLORS_H + +#define SEQMAP_NUM_COLORS 64 + +#define SEQMAP_COLOR_TABLE\ + X("Black", 0) \ + X("DarkRed", 1) \ + X("FireBrick", 2) \ + X("Red", 3) \ + X("DarkGreen", 4) \ + X("Orange", 5) \ + X("DarkOrange", 6) \ + X("DarkOrange", 7) \ + X("Green", 8) \ + X("Chartreuse", 9) \ + X("Gold", 10) \ + X("Gold", 11) \ + X("Green", 12) \ + X("Chartreuse", 13) \ + X("Goldenrod", 14) \ + X("Yellow", 15) \ + X("DarkBlue", 16) \ + X("Magenta", 17) \ + X("DeepPink", 18) \ + X("DeepPink", 19) \ + X("DarkCyan", 20) \ + X("Grey", 21) \ + X("IndianRed", 22) \ + X("LightCoral", 23) \ + X("SpringGreen", 24) \ + X("LightGreen", 25) \ + X("DarkKhaki", 26) \ + X("Khaki", 27) \ + X("SpringGreen", 28) \ + X("PaleGreen", 29) \ + X("DarkOliveGreen",30) \ + X("Khaki", 31) \ + X("MediumBlue", 32) \ + X("DarkViolet", 33) \ + X("Magenta", 34) \ + X("Maroon", 35) \ + X("RoyalBlue", 36) \ + X("SlateBlue", 37) \ + X("Orchid", 38) \ + X("HotPink", 39) \ + X("Turquoise", 40) \ + X("SkyBlue", 41) \ + X("Snow", 42) \ + X("LightPink", 43) \ + X("Cyan", 44) \ + X("Aquamarine", 45) \ + X("DarkSeaGreen", 46) \ + X("Beige", 47) \ + X("Blue", 48) \ + X("Purple", 49) \ + X("Purple", 50) \ + X("Magenta", 51) \ + X("DodgerBlue", 52) \ + X("SlateBlue", 53) \ + X("MediumPurple", 54) \ + X("Orchid", 55) \ + X("DeepSkyBlue", 56) \ + X("LightBlue", 57) \ + X("Plum", 58) \ + X("Cyan", 59) \ + X("CadetBlue", 60) \ + X("PaleTurquoise", 61) \ + X("LightCyan", 62) \ + X("White", 63) + +#endif Modified: showeq/branches/cn187_devel/src/mapcore.cpp =================================================================== --- showeq/branches/cn187_devel/src/mapcore.cpp 2024-07-13 17:42:11 UTC (rev 1492) +++ showeq/branches/cn187_devel/src/mapcore.cpp 2024-07-14 17:11:08 UTC (rev 1493) @@ -53,7 +53,10 @@ #include <QPolygon> #include <QByteArray> #include <QPixmap> +#include "xmlpreferences.h" +extern XMLPreferences* pSEQPrefs; + //---------------------------------------------------------------------- // MapParameters MapParameters::MapParameters(const MapData& mapData) @@ -1110,7 +1113,10 @@ // create an M line (start with 2 points because of SOE's lame // format). - currentLineM = new MapLineM("soe", getMapConvertColor(r, g, b), 2); + unsigned short map_color_index = getMapConvertColorIndex(r, g, b); + QColor lineColor = pSEQPrefs->getPrefString("MapColor" + QString::number(map_color_index), + "MapColors", getMapConvertColor(r, g, b)); + currentLineM = new MapLineM("soe", lineColor, 2); currentLineM->setOrigColor(QColor(r, g, b)); // set the first point @@ -1172,8 +1178,10 @@ name.replace("_", " "); // add it to the list of locations - MapLocation* loc = new MapLocation(name, getMapConvertColor(r, g, b), - x1, y1, z1); + unsigned short map_color_index = getMapConvertColorIndex(r, g, b); + QColor lineColor = pSEQPrefs->getPrefString("MapColor" + QString::number(map_color_index), + "MapColors", getMapConvertColor(r, g, b)); + MapLocation* loc = new MapLocation(name, lineColor, x1, y1, z1); loc->setOrigColor(QColor(r, g, b)); layer->locations().append(loc); Modified: showeq/branches/cn187_devel/src/mapcore.h =================================================================== --- showeq/branches/cn187_devel/src/mapcore.h 2024-07-13 17:42:11 UTC (rev 1492) +++ showeq/branches/cn187_devel/src/mapcore.h 2024-07-14 17:11:08 UTC (rev 1493) @@ -48,6 +48,7 @@ #include <QList> #include <QPolygon> +#include "mapcolors.h" #include "point.h" #include "pointarray.h" #include "fixpt.h" @@ -732,6 +733,16 @@ (z >= floorRoom)); } +inline unsigned short getMapConvertColorIndex(const unsigned short r, const unsigned short g, + const unsigned short b) +{ + unsigned short index = floor(r/80) + floor(g/80)*4 + floor(b/80)*16; + if (index == 0) + return 63; + else + return index; +} + inline QString getMapConvertColor(const unsigned short r, const unsigned short g, const unsigned short b) { @@ -739,70 +750,9 @@ //This adjusts the SOE map colors to colors that work for SEQs default color scheme QString sColor[64] = { - "Black", //0 - "DarkRed", //1 - "FireBrick", //2 - "Red", //3 - "DarkGreen", //4 - "Orange", //5 - "DarkOrange", //6 - "DarkOrange", //7 - "Green", //8 - "Chartreuse", //9 - "Gold", //10 - "Gold", //11 - "Green", //12 - "Chartreuse", //13 - "Goldenrod", //14 - "Yellow", //15 - "DarkBlue", //16 - "Magenta", //17 - "DeepPink", //18 - "DeepPink", //19 - "DarkCyan", //20 - "Grey", //21 - "IndianRed", //22 - "LightCoral", //23 - "SpringGreen", //24 - "LightGreen", //25 - "DarkKhaki", //26 - "Khaki", //27 - "SpringGreen", //28 - "PaleGreen", //29 - "DarkOliveGreen",//30 - "Khaki", //31 - "MediumBlue", //32 - "DarkViolet", //33 - "Magenta", //34 - "Maroon", //35 - "RoyalBlue", //36 - "SlateBlue", //37 - "Orchid", //38 - "HotPink", //39 - "Turquoise", //40 - "SkyBlue", //41 - "Snow", //42 - "LightPink", //43 - "Cyan", //44 - "Aquamarine", //45 - "DarkSeaGreen", //46 - "Beige", //47 - "Blue", //48 - "Purple", //49 - "Purple", //50 - "Magenta", //51 - "DodgerBlue", //52 - "SlateBlue", //53 - "MediumPurple", //54 - "Orchid", //55 - "DeepSkyBlue", //56 - "LightBlue", //57 - "Plum", //58 - "Cyan", //59 - "CadetBlue", //60 - "PaleTurquoise",//61 - "LightCyan", //62 - "White" //63 + #define X(a,b) a, + SEQMAP_COLOR_TABLE + #undef X }; unsigned short color = floor(r/80) + floor(g/80)*4 + floor(b/80)*16; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-13 17:42:13
|
Revision: 1492 http://sourceforge.net/p/seq/svn/1492 Author: cn187 Date: 2024-07-13 17:42:11 +0000 (Sat, 13 Jul 2024) Log Message: ----------- Check pcap stats and report drops Modified Paths: -------------- showeq/branches/cn187_devel/src/packetcapture.cpp showeq/branches/cn187_devel/src/packetcapture.h Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-07-13 17:41:55 UTC (rev 1491) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-07-13 17:42:11 UTC (rev 1492) @@ -35,7 +35,10 @@ #include "diagnosticmessages.h" //#define PCAP_DEBUG 1 - + +unsigned int PacketCaptureThread::last_ps_ifdrop = 0; +unsigned int PacketCaptureThread::last_ps_drop = 0; + //---------------------------------------------------------------------- // PacketCaptureThread // start and stop the thread @@ -45,8 +48,7 @@ m_playbackSpeed(0), m_snaplen(snaplen), m_buffersize(buffersize) -{ -} +{ } PacketCaptureThread::~PacketCaptureThread() { @@ -55,7 +57,6 @@ // Turn off pcap pcap_close(m_pcache_pcap); } - } void PacketCaptureThread::setPlaybackSpeed(int playbackSpeed) @@ -335,6 +336,31 @@ } pthread_mutex_unlock (&myThis->m_pcache_mutex); + + struct pcap_stat ps = {0}; + + //NOTE: using fprintf here because seqWarn sends a MessageEntry, which + //can't cross thread boundaries using signals/slots without doing work + //to change MessageEntry to a proper Qt MetaType FIXME + pcap_stats(myThis->m_pcache_pcap, &ps); + if (ps.ps_ifdrop > 0 && ps.ps_ifdrop != last_ps_ifdrop) + { + fprintf(stderr, "PCAP detected %d packets dropped at the network interface! " + "This could cause ShowEQ to malfunction. Read FAQ #5 in the " + "FAQ located in the ShowEQ source directory for information " + "about tuning your kernel networking parameters.\n", ps.ps_ifdrop); + fprintf(stderr, "Packet loss due to dropping at the interface: %02f%%\n", (ps.ps_ifdrop * 1.0) / (ps.ps_recv * 1.0) * 100.0); + last_ps_ifdrop = ps.ps_ifdrop; + } + + if (ps.ps_drop > 0 && ps.ps_drop != last_ps_drop) + { + fprintf(stderr, "PCAP detected %d packets dropped due to insufficent PCAP buffer size! " + "This could cause ShowEQ to malfunction. Increase the PCAP buffer " + "size and/or decrease the PCAP snapshot length.\n", ps.ps_drop); + fprintf(stderr, "Packet loss due to dropping at the PCAP buffer: %02f%%\n", (ps.ps_drop * 1.0) / (ps.ps_recv * 1.0) * 100.0); + last_ps_drop = ps.ps_drop; + } } void PacketCaptureThread::setFilter (const char *device, Modified: showeq/branches/cn187_devel/src/packetcapture.h =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.h 2024-07-13 17:41:55 UTC (rev 1491) +++ showeq/branches/cn187_devel/src/packetcapture.h 2024-07-13 17:42:11 UTC (rev 1492) @@ -79,6 +79,8 @@ private: static void* loop(void *param); static void packetCallBack(u_char * param, const struct pcap_pkthdr *ph, const u_char *data); + static unsigned int last_ps_ifdrop; + static unsigned int last_ps_drop; pcap_t *m_pcache_pcap; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-13 17:41:58
|
Revision: 1491 http://sourceforge.net/p/seq/svn/1491 Author: cn187 Date: 2024-07-13 17:41:55 +0000 (Sat, 13 Jul 2024) Log Message: ----------- Allow configuration of PCAP snap len and buffer size Modified Paths: -------------- showeq/branches/cn187_devel/src/interface.cpp showeq/branches/cn187_devel/src/interface.h showeq/branches/cn187_devel/src/packet.cpp showeq/branches/cn187_devel/src/packet.h showeq/branches/cn187_devel/src/packetcapture.cpp showeq/branches/cn187_devel/src/packetcapture.h Modified: showeq/branches/cn187_devel/src/interface.cpp =================================================================== --- showeq/branches/cn187_devel/src/interface.cpp 2024-07-13 17:41:46 UTC (rev 1490) +++ showeq/branches/cn187_devel/src/interface.cpp 2024-07-13 17:41:55 UTC (rev 1491) @@ -240,7 +240,7 @@ if (!selected.isEmpty()) { // set it as the device to monitor next session - pSEQPrefs->setPrefString("Device", "Network", selected); + pSEQPrefs->setPrefString("Device", section, selected); net_device = selected; } } @@ -254,6 +254,8 @@ pSEQPrefs->getPrefString("MAC", section, "0"), pSEQPrefs->getPrefBool("RealTimeThread", section, false), + pSEQPrefs->getPrefInt("CaptureSnapLen", section, 1), + pSEQPrefs->getPrefInt("CaptureBufferSize", section, 2), pSEQPrefs->getPrefBool("SessionTracking", section, false), pSEQPrefs->getPrefBool("Record", vpsection, false), @@ -1189,6 +1191,41 @@ tmpAction->setCheckable(true); tmpAction->setChecked(m_packet->realtime()); + QMenu* captureMenu = new QMenu("Packet Capture Configuration"); + m_netMenu->addMenu(captureMenu); + + + QWidgetAction* captureSettingNotice = new QWidgetAction(captureMenu); + QLabel* tmpLabel = new QLabel("NOTE: You must save preferences and restart ShowEQ for these changes to take effect (for now)"); + tmpLabel->setWordWrap(true); + tmpLabel->setContentsMargins(30, 11, 11, 11); + captureSettingNotice->setDefaultWidget(tmpLabel); + captureMenu->addAction(captureSettingNotice); + + captureMenu->addSeparator(); + + QMenu* tmpMenu = new QMenu("Snapshot Length (KB)"); + QSpinBox* snapLenSpinBox = new QSpinBox(tmpMenu); + snapLenSpinBox->setMinimum(1); + snapLenSpinBox->setMaximum(64); + snapLenSpinBox->setValue(pSEQPrefs->getPrefInt("CaptureSnapLen", "Network", 1)); + connect(snapLenSpinBox, SIGNAL(valueChanged(int)), this, SLOT(set_net_capture_snap_len(int))); + QWidgetAction* snapLenWidgetAction = new QWidgetAction(tmpMenu); + snapLenWidgetAction->setDefaultWidget(snapLenSpinBox); + tmpMenu->addAction(snapLenWidgetAction); + captureMenu->addMenu(tmpMenu); + + tmpMenu = new QMenu("Capture Buffer Size (MB)"); + QSpinBox* captureBufferSizeSpinBox = new QSpinBox(); + captureBufferSizeSpinBox->setMinimum(2); + captureBufferSizeSpinBox->setMaximum(128); + captureBufferSizeSpinBox->setValue(pSEQPrefs->getPrefInt("CaptureBufferSize", "Network", 2)); + connect(captureBufferSizeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(set_net_capture_buffer_size(int))); + QWidgetAction* captureBufferSizeWidgetAction = new QWidgetAction(tmpMenu); + captureBufferSizeWidgetAction->setDefaultWidget(captureBufferSizeSpinBox); + tmpMenu->addAction(captureBufferSizeWidgetAction); + captureMenu->addMenu(tmpMenu); + m_netMenu->addSeparator(); // Log menu @@ -5318,6 +5355,18 @@ } } +void EQInterface::set_net_capture_snap_len(int len) +{ + m_packet->setSnapLen(len); + pSEQPrefs->setPrefInt("CaptureSnapLen", "Network", len); +} + +void EQInterface::set_net_capture_buffer_size(int size) +{ + m_packet->setBufferSize(size); + pSEQPrefs->setPrefInt("CaptureBufferSize", "Network", size); +} + void EQInterface::set_net_arq_giveup(int giveup) { // set the Arq Seq Give Up length Modified: showeq/branches/cn187_devel/src/interface.h =================================================================== --- showeq/branches/cn187_devel/src/interface.h 2024-07-13 17:41:46 UTC (rev 1490) +++ showeq/branches/cn187_devel/src/interface.h 2024-07-13 17:41:55 UTC (rev 1491) @@ -223,6 +223,8 @@ void set_net_client_IP_address(); void set_net_client_MAC_address(); void set_net_device(); + void set_net_capture_snap_len(int len); + void set_net_capture_buffer_size(int size); void set_net_arq_giveup(int giveup); virtual void setCaption(const QString&); void restoreStatusFont(); Modified: showeq/branches/cn187_devel/src/packet.cpp =================================================================== --- showeq/branches/cn187_devel/src/packet.cpp 2024-07-13 17:41:46 UTC (rev 1490) +++ showeq/branches/cn187_devel/src/packet.cpp 2024-07-13 17:41:55 UTC (rev 1491) @@ -92,6 +92,8 @@ QString ip, QString mac_address, bool realtime, + int snaplen, + int buffersize, bool sessionTrackingFlag, bool recordPackets, int playbackPackets, @@ -107,6 +109,8 @@ m_ip(ip), m_mac(mac_address), m_realtime(realtime), + m_snaplen(snaplen), + m_buffersize(buffersize), m_session_tracking(sessionTrackingFlag), m_recordPackets(recordPackets), m_playbackPackets(playbackPackets), @@ -193,7 +197,7 @@ if (m_playbackPackets == PLAYBACK_OFF) { // create the pcap object and initialize, either with MAC or IP - m_packetCapture = new PacketCaptureThread(); + m_packetCapture = new PacketCaptureThread(m_snaplen, m_buffersize); if (m_mac.length() == 17) { seqInfo("Listening for client MAC: %s", m_mac.toLatin1().data()); @@ -218,7 +222,7 @@ else if (m_playbackPackets == PLAYBACK_FORMAT_TCPDUMP) { // Create the pcap object and initialize with the file input given - m_packetCapture = new PacketCaptureThread(); + m_packetCapture = new PacketCaptureThread(m_snaplen, m_buffersize); QString filename = pSEQPrefs->getPrefString("Filename", "VPacket"); Modified: showeq/branches/cn187_devel/src/packet.h =================================================================== --- showeq/branches/cn187_devel/src/packet.h 2024-07-13 17:41:46 UTC (rev 1490) +++ showeq/branches/cn187_devel/src/packet.h 2024-07-13 17:41:55 UTC (rev 1491) @@ -72,6 +72,8 @@ QString m_ip, QString m_mac_address, bool m_realtime, + int snaplen, + int buffersize, bool m_session_tracking, bool m_recordPackets, int m_playbackPackets, @@ -102,6 +104,10 @@ bool connect2(const QString& opcodeName, EQStreamPairs sp, uint8_t dir, const char* payload, EQSizeCheckType szt, const QObject* receiver, const char* member); + int snaplen(void) { return m_snaplen; } + int buffersize(void) { return m_buffersize; } + void setSnapLen(int len) { m_snaplen = len; } + void setBufferSize(int size) { m_buffersize = size; } public slots: void processPackets(void); @@ -176,6 +182,8 @@ QString m_ip; QString m_mac; bool m_realtime; + int m_snaplen; + int m_buffersize; bool m_session_tracking; bool m_recordPackets; int m_playbackPackets; Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-07-13 17:41:46 UTC (rev 1490) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-07-13 17:41:55 UTC (rev 1491) @@ -40,9 +40,11 @@ // PacketCaptureThread // start and stop the thread // get packets to the processing engine(dispatchPacket) -PacketCaptureThread::PacketCaptureThread() : PacketCaptureProviderThread(), +PacketCaptureThread::PacketCaptureThread(int snaplen, int buffersize) : PacketCaptureProviderThread(), m_pcache_pcap(NULL), - m_playbackSpeed(0) + m_playbackSpeed(0), + m_snaplen(snaplen), + m_buffersize(buffersize) { } @@ -81,7 +83,6 @@ bool realtime, uint8_t address_type) { char ebuf[PCAP_ERRBUF_SIZE]; // pcap error buffer - char filter_buf[256]; // pcap filter buffer seqInfo("Initializing Packet Capture Thread: "); m_pcache_closed = false; @@ -109,11 +110,8 @@ } pcap_set_promisc(m_pcache_pcap, 1); - //PCAP docs say 64K snaplen should be enough for most networks. - pcap_set_snaplen(m_pcache_pcap, UINT16_MAX); - // default buffer size is 2M: 2*1024*1024 - // but we can increase it in the future if needed - //pcap_set_buffer_size(m_pcache_pcap, 4*1024*1024); + pcap_set_snaplen(m_pcache_pcap, m_snaplen*1024); + pcap_set_buffer_size(m_pcache_pcap, m_buffersize*1024*1024); #ifndef __FreeBSD__ pcap_set_immediate_mode(m_pcache_pcap, 1); Modified: showeq/branches/cn187_devel/src/packetcapture.h =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.h 2024-07-13 17:41:46 UTC (rev 1490) +++ showeq/branches/cn187_devel/src/packetcapture.h 2024-07-13 17:41:55 UTC (rev 1491) @@ -54,7 +54,7 @@ class PacketCaptureThread : public PacketCaptureProviderThread { public: - PacketCaptureThread(); + PacketCaptureThread(int snaplen, int buffersize); ~PacketCaptureThread(); bool offlinePlaybackSupported() { return true; } @@ -88,6 +88,9 @@ int m_playbackSpeed; // -1=paused, 0=max, 1=1x speed, 2=2x speed, up to 9 timeval m_tvLastProcessedActual; timeval m_tvLastProcessedOriginal; + + int m_snaplen; + int m_buffersize; }; #endif // _PACKETCAPTURE_H_ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-13 17:41:49
|
Revision: 1490 http://sourceforge.net/p/seq/svn/1490 Author: cn187 Date: 2024-07-13 17:41:46 +0000 (Sat, 13 Jul 2024) Log Message: ----------- Update consider message Modified Paths: -------------- showeq/branches/cn187_devel/src/messageshell.cpp Modified: showeq/branches/cn187_devel/src/messageshell.cpp =================================================================== --- showeq/branches/cn187_devel/src/messageshell.cpp 2024-07-13 17:41:37 UTC (rev 1489) +++ showeq/branches/cn187_devel/src/messageshell.cpp 2024-07-13 17:41:46 UTC (rev 1490) @@ -1153,7 +1153,9 @@ // yes deity = spawn->deityName(); - msg += item->name(); + lvl = QString::number(spawn->level()); + + msg += item->name() + " (Lvl: " + lvl + ")"; } // end if spawn found else msg += "Spawn:" + QString::number(con->targetid, 16); @@ -1162,9 +1164,13 @@ switch (con->level) { case 0: + case 5: case 20: msg += " (even)"; break; + case 1: + msg += " (grey)"; + break; case 2: msg += " (green)"; break; @@ -1171,12 +1177,15 @@ case 4: msg += " (blue)"; break; + case 7: case 13: msg += " (red)"; break; + case 6: case 15: msg += " (yellow)"; break; + case 3: case 18: msg += " (cyan)"; break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-13 17:41:39
|
Revision: 1489 http://sourceforge.net/p/seq/svn/1489 Author: cn187 Date: 2024-07-13 17:41:37 +0000 (Sat, 13 Jul 2024) Log Message: ----------- Stop selecting random mob after corpse disappears Modified Paths: -------------- showeq/branches/cn187_devel/src/interface.cpp showeq/branches/cn187_devel/src/spawnlist.cpp showeq/branches/cn187_devel/src/spawnlist2.cpp Modified: showeq/branches/cn187_devel/src/interface.cpp =================================================================== --- showeq/branches/cn187_devel/src/interface.cpp 2024-07-13 17:41:28 UTC (rev 1488) +++ showeq/branches/cn187_devel/src/interface.cpp 2024-07-13 17:41:37 UTC (rev 1489) @@ -5998,7 +5998,7 @@ { m_spawnList2 = new SpawnListWindow2(m_player, m_spawnShell, m_categoryMgr, - 0, "spawnlist"); + 0, "spawnlist2"); setDockEnabled(m_spawnList2, pSEQPrefs->getPrefBool("DockableSpawnList2", "Interface", true)); Modified: showeq/branches/cn187_devel/src/spawnlist.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawnlist.cpp 2024-07-13 17:41:28 UTC (rev 1488) +++ showeq/branches/cn187_devel/src/spawnlist.cpp 2024-07-13 17:41:37 UTC (rev 1489) @@ -474,7 +474,7 @@ { if (j == currentItem()) { - selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::NoUpdate); + selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::Clear); clearSelection(); } delList += j->takeChildren(); @@ -1070,7 +1070,11 @@ // the list is limited to one selection at a time, so we can take the first SEQListViewItem* litem = selected.first(); - if (litem == NULL) return; + if (litem == NULL) + { + clearSelection(); + return; + } const Item* item = ((SpawnListItem*)litem)->item(); Modified: showeq/branches/cn187_devel/src/spawnlist2.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawnlist2.cpp 2024-07-13 17:41:28 UTC (rev 1488) +++ showeq/branches/cn187_devel/src/spawnlist2.cpp 2024-07-13 17:41:37 UTC (rev 1489) @@ -76,7 +76,7 @@ // create the spawn list combo box m_categoryCombo = new QComboBox(this); - m_categoryCombo->setObjectName("spawnlistcombo"); + m_categoryCombo->setObjectName("spawnlist2combo"); m_categoryCombo->setEditable(false); m_categoryCombo->setDuplicatesEnabled(false); hLayout->addWidget(m_categoryCombo, 0, Qt::AlignLeft); @@ -108,7 +108,7 @@ // create the spawn listview m_spawnList = new SEQListView(preferenceName(), - this, "spawnlistview"); + this, "spawnlist2view"); vLayout->addWidget(m_spawnList); m_spawnList->addColumn ("Name"); @@ -245,7 +245,7 @@ } m_menu = new SpawnListMenu(m_spawnList, this, m_spawnShell->filterMgr(), - m_categoryMgr, this, "spawnlist menu"); + m_categoryMgr, this, "spawnlist2 menu"); m_menu->addSeparator(); QAction* tmpAction; @@ -292,8 +292,9 @@ if (item == m_selectedItem) { m_selectedItem = NULL; - m_spawnList->selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::NoUpdate); + m_spawnList->selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::Clear); m_spawnList->clearSelection(); + m_spawnList->setCurrentItem(NULL); } // delete the list item @@ -418,7 +419,9 @@ if (!item) { m_selectedItem = NULL; + m_spawnList->selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::Clear); m_spawnList->clearSelection(); + m_spawnList->setCurrentItem(NULL); return; } @@ -798,7 +801,14 @@ // the list is limited to one selection at a time, so we can take the first SEQListViewItem* litem = selected.first(); - if (litem == NULL) return; + if (litem == NULL) + { + m_selectedItem = NULL; + m_spawnList->selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::Clear); + m_spawnList->clearSelection(); + m_spawnList->setCurrentItem(NULL); + return; + } m_selectedItem = ((SpawnListItem*)litem)->item(); @@ -913,7 +923,9 @@ if (!item) { m_selectedItem = NULL; + m_spawnList->selectionModel()->setCurrentIndex(QModelIndex(), QItemSelectionModel::Clear); m_spawnList->clearSelection(); + m_spawnList->setCurrentItem(NULL); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-13 17:41:31
|
Revision: 1488 http://sourceforge.net/p/seq/svn/1488 Author: cn187 Date: 2024-07-13 17:41:28 +0000 (Sat, 13 Jul 2024) Log Message: ----------- Enable renaming/deleting spawn point items Modified Paths: -------------- showeq/branches/cn187_devel/src/spawnpointlist.cpp Modified: showeq/branches/cn187_devel/src/spawnpointlist.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawnpointlist.cpp 2024-07-13 17:41:21 UTC (rev 1487) +++ showeq/branches/cn187_devel/src/spawnpointlist.cpp 2024-07-13 17:41:28 UTC (rev 1488) @@ -247,8 +247,10 @@ // the list is limited to one selection at a time, so we can take the first SEQListViewItem* item = selected.first(); + m_menu->setCurrentItem((SpawnPointListItem*)item); if (item == NULL) return; + const SpawnPoint* sp = NULL; if ( item ) @@ -536,6 +538,8 @@ void SpawnPointListMenu::setCurrentItem(const SpawnPointListItem* item) { m_currentItem = item; + m_action_rename->setEnabled(m_currentItem != NULL); + m_action_delete->setEnabled(m_currentItem != NULL); } void SpawnPointListMenu::init_menu() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-13 17:41:23
|
Revision: 1487 http://sourceforge.net/p/seq/svn/1487 Author: cn187 Date: 2024-07-13 17:41:21 +0000 (Sat, 13 Jul 2024) Log Message: ----------- Formatted message fixes Modified Paths: -------------- showeq/branches/cn187_devel/src/eqstr.cpp Modified: showeq/branches/cn187_devel/src/eqstr.cpp =================================================================== --- showeq/branches/cn187_devel/src/eqstr.cpp 2024-07-08 00:35:13 UTC (rev 1486) +++ showeq/branches/cn187_devel/src/eqstr.cpp 2024-07-13 17:41:21 UTC (rev 1487) @@ -239,9 +239,14 @@ // replace template argument with subst string #if (QT_VERSION >= QT_VERSION_CHECK(5,5,0)) if (!substFormatStringRes.isEmpty()) - formatString.replace(curPos, match.capturedLength(1), substFormatStringRes); + { + formatString.replace(curPos-2, match.capturedLength(1)+2, substFormatStringRes); + } else + { + formatString.replace(curPos-2, match.capturedLength(1)+2, ""); curPos = match.capturedEnd(1); // if no replacement string, skip over + } // find next substitution match = rxt.match(formatString, curPos); @@ -248,9 +253,14 @@ curPos = match.capturedStart(1); #else if (!substFormatStringRes.isEmpty()) - formatString.replace(curPos, rxt.matchedLength(), substFormatStringRes); + { + formatString.replace(curPos-2, rxt.matchedLength()+2, substFormatStringRes); + } else + { + formatString.replace(curPos-2, rxt.matchedLength()+2, ""); curPos += rxt.matchedLength(); // if no replacement string, skip over + } // find next substitution curPos = rxt.indexIn(formatString, curPos); @@ -278,9 +288,24 @@ // replace substitution argument with argument from list if (ok && (substArg <= argList.size())) - formatString.replace(curPos, match.capturedLength(1), argList[substArg-1]); + { + QString sub = argList[substArg-1]; + // some messages contains spell names with additional delimited fields + if (sub.contains('^')) + { + sub = sub.section("^", -1); + // they also contain an oddball apostrophe + if (sub.startsWith("'")) + sub.replace(0, 1, ""); + } + formatString.replace(curPos-1, match.capturedLength(1)+1, sub); + } else + { + //no argument for this replacement, so replace with empty string + formatString.replace(curPos-1, match.capturedLength(1)+1, ""); curPos = match.capturedEnd(1); // if no such argument, skip over + } // find next substitution match = rx.match(formatString, curPos); @@ -290,9 +315,24 @@ // replace substitution argument with argument from list if (ok && (substArg <= argList.size())) - formatString.replace(curPos, rx.matchedLength(), argList[substArg-1]); + { + QString sub = argList[substArg-1]; + // some messages contains spell names with additional delimited fields + if (sub.contains('^')) + { + sub = sub.section("^", -1); + // they also contain an oddball apostrophe + if (sub.startsWith("'")) + sub.replace(0, 1, ""); + } + formatString.replace(curPos-1, rx.matchedLength()+1, argList[substArg-1]); + } else + { + //no argument for this replacement, so replace with empty string + formatString.replace(curPos-1, rx.matchedLength()+1, ""); curPos += rx.matchedLength(); // if no such argument, skip over + } // find next substitution curPos = rx.indexIn(formatString, curPos); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-08 00:35:14
|
Revision: 1486 http://sourceforge.net/p/seq/svn/1486 Author: cn187 Date: 2024-07-08 00:35:13 +0000 (Mon, 08 Jul 2024) Log Message: ----------- Fix endianness issue in printed message Modified Paths: -------------- showeq/branches/cn187_devel/src/packet.cpp Modified: showeq/branches/cn187_devel/src/packet.cpp =================================================================== --- showeq/branches/cn187_devel/src/packet.cpp 2024-07-07 17:51:22 UTC (rev 1485) +++ showeq/branches/cn187_devel/src/packet.cpp 2024-07-08 00:35:13 UTC (rev 1486) @@ -742,7 +742,7 @@ m_clientPort = clientPort; m_client_addr = clientAddr; - in_addr ia = inet_makeaddr(m_client_addr, m_client_addr); + in_addr ia = inet_makeaddr(ntohl(m_client_addr), ntohl(m_client_addr)); if (m_playbackPackets == PLAYBACK_OFF || m_playbackPackets == PLAYBACK_FORMAT_TCPDUMP) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-07 17:51:25
|
Revision: 1485 http://sourceforge.net/p/seq/svn/1485 Author: cn187 Date: 2024-07-07 17:51:22 +0000 (Sun, 07 Jul 2024) Log Message: ----------- Add option to deselect target if mob is untargeted Modified Paths: -------------- showeq/branches/cn187_devel/src/interface.cpp showeq/branches/cn187_devel/src/interface.h showeq/branches/cn187_devel/src/map.cpp showeq/branches/cn187_devel/src/spawnlist.cpp showeq/branches/cn187_devel/src/spawnlist2.cpp Modified: showeq/branches/cn187_devel/src/interface.cpp =================================================================== --- showeq/branches/cn187_devel/src/interface.cpp 2024-07-06 18:56:38 UTC (rev 1484) +++ showeq/branches/cn187_devel/src/interface.cpp 2024-07-07 17:51:22 UTC (rev 1485) @@ -177,6 +177,7 @@ m_selectOnConsider = pSEQPrefs->getPrefBool("SelectOnCon", section, false); m_selectOnTarget = pSEQPrefs->getPrefBool("SelectOnTarget", section, false); + m_deselectOnUntarget = pSEQPrefs->getPrefBool("DeselectOnUntarget", section, false); const char* player_classes[] = {"Warrior", "Cleric", "Paladin", "Ranger", "Shadow Knight", "Druid", "Monk", "Bard", @@ -1023,6 +1024,12 @@ m_action_opt_TarSelect->setCheckable(true); m_action_opt_TarSelect->setChecked(m_selectOnTarget); + m_action_opt_TarDeselect = pOptMenu->addAction("Deselect on Untarget?", this, + SLOT(toggle_opt_TarDeselect())); + m_action_opt_TarDeselect->setCheckable(true); + m_action_opt_TarDeselect->setChecked(m_deselectOnUntarget); + + m_action_opt_KeepSelectedVisible = pOptMenu->addAction("Keep Selected Visible?", this, SLOT(toggle_opt_KeepSelectedVisible())); m_action_opt_KeepSelectedVisible->setCheckable(true); @@ -3839,6 +3846,14 @@ } void +EQInterface::toggle_opt_TarDeselect (void) +{ + m_deselectOnUntarget = !(m_deselectOnUntarget); + m_action_opt_TarDeselect->setChecked(m_deselectOnUntarget); + pSEQPrefs->setPrefBool("DeselectOnUntarget", "Interface", m_deselectOnUntarget); +} + +void EQInterface::toggle_opt_Fast (void) { showeq_params->fast_machine = !(showeq_params->fast_machine); @@ -4898,11 +4913,20 @@ void EQInterface::clientTarget(const uint8_t* data) { + + const clientTargetStruct* cts = (const clientTargetStruct*)data; + + if (cts->newTarget == 0 && m_deselectOnUntarget) + { + m_selectedSpawn = 0; + emit selectSpawn(m_selectedSpawn); + updateSelectedSpawnStatus(m_selectedSpawn); + return; + } + if (!m_selectOnTarget) return; - const clientTargetStruct* cts = (const clientTargetStruct*)data; - // try to find the targeted spawn in the spawn shell const Item* item = m_spawnShell->findID(tSpawn, cts->newTarget); @@ -4922,9 +4946,6 @@ void EQInterface::spawnSelected(const Item* item) { - if (item == 0) - return; - // note the new selection m_selectedSpawn = item; @@ -5007,7 +5028,10 @@ void EQInterface::updateSelectedSpawnStatus(const Item* item) { if (item == 0) + { + stsMessage(""); return; + } const Spawn* spawn = 0; Modified: showeq/branches/cn187_devel/src/interface.h =================================================================== --- showeq/branches/cn187_devel/src/interface.h 2024-07-06 18:56:38 UTC (rev 1484) +++ showeq/branches/cn187_devel/src/interface.h 2024-07-07 17:51:22 UTC (rev 1485) @@ -253,6 +253,7 @@ void toggle_view_CombatWindow(); void toggle_opt_ConSelect(); void toggle_opt_TarSelect(); + void toggle_opt_TarDeselect(); void toggle_opt_KeepSelectedVisible(); void toggle_opt_LogSpawns(); void toggle_opt_PvPTeams(); @@ -477,6 +478,7 @@ QAction* m_action_view_SpawnList_Cols[tSpawnColMaxCols]; QAction* m_action_opt_ConSelect; QAction* m_action_opt_TarSelect; + QAction* m_action_opt_TarDeselect; QAction* m_action_opt_KeepSelectedVisible; QAction* m_action_opt_LogSpawns; QAction* m_action_opt_PvPTeams; @@ -511,6 +513,7 @@ bool m_selectOnConsider; bool m_selectOnTarget; + bool m_deselectOnUntarget; bool m_useUpdateRadius; }; Modified: showeq/branches/cn187_devel/src/map.cpp =================================================================== --- showeq/branches/cn187_devel/src/map.cpp 2024-07-06 18:56:38 UTC (rev 1484) +++ showeq/branches/cn187_devel/src/map.cpp 2024-07-07 17:51:22 UTC (rev 1485) @@ -4617,10 +4617,6 @@ void Map::selectSpawn(const Item* item) { - // sanity check - if (item == NULL) - return; - /* seqDebug("%s", item->ID()); */ m_selectedItem = item; Modified: showeq/branches/cn187_devel/src/spawnlist.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawnlist.cpp 2024-07-06 18:56:38 UTC (rev 1484) +++ showeq/branches/cn187_devel/src/spawnlist.cpp 2024-07-07 17:51:22 UTC (rev 1485) @@ -514,7 +514,10 @@ { // seqDebug("SpawnList::selectSpawn(name=%s)", item->name().latin1()); if (item == NULL) - return; + { + clearSelection(); + return; + } // start iterator at the beginning of this QListView SEQListViewItemIterator it(this); @@ -606,7 +609,7 @@ void SpawnList::setSelectedQuiet(SEQListViewItem* item, bool selected) { - if (!item || (item->isSelected() == selected ) || + if ((item->isSelected() == selected ) || !(item->flags() & Qt::ItemIsSelectable)) return; @@ -613,6 +616,12 @@ // get the old selection SEQListViewItem *oldItem = currentItem(); + if (!item) + { + clearSelection(); + return; + } + // unselect the old selected item if any if ((oldItem != item) && (oldItem != NULL) && (oldItem->isSelected())) oldItem->setSelected(false); Modified: showeq/branches/cn187_devel/src/spawnlist2.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawnlist2.cpp 2024-07-06 18:56:38 UTC (rev 1484) +++ showeq/branches/cn187_devel/src/spawnlist2.cpp 2024-07-07 17:51:22 UTC (rev 1485) @@ -416,7 +416,11 @@ void SpawnListWindow2::selectSpawn(const Item *item) { if (!item) + { + m_selectedItem = NULL; + m_spawnList->clearSelection(); return; + } // cache the selected item m_selectedItem = item; @@ -900,12 +904,19 @@ void SpawnListWindow2::setSelectedQuiet(SEQListViewItem* item, bool selected) { - if (!item || (item->isSelected() == selected) ) + if (item->isSelected() == selected) return; // get the old selection SEQListViewItem *oldItem = m_spawnList->currentItem(); + if (!item) + { + m_selectedItem = NULL; + m_spawnList->clearSelection(); + return; + } + // unselect the old selected item if any if ((oldItem != item) && (oldItem != NULL) && (oldItem->isSelected())) oldItem->setSelected(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-06 18:56:40
|
Revision: 1484 http://sourceforge.net/p/seq/svn/1484 Author: cn187 Date: 2024-07-06 18:56:38 +0000 (Sat, 06 Jul 2024) Log Message: ----------- Update pcap to use pcap_create/pcap_activate rather than pcap_open_live Modified Paths: -------------- showeq/branches/cn187_devel/src/packetcapture.cpp Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-07-06 03:20:59 UTC (rev 1483) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-07-06 18:56:38 UTC (rev 1484) @@ -86,28 +86,51 @@ seqInfo("Initializing Packet Capture Thread: "); m_pcache_closed = false; - /* A word about pcap_open_live() from the docs - ** to_ms specifies the read timeout in milliseconds. The - ** read timeout is used to arrange that the read not necessarily - ** return immediately when a packet is seen, but that it wait - ** for some amount of time to allow more packets to arrive and - ** to read multiple packets from the OS kernel in one operation. - ** Not all platforms support a read timeout; on platforms that - ** don't, the read timeout is ignored. - ** - ** In Linux 2.4.x with the to_ms set to 0 we got packets immediatly, - ** and thats what we need in this application. However, as of libpcap - ** 1.9.1, a timeout of 0 means infinity, so that no longer works. A - ** negative timeout will use the default kernal timeout, which can - ** vary. So the most prudent option is to set the timeout as low - ** as we can, to 1 ms. - ** - ** a race condition exists between this thread and the main thread - ** any artificial delay in getting packets can cause filtering problems - ** and cause us to miss new stream when the player zones. + /* We've replaced pcap_open_live() with pcap_create/pcap_activate. + * This allows us to use immedate mode, rather than approximating it with + * a 1ms timeout value. + * + * NOTE: a race condition exists between this thread and the main thread + * - any artificial delay in getting packets can cause filtering problems + * and cause us to miss new stream when the player zones. */ + // initialize the pcap object - m_pcache_pcap = pcap_open_live((char *) device, BUFSIZ, true, 1, ebuf); + m_pcache_pcap = pcap_create((const char*)device, ebuf); + + if (!m_pcache_pcap) + { + seqFatal("pcap_error:pcap_create(%s): %s", device, ebuf); + if ((getuid() != 0) && (geteuid() != 0)) + { + seqWarn("Make sure you are running ShowEQ as root."); + } + exit(1); + } + + pcap_set_promisc(m_pcache_pcap, 1); + //PCAP docs say 64K snaplen should be enough for most networks. + pcap_set_snaplen(m_pcache_pcap, UINT16_MAX); + // default buffer size is 2M: 2*1024*1024 + // but we can increase it in the future if needed + //pcap_set_buffer_size(m_pcache_pcap, 4*1024*1024); + +#ifndef __FreeBSD__ + pcap_set_immediate_mode(m_pcache_pcap, 1); +#endif + + int act = pcap_activate(m_pcache_pcap); + if (act > 0) + { + seqWarn("pcap_warning:pcap_activate:%s", pcap_statustostr(act)); + } + else if (act < 0) + { + seqFatal("pcap_error:pcap_activate:%s", pcap_statustostr(act)); + pcap_close(m_pcache_pcap); + exit(1); + } + #ifdef __FreeBSD__ // if we're on FreeBSD, we need to call ioctl on the file descriptor // with BIOCIMMEDIATE to get the kernel Berkeley Packet Filter device @@ -117,7 +140,7 @@ // knows a less hacky way of doing this, I'd love to hear about it. // the problem here is that libpcap doesn't expose an API to do this // in any way - int fd = *((int*)m_pcache_pcap); + int fd = pcap_fileno(m_pcache_pcap); int temp = 1; if ( ioctl( fd, BIOCIMMEDIATE, &temp ) < 0 ) { @@ -124,15 +147,6 @@ seqWarn("PCAP couldn't set immediate mode on BSD" ); } #endif - if (!m_pcache_pcap) - { - seqWarn("pcap_error:pcap_open_live(%s): %s", device, ebuf); - if ((getuid() != 0) && (geteuid() != 0)) - { - seqWarn("Make sure you are running ShowEQ as root."); - } - exit(0); - } m_pcache_first = m_pcache_last = NULL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-06 03:21:00
|
Revision: 1483 http://sourceforge.net/p/seq/svn/1483 Author: cn187 Date: 2024-07-06 03:20:59 +0000 (Sat, 06 Jul 2024) Log Message: ----------- Fix for entity fix fix Modified Paths: -------------- showeq/branches/cn187_devel/src/spawnshell.cpp Modified: showeq/branches/cn187_devel/src/spawnshell.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawnshell.cpp 2024-07-05 23:41:20 UTC (rev 1482) +++ showeq/branches/cn187_devel/src/spawnshell.cpp 2024-07-06 03:20:59 UTC (rev 1483) @@ -1696,17 +1696,18 @@ void SpawnShell::playerChangedID(uint16_t oldPlayerID, uint16_t newPlayerID) { // remove the player from the list (if it had a 0 id) - m_players.take(0); + deleteItem(tPlayer, 0); - Item* old = m_players.take(oldPlayerID); - if (old != m_player) - delete old; + if (oldPlayerID == newPlayerID) + return; - //if the new ID already exists (sometimes as an unknown spawn) remove it - Item* existing = m_players.take(newPlayerID); - if (existing != m_player) - delete existing; + //remove the old player + deleteItem(tPlayer, oldPlayerID); + + //if the new ID already exists an unknown spawn + deleteItem(tSpawn, newPlayerID); + // re-insert the player into the list m_players.insert(newPlayerID, m_player); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-05 23:41:24
|
Revision: 1482 http://sourceforge.net/p/seq/svn/1482 Author: cn187 Date: 2024-07-05 23:41:20 +0000 (Fri, 05 Jul 2024) Log Message: ----------- AddFilter Toggle All should cycle partial->unchecked->checked Modified Paths: -------------- showeq/branches/cn187_devel/src/filtermgr.cpp showeq/branches/cn187_devel/src/filtermgr.h Modified: showeq/branches/cn187_devel/src/filtermgr.cpp =================================================================== --- showeq/branches/cn187_devel/src/filtermgr.cpp 2024-07-05 21:11:38 UTC (rev 1481) +++ showeq/branches/cn187_devel/src/filtermgr.cpp 2024-07-05 23:41:20 UTC (rev 1482) @@ -404,7 +404,23 @@ m_edit->blockSignals(old_edit_state); } +void ToggleAllCheckBox::nextCheckState() +{ + switch(checkState()) + { + case Qt::Unchecked: + setCheckState(Qt::Checked); + break; + case Qt::PartiallyChecked: + setCheckState(Qt::Unchecked); + break; + case Qt::Checked: + setCheckState(Qt::Unchecked); + break; + } +} + FilterDialog::FilterDialog(QWidget* parent, Qt::WindowFlags flags) : QDialog(parent, flags), m_toggleAll(nullptr), @@ -463,7 +479,7 @@ //using an extra widget so the spacing lines up QWidget* toggleAllWidget = new QWidget(); QHBoxLayout* toggleAllLayout = new QHBoxLayout(toggleAllWidget); - m_toggleAll = new QCheckBox(); + m_toggleAll = new ToggleAllCheckBox(); m_toggleAll->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); m_toggleAll->setTristate(true); toggleAllLayout->addWidget(m_toggleAll); Modified: showeq/branches/cn187_devel/src/filtermgr.h =================================================================== --- showeq/branches/cn187_devel/src/filtermgr.h 2024-07-05 21:11:38 UTC (rev 1481) +++ showeq/branches/cn187_devel/src/filtermgr.h 2024-07-05 23:41:20 UTC (rev 1482) @@ -222,7 +222,16 @@ void stateChanged(int state); }; +//SubClassing QCheckBox so we can control the sequence of check/uncheck/partial when +//clicking "Toggle All" +class ToggleAllCheckBox : public QCheckBox +{ + protected: + virtual void nextCheckState() override; +}; + + class FilterDialog : public QDialog { Q_OBJECT @@ -242,7 +251,7 @@ void createForm(); QHash<QString, FilterFormField*> m_filterFields; - QCheckBox* m_toggleAll; + ToggleAllCheckBox* m_toggleAll; QString m_spawnFilterString; FilterFieldMap m_spawnFilterMap; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-05 21:11:41
|
Revision: 1481 http://sourceforge.net/p/seq/svn/1481 Author: cn187 Date: 2024-07-05 21:11:38 +0000 (Fri, 05 Jul 2024) Log Message: ----------- Add info/equipment support to filters Modified Paths: -------------- showeq/branches/cn187_devel/src/filtermgr.cpp showeq/branches/cn187_devel/src/filtermgr.h showeq/branches/cn187_devel/src/spawn.cpp Modified: showeq/branches/cn187_devel/src/filtermgr.cpp =================================================================== --- showeq/branches/cn187_devel/src/filtermgr.cpp 2024-07-04 22:21:12 UTC (rev 1480) +++ showeq/branches/cn187_devel/src/filtermgr.cpp 2024-07-05 21:11:38 UTC (rev 1481) @@ -54,6 +54,11 @@ }; #undef X +#define X(a, b) b, +const QString InfoFilterStringFieldName[] = { + INFOFILTERSTRINGFIELD_TABLE +}; + //---------------------------------------------------------------------- // FilterMgr FilterMgr::FilterMgr(const DataLocationMgr* dataLocMgr, @@ -410,9 +415,17 @@ //init m_spawnFilterMap for (int field = FSF_Name; field < FSF_Max; ++field) { + if (field == FSF_Info) continue; + QString name = FilterStringFieldName[field]; m_spawnFilterMap[name] = ""; } + //starting with Head since Light is handled above + for (int field = IFSF_Head; field < IFSF_Max; ++field) + { + QString name = InfoFilterStringFieldName[field]; + m_spawnFilterMap[name] = ""; + } m_spawnFilterMap[FSF_MINLEVEL_NAME] = ""; m_spawnFilterMap[FSF_MAXLEVEL_NAME] = ""; @@ -462,10 +475,12 @@ const QString labels[] = { "Name", "Level", "Race", "Class", "NPC", "X", "Y", "Z", "Light", "Deity", - "Race Team", "Deity Team", "Type", "Last Name", "Guild", "Spawn Time", "GM" }; + "Race Team", "Deity Team", "Type", "Last Name", "Guild", "Spawn Time", "Info", "GM" }; for (int field = FSF_Name; field < FSF_Max; ++field) { + if (field == FSF_Info) continue; + QString name = FilterStringFieldName[field]; QString label = labels[field]; m_filterFields[name] = new FilterFormField(name, label); @@ -473,6 +488,19 @@ } + const QString info_labels[] = { + "Light", "Head", "Chest", "Arms", "Waist", "Gloves", "Legs", "Feet", + "Primary", "Secondary" }; + + // Starting with head, since Light is already created above. + for (int field = IFSF_Head; field < IFSF_Max; ++field) + { + QString name = InfoFilterStringFieldName[field]; + QString label = info_labels[field]; + m_filterFields[name] = new FilterFormField(name, label); + m_fieldCount++; + } + //not part of normal regex string, but still part of filter m_filterFields[FSF_MINLEVEL_NAME] = new FilterFormField(FSF_MINLEVEL_NAME, FSF_MINLEVEL_LABEL); m_filterFields[FSF_MAXLEVEL_NAME] = new FilterFormField(FSF_MAXLEVEL_NAME, FSF_MAXLEVEL_LABEL); @@ -480,7 +508,9 @@ const QString formFieldOrder[] = { "Name", "LastName", "Guild", "Race", "Class", "Deity", "Level", FSF_MINLEVEL_NAME, FSF_MAXLEVEL_NAME, "X", "Y", "Z", "NPC", "Type", - "GM", "RTeam", "DTeam", "Spawn", "Light" }; + "GM", "RTeam", "DTeam", "Spawn", "Light", + //Info fields + "H", "C", "A", "W", "G", "L", "F", "1", "2" }; int row = 1; //toggle all is row 0 int col = 0; @@ -493,7 +523,9 @@ if (fieldname == "Guild" || fieldname == "Deity" || fieldname == FSF_MAXLEVEL_NAME || fieldname == "Z" || - fieldname == "GM" || fieldname == "Spawn") + fieldname == "GM" || fieldname == "Spawn" || + fieldname == "Light" || + fieldname == "A" || fieldname == "L") { row++; col = 0; @@ -540,7 +572,10 @@ m_fieldsCheckedCount = 0; for (int field = FSF_Name; field < FSF_Max; ++field) { + if (field == FSF_Info) continue; + QString name = FilterStringFieldName[field]; + m_filterFields[name]->m_edit->setText(m_spawnFilterMap[name]); if (m_filterFields[name]->m_edit->text().length()) @@ -553,6 +588,24 @@ m_filterFields[name]->stateChanged(Qt::Unchecked); } } + + //starting with Head, since Light was handled above + for (int field = IFSF_Head; field < IFSF_Max; ++field) + { + QString name = InfoFilterStringFieldName[field]; + m_filterFields[name]->m_edit->setText(m_spawnFilterMap[name]); + + if (m_filterFields[name]->m_edit->text().length()) + { + m_filterFields[name]->stateChanged(Qt::Checked); + m_fieldsCheckedCount++; + } + else + { + m_filterFields[name]->stateChanged(Qt::Unchecked); + } + } + //not part of normal regex string, but still part of filter m_filterFields[FSF_MINLEVEL_NAME]->m_edit->setText(m_spawnFilterMap[FSF_MINLEVEL_NAME]); if (m_filterFields[FSF_MINLEVEL_NAME]->m_edit->text().length()) @@ -593,10 +646,19 @@ //if enabled, add to map for (int field = FSF_Name; field < FSF_Max; ++field) { + if (field == FSF_Info) continue; + QString name = FilterStringFieldName[field]; if (m_filterFields[name]->m_edit->isEnabled()) map[name] = m_filterFields[name]->m_edit->text(); } + //starting with Head since Light is handled above + for (int field = IFSF_Head; field < IFSF_Max; ++field) + { + QString name = InfoFilterStringFieldName[field]; + if (m_filterFields[name]->m_edit->isEnabled()) + map[name] = m_filterFields[name]->m_edit->text(); + } //not part of normal regex string, but still part of filter if (m_filterFields[FSF_MINLEVEL_NAME]->m_edit->isEnabled()) map[FSF_MINLEVEL_NAME] = m_filterFields[FSF_MINLEVEL_NAME]->m_edit->text(); @@ -751,17 +813,8 @@ //process filter string and set form fields QStringList tokens = regex.split(":"); - //fields should be key:value, but split will create an extra item in the - //list after the last :, so for a well-formed filterString, there should - //always be an odd number of elements - if (tokens.length() % 2 != 1) - { - seqWarn("Malformed filterString regex: %s", regex.toLatin1().data()); - return; - } - QStringList::const_iterator itr = tokens.begin(); - for (;itr < tokens.end(); ++itr) + for (; itr < tokens.end(); ++itr) { QString name = *itr; if (!map->contains(name)) @@ -772,29 +825,84 @@ continue; } - seqWarn("Ignoring unknown filter string field: %s", name.toLatin1().data()); - ++itr; // skip this field's data - continue; + // Info isn't in the map, but we need to process it + // otherwise, skip any unknown fields + if (name != "Info") + { + seqWarn("Ignoring unknown filter string field: %s", name.toLatin1().data()); + ++itr; // skip this field's data + continue; + } } + // get field data if (++itr == tokens.end()) + break; + QString value = *itr; + if (!value.trimmed().length()) continue; - QString value = *itr; if (name == "Name" && (value == "Door" || value == "Drop")) { - //infuriatingly, we add a colon to door and drop names. - //TODO try to find out how many people's filters this will break - //if we remove the : from door and drop names (maybe replace it with - //a - or something. Or save it for 7.x and do it anyway. - //TODO also, check on adding trailing : to Item spawn filterstring - //to make it consistent with the Spawn filterstring + //we add a colon to door and drop names, so it makes + //parsing a little more complicated. value += ":"; if (++itr == tokens.end()) + break; + value += *itr; + if (value.trimmed().length() <= 1) continue; - value += *itr; } - (*map)[name] = value.trimmed(); + if (name == "Info") + { + //Info field contains space-separated slot:item pairs, and the + //items themselves can also contain spaces. So special parsing + //is needed. + bool info_done = false; + QString subfield_name = value; + while (itr != tokens.end() && !info_done) + { + // Check the name against valid sub-fields, because we could + // be past the Info field and into the next main field + bool is_info_field = false; + for (int field = IFSF_Light; field < IFSF_Max; ++field) + { + if (subfield_name == InfoFilterStringFieldName[field]) + { + is_info_field = true; + break; + } + } + + if (!is_info_field) + { + info_done = true; + continue; + } + + // get value + if (++itr == tokens.end()) + break; + value = *itr; + if (!value.trimmed().length()) + continue; + + QString next_subfield_name = value.section(" ", -1); + value = value.section(" ", 0, -2); + + (*map)[subfield_name] = value.trimmed(); + + subfield_name = next_subfield_name; + + } + + if (itr == tokens.end()) + break; + } + else + { + (*map)[name] = value.trimmed(); + } } if (minLevel > -1) @@ -818,30 +926,71 @@ { QString name = FilterStringFieldName[field]; - if (!map->contains(name) || !(*map)[name].trimmed().length()) + if (name == "Info") { - if (has_first_match && !wildcard) + //info subfields need special handling + bool info_added = false; + for (int info_field = IFSF_Light; info_field < IFSF_Max; ++info_field) { - wildcard = true; + QString subfield_name = InfoFilterStringFieldName[info_field]; + if (!map->contains(subfield_name) || !(*map)[subfield_name].trimmed().length()) + { + if (has_first_match && !wildcard) + { + wildcard = true; + } + continue; + } + + QString value = (*map)[subfield_name]; + value = value.trimmed(); + + has_first_match = true; + if (!info_added) + { + filterString += "Info:"; + info_added = true; + } + + if (wildcard) + { + wildcard = false; + filterString += ".*"; + } + filterString += subfield_name; + filterString += ":"; + filterString += value; + filterString += " "; } - continue; + filterString += ":"; } + else + { + if (!map->contains(name) || !(*map)[name].trimmed().length()) + { + if (has_first_match && !wildcard) + { + wildcard = true; + } + continue; + } - QString value = (*map)[name]; - value = value.trimmed(); + QString value = (*map)[name]; + value = value.trimmed(); - has_first_match = true; + has_first_match = true; - if (wildcard) - { - wildcard = false; - filterString += ".*:"; + if (wildcard) + { + wildcard = false; + filterString += ".*:"; + } + filterString += name; + filterString += ":"; + filterString += value; + filterString += ":"; + } - filterString += name; - filterString += ":"; - filterString += value; - filterString += ":"; - } //min/max level are not part of normal regex string, but still part of filter Modified: showeq/branches/cn187_devel/src/filtermgr.h =================================================================== --- showeq/branches/cn187_devel/src/filtermgr.h 2024-07-04 22:21:12 UTC (rev 1480) +++ showeq/branches/cn187_devel/src/filtermgr.h 2024-07-05 21:11:38 UTC (rev 1481) @@ -83,25 +83,39 @@ #define FILTER_FLAG_TRACER (1 << TRACER_FILTER) -#define FILTERSTRINGFIELD_TABLE \ - X(FSF_Name, "Name") \ - X(FSF_Level, "Level") \ - X(FSF_Race, "Race") \ - X(FSF_Class, "Class") \ - X(FSF_NPC, "NPC") \ - X(FSF_X, "X") \ - X(FSF_Y, "Y") \ - X(FSF_Z, "Z") \ - X(FSF_Light, "Light") \ - X(FSF_Deity, "Deity") \ - X(FSF_RTeam, "RTeam") \ - X(FSF_DTeam, "DTeam") \ - X(FSF_Type, "Type") \ - X(FSF_LastName, "LastName") \ - X(FSF_Guild, "Guild") \ - X(FSF_Spawn, "Spawn") \ +#define FILTERSTRINGFIELD_TABLE \ + X(FSF_Name, "Name") \ + X(FSF_Level, "Level") \ + X(FSF_Race, "Race") \ + X(FSF_Class, "Class") \ + X(FSF_NPC, "NPC") \ + X(FSF_X, "X") \ + X(FSF_Y, "Y") \ + X(FSF_Z, "Z") \ + X(FSF_Light, "Light") \ + X(FSF_Deity, "Deity") \ + X(FSF_RTeam, "RTeam") \ + X(FSF_DTeam, "DTeam") \ + X(FSF_Type, "Type") \ + X(FSF_LastName, "LastName") \ + X(FSF_Guild, "Guild") \ + X(FSF_Spawn, "Spawn") \ + X(FSF_Info, "Info") \ X(FSF_GM, "GM") +#define INFOFILTERSTRINGFIELD_TABLE \ + X(IFSF_Light, "Light") \ + X(IFSF_Head, "H") \ + X(IFSF_Chest, "C") \ + X(IFSF_Arms, "A") \ + X(IFSF_Waist, "W") \ + X(IFSF_Gloves, "G") \ + X(IFSF_Legs, "L") \ + X(IFSF_Feet, "F") \ + X(IFSF_Primary, "1") \ + X(IFSF_Secondary, "2") + + #define X(a, b) a, enum FilterStringField { @@ -110,7 +124,15 @@ }; #undef X +#define X(a, b) a, +enum InfoFilterStringField +{ + INFOFILTERSTRINGFIELD_TABLE + IFSF_Max +}; +#undef X + // special handling for min/max level, which aren't part of regex filter string #define FSF_MINLEVEL_NAME "MinLevel" #define FSF_MINLEVEL_LABEL "Min Level" Modified: showeq/branches/cn187_devel/src/spawn.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawn.cpp 2024-07-04 22:21:12 UTC (rev 1480) +++ showeq/branches/cn187_devel/src/spawn.cpp 2024-07-05 21:11:38 UTC (rev 1481) @@ -307,13 +307,13 @@ { QString buff; #if (QT_VERSION >= QT_VERSION_CHECK(5,5,0)) - buff = QString::asprintf("Name:%s:Race:%s:Class:%s:NPC:%d:X:%d:Y:%d:Z:%d", + buff = QString::asprintf("Name:%s:Race:%s:Class:%s:NPC:%d:X:%d:Y:%d:Z:%d:", transformedName().toUtf8().data(), raceString().toUtf8().data(), classString().toUtf8().data(), NPC(), x(), y(), z()); #else - buff.sprintf("Name:%s:Race:%s:Class:%s:NPC:%d:X:%d:Y:%d:Z:%d", + buff.sprintf("Name:%s:Race:%s:Class:%s:NPC:%d:X:%d:Y:%d:Z:%d:", transformedName().toUtf8().data(), raceString().toUtf8().data(), classString().toUtf8().data(), @@ -971,7 +971,8 @@ QString buff; #if (QT_VERSION >= QT_VERSION_CHECK(5,5,0)) buff = QString::asprintf("Name:%s:Level:%d:Race:%s:Class:%s:NPC:%d:X:%d:Y:%d:Z:%d:" - "Light:%s:Deity:%s:RTeam:%d:DTeam:%d:Type:%s:LastName:%s:Guild:%s:Spawn:%s:", + "Light:%s:Deity:%s:RTeam:%d:DTeam:%d:Type:%s:LastName:%s:Guild:%s:Spawn:%s:" + "Info:%s:", name.toUtf8().data(), level(), raceString().toUtf8().data(), @@ -985,11 +986,13 @@ typeString().toUtf8().data(), lastName().toUtf8().data(), guildTag().toUtf8().data(), - spawnTimeStr ().replace (":", ".").toUtf8 ().data () + spawnTimeStr ().replace (":", ".").toUtf8 ().data (), + info().toUtf8().data() ); #else buff.sprintf("Name:%s:Level:%d:Race:%s:Class:%s:NPC:%d:X:%d:Y:%d:Z:%d:" - "Light:%s:Deity:%s:RTeam:%d:DTeam:%d:Type:%s:LastName:%s:Guild:%s:Spawn:%s:", + "Light:%s:Deity:%s:RTeam:%d:DTeam:%d:Type:%s:LastName:%s:Guild:%s:Spawn:%s:" + "Info:%s:", name.toUtf8().data(), level(), raceString().toUtf8().data(), @@ -1003,7 +1006,8 @@ typeString().toUtf8().data(), lastName().toUtf8().data(), guildTag().toUtf8().data(), - spawnTimeStr ().replace (":", ".").toUtf8 ().data () + spawnTimeStr ().replace (":", ".").toUtf8 ().data (), + info().toUtf8().data() ); #endif @@ -1032,6 +1036,7 @@ + ":DTeam:" + QString::number(deityTeam()) + ":Type:" + typeString() + ":Guild:" + guildTag() + + ":Info:" + info() + ":FilterFlags:" + QString::number(filterFlags()) + ":"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-07-04 22:21:14
|
Revision: 1480 http://sourceforge.net/p/seq/svn/1480 Author: cn187 Date: 2024-07-04 22:21:12 +0000 (Thu, 04 Jul 2024) Log Message: ----------- [qt6] Multi-display fixes Modified Paths: -------------- showeq/branches/cn187_devel/src/map.cpp Modified: showeq/branches/cn187_devel/src/map.cpp =================================================================== --- showeq/branches/cn187_devel/src/map.cpp 2024-06-29 19:03:37 UTC (rev 1479) +++ showeq/branches/cn187_devel/src/map.cpp 2024-07-04 22:21:12 UTC (rev 1480) @@ -238,7 +238,7 @@ // get info about the widget and its environment #if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) - QRect availGeom = window()->windowHandle()->screen()->availableGeometry(); + QRect availGeom = ((QLabel*)parent())->window()->windowHandle()->screen()->availableGeometry(); int sw = availGeom.width(); int sh = availGeom.height(); int sx = availGeom.x(); @@ -262,9 +262,9 @@ if ( y+h > sh ) y = sh - h; if ( x < sx ) - x = sx; + x = sx + x; if ( y < sy ) - y = sy; + y = sy + y; move( x, y ); // show the widget This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-29 19:03:39
|
Revision: 1479 http://sourceforge.net/p/seq/svn/1479 Author: cn187 Date: 2024-06-29 19:03:37 +0000 (Sat, 29 Jun 2024) Log Message: ----------- Create the thread before we try to set its priority Modified Paths: -------------- showeq/branches/cn187_devel/src/packetcapture.cpp Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-28 00:12:09 UTC (rev 1478) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-29 19:03:37 UTC (rev 1479) @@ -82,7 +82,6 @@ { char ebuf[PCAP_ERRBUF_SIZE]; // pcap error buffer char filter_buf[256]; // pcap filter buffer - struct sched_param sp; seqInfo("Initializing Packet Capture Thread: "); m_pcache_closed = false; @@ -135,23 +134,12 @@ exit(0); } - this->setFilter(device, host, realtime, address_type, 0, 0); - m_pcache_first = m_pcache_last = NULL; pthread_create (&m_tid, NULL, loop, (void*)this); - if (realtime) - { - memset (&sp, 0, sizeof (sp)); - sp.sched_priority = 1; - if (pthread_setschedparam (m_tid, SCHED_RR, &sp) != 0) - { - seqWarn("Failed to set capture thread realtime."); - } - } + this->setFilter(device, host, realtime, address_type, 0, 0); - m_pcapFilter = filter_buf; } //------------------------------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-28 00:12:12
|
Revision: 1478 http://sourceforge.net/p/seq/svn/1478 Author: cn187 Date: 2024-06-28 00:12:09 +0000 (Fri, 28 Jun 2024) Log Message: ----------- Additional fixes for entities fix Modified Paths: -------------- showeq/branches/cn187_devel/src/spawnshell.cpp Modified: showeq/branches/cn187_devel/src/spawnshell.cpp =================================================================== --- showeq/branches/cn187_devel/src/spawnshell.cpp 2024-06-28 00:12:00 UTC (rev 1477) +++ showeq/branches/cn187_devel/src/spawnshell.cpp 2024-06-28 00:12:09 UTC (rev 1478) @@ -1698,8 +1698,17 @@ // remove the player from the list (if it had a 0 id) m_players.take(0); + Item* old = m_players.take(oldPlayerID); + if (old != m_player) + delete old; + + //if the new ID already exists (sometimes as an unknown spawn) remove it + Item* existing = m_players.take(newPlayerID); + if (existing != m_player) + delete existing; + // re-insert the player into the list - m_players.insert(newPlayerID, m_players.take(oldPlayerID)); + m_players.insert(newPlayerID, m_player); emit changeItem(m_player, tSpawnChangedALL); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-28 00:12:03
|
Revision: 1477 http://sourceforge.net/p/seq/svn/1477 Author: cn187 Date: 2024-06-28 00:12:00 +0000 (Fri, 28 Jun 2024) Log Message: ----------- Rework capture filter and session detection logic - reduce code duplication - fix issues with session detection when an IP address isn't specified - fix issues with session detection when specifying a MAC - fix other related bugs Modified Paths: -------------- showeq/branches/cn187_devel/src/interface.cpp showeq/branches/cn187_devel/src/packet.cpp showeq/branches/cn187_devel/src/packet.h showeq/branches/cn187_devel/src/packetcapture.cpp showeq/branches/cn187_devel/src/packetstream.cpp showeq/branches/cn187_devel/src/packetstream.h Modified: showeq/branches/cn187_devel/src/interface.cpp =================================================================== --- showeq/branches/cn187_devel/src/interface.cpp 2024-06-25 00:14:58 UTC (rev 1476) +++ showeq/branches/cn187_devel/src/interface.cpp 2024-06-28 00:12:00 UTC (rev 1477) @@ -5239,7 +5239,7 @@ maclst, 0, true, &ok); if (ok) { - if (address.length() != 17) + if (address.length() != 17 && !address.isEmpty()) { seqWarn("Invalid MAC Address (%s)! Ignoring!", address.toLatin1().data()); return; Modified: showeq/branches/cn187_devel/src/packet.cpp =================================================================== --- showeq/branches/cn187_devel/src/packet.cpp 2024-06-25 00:14:58 UTC (rev 1476) +++ showeq/branches/cn187_devel/src/packet.cpp 2024-06-28 00:12:00 UTC (rev 1477) @@ -181,54 +181,38 @@ // no client/server ports yet m_clientPort = 0; m_serverPort = 0; - - struct hostent *he; - struct in_addr ia; + if (m_ip.isEmpty() && m_mac.isEmpty()) - seqFatal("No address specified"); - - if (!m_ip.isEmpty()) { - /* Substitute "special" IP which is interpreted - to set up a different filter for picking up new sessions */ - - if (m_ip == "auto") - inet_aton (AUTOMATIC_CLIENT_IP, &ia); - else if (inet_aton (m_ip.toLatin1().data(), &ia) == 0) - { - he = gethostbyname(m_ip.toLatin1().data()); - if (!he) - seqFatal("Invalid address; %s", m_ip.toLatin1().data()); - - memcpy (&ia, he->h_addr_list[0], he->h_length); - } - m_client_addr = ia.s_addr; - m_ip = inet_ntoa(ia); - - if (m_ip == AUTOMATIC_CLIENT_IP) - { - m_detectingClient = true; - seqInfo("Listening for first client seen."); - } - else - { - m_detectingClient = false; - seqInfo("Listening for client: %s", m_ip.toLatin1().data()); - } + seqInfo("No address specified. Defaulting to client auto-detect"); + m_ip = AUTOMATIC_CLIENT_IP; } + validateIP(); + if (m_playbackPackets == PLAYBACK_OFF) { // create the pcap object and initialize, either with MAC or IP m_packetCapture = new PacketCaptureThread(); if (m_mac.length() == 17) + { + seqInfo("Listening for client MAC: %s", m_mac.toLatin1().data()); + m_packetCapture->start(m_device.toLatin1().data(), m_mac.toLatin1().data(), m_realtime, MAC_ADDRESS_TYPE ); + } else + { + if (m_detectingClient) + seqInfo("Listening for next client seen. (you must zone for this to work!)"); + else + seqInfo("Listening for client: %s", m_ip.toLatin1().data()); + m_packetCapture->start(m_device.toLatin1().data(), m_ip.toLatin1().data(), m_realtime, IP_ADDRESS_TYPE ); + } emit filterChanged(); } else if (m_playbackPackets == PLAYBACK_FORMAT_TCPDUMP) @@ -303,6 +287,43 @@ } } +//helper function to verify specified IP is a valid IP or hostname, and/or +//to set up auto detection. +void EQPacket::validateIP() +{ + struct in_addr ia; + struct hostent *he; + + if (m_ip.isEmpty() || m_ip == AUTOMATIC_CLIENT_IP) + { + /* Substitute "special" IP which is interpreted + to set up a different filter for picking up new sessions */ + inet_aton (AUTOMATIC_CLIENT_IP, &ia); + } + else if (inet_aton (m_ip.toLatin1().data(), &ia) == 0) + { + he = gethostbyname(m_ip.toLatin1().data()); + if (he) + { + memcpy (&ia, he->h_addr_list[0], he->h_length); + } + else + { + // If the IP or host is invalid, default to auto-detect, rather + // than immediately exiting (the previous behavior) + seqWarn("Invalid address or hostname: %s", m_ip.toLatin1().data()); + seqWarn("Defaulting to client auto-detect"); + m_ip = AUTOMATIC_CLIENT_IP; + inet_aton (AUTOMATIC_CLIENT_IP, &ia); + } + } + m_client_addr = ia.s_addr; + m_ip = inet_ntoa(ia); + + m_detectingClient = (m_ip == AUTOMATIC_CLIENT_IP); + +} + //////////////////////////////////////////////////// // Destructor EQPacket::~EQPacket() @@ -557,9 +578,9 @@ this, SIGNAL(sessionTrackingChanged(uint8_t))); connect(stream, - SIGNAL(lockOnClient(in_port_t, in_port_t)), + SIGNAL(lockOnClient(in_port_t, in_port_t, in_addr_t)), this, - SLOT(lockOnClient(in_port_t, in_port_t))); + SLOT(lockOnClient(in_port_t, in_port_t, in_addr_t))); connect(stream, SIGNAL(closing(uint32_t, EQStreamID)), this, @@ -697,23 +718,32 @@ // If we just closed the zone server session, unlatch the client port if (streamId == zone2client || streamId == client2zone) { - m_clientPort = 0; - m_serverPort = 0; + unlatchClientPort(); - emit clientPortLatched(m_clientPort); - seqInfo("EQPacket: SessionDisconnect detected, awaiting next zone session, pcap filter: EQ Client %s", - m_ip.toLatin1().data()); + (m_ip == AUTOMATIC_CLIENT_IP) ? "auto-detect" : m_ip.toLatin1().data()); } } +// Unlatch a locked-on client port, so the next client is detected correctly +void EQPacket::unlatchClientPort() +{ + m_clientPort = 0; + m_serverPort = 0; + emit clientPortLatched(m_clientPort); +} + + //////////////////////////////////////////////////// // Locks onto a specific client port (for session tracking) -void EQPacket::lockOnClient(in_port_t serverPort, in_port_t clientPort) +void EQPacket::lockOnClient(in_port_t serverPort, in_port_t clientPort, in_addr_t clientAddr) { m_serverPort = serverPort; m_clientPort = clientPort; + m_client_addr = clientAddr; + in_addr ia = inet_makeaddr(m_client_addr, m_client_addr); + if (m_playbackPackets == PLAYBACK_OFF || m_playbackPackets == PLAYBACK_FORMAT_TCPDUMP) { @@ -746,7 +776,7 @@ else { seqInfo("EQPacket: SessionRequest detected, pcap filter: EQ Client %s, Client port %d. Server port %d", - m_ip.toLatin1().data(), m_clientPort, m_serverPort); + inet_ntoa(ia), m_clientPort, m_serverPort); } emit clientPortLatched(m_clientPort); @@ -921,14 +951,14 @@ void EQPacket::monitorIPClient(const QString& ip) { m_ip = ip; - struct in_addr ia; - inet_aton (m_ip.toLatin1().data(), &ia); - m_client_addr = ia.s_addr; + + validateIP(); + emit clientChanged(m_client_addr); resetEQPacket(); - seqInfo("Listening for IP client: %s", m_ip.toLatin1().data()); + seqInfo("Listening for IP client: %s", (m_ip == AUTOMATIC_CLIENT_IP) ? "auto-detect" : m_ip.toLatin1().data()); if (m_playbackPackets == PLAYBACK_OFF || m_playbackPackets == PLAYBACK_FORMAT_TCPDUMP) { @@ -945,24 +975,32 @@ void EQPacket::monitorMACClient(const QString& mac) { m_mac = mac; - m_detectingClient = true; struct in_addr ia; inet_aton (AUTOMATIC_CLIENT_IP, &ia); + m_detectingClient = true; m_client_addr = ia.s_addr; emit clientChanged(m_client_addr); resetEQPacket(); - seqInfo("Listening for MAC client: %s", m_mac.toLatin1().data()); + if (!m_mac.isEmpty() && m_mac.length() == 17) + { + seqInfo("Listening for MAC client: %s", m_mac.toLatin1().data()); - if (m_playbackPackets == PLAYBACK_OFF || - m_playbackPackets == PLAYBACK_FORMAT_TCPDUMP) + if (m_playbackPackets == PLAYBACK_OFF || + m_playbackPackets == PLAYBACK_FORMAT_TCPDUMP) + { + m_packetCapture->setFilter(m_device.toLatin1().data(), + m_mac.toLatin1().data(), + m_realtime, + MAC_ADDRESS_TYPE, 0, 0); + emit filterChanged(); + } + } + else { - m_packetCapture->setFilter(m_device.toLatin1().data(), - m_ip.toLatin1().data(), - m_realtime, - IP_ADDRESS_TYPE, 0, 0); - emit filterChanged(); + seqWarn("Invalid MAC specified. Defaulting to auto-detect of next client."); + monitorNextClient(); } } @@ -1005,50 +1043,31 @@ // stop the current packet capture m_packetCapture->stop(); - // setup for capture on new device - if (!m_ip.isEmpty()) - { - struct hostent *he; - struct in_addr ia; + validateIP(); - /* Substitute "special" IP which is interpreted - to set up a different filter for picking up new sessions */ - - if (m_ip == "auto") - inet_aton (AUTOMATIC_CLIENT_IP, &ia); - else if (inet_aton (m_ip.toLatin1().data(), &ia) == 0) - { - he = gethostbyname(m_ip.toLatin1().data()); - if (!he) - seqFatal("Invalid address; %s", m_ip.toLatin1().data()); - - memcpy (&ia, he->h_addr_list[0], he->h_length); - } - m_client_addr = ia.s_addr; - m_ip = inet_ntoa(ia); - - if (m_ip == AUTOMATIC_CLIENT_IP) - { - m_detectingClient = true; - seqInfo("Listening for first client seen."); - } - else - { - m_detectingClient = false; - seqInfo("Listening for client: %s", m_ip.toLatin1().data()); - } - } - resetEQPacket(); // restart packet capture if (m_mac.length() == 17) + { + seqInfo("Listening for client MAC: %s", m_mac.toLatin1().data()); + m_packetCapture->start(m_device.toLatin1().data(), m_mac.toLatin1().data(), m_realtime, MAC_ADDRESS_TYPE ); + } else - m_packetCapture->start(m_device.toLatin1().data(), m_ip.toLatin1().data(), - m_realtime, IP_ADDRESS_TYPE ); + { + if (m_detectingClient) + seqInfo("Listening for next client seen. (you must zone for this to work!)"); + else + seqInfo("Listening for client: %s", m_ip.toLatin1().data()); + + m_packetCapture->start(m_device.toLatin1().data(), + m_ip.toLatin1().data(), + m_realtime, IP_ADDRESS_TYPE ); + } + emit filterChanged(); } @@ -1127,10 +1146,7 @@ m_zone2ClientStream->reset(); m_zone2ClientStream->setSessionTracking(m_session_tracking); - m_clientPort = 0; - m_serverPort = 0; - - emit clientPortLatched(m_clientPort); + unlatchClientPort(); } /////////////////////////////////////////// Modified: showeq/branches/cn187_devel/src/packet.h =================================================================== --- showeq/branches/cn187_devel/src/packet.h 2024-06-25 00:14:58 UTC (rev 1476) +++ showeq/branches/cn187_devel/src/packet.h 2024-06-28 00:12:00 UTC (rev 1477) @@ -121,7 +121,8 @@ protected slots: void closeStream(uint32_t sessionId, EQStreamID streamId); - void lockOnClient(in_port_t serverPort, in_port_t clientPort); + void unlatchClientPort(); + void lockOnClient(in_port_t serverPort, in_port_t clientPort, in_addr_t clientAddr); signals: // used for net_stats display @@ -158,6 +159,7 @@ bool unknown); private: + void validateIP(); PacketCaptureProviderThread* m_packetCapture; VPacket* m_vPacket; Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-25 00:14:58 UTC (rev 1476) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-28 00:12:00 UTC (rev 1477) @@ -376,13 +376,13 @@ if (address_type == IP_ADDRESS_TYPE) { - if (hostname && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) + if (hostname && strlen(hostname) && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) // host was specified/detected pfb += sprintf(pfb, " and host %s", hostname); } else if (address_type == MAC_ADDRESS_TYPE) { - if (hostname && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) + if (hostname && strlen(hostname) && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) // mac was specified pfb += sprintf(pfb, " and ether host %s", hostname); } Modified: showeq/branches/cn187_devel/src/packetstream.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetstream.cpp 2024-06-25 00:14:58 UTC (rev 1476) +++ showeq/branches/cn187_devel/src/packetstream.cpp 2024-06-28 00:12:00 UTC (rev 1477) @@ -92,6 +92,7 @@ m_sessionId(0), m_sessionKey(0), m_sessionClientPort(0), + m_sessionClientIP(0), m_maxLength(0), m_decodeKey(0), m_validKey(true) @@ -196,6 +197,7 @@ m_arqSeqExp = 0; m_arqSeqFound = false; m_sessionClientPort = 0; + m_sessionClientIP = 0; m_sessionId = 0; m_sessionKey = 0; } @@ -543,9 +545,11 @@ // Only accept packets that correspond to our latched client port, if // it is set. This helps filter out multiple sessions on the same physical // host when two eq clients zone at the same time. The first one will win. - if (m_sessionClientPort != 0 && + if (m_sessionClientPort != 0 && m_sessionClientIP != 0 && ((dir() == DIR_Server && m_sessionClientPort != packet.getDestPort()) || - (dir() == DIR_Client && m_sessionClientPort != packet.getSourcePort()))) + (dir() == DIR_Client && m_sessionClientPort != packet.getSourcePort()) || + (dir() == DIR_Server && m_sessionClientIP != packet.getIPv4DestN()) || + (dir() == DIR_Client && m_sessionClientIP != packet.getIPv4SourceN()))) { #if (defined(PACKET_PROCESS_DIAG) && (PACKET_PROCESS_DIAG > 1)) || (defined(PACKET_SESSION_DIAG) && PACKET_SESSION_DIAG > 1) seqDebug("discarding packet %s:%d ==>%s:%d netopcode=%04x size=%d. Multiple sessions on the same box? Ignoring all but one of them. Latched client port %d. Session tracking %s.", @@ -1038,6 +1042,7 @@ // later. SessionRequest should always be an outer protocol packet // so we can cast it to EQUDPIPPacketFormat to get the ip headers. m_sessionClientPort = ((EQUDPIPPacketFormat&) packet).getSourcePort(); + m_sessionClientIP = ((EQUDPIPPacketFormat&) packet).getIPv4SourceN(); } } break; @@ -1132,6 +1137,7 @@ // later. SessionRequest should always be an outer protocol packet // so we can cast it to EQUDPIPPacketFormat to get the ip headers. m_sessionClientPort = ((EQUDPIPPacketFormat&) packet).getDestPort(); + m_sessionClientIP = ((EQUDPIPPacketFormat&) packet).getIPv4DestN(); // If this is the world server talking to us, reset session tracking if // it is on so we unlatch the client in case of getting kicked. @@ -1149,8 +1155,9 @@ // headers! m_session_tracking_enabled = 2; - emit lockOnClient(((EQUDPIPPacketFormat&) packet).getSourcePort(), - ((EQUDPIPPacketFormat&) packet).getDestPort()); + emit lockOnClient(((EQUDPIPPacketFormat&) packet).getSourcePort(), + ((EQUDPIPPacketFormat&) packet).getDestPort(), + ((EQUDPIPPacketFormat&) packet).getIPv4DestN()); emit sessionTrackingChanged(m_session_tracking_enabled); } } @@ -1200,6 +1207,7 @@ emit sessionTrackingChanged(m_session_tracking_enabled); m_sessionClientPort = 0; + m_sessionClientIP = 0; } emit closing(m_sessionId, m_streamid); Modified: showeq/branches/cn187_devel/src/packetstream.h =================================================================== --- showeq/branches/cn187_devel/src/packetstream.h 2024-06-25 00:14:58 UTC (rev 1476) +++ showeq/branches/cn187_devel/src/packetstream.h 2024-06-28 00:12:00 UTC (rev 1477) @@ -112,7 +112,7 @@ // this signals a change in the session tracking state void sessionTrackingChanged(uint8_t); - void lockOnClient(in_port_t serverPort, in_port_t clientPort); + void lockOnClient(in_port_t serverPort, in_port_t clientPort, in_addr_t clientAddr); // Signal a new session key being received void sessionKey(uint32_t sessionId, EQStreamID streadid, uint32_t sessionKey); @@ -155,6 +155,7 @@ uint32_t m_sessionId; uint32_t m_sessionKey; in_port_t m_sessionClientPort; + in_addr_t m_sessionClientIP; uint32_t m_maxLength; // encryption This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-25 00:15:00
|
Revision: 1476 http://sourceforge.net/p/seq/svn/1476 Author: cn187 Date: 2024-06-25 00:14:58 +0000 (Tue, 25 Jun 2024) Log Message: ----------- More capture logic fixes Modified Paths: -------------- showeq/branches/cn187_devel/src/packetcapture.cpp Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-24 19:19:34 UTC (rev 1475) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-25 00:14:58 UTC (rev 1476) @@ -386,6 +386,10 @@ // mac was specified pfb += sprintf(pfb, " and ether host %s", hostname); } + else if (address_type == DEFAULT_ADDRESS_TYPE) + { + //don't specify IP or MAC address in filter string + } else { seqFatal("pcap_error:filter_string: unknown address_type (%d)", address_type); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-24 19:19:36
|
Revision: 1475 http://sourceforge.net/p/seq/svn/1475 Author: cn187 Date: 2024-06-24 19:19:34 +0000 (Mon, 24 Jun 2024) Log Message: ----------- Fixes for capture filter logic Modified Paths: -------------- showeq/branches/cn187_devel/src/packetcapture.cpp Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-19 19:27:23 UTC (rev 1474) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-24 19:19:34 UTC (rev 1475) @@ -82,16 +82,11 @@ { char ebuf[PCAP_ERRBUF_SIZE]; // pcap error buffer char filter_buf[256]; // pcap filter buffer - struct bpf_program bpp; struct sched_param sp; - bpf_u_int32 mask; // sniff device netmask - bpf_u_int32 net; // sniff device ip seqInfo("Initializing Packet Capture Thread: "); m_pcache_closed = false; - this->setFilter(device, host, realtime, address_type, 0, 0); - /* A word about pcap_open_live() from the docs ** to_ms specifies the read timeout in milliseconds. The ** read timeout is used to arrange that the read not necessarily @@ -140,20 +135,8 @@ exit(0); } - if (pcap_compile(m_pcache_pcap, &bpp, filter_buf, 1, net) == -1) - { - pcap_perror (m_pcache_pcap, (char*)"pcap_error:pcap_compile"); - exit(0); - } + this->setFilter(device, host, realtime, address_type, 0, 0); - if (pcap_setfilter (m_pcache_pcap, &bpp) == -1) - { - pcap_perror (m_pcache_pcap, (char*)"pcap_error:pcap_setfilter"); - exit(0); - } - - pcap_freecode(&bpp); - m_pcache_first = m_pcache_last = NULL; pthread_create (&m_tid, NULL, loop, (void*)this); @@ -366,8 +349,8 @@ char ebuf[PCAP_ERRBUF_SIZE]; struct bpf_program bpp; struct sched_param sp; - bpf_u_int32 mask; // sniff device netmask - bpf_u_int32 net; // sniff device ip + bpf_u_int32 mask = 0; // sniff device netmask + bpf_u_int32 net = 0 ; // sniff device ip // Fetch the netmask for the device to use later with the filter if (pcap_lookupnet(device, &net, &mask, ebuf) == -1) @@ -395,13 +378,13 @@ { if (hostname && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) // host was specified/detected - pfb += sprintf(" and host %s", hostname); + pfb += sprintf(pfb, " and host %s", hostname); } else if (address_type == MAC_ADDRESS_TYPE) { if (hostname && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) // mac was specified - pfb += sprintf(" and ether host %s", hostname); + pfb += sprintf(pfb, " and ether host %s", hostname); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-19 19:27:26
|
Revision: 1474 http://sourceforge.net/p/seq/svn/1474 Author: cn187 Date: 2024-06-19 19:27:23 +0000 (Wed, 19 Jun 2024) Log Message: ----------- Release 6.3.15 - Update version to 6.3.15 - Support for EQ Patch 06/19/24 - Struct and opcode updates Modified Paths: -------------- showeq/branches/cn187_devel/ChangeLog showeq/branches/cn187_devel/conf/zoneopcodes.xml showeq/branches/cn187_devel/configure.in showeq/branches/cn187_devel/src/everquest.h Modified: showeq/branches/cn187_devel/ChangeLog =================================================================== --- showeq/branches/cn187_devel/ChangeLog 2024-06-19 19:27:15 UTC (rev 1473) +++ showeq/branches/cn187_devel/ChangeLog 2024-06-19 19:27:23 UTC (rev 1474) @@ -1,3 +1,9 @@ +cn187 (06/19/24) +---------------- +- Update to version 6.3.15 +- Support for EQ Patch 06/19/24 +- Struct and opcode updates + cn187 (05/15/24) ---------------- - Update to version 6.3.14 Modified: showeq/branches/cn187_devel/conf/zoneopcodes.xml =================================================================== --- showeq/branches/cn187_devel/conf/zoneopcodes.xml 2024-06-19 19:27:15 UTC (rev 1473) +++ showeq/branches/cn187_devel/conf/zoneopcodes.xml 2024-06-19 19:27:23 UTC (rev 1474) @@ -3,70 +3,70 @@ <seqopcodes> <!-- Critical opcodes used directly by ShowEQ --> - <opcode id="7b63" name="OP_PlayerProfile" updated="05/15/24"> + <opcode id="3132" name="OP_PlayerProfile" updated="06/19/24"> <comment>CharProfileCode</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="3af9" name="OP_ZoneEntry" updated="05/15/24"> + <opcode id="5e3e" name="OP_ZoneEntry" updated="06/19/24"> <comment>ZoneEntryCode</comment> <payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="188f" name="OP_TimeOfDay" updated="05/15/24"> + <opcode id="3407" name="OP_TimeOfDay" updated="06/19/24"> <comment>TimeOfDayCode</comment> <payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/> </opcode> - <opcode id="4239" name="OP_NewZone" updated="05/15/24"> + <opcode id="5e02" name="OP_NewZone" updated="06/19/24"> <comment>NewZoneCode</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="30e8" name="OP_SpawnDoor" updated="05/15/24"> + <opcode id="12c4" name="OP_SpawnDoor" updated="06/19/24"> <comment>DoorSpawnsCode</comment> <payload dir="server" typename="doorStruct" sizechecktype="modulus"/> </opcode> - <opcode id="5cce" name="OP_GroundSpawn" updated="05/15/24"> + <opcode id="739b" name="OP_GroundSpawn" updated="06/19/24"> <comment>MakeDropCode</comment> <payload dir="server" typename="makeDropStruct" sizechecktype="none"/> <payload dir="client" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="05a5" name="OP_SendZonePoints" updated="05/15/24"> + <opcode id="6086" name="OP_SendZonePoints" updated="06/19/24"> <comment>Coords in a zone that will port you to another zone</comment> <payload dir="server" typename="zonePointsStruct" sizechecktype="none"/> </opcode> - <opcode id="1786" name="OP_AAExpUpdate" updated="05/15/24"> + <opcode id="0753" name="OP_AAExpUpdate" updated="06/19/24"> <comment>Receiving AA experience. Also when percent to AA changes.</comment> <payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="7fd6" name="OP_ExpUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_ExpUpdate" updated="07/19/23"> <comment>ExpUpdateCode</comment> <payload dir="server" typename="expUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="06e6" name="OP_GuildMOTD" updated="05/15/24"> + <opcode id="6b08" name="OP_GuildMOTD" updated="06/19/24"> <comment>GuildMOTD</comment> <payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/> </opcode> - <opcode id="7da8" name="OP_ClientUpdate" updated="05/15/24"> + <opcode id="0c4e" name="OP_ClientUpdate" updated="06/19/24"> <comment>Position updates</comment> <payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/> <payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/> </opcode> - <opcode id="798b" name="OP_NpcMoveUpdate" updated="05/15/24"> + <opcode id="6ed3" name="OP_NpcMoveUpdate" updated="06/19/24"> <comment>Position updates</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="6c1e" name="OP_MobUpdate" updated="05/15/24"> + <opcode id="669f" name="OP_MobUpdate" updated="06/19/24"> <comment>MobUpdateCode</comment> <payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/> </opcode> - <opcode id="4e6a" name="OP_DeleteSpawn" updated="05/15/24"> + <opcode id="0bee" name="OP_DeleteSpawn" updated="06/19/24"> <comment>DeleteSpawnCode</comment> <payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/> </opcode> - <opcode id="1e0c" name="OP_RemoveSpawn" updated="05/15/24"> + <opcode id="1a60" name="OP_RemoveSpawn" updated="06/19/24"> <comment>Remove spawn from zone</comment> <payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/> </opcode> - <opcode id="00ec" name="OP_Death" updated="05/15/24"> + <opcode id="3f63" name="OP_Death" updated="06/19/24"> <comment>old NewCorpseCode</comment> <payload dir="server" typename="newCorpseStruct" sizechecktype="match"/> </opcode> @@ -74,56 +74,56 @@ <comment>SpawnUpdateCode</comment> <payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="3178" name="OP_SpawnAppearance" updated="05/15/24"> + <opcode id="59cf" name="OP_SpawnAppearance" updated="06/19/24"> <comment>SpawnAppearanceCode</comment> <payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/> </opcode> - <opcode id="0b0d" name="OP_Stamina" updated="07/19/23"> + <opcode id="ffff" name="OP_Stamina" updated="07/19/23"> <comment>Server updating on hunger/thirst</comment> <payload dir="server" typename="staminaStruct" sizechecktype="match"/> </opcode> - <opcode id="639d" name="OP_HPUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_HPUpdate" updated="07/19/23"> <comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment> <payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="2e5b" name="OP_GuildMemberUpdate" updated="05/15/24"> + <opcode id="082d" name="OP_GuildMemberUpdate" updated="06/19/24"> <comment>Info regarding guild members</comment> <payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/> </opcode> - <opcode id="0c2e" name="OP_ClickObject" updated="05/15/24"> + <opcode id="2870" name="OP_ClickObject" updated="06/19/24"> <comment>Items dropped on the ground</comment> <payload dir="both" typename="remDropStruct" sizechecktype="match"/> </opcode> - <opcode id="3a56" name="OP_Action" updated="05/15/24"> + <opcode id="24fc" name="OP_Action" updated="06/19/24"> <comment>Spells cast etc</comment> <payload dir="both" typename="actionStruct" sizechecktype="match"/> <payload dir="both" typename="actionAltStruct" sizechecktype="match"/> </opcode> - <opcode id="56d8" name="OP_Action2" updated="04/17/24"> + <opcode id="ffff" name="OP_Action2" updated="04/17/24"> <comment>Combat actions i.e. bash, kick etc</comment> <payload dir="both" typename="action2Struct" sizechecktype="match"/> </opcode> - <opcode id="7b3d" name="OP_Consider" updated="05/15/24"> + <opcode id="0fd2" name="OP_Consider" updated="06/19/24"> <comment>ConsiderCode</comment> <payload dir="both" typename="considerStruct" sizechecktype="match"/> </opcode> - <opcode id="4a96" name="OP_TargetMouse" updated="05/15/24"> + <opcode id="133c" name="OP_TargetMouse" updated="06/19/24"> <comment>Targeting a person - old ClientTargetCode</comment> <payload dir="both" typename="clientTargetStruct" sizechecktype="match"/> </opcode> - <opcode id="67ec" name="OP_SpawnRename" updated="07/19/23"> + <opcode id="ffff" name="OP_SpawnRename" updated="07/19/23"> <comment>Spawns getting renamed after initial NewSpawn</comment> <payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/> </opcode> - <opcode id="5587" name="OP_Illusion" updated="07/19/23"> + <opcode id="ffff" name="OP_Illusion" updated="07/19/23"> <comment>Spawn being illusioned (changing forms)</comment> <payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/> </opcode> - <opcode id="04f8" name="OP_Shroud" updated="07/19/23"> + <opcode id="ffff" name="OP_Shroud" updated="07/19/23"> <comment>Server putting players into shroud form</comment> <payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/> </opcode> - <opcode id="54e6" name="OP_ZoneChange" updated="05/15/24"> + <opcode id="146c" name="OP_ZoneChange" updated="06/19/24"> <comment>old ZoneChangeCode</comment> <payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/> </opcode> @@ -163,55 +163,55 @@ <comment>Group leader change</comment> <payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/> </opcode> - <opcode id="211c" name="OP_Buff" updated="07/19/23"> + <opcode id="ffff" name="OP_Buff" updated="07/19/23"> <comment>old BuffDropCode</comment> <payload dir="both" typename="buffStruct" sizechecktype="match"/> </opcode> - <opcode id="5466" name="OP_BeginCast" updated="07/19/23"> + <opcode id="ffff" name="OP_BeginCast" updated="07/19/23"> <comment>BeginCastCode</comment> <payload dir="both" typename="beginCastStruct" sizechecktype="match"/> </opcode> - <opcode id="0b36" name="OP_CastSpell" updated="12/05/23"> + <opcode id="ffff" name="OP_CastSpell" updated="12/05/23"> <comment>StartCastCode</comment> <payload dir="both" typename="startCastStruct" sizechecktype="match"/> </opcode> - <opcode id="3a19" name="OP_SwapSpell" updated="07/19/23"> + <opcode id="ffff" name="OP_SwapSpell" updated="07/19/23"> <comment>TradeSpellBookSlotsCode</comment> <payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/> </opcode> - <opcode id="1af6" name="OP_MemorizeSpell" updated="07/19/23"> + <opcode id="ffff" name="OP_MemorizeSpell" updated="07/19/23"> <comment>MemSpellCode</comment> <payload dir="both" typename="memSpellStruct" sizechecktype="match"/> </opcode> - <opcode id="37d6" name="OP_InspectAnswer" updated="07/19/23"> + <opcode id="ffff" name="OP_InspectAnswer" updated="07/19/23"> <comment>InspectDataCode</comment> <payload dir="both" typename="inspectDataStruct" sizechecktype="match"/> </opcode> - <opcode id="49f5" name="OP_Emote" updated="07/19/23"> + <opcode id="ffff" name="OP_Emote" updated="07/19/23"> <comment>EmoteTextCode</comment> <payload dir="both" typename="emoteTextStruct" sizechecktype="none"/> </opcode> - <opcode id="5f08" name="OP_SimpleMessage" updated="05/15/24"> + <opcode id="3256" name="OP_SimpleMessage" updated="06/19/24"> <comment>SimpleMessageCode</comment> <payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/> </opcode> - <opcode id="445d" name="OP_FormattedMessage" updated="05/15/24"> + <opcode id="3fba" name="OP_FormattedMessage" updated="06/19/24"> <comment>FormattedMessageCode i.e. pet dismissed etc</comment> <payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="0f8c" name="OP_CommonMessage" updated="05/15/24"> + <opcode id="2148" name="OP_CommonMessage" updated="06/19/24"> <comment>ChannelMessageCode i.e. /tell /ooc /shout etc</comment> <payload dir="both" typename="channelMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="554c" name="OP_SpecialMesg" updated="05/15/24"> + <opcode id="686f" name="OP_SpecialMesg" updated="06/19/24"> <comment>Communicate textual info to client including hail responses etc</comment> <payload dir="server" typename="specialMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="638b" name="OP_RandomReq" updated="07/19/23"> + <opcode id="ffff" name="OP_RandomReq" updated="07/19/23"> <comment>RandomReqCode</comment> <payload dir="client" typename="randomReqStruct" sizechecktype="match"/> </opcode> - <opcode id="0312" name="OP_RandomReply" updated="07/19/23"> + <opcode id="ffff" name="OP_RandomReply" updated="07/19/23"> <comment>RandomCode</comment> <payload dir="server" typename="randomStruct" sizechecktype="match"/> </opcode> @@ -223,36 +223,36 @@ <comment>Server replying with deny information after /deny</comment> <payload dir="server" typename="consentResponseStruct" sizechecktype="match"/> </opcode> - <opcode id="3d4f" name="OP_ManaChange" updated="07/19/23"> + <opcode id="ffff" name="OP_ManaChange" updated="07/19/23"> <comment>Mana change. Bards send this up with no size. Casters receive this for mana updates.</comment> <payload dir="server" typename="manaDecrementStruct" sizechecktype="match"/> <payload dir="client" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="499c" name="OP_BazaarSearchRequest" updated="07/19/23"> + <opcode id="ffff" name="OP_BazaarSearchRequest" updated="07/19/23"> <comment>Bazaar search request </comment> <payload dir="client" typename="bazaarSearchQueryStruct" sizechecktype="none"/> </opcode> - <opcode id="2d7e" name="OP_BazaarSearchResponse" updated="07/19/23"> + <opcode id="ffff" name="OP_BazaarSearchResponse" updated="07/19/23"> <comment>Bazaar search Response - Struct incorrect </comment> <payload dir="server" typename="bazaarSearchResponseStruct" sizechecktype="modulus"/> </opcode> - <opcode id="09b6" name="OP_MoneyOnCorpse" updated="07/19/23"> + <opcode id="ffff" name="OP_MoneyOnCorpse" updated="07/19/23"> <comment>MoneyOnCorpseCode</comment> <payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/> </opcode> - <opcode id="4aa9" name="OP_SkillUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_SkillUpdate" updated="07/19/23"> <comment>Skill up code</comment> <payload dir="server" typename="skillIncStruct" sizechecktype="match"/> </opcode> - <opcode id="262e" name="OP_LevelUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_LevelUpdate" updated="07/19/23"> <comment>LevelUpUpdateCode</comment> <payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="0f58" name="OP_DzSwitchInfo" updated="07/19/23"> + <opcode id="ffff" name="OP_DzSwitchInfo" updated="07/19/23"> <comment>Expedition compass etc</comment> <payload dir="server" typename="dzSwitchInfo" sizechecktype="none"/> </opcode> - <opcode id="64ca" name="OP_DzInfo" updated="07/19/23"> + <opcode id="ffff" name="OP_DzInfo" updated="07/19/23"> <comment>Expedition Information</comment> <payload dir="server" typename="dzInfo" sizechecktype="match"/> </opcode> @@ -260,11 +260,11 @@ <comment>Environmental Damage</comment> <payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/> </opcode> - <opcode id="0d11" name="OP_SetRunMode" updated="07/19/23"> + <opcode id="ffff" name="OP_SetRunMode" updated="07/19/23"> <comment>old cRunToggleCode</comment> <payload dir="client" typename="cRunToggleStruct" sizechecktype="match"/> </opcode> - <opcode id="50f8" name="OP_Trader" updated="07/19/23"> + <opcode id="ffff" name="OP_Trader" updated="07/19/23"> <comment>PC's turning trader on and off</comment> <payload dir="server" typename="bazaarTraderRequest" sizechecktype="match"/> </opcode> @@ -307,15 +307,15 @@ <comment>List of group members - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="4180" name="OP_GuildMemberList" updated="05/15/24"> + <opcode id="705e" name="OP_GuildMemberList" updated="06/19/24"> <comment>List of guild members - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="5a1b" name="OP_ManaUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_ManaUpdate" updated="07/19/23"> <comment>Mana Update opcode - 10 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="0349" name="OP_EndUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_EndUpdate" updated="07/19/23"> <comment>Endurance Update opcode - 10 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> @@ -367,7 +367,7 @@ <comment>Fellowship information - 2576 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="1801" name="OP_ExpandedGuildInfo" updated="05/15/24"> + <opcode id="ffff" name="OP_ExpandedGuildInfo" updated="05/15/24"> <comment>Guild ranks and other misc guild data - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> @@ -535,11 +535,11 @@ <comment>Listing of all guilds. Can be triggered by /lfg search?</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="2dbd" name="OP_GuildsInZoneList" updated="05/15/24"> + <opcode id="7b05" name="OP_GuildsInZoneList" updated="06/19/24"> <comment>Listing of guild names present in the current zone. Generally seen on zoning</comment> <payload dir="server" typename="guildsInZoneListStruct" sizechecktype="none"/> </opcode> - <opcode id="6bb1" name="OP_NewGuildInZone" updated="07/19/23"> + <opcode id="ffff" name="OP_NewGuildInZone" updated="07/19/23"> <comment>An additional guild name has appeared in the current zone. Seen when a guilded player enters the current zone</comment> <payload dir="server" typename="newGuildInZoneStruct" sizechecktype="none"/> </opcode> @@ -595,7 +595,7 @@ <comment>Free to play nags and other data - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="2c3b" name="OP_Find" updated="05/15/24"> + <opcode id="238b" name="OP_Find" updated="06/19/24"> <comment>Find window data - 112 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> Modified: showeq/branches/cn187_devel/configure.in =================================================================== --- showeq/branches/cn187_devel/configure.in 2024-06-19 19:27:15 UTC (rev 1473) +++ showeq/branches/cn187_devel/configure.in 2024-06-19 19:27:23 UTC (rev 1474) @@ -2,7 +2,7 @@ dnl $Id$ $Name$ AC_PREREQ(2.59) -AC_INIT(showeq, 6.3.14) +AC_INIT(showeq, 6.3.15) AC_CONFIG_SRCDIR(src/main.cpp) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_SYSTEM Modified: showeq/branches/cn187_devel/src/everquest.h =================================================================== --- showeq/branches/cn187_devel/src/everquest.h 2024-06-19 19:27:15 UTC (rev 1473) +++ showeq/branches/cn187_devel/src/everquest.h 2024-06-19 19:27:23 UTC (rev 1474) @@ -1119,26 +1119,29 @@ struct { + signed z:19; // z coord (3rd loc value) + unsigned pitch:12; // pitch (up/down heading) + unsigned padding00:1; + + signed deltaHeading:10; // change in heading + signed y:19; // y coord (2nd loc value) + unsigned padding01:3; + signed x:19; // x coord (1st loc value) - signed deltaZ:13; // change in z + unsigned heading:12; // heading + unsigned padding02:1; - unsigned pitch:12; // pitch (up/down heading) signed deltaX:13; // change in x - unsigned pad1:7; + signed animation:10; // current animation + unsigned padding03:9; signed deltaY:13; // change in y - signed z:19; // z coord (3rd loc value) + signed deltaZ:13; // change in z + unsigned padding04:6; - signed animation:10; // current animation - signed deltaHeading:10; // change in heading - unsigned pad3:12; - - signed y:19; // y coord (2nd loc value) - unsigned heading:12; // heading - unsigned pad4:1; - }; int32_t posData[5]; + }; /*0000*/ union @@ -2396,23 +2399,25 @@ /*0000*/ uint16_t spawnId; /*0002*/ uint16_t spawnId2; /*0004*/ - signed x:19; // x coord (1st loc value) - signed deltaZ:13; // change in z + signed z:19; // z coord (3rd loc value) + unsigned pitch:12; // pitch (up/down heading) + unsigned padding00:1; /*0008*/ - unsigned pitch:12; // pitch (up/down heading) - signed deltaX:13; // change in x - unsigned pad1:7; + signed deltaHeading:10; // change in heading + signed y:19; // y coord (2nd loc value) + unsigned padding01:3; /*0012*/ - signed deltaY:13; // change in y - signed z:19; // z coord (3rd loc value) + signed x:19; // x coord (1st loc value) + unsigned heading:12; // heading + unsigned padding02:1; /*0016*/ + signed deltaX:13; // change in x signed animation:10; // current animation - signed deltaHeading:10; // change in heading - unsigned pad3:12; + unsigned padding03:9; /*0020*/ - signed y:19; // y coord (2nd loc value) - unsigned heading:12; // heading - unsigned pad4:1; + signed deltaY:13; // change in y + signed deltaZ:13; // change in z + unsigned padding04:6; /*0024*/ }; @@ -2427,25 +2432,25 @@ /*0002*/ uint16_t spawnId; // Player's spawn id /*0004*/ uint16_t unknown0004; // ***Placeholder /*0006*/ - float deltaZ; // change in z + signed animation:10; // current animation + unsigned pitch:12; // pitch (up/down heading) + unsigned padding00:10; /*0010*/ - unsigned heading:12; // heading - unsigned pitch:12; // pitch (up/down heading) - unsigned pad1:8; + float deltaY; // change in y /*0014*/ - float x; // x coord (1st loc value) + float deltaX; // change in x /*0018*/ - signed deltaHeading:10; // change in heading - signed animation:10; // current animation - unsigned pad3:12; + float deltaZ; // change in z /*0022*/ - float y; // y coord (2nd loc value) + float z; // z coord (3rd loc value) /*0026*/ - float deltaY; // change in y + float x; // x coord (1st loc value) /*0030*/ - float deltaX; // change in x + float y; // y coord (2nd loc value) /*0034*/ - float z; // z coord (3rd loc value) + signed deltaHeading:10; // change in heading + unsigned heading:12; // heading + unsigned padding07:10; /*0038*/ }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-19 19:27:17
|
Revision: 1473 http://sourceforge.net/p/seq/svn/1473 Author: cn187 Date: 2024-06-19 19:27:15 +0000 (Wed, 19 Jun 2024) Log Message: ----------- Rework capture filter logic - reduce code duplication - fix bug with session detection when an IP address isn't specified Modified Paths: -------------- showeq/branches/cn187_devel/src/packet.cpp showeq/branches/cn187_devel/src/packetcapture.cpp showeq/branches/cn187_devel/src/packetcommon.h Modified: showeq/branches/cn187_devel/src/packet.cpp =================================================================== --- showeq/branches/cn187_devel/src/packet.cpp 2024-06-19 19:22:47 UTC (rev 1472) +++ showeq/branches/cn187_devel/src/packet.cpp 2024-06-19 19:27:15 UTC (rev 1473) @@ -36,6 +36,7 @@ #include "everquest.h" #include "packet.h" +#include "packetcommon.h" #include "packetcapture.h" #include "packetformat.h" #include "packetstream.h" @@ -73,14 +74,6 @@ //---------------------------------------------------------------------- // constants -const in_port_t WorldServerGeneralMinPort = 9000; -const in_port_t WorldServerGeneralMaxPort = 9013; -const in_port_t WorldServerChatPort = 9876; -const in_port_t WorldServerChat2Port = 9875; // xgame tells, mail -const in_port_t LoginServerMinPort = 15900; -const in_port_t LoginServerMaxPort = 15910; -const in_port_t ChatServerPort = 5998; - //---------------------------------------------------------------------- // Here begins the code Modified: showeq/branches/cn187_devel/src/packetcapture.cpp =================================================================== --- showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-19 19:22:47 UTC (rev 1472) +++ showeq/branches/cn187_devel/src/packetcapture.cpp 2024-06-19 19:27:15 UTC (rev 1473) @@ -31,6 +31,7 @@ #include <arpa/inet.h> #include "packetcapture.h" +#include "packetcommon.h" #include "diagnosticmessages.h" //#define PCAP_DEBUG 1 @@ -89,39 +90,8 @@ seqInfo("Initializing Packet Capture Thread: "); m_pcache_closed = false; - // Fetch the netmask for the device to use later with the filter. - if (pcap_lookupnet(device, &net, &mask, ebuf) == -1) - { - // Couldn't find net mask. Just leave it open. - seqWarn("Couldn't determine netmask of device %s. Using 0.0.0.0. Error was %s", - device, ebuf); - } + this->setFilter(device, host, realtime, address_type, 0, 0); - // create pcap style filter expressions - if (address_type == IP_ADDRESS_TYPE) - { - if (strcmp(host, AUTOMATIC_CLIENT_IP) == 0) - { - seqInfo("Filtering packets on device %s, searching for EQ client...", device); - sprintf (filter_buf, "udp[0:2] > 1024 and udp[2:2] > 1024 and ether proto 0x0800 and not broadcast and not multicast"); - } - else - { - seqInfo("Filtering packets on device %s, IP host %s", device, host); - sprintf (filter_buf, "udp[0:2] > 1024 and udp[2:2] > 1024 and host %s and ether proto 0x0800 and not broadcast and not multicast", host); - } - } - else if (address_type == MAC_ADDRESS_TYPE) - { - seqInfo("Filtering packets on device %s, MAC host %s", device, host); - sprintf (filter_buf, "udp[0:2] > 1024 and udp[2:2] > 1024 and ether host %s and ether proto 0x0800 and not broadcast and not multicast", host); - } - else - { - seqFatal("pcap_error:filter_string: unknown address_type (%d)", address_type); - exit(0); - } - /* A word about pcap_open_live() from the docs ** to_ms specifies the read timeout in milliseconds. The ** read timeout is used to arrange that the read not necessarily @@ -391,7 +361,8 @@ uint16_t zone_port, uint16_t client_port) { - char filter_buf[256]; // pcap filter buffer + char filter_buf[256]; // pcap filter buffer + char* pfb = filter_buf; char ebuf[PCAP_ERRBUF_SIZE]; struct bpf_program bpp; struct sched_param sp; @@ -406,51 +377,43 @@ device, ebuf); } - /* Listen to World Server or the specified Zone Server */ - if (address_type == IP_ADDRESS_TYPE && client_port) + if (!client_port && !zone_port) { - // Restrict to client port and ip, plus world streams. - sprintf(filter_buf, - "udp and (portrange 9000-9007 or port 9876 or port %d) and host %s and ether proto 0x0800 and not broadcast and not multicast", - client_port, hostname); + //no client/zone port detected, so leave it open + pfb += sprintf(pfb, "udp[0:2] > 1024 and udp[2:2] > 1024"); } - else if (address_type == IP_ADDRESS_TYPE && zone_port) + else { - // Restrict to zone port and world streams. - sprintf(filter_buf, - "udp and (portrange 9000-9007 or port 9876 or port %d) and host %s and ether proto 0x0800 and not broadcast and not multicast", - zone_port, hostname); + // restrict to client/zone port and world server ports + pfb += sprintf(pfb, "udp"); + pfb += sprintf(pfb, " and (portrange %d-%d or port %d or port %d)", + WorldServerGeneralMinPort, WorldServerGeneralMaxPort, + WorldServerChatPort, (client_port) ? client_port : zone_port); } - else if (address_type == MAC_ADDRESS_TYPE && client_port) + + if (address_type == IP_ADDRESS_TYPE) { - // Restrict to client port and world streams. - sprintf(filter_buf, - "udp and (portrange 9000-9007 or port 9876 or port %d) and ether host %s and ether proto 0x0800 and not broadcast and not multicast", - client_port, hostname); + if (hostname && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) + // host was specified/detected + pfb += sprintf(" and host %s", hostname); } - else if (address_type == MAC_ADDRESS_TYPE && zone_port) + else if (address_type == MAC_ADDRESS_TYPE) { - // Restrict to zone port and world streams. - sprintf(filter_buf, - "udp and (portrange 9000-9007 or port 9876 or port %d) and ether host %s and ether proto 0x0800 and not broadcast and not multicast", - zone_port, hostname); + if (hostname && strcmp(hostname, AUTOMATIC_CLIENT_IP) != 0) + // mac was specified + pfb += sprintf(" and ether host %s", hostname); } - else if (hostname != NULL && !client_port && !zone_port) - { - // Leave wide open. - sprintf(filter_buf, - "udp[0:2] > 1024 and udp[2:2] > 1024 and ether proto 0x0800 and host %s and not broadcast and not multicast", - hostname); - } else { - // Not even a hostname. Leave really wide open! - seqInfo("Filtering packets on device %s, searching for EQ client...", - device); - sprintf(filter_buf, - "udp[0:2] > 1024 and udp[2:2] > 1024 and ether proto 0x0800 and not broadcast and not multicast"); + seqFatal("pcap_error:filter_string: unknown address_type (%d)", address_type); + exit(0); } + //restrict to ipv4, and ignore broad/multi-cast packets + pfb += sprintf(pfb, " and ether proto 0x800 and not broadcast and not multicast"); + + seqInfo("Filtering packets on device %s", device); + if (pcap_compile (m_pcache_pcap, &bpp, filter_buf, 1, net) == -1) { seqWarn("%s",filter_buf); Modified: showeq/branches/cn187_devel/src/packetcommon.h =================================================================== --- showeq/branches/cn187_devel/src/packetcommon.h 2024-06-19 19:22:47 UTC (rev 1472) +++ showeq/branches/cn187_devel/src/packetcommon.h 2024-06-19 19:27:15 UTC (rev 1473) @@ -46,11 +46,20 @@ #include <endian.h> #endif +#include <netdb.h> //---------------------------------------------------------------------- // Constants const char* const AUTOMATIC_CLIENT_IP = "127.0.0.0"; +const in_port_t WorldServerGeneralMinPort = 9000; +const in_port_t WorldServerGeneralMaxPort = 9015; +const in_port_t WorldServerChatPort = 9876; +const in_port_t WorldServerChat2Port = 9875; // xgame tells, mail +const in_port_t LoginServerMinPort = 15900; +const in_port_t LoginServerMaxPort = 15910; +const in_port_t ChatServerPort = 5998; + // Preference constants for VPacket.Playback. #define PLAYBACK_OFF 0 #define PLAYBACK_FORMAT_SEQ 1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-19 19:22:48
|
Revision: 1472 http://sourceforge.net/p/seq/svn/1472 Author: cn187 Date: 2024-06-19 19:22:47 +0000 (Wed, 19 Jun 2024) Log Message: ----------- Tag for release 6.3.15 Added Paths: ----------- showeq/tags/v6_3_15/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-06-19 19:20:05
|
Revision: 1471 http://sourceforge.net/p/seq/svn/1471 Author: cn187 Date: 2024-06-19 19:20:03 +0000 (Wed, 19 Jun 2024) Log Message: ----------- Release 6.3.15 - Update version to 6.3.15 - Support for EQ Patch 06/19/24 - Struct and opcode updates Modified Paths: -------------- showeq/trunk/ChangeLog showeq/trunk/conf/zoneopcodes.xml showeq/trunk/configure.in showeq/trunk/src/everquest.h Modified: showeq/trunk/ChangeLog =================================================================== --- showeq/trunk/ChangeLog 2024-05-16 15:51:45 UTC (rev 1470) +++ showeq/trunk/ChangeLog 2024-06-19 19:20:03 UTC (rev 1471) @@ -1,3 +1,9 @@ +cn187 (06/19/24) +---------------- +- Update to version 6.3.15 +- Support for EQ Patch 06/19/24 +- Struct and opcode updates + cn187 (05/15/24) ---------------- - Update to version 6.3.14 Modified: showeq/trunk/conf/zoneopcodes.xml =================================================================== --- showeq/trunk/conf/zoneopcodes.xml 2024-05-16 15:51:45 UTC (rev 1470) +++ showeq/trunk/conf/zoneopcodes.xml 2024-06-19 19:20:03 UTC (rev 1471) @@ -3,70 +3,70 @@ <seqopcodes> <!-- Critical opcodes used directly by ShowEQ --> - <opcode id="7b63" name="OP_PlayerProfile" updated="05/15/24"> + <opcode id="3132" name="OP_PlayerProfile" updated="06/19/24"> <comment>CharProfileCode</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="3af9" name="OP_ZoneEntry" updated="05/15/24"> + <opcode id="5e3e" name="OP_ZoneEntry" updated="06/19/24"> <comment>ZoneEntryCode</comment> <payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="188f" name="OP_TimeOfDay" updated="05/15/24"> + <opcode id="3407" name="OP_TimeOfDay" updated="06/19/24"> <comment>TimeOfDayCode</comment> <payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/> </opcode> - <opcode id="4239" name="OP_NewZone" updated="05/15/24"> + <opcode id="5e02" name="OP_NewZone" updated="06/19/24"> <comment>NewZoneCode</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="30e8" name="OP_SpawnDoor" updated="05/15/24"> + <opcode id="12c4" name="OP_SpawnDoor" updated="06/19/24"> <comment>DoorSpawnsCode</comment> <payload dir="server" typename="doorStruct" sizechecktype="modulus"/> </opcode> - <opcode id="5cce" name="OP_GroundSpawn" updated="05/15/24"> + <opcode id="739b" name="OP_GroundSpawn" updated="06/19/24"> <comment>MakeDropCode</comment> <payload dir="server" typename="makeDropStruct" sizechecktype="none"/> <payload dir="client" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="05a5" name="OP_SendZonePoints" updated="05/15/24"> + <opcode id="6086" name="OP_SendZonePoints" updated="06/19/24"> <comment>Coords in a zone that will port you to another zone</comment> <payload dir="server" typename="zonePointsStruct" sizechecktype="none"/> </opcode> - <opcode id="1786" name="OP_AAExpUpdate" updated="05/15/24"> + <opcode id="0753" name="OP_AAExpUpdate" updated="06/19/24"> <comment>Receiving AA experience. Also when percent to AA changes.</comment> <payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="7fd6" name="OP_ExpUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_ExpUpdate" updated="07/19/23"> <comment>ExpUpdateCode</comment> <payload dir="server" typename="expUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="06e6" name="OP_GuildMOTD" updated="05/15/24"> + <opcode id="6b08" name="OP_GuildMOTD" updated="06/19/24"> <comment>GuildMOTD</comment> <payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/> </opcode> - <opcode id="7da8" name="OP_ClientUpdate" updated="05/15/24"> + <opcode id="0c4e" name="OP_ClientUpdate" updated="06/19/24"> <comment>Position updates</comment> <payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/> <payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/> </opcode> - <opcode id="798b" name="OP_NpcMoveUpdate" updated="05/15/24"> + <opcode id="6ed3" name="OP_NpcMoveUpdate" updated="06/19/24"> <comment>Position updates</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="6c1e" name="OP_MobUpdate" updated="05/15/24"> + <opcode id="669f" name="OP_MobUpdate" updated="06/19/24"> <comment>MobUpdateCode</comment> <payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/> </opcode> - <opcode id="4e6a" name="OP_DeleteSpawn" updated="05/15/24"> + <opcode id="0bee" name="OP_DeleteSpawn" updated="06/19/24"> <comment>DeleteSpawnCode</comment> <payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/> </opcode> - <opcode id="1e0c" name="OP_RemoveSpawn" updated="05/15/24"> + <opcode id="1a60" name="OP_RemoveSpawn" updated="06/19/24"> <comment>Remove spawn from zone</comment> <payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/> </opcode> - <opcode id="00ec" name="OP_Death" updated="05/15/24"> + <opcode id="3f63" name="OP_Death" updated="06/19/24"> <comment>old NewCorpseCode</comment> <payload dir="server" typename="newCorpseStruct" sizechecktype="match"/> </opcode> @@ -74,56 +74,56 @@ <comment>SpawnUpdateCode</comment> <payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="3178" name="OP_SpawnAppearance" updated="05/15/24"> + <opcode id="59cf" name="OP_SpawnAppearance" updated="06/19/24"> <comment>SpawnAppearanceCode</comment> <payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/> </opcode> - <opcode id="0b0d" name="OP_Stamina" updated="07/19/23"> + <opcode id="ffff" name="OP_Stamina" updated="07/19/23"> <comment>Server updating on hunger/thirst</comment> <payload dir="server" typename="staminaStruct" sizechecktype="match"/> </opcode> - <opcode id="639d" name="OP_HPUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_HPUpdate" updated="07/19/23"> <comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment> <payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="2e5b" name="OP_GuildMemberUpdate" updated="05/15/24"> + <opcode id="082d" name="OP_GuildMemberUpdate" updated="06/19/24"> <comment>Info regarding guild members</comment> <payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/> </opcode> - <opcode id="0c2e" name="OP_ClickObject" updated="05/15/24"> + <opcode id="2870" name="OP_ClickObject" updated="06/19/24"> <comment>Items dropped on the ground</comment> <payload dir="both" typename="remDropStruct" sizechecktype="match"/> </opcode> - <opcode id="3a56" name="OP_Action" updated="05/15/24"> + <opcode id="24fc" name="OP_Action" updated="06/19/24"> <comment>Spells cast etc</comment> <payload dir="both" typename="actionStruct" sizechecktype="match"/> <payload dir="both" typename="actionAltStruct" sizechecktype="match"/> </opcode> - <opcode id="56d8" name="OP_Action2" updated="04/17/24"> + <opcode id="ffff" name="OP_Action2" updated="04/17/24"> <comment>Combat actions i.e. bash, kick etc</comment> <payload dir="both" typename="action2Struct" sizechecktype="match"/> </opcode> - <opcode id="7b3d" name="OP_Consider" updated="05/15/24"> + <opcode id="0fd2" name="OP_Consider" updated="06/19/24"> <comment>ConsiderCode</comment> <payload dir="both" typename="considerStruct" sizechecktype="match"/> </opcode> - <opcode id="4a96" name="OP_TargetMouse" updated="05/15/24"> + <opcode id="133c" name="OP_TargetMouse" updated="06/19/24"> <comment>Targeting a person - old ClientTargetCode</comment> <payload dir="both" typename="clientTargetStruct" sizechecktype="match"/> </opcode> - <opcode id="67ec" name="OP_SpawnRename" updated="07/19/23"> + <opcode id="ffff" name="OP_SpawnRename" updated="07/19/23"> <comment>Spawns getting renamed after initial NewSpawn</comment> <payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/> </opcode> - <opcode id="5587" name="OP_Illusion" updated="07/19/23"> + <opcode id="ffff" name="OP_Illusion" updated="07/19/23"> <comment>Spawn being illusioned (changing forms)</comment> <payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/> </opcode> - <opcode id="04f8" name="OP_Shroud" updated="07/19/23"> + <opcode id="ffff" name="OP_Shroud" updated="07/19/23"> <comment>Server putting players into shroud form</comment> <payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/> </opcode> - <opcode id="54e6" name="OP_ZoneChange" updated="05/15/24"> + <opcode id="146c" name="OP_ZoneChange" updated="06/19/24"> <comment>old ZoneChangeCode</comment> <payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/> </opcode> @@ -163,55 +163,55 @@ <comment>Group leader change</comment> <payload dir="server" typename="groupLeaderChangeStruct" sizechecktype="match"/> </opcode> - <opcode id="211c" name="OP_Buff" updated="07/19/23"> + <opcode id="ffff" name="OP_Buff" updated="07/19/23"> <comment>old BuffDropCode</comment> <payload dir="both" typename="buffStruct" sizechecktype="match"/> </opcode> - <opcode id="5466" name="OP_BeginCast" updated="07/19/23"> + <opcode id="ffff" name="OP_BeginCast" updated="07/19/23"> <comment>BeginCastCode</comment> <payload dir="both" typename="beginCastStruct" sizechecktype="match"/> </opcode> - <opcode id="0b36" name="OP_CastSpell" updated="12/05/23"> + <opcode id="ffff" name="OP_CastSpell" updated="12/05/23"> <comment>StartCastCode</comment> <payload dir="both" typename="startCastStruct" sizechecktype="match"/> </opcode> - <opcode id="3a19" name="OP_SwapSpell" updated="07/19/23"> + <opcode id="ffff" name="OP_SwapSpell" updated="07/19/23"> <comment>TradeSpellBookSlotsCode</comment> <payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/> </opcode> - <opcode id="1af6" name="OP_MemorizeSpell" updated="07/19/23"> + <opcode id="ffff" name="OP_MemorizeSpell" updated="07/19/23"> <comment>MemSpellCode</comment> <payload dir="both" typename="memSpellStruct" sizechecktype="match"/> </opcode> - <opcode id="37d6" name="OP_InspectAnswer" updated="07/19/23"> + <opcode id="ffff" name="OP_InspectAnswer" updated="07/19/23"> <comment>InspectDataCode</comment> <payload dir="both" typename="inspectDataStruct" sizechecktype="match"/> </opcode> - <opcode id="49f5" name="OP_Emote" updated="07/19/23"> + <opcode id="ffff" name="OP_Emote" updated="07/19/23"> <comment>EmoteTextCode</comment> <payload dir="both" typename="emoteTextStruct" sizechecktype="none"/> </opcode> - <opcode id="5f08" name="OP_SimpleMessage" updated="05/15/24"> + <opcode id="3256" name="OP_SimpleMessage" updated="06/19/24"> <comment>SimpleMessageCode</comment> <payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/> </opcode> - <opcode id="445d" name="OP_FormattedMessage" updated="05/15/24"> + <opcode id="3fba" name="OP_FormattedMessage" updated="06/19/24"> <comment>FormattedMessageCode i.e. pet dismissed etc</comment> <payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="0f8c" name="OP_CommonMessage" updated="05/15/24"> + <opcode id="2148" name="OP_CommonMessage" updated="06/19/24"> <comment>ChannelMessageCode i.e. /tell /ooc /shout etc</comment> <payload dir="both" typename="channelMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="554c" name="OP_SpecialMesg" updated="05/15/24"> + <opcode id="686f" name="OP_SpecialMesg" updated="06/19/24"> <comment>Communicate textual info to client including hail responses etc</comment> <payload dir="server" typename="specialMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="638b" name="OP_RandomReq" updated="07/19/23"> + <opcode id="ffff" name="OP_RandomReq" updated="07/19/23"> <comment>RandomReqCode</comment> <payload dir="client" typename="randomReqStruct" sizechecktype="match"/> </opcode> - <opcode id="0312" name="OP_RandomReply" updated="07/19/23"> + <opcode id="ffff" name="OP_RandomReply" updated="07/19/23"> <comment>RandomCode</comment> <payload dir="server" typename="randomStruct" sizechecktype="match"/> </opcode> @@ -223,36 +223,36 @@ <comment>Server replying with deny information after /deny</comment> <payload dir="server" typename="consentResponseStruct" sizechecktype="match"/> </opcode> - <opcode id="3d4f" name="OP_ManaChange" updated="07/19/23"> + <opcode id="ffff" name="OP_ManaChange" updated="07/19/23"> <comment>Mana change. Bards send this up with no size. Casters receive this for mana updates.</comment> <payload dir="server" typename="manaDecrementStruct" sizechecktype="match"/> <payload dir="client" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="499c" name="OP_BazaarSearchRequest" updated="07/19/23"> + <opcode id="ffff" name="OP_BazaarSearchRequest" updated="07/19/23"> <comment>Bazaar search request </comment> <payload dir="client" typename="bazaarSearchQueryStruct" sizechecktype="none"/> </opcode> - <opcode id="2d7e" name="OP_BazaarSearchResponse" updated="07/19/23"> + <opcode id="ffff" name="OP_BazaarSearchResponse" updated="07/19/23"> <comment>Bazaar search Response - Struct incorrect </comment> <payload dir="server" typename="bazaarSearchResponseStruct" sizechecktype="modulus"/> </opcode> - <opcode id="09b6" name="OP_MoneyOnCorpse" updated="07/19/23"> + <opcode id="ffff" name="OP_MoneyOnCorpse" updated="07/19/23"> <comment>MoneyOnCorpseCode</comment> <payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/> </opcode> - <opcode id="4aa9" name="OP_SkillUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_SkillUpdate" updated="07/19/23"> <comment>Skill up code</comment> <payload dir="server" typename="skillIncStruct" sizechecktype="match"/> </opcode> - <opcode id="262e" name="OP_LevelUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_LevelUpdate" updated="07/19/23"> <comment>LevelUpUpdateCode</comment> <payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="0f58" name="OP_DzSwitchInfo" updated="07/19/23"> + <opcode id="ffff" name="OP_DzSwitchInfo" updated="07/19/23"> <comment>Expedition compass etc</comment> <payload dir="server" typename="dzSwitchInfo" sizechecktype="none"/> </opcode> - <opcode id="64ca" name="OP_DzInfo" updated="07/19/23"> + <opcode id="ffff" name="OP_DzInfo" updated="07/19/23"> <comment>Expedition Information</comment> <payload dir="server" typename="dzInfo" sizechecktype="match"/> </opcode> @@ -260,11 +260,11 @@ <comment>Environmental Damage</comment> <payload dir="client" typename="environmentDamageStruct" sizechecktype="match"/> </opcode> - <opcode id="0d11" name="OP_SetRunMode" updated="07/19/23"> + <opcode id="ffff" name="OP_SetRunMode" updated="07/19/23"> <comment>old cRunToggleCode</comment> <payload dir="client" typename="cRunToggleStruct" sizechecktype="match"/> </opcode> - <opcode id="50f8" name="OP_Trader" updated="07/19/23"> + <opcode id="ffff" name="OP_Trader" updated="07/19/23"> <comment>PC's turning trader on and off</comment> <payload dir="server" typename="bazaarTraderRequest" sizechecktype="match"/> </opcode> @@ -307,15 +307,15 @@ <comment>List of group members - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="4180" name="OP_GuildMemberList" updated="05/15/24"> + <opcode id="705e" name="OP_GuildMemberList" updated="06/19/24"> <comment>List of guild members - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="5a1b" name="OP_ManaUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_ManaUpdate" updated="07/19/23"> <comment>Mana Update opcode - 10 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="0349" name="OP_EndUpdate" updated="07/19/23"> + <opcode id="ffff" name="OP_EndUpdate" updated="07/19/23"> <comment>Endurance Update opcode - 10 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> @@ -367,7 +367,7 @@ <comment>Fellowship information - 2576 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="1801" name="OP_ExpandedGuildInfo" updated="05/15/24"> + <opcode id="ffff" name="OP_ExpandedGuildInfo" updated="05/15/24"> <comment>Guild ranks and other misc guild data - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> @@ -535,11 +535,11 @@ <comment>Listing of all guilds. Can be triggered by /lfg search?</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="2dbd" name="OP_GuildsInZoneList" updated="05/15/24"> + <opcode id="7b05" name="OP_GuildsInZoneList" updated="06/19/24"> <comment>Listing of guild names present in the current zone. Generally seen on zoning</comment> <payload dir="server" typename="guildsInZoneListStruct" sizechecktype="none"/> </opcode> - <opcode id="6bb1" name="OP_NewGuildInZone" updated="07/19/23"> + <opcode id="ffff" name="OP_NewGuildInZone" updated="07/19/23"> <comment>An additional guild name has appeared in the current zone. Seen when a guilded player enters the current zone</comment> <payload dir="server" typename="newGuildInZoneStruct" sizechecktype="none"/> </opcode> @@ -595,7 +595,7 @@ <comment>Free to play nags and other data - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="2c3b" name="OP_Find" updated="05/15/24"> + <opcode id="238b" name="OP_Find" updated="06/19/24"> <comment>Find window data - 112 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> Modified: showeq/trunk/configure.in =================================================================== --- showeq/trunk/configure.in 2024-05-16 15:51:45 UTC (rev 1470) +++ showeq/trunk/configure.in 2024-06-19 19:20:03 UTC (rev 1471) @@ -2,7 +2,7 @@ dnl $Id$ $Name$ AC_PREREQ(2.59) -AC_INIT(showeq, 6.3.14) +AC_INIT(showeq, 6.3.15) AC_CONFIG_SRCDIR(src/main.cpp) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_SYSTEM Modified: showeq/trunk/src/everquest.h =================================================================== --- showeq/trunk/src/everquest.h 2024-05-16 15:51:45 UTC (rev 1470) +++ showeq/trunk/src/everquest.h 2024-06-19 19:20:03 UTC (rev 1471) @@ -1119,26 +1119,29 @@ struct { + signed z:19; // z coord (3rd loc value) + unsigned pitch:12; // pitch (up/down heading) + unsigned padding00:1; + + signed deltaHeading:10; // change in heading + signed y:19; // y coord (2nd loc value) + unsigned padding01:3; + signed x:19; // x coord (1st loc value) - signed deltaZ:13; // change in z + unsigned heading:12; // heading + unsigned padding02:1; - unsigned pitch:12; // pitch (up/down heading) signed deltaX:13; // change in x - unsigned pad1:7; + signed animation:10; // current animation + unsigned padding03:9; signed deltaY:13; // change in y - signed z:19; // z coord (3rd loc value) + signed deltaZ:13; // change in z + unsigned padding04:6; - signed animation:10; // current animation - signed deltaHeading:10; // change in heading - unsigned pad3:12; - - signed y:19; // y coord (2nd loc value) - unsigned heading:12; // heading - unsigned pad4:1; - }; int32_t posData[5]; + }; /*0000*/ union @@ -2396,23 +2399,25 @@ /*0000*/ uint16_t spawnId; /*0002*/ uint16_t spawnId2; /*0004*/ - signed x:19; // x coord (1st loc value) - signed deltaZ:13; // change in z + signed z:19; // z coord (3rd loc value) + unsigned pitch:12; // pitch (up/down heading) + unsigned padding00:1; /*0008*/ - unsigned pitch:12; // pitch (up/down heading) - signed deltaX:13; // change in x - unsigned pad1:7; + signed deltaHeading:10; // change in heading + signed y:19; // y coord (2nd loc value) + unsigned padding01:3; /*0012*/ - signed deltaY:13; // change in y - signed z:19; // z coord (3rd loc value) + signed x:19; // x coord (1st loc value) + unsigned heading:12; // heading + unsigned padding02:1; /*0016*/ + signed deltaX:13; // change in x signed animation:10; // current animation - signed deltaHeading:10; // change in heading - unsigned pad3:12; + unsigned padding03:9; /*0020*/ - signed y:19; // y coord (2nd loc value) - unsigned heading:12; // heading - unsigned pad4:1; + signed deltaY:13; // change in y + signed deltaZ:13; // change in z + unsigned padding04:6; /*0024*/ }; @@ -2427,25 +2432,25 @@ /*0002*/ uint16_t spawnId; // Player's spawn id /*0004*/ uint16_t unknown0004; // ***Placeholder /*0006*/ - float deltaZ; // change in z + signed animation:10; // current animation + unsigned pitch:12; // pitch (up/down heading) + unsigned padding00:10; /*0010*/ - unsigned heading:12; // heading - unsigned pitch:12; // pitch (up/down heading) - unsigned pad1:8; + float deltaY; // change in y /*0014*/ - float x; // x coord (1st loc value) + float deltaX; // change in x /*0018*/ - signed deltaHeading:10; // change in heading - signed animation:10; // current animation - unsigned pad3:12; + float deltaZ; // change in z /*0022*/ - float y; // y coord (2nd loc value) + float z; // z coord (3rd loc value) /*0026*/ - float deltaY; // change in y + float x; // x coord (1st loc value) /*0030*/ - float deltaX; // change in x + float y; // y coord (2nd loc value) /*0034*/ - float z; // z coord (3rd loc value) + signed deltaHeading:10; // change in heading + unsigned heading:12; // heading + unsigned padding07:10; /*0038*/ }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-05-16 15:51:50
|
Revision: 1470 http://sourceforge.net/p/seq/svn/1470 Author: cn187 Date: 2024-05-16 15:51:45 +0000 (Thu, 16 May 2024) Log Message: ----------- Release 6.3.14 - Update to version 6.3.14 - Support for EQ Patch 05/15/24 - Struct and opcode updates (Newby) Modified Paths: -------------- showeq/branches/cn187_devel/ChangeLog showeq/branches/cn187_devel/conf/zoneopcodes.xml showeq/branches/cn187_devel/configure.in showeq/branches/cn187_devel/src/everquest.h Modified: showeq/branches/cn187_devel/ChangeLog =================================================================== --- showeq/branches/cn187_devel/ChangeLog 2024-05-16 15:45:46 UTC (rev 1469) +++ showeq/branches/cn187_devel/ChangeLog 2024-05-16 15:51:45 UTC (rev 1470) @@ -1,3 +1,9 @@ +cn187 (05/15/24) +---------------- +- Update to version 6.3.14 +- Support for EQ Patch 05/15/24 +- Struct and opcode updates (Newby) + cn187 (04/17/24) ---------------- - Update to version 6.3.13 Modified: showeq/branches/cn187_devel/conf/zoneopcodes.xml =================================================================== --- showeq/branches/cn187_devel/conf/zoneopcodes.xml 2024-05-16 15:45:46 UTC (rev 1469) +++ showeq/branches/cn187_devel/conf/zoneopcodes.xml 2024-05-16 15:51:45 UTC (rev 1470) @@ -3,37 +3,37 @@ <seqopcodes> <!-- Critical opcodes used directly by ShowEQ --> - <opcode id="6269" name="OP_PlayerProfile" updated="04/17/24"> + <opcode id="7b63" name="OP_PlayerProfile" updated="05/15/24"> <comment>CharProfileCode</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="103c" name="OP_ZoneEntry" updated="04/17/24"> + <opcode id="3af9" name="OP_ZoneEntry" updated="05/15/24"> <comment>ZoneEntryCode</comment> <payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="1640" name="OP_TimeOfDay" updated="04/17/24"> + <opcode id="188f" name="OP_TimeOfDay" updated="05/15/24"> <comment>TimeOfDayCode</comment> <payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/> </opcode> - <opcode id="5954" name="OP_NewZone" updated="04/17/24"> + <opcode id="4239" name="OP_NewZone" updated="05/15/24"> <comment>NewZoneCode</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="124e" name="OP_SpawnDoor" updated="04/17/24"> + <opcode id="30e8" name="OP_SpawnDoor" updated="05/15/24"> <comment>DoorSpawnsCode</comment> <payload dir="server" typename="doorStruct" sizechecktype="modulus"/> </opcode> - <opcode id="6ccc" name="OP_GroundSpawn" updated="04/17/24"> + <opcode id="5cce" name="OP_GroundSpawn" updated="05/15/24"> <comment>MakeDropCode</comment> <payload dir="server" typename="makeDropStruct" sizechecktype="none"/> <payload dir="client" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="2ba7" name="OP_SendZonePoints" updated="04/17/24"> + <opcode id="05a5" name="OP_SendZonePoints" updated="05/15/24"> <comment>Coords in a zone that will port you to another zone</comment> <payload dir="server" typename="zonePointsStruct" sizechecktype="none"/> </opcode> - <opcode id="4fef" name="OP_AAExpUpdate" updated="04/17/24"> + <opcode id="1786" name="OP_AAExpUpdate" updated="05/15/24"> <comment>Receiving AA experience. Also when percent to AA changes.</comment> <payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/> </opcode> @@ -41,32 +41,32 @@ <comment>ExpUpdateCode</comment> <payload dir="server" typename="expUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="632c" name="OP_GuildMOTD" updated="04/17/24"> + <opcode id="06e6" name="OP_GuildMOTD" updated="05/15/24"> <comment>GuildMOTD</comment> <payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/> </opcode> - <opcode id="6ab6" name="OP_ClientUpdate" updated="04/17/24"> + <opcode id="7da8" name="OP_ClientUpdate" updated="05/15/24"> <comment>Position updates</comment> <payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/> <payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/> </opcode> - <opcode id="55fe" name="OP_NpcMoveUpdate" updated="04/17/24"> + <opcode id="798b" name="OP_NpcMoveUpdate" updated="05/15/24"> <comment>Position updates</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="3a7d" name="OP_MobUpdate" updated="04/17/24"> + <opcode id="6c1e" name="OP_MobUpdate" updated="05/15/24"> <comment>MobUpdateCode</comment> <payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/> </opcode> - <opcode id="6ac4" name="OP_DeleteSpawn" updated="04/17/24"> + <opcode id="4e6a" name="OP_DeleteSpawn" updated="05/15/24"> <comment>DeleteSpawnCode</comment> <payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/> </opcode> - <opcode id="46d8" name="OP_RemoveSpawn" updated="04/17/24"> + <opcode id="1e0c" name="OP_RemoveSpawn" updated="05/15/24"> <comment>Remove spawn from zone</comment> <payload dir="both" typename="removeSpawnStruct" sizechecktype="none"/> </opcode> - <opcode id="543c" name="OP_Death" updated="04/17/24"> + <opcode id="00ec" name="OP_Death" updated="05/15/24"> <comment>old NewCorpseCode</comment> <payload dir="server" typename="newCorpseStruct" sizechecktype="match"/> </opcode> @@ -74,7 +74,7 @@ <comment>SpawnUpdateCode</comment> <payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="54de" name="OP_SpawnAppearance" updated="04/17/24"> + <opcode id="3178" name="OP_SpawnAppearance" updated="05/15/24"> <comment>SpawnAppearanceCode</comment> <payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/> </opcode> @@ -86,15 +86,15 @@ <comment>NpcHpUpdateCode Update HP % of a PC or NPC</comment> <payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/> </opcode> - <opcode id="738d" name="OP_GuildMemberUpdate" updated="04/17/24"> + <opcode id="2e5b" name="OP_GuildMemberUpdate" updated="05/15/24"> <comment>Info regarding guild members</comment> <payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/> </opcode> - <opcode id="78df" name="OP_ClickObject" updated="04/17/24"> + <opcode id="0c2e" name="OP_ClickObject" updated="05/15/24"> <comment>Items dropped on the ground</comment> <payload dir="both" typename="remDropStruct" sizechecktype="match"/> </opcode> - <opcode id="3c63" name="OP_Action" updated="04/17/24"> + <opcode id="3a56" name="OP_Action" updated="05/15/24"> <comment>Spells cast etc</comment> <payload dir="both" typename="actionStruct" sizechecktype="match"/> <payload dir="both" typename="actionAltStruct" sizechecktype="match"/> @@ -103,11 +103,11 @@ <comment>Combat actions i.e. bash, kick etc</comment> <payload dir="both" typename="action2Struct" sizechecktype="match"/> </opcode> - <opcode id="4e76" name="OP_Consider" updated="04/17/24"> + <opcode id="7b3d" name="OP_Consider" updated="05/15/24"> <comment>ConsiderCode</comment> <payload dir="both" typename="considerStruct" sizechecktype="match"/> </opcode> - <opcode id="2be8" name="OP_TargetMouse" updated="04/17/24"> + <opcode id="4a96" name="OP_TargetMouse" updated="05/15/24"> <comment>Targeting a person - old ClientTargetCode</comment> <payload dir="both" typename="clientTargetStruct" sizechecktype="match"/> </opcode> @@ -123,7 +123,7 @@ <comment>Server putting players into shroud form</comment> <payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/> </opcode> - <opcode id="0a28" name="OP_ZoneChange" updated="04/17/24"> + <opcode id="54e6" name="OP_ZoneChange" updated="05/15/24"> <comment>old ZoneChangeCode</comment> <payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/> </opcode> @@ -191,19 +191,19 @@ <comment>EmoteTextCode</comment> <payload dir="both" typename="emoteTextStruct" sizechecktype="none"/> </opcode> - <opcode id="3a74" name="OP_SimpleMessage" updated="04/17/24"> + <opcode id="5f08" name="OP_SimpleMessage" updated="05/15/24"> <comment>SimpleMessageCode</comment> <payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/> </opcode> - <opcode id="3e93" name="OP_FormattedMessage" updated="04/17/24"> + <opcode id="445d" name="OP_FormattedMessage" updated="05/15/24"> <comment>FormattedMessageCode i.e. pet dismissed etc</comment> <payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="514c" name="OP_CommonMessage" updated="04/17/24"> + <opcode id="0f8c" name="OP_CommonMessage" updated="05/15/24"> <comment>ChannelMessageCode i.e. /tell /ooc /shout etc</comment> <payload dir="both" typename="channelMessageStruct" sizechecktype="none"/> </opcode> - <opcode id="2e41" name="OP_SpecialMesg" updated="04/17/24"> + <opcode id="554c" name="OP_SpecialMesg" updated="05/15/24"> <comment>Communicate textual info to client including hail responses etc</comment> <payload dir="server" typename="specialMessageStruct" sizechecktype="none"/> </opcode> @@ -307,7 +307,7 @@ <comment>List of group members - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="662e" name="OP_GuildMemberList" updated="04/17/24"> + <opcode id="4180" name="OP_GuildMemberList" updated="05/15/24"> <comment>List of guild members - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> @@ -367,7 +367,7 @@ <comment>Fellowship information - 2576 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="2075" name="OP_ExpandedGuildInfo" updated="04/17/24"> + <opcode id="1801" name="OP_ExpandedGuildInfo" updated="05/15/24"> <comment>Guild ranks and other misc guild data - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> @@ -535,7 +535,7 @@ <comment>Listing of all guilds. Can be triggered by /lfg search?</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="31d0" name="OP_GuildsInZoneList" updated="04/17/24"> + <opcode id="2dbd" name="OP_GuildsInZoneList" updated="05/15/24"> <comment>Listing of guild names present in the current zone. Generally seen on zoning</comment> <payload dir="server" typename="guildsInZoneListStruct" sizechecktype="none"/> </opcode> @@ -595,7 +595,7 @@ <comment>Free to play nags and other data - Variable length</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> - <opcode id="0a60" name="OP_Find" updated="04/17/24"> + <opcode id="2c3b" name="OP_Find" updated="05/15/24"> <comment>Find window data - 112 bytes</comment> <payload dir="server" typename="uint8_t" sizechecktype="none"/> </opcode> Modified: showeq/branches/cn187_devel/configure.in =================================================================== --- showeq/branches/cn187_devel/configure.in 2024-05-16 15:45:46 UTC (rev 1469) +++ showeq/branches/cn187_devel/configure.in 2024-05-16 15:51:45 UTC (rev 1470) @@ -2,7 +2,7 @@ dnl $Id$ $Name$ AC_PREREQ(2.59) -AC_INIT(showeq, 6.3.13) +AC_INIT(showeq, 6.3.14) AC_CONFIG_SRCDIR(src/main.cpp) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_SYSTEM Modified: showeq/branches/cn187_devel/src/everquest.h =================================================================== --- showeq/branches/cn187_devel/src/everquest.h 2024-05-16 15:45:46 UTC (rev 1469) +++ showeq/branches/cn187_devel/src/everquest.h 2024-05-16 15:51:45 UTC (rev 1470) @@ -1119,23 +1119,22 @@ struct { + signed x:19; // x coord (1st loc value) signed deltaZ:13; // change in z - signed deltaHeading:10; // change in heading - unsigned pad0:9; + unsigned pitch:12; // pitch (up/down heading) signed deltaX:13; // change in x - signed x:19; // x coord (1st loc value) + unsigned pad1:7; - signed animation:10; // current animation + signed deltaY:13; // change in y signed z:19; // z coord (3rd loc value) - unsigned pad2:3; - unsigned pitch:12; // pitch (up/down heading) - signed deltaY:13; // change in y - unsigned pad3:7; + signed animation:10; // current animation + signed deltaHeading:10; // change in heading + unsigned pad3:12; + signed y:19; // y coord (2nd loc value) unsigned heading:12; // heading - signed y:19; // y coord (2nd loc value) unsigned pad4:1; }; @@ -2397,23 +2396,22 @@ /*0000*/ uint16_t spawnId; /*0002*/ uint16_t spawnId2; /*0004*/ + signed x:19; // x coord (1st loc value) signed deltaZ:13; // change in z - signed deltaHeading:10; // change in heading - unsigned pad0:9; /*0008*/ + unsigned pitch:12; // pitch (up/down heading) signed deltaX:13; // change in x - signed x:19; // x coord (1st loc value) + unsigned pad1:7; /*0012*/ - signed animation:10; // current animation + signed deltaY:13; // change in y signed z:19; // z coord (3rd loc value) - unsigned pad2:3; /*0016*/ - unsigned pitch:12; // pitch (up/down heading) - signed deltaY:13; // change in y - unsigned pad3:7; + signed animation:10; // current animation + signed deltaHeading:10; // change in heading + unsigned pad3:12; /*0020*/ + signed y:19; // y coord (2nd loc value) unsigned heading:12; // heading - signed y:19; // y coord (2nd loc value) unsigned pad4:1; /*0024*/ }; @@ -2429,24 +2427,25 @@ /*0002*/ uint16_t spawnId; // Player's spawn id /*0004*/ uint16_t unknown0004; // ***Placeholder /*0006*/ - float y; // y coord (2nd loc value) + float deltaZ; // change in z /*0010*/ unsigned heading:12; // heading - unsigned pad1:20; + unsigned pitch:12; // pitch (up/down heading) + unsigned pad1:8; /*0014*/ float x; // x coord (1st loc value) /*0018*/ - float deltaZ; // change in z + signed deltaHeading:10; // change in heading + signed animation:10; // current animation + unsigned pad3:12; /*0022*/ + float y; // y coord (2nd loc value) +/*0026*/ float deltaY; // change in y -/*0026*/ - signed animation:10; // current animation - unsigned pitch:12; // pitch (up/down heading) - signed deltaHeading:10; // change in heading /*0030*/ + float deltaX; // change in x +/*0034*/ float z; // z coord (3rd loc value) -/*0034*/ - float deltaX; // change in x /*0038*/ }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cn...@us...> - 2024-05-16 15:45:48
|
Revision: 1469 http://sourceforge.net/p/seq/svn/1469 Author: cn187 Date: 2024-05-16 15:45:46 +0000 (Thu, 16 May 2024) Log Message: ----------- Tag for release 6.3.14 Added Paths: ----------- showeq/tags/v6_3_14/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |