Skip to content

Commit

Permalink
seasson 1 and older
Browse files Browse the repository at this point in the history
  • Loading branch information
moonshadow565 committed Aug 9, 2020
1 parent c44419c commit 5748f08
Show file tree
Hide file tree
Showing 62 changed files with 13,408 additions and 1,997 deletions.
57 changes: 34 additions & 23 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ if(WIN32)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libstdc++ -static-libgcc")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -static -static-libstdc++ -static-libgcc")
endif()
endif()

Expand All @@ -32,26 +34,35 @@ add_library(lolsrv_lib STATIC
target_include_directories(lolsrv_lib PUBLIC lib)
target_link_libraries(lolsrv_lib PUBLIC enet)

add_executable(lolsrv_live106 src/main_live106.hpp src/main_live106.cpp)
target_link_libraries(lolsrv_live106 PRIVATE lolsrv_lib)
macro(Version ver)
add_executable(lolsrv_${ver} src/${ver}/pkt.hpp src/${ver}/main.cpp)
target_link_libraries(lolsrv_${ver} PRIVATE lolsrv_lib)
endmacro()

add_executable(lolsrv_cb1 src/main_cb1.hpp src/main_cb1.cpp)
target_link_libraries(lolsrv_cb1 PRIVATE lolsrv_lib)

add_executable(lolsrv_cb3 src/main_cb3.hpp src/main_cb3.cpp)
target_link_libraries(lolsrv_cb3 PRIVATE lolsrv_lib)

add_executable(lolsrv_cb3_ab src/main_cb3_ab.hpp src/main_cb3_ab.cpp)
target_link_libraries(lolsrv_cb3_ab PRIVATE lolsrv_lib)

add_executable(lolsrv_live084 src/main_live084.hpp src/main_live084.cpp)
target_link_libraries(lolsrv_live084 PRIVATE lolsrv_lib)

add_executable(lolsrv_live126 src/main_live126.hpp src/main_live126.cpp)
target_link_libraries(lolsrv_live126 PRIVATE lolsrv_lib)

add_executable(lolsrv_pbe126 src/main_pbe126.hpp src/main_pbe126.cpp)
target_link_libraries(lolsrv_pbe126 PRIVATE lolsrv_lib)

add_executable(lolsrv_live131 src/main_live131.hpp src/main_live131.cpp)
target_link_libraries(lolsrv_live131 PRIVATE lolsrv_lib)
Version(0.8.13.26)
Version(0.9.22.14)
Version(0.9.22.14_ab)
Version(0.9.22.16)
Version(0.9.25.21)
Version(1.0.0.63)
Version(1.0.0.74)
Version(1.0.0.79)
Version(1.0.0.82)
Version(1.0.0.86)
Version(1.0.0.97)
Version(1.0.0.98)
Version(1.0.0.103)
Version(1.0.0.104)
Version(1.0.0.105)
Version(1.0.0.107)
Version(1.0.0.109)
Version(1.0.0.110)
Version(1.0.0.111)
Version(1.0.0.113)
Version(1.0.0.117)
Version(1.0.0.119)
Version(1.0.0.124)
Version(1.0.0.125)
Version(1.0.0.126)
Version(1.0.0.126_ab)
Version(1.0.0.131)
19 changes: 12 additions & 7 deletions lib/enetserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,12 @@ void ENetServer::send_raw(int32_t cid, void const *pkt, size_t size, uint8_t cha
return;
}
auto const peer = i->second;
auto packet = enet_packet_create(pkt, size, flags & ~ENET_PACKET_FLAG_NO_ALLOCATE);
auto const extra = 8 - (size % 8);
auto packet = enet_packet_create(pkt, size + extra, flags & ~ENET_PACKET_FLAG_NO_ALLOCATE);
memcpy(packet->data, pkt, size);
blowfish.encrypt((char*)packet->data, size);
if (extra)
memset(packet->data + size, 0, extra);
blowfish.encrypt((char*)packet->data, size + extra);
enet_peer_send(peer, channel, packet);
}

Expand Down Expand Up @@ -115,11 +118,13 @@ void ENetServer::route_packet(int32_t cid, uint8_t channel, ENetPacket const* pa
uint8_t packetId = (uint8_t)(data[0]);
LOG_DEBUG("Got packet on %u from %u: 0x%02x = %u, size : %u", channel, cid, packetId, packetId, packet->dataLength);
if (Logger::currentLevel >= LogLevel::LLOG_TRACE) {
for (size_t i = 0; i < packet->dataLength; i += 8) {
for (size_t c = i; c < packet->dataLength && c < (i + 8); c++)
printf("%02x ", packet->data[c]);
for (size_t c = i; c < packet->dataLength && c < (i + 8); c++) {
uint8_t z = packet->data[c];
for (size_t i = 0; i < data.size(); i += 8) {
for (size_t c = i; c < data.size() && c < (i + 8); c++) {
uint8_t z = data.data()[c];
printf("%02X ", z);
}
for (size_t c = i; c < data.size() && c < (i + 8); c++) {
uint8_t z = data.data()[c];
if (z < 0x7f && z > 0x1f)
printf(" %c", z);
else
Expand Down
9 changes: 9 additions & 0 deletions lib/enetserver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include <vector>
#include <map>
#include <array>
#include <cstring>
#include <memory>
#include <sstream>
#include <functional>
Expand Down Expand Up @@ -44,6 +45,14 @@ operator <= (std::basic_ostream<StreamArgs...> & out, T const & data)
return out;
}

template <class... StreamArgs>
inline std::basic_ostream<StreamArgs...> &
operator <= (std::basic_ostream<StreamArgs...> & out, char const* const data)
{
out.write(data, strlen(data) + 1);
return out;
}

template<typename T>
T const* cast_packet(char const* data, size_t size) {
if (size < sizeof(T)) {
Expand Down
16 changes: 9 additions & 7 deletions src/main_cb1.cpp → src/0.8.13.26/main.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "options.hpp"
#include "main_cb1.hpp"
#include "pkt.hpp"
#include "enetserver.hpp"

int main(int argc, char** argv)
Expand All @@ -8,7 +8,7 @@ int main(int argc, char** argv)
r3dPoint2D lastPos = r3dPoint2D{ 26.0f, 280.0f };
Options options = {argc, argv};

auto server = ENetServer({ENET_HOST_ANY, 5119}, "GLzvuWtyCfHyGhF2");
auto server = ENetServer({ENET_HOST_ANY, options.port}, options.key);
LOG_INFO("Server started!");

server.onConnected = [&](int32_t from) {
Expand Down Expand Up @@ -61,9 +61,9 @@ int main(int argc, char** argv)
}
if (id == PKT_C2S_Reconnect) {
LOG_DEBUG("Got PKT_C2S_Reconnect");
PKT_S2C_Reconnect_s ans = {};
ans.cid = from;
server.send_simple(from, ans);
// PKT_S2C_Reconnect_s ans = {};
// ans.cid = from;
// server.send_simple(from, ans);
return;
}

Expand Down Expand Up @@ -95,7 +95,10 @@ int main(int argc, char** argv)
auto req = cast_packet<PKT_C2S_Ping_Load_Info_s>(data, length);
PKT_S2C_Ping_Load_Info_s ans = {};
ans.mConnectionInfo = req->mConnectionInfo;
server.send_simple(from, ans);
std::stringstream buffer = {};
buffer <= ans;
buffer <= (char const*)(req->mConnectionInfo.mState);
server.send_variable(from, buffer, ans.channel(), ans.flag());
return;
}

Expand Down Expand Up @@ -174,4 +177,3 @@ int main(int argc, char** argv)
}
return 0;
}

2 changes: 1 addition & 1 deletion src/main_cb1.hpp → src/0.8.13.26/pkt.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ struct ConnectionInfo
uint32_t mPing : 15;
uint32_t mPad : 1;
uint8_t mReady : 1;
char mState[64] = {};
char mState[0] = {};
};

struct PlayerLiteInfo
Expand Down
181 changes: 181 additions & 0 deletions src/0.9.22.14/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
#include "options.hpp"
#include "pkt.hpp"
#include "enetserver.hpp"

int main(int argc, char** argv)
{
uint32_t syncId = 1;
r3dPoint2D lastPos = r3dPoint2D{ 26.0f, 280.0f };
Options options = {argc, argv};

auto server = ENetServer({ENET_HOST_ANY, options.port}, options.key);
LOG_INFO("Server started!");

server.onConnected = [&](int32_t from) {
LOG_INFO("Peer connected: %d", from);
};

server.onDisconnected = [&](int32_t from) {
LOG_INFO("Peer disconnected: %d", from);
};

server.onPacket[CHANNEL_MIDDLE_TIER_ROSTER] = [&](int32_t from, char const* data, size_t length) {
(void)from;
(void)data;
(void)length;
auto id = (egptype_e)data[0];
if (id == egptype_e::EGP_RequestJoinTeam) {
LOG_TRACE("Got EGP_RequestJoinTeam");
EGP_TeamRosterUpdate_s res1 = {};
res1.orderMembers[0] = from;
res1.current_teamsize_order = 1;
res1.current_teamsize_chaos = 0;
res1.teamsize_order = 1;
res1.teamsize_chaos = 0;
server.send_simple(from, res1);

EGP_RequestReskin_s res3 = {};
res3.Id_Player = from;
res3.skinID = options.SkinID;
strcpy(&res3.buffer[0], options.ChampionName.c_str());
res3.bufferLen = options.ChampionName.length() + 1;
server.send_simple(from, res3);

EGP_RequestRename_s res2 = {};
res2.Id_Player = from;
res2.skinID = options.SkinID;
strcpy(&res2.buffer[0], options.PlayerName.c_str());
res2.bufferLen = options.PlayerName.length();
server.send_simple(from, res2);
return;
}
};

server.onPacket[CHANNEL_GENERIC_APP_TO_SERVER] = [&](int32_t from, char const* data, size_t length) {
(void)from;
(void)data;
(void)length;
auto id = (pkttype_e)(uint8_t)data[0];
if (id == PKT_C2S_Reconnect) {
LOG_DEBUG("Got PKT_C2S_Reconnect");
// PKT_S2C_Reconnect_s ans = {};
// ans.cid = from;
// server.send_simple(from, ans);
return;
}

if (id == PKT_C2S_QueryStatusReq) {
LOG_DEBUG("Got PKT_C2S_QueryStatusReq");
PKT_S2C_QueryStatusAns_s ans = {};
ans.ok = true;
server.send_simple(from, ans);
return;
}

if (id == PKT_SynchVersionC2S) {
LOG_DEBUG("Got PKT_SynchVersionC2S");
auto req = cast_packet<PKT_SynchVersionC2S_s>(data, length);
PKT_SynchVersionS2C_s ans = {};
ans.mIsVersionOk = true;
ans.mMapToLoad = options.MapID;
strcpy(&ans.mVersionString[0], &req->mVersionString[0]);
ans.playerInfo[0].ID = from;
ans.playerInfo[0].summonorLevel = 30;
ans.playerInfo[0].summonorSpell1 = 0x06496EA8;
ans.playerInfo[0].summonorSpell2 = 0x06496EA8;
server.send_simple(from, ans);
return;
}

if (id == PKT_C2S_Ping_Load_Info) {
LOG_DEBUG("Got PKT_C2S_Ping_Load_Info");
auto req = cast_packet<PKT_C2S_Ping_Load_Info_s>(data, length);
PKT_S2C_Ping_Load_Info_s ans = {};
ans.mConnectionInfo = req->mConnectionInfo;
std::stringstream buffer = {};
buffer <= ans;
buffer <= (char const*)(req->mConnectionInfo.mState);
server.send_variable(from, buffer, ans.channel(), ans.flag());
return;
}

if (id == PKT_C2S_CharSelected) {
LOG_DEBUG("Got PKT_C2S_CharSelected");
PKT_S2C_StartSpawn_s ans1 = {};
ans1.numBotsChaos = 0;
ans1.numBotsOrder = 0;
server.send_simple(from, ans1);

PKT_S2C_CreateHero_s ans3 = {};
ans3.isBot = 0;
ans3.teamIsOrder = 1;
ans3.skinID = options.SkinID;
strcpy(ans3.Skin, options.ChampionName.c_str());
ans3.skillLevel = 1;
ans3.playerUID = from;
ans3.netObjID = 0x40000001;
ans3.netNodeID = 0x40;
strcpy(ans3.Name, options.PlayerName.c_str());
server.send_simple(from, ans3);

PKT_S2C_EndSpawn_s ans2 = {};
server.send_simple(from, ans2);
return;
}

if (id == PKT_C2S_ClientReady) {
LOG_DEBUG("Got PKT_C2S_ClientReady");
PKT_S2C_StartGame_s ans1 = {};
server.send_simple(from, ans1);

PKT_OnEnterVisiblityClient_s ans2 = {};
std::stringstream buffer = {};
ans2.fromID = 0x40000001;
buffer <= ans2;
for(int i = 0; i < 13; i++)
buffer <= (uint8_t) 0;
buffer <= (float) 1.0f;
for(int i = 0; i < 13; i++)
buffer <= (uint8_t) 0;
buffer <= (uint8_t) 3;
buffer <= (uint32_t) 1;
buffer <= lastPos;
buffer <= lastPos;
server.send_variable(from, buffer, ans2.channel(), ans2.flag());
return;
}

if (id == PKT_NPC_IssueOrderReq) {
auto req = cast_packet<PKT_NPC_IssueOrderReq_s>(data, length);
LOG_DEBUG("Got PKT_NPC_IssueOrderReq_s: order:%u, pos: %f %f %f, netid: 0x%08x",
req->order, req->pos.x, req->pos.y, req->pos.z, req->targetNetID);
if (req->order == 0x02) {
r3dPoint2D end{ req->pos.x, req->pos.z };
r3dPoint2D distance = end - lastPos;
r3dPoint2D dir = distance / ::length(distance);
LOG_DEBUG("Facing %f %f", dir.x, dir.y);

PKT_S2C_FaceDirection_s ans2;
ans2.fromID = 0x40000001;
ans2.direction = { dir.x, 0, dir.y };
server.send_simple(from, ans2);

PKT_WaypointList_s ans;
ans.fromID = 0x40000001;
ans.syncID = syncId++;
std::stringstream buffer;
buffer <= ans;
buffer <= end;
server.send_variable(from, buffer, ans2.channel(), ans.flag());
lastPos = end;
}
return;
}
LOG_WARNING("Unknown packet: 0x%02x = %u", data[0], data[0]);
};

for(;;) {
server.service(10);
}
return 0;
}
Loading

0 comments on commit 5748f08

Please sign in to comment.