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

stopsound в плагине  [Решено]

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

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

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

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

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

stopsound в плагине

Сообщение newtramp1 » 01 июн 2023, 20:29

Добрый вечер. Есть код.

Код: Выделить всё
startAnim(pPlayeriAnim)
{
    new 
aSeqDesc[SEQ_DESC], szModel[32];
    
ArrayGetArray(g_animDataiAnimaSeqDesc);
    
    new 
id eAnimationStruct[pPlayer][ENT_ANIM];
    new 
id2 eAnimationStruct[pPlayer][ENT_MODEL];
    
    
set_pev(idpev_framerate1.0);
    
set_pev(idpev_sequenceiAnim);
    
set_pev(idpev_gaitsequenceiAnim);
    
    new 
Float:vecOrigin[3], Float:vecMins[3];
    
    
pev(pPlayerpev_originvecOrigin);
    
pev(pPlayerpev_minsvecMins);
    
    
vecMins[0] = vecOrigin[0];
    
vecMins[1] = vecOrigin[1];
    
vecMins[2] += vecOrigin[2];
    
    
set_pev(idpev_originvecMins);
    
set_pev(id2pev_effects0);
    
    
get_user_info(pPlayer"model"szModelcharsmax(szModel));
    
engfunc(EngFunc_SetModelid2fmt("models/player/%s/%s.mdl"szModelszModel));
    
    
set_pev(id2pev_bodypev(pPlayerpev_body));
    
set_pev(id2pev_skinpev(pPlayerpev_skin));
    
    
set_pev(idpev_controller_0128);
    
set_pev(idpev_controller_1128);
    
    
pev(pPlayerpev_anglesvecMins);
    
vecMins[0] = 0.0;
    
set_pev(idpev_anglesvecMins);
    
set_pev(idpev_v_anglevecMins);
    
    
engfunc(EngFunc_SetViewpPlayereAnimationStruct[pPlayer][ENT_CAM]);
    
eAnimationStruct[pPlayer][ANIM_PLAYING] = 1;
    
/*
    if (!eAnimationStruct[pPlayer][ANIM_PLAYING])
    {
        eAnimationStruct[pPlayer][PREVIOUS_VIEW] = get_viewent(pPlayer);
        engset_view(pPlayer, eAnimationStruct[pPlayer][ENT_CAM]);
        eAnimationStruct[pPlayer][ANIM_PLAYING] = 1;
    }
*/
    
    // disable voice
    
client_cmd(pPlayer"stopsound");
    
    
set_pev(pPlayerpev_effectsEF_NODRAW);
}

