Удаление всех гранат игрока

Тема в разделе "Программирование / Скриптинг", создана пользователем V-Rico, 19 янв 2013.

  1. V-Rico

    V-Rico SM Скриптер (Skype: v-rico.95)

    Сообщения:
    22
    Симпатии:
    9
    Всем привет, столкнулся с маленькой проблемкой. Такой код:
    Код:
    new weaponIndex;
    				while ((weaponIndex = GetPlayerWeaponSlot(client, 3)) != -1)
    				{
    					RemovePlayerItem(client, weaponIndex);
    					RemoveEdict(weaponIndex);
    				}
    Изначально у меня 4 гранаты: НЕ, дым, 2 слепы. После исполнения данного кода у меня остается одна флешка, а я хочу убрать все. Как реализовать?
     
  2. V-Rico

    V-Rico SM Скриптер (Skype: v-rico.95)

    Сообщения:
    22
    Симпатии:
    9
    AlmazON, эм... flashlight отвечает за возможность использования фонарика, а не флешки :D
     
  3. Scarface_slv

    Scarface_slv

    Сообщения:
    228
    Симпатии:
    47
    Странно вроде код написан правильно, попробуй вместо != -1 так > 0 хотя разницы вроде нет)
    или после кода снова проверь есть ли еще какая ни будь граната
    weaponIndex = GetPlayerWeaponSlot(client, 3)
    if(weaponIndex != -1) RemovePlayerItem(client, weaponIndex);
     
  4. Impulse72

    Impulse72

    Сообщения:
    246
    Симпатии:
    170
    PHP:
    /* Plugin Template generated by Pawn Studio */

    #include <sourcemod>
    #pragma tabsize 0
    #include <sdktools>

    public Plugin:myinfo 
    {
        
    name "DelGrenades",
        
    author "Impulse",
        
    description "",
        
    version "1.0",
        
    url ""
    }

    public 
    OnPluginStart()
    {
        
    RegConsoleCmd("del"Command_Test);
    }

    public 
    Action:Command_Test(clientargs)
    {
        
    RemoveGrenades(client"weapon_hegrenade");
        
    RemoveGrenades(client"weapon_smokegrenade");
        
    RemoveGrenades(client"weapon_flashbang");
    }

    RemoveGrenades(clientString:weapon[])
    {
        new 
    index = -1; new owner;
        while ((
    index FindEntityByClassname(indexweapon)) >= 0)
        {
            if (!
    IsValidEdict(index))
                return;
            
    owner GetEntPropEnt(indexProp_Send"m_hOwner");
            if (
    owner == client)
            
    AcceptEntityInput(index"Kill");
        }
        return;
    }

    Удаляет все гранаты с персонажа при написании !del, ну это так... Примерчик.

    -1 отсутствует, 0 и более присутствует. Вообще пустяк :)
     
    Руслан Ахметшин и V-Rico нравится это.
  5. ☆★☆БАТЯ☆★☆™

    ☆★☆БАТЯ☆★☆™

    Сообщения:
    2.585
    Симпатии:
    1.341
    Ссылка на авторитетный сайт? :-D
     
    V-Rico нравится это.
  6. Scarface_slv

    Scarface_slv

    Сообщения:
    228
    Симпатии:
    47
    Последнее редактирование: 20 янв 2013
    V-Rico нравится это.
  7. V-Rico

    V-Rico SM Скриптер (Skype: v-rico.95)

    Сообщения:
    22
    Симпатии:
    9
    Impulse72, в твоём коде есть ошибка: будет постоянный цикл. Знаешь почему? У тебя же FindEntityByClassname вернет самое маленькое значение индекса гранаты, которая есть на сервере. Если она не будет принадлежать игроку, то у тебя будет этот цикл раз за разом повторяться. Жизненный пример: на сервере 2 флешки. Флешка с индексом 200 (лежит на полу) и флешка с индексом 201 (у игрока). Давай прокрутим цикл:
    1)
    Код:
    while ((index = FindEntityByClassname(index, weapon)) >= 0)
    Вернёт 200.

    2)
    Код:
    if (!IsValidEdict(index)) 
    return; 
    owner = GetEntPropEnt(index, Prop_Send, "m_hOwner");
    Думаю, что owner = 0 (или 1, или -1).

    3)
    Код:
    if (owner == client)
    Проверка не пройдена, возвращаемся к while.

    4)
    Код:
    while ((index = FindEntityByClassname(index, weapon)) >= 0)
    Снова вернёт 200.

    5) см. выше
     
  8. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    (index = FindEntityByClassname(index, weapon))

    значение index приравниваем 200, FindEntityByClassname(index) - если тут index == 200, то функция начнет с индекса 200, т.е. те что выше 200, и вернется флэшка под номером 201!!
     
    V-Rico нравится это.
  9. V-Rico

    V-Rico SM Скриптер (Skype: v-rico.95)

    Сообщения:
    22
    Симпатии:
    9
    FrozDark, да, мой косяк. Невнимательно прочитал описание функции.
     
  10. Impulse72

    Impulse72

    Сообщения:
    246
    Симпатии:
    170
    Ну я же написал, что это просто пример использования функций см, набросанный недумая за 5 минут :)
     
  11. Impulse72

    Impulse72

    Сообщения:
    246
    Симпатии:
    170
    ilga80, Оффтоп
     
    Руслан Ахметшин и AlmazON нравится это.