Написание плагинов

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
копай в эту сторону

что-то ни как, если аптечка имеет твердое строение, она лечит, но игроки запинаются об нее, а если делаю ноблок для нее, то она лечить перестает, вроде просто цифры меняю, а в результате эфект пропадает
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
Если в команде T больше двух человек, то разрешаем выполнять команду sm_s , !s.
PHP:
#pragma semicolon 1
#include <sdktools>
#include <sdkhooks>
#include <lastrequest>

new bool:b_s[MAXPLAYERS + 1]; // Использование оружия.

// Список блокируемого оружия.
new const String:block_weapons_list[][] =
{
    "ak47", "aug", "mp7", "mp9", "scar20", "deagle", "revolver",
    "usp_silencer", "ump-45", "sawedoff", "nova", "negev",
    "m249", "m4a1", "m4a1-silencer", "awp", "g3sg1", "ssg08",
    "glock", "fiveseven", "cz75a", "elite", "decoy", "flashbang",
    "galilar", "galil", "hkp2000", "incgrenade", "molotov", "hegrenade",
    "c4", "smokegrenade", "sg556", "taser", "tec9", "p90", "tmp", "ump45",
    "knife"
};

#define Weapon_Count sizeof(block_weapons_list)

public OnPluginStart()
{
	RegConsoleCmd("sm_s", Cmd_S);
	HookEvent("player_spawn", Player_Spawn);
}

public Action:Cmd_S(client, args)
{
	if (client != 0)
	{
		if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
		{
			if (GetPlayerCount() > 2) // Если в команде T больше двух человек, то выполняем команду !s
			{
				b_s[client] = true;
				RemoveAllPlayersWeapons(client);
				SetEntityRenderColor(client, 0, 0, 0, 255);
				PrintToChatAll("%N сдался!");
			}
		}
	}
	return Plugin_Handled;
}

// Запрещает использовать и поднимать запрещенное оружие.
public Action:WeaponEquip(client, weapon) 
{ 
    if(GetClientTeam(client) == 2 && b_s[client] == true) // Если игрок в команде Т и b_s[client] == true, то запрещаем поднимать оружие.
    {
        decl String:blockWeapon[32]; 
        GetEntityClassname(weapon, blockWeapon, sizeof(blockWeapon));

        for(new i = 0; i < Weapon_Count; ++i) 
        { 
            if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0)
            {    
                return Plugin_Handled; 
            } 
        } 
    }
    return Plugin_Continue; 
}

public Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast){
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
	{
		b_s[client] = false;
	}
}

public OnClientPostAdminCheck(client)
{
	SDKHook(client, SDKHook_WeaponEquip, WeaponEquip);
}

public OnClientDisconnect(client){
	b_s[client] = false;
	
	SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);
}

/* Stocks */

stock RemoveAllPlayersWeapons(client)
{
    new weaponindex;
    for (new weaponslot = 0; weaponslot < 5; weaponslot++)
    {
        weaponindex = GetPlayerWeaponSlot(client, weaponslot);
        if (weaponindex != -1)
        {
            Util_RemovePlayerItem(client, weaponindex);
        }
    }
    
    WepLib_GrenadeStripAll(client);
}

stock Util_RemovePlayerItem(client, weaponindex)
{
    RemovePlayerItem(client, weaponindex);
    RemoveEdict(weaponindex);
}

stock WepLib_GrenadeStripAll(client)
{
    new grenade = GetPlayerWeaponSlot(client, 3);
    while (grenade != -1)
    {
        Util_RemovePlayerItem(client, grenade);
        grenade = GetPlayerWeaponSlot(client, 3);
    }
}

public OnAvailableLR(Announced)
{
    for(new i = 1; i <= MaxClients; i++)
    {
    	if (GetClientTeam(i) == 2)
    	{
        	b_s[i] = false; // Разрешаем игроку поднимать оружие.
        }
    }
}

/* Кол-во живых игроков */
stock int GetPlayerCount(){
	int iPlayers;
	for (int i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
		{
			iPlayers++;
		}
	}
	return iPlayers;
}

Появилась ошибка, до этого неделю нормально работал
L 01/19/2016 - 16:04:04: [SM] Native "GetClientTeam" reported: Client 3 is not in game
L 01/19/2016 - 16:04:04: [SM] Displaying call stack trace for plugin "different/!s.smx":
L 01/19/2016 - 16:04:04: [SM] [0] Line 122, C:\Documents and Settings\Admin\������� ����\���������\�������\scripting\!s.sp::OnAvailableLR()
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Появилась ошибка, до этого неделю нормально работал
L 01/19/2016 - 16:04:04: [SM] Native "GetClientTeam" reported: Client 3 is not in game
L 01/19/2016 - 16:04:04: [SM] Displaying call stack trace for plugin "different/!s.smx":
L 01/19/2016 - 16:04:04: [SM] [0] Line 122, C:\Documents and Settings\Admin\������� ����\���������\�������\scripting\!s.sp::OnAvailableLR()
PHP:
#pragma semicolon 1
#include <sdktools>
#include <sdkhooks>
#include <lastrequest>

new bool:b_s[MAXPLAYERS + 1]; // Использование оружия.

// Список блокируемого оружия.
new const String:block_weapons_list[][] =
{
    "ak47", "aug", "mp7", "mp9", "scar20", "deagle", "revolver",
    "usp_silencer", "ump-45", "sawedoff", "nova", "negev",
    "m249", "m4a1", "m4a1-silencer", "awp", "g3sg1", "ssg08",
    "glock", "fiveseven", "cz75a", "elite", "decoy", "flashbang",
    "galilar", "galil", "hkp2000", "incgrenade", "molotov", "hegrenade",
    "c4", "smokegrenade", "sg556", "taser", "tec9", "p90", "tmp", "ump45",
    "knife"
};

#define Weapon_Count sizeof(block_weapons_list)

public OnPluginStart()
{
	RegConsoleCmd("sm_s", Cmd_S);
	HookEvent("player_spawn", Player_Spawn);
}

public Action:Cmd_S(client, args)
{
	if (client != 0)
	{
		if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
		{
			if (GetPlayerCount() > 2) // Если в команде T больше двух человек, то выполняем команду !s
			{
				b_s[client] = true;
				RemoveAllPlayersWeapons(client);
				SetEntityRenderColor(client, 0, 0, 0, 255);
				PrintToChatAll("%N сдался!");
			}
			else if (b_s[client] == true)
			{
				PrintToChat(client, "Вы уже сдались!");
			}
			else if (!IsPlayerAlive(client))
			{
				PrintToChat(client, "Данную команду можно использовать только когда вы живы!");
			}
			else if (GetClientTeam(client) == 3)
			{
				PrintToChat(client, "Данная команда доступна только за Террористов!");
			}
		}
	}
	return Plugin_Handled;
}

// Запрещает использовать и поднимать запрещенное оружие.
public Action:WeaponEquip(client, weapon) 
{ 
    if(IsClientInGame(client) && GetClientTeam(client) == 2 && b_s[client] == true) // Если игрок в команде Т и b_s[client] == true, то запрещаем поднимать оружие.
    {
        decl String:blockWeapon[32]; 
        GetEntityClassname(weapon, blockWeapon, sizeof(blockWeapon));

        for(new i = 0; i < Weapon_Count; ++i) 
        { 
            if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0)
            {    
                return Plugin_Handled; 
            } 
        } 
    }
    return Plugin_Continue; 
}

public Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast){
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
	{
		b_s[client] = false;
	}
}

public OnClientPostAdminCheck(client)
{
	SDKHook(client, SDKHook_WeaponEquip, WeaponEquip);
}

public OnClientDisconnect(client){
	b_s[client] = false;
	
	SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);
}

/* Stocks */

stock RemoveAllPlayersWeapons(client)
{
    new weaponindex;
    for (new weaponslot = 0; weaponslot < 5; weaponslot++)
    {
        weaponindex = GetPlayerWeaponSlot(client, weaponslot);
        if (weaponindex != -1)
        {
            Util_RemovePlayerItem(client, weaponindex);
        }
    }
    
    WepLib_GrenadeStripAll(client);
}

stock Util_RemovePlayerItem(client, weaponindex)
{
    RemovePlayerItem(client, weaponindex);
    RemoveEdict(weaponindex);
}

stock WepLib_GrenadeStripAll(client)
{
    new grenade = GetPlayerWeaponSlot(client, 3);
    while (grenade != -1)
    {
        Util_RemovePlayerItem(client, grenade);
        grenade = GetPlayerWeaponSlot(client, 3);
    }
}

public OnAvailableLR(Announced)
{
    for(new i = 1; i <= MaxClients; i++)
    {
    	if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
    	{
        	b_s[i] = false; // Разрешаем игроку поднимать оружие.
        }
    }
}

/* Кол-во живых игроков */
stock int GetPlayerCount(){
	int iPlayers;
	for (int i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
		{
			iPlayers++;
		}
	}
	return iPlayers;
}

public Plugin:myinfo = {
	author = "Hejter",
	version = "0.2",
}
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
PHP:
#pragma semicolon 1
#include <sdktools>
#include <sdkhooks>
#include <lastrequest>

new bool:b_s[MAXPLAYERS + 1]; // Использование оружия.

// Список блокируемого оружия.
new const String:block_weapons_list[][] =
{
    "ak47", "aug", "mp7", "mp9", "scar20", "deagle", "revolver",
    "usp_silencer", "ump-45", "sawedoff", "nova", "negev",
    "m249", "m4a1", "m4a1-silencer", "awp", "g3sg1", "ssg08",
    "glock", "fiveseven", "cz75a", "elite", "decoy", "flashbang",
    "galilar", "galil", "hkp2000", "incgrenade", "molotov", "hegrenade",
    "c4", "smokegrenade", "sg556", "taser", "tec9", "p90", "tmp", "ump45",
    "knife"
};

#define Weapon_Count sizeof(block_weapons_list)

public OnPluginStart()
{
	RegConsoleCmd("sm_s", Cmd_S);
	HookEvent("player_spawn", Player_Spawn);
}

public Action:Cmd_S(client, args)
{
	if (client != 0)
	{
		if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
		{
			if (GetPlayerCount() > 2) // Если в команде T больше двух человек, то выполняем команду !s
			{
				b_s[client] = true;
				RemoveAllPlayersWeapons(client);
				SetEntityRenderColor(client, 0, 0, 0, 255);
				PrintToChatAll("%N сдался!");
			}
			else if (b_s[client] == true)
			{
				PrintToChat(client, "Вы уже сдались!");
			}
			else if (!IsPlayerAlive(client))
			{
				PrintToChat(client, "Данную команду можно использовать только когда вы живы!");
			}
			else if (GetClientTeam(client) == 3)
			{
				PrintToChat(client, "Данная команда доступна только за Террористов!");
			}
		}
	}
	return Plugin_Handled;
}

// Запрещает использовать и поднимать запрещенное оружие.
public Action:WeaponEquip(client, weapon) 
{ 
    if(IsClientInGame(client) && GetClientTeam(client) == 2 && b_s[client] == true) // Если игрок в команде Т и b_s[client] == true, то запрещаем поднимать оружие.
    {
        decl String:blockWeapon[32]; 
        GetEntityClassname(weapon, blockWeapon, sizeof(blockWeapon));

        for(new i = 0; i < Weapon_Count; ++i) 
        { 
            if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0)
            {    
                return Plugin_Handled; 
            } 
        } 
    }
    return Plugin_Continue; 
}

public Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast){
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
	{
		b_s[client] = false;
	}
}

public OnClientPostAdminCheck(client)
{
	SDKHook(client, SDKHook_WeaponEquip, WeaponEquip);
}

public OnClientDisconnect(client){
	b_s[client] = false;
	
	SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);
}

/* Stocks */

stock RemoveAllPlayersWeapons(client)
{
    new weaponindex;
    for (new weaponslot = 0; weaponslot < 5; weaponslot++)
    {
        weaponindex = GetPlayerWeaponSlot(client, weaponslot);
        if (weaponindex != -1)
        {
            Util_RemovePlayerItem(client, weaponindex);
        }
    }
    
    WepLib_GrenadeStripAll(client);
}

stock Util_RemovePlayerItem(client, weaponindex)
{
    RemovePlayerItem(client, weaponindex);
    RemoveEdict(weaponindex);
}

stock WepLib_GrenadeStripAll(client)
{
    new grenade = GetPlayerWeaponSlot(client, 3);
    while (grenade != -1)
    {
        Util_RemovePlayerItem(client, grenade);
        grenade = GetPlayerWeaponSlot(client, 3);
    }
}

public OnAvailableLR(Announced)
{
    for(new i = 1; i <= MaxClients; i++)
    {
    	if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
    	{
        	b_s[i] = false; // Разрешаем игроку поднимать оружие.
        }
    }
}

/* Кол-во живых игроков */
stock int GetPlayerCount(){
	int iPlayers;
	for (int i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
		{
			iPlayers++;
		}
	}
	return iPlayers;
}

public Plugin:myinfo = {
	author = "Hejter",
	version = "0.2",
}

скорее всего это из-за этого плагина [Core+Modules]Jail Warden Pro (Remake) после установки пошли ошибки и еще почему, когда игрок пишет !s в чат ничего не выводится

L 01/19/2016 - 18:50:28: [SM] Plugin encountered error 4: Invalid parameter or parameter type
L 01/19/2016 - 18:50:28: [SM] Native "VFormat" reported: String formatted incorrectly - parameter 2 (total 1)
L 01/19/2016 - 18:50:28: [SM] Displaying call stack trace for plugin "different/!s.smx":
L 01/19/2016 - 18:50:28: [SM] [0] Line 364, C:\Documents and Settings\Admin\������� ����\���������\�������\scripting\include\halflife.inc::PrintToChatAll()
L 01/19/2016 - 18:50:28: [SM] [1] Line 39, C:\Documents and Settings\Admin\������� ����\���������\�������\scripting\!s.sp::Cmd_S()
 
Сообщения
10
Реакции
0
Александр Гужов, можно сделать изменение ников через adminmenu_custom.txt

а сортировку (adminmenu_sorting.txt) можешь добавить

Не забывай про кодировку (utf-8 без bom) иначе работать не будет.
Спасибо :), как просто все, если знать где рыть. Только один параметр поменял на server вместо
PHP:
  "execute"    "player"
Александр Гужов, пробуй мой. Это ещё бета. Настроен по умолчанию по таймеру, перемещает после смерти человека. Квары смотри в исходнике, прописывай если что в server.cfg
Плагин работает, только непонятно как :).
Перебрасывает после смерти для баланса, и сидишь мертвый за команду :(.
Вход возможен при новом выборе команды, или перезаходе на сервер.
И да - можно все таки сделать надпись по центру экрана и подсветку экрана на пару секунд в цвет команды? Ну или направление подскажите пожалуйста, кто какая переменная и с чего начинать. попробую и сам поскриптить :). Вот только с англицким тяжко, а опыт программирования был в Делфи, думаю осилю.
 
Последнее редактирование:

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Александр Гужов, на каком режиме пробуешь (паблик, дм)?
 

Kristina

Участник
Сообщения
5
Реакции
0
1)
На какую строчку надо заменить
2)Помогите с плагином хук.
из 1 спойлера нужно во второй перенести звуки,спрайты(огни там есть и цвета следов от хука,СКОРОСТЬ ХУКА и сам спрайт хука не нужнаы!)
Если не лень то и меню.. только сделать на команду /hook
Заранее спасибо
C-подобный:
#include <amxmodx>
#include <cstrike>
#include <amxmisc>
#include <engine>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <colorchat>

#define HOOK_LEVEL ADMIN_LEVEL_H    // Уровен доступа

#define TRAIL_LIFE        10        // Жизнь полосы
#define TRAIL_WIDTH       10        // Ширина полосы
#define TRAIL_RED         255        // Цвет: Красный        
#define TRAIL_GREEN       0         // Цвет: Зелёный
#define TRAIL_BLUE        0            // Цвет: Голубой
#define TRAIL_BRIGTHNESS  220        // Яркость

#define TRAIL_LIF        10         // Жизнь полосы
#define TRAIL_WIDT       10            // Ширина полосы
#define TRAIL_RE         0            // Цвет: Красный        
#define TRAIL_GREE       0             // Цвет: Зелёный
#define TRAIL_BLU        255        // Цвет: Голубой
#define TRAIL_BRIGTHNES  220        // Яркость

#pragma tabsize 0

new bool:canusehook[32]
new bool:ishooked[32]
new hookorigin[32][3]

new Enable
new Glow, GlowRandom, GlowR, GlowG, GlowB
new Fade, FadeRandom, fadeR, fadeG, fadeB
new model_gibs, gTrail
new HookSpeed
new g_iBeamSprite
new g_speed[33]


public plugin_init() {
    register_plugin("[MG] Hook by Nickron","2.0","LLInH9rA, Remake Nickron")
  
    register_clcmd("+hook","hook_on",HOOK_LEVEL)
    register_clcmd("-hook","hook_off",HOOK_LEVEL)
    register_clcmd("hook_speed","Menu_hook")
    register_clcmd("hook_give","give_hook",HOOK_LEVEL,"<name|#userid|steamid|@ALL> <on/off>") // Дать/отнять хук
  
    Enable            =    register_cvar( "hook_enable", "1" )                // Вкл./Выкл. Плагин (По умолчанию Вкл)
    Glow            =    register_cvar( "hook_glow", "1" )                // Аура при полете Вкл./Выкл. (По умолчанию Вкл)
    GlowRandom        =    register_cvar( "hook_glow_random", "1" )        // Рандомная подсветка
    GlowR            =    register_cvar( "hook_glow_r", "255" )            // Цвет свечения(красный)
    GlowG            =    register_cvar( "hook_glow_g", "255" )            // Цвет свечения(зеленый)
    GlowB            =    register_cvar( "hook_glow_b", "255" )            // Цвет свечения(синий)
    Fade            =    register_cvar( "hook_screenfade", "0" )            // Затемнение экрана при полете Вкл./Выкл. (По умолчанию Вкл)
    FadeRandom        =    register_cvar( "hook_screenfade_random", "1" )    // Использовать рандомный цвет (1 - да, 2 -нет)(По умолчанию 1)
    fadeR            =     register_cvar( "hook_fade_r", "255" )            // Цвет затемнения экрана при полете(красный)
    fadeG             =     register_cvar( "hook_fade_g", "255" )            // Цвет затемнения экрана при полете(зеленый)
    fadeB             =     register_cvar( "hook_fade_b", "255" )            // Цвет затемнения экрана при полете(синий)
    HookSpeed        =    register_cvar( "hook_speed", "450" )            // Скорость (По умолчанию: 350)
}

public plugin_precache() {

    g_iBeamSprite = precache_model("sprites/agrozeki/lgtning.spr");
    model_gibs      =   precache_model("sprites/agrozeki/pink.spr")
    gTrail     =   precache_model("sprites/agrozeki/speed.spr")
    precache_sound("agrozeki/exparrow_shoot1.wav")
  
}

public Menu_hook(id)
{
  if(get_user_flags(id) & ADMIN_LEVEL_H || get_user_flags(id) & ADMIN_LEVEL_H)
  {
    new menu = menu_create("\y[CJ] \wСкорость паутинки \y:3:","menu_hook")
    if(g_speed[id] == 0)
    {
    menu_additem(menu,"Низкая \y[Вкл]", "1", 0)
    }else{
    menu_additem(menu,"Низкая \r[Выкл]", "1", 0)
    }
    if(g_speed[id] == 1)
    {
    menu_additem(menu,"Стандартная \y[Вкл]", "2", 0)
    }else{
    menu_additem(menu,"Стандартная \r[Выкл]", "2", 0)
    }
    if(g_speed[id] == 2)
    {
    menu_additem(menu,"Высокая \y[Вкл]", "3", 0)
    }else{
    menu_additem(menu,"Высокая \r[Выкл]", "3", 0)
    }
    menu_setprop(menu , MPROP_NEXTNAME, "Далее")
    menu_setprop(menu , MPROP_BACKNAME, "Назад")
    menu_setprop(menu , MPROP_EXITNAME, "\rВыход")
    menu_setprop(menu , MPROP_EXIT, MEXIT_ALL)
    menu_display(id, menu)
  }else{
  ColorChat(id,BLUE,"^4[Gameseven] ^3У тебя нет паутины. Хотите купить ? Skype: ^4jb.server1")
  }
return PLUGIN_HANDLED
}
public menu_hook(id, menu, key)
{
  if(key == MENU_EXIT)
  {
      menu_destroy(menu)
    return PLUGIN_HANDLED
  }
  new accss, clbck, data[6], name[64], itm
  menu_item_getinfo(menu, key, accss, data, 5, name, 63, clbck)
  itm = str_to_num(data)
  
  switch(itm)
  {    
    case 1:
    {
      if(g_speed[id] == 0)
      {
        ColorChat(id,BLUE,"^3[Gameseven] ^4Уже установлено.")
        Menu_hook(id)
      }else{
        g_speed[id] = 0
        ColorChat(id,BLUE,"^3[Gameseven] ^4Вы выбрали скорость паутины: ^3низкая.")
      }
    }
    case 2:
    {
      if(g_speed[id] == 1)
      {
        ColorChat(id,BLUE,"^3[GameSeven] ^4Уже установлено.")
        Menu_hook(id)
      }else{
        g_speed[id] = 1
        ColorChat(id,BLUE,"^3[GameSeven] ^4Вы выбрали скорость паутины: ^3стандартная.")
      }
    }
    case 3:
    {
      if(g_speed[id] == 2)
      {
        ColorChat(id,BLUE,"^3[GameSeven] ^4Уже установлено.")
        Menu_hook(id)
      }else{
        g_speed[id] = 2
        ColorChat(id,BLUE,"^3[GameSeven] ^4Вы выбрали скорость паутины: ^3высокая.")
      }
    }
  }
  return PLUGIN_HANDLED
}

public client_disconnect(id) {
    remove_hook(id)
    g_speed[id] = 1
}

public client_putinserver(id) {
    remove_hook(id)
    g_speed[id] = 1
}

// =================================================================================================

public give_hook(id,level,cid) {
    if(!cmd_access(id,level,cid,3))
        return PLUGIN_HANDLED
          
    new name[32]
    get_user_name(id,name,32)
      
    new szarg1[32], szarg2[8], bool:mode
    read_argv(1,szarg1,32)
    read_argv(2,szarg2,32)
    if(equal(szarg2,"on"))
        mode = true
      
    if(equal(szarg1,"@ALL")) {
        for(new i=1;i<=get_maxplayers();i++) {
            if(is_user_connected(i) && is_user_alive(i)) {
                canusehook[i-1] = mode
                if(mode) {
                    client_print(i,print_chat,"[Gameseven] Админ %s дал возможность возможность использовать hook",name)
                    client_print(i,print_chat,"[GameSeven] Забиндите '+hook' на кнопку")
                }
                else
                    client_print(i,print_chat,"[Gameseven] Админ %s отнял возможность возможность использовать hook",name)
            }
        }
    }
    else {
        new pid = cmd_target(id,szarg1,2)
        if(pid > 0) {
            canusehook[pid-1] = mode
            if(mode) {
                client_print(pid,print_chat,"[Gameseven] Админ %s дал возможность возможность использовать hook",name)
                client_print(pid,print_chat,"[Gameseven] Забиндите '+hook' на кнопку")
            }
            else
                client_print(pid,print_chat,"[Gameseven] Админ %s отнял возможность возможность использовать hook",name)
        }
    }
  
    return PLUGIN_HANDLED
}

// =================================================================================================

public hook_on(id,level,cid)
{
    if( get_pcvar_num( Enable ) )
    {
    if(!canusehook[id-1] && !cmd_access(id,level,cid,1))
        return PLUGIN_HANDLED
  
    if(get_user_flags(id) & ADMIN_BAN)
    {
    get_user_origin(id,hookorigin[id-1],3)
  
    if(callfunc_begin("detect_cheat","prokreedz.amxx") == 1) {
        callfunc_push_int(id)
        callfunc_push_str("Hook")
        callfunc_end()
    }
  
    ishooked[id-1] = true
  
    emit_sound(id,CHAN_STATIC,"agrozeki/exparrow_shoot1.wav",1.0,ATTN_NORM,0,PITCH_NORM)
    set_task(0.1,"hook_task",id,"",0,"ab")
    hook_task(id)
    func_break(id)
    }    
    if( is_user_alive( id ) && get_pcvar_num( Glow ) )
    {
        if( is_user_alive( id ) && get_pcvar_num( GlowRandom ) )
        {
        set_user_rendering(id, kRenderFxGlowShell,  random_num( 0,255 ),  random_num( 0,255 ),  random_num( 0,255 ), kRenderNormal, 16 )
        }
        else
        {
        set_user_rendering(id, kRenderFxGlowShell, ( get_pcvar_num( GlowR ) ),  ( get_pcvar_num( GlowG ) ),  ( get_pcvar_num( GlowB ) ), kRenderNormal, 16 )
        }
    }
  
    }
    else
    {
    ColorChat(id, RED,"[Gameseven] ^4Функция отключена!")
    }
  
    if( get_pcvar_num( Fade ) )
    {
        if( get_pcvar_num( FadeRandom ) )
        {
        message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
        write_short( 10<<12 )
        write_short( 10<<16 )
        write_short( 1<<1 )
        write_byte random_num( 0,255 )
        write_byte random_num( 0,255 )
        write_byte random_num( 0,255 )
        write_byte( 255 )
        message_end()
        }
        else
        {
        message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
        write_short( 10<<12 )
        write_short( 10<<16 )
        write_short( 1<<1 )
        write_byte ( get_pcvar_num( fadeR ) )
        write_byte ( get_pcvar_num( fadeG ) )
        write_byte ( get_pcvar_num( fadeB ) )
        write_byte( 255 )
        message_end()
        }
    }
  
    return PLUGIN_HANDLED
}

// =================================================================================================

public is_hooked(id) {
    return ishooked[id-1]
}

// =================================================================================================

public hook_off(id) {

    remove_hook(id)
    if( is_user_alive( id ) && get_pcvar_num( Glow ) )
    {
    set_user_rendering(id, kRenderFxGlowShell,  random_num( 0,0 ),  random_num( 0,0 ),  random_num( 0,0 ), kRenderNormal, 16 )
    }
  
    if( get_pcvar_num( Fade ) )
    {
    message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
    write_short( 10<<12 )
    write_short( 10<<16 )
    write_short( 1<<1 )
    write_byte ( 255 )
    write_byte ( 255 )
    write_byte ( 255 )
    write_byte( 255 )
    message_end()
    }
  
    return PLUGIN_HANDLED
}

// =================================================================================================

public hook_task(id) {
    if(!is_user_connected(id) || !is_user_alive(id))
        remove_hook(id)
  
    remove_beam(id)
    f(id)
    func_trail(id)
    func_trail_ct(id)
  
    new origin[3], Float:velocity[3]
    get_user_origin(id,origin)
    new distance = get_distance(hookorigin[id-1],origin)
  
    new Float:HSpeed = get_pcvar_float(HookSpeed)
  
    if(distance > 25)
    {
                if(g_speed[id] == 0)
                {
                  velocity[0] = (hookorigin[id-1][0] - origin[0]) * (4.0 * 100 / distance)
                  velocity[1] = (hookorigin[id-1][1] - origin[1]) * (4.0 * 100 / distance)
                  velocity[2] = (hookorigin[id-1][2] - origin[2]) * (4.0 * 100 / distance)
                }else if(g_speed[id] == 1){
                  velocity[0] = (hookorigin[id-1][0] - origin[0]) * (4.0 * 200 / distance)
                  velocity[1] = (hookorigin[id-1][1] - origin[1]) * (4.0 * 200 / distance)
                  velocity[2] = (hookorigin[id-1][2] - origin[2]) * (4.0 * 200 / distance)
                }else if(g_speed[id] == 2){
                  velocity[0] = (hookorigin[id-1][0] - origin[0]) * (4.0 * 300 / distance)
                  velocity[1] = (hookorigin[id-1][1] - origin[1]) * (4.0 * 300 / distance)
                  velocity[2] = (hookorigin[id-1][2] - origin[2]) * (4.0 * 300 / distance)
                }
      
        entity_set_vector(id,EV_VEC_velocity,velocity)
    }
    else {
        entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
        remove_hook(id)
    }
}

// =================================================================================================

public f(id)
{
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
        write_byte(TE_BEAMENTPOINT);
        write_short(id);             //Индекс entity
        write_coord(hookorigin[id-1][0]);          //Конечная точка x
        write_coord(hookorigin[id-1][1]);         //Конечная точка y
        write_coord(hookorigin[id-1][2]);          //Конечная точка z
        write_short(g_iBeamSprite);         //Индекс спрайта
        write_byte(0)                 //Стартовый кадр
        write_byte(1);                 //Скорость анимации
        write_byte(1);                //Врмея существования
        write_byte(40);    //Толщина луча
        write_byte(10);  //Искажение
        
        switch(random(2))
        {
            case 0:
            {
                write_byte(255);    //Цвет красный
                write_byte(0);        //Цвеи зеленый
                write_byte(0);        //Цвет синий
            }
            
            case 1:
            {
                write_byte(0);        //Цвет красный
                write_byte(255);    //Цвеи зеленый
                write_byte(0);        //Цвет синий
            }
        }
        
        write_byte(2000);            //Яркость
        write_byte(0);                //...
        message_end();
}

// =================================================================================================

public func_break(id)
{
    new origin[3]
  
    get_user_origin(id,origin,3)
  
    message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
    write_byte(TE_SPRITETRAIL) //Спрайт захвата
    write_coord(origin[0])
    write_coord(origin[1])
    write_coord(origin[2]+20)
    write_coord(origin[0])
    write_coord(origin[1])
    write_coord(origin[2]+80)
    write_short(model_gibs)
    write_byte(20)
    write_byte(20)
    write_byte(4)
    write_byte(20)
    write_byte(10)
    message_end()
}

// =================================================================================================

public func_trail(id)

if(cs_get_user_team(id) == CS_TEAM_T)

{  
    {
        {
  
            message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
            write_byte (TE_BEAMFOLLOW)
            write_short (id)
            write_short (gTrail)
            write_byte (TRAIL_LIFE)
            write_byte (TRAIL_WIDTH)
            write_byte (TRAIL_RED)
            write_byte (TRAIL_GREEN)
            write_byte (TRAIL_BLUE)
            write_byte (TRAIL_BRIGTHNESS)
            message_end()
        }      
    }
}

public func_trail_ct(id)

if(cs_get_user_team(id) == CS_TEAM_CT)

{  
    {
        {
  
            message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
            write_byte (TE_BEAMFOLLOW)
            write_short (id)
            write_short (gTrail)
            write_byte (TRAIL_LIF)
            write_byte (TRAIL_WIDT)
            write_byte (TRAIL_RE)
            write_byte (TRAIL_GREE)
            write_byte (TRAIL_BLU)
            write_byte (TRAIL_BRIGTHNES)
            message_end()
        }      
    }
}

// =================================================================================================

public remove_hook(id) {
    if(task_exists(id))
        remove_task(id)
    remove_beam(id)
    ishooked[id-1] = false
}

// =================================================================================================

public remove_beam(id) {
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(99) // TE_KILLBEAM
    write_short(id)
    message_end()
}
 

Kristina

Участник
Сообщения
5
Реакции
0
C-подобный:
[SPOILER]
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <colorchat>

#define HOOK_LEVEL ADMIN_LEVEL_G  // Уровен доступа


new bool:canusehook[32]
new bool:ishooked[32]
new hookorigin[32][3]

new Enable
new Glow, GlowRandom, GlowR, GlowG, GlowB
new Tsprite, CTsprite, STsprite, sprstandart
new Fade, FadeRandom, fadeR, fadeG, fadeB
new HookSpeed


public plugin_init() {
    register_plugin("Hook","1.5","LLInH9rA")
  
    register_clcmd("+hook","hook_on",HOOK_LEVEL)
    register_clcmd("-hook","hook_off",HOOK_LEVEL)
    register_clcmd("hook_give","give_hook",HOOK_LEVEL,"<name|#userid|steamid|@ALL> <on/off>") // Дать/отнять хук
  
    Enable            =    register_cvar( "hook_enable", "1" )                // Вкл./Выкл. Плагин (По умолчанию Вкл)
    Glow            =    register_cvar( "hook_glow", "1" )                // Аура при полете Вкл./Выкл. (По умолчанию Вкл)
    GlowRandom        =    register_cvar( "hook_glow_random", "1" )        // Рандомная подсветка
    GlowR            =    register_cvar( "hook_glow_r", "255" )            // Цвет свечения(красный)
    GlowG            =    register_cvar( "hook_glow_g", "255" )            // Цвет свечения(зеленый)
    GlowB            =    register_cvar( "hook_glow_b", "255" )            // Цвет свечения(синий)
    sprstandart        =    register_cvar( "hook_sprite_new", "1" )            // Новый или старый спрайт хука (По умолчанию новый)
    Fade            =    register_cvar( "hook_screenfade", "1" )            // Затемнение экрана при полете Вкл./Выкл. (По умолчанию Вкл)
    FadeRandom        =    register_cvar( "hook_screenfade_random", "1" )    // Использовать рандомный цвет (1 - да, 2 -нет)(По умолчанию 1)
    fadeR            =     register_cvar( "hook_fade_r", "255" )            // Цвет затемнения экрана при полете(красный)
    fadeG             =     register_cvar( "hook_fade_g", "255" )            // Цвет затемнения экрана при полете(зеленый)
    fadeB             =     register_cvar( "hook_fade_b", "255" )            // Цвет затемнения экрана при полете(синий)
    HookSpeed        =    register_cvar( "hook_speed", "350" )            // Скорость (По умолчанию: 350)
}

public plugin_precache() {
    precache_sound("weapons/ric2.wav")                                    // Загрузка звука
    Tsprite            =    precache_model("sprites/hook/hook_T.spr")         // Загрузка спрайта для террористов
    CTsprite        =    precache_model("sprites/hook/hook_CT.spr")         // Загрузка спрайта для контров
    STsprite        =    precache_model("sprites/laserbeam.spr")         // Загрузка стандартного спрайта
  
}

// =================================================================================================

public client_disconnect(id) {
    remove_hook(id)
}

public client_putinserver(id) {
    remove_hook(id)
}

// =================================================================================================

public give_hook(id,level,cid) {
    if(!cmd_access(id,level,cid,3))
        return PLUGIN_HANDLED
          
    new name[32]
    get_user_name(id,name,32)
      
    new szarg1[32], szarg2[8], bool:mode
    read_argv(1,szarg1,32)
    read_argv(2,szarg2,32)
    if(equal(szarg2,"on"))
        mode = true
      
    if(equal(szarg1,"@ALL")) {
        for(new i=1;i<=get_maxplayers();i++) {
            if(is_user_connected(i) && is_user_alive(i)) {
                canusehook[i-1] = mode
                if(mode) {
                    client_print(i,print_chat,"[Hook] Админ %s дал возможность возможность использовать hook",name)
                    client_print(i,print_chat,"[Hook] Забиндите '+hook' на кнопку")
                }
                else
                    client_print(i,print_chat,"[Hook] Админ %s отнял возможность возможность использовать hook",name)
            }
        }
    }
    else {
        new pid = cmd_target(id,szarg1,2)
        if(pid > 0) {
            canusehook[pid-1] = mode
            if(mode) {
                client_print(pid,print_chat,"[Hook] Админ %s дал возможность возможность использовать hook",name)
                client_print(pid,print_chat,"[Hook] Забиндите '+hook' на кнопку")
            }
            else
                client_print(pid,print_chat,"[Hook] Админ %s отнял возможность возможность использовать hook",name)
        }
    }
  
    return PLUGIN_HANDLED
}

