Получение имени одной функцией -
Crystal_Speed - 24.02.2012
Здравствуйте, сабж.
Вот что у меня получилось:
Код:
public GetPlName(playerid)
{
new playername[64];
GetPlayerName(playerid, playername, sizeof(playername));
return playername;
}
Ошибка:
Код:
new_serv.pwn(38) : error 090: public functions may not return arrays (symbol "GetPlName")
Строка 38 - return playername;
Re: Получение имени одной функцией -
jhonyxakep - 24.02.2012
Нельзя вернуть в return'e массив char. Что мешает передавать в функцию указатель на массив? хотя тогда теряется весь смысл этой функции.
Re: Получение имени одной функцией -
azen - 24.02.2012
[delete]
Re: Получение имени одной функцией -
Crystal_Speed - 24.02.2012
Я так и понял, а как тогда мне сделать такую функцию?
Re: Получение имени одной функцией -
OKStyle - 24.02.2012
Первый раз вижу, что компилятор ругается на возвращение string'а. Попробуй размер не 64, а MAX_PLAYER_NAME поставить... А что нельзя ретурнить массив - бред. Бета-тестеры сампа сами публиковали такой код.
Re: Получение имени одной функцией -
Stepashka - 24.02.2012
pawn Код:
GetPlName(playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
return playername;
}
это должна быть функция, а не колбек!
Re: Получение имени одной функцией -
xJester - 24.02.2012
public не может вернуть массив, а stock может.
Re: Получение имени одной функцией -
ZiGGi - 24.02.2012
Quote:
Originally Posted by OKStyle
Первый раз вижу, что компилятор ругается на возвращение string'а. Попробуй размер не 64, а MAX_PLAYER_NAME поставить... А что нельзя ретурнить массив - бред. Бета-тестеры сампа сами публиковали такой код.
|
В sa-mp 0.1b можно было, потом компилятор обновили(в 0.2) и стало нельзя
Re: Получение имени одной функцией -
dimonml - 24.02.2012
оффтоп: напомнило старый анекдот:
Quote:
Звонок в компьютерную контору:
- С моим компьютером проблемы, он не включается...
- Как не включается?
- Да пишет все время: "Вставьте дискету, вставьте дискету..."
- А вы вставляли?
- Нет... Как-то не догадался.
|
Quote:
Originally Posted by Crystal_Speed
Ошибка:
Код:
new_serv.pwn(38) : error 090: public functions may not return arrays (symbol "GetPlName")
|
О описании ошибки написано,
public функции не могут возвращать массивы (= строки в павн). Все, не больше не меньше. А тут начинается, раньше можно было, как-то странно и так далее

