Скриптер
Участник
Пользователь
- Сообщения
- 74
- Реакции
- 61
- Помог
- 1 раз(а)
Всем привет. Знает ли кто как лучше всего реализовать такую вещь?
У меня реализовано так:
В этом коде чуть другая структура реализована, так как нужно отловить чтоб игрок подальше ушёл от марио (ТПШнулся)
но для той идеи которую хочу реализовать, нужно отловить вход и выход.
Конкретно хочу: отловить ускоритель, если игрок в ускорителе чтоб ему не давалась ачивка за набив скорости.
Если естькосяки или моменты где можно реализовать лучше, буду благодарен за коррективы.
Ещё если не сложно, и знаете, скажите класснейм который отвечает за ускорение или класснеймы в которых в основном вставляют ускорение
У меня реализовано так:
Код:
sdm_create_mario(Float:vecOrigin[3]) {
new iEntity = rg_create_entity("info_target");
if(is_nullent(iEntity))
return 0;
set_entvar(iEntity, var_origin, vecOrigin);
set_entvar(iEntity, var_classname, "sdm_mario");
set_entvar(iEntity, var_solid, SOLID_TRIGGER);
set_entvar(iEntity, var_movetype, MOVETYPE_NONE);
set_entvar(iEntity, var_iuser1, 1);
engfunc(EngFunc_SetSize, iEntity, Float:{ -200.0, -200.0, -200.0 }, Float: {200.0, 200.0, 200.0});
SetTouch(iEntity, "@RG_MarioTouch");
return iEntity;
}
@RG_MarioTouch(iMarioId, pId) {
if(!FClassnameIs(iMarioId, "sdm_mario") || !is_user_alive(pId) || g_iBitUserFinishMario & (1<<pId))
return;
g_iBitUserFinishMario |= (1<<pId);
new iFirst = get_entvar(iMarioId, var_iuser1), iReturn;
ExecuteForward(g_fwdMario, iReturn, pId, iMarioId, iFirst);
if(!iReturn && iFirst) {
sdm_print_chat(0, "Игрок ^3%n ^1первый зашёл в марио и получил: ^4%d ^1опыта и ^4$%d", pId, g_iRewardExp, g_iRewardMoney);
sdm_give_user_exp(pId, g_iRewardExp);
sdm_give_user_money(pId, g_iRewardMoney);
} else {
sdm_print_chat(pId, "Вы попали в марио. Ваше здоровье ^4восстановлено");
new Float:fHealth = Float:get_entvar(pId, var_health);
if(fHealth < 100.0) set_entvar(pId, var_health, 100.0);
}
set_entvar(iMarioId, var_iuser1, 0);
new szData[4];
szData[0] = iMarioId;
szData[1] = pId;
if(!task_exists(pId + 512512))set_task(1.0, "@TK_MarioReset", pId + 512512, szData, 3, "b");
}
@TK_MarioReset(szData[], iTaskId) {
new iPlayer = szData[1], iMarioId = szData[0];
if(is_nullent(iMarioId) || !FClassnameIs(iMarioId, "sdm_mario") || !is_user_alive(iPlayer)) {
g_iBitUserFinishMario |= (1<<iPlayer);
return;
}
new Float:vecUserOrigin[3], Float:vecMarioOrigin[3];
get_entvar(iPlayer, var_origin, vecUserOrigin);
get_entvar(iMarioId, var_origin, vecMarioOrigin);
if(get_distance_f(vecUserOrigin, vecMarioOrigin) > 900.0)
g_iBitUserFinishMario &= ~(1<<iPlayer);
}
но для той идеи которую хочу реализовать, нужно отловить вход и выход.
Конкретно хочу: отловить ускоритель, если игрок в ускорителе чтоб ему не давалась ачивка за набив скорости.
Если естькосяки или моменты где можно реализовать лучше, буду благодарен за коррективы.
Ещё если не сложно, и знаете, скажите класснейм который отвечает за ускорение или класснеймы в которых в основном вставляют ускорение