Рекомендованные сообщения



7 posts in this topic

Приветствую всех. Пишу мод с нуля на Pawn.CMD 3.3.6 и столкнулся с следующей проблемой. Написал команды /s /me /do /try, мод при компиляции ошибки не выдаёт, но при попытке задействовать данные команды в игре ничего не происходит. Что мне делать? :(

 

Спойлер

//================================[Ôëàãè]=======================================
flags:s(CMD_CHAT)
flags:me(CMD_CHAT)
flags:do(CMD_CHAT)
flags:try(CMD_CHAT)
//===========================[Êîìàíäû ñåðâåðà]==================================
cmd:s(playerid, params[])
{
    new string[MAX_CHATBUBBLE_LENGTH];
    format(string, sizeof string, "%s êðè÷èò: %s", GN(playerid), params);
    if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) ApplyAnimation(playerid,"RIOT","RIOT_shout",4.1,0,0,0,0,1);
    ProxDetector(playerid, 30.0, string);
    return 1;
}

cmd:me(playerid, params[])
{
    new string[MAX_CHATBUBBLE_LENGTH];
    format(string, sizeof string, "%s %s", GN(playerid), params);
    ProxDetector(playerid, 20.0, string, COLOR_PURPLE, COLOR_PURPLE);
    return 1;
}

cmd:do(playerid, params[])
{
    new string[MAX_CHATBUBBLE_LENGTH];
    format(string, sizeof string, "%s (( %s ))", params, GN(playerid));
    ProxDetector(playerid, 20.0, string, COLOR_LIGHTBLUE, COLOR_LIGHTBLUE);
    return 1;
}

cmd:try(playerid, params[])
{
    new string[MAX_CHATBUBBLE_LENGTH];
    if(random(2) == 1) format(string, sizeof(string), "%s %s - {00800}óäà÷íî", GN(playerid), params);
    else format(string, sizeof(string), "%s %s - {FF0000}íåóäà÷íî", GN(playerid), params);
    ProxDetector(playerid, 20.0, string, -1, -1);
    return 1;
}

 

Share this post


Link to post
Share on other sites

@heazych, в OnPlayerCommandText какое возвращаемое значение стоит? И попробуйте уж заодно написать команду без флагов, быть может флаг неправильно задан.

Share this post


Link to post
Share on other sites
24 минуты назад, Jawn сказал:

@heazych, в OnPlayerCommandText какое возвращаемое значение стоит? И попробуйте уж заодно написать команду без флагов, быть может флаг неправильно задан.

public OnPlayerCommandText(playerid, cmdtext[]) return true;

 

 

@Jawn также при отключении флагов с помощью /* */ команды не работают. :(

 

Share this post


Link to post
Share on other sites

@heazych, стало быть попробуйте сделать возврат нуля в OnPlayerCommandText. Что в OnPlayerCommandReceived?

Share this post


Link to post
Share on other sites

@Jawn 

public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
    if(flags & CMD_CHAT) return 0;
	return 1;
}

 

Share this post


Link to post
Share on other sites

@heazych, в OnPlayerCommandReceived с помощью флагов вы должны определять категорию команды, а потом, с помощью дополнительных условий, проверять, может ли игрок пользоваться этой категорией команд. В данный момент в OnPlayerCommandReceived написано, что если команда относится к CMD_CHAT, значит она не должна выполняться. Все остальные команды - выполняются. Ибо возврат 1 указывает на то, что следом будет вызвана требуемая команда, а возврат 0 - прерывание цепочки вызовов. Стоит сделать наоборот: если выполнились условия, вызываем команду. Нет? Прерываем цепь.

public OnPlayerCommandReceived(playerid, cmd[], params[], flags) {
	if(flags & CMD_CHAT) {
		return 1;
	}
	
	return 0;
}

Ну, и для того, чтобы эти флаги имели хоть какой-то смысл, вдобавок уже накручивать условия вида "Игроку не ограничена отправка сообщений в чат?" и "Игрок авторизован?".

public OnPlayerCommandReceived(playerid, cmd[], params[], flags) {
	if ((flags & CMD_CHAT) && isAuthorized(playerid) && !isMuted(playerid)) {
		return 1;
	}
	
	return 0;
}

 

Share this post


Link to post
Share on other sites

@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

    • Dworkin
      By Dworkin
      Привет. Мне тяжело дается понимание строк в pawn из за не динамических массивов.
      #include enum pInfo { pRangName[25] } new players[MAX_PLAYERS][pInfo]; new string[20]; main() { format(string, sizeof(string), "Салага"); printf(string); players[0][pRangName] = string; } выдает ошибку "error 047: array sizes do not match, or destination array is too small" на строку "players[0][pRangName] = string;"
      Я понимаю что в ошибке говорится что размер не совпадает, но не могу понять как это сделать в павне