Вопросы

DaGroIII
Новичок

Всем привет. Кто сможет подсказать как соединить 2 таблицы?
Допустим:
1 Таблица информация о Игроке
2 Таблица информация о фракции

В первой таблице пишется ID фракции, а во второй описание по этому иду.
Дак вот, вопрос вот в чем, как сделать так, что если в 1 таблице стоит ид 1, то ему выдавалась информация по первой фракции?
Есть предложение, что так

pInfo[playerid][fID] = fInfo[playerid][ID]


или же это глупость? Буду очень сильно благодарен за помощь)

Поделиться сообщением


Ссылка на сообщение

9 ответов на этот вопрос

  • 0

В таблице с игроком храните ID фракции, а фракции грузите как обычно. Тогда обращаться можно будет так

new fractionId = pInfo[playerid][fID];

fInfo[fractionId][...]

 

Поделиться сообщением


Ссылка на сообщение
  • 0
DaGroIII
Новичок
В 19.03.2020 в 15:22, DEST сказал:

В таблице с игроком храните ID фракции, а фракции грузите как обычно. Тогда обращаться можно будет так


new fractionId = pInfo[playerid][fID];

fInfo[fractionId][...]

 

Выдает ошибку 

error 001: expected token: ",", but found "["
error 029: invalid expression, assumed zero
error 091: ambiguous constant; tag override is required (symbol "Name")
fatal error 107: too many error messages on one line

при следующем коде

new fID = pInfo[playerid][Member];
static const fmt_str[] = "Вы состоите в Организации - %s";
new string[sizeof(fmt_str)+5];
format(string, sizeof(string), fmt_str, fInfo[fID][Name]);
SCM(playerid, COLOR_RED, string);

 

Что я хотел бы увидеть в этом коде, чтобы если игрок состоит в организации под ID 1 ( Member = 1 ), то игроку выводило бы сообщение Вы состоите в Организации - ( допустим ) ЛСПД. 

Отредактировано пользователем DaGroIII

Поделиться сообщением


Ссылка на сообщение
  • 0
DaGroIII
Новичок
14 минут назад, DEST сказал:

@DaGroIII как fInfo объявлено? 

new fInfo[FractionInfo]

Если сделать

new fInfo[MAX_PLAYERS]

тогда ругается сток загрузки, что нету переменной (playerid)
А если добавить (playerid), то нужно ли так? 

 

Отредактировано пользователем DaGroIII

Поделиться сообщением


Ссылка на сообщение
  • 0

@DaGroIII Вам массив нужен двумерный, так как для каждой фракции есть какое-то количество параметров. Т.е. объявление будет следующего вида: 

new fInfo[?][??];
// ? - количество фракций
// ?? - количество параметров для каждой из фракций, например: название, количетсво рангов, и пр. Обычно для этого используют дополнительно enum, чтобы не запоминать по какому номеру что лежит: 
enum fInfo_enum
{
	Name[15],
	maxRanks,
	...
};
new fInfo[MAX_FRACTIONS][fInfo_enum];

 

Поделиться сообщением


Ссылка на сообщение
  • 0
DaGroIII
Новичок

@DEST Сейчас ругается на этот код.. Что тут может быть не так?

stock LoadFraction()
{
	mysql_query(Database, "SELECT * FROM `Fraction`");
	cache_get_value_name_int(0, "ID", fInfo[ID]);
	cache_get_value_name(0, "Name", fInfo[Name]);
	cache_get_value_name(0, "Rank1", fInfo[Rank1]);
	cache_get_value_name(0, "Rank2", fInfo[Rank2]);
	cache_get_value_name(0, "Rank3", fInfo[Rank3]);
	cache_get_value_name(0, "Rank4", fInfo[Rank4]);
	cache_get_value_name(0, "Rank5", fInfo[Rank5]);
	cache_get_value_name(0, "Rank6", fInfo[Rank6]);
	cache_get_value_name(0, "Rank7", fInfo[Rank7]);
	cache_get_value_name(0, "Rank8", fInfo[Rank8]);
	cache_get_value_name(0, "Rank9", fInfo[Rank9]);
	cache_get_value_name(0, "Rank10", fInfo[Rank10]);
}

А вот все остальное связанное с ним

#define MAX_FRACTIONS 28

enum FractionInfo
{
	ID,
	Name[32],
	Rank1[32],
	Rank2[32],
	Rank3[32],
	Rank4[32],
	Rank5[32],
	Rank6[32],
	Rank7[32],
	Rank8[32],
	Rank9[32],
	Rank10[32]
}

