Тебе же ответили вроде на офф форуме) Код: 1. From Client: m_pClient->m_pControls->m_MousePos.x; m_pClient->m_pControls->m_MousePos.y; From Server: ** Need change the "m_Core" atribute to public or add a method for get it GameServer()->m_apPlayers[CLIENT_ID]->GetCharacter()->m_Core.m_Input.m_TargetX; GameServer()->m_apPlayers[CLIENT_ID]->GetCharacter()->m_Core.m_Input.m_TargetY; ------ 2. ** Need import "vmath.h" distance(vec2, vec2); ------ 3. From Client: CNetObj_Character PrevChar = m_pClient->m_Snap.m_aCharacters[CLIENT_ID].m_Prev; CNetObj_Character CurChar = m_pClient->m_Snap.m_aCharacters[CLIENT_ID].m_Cur; vec2 Position = mix(vec2(PrevChar.m_X, PrevChar.m_Y), vec2(CurChar.m_X, CurChar.m_Y), Client()->IntraGameTick()); From Server: GameServer()->m_apPlayers[CLIENT_ID]->GetCharacter()->m_Pos
не понял про первый пункт server. Надо в паблик m_Core. Ccharacter m_Core; ? И куда впихнуть код получения координат. character.cpp ?
Пишу в Ccharacter::Tick m_X = GameServer()->m_apPlayers[m_pPlayer->GetCID()]->GetCharacter()->m_Core.m_Input.m_TargetX; при заходе просто крашится сервер Возможно вместо m_pPlayer->GetCID() должно быть что-то другое ?
Лол. Ну ты и любитель колбаски. m_Core обьявлена в CCharacter, там же ты ее и используешь, зачем такой огромный путь через сервер, cplayer и т.д. Просто вызываешь m_X = m_Core.m_Input.m_TargetX;
И крашится сервер. А m_X не получает своего. Колбасу действительно люблю , но как написали так и сделал. В итоге одни краши, а ничего не работает. Всё ясно. Крашелось из-за неправильного вывода координат на экран. Но эти координаты курсора относительны TEE ( x = 0, y = 0 ) А как узнать глобальные ? vec2 m_Cursor(m_Pos.x+m_Input.m_TargetX,m_Pos.y+m_Input.m_TargetY); узнал координаты. Ну спасибо тебе Matodor Новый вопрос: В получение координат врага (GameServer()->m_apPlayers[CLIENT_ID]->GetCharacter()->m_Pos) что писать в CLIENT_ID. Или есть более не убогий способ получить это.
мне нужна поймать самый ближний клиент ко мне. Как сделать ? Сравнить всех через for ? А как сравнить их между собой ?
Робит. Код: if (WEAPON_NINJA) { vec2 m_Cursor(m_Pos.x+m_Input.m_TargetX,m_Pos.y+m_Input.m_TargetY); CCharacter *apEnts[MAX_CLIENTS]; int Num = GameServer()->m_World.FindEntities(m_Cursor, m_ProximityRadius*2.0f,(CEntity**)apEnts,MAX_CLIENTS, CGameWorld::ENTTYPE_CHARACTER); for (int i = 0; i < Num; ++i) { CCharacter *pTarget = apEnts[i]; if ((pTarget == this)) continue; vec2 Temp = pTarget->m_Core.m_Vel + (normalize(m_Cursor - pTarget->m_Pos)); pTarget->m_Core.m_Vel = Temp; } } При использовании катаны в радиусе 2 кубика от курсора начинают притягиваться все кому не лень. Вопрос: как сделать, чтобы после нажатия первый попавшийся в радиусе притягивался всегда даже, если выйдет из радиуса. Пробывал поставить проверку но не помогла...
Ну тут уже сложнее: в цикле, который ты написал проверяешь на первое вхождение ( if(i == 0) ) и этому 0-му игроку включаешь флаг (bool'евая переменная), например, m_Ninja = true. Так же нужно будет сохранить координаты "куда притягиваться". Ну и собственно, когда флаг m_Ninja поднят, ты притягиваешь этого игрока, в том же CCharacter::Tick.
koks123, не вовремя ты. Уже прошли вопрос о самом ближнем. Вопрос как работать с одним не обращая внимания на других ( временно ). Нет так всё просто через проверки. Может есть альтернативный способ.
Код: m_pCollision->MoveBox(&NewPos, &m_Vel, vec2(28.0f, 28.0f), 0); Это и есть сие перемещение. Или у меня вместо головы дупло... Код: GameServer()->Collision()->MovePoint(&m_Pos, &m_Vel, 1.0f, 0); аналагично для projectile ?
Ты можешь сам реализовать смещение и не пользоваться этими функциями. Отрисовывать обьект в нужных координатах с нужным смещением, вот и все. И кажется ты темой ошибся