stopAnim(idreset_view 1)
{
    
set_pev(eAnimationStruct[id][ENT_MODEL], pev_effectsEF_NODRAW);
    
eAnimationStruct[id][ANIM_PLAYING] = 0;
    
set_pev(idpev_effects0);
    
    if (
reset_view)
    {
        
// engset_view(id, eAnimationStruct[id][PREVIOUS_VIEW]);
        
engfunc(EngFunc_SetViewidid);
        
        
// disable voice
        
client_cmd(id"stopsound");
    }



Подскажите пожалуйста, как сделать, чтобы stopsound в stopAnim(id, reset_view = 1) выполнялся в случае если активна анимация. В данный момент команда посылается даже если анимация неактивна и соответственно если игрок умирает, у него выполняется stopsound
Аватара пользователя
newtramp1
 
Сообщения: 15
Зарегистрирован: 30 янв 2017, 15:24
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: stopsound в плагине

Сообщение [N][E][M][E][C] » 01 июн 2023, 22:39

Код: Выделить всё
if(eAnimationStruct[id][ANIM_PLAYING])
    
client_cmd(id"stopsound"); 
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: stopsound в плагине

Сообщение newtramp1 » 01 июн 2023, 23:13

[N][E][M][E][C] писал(а):
Код: Выделить всё
if(eAnimationStruct[id][ANIM_PLAYING])
    client_cmd(id, "stopsound");


Не работает. Звук все так же при смерти стопается, даже если не юзается анимация
Аватара пользователя
newtramp1
 
Сообщения: 15
Зарегистрирован: 30 янв 2017, 15:24
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: stopsound в плагине

Сообщение [N][E][M][E][C] » 01 июн 2023, 23:19

Покажи весь код
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: stopsound в плагине

Сообщение newtramp1 » 01 июн 2023, 23:23

[N][E][M][E][C] писал(а):Покажи весь код



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

//native is_user_on_platform(id);
//native EE_IsPlayerDuel(id);

new const MODEL[] = "models/nolkfun/player_dance_v3.mdl";

enum _:PLAYER_DATA
{
    
ENT_CAM,
    
ENT_MODEL,
    
ENT_ANIM,
    
ANIM_PLAYING,
    
// PREVIOUS_VIEW,
    
};    new eAnimationStruct[MAX_PLAYERS 1][PLAYER_DATA];

enum _:SEQ_DESC
{
    
SEQ_MODEL[MAX_RESOURCE_PATH_LENGTH],
    
SEQ_LABEL[48],
    
SEQ_FPS,
    
SEQ_FRAMES,
    
SEQ_FRAMERATE,
    
};    new Array:
g_animData;

new 
g_animMenug_allocString;

public 
plugin_precache()
{
    
precache_model(MODEL);
}

public 
plugin_end()
{
    if (
g_animData) {
        
ArrayDestroy(g_animData);
    }
}

public 
plugin_init()
{
    
register_plugin("Players Animations""1.0.0""PomanoB");
    
    
register_clcmd("say /dance""clcmd_dance_menu");
    
register_clcmd("say_team /dance""clcmd_dance_menu");
    
    
RegisterHookChain(RG_CBasePlayer_Killed"CBasePlayer_Killed"false);
    
    
// Stored data
    
g_animData ArrayCreate(SEQ_DESC);
    
    
// Store global menu
    
g_animMenu menu_create("Танцы""anim_menu_handler");
    
    
// Store entity index
    
g_allocString engfunc(EngFunc_AllocString"info_target");
    
    
// Load animations
    
loadModel(MODEL);
}

loadModel(const szModel[])
{
    new 
iFile;
    
    if (!(
iFile fopen(szModel"rt"))) {
        
set_fail_state("[!] Failed to opened file");
    }
    
    new 
iSeqNumiSeqIndexFloat:flFrameRateaSeqDesc[SEQ_DESC];
    
    
fseek(iFile164SEEK_SET);
    
fread(iFileiSeqNumBLOCK_INT);
    
fread(iFileiSeqIndexBLOCK_INT);
    
    for (new 
iiSeqNumi++)
    {
        
fseek(iFileiSeqIndex 176 iSEEK_SET);
        
fread_blocks(iFileaSeqDesc[SEQ_LABEL], charsmax(aSeqDesc[SEQ_LABEL]), BLOCK_CHAR);
        
fread(iFileaSeqDesc[SEQ_FPS], BLOCK_INT);
        
fseek(iFile20SEEK_CUR);
        
fread(iFileaSeqDesc[SEQ_FRAMES], BLOCK_INT);
        
        
flFrameRate 256.0 Float:aSeqDesc[SEQ_FPS] / (aSeqDesc[SEQ_FRAMES] - 1);
        
aSeqDesc[SEQ_FRAMERATE] = _:flFrameRate;
        
ArrayPushArray(g_animDataaSeqDesc);
        
        
menu_additem(g_animMenuaSeqDesc[SEQ_LABEL]);
    }
    
    
menu_setprop(g_animMenuMPROP_SHOWPAGEfalse);
    
menu_setprop(g_animMenuMPROP_NEXTNAME"Далее");
    
menu_setprop(g_animMenuMPROP_BACKNAME"Назад");
    
menu_setprop(g_animMenuMPROP_EXITNAME"Выход");
    
    
fclose(iFile);
}

public 
client_putinserver(id)
{
    if (!
eAnimationStruct[id][ENT_MODEL]) {
        
createStruct(id);
    }
}

createStruct(pPlayer)
{
    new 
id engfunc(EngFunc_CreateNamedEntityg_allocString);
    
    
set_pev(idpev_rendermodekRenderTransAlpha);
    
set_pev(idpev_renderamt0.0);
    
set_pev(idpev_ownerpPlayer);
    
    
engfunc(EngFunc_SetModelidMODEL);
    
    
eAnimationStruct[pPlayer][ENT_CAM] = id;
    
    
id engfunc(EngFunc_CreateNamedEntityg_allocString);
    
    
set_pev(idpev_movetypeMOVETYPE_FLY);
    
set_pev(idpev_controller_163.75);
    
    
engfunc(EngFunc_SetModelidMODEL);
    
    
eAnimationStruct[pPlayer][ENT_ANIM] = id;
    
    
id engfunc(EngFunc_CreateNamedEntityg_allocString);
    
    
set_pev(idpev_movetypeMOVETYPE_FOLLOW);
    
set_pev(idpev_aimenteAnimationStruct[pPlayer][ENT_ANIM]);
    
set_pev(idpev_effectsEF_NODRAW);
    
    
eAnimationStruct[pPlayer][ENT_MODEL] = id;
}

public 
clcmd_dance_menu(id)
{
    
menu_display(idg_animMenu);
    return 
PLUGIN_HANDLED;
}

startAnim(pPlayeriAnim)
{
    new 
aSeqDesc[SEQ_DESC], szModel[32];
    
ArrayGetArray(g_animDataiAnimaSeqDesc);
    
    new 
id eAnimationStruct[pPlayer][ENT_ANIM];
    new 
id2 eAnimationStruct[pPlayer][ENT_MODEL];
    
    
set_pev(idpev_framerate1.0);
    
set_pev(idpev_sequenceiAnim);
    
set_pev(idpev_gaitsequenceiAnim);
    
    new 
Float:vecOrigin[3], Float:vecMins[3];
    
    
pev(pPlayerpev_originvecOrigin);
    
pev(pPlayerpev_minsvecMins);
    
    
vecMins[0] = vecOrigin[0];
    
vecMins[1] = vecOrigin[1];
    
vecMins[2] += vecOrigin[2];
    
    
set_pev(idpev_originvecMins);
    
set_pev(id2pev_effects0);
    
    
get_user_info(pPlayer"model"szModelcharsmax(szModel));
    
engfunc(EngFunc_SetModelid2fmt("models/player/%s/%s.mdl"szModelszModel));
    
    
set_pev(id2pev_bodypev(pPlayerpev_body));
    
set_pev(id2pev_skinpev(pPlayerpev_skin));
    
    
set_pev(idpev_controller_0128);
    
set_pev(idpev_controller_1128);
    
    
pev(pPlayerpev_anglesvecMins);
    
vecMins[0] = 0.0;
    
set_pev(idpev_anglesvecMins);
    
set_pev(idpev_v_anglevecMins);
    
    
engfunc(EngFunc_SetViewpPlayereAnimationStruct[pPlayer][ENT_CAM]);
    
eAnimationStruct[pPlayer][ANIM_PLAYING] = 1;
    
/*
    if (!eAnimationStruct[pPlayer][ANIM_PLAYING])
    {
        eAnimationStruct[pPlayer][PREVIOUS_VIEW] = get_viewent(pPlayer);
        engset_view(pPlayer, eAnimationStruct[pPlayer][ENT_CAM]);
        eAnimationStruct[pPlayer][ANIM_PLAYING] = 1;
    }
*/
    
    // disable voice
    
client_cmd(pPlayer"stopsound");
    
    
set_pev(pPlayerpev_effectsEF_NODRAW);
}

stopAnim(idreset_view 1)
{
    
set_pev(eAnimationStruct[id][ENT_MODEL], pev_effectsEF_NODRAW);
    
eAnimationStruct[id][ANIM_PLAYING] = 0;
    
set_pev(idpev_effects0);
    
    if (
reset_view)
    {
        
// engset_view(id, eAnimationStruct[id][PREVIOUS_VIEW]);
        
engfunc(EngFunc_SetViewidid);
        
        
// disable voice
        
if(eAnimationStruct[id][ANIM_PLAYING])
        {
        
client_cmd(id"stopsound");
        }
    }
}

public 
anim_menu_handler(idmenuitem)
{
    if (
item == MENU_EXIT) {
        return 
PLUGIN_HANDLED;
    }
    
    if (!
is_user_alive(id))
    {
        
client_print_color(idprint_team_default"^4[Нация Ножей] ^3Только для живых!");
        return 
PLUGIN_HANDLED;
    }
    
    if (~
pev(idpev_flags) & FL_ONGROUND || pev(idpev_button) > 0)
    {
        
client_print_color(idprint_team_default"^4[Нация Ножей] ^3Вы должны стоять на месте!");
        
menu_display(idmenuitem 7);    
        return 
PLUGIN_HANDLED;
    }
    
    
//if (is_user_on_platform(id))
    //{
        //client_print_color(id, print_team_default, "^4[Нация Ножей] ^3Вы не должны находится на мосту!");
        //menu_display(id, menu, item / 7);    
        //return PLUGIN_HANDLED;
    //}
    
    //if(EE_IsPlayerDuel(id)){
        //client_print_color(id, print_team_default, "^4[Нация Ножей] ^3Недоступно во время дуэли.");
        //return PLUGIN_HANDLED;
    //}
    
    
startAnim(iditem);
    
    
RequestFrame("@dance_think"id);
    
    
menu_display(idmenuitem 7);
    
    return 
PLUGIN_HANDLED;
}

@
dance_think(id)
{
    if (!
eAnimationStruct[id][ANIM_PLAYING])
        return;
    
    if (
pev(idpev_button) > 0)
    {
        
client_print_color(idprint_team_default"^4[Нация Ножей] ^3Вы двинулись, танец исчез!");
        
stopAnim(id);
        return;
    }

/*    
    if (duel)
    {
        stopAnim(id);
        return;
    }
*/

    
static Float:vecSrc[3], Float:vecEnd[3], Float:vecAngle[3], Float:vecOrigin[3];
    
    
pev(idpev_velocityvecSrc);
    if (
vector_length(vecSrc) > 10.0)
    {
        
client_print_color(idprint_team_default"^4[Нация Ножей] ^3Вы двинулись, танец исчез!");
        
stopAnim(id);
        return;
    }
    
    
pev(idpev_originvecOrigin);
    
pev(idpev_view_ofsvecSrc);
    
    
xs_vec_add(vecOriginvecSrcvecOrigin);
    
xs_vec_copy(vecOriginvecSrc);
    
    
pev(idpev_v_anglevecAngle);
    
    
angle_vector(vecAngleANGLEVECTOR_FORWARDvecEnd);
    
    
vecSrc[2] += 20.0;
    
vecSrc[0] += (-vecEnd[0] * 150.0);
    
vecSrc[1] += (-vecEnd[1] * 150.0);
    
vecSrc[2] += (-vecEnd[2] * 150.0);
    
    
engfunc(EngFunc_TraceLinevecOriginvecSrcIGNORE_MONSTERSid0);
    
get_tr2(0TR_vecEndPosvecSrc);
    
    
// Sets calculated vectors
    
engfunc(EngFunc_SetOrigineAnimationStruct[id][ENT_CAM], vecSrc);
    
set_pev(eAnimationStruct[id][ENT_CAM], pev_anglesvecAngle);
    
    
RequestFrame("@dance_think"id);
}

public 
client_disconnected(id)
{
    
stopAnim(id0);
    
    
// eAnimationStruct[id][PREVIOUS_VIEW] = NULLENT;
}

public 
CBasePlayer_Killed(id)
{
    
stopAnim(id);
}
 
Аватара пользователя
newtramp1
 
Сообщения: 15
Зарегистрирован: 30 янв 2017, 15:24
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: stopsound в плагине  [Решено]

Сообщение [N][E][M][E][C] » 01 июн 2023, 23:30

Код: Выделить всё
public CBasePlayer_Killed(id)
{
   if(!
eAnimationStruct[id][ANIM_PLAYING])
        return;

   
stopAnim(id);
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи


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

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

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