по 1 и 2 пример:
class MySuperPuperClass
{
void MySuperPuperClass()
{
Print("[MySuperPuperClass] Class Created");
}
void MySuperPuperFunction()
{
Print("[MySuperPuperClass] YES YES YES, ITS WORKED!!!");
}
void `MySuperPuperClass()
{
Print("[MySuperPuperClass] Class Destroyed");
}
}
ref MySuperPuperClass My_UsedName_MyClass = new MySuperPuperClass();
создали мы класс. Создаем его, например, в scripts\3_Game
как видим по последней строке, мы его уже инициализировали и присвоили ему имя My_UsedName_MyClass
Соответственно в MissionServer своей, или любо другом скрипте выше уровня 3 Game вы можете его использзовать, например. так:
My_UsedName_MyClass.MySuperPuperFunction();
вот вам 1 и 2 вопрос, 2 в 1 так сказать. Иного варианта не нашел, и наврядли будет, т.к. при запуске игры/сервера он считывает сначала моды, потом родной scripts поуровнево, от 1 блока до 5 включительно, и то что объявлено в блоке 1 или 3 будет доступно, например, в блоке 4 или 5, но если объявить в блоке 5, то в блоке 3 эту функцию сервер не найдет. Т.е. такую уровневую инициализацию стоит понимать всем. кто пытается что-то свое сделать.
По поводу 3 вопроса - Cast - преобразование. Иными словами смена класса объекта. Т.е. в
EntityAI MyObject = "MyObject"; // значение переменной условно, не является допустимой, и отображает лишь то, что переменная заполнена какими-то данными
ItemBase MyObjectItem = ItemBase.Cast(MyObject);
был у нас объект типа 'EntityAI', стал тот же самый объект типа ItemBase. При этом сам объект как был, так и остался один и в том же месте. Эти манипуляции необходимы для обращения к функциям внутри разных классов, с самим предметом в игре и базе данных ничего не происходит при этом.
по 4 и 6 не подскажу точно.
по 5 - пример:
EntityAI itemInHands_player = player.GetHumanInventory().GetEntityInHands();
где player - не нулевой объект игрока типа PlayerBase. Если в переменную запишется значение, отличное от NULL, значит предмет в руках есть.