AMX MOD X
Суббота, 03.01.2026, 08:26:17



Приветствую Вас Гость | RSS
[ Главная ] [ Нужно перехватить get_user_authid... - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Нужно перехватить get_user_authid...
dArkДата: Четверг, 18.09.2008, 18:20:25 | Сообщение # 1
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Репутация: 1
Статус: Не в сети
В общем, цель, во всех плагинах перехватить эту функцию, и если она возвращает VALVE_ID_LAN, заменить возвращаемое значение допустим на V@lve_xyid_inet... Получится допустим, набираем amx_who, и у всех игроков у которых VALVE_ID_LAN написано, будет наша строка написана вместо старой.
 
DaTaДата: Четверг, 18.09.2008, 20:08:45 | Сообщение # 2
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Code
static cell AMX_NATIVE_CALL get_user_authid(AMX *amx, cell *params) /* 3 param */
{
  int index = params[1];
  const char* authid = 0;
   
  if (index > 0 && index <= gpGlobals->maxClients)
   authid = GETPLAYERAUTHID(g_players[index].pEdict);
   
  return set_amxstring(amx, params[2], authid ? authid : "", params[3]);
}

Так выглядит вызов из амхх'а, вызывается функция движка http://metamod.org/engine_notes.html#GetPlayerAuthId
Изменить его можно несколькими способам
1) Хакнуть движок
2) Перекомпилировать амхх с нужными изменениями
3) Перекомпилировать все плагины с новыми изменениями

я бы советовал вариант 3, и реализовать его примерно так:
открыть amxmodx.inc и изменить строчку

Code
native get_user_authid(index, authid[] ,len);

изменить ее как тебе нужно:
Code
stock get_user_authid(index, authid[] ,len)
{
    return copy(authid, len, "V@lve_xyid_inet");
}
 
dArkДата: Четверг, 18.09.2008, 20:20:03 | Сообщение # 3
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Репутация: 1
Статус: Не в сети
А если строка определяется динамически по каким то внутренним факторам, например это ник одного из игроков, тогда как делать? Перехват типо register_forward не катит?
 
DaTaДата: Четверг, 18.09.2008, 20:42:17 | Сообщение # 4
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
можно создать плагин, а в нем native вызов

(amxmodx.inc):

Code
native register_native(const name[], const handler[], style=0);
 
dArkДата: Воскресенье, 21.09.2008, 18:58:21 | Сообщение # 5
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Репутация: 1
Статус: Не в сети
Подскажи ещё плз, что за функция GETPLAYERAUTHID(g_players[index].pEdict), её можно изменить, есть её исходники, или она закрыта?

//Ой, сорр, ступил :) смутило то, что разными буквами имена функций написаны))

Сообщение отредактировал dArk - Воскресенье, 21.09.2008, 19:10:57
 
dArkДата: Суббота, 27.09.2008, 13:46:16 | Сообщение # 6
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Репутация: 1
Статус: Не в сети
В общем, есть модуль, его цель, перехватить вызов функции get_user_authid и подсунуть вместо реального значения какое то моё, уникальный ключ например.

Вот код get_user_authid:

static cell AMX_NATIVE_CALL get_user_authid(AMX *amx, cell *params) /* 3 param */
{
int index = params[1];
const char* authid = 0;

if (index > 0 && index <= gpGlobals->maxClients)
authid = GETPLAYERAUTHID(g_players[index].pEdict);

return set_amxstring(amx, params[2], authid ? authid : "", params[3]);
}

На сколько я понимаю, нужно либо перехватить эту функцию, либо ещё более нижнюю GETPLAYERAUTHID, помогите с реализацией пожалуйсто, хотя бы с началом...

 
DaTaДата: Суббота, 27.09.2008, 17:39:52 | Сообщение # 7
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
dArk, такая тема уже существует, зачем создавать дубляж? Соединено.
 
dArkДата: Суббота, 27.09.2008, 22:58:19 | Сообщение # 8
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Репутация: 1
Статус: Не в сети
Неа, начальник, вопрос про модуль и про плагин нельзя соединять. Сравнил pawn с С++, так что разъединяй обратно, там разный подход очень.
 
DaTaДата: Суббота, 27.09.2008, 23:35:17 | Сообщение # 9
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (dArk)
Неа, начальник, вопрос про модуль и про плагин нельзя соединять. Сравнил pawn с С++, так что разъединяй обратно, там разный подход очень.

Если это чисто вопрос по С++, то в разделе Помощь по скриптингу этой теме нечего делать.

Можно спросить подобные вопросы в разделе Любые вопросы.

А вообще я бы тебе посоветовал (как и выше) изменить amxmodx.inc, написать плагин, который принимает на себя решение, что делать с этим вызовом.

Вот тебе пример(подглядел в http://forums.alliedmods.net/showthread.php?t=40287 ):

authid.sma

Code
#include <amxmodx>

public plugin_init()
{
     //...
}

public plugin_natives()
{
   register_native("__custom_get_user_authid", "native__custom_get_user_authid", 1)
}

public native__custom_get_user_authid(index, authid[] ,len)
{
   //заполняешь authid, как тебе надо
}

edit amxmodx.inc

Code

//...
/* Gets player authid. */
//native get_user_authid(index, authid[] ,len);
native __custom_get_user_authid(index, authid[] ,len);
stock get_user_authid(index, authid[] ,len)
   return __custom_get_user_authid(index, authid,len);
//...

перекомпилируешь все плагины с новым amxmodx.inc и у тебя они вызывают authid.sma::native__custom_get_user_authid вместо amxmodx.cpp::get_user_authid

 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026