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

Вид от 3 лица

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

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

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

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

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

Вид от 3 лица

Сообщение spree » 21 сен 2018, 01:25

set_view(id, CAMERA_3RDPERSON) меня не устраивает, слишком далеко от модельки + она прозрачная и можно смотреть через текстуры.

Сделал вид от 3 лица с помощью trigger_camera, только вот отодвинуть назад не могу, камера в внутри модельки, да и инверсию мыши получаю, выручайте.
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
 
#define PLUGIN "Third person camera"
#define VERSION "0.1"
#define AUTHOR "spree"
 
public plugin_init
() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /cam","view")
    register_clcmd("say /3","jok")
}
public view(id){
    set_view(id, CAMERA_3RDPERSON)
}

public plugin_precache()
{
    precache_model("models/rpgrocket.mdl")
}

public jok(id){
    new cam_ent = create_entity("trigger_camera")
    DispatchKeyValue(cam_ent,"spawnflags","2")
    DispatchKeyValue(cam_ent,"wait","10")
    //DispatchKeyValue(newent2,"target",id)
    DispatchSpawn(cam_ent)
    
    set_pev
(cam_ent, pev_movetype, MOVETYPE_FOLLOW)
    set_pev(cam_ent, pev_aiment, id )
    set_pev(cam_ent, pev_owner, id)
    
    new Float
:flOrigin[3]
    pev(id, pev_origin, flOrigin)
    flOrigin[0] += 30
    set_pev
(cam_ent, pev_origin, flOrigin)
    
    dllfunc
(DLLFunc_Use, cam_ent, id)
}
Аватара пользователя
spree
 
Сообщения: 708
Зарегистрирован: 05 дек 2013, 15:01
Благодарил (а): 67 раз.
Поблагодарили: 128 раз.
Языки программирования: PAWN

Re: Вид от 3 лица

Сообщение flymic24 » 21 сен 2018, 01:56

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

#define VERSION "0.0.1"

#define MAX_PLAYERS    32

#define    m_flWait        42

#define USE_TOGGLE 3

new g_iCam[MAX_PLAYERS+1]
new 
g_iMaxPlayers

public plugin_init()
{
    
register_plugin("Camera View"VERSION"ConnorMcLeod")
    
    
register_clcmd("test cam""cam")
    
register_think("trigger_camera""Camera_Think")
    
g_iMaxPlayers get_maxplayers()
}

public 
camid )
{
    if( !
is_user_alive(id) )
    {
        return
    }
    new 
iEnt g_iCam[id]
    if( !
is_valid_ent(iEnt) )
    {
        
iEnt create_entity("trigger_camera")

        
entity_set_int(iEntEV_INT_spawnflagsSF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)

        
DispatchSpawn(iEnt)
        
set_pdata_float(iEntm_flWait999999.04)

        
g_iCam[id] = iEnt
    
}

    
ExecuteHamHam_UseiEntididUSE_TOGGLE1.0)

    
entity_set_int(idEV_INT_flagsentity_get_int(idEV_INT_flags) & ~FL_FROZEN)
    
cs_reset_user_maxspeed(id)
}

public 
client_disconnect(id)
{
    new 
iEnt g_iCam[id]
    if( !
is_valid_ent(iEnt) )
    {
        
g_iCam[id] = 0
        remove_entity
(iEnt)
    }
}

cs_reset_user_maxspeed(id)
{
    new 
Float:flMaxSpeed;
    switch ( 
get_user_weapon(id) )
    {
        case 
CSW_SG550CSW_AWPCSW_G3SG1 flMaxSpeed 210.0;
        case 
CSW_M249 flMaxSpeed 220.0;
        case 
CSW_AK47 flMaxSpeed 221.0;
        case 
CSW_M3CSW_M4A1 flMaxSpeed 230.0;
        case 
CSW_SG552 flMaxSpeed 235.0;
        case 
CSW_XM1014CSW_AUGCSW_GALILCSW_FAMAS flMaxSpeed 240.0;
        case 
CSW_P90 flMaxSpeed 245.0;
        case 
CSW_SCOUT flMaxSpeed 260.0;
        default : 
flMaxSpeed 250.0;
    }
    
set_user_maxspeed(idflMaxSpeed);
}

get_cam_owner(iEnt)
{
    static 
id
    
for(id 1id<=g_iMaxPlayersid++)
    {
        if( 
g_iCam[id] == iEnt )
        {
            return 
id
        
}
    }
    return 
0
}

public 
Camera_Think(entid)
{
    new 
id get_cam_owner(entid);
    if( !
id )
    {
        return
    }

    static 
Float:origin[3], Float:angle[3], Float:vBack[3];
    
entity_get_vectoridEV_VEC_originorigin );
    
entity_get_vectoridEV_VEC_v_angleangle );

    
angle_vectorangleANGLEVECTOR_FORWARDvBack );

    
origin[2] += 20.0;

    
origin[0] += (-vBack[0] * 150.0);
    
origin[1] += (-vBack[1] * 150.0);
    
origin[2] += (-vBack[2] * 150.0);

    
entity_set_originentidorigin );
    
entity_set_vectorentidEV_VEC_anglesangle );  

    
entity_set_float(entidEV_FL_nextthinkget_gametime())
}
 
Аватара пользователя
flymic24
 
Сообщения: 209
Зарегистрирован: 05 окт 2012, 17:29
Откуда: Bryansk
Благодарил (а): 4 раз.
Поблагодарили: 76 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Вид от 3 лица

Сообщение MayroN » 21 сен 2018, 02:44

Оно самое.
Более свежая версия 0.0.2
Код: Выделить всё
#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
(get_user_team(id) == 1) 
    
