Начинающий
-
Автор темы
- #41
Да я сам ничего не понял кто прав кто нет вроде первые сообщения были правдой, а потом балаган начался
обратимся к многоуважаемому ламме, получим этот прекрасный ресольвер на леерах:Короче очень хочу сделать ресольвер
Чекал этот сайт для началаПожалуйста, авторизуйтесь для просмотра ссылки.
Но там ничего не поеятно лично для меня откуда 65 при указании переменных, зачем нам дельта между feetyaw и eye какой смысл если вроде ноги и голова в одну сторону смотрит ?
float delta = CalculateDelta(...);
if (record->flags & FL_ONGROUND && previous_record->flags & FL_ONGROUND && !record->shot && !fakeplayer) {
// lenght2d
auto speed = (record->velocity.x * record->velocity.x) + (record->velocity.y * record->velocity.y);
if (speed <= 0.1f) {
// https://prnt.sc/amTkN5gnLMAF
if ( record->layers[3].weight == 0.0 && record->layer[3].cycle == 0.0 /*&& record->layers[6].weight == 0.0*/) {
record->m_side = 2 * ((AngleDiff(animstate->goal_feet_yaw, player->EyeAngles().y)) <= 0.0) - 1;
}
}
else if (/*!(record->layers[12].weight * 1000.f) &&*/ record->layers[6].weight * 1000.f == previous_record->layers[6].weight * 1000.f) {
float(m_pDeltaCenter) = std::abs(record->layers[6].playback_rate - record->anim_layers[0][6].playback_rate); // gfy + 0
float(m_pDeltaRight) = std::abs(record->layers[6].playback_rate - record->anim_layers[2][6].playback_rate); // gfy + 60
float(m_pDeltaLeft) = std::abs(record->layers[6].playback_rate - record->anim_layers[1][6].playback_rate); // gfy - 60
if (m_pDeltaCenter < m_pDeltaRight || m_pDeltaLeft <= m_pDeltaRight || (m_pDeltaRight * 1000.f)) {
if (m_pDeltaCenter >= m_pDeltaLeft && m_pDeltaRight > m_pDeltaLeft && !(m_pDeltaLeft * 1000.f)) {
record->m_side = 1;
}
}
else {
record->m_side = -1;
}
}
}
// animfix...
if (player->team() != local->team()) {
float original_gfy;
animstate->goal_feet_yaw = original_gfy;
player->UpdateClientSideAnim();
original_gfy = animstate->goal_feet_yaw;
animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + 0.f);
player->UpdateClientSideAnim();
std::memcpy(record->anim_layers[0], record->layers, sizeof(AnimationLayer) * 13);
animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + 60.f);
player->UpdateClientSideAnim();
std::memcpy(record->anim_layers[2], record->layers, sizeof(AnimationLayer) * 13);
animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw - 60.f);
player->UpdateClientSideAnim();
std::memcpy(record->anim_layers[1], record->layers, sizeof(AnimationLayer) * 13);
animstate->goal_feet_yaw = original_gfy;
player->UpdateClientSideAnim();
// call resolver
Resolver::Original(record, previous_record);
if (record->choke > 1) {
if (record->side <= 0) {
animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw - delta)
} else {
animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + delta)
}
}
else if (record->choke == 1) {
if (record->side <= 0) {
animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw - 60.f)
} else {
animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + 60.f)
}
}
}
// update animations
player->UpdateClientSideAnim();
зачемanimstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + 0.f);
state->m_goal_feet_yaw = math::normalize_yaw( state->m_eye_yaw );
/* upper-case */
NormalizeYaw( AnimState->m_flGoalFeetYaw );
/* snake-case */
normalize_yaw( state->m_goal_feet_yaw );
animstate->goal_feet_yaw = NormalizeYaw( animstate->eye_yaw );
Спасибо) А вообще спасибо всем,мне кажется после просмотра этой темы и темы про аним от f0rtis1337 в кс можно уже начать делать что-то годное даже новичкуобратимся к многоуважаемому ламме, получим этот прекрасный ресольвер на леерах:
чтоб ресольвер работал, необходимо "подпитать" anim_layers, параллельно обновляя анимации при сетапе gfy:C++:float delta = CalculateDelta(...); if (record->flags & FL_ONGROUND && previous_record->flags & FL_ONGROUND && !record->shot && !fakeplayer) { // lenght2d auto speed = (record->velocity.x * record->velocity.x) + (record->velocity.y * record->velocity.y); if (speed <= 0.1f) { // https://prnt.sc/amTkN5gnLMAF if ( record->layers[3].weight == 0.0 && record->layer[3].cycle == 0.0 /*&& record->layers[6].weight == 0.0*/) { record->m_side = 2 * ((AngleDiff(animstate->goal_feet_yaw, player->EyeAngles().y)) <= 0.0) - 1; } } else if (/*!(record->layers[12].weight * 1000.f) &&*/ record->layers[6].weight * 1000.f == previous_record->layers[6].weight * 1000.f) { float(m_pDeltaCenter) = std::abs(record->layers[6].playback_rate - record->anim_layers[0][6].playback_rate); // gfy + 0 float(m_pDeltaRight) = std::abs(record->layers[6].playback_rate - record->anim_layers[2][6].playback_rate); // gfy + 60 float(m_pDeltaLeft) = std::abs(record->layers[6].playback_rate - record->anim_layers[1][6].playback_rate); // gfy - 60 if (m_pDeltaCenter < m_pDeltaRight || m_pDeltaLeft <= m_pDeltaRight || (m_pDeltaRight * 1000.f)) { if (m_pDeltaCenter >= m_pDeltaLeft && m_pDeltaRight > m_pDeltaLeft && !(m_pDeltaLeft * 1000.f)) { record->m_side = 1; } } else { record->m_side = -1; } } }
с правильным анимфиксом этот ресольвер будет находить сторону десинка не хуже, чем неверлуз / скит, дальше дело только нахождения величины десинкаКод:// animfix... if (player->team() != local->team) { float original_gfy; animstate->goal_feet_yaw = original_gfy; player->UpdateClientSideAnim(); original_gfy = animstate->goal_feet_yaw; animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + 0.f); player->UpdateClientSideAnim(); std::memcpy(record->anim_layers[0], record->layers, sizeof(AnimationLayer) * 13); animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + 60.f); player->UpdateClientSideAnim(); std::memcpy(record->anim_layers[2], record->layers, sizeof(AnimationLayer) * 13); animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw - 60.f); player->UpdateClientSideAnim(); std::memcpy(record->anim_layers[1], record->layers, sizeof(AnimationLayer) * 13); animstate->goal_feet_yaw = original_gfy; player->UpdateClientSideAnim(); // call resolver Resolver::Original(record, previous_record); if (record->choke > 1) { if (record->side <= 0) { animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw - delta) } else { animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + delta) } } else if (record->choke == 1) { if (record->side <= 0) { animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw - 60.f) } else { animstate->goal_feet_yaw = YawNormalize(animstate->eye_yaw + 60.f) } } } // update animations player->UpdateClientSideAnim();
делал ночью на коленке, писал код прям тут, по этому так и вышлозачем
проще же сделать вот так:
энивей ресольвер хуйня как минимум вантап сетапит ресольв лееры до сетапа матриц да и сам ресольвер устарел и нуждается в реворке......C++:state->m_goal_feet_yaw = math::normalize_yaw( state->m_eye_yaw );
и я не знаю наверно круто использовать куча код стайлов разных
аппер кейс, снейк кейс
вместо того что бы написать свою базу в чистом снейк кейсе
например..
а неC++:/* upper-case */ NormalizeYaw( AnimState->m_flGoalFeetYaw ); /* snake-case */ normalize_yaw( state->m_goal_feet_yaw );
да и зачем тебе m перед дельтами если они не находятся в классе/структуре приставка мембер там ни к чемуC++:animstate->goal_feet_yaw = NormalizeYaw( animstate->eye_yaw );
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz