Steam Money Fix

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
1.003
Симпатии
329
#1
Автор: fantom

Совместимость с: Amx Mod X 1.9.0, Amx Mod X 1.10.0 dev

В последнем бета-клиенте стима появилась колонка с деньгами в табе.
Для этого было создано новое сообщение клиента. В старых gamedll их нет.
Данный плагин является фиксом для отображения денег, до момента пока вы не обновите свой gamedll.

Актуальная версия: 1.3.1

Источник: Steam Money Fix

В версии 1.3.1 исправлен потенциальный выброс клиентов с билдом ниже 8244.
8 Июн 2019
Правда я не тестировал особо. Для теста достаточно зайти с клиента с билдом ниже 8244, например с тем же 4554 и проверить вылетает ли.


Upd: вроде не вылетает.

Upd2: Файл удален, используйте оригинальную версию с первоисточника с фиксом со третьего сообщения данной темы, либо же кто-нибудь залейте ее сюда.
В общем стабильные версии:
Steam Money Fix только 48 протокол
Steam Money Fix - потенциальная работа и на 47 протоколе.
 
Последнее редактирование: kapangaIII

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
1.003
Симпатии
329
#2
Небольшой фикс для тех кто пользуется regamedll с новыми кварами или же gamedll с последнего билда, либо же плагином fantom 'a.

(При использовании плагина от fantom данный плагин должен быть ниже по списку)

Плагин исправляет вылеты старых клиентов из-за отсутствия зарегистрированного типа пакета.

C++:
#include <amxmodx>
new g_bwSend, bool:g_Enable=false;
public plugin_init() {
    if(get_cvar_pointer("mp_scoreboard_showhealth")){register_event_ex("Account", "Event", RegisterEvent_Single);g_Enable=true;}
    if(get_cvar_pointer("mp_scoreboard_showmoney")){register_event_ex("HealthInfo", "Event", RegisterEvent_Single);g_Enable=true;}
}
public Event(id) {
    if(!is_user_connected(id))return 0;
    if(!(g_bwSend & (1 << (id & 31))))return 1;
    return 0;
}
public client_authorized(id){
    if(!g_Enable)return;
    g_bwSend &= ~(1 << (id & 31));
    if(is_user_bot(id)||is_user_hltv(id))return;
    query_client_cvar(id, "sv_version", "check_sv_version");
}
public check_sv_version(id,const cvar[],const value[]){
    new a = strlen(value);
    if(a<21)return;
    if(str_to_num(value[a-4])>=8244)g_bwSend |= (1 << (id & 31));
}
 
Последнее редактирование: kapangaIII

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
1.003
Симпатии
329
#3
Небольшой фикс для тех кто пользуется regamedll с новыми кварами или же gamedll с последнего билда, либо же плагином fantom 'a.

(При использовании плагина от fantom данный плагин должен быть ниже по списку)

Плагин исправляет вылеты старых клиентов из-за отсутствия зарегистрированного типа пакета.

C++:
#include <amxmodx>
new g_bwSend, bool:g_Enable=false;
public plugin_init() {
    register_plugin("49 44 49","20 4E 41","58 59 49"); // privet sok.
    if(get_cvar_pointer("mp_scoreboard_showhealth")){register_event_ex("Account", "Event", RegisterEvent_Single);g_Enable=true;}
    if(get_cvar_pointer("mp_scoreboard_showmoney")){register_event_ex("HealthInfo", "Event", RegisterEvent_Single);g_Enable=true;}
}
public Event(id) {
    if(!is_user_connected(id))return 0;
    if(!(g_bwSend & (1 << (id & 31))))return 1;
    return 0;
}
public client_authorized(id){
    if(!g_Enable)return;
    g_bwSend &= ~(1 << (id & 31));
    if(is_user_bot(id)||is_user_hltv(id))return;
    query_client_cvar(id, "sv_version", "check_sv_version");
}
public check_sv_version(id,const cvar[],const value[]){
    new a = strlen(value);
    if(a<21)return;
    if(str_to_num(value[a-4])>=8244)g_bwSend |= (1 << (id & 31));
}
8 Июн 2019
perfectblood0 Vesuvius Steam Money Fix удалите этот пост.
 

wopox1337

Пользователь
Регистрация
11 Июн 2017
Сообщения
82
Симпатии
54
#4
Код:
query_client_cvar
на 47 протокол то пробовал? :)
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
1.003
Симпатии
329
#5
Вылетит?
Проблема amxmodx'а.
Не знаю почему они не добавили какой-нибудь query_client_cvar2.
47 везде заблокирован вроде, почти.
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
1.003
Симпатии
329
#6
Вообще, с плагином фантома видимо работать все таки не будет, возможно так как либо метамод либо amxmodx неверно регистрируют message.

Так что используйте либо последний регеймдлл либо последний геймдлл.

Код:
engfunc(EngFunc_RegUserMsg, "Account", 5);
server_print("MsgAccount | %d",get_user_msgid("Account"));
// - 0
 

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
1.003
Симпатии
329
#7
C++:
#include <amxmodx>
new g_bwSend, bool:g_Enable=false;
new g_Step[32][3];//mb bw?
public plugin_init() {
    register_plugin("49 44 49","20 4E 41","58 59 49"); // privet sok.
    if(get_cvar_pointer("mp_scoreboard_showhealth")){register_message(get_user_msgid("Account"), "Event");g_Enable=true;}
    if(get_cvar_pointer("mp_scoreboard_showmoney")){register_message(get_user_msgid("HealthInfo"), "Event");g_Enable=true;}
}
public client_command(id){
    if(g_Step[id][2])return;
    new Cmd[32];read_argv(0, Cmd, 31);
    if(equali(Cmd,"_checkin_checkin"))g_Step[id][0]=1;
    else if(equali(Cmd,"vgui_runscript"))g_Step[id][1]=1;
    else if(equali(Cmd,"_microphone_checkin"))g_Step[id][2]=1;
}
public Event(msg_id, msg_dest, id) {
    if(!is_user_connected(id))return 0; //msg_dest == MSG_ALL cause crashes again?
    if(!(g_bwSend & (1 << (id & 31))))return 1;
    return 0;
}
public client_connect(id){
    g_Step[id][0]=0;g_Step[id][1]=0;g_Step[id][2]=0;
    client_cmd(id,"_checkin_checkin");client_cmd(id,"vgui_runscript");client_cmd(id,"_microphone_checkin");
}
public client_putinserver(id){
    if(!g_Enable)return;
    g_bwSend &= ~(1 << (id & 31));
    if(is_user_bot(id)||is_user_hltv(id))return;
    if(g_Step[id][1])query_client_cvar(id, "sv_version", "check_sv_version");
}
public check_sv_version(id,const cvar[],const value[]){
    new a = strlen(value);
    if(a<21)return;
    if(str_to_num(value[a-4])>=8244)g_bwSend |= (1 << (id & 31));
}
Должно подойти и для 47 патча.
Хотя по хорошему надо хукать SV_ConnectionlessPacket или SV_ClientConnect и там смотреть какой протокол.
wopox1337

И да, я не знаю зачем добавили register_message, если и эвент неплохо справлялся, хотя неясно почему.
Протестировать тоже не удалось так как вылеты опять фантомно исчезли.
 

wopox1337

Пользователь
Регистрация
11 Июн 2017
Сообщения
82
Симпатии
54
#9

kapangaIII

Команда форума
Разработчик
Регистрация
31 Окт 2017
Сообщения
1.003
Симпатии
329
#10
Что мы получим если в пре заблокируем эвент? Ничего? В таком случае почему в описании event_ex есть что-то о condition?
И почему оно работало когда мы тестили, а когда выключали - вылетало, очень странно.
А у register_message нет post?
9 Июн 2019
Ну и если есть reapi то можно использовать уже REU_GetProtocol.
9 Июн 2019
C++:
#include <amxmodx>
#include <reapi>
new g_bwSend, bool:g_Enable=false;
public plugin_init() {
    register_plugin("49 44 49","20 4E 41","58 59 49"); // privet sok.
    if(get_cvar_pointer("mp_scoreboard_showhealth")){register_message(get_user_msgid("Account"), "Event");g_Enable=true;}
    if(get_cvar_pointer("mp_scoreboard_showmoney")){register_message(get_user_msgid("HealthInfo"), "Event");g_Enable=true;}
}
public Event(msg_id, msg_dest, id) {
    if(!is_user_connected(id))return 0; //msg_dest == MSG_ALL cause crashes again?
    if(!(g_bwSend & (1 << (id & 31))))return 1;
    return 0;
}
public client_putinserver(id){
    if(!g_Enable)return;
    g_bwSend &= ~(1 << (id & 31));
    if(is_user_bot(id)||is_user_hltv(id))return;
    if(REU_GetProtocol(id)==48)query_client_cvar(id, "sv_version", "check_sv_version");
}
public check_sv_version(id,const cvar[],const value[]){
    new a = strlen(value);
    if(a<21)return;
    if(str_to_num(value[a-4])>=8244)g_bwSend |= (1 << (id & 31));
}