cmb
Участник
- Сообщения
- 15
- Реакции
- 2
Через расширение на C++ должен быть вариантна 34 версии маловероятно, хотя я находил вроде бы как рабочий плагин, но не было времени затестить
Через расширение на C++ должен быть вариантна 34 версии маловероятно, хотя я находил вроде бы как рабочий плагин, но не было времени затестить
Другую функцию используйОшибка : Exception reported: Entity 53 (53) is not a CBaseEntity
1:public Action:ParticleDelete(Handle:hSomeTimer, any:particle) { AcceptEntityInput(particle,"kill"); return Plugin_Stop; }
помогите исправить ошибку
public void OnClientPutInServer(int iClient)
{
SDKHook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);
}
public void OnClientDisconnect_Post(int iClient)
{
SDKUnhook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);
}
public Action OnTakeDamage(int iVictim, int& iAttacker, int& inflictor, float & damage, float& damagetype, int& weapon, float damageForce[3], float damagePosition[3], int damagecustom)
{
}
Доброе утро всем, подскажите пожалуйста как решить проблему с компиляцией
error 100: function prototypes do not match
Код:public void OnClientPutInServer(int iClient) { SDKHook(iClient, SDKHook_OnTakeDamage, OnTakeDamage); } public void OnClientDisconnect_Post(int iClient) { SDKUnhook(iClient, SDKHook_OnTakeDamage, OnTakeDamage); } public Action OnTakeDamage(int iVictim, int& iAttacker, int& inflictor, float & damage, float& damagetype, int& weapon, float damageForce[3], float damagePosition[3], int damagecustom) { }
UPD Инклуд <sdkhooks> подключен
#include <sdkhooks>
public void OnClientPutInServer(int iClient)
{
SDKHook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);
}
public void OnClientDisconnect_Post(int iClient)
{
SDKUnhook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);
}
public Action OnTakeDamage(int iVictim, int &iAttacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom)
{
}
В этом куске кода нет никакой необходимости: анхук производится автоматически при отключении игрока.C-подобный:public void OnClientDisconnect_Post(int iClient) { SDKUnhook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);
Не факт что по истечению таймера энтитя с таким id является тем же партиклем. Нужно использовать связку EntIndexToEntRef - EntRefToEntIndexОшибка : Exception reported: Entity 53 (53) is not a CBaseEntity
1:public Action:ParticleDelete(Handle:hSomeTimer, any:particle) { AcceptEntityInput(particle,"kill"); return Plugin_Stop; }
помогите исправить ошибку
Спасибо большое помоглоC-подобный:#include <sdkhooks> public void OnClientPutInServer(int iClient) { SDKHook(iClient, SDKHook_OnTakeDamage, OnTakeDamage); } public void OnClientDisconnect_Post(int iClient) { SDKUnhook(iClient, SDKHook_OnTakeDamage, OnTakeDamage); } public Action OnTakeDamage(int iVictim, int &iAttacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) { }
#include <sdktools_functions>
#include <clientprefs>
#pragma newdecls required
#pragma semicolon 1
public Plugin myinfo =
{
name = "Team Info",
description = "Показ живых игроков, раунда, счета в командах",
author = "Str1k3r (rework by Ало, Ва-Вадик?)",
version = "1.1",
url = "vk.com/kopojlebckuu_7pelllhuk",
};
Handle g_hTimer,
g_hCookie;
int g_iTT,
g_iCT,
g_iRounds_TT,
g_iRounds_CT;
bool g_bHUD[MAXPLAYERS + 1];
public void OnPluginStart()
{
HookEvent("round_start", Event_RoundStart);
HookEvent("round_end", Event_RoundEnd);
g_hCookie = RegClientCookie("TeamInfo", "Team Info", CookieAccess_Private);
SetCookieMenuItem(TeamCookieHandler, 0, "TeamInfo");
}
public void OnClientCookiesCached(int iClient)
{
char sValue[4];
GetClientCookie(iClient, g_hCookie, sValue, sizeof(sValue));
if (sValue[0]) g_bHUD[iClient] = view_as<bool>(StringToInt(sValue));
else g_bHUD[iClient] = true;
}
public void TeamCookieHandler(int iClient, CookieMenuAction action, any info, char[] buffer, int maxlen)
{
switch (action)
{
case CookieMenuAction_DisplayOption: FormatEx(buffer, maxlen, "Показ живых игроков %s", (g_bHUD[iClient] ? "[+]":"[-]"));
case CookieMenuAction_SelectOption:
{
if (g_bHUD[iClient])
{
SetClientCookie(iClient, g_hCookie, "0");
g_bHUD[iClient] = false;
}
else
{
SetClientCookie(iClient, g_hCookie, "1");
g_bHUD[iClient] = true;
}
ShowCookieMenu(iClient);
}
}
}
public void OnClientDisconnect(int iClient)
{
g_bHUD[iClient] = false;
}
public Action Event_RoundStart(Event hEvent, const char[] name, bool dontBroadcast)
{
if (g_hTimer != null)
{
KillTimer(g_hTimer);
g_hTimer = null;
}
g_hTimer = CreateTimer(1.0, UpdateInfo, _, TIMER_REPEAT);
}
public Action Event_RoundEnd(Event hEvent, const char[] name, bool dontBroadcast)
{
g_iRounds_TT = GetTeamScore(2);
g_iRounds_CT = GetTeamScore(3);
if (g_hTimer != null)
{
KillTimer(g_hTimer);
g_hTimer = null;
}
}
public Action UpdateInfo(Handle hTimer)
{
g_iTT = g_iCT = 0;
for (int i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && IsPlayerAlive(i))
{
if (GetClientTeam(i) == 2) g_iTT++;
else if (GetClientTeam(i) == 3) g_iCT++;
if (g_bHUD[i]) UpdateHUD(i);
}
}
return Plugin_Continue;
}
void UpdateHUD(int iClient)
{
if (g_bHUD[iClient]) PrintHintText(iClient, " [Раунд %i] \n [%i] [CT: %d] [TT: %d] [%i]", 1 + (g_iRounds_TT + g_iRounds_CT), g_iRounds_CT, g_iCT, g_iTT, g_iRounds_TT);
}
Тебе нужно 2 раза цикл обходить, первый раз считаешь общее количество за кт и т, а во 2 показываешь худ для каждого игрока в отдельностиВсем доброе утро, подскажите пожалуйста как решить проблему:
Если игрок ЗА КТ, выключает показ текста, то при общем показе игроков он не учитывается. Как я понял проблема именно в функции PrintHintText
Если сделать PrintHintTextToAll то все работает корректно
Сам плагин:#include <sdktools_functions> #include <clientprefs> #pragma newdecls required #pragma semicolon 1 public Plugin myinfo = { name = "Team Info", description = "Показ живых игроков, раунда, счета в командах", author = "Str1k3r (rework by Ало, Ва-Вадик?)", version = "1.1", url = "vk.com/kopojlebckuu_7pelllhuk", }; Handle g_hTimer, g_hCookie; int g_iTT, g_iCT, g_iRounds_TT, g_iRounds_CT; bool g_bHUD[MAXPLAYERS + 1]; public void OnPluginStart() { HookEvent("round_start", Event_RoundStart); HookEvent("round_end", Event_RoundEnd); g_hCookie = RegClientCookie("TeamInfo", "Team Info", CookieAccess_Private); SetCookieMenuItem(TeamCookieHandler, 0, "TeamInfo"); } public void OnClientCookiesCached(int iClient) { char sValue[4]; GetClientCookie(iClient, g_hCookie, sValue, sizeof(sValue)); if (sValue[0]) g_bHUD[iClient] = view_as<bool>(StringToInt(sValue)); else g_bHUD[iClient] = true; } public void TeamCookieHandler(int iClient, CookieMenuAction action, any info, char[] buffer, int maxlen) { switch (action) { case CookieMenuAction_DisplayOption: FormatEx(buffer, maxlen, "Показ живых игроков %s", (g_bHUD[iClient] ? "[+]":"[-]")); case CookieMenuAction_SelectOption: { if (g_bHUD[iClient]) { SetClientCookie(iClient, g_hCookie, "0"); g_bHUD[iClient] = false; } else { SetClientCookie(iClient, g_hCookie, "1"); g_bHUD[iClient] = true; } ShowCookieMenu(iClient); } } } public void OnClientDisconnect(int iClient) { g_bHUD[iClient] = false; } public Action Event_RoundStart(Event hEvent, const char[] name, bool dontBroadcast) { if (g_hTimer != null) { KillTimer(g_hTimer); g_hTimer = null; } g_hTimer = CreateTimer(1.0, UpdateInfo, _, TIMER_REPEAT); } public Action Event_RoundEnd(Event hEvent, const char[] name, bool dontBroadcast) { g_iRounds_TT = GetTeamScore(2); g_iRounds_CT = GetTeamScore(3); if (g_hTimer != null) { KillTimer(g_hTimer); g_hTimer = null; } } public Action UpdateInfo(Handle hTimer) { g_iTT = g_iCT = 0; for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && IsPlayerAlive(i)) { if (GetClientTeam(i) == 2) g_iTT++; else if (GetClientTeam(i) == 3) g_iCT++; if (g_bHUD[i]) UpdateHUD(i); } } return Plugin_Continue; } void UpdateHUD(int iClient) { if (g_bHUD[iClient]) PrintHintText(iClient, " [Раунд %i] \n [%i] [CT: %d] [TT: %d] [%i]", 1 + (g_iRounds_TT + g_iRounds_CT), g_iRounds_CT, g_iCT, g_iTT, g_iRounds_TT); }
#pragma semicolon 1
#pragma newdecls required
#include <sdktools_functions>
#include <clientprefs>
Handle
g_hTimer,
g_hCookie;
int
g_iTT,
g_iCT,
g_iRounds_TT,
g_iRounds_CT;
bool
g_bHUD[MAXPLAYERS+1];
public Plugin myinfo =
{
name = "Team Info",
description = "Показ живых игроков, раунда, счета в командах",
author = "Str1k3r (rework by Ало, Ва-Вадик?)",
version = "1.1_fix",
url = "vk.com/kopojlebckuu_7pelllhuk",
}
public void OnPluginStart()
{
HookEvent("round_freeze_end", Event_Round, EventHookMode_PostNoCopy);
HookEvent("round_end", Event_Round, EventHookMode_PostNoCopy);
g_hCookie = RegClientCookie("TeamInfo", "Team Info", CookieAccess_Private);
SetCookieMenuItem(TeamCookieHandler, 0, "TeamInfo");
}
public void OnClientCookiesCached(int iClient)
{
if(IsFakeClient(iClient)) return;
char sValue[4];
GetClientCookie(iClient, g_hCookie, sValue, sizeof(sValue));
g_bHUD[iClient] = sValue[0] != '0';
}
public void TeamCookieHandler(int iClient, CookieMenuAction action, any info, char[] buffer, int maxlen)
{
switch(action)
{
case CookieMenuAction_DisplayOption:
FormatEx(buffer, maxlen, "Показ живых игроков %s", (g_bHUD[iClient] ? "[+]":"[-]"));
case CookieMenuAction_SelectOption:
{
if ((g_bHUD[iClient] ^= true))
SetClientCookie(iClient, g_hCookie, "1");
else SetClientCookie(iClient, g_hCookie, "0");
ShowCookieMenu(iClient);
}
}
}
public void OnClientDisconnect(int iClient)
{
g_bHUD[iClient] = false;
}
public void Event_Round(Event hEvent, const char[] name, bool dontBroadcast)
{
if(g_hTimer) CloseHandle(g_hTimer);
if(name[6] == 'e')
{
g_hTimer = null;
g_iRounds_TT = GetTeamScore(2);
g_iRounds_CT = GetTeamScore(3);
}
else g_hTimer = CreateTimer(1.0, UpdateInfo, _, TIMER_REPEAT);
}
public Action UpdateInfo(Handle hTimer)
{
static int i, t, clients[MAXPLAYERS], num;
for(i = 1, num = g_iTT = g_iCT = 0; i <= MaxClients; i++) if(IsClientInGame(i))
{
if((t = GetClientTeam(i)) > 1 && IsPlayerAlive(i))
{
if(t == 2) g_iTT++;
else if(t == 3) g_iCT++;
}
if(g_bHUD[i]) clients[num++] = i;
}
while(--num >= 0) PrintHintText(clients[num], " [Раунд %i] \n [%i] [CT: %d] [TT: %d] [%i]", 1 + (g_iRounds_TT + g_iRounds_CT), g_iRounds_CT, g_iCT, g_iTT, g_iRounds_TT);
return Plugin_Continue;
}
Пробовал, проблема оставаласьТебе нужно 2 раза цикл обходить, первый раз считаешь общее количество за кт и т, а во 2 показываешь худ для каждого игрока в отдельности
Огромная благодарнасть, все работает@7pElllHuK, ты выводи в хинт инфу после подсчёта, а не во время его.C-подобный:#pragma semicolon 1 #pragma newdecls required #include <sdktools_functions> #include <clientprefs> Handle g_hTimer, g_hCookie; int g_iTT, g_iCT, g_iRounds_TT, g_iRounds_CT; bool g_bHUD[MAXPLAYERS+1]; public Plugin myinfo = { name = "Team Info", description = "Показ живых игроков, раунда, счета в командах", author = "Str1k3r (rework by Ало, Ва-Вадик?)", version = "1.1_fix", url = "vk.com/kopojlebckuu_7pelllhuk", } public void OnPluginStart() { HookEvent("round_freeze_end", Event_Round, EventHookMode_PostNoCopy); HookEvent("round_end", Event_Round, EventHookMode_PostNoCopy); g_hCookie = RegClientCookie("TeamInfo", "Team Info", CookieAccess_Private); SetCookieMenuItem(TeamCookieHandler, 0, "TeamInfo"); } public void OnClientCookiesCached(int iClient) { if(IsFakeClient(iClient)) return; char sValue[4]; GetClientCookie(iClient, g_hCookie, sValue, sizeof(sValue)); g_bHUD[iClient] = sValue[0] != '0'; } public void TeamCookieHandler(int iClient, CookieMenuAction action, any info, char[] buffer, int maxlen) { switch(action) { case CookieMenuAction_DisplayOption: FormatEx(buffer, maxlen, "Показ живых игроков %s", (g_bHUD[iClient] ? "[+]":"[-]")); case CookieMenuAction_SelectOption: { if ((g_bHUD[iClient] ^= true)) SetClientCookie(iClient, g_hCookie, "1"); else SetClientCookie(iClient, g_hCookie, "0"); ShowCookieMenu(iClient); } } } public void OnClientDisconnect(int iClient) { g_bHUD[iClient] = false; } public void Event_Round(Event hEvent, const char[] name, bool dontBroadcast) { if(g_hTimer) CloseHandle(g_hTimer); if(name[6] == 'e') { g_hTimer = null; g_iRounds_TT = GetTeamScore(2); g_iRounds_CT = GetTeamScore(3); } else g_hTimer = CreateTimer(1.0, UpdateInfo, _, TIMER_REPEAT); } public Action UpdateInfo(Handle hTimer) { static int i, t, clients[MAXPLAYERS], num; for(i = 1, num = g_iTT = g_iCT = 0; i <= MaxClients; i++) if(IsClientInGame(i)) { if((t = GetClientTeam(i)) > 1 && IsPlayerAlive(i)) { if(t == 2) g_iTT++; else if(t == 3) g_iCT++; } if(g_bHUD[i]) clients[num++] = i; } while(--num >= 0) PrintHintText(clients[num], " [Раунд %i] \n [%i] [CT: %d] [TT: %d] [%i]", 1 + (g_iRounds_TT + g_iRounds_CT), g_iRounds_CT, g_iCT, g_iTT, g_iRounds_TT); return Plugin_Continue; }
public Action Player_Connect(Event hEvent, char[] sName, bool bDB)
{
if (!bDB) SetEventBroadcast(hEvent, true);
char sConnect[255], sDisconnect[255], sSteamID[24], sNick[48], sIP[16];
GetEventString(hEvent, "networkid", sSteamID, sizeof(sSteamID));
GetEventString(hEvent, "name", sNick, sizeof(sNick));
if (strcmp(sName, "player_connect"))
{
int iClient = GetClientOfUserId(GetEventInt(hEvent,"userid"))
if (iClient < 1) return;
GetClientIP(iClient, sIP, sizeof(sIP));
Format(sDisconnect,sizeof(sDisconnect),"{default}[{green}» {red}ZK {green}«{default}] {red}%s {default}• {green}вышел {default}• [{green}IP {default}- {red}%s {default}| {green}SteamID {default}- {red}%s{default}]", sNick, sIP, sSteamID);
Format(sConnect, sizeof(sConnect),"{default}[{green}» {red}ZK {green}«{default}] {red}%s {default}• {green}вышел с сервера{default}•", sNick);
}
else
{
GetEventString(hEvent, "address", sIP, sizeof(sIP));
SplitString(sIP,":",sIP,sizeof(sIP));
Format(sDisconnect, sizeof(sDisconnect), "{default}[{green}» {red}ZK {green}«{default}] {red}%s {default}• {green}зашел {default}• [{green}IP {default}- {red}%s {default}| {green}SteamID {default}- {red}%s{default}]", sNick, sIP, sSteamID);
Format(sConnect,sizeof(sConnect), "{default}[{green}» {red}ZK {green}«{default}] {red}%s {default}• {green}заходит на сервер{default}•", sNick);
}
for (int i = 1; i <= MaxClients; i++)
{
if (IsClientConnected(i) && IsClientInGame(i))
{
if (GetUserFlagBits(i)) CPrintToChat(i, "%s", CheckAdminFlagsByString(i, "b") ? sConnect : sDisconnect);
else CPrintToChat(i, "%s", sConnect);
}
}
}
/**
* Auth string types.
*
* Note that for the Steam2 and Steam3 types, the following ids are
* also valid values:
* "STEAM_ID_PENDING" - Authentication is pending. // "Ожидается аутентификация."
* "STEAM_ID_LAN" - Authentication is disabled because of being on a LAN server.
* "BOT" - The client is a bot.
*/
enum AuthIdType
{
AuthId_Engine = 0, /**< The game-specific auth string as returned from the engine */
// The following are only available on games that support Steam authentication.
AuthId_Steam2, /**< Steam2 rendered format, ex "STEAM_1:1:4153990" */
AuthId_Steam3, /**< Steam3 rendered format, ex "[U:1:8307981]" */
AuthId_SteamID64 /**< A SteamID64 (uint64) as a String, ex "76561197968573709" */
};
И как это исправить?@7pElllHuK, видимо поэтому:clients.inc:/** * Auth string types. * * Note that for the Steam2 and Steam3 types, the following ids are * also valid values: * "STEAM_ID_PENDING" - Authentication is pending. // "Ожидается аутентификация." * "STEAM_ID_LAN" - Authentication is disabled because of being on a LAN server. * "BOT" - The client is a bot. */ enum AuthIdType { AuthId_Engine = 0, /**< The game-specific auth string as returned from the engine */ // The following are only available on games that support Steam authentication. AuthId_Steam2, /**< Steam2 rendered format, ex "STEAM_1:1:4153990" */ AuthId_Steam3, /**< Steam3 rendered format, ex "[U:1:8307981]" */ AuthId_SteamID64 /**< A SteamID64 (uint64) as a String, ex "76561197968573709" */ };
Дергаешь позже?И как это исправить?
Пробовал брать Steam игрока через GetClientAuthId, но выводило пустую строку вместо стима
UPD Разобрался, спасибо за помощь
перенес криво работающую половину кода в OnClientPostAdminCheck и все стало работать корректноДергаешь позже?
Он как раз берёт инфу, когда все данные в наличии.перенес криво работающую половину кода в OnClientPostAdminCheck и все стало работать корректно
Как сделать чтобы при входе клиента он моментально скипая мотд и прочие окна спавнился как террорист и не мог никаким образом сменить команду и убить себя через jointeam, joinclass?
#include <cstrike>
#define dSetTeam 2 // За какую команду перекидывать игрока
// 1 - наблюдатели
// 2 - террористы
// 3 - контр-террористы
public void OnPluginStart(){
RegConsoleCmd("kill", cmd_block);
RegConsoleCmd("spectate", cmd_block);
RegConsoleCmd("joinclass", cmd_block);
RegConsoleCmd("jointeam", cmd_block);
}
public Action cmd_block(int client, int args){
if(IsValidClient(client)){
CS_SwitchTeam(client, dSetTeam);
if(IsPlayerAlive(client))
return Plugin_Handled;
}
return Plugin_Continue;
}
public void OnClientPutInServer(int client){
if(IsValidClient(client))
ChangeClientTeam(client, dSetTeam);
}
stock bool IsValidClient(int client){ return client > 0 && client <= MaxClients && IsClientInGame(client) && IsClientConnected(client); }