Скрипты связанный с оружием

Тема в разделе "Запросы", создана пользователем Черная вдова, 2 авг 2013.

  1. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    Как узнать какое оружие у игрока в слотах и как его забрать
     
  2. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Код:
    new iEntity = GetPlayerWeaponSlot(iClient, 0); // берем оружие из первого слота
    if ( iEntity != -1 ) // если оно есть
    {
    	decl String:szClassName[64]; // для названия класса оружия
    	GetEntityClassname(iEntity, szClassName, sizeof(szClassName) - 1); // берем название
    	PrintToChat(iClient, "weapon in primary slot: %s", szClassName); // выводим на экран
    			
    	AcceptEntityInput(iEntity, "kill"); // уничтожаем оружие
    }
    iEntity = GetPlayerWeaponSlot(iClient, 1); // аналогично для второго слота (пистолеты)
    if ( iEntity != -1 )
    {
    	decl String:szClassName[64];
    	GetEntityClassname(iEntity, szClassName, sizeof(szClassName) - 1);
    	PrintToChat(iClient, "weapon in secondary slot: %s", szClassName);
    			
    	AcceptEntityInput(iEntity, "kill");
    }
    Название оружия будет видa weapon_название_оружия, например, weapon_usp.
    При таком коде будет удалено оружие, чтобы автоматически переключится на другое (т.к. после этого кода в руках у игрока ничего не будет или будет визуальный баг), то нужно заставить игрока сменить оружие, лучше всего для этого подходит:
    Код:
    ClientCommand(iClient, "lastinv");
    Для подсчета числа гранат я использую следующий код:
    1) объявить глобальную переменную для оффсета
    Код:
    new g_iAmmoOffset;
    2) OnPluginStart()
    Код:
    g_iAmmoOffset = FindSendPropInfo("CCSPlayer", "m_iAmmo");
    3) Получить количество HE гранат:
    Код:
    GetEntData(iClient, g_iAmmoOffset + 44);
    Количество flash гранат:
    Код:
    GetEntData(iClient, g_iAmmoOffset + 48);
    Количество smoke гранат:
    Код:
    GetEntData(iClient, g_iAmmoOffset + 52);
    Ну а удалять их так же - циклом:
    Код:
    while ((iEntity = GetPlayerWeaponSlot(iClient, 3)) != -1)
    {
    	AcceptEntityInput(iEntity, "kill");
    }
     
    Серый™, zig_ro и Черная вдова нравится это.
  3. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    PHP:
    #include <sourcemod>
    #include <sdktools>

    public OnPluginStart()
    {
        
    RegConsoleCmd("test"CallBack);
    }

    public 
    Action:CallBack(clientargs)
    {
        if (
    client 0)
        {
            if (
    IsPlayerAlive(client))
            {
                
    decl weaponcountString:className[50];
                for (new 
    05i++)
                {
                    if ((
    weapon GetPlayerWeaponSlot(clienti)) > 0)
                    {
                        
    GetEntityClassname(weaponclassNamesizeof(className));
                        
    PrintToChat(client"%d. Обнаружено: %s", ++countclassName);
                        
    AcceptEntityInput(weapon"Kill");
                    }
                }
            }
        }

        return 
    Plugin_Handled;
    }
     
    Черная вдова нравится это.
  4. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    The End Is Near..., если у человека больше двух гранат, то твой код удалит лишь одну.