Question

Yandex
Новичок

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

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

Спойлер

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
Cawfee
Великий Гуру

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

g_player[playerid][P_TEAM]

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

Share this post


Link to post
Share on other sites
  • 0
SCRIPTMAN
Великий Гуру

Если ты решил вырезать только команду, то система работать не будет. Нужно вырезать всю систему репортов. У тебя ошибка идёт на 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
Yandex
Новичок

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

 

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

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

Share this post


Link to post
Share on other sites
  • 0
Cawfee
Великий Гуру

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

Share this post


Link to post
Share on other sites
  • 0
Yandex
Новичок

@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
Cawfee
Великий Гуру

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

#define GetPlayerTeamEx(%0) ...

 

Share this post


Link to post
Share on other sites
  • 0
Yandex
Новичок

@Jawn 

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

 

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

    • Badr
      By Badr
      дратуте , решил сделать лаунчер самп на node.js , все норм сделал дизайн/стиль , но когда захожу абсолютно на любой сервер (заходил на онух рп ,и на свой сервер ) и пишет вронг сервер пароль ( мне лень на англиском писать )  скрин прикрепил 

      исходник https://disk.yandex.ru/d/D_104GFgrFO16A ( сам делал , то-есть дипсик  )
      я знаю все будут писать что (Слово удалено системой) ии-шное