подгружает все файлы из подпапок, кроме disabled
Если плагин не будет распознан, как плагин (вместо .smx - .xms, например), то и подгружать SM его не станет. Зато можно "парсить" по расширению и не беспокоиться о том, как переименуют имя файла.переименовываются у них расширения файлов
Да, но условия просто так не напишешь на листочке. Можно модульно сделать, тобишь ядро, и модулиЗдрасте! Хочу плагин для режима Deathmatch CS:GO, который будет автоматически ставить рандомное условие для каждого одного раунда. Т.е. чтоб при смене карты одновременно менялось и ограничение. Ну типа в одном раунде ставиться допустим ножевой раунд, потом меняется карта и устанавливается другое ограничение, например онли-хедшоты, и т.д.
Желательно, чтоб можно было самому в конфиге делать разные ограничения.
Например:
В самом конфиге пишем название условие "Онли-хедшоты"
Далее ниже. Сообщение, которое выводит инфу в чат или на экране слева или на дисплее по середине, например "В этом раунде убить противника можно только в голову"
Под сообщением указываем шанс выпадение такого условия (необязательно)
Ещё ниже прописываем команды и моды, которые делают эти ограничения.
Возможно-ли такое реализовать???
#include <sdkhooks>
#include <sdktools_functions>
new String:sWeapon[13];
public OnClientPostAdminCheck(client) SDKHook(client, SDKHook_OnTakeDamage, TakeDamage);
public Action:TakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3])
{
if (attacker && victim != attacker && attacker <= MaxClients)
{
GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
if (strcmp(sWeapon, "weapon_knife") == 0)
{
GetClientEyeAngles(attacker, damageForce);
GetClientEyeAngles(victim, damagePosition);
if (damageForce[1] < damagePosition[1])
{
if (damagePosition[1] - damageForce[1] < 70.0) return Plugin_Handled;
}
else if (damageForce[1] - damagePosition[1] < 50.0) return Plugin_Handled;
}
}
return Plugin_Continue;
}
К сожалению данный плагин проще написать с нуля, чем полностью его декомпилировать.В общем есть плагин, Round End Sound с MyArena. Был без исходника, я декомпилировал плагин, получился исходник, (моя цель была просто убрать рекламу MyArena) но при компиляции в smx вылетало много ошибок. А в sourcepawn я еще новичок, и решить эти ошибки не могу :dntknw:. Хотелось бы чтобы кто то из опытных людей помог, если вдруг нечего делать. Буду очень благодарен.
зищита (имунитет) админов с флагом d
#include <sdkhooks>
#include <sdktools_functions>
new String:sWeapon[13], bool:gAdmin[MAXPLAYERS + 1];
public OnClientPostAdminCheck(client)
{
SDKHook(client, SDKHook_OnTakeDamage, TakeDamage);
gAdmin[client] = GetAdminFlag(GetUserAdmin(client), Admin_Ban);
}
public Action:TakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3])
{
if (gAdmin[victim] && attacker && victim != attacker && attacker <= MaxClients)
{
if (weapon != -1) GetEdictClassname(weapon, sWeapon, sizeof(sWeapon));
else GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
if (strncmp(sWeapon, "weapon_knife", 12) == 0)
{
GetClientEyeAngles(attacker, damageForce);
GetClientEyeAngles(victim, damagePosition);
if (damageForce[1] < damagePosition[1])
{
if (damagePosition[1] - damageForce[1] < 70.0) return Plugin_Handled;
}
else if (damageForce[1] - damagePosition[1] < 50.0) return Plugin_Handled;
}
}
return Plugin_Continue;
}
#include <sourcemod>
#include <sdkhooks>
#pragma semicolon 1
#define PLUGIN_VERSION "1.0"
new bool:gB_Enabled;
new Handle:gH_Enabled = INVALID_HANDLE;
public Plugin:myinfo =
{
name = "[ANY] No Water Damage",
author = "shavit",
description = "Disable damaging from water idling.",
version = PLUGIN_VERSION,
url = "https://forums.alliedmods.net/member.php?u=163134"
}
public OnPluginStart()
{
CreateConVar("sm_nowaterdamage_version", PLUGIN_VERSION, "Plugin version", FCVAR_NOTIFY|FCVAR_DONTRECORD|FCVAR_PLUGIN);
gH_Enabled = CreateConVar("sm_nowaterdamage_enabled", "1", "Disabled damage received from water?", FCVAR_PLUGIN, true, 0.0, true, 1.0);
gB_Enabled = GetConVarBool(gH_Enabled);
HookConVarChange(gH_Enabled, OnConVarChanged);
AutoExecConfig();
}
public OnConVarChanged(Handle:cvar, const String:oldVal[], const String:newVal[])
{
if(cvar == gH_Enabled)
{
gB_Enabled = StringToInt(newVal)? true:false;
}
}
public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
if(!gB_Enabled)
{
return Plugin_Continue;
}
if(damagetype == DMG_DROWN || damagetype == DMG_DROWNRECOVER)
{
damage = 0.0;
return Plugin_Handled;
}
return Plugin_Continue;
}