Вопросы по модулями Shop

Тема в разделе "Программирование / Скриптинг", создана пользователем B1g, 8 мар 2015.

  1. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    В общем пишу модули скромненькие (по своим силам) для шопа от Фроза. Так вот написал модуль Полет , ну т.е. пока игрок жмёт на E то он летит , как только E отпускается то игрок падает на землю. Так вот , все работает , но я хочу исправить 1 варнинг (Warning 213: tag mismatch.)
    Предупреждение выдает в строке выделенной жирным.

    PHP:
    OnButtonUseReleased(iClient)
    {
        {
            
    SetEntityMoveType(iClientMOVETYPE_WALK);
        }
        return 
    Plugin_Handled;
    }
    return Plugin_Handled;

    Подскажите как исправить? Весь код модуля дам только людям знающим , а то как всегда сольют всё в паблик. Спасибо заранее!
     
  2. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Fly

    Спасибо. Все в норме . А не подскажешь как сделать чтобы когда игрок отпустил E , и упал с высоты у него хп не отнялись? Пытался этот плагин -> http://hlmod.ru/forum/plaginy-dlya-sourcemod/2048-no-fall-damage-v1-0-a.html в свой пихнуть , не получилось.
     
  3. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Re: [Shop] Fly

    В общем-то, это лучший вариант. Только там есть конкретное указание от "высоты", иначе можно сделать вообще запрет урона от всего сервера.
    Вообще, так то у тебя получится, что урон с высоты всегда будет отключён. Ты же хочешь лишь на время (таймером тоже не очень)?
     
  4. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Fly

    А как в том плагине убрать вообще ограничение высоты? Просто чтобы во время когда игрок упал использовав полёт, у него не отнялись хп?
     
  5. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Fly

    Не понял я тебя в общем можеть дать код плагина , который делает так чтобы при падении с любой высоты не отнимались хп.
     
  6. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Re: [Shop] Fly

    Когда игрок взлетает (сработка твоего кода), то делаешь SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); с вызовом:
    PHP:
    public Action:OnTakeDamage(client, &attacker, &inflictor, &Float:damage, &damagetype)
    {
        
    SDKUnhook(clientSDKHook_OnTakeDamageOnTakeDamage);
        if(
    damagetype DMG_FALL) return Plugin_Handled;
        return 
    Plugin_Continue;
    }
    Думаю, сработает и так.
     
  7. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Fly

    Подскажите как тут сделать проверку на команду? Ну т.е чтобы спеки не могли использовать данную функцию и еще чтобы при падении с высоты при использовании полёта не отнимались хп?
    PHP:
    public Action:OnPlayerRunCmd(iClient, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon)
    {
        static 
    iPrevButtons[MAXPLAYERS+1];
        
        if ((
    buttons IN_USE) && !(iPrevButtons[iClient] & IN_USE))
        {
            if (
    OnButtonUsePress(iClient) != Plugin_Continue)
            {
                
    buttons &= ~IN_USE;
            }
        }
        else if (!(
    buttons IN_USE) && (iPrevButtons[iClient] & IN_USE))
        {
            
    OnButtonUseReleased(iClient);
        }
        
    iPrevButtons[iClient] = buttons;
        return 
    Plugin_Continue;
    }

    Action:OnButtonUsePress(iClient)
    {
        if (
    g_bHasFL[iClient] && IsPlayerAlive(iClient))
        {
            if (
    GetEntityMoveType(iClient) == MOVETYPE_FLYSetEntityMoveType(iClientMOVETYPE_WALK);
            else if (!(
    GetEntityFlags(iClient) & FL_ONGROUND)) SetEntityMoveType(iClientMOVETYPE_FLY);
        }
        return 
    Plugin_Continue;
    }

    OnButtonUseReleased(iClient)
    {
        {
            
    SetEntityMoveType(iClientMOVETYPE_WALK);
        }
    }
     
  8. neatek3

    neatek3

    Сообщения:
    124
    Симпатии:
    127
    Re: [Shop] Fly

    Я в шоке от этого момента:
    PHP:
    if (OnButtonUsePress(iClient) != Plugin_Continue)
    и этого внутри OnPlayerRunCmd
    PHP:
    static iPrevButtons[MAXPLAYERS+1];
    Ну да ладно...

    Проверку команд можешь сделать в этом блоке:
    PHP:
    Action:OnButtonUsePress(iClient)
    Примерно так:
    PHP:
    if (g_bHasFL[iClient] && IsPlayerAlive(iClient) && GetClientTeam(iClient) > 1)
    Не знаю, будет ли оно несколько раз проверятся, ибо OnPlayerRunCmd опасная вещь.
    думаю это предотвращает iPrevButtons[iClient], так что все нормально.

    Сударь, используйте SDKHooks.

    PHP:
    public Action:OnTakeDamage(client, &attacker, &inflictor, &Float:damage, &damagetype)
    AlmazON, не правильно написал, ты блокируешь весь урон от падения.
    А он сказал - "при падении с высоты при использовании полёта"

    PHP:
    public OnClientPutInServer(client)
    {
        
    SDKHook(clientSDKHook_OnTakeDamageOnTakeDamage);
    }

    public 
    OnClientDisconnect(client)
    {
        
    SDKUnhook(clientSDKHook_OnTakeDamageOnTakeDamage);
    }

    public 
    Action:OnTakeDamage(client, &attacker, &inflictor, &Float:damage, &damagetype)
    {
        
    /* Делаешь проверку валидности клиента и прочее */
    }

    Слушай, а не проще просто сделать так, чтобы урон на падение не шёл на команду Террористов?
    У тебя же я так понимаю Props сервер.

    Если не Props, то тогда, нужно делать задержку после отпускания кнопки E, и делать "смертным" человека.
    Добавляем bool для всех игроков, при отпускании кнопки запускается таймер, можно сделать на несколько секунд, или до приземления, и тогда делать "смертным".
    Всё это очень плохо.

    ...
     
    Последнее редактирование: 9 мар 2015
  9. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Fly

    Можно примерно готовый код?
     
  10. neatek3

    neatek3

    Сообщения:
    124
    Симпатии:
    127
    Re: [Shop] Fly

    Ты не ответил на мои вопросы, которые я подредактировал.

    Я тебе написал всю логику работы того, что тебе нужно.

    Тебе осталось лишь это всё написать и всё! :)
     
  11. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.540
    Симпатии:
    1.984
    Re: [Shop] Fly

    Ты написал ещё хуже, сразу отлавливая событие урона. И всмотрись в мой код - там идёт отключение сразу после первого удара, коим и будет являться падение после отпускания кнопки. Другое дело, как это адекватно будет работать.
    Всё это было сказано, не надо ля-ля.
     
  12. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.021
    Симпатии:
    620
    Re: [Shop] Fly

    neatek3, Оффтоп
     
    neatek3 нравится это.
  13. neatek3

    neatek3

    Сообщения:
    124
    Симпатии:
    127
    Re: [Shop] Fly

    Оффтоп

    PHP:
    public Action:OnTakeDamage(client, &attacker, &inflictor, &Float:damage, &damagetype

        
    SDKUnhook(clientSDKHook_OnTakeDamageOnTakeDamage); 
        if(
    damagetype DMG_FALL) return Plugin_Handled
        return 
    Plugin_Continue
    }  
    Я бы сделал как я написал, потому что обычно в этой функции у меня еще другие обработки, не только падение.
    В любом случае можно попробовать.
     
  14. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Помогите ребят. Делаю модуль для шопа от фроза . Есть проблемы , не могу зарегистрировать модуль в категории Дополнительно, и кучка ошибочек. И нужно прикрутить таймер , чтобы когда в чат писали !st сообщение выводилось после введёной команды а не наоборот.
    Суть плагина в том что игрок пишет в чат !st и его команда меняется на противоположную .
    Вот код :
    PHP:
    #pragma semicolon 1
    #include <sourcemod>
    #include <sdktools>
    #include <cstrike>
    #include <sdktools_functions>
    #include <shop>

    new bool:g_bHasSP[MAXPLAYERS+1];
    new 
    Handle:g_hPrice,
        
    Handle:g_hSellPrice,
        
    Handle:g_hDuration,
        
    ItemId:id;

    public 
    Plugin:myinfo =
    {
        
    name "[Shop] Swap Team",
        
    author "Smoke",
        
    version "1.0"
    };

    public 
    OnPluginStart()
    {
        
    RegConsoleCmd("sm_st"Command_St); 

        
    g_hPrice CreateConVar("sm_shop_swapteam_price""10000""Стоимость покупки свободной смены команды.");
        
    HookConVarChange(g_hPriceOnConVarChange);
        
        
    g_hSellPrice CreateConVar("sm_shop_swapteam_sellprice""5000""Стоимость продажи свободной смены команды.");
        
    HookConVarChange(g_hPriceOnConVarChange);
        
        
    g_hDuration CreateConVar("sm_shop_swapteam_duration""2592000""Длительность свободной смены команды в секундах.");
        
    HookConVarChange(g_hDurationOnConVarChange);

        
    AutoExecConfig(true"shop_swapteam""shop");
        
        if (
    Shop_IsStarted()) Shop_Started();
    }

    public 
    OnConVarChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
    {
        if(
    id != INVALID_ITEM)
        {
            if(
    hCvar == g_hPriceShop_SetItemPrice(idGetConVarInt(hCvar));
            else if(
    hCvar == g_hSellPriceShop_SetItemSellPrice(idGetConVarInt(hCvar));
            else if(
    hCvar == g_hDurationShop_SetItemValue(idGetConVarInt(hCvar));
        }
    }

    public 
    OnPluginEnd() Shop_UnregisterMe();

    public 
    Shop_Started()
    {
        new 
    CategoryId:category_id Shop_RegisterCategory("Stuff""");
        
        if (
    Shop_StartItem(category_id"swapteam"))
        {
            
    Shop_SetInfo("Свободная смена команды [!st]"""GetConVarInt(g_hPrice), GetConVarInt(g_hSellPrice), Item_TogglableGetConVarInt(g_hDuration));
            
    Shop_SetCallbacks(OnItemRegisteredOnItemUsed);
            
    Shop_EndItem();
        }
    }

    public 
    OnItemRegistered(CategoryId:category_id, const String:category[], const String:item[], ItemId:item_idid item_id;

    public 
    Shop_OnClientAuthorized(iClientg_bHasSP[iClient] = (Shop_IsClientHasItem(iClientid) && Shop_IsClientItemToggled(iClientid)) ? true:false;

    public 
    ShopAction:OnItemUsed(iClientCategoryId:category_id, const String:category[], ItemId:item_id, const String:item[], bool:isOnbool:elapsed)
    {
        if (
    isOn || elapsed)
        {
            
    g_bHasSP[iClient] = false;
            return 
    Shop_UseOff;
        }

        
    g_bHasSP[iClient] = true;

        return 
    Shop_UseOn;
    }

    public 
    Action:Command_St(iClientargs
    {
        if (
    g_bHasSP[iClient] && iClient && IsClientInGame(iClient) || IsPlayerAlive(iClient) && ForcePlayerSuicide(iClient))  
            { 
                new 
    playerTeam GetClientTeam(iClient); 
                if(
    playerTeam == CS_TEAM_T)            
                { 
                    
    CS_SwitchTeam(iClientCS_TEAM_CT); 
                    
    PrintToChat(iClient,"\x04[Swap Team] \x01Вы сменили команду! \x03[T > CT]"); 
                } 
                else if(
    playerTeam == CS_TEAM_CT)            
                { 
                    
    CS_SwitchTeam(iClientCS_TEAM_T); 
                    
    PrintToChat(iClient,"\x04[Swap Team] \x01Вы сменили команду! \x03[CT > T]"); 
                } 
            } 
            else 
                    
    PrintToChat(iClient,"\x04[Swap Team] \x01Вы не купили данную возможность в \x03!shop \x01:)");  
    }
     
  15. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Swap Team

    А остальные ошибки поможешь исправить?
     
  16. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Swap Team

    Все равно сообщения появляются перед написанной командой.
     
  17. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [Shop] Swap Team

    PHP:
    if (g_bHasSP[iClient] && iClient && IsClientInGame(iClient) || IsPlayerAlive(iClient) && ForcePlayerSuicide(iClient))
    - это как?
     
  18. B1g

    B1g

    Сообщения:
    716
    Симпатии:
    26
    Re: [Shop] Swap Team

    Это я уже исправил , лучше помоги с выводом сообщения после написанной команды.
     
  19. Primo

    Primo Где мои манеры

    Сообщения:
    1.191
    Симпатии:
    310
    Re: [Shop] Swap Team

    А чем уже RegConsoleCmd(client, args); не вариант?
     
  20. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.989
    Re: [Shop] Swap Team

    Primo, есть свои нюансы.