Моддинг координаты

Тема в разделе "Создание и управление сервером", создана пользователем TXrus, 24 июл 2014.

  1. TXrus

    TXrus Пользователь

    1. Как узнать координаты нашего курсора ? [server]
    2. Как узнать координаты тии по его ID ? [server]
     
  2. Matodor

    Matodor Гл. Администратор Команда форума

    Тебе же ответили вроде на офф форуме)
    Код:
    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
     
  3. Matodor

    Matodor Гл. Администратор Команда форума

    Что не понял пиши, объясню.
     
  4. TXrus

    TXrus Пользователь

    не понял про первый пункт server. Надо в паблик m_Core. Ccharacter m_Core; ?
    И куда впихнуть код получения координат. character.cpp ?
     
  5. Matodor

    Matodor Гл. Администратор Команда форума

    Просто Ccharacter m_Core; переносишь в public и вызываешь где тебе нужно.
     
  6. TXrus

    TXrus Пользователь

    Пишу в Ccharacter::Tick
    m_X = GameServer()->m_apPlayers[m_pPlayer->GetCID()]->GetCharacter()->m_Core.m_Input.m_TargetX;
    при заходе просто крашится сервер
    Возможно вместо m_pPlayer->GetCID() должно быть что-то другое ?
     
  7. Matodor

    Matodor Гл. Администратор Команда форума

    Лол. Ну ты и любитель колбаски.
    m_Core обьявлена в CCharacter, там же ты ее и используешь, зачем такой огромный путь через сервер, cplayer и т.д.
    Просто вызываешь m_X = m_Core.m_Input.m_TargetX;
     
  8. TXrus

    TXrus Пользователь

    И крашится сервер. А 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. Или есть более не убогий способ получить это.
     
  9. Matodor

    Matodor Гл. Администратор Команда форума

    Как что писать, айди клиента, чьи координаты ты хочешь получить.
     
  10. TXrus

    TXrus Пользователь

    мне нужна поймать самый ближний клиент ко мне. Как сделать ? Сравнить всех через for ? А как сравнить их между собой ?
     
  11. Matodor

    Matodor Гл. Администратор Команда форума

    В смысле между собой? Посмотри как идет удар hammer'ом, там есть определение ближайших игроков.
     
  12. TXrus

    TXrus Пользователь

    Робит.
    Код:
    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 кубика от курсора начинают притягиваться все кому не лень. Вопрос: как сделать, чтобы после нажатия первый попавшийся в радиусе притягивался всегда даже, если выйдет из радиуса. Пробывал поставить проверку но не помогла...
     
  13. Matodor

    Matodor Гл. Администратор Команда форума

    Ну тут уже сложнее: в цикле, который ты написал проверяешь на первое вхождение ( if(i == 0) ) и этому 0-му игроку включаешь флаг (bool'евая переменная), например, m_Ninja = true. Так же нужно будет сохранить координаты "куда притягиваться". Ну и собственно, когда флаг m_Ninja поднят, ты притягиваешь этого игрока, в том же CCharacter::Tick.
     
  14. koks123

    koks123 XD

    А зачем тебе их сравнивать между собой ? Что ты хочешь этим добиться ?
     
  15. TXrus

    TXrus Пользователь

    koks123, не вовремя ты. Уже прошли вопрос о самом ближнем. Вопрос как работать с одним не обращая внимания на других ( временно ).
    Нет так всё просто через проверки. Может есть альтернативный способ.
     
  16. Matodor

    Matodor Гл. Администратор Команда форума

    Пишешь свой класс, который будет притягивать игрока к определенной позиции. PROFIT.
     
  17. TXrus

    TXrus Пользователь

    Код:
    m_pCollision->MoveBox(&NewPos, &m_Vel, vec2(28.0f, 28.0f), 0);
    Это и есть сие перемещение. Или у меня вместо головы дупло... :confused:
    Код:
    GameServer()->Collision()->MovePoint(&m_Pos, &m_Vel, 1.0f, 0);
    аналагично для projectile ?
     
  18. Matodor

    Matodor Гл. Администратор Команда форума

    Ты можешь сам реализовать смещение и не пользоваться этими функциями. Отрисовывать обьект в нужных координатах с нужным смещением, вот и все. И кажется ты темой ошибся :D
     
  19. koks123

    koks123 XD

    Тебе нужно переместить медленно тии к тии или просто поставить его на новую позицию ?