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

[3rd Person Camera] Только для Террористов  [Решено]

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

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

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

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

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

[3rd Person Camera] Только для Террористов

Сообщение MayroN » 11 ноя 2017, 06:37

ConnorMcLeod написал хороший Автомат. плагин от режима 3-го лица.Заходишь в игру и сразу без всяких доп.команд в чат.Мне-бы хотелось здесь добавить ,что-бы 3-е лицо давалось только Террористам ( но не Спецназу ).Как-бы смысл мой в том,что ето нужно для Мода Динозавров...

Спасибо за помощь :thumbs_up

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

#define VERSION "0.0.2" 

#define MAX_PLAYERS    32 

#define USE_TOGGLE 3 

new g_iPlayerCamera[MAX_PLAYERS+1] 

new g_iMaxPlayers 

public plugin_init
() 
{ 
    register_plugin
("Camera View AUTOMATIC", VERSION, "ConnorMcLeod") 

    RegisterHam
(Ham_Spawn, "player", "CBasePlayer_Spawn_Post", 1) 
    register_forward
(FM_SetView, "SetView") 
    RegisterHam
(Ham_Think, "trigger_camera", "Camera_Think") 

    g_iMaxPlayers 
= get_maxplayers() 
} 

public CBasePlayer_Spawn_Post
( id ) 
{ 
    if
( !is_user_alive(id) ) 
    
{ 
        return 
    
} 

    new iEnt 
= g_iPlayerCamera[id] 
    if
( !pev_valid(iEnt) ) 
    
{ 
        static iszTriggerCamera 
        if
( !iszTriggerCamera ) 
        
{ 
            iszTriggerCamera 
= engfunc(EngFunc_AllocString, "trigger_camera") 
        
} 
        iEnt 
= engfunc(EngFunc_CreateNamedEntity, iszTriggerCamera) 
        set_kvd
(0, KV_ClassName, "trigger_camera") 
        set_kvd
(0, KV_fHandled, 0) 
        set_kvd
(0, KV_KeyName, "wait") 
        set_kvd
(0, KV_Value, "999999") 
        dllfunc
(DLLFunc_KeyValue, iEnt, 0) 

        set_pev
(iEnt, pev_spawnflags, SF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION) 
        set_pev
(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_ALWAYSTHINK) 

        dllfunc
(DLLFunc_Spawn, iEnt) 

        g_iPlayerCamera
[id] = iEnt 
 
//   } 

        new Float:flMaxSpeed, iFlags = pev(id, pev_flags) 
        pev
(id, pev_maxspeed, flMaxSpeed) 

        ExecuteHam
(Ham_Use, iEnt, id, id, USE_TOGGLE, 1.0) 

        set_pev
(id, pev_flags, iFlags) 
        
// depending on mod, you may have to send SetClientMaxspeed here. 
        // engfunc(EngFunc_SetClientMaxspeed, id, flMaxSpeed) 
        set_pev(id, pev_maxspeed, flMaxSpeed) 
    
} 
} 

public SetView
(id, iEnt) 
{ 
    if
( is_user_alive(id) ) 
    
{ 
        new iCamera 
= g_iPlayerCamera[id] 
        if
( iCamera && iEnt != iCamera ) 
        
{ 
            new szClassName
[16] 
            pev
(iEnt, pev_classname, szClassName, charsmax(szClassName)) 
            if
( !equal(szClassName, "trigger_camera") ) // should let real cams enabled 
            { 
                engfunc
(EngFunc_SetView, id, iCamera) // shouldn't be always needed 
                return FMRES_SUPERCEDE 
            
} 
        
} 
    
} 
    return FMRES_IGNORED 
} 

public client_disconnect
(id) 
{ 
    new iEnt 
= g_iPlayerCamera[id] 
    if
( pev_valid(iEnt) ) 
    
{ 
        engfunc
(EngFunc_RemoveEntity, iEnt) 
    
} 
    g_iPlayerCamera
[id] = 0 
} 

public client_putinserver
(id) 
{ 
    g_iPlayerCamera
[id] = 0 
} 

