Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
spree » 21 сен 2018, 01:25
set_view(id, CAMERA_3RDPERSON) меня не устраивает, слишком далеко от модельки + она прозрачная и можно смотреть через текстуры.
Сделал вид от 3 лица с помощью trigger_camera, только вот отодвинуть назад не могу, камера в внутри модельки, да и инверсию мыши получаю, выручайте.
- Код: Выделить всё
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")
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
flymic24 » 21 сен 2018, 01:56
- Код: Выделить всё
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 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())
}
-
flymic24
-
- Сообщения: 209
- Зарегистрирован: 05 окт 2012, 17:29
- Откуда: Bryansk
- Благодарил (а): 4 раз.
- Поблагодарили: 76 раз.
- Опыт программирования: Около года
- Языки программирования: Counter-Strike 1.6
-
MayroN » 21 сен 2018, 02:44
Оно самое.
Более свежая версия
0.0.2- Код: Выделить всё
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)
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") ) {
engfunc(EngFunc_SetView, id, iCamera) 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)
angle_vector(fVecAngles, ANGLEVECTOR_FORWARD, fVecBack)
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 ) {
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)
}
-
MayroN
-
- Сообщения: 673
- Зарегистрирован: 10 окт 2010, 18:23
- Откуда: Украина, г. Белая Церковь
- Благодарил (а): 149 раз.
- Поблагодарили: 86 раз.
- Опыт программирования: Около года
- Языки программирования: На которых говорю...
-
limbooc » 22 сен 2018, 02:41
вот еще новее, с возможностью выдвигать вперед/назад
- Код: Выделить всё
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(sText, charsmax(sText), "%s \r3RD Person camera!", (mode) ? "\dDisable":"\yEnable")
menu_additem(menu, sText)
if(mode)
{
menu_additem(menu, "Forward Further!")
menu_additem(menu, "Backward Further!")
}
menu_display(id, menu)
return 1;
}
public cam_m_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1;
}
menu_destroy(menu);
if(g_iPlayerCamera[id] > 0 && item == 0)
{
client_disconnect(id)
engfunc(EngFunc_SetView, id, id);
}
else
{
switch( item )
{
case 0:
{
g_camera_position[id] = -150.0;
enable_camera(id)
}
case 1: if(g_camera_position[id] < MAX_FORWARD_UNITS) g_camera_position[id] += 50.0;
case 2: if(g_camera_position[id] > MAX_BACKWARD_UNITS) g_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_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)
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")) {
engfunc(EngFunc_SetView, id, iCamera) 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;
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(players, pnum, "ch");
for(new id, i; i < pnum; i++)
{
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(id, pev_origin, fVecPlayerOrigin)
pev(id, pev_view_ofs, fVecAngles)
fVecPlayerOrigin[2] += fVecAngles[2]
pev(id, pev_v_angle, fVecAngles)
angle_vector(fVecAngles, ANGLEVECTOR_FORWARD, fVec);
static Float:units; units = g_camera_position[id];
fVecCameraOrigin[0] = fVecPlayerOrigin[0] + (fVec[0] * units)
fVecCameraOrigin[1] = fVecPlayerOrigin[1] + (fVec[1] * units)
fVecCameraOrigin[2] = fVecPlayerOrigin[2] + (fVec[2] * units) + 15.0
static tr2; tr2 = create_tr2();
engfunc(EngFunc_TraceLine, fVecPlayerOrigin, fVecCameraOrigin, IGNORE_MONSTERS, id, tr2)
static Float:flFraction
get_tr2(tr2, TR_flFraction, flFraction)
if( flFraction != 1.0 ) {
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(iEnt, pev_origin, fVecCameraOrigin);
set_pev(iEnt, pev_angles, fVecAngles);
free_tr2(tr2);
}
-
limbooc
-
- Сообщения: 71
- Зарегистрирован: 15 мар 2017, 07:45
- Благодарил (а): 13 раз.
- Поблагодарили: 1 раз.
- Опыт программирования: Около года
- Языки программирования: Pawn
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11