Сайт восстановлен из веб архива. Сейчас он доступен только для чтения, скачивание материалов также недоступно. Если у вас до сих пор есть какие-то вопросы по разработке серверов CRMP, вы можете перейти на актуальный портал: https://pawno-rus.com

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

Уважаемый гость, если у Вас возникли проблемы с регистрацией, просьба обратиться в тех.поддержку или на почту admin@pawno-crmp.ru

Для полного доступа ко всем функциям форума, Вам необходимо зарегистрироваться и авторизоваться.

Фотография
Урок

Всё о stock

- - - - - crmp criminal russia форум crmp всё для crmp pawn pawno урок crmp

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1
offline   Dmitriy_Orell

Dmitriy_Orell
  • 669
    • Сообщений: 922
    • Регистрация: 12.04.15

Определение Stock:

Stock - Маркер компилятора, указывающий компилятору на исключение кода функции из конечного amx файла, если функция не используется в коде скрипта.

 

Иными словами код функции или переменные, созданные с использованием маркера "stock", не будут включены в скомпилированную версию мода, если они не будут использованы в моде.
Если же создать функцию/переменную с использованием других маркеров, компилятор включит их в финальную версию, сигнализирует о их бесполезности и AMX машина (сервер) выделит для них память

Способы применения Stock:

1. Переменные:

 

 

Переменные

new

 

Целочисленный тип

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Вещественный тип

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Строка

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Одномерный массив

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Двумерный массив

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

stock

 

Целочисленный тип

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Вещественный тип

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Строка

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Одномерный массив

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Двумерный массив

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 

 

Использование переменных в stock точно такое же, как и использование переменных в new. В чём же различие, спросите Вы?

А различие именно в том, что stock не регистрируется в памяти сервера. То есть, если переменная объявлена через stock, но в коде она нигде не используется, компилятор автоматически удалит её при компиляции (имеется ввиду то, что в .amx варианте вашего кода этой переменной не будет). Следовательно лишней памяти сервер не будет выделять для этой переменной. Данное правило распространяется и на функции, так что запоминаем сразу (ниже упоминаний об этом не будет).
Но стоит помнить, что Вы никак не узнаете, используется переменная или нет, без ручного поиска кода, в котором используется эта переменная. Ибо, в случае с stock, при компилировании данная ошибка отображаться не будет:

 

warning 204: symbol is assigned a value that is never used: "%s

 

2. Функции:

 

С помощью stock Вы можете единственный раз написать определённый код и после вызывать его всего лишь написав код вызова stock. Но и не только. С помощью stock Вы можете сильно облегчить свою жизнь при написании различных сложных функций :) И ниже я попробую привести несколько примеров кода для того, чтобы Вы поняли о чём я говорю.

 

 

Создание stock:
Новый stock создаётся вне других функций (public/stock). То есть, точно так же, как и public, но без forward.

Пример создания stock:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Где:
StockName - название нашего stock
arguments - название аргументов, в которые будет помещена информация для обработки. Названия могут быть любыми, как и в случае с переменными. Про ограничение на количество этих аргументов в одном stock мне не известно. Если Вы об это что-то знаете, просьба отписаться с предоставлением каких-либо доказательств. Но уж точно не менее 8 аргументов использовать можно.

 

Пример использования stock:

 

 

Пример 1 (помещение определённого кода и последующее его использование с помощью stock)

Допустим, у нас есть диалог, который мы используем в нескольких участках кода (одинаковый). Чтобы каждый раз не писать его, мы можем создать stock с ним

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Примечание: Хоть для отображения диалога требуется аргумент "playerid", в stock мы указали имя аргумента "id". Поэтому в ShowPlayerDialog мы должны указать именно "id", а уже при вызове stock мы присвоим значение аргументу "id" значение аргумента "playerid".
Обратите внимание, что "id", при создании stock, я написал лишь для того, чтобы Вы поняли, что имя аргумента может быть любое. Вы можете сразу написать "playerid" и в ShowPlayerDialog использовать "playerid". А можете написать "Deimos_noob" и так же использовать в диалоге уже "Deimos_noob". Главное не забывайте менять название аргумента в нативных функциях (кликабельно) внутри stock на такое, какое Вы указали при создании stock (примером является "id" в создании stock и "playerid" в ShowPlayerDialog). Но менять название нужно именно в тех аргументах, значение которых Вы будете "доставлять" в код, находящийся в stock, при вызове этого stock. В этом примере это был "palyerid" и ниже Вы это увидите

 

Ну и создадим команду для отображения этого диалога

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Ну и при коннекте игрока вызовем диалог

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 

 

Пример 2 (вывод целых чисел с помощью stock)

А теперь попробуем создать команду для передачи денег от одного игрока к другому с помощью stock. Сначала создадим stock с тремя аргументами, в которые запишем ID обоих игроков и сумму передачи денег

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

И теперь создадим команду, в которой и присвоим нужные значения для аргументов stock
Код, требуемый для правильной работы strtok

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

"playerid" хранит значение ID игрока, который ввёл команду и передаст это значение аргументу "player1" из нашего stock
"giveplayerid" имеет значение ID игрока, которому надо передать деньги и передаст это значение аргументу "player2" из нашего stock
"pmoney" имеет значение суммы денег для передачи и передаст это значение аргументу "money" из нашего stock
Если кто-то не понял то, как я определил это всё, объясню по другому. Ниже будет предоставлен сам stock (таким, каким мы его создали) и способ вызова этого stock. Одинаковым цветом я выделю те аргументы, значения которых передаются от вызова stock к самому stock

stock PlayerMoneyToPlayer(player1, player2, money)
PlayerMoneyToPlayer(playerid, giveplayerid, pmoney);

То есть, аргументы отделяют друг от друга запятыми. Следовательно, при вызове stock, нам нужно расположить аргументы с данными в таком порядке, чтобы нужные данные присвоились нужному аргументу в stock

 

 

Пример 3 (вывод текста с помощью stock)

В данном примере я покажу вам как передать определённый текст с помощью stock на примере команды личных сообщений. Данный stock будет содержать уже аж 5 аргументов, два из которых будут содержать ники игроков, два будут содержать ID и один будет содержать текст. Да, с помощью strok можно и такое

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Ну и теперь сама команда

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Код, требуемый для правильной работы strtok

 

Этот код нужно вставлять в самое начало паблика OnPlayerCommandText, если его нет. Без него функция srtok работать не будет

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 

Типы данных для аргументов:

 

1. Вещественный (дробное число)

 

Пример

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

"Float:arguments"

 

2. Логический (bool. То есть true/false)

 

Пример

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

"bool:arguments"

 

3. Целочисленный (целые числа)

 

Пример

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

"arguments"

 

4. Строковый (символы, то бишь текст)

 

Пример

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

"arguments[]"

 

Примечание: Повторюсь, все типы данных работают так же, как и у переменных. Следовательно, использовать их нужно без аргументов ("Float","[]"."bool:"). Пример имеется в примере 3 (извиняюсь за тавтологию).

 

Прочие виды аргументов:

 

Ссылка (&):

Данный вид возвращает значения аргумента, получившиеся после выполнения кода функции. (аналогично "return")

 

Обозначение и пример

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

"&arguments"

 

Пример

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 

Автор: DeimoS


Сообщение отредактировал Dmitriy_Orell: 15 Июнь 2015 - 18:46

  • 7

#2
offline   denisz

denisz
  • 30
    • Сообщений: 293
    • Регистрация: 26.06.14

Хороший урок +


  • 0

#3
offline   LisyFOX

LisyFOX
  • 0
    • Сообщений: 25
    • Регистрация: 22.09.14

Хорошенько прочитал текст :). Ставлю +,отличный урок!


  • 0

#4
offline   SHOROOP

SHOROOP
  • 95
    • Сообщений: 57
    • Регистрация: 30.01.14

Ну зачем, если полезной инфы буквально пять копеек, разбавлять ее ненужной инфой про переменные, работа с которыми ничем не отличается от работы в public-функциях? Зато ничего не сказано о том, что stock-функция не будет видима вне исполняемого бинарника (в отличие от тех же public-функций, которые через CallRemoteFunction() можно вызвать из другого бинаря),

Имхо, такой материал нужно править и править.


  • 0



Темы с аналогичным тегами Урок, crmp, criminal russia, форум crmp, всё для crmp, pawn, pawno, урок crmp

Количество пользователей, читающих эту тему: 1

0 пользователей, 0 гостей, 0 анонимных


    Alexa (1)

Данную тему посетили 154 пользователей