Участник
Пользователь
- Сообщения
- 78
- Реакции
- 7
Всем привет, продолжаю копаться и потихоньку переписывать код Корда. У меня накопилось несколько вопросов, буду рад если кто-нибудь ответит на какой-либо из них:
1) Я планирую использовать Кордовский код оружия приблизительно для полсотни стволов. Его код считается эталоном оптимизации (хоть и архаичным) , но то что скрипт переписывает оружие чуть ли не с нуля делает его мегагромоздким. Я хоть и обновил под реапи почти все до чего дотянулись пальцы и хватило знаний, но опасаюсь в будущем лагов. Поэтому интересно, как с точки зрения оптимизации лучше было бы оформлять такие плагины? У меня на уме два варианта:
А) Оставить все по-старинке, уповая что нагрузки не будет.
Б)Придумать альтернативу, к примеру, регистрировать и расписывать в одном плагине сразу несколько стволов, использующих в качестве референса один и тот же оригинальный ствол, или сделать что-то типа API с главным плагином , где все расписано, и с плагинами поменьше, которые расписывают нюансы конкретного ствола и передают массив данных о нем в главный плагин.
2)Копаясь в коде нашел вот такую проверку:
Как я понимаю, так Корд избегает предиктов со стороны клиента. Но в плане оптимизации от этого форварда однозначно надо избавляться, т.к. он вызывается 50-100 раз в секунду. В современных плагинах я такого не видел, можно ли с чистой совестью снести этот отрывок кода? Или есть аналог лучше?
3) Хотелось бы узнать, где в коде вылета гильз прописано положение вылетающей гильзы? Я имею в виду не место спавна или вектор вылета, а именно то куда сама гильза в мире повернута. А то в игре замечаю, что гильзы спавнятся все время смотря в одну сторону относительно мира, а не игрока, из-за этого, если смотреть в определенную сторону при выстреле они могут вылетать "смотря" перпендикулярно стволу. Была мысль что это vecAngle[1] в поле rotation указанный в мессаге, но вроде не то.
Код гильз:
Буду рад ответу хоть на что-либо из вышеперечисленного.
1) Я планирую использовать Кордовский код оружия приблизительно для полсотни стволов. Его код считается эталоном оптимизации (хоть и архаичным) , но то что скрипт переписывает оружие чуть ли не с нуля делает его мегагромоздким. Я хоть и обновил под реапи почти все до чего дотянулись пальцы и хватило знаний, но опасаюсь в будущем лагов. Поэтому интересно, как с точки зрения оптимизации лучше было бы оформлять такие плагины? У меня на уме два варианта:
А) Оставить все по-старинке, уповая что нагрузки не будет.
Б)Придумать альтернативу, к примеру, регистрировать и расписывать в одном плагине сразу несколько стволов, использующих в качестве референса один и тот же оригинальный ствол, или сделать что-то типа API с главным плагином , где все расписано, и с плагинами поменьше, которые расписывают нюансы конкретного ствола и передают массив данных о нем в главный плагин.
2)Копаясь в коде нашел вот такую проверку:
Код:
register_forward(FM_UpdateClientData, "FakeMeta_UpdateClientData_Post", true);//НЕРЕАЛЬНЫЙ КАЛЛ, НЕОБХОДИМО ИЗБАВИТЬСЯ
//**********************************************
//* Block client weapon. *
//**********************************************
public FakeMeta_UpdateClientData_Post(const iPlayer, const iSendWeapons, const CD_Handle)
{
/* static iActiveItem;
if (!is_entity(iPlayer))
{
return FMRES_IGNORED;
}
iActiveItem = get_member(iPlayer, m_pActiveItem);
if (!is_entity(iActiveItem) || !IsCustomItem(iActiveItem))
{
return FMRES_IGNORED;
}
set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
return FMRES_IGNORED;*/
}
3) Хотелось бы узнать, где в коде вылета гильз прописано положение вылетающей гильзы? Я имею в виду не место спавна или вектор вылета, а именно то куда сама гильза в мире повернута. А то в игре замечаю, что гильзы спавнятся все время смотря в одну сторону относительно мира, а не игрока, из-за этого, если смотреть в определенную сторону при выстреле они могут вылетать "смотря" перпендикулярно стволу. Была мысль что это vecAngle[1] в поле rotation указанный в мессаге, но вроде не то.
Код гильз:
Код:
EjectBrass(const iPlayer, const iModelIndex, const iBounce, const Float:flUpScale = -5.0, const Float: flForwardScale = 17.0, const Float: flRightScale = -7.0)
{
static i, msgBrass;
static Float: vecUp[3];
static Float: vecRight[3];
static Float: vecForward[3];
static Float: vecAngle[3];
static Float: vecOrigin[3];
static Float: vecViewOfs[3];
static Float: vecVelocity[3];
get_entvar(iPlayer, var_v_angle, vecAngle);
get_entvar(iPlayer, var_punchangle, vecOrigin);
xs_vec_add(vecAngle, vecOrigin, vecOrigin);
engfunc(EngFunc_MakeVectors, vecOrigin);
get_entvar(iPlayer, var_origin, vecOrigin);
get_entvar(iPlayer, var_view_ofs, vecViewOfs);
get_entvar(iPlayer, var_velocity, vecVelocity);
global_get(glb_v_up, vecUp);
global_get(glb_v_right, vecRight);
global_get(glb_v_forward, vecForward);
for (i = 0; i < 3; i++)
{
vecOrigin[i] = vecOrigin[i] + vecViewOfs[i] + vecForward[i] * flForwardScale + vecUp[i] * flUpScale + vecRight[i] * flRightScale;
vecVelocity[i] = vecVelocity[i] + vecForward[i] * 1.5 + vecUp[i] * random_float(80.0, 100.0) + vecRight[i] * random_float(170.0, 190.0);
}
if (msgBrass || (msgBrass = get_user_msgid("Brass")))
{
MESSAGE_BEGIN(MSG_PVS, msgBrass, vecOrigin, 0);
WRITE_BYTE(0 /* dummy */);
WRITE_COORD(vecOrigin[0]);
WRITE_COORD(vecOrigin[1]);
WRITE_COORD(vecOrigin[2]);
WRITE_COORD(0.0 /* dummy */);
WRITE_COORD(0.0 /* dummy */);
WRITE_COORD(0.0 /* dummy */);
WRITE_COORD(vecVelocity[0]);
WRITE_COORD(vecVelocity[1]);
WRITE_COORD(vecVelocity[2]);
WRITE_ANGLE(vecAngle[1]);
WRITE_SHORT(iModelIndex);
WRITE_BYTE(iBounce);
WRITE_BYTE(0 /* dummy */);
WRITE_BYTE(iPlayer);
MESSAGE_END();
}
}