Ведь компилятор явно пишет, что либо не возвращай строку, либо не объявляй функцию public.
Re: Получение имени одной функцией -
ZiGGi - 24.02.2012
Quote:
Originally Posted by dimonml
А тут начинается, раньше можно было, как-то странно и так далее 
Ведь компилятор явно пишет, что либо не возвращай строку, либо не объявляй функцию public.
|
В старой версии компилятора, public функции могли возвращать массивы. Поэтому окстайл видел подобный код у бета тестеров
Re: Получение имени одной функцией -
jhonyxakep - 25.02.2012
Quote:
public не может вернуть массив, а stock может.
|
Тогда я для себя тоже нового узнал.
А теперь викторина:
Почему нет функции GetPlayerName, которая возвращает массив?
Re: Получение имени одной функцией -
xJester - 25.02.2012
jhonyxakep, а зачем она нужна? разработчики подумали о гибкости языка, напиши свою функцию. В разных случаях нам нужно вернуть разные длины массивов, иногда это неудобно. (20 или 24 или 18 мб вообще 12)
Re: Получение имени одной функцией -
jhonyxakep - 25.02.2012
Quote:
В разных случаях нам нужно вернуть разные длины массивов, иногда это неудобно. (20 или 24 или 18 мб вообще 12)
|
Тогда почему все-еще не ввели отдельные типы для строковых значений?? Неужели беспомощность разработчиков?
Re: Получение имени одной функцией -
xJester - 25.02.2012
jhonyxakep, зачем? и так хорошо. В
С ведь тоже нету отдельного типа строки, там тоже массивы символов (:
Re: Получение имени одной функцией -
dimonml - 25.02.2012
pawn, если я правильно понял сайт разработчиков (языка): это язык для встраиваемых систем, а у него могут быть совсем другие критерии оптимальности, полноты, эффективности языка, чем те, которые хочется видеть разработчикам игровых режимов хД (рантайм может работать в любом контроллере освещения - значит язык хороший)
Re: Получение имени одной функцией -
jhonyxakep - 25.02.2012
Quote:
В С ведь тоже нету отдельного типа строки, там тоже массивы символов (:
|
И по вашему больше никаких типов данных там нет?
Quote:
pawn, если я правильно понял сайт разработчиков (языка): это язык для встраиваемых систем, а у него могут быть совсем другие критерии оптимальности, полноты, эффективности языка, чем те, которые хочется видеть разработчикам игровых режимов хД (рантайм может работать в любом контроллере освещения - значит язык хороший)
|
Самп использует не более 30% возможностей Pawn, мало того они все еще компилируют самп с древней версией Pawn, в котором были ошибки памяти, да и возможностей поменьше.
Например Pawn умеет самостоятельно вызывать функции в DLL, без всяких плагинов... Ну вот почему этого нет в сампе?
А вообще обо всех упущениях можно посмотреть тут:
http://www.compuphase.com/pawn/pawnhistory.htm
Re: Получение имени одной функцией -
OKStyle - 25.02.2012
Тоже сегодня копался на том сайте, делал новую сборку программы... Но в дистрибутиве косячные инклюды, а после исправления - крэшит самп после запуска скомпилированного на этих инклюдах скрипта.
Re: Получение имени одной функцией -
jhonyxakep - 25.02.2012
Quote:
Но в дистрибутиве косячные инклюды
|
Эт как так, в компиляторе свои-же инклюды косячные?
Quote:
а после исправления - крэшит самп после запуска скомпилированного на этих инклюдах скрипта.
|
Вы это еще и в самп решили запихнуть? печально...
На том сайте ничего самповского нет. На нем есть тот самый Pawn(он же SMALL), который использует самп (и некоторые другие проекты). Конкретно я упомянул, что в сампе встроена слишком старая версия языка, которая уже давно не актуальна, мало того имеет в себе кучу ошибок.
Re: Получение имени одной функцией -
OKStyle - 26.02.2012
Quote:
Originally Posted by jhonyxakep
Эт как так, в компиляторе свои-же инклюды косячные?.
|
Стоит посмотреть код, как становится всё видно. В некоторых местах не хватает знака
;.
Quote:
Originally Posted by jhonyxakep
Вы это еще и в самп решили запихнуть? печально...
|
Печально то, что Вы не знаете, о чём говорите. В сампе те же самые инклюды (без приставки
a_ которые), только без некоторых новых функций, которые, как я понимаю, появились в новой версии языка.
Re: Получение имени одной функцией -
dimonml - 26.02.2012
Quote:
Originally Posted by OKStyle
Стоит посмотреть код, как становится всё видно. В некоторых местах не хватает знака ;.
|
Стоит посмотреть спецификацию языка, где написано, что
; не является обязательным. А если посмотреть с какими параметрами по умолчанию всеми любимый pawno, запускает компилятор
Код:
pawncc -;+ -(+ <путь_к_pwn>
И изучить справку к компилятору, которую тот выдает будучи запущенным без аргументов, то становиться понятно, с какой радости в сампе стала точка с запятой обязательной (и круглые скобки при вызове функций тоже)
Quote:
Originally Posted by OKStyle
Печально то, что Вы не знаете, о чём говорите. В сампе те же самые инклюды (без приставки a_ которые), только без некоторых новых функций, которые, как я понимаю, появились в новой версии языка.
|
Похоже, что он знает о чем говорит. Если почитать pdf о встраивании pawn (в которых и описаны функции, о которых ты говоришь), то станет понятно, что инклюды без соответствующей поддержки со стороны рантайм-машины pawn (самп сервера в нашем случае) ничего дать не могут. Те инклюды лишь говорят компилятору, о том, что у павн машины есть такие-то функции с такими прототипами, но не более того.