• Пожалуйста, создайте название темы отражающее ее смысл
  • Для ускорения решения Вашего вопроса заполните обязательные поля и подробно опишите возникшую проблему

Помощь Переделка scalpular_aes под ReAPI

pollfank

Участник
Сообщения
167
Решения
1
Реакции
32
Баллы
28
Доброго времени суток всем.
Есть у меня плагин пагоны для AES. Начал переделывать его пд ReAPI.
Избавился от <hamsandwich> уже. Теперь нужна помощь, как избавится от <fakemeta>
Прикрепил оригинал. А вот код, как пока получилось
Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>
#include <aes_main>

#define PLUGIN "AES: Shoulder Marks"
#define VERSION "0.1"
#define AUTHOR "serfreeman1337"

#define PRECACHE_DIR "models/shoulder_marks"
#define MARKS_CLASSNAME "aes_shoulder_marks"

new Array:marksModels
new marksEntity[33],modelName[128]
new const m_iInternalModel = 126

public plugin_precache(){
    new cLvlNum = register_cvar("aes_sm_lvlnum","20")
    
    new precachePath[128]
    
    marksModels = ArrayCreate(128)
    
    for(new i ; i < get_pcvar_num(cLvlNum) ; ++i){
        formatex(precachePath,127,"%s/%d.mdl",PRECACHE_DIR,i + 1)
        
        if(file_exists(precachePath)){
            precache_model(precachePath)
            ArrayPushString(marksModels,precachePath)
            
            server_print("--> %d %s",i,precachePath)
        }else{
            log_amx("cant locate %s file",precachePath)
            ArrayPushString(marksModels,"")
        }
    }
}

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    RegisterHookChain(RG_CBasePlayer_Spawn,"On_Player_Spawn",1)
    RegisterHookChain(RG_CBasePlayer_Killed,"On_Player_Killed",1)
}

public aes_player_levelup(id)
    Update_Marks(id)
    
public aes_player_leveldown(id)
    Update_Marks(id)

public On_Player_Spawn(id){
    server_print("-->PLR SPAWN")
    
    Update_Marks(id)
}
    
public On_Player_Killed(id)
    Hide_Marks(id)
    
public client_disconnected(id)
    Hide_Marks(id)

public Update_Marks(id){
    if(!pev_valid(marksEntity[id])){
        marksEntity[id] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
        set_pev(marksEntity[id],pev_classname,MARKS_CLASSNAME)
    }
    
    ArrayGetString(marksModels,aes_get_player_level(id),modelName,127)
    
    server_print("--> get %s for %d",modelName,aes_get_player_level(id))
    
    if(!modelName[0])
        return 0
    
    new bodySeq = get_bodyseq_for_player(id)
    
    server_print("--> get %d bodyseq",bodySeq)
    
    if(!bodySeq)
        return 0
    
    set_pev(marksEntity[id],pev_aiment,id)
    set_pev(marksEntity[id],pev_movetype,MOVETYPE_FOLLOW)
    set_pev(marksEntity[id],pev_effects,pev(marksEntity[id], pev_effects) & ~EF_NODRAW)
    
    engfunc(EngFunc_SetModel,marksEntity[id],modelName)
    set_pev(marksEntity[id],pev_body,bodySeq)
    
    server_print("--> %d",bodySeq)
    
    return 1
}

public Hide_Marks(id){
    if(!pev_valid(marksEntity[id]))
        return 0
        
    set_pev(marksEntity[id],pev(marksEntity[id],pev_effects) | EF_NODRAW)
        
    return 1
}

get_bodyseq_for_player(id){
    return get_pdata_int(id,m_iInternalModel)

}

aes_get_player_level(id){
    new aStats[AES_ST_END]
    aes_get_player_stats(id,aStats)
    
    return aStats[AES_ST_LEVEL]
}
 

Вложения

  • scalpular_aes.sma
    2.9 KB · Просмотры: 6
Код:
#include <amxmodx>
#include <reapi>
#include <aes_main>

#define PLUGIN "AES: Shoulder Marks"
#define VERSION "0.1"
#define AUTHOR "serfreeman1337"

#define PRECACHE_DIR "models/shoulder_marks"
#define MARKS_CLASSNAME "aes_shoulder_marks"

new Array:marksModels
new marksEntity[33],modelName[128]
new const m_iInternalModel = 126

