Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Основы скриптинга (Часть 3) - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Основы скриптинга (Часть 3)
Оценка: ***** 1 Голосов

#1
Пользователь офлайн   Mike 

  • Администратор
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Приветствую, в этом уроке, я вас познакомлю с "Константами", "Макросами", и с функциями "Public" и "Stock".

Константы -
это неизменяемые переменные, они сильно упрощают работу скриптерам! С помощью констант, вы можете заменять трудно запоминающиеся коды, например коды цветов, в pawn они в формате: 0x0000AA
Примеры:

#define COLOR_GREY 0xAFAFAFAA // серый
#define COLOR_GREEN 0x33AA33AA // зеленый
#define COLOR_RED 0xAA3333AA // красный
#define COLOR_YELLOW 0xFFFF00AA // желтый
#define COLOR_WHITE 0xFFFFFFAA // белый
#define COLOR_ORANGE 0xFF8000AA // оранжевый
#define COLOR_BRIGHTRED 0xDB0000F6 // ярко красный


Их можно использовать например в сообщениях:
SendClientMessage(playerid,COLOR_RED,”Test”);

Так же, можете ставить ид диалога:
#define DIALOG_HELP 1

и вместо ид, пишим в диалоге так:
ShowPlayerDialog(playerid, DIALOG_HELP, DIALOG_STYLE_INPUT, "Dialog name", "text", "Кнопка1", "Кнопка2");


Макросы -
с помощью макроса мы упрощаем себе работу с функциями, например с таймером.
Примеры:

#define SetTimerx (%0,%1,%2) SetTimer(%0,%1*1000,%2)


Разница будет в том, что в таймерах, нужно указывать время в миллисекундах, а мы создали функцию, в которой можно будет писать время в секундах. Думаю довольно таки удобно).
Знак "%" и цифра стоящая рядом с ним, это параметр функции, пример:
SetTimer(funcname[], interval, repeating); // имеет 3 параметра, вот и мы прописываем %0, %1, %2 , отсчет в pawn всегда идет с 0


Public -
Это функции pawn, которые бывают стандартные и самописные, есть те, которые вызываются автоматически, и есть те, которые вы можете сами вызывать.
Примеры:

Вот пример автовызываемой функции:
public OnPlayerConnect(playerid) // автовызываемая функция которая вызывается когда игрок подключается к серверу
{
SendClientMessage(playeid, COLOR_WHITE, "Добро пожаловать!"); // будет показывать сообщение в чате игроку, который подключился
return 1;
}


Теперь пример самописной функиции(с параментром playerid):
forward Test(playerid); // объявляем функцию с названием Test

public Test(playerid) // пишем саму функцию
{
GivePlayerMoney(playerid, 500); // устанавливаем игроку значение денег 500
return 1;
}
// Теперь эту функцию можно вызвать, вызывается она следующим образом:
Test(playerid);


Можно еще сделать самописную функцию без параметров:
forward Test();

public Test()
{
return print("Сервер включен");
}
// вызывается вот так:
Test();


Кстати, функции так же могут быть "логическими" и "вещественными", и объявляются они почти так же как переменные:
forward Func(Float:test); // вещественный тип
forward Func(bool:test); // логический тип
forward Func(test); // обычный тип



Stock -
Многие объявляют самописные функции с помощью stock , она почти ничем не отличается от public, просто к ней не нужно приписывать forward.
Примеры:

stock Test()
{
return print("Test message");
}
// ну и вызываться будет так:
Test();



И вообще, многие рекомендуют использовать stock вместо public тогда, когда в вашей функции нету таймеров, так что stock в этом случаи будет более оптимизированей!
На этом закончу :)

Автор: Mike
Ин-ция частично взята с учебника!

Сообщение отредактировал Mike: 18 Январь 2012 - 13:30

12

Сказали спасибо 9:

#2
Пользователь онлайн   Romzes 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Молодец, хороший урок.
0

#3
Пользователь офлайн   DragoSFire 

  • Знаток
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
отлично как всегда, не знал про стоки, буду пользоваться ими, спасибо!!!
0

#4
Пользователь офлайн   Rock & Roll 

  • ДИПЛОМИРОВАННЫЙ ИНЖЕНЕР
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Неплохо, но про Stock's пог и по подробнее. Например в них нельзя использовать таймер, но они быстрее пабликов. И нагрузка от стоков меньше
0

#5
Пользователь офлайн   No_NicK 

  • Прохожий
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Помогите плиз.
.....................................................................................................
stock test(playerid);
{
GivePlayerMoney(playerid, 2500);
return 1;
}
.....................................................................................................
public OnGameModeInit()
{
test(playerid);
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
.....................................................................................................
error 017: undefined symbol "test"

WTF ??
0

#6
Пользователь офлайн   Mike 

  • Администратор
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
No_NicK - в следующий раз код ставь в [ php ] [ / php ].
Нельзя ставить ее в загрузку мода. Тем более толку от этого 0, можно поставить в OnPlayerConnect / OnPlayerSpawn.
0

#7
Пользователь офлайн   No_NicK 

  • Прохожий
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Такая же ошибка
0

#8
Пользователь офлайн   Mike 

  • Администратор
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияNo_NicK (30 Июнь 2012 - 13:23) писал:

Такая же ошибка


При объявлении функции не нужно ставить ;
stock test(playerid)
{
GivePlayerMoney(playerid, 2500);
return 1;
}


0

#9
Пользователь офлайн   No_NicK 

  • Прохожий
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Не че не изменилось -_-
0

#10
Пользователь офлайн   TeMaKaZ 

  • Прохожий
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Спс большое, очень помогли
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей