#1
Отправлено 20 августа 2017 — 20:40
-
- Новичок
-
Здравствуйте! Поомгите пожалуйста, при компиляции выскочило следующие:
error 001: expected token: «-string end-«, but found «-identifier-«
Ошибка произошла в коде: if(GetPVarInt(playerid,»RobAtm» != 1)) return true;
Вот весь код:
CMD:robbank(playerid, params[])
{
if(!IsAGang(playerid)) return SendClientMessage(playerid, COLOR_GREY, YouCanNot);
else if(TextResetCMD[playerid] > gettime()) return SendClientMessage(playerid, COLOR_GREY, «?? ?????»);
else if(pInfo[playerid][pRank] < 6) return SendClientMessage(playerid, COLOR_GREY, «??????? ????? ????? ? 6 ?????!»);
if(pInfo[playerid][pPhoneNumber] <= 1) return SendClientMessage(playerid, COLOR_GREY, «? ??? ???? ????????.»);
{
if(!IsPlayerInRangeOfPoint(playerid,1.3,-19.1494,1488.8000,16.8570)) return SendClientMessage(playerid, COLOR_GREY, «?? ?????? ????????? ? ?????? ?????????? ????????»);
{
if(GetPVarInt(playerid,»RobAtm» != 1)) return true;
SendClientMessage(playerid, 0xFFFFFFAA, «?? ??? ??????? ????????!»), SetPVarInt(playerid,»Robatm»,1),SetPVarInt(playerid,»RobAtm»,gettime()+10),SetPVarInt(playerid,»atmrob»,gettime()+90);
if(GetPVarInt(playerid,»RobAtm») > gettime()) RobAtm();
if(GetPVarInt(playerid,»atmrob») > gettime()) DeletePVar(playerid,»Robatm»), SendClientMessage(playerid, 0xFFFFFFAA, «?? ????? ?????? ??????? ????????!»);
}
}
return 1;
}
Так же вот такая ошибка warning 202: number of arguments does not match definition
Вот тут: if(GetPVarInt(playerid,»RobAtm») > gettime()) RobAtm();
0
#2
Отправлено 20 августа 2017 — 20:48
-
- Worst
-
Объясни мне, зачеем так делать?
Function; { }
Что открывает данные скобки?
warning 202: number of arguments does not match definition — Несовпадение аргументов в ф-ии.
if(GetPVarInt(playerid,"RobAtm") != 1) return true;
0
#3
Отправлено 20 августа 2017 — 20:57
-
- Новичок
-
Skiffi (20 августа 2017 — 20:48) писал:
Объясни мне, зачеем так делать?
Function; { }
Что открывает данные скобки?
warning 202: number of arguments does not match definition — Несовпадение аргументов в ф-ии.
if(GetPVarInt(playerid,"RobAtm") != 1) return true;
Ты сейчас будешь посты набивать?
-2
#4
Отправлено 20 августа 2017 — 21:22
-
- Island
-
if(pInfo[playerid][pPhoneNumber] <= 1) return SendClientMessage(playerid, COLOR_GREY, «? ??? ???? ????????.»);
{
Убавлю немного прозрачность с сообщения скиффи, так более понятно?
0
#5
Отправлено 20 августа 2017 — 21:25
-
- Новичок
-
Quentino (20 августа 2017 — 21:22) писал:
if(pInfo[playerid][pPhoneNumber] <= 1) return SendClientMessage(playerid, COLOR_GREY, «? ??? ???? ????????.»);
{
Убавлю немного прозрачность с сообщения скиффи, так более понятно?
Ну я убрал эти скобки, а что делать с теми ошибками, которые при компиляции?
0
#6
Отправлено 20 августа 2017 — 21:26
-
- Знаток
-
error 001: expected token: «-string end-«, but found «-identifier-«
Для исправления вот эту строку:
if(GetPVarInt(playerid,"RobAtm" != 1)) return true;
Измени на эту:
if(GetPVarInt(playerid,"RobAtm") != 1) return true;
warning 202: number of arguments does not match definition
Тут компилятор жалуется на несовпадение аргументов, вероятнее всего функции RobAtm();
Посмотри операнды той функции и скорректируй.
1
#7
Отправлено 20 августа 2017 — 21:33
-
- Новичок
-
Const (20 августа 2017 — 21:26) писал:
error 001: expected token: «-string end-«, but found «-identifier-«
Для исправления вот эту строку:
if(GetPVarInt(playerid,"RobAtm" != 1)) return true;
Измени на эту:
if(GetPVarInt(playerid,"RobAtm") != 1) return true;
warning 202: number of arguments does not match definition
Тут компилятор жалуется на несовпадение аргументов, вероятнее всего функции RobAtm();
Посмотри операнды той функции и скорректируй.
Спасибо что помог с решением первой проблемы!
0
#8
Отправлено 20 августа 2017 — 21:34
-
- Знаток
-
Mr_Frikan (20 августа 2017 — 21:33) писал:
Спасибо что помог с решением первой проблемы!
Скинь функцию RobAtm, тогда и со второй поможем.
0
#9
Отправлено 20 августа 2017 — 21:38
-
- Новичок
-
Const (20 августа 2017 — 21:34) писал:
Скинь функцию RobAtm, тогда и со второй поможем.
Если не ошибась, то ты про это. Если нет, напиши что именно
RobAtm(playerid)
{
SendClientMessage(playerid, COLOR_RED, «Вы грабите банкомат! У вас повышен уровень розыска!»);
SetPlayerWantedLevel(playerid, 4);
pInfo[playerid][pWanted] = 4;
TogglePlayerControllable(playerid,1);
switch(random(16))
{
case 0: return GivePlayerMoney(playerid,100);
case 1: return GivePlayerMoney(playerid,300);
case 2: return GivePlayerMoney(playerid,500);
case 3: return GivePlayerMoney(playerid,700);
case 4: return GivePlayerMoney(playerid,900);
case 5: return GivePlayerMoney(playerid,1100);
case 6: return GivePlayerMoney(playerid,1300);
case 7: return GivePlayerMoney(playerid,1500);
case 8: return GivePlayerMoney(playerid,1700);
case 9: return GivePlayerMoney(playerid,1900);
case 10: return GivePlayerMoney(playerid,2100);
case 11: return GivePlayerMoney(playerid,2300);
case 12: return GivePlayerMoney(playerid,2500);
case 13: return GivePlayerMoney(playerid,2700);
case 14: return GivePlayerMoney(playerid,2900);
case 15: return GivePlayerMoney(playerid,3100);
}
return 1;
}
0
#10
Отправлено 20 августа 2017 — 21:52
-
- Знаток
-
Да, про это. Как видишь у данной функции есть параметр: playerid. Но при вызове функции ты его не указываешь, поэтому предупреждение и выскакивает.
warning 202: number of arguments does not match definition
Для исправления эту строку:
if(GetPVarInt(playerid,"RobAtm") > gettime()) RobAtm();
Измени на эту:
if(GetPVarInt(playerid,"RobAtm") > gettime()) RobAtm(playerid);
0
@Bennett228, некоторые компиляторы недовольны, когда в тернарнике нет скобок — попробуйте добавить. И обратите внимание: Вы пытаетесь в тексте вывести 4 значения переменных, но по факту указываете лишь три переменных для вывода (имя, пол и возраст выводите, а уровень — нет).
format(tempstring, sizeof(tempstring), "Имя: [%s]tttnПол: [%s]tttnВозвраст: [%d лет]tttnУровень: [%d lvl]tt", player_info[playerid][name], (player_info[playerid][gender] == 1 ? ("Мужской") : ("Женский")), player_info[playerid][age] );
На чтение 2 мин. Просмотров 121 Опубликовано 15.12.2019
Самые известные баги стандартного компилятора «Pawno» и их исправление.
return «Some string»;
Проблема
Возвращая строки напрямую компилятор падает ( краш ).
Решение
Создайте для вашей строки массив, далее возвратите её ( не рекомендуется возвращать большие строки ).
static const
some_text[] = «Some String»;
string = (a == 5) ? «это пять» : «это не пять»;
Проблема
Строки конкатенируются (объединяются, соединяются) компилятором в одну, например это будет скомпилировано в одну строку «Hello World»:
string = «Hello» » » «World»;
Однако компилятор на засчитывает «:» как часть тернарного оператора и компилятор засчитывает это за ошибку скриптера. Обычно в таких случаях ( а обычно это так и есть ) появляется вот такая ошибка:
errors.pwn(11) : error 001: expected token: «-string end-«, but found «-identifier-»
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
Решение
Чтобы это исправить, просто заключите строки в круглые скобки, хочу заметить, что на работоспособность кода это никак не влияет.
string = (a == 5) ? («это пять») : («это не пять»);
new
gGlobalVariable = SomeFunction();
Проблема
Вызывая функцию для инициализации глобальной переменной компилятор падает ( краш ).
Решение
Вызовите функцию для инициализации переменной в «OnGameModeInit», «OnFilterScriptInit», или «main»:
public OnGameModeInit()
<
gGlobalVariable = SomeFunction();
// некоторый код
>
Проблема
Максимальная длина строки в компиляторе 512 символов ( считая с завершающим символом ‘’ ).
Решение
Сократить текст со строкой. Обычно люди делают это так:
format(str, sizeof(str),
«Очень длинная строка»,
other,
parameters);
Это разделяет вызов функции на 4 строки, делая её короче. Однако это решение далеко не хорошее. Даже иногда может откуда не возьмись возникнуть падения компилятора ( краш ).
stock SomeFunction()
<
#if defined main
gVar = (gVar ? 0 : 1);
#endif
main()
<
return SomeFunction() ? 0 : 1;
>
Проблема
Данный код будет генерироваться следующим образом: Сначала сгенерируется код в функции ( SomeFunction ), далее сгенерируется код в main (изначально компилятор «не знает», что «main» инициализируется позже). В результате, по неизвестной причине, любые другие тернарные операторы в вашем скрипте неверно сгенерируются и это приведёт к падению компилятора ( краш ).
Решение
Не используйте тернарный оператор для проверки на существование функции если функция ещё не определена или будет определена позже.
Автор урока: Y_Less
Перевод и дополнение: Londlem (http://pro-pawn.ru/member.php?2057-Londlem)
Оригинал: http://forum.sa-mp.com/showthread.php?t=355877 (http://forum.sa-mp.com/showthread.php?t=355877)
Специально для: Pro-Pawn.Ru (http://pro-pawn.ru)
Копирование данной статьи без разрешения автора запрещено!
Posts: 518
Threads: 63
Joined: Jun 2010
Reputation:
0
Код:
C:UsersOwnerDesktopPawnopawnoincluderandom.inc(24) : error 001: expected token: "-string end-", but found "-identifier-" C:UsersOwnerDesktopPawnopawnoincluderandom.inc(29) : error 010: invalid function or declaration
Line 29:
pawn Код:
enum Z_Info
{
Float:z_minx,
Float:z_miny,
Float:z_maxx,
Float:z_maxy,
z_team,
z_id
}
Line 24:
pawn Код:
if(pickupid == pilot)
{
PlayerPlaySound(playerid, 1186, 0.0, 0.0, 0.0);
SetPlayerSkin(playerid, 61);
GameTextForPlayer(playerid, "~u~~g~]~r~Found ~b~Hidden ~w~Skin~g~]~u~", 5000, 6);
}
Please help, I compiled one minute and it worked, i then closed, and opened back up again and these errors come up.
Posts: 4,878
Threads: 85
Joined: Jun 2007
Reputation:
0
Quote:
expected token: «-string end-«, but found «-identifier-«
This means there is a unclosed string (a missing «) in the line before 24, because the compiler found -identifier- instead of the closing «, identifier is the ‘new’.
The other error probably comes with the first one, because the unclosed string mixes up the following code.
If you dont see a problem in line 23, post it here.
Posts: 230
Threads: 5
Joined: Nov 2010
Reputation:
0
Posts: 518
Threads: 63
Joined: Jun 2010
Reputation:
0
the line before 24 is
HELP ME PLEASE!
Posts: 967
Threads: 99
Joined: Oct 2010
Reputation:
0
Quote:
Originally Posted by ToPhrESH
The first error happens when you make a new variable, while this one is on a define. Look that:
pawn Код:
C:Documents and SettingsF e L i P eDesktopSAMP SERVER 0.3Cfilterscriptscarsys.pwn(24) : error 001: expected token: "-string end-", but found "-identifier-"
Line 24:
Means you have on a define, the variable «pilot»
Posts: 4,878
Threads: 85
Joined: Jun 2007
Reputation:
0
Quote:
Originally Posted by ToPhrESH
Hm, strange problem. I have no other ideas atm, except it might be a define problem like blackwave said.
#define money «abc»
or something.
Posts: 518
Threads: 63
Joined: Jun 2010
Reputation:
0
Quote:
Originally Posted by blackwave
The first error happens when you make a new variable, while this one is on a define. Look that:
pawn Код:
C:Documents and SettingsF e L i P eDesktopSAMP SERVER 0.3Cfilterscriptscarsys.pwn(24) : error 001: expected token: "-string end-", but found "-identifier-"
Line 24:
Means you have on a define, the variable «pilot»
Nope. Checked all the defines… Still need help -.-
Posts: 967
Threads: 99
Joined: Oct 2010
Reputation:
0
Quote:
Originally Posted by ToPhrESH
Nope. Checked all the defines… Still need help -.-
Well, that impossible lol. Look for all «pilot» variable. Also, should be there:
pawn Код:
pilot = CreatePickup(model,type,x,y,z); //
Posts: 518
Threads: 63
Joined: Jun 2010
Reputation:
0
I’m willing to bet it’s impossible.
Here is all pilot.
pawn Код:
if(pickupid == pilot)
{
PlayerPlaySound(playerid, 1186, 0.0, 0.0, 0.0);
SetPlayerSkin(playerid, 61);
GameTextForPlayer(playerid, "~u~~g~]~r~Found ~b~Hidden ~w~Skin~g~]~u~", 5000, 6);
}
pawn Код:
pilot = CreatePickup(1275, 23, 1954.17736816,-2188.46069336,13.24627781, -1);
I even used, EDIT >> Find and typed in the search box pilot. Then three results came up when I search and pressed F3 to find next. They are the ones above.
Posts: 967
Threads: 99
Joined: Oct 2010
Reputation:
0
but did you check at your script? it’s on the INC random.inc. The single things I could say were these one, since other FS/GM doesn’t affect.