Здрасте всем про кодерам форума,где есть нормальная рекорд система без говна и костылей? Пытался написать сам,работает но очень хуёво
Если ты о мувмент рекордере, то вот тебе статейкаЗдрасте всем про кодерам форума,где есть нормальная рекорд система без говна и костылей? Пытался написать сам,работает но очень хуёво
о нет только не это пжЕсли ты о мувмент рекордере, то вот тебе статейка
Пожалуйста, авторизуйтесь для просмотра ссылки.
Я может чего-то не понимаю, но они же ничем не отличаются, при frame_net_update_end закидываешь, если кол-во рекордов > 32, последний выкидываешьЗдрасте всем про кодерам форума,где есть нормальная рекорд система без говна и костылей? Пытался написать сам,работает но очень хуёво
c_base_player* player;
vec3_t velocity, origin, absorigin, eyeangles, absangles, mins, maxs;
float sim_time, lower_yaw, duck_amount, resolved_yaw;
int choked_time, rotate_side, flags, adjust_tick;
bool shooting, jump, resolved;
std::array<std::array<animlayer_t, 13>, 4> animation_layers = {};
std::array<std::array<float, 24>, 4> pose_parameters = {};
std::array<std::array<matrix_t, 256>, 4> matrices = {};
спасибки, не подскажешь как лучше её собирать? Посмотрел в супермаси как оно сделано,ничего не понял(такое ощущение там p100 бектрек).Я может чего-то не понимаю, но они же ничем не отличаются, при frame_net_update_end закидываешь, если кол-во рекордов > 32, последний выкидываешь
А если ты имел в виду какую информацию нужно в рекорд вносить:
C++:c_base_player* player; vec3_t velocity, origin, absorigin, eyeangles, absangles, mins, maxs; float sim_time, lower_yaw, duck_amount, resolved_yaw; int choked_time, rotate_side, flags, adjust_tick; bool shooting, jump, resolved; std::array<std::array<animlayer_t, 13>, 4> animation_layers = {}; std::array<std::array<float, 24>, 4> pose_parameters = {}; std::array<std::array<matrix_t, 256>, 4> matrices = {};
спасибки, не подскажешь как лучше её собирать? Посмотрел в супермаси как оно сделано,ничего не понял(такое ощущение там p100 бектрек).
void c_animationsystem::frame_stage(int stage) {
if (stage != frame_net_update_end)
return;
for (int index = 0; index < 64; index++) {
c_base_player* player = c_base_player::get_player_by_index(index);
if (!player || !player->is_player() || !player->is_alive() || player == g_local || player->m_iTeamNum() == g_local->m_iTeamNum())
continue;
if (player->m_flOldSimulationTime() >= player->m_flSimulationTime()) {
if (player->m_flOldSimulationTime() > player->m_flSimulationTime())
p_player_records[index].clear();
continue;
}
bool with_prev_record = false;
if (p_player_records[index].size() > 1)
with_prev_record = true; // чел да ты крутой, существуешь больше одного тика, даже успел оставить себя в истории этого сервера, похвала и поклон xDD
c_lagrecord record = c_lagrecord(player);
if (with_prev_record) {
// ref for game: https://github.com/perilouswithadollarsign/cstrike15_src/blob/f82112a2388b841d72cb62ca48ab1846dfcc11c8/game/server/player_lagcompensation.cpp#L385-L389
// track lost, diff to much high, player breaking lag compensation, we cant record him
if ((record.origin - get_oldest_record(index).origin).length_2d() > 4096.f) {
p_player_records[index].clear();
}
}
p_player_records[index].emplace_back(record);
while (p_player_records[index].size() > 32)
p_player_records[index].pop_front();
}
}
Не подскажешь,я правильно получаю дак амаунт?Я случайно вырезал строчку апдейта анимаций и сетапа костей, думаю догадаешься куда её вставитьC++:void c_animationsystem::frame_stage(int stage) { if (stage != frame_net_update_end) return; for (int index = 0; index < 64; index++) { c_base_player* player = c_base_player::get_player_by_index(index); if (!player || !player->is_player() || !player->is_alive() || player == g_local || player->m_iTeamNum() == g_local->m_iTeamNum()) continue; if (player->m_flOldSimulationTime() >= player->m_flSimulationTime()) { if (player->m_flOldSimulationTime() > player->m_flSimulationTime()) p_player_records[index].clear(); continue; } bool with_prev_record = false; if (p_player_records[index].size() > 1) with_prev_record = true; // чел да ты крутой, существуешь больше одного тика, даже успел оставить себя в истории этого сервера, похвала и поклон xDD c_lagrecord record = c_lagrecord(player); if (with_prev_record) { // ref for game: https://github.com/perilouswithadollarsign/cstrike15_src/blob/f82112a2388b841d72cb62ca48ab1846dfcc11c8/game/server/player_lagcompensation.cpp#L385-L389 // track lost, diff to much high, player breaking lag compensation, we cant record him if ((record.origin - get_oldest_record(index).origin).length_2d() > 4096.f) { p_player_records[index].clear(); } } p_player_records[index].emplace_back(record); while (p_player_records[index].size() > 32) p_player_records[index].pop_front(); } }
N_ADD_VARIABLE(float, GetDuckAmount,"CBasePlayer->m_flDuckAmount");
возьми и проверь как он меняется броНе подскажешь,я правильно получаю дак амаунт?
N_ADD_VARIABLE(float, GetDuckAmount,"CBasePlayer->m_flDuckAmount");
чё блять, нахуя ты делаешь по факту две одинаковые проверки то.......C++:void c_animationsystem::frame_stage(int stage) { if (player->m_flOldSimulationTime() >= player->m_flSimulationTime()) { if (player->m_flOldSimulationTime() > player->m_flSimulationTime()) p_player_records[index].clear(); continue; } }
так я же умный), а если серьёзно, симтайм если равен олд, значит нам не нужно обновлять, а если олд > текущего, то это значит что противник брикает лц, и нету смысла его анимироватьчё блять, нахуя ты делаешь по факту две одинаковые проверки то.......
даНе подскажешь,я правильно получаю дак амаунт?
N_ADD_VARIABLE(float, GetDuckAmount,"CBasePlayer->m_flDuckAmount");
void c_lagcomp::frame_stage_notify( int i_stage ) {
if ( i_stage != net_frame_update_end )
return;
// Создаем цикл для этой хуеты
for ( int index = 1; index <= interfaces::global_vars->max_client_ent; index++ ) {
c_cs_player* entity = interfaces::ent_list->get_player_by_index( index );
if ( !entity->has_valid( ) )
continue;
// Проверяем на пустоту рекордов или когда сервер прислал новые данные
if ( player_records[ index ].empty( ) || ( entity->sim_time( ) != entity->old_sim_time( ) ) ) {
// Тут наша хуета.
// Проверяем брикает ли человек лаг компенсацию..
if ( !player_records[ index ].empty( ) && ( entity->get_origin( ) - player_records[ i ].front( ).origin ).lengthsqr( ) > 4096.f ) {
// Очищаем рекорды
player_records[ index ].clear( );
continue;
}
// Проверяем шифтит ли тикбазу..
if ( !player_records[ index ].empty( ) && entity->old_sim_time( ) > entity->sim_time( ) ) {
// Очищаем рекорды
player_records[ index ].clear( );
continue;
}
// Создаем рекорд
player_records[ index ].emplace_back( c_lag_records( ) );
// Апдейтим анимации
update_entity_animations( entity );
}
// Сохраняем данные 0______0
// upd: sharklaser - limit 32.
while ( player_records[ index ].size( ) > 31 )
player_records[ index ].pop_front( );
}
}
void c_lagcomp::update_entity_animations( c_cs_player* entity ) {
}
ахах ладно чувактак я же умный), а если серьёзно, симтайм если равен олд, значит нам не нужно обновлять, а если олд > текущего, то это значит что противник брикает лц, и нету смысла его анимировать
да
Что? Хорошо, скажу ещё раз, я проверяю на то что противник НЕ нуждается в обновлении(симтайм = олд симтайм) и на то что он шифтит тикбазу(олд симтайм > симтайм)что делает сим тайм потому что вы похоже не знаете
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz