Добро пожаловать

Для полноценного пользования форумом и общения с его участниками, пройдите регистрацию ниже
Регистрация

Смена модели оружия

Тема в разделе "Свалка", создана пользователем ProroK, 24 ноя 2016.

  1. ProroK

    ProroK Забанен

    658
    107
    150
    Данная статья рассказывает простой метод смены модели оружия игрока в Counter-Strike 1.6. Данный метод поможет вам изменить все 3 типа модели: v_, p_ и w_.

    Метод с использованием модулей Engine и Fakemeta
    PHP:
    #include <amxmodx>
    #include <engine>
    #include <fakemeta>

    new VIEW_MODEL[]        = "models/v_<имя модели>.mdl"
    new PLAYER_MODEL[]        = "models/p_<имя модели>.mdl"
    new WORLD_MODEL[]    = "models/w_<имя модели>.mdl"

    new OLDWORLD_MODEL[]    = "models/w_<имя модели>.mdl" // имя модели, которую мы хотим заменить

    new PLUGIN_NAME[]    = "Custom Weapon Model"
    new PLUGIN_AUTHOR[]         = "Cheap_Suit"
    new PLUGIN_VERSION[]        = "1.0"

    public plugin_init()
    {
        
    register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)   
        
    register_event("CurWeapon""Event_CurWeapon""be","1=1")
        
    register_forward(FM_SetModel"fw_SetModel")
    }

    public 
    plugin_precache()

        
    precache_model(VIEW_MODEL)   
        
    precache_model(PLAYER_MODEL)
        
    precache_model(WORLD_MODEL)
    }

    public 
    Event_CurWeapon(id)
    {   
        
    // Получаем ID оружия, может не работать для других модов
        
    new weaponID read_data(2)
         
        
    // Если оружие не AK47, то возвращаем PLUGIN_CONTINUE
        
    if (weaponID != CSW_AK47)
            return 
    PLUGIN_CONTINUE
     
        
    // Установка v_ модели, которая отображается в руках игрока
        
    entity_set_string(idEV_SZ_viewmodelVIEW_MODEL)
     
        
    // Установка p_ модели, которая отображается, когда мы смотрим на игрока
        
    entity_set_string(idEV_SZ_weaponmodelPLAYER_MODEL)       
     
        return 
    PLUGIN_CONTINUE
    }

    public 
    fw_SetModel(entitymodel[])
    {
        
    // Проверяем существует ли объект
        
    if (!is_valid_ent(entity))
            return 
    FMRES_IGNORED

        
    // Проверяем та ли это w_ модель, которую му хотим изменить
        
    if (!equali(modelOLDWORLD_MODEL))
            return 
    FMRES_IGNORED

        
    new className[33]

        
    // Получаем класс объекта
        
    entity_get_string(entityEV_SZ_classnameclassName32)

        
    // Сравниваем равняется ли полученный класс объекта weaponbox (выкинутое оружие) или armoury_entity (оружие, которое лежит на карте), или grenade (C4 и гранаты)
        
    if (equal(className"weaponbox") || equal(className"armoury_entity") || equal(className"grenade"))
        {
            
    // Установка w_ модели, которая отображается на земле
            
    entity_set_model(entityWORLD_MODEL)
            return 
    FMRES_SUPERCEDE
        
    }
        return 
    FMRES_IGNORED
    }
    Метод с использованием только модуля Fakemeta
    PHP:
    public Event_CurWeapon(id)
    {   
        
    // Получаем ID оружия, может не работать для других модов
        
    new weaponID read_data(2)
         
        
    // Если оружие не AK47, то возвращаем PLUGIN_CONTINUE
        
    if (weaponID != CSW_AK47)
            return 
    PLUGIN_CONTINUE
     
        
    // Установка v_ модели, которая отображается в руках игрока
        
    set_pev(idpev_viewmodelengfunc(EngFunc_AllocStringVIEW_MODEL))
     
        
    // Установка p_ модели, которая отображается, когда мы смотрим на игрока
        
    set_pev(idpev_weaponmodelengfunc(EngFunc_AllocStringPLAYER_MODEL))
     
        return 
    PLUGIN_CONTINUE
    }

    public 
    fw_SetModel(entitymodel[])
    {
        
    // Проверяем существует ли объект
        
    if (!pev_valid(entity))
            return 
    FMRES_IGNORED

        
    // Проверяем та ли это w_ модель, которую му хотим изменить
        
    if (!equali(modelOLDWORLD_MODEL))
            return 
    FMRES_IGNORED

        
    new className[33]

        
    // Получаем класс объекта
        
    pev(entitypev_classnameclassName32)
     
        
    // Сравниваем равняется ли полученный класс объекта weaponbox (выкинутое оружие) или armoury_entity (оружие, которое лежит на карте), или grenade (C4 и гранаты)
        
    if(equal(className"weaponbox") || equal(className"armoury_entity") || equal(className"grenade"))
        {
            
    // Установка w_ модели, которая отображается на земле
            
    engfunc(EngFunc_SetModelentityWORLD_MODEL)
            return 
    FMRES_SUPERCEDE
        
    }
        return 
    FMRES_IGNORED
    Примечание:
    Для второго метода, там где используется:
    PHP:
    // Установка v_ модели, которая отображается в руках игрока
        
    set_pev(idpev_viewmodelengfunc(EngFunc_AllocStringVIEW_MODEL))
     
        
    // Установка p_ модели, которая отображается, когда мы смотрим на игрока
        
    set_pev(idpev_weaponmodelengfunc(EngFunc_AllocStringPLAYER_MODEL))
    Можно использовать:
    PHP:
     // Установка v_ модели, которая отображается в руках игрока
        
    set_pev(idpev_viewmodel2VIEW_MODEL)

        
    // Установка p_ модели, которая отображается, когда мы смотрим на игрока
        
    set_pev(idpev_weaponmodel2PLAYER_MODEL)
    Тем самым не использовав EngFunc_AllocString.

    ID оружия:
    PHP:
    #define CSW_P228        1
    #define CSW_SCOUT        3
    #define CSW_HEGRENADE        4
    #define CSW_XM1014        5
    #define CSW_C4            6
    #define CSW_MAC10        7
    #define CSW_AUG            8
    #define CSW_SMOKEGRENADE    9
    #define CSW_ELITE        10
    #define CSW_FIVESEVEN        11
    #define CSW_UMP45        12
    #define CSW_SG550        13
    #define CSW_GALI        14
    #define CSW_GALIL        14
    #define CSW_FAMAS        15
    #define CSW_USP            16
    #define CSW_GLOCK18        17
    #define CSW_AWP            18
    #define CSW_MP5NAVY        19
    #define CSW_M249        20
    #define CSW_M3            21
    #define CSW_M4A1        22
    #define CSW_TMP            23
    #define CSW_G3SG1        24
    #define CSW_FLASHBANG        25
    #define CSW_DEAGLE        26
    #define CSW_SG552        27
    #define CSW_AK47        28
    #define CSW_KNIFE        29
    #define CSW_P90            30
    Пример для смены модели ножа:
    PHP:
    #include <amxmodx>
    #include <fakemeta>

    new VIEW_MODEL[]    = "models/v_newKnife.mdl"
    new PLAYER_MODEL[]    = "models/p_newKnife.mdl"
    new WORLD_MODEL[]    = "models/w_knife.mdl"

    new OLDWORLD_MODEL[]    = "models/w_knife.mdl"

    new PLUGIN_NAME[]        = "Custom Knife Model"
    new PLUGIN_AUTHOR[]    = "Cheap_Suit"
    new PLUGIN_VERSION[]     = "1.0"

    public plugin_init()
    {
        
    register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)   
        
    register_event("CurWeapon""Event_CurWeapon""be","1=1")
        
    register_forward(FM_SetModel"fw_SetModel")
    }

    public 
    plugin_precache()

        
    precache_model(VIEW_MODEL)   
        
    precache_model(PLAYER_MODEL)
        
    precache_model(WORLD_MODEL)
    }

    public 
    Event_CurWeapon(id)
    {   
        new 
    weaponID read_data(2)

        if(
    weaponID != CSW_KNIFE)
            return 
    PLUGIN_CONTINUE

        set_pev
    (idpev_viewmodel2VIEW_MODEL)
        
    set_pev(idpev_weaponmodel2PLAYER_MODEL)
     
        return 
    PLUGIN_CONTINUE
    }

    public 
    fw_SetModel(entitymodel[])
    {
        if (!
    pev_valid(entity))
            return 
    FMRES_IGNORED

        
    if (!equali(modelOLDWORLD_MODEL))
            return 
    FMRES_IGNORED

        
    new className[33]
        
    pev(entitypev_classnameclassName32)
     
        if (
    equal(className"weaponbox") || equal(className"armoury_entity") || equal(className"grenade"))
        {
            
    engfunc(EngFunc_SetModelentityWORLD_MODEL)
            return 
    FMRES_SUPERCEDE
        
    }
        return 
    FMRES_IGNORED
    }
     
    Последнее редактирование: 25 ноя 2016