public plugin_precache(){
    new cLvlNum = register_cvar("aes_sm_lvlnum","20")
    
    new precachePath[128]
    
    marksModels = ArrayCreate(128)
    
    for(new i ; i < get_pcvar_num(cLvlNum) ; ++i){
        formatex(precachePath,127,"%s/%d.mdl",PRECACHE_DIR,i + 1)
        
        if(file_exists(precachePath)){
            precache_model(precachePath)
            ArrayPushString(marksModels,precachePath)
            
            server_print("--> %d %s",i,precachePath)
        }else{
            log_amx("cant locate %s file",precachePath)
            ArrayPushString(marksModels,"")
        }
    }
}

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    RegisterHookChain(RG_CBasePlayer_Spawn,"On_Player_Spawn",1)
    RegisterHookChain(RG_CBasePlayer_Killed,"On_Player_Killed",1)
}

public aes_player_levelup(id)
    Update_Marks(id)
    
public aes_player_leveldown(id)
    Update_Marks(id)

public On_Player_Spawn(id){
    server_print("-->PLR SPAWN")
    
    Update_Marks(id)
}
    
public On_Player_Killed(id)
    Hide_Marks(id)
    
public client_disconnected(id)
    Hide_Marks(id)

public Update_Marks(id){
    if(!is_entity(marksEntity[id])) {

        marksEntity[id] = rg_create_entity(MARKS_CLASSNAME);

    }
    
    ArrayGetString(marksModels,aes_get_player_level(id),modelName,127)
    
    server_print("--> get %s for %d",modelName,aes_get_player_level(id))
    
    if(!modelName[0])
        return 0
    
    new bodySeq = get_bodyseq_for_player(id)
    
    server_print("--> get %d bodyseq",bodySeq)
    
    if(!bodySeq)
        return 0
    
    set_member(marksEntity[id], var_aiment, id);
    set_member(marksEntity[id], var_movetype, MOVETYPE_FOLLOW);
    set_member(marksEntity[id], var_effects, get_member(marksEntity[id], var_effects) & ~EF_NODRAW);
    
    set_member(marksEntity[id], var_model, modelName);
    // Возможно нужно допилить :
    // set_member(marksEntity[id], var_modelindex, );
    set_member(marksEntity[id], var_body, bodySeq);
    
    server_print("--> %d",bodySeq)
    
    return 1
}

public Hide_Marks(id){
    if(!is_entity(marksEntity[id]))
        return 0
        
    set_member(marksEntity[id], get_member(marksEntity[id], var_effects) | EF_NODRAW);
        
    return 1
}

get_bodyseq_for_player(id){

    return get_member(id, m_iInternalModel);

}

aes_get_player_level(id){
    new aStats[AES_ST_END]
    aes_get_player_stats(id,aStats)
    
    return aStats[AES_ST_LEVEL]
}

Возможно нужно будет допилить индекс для установки модели.
 
@V1adJkee, сегодня посмотрю...но мне кажется, что так не будет работать
 
@pollfank,попутал немного )
 

Вложения

  • scalpular_aes (1).zip
    1.2 KB · Просмотры: 13
Последнее редактирование:
@V1adJkee, не могу никак избавится от предупреждения. Как бы плагин говорит о том что используется новый натив и предлагает вариант.Безымянный.jpg
 
@pollfank,
Git:
-- #include <aes_main>

++ #include <aes_v>



-- aes_get_player_level(id){

--    new aStats[AES_ST_END]

--    aes_get_player_stats(id,aStats)

-- 

--    return aStats[AES_ST_LEVEL]

--}
 
@V1adJkee, аа...все понял спасибо. Попробую допилить, а то версия под реапи не работает).
 
@pollfank,
C++:
#define RANKS_AMOUNT 20

new iMode[RANKS_AMOUNT];   

// В прекеше

iMode[i] = PrecacheModel ....
    
//
    
set_entvar(marksEntity[id], var_modelindex, iMode[1]); // 1 - к примеру
 
@V1adJkee, тогда что делать с этим блоком

Код:
public plugin_precache(){
    new cLvlNum = register_cvar("aes_sm_lvlnum","20")
    
    new precachePath[128]
    marksModels = ArrayCreate(128)
    
    for(new i ; i < get_pcvar_num(cLvlNum) ; ++i){
        formatex(precachePath,127,"%s/%d.mdl",PRECACHE_DIR,i + 1)
        
        if(file_exists(precachePath)){
            precache_model(precachePath)
            ArrayPushString(marksModels,precachePath)
            
            server_print("--> %d %s",i,precachePath)
        }else{
            log_amx("cant locate %s file",precachePath)
            ArrayPushString(marksModels,"")
        }
    }
}
 
@V1adJkee, как должно быть правильно
iMode = PrecacheModel { "назва модели", "назва модели" } или нет?
 