get_cam_owner
(iEnt) 
{ 
    static id 
    for
(id = 1; id<=g_iMaxPlayers; id++) 
    
{ 
        if
( g_iPlayerCamera[id] == iEnt ) 
        
{ 
            return id 
        
} 
    
} 
    return 0 
} 

public Camera_Think
( iEnt ) 
{ 
    static id 
    if
( !(id = get_cam_owner( iEnt )) ) 
    
{ 
        return 
    
} 

    static Float
:fVecPlayerOrigin[3], Float:fVecCameraOrigin[3], Float:fVecAngles[3], Float:fVecBack[3] 

    pev
(id, pev_origin, fVecPlayerOrigin) 
    pev
(id, pev_view_ofs, fVecAngles) 
    fVecPlayerOrigin
[2] += fVecAngles[2] 

    pev
(id, pev_v_angle, fVecAngles) 

    
// See player from front ? 
    //fVecAngles[0] = 15.0 
    //fVecAngles[1] += fVecAngles[1] > 180.0 ? -180.0 : 180.0 

    angle_vector(fVecAngles, ANGLEVECTOR_FORWARD, fVecBack) 

    
//Move back to see ourself (150 units) 
    fVecCameraOrigin[0] = fVecPlayerOrigin[0] + (-fVecBack[0] * 150.0) 
    fVecCameraOrigin
[1] = fVecPlayerOrigin[1] + (-fVecBack[1] * 150.0) 
    fVecCameraOrigin
[2] = fVecPlayerOrigin[2] + (-fVecBack[2] * 150.0) 

    engfunc
(EngFunc_TraceLine, fVecPlayerOrigin, fVecCameraOrigin, IGNORE_MONSTERS, id, 0) 
    static Float
:flFraction 
    get_tr2
(0, TR_flFraction, flFraction) 
    if
( flFraction != 1.0 ) // adjust camera place if close to a wall 
    { 
        flFraction 
*= 150.0 
        fVecCameraOrigin
[0] = fVecPlayerOrigin[0] + (-fVecBack[0] * flFraction) 
        fVecCameraOrigin
[1] = fVecPlayerOrigin[1] + (-fVecBack[1] * flFraction) 
        fVecCameraOrigin
[2] = fVecPlayerOrigin[2] + (-fVecBack[2] * flFraction) 
    
} 

    set_pev
(iEnt, pev_origin, fVecCameraOrigin) 
    set_pev
(iEnt, pev_angles, fVecAngles) 
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: [3rd Person Camera] Только для Террористов

Сообщение Vaas » 11 ноя 2017, 23:58

Привет, попробуй такой вариант
Код: Выделить всё
#include <amxmodx>     
#include <hamsandwich>   
#include <engine> 
                       
public plugin_init() 

register_plugin("Camera View AUTOMATIC""1.0""ConnorMcLeod/Vaas")       
RegisterHam(Ham_Spawn"player""CBasePlayer_Spawn_Post"1
}  

public 
CBasePlayer_Spawn_Post(id
{   
if(!
is_user_alive(id)) return PLUGIN_HANDLED
if(get_user_team(id) == 1set_view(idCAMERA_3RDPERSON
else 
set_view(idCAMERA_NONE)
return 
PLUGIN_HANDLED
}      
Аватара пользователя
Vaas
 
Сообщения: 47
Зарегистрирован: 25 май 2016, 16:02
Благодарил (а): 12 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pascal
Pawn
Pawno
c++
php
js

Re: [3rd Person Camera] Только для Террористов  [Решено]

Сообщение MayroN » 12 ноя 2017, 02:00

Vaas,
Приветствую.Да - так работает.Только нужно было ещё подключить
Код: Выделить всё
public plugin_precache()
{
    precache_model("models/rpgrocket.mdl");
}

НО - текстура прозрачная(

Добавлено спустя 8 минут 8 секунд:
Добавлю.
А вообще нужно было всего навсего заменить в начале функции public SetView(id, iEnt)
ето
Код: Выделить всё
if( is_user_alive(id) )

етим
Код: Выделить всё
if(get_user_team(id) == 1)


И всё :-D
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 15