- 634
- 1,004
- Версия SA-MP
-
- Другая
Скрипт добавляет в донат строку поиска
Вложения
Последнее редактирование:
Скорее всего у каждой карточки примерно такая структура div-ов (от родителя к детям):не скрывает заблокированные лимитки
я пробывал, оно не помогаетПо идее чекать у флекс-карточки наличие этого оверлея и если есть то навешивать style display: none на флекс карточку.
блокировка в самом низу находится(от родителя к детям):
- Flex контейнер
- Опциоально Overlay с position absolute (хуйня с замочком)
- Содержимое карточки
Потыкал дебаггером, обнаружил, что этот первый элемент в дом дереве просто обновляется раз в секунду. И потому стиль слетает.я пробывал, оно не помогает
Посмотреть вложение 275178
Посмотреть вложение 275179
блокировка в самом низу находится
Посмотреть вложение 275181
прикрепил архив со страницей доната
window.executeEvent('event.donateShop.updateProduct', `[{"key": 473,"category": 7,"blockedType": 1,"blockedReason": "Продажа завершена! Все было распродано!"}]`);
function onReceivePacket(id, bs, priority, reliability, orderingChannel)
if id == 220 then
raknetBitStreamIgnoreBits(bs, 8)
local unk = raknetBitStreamReadInt8(bs)
if unk == 17 then
raknetBitStreamIgnoreBits(bs, 32)
local length = raknetBitStreamReadInt16()
local encoded = raknetBitStreamReadInt8()
local str = ''
if encoded then
str = raknetBitStreamDecodeString(bs, length)
else
str = raknetBitStreamReadString(bs, length)
end
print(str)
end
end
end
function onSendPacket(id, bs, priority, reliability, orderingChannel)
if id == 220 then
raknetBitStreamIgnoreBits(bs, 8)
if raknetBitStreamReadInt8(bs) == 18 then
local strlen = raknetBitStreamReadInt16(bs)
local str = raknetBitStreamReadString(bs, strlen)
if str:find("donateShop.selectCategory|%d+") then
addSearch()
end
end
end
end
function addSearch()
evalanon[[
const selectorsToQuery = ['.donate-shop-grid__item', '.donate-shop-carousel__item'];
let rawItems = [];
let items = [];
const collectRawItems = () => {
selectorsToQuery.forEach((selector, _) => {
const elements = Array.from(document.querySelectorAll(selector));
rawItems = rawItems.concat(elements);
});
}
const validateItem = (item) => {
const names = item.querySelectorAll('.donate-shop-product__name');
let itemName = '';
names.forEach((el, _) => {
itemName = itemName.concat(el.textContent, ' ');
});
items.push(
{
name: itemName,
element: item
}
);
}
const validateItems = () => {
rawItems.forEach((rawItem, _) => {
validateItem(rawItem);
});
}
const createSearchInput = (className) => {
const input = document.createElement('input');
const s = input.style;
s.border = 'none';
s.borderRadius = '5px';
s.background = '#00000090';
s.color = '#fff';
s.height = '5vh';
s.width = '100%';
s.padding = '10px 20px';
s.boxSizing = 'border-box';
s.fontSize = '18px';
s.marginBottom = '1vh';
input.className = className;
return input;
}
const recalculatePaddingsOfDonateContent = (content) => {
const shopContent = document.querySelector(".donate-shop__content").computedStyleMap().get("margin-top").toString();
const shopCoins = document.querySelector(".donate-shop__coins").computedStyleMap().get('top').toString();
const c = `calc(${shopCoins} - 3vh)`;
const n = `calc(${shopContent} - 7vh)`;
document.querySelector(".donate-shop__content").style.marginTop = n;
document.querySelector(".donate-shop__coins").style.top = c;
}
const filterItems = (filter) => {
for (const item of items) {
item.element.style.display = 'flex';
if (filter.length == 0) {
continue;
}
if (item.name.toLowerCase().includes(filter.toLowerCase())) {
continue;
}
item.element.style.display = 'none';
}
}
const onSearchUpdate = (e) => {
const filter = e.target.value;
filterItems(filter);
}
const insertOrUpdateSearch = (root, className) => {
const oldInput = root.querySelector(`.${className}`);
if (oldInput) {
oldInput.removeEventListener('input', onSearchUpdate);
oldInput.remove();
} else {
recalculatePaddingsOfDonateContent(root);
}
const input = createSearchInput(className);
input.addEventListener('input', onSearchUpdate);
root.insertAdjacentElement('afterbegin', input);
}
const onLoad = () => {
collectRawItems();
validateItems();
const donateContent = document.querySelector('.donate-shop__content');
if (!donateContent) {
return;
}
insertOrUpdateSearch(donateContent, 'donate-shop__search-input');
}
onLoad();
]]
end
function evalanon(code)
evalcef(("(() => {%s})()"):format(code))
end
function evalcef(code, encoded)
encoded = encoded or 0
local bs = raknetNewBitStream();
raknetBitStreamWriteInt8(bs, 17);
raknetBitStreamWriteInt32(bs, 0);
raknetBitStreamWriteInt16(bs, #code);
raknetBitStreamWriteInt8(bs, encoded);
raknetBitStreamWriteString(bs, code);
raknetEmulPacketReceiveBitStream(220, bs);
raknetDeleteBitStream(bs);
end
вот если что мой скрипт для чтения цеф ивентовНачал пытаться хукать это входящее событие по аналогии как это предлагает arizona-events:
function onReceivePacket(id, bs)
if id == 220 then
raknetBitStreamReadInt8(bs);
if raknetBitStreamReadInt8(bs) == 17 then
raknetBitStreamReadInt32(bs)
local length = raknetBitStreamReadInt16(bs)
local encoded = raknetBitStreamReadInt8(bs)
if length > 0 then
local text = (encoded ~= 0) and raknetBitStreamDecodeString(bs, length + encoded) or raknetBitStreamReadString(bs, length)
local event, data = text:match('window%.executeEvent%(\'(.+)\',%s*`%[(.+)%]`%);');
print("Receive", text)
end
end
end
end
function onSendPacket(id, bs, priority, reliability, orderingChannel)
if id == 220 then
raknetBitStreamReadInt8(bs)
if raknetBitStreamReadInt8(bs) == 18 then
local strlen = raknetBitStreamReadInt16(bs)
local str = raknetBitStreamReadString(bs, strlen)
print("Send", str)
end
end
end
обновил, теперь при поиске лимитки тоже скрываютсяСкрипт добавляет в донат строку поиска
Посмотреть вложение 275148