Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » ReSizePlayer (Помогите)
ReSizePlayer
pro-health Дата: Вторник, 16.09.2014, 05:08:13 | Сообщение # 1
Сообщений: 188
Репутация: 5 [ +/- ]
Играл на сервере у _Ws_ там линия за игроком.
Я хочу сделать что бы треил вкл. когда игроку изменили размер.
Вот код исправьте плиз.
Код
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#include <entity>

#define    PrecacheModel("materials/sprites/laserbeam.vmt", bool:preload=false);
   
public OnPluginStart()
{
  RegConsoleCmd("say_team", HookCommand);
  RegConsoleCmd("say", HookCommand);
}

public Action:HookCommand(client,argc)  
{  
  decl String:player[64],String:Hook_Command[32];  
  GetCmdArg(1,Hook_Command,sizeof(Hook_Command));  
  GetCmdArg(2,player,sizeof(player));  
   
  if(StrEqual(Hook_Command,"ac",false))  
  {  
   Menu(client);  
  }  
}

Menu(client)
{
   
  new Handle:hMenu = CreateMenu(Menu_handle);
  SetMenuTitle(hMenu, "Выберите:Функцыю");
   
  AddMenuItem(hMenu, "", "Дать обычный класс", 0);
  AddMenuItem(hMenu, "", "Дать средний класс", 0);
  AddMenuItem(hMenu, "", "Дать высший класс", 0);
   
  DisplayMenu(hMenu, client, 0);  
  return 0;
}

public Menu_handle(Handle:hMenu,MenuAction:action,client,slot)
{
  if(action==MenuAction_Select)
  {
   switch(slot)
   {
    case 0:
    {
     ResizePlayer0Target(client);
    }
    case 1:
    {
     ResizePlayerTarget(client);
    }
    case 2:
    {
     ResizePlayer2Target(client);
    }
   }
  }
   
  if(action==MenuAction_End)
  {
   CloseHandle(hMenu);
  }
}

ResizePlayer0Target(client)  
{  
  new Handle:Target_MenuResizePlayer0 = CreateMenu(UseResizePlayer0_handle);  
  SetMenuTitle(Target_MenuResizePlayer0, "Выберите Игрока:\n \n");  
  decl String:userid[15], String:name[32];  
  for (new i = 1; i <= MaxClients; i++)  
  {  
   if (IsClientInGame(i))  
   {  
    IntToString(GetClientUserId(i), userid, 15);  
    GetClientName(i, name, 32);  
    AddMenuItem(Target_MenuResizePlayer0, userid, name);  
   }  
  }  
  DisplayMenu(Target_MenuResizePlayer0, client, 0);  
}

public UseResizePlayer0_handle(Handle:Target_MenuResizePlayer0, MenuAction:action, client, option)  
{
  if (action == MenuAction_End)  
  {  
   CloseHandle(Target_MenuResizePlayer0);  
   return;  
  }  
  if (action != MenuAction_Select) return;  
  decl String:userid[15];
  new Float:vec[3];
  vec[2] -= 1;
  GetMenuItem(Target_MenuResizePlayer0, option, userid, 15);  
  new target = GetClientOfUserId(StringToInt(userid));  
  new hp = GetClientHealth(client);
  if (target > 0)  
  {
   if (IsClientInGame(client))
   {
        SetEntPropFloat(target, PropType:0, "m_flModelScale", 1.0, 0);
     SetEntPropFloat(target, PropType:0, "m_flHeadScale", 5.0, 0);
     SetEntProp(target, PropType:0, "m_iHealth", hp + 100, 4, 0);
      
    PrintToChat(target, "\x0700ff09Админ \x070015ff%N \x0700ff09изменил ваш класс.", client);
    PrintToChat(client, "\x0700ff09Игроку \x070015ff%N \x0700ff09изменён класс.", target);
     
    Menu(client);  
   }
   else
   {
    PrintToChat(client, "\x0700ff09Игрок \x070015ff%N \x0700ff09мёртв или в наблюдени выполнить действие не возможно", target);
    Menu(client);
   }
  }  
  else PrintToChat(client, "\x07131713Игрок не найден (вышел с сервера)");  
  Menu(client);  
}

ResizePlayerTarget(client)  
{  
  new Handle:Target_MenuResizePlayer = CreateMenu(UseResizePlayer_handle);  
  SetMenuTitle(Target_MenuResizePlayer, "Выберите Игрока:\n \n");  
  decl String:userid[15], String:name[32];  
  for (new i = 1; i <= MaxClients; i++)  
  {  
   if (IsClientInGame(i))  
   {  
    IntToString(GetClientUserId(i), userid, 15);  
    GetClientName(i, name, 32);  
    AddMenuItem(Target_MenuResizePlayer, userid, name);  
   }  
  }  
  DisplayMenu(Target_MenuResizePlayer, client, 0);  
}

public UseResizePlayer_handle(Handle:Target_MenuResizePlayer, MenuAction:action, client, option)  
{  
  if (action == MenuAction_End)  
  {  
   CloseHandle(Target_MenuResizePlayer);  
   return;  
  }  
  if (action != MenuAction_Select) return;  
  decl String:userid[15];
  new Float:vec[3];
  vec[2] -= 1;
  GetMenuItem(Target_MenuResizePlayer, option, userid, 15);  
  new target = GetClientOfUserId(StringToInt(userid));  
   new hp = GetClientHealth(client);
  if (target > 0)  
  {
   if (IsClientInGame(client))
   {
        SetEntPropFloat(target, PropType:0, "m_flModelScale", 1.5, 0);  
     SetEntProp(target, PropType:0, "m_iHealth", hp + 150, 4, 0);
      
    PrintToChat(target, "\x0700ff09Админ \x070015ff%N \x0700ff09изменил ваш класс.", client);
    PrintToChat(client, "\x0700ff09Игроку \x070015ff%N \x0700ff09изменён класс.", target);
   }
   else
   {
    PrintToChat(client, "\x0700ff09Игрок \x070015ff%N \x0700ff09мёртв или в наблюдени выполнить действие не возможно", target);
    Menu(client);
   }
  }  
  else PrintToChat(client, "\x07131713Игрок не найден (вышел с сервера)");  
  Menu(client);  
}

ResizePlayer2Target(client)  
{  
  new Handle:Target_MenuResizePlayer2 = CreateMenu(UseResizePlayer2_handle);  
  SetMenuTitle(Target_MenuResizePlayer2, "Выберите Игрока:\n \n");  
  decl String:userid[15], String:name[32];  
  for (new i = 1; i <= MaxClients; i++)  
  {  
   if (IsClientInGame(i))  
   {  
    IntToString(GetClientUserId(i), userid, 15);  
    GetClientName(i, name, 32);  
    AddMenuItem(Target_MenuResizePlayer2, userid, name);  
   }  
  }  
  DisplayMenu(Target_MenuResizePlayer2, client, 0);  
}

public UseResizePlayer2_handle(Handle:Target_MenuResizePlayer2, MenuAction:action, client, option)  
{  
  if (action == MenuAction_End)  
  {  
   CloseHandle(Target_MenuResizePlayer2);  
   return;  
  }  
  if (action != MenuAction_Select) return;  
  decl String:userid[15];
  new Float:vec[3];
  vec[2] -= 1;
  GetMenuItem(Target_MenuResizePlayer2, option, userid, 15);  
  new target = GetClientOfUserId(StringToInt(userid));  
   new hp = GetClientHealth(client);
  if (target > 0)  
  {
   if (IsClientInGame(client))
   {
        SetEntPropFloat(target, PropType:0, "m_flModelScale", 2.0, 0);
     SetEntProp(target, PropType:0, "m_iHealth", hp + 200, 4, 0);
     trail(target)
    
    PrintToChat(target, "\x0700ff09Админ \x070015ff%N \x0700ff09изменил ваш класс.", client);
    PrintToChat(client, "\x0700ff09Игроку \x070015ff%N \x0700ff09изменён класс.", target);
   }
   else
   {
    PrintToChat(client, "\x0700ff09Игрок \x070015ff%N \x0700ff09мёртв или в наблюдени выполнить действие не возможно", target);
    Menu(client);
   }
  }  
  else PrintToChat(client, "\x07131713Игрок не найден (вышел с сервера)");  
  Menu(client);  
}

trail(target)
{

  new sp_i = CreateEntityByName("env_spritetrail");  
  new Float:center[3];  
  GetClientAbsOrigin(target, center); //Получаем координату ног игрока  
  DispatchKeyValueVector(sp_i, "origin", center);  //Подготавливаем спавн в точке ног  
     DispatchKeyValue(sp_i, "lifetime", "2"); //Время жизни  
     DispatchKeyValue(sp_i, "startwidth", "1.0"); //Начальная ширина 1.0  
     DispatchKeyValue(sp_i, "endwidth", "2.0");  //Конечная тоже  
     DispatchKeyValue(sp_i, "spritename", "materials/sprites/laserbeam.vmt");  //Спрайт такой. Заранее прекэшнутый.  
     DispatchKeyValue(sp_i, "rendermode", "1"); //Видимый  
     DispatchKeyValue(sp_i, "rendercolor", "255 0 0"); //Красный  
     DispatchKeyValue(sp_i, "renderamt", "255");  //Полностью непрозрачен  
     DispatchSpawn(sp_i);  //Спавним  
//теперь привяжем его к игроку  
new String:name[128];  
GetClientName(target, name, sizeof(name)); //получаем имя игрока  
     SetVariantString(name);   //Ставим строку с именем игрока  
     AcceptEntityInput(sp_i, "SetParent"); //Привязываем к нему  
     AcceptEntityInput(sp_i, "ShowSprite"); //Показываем наш спрайт
    return Plugin_Continue;  
}
 
BarD Дата: Вторник, 16.09.2014, 11:48:03 | Сообщение # 2
Сообщений: 943
Репутация: 137 [ +/- ]
Я бы сделал так:

Код
#include <sourcemod>   
#include <sdktools>   
#include <cstrike>   
#include <sdkhooks>   
#include <entity>   

new chosenclass[MAXPLAYERS+1];
       
public OnPluginStart()   
{   
    RegConsoleCmd("say_team", HookCommand);   
    RegConsoleCmd("say", HookCommand);   
}   

public OnMapStart()
{
   PrecacheModel("materials/sprites/laserbeam.vmt");
}

public Action:HookCommand(client,argc)    
{    
    decl String:player[64],String:Hook_Command[32];    
    GetCmdArg(1,Hook_Command,sizeof(Hook_Command));    
    GetCmdArg(2,player,sizeof(player));    
       
    if(StrEqual(Hook_Command,"ac",false))    
    {    
     Menu(client);    
    }    
}   

Menu(client)   
{   
       
    new Handle:hMenu = CreateMenu(Menu_handle);   
    SetMenuTitle(hMenu, "Выберите Функцию:");   
       
    AddMenuItem(hMenu, "", "Дать обычный класс");   
    AddMenuItem(hMenu, "", "Дать средний класс");   
    AddMenuItem(hMenu, "", "Дать высший класс");   
       
    DisplayMenu(hMenu, client, 0);    
    return 0;   
}   

public Menu_handle(Handle:hMenu,MenuAction:action,client,slot)   
{   
    if(action==MenuAction_Select)   
    {   
     switch(slot)   
     {   
      case 0:   
      {   
       chosenclass[client] = 1;   
      }   
      case 1:   
      {   
       chosenclass[client] = 2;    
      }   
      case 2:   
      {   
       chosenclass[client] = 3;   
      }   
     }   
    }   
       
    else if(action==MenuAction_End)   
    {   
     CloseHandle(hMenu);   
    }   
    ChoosePlayerMenu(client);
}

ChoosePlayerMenu(client)    
{    
    new Handle:cmenu= CreateMenu(ChooseMenu_Select);    
    SetMenuTitle(cmenu, "Выберите Игрока:\n \n");    
    decl String:userid[15], String:name[32];    
    for (new i = 1; i <= MaxClients; i++)    
    {    
     if (IsClientInGame(i))    
     {    
      IntToString(GetClientUserId(i), userid, 15);    
      GetClientName(i, name, 32);    
      AddMenuItem(cmenu, userid, name);    
     }    
    }    
    DisplayMenu(cmenu, client, 0);    
}

public ChooseMenu_Select(Handle:cmenu, MenuAction:action, client, option)    
{    
    if (action == MenuAction_End)    
    {    
     CloseHandle(cmenu);    
     return;    
    }    
    if (action != MenuAction_Select) return;   
    decl String:userid[15];
GetMenuItem(cmenu, option, userid, 15);    
new target = GetClientOfUserId(StringToInt(userid));   
if (target>0)
{
if (chosenclass[client] > 0)
{
   ChangePlayerClass(target, chosenclass[client]);
PrintToChat(client, ""\x0700ff09Игроку \x070015ff%N \x0700ff09изменён класс.", target");
PrintToChat(target, "\x0700ff09Админ \x070015ff%N \x0700ff09изменил ваш класс.", client);   
chosenclass[client] = 0;
Menu(client);
}
else PrintToChat(client, "Ошибка");
}
else PrintToChat(client, "Игрок не найден!");
}

stock ChangePlayerClass(client, const class)
{
     new hp = GetClientHealth(client);
     if (class == 1)   
     {
      SetEntPropFloat(client, PropType:0, "m_flModelScale", 1.0, 0);    
       SetEntProp(client, PropType:0, "m_iHealth", hp + 100, 4, 0);   
     }
else if (class == 2)
    {
       SetEntPropFloat(client, PropType:0, "m_flModelScale", 1.5, 0);    
       SetEntProp(client, PropType:0, "m_iHealth", hp + 150, 4, 0);   
    }
else if (class == 3)
   {
     SetEntPropFloat(client, PropType:0, "m_flModelScale", 2.0, 0);   
       SetEntProp(client, PropType:0, "m_iHealth", hp + 200, 4, 0);
   }
trail(client);
}

stock trail(target)   
{   
    new sp_i = CreateEntityByName("env_spritetrail");    
    new Float:center[3];    
    GetClientAbsOrigin(target, center); //Получаем координату ног игрока    
    DispatchKeyValueVector(sp_i, "origin", center);  //Подготавливаем спавн в точке ног    
       DispatchKeyValue(sp_i, "lifetime", "2"); //Время жизни    
       DispatchKeyValue(sp_i, "startwidth", "1.0"); //Начальная ширина 1.0    
       DispatchKeyValue(sp_i, "endwidth", "2.0");  //Конечная тоже    
       DispatchKeyValue(sp_i, "spritename", "materials/sprites/laserbeam.vmt");  //Спрайт такой. Заранее прекэшнутый.    
       DispatchKeyValue(sp_i, "rendermode", "1"); //Видимый    
       DispatchKeyValue(sp_i, "rendercolor", "255 0 0"); //Красный    
       DispatchKeyValue(sp_i, "renderamt", "255");  //Полностью непрозрачен    
       DispatchSpawn(sp_i);  //Спавним    
//теперь привяжем его к игроку    
new String:name[128];    
GetClientName(target, name, sizeof(name)); //получаем имя игрока    
       SetVariantString(name);   //Ставим строку с именем игрока    
       AcceptEntityInput(sp_i, "SetParent"); //Привязываем к нему    
       AcceptEntityInput(sp_i, "ShowSprite"); //Показываем наш спрайт   
      return Plugin_Continue;    
}


Сам не тестил, но должно работать.

P.S. SetEntPropFloat(target, PropType:0, "m_flHeadScale", 5.0, 0); не существует уже. В новой css такого оффсета нет.


Сообщение отредактировал BarD - Вторник, 16.09.2014, 11:49:12
 
pro-health Дата: Вторник, 16.09.2014, 12:48:30 | Сообщение # 3
Сообщений: 188
Репутация: 5 [ +/- ]
BarD, спс только.
Не
Код
PrintToChat(client, ""\x0700ff09Игроку \x070015ff%N \x0700ff09изменён класс.", target");


а
Код
PrintToChat(client, "\x0700ff09Игроку \x070015ff%N \x0700ff09изменён класс.", target);
 
BarD Дата: Вторник, 16.09.2014, 14:14:43 | Сообщение # 4
Сообщений: 943
Репутация: 137 [ +/- ]
Да, я просто копировал неудачно)
 
pro-health Дата: Вторник, 16.09.2014, 18:50:28 | Сообщение # 5
Сообщений: 188
Репутация: 5 [ +/- ]
BarD, аа забыл треил не робит =(
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » ReSizePlayer (Помогите)
  • Страница 1 из 1
  • 1
Поиск: