Фикс плагина

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

  1. Amaralle

    Amaralle

    Сообщения:
    2
    Симпатии:
    0
    Плагин очень сильно забивает логи, хоть и работает стабильно.
    В общем кому не сложно фиксаните, Зарание Спасибо :)

    Лог
    [SM] Native "AcceptEntityInput" reported: Entity -1 (-1) is not a CBaseEntity
    [SM] Displaying call stack trace for plugin "shop_pets.smx":
    [SM] [0] Line 144, C:\Users\TonkiTon\Desktop\комли 2\addons\sourcemod\scripting\shop_pets.sp::OnPlayerRunCmd()

    Исход
    PHP:
    #pragma semicolon 1
    #include <sourcemod>
    #include <sdktools>
    #include <shop>

    public Plugin:myinfo =
    {
        
    name "[Shop] Pets",
        
    author "Pheonix (????Феникс????) & Zephyrus",
        
    version "1.0",
        
    url "http://www.hlmod.ru/ http://zizt.ru/"
    };

    enum Pet
    {
        
    String:model[PLATFORM_MAX_PATH],
        
    String:run[64],
        
    String:idle[64],
        
    Float:fPosition[3],
        
    Float:fAngles[3]
    }

    new 
    bool:g_iPets[MAXPLAYERS+1];
    new 
    g_unClientPet[MAXPLAYERS+1] = {INVALID_ENT_REFERENCE, ...};
    new 
    g_unSelectedPet[MAXPLAYERS+1][Pet];
    new 
    g_unLastAnimation[MAXPLAYERS+1]={-1,...};

    new 
    Handle:g_hKv;


    public 
    OnPluginStart()
    {
        
    HookEvent("player_spawn"Pets_PlayerSpawn);
        
    HookEvent("player_death"Pets_PlayerDeath);
        
    decl String:buffer[PLATFORM_MAX_PATH];
        if (
    g_hKv != INVALID_HANDLECloseHandle(g_hKv);
       
        
    g_hKv CreateKeyValues("Pets");
       
        
    Shop_GetCfgFile(buffersizeof(buffer), "pets.ini");
       
        if (!
    FileToKeyValues(g_hKvbuffer)) SetFailState("Файл конфигураций не найден %s"buffer);
        if (
    Shop_IsStarted()) Shop_Started();
    }

    public 
    Shop_Started()
    {
        new 
    CategoryId:category_id Shop_RegisterCategory("pets""Питомцы""");
       
        
    decl String:sName[64], String:sDescription[64];
        
    KvRewind(g_hKv);

        if (
    KvGotoFirstSubKey(g_hKv))
        {
            
    decl iPrice;
            do
            {
                if (
    KvGetSectionName(g_hKvsNamesizeof(sName)) && Shop_StartItem(category_idsName))
                {
                    
    iPrice KvGetNum(g_hKv"price"1000);
                    
    KvGetString(g_hKv"name"sDescriptionsizeof(sDescription), sName);
                    
    Shop_SetInfo(sDescription""iPriceiPrice/2Item_TogglableKvGetNum(g_hKv"duration"0));
                    
    Shop_SetCallbacks(_OnEquipItem);
                    
    Shop_EndItem();
                }
            }
            while (
    KvGotoNextKey(g_hKv));
        }
    }

    public 
    ShopAction:OnEquipItem(iClientCategoryId:category_id, const String:category[], ItemId:item_id, const String:sItem[], bool:isOnbool:elapsed)
    {
        if (
    isOn || elapsed)
        {
            
    ResetPet(iClient);
            
    g_iPets[iClient]=false;
            return 
    Shop_UseOff;
        }
       
        
    Shop_ToggleClientCategoryOff(iClientcategory_id);
        
    decl Float:m_fTemp[3];
        
    KvRewind(g_hKv);
        if (
    KvJumpToKey(g_hKvsItemfalse))
        {
            
    KvGetString(g_hKv"model"g_unSelectedPet[iClient][model], PLATFORM_MAX_PATH);
            
    PrecacheModel(g_unSelectedPet[iClient][model], true);
            
    KvGetString(g_hKv"idle"g_unSelectedPet[iClient][idle], 64);
            
    KvGetString(g_hKv"run"g_unSelectedPet[iClient][run], 64);
            
    KvGetVector(g_hKv"position"m_fTemp);
            
    g_unSelectedPet[iClient][fPosition]=m_fTemp;
            
    KvGetVector(g_hKv"angles"m_fTemp);
            
    g_unSelectedPet[iClient][fAngles]=m_fTemp;
            
    ResetPet(iClient);
            
    CreatePet(iClient);
            
    g_iPets[iClient]=true;
            return 
    Shop_UseOn;
        }
       
        
    PrintToChat(iClient"Failed to use \"%s\"!."sItem);
       
        return 
    Shop_Raw;
    }

    public 
    OnClientConnected(client)
    {
        
    g_iPets[client]=false;
    }

    public 
    OnClientDisconnect(client)
    {
        
    g_iPets[client]=false;
    }

    public 
    Action:Pets_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client GetClientOfUserId(GetEventInt(event"userid"));
        if(!(
    2<=GetClientTeam(client)<=3) || !g_iPets[client])
            return 
    Plugin_Continue;

        
    ResetPet(client);
        
    CreatePet(client);

        return 
    Plugin_Continue;
    }

    public 
    Action:Pets_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    ResetPet(GetClientOfUserId(GetEventInt(event"userid")));
    }

    public 
    Action:OnPlayerRunCmd(client, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon, &subtype, &cmdnum, &tickcount, &seedmouse[2])
    {
        if(!
    g_iPets[client] || g_unClientPet[client]==INVALID_ENT_REFERENCE || !IsPlayerAlive(client)) return;

        if(
    tickcount == 0)
        {
            new 
    Float:vec[3];
            
    decl Float:dist;
            
    GetEntPropVector(clientProp_Data"m_vecAbsVelocity"vec);
            
    dist GetVectorLength(vec);
            if(
    g_unLastAnimation[client] != && dist 0.0)
            {
                
    SetVariantString(g_unSelectedPet[client][run]);
                
    AcceptEntityInput(EntRefToEntIndex(g_unClientPet[client]), "SetAnimation"); //144 СТРОЧКА

                
    g_unLastAnimation[client]=1;
            }
            else if(
    g_unLastAnimation[client] != && dist == 0.0)
            {
                
    SetVariantString(g_unSelectedPet[client][idle]);
                
    AcceptEntityInput(EntRefToEntIndex(g_unClientPet[client]), "SetAnimation");
                
    g_unLastAnimation[client]=2;
            }
        }
    }

    public 
    CreatePet(client)
    {
        if(
    g_unClientPet[client] != INVALID_ENT_REFERENCE || !IsPlayerAlive(client)) return;


        new 
    m_unEnt CreateEntityByName("prop_dynamic_override");
        if (
    IsValidEntity(m_unEnt))
        {
            new 
    Float:m_flPosition[3];
            new 
    Float:m_flAngles[3];
            new 
    Float:m_flClientOrigin[3];
            new 
    Float:m_flClientAngles[3];
            
    GetClientAbsOrigin(clientm_flClientOrigin);
            
    GetClientAbsAngles(clientm_flClientAngles);
       
            
    m_flPosition[0]=g_unSelectedPet[client][fPosition][0];
            
    m_flPosition[1]=g_unSelectedPet[client][fPosition][1];
            
    m_flPosition[2]=g_unSelectedPet[client][fPosition][2];
            
    m_flAngles[0]=g_unSelectedPet[client][fAngles][0];
            
    m_flAngles[1]=g_unSelectedPet[client][fAngles][1];
            
    m_flAngles[2]=g_unSelectedPet[client][fAngles][2];

            
    decl Float:m_fForward[3];
            
    decl Float:m_fRight[3];
            
    decl Float:m_fUp[3];
            
    GetAngleVectors(m_flClientAnglesm_fForwardm_fRightm_fUp);

            
    m_flClientOrigin[0] += m_fRight[0]*m_flPosition[0]+m_fForward[0]*m_flPosition[1]+m_fUp[0]*m_flPosition[2];
            
    m_flClientOrigin[1] += m_fRight[1]*m_flPosition[0]+m_fForward[1]*m_flPosition[1]+m_fUp[1]*m_flPosition[2];
            
    m_flClientOrigin[2] += m_fRight[2]*m_flPosition[0]+m_fForward[2]*m_flPosition[1]+m_fUp[2]*m_flPosition[2];
            
    m_flAngles[1] += m_flClientAngles[1];

            
    DispatchKeyValue(m_unEnt"model"g_unSelectedPet[client][model]);
            
    DispatchKeyValue(m_unEnt"spawnflags""256");
            
    DispatchKeyValue(m_unEnt"solid""0");
            
    SetEntPropEnt(m_unEntProp_Send"m_hOwnerEntity"client);
           
            
    DispatchSpawn(m_unEnt);  
            
    AcceptEntityInput(m_unEnt"TurnOn"m_unEntm_unEnt0);
           
            
    // Teleport the pet to the right fPosition and attach it
            
    TeleportEntity(m_unEntm_flClientOriginm_flAnglesNULL_VECTOR);
           
            
    SetVariantString("!activator");
            
    AcceptEntityInput(m_unEnt"SetParent"clientm_unEnt0);
           
            
    SetVariantString("letthehungergamesbegin");
            
    AcceptEntityInput(m_unEnt"SetParentAttachmentMaintainOffset"m_unEntm_unEnt0);
         
            
    g_unClientPet[client] = EntIndexToEntRef(m_unEnt);
            
    g_unLastAnimation[client] = -1;
        }
    }

    public 
    ResetPet(client)
    {
        if(
    g_unClientPet[client] == INVALID_ENT_REFERENCE)
            return;

        new 
    m_unEnt EntRefToEntIndex(g_unClientPet[client]);
        
    g_unClientPet[client] = INVALID_ENT_REFERENCE;
        if(
    m_unEnt == INVALID_ENT_REFERENCE)
            return;

        
    AcceptEntityInput(m_unEnt"Kill");
    }

    public 
    OnPluginEnd()
    {
        
    Shop_UnregisterMe();
    }
     
  2. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    [​IMG]
     
  3. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    Ну, вроде сработало. Благодарочка.
    --- Добавлено позже ---
    А не, не сработало, тот же лог
     
    Последнее редактирование: 26 мар 2016
  4. Reg1oxeN

    Reg1oxeN

    Сообщения:
    86
    Симпатии:
    26
    Код:
    new pet = EntRefToEntIndex(g_unClientPet[client]);
    if (!pet || !IsValidEntity(pet)) return;
    SetVariantString(g_unSelectedPet[client][run]);
    AcceptEntityInput(pet, "SetAnimation"); //144 СТРОЧКА
     
  5. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    А то что -1, делал вернуть в INVALID_ENT_REFERENCE ?
     
  6. gibs

    gibs Фитиль народного волненья

    Сообщения:
    541
    Симпатии:
    138
    Алмазик, что ты им такое вообще советуешь?
    g_unClientPet[client] - это рефа ентити. Тут надо сперва преобразовать реф в ентити и проверить, не равен ли результат INVALID_ENT_REFERENCE. А автор без этой проверки AcceptEntityInput вызывает, отсюда и ошибки.
     
  7. AlmazON

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

    Сообщения:
    4.583
    Симпатии:
    1.991
    Тогда распиши, как надо. У меня интернет сейчас на модемной скорости и код порой в кашу превращается. Оффтоп
    @Reg1oxeN, похоже, верно расписал. Оффтоп
     
    Последнее редактирование: 26 мар 2016
  8. Tonki_Ton

    Tonki_Ton

    Сообщения:
    317
    Симпатии:
    31
    Ну пока лога нет, если что попробую его версию
     
  9. MaZa_Mladwii

    MaZa_Mladwii

    Сообщения:
    159
    Симпатии:
    12
    как пофиксить? я не понял так...
     
  10. AlmazON

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

    Сообщения:
    4.583
    Симпатии:
    1.991
    Вот так:
     
  11. MaZa_Mladwii

    MaZa_Mladwii

    Сообщения:
    159
    Симпатии:
    12
    Del...
    Bce Cпасибо за помощь.

    Надеюсь скоро обновят pets )
    --- Добавлено позже ---
    не помогло...
    может что то не так делаю.. скажи что заменить..
     
    Последнее редактирование: 19 окт 2016