@pollfank,
C++:
public plugin_precache(){
    new cLvlNum = register_cvar("aes_sm_lvlnum","20")
    
    new precachePath[128]
    marksModels = ArrayCreate(128)
    
    for(new i ; i < get_pcvar_num(cLvlNum) ; ++i){
        formatex(precachePath,127,"%s/%d.mdl",PRECACHE_DIR,i + 1)
        
        if(file_exists(precachePath)){
          
            ArrayPushString(marksModels,precachePath)
            
            server_print("--> %d %s",i,precachePath)
            iMode[i] = precache_model(precachePath);
        }else{
            log_amx("cant locate %s file",precachePath)
            ArrayPushString(marksModels,"")
        }
    }
}
 
@V1adJkee, я так понимаю, все должно выглядеть как то так ...
Код:
#include <amxmodx>
#include <reapi>
#include <aes_v>

#define PLUGIN "AES: Shoulder Marks"
#define VERSION "0.1"
#define AUTHOR "serfreeman1337"

#define RANKS_AMOUNT 20
#define PRECACHE_DIR "models/shoulder_marks"
#define MARKS_CLASSNAME "aes_shoulder_marks"

new Array:marksModels, iMode[RANKS_AMOUNT]
new marksEntity[33],modelName[128]
new const m_iInternalModel = 126

public plugin_precache(){
    new cLvlNum = register_cvar("aes_sm_lvlnum","20")
   
    new precachePath[128]
    marksModels = ArrayCreate(128)
   
    for(new i ; i < get_pcvar_num(cLvlNum) ; ++i){
        formatex(precachePath,127,"%s/%d.mdl",PRECACHE_DIR,i + 1)
       
        if(file_exists(precachePath)){
            precache_model(precachePath)
            ArrayPushString(marksModels,precachePath)
           
            server_print("--> %d %s",i,precachePath)
            iMode[i] = precache_model(precachePath);
        }else{
            log_amx("cant locate %s file",precachePath)
            ArrayPushString(marksModels,"")
        }
    }
}

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR)
   
    RegisterHookChain(RG_CBasePlayer_Spawn,"On_Player_Spawn",1)
    RegisterHookChain(RG_CBasePlayer_Killed,"On_Player_Killed",1)
}

public aes_player_levelup(id)
    Update_Marks(id)
   
public aes_player_leveldown(id)
    Update_Marks(id)

public On_Player_Spawn(id){
    server_print("-->PLR SPAWN")
   
    Update_Marks(id)
}
   
public On_Player_Killed(id)
    Hide_Marks(id)
   
public client_disconnected(id)
    Hide_Marks(id)

public Update_Marks(id) {

    if(!is_entity(marksEntity[id])) {

        marksEntity[id] = rg_create_entity("info_target");
        set_entvar(marksEntity[id], var_classname, MARKS_CLASSNAME);
    }
   
    ArrayGetString(marksModels,aes_get_player_level(id),modelName,127)
    server_print("--> get %s for %d",modelName,aes_get_player_level(id))
   
    if(!modelName[0])
        return 0
   
    new bodySeq = get_bodyseq_for_player(id)
    server_print("--> get %d bodyseq",bodySeq)
   
    if(!bodySeq)
        return 0
   
    set_entvar(marksEntity[id], var_aiment, id);
    set_entvar(marksEntity[id], var_movetype, MOVETYPE_FOLLOW);
    set_entvar(marksEntity[id], var_effects, get_member(marksEntity[id], var_effects) & ~EF_NODRAW);
   
    set_entvar(marksEntity[id], var_modelindex, iMode[id]);
    set_entvar(marksEntity[id], var_model, modelName);
    set_entvar(marksEntity[id], var_body, bodySeq);
   
    server_print("--> %d",bodySeq)
   
    return 1
}

public Hide_Marks(id){
    if(!is_entity(marksEntity[id]))
        return 0
       
    set_entvar(marksEntity[id], var_effects, get_entvar(marksEntity[id], var_effects) | EF_NODRAW);
       
    return 1
}

get_bodyseq_for_player(id){

    return get_member(id, m_iInternalModel);

}
 
C++:
set_entvar(marksEntity[id], var_modelindex, iMode[id]);
@pollfank, должен быть индекс модели, а не игрка.
 
@V1adJkee, подскажите пожалуйста как будет правильно. У меня пока не получается.
 
@V1adJkee, ну я так думаю. Если подсчет ведется от 0, тогда должно быть так
Код:
set_entvar(marksEntity[id], var_modelindex, iMode[19]);
Это то что сразу в голову пришло...
 
@V1adJkee, получается что надо так

Код:
set_entvar(marksEntity[id], var_modelindex, iMode[aes_get_player_level(id)-1]);
 
Назад
Сверху