Русское сообщество по скриптингу

Индексирование моделей  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Индексирование моделей  [Решено]

Сообщение izumi4 » 11 янв 2020, 13:06

Помогите сделать индексирование моделей

fm_cs_set_user_model_index(id, value)

Я так понял что в value нужно вписать номер модели т.е. значение должно быть числовым?

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <zombieplague>

const OFFSET_MODELINDEX = 491
const OFFSET_LINUX 
= 5

enum _
:udata {skin, act};
new data [33][udata], f_SName [36][64], f_SPassword [36][64], f_SModel_ct [36 ][64], f_Lines;

public plugin_init ()
{
    register_plugin ( "FWD Skins", "1.0", "OverGame");
    RegisterHam(Ham_Spawn, "player", "fwd_HamSpawn");
}

public client_putinserver ( id )
{
    new sz_Name[33], sz_Info [32];
    get_user_name(id, sz_Name, charsmax (sz_Name));
    get_user_info(id, "_pw", sz_Info, charsmax (sz_Info));

    for (new i; i < f_Lines; i++)
    {
        if (equal(f_SName [i], sz_Name))
        {
            if (equal (f_SPassword [i], sz_Info))
            {
                data[id][skin] = i;                
                data
[id][act] = true;
            } else data[id][act] = false;
        }
    }
}

public plugin_precache ()
{
    _load_skins ( "/addons/amxmodx/configs/fwd_skins.ini" );
    for ( new i; i < f_Lines; i++ )
    {
        new szText [ 1 ][ 255 ];
        format ( szText [0], charsmax ( szText[] ), "models/player/%s/%s.mdl", f_SModel_ct [ i ], f_SModel_ct [ i ] );        
        
        precache_model 
(szText [0]);        
    
}
}

public zp_user_infected_post(id)
{
    cs_reset_user_model(id)
    return PLUGIN_CONTINUE
}

public zp_user_humanized_post(id) 
{
    if(zp_get_user_survivor(id))
    {
        cs_reset_user_model(id)
    }
    else
    
{
        fwd_SetUserSkin(id);        
    
}
    return PLUGIN_CONTINUE
}

public fwd_HamSpawn (id) 
{
    if (is_user_connected(id)) 
    
{
        fwd_SetUserSkin(id);
    }
}
    
    
public fwd_SetUserSkin 
(id)
{
    if ( is_user_connected (id) && data [id][act])
    {        
        if 
(!zp_get_user_zombie (id)) 
        
{
            cs_set_user_model(id, f_SModel_ct [data[id][skin]]);    
            fm_cs_set_user_model_index
(id, value)  
        
}
    }
}

stock _load_skins (const ini_file [])
{
    new line, buffer [256];
    new file = fopen (ini_file, "r" );
    
    while 
(!feof (file))
    {
        fgets (file, buffer, 255);
        trim (buffer);
        
        if 
(buffer[0] == '"')
        {
            parse (buffer, f_SName [line], charsmax (f_SName []), f_SPassword [line], charsmax (f_SPassword []), f_SModel_ct [line], charsmax (f_SModel_ct []));            
        
} 
        else 
        
{
            continue;
        }
        line++;
    }
    f_Lines = line;
    fclose ( file );
}

stock fm_cs_set_user_model_index(id, value)
{
    set_pdata_int(id, OFFSET_MODELINDEX, value, OFFSET_LINUX)
}
 


Добавлено спустя 39 минут 1 секунду:
Все разобрался:

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <zombieplague>

const OFFSET_MODELINDEX 491
const OFFSET_LINUX 5

new g_iszModelIndex;

enum _:udata {skinact};
new 
data [33][udata], f_SName [36][64], f_SPassword [36][64], f_SModel_ct [36 ][64], f_Lines;

public 
plugin_init ()
{
    
register_plugin "FWD Skins""1.0""OverGame");
    
RegisterHam(Ham_Spawn"player""fwd_HamSpawn");
}

public 
client_putinserver id )
{
    new 
sz_Name[33], sz_Info [32];
    
get_user_name(idsz_Namecharsmax (sz_Name));
    
get_user_info(id"_pw"sz_Infocharsmax (sz_Info));

    for (new 
if_Linesi++)
    {
        if (
equal(f_SName [i], sz_Name))
        {
            if (
equal (f_SPassword [i], sz_Info))
            {
                
data[id][skin] = i;                
                
data[id][act] = true;
            } else 
data[id][act] = false;
        }
    }
}

public 
plugin_precache ()
{
    
_load_skins "/addons/amxmodx/configs/fwd_skins.ini" );
    for ( new 
if_Linesi++ )
    {
        new 
szText ][ 255 ];
        
format szText [0], charsmax szText[] ), "models/player/%s/%s.mdl"f_SModel_ct ], f_SModel_ct ] );    

        
g_iszModelIndex engfunc(EngFunc_PrecacheModelszText [0]);            
    }
}

public 
zp_user_infected_post(id)
{
    
cs_reset_user_model(id)
    return 
PLUGIN_CONTINUE
}

public 
zp_user_humanized_post(id
{
    if(
zp_get_user_survivor(id))
    {
        
cs_reset_user_model(id)
    }
    else
    {
        
fwd_SetUserSkin(id);        
    }
    return 
PLUGIN_CONTINUE
}

public 
fwd_HamSpawn (id
{
    if (
is_user_connected(id)) 
    {
        
fwd_SetUserSkin(id);
    }
}    
    
public 
fwd_SetUserSkin (id)
{
    if ( 
is_user_connected (id) && data [id][act])
    {        
        if (!
zp_get_user_zombie (id)) 
        {
            
cs_set_user_model(idf_SModel_ct [data[id][skin]]);
            
fm_cs_set_user_model_index(idg_iszModelIndex)            
        }
    }
}

stock _load_skins (const ini_file [])
{
    new 
linebuffer [256];
    new 
file fopen (ini_file"r" );
    
    while (!
feof (file))
    {
        
fgets (filebuffer255);
        
trim (buffer);
        
        if (
buffer[0] == '"')
        {
            
parse (bufferf_SName [line], charsmax (f_SName []), f_SPassword [line], charsmax (f_SPassword []), f_SModel_ct [line], charsmax (f_SModel_ct []));            
        } 
        else 
        {
            continue;
        }
        
line++;
    }
    
f_Lines line;
    
fclose file );
}

stock fm_cs_set_user_model_index(idvalue)
{
    
set_pdata_int(idOFFSET_MODELINDEXvalueOFFSET_LINUX)
Аватара пользователя
izumi4
 
Сообщения: 82
Зарегистрирован: 03 ноя 2019, 12:25
Благодарил (а): 9 раз.
Поблагодарили: 9 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9