new fInfo[MAX_FRACTIONS][FractionInfo];

Что тут может быть не так?))

Поделиться сообщением


Ссылка на сообщение
  • 0

@DaGroIII Фракция же не одна в БД, а множество, поэтому необходим цикл: 

stock LoadFraction()
{
  mysql_query(Database, "SELECT * FROM `Fraction`");
  new row_count; 
  cache_get_row_count(row_count); 
  for (new i = 0; i < row_count; i++)
  {
    cache_get_value_name_int(i, "ID", fInfo[i][ID]);
    cache_get_value_name(i, "Name", fInfo[i][Name]);
    ...
  }
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0
DaGroIII
Новичок

@DEST Все отлично, ошибок не стало :) Но вот не хочет отображать текст..

cmd:test(playerid)
{
	if(pInfo[playerid][Member] == 1)
	{
	    new fID = pInfo[playerid][Member];
		static const fmt_str[] = "Вы состоите в Организации - %s";
		new string[sizeof(fmt_str)+5];
		format(string, sizeof(string), fmt_str, fInfo[fID][Name]);
		SCM(playerid, COLOR_RED, string);
	}

}

Хочу вывести игроку, который состоит в фракции под ID 1, название его фракции

Отредактировано пользователем DaGroIII

Поделиться сообщением


Ссылка на сообщение
  • 0

@DaGroIII Для каждой новой проблемы создавайте новую тему. Если эта проблема, которая обозначена в заголовке, решена, то отметьте галочкой сбоку ответ, который является решением и создайте новую тему. 

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Dofarst
      От Dofarst
      AdrenalineRush
      Скачать файл AdrenalineRush — легкий геймплейный скрипт, добавляющий механику «второго дыхания». Когда здоровье персонажа падает до критической отметки (ниже 15 HP), автоматически активируется кратковременный прилив адреналина: восстанавливается выносливость для бега, изменяется визуальное восприятие, а игрок получает шанс спастись из критической ситуации. Полностью автономен, оптимизирован и готов к интеграции в любой игровой режим.
       
      P.S Плагин делаю впервые, поэтому не судите строго
       

      Добавил Dofarst Добавлено 05/22/26 Категория Плагины / инклуды Автор Dofarst Совместимость с версией мультиплеера 0.3.7  
    • DrVandersexxx
      От DrVandersexxx
      League A/D — Attack & Defend
      Скачать файл League A/D — это соревновательный игровой режим Attack & Defend (Атака и Защита) для мультиплеера open.mp. Проект представляет собой полное переосмысление классического формата A/D образца 2008–2010 годов, но на базе современных стандартов стабильности и с полным искоренением старых багов/эксплойтов.
       
      🏆 ИГРОВОЙ ПРОЦЕСС
      Атакующие против Защитников — для победы захватите чекпоинт на базе.
      Таймер матча (5 минут) — в случае ничьей по истечении времени активируется овертайм (победа присуждается по количеству оставшихся в живых игроков).
      Голосование за карту перед каждым раундом: /vote base [id] | /vote arena [id] | /vote random.
      Автоматический старт — лобби запускает раунд самостоятельно, как только в обеих командах появляются игроки.

      ⚔️ МЕХАНИКИ И ОСОБЕННОСТИ
      Выбор экипировки в начале раунда:
      Основное оружие: MP5 / M4 / AK47 / Shotgun
      Вторичное оружие: Deagle / Silenced Pistol
      Транспорт для защиты — обороняющаяся сторона получает эксклюзивный доступ к автомобилям и вертолету.
      Режим наблюдения за тиммейтами прямо во время матча: /spec [name].
      Слот рефери для турнирных и лиг-администраторов.

      🗺️ КАРТЫ
      Два типа локаций — Базы (открытая местность) и Арены (закрытые интерьеры).
      Огромный пул — более 100 слотов под базы и 50 слотов под арены.
      Для администрации: Команда /reloadmaps позволяет перезагрузить карты «на лету» без перезапуска всего сервера.

      🛡️ БАЗОВЫЙ АНТИЧИТ
      Серверная защита от Teleport / Flyhack / Speedhack (адаптирована под пинг и лаги).
      Строгая валидация оружия по слотам.
      Защита от спама фейк-киллами (FakeKill).
      Мониторинг пинга и потери пакетов (packet loss).

      🌐 ПОДДЕРЖКА ЯЗЫКОВ
      English | Русский | Українська

      👥 КОМАНДЫ
      Атакующие (Attackers) | Защитники (Defenders) | Рефери (Referee)

      💻 СПИСОК КОМАНД
      /vote — проголосовать за карту
      /spec [name] — войти в режим наблюдения за игроком
      /specoff — выйти из режима наблюдения
      /eng / /ru / /ua — Смена языка интерфейса
      /help — полный список доступных команд
      Игровой режим разработан специально под платформу open.mp.

      https://github.com/vandersexxxes-sudo/League-A-D-Attack-Defend-open.mp

      Dr.Vandersexxx with lov3
      Сайт проекта: https://vandersexxx.do.am/
      Добавил DrVandersexxx Добавлено 05/23/26 Категория Моды Автор ESL 2010 годов  
    • DrVandersexxx
      От DrVandersexxx
      League A/D — это соревновательный игровой режим Attack & Defend (Атака и Защита) для мультиплеера open.mp. Проект представляет собой полное переосмысление классического формата A/D образца 2008–2010 годов, но на базе современных стандартов стабильности и с полным искоренением старых багов/эксплойтов.
       
      🏆 ИГРОВОЙ ПРОЦЕСС
      Атакующие против Защитников — для победы захватите чекпоинт на базе.
      Таймер матча (5 минут) — в случае ничьей по истечении времени активируется овертайм (победа присуждается по количеству оставшихся в живых игроков).
      Голосование за карту перед каждым раундом: /vote base [id] | /vote arena [id] | /vote random.
      Автоматический старт — лобби запускает раунд самостоятельно, как только в обеих командах появляются игроки.

      ⚔️ МЕХАНИКИ И ОСОБЕННОСТИ
      Выбор экипировки в начале раунда:
      Основное оружие: MP5 / M4 / AK47 / Shotgun
      Вторичное оружие: Deagle / Silenced Pistol
      Транспорт для защиты — обороняющаяся сторона получает эксклюзивный доступ к автомобилям и вертолету.
      Режим наблюдения за тиммейтами прямо во время матча: /spec [name].
      Слот рефери для турнирных и лиг-администраторов.

      🗺️ КАРТЫ
      Два типа локаций — Базы (открытая местность) и Арены (закрытые интерьеры).
      Огромный пул — более 100 слотов под базы и 50 слотов под арены.
      Для администрации: Команда /reloadmaps позволяет перезагрузить карты «на лету» без перезапуска всего сервера.

      🛡️ БАЗОВЫЙ АНТИЧИТ
      Серверная защита от Teleport / Flyhack / Speedhack (адаптирована под пинг и лаги).
      Строгая валидация оружия по слотам.
      Защита от спама фейк-киллами (FakeKill).
      Мониторинг пинга и потери пакетов (packet loss).

      🌐 ПОДДЕРЖКА ЯЗЫКОВ
      English | Русский | Українська

      👥 КОМАНДЫ
      Атакующие (Attackers) | Защитники (Defenders) | Рефери (Referee)

      💻 СПИСОК КОМАНД
      /vote — проголосовать за карту
      /spec [name] — войти в режим наблюдения за игроком
      /specoff — выйти из режима наблюдения
      /eng / /ru / /ua — Смена языка интерфейса
      /help — полный список доступных команд
      Игровой режим разработан специально под платформу open.mp.

      https://github.com/vandersexxxes-sudo/League-A-D-Attack-Defend-open.mp

      Dr.Vandersexxx with lov3
      Сайт проекта: https://vandersexxx.do.am/
    • Dofarst
      От Dofarst
      AdrenalineRush — легкий геймплейный скрипт, добавляющий механику «второго дыхания». Когда здоровье персонажа падает до критической отметки (ниже 15 HP), автоматически активируется кратковременный прилив адреналина: восстанавливается выносливость для бега, изменяется визуальное восприятие, а игрок получает шанс спастись из критической ситуации. Полностью автономен, оптимизирован и готов к интеграции в любой игровой режим.
       
      P.S Плагин делаю впервые, поэтому не судите строго
       

    • Dofarst
      От Dofarst
      Всем привет, на днях решил создать свой SAMP сервер, ну как свой, взять какой то мод под основу и переделать его. Вопрос такой, какой можете посоветовать мод SAMP 0.3.7? Желательно с мобильным клиентом, но можно и пк, многие системы буду делать сам, но хотелось бы что бы уже присутствовала базовая бд, регистрация, авторизация, бизнесы, админки, лидеры фракции, и базовые команды.