// =================================================================================================

public hook_on(id,level,cid)
{
    if( get_pcvar_num( Enable ) )
    {
    if(!canusehook[id-1] && !cmd_access(id,level,cid,1))
        return PLUGIN_HANDLED
  
    get_user_origin(id,hookorigin[id-1],3)
  
    if(callfunc_begin("detect_cheat","prokreedz.amxx") == 1) {
        callfunc_push_int(id)
        callfunc_push_str("Hook")
        callfunc_end()
    }
  
    ishooked[id-1] = true
  
    emit_sound(id,CHAN_STATIC,"weapons/ric2.wav",1.0,ATTN_NORM,0,PITCH_NORM)
    set_task(0.1,"hook_task",id,"",0,"ab")
    hook_task(id)
    if( is_user_alive( id ) && get_pcvar_num( Glow ) )
    {
        if( is_user_alive( id ) && get_pcvar_num( GlowRandom ) )
        {
        set_user_rendering(id, kRenderFxGlowShell,  random_num( 0,255 ),  random_num( 0,255 ),  random_num( 0,255 ), kRenderNormal, 16 )
        }
        else
        {
        set_user_rendering(id, kRenderFxGlowShell, ( get_pcvar_num( GlowR ) ),  ( get_pcvar_num( GlowG ) ),  ( get_pcvar_num( GlowB ) ), kRenderNormal, 16 )
        }
    }
  
    }
    else
    {
    ColorChat(id, RED,"[Hook] ^4Функция отключена!")
    }
  
    if( get_pcvar_num( Fade ) )
    {
        if( get_pcvar_num( FadeRandom ) )
        {
        message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
        write_short( 10<<12 )
        write_short( 10<<16 )
        write_short( 1<<1 )
        write_byte random_num( 0,255 )
        write_byte random_num( 0,255 )
        write_byte random_num( 0,255 )
        write_byte( 255 )
        message_end()
        }
        else
        {
        message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
        write_short( 10<<12 )
        write_short( 10<<16 )
        write_short( 1<<1 )
        write_byte ( get_pcvar_num( fadeR ) )
        write_byte ( get_pcvar_num( fadeG ) )
        write_byte ( get_pcvar_num( fadeB ) )
        write_byte( 255 )
        message_end()
        }
    }
  
    return PLUGIN_HANDLED
}

// =================================================================================================

public is_hooked(id) {
    return ishooked[id-1]
}

// =================================================================================================

public hook_off(id) {

    remove_hook(id)
    if( is_user_alive( id ) && get_pcvar_num( Glow ) )
    {
    set_user_rendering(id, kRenderFxGlowShell,  random_num( 0,0 ),  random_num( 0,0 ),  random_num( 0,0 ), kRenderNormal, 16 )
    }
  
    if( get_pcvar_num( Fade ) )
    {
    message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
    write_short( 10<<12 )
    write_short( 10<<16 )
    write_short( 1<<1 )
    write_byte ( 255 )
    write_byte ( 255 )
    write_byte ( 255 )
    write_byte( 255 )
    message_end()
    }
  
    return PLUGIN_HANDLED
}

// =================================================================================================

public hook_task(id) {
    if(!is_user_connected(id) || !is_user_alive(id))
        remove_hook(id)
  
    remove_beam(id)
    draw_hook(id)
  
    new origin[3], Float:velocity[3]
    get_user_origin(id,origin)
    new distance = get_distance(hookorigin[id-1],origin)
  
    new Float:HSpeed = get_pcvar_float(HookSpeed)
  
    if(distance > 25)  {
        velocity[0] = (hookorigin[id-1][0] - origin[0]) * (2.0 * HSpeed / distance)
        velocity[1] = (hookorigin[id-1][1] - origin[1]) * (2.0 * HSpeed / distance)
        velocity[2] = (hookorigin[id-1][2] - origin[2]) * (2.0 * HSpeed / distance)
      
        entity_set_vector(id,EV_VEC_velocity,velocity)
    }
    else {
        entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
        remove_hook(id)
    }
}

// =================================================================================================

public draw_hook(id) {
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(1)                // TE_BEAMENTPOINT
    write_short(id)                // entid
    write_coord(hookorigin[id-1][0])    // origin
    write_coord(hookorigin[id-1][1])    // origin
    write_coord(hookorigin[id-1][2])    // origin
    if( get_pcvar_num( sprstandart ) )                 // sprite index
    {
    if(get_user_team(id) == 1) {
    write_short( Tsprite )          
    }
    else
    {
    write_short( CTsprite )
    }
    }
    else
    {
    write_short( STsprite )
    }
    write_byte( 0 )                    // start frame
    write_byte( 0 )                    // framerate
    write_byte( 100 )                // life
    write_byte( 10 )                // width
    write_byte( 0 )                    // noise
    if( get_pcvar_num( sprstandart ) )
    {
    if(get_user_team(id) == 1) {    // Террористы
        write_byte( 255 )            // красный
        write_byte( 255 )            // зеленый
        write_byte( 255 )            // синий
    }
    else
    {                                // Контры
        write_byte( 255 )            // красный
        write_byte( 255 )            // зеленый
        write_byte( 255 )            // синий
    }
    }
    else
    {
    if(get_user_team(id) == 1) {    // Террористы
        write_byte( 255 )            // красный
        write_byte( 0 )                // зеленый
        write_byte( 0 )                // синий
    }
    else
    {                                // Контры
        write_byte( 0 )                // красный
        write_byte( 0 )                // зеленый
        write_byte( 255 )            // синий
    }
    }
    write_byte( 150 )                // brightness
    write_byte(0)                    // Скорость
    message_end()
}

// =================================================================================================

public remove_hook(id) {
    if(task_exists(id))
        remove_task(id)
    remove_beam(id)
    ishooked[id-1] = false
}

// =================================================================================================

public remove_beam(id) {
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(99) // TE_KILLBEAM
    write_short(id)
    message_end()
}
[/SPOILER]
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
@Kristina
C-подобный:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <colorchat>

new bool:canusehook[32]
new bool:ishooked[32]
new hookorigin[32][3]

new Enable
new Glow, GlowRandom, GlowR, GlowG, GlowB
new Tsprite, CTsprite, STsprite, sprstandart
new Fade, FadeRandom, fadeR, fadeG, fadeB
new HookSpeed


public plugin_init() {
    register_plugin("Hook","1.5","LLInH9rA")

    register_clcmd("+hook","hook_on",HOOK_LEVEL)
    register_clcmd("-hook","hook_off",HOOK_LEVEL)
    register_clcmd("hook_give","give_hook",HOOK_LEVEL,"<name|#userid|steamid|@ALL> <on/off>") // Дать/отнять хук

    Enable            =    register_cvar( "hook_enable", "1" )                // Вкл./Выкл. Плагин (По умолчанию Вкл)
    Glow            =    register_cvar( "hook_glow", "1" )                // Аура при полете Вкл./Выкл. (По умолчанию Вкл)
    GlowRandom        =    register_cvar( "hook_glow_random", "1" )        // Рандомная подсветка
    GlowR            =    register_cvar( "hook_glow_r", "255" )            // Цвет свечения(красный)
    GlowG            =    register_cvar( "hook_glow_g", "255" )            // Цвет свечения(зеленый)
    GlowB            =    register_cvar( "hook_glow_b", "255" )            // Цвет свечения(синий)
    sprstandart        =    register_cvar( "hook_sprite_new", "1" )            // Новый или старый спрайт хука (По умолчанию новый)
    Fade            =    register_cvar( "hook_screenfade", "1" )            // Затемнение экрана при полете Вкл./Выкл. (По умолчанию Вкл)
    FadeRandom        =    register_cvar( "hook_screenfade_random", "1" )    // Использовать рандомный цвет (1 - да, 2 -нет)(По умолчанию 1)
    fadeR            =     register_cvar( "hook_fade_r", "255" )            // Цвет затемнения экрана при полете(красный)
    fadeG             =     register_cvar( "hook_fade_g", "255" )            // Цвет затемнения экрана при полете(зеленый)
    fadeB             =     register_cvar( "hook_fade_b", "255" )            // Цвет затемнения экрана при полете(синий)
    HookSpeed        =    register_cvar( "hook_speed", "350" )            // Скорость (По умолчанию: 350)
}

public plugin_precache() {
    precache_sound("weapons/ric2.wav")                                    // Загрузка звука
    Tsprite            =    precache_model("sprites/hook/hook_T.spr")         // Загрузка спрайта для террористов
    CTsprite        =    precache_model("sprites/hook/hook_CT.spr")         // Загрузка спрайта для контров
    STsprite        =    precache_model("sprites/laserbeam.spr")         // Загрузка стандартного спрайта

}

// =================================================================================================

public client_disconnect(id) {
    remove_hook(id)
}

public client_putinserver(id) {
    remove_hook(id)
}

// =================================================================================================

public give_hook(id,level,cid) {
    if(!cmd_access(id,level,cid,3))
        return PLUGIN_HANDLED
        
    new name[32]
    get_user_name(id,name,32)
    
    new szarg1[32], szarg2[8], bool:mode
    read_argv(1,szarg1,32)
    read_argv(2,szarg2,32)
    if(equal(szarg2,"on"))
        mode = true
    
    if(equal(szarg1,"@ALL")) {
        for(new i=1;i<=get_maxplayers();i++) {
            if(is_user_connected(i) && is_user_alive(i)) {
                canusehook[i-1] = mode
                if(mode) {
                    client_print(i,print_chat,"[Hook] Админ %s дал возможность возможность использовать hook",name)
                    client_print(i,print_chat,"[Hook] Забиндите '+hook' на кнопку")
                }
                else
                    client_print(i,print_chat,"[Hook] Админ %s отнял возможность возможность использовать hook",name)
            }
        }
    }
    else {
        new pid = cmd_target(id,szarg1,2)
        if(pid > 0) {
            canusehook[pid-1] = mode
            if(mode) {
                client_print(pid,print_chat,"[Hook] Админ %s дал возможность возможность использовать hook",name)
                client_print(pid,print_chat,"[Hook] Забиндите '+hook' на кнопку")
            }
            else
                client_print(pid,print_chat,"[Hook] Админ %s отнял возможность возможность использовать hook",name)
        }
    }

    return PLUGIN_HANDLED
}

// =================================================================================================

public hook_on(id,level,cid)
{
    if( get_pcvar_num( Enable ) )
    {
  

    get_user_origin(id,hookorigin[id-1],3)

    if(callfunc_begin("detect_cheat","prokreedz.amxx") == 1) {
        callfunc_push_int(id)
        callfunc_push_str("Hook")
        callfunc_end()
    }

    ishooked[id-1] = true

    emit_sound(id,CHAN_STATIC,"weapons/ric2.wav",1.0,ATTN_NORM,0,PITCH_NORM)
    set_task(0.1,"hook_task",id,"",0,"ab")
    hook_task(id)
    if( is_user_alive( id ) && get_pcvar_num( Glow ) )
    {
        if( is_user_alive( id ) && get_pcvar_num( GlowRandom ) )
        {
        set_user_rendering(id, kRenderFxGlowShell,  random_num( 0,255 ),  random_num( 0,255 ),  random_num( 0,255 ), kRenderNormal, 16 )
        }
        else
        {
        set_user_rendering(id, kRenderFxGlowShell, ( get_pcvar_num( GlowR ) ),  ( get_pcvar_num( GlowG ) ),  ( get_pcvar_num( GlowB ) ), kRenderNormal, 16 )
        }
    }

    }
    else
    {
    ColorChat(id, RED,"[Hook] ^4Функция отключена!")
    }

    if( get_pcvar_num( Fade ) )
    {
        if( get_pcvar_num( FadeRandom ) )
        {
        message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
        write_short( 10<<12 )
        write_short( 10<<16 )
        write_short( 1<<1 )
        write_byte random_num( 0,255 )
        write_byte random_num( 0,255 )
        write_byte random_num( 0,255 )
        write_byte( 255 )
        message_end()
        }
        else
        {
        message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
        write_short( 10<<12 )
        write_short( 10<<16 )
        write_short( 1<<1 )
        write_byte ( get_pcvar_num( fadeR ) )
        write_byte ( get_pcvar_num( fadeG ) )
        write_byte ( get_pcvar_num( fadeB ) )
        write_byte( 255 )
        message_end()
        }
    }

    return PLUGIN_HANDLED
}

// =================================================================================================

public is_hooked(id) {
    return ishooked[id-1]
}

// =================================================================================================

public hook_off(id) {

    remove_hook(id)
    if( is_user_alive( id ) && get_pcvar_num( Glow ) )
    {
    set_user_rendering(id, kRenderFxGlowShell,  random_num( 0,0 ),  random_num( 0,0 ),  random_num( 0,0 ), kRenderNormal, 16 )
    }

    if( get_pcvar_num( Fade ) )
    {
    message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("ScreenFade"),{0,0,0}, id)
    write_short( 10<<12 )
    write_short( 10<<16 )
    write_short( 1<<1 )
    write_byte ( 255 )
    write_byte ( 255 )
    write_byte ( 255 )
    write_byte( 255 )
    message_end()
    }

    return PLUGIN_HANDLED
}

// =================================================================================================

public hook_task(id) {
    if(!is_user_connected(id) || !is_user_alive(id))
        remove_hook(id)

    remove_beam(id)
    draw_hook(id)

    new origin[3], Float:velocity[3]
    get_user_origin(id,origin)
    new distance = get_distance(hookorigin[id-1],origin)

    new Float:HSpeed = get_pcvar_float(HookSpeed)

    if(distance > 25)  {
        velocity[0] = (hookorigin[id-1][0] - origin[0]) * (2.0 * HSpeed / distance)
        velocity[1] = (hookorigin[id-1][1] - origin[1]) * (2.0 * HSpeed / distance)
        velocity[2] = (hookorigin[id-1][2] - origin[2]) * (2.0 * HSpeed / distance)
    
        entity_set_vector(id,EV_VEC_velocity,velocity)
    }
    else {
        entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
        remove_hook(id)
    }
}

// =================================================================================================

public draw_hook(id) {
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(1)                // TE_BEAMENTPOINT
    write_short(id)                // entid
    write_coord(hookorigin[id-1][0])    // origin
    write_coord(hookorigin[id-1][1])    // origin
    write_coord(hookorigin[id-1][2])    // origin
    if( get_pcvar_num( sprstandart ) )                 // sprite index
    {
    if(get_user_team(id) == 1) {
    write_short( Tsprite )       
    }
    else
    {
    write_short( CTsprite )
    }
    }
    else
    {
    write_short( STsprite )
    }
    write_byte( 0 )                    // start frame
    write_byte( 0 )                    // framerate
    write_byte( 100 )                // life
    write_byte( 10 )                // width
    write_byte( 0 )                    // noise
    if( get_pcvar_num( sprstandart ) )
    {
    if(get_user_team(id) == 1) {    // Террористы
        write_byte( 255 )            // красный
        write_byte( 255 )            // зеленый
        write_byte( 255 )            // синий
    }
    else
    {                                // Контры
        write_byte( 255 )            // красный
        write_byte( 255 )            // зеленый
        write_byte( 255 )            // синий
    }
    }
    else
    {
    if(get_user_team(id) == 1) {    // Террористы
        write_byte( 255 )            // красный
        write_byte( 0 )                // зеленый
        write_byte( 0 )                // синий
    }
    else
    {                                // Контры
        write_byte( 0 )                // красный
        write_byte( 0 )                // зеленый
        write_byte( 255 )            // синий
    }
    }
    write_byte( 150 )                // brightness
    write_byte(0)                    // Скорость
    message_end()
}

// =================================================================================================

public remove_hook(id) {
    if(task_exists(id))
        remove_task(id)
    remove_beam(id)
    ishooked[id-1] = false
}

// =================================================================================================

public remove_beam(id) {
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(99) // TE_KILLBEAM
    write_short(id)
    message_end()
}
по идее так
 

Kristina

Участник
Сообщения
5
Реакции
0
Cпасибо огромное опробуем.
а не моги бы вы еще помочь..

Мы хотим изменить плагин но сделали недочеты в коде.И не знаю как сделать это в меню выбор модели ст или тт. в зависимости от команды.
вот код
C-подобный:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>      


#define PLUGIN "Admin model+menu"
#define VERSION "2.0"
#define AUTHOR "musse"
        
public plugin_init() {
        
    register_clcmd("say /amodels", "amodels", ADMIN_LEVEL_G);
    register_plugin(PLUGIN, VERSION, AUTHOR);
}
        
public plugin_precache() {
   precache_model("models/player/ladyadmin_te/ladyadmin_te.mdl")
   precache_model("models/player/ladyadmin_ct/ladyadmin_ct.mdl")

        return PLUGIN_CONTINUE
}

public resetModel(id, level, cid) {
        if (get_user_flags(id) & ADMIN_LEVEL_G) {
                new CsTeams:userTeam = cs_get_user_team(id)
                if (userTeam == CS_TEAM_T) {
                        cs_set_user_model(id, "ladyadmin_te")
                }
                else if(userTeam == CS_TEAM_CT) {
                        cs_set_user_model(id, "ladyadmin_ct")
                }
                else {
                        cs_reset_user_model(id)
                }
        }

        return PLUGIN_CONTINUE
}

public plugin_precache() {
   precache_model("models/player/Nekot/Nekot.mdl")
   precache_model("models/player/Koshcka/Koshcka.mdl")

        return PLUGIN_CONTINUE
}

public resetModel(id, level, cid) {
        if (get_user_flags(id) & ADMIN_LEVEL_G) {
                new CsTeams:userTeam = cs_get_user_team(id)
                if (userTeam == CS_TEAM_T) {
                        cs_set_user_model(id, "Nekot")
                }
                else if(userTeam == CS_TEAM_CT) {
                        cs_set_user_model(id, "Koshcka")
                }
                else {
                        cs_reset_user_model(id)
                }
        }

        return PLUGIN_CONTINUE
}

public plugin_precache() {
   precache_model("models/player/ter/ter.mdl")
   precache_model("models/player/ct/ct.mdl")

  
        return PLUGIN_CONTINUE
}

public resetModel(id, level, cid) {
        if (get_user_flags(id) & ADMIN_LEVEL_G) {
                new CsTeams:userTeam = cs_get_user_team(id)
                if (userTeam == CS_TEAM_T) {
                        cs_set_user_model(id, "te")
                }
                else if(userTeam == CS_TEAM_CT) {
                        cs_set_user_model(id, "ct")
                }
                else {
                        cs_reset_user_model(id)
                }
        }

        return PLUGIN_CONTINUE
}

public amodels(id) {
               new i_Menu = menu_create("\g[Кровавый RELAX] \rВыбери \gмодель", "amodels_handler");
               menu_additem(i_Menu, "\gЛеди Админ", "1", 0);
               menu_additem(i_Menu, "\rСупер Леди", "2", 0);
               menu_additem(i_Menu, "\gБизнес Админ", "3", 0);
               menu_setprop(i_Menu, MPROP_NEXTNAME, "\gДалее");
               menu_setprop(i_Menu, MPROP_BACKNAME, "\rНазад");
               menu_setprop(i_Menu, MPROP_EXITNAME, "\gВыход");
        
               menu_display(id, i_Menu, 0)
        }
        
        public amodels_handler(id, menu, item) {
               if( item < 0 ) return PLUGIN_CONTINUE;
               new cmd[3], access, callback;
               menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
               new Choise = str_to_num(cmd)
               switch (Choise) {
               case 1: {
                      cs_set_user_model(id, "ladyadmin_te")
               }
               case 2: {
                      cs_set_user_model(id, "ladyadmin_ct")
               }
               case 3: {
                      cs_set_user_model(id, "Nekot")
               }
           case 4: {
                      cs_set_user_model(id, "Koshcka")
               }
           case 5: {
                      cs_set_user_model(id, "ter")
              }
           case 6: {
                      cs_set_user_model(id, "ct")
              }
        
    }
               return PLUGIN_HANDLED;
}
 

Kristina

Участник
Сообщения
5
Реакции
0
Меню составлено неправильно но и до этого имеются ошибки.Мы хотели бы чтобы в меню было всегдо 3 кнопки выбора и 6 моделей так как 1 ст и 1 тт (3x2)
 

SHAREN

Servers-Info.Ru
Сообщения
232
Реакции
32
Я так понимаю раз убрали "decl" из нового синтаксиса 1.7, т.е. теперь нельзя сделать так:
C-подобный:
public void OnGameFrame()
{
    decl String:name[1024];
    Format(name, sizeof(name), "много символов");
}
можно только так
C-подобный:
public void OnGameFrame()
{
    char name[1024];      // decl впереди не дает поставить.
    Format(name, sizeof(name), "много символов");
}

то во втором случае компилятор или плагин сам догадается не выставлять 1024 нулей если после этого надо сразу что-то туда вписывать?
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
во втором случае компилятор или плагин сам догадается не выставлять 1024 нулей
char аналогичен new, а значит, изначально забит "нулями".
В твоём случае, просто необходим static или глобальная переменная - слишком большой массив с очень частым вызовом.
 
Сверху Снизу