Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
newtramp1 » 01 июн 2023, 20:29
Добрый вечер. Есть код.
- Код: Выделить всё
startAnim(pPlayer, iAnim)
{
new aSeqDesc[SEQ_DESC], szModel[32];
ArrayGetArray(g_animData, iAnim, aSeqDesc);
new id = eAnimationStruct[pPlayer][ENT_ANIM];
new id2 = eAnimationStruct[pPlayer][ENT_MODEL];
set_pev(id, pev_framerate, 1.0);
set_pev(id, pev_sequence, iAnim);
set_pev(id, pev_gaitsequence, iAnim);
new Float:vecOrigin[3], Float:vecMins[3];
pev(pPlayer, pev_origin, vecOrigin);
pev(pPlayer, pev_mins, vecMins);
vecMins[0] = vecOrigin[0];
vecMins[1] = vecOrigin[1];
vecMins[2] += vecOrigin[2];
set_pev(id, pev_origin, vecMins);
set_pev(id2, pev_effects, 0);
get_user_info(pPlayer, "model", szModel, charsmax(szModel));
engfunc(EngFunc_SetModel, id2, fmt("models/player/%s/%s.mdl", szModel, szModel));
set_pev(id2, pev_body, pev(pPlayer, pev_body));
set_pev(id2, pev_skin, pev(pPlayer, pev_skin));
set_pev(id, pev_controller_0, 128);
set_pev(id, pev_controller_1, 128);
pev(pPlayer, pev_angles, vecMins);
vecMins[0] = 0.0;
set_pev(id, pev_angles, vecMins);
set_pev(id, pev_v_angle, vecMins);
engfunc(EngFunc_SetView, pPlayer, eAnimationStruct[pPlayer][ENT_CAM]);
eAnimationStruct[pPlayer][ANIM_PLAYING] = 1;
client_cmd(pPlayer, "stopsound");
set_pev(pPlayer, pev_effects, EF_NODRAW);
}
stopAnim(id, reset_view = 1)
{
set_pev(eAnimationStruct[id][ENT_MODEL], pev_effects, EF_NODRAW);
eAnimationStruct[id][ANIM_PLAYING] = 0;
set_pev(id, pev_effects, 0);
if (reset_view)
{
engfunc(EngFunc_SetView, id, id);
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#
[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 раз.
- Опыт программирования: Около года
- Языки программирования: Нуждаюсь в помощи
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#
[N][E][M][E][C] » 01 июн 2023, 23:19
Покажи весь код
-
[N][E][M][E][C]
-
- Сообщения: 641
- Зарегистрирован: 14 фев 2021, 10:48
- Благодарил (а): 50 раз.
- Поблагодарили: 89 раз.
- Опыт программирования: Около года
- Языки программирования: Нуждаюсь в помощи
newtramp1 » 01 июн 2023, 23:23
[N][E][M][E][C] писал(а):Покажи весь код
- Код: Выделить всё
new const MODEL[] = "models/nolkfun/player_dance_v3.mdl";
enum _:PLAYER_DATA
{
ENT_CAM,
ENT_MODEL,
ENT_ANIM,
ANIM_PLAYING,
}; 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_animMenu, g_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);
g_animData = ArrayCreate(SEQ_DESC);
g_animMenu = menu_create("Танцы", "anim_menu_handler");
g_allocString = engfunc(EngFunc_AllocString, "info_target");
loadModel(MODEL);
}
loadModel(const szModel[])
{
new iFile;
if (!(iFile = fopen(szModel, "rt"))) {
set_fail_state("[!] Failed to opened file");
}
new iSeqNum, iSeqIndex, Float:flFrameRate, aSeqDesc[SEQ_DESC];
fseek(iFile, 164, SEEK_SET);
fread(iFile, iSeqNum, BLOCK_INT);
fread(iFile, iSeqIndex, BLOCK_INT);
for (new i; i < iSeqNum; i++)
{
fseek(iFile, iSeqIndex + 176 * i, SEEK_SET);
fread_blocks(iFile, aSeqDesc[SEQ_LABEL], charsmax(aSeqDesc[SEQ_LABEL]), BLOCK_CHAR);
fread(iFile, aSeqDesc[SEQ_FPS], BLOCK_INT);
fseek(iFile, 20, SEEK_CUR);
fread(iFile, aSeqDesc[SEQ_FRAMES], BLOCK_INT);
flFrameRate = 256.0 * Float:aSeqDesc[SEQ_FPS] / (aSeqDesc[SEQ_FRAMES] - 1);
aSeqDesc[SEQ_FRAMERATE] = _:flFrameRate;
ArrayPushArray(g_animData, aSeqDesc);
menu_additem(g_animMenu, aSeqDesc[SEQ_LABEL]);
}
menu_setprop(g_animMenu, MPROP_SHOWPAGE, false);
menu_setprop(g_animMenu, MPROP_NEXTNAME, "Далее");
menu_setprop(g_animMenu, MPROP_BACKNAME, "Назад");
menu_setprop(g_animMenu, MPROP_EXITNAME, "Выход");
fclose(iFile);
}
public client_putinserver(id)
{
if (!eAnimationStruct[id][ENT_MODEL]) {
createStruct(id);
}
}
createStruct(pPlayer)
{
new id = engfunc(EngFunc_CreateNamedEntity, g_allocString);
set_pev(id, pev_rendermode, kRenderTransAlpha);
set_pev(id, pev_renderamt, 0.0);
set_pev(id, pev_owner, pPlayer);
engfunc(EngFunc_SetModel, id, MODEL);
eAnimationStruct[pPlayer][ENT_CAM] = id;
id = engfunc(EngFunc_CreateNamedEntity, g_allocString);
set_pev(id, pev_movetype, MOVETYPE_FLY);
set_pev(id, pev_controller_1, 63.75);
engfunc(EngFunc_SetModel, id, MODEL);
eAnimationStruct[pPlayer][ENT_ANIM] = id;
id = engfunc(EngFunc_CreateNamedEntity, g_allocString);
set_pev(id, pev_movetype, MOVETYPE_FOLLOW);
set_pev(id, pev_aiment, eAnimationStruct[pPlayer][ENT_ANIM]);
set_pev(id, pev_effects, EF_NODRAW);
eAnimationStruct[pPlayer][ENT_MODEL] = id;
}
public clcmd_dance_menu(id)
{
menu_display(id, g_animMenu);
return PLUGIN_HANDLED;
}
startAnim(pPlayer, iAnim)
{
new aSeqDesc[SEQ_DESC], szModel[32];
ArrayGetArray(g_animData, iAnim, aSeqDesc);
new id = eAnimationStruct[pPlayer][ENT_ANIM];
new id2 = eAnimationStruct[pPlayer][ENT_MODEL];
set_pev(id, pev_framerate, 1.0);
set_pev(id, pev_sequence, iAnim);
set_pev(id, pev_gaitsequence, iAnim);
new Float:vecOrigin[3], Float:vecMins[3];
pev(pPlayer, pev_origin, vecOrigin);
pev(pPlayer, pev_mins, vecMins);
vecMins[0] = vecOrigin[0];
vecMins[1] = vecOrigin[1];
vecMins[2] += vecOrigin[2];
set_pev(id, pev_origin, vecMins);
set_pev(id2, pev_effects, 0);
get_user_info(pPlayer, "model", szModel, charsmax(szModel));
engfunc(EngFunc_SetModel, id2, fmt("models/player/%s/%s.mdl", szModel, szModel));
set_pev(id2, pev_body, pev(pPlayer, pev_body));
set_pev(id2, pev_skin, pev(pPlayer, pev_skin));
set_pev(id, pev_controller_0, 128);
set_pev(id, pev_controller_1, 128);
pev(pPlayer, pev_angles, vecMins);
vecMins[0] = 0.0;
set_pev(id, pev_angles, vecMins);
set_pev(id, pev_v_angle, vecMins);
engfunc(EngFunc_SetView, pPlayer, eAnimationStruct[pPlayer][ENT_CAM]);
eAnimationStruct[pPlayer][ANIM_PLAYING] = 1;
client_cmd(pPlayer, "stopsound");
set_pev(pPlayer, pev_effects, EF_NODRAW);
}
stopAnim(id, reset_view = 1)
{
set_pev(eAnimationStruct[id][ENT_MODEL], pev_effects, EF_NODRAW);
eAnimationStruct[id][ANIM_PLAYING] = 0;
set_pev(id, pev_effects, 0);
if (reset_view)
{
engfunc(EngFunc_SetView, id, id);
if(eAnimationStruct[id][ANIM_PLAYING])
{
client_cmd(id, "stopsound");
}
}
}
public anim_menu_handler(id, menu, item)
{
if (item == MENU_EXIT) {
return PLUGIN_HANDLED;
}
if (!is_user_alive(id))
{
client_print_color(id, print_team_default, "^4[Нация Ножей] ^3Только для живых!");
return PLUGIN_HANDLED;
}
if (~pev(id, pev_flags) & FL_ONGROUND || pev(id, pev_button) > 0)
{
client_print_color(id, print_team_default, "^4[Нация Ножей] ^3Вы должны стоять на месте!");
menu_display(id, menu, item / 7);
return PLUGIN_HANDLED;
}
startAnim(id, item);
RequestFrame("@dance_think", id);
menu_display(id, menu, item / 7);
return PLUGIN_HANDLED;
}
@dance_think(id)
{
if (!eAnimationStruct[id][ANIM_PLAYING])
return;
if (pev(id, pev_button) > 0)
{
client_print_color(id, print_team_default, "^4[Нация Ножей] ^3Вы двинулись, танец исчез!");
stopAnim(id);
return;
}
static Float:vecSrc[3], Float:vecEnd[3], Float:vecAngle[3], Float:vecOrigin[3];
pev(id, pev_velocity, vecSrc);
if (vector_length(vecSrc) > 10.0)
{
client_print_color(id, print_team_default, "^4[Нация Ножей] ^3Вы двинулись, танец исчез!");
stopAnim(id);
return;
}
pev(id, pev_origin, vecOrigin);
pev(id, pev_view_ofs, vecSrc);
xs_vec_add(vecOrigin, vecSrc, vecOrigin);
xs_vec_copy(vecOrigin, vecSrc);
pev(id, pev_v_angle, vecAngle);
angle_vector(vecAngle, ANGLEVECTOR_FORWARD, vecEnd);
vecSrc[2] += 20.0;
vecSrc[0] += (-vecEnd[0] * 150.0);
vecSrc[1] += (-vecEnd[1] * 150.0);
vecSrc[2] += (-vecEnd[2] * 150.0);
engfunc(EngFunc_TraceLine, vecOrigin, vecSrc, IGNORE_MONSTERS, id, 0);
get_tr2(0, TR_vecEndPos, vecSrc);
engfunc(EngFunc_SetOrigin, eAnimationStruct[id][ENT_CAM], vecSrc);
set_pev(eAnimationStruct[id][ENT_CAM], pev_angles, vecAngle);
RequestFrame("@dance_think", id);
}
public client_disconnected(id)
{
stopAnim(id, 0);
}
public CBasePlayer_Killed(id)
{
stopAnim(id);
}
-
newtramp1
-
- Сообщения: 15
- Зарегистрирован: 30 янв 2017, 15:24
- Благодарил (а): 5 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#
[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