|
|
Маразм крепчает
| |
Dark_Alex | Дата: Суббота, 11.02.2012, 16:01 | Сообщение # 1 |
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
| Приветствую народ Египта Сегодня снова тот знаменательный день, когда мой "маразм крепчает" Капался я в коде, и искал что-либо что может задавать нашему игроку новую позицию(координаты) в пространстве(по русски- телепорт). И так что я нашел более или менее значимое: Номер 1 это Baseentity Code static void TeleportEntity( CBaseEntity *pSourceEntity, TeleportListEntry_t &entry, const Vector *newPosition, const QAngle *newAngles, const Vector *newVelocity ) { CBaseEntity *pTeleport = entry.pEntity; Vector prevOrigin = entry.prevAbsOrigin; QAngle prevAngles = entry.prevAbsAngles;
int nSolidFlags = pTeleport->GetSolidFlags(); pTeleport->AddSolidFlags( FSOLID_NOT_SOLID );
// I'm teleporting myself if ( pSourceEntity == pTeleport ) { if ( newAngles ) { pTeleport->SetLocalAngles( *newAngles ); if ( pTeleport->IsPlayer() ) { CBasePlayer *pPlayer = (CBasePlayer *)pTeleport; pPlayer->SnapEyeAngles( *newAngles ); } }
if ( newVelocity ) { pTeleport->SetAbsVelocity( *newVelocity ); pTeleport->SetBaseVelocity( vec3_origin ); }
if ( newPosition ) { pTeleport->AddEffects( EF_NOINTERP ); UTIL_SetOrigin( pTeleport, *newPosition ); } } else { // My parent is teleporting, just update my position & physics pTeleport->CalcAbsolutePosition();
Номер 2 Это кусок из c_baseplayer Code // Server says don't interpolate this frame, so set previous info to new info. if ( IsEffectActive(EF_NOINTERP) || Teleported() ) { ResetLatched(); }
// Add in lighting effects CreateLightEffects(); }
Номер 3. Это мне тоже показалось интересным (player_lagcompensation) Code static void RestorePlayerTo( CBasePlayer *pPlayer, const Vector &vWantedPos ) { // Try to move to the wanted position from our current position. trace_t tr; VPROF_BUDGET( "RestorePlayerTo", "CLagCompensationManager" ); UTIL_TraceEntity( pPlayer, vWantedPos, vWantedPos, MASK_PLAYERSOLID, pPlayer, COLLISION_GROUP_PLAYER_MOVEMENT, &tr ); if ( tr.startsolid || tr.allsolid ) { if ( sv_unlag_debug.GetBool() ) { DevMsg( "RestorePlayerTo() could not restore player position for client \"%s\" ( %.1f %.1f %.1f )\n", pPlayer->GetPlayerName(), vWantedPos.x, vWantedPos.y, vWantedPos.z ); }
UTIL_TraceEntity( pPlayer, pPlayer->GetLocalOrigin(), vWantedPos, MASK_PLAYERSOLID, pPlayer, COLLISION_GROUP_PLAYER_MOVEMENT, &tr ); if ( tr.startsolid || tr.allsolid ) { // In this case, the guy got stuck back wherever we lag compensated him to. Nasty.
if ( sv_unlag_debug.GetBool() ) DevMsg( " restore failed entirely\n" ); } else { // We can get to a valid place, but not all the way back to where we were. Vector vPos; VectorLerp( pPlayer->GetLocalOrigin(), vWantedPos, tr.fraction * g_flFractionScale, vPos ); UTIL_SetOrigin( pPlayer, vPos, true );
if ( sv_unlag_debug.GetBool() ) DevMsg( " restore got most of the way\n" ); } } else { // Cool, the player can go back to whence he came. UTIL_SetOrigin( pPlayer, tr.endpos, true ); } }
В общем смысл в том, что нужно придумать функцию(например в каком-нибудь weapon'e или в самом gamemovement) Что бы при нажатии горячей клавиши нас кидало в нужную точку. А чтобы высчитывать координаты для телепорта, я капаюсь в лазерном указателе RPG. Думаю там можно найти ответ. Фух.Вроде всё. Кто в силах - помагайте
|
|
| |
Hitmen | Дата: Вторник, 14.02.2012, 15:08 | Сообщение # 2 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Пушку-телепортатор из OF делать задумал, злодей?
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Dark_Alex | Дата: Вторник, 14.02.2012, 20:45 | Сообщение # 3 |
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
| Hitmen, нее,это будет не ствол по сути. Объясню в общем если интересно
|
|
| |
HellMapper | Дата: Пятница, 17.02.2012, 21:45 | Сообщение # 4 |
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
| А чем консольная команда не устраивает?
Я живу в будущем City 15
Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
|
|
| |
Dark_Alex | Дата: Суббота, 18.02.2012, 15:08 | Сообщение # 5 |
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
| HellMapper, а как я буду задавать координаты в setPos в зависимости от ого куда направлен взгляд игрока? Добавлено (18.02.2012, 14:59) --------------------------------------------- Хотя. Предполагаю как. Изложи свою мысль по подробнее, в коде походу будет типо как Code CBasePlayer *pPlayer = player; if ( !pPlayer ) return; //Always validate a pointer //Подготовка векторов и трассов trace_t tr; Vector vecAbsStart, vecAbsEnd, vecDir; //Получаем углы AngleVectors( pPlayer->EyeAngles(), &vecDir ); //Начало/Конец vecAbsStart = pPlayer->EyePosition(); vecAbsEnd = vecAbsStart + (vecDir * MAX_TRACE_LENGTH); //Делаем трассировку UTIL_TraceLine( vecAbsStart, vecAbsEnd, MASK_ALL, pPlayer, COLLISION_GROUP_NONE, &tr ); //Do something with the end results if ( tr.m_pEnt ) { if ( tr.m_pEnt ) { SetPosition( &tr, true ); } Добавлено (18.02.2012, 15:08) --------------------------------------------- В общем проблема такая. Не могу нормально кинуть трассу. Так что на примере выше, не может конвертировать значения в координаты игрока.
|
|
| |
HellMapper | Дата: Суббота, 18.02.2012, 15:21 | Сообщение # 6 |
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
| Setpos к тому, что его код можно вычленить из сипипи файла и присобачить к тому месту, где ты будешь проводить trace_line в своем оружии и его значения подставлять в Setpos функцию.
Я живу в будущем City 15
Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
|
|
| |
Hitmen | Дата: Суббота, 18.02.2012, 20:27 | Сообщение # 7 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Dark_Alex, Никто не отменял возможности рассчёта точки в которую смотрит игрок Как уже отметил HellMapper, это делается трейсером или же CTRL+F в руки и Setpos ищи по всему решению. Скорее всего далеко не залез.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Strider | Дата: Воскресенье, 19.02.2012, 04:36 | Сообщение # 8 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| Вы что, правда слепые? :3 Он трассу кинуть не может, а не телепортировать. Сетпоз по координатам же.
|
|
| |
Hitmen | Дата: Воскресенье, 19.02.2012, 14:39 | Сообщение # 9 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Strider, and? В чём беда? Рассчитать положение конечной точки в мире, на момент выполнения команды и всё.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Dark_Alex | Дата: Пятница, 17.08.2012, 05:50 | Сообщение # 10 |
Combat medic
Группа: Проверенные
Сообщений: 36
Репутация: 16
Статус: Offline
| Готово. Отлично работает. Закрывайте тему
|
|
| |
|
|
Помощь в разработке форума: HOMiE7 |
|
| |
|