PDA

Просмотр полной версии : [Вопрос] Как сделать пустую строку в команде..



StevenH
02.12.2015, 18:10
Всем привет. Возможно данный вопрос будет не правильно сформулирован, но напишу как понимаю я :)
Есть допустим команда /sellbusiness [id] [sum], как сделать что бы если ввести просто /sellbusiness то выйдет опр. диалог (диалог я сам сделаю, мне нужно узнать как сделать).
Где то читал что с помощью if(\0), что то типа такого)

- - - Добавлено - - -

Командный процессор - DC_CMD.

VVWVV
02.12.2015, 18:18
Если у вас есть sscanf, то можно сделать так:


if (sscanf(params, "dd", params[0], params[1]))
{
/* Something */
}

Desulaid
02.12.2015, 18:20
Или


COMMAND:sellbusiness(playerid, params[])
{
if(isnull(params))
{
ShowPlayerDialog(...);
return 0;
}
return 1;
}

StevenH
02.12.2015, 19:14
Или


COMMAND:sellbusiness(playerid, params[])
{
if(isnull(params))
{
ShowPlayerDialog(...);
return 0;
}
return 1;
}

Не работает, пример кода:


CMD:sellhouse(playerid, params[])
{
if(sscanf(params, "dd", params[0], params[1])) return true;
if(isnull(params))
{
new message[178];
format(message, sizeof(message), "{"#cWHITE"}Вы действительно хотите продать свой дом государству за {"#cGREEN"}$%d\n{"#cGRAY"}(Если вы хотите продать бизнес другому игроку используйте /sellhouse [ID игрока] [Сумма])", HouseInfo[houseid][hValue]);
ShowPlayerDialog(playerid, 30, 0, "Дом", message, "Да", "Нет");
SendClientMessage(playerid, COLOR_WHITE, "Для продажи игроку: /sellhouse [ID] [Сумма]");
return true;
}
//действия если все params введены
}


- - - Добавлено - - -


Если у вас есть sscanf, то можно сделать так:


if (sscanf(params, "dd", params[0], params[1]))
{
/* Something */
}


Выше прочитай, я не это хочу!

L0ndl3m
02.12.2015, 19:17
Во-первых, вы одновременно используете две функции, когда это не нужно.
Во-вторых, VVWVV дал вам годную подсказку: Если игрок не ввёл параметр, то выведем диалога, иначе - ошибку.

StevenH
02.12.2015, 19:19
Если кто-то не понял, напишу ещё раз.
- Если ввести ПРОСТО /sellbusiness, то должен выйти опр. диалог для слива в гос
- Если ввести /sellbusiness 1 50000 (id и цена) то действие продажи (сам сделаю).

- - - Добавлено - - -


Во-первых, вы одновременно используете две функции, когда это не нужно.
Во-вторых, VVWVV дал вам годную подсказку: Если игрок не ввёл параметр, то выведем диалога, иначе - ошибку.

Во первых, параметры я буду использовать дальше (после диалога).
Во вторых, я вырезал код после того если игрок ввёл ПРОСТО команду. А так params 0 и 1 используется!!!

Что бы было понятней, вот весь код:


CMD:sellhouse(playerid, params[])
{
if(PlayerInfo[playerid][pHouse] == 0) return SendClientMessage(playerid, COLOR_GRAY, "У Вас нет дома");
if(PlayerInfo[playerid][pCar] != 0) return SendClientMessage(playerid, COLOR_GRAY, "У Вас есть машина. Вы должны продать её прежде чем продавать дом");
if(sscanf(params, "dd", params[0], params[1])) return true;
new houseid = PlayerInfo[playerid][pHouse];
if(isnull(params)) // тут не знаю
{
new message[178];
format(message, sizeof(message), "{"#cWHITE"}Вы хотите продать дом государству за {"#cGREEN"}$%d {"#cWHITE"}(80# от гос. стоимости)?\n{"#cGRAY"}(что бы продать дом другому игроку введите /sellhouse [ID игрока] [Цена])", HouseInfo[houseid][hValue]/100*80);
ShowPlayerDialog(playerid, 32, 0, "Продажа дома", message, "Да", "Нет");
SendClientMessage(playerid, COLOR_WHITE, "Для продажи игроку: /sellhouse [ID игрока] [Цена]");
return true;
}
if(PlayerInfo[playerid][pLevel] < 3) return SendClientMessage(playerid, -1, "Данная команда доступна с 3 уровня");
if(price < HouseInfo[houseid][hValue] || price > 15000000) return SendClientMessage(playerid, COLOR_GRAY, "Цена не может быть меньше гос. цены дома или больше 15 млн.");
if(!IsPlayerConnected(params[0]) || playerid == params[0]) return SendClientMessage(playerid, CGRAY_GRAY, "Неверный ID игрока");
if(PlayerInfo[params[0]][pHouse] != 0) return SendClientMessage(playerid, COLOR_GRAY, "У игрока уже есть дом");
if(GetPlayerDistanceToPlayer(playerid, params[0]) > 3.0 || GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(params[0])) return SendClientMessage(playerid, COLOR_GRAY, "Вы далеко друг от друга");
new message[150];
format(message, sizeof(message), "Вы предложили {"#cWHITE"}%s {"#cINFO"} купить ваш дом", PlayerInfo[params[0]][pName]);
SendClientMessage(playerid, CINFO, message);
format(message, sizeof(message), "%s {"#cINFO"}предложил Вам купить его дом за {"#cRED"}$%d{"#cINFO"}. Что бы подтвердить нажмите {"#cGREEN"}Y{"#cINFO"}, иначе {"#cRED"}N", PlayerInfo[playerid][pName], params[1]);
SendClientMessage(params[0], CWHITE, message);
format(message, sizeof(message), "Вы предложили {"#cINFO"}%s {ffffff}купить ваш дом за {"#cGREEN"}$%d", PlayerInfo[params[0]][pName], params[1]);
return true;
}

Desulaid
02.12.2015, 19:44
Непонятливый ты мой


COMMAND:sellbusiness(playerid, params[])
{
if(sscanf(params, "ii", params[0], params[1]))
{
// Если ничего не ввел
ShowPlayerDialog(...);
return 0;
}
// Если ввел параметры
return 1;
}

StevenH
02.12.2015, 19:47
Непонятливый ты мой


COMMAND:sellbusiness(playerid, params[])
{
if(sscanf(params, "ii", params[0], params[1]))
{
// Если ничего не ввел
ShowPlayerDialog(...);
return 0;
}
// Если ввел параметры
return 1;
}

Я так же вот и делал, только вот sscanf у меня возвращал return true (там где параметры), а надо было убрать).

Desulaid
02.12.2015, 19:51
CMD:sellhouse(playerid, params[])
{
if(PlayerInfo[playerid][pHouse] == 0)
return SendClientMessage(playerid, COLOR_GRAY, "У Вас нет дома");

if(PlayerInfo[playerid][pCar] != 0)
return SendClientMessage(playerid, COLOR_GRAY, "У Вас есть машина. Вы должны продать её прежде чем продавать дом");

if(PlayerInfo[playerid][pLevel] < 3)
return SendClientMessage(playerid, -1, "Данная команда доступна с 3 уровня");

if(sscanf(params, "dd", params[0], params[1]))
{
new message[178];
format(message, sizeof(message), "{"#cWHITE"}Вы хотите продать дом государству за {"#cGREEN"}$%d {"#cWHITE"}(80# от гос. стоимости)?\n{"#cGRAY"}(что бы продать дом другому игроку введите /sellhouse [ID игрока] [Цена])", HouseInfo[houseid][hValue]/100*80);
ShowPlayerDialog(playerid, 32, 0, "Продажа дома", message, "Да", "Нет");
SendClientMessage(playerid, COLOR_WHITE, "Для продажи игроку: /sellhouse [ID игрока] [Цена]");
return 0;
}

if(price < HouseInfo[PlayerInfo[playerid][pHouse]][hValue] || price > 15000000)
return SendClientMessage(playerid, COLOR_GRAY, "Цена не может быть меньше гос. цены дома или больше 15 млн.");

if(!IsPlayerConnected(params[0]) || playerid == params[0])
return SendClientMessage(playerid, CGRAY_GRAY, "Неверный ID игрока");

if(PlayerInfo[params[0]][pHouse] != 0)
return SendClientMessage(playerid, COLOR_GRAY, "У игрока уже есть дом");

if(GetPlayerDistanceToPlayer(playerid, params[0]) > 3.0 || GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(params[0]))
return SendClientMessage(playerid, COLOR_GRAY, "Вы далеко друг от друга");

new message[150];
format(message, sizeof(message), "Вы предложили {"#cWHITE"}%s {"#cINFO"} купить ваш дом", PlayerInfo[params[0]][pName]);
SendClientMessage(playerid, CINFO, message);
format(message, sizeof(message), "%s {"#cINFO"}предложил Вам купить его дом за {"#cRED"}$%d{"#cINFO"}. Что бы подтвердить нажмите {"#cGREEN"}Y{"#cINFO"}, иначе {"#cRED"}N", PlayerInfo[playerid][pName], params[1]);
SendClientMessage(params[0], CWHITE, message);
format(message, sizeof(message), "Вы предложили {"#cINFO"}%s {ffffff}купить ваш дом за {"#cGREEN"}$%d", PlayerInfo[params[0]][pName], params[1]);
// кому вы что предложили? о_0

return 1;
}