Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
Doc Batcon » 21 фев 2018, 08:05
Объект часто застревает на месте если его "закрутить".
- Код: Выделить всё
public CreateOberon(Float:vOrigin[3], Float:vAngles[3])
{
if(is_nullent(g_pEntityOberon))
{
g_pEntityOberon = rg_create_entity(OBERON_REFERENCE); set_entvar(g_pEntityOberon, var_classname, OBERON_CLASSNAME);
engfunc(EngFunc_SetModel, g_pEntityOberon, OBERON_MODEL);
set_entvar(g_pEntityOberon, var_modelindex, engfunc(EngFunc_ModelIndex, OBERON_MODEL));
SetModelCollisionBox(g_pEntityOberon);
ExecuteHamB(Ham_SetObjectCollisionBox, g_pEntityOberon);
SetThink(g_pEntityOberon, "Oberon_Think");
}
if(is_nullent(g_pEntityEffect))
{
g_pEntityEffect = rg_create_entity(EFFECT_REFERENCE);
set_entvar(g_pEntityEffect, var_classname, EFFECT_CLASSNAME);
set_entvar(g_pEntityEffect, var_framerate, 1.0);
SetThink(g_pEntityEffect, "Effect_Think");
}
set_entvar(g_pEntityEffect, var_effects, EF_NODRAW);
set_entvar(g_pEntityOberon, var_takedamage, DAMAGE_NO);
set_entvar(g_pEntityOberon, var_framerate, 1.0);
set_entvar(g_pEntityOberon, var_solid, SOLID_BBOX);
set_entvar(g_pEntityOberon, var_movetype, MOVETYPE_PUSHSTEP);
set_entvar(g_pEntityOberon, var_gamestate, 0);
set_entvar(g_pEntityOberon, var_deadflag, DEAD_NO);
set_entvar(g_pEntityOberon, var_flags, FL_MONSTER);
set_entvar(g_pEntityOberon, var_angles, vAngles);
set_entvar(g_pEntityOberon, var_nextthink, get_gametime());
set_entvar(g_pEntityOberon, var_health, OBERON_HEALTH);
set_entvar(g_pEntityOberon, var_max_health, OBERON_HEALTH);
set_entvar(g_pEntityOberon, var_gravity, OBERON_GRAVITY);
set_member(g_pEntityOberon, m_bloodColor, OBERON_BLOODCOLOR);
engfunc(EngFunc_SetOrigin, g_pEntityOberon, vOrigin);
SET_BOSS_ACT_ID(OBERON_ACT_APPEAR);
SET_BOSS_ACT_STAGE(0, false);
}
- Код: Выделить всё
stock UTIL_MoveToOrigin2(const pEntity, Float:vTarget[3], Float:fSpeed, bitsCheck = 0)
{
static Float:vOrigin[3]; pev(pEntity, pev_origin, vOrigin);
static Float:vAngles[3]; pev(pEntity, pev_angles, vAngles);
static Float:vDir[3], Float:vAnglesDir[3];
static iTemp[3];
static iSectorEntity, iSectorTarget;
static Float:vForward[3]
static Float:vMove[3];
static Float:flFraction;
xs_vec_sub(vTarget, vOrigin, vDir);
vector_to_angle(vDir, vAnglesDir);
iTemp[0] = floatround(vAnglesDir[0]);
iTemp[1] = floatround(vAnglesDir[1]);
iTemp[2] = floatround(vAnglesDir[2]);
vAnglesDir[0] = vAnglesDir[0] - iTemp[0] + (iTemp[0] % 360);
vAnglesDir[1] = vAnglesDir[1] - iTemp[1] + (iTemp[1] % 360);
vAnglesDir[2] = vAnglesDir[2] - iTemp[2] + (iTemp[2] % 360);
iTemp[0] = floatround(vAngles[0]);
iTemp[1] = floatround(vAngles[1]);
iTemp[2] = floatround(vAngles[2]);
vAngles[0] = vAngles[0] - iTemp[0] + (iTemp[0] % 360);
vAngles[1] = vAngles[1] - iTemp[1] + (iTemp[1] % 360);
vAngles[2] = vAngles[2] - iTemp[2] + (iTemp[2] % 360);
switch(floatround(vAngles[1]))
{
case 0..90: iSectorEntity = 1;
case 91..180: iSectorEntity = 2;
case 181..270: iSectorEntity = 3;
case 271..360: iSectorEntity = 4;
}
switch(floatround(vAnglesDir[1]))
{
case 0..90: iSectorTarget = 1;
case 91..180: iSectorTarget = 2;
case 181..270: iSectorTarget = 3;
case 271..360: iSectorTarget = 4;
}
static Float:fAngleYaw; fAngleYaw = vAnglesDir[1] - vAngles[1];
if(iSectorEntity == iSectorTarget)
{
if(VEC_ANGLE_MOVE >= fAngleYaw >= 0.0 || -VEC_ANGLE_MOVE <= fAngleYaw <= 0.0)
vAngles[1] = vAnglesDir[1];
else if(fAngleYaw > 0.0)
vAngles[1] += VEC_ANGLE_MOVE;
else
vAngles[1] -= VEC_ANGLE_MOVE;
}
else
{
if((iSectorEntity + 1 == 5 ? 1 : iSectorEntity) == iSectorTarget || (iSectorEntity - 1 == 0 ? 4 : iSectorEntity) == iSectorTarget)
{
fAngleYaw = -vAnglesDir[1] + vAngles[1];
if(VEC_ANGLE_MOVE >= fAngleYaw >= 0.0 || -VEC_ANGLE_MOVE <= fAngleYaw <= 0.0)
vAngles[1] = vAnglesDir[1];
else if(fAngleYaw > 0.0)
vAngles[1] += VEC_ANGLE_MOVE;
else
vAngles[1] -= VEC_ANGLE_MOVE;
}
else
{
if(vAnglesDir[1] > vAngles[1] && (vAnglesDir[1] - vAngles[1] < 180.0))
vAngles[1] += VEC_ANGLE_MOVE;
else
vAngles[1] -= VEC_ANGLE_MOVE;
}
}
angle_vector(vAngles, ANGLEVECTOR_FORWARD, vForward);
vMove[0] = vForward[0] * fSpeed;
vMove[1] = vForward[1] * fSpeed;
vMove[2] = vForward[2] * fSpeed;
set_pev(pEntity, pev_angles, vAngles);
set_pev(pEntity, pev_velocity, vMove);
if(bitsCheck & (1<<1))
{
xs_vec_mul_scalar(vForward, 64.0, vCheck);
xs_vec_add(vCheck, vOrigin, vCheck);
engfunc(EngFunc_TraceHull, vOrigin, vCheck, DONT_IGNORE_MONSTERS, HULL_HUMAN, pEntity, 0);
get_tr2(0, TR_flFraction, flFraction);
if(flFraction != 1.0)
return 0;
}
return get_distance_f(vOrigin, vTarget) > (128) ? 1 : 0;
}
-
Doc Batcon
-
- Сообщения: 35
- Зарегистрирован: 18 сен 2016, 12:36
- Благодарил (а): 2 раз.
- Поблагодарили: 7 раз.
- Опыт программирования: Меньше недели
- Языки программирования: Pawn
Hilarious » 21 фев 2018, 16:28
SOLID_BBOX - если объект не нужно уничтожать, можно это поменять на что-то другое, хотя бы на время кручения.
engfunc(EngFunc_SetOrigin - это надо ещё проверять на соприкосновение с "полами"
Потом у вас объект два раза меняет свой ориджин, ну это только то что я увидел
В матрице
-
Hilarious
-
- Сообщения: 69
- Зарегистрирован: 07 фев 2018, 08:46
- Благодарил (а): 6 раз.
- Поблагодарили: 29 раз.
Doc Batcon » 23 фев 2018, 12:56
ап
-
Doc Batcon
-
- Сообщения: 35
- Зарегистрирован: 18 сен 2016, 12:36
- Благодарил (а): 2 раз.
- Поблагодарили: 7 раз.
- Опыт программирования: Меньше недели
- Языки программирования: Pawn
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Yandex [Bot] и гости: 12