Задержка на установку скина в шоп скинс

Тема в разделе "Запросы", создана пользователем Tonki_Ton, 19 сен 2016.

  1. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    Доброго времени суток.

    В общем дело такое, стоит модуль к шопу [Shop] CS:GO Skins v2.1.3(на самом деле 2.1.4) и еще использую [Любая игра] - Personal Skins 1.6 так вот, пс перебивает скины шс даже если в пс установлена задержка 0.0, как я думаю шс выдает скины раньше пс а затем пс перебивает их своими, возможно если установить задержку на выдачу скина в шс, то пс будет выдавать скин первым а затем уже шс будет выдавать скин тем у кого они куплены.

    Возможно кто-то бы смог прикрутить задержку к шс, я был бы вам очень благодарен.

    Сразу липану исход что бы далеко не бегать

    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <sdktools>
    #include <cstrike>
    #include <shop>

    #define PLUGIN_VERSION "2.1.4"

    #define CATEGORY    "skins"

    new Float:g_fPreviewDuration;

    new 
    Handle:kv;
    new 
    ItemId:selected_id[MAXPLAYERS+1] = {INVALID_ITEM, ...};

    new 
    Handle:hArrayModels;
    new 
    Handle:mp_forcecamera;

    public 
    Plugin:myinfo =
    {
        
    name "[Shop] Skins",
        
    author "FrozDark (arms by R1KO)",
        
    description "Adds ability to buy skins",
        
    version SHOP_VERSION,
        
    url "www.hlmod.ru"
    }

    public 
    OnPluginStart()
    {
        
    mp_forcecamera FindConVar("mp_forcecamera");

        
    HookEvent("player_spawn"Event_PlayerSpawn);
        
    HookEvent("player_team"Event_PlayerSpawn);
      
        
    hArrayModels CreateArray(ByteCountToCells(PLATFORM_MAX_PATH));
      
        if (
    Shop_IsStarted()) Shop_Started();
    }

    public 
    OnPluginEnd()
    {
        
    Shop_UnregisterMe();
    }

    public 
    OnMapStart()
    {
        
    decl String:buffer[PLATFORM_MAX_PATH];
        for (new 
    0GetArraySize(hArrayModels); i++)
        {
            
    GetArrayString(hArrayModelsibuffersizeof(buffer));
            
    PrecacheModel(buffertrue);
        }
      
        
    Shop_GetCfgFile(buffersizeof(buffer), "skins_downloads.txt");
      
        if (!
    File_ReadDownloadList(buffer))
        {
            
    PrintToServer("File not exists %s"buffer);
        }
    }

    public 
    OnClientDisconnect_Post(client)
    {
        
    selected_id[client] = INVALID_ITEM;
    }

    public 
    Shop_Started()
    {
        new 
    CategoryId:category_id Shop_RegisterCategory(CATEGORY"Скины""");
      
        
    decl String:_buffer[PLATFORM_MAX_PATH];
        
    Shop_GetCfgFile(_buffersizeof(_buffer), "skins.txt");
      
        if (
    kv != INVALID_HANDLECloseHandle(kv);
      
        
    kv CreateKeyValues("Skins");
      
        if (!
    FileToKeyValues(kv_buffer))
        {
            
    ThrowError("\"%s\" not parsed"_buffer);
        }
      
        
    ClearArray(hArrayModels);
      
        
    KvRewind(kv);
        
    g_fPreviewDuration KvGetFloat(kv"preview_duration"3.0);

        
    decl String:item[64], String:item_name[64], String:desc[64];
        if (
    KvGotoFirstSubKey(kv))
        {
            do
            {
                if (!
    KvGetSectionName(kvitemsizeof(item))) continue;
              
                
    KvGetString(kv"ModelT"_buffersizeof(_buffer));
                new 
    bool:result false;
                if (
    _buffer[0])
                {
                    
    PrecacheModel(_buffer);
                    if (
    FindStringInArray(hArrayModels_buffer) == -1)
                    {
                        
    PushArrayString(hArrayModels_buffer);
                    }
                  
                    
    KvGetString(kv"ModelT_Arms"_buffersizeof(_buffer));
                    if (
    _buffer[0])
                    {
                        
    PrecacheModel(_buffer);
                        if (
    FindStringInArray(hArrayModels_buffer) == -1)
                        {
                            
    PushArrayString(hArrayModels_buffer);
                        }
                    }
          
                    
    result true;
                }
              
              
                
    KvGetString(kv"ModelCT"_buffersizeof(_buffer));
                if (
    _buffer[0])
                {
                    
    PrecacheModel(_buffertrue);
                    if (
    FindStringInArray(hArrayModels_buffer) == -1)
                    {
                        
    PushArrayString(hArrayModels_buffer);
                    }
                  
                    
    KvGetString(kv"ModelCT_Arms"_buffersizeof(_buffer));
                    if (
    _buffer[0])
                    {
                        
    PrecacheModel(_buffer);
                        if (
    FindStringInArray(hArrayModels_buffer) == -1)
                        {
                            
    PushArrayString(hArrayModels_buffer);
                        }
                    }
                }
                else if (!
    result) continue;
              
                if (
    Shop_StartItem(category_iditem))
                {
                    
    KvGetString(kv"name"item_namesizeof(item_name), item);
                    
    KvGetString(kv"description"descsizeof(desc));
                    
    Shop_SetInfo(item_namedescKvGetNum(kv"price"5000), KvGetNum(kv"sell_price"2500), Item_TogglableKvGetNum(kv"duration"86400));
                    
    Shop_SetCallbacks(_OnEquipItem___OnPreviewItem);
                  
                    if (
    KvJumpToKey(kv"Attributes"false))
                    {
                        
    Shop_KvCopySubKeysCustomInfo(kv);
                        
    KvGoBack(kv);
                    }
                  
                    
    Shop_EndItem();
                }
            }
            while (
    KvGotoNextKey(kv));
        }
      
        
    KvRewind(kv);
    }

    public 
    ShopAction:OnEquipItem(clientCategoryId:category_id, const String:category[], ItemId:item_id, const String:item[], bool:isOnbool:elapsed)
    {
        if (
    isOn || elapsed)
        {
            
    CS_UpdateClientModel(client);
          
            
    selected_id[client] = INVALID_ITEM;
          
            return 
    Shop_UseOff;
        }
      
        
    Shop_ToggleClientCategoryOff(clientcategory_id);
      
        
    selected_id[client] = item_id;
      
        
    ProcessPlayer(client);
      
        return 
    Shop_UseOn;
    }

    public 
    OnPreviewItem(clientCategoryId:category_id, const String:category[], ItemId:item_id, const String:item[])
    {
        
    decl String:buffer[PLATFORM_MAX_PATH];
      
        
    KvRewind(kv);
        if (!
    KvJumpToKey(kvitemfalse))
        {
            
    LogError("It seems that registered item \"%s\" not exists in the settings"buffer);
            return;
        }

        switch (
    GetClientTeam(client))
        {
            case 
    :
            {
                
    KvGetString(kv"ModelT"buffersizeof(buffer));
            }
            case 
    :
            {
                
    KvGetString(kv"ModelCT"buffersizeof(buffer));
            }
            default :
            {
                
    buffer[0] = 0;
            }
        }

        
    KvRewind(kv);

        if (
    buffer[0] && IsModelFile(buffer))
        {
            
    Mirror(clientbuffer);
            
    CreateTimer(g_fPreviewDurationSetBackModeGetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
        }
    }

    public 
    Action:SetBackMode(Handle:timerany:userid)
    {
        new 
    client GetClientOfUserId(userid);
        if(
    client)
        {
            
    Mirror(client);
        }
    }

    Mirror(client, const String:sModel[]="")
    {
        if (
    sModel[0])
        {
            
    SetEntPropEnt(clientProp_Send"m_hObserverTarget"0);
            
    SetEntProp(clientProp_Send"m_iObserverMode"1);
            
    SetEntProp(clientProp_Send"m_bDrawViewmodel"0);
            
    SetEntProp(clientProp_Send"m_iFOV"120);
            
    SendConVarValue(clientmp_forcecamera"1");
            
    SetEntityModel(clientsModel);
        }
        else
        {
            
    SetEntPropEnt(clientProp_Send"m_hObserverTarget", -1);
            
    SetEntProp(clientProp_Send"m_iObserverMode"0);
            
    SetEntProp(clientProp_Send"m_bDrawViewmodel"1);
            
    SetEntProp(clientProp_Send"m_iFOV"90);
            
    decl String:valor[6];
            
    GetConVarString(mp_forcecameravalor6);
            
    SendConVarValue(clientmp_forcecameravalor);
            
    CS_UpdateClientModel(client);
        }
    }

    public 
    Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if (!
    client || selected_id[client] == INVALID_ITEM || IsFakeClient(client) || !IsPlayerAlive(client))
        {
            return;
        }
      
        
    ProcessPlayer(client);
    }

    ProcessPlayer(client)
    {
        
    decl String:buffer[PLATFORM_MAX_PATH];
      
        if(
    selected_id[client] != INVALID_ITEM)
        {
            
    Shop_GetItemById(selected_id[client], buffersizeof(buffer));

            
    KvRewind(kv);
            if (!
    KvJumpToKey(kvbufferfalse))
            {
                
    LogError("It seems that registered item \"%s\" not exists in the settings"buffer);
                return;
            }
          
            
    decl String:sArms[PLATFORM_MAX_PATH];
          
            switch (
    GetClientTeam(client))
            {
                case 
    :
                {
                    
    KvGetString(kv"ModelT"buffersizeof(buffer));
                    
    KvGetString(kv"ModelT_Arms"sArmssizeof(sArms));
                }
                case 
    :
                {
                    
    KvGetString(kv"ModelCT"buffersizeof(buffer));
                    
    KvGetString(kv"ModelCT_Arms"sArmssizeof(sArms));
                }
                default :
                {
                    
    buffer[0] =
                    
    sArms[0] = '\0';
                }
            }
            if (
    buffer[0] && IsModelFile(buffer))
            {
                
    SetEntityModel(clientbuffer);
              
                if (
    sArms[0] && IsModelFile(sArms))
                {
                    
    SetEntPropString(clientProp_Send"m_szArmsModel"sArms);
                }
              
                
    KvGetString(kv"color"buffersizeof(buffer));
                if (
    strlen(buffer) > 7)
                {
                    
    decl color[4];
                    
    KvGetColor(kv"color"color[0], color[1], color[2], color[3]);
                    
    SetEntityRenderMode(clientRENDER_TRANSCOLOR);
                    
    SetEntityRenderColor(clientcolor[0], color[1], color[2], color[3]);
                }
            }
          
            
    KvRewind(kv);
        }
    }

    bool:IsModelFile(const String:model[])
    {
        
    decl String:buf[4];
        
    File_GetExtension(modelbufsizeof(buf));
      
        return !
    strcmp(buf"mdl"false);
    }

    new 
    String:_smlib_empty_twodimstring_array[][] = { { '\0' } };
    stock File_AddToDownloadsTable(String:path[], bool:recursive=true, const String:ignoreExts[][]=_smlib_empty_twodimstring_arraysize=0)
    {
        if (
    path[0] == '\0') {
            return;
        }
      
        new 
    len strlen(path)-1;
      
        if (
    path[len] == '\\' || path[len] == '/')
        {
            
    path[len] = '\0';
        }

        if (
    FileExists(path)) {
          
            
    decl String:fileExtension[4];
            
    File_GetExtension(pathfileExtensionsizeof(fileExtension));
          
            if (
    StrEqual(fileExtension"bz2"false) || StrEqual(fileExtension"ztmp"false)) {
                return;
            }
          
            if (
    Array_FindString(ignoreExtssizefileExtension) != -1) {
                return;
            }

            
    AddFileToDownloadsTable(path);
          
            if (
    StrEqual(fileExtension"mdl"false))
            {
                
    PrecacheModel(pathtrue);
            }
        }
      
        else if (
    recursive && DirExists(path)) {

            
    decl String:dirEntry[PLATFORM_MAX_PATH];
            new 
    Handle:__dir OpenDirectory(path);

            while (
    ReadDirEntry(__dirdirEntrysizeof(dirEntry))) {

                if (
    StrEqual(dirEntry".") || StrEqual(dirEntry"..")) {
                    continue;
                }
              
                
    Format(dirEntrysizeof(dirEntry), "%s/%s"pathdirEntry);
                
    File_AddToDownloadsTable(dirEntryrecursiveignoreExtssize);
            }
          
            
    CloseHandle(__dir);
        }
        else if (
    FindCharInString(path'*'true)) {
          
            new 
    String:fileExtension[4];
            
    File_GetExtension(pathfileExtensionsizeof(fileExtension));

            if (
    StrEqual(fileExtension"*")) {

                
    decl
                    String
    :dirName[PLATFORM_MAX_PATH],
                    
    String:fileName[PLATFORM_MAX_PATH],
                    
    String:dirEntry[PLATFORM_MAX_PATH];

                
    File_GetDirName(pathdirNamesizeof(dirName));
                
    File_GetFileName(pathfileNamesizeof(fileName));
                
    StrCat(fileNamesizeof(fileName), ".");

                new 
    Handle:__dir OpenDirectory(dirName);
                while (
    ReadDirEntry(__dirdirEntrysizeof(dirEntry))) {

                    if (
    StrEqual(dirEntry".") || StrEqual(dirEntry"..")) {
                        continue;
                    }

                    if (
    strncmp(dirEntryfileNamestrlen(fileName)) == 0) {
                        
    Format(dirEntrysizeof(dirEntry), "%s/%s"dirNamedirEntry);
                        
    File_AddToDownloadsTable(dirEntryrecursiveignoreExtssize);
                    }
                }

                
    CloseHandle(__dir);
            }
        }

        return;
    }

    stock bool:File_ReadDownloadList(const String:path[])
    {
        new 
    Handle:file OpenFile(path"r");
      
        if (
    file  == INVALID_HANDLE) {
            return 
    false;
        }

        new 
    String:buffer[PLATFORM_MAX_PATH];
        while (!
    IsEndOfFile(file)) {
            
    ReadFileLine(filebuffersizeof(buffer));
          
            new 
    pos;
            
    pos StrContains(buffer"//");
            if (
    pos != -1) {
                
    buffer[pos] = '\0';
            }
          
            
    pos StrContains(buffer"#");
            if (
    pos != -1) {
                
    buffer[pos] = '\0';
            }

            
    pos StrContains(buffer";");
            if (
    pos != -1) {
                
    buffer[pos] = '\0';
            }
          
            
    TrimString(buffer);
          
            if (
    buffer[0] == '\0') {
                continue;
            }

            
    File_AddToDownloadsTable(buffer);
        }

        
    CloseHandle(file);
      
        return 
    true;
    }

    stock File_GetExtension(const String:path[], String:buffer[], size)
    {
        new 
    extpos FindCharInString(path'.'true);
      
        if (
    extpos == -1)
        {
            
    buffer[0] = '\0';
            return;
        }

        
    strcopy(buffersizepath[++extpos]);
    }

    stock Math_GetRandomInt(minmax)
    {
        new 
    random GetURandomInt();
      
        if (
    random == 0)
            
    random++;

        return 
    RoundToCeil(float(random) / (float(2147483647) / float(max min 1))) + min 1;
    }

    stock Array_FindString(const String:array[][], size, const String:str[], bool:caseSensitive=truestart=0)
    {
        if (
    start 0) {
            
    start 0;
        }

        for (new 
    i=startsizei++) {

            if (
    StrEqual(array[i], strcaseSensitive)) {
                return 
    i;
            }
        }
      
        return -
    1;
    }

    stock bool:File_GetFileName(const String:path[], String:buffer[], size)
    {  
        if (
    path[0] == '\0') {
            
    buffer[0] = '\0';
            return;
        }
      
        
    File_GetBaseName(pathbuffersize);
      
        new 
    pos_ext FindCharInString(buffer'.'true);

        if (
    pos_ext != -1) {
            
    buffer[pos_ext] = '\0';
        }
    }

    stock bool:File_GetDirName(const String:path[], String:buffer[], size)
    {  
        if (
    path[0] == '\0') {
            
    buffer[0] = '\0';
            return;
        }
      
        new 
    pos_start FindCharInString(path'/'true);
      
        if (
    pos_start == -1) {
            
    pos_start FindCharInString(path'\\'true);
          
            if (
    pos_start == -1) {
                
    buffer[0] = '\0';
                return;
            }
        }
      
        
    strcopy(buffersizepath);
        
    buffer[pos_start] = '\0';
    }

    stock bool:File_GetBaseName(const String:path[], String:buffer[], size)
    {  
        if (
    path[0] == '\0') {
            
    buffer[0] = '\0';
            return;
        }
      
        new 
    pos_start FindCharInString(path'/'true);
      
        if (
    pos_start == -1) {
            
    pos_start FindCharInString(path'\\'true);
        }
      
        
    pos_start++;
      
        
    strcopy(buffersizepath[pos_start]);
    }
    А возможно я ошибаюсь и дело совсем не в этом ?
     
    Последнее редактирование: 19 сен 2016
  2. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    На 178 строки замени на:
    PHP:
    ProcessPlayer(INVALID_HANDLEclient);
    И это же на 260 заменой:
    PHP:
    CreateTimer(0.1ProcessPlayerclientTIMER_FLAG_NO_MAPCHANGE);
    Где и выставляешь нужное время задержки (0.1 на своё). На 263 строке меняешь:
    PHP:
    public Action:ProcessPlayer(Handle:timerany:client)
    {
        if(!
    IsClientInGame(client)) return Plugin_Stop;
    Получившийся:
    На 277 строке заменить на:
    PHP:
    return Plugin_Stop;
    Эту же новую, строчку добавить в самом конце, после 320 строки.
    Оффтоп
     
    Последнее редактирование: 19 сен 2016
    Tesloz и Tonki_Ton нравится это.
  3. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31

    Получаю ошибку при компиляции, если я конечно сам где-то не обасрался. Но если это я ошибся то не говори где. ;)

    [​IMG]

    Кусок этого кода

    PHP:

    //162-180

    public ShopAction:OnEquipItem(clientCategoryId:category_id, const String:category[], ItemId:item_id, const String:item[], bool:isOnbool:elapsed)
    {
        if (
    isOn || elapsed)
        {
            
    CS_UpdateClientModel(client);

            
    selected_id[client] = INVALID_ITEM;

            return 
    Shop_UseOff;
        }

        
    Shop_ToggleClientCategoryOff(clientcategory_id);

        
    selected_id[client] = item_id;

        
    ProcessPlayer(INVALID_HANDLEclient);

        return 
    Shop_UseOn;
    }

    //c 251
    public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if (!
    client || selected_id[client] == INVALID_ITEM || IsFakeClient(client) || !IsPlayerAlive(client))
        {
            return;
        }

        
    CreateTimer(0.1ProcessPlayerclient_TIMER_FLAG_NO_MAPCHANGE);
    }

    public 
    Action:ProcessPlayer(Handle:timerany:client)
    {
        if(!
    IsClientInGame(client)) return Plugin_Stop;

        
    decl String:buffer[PLATFORM_MAX_PATH];

        if(
    selected_id[client] != INVALID_ITEM)
        {
            
    Shop_GetItemById(selected_id[client], buffersizeof(buffer));

            
    KvRewind(kv);
            if (!
    KvJumpToKey(kvbufferfalse))
            {
                
    LogError("It seems that registered item \"%s\" not exists in the settings"buffer);
                return 
    Plugin_Stop;
            }

            
    decl String:sArms[PLATFORM_MAX_PATH];

            switch (
    GetClientTeam(client))
            {
                case 
    :
                {
                    
    KvGetString(kv"ModelT"buffersizeof(buffer));
                    
    KvGetString(kv"ModelT_Arms"sArmssizeof(sArms));
                }
                case 
    :
                {
                    
    KvGetString(kv"ModelCT"buffersizeof(buffer));
                    
    KvGetString(kv"ModelCT_Arms"sArmssizeof(sArms));
                }
                default :
                {
                    
    buffer[0] =
                    
    sArms[0] = '\0';
                }
            }
            if (
    buffer[0] && IsModelFile(buffer))
            {
                
    SetEntityModel(clientbuffer);
        
                if (
    sArms[0] && IsModelFile(sArms))
                {
                    
    SetEntPropString(clientProp_Send"m_szArmsModel"sArms);
                }
        
                
    KvGetString(kv"color"buffersizeof(buffer));
                if (
    strlen(buffer) > 7)
                {
                    
    decl color[4];
                    
    KvGetColor(kv"color"color[0], color[1], color[2], color[3]);
                    
    SetEntityRenderMode(clientRENDER_TRANSCOLOR);
                    
    SetEntityRenderColor(clientcolor[0], color[1], color[2], color[3]);
                }
            }

            
    KvRewind(kv);
        }
        return 
    Plugin_Stop;
    }


    Оффтоп
    Оффтоп
     
    Последнее редактирование: 19 сен 2016
  4. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    Подчёркивание с запятой убери. А вторая ошибка - просто забей или выровняй отступы.
     
    Tonki_Ton нравится это.
  5. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    Теперь все работает, все как я и предполагал :dirol:

    В очередной раз выручаешь, благодарю :ab: Отблагодарил бы материально но увы сам на мели :dntknw:
     
    AlmazON нравится это.
  6. Steammerr

    Steammerr

    Сообщения:
    20
    Симпатии:
    4
    Может кто-то сам не справится, вот, задержка 0.25.
     

    Вложения:

    • shop_skins.smx
      Размер файла:
      11 КБ
      Просмотров:
      0
  7. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    Кстати, с задержкой модели рук не устанавливаются или устанавливаются но через раз
     
  8. AlmazON

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

    Сообщения:
    4.509
    Симпатии:
    1.962
    В CS:GO руки вообще устанавливаются лишь при новом спавне. Что там ещё влияет - скажет лишь тот, кто в неё играет.