Commit 79f741d3 authored by nanahira's avatar nanahira

Merge branch 'master' of ../srvpro

parents 69402caa 3b205665
Pipeline #38323 failed with stages
in 70 minutes and 33 seconds
......@@ -6,9 +6,8 @@ RUN apt update && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/log/*
WORKDIR /usr/src
RUN wget -O premake.zip https://github.com/premake/premake-core/releases/download/v5.0.0-beta5/premake-5.0.0-beta5-src.zip && \
7z x -y premake.zip && \
mv premake-5.0.0-beta5-src premake && \
RUN wget -O premake.zip https://github.com/premake/premake-core/releases/download/v5.0.0-beta7/premake-5.0.0-beta7-src.zip && \
7z x -y -opremake premake.zip && \
cd premake/build/gmake.unix && \
make -j$(nproc)
......
......@@ -15,15 +15,25 @@ const getPolyfillers = (version) => {
};
async function polyfillGameMsg(version, msgTitle, buffer) {
const polyfillers = getPolyfillers(version);
let mutated = false;
let pbuf = buffer;
for (const polyfiller of polyfillers) {
const newBuf = await polyfiller.polyfillGameMsg(msgTitle, buffer);
const newBuf = await polyfiller.polyfillGameMsg(msgTitle, pbuf);
if (newBuf) {
mutated = true;
buffer = newBuf;
pbuf = newBuf;
}
}
return mutated ? buffer : undefined;
if (pbuf === buffer) {
return undefined;
}
else if (pbuf.length <= buffer.length) {
pbuf.copy(buffer, 0, 0, pbuf.length);
return pbuf.length === buffer.length
? undefined
: buffer.slice(0, pbuf.length);
}
else {
return pbuf;
}
}
async function polyfillResponse(version, msgTitle, buffer) {
const polyfillers = getPolyfillers(version);
......
......@@ -15,15 +15,23 @@ const getPolyfillers = (version: number) => {
export async function polyfillGameMsg(version: number, msgTitle: string, buffer: Buffer) {
const polyfillers = getPolyfillers(version);
let mutated = false;
let pbuf = buffer;
for (const polyfiller of polyfillers) {
const newBuf = await polyfiller.polyfillGameMsg(msgTitle, buffer);
const newBuf = await polyfiller.polyfillGameMsg(msgTitle, pbuf);
if (newBuf) {
mutated = true;
buffer = newBuf;
pbuf = newBuf;
}
}
return mutated ? buffer : undefined;
if (pbuf === buffer) {
return undefined;
} else if (pbuf.length <= buffer.length) {
pbuf.copy(buffer, 0, 0, pbuf.length);
return pbuf.length === buffer.length
? undefined
: buffer.slice(0, pbuf.length);
} else {
return pbuf;
}
}
export async function polyfillResponse(version: number, msgTitle: string, buffer: Buffer) {
......
......@@ -2370,17 +2370,20 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
}
CLIENT_kick(client)
return false
client_key = CLIENT_get_authorize_key(client)
clean_blocker = () ->
aragami.del(aragami_classes.ClientVersionBlocker, client_key)
if info.version == settings.version
await clean_blocker()
return true
if settings.alternative_versions.includes(info.version)
client_key = CLIENT_get_authorize_key(client)
if !await aragami.has(aragami_classes.ClientVersionBlocker, client_key)
blocker_obj = new aragami_classes.ClientVersionBlocker()
blocker_obj.clientKey = client_key
await aragami.set(blocker_obj)
return bad_version("${version_to_polyfill}")
else
await aragami.del(aragami_classes.ClientVersionBlocker, client_key)
await clean_blocker()
return true
return bad_version(if info.version < settings.version then settings.modules.update else settings.modules.wait_update)
polyfill_version = () ->
......
......@@ -3120,7 +3120,7 @@
ygopro.ctos_follow('JOIN_GAME', true, async function(buffer, info, client, server, datas) {
var available_logs, check_buffer_indentity, check_version, create_room_name, create_room_with_action, decrypted_buffer, duelLog, e, exactBan, i, id, index, j, l, len, len1, len2, len3, m, matching_match, matching_participant, n, polyfill_version, pre_room, recover_match, ref, ref1, replay, replay_id, replays, room, secret, struct, tournament_data, userData, userDataRes, userUrl;
check_version = async function() {
var bad_version, blocker_obj, client_key;
var bad_version, blocker_obj, clean_blocker, client_key;
bad_version = function(msg) {
ygopro.stoc_send_chat(client, msg, ygopro.constants.COLORS.RED);
ygopro.stoc_send(client, 'ERROR_MSG', {
......@@ -3130,18 +3130,22 @@
CLIENT_kick(client);
return false;
};
client_key = CLIENT_get_authorize_key(client);
clean_blocker = function() {
return aragami.del(aragami_classes.ClientVersionBlocker, client_key);
};
if (info.version === settings.version) {
await clean_blocker();
return true;
}
if (settings.alternative_versions.includes(info.version)) {
client_key = CLIENT_get_authorize_key(client);
if (!(await aragami.has(aragami_classes.ClientVersionBlocker, client_key))) {
blocker_obj = new aragami_classes.ClientVersionBlocker();
blocker_obj.clientKey = client_key;
await aragami.set(blocker_obj);
return bad_version("${version_to_polyfill}");
} else {
await aragami.del(aragami_classes.ClientVersionBlocker, client_key);
await clean_blocker();
return true;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment