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

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

  • Страница 1 из 1
  • 1
Менюшка)
Tokami Дата: Четверг, 23.01.2014, 20:46:27 | Сообщение # 1
Сообщений: 238
Репутация: 19 [ +/- ]
Вот мой типо новый плагин)) как сделать чтоб могли открыть только кт?)
И как до делать всетаки аптечку исход аптечки по ниже
Код

#include <cstrike>
#include <sdktools>
#include <sdkhooks>
#include <sourcemod>

#define HEALTHKIT_SOUND    "items/medshot4.wav"
#define HEALTHKIT_MODEL    "models/items/healthkit.mdl"

public Plugin:myinfo =
{
  name = "CTmenu",
  author = "Tokami",
  description = "CTmenu",
  url = "criminaljail.clan.su"
};
public OnPluginStart()  
{  
       RegConsoleCmd("sm_ct", test);  
}  

public Action:test(client, args)  
{  
       if (client > 0 && args < 1) ShowMyPanel(client);  
       return Plugin_Handled;  
}  

ShowMyPanel(client)  
{  
     new Handle:panel = CreatePanel();  
     SetPanelTitle(panel, "Меню CT:\n \n");  
     DrawPanelItem(panel, "Аптечка");  
     DrawPanelItem(panel, "Разработка");  
     DrawPanelItem(panel, "Разработка");  
     DrawPanelItem(panel, "Разработка");  
     DrawPanelItem(panel, "Разработка");
  DrawPanelText(panel, "\n ");
  DrawPanelItem(panel, "Выход");
  SendPanelToClient(panel, client, Select_Panel, 0);
  CloseHandle(panel);
  ClientCommand(client, "playgamesound items/nvg_off.wav");
}

// Создания меню

public Select_Panel(Handle:panel, MenuAction:action, client, option)  
{  
       if (action == MenuAction_Select)  
       {  
           PrintToChat(client, "Выбрана опция: %d", option);  
           if (option < 5) ShowMyPanel(client);  
       }  
}

Аптечка
Код

#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

#define VERSION "1.0"

#define TEAM_T 2
#define TEAM_CT 3

#define HEALTHKIT_SOUND    "items/medshot4.wav"
#define HEALTHKIT_MODEL    "models/items/healthkit.mdl"

//Cvars
new Handle:g_hMedKitCount = INVALID_HANDLE;
new Handle:g_hMedKitLifeTime = INVALID_HANDLE;
new Handle:g_hMedKitRegenTime = INVALID_HANDLE;

//Client variables
new g_iMedKitCount[MAXPLAYERS+1];

//Timers
new Handle:g_hMedKitTimer[2048];
new Handle:g_hClientRegenKits[MAXPLAYERS+1];

//Offset
new g_iCollision  = -1;
new g_iSolidFlags    = -1;

public Plugin:myinfo = {
  name = "JailMedKit",
  author = "s1dex",
  description = "CT can throw medkits",
  version = VERSION,
  url = "http://adminexe.ru/showthread.php?t=773"
};

public OnPluginStart()
{
  g_hMedKitCount = CreateConVar("sm_jailmedkit_count", "2", "Максимальное количетсво аптечек на руках у CT");
  g_hMedKitLifeTime = CreateConVar("sm_jailmedkit_lifetime", "15", "Время \"жизни\" аптечек");
  g_hMedKitRegenTime = CreateConVar("sm_jailmedkit_regentime", "10", "Время регенерации аптечек");
   
  RegConsoleCmd("hl", CmdThrowMedKit);
   
  HookEvent("player_spawn", EventPlayerSpawn);
   
  if((g_iCollision = FindSendPropOffs("CBaseEntity", "m_Collision")) == -1)
   LogError("Could not find offset for CBaseEntity::m_Collision");
   
  if((g_iSolidFlags = FindSendPropOffs("CBaseEntity", "m_usSolidFlags")) == -1)
   LogError("Could not find offset for CBaseEntity::m_usSolidFlags");
    
  AutoExecConfig(true, "jailmedkit");
}

public OnClientPutInServer(client)
{
  if (g_hClientRegenKits[client] != INVALID_HANDLE)
   CloseHandle(g_hClientRegenKits[client]);
  g_hClientRegenKits[client] = CreateTimer(GetConVarFloat(g_hMedKitRegenTime), TimerRegen, client, TIMER_REPEAT);
}

public OnClientDisconnect(client)
{
  if (g_hClientRegenKits[client] != INVALID_HANDLE)
   CloseHandle(g_hClientRegenKits[client]);
   
  g_hClientRegenKits[client] = INVALID_HANDLE;
}

public OnMapStart()
{
  PrecacheModel(HEALTHKIT_MODEL, true);
  PrecacheSound(HEALTHKIT_SOUND, true);
}

public Action:OnTouch(medkit, entity)
{
  if (entity < 1 || entity > MaxClients || !IsClientInGame(entity) || !IsPlayerAlive(entity) || GetEntProp(medkit, Prop_Send, "m_PredictableID") == entity || GetClientHealth(entity) == 100) {
   return;
  }
   
  SetEntityHealth(entity, GetEntProp(entity, Prop_Data, "m_iMaxHealth"));
   
  new Float:origin[3];
  EmitSoundToAll(HEALTHKIT_SOUND, entity, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, origin, NULL_VECTOR, true, 0.0);
    
  AcceptEntityInput(medkit, "Kill");
  if (g_hMedKitTimer[medkit] != INVALID_HANDLE)
   CloseHandle(g_hMedKitTimer[medkit]);
   
  g_hMedKitTimer[medkit] = INVALID_HANDLE;
}

public Action:CmdThrowMedKit(client, args)
{
  if (GetClientTeam(client) != TEAM_CT) {
   PrintToChat(client, "\x03[Аптечка] \x01Данную команду могут использовать только CT");
   return Plugin_Handled;
  }
   
  if (!IsPlayerAlive(client)) {
   PrintToChat(client, "\x03[Аптечка] \x01Вы мертвы");
   return Plugin_Handled;
  }
   
  if (!g_iMedKitCount[client]) {
   PrintToChat(client, "\x03[Аптечка] \x01У Вас нет доступных аптечек");
   return Plugin_Handled;
  }
   
  CreateMedKit(client);
  g_iMedKitCount[client]--;
  return Plugin_Handled;
}

public Action:EventPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  g_iMedKitCount[client] = GetConVarInt(g_hMedKitCount);
   
  //Advert
  if (GetClientTeam(client) == 3)
   PrintToChat(client, "\x03[Аптечка] \x01Вы можете кинуть аптечку командой !hl");
}

public Action:TimerRegen(Handle:timer, any:client)
{
  if (IsClientInGame(client) && g_iMedKitCount[client] < GetConVarInt(g_hMedKitCount))
   g_iMedKitCount[client]++;
   
  return Plugin_Continue;
}

public Action:TimerDissolve(Handle:timer, any:entity)
{
  if (IsValidEntity(entity))
  {
   decl String:dname[16];
   Format(dname, sizeof(dname), "dis_%d", entity);
   DispatchKeyValue(entity, "targetname", dname);
   new diss = CreateEntityByName("env_entity_dissolver");
   DispatchKeyValue(diss, "dissolvetype", "3");
   DispatchKeyValue(diss, "target", dname);
   AcceptEntityInput(diss, "Dissolve");
   AcceptEntityInput(diss, "kill");
  }
   
  g_hMedKitTimer[entity] = INVALID_HANDLE;
}

stock CreateMedKit(client)
{
  new entity = CreateEntityByName("prop_physics");
  new Float:vecPos[3], Float:vecVel[3], Float:clAngles[3], Float:fwd[3];
  GetClientEyePosition(client, vecPos);
  SetEntityModel(entity, HEALTHKIT_MODEL);
  SetEntProp(entity, Prop_Data, "m_CollisionGroup", 4);
  SetEntProp(entity, Prop_Data, "m_MoveCollide", 0);
  SetSolidFlags(entity, 152);
  SetEntProp(entity, Prop_Send, "m_PredictableID", client);
  SetEntityMoveType(entity, MOVETYPE_VPHYSICS);
   
  GetClientAbsAngles(client, clAngles);
  GetAngleVectors(clAngles, fwd, NULL_VECTOR, NULL_VECTOR);
  NormalizeVector(fwd, vecVel);
  ScaleVector(vecVel, 150.0);
   
  TeleportEntity(entity, vecPos, NULL_VECTOR, NULL_VECTOR);
  DispatchSpawn(entity);
  TeleportEntity(entity, NULL_VECTOR, NULL_VECTOR, vecVel);
   
  SDKHook(entity, SDKHook_StartTouchPost, OnTouch);
  g_hMedKitTimer[entity] = CreateTimer(GetConVarFloat(g_hMedKitLifeTime), TimerDissolve, entity);
}

SetSolidFlags(iEntity, iFlags)
{
  if(g_iCollision == -1 || g_iSolidFlags == -1) return;
  SetEntData(iEntity, g_iCollision + g_iSolidFlags, iFlags, 2, true);
}
 
Darkeneez Дата: Пятница, 24.01.2014, 05:30:14 | Сообщение # 2
Сообщений: 221
Репутация: 18 [ +/- ]
if (GetClientTeam(client) != TEAM_CT) {
PrintToChat(client, "\x03[Аптечка] \x01Данную команду могут использовать только CT");
return Plugin_Handled;
}
 
Naykon Дата: Пятница, 24.01.2014, 09:47:45 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
public Action:test(client, args)
{
if (client > 0 && args < 1 && GetClientTeam(client) == 3) ShowMyPanel(client);
return Plugin_Handled; //Зачем? На засоряй код ненужной фигней
}


Сообщение отредактировал Naykon - Пятница, 24.01.2014, 09:49:32
 
Tokami Дата: Пятница, 24.01.2014, 17:37:39 | Сообщение # 4
Сообщений: 238
Репутация: 19 [ +/- ]
Naykon, Смешно выходит то что ты помогаешь тем более мне) но спасибо большое))

Добавлено (24.01.2014, 17:37:39)
---------------------------------------------
Сделал работает но только ошибка когда CT пишет команду меню открывается но ему в чат пишет Данную команду могут использовать только CT

Код
PrintToChat(client, "\x03[Аптечка] \x01Данную команду могут использовать только CT");
 
Jon4ik Дата: Вторник, 04.02.2014, 14:34:59 | Сообщение # 5
Сообщений: 278
Репутация: 7 [ +/- ]
а как сделать несколько команд например !hl и !uw
 
Vor4uN Дата: Суббота, 22.02.2014, 17:40:37 | Сообщение # 6
Сообщений: 49
Репутация: 3 [ +/- ]
Цитата Jon4ik ()
а как сделать несколько команд например !hl и !uw


Посмотри как тут реализовано, по моему самый правильный способ.

Код
#include <sourcemod>
#include <sdktools>

#pragma semicolon 1

#define PLUGIN_VERSION  "1.0"
#define PLUGIN_AUTHOR    "LegenD"

#define SOUND_FILE    "misc/medic.wav"

new Handle:gPluginEnabled = INVALID_HANDLE;
new Handle:gHealthAmount = INVALID_HANDLE;
new Handle:gMinHealth = INVALID_HANDLE;
new Handle:gMedicCost = INVALID_HANDLE;
new Handle:gShowInChat = INVALID_HANDLE;
new Handle:gMaxTimeUse = INVALID_HANDLE;

new gPlayerMoney;
new gUsedMedic[ 33 ];

public Plugin:myinfo =    
{
    name = "CSS Medic",
    author = PLUGIN_AUTHOR,
    description = "You can call a medic.",
    version = PLUGIN_VERSION,
    url = "www.funservers.ru"
};
public OnPluginStart()
{
    HookEvent( "player_spawn", Event_PlayerSpawn );
    RegConsoleCmd( "say", Command_Medic );
    RegConsoleCmd( "say_team", Command_Medic );

    CreateConVar( "cssmedic_version", PLUGIN_VERSION, "CSS Medic Version", FCVAR_PLUGIN | FCVAR_SPONLY | FCVAR_REPLICATED | FCVAR_NOTIFY );

    gPluginEnabled = CreateConVar( "css_medic", "1" );
    gMinHealth = CreateConVar( "css_medic_minhealth", "98" );
    gHealthAmount = CreateConVar( "css_medic_healhealth", "100" );
    gMedicCost = CreateConVar( "css_medic_cost", "1000" );
    gShowInChat = CreateConVar( "css_medic_showcall", "1" );
    gMaxTimeUse = CreateConVar( "css_medic_maxuse", "3" );
       
    gPlayerMoney = FindSendPropOffs( "CCSPlayer", "m_iAccount" );
}
public OnClientConnected( id )
{
    gUsedMedic[ id ] = 0;
}
public OnClientDisconnect( id )
{
    gUsedMedic[ id ] = 0;
}
public OnMapStart()
{
    decl String:MedicSound[ 100 ];
    FormatEx( MedicSound, sizeof( MedicSound ) - 1, "sound/%s", SOUND_FILE );
       
    if( FileExists( MedicSound )  )
    {
     AddFileToDownloadsTable( MedicSound );
     PrecacheSound( SOUND_FILE, true );
    }
}
public Action:Event_PlayerSpawn( Handle:event, const String:name[], bool:dontBroadcast )
{
    if( GetConVarInt( gPluginEnabled ) == 1 )
    {
     new id = GetClientOfUserId( GetEventInt( event, "userid" ) );

     gUsedMedic[ id ] = 0;
    }
}
public Action:Command_Medic( id, args )
{
    decl String:Said[ 128 ];

    GetCmdArgString( Said, sizeof( Said ) - 1 );
    StripQuotes( Said );
    TrimString( Said );
       
    if( StrEqual( Said, "!medic" ) || StrEqual( Said, "!doctor" ) || StrEqual( Said, "медик" ) || StrEqual( Said, "vtl" ) || StrEqual( Said, "мед" )  )
    {
     if( GetConVarInt( gPluginEnabled ) == 0 )
     {
      PrintToChat( id, "  \x01Извенни, ты не можешь вызвать\x04медика!" );
         
      return Plugin_Continue;
     }
         
     if( !IsPlayerAlive( id ) )
     {
      PrintToChat( id, "  \x01Ты не можешь вызвать\x04медика! \x01Ты дохлый!" );
        
      return Plugin_Continue;
     }
       
     new maxtime = GetConVarInt( gMaxTimeUse );

     if( gUsedMedic[ id ] >= maxtime )
     {
      PrintToChat( id, "  \x01Ты не смог вызвать \x04медика,\x01так как больше \x03%d \x01 раза нельзя!", maxtime );
         
      return Plugin_Continue;
     }
        
     new money = GetClientMoney( id );
     new cost = GetConVarInt( gMedicCost );
        
     if( money < cost )
     {
      PrintToChat( id, "  \x01У тебя нет денег для вызова \x04медика\x01 ! Нужно %d$", cost );
         
      return Plugin_Continue;
     }
        
     if( GetClientHealth( id ) >= GetConVarInt( gMinHealth ) )
     {
      PrintToChat( id, "  \x01Тебе не нужен \x04медик!!!\x01! Вперед за фрагами!" );
         
      return Plugin_Continue;
     }
        
     gUsedMedic[ id ]++;

     SetEntProp( id, Prop_Data, "m_iHealth", GetConVarInt( gHealthAmount ) );
     SetClientMoney( id, money - cost );
     PrintToChat( id, "  \x01Сейчас подлечим!\x01Не ссы." );
       
     if( GetConVarInt( gShowInChat ) != 0 )
     {
      decl String:Name[ 32 ];
      GetClientName( id, Name, sizeof( Name ) - 1 );

      PrintToChatAll( "\x03%s \x01Зовет\x04медика!", Name );
     }
        
     new Float:fOrigin[ 3 ];
     GetClientAbsOrigin( id, Float:fOrigin );
        
     EmitAmbientSound( SOUND_FILE, fOrigin, id, SNDLEVEL_CONVO );
     AttachClientIcon( id );
    }
       
    return Plugin_Continue;
}    
stock SetClientMoney( index, money )
{
    if( gPlayerMoney != -1 )
    {
     SetEntData( index, gPlayerMoney, money );
    }
}
stock GetClientMoney( index )
{
    if( gPlayerMoney != -1 )
    {
     return GetEntData( index, gPlayerMoney );
    }
       
    return 0;
}
stock AttachClientIcon( index )
{
    TE_Start( "RadioIcon" );
    TE_WriteNum( "m_iAttachToClient", index );
    TE_SendToAll();
}


Сообщение отредактировал Vor4uN - Суббота, 22.02.2014, 17:43:00
 
  • Страница 1 из 1
  • 1
Поиск: