Видеоуроки по Sourcepawn

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
Disclaimer
Данное видео предназначено для лиц не имеющих опыта в программировании.
Оно служит для своего рода ознакомлением.


http://www.youtube.com/watch?v=I7hRhnytNY8
Выпуск №1

Описание: Первый выпуск урока по Sourcepawn скриптинг для Sourcemod,
на новом синтаксисе. В данном видеоуроке рассмотрена установка среды скриптинга,
немного затрагивая типы переменных, классы, KeyValues формат данных.

Следующий выпуск:
Обзор основных событий, смерть игрока, появление игрока, заход на сервер, выход с сервера.
Функция написания в чат.
  1. Обзор событий.
  2. Написание Helloworld.

После второго выпуска, планирую уйти в условия, и массивы.

Решил делать выпуски с самого низа, от типов данных, и до сложных задач.
 

Napas

Участник
Сообщения
832
Реакции
667
Буду смотреть, может скриптингом так и займусь )
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #3
Потерял "самый главный" тип void. Новички будут спрашивать.
char это символ, а строка это уже массив символов.
У меню теперь свой класс Menu, а не хандл.
Не забывай про Function еще.
TopMenu
ArrayStack
StringMap (бывший trie)
Event
Regex и прочее.

PHP:
KeyValues kv = CreateKeyValues
Юзай конструктор:
PHP:
KeyValues kv = new KeyValues("name")

И деструктором или оператором delete.

OnPluginStart -> void, не теряй типы.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Очень быстро говоришь, бывает местами, очень тихо и не понятно, как будто волнуешься.
 

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
Ну я ж написал основные)

Да забыл я про Menu, void. косяк
Потом всё равно для каждого класса нужно по выпуску делать.

Как-то мне сказал человек с большим опытом в программировании "пиши так как знаешь - главное чтобы работало, и если нужно будет делать оптимизацию - делай, но не изначально".

Очень быстро говоришь, бывает местами, очень тихо и не понятно, как будто волнуешься.
Я пытался выделять основные слова интонацией и отрезать их промежутками.
Видимо не очень вышло. И микрофон хреновый, я обработку делал... на удаление шума.

Я пытаюсь... :dntknw:
 

ThreshHNS

Участник
Сообщения
248
Реакции
87
neatek3, спасибо,давно ждал видео такого рода!
 

DarklSide

Участник
Сообщения
931
Реакции
468
Первым делом, что нужно добавить после всех инклудов:
PHP:
#pragma newdecls required
Если утерян - список поддержки нового ситаксиса, Find in SM source code:
PHP:
// Transitional
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
К автору видео. Эти замечания - критика и желание помочь разобраться в мелочах, раз уж есть желание делать обучающие видео. Если обучать, то сразу правильно, это нельзя сравнить с процессом написания плагина! Можно где-то опускать мелочи, но нельзя давать неправильную информацию.

Полностью отсутствует желание разбираться в важных деталях. Этот момент вызвал у меня глубочайшее сожаление, я уж надеялся, что наконец-то человек разобрался и сделал хоть вводное видео без грубейших ошибок, но нет...

Начинается ляп с самой фразы "классы для работы с переменными". А какой класс тогда не работает с переменными?

Каким образом здесь Handle оказалось в середине списка и рассказывается о нем наравне со всеми? Handle есть родительский класс всех этих классов, и это указатель на объект. Он может использоваться как все эти перечисленные классы, а они не могут использоваться в качестве него. Более того, это необходимо знать.

Второй ляп на данном скриншоте - опять имена переменных. Почему все переменные MyClass, а KeyValues kv? Потом возникают лишние вопросы, да и люди привыкают называть переменные так, как им угодно, без всякой логики.

В третьих, из-за незнания так и вышло, что пропущено как минимум 11 классов, основанных на Handle. В вики сурсмода они есть:
1 BitBuffers
2 ConVars
3 DataPacks
4 Directories
5 Database Drivers
6 Database Queries
7 Databases
8 Events
9 Files
10 Forwards
11 KeyValues
12 Plugins
13 Plugin Iterators
14 Protobuf
15 SMC Parsers
16 Timers


Опять ляп - везде до этого комментарии были написаны без своего знака, тут без объяснений они откуда-то появились, еще и были выделены нотепадом. Между тем в начале скрина стоит текст без комментариев, что вызовет у людей соответствующие сомнения.
Вторая ошибка - а почему именно Format? Не FormatEx(), или более подходящий для такой цели strcopy()?

Всё, что связано с КВ, просто ни о чем. Вообще. Лучше ничего не говорить, т.к. для того, чтобы рассказать про него, нужно как минимум минут 10 - структура кв, что такое секция, что такое ключ, попутно рассказать про SMC Parser, который тоже связан с КВ. Сейчас же это вызовет у человека лишь непонимание и страх перед работой с кв, не более.

Во-первых, от старого синтаксиса CloseHandle(), когда как можно использовать ключевое слово delete.
Во-вторых, зачем GoBack()?

Так же говорится про шаблон плагина. Шаблон это то, что мы можем применить к решению большинства задач. Код, представленный в уроке - далеко не шаблон. Примером шаблона может являться такой код:
C-подобный:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

#define PLUGIN_VERSION "1.0.0.0"
public Plugin:myinfo =
{
	name 		= "",
	author 		= "AlexTheRegent",
	description 	= "",
	version 	= PLUGIN_VERSION,
	url 		= ""
}

public OnPluginStart() 
{
	
}

public OnMapStart() 
{
	
}

public OnConfigsExecuted() 
{
	
}
При написании плагина мне остается лишь вставить название плагина и всё. А в видео можно сказать "скомпилировать наш скрипт".

"... это предупреждения - ... плагин будет работать, но не совсем корректно".
C-подобный:
float myFloat = 5;
Будет warning 213: tag mismatch. В чем будет некорректность работы плагина?
Предупреждение - это лишь сообщение компилятора о том, что он не понимает, зачем это нужно (например, предупреждение 204 "переменная объявлена, но не используется" warning 204: symbol is assigned a value that is never used: "myFloat"), либо предупреждает, что данный код содержит потенциальную ошибку (то же 213 предупреждение - "несовпадение типов").

Это лишь те ошибки, которые сразу бросаются в глаза. Так что моё личное мнение - данное видео необходимо переделать, так как содержит в себе ошибки, в том числе и одну грубую - Handle, так как его нужно отнести к основным типам переменных, наравне с int, float, char.
 

максимка27

Участник
Сообщения
513
Реакции
213
Reiko1231, мне кажется, народ ждёт именно от тебя уроков по скриптингу, было бы приятно именно твои мануалы почитать и послушать))) чётко и ясно всё объясняешь. Так что просим)))
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
максимка27, +1
 

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
И это огрооооооооооооомнооооооопооооооооост...

Давай ещё видео))
Будет много видосов) :)
Постараюсь через день выпускать.

а почему именно Format? Не FormatEx(), или более подходящий для такой цели strcopy()?
прост.

Почему все переменные MyClass, а KeyValues kv
прост.

Всё, что связано с КВ, просто ни о чем.
Ясна собачая сорделька! Читай выше мой пост.
>> Потом всё равно для каждого класса нужно по выпуску делать.
что пропущено как минимум 11 классов. В вики сурсмода они есть
В курсе. Поэтому и написал "основных", которые я юзаю.

"классы для работы с переменными"
Какая-то наркомания... я что под кайфом был? :secret: думаю для работы с объектами...

Полностью отсутствует желание разбираться в важных деталях
Когда можешь писать плагины, и знаешь как и что использовать.. теория пфф... ну да подучить надо.

