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

Заставить игроков смотреть от лица объекта

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

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

Заставить игроков смотреть от лица объекта

Сообщение boogaga » 02 авг 2017, 16:13

Хочу сделать "чит" команду для админов:
При ее использовании по середине карты(есть координаты) создается объект. Как заставить всех игроков смотреть от лица этого объекта?
Аватара пользователя
boogaga
 
Сообщения: 32
Зарегистрирован: 19 дек 2016, 17:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Заставить игроков смотреть от лица объекта

Сообщение артист666 » 02 авг 2017, 19:24

Камера, ham_use.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Заставить игроков смотреть от лица объекта

Сообщение boogaga » 02 авг 2017, 20:40

артист666 писал(а):Камера, ham_use.

Нашел такой плагин камеры:
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>
#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("say /cam", "cam")
    register_think("trigger_camera", "Camera_Think")
    g_iMaxPlayers = get_maxplayers()
}

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

        entity_set_int(iEnt, EV_INT_spawnflags, SF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)

        DispatchSpawn(iEnt)
        set_pdata_float(iEnt, m_flWait, 999999.0, 4)

        g_iCam[id] = iEnt
    
}

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

    entity_set_int(id, EV_INT_flags, entity_get_int(id, EV_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_SG550, CSW_AWP, CSW_G3SG1 : flMaxSpeed = 210.0;
        case CSW_M249 : flMaxSpeed = 220.0;
        case CSW_AK47 : flMaxSpeed = 221.0;
        case CSW_M3, CSW_M4A1 : flMaxSpeed = 230.0;
        case CSW_SG552 : flMaxSpeed = 235.0;
        case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS : flMaxSpeed = 240.0;
        case CSW_P90 : flMaxSpeed = 245.0;
        case CSW_SCOUT : flMaxSpeed = 260.0;
        default : flMaxSpeed = 250.0;
    }
    set_user_maxspeed(id, flMaxSpeed);
}

