Можно, но я как я сказал бомба уже дропнута, т.е уже не в руках игрока, тут нечего уже блокировать, надо это делать раньше.
Да я пробовал убирал модель,там была другая ошибка)@-=|УЧЕНИК|=-, разве что вылавливать любой браш на карте и использовать его модель. =)
Сообщения автоматически склеены:
ещё можно попробовать просто не назначать модель
Сообщения автоматически склеены:
Это вообще просто предупреждение и ничего больше:
@xstage, приведи, пожалуйста, пример события, которое можно заблокировать таким образом. Я пробовал уже player_death, player_falldamage - события не блокируются
#include <sdkhooks>
bool bAuthorized[MAXPLAYERS+1];
char cSteamIDs[][32] = {
"STEAM_0:0:123456",
"STEAM_0:1:111111"
};
public void OnClientPutInServer(int client)
{
bAuthorized[client] = GetAuthentication(client);
SDKHook(client, SDKHook_OnTakeDamageAlive, OnTakeDamageAlive);
}
public Action OnTakeDamageAlive(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom)
{
if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker))
{
damage *= 2.0;
return Plugin_Changed;
}
return Plugin_Continue;
}
bool GetAuthentication(int client)
{
char cAuth[32];
GetClientAuthId(client, AuthId_Engine, cAuth, sizeof(cAuth));
for (int i = 0; i < sizeof(cSteamIDs); ++i)
{
if (strcmp(cAuth, cSteamIDs[i], false) == 0)
return true;
}
return false;
}
Привет всем!
Кому если не сложно,сделайте пожалуйста,чтоб дамаг был только от ножа.
Потому что щас бывает такое,что можно с гранаты убить двоих сразу,или же с мухи убить одним выстрелом.
Заранее благодарю.
Сам код:#include <sdkhooks> bool bAuthorized[MAXPLAYERS+1]; char cSteamIDs[][32] = { "STEAM_0:0:123456", "STEAM_0:1:111111" }; public void OnClientPutInServer(int client) { bAuthorized[client] = GetAuthentication(client); SDKHook(client, SDKHook_OnTakeDamageAlive, OnTakeDamageAlive); } public Action OnTakeDamageAlive(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) { if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker)) { damage *= 2.0; return Plugin_Changed; } return Plugin_Continue; } bool GetAuthentication(int client) { char cAuth[32]; GetClientAuthId(client, AuthId_Engine, cAuth, sizeof(cAuth)); for (int i = 0; i < sizeof(cSteamIDs); ++i) { if (strcmp(cAuth, cSteamIDs[i], false) == 0) return true; } return false; }
#include <sdkhooks>
bool bAuthorized[MAXPLAYERS+1];
char cSteamIDs[][32] = {
"STEAM_0:0:123456",
"STEAM_0:1:111111"
};
public void OnClientPutInServer(int client)
{
bAuthorized[client] = GetAuthentication(client);
SDKHook(client, SDKHook_OnTakeDamageAlive, OnTakeDamageAlive);
}
public Action OnTakeDamageAlive(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom)
{
if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker))
{
char h[256];
GetClientWeapon(attacker, h, sizeof(h));
if(strcmp(h, "knife", true) || strcmp(h, "bayonet", true))
{
damage *= 2.0;
return Plugin_Changed;
}
if(strcmp(h, "ssg08", true) || strcmp(h, "hegrenade", true))
{
damage /= 2.0;
return Plugin_Changed;
}
}
return Plugin_Continue;
}
bool GetAuthentication(int client)
{
char cAuth[32];
GetClientAuthId(client, AuthId_Engine, cAuth, sizeof(cAuth));
for (int i = 0; i < sizeof(cSteamIDs); ++i)
{
if (strcmp(cAuth, cSteamIDs[i], false) == 0)
return true;
}
return false;
}
Работать работает)C++:#include <sdkhooks> bool bAuthorized[MAXPLAYERS+1]; char cSteamIDs[][32] = { "STEAM_0:0:123456", "STEAM_0:1:111111" }; public void OnClientPutInServer(int client) { bAuthorized[client] = GetAuthentication(client); SDKHook(client, SDKHook_OnTakeDamageAlive, OnTakeDamageAlive); } public Action OnTakeDamageAlive(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) { if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker)) { char weapon[256]; GetClientWeapon(attacker, weapon, sizeof(weapon)); if(strcmp(weapon, "weapon_knife", true) || strcmp(weapon, "weapon_bayonet", true)) { damage *= 2.0; return Plugin_Changed; } } return Plugin_Continue; } bool GetAuthentication(int client) { char cAuth[32]; GetClientAuthId(client, AuthId_Engine, cAuth, sizeof(cAuth)); for (int i = 0; i < sizeof(cSteamIDs); ++i) { if (strcmp(cAuth, cSteamIDs[i], false) == 0) return true; } return false; }
Исправил, проверьРаботать работает)
Нуу так же как и было,что можно с мухи убить с одного выстрела,либо гранатой с первого раза)
Ну и вот ошибка еще при компиляции,ну думаю она не на что не влияет.
Damage_knife.sp
C:\Users\Desktop\Damage_knife.sp(20) : warning 219: local variable "weapon" shadows a variable at a preceding level
Исправил, проверь
Тоже самое)Исправил, проверь
перед strcmp() восклицательный знак забыли поставить (возвращается 0 при совпадении строк)Нуу так же как и было,что можно с мухи убить с одного выстрела,либо гранатой с первого раза)
Так?@Palonez, твоя версия будет считать, что игроку нанесён урон ножом, если игрока ранила граната, но атакующий держал в момент нанесения урона нож в руке.
Как точно определить граната ли использовалась для нанесения урона я уже и не помню. Возможно нужно проверять значение damagetype (weapon в CS:S с SM1.9 никогда не возвращал оружие, не помню отличается ли inflictor при использовании гранат).
Сообщения автоматически склеены:
перед strcmp() восклицательный знак забыли поставить (возвращается 0 при совпадении строк)
public Action OnTakeDamageAlive(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom)
{
if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker))
{
if(damagetype == DMG_SLASH)
{
damage *= 2.0;
return Plugin_Changed;
}
}
return Plugin_Continue;
}
Если я делаю так,то все работает.И дамаг с другова оружия как по стандарту идет.Так?
C++:public Action OnTakeDamageAlive(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) { if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker)) { if(damagetype == DMG_SLASH) { damage *= 2.0; return Plugin_Changed; } } return Plugin_Continue; }
if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker))
{
char h[256];
GetClientWeapon(attacker, h, sizeof(h));
if(!(strcmp(h, "weapon_knife", true)))
{
damage *= 2.0;
return Plugin_Changed;
}
}
return Plugin_Continue;
weapon_knife это classnameЕсли я делаю так,то все работает.И дамаг с другова оружия как по стандарту идет.
Правильно или нет сделал не знаю.
C-подобный:if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients && bAuthorized[attacker] && IsClientInGame(victim) && IsClientInGame(attacker)) { char h[256]; GetClientWeapon(attacker, h, sizeof(h)); if(!(strcmp(h, "weapon_knife", true))) { damage *= 2.0; return Plugin_Changed; } } return Plugin_Continue;
проверка victim > 0 && victim <= MaxClients не нужна: жертва всегда имеет правильный индекс
Инклуд потерял по пути scripting/includecannot read from file: "thc_rpg"
id (int autoincrement), auth (steam_1 или BOT), connect_time (время подключение игрока в timestamp, чтобы можно было отсчитать сколько он провел на серваке)А в чём глубокий смысл? Ведь после выхода игрока информация записанная будет удалена1. Players Online Mysql [CSGO]
2. Простенький плагин который будет записывать данные о подключении игрока в бд и удалять запись при отключении.
Так же ботов вносить в этот список (если возможно)
id (int autoincrement), auth (steam_1 или BOT), connect_time (время подключение игрока в timestamp, чтобы можно было отсчитать сколько он провел на серваке)
Заранее спасибо![]()
Смотреть онлайн сервера можно же и более простым путём, на пример как мониторингиудалять запись при отключении.