В чем будет некорректность работы плагина?
В том чтобы отучить людей от warning'ов, и их исправляли.
ненавижу когда там предупреждения...

neatek3, Затрагивая типы данных - неплохо разъяснить их фундаментальные понятия: размерность и диапазон значений
да, было бы не плохо... распиши мне их.

Reiko1231, мне кажется, народ ждёт именно от тебя уроков по скриптингу
Ой все, обидка. Я ушел, делайте уроки сами)

Handle, так как его нужно отнести к основным типам переменных, наравне с int, float, char.
Объясни мне для начала что такое handle ибо я вообще не рублю что это такое, я уже несколько лет это использую но нихрена не понимаю что это такое.
я знаю его особенности, особенности утечки памяти, как корректно закрывать и прочее, но не понимаю что это.
написано что handle какойто объект, больше чем указатели в c/c++, но ваще ни о чём не говорит.
https://wiki.alliedmods.net/Handles_(SourceMod_Scripting)

да и в прочем, я думаю можно уйти от Handle так как сейчас существуют классы
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #15
neatek3, Как я понимаю Handle - это указатель на нечто (область памяти), где хранится нужный объект.
Типа есть нечто (как СУБД для БД) например для меню, какой-то менеджер меню. Он хранит в себе имя меню, пункты, обратные вызовы и прочее. Вот хандл и есть ссылка на него. НО это только в моем понимании.
Если не прав - поправьте.
Могу помочь с уроками по kv, event, menu, db, нативами и форвардами.
 

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
PHP:
#pragma newdecls required

attachment.php


На самом деле ты скинул полезную вещь, и я желаю чтобы разработчики Sourcemod насильно включили этот параметр по дефалту, и можно было бы также выключать. Тогда бы у меня проблем с new syntax не было бы. черт, говорить по англ проще чем по русски. долбанный Transitional Syntax...
 

Вложения

  • 67.jpg
    67.jpg
    68.7 КБ · Просмотры: 86

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #17
neatek3, просто нужно csgocolors перепилить под новый синтаксис.. он же на инклюды тоже распространяется.
 

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
neatek3, просто нужно csgocolors перепилить под новый синтаксис.. он же на инклюды тоже распространяется.

PHP:
#pragma newdecls optional
в начало csgocolors, и не парюсь. csgocolors инклуд не трогает, а плагин - да. и эдрить у мя тут new declrs...

начиная с:
PHP:
public Plugin myinfo =

Мои частые ошибки:
PHP:
//public Function() {}
void Function() {}

//public Function(integer) {}
void Function(int integer) {}

//public Action CommandCallback(client, args) 
public Action CommandCallback(int client, int args) 

//public OnPluginStart() 
public void OnPluginStart()

//public Action TimerCallback(Handle timer, any:client)
public Action TimerCallback(Handle timer, any client)

//public Action TimerCallback(Handle:timer)
public Action TimerCallback(Handle timer)

//public Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
public Action Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)

//public MenuAction_EditorMenu(Menu menu, MenuAction action, int client, int item)

жуть! куча мелких исправлений.

Вывод:
PHP:
#pragma newdecls required
обязателен при создании новых плагинов.

Что делать с магазином... такого рода исправлений там наверно будет :wacko:

PHP:
public MenuAction_Handler(Menu menu, MenuAction action, int client, int item)
Не могу понять как исправить... -_-
https://sm.alliedmods.net/new-api/menus/MenuHandler

Ответ:
PHP:
public int MenuAction_Handler(Menu menu, MenuAction action, int client, int item)
писец.
 
Последнее редактирование:

DarklSide

Участник
Сообщения
931
Реакции
468
Первым делом, что нужно добавить после всех инклудов:
PHP:
#pragma newdecls required
начало csgocolors, и не парюсь. csgocolors инклуд не трогает, а плагин - да.

P.S.: т.к. они еще не парсированы (не обновлены, под Transitional Syntax).
 
Сверху Снизу