get_cam_owner(iEnt)
{
    static id
    for
(id = 1; id<=g_iMaxPlayers; id++)
    {
        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_vector( id, EV_VEC_origin, origin );
    entity_get_vector( id, EV_VEC_v_angle, angle );

    angle_vector( angle, ANGLEVECTOR_FORWARD, vBack );

    origin[2] += 20.0;

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

    entity_set_origin( entid, origin );
    entity_set_vector( entid, EV_VEC_angles, angle );  

    entity_set_float
(entid, EV_FL_nextthink, get_gametime())


Вырезал нужное:
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>
#include <hamsandwich>

new Float:fOrigins[3] = {-144.109970, -1355.265991, -163.992752}
new Float:fAnglesf[3] = {0.0, 90.0, 0.0}

public plugin_init()
{
    register_clcmd("say /test", "test")
}

public test(id)
{
    new iEnt = create_entity("trigger_camera")
    
    if
(!is_valid_ent(iEnt))
        return
    
    entity_set_int
(iEnt, EV_INT_spawnflags, SF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)
    
    DispatchSpawn
(iEnt)
    set_pdata_float(iEnt, 42, 999999.0, 4)
    
    for
(new i = 1; i <= get_maxplayers(); i++)
    {
        if(is_user_alive(i))
        {
            ExecuteHam(Ham_Use, iEnt, i, i, 3, 1.0)
        }
    }
    
    entity_set_origin
(iEnt, fOrigins)
    entity_set_vector(iEnt, EV_VEC_angles, fAnglesf)


Но как то криво работает((


Если заменить(для теста):
Код: Выделить всё
for(new i = 1; i <= get_maxplayers(); i++)
{
    if(is_user_alive(i))
    {
        ExecuteHam(Ham_Use, iEnt, i, i, 3, 1.0)
    }

На:
Код: Выделить всё
ExecuteHam(Ham_Use, iEnt, 1, 1, 3, 1.0)//id = 1  


Все работает. Назрел вопрос - могут ли несколько игроков смотреть в одну камеру? Или придется для каждого ее отдельно создавать?
Аватара пользователя
boogaga
 
Сообщения: 32
Зарегистрирован: 19 дек 2016, 17:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Заставить игроков смотреть от лица объекта

Сообщение flymic24 » 02 авг 2017, 21:42

boogaga, Если не ошибаюсь, для этого есть
Код: Выделить всё
attach_view(iIndexiTargetIndex); 
Аватара пользователя
flymic24
 
Сообщения: 209
Зарегистрирован: 05 окт 2012, 17:29
Откуда: Bryansk
Благодарил (а): 4 раз.
Поблагодарили: 76 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Заставить игроков смотреть от лица объекта

Сообщение boogaga » 02 авг 2017, 23:17

flymic24 писал(а):boogaga, Если не ошибаюсь, для этого есть
Код: Выделить всё
attach_view(iIndex, iTargetIndex);

Все работает, но почему то неправильно устанавливаются координаты((
Код: Выделить всё
public test(id)
{
    new 
ent create_entity("info_target")
    
    if(!
is_valid_ent(ent))
        return
    
    
entity_set_origin(entfOrigins)
    
    
attach_view(ident);
Аватара пользователя
boogaga
 
Сообщения: 32
Зарегистрирован: 19 дек 2016, 17:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Заставить игроков смотреть от лица объекта

Сообщение артист666 » 03 авг 2017, 00:15

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

new Float:fOrigins[3] = {-144.109970, -1355.265991, -163.992752}
new 
Float:fAnglesf[3] = {0.090.00.0}
new 
g_entbool:g_vievs[33]

public 
plugin_init()
{
    
register_clcmd("say y""functions")
}
public 
plugin_precache()
{
    
precache_model("models/chick.mdl")
}
public 
functions(id)
{
    if(
g_vievs[id])
    {
        
engfunc(EngFunc_SetViewidid)
        
g_vievs[id] = false
    
}
    else if(
g_ent)
    {
        
        
engfunc(EngFunc_SetOriging_entfOrigins)
        
engfunc(EngFunc_SetViewidg_ent)
        
g_vievs[id] = true
        
        
static Float:o[3]; pev(g_entpev_origino)
        
client_print(idprint_chat"%f %f %f"o[0], o[1], o[2])
    }
    else if(
create())
    {
        
engfunc(EngFunc_SetViewidg_ent)
        
g_vievs[id] = true
    
}
    else 
client_print(idprint_chat"Bad create ent")
    return 
PLUGIN_HANDLED
}
public 
create()
{
    static 
entent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
    
    if(!
pev_valid(ent)) return 0

    engfunc
(EngFunc_SetModelent"models/chick.mdl")
    
dllfunc(DLLFunc_Spawnent)
    
set_pev(entpev_effectsEF_NODRAW)
    
set_pev(entpev_anglesfAnglesf)
    
engfunc(EngFunc_SetOriginentfOrigins)
    
g_ent ent
    
return 1
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Заставить игроков смотреть от лица объекта

Сообщение boogaga » 03 авг 2017, 15:51

артист666 писал(а):
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

new Float:fOrigins[3] = {-144.109970, -1355.265991, -163.992752}
new Float:fAnglesf[3] = {0.0, 90.0, 0.0}
new g_ent, bool:g_vievs[33]

public plugin_init()
{
    register_clcmd("say y", "functions")
}
public plugin_precache()
{
    precache_model("models/chick.mdl")
}
public functions(id)
{
    if(g_vievs[id])
    {
        engfunc(EngFunc_SetView, id, id)
        g_vievs[id] = false
    
}
    else if(g_ent)
    {
        
        engfunc
(EngFunc_SetOrigin, g_ent, fOrigins)
        engfunc(EngFunc_SetView, id, g_ent)
        g_vievs[id] = true
        
        static Float
:o[3]; pev(g_ent, pev_origin, o)
        client_print(id, print_chat, "%f %f %f", o[0], o[1], o[2])
    }
    else if(create())
    {
        engfunc(EngFunc_SetView, id, g_ent)
        g_vievs[id] = true
    
}
    else client_print(id, print_chat, "Bad create ent")
    return PLUGIN_HANDLED
}
public create()
{
    static ent; ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
    
    if
(!pev_valid(ent)) return 0

    engfunc
(EngFunc_SetModel, ent, "models/chick.mdl")
    dllfunc(DLLFunc_Spawn, ent)
    set_pev(ent, pev_effects, EF_NODRAW)
    set_pev(ent, pev_angles, fAnglesf)
    engfunc(EngFunc_SetOrigin, ent, fOrigins)
    g_ent = ent
    return 1
}

Какие бы координаты я бы не вписывал - все равно показывает с одного и того же места(( Хотя в чат выводит будто бы "камера" в нужных мне координатах :(
Аватара пользователя
boogaga
 
Сообщения: 32
Зарегистрирован: 19 дек 2016, 17:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Заставить игроков смотреть от лица объекта

Сообщение артист666 » 03 авг 2017, 18:49

Вся суть в том, что модель нужно установить.
Я же проверял код.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Заставить игроков смотреть от лица объекта

Сообщение boogaga » 03 авг 2017, 20:45

Такой вариант вполне работает:
Код: Выделить всё
for(new 1<= get_maxplayers(); i++)
{
    if(!
is_user_alive(i))
        continue;

    new 
ent create_entity("trigger_camera")
    
entity_set_int(entEV_INT_spawnflagsSF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)
    
DispatchSpawn(ent)
    
set_pdata_float(ent4299999999.04)

    
ExecuteHam(Ham_Useentii31.0)

    
entity_set_string(entEV_SZ_classname"my_camera")
    
entity_set_origin(entfOrigins)
    
entity_set_vector(entEV_VEC_anglesfAnglesf)
Аватара пользователя
boogaga
 
Сообщения: 32
Зарегистрирован: 19 дек 2016, 17:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Заставить игроков смотреть от лица объекта

Сообщение boogaga » 12 авг 2017, 15:17

boogaga писал(а):Такой вариант вполне работает:
Код: Выделить всё
for(new i = 1; i <= get_maxplayers(); i++)
{
    if(!is_user_alive(i))
        continue;

    new ent = create_entity("trigger_camera")
    entity_set_int(ent, EV_INT_spawnflags, SF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)
    DispatchSpawn(ent)
    set_pdata_float(ent, 42, 99999999.0, 4)

    ExecuteHam(Ham_Use, ent, i, i, 3, 1.0)

    entity_set_string(ent, EV_SZ_classname, "my_camera")
    entity_set_origin(ent, fOrigins)
    entity_set_vector(ent, EV_VEC_angles, fAnglesf)

Хмм.... Он то работает, но есть проблема:
После того - как игрок подключился к камере - камеру плавно начинает поворачивать в том направлении, где на самом деле стоит игрок. Можно ли заблокировать этой камере движение(поворот)?

P.S: Пробовал убрать
Код: Выделить всё
entity_set_int(ent, EV_INT_spawnflags, SF_CAMERA_PLAYER_TARGET|SF_CAMERA_PLAYER_POSITION)

Но после этого камера вообще не работает(
Аватара пользователя
boogaga
 
Сообщения: 32
Зарегистрирован: 19 дек 2016, 17:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Вопросы по AMXX и его плагинам

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

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