Question

Приветик, Кто нибудь вкурсе можно ли как-то реализовать систему знакомств аналогичную GTA 5 RP проектам,

Кто не знает :

Изначально у игрока все люди 'Незнакомцы',
Если пожать друг другу руку, то вместо 'Незнакомец' над головой отобразится ник игрока.

Я отключил ники игроков на сервере и добавил кастомные через 3D Text прикрепленный к игроку, на этом всё и закончилось, можно ли как-то сделать сохранение/загрузку и отображение ников у знакомых людей?

Share this post


Link to post

7 answers to this question

  • 0

@Andy в БД хранить список знакомых людей, при авторизации проверять факт знакомства каждого игрока с каждым и с помощью https://sampwiki.blast.hk/wiki/ShowPlayerNameTagForPlayer функции показывать / скрывать дефолтный ник, и отображать Textdraw "Незнакомец". 

Share this post


Link to post
  • 0

@DEST Как можно сделать сохранение и загрузку в БД в данном случае? ников как никак много будет да и что-то в голову не приходит как сделать проверку на знакомство(понятное дело через цикл, но че то не могу додумать)

Edited by Andy

Share this post


Link to post
  • 0

@DEST На данный момент разобрался с отображением ников у знакомых между собой игроков, осталось только продумать сохранение и загрузку ников из БД чтобы сделать проверку на знакомство, как можно сохранять ники в БД и соответственно загружать их?

Share this post


Link to post
  • 0

@Andy завести новую таблицу с такой структурой: 

id | FirstPlayerID | SecondPlayerID

   |                       |                             

где FirstPlayerID это один игрок, а SecondPlayerID другой, оба поля настраиваются как Foreign key на таблицу с игроками. 

Хранить информацию в какой-либо переменной не нужно, нужно просто при загрузке игрока отобразить для него лишь ники тех людей, с которыми он знаком. 

Спойлер

// Где-то в загрузке основных данных игрока после авторизации, в месте, где уже доступен ID аккаунта игрока из БД
new queryString[]; 
mysql_format(handlePtr, queryString, "SELECT `SecondPlayerID` FROM `FamiliarPlayers` WHERE `FirstPlayerID` = '%d'", PlayerInfo[playerid][AccountID]); 
mysql_query(handlePtr, queryString, "LoadNameTagsForPlayer", "i", playerid);
//

forward ...(...);
public LoadNameTagsForPlayer(playerid) 
{
  new rows; 
  cache_get_row_count(rows);
  
  if (!rows) 
    return; 
  
  for (new i = 0; i < rows; i++) 
  {
    new secondPlayerId;
    cache_get_value_name_int(i, "SecondPlayerID", secondPlayerId);
    ShowPlayerNameTagForPlayer(playerid, secondPlayerId, true); // Показать никнейм первому игроку второго игрока
    ShowPlayerNameTagForPlayer(secondPlayerId, playerid, true); // Показать никнейм второму игроку первого игрока
  }
  
  return; 
}

 

А при знакомстве соответственно записывать ИДы в базу. 

Заметка от DEST , создано

Вот, кстати, похожий вопрос и похожий ответ (даже лучше, чем у меня, поэтому советую посмотреть там) на другом портале - клик

Share this post


Link to post
  • 0

Честно сказать я удивлен, что такая, казалось бы, тривиальная система, реализуется достаточно сложно. Ведь помимо скрытия ника над головой, нужно будет еще скрывать ник-нейм в чате, что требует уже сохранения этих отношений в серверную переменную. 

Share this post


Link to post
  • 0

@DEST Можете написать структуру самой таблицы в MySQL ? Не работал ни разу с Foreign Key

Share this post


Link to post
  • 0

@Andy так загуглите что это такое, внешний ключ называется на русском. Также почитайте про отношения между таблицами ("один" к "одному", "один" ко "многим", "многие" ко "многим") 

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • terro
      By terro
      AddPlayerClass(104,1757.4983,-1898.6315,13.5621,88.2737,0,0,0,0,0,0); //  что из этого нужно прописать чтобы эти корды стали спавном на сервере, дайте конкретные цифры