PDA

Просмотр полной версии : [Вопрос] Отправка параметров в cmd::command_name(playerid, "")



StevenH
02.06.2017, 19:13
Как в cmd:: отправить команду без параметров? У меня есть команда, в которой есть необязательные параметры, но мне нужно из диалога, вызвать команду /sellhouse, но чтобы параметры туда не вводились, пробовал cmd::sellhouse(playerid, ""); , но к сожалению не работает, никакого эффекта

DeimoS
02.06.2017, 19:15
Так покажи код самой команды, как вызываешь и скажи какой командный процессор :)

StevenH
02.06.2017, 19:31
Так покажи код самой команды, как вызываешь и скажи какой командный процессор :)

DC_CMD, код (чутка код урезал / написал комментарий что дальше идет):


CMD:sellhouse(playerid, params[])
{
sscanf(params, "I(-1)d", params[0], params[1]); // id игрока | цена
if(params[0] == -1) // Если ид игрока не указан (-1)
{
// тут выскакивает диалог для продажи дома в гос. (подтверждение Да / Нет)
SendClientMessage(playerid, CWHITE, "Для продажи игроку: {4271FF}/sellhouse [ ID ] [ Цена ]");
return 1;
}
// тут проверки на продажу дома ИГРОКУ и так далее
return true;
}


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

Нужно как то вызвать в диалоге, чтобы прошло условие в команде - if(params[0] == -1)

Вызываю примерно сейчас так, но не работает:


// какой то case
switch(listitem)
{
// case 0-5
case 6: cmd::sellhouse(playerid, "");
}
// ...

DeimoS
02.06.2017, 19:38
Эмм. Во-первых, не может быть сначала необязательный параметр, а потом вдруг обязательный. Как вообще, в твоём представлении, sscanf должен понять, что раз ты ввёл всего одно число - это второй параметр, а не первый? :)
Во-вторых, собственно, проблема, вероятно, именно в том, что у тебя есть обязательный параметр в команде, но ты не указываешь их вообще

Как я понимаю, если не продавать дом игроку, то и цена автоматом устанавливается. Тогда так:

CMD:sellhouse(playerid, params[])
{
sscanf(params, "I(-1)I(-1)", params[0], params[1]); // id игрока | цена
if(params[0] == -1) // Если ид игрока не указан (-1)
{
// тут выскакивает диалог для продажи дома в гос. (подтверждение Да / Нет)
SendClientMessage(playerid, CWHITE, "Для продажи игроку: {4271FF}/sellhouse [ ID ] [ Цена ]");
return 1;
}
// тут проверки на продажу дома ИГРОКУ и так далее
return true;
}

StevenH
02.06.2017, 19:43
Эмм. Во-первых, не может быть сначала необязательный параметр, а потом вдруг обязательный. Как вообще, в твоём представлении, sscanf должен понять, что раз ты ввёл всего одно число - это второй параметр, а не первый? :)
Во-вторых, собственно, проблема, вероятно, именно в том, что у тебя есть обязательный параметр в команде, но ты не указываешь их вообще

Как я понимаю, если не продавать дом игроку, то и цена автоматом устанавливается. Тогда так:

CMD:sellhouse(playerid, params[])
{
sscanf(params, "I(-1)I(-1)", params[0], params[1]); // id игрока | цена
if(params[0] == -1) // Если ид игрока не указан (-1)
{
// тут выскакивает диалог для продажи дома в гос. (подтверждение Да / Нет)
SendClientMessage(playerid, CWHITE, "Для продажи игроку: {4271FF}/sellhouse [ ID ] [ Цена ]");
return 1;
}
// тут проверки на продажу дома ИГРОКУ и так далее
return true;
}

Вот в этом и проблема, я делал уже так:


sscanf(params, "I(-1)I(-1)", params[0], params[1]);


Однако сервер крашится, со следующими логами:


[18:43:24] [debug] Server crashed while executing demure.amx
[18:43:24] [debug] AMX backtrace:
[18:43:24] [debug] #0 native sscanf () from sscanf.so
[18:43:24] [debug] #1 001ce65c in public cmd_sellhouse (playerid=0, params[]=@003adc74 !"") at C:\Users\\Desktop\Demure RP\\gamemodes\demure.pwn:18778
[18:43:24] [debug] Native backtrace:
[18:43:24] [debug] #0 f7410180 in _Z13GetStackTraceRSt6vectorI10StackFrameSaIS0_EEPv () from plugins/crashdetect.so
[18:43:24] [debug] #1 f7408064 in _ZN11CrashDetect20PrintNativeBacktraceERSoRKN2os7ContextE () from plugins/crashdetect.so
[18:43:24] [debug] #2 f7408d64 in _ZN11CrashDetect20PrintNativeBacktraceERKN2os7ContextE () from plugins/crashdetect.so
[18:43:24] [debug] #3 f740acdb in _ZN11CrashDetect7OnCrashERKN2os7ContextE () from plugins/crashdetect.so
[18:43:24] [debug] #4 f740f4d5 in ?? () from plugins/crashdetect.so
[18:43:24] [debug] #5 ffffe410 in ?? ()
[18:43:24] [debug] #6 f732f8d6 in ?? () from plugins/sscanf.so
[18:43:24] [debug] #7 080950e4 in ?? () from ./samp03svr
[18:43:24] [debug] #8 f7409ad3 in _ZN11CrashDetect17HandleAMXCallbackEiPiS0_ () from plugins/crashdetect.so
[18:43:24] [debug] #9 5f646d63 in ?? () from uu||~|PDv
[18:43:24] [debug] Registers:
[18:43:24] [debug] EAX: 00000000 EBX: f7333120 ECX: 082b3b00 EDX: ffffffff
[18:43:24] [debug] ESI: ffb4ddc8 EDI: f73332f8 EBP: ffb4dde8 ESP: ffb4dd30
[18:43:24] [debug] EIP: f732f8d6 EFLAGS: 00000286
[18:43:24] [debug] Stack:
[18:43:24] [debug] ESP+00000000: 082b3b00 003adc78 ffb4ddc4 0000000b
[18:43:24] [debug] ESP+00000020: 312d2849 2d284929 ff002931 f77b7f94
[18:43:24] [debug] ESP+00000040: f73332f8 f73332f8 f73332f8 f73332f8
[18:43:24] [debug] ESP+00000060: 00000005 00000005 61016369 00326c6c
[18:43:24] [debug] ESP+00000080: 00000021 00000000 ffffffff 080ac299
[18:43:24] [debug] ESP+000000a0: f733148a ffb4dd80 f732e6cb f1e20008
[18:43:24] [debug] ESP+000000c0: 082b3b00 f23ae920 f74ade09 f740114a
[18:43:24] [debug] ESP+000000e0: 082b3b00 08263460 ffb4e1cc f7409ad3
[18:43:24] [debug] ESP+00000100: 001ce65c 00000087 ffb4dec8 f756d6e5
[18:43:24] [debug] ESP+00000120: 00000000 081d0559 ffb4dec8 f756d699
[18:43:24] [debug] ESP+00000140: f74b1357 081e01b5 081cfc38 f77b7cc0
[18:43:24] [debug] ESP+00000160: 081df9cc ffb4df81 0000002c 00000001
[18:43:24] [debug] ESP+00000180: 00000000 00000000 f756d67f f7784000
[18:43:24] [debug] ESP+000001a0: 00000000 00000002 00000001 00000009
[18:43:24] [debug] ESP+000001c0: f7780e07 f77b7f94 00000000 f77a47f5
[18:43:24] [debug] ESP+000001e0: 082b3b00 00000000 003b1c10 001ce65c
[18:43:24] [debug] ESP+00000200: 00000000 081ce9fc 081cea00 081ce9f8
[18:43:24] [debug] ESP+00000220: ffb4e030 ffb4df00 f77a47db f7434ff4
[18:43:24] [debug] ESP+00000240: 08263460 00000087 ffb4e00c f23ae920
[18:43:24] [debug] ESP+00000260: 00000000 f7780e00 ffb4e030 082b3b00
[18:43:24] [debug] ESP+00000280: 082b3b00 00000087 ffb4e00c f23ae920
[18:43:24] [debug] ESP+000002a0: f1ffcd28 003b1bf8 003adc78 00000004
[18:43:24] [debug] ESP+000002c0: 001d8d78 ffb4e030 00000000 f7401408
[18:43:24] [debug] ESP+000002e0: ffb4e088 00000001 082b3b00 f7434ff4
[18:43:24] [debug] ESP+00000300: 082b3b00 ffb4e1cc 00000122 00000000
[18:43:24] [debug] ESP+00000320: 00000001 081cfc38 ffb4e078 f7359b14
[18:43:24] [debug] ESP+00000340: 00000002 f73f03c0 ffb4e148 f7359f38
[18:43:24] [debug] ESP+00000360: 00000000 00000000 00000122 081d1028
[18:43:24] [debug] ESP+00000380: 00000008 00000000 003adc74 00000010
[18:43:24] [debug] ESP+000003a0: 00008b38 00000030 00000000 ffffffff
[18:43:24] [debug] ESP+000003c0: 082b3b00 08263460 00000122 f740e384
[18:43:24] [debug] ESP+000003e0: 00000000 082b3b00 ffb4e128 f7359bfe
[18:43:24] [debug] Loaded modules:
[18:43:24] [debug] 00000000 - 00187d1f samp03svr
[18:43:24] [debug] 00000000 - 000004e4
[18:43:24] [debug] f7780000 - f7782c6f /lib/libdl.so.2
[18:43:24] [debug] f7765000 - f777f00b /lib/libpthread.so.0
[18:43:24] [debug] f766e000 - f776c9f7 /usr/lib/i386-linux-gnu/libstdc++.so.6
[18:43:24] [debug] f7621000 - f766d417 /lib/libm.so.6
[18:43:24] [debug] f7605000 - f761e524 /lib/i386-linux-gnu/libgcc_s.so.1
[18:43:24] [debug] f7439000 - f760b967 /lib/libc.so.6
[18:43:24] [debug] f7795000 - f77b7844 /lib/ld-linux.so.2
[18:43:24] [debug] f73f2000 - f7434ac4 plugins/crashdetect.so
[18:43:24] [debug] f7334000 - f73f239a plugins/streamer.so
[18:43:24] [debug] f778a000 - f779172f /lib/librt.so.1
[18:43:24] [debug] f7327000 - f73335fc plugins/sscanf.so
[18:43:24] [debug] f72bf000 - f7327788 plugins/mysql.so
[18:43:24] [debug] f7291000 - f72bdb58 /game/plugins/../log-core.so
[18:43:24] [debug] f6f69000 - f7283bf4 /usr/lib/i386-linux-gnu/libmysqlclient.so.18
[18:43:24] [debug] f6f53000 - f6f675e0 /lib/i386-linux-gnu/libz.so.1
[18:43:24] [debug] f2f44000 - f2f4f583 /lib/libnss_nis.so.2
[18:43:24] [debug] f2f28000 - f2f431ab /lib/libnsl.so.1
[18:43:24] [debug] f2f1a000 - f2f26917 /lib/libnss_files.so.2
[18:43:24] [debug] f728a000 - f728eaf0 plugins/dc_cmd.so
[18:43:24] [debug] f2d9b000 - f2dffe6e plugins/regex.so
[18:43:24] [debug] f7283000 - f72880ef /lib/libnss_dns.so.2
[18:43:24] [debug] f2d80000 - f2d9a0cb /lib/libresolv.so.2


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

18778 это
sscanf(params, "I(-1)I(-1)", params[0], params[1]);

DeimoS
02.06.2017, 19:45
Потому что нужно отучаться использовать массив params в качестве параметров, ибо когда ты параметры не указываешь, ты заставляешь sscanf обращаться к несуществующим ячейкам памяти

CMD:sellhouse(playerid, params[])
{
new giveplayerid,
price;
sscanf(params, "I(-1)I(-1)", giveplayerid, price); // id игрока | цена
if(giveplayerid == -1) // Если ид игрока не указан (-1)
{
// тут выскакивает диалог для продажи дома в гос. (подтверждение Да / Нет)
SendClientMessage(playerid, CWHITE, "Для продажи игроку: {4271FF}/sellhouse [ ID ] [ Цена ]");
return 1;
}
// тут проверки на продажу дома ИГРОКУ и так далее
return true;
}

StevenH
02.06.2017, 19:49
del

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

Спасибо, закрой