Скрин приложите. Не совсем понятно, какие иконки могут быть в таблице в CSS.
Возможности ходить по серверам не у всех есть, да.
да да будто общаются сделано интересно такТам ещё и спам в чат идет рандомный, типа "от игроков", по факту просто рандом, таких в таблице нет
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#pragma newdecls required
#define PLAYER_INFO_LEN 132
enum
{
PlayerInfo_Name = 0, // char[32]
PlayerInfo_UserID = 32, // int
PlayerInfo_SteamID = 36, // char[33]
PlayerInfo_AccountID = 72, // int
PlayerInfo_FriendsName = 76, // char[32]
PlayerInfo_IsFakePlayer = 108, // bool
PlayerInfo_IsHLTV = 109, // bool
PlayerInfo_IsReplay = 110, // bool
PlayerInfo_CustomFile1 = 112, // int
PlayerInfo_CustomFile2 = 116, // int
PlayerInfo_CustomFile3 = 120, // int
PlayerInfo_CustomFile4 = 124, // int
PlayerInfo_FilesDownloaded = 128 // char
};
int g_accountIDs[MAXPLAYERS+1] =
{
0,
25341944, // [U:1:25341944]
33063657, // [U:1:33063657]
86114025, // ...
33139149,
10019795,
64136527,
10014490,
112064860,
3312,
3,
136555,
49797024,
53988387,
168894,
29462734,
20599720
};
public void OnClientSettingsChanged(int client)
{
if (!IsFakeClient(client) || !g_accountIDs[client])
return;
int tableIdx = FindStringTable("userinfo");
if (tableIdx == INVALID_STRING_TABLE)
return;
char userInfo[PLAYER_INFO_LEN];
if (!GetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN))
return;
int accountId = g_accountIDs[client];
userInfo[PlayerInfo_AccountID] = accountId;
userInfo[PlayerInfo_AccountID + 1] = accountId >> 8;
userInfo[PlayerInfo_AccountID + 2] = accountId >> 16;
userInfo[PlayerInfo_AccountID + 3] = accountId >> 24;
bool lockTable = LockStringTables(false);
SetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN);
LockStringTables(lockTable);
}
НУ ВОТ У тебя получились иконки, только плагин не могу скомпелирыватьКлиент определяет аватарки игроков по их steamid, поэтому произвольно их устанавливать не получится.
Вот примерно как это должно работать (для работы нужен SM не ниже версии 1.11).
C-подобный:#pragma semicolon 1 #include <sourcemod> #include <sdktools> #pragma newdecls required #define PLAYER_INFO_LEN 132 enum { PlayerInfo_Name = 0, // char[32] PlayerInfo_UserID = 32, // int PlayerInfo_SteamID = 36, // char[33] PlayerInfo_AccountID = 72, // int PlayerInfo_FriendsName = 76, // char[32] PlayerInfo_IsFakePlayer = 108, // bool PlayerInfo_IsHLTV = 109, // bool PlayerInfo_IsReplay = 110, // bool PlayerInfo_CustomFile1 = 112, // int PlayerInfo_CustomFile2 = 116, // int PlayerInfo_CustomFile3 = 120, // int PlayerInfo_CustomFile4 = 124, // int PlayerInfo_FilesDownloaded = 128 // bool }; int g_accountIDs[MAXPLAYERS+1] = { 0, 25341944, // [U:1:25341944] 33063657, // [U:1:33063657] 86114025, // ... 33139149, 10019795, 64136527, 10014490, 112064860, 3312, 3, 136555, 49797024, 53988387, 168894, 29462734, 20599720 }; public void OnClientSettingsChanged(int client) { if (!IsFakeClient(client) || !g_accountIDs[client]) return; int tableIdx = FindStringTable("userinfo"); if (tableIdx == INVALID_STRING_TABLE) return; char userInfo[PLAYER_INFO_LEN]; if (!GetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN)) return; int accountId = g_accountIDs[client]; userInfo[PlayerInfo_AccountID] = accountId; userInfo[PlayerInfo_AccountID + 1] = accountId >> 8; userInfo[PlayerInfo_AccountID + 2] = accountId >> 16; userInfo[PlayerInfo_AccountID + 3] = accountId >> 24; bool lockTable = LockStringTables(false); SetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN); LockStringTables(lockTable); }
A можно попросить код под sm 1.9?Клиент определяет аватарки игроков по их steamid, поэтому произвольно их устанавливать не получится.
Вот примерно как это должно работать (для работы нужен SM не ниже версии 1.11).
C-подобный:#pragma semicolon 1 #include <sourcemod> #include <sdktools> #pragma newdecls required #define PLAYER_INFO_LEN 132 enum { PlayerInfo_Name = 0, // char[32] PlayerInfo_UserID = 32, // int PlayerInfo_SteamID = 36, // char[33] PlayerInfo_AccountID = 72, // int PlayerInfo_FriendsName = 76, // char[32] PlayerInfo_IsFakePlayer = 108, // bool PlayerInfo_IsHLTV = 109, // bool PlayerInfo_IsReplay = 110, // bool PlayerInfo_CustomFile1 = 112, // int PlayerInfo_CustomFile2 = 116, // int PlayerInfo_CustomFile3 = 120, // int PlayerInfo_CustomFile4 = 124, // int PlayerInfo_FilesDownloaded = 128 // char }; int g_accountIDs[MAXPLAYERS+1] = { 0, 25341944, // [U:1:25341944] 33063657, // [U:1:33063657] 86114025, // ... 33139149, 10019795, 64136527, 10014490, 112064860, 3312, 3, 136555, 49797024, 53988387, 168894, 29462734, 20599720 }; public void OnClientSettingsChanged(int client) { if (!IsFakeClient(client) || !g_accountIDs[client]) return; int tableIdx = FindStringTable("userinfo"); if (tableIdx == INVALID_STRING_TABLE) return; char userInfo[PLAYER_INFO_LEN]; if (!GetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN)) return; int accountId = g_accountIDs[client]; userInfo[PlayerInfo_AccountID] = accountId; userInfo[PlayerInfo_AccountID + 1] = accountId >> 8; userInfo[PlayerInfo_AccountID + 2] = accountId >> 16; userInfo[PlayerInfo_AccountID + 3] = accountId >> 24; bool lockTable = LockStringTables(false); SetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN); LockStringTables(lockTable); }
Именно по этой причине я указал необходимость 1.11@vanz666, завелось и на см 1.10,но есть небольшой баг,он исправим?скрин приложу,иногда не видно ник бота в верхнем правом углу.
Или тут без вариантов нужен см 1.11?
Посмотреть вложение 64983
Версия для csgoЧто нужно поменять в коде чтоб работало в cs go?
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#pragma newdecls required
#define PLAYER_INFO_LEN 344
enum
{
PlayerInfo_Version = 0, // int64
PlayerInfo_XUID = 8, // int64
PlayerInfo_Name = 16, // char[128]
PlayerInfo_UserID = 144, // int
PlayerInfo_SteamID = 148, // char[33]
PlayerInfo_AccountID = 184, // int
PlayerInfo_FriendsName = 188, // char[128]
PlayerInfo_IsFakePlayer = 316, // bool
PlayerInfo_IsHLTV = 317, // bool
PlayerInfo_CustomFile1 = 320, // int
PlayerInfo_CustomFile2 = 324, // int
PlayerInfo_CustomFile3 = 328, // int
PlayerInfo_CustomFile4 = 332, // int
PlayerInfo_FilesDownloaded = 336 // char
};
int g_accountIDs[MAXPLAYERS+1] =
{
0,
25341944, // [U:1:25341944]
33063657, // [U:1:33063657]
86114025, // ...
33139149,
10019795,
64136527,
10014490,
112064860,
3312,
3,
136555,
49797024,
53988387,
168894,
29462734,
20599720
};
public void OnClientSettingsChanged(int client)
{
if (!IsFakeClient(client) || !g_accountIDs[client])
return;
int tableIdx = FindStringTable("userinfo");
if (tableIdx == INVALID_STRING_TABLE)
return;
char userInfo[PLAYER_INFO_LEN];
if (!GetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN))
return;
int accountId = g_accountIDs[client];
int steamIdHigh = 16781313;
userInfo[PlayerInfo_XUID] = steamIdHigh;
userInfo[PlayerInfo_XUID + 1] = steamIdHigh >> 8;
userInfo[PlayerInfo_XUID + 2] = steamIdHigh >> 16;
userInfo[PlayerInfo_XUID + 3] = steamIdHigh >> 24;
userInfo[PlayerInfo_XUID + 7] = accountId;
userInfo[PlayerInfo_XUID + 6] = accountId >> 8;
userInfo[PlayerInfo_XUID + 5] = accountId >> 16;
userInfo[PlayerInfo_XUID + 4] = accountId >> 24;
Format(userInfo[PlayerInfo_SteamID], 32, "STEAM_1:%d:%d", accountId & 1, accountId >>> 1);
userInfo[PlayerInfo_AccountID] = accountId;
userInfo[PlayerInfo_AccountID + 1] = accountId >> 8;
userInfo[PlayerInfo_AccountID + 2] = accountId >> 16;
userInfo[PlayerInfo_AccountID + 3] = accountId >> 24;
userInfo[PlayerInfo_IsFakePlayer] = 0;
bool lockTable = LockStringTables(false);
SetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN);
LockStringTables(lockTable);
}
Именно по этой причине я указал необходимость 1.11
Версия для csgo
C-подобный:#pragma semicolon 1 #include <sourcemod> #include <sdktools> #pragma newdecls required #define PLAYER_INFO_LEN 344 enum { PlayerInfo_Version = 0, // int64 PlayerInfo_XUID = 8, // int64 PlayerInfo_Name = 16, // char[128] PlayerInfo_UserID = 144, // int PlayerInfo_SteamID = 148, // char[33] PlayerInfo_AccountID = 184, // int PlayerInfo_FriendsName = 188, // char[128] PlayerInfo_IsFakePlayer = 316, // bool PlayerInfo_IsHLTV = 317, // bool PlayerInfo_CustomFile1 = 320, // int PlayerInfo_CustomFile2 = 324, // int PlayerInfo_CustomFile3 = 328, // int PlayerInfo_CustomFile4 = 332, // int PlayerInfo_FilesDownloaded = 336 // char }; int g_accountIDs[MAXPLAYERS+1] = { 0, 25341944, // [U:1:25341944] 33063657, // [U:1:33063657] 86114025, // ... 33139149, 10019795, 64136527, 10014490, 112064860, 3312, 3, 136555, 49797024, 53988387, 168894, 29462734, 20599720 }; public void OnClientSettingsChanged(int client) { if (!IsFakeClient(client) || !g_accountIDs[client]) return; int tableIdx = FindStringTable("userinfo"); if (tableIdx == INVALID_STRING_TABLE) return; char userInfo[PLAYER_INFO_LEN]; if (!GetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN)) return; int accountId = g_accountIDs[client]; int steamIdHigh = 16781313; userInfo[PlayerInfo_XUID] = steamIdHigh; userInfo[PlayerInfo_XUID + 1] = steamIdHigh >> 8; userInfo[PlayerInfo_XUID + 2] = steamIdHigh >> 16; userInfo[PlayerInfo_XUID + 3] = steamIdHigh >> 24; userInfo[PlayerInfo_XUID + 7] = accountId; userInfo[PlayerInfo_XUID + 6] = accountId >> 8; userInfo[PlayerInfo_XUID + 5] = accountId >> 16; userInfo[PlayerInfo_XUID + 4] = accountId >> 24; Format(userInfo[PlayerInfo_SteamID], 32, "STEAM_1:%d:%d", accountId & 1, accountId >>> 1); userInfo[PlayerInfo_AccountID] = accountId; userInfo[PlayerInfo_AccountID + 1] = accountId >> 8; userInfo[PlayerInfo_AccountID + 2] = accountId >> 16; userInfo[PlayerInfo_AccountID + 3] = accountId >> 24; userInfo[PlayerInfo_IsFakePlayer] = 0; bool lockTable = LockStringTables(false); SetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN); LockStringTables(lockTable); }
Версия для csgo
C-подобный:#pragma semicolon 1 #include <sourcemod> #include <sdktools> #pragma newdecls required #define PLAYER_INFO_LEN 344 enum { PlayerInfo_Version = 0, // int64 PlayerInfo_XUID = 8, // int64 PlayerInfo_Name = 16, // char[128] PlayerInfo_UserID = 144, // int PlayerInfo_SteamID = 148, // char[33] PlayerInfo_AccountID = 184, // int PlayerInfo_FriendsName = 188, // char[128] PlayerInfo_IsFakePlayer = 316, // bool PlayerInfo_IsHLTV = 317, // bool PlayerInfo_CustomFile1 = 320, // int PlayerInfo_CustomFile2 = 324, // int PlayerInfo_CustomFile3 = 328, // int PlayerInfo_CustomFile4 = 332, // int PlayerInfo_FilesDownloaded = 336 // char }; int g_accountIDs[MAXPLAYERS+1] = { 0, 25341944, // [U:1:25341944] 33063657, // [U:1:33063657] 86114025, // ... 33139149, 10019795, 64136527, 10014490, 112064860, 3312, 3, 136555, 49797024, 53988387, 168894, 29462734, 20599720 }; public void OnClientSettingsChanged(int client) { if (!IsFakeClient(client) || !g_accountIDs[client]) return; int tableIdx = FindStringTable("userinfo"); if (tableIdx == INVALID_STRING_TABLE) return; char userInfo[PLAYER_INFO_LEN]; if (!GetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN)) return; int accountId = g_accountIDs[client]; int steamIdHigh = 16781313; userInfo[PlayerInfo_XUID] = steamIdHigh; userInfo[PlayerInfo_XUID + 1] = steamIdHigh >> 8; userInfo[PlayerInfo_XUID + 2] = steamIdHigh >> 16; userInfo[PlayerInfo_XUID + 3] = steamIdHigh >> 24; userInfo[PlayerInfo_XUID + 7] = accountId; userInfo[PlayerInfo_XUID + 6] = accountId >> 8; userInfo[PlayerInfo_XUID + 5] = accountId >> 16; userInfo[PlayerInfo_XUID + 4] = accountId >> 24; Format(userInfo[PlayerInfo_SteamID], 32, "STEAM_1:%d:%d", accountId & 1, accountId >>> 1); userInfo[PlayerInfo_AccountID] = accountId; userInfo[PlayerInfo_AccountID + 1] = accountId >> 8; userInfo[PlayerInfo_AccountID + 2] = accountId >> 16; userInfo[PlayerInfo_AccountID + 3] = accountId >> 24; userInfo[PlayerInfo_IsFakePlayer] = 0; bool lockTable = LockStringTables(false); SetStringTableData(tableIdx, client - 1, userInfo, PLAYER_INFO_LEN); LockStringTables(lockTable); }