{ 
        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: Вид от 3 лица

Сообщение limbooc » 22 сен 2018, 02:41

вот еще новее, с возможностью выдвигать вперед/назад

Код: Выделить всё
/* BIG CREDITS FOR ConnorMcLeod
I Only just modified the front camera and added a scale controlled by a player, so he can zoom in/out! & added a menu*/

#include <amxmodx> 
#include <fakemeta> 
#include <hamsandwich> 

#define VERSION "0.0.3" 

#define USE_TOGGLE 3

#define MAX_BACKWARD_UNITS    -200.0
#define MAX_FORWARD_UNITS    200.0

new g_iPlayerCamera[33], Float:g_camera_position[33];

public 
plugin_init()
{
    
register_plugin("Camera View Menu"VERSION"ConnorMcLeod & Natsheh"
    
    
register_clcmd("say /cam""camera_menu")
    
register_clcmd("say_team /cam""camera_menu")
    
    
register_forward(FM_SetView"SetView"
    
RegisterHam(Ham_Think"trigger_camera""Camera_Think")
}

public 
camera_menu(id)
{
    if(!
is_user_alive(id))
    {
        return 
1;
    }
    
    new 
menu menu_create("Choose an option!""cam_m_handler"), sText[48], bool:mode = (g_iPlayerCamera[id] > 0) ? true:false;
    
    
formatex(sTextcharsmax(sText), "%s \r3RD Person camera!", (mode) ? "\dDisable":"\yEnable")
    
menu_additem(menusText)
    
    if(
mode)
    {
        
menu_additem(menu"Forward Further!")
        
menu_additem(menu"Backward Further!")
    }
    
    
menu_display(idmenu)
    return 
1;
}

public 
cam_m_handler(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
1;
    }
    
    
menu_destroy(menu);
    
    if(
g_iPlayerCamera[id] > && item == 0)
    {
        
client_disconnect(id)
        
engfunc(EngFunc_SetViewidid);
    }
    else
    {
        switch( 
item )
        {
            case 
0:
            {
                
g_camera_position[id] = -150.0;
                
enable_camera(id)
            }
            case 
1: if(g_camera_position[id] < MAX_FORWARD_UNITSg_camera_position[id] += 50.0;
            case 
2: if(g_camera_position[id] > MAX_BACKWARD_UNITSg_camera_position[id] -= 50.0;
        }
    }
    
    
camera_menu(id)
    return 
1;
}

public 
enable_camera(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_CreateNamedEntityiszTriggerCamera);
        
set_kvd(0KV_ClassName"trigger_camera"
        
set_kvd(0KV_fHandled0
        
set_kvd(0KV_KeyName"wait"
        
set_kvd(0KV_Value"999999"
        
dllfunc(DLLFunc_KeyValueiEnt0
    
        
set_pev(iEntpev_spawnflagsSF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_ALWAYSTHINK
    
        
dllfunc(DLLFunc_SpawniEnt)
    
        
g_iPlayerCamera[id] = iEnt;
 
//   }     
        
new Float:flMaxSpeediFlags pev(idpev_flags
        
pev(idpev_maxspeedflMaxSpeed)
        
        
ExecuteHam(Ham_UseiEntididUSE_TOGGLE1.0)
        
        
set_pev(idpev_flagsiFlags)
        
// depending on mod, you may have to send SetClientMaxspeed here. 
        // engfunc(EngFunc_SetClientMaxspeed, id, flMaxSpeed) 
        
set_pev(idpev_maxspeedflMaxSpeed)
    }
}

public 
SetView(idiEnt

    if(
is_user_alive(id))
    {
        new 
iCamera g_iPlayerCamera[id
        if( 
iCamera && iEnt != iCamera 
        { 
            new 
szClassName[16
            
pev(iEntpev_classnameszClassNamecharsmax(szClassName)) 
            if(!
equal(szClassName"trigger_camera")) // should let real cams enabled 
            

                
engfunc(EngFunc_SetViewidiCamera// 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_RemoveEntityiEnt);
    
g_iPlayerCamera[id] = 0;
    
g_camera_position[id] = -100.0;


public 
client_putinserver(id
{
    
g_iPlayerCamera[id] = 0
    g_camera_position
[id] = -100.0;


get_cam_owner(iEnt

    new 
players[32], pnum;
    
get_players(playerspnum"ch");
    
    for(new 
idipnumi++)
    { 
        
id players[i];
        
        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:fVec[3];
    
    
pev(idpev_originfVecPlayerOrigin
    
pev(idpev_view_ofsfVecAngles
    
fVecPlayerOrigin[2] += fVecAngles[2
    
    
pev(idpev_v_anglefVecAngles
    
    
angle_vector(fVecAnglesANGLEVECTOR_FORWARDfVec);
    static 
Float:unitsunits g_camera_position[id];
    
    
//Move back/forward to see ourself
    
fVecCameraOrigin[0] = fVecPlayerOrigin[0] + (fVec[0] * units)
    
fVecCameraOrigin[1] = fVecPlayerOrigin[1] + (fVec[1] * units
    
fVecCameraOrigin[2] = fVecPlayerOrigin[2] + (fVec[2] * units) + 15.0
    
    
static tr2tr2 create_tr2();
    
engfunc(EngFunc_TraceLinefVecPlayerOriginfVecCameraOriginIGNORE_MONSTERSidtr2)
    static 
Float:flFraction 
    get_tr2
(tr2TR_flFractionflFraction)
    if( 
flFraction != 1.0 // adjust camera place if close to a wall 
    
{
        
flFraction *= units;
        
fVecCameraOrigin[0] = fVecPlayerOrigin[0] + (fVec[0] * flFraction);
        
fVecCameraOrigin[1] = fVecPlayerOrigin[1] + (fVec[1] * flFraction);
        
fVecCameraOrigin[2] = fVecPlayerOrigin[2] + (fVec[2] * flFraction);
    }
    
    if(
units 0.0)
    {
        
fVecAngles[0] *= fVecAngles[0] > 180.0 1:-1
        fVecAngles
[1] += fVecAngles[1] > 180.0 ? -180.0:180.0
    
}
    
    
set_pev(iEntpev_originfVecCameraOrigin); 
    
set_pev(iEntpev_anglesfVecAngles);
    
    
free_tr2(tr2);
}
 
Аватара пользователя
limbooc
 
Сообщения: 71
Зарегистрирован: 15 мар 2017, 07:45
Благодарил (а): 13 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Pawn


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

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

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

cron