Question

Всем привет! Помогите исправить ошибки , пожалуйста :) 

У меня в моде есть такая команда:

Спойлер

CMD:z(playerid, params[])
{
	if(GetPlayerAdminEx(playerid) >= 1)
	{
		if(!strlen(params))
			return SendClientMessage(playerid, 0xCECECEFF, "Используйте: /z [ID игрока отправившего запрос] [ответ]");

		extract params -> new to_player, string: message[144 + 1];

		if(!IsPlayerConnected(to_player))
			return SendClientMessage(playerid, 0x999999FF, "Такого игрока нет");

		if(!strlen(message))
			return SendClientMessage(playerid, 0x999999FF, "Введите сообщение");

		new fmt_str[128];

		format(fmt_str, sizeof fmt_str, "%s %s[%d] ответил на запрос игрока %s[%d]: {FFCD00}%s", GetPlayerAdminEx(playerid) > 1 ? "Администратор" : "Агент поддержки", GetPlayerNameEx(playerid), playerid, GetPlayerNameEx(to_player), to_player, message);
		SendClientMessage(to_player, 0xc7dae8FF, fmt_str);
		PlayerPlaySound(to_player, 1085, 0.0, 0.0, 0.0);

        SendMessageToAdmins(fmt_str, 0xc7dae8FF);
	}
	return 1;
}

 

Мне надо заменить ее вот на эту:

Спойлер

CMD:ans(playerid, params[])
{
	if(PI[playerid][pAdmin] < ADM_MODER) return SendClientMessage(playerid, COLOR_WHITE, "Неверно введена команда! {2B800D}Воспользуйтесь: (/menu > команды сервера)");
	else if(AdminLogged[playerid] == false) return SendClientMessage(playerid, COLOR_GREY, YouAreNotLoggedInAsAdmin);

	if(sscanf(params, "i", params[0])) return SendClientMessage(playerid, VAGOS_COLOR, "• [ Подсказка ] {ffffff}Введите: /ans [ID репорта]");
	if(params[0] == 0) return SCM(playerid, COLOR_GRAY, "Ошибка! Не верный ID репорта");
	SetPVarInt(playerid, "ReporID", params[0]);

    new string[350];

	for(new i = 0; i<25; i++)
	{
	    if(RepInfo[i][RepID] == params[0])
	    {
	        if(RepInfo[i][RepStatus] == 1)
			{
				SCM(playerid, COLOR_RED, "Кто-то уже отвечает на данный репорт!");
				break;
			}
			else
			{
				format(string, sizeof(string), "\
				{ffffff}Вы открыли репорт под {c71616}%d{ffffff} (ID)!\n\
				{ffffff}Имя игрока: {c71616}%s[%d]\n\
				{ffffff}Дата и время: {c71616}[%s]\n\n\
				{ffffff}Вопрос: {c71616}%s\n\n\
				{ffffff}Введите ответ на данный запрос!", params[0],GetName(RepInfo[i][RepIDD]),RepInfo[i][RepIDD],date("%hh:%ii:%ss", RepInfo[i][RepTime]), RepInfo[i][Reptex]);
				SPD(playerid, D_MUSOROVOZ+5, DSI, "Ответ на репорт",string,"Ответить","Закрыть");

				RepInfo[i][RepStatus] = 1;
                SetPVarInt(playerid,"IDrepstatus", 1);
				PI[playerid][pRepStatus] = i;
				break;
			}
		}

	}

    UpdateReported();
	return 1;
}

 

При компиляции ошибки: 

(47382) : error 017: undefined symbol "PI"
(47382) : warning 215: expression has no effect
(47382) : error 001: expected token: ";", but found "]"
(47382) : error 029: invalid expression, assumed zero
(47382) : fatal error 107: too many error messages on one line

 

Edited by Jawn

Share this post


Link to post
Share on other sites

10 answers to this question

  • 0

@saasha, вот и ответ на ваш вопрос: g_player - название массива игрока. Ну, и пример использования:

g_player[playerid][P_TEAM]

где P_TEAM - переменная, хранящая идентификатор фракции, к которой принадлежит игрок.

Share this post


Link to post
Share on other sites
  • 0

Если ты решил вырезать только команду, то система работать не будет. Нужно вырезать всю систему репортов. У тебя ошибка идёт на PI - неизвестный символ, обычно это массив с данными игрока, у тебя он возможно называется "Player" или "pInfo", "PlayerInfo", посмотри в моде. Я заменил проверку на админку в новой команде на твою(взял из старой команды), тебе остаётся заменить строку "PI[playerid][pRepStatus] = i;" - создай pRepStatus, посмотри в моде, из которого вырезаешь, за что она отвечает и сделай точно так же. Не забудь про массив "RepInfo"

Спойлер

CMD:ans(playerid, params[])
{
	if(GetPlayerAdminEx(playerid) < 1) return false;

	if(sscanf(params, "i", params[0])) return SendClientMessage(playerid, VAGOS_COLOR, "• [ Подсказка ] {ffffff}Введите: /ans [ID репорта]");
	if(params[0] == 0) return SCM(playerid, COLOR_GRAY, "Ошибка! Не верный ID репорта");
	SetPVarInt(playerid, "ReporID", params[0]);

    new string[350];

	for(new i = 0; i<25; i++)
	{
	    if(RepInfo[i][RepID] == params[0])
	    {
	        if(RepInfo[i][RepStatus] == 1)
			{
				SCM(playerid, COLOR_RED, "Кто-то уже отвечает на данный репорт!");
				break;
			}
			else
			{
				format(string, sizeof(string), "\
				{ffffff}Вы открыли репорт под {c71616}%d{ffffff} (ID)!\n\
				{ffffff}Имя игрока: {c71616}%s[%d]\n\
				{ffffff}Дата и время: {c71616}[%s]\n\n\
				{ffffff}Вопрос: {c71616}%s\n\n\
				{ffffff}Введите ответ на данный запрос!", params[0],GetName(RepInfo[i][RepIDD]),RepInfo[i][RepIDD],date("%hh:%ii:%ss", RepInfo[i][RepTime]), RepInfo[i][Reptex]);
				SPD(playerid, D_MUSOROVOZ+5, DSI, "Ответ на репорт",string,"Ответить","Закрыть");

				RepInfo[i][RepStatus] = 1;
                SetPVarInt(playerid,"IDrepstatus", 1);
				PI[playerid][pRepStatus] = i;
				break;
			}
		}

	}

    UpdateReported();
	return 1;
}

 

 

Edited by Jawn

Share this post


Link to post
Share on other sites
  • 0

@SCRIPTMAN Привет. Я вырезаю всю систему, но проблемы возникли с "PI". Раньше я встречал ошибки, но там вместо "PI", допустим, "p_info" и тд. Но тут ничего похожего нету.

 

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

Заключил ваш код под спойлер в заголовке темы. Пожалуйста, обратите внимание на то, как это выглядит теперь, и, пожалуйста, впредь делайте по аналогии. Как пользоваться тегом спойлер?.

Share this post


Link to post
Share on other sites
  • 0

@saasha, покажите какую-нибудь команды, связанные с фракцией (например, отправку сообщения в рацию), либо же что-нибудь связанное с покупками в 24/7, если таковое имеется...

Share this post


Link to post
Share on other sites
  • 0

@Jawn 

CMD:r(playerid, params[])
{
	if(!(GetPlayerTeamEx(playerid) || GetPlayerJob(playerid))) return SendClientMessage(playerid, 0xCECECEFF, "* Вы нигде не работаете/не состоите в организациях");
	else if(TEAM_OPG_CENTRALNAYA <= GetPlayerTeamEx(playerid) <= TEAM_OPG_NORTHNAYA) return SendClientMessage(playerid, 0xCECECEFF, "* Функция доступна для сотрудников гос. организаций");
	else if(IsPlayerMuted(playerid) > 0) return SendClientMessage(playerid, 0xFF6600FF, "Доступ в чат заблокирован. Время до разблокировки: {66CC33}/time");
	else if(!strlen(params)) return SendClientMessage(playerid, 0xCECECEFF, "Используйте: /r [текст]");

	new fmt_msg[144];

	format(fmt_msg, sizeof fmt_msg, "[R] %s %s[%d]: %s", GetPlayerJobAndRankName(playerid), GetPlayerNameEx(playerid), playerid, params);

	if(1 <= GetPlayerTeamEx(playerid) <= 10)
		SendMessageToTeam(GetPlayerTeamEx(playerid), fmt_msg, 0x33CC66FF);
	else
		SendMessageToJob(GetPlayerJob(playerid), fmt_msg, 0x33CC66FF, _, true);

	SetPlayerChatBubble(playerid, "сказал(а) что-то в рацию", 0xDD99FFAA, 10.0, 4000);
	return 1;
}

 

Edited by saasha

Share this post


Link to post
Share on other sites
  • 0

@saasha, отлично, а теперь найдите определение для GetPlayerTeamEx. Скорее всего будет иметь следующий вид:

#define GetPlayerTeamEx(%0) ...

 

Share this post


Link to post
Share on other sites
  • 0

@Jawn 

#define GetPlayerTeamEx(%0)		GetPlayerData(%0, P_TEAM)			// организация в которой состоит игрок

 

Share this post


Link to post
Share on other sites
  • 0

@saasha, по аналогии найдите определение для GetPlayerData.

Share this post


Link to post
Share on other sites
  • 0

@Jawn 

#define GetPlayerData(%0,%1) 	g_player[%0][%1]

 

Share this post


Link to post
Share on other sites
  • 0

@Jawn Спасибо большое :)

Share this post


Link to post
Share on other sites
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

    • Kutuzov
      By Kutuzov
      Всем привет, хотелось бы спросить у тех, кто разбирается в PluginSDK.
      Какие есть источники, руководства, документации о PluginSDK?
      Я пока что ничего нормального не нахожу.
      Заранее спасибо