Ёжик, я могу дать все эти понятия, но то что ты поймешь что это я не уверен. Пока, мне нужно общее ваше представление. Как только ты поймешь что все то что я написал означает свою задачу я сочту выполненой. Но раз такой расклад то могу все объяснить:
Цитата(Ёжик @ Oct 7 2007, 16:03)

void main - это что?
NWScript использует 'функции', которые сообщают программе, что нужно делать. Некоторые функции уже написаны и нам остается только поставить их в скрипт. Тем не менее, когда мы пишем скрипт, мы, фактически, пишем свои собственные функции. Эта строка - своего рода 'установка' функции.
void - Это слово сообщает скрипту, какого рода 'ответ' выдаст функция.
Слово
main сообщает, что это основная часть скрипта. Мы можем написать множество функций в нашем скрипте, но 'main' - эта та часть скрипта, которая будет непосредственно выполняться. Между '(' и ')' как правило пишут входящие данные, необходимые скрипту для корректного исполнения. Наш скрипт не требует никаких входных данных, и это значит, что между скобками ничего не пишется. Всегда необходимо ставить '(' и ')', даже если нет никаких входящих данных.
Фигурные скобки необходимы, чтобы отделять блоки скрипта один от другого. В нашем случае это обозначает, что все то, что мы написали, является частью void main(). Каждая строка заканчивается знаком ';'.
Про интеджер и флоат мне опять писать или что? Что непонятно? Тебе непоянтно что такое целое число а что нет?
Так же, в скрипте все типы данных и объекты обычно представляются в начале скрипта например так:
Neverwinter Script Source
//:://////////////////////////////////////////////
//:: OnEnter [CUT_FIN_1] am_cut_final_1
//:: Copyright © 2006 WRG!
//:://////////////////////////////////////////////
/*
ФИНАЛЬНЫЙ РОЛИК ИСТОРИИ
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 23.03.2006
//:://////////////////////////////////////////////
#include "am_inc_cutscene"
#include "am_inc_common"
void main()
{
//------------------------------- СОЗДАНИЯ -------------------------------------
object oPC = GetFirstPC(); // Игрок
object oBoss = GetObjectByTag("AM_CUT1_BOSS"); // Главный
object oNpc1 = GetObjectByTag("AM_CUT1_NPC_01"); // НПС 1
object oNpc2 = GetObjectByTag("AM_CUT1_NPC_02"); // НПС 2
object oDog = GetObjectByTag("AM_CUT1_DOG"); // Собака
object oDeer = GetObjectByTag("AM_CUT1_DEER"); // Олень
object oOx = GetObjectByTag("AM_CUT1_OX_01"); // Бык (живой)
object oOxD = GetObjectByTag("AM_CUT1_OX_02"); // Бык (мертвый)
object oArea = GetArea(oBoss);
//-------------------------------- ОБЪЕКТЫ -------------------------------------
object oSound = GetObjectByTag("AM_CUT1_SOUND_WOLF"); // Звук воя волков
object oSound1 = GetObjectByTag("AM_CUT1_SOUND_WOLF1"); // Звук воя волков
object oFlame = GetObjectByTag("AM_CUT1_FLAME"); // Костер (потухший)
object oGate = GetObjectByTag("AM_D_EXT_HUNT_GATE"); // Ворота во двор
object oDoor = GetObjectByTag("AM_D_EXT_HUNT_H_IN"); // Дверь домика
//------------------------ ТОЧКИ ДВИЖЕНИЯ И КАМЕРЫ -----------------------------
object oWpCamPC1 = GetWaypointByTag("AM_WP_CUT1_CAM_PC_01"); // Точки Игрока
object oWpCamPC2 = GetWaypointByTag("AM_WP_CUT1_CAM_PC_02");
object oWpExit = GetWaypointByTag("AM_WP_CUT1_EXIT"); // Для ухода с карты
object oWpIn = GetWaypointByTag("AM_WP_CUT1_IN"); // Эмитация входа в дом
object oWpP1 = GetWaypointByTag("AM_WP_CUT1_POST_01"); // Точка НПС
//-------------------------- ВИЗУАЛЬНЫЕ ЭФФЕКТЫ --------------------------------
effect eCutInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
effect eCutPar = EffectCutsceneParalyze();
effect eGhost = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
effect eParalyz = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION); // Заставим застынуть
effect eFreeze = EffectVisualEffect(VFX_DUR_ICESKIN); // Заморозим
//-------------------------- Поврежедния ---------------------------------------------
int iMax = GetMaxHitPoints(oPC);
int iD = iMax-5;
В таком виде мы обычно представляем все объекты и данные с которыми будем работать в скрипте. В скрипте мы обращаемся к объекту, но мы должны четко дать понять какой именно объект нам нужен. Самый простой способ это указать
OBJECT_SELF. Это значит тот кто содержит или исполняет скрипт написаный вами будет взят в качестве объекта. К примеру, скрипт стоящий на НПС может взять object oNpc = OBJECT_SELF; Теперь вы заметили, что мы как то структурировали наши сокращения в описании объектов. Например, зачем нам постоянно писать одно и то же десятки раз типа: GetObjectByTag("AM_CUT1_BOSS") - тут мы говорим скрипту взять объект с тегом
AM_CUT1_BOSS. Скрипт ищет в модуле у кого такой тег и берет его. Каждый раз это долго и неправильно. Мы попросту в начале найдем этого НПС и объявим его сократив до минимума oBoss. Вся строка будет выглядеть так:
Neverwinter Script Source
object oBoss = GetObjectByTag("AM_CUT1_BOSS"); // Главный
в ней мы говорим, что наш object oBoss ЭТО ОБЪЕКТ это не число и не эффект. Соотвественно для удобства мы сократили и поставили впереди буковку "o" что бы мы знали, что это ОБЪЕКТ. У интеджер мы обычно ставим буковку "i" и встретив в большом скрипте такие данные oPC, iMax, fDel мы уже понимаем что первый это ОБЪЕКТ так как у него буковка о, второй это число так как у него буковка i, третий это флоат нецелое число так как перед ним буковка f. Но все это ДЛЯ УДОБСТВА и никак не влияеет на работу скриптов. Это ПРАВИЛЬНЫЙ И ХОРОШИЙ ТОН.
Внизу простой пример как все правильно описав и сократив мы накладываем на OBJECT_SELF еффект.
Neverwinter Script Source
void main()
{
object oSelf = OBJECT_SELF;
int iMax = GetMaxHitPoints(oSelf);
int iD = iMax-5;
effect eDamage = EffectDamage(iD);
AssignCommand(oSelf, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,
Self));
}
Neverwinter Script Source
void main()
{
int iMax = GetMaxHitPoints(OBJECT_SELF);
int iD = iMax-5;
effect eDamage = EffectDamage(iD);
AssignCommand(OBJECT_SELF, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,OBJECT_SELF));
}
Neverwinter Script Source
void main()
{
int iD = GetMaxHitPoints(OBJECT_SELF)-5;
effect eDamage = EffectDamage(iD);
AssignCommand(OBJECT_SELF, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,OBJECT_SELF));
}
Neverwinter Script Source
void main()
{
effect eDamage = EffectDamage(GetMaxHitPoints(OBJECT_SELF)-5);
AssignCommand(OBJECT_SELF, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,OBJECT_SELF));
}
Neverwinter Script Source
void main()
{
AssignCommand(OBJECT_SELF, ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDa
age(GetMaxHitPoints(OBJECT_SELF)-5,OBJECT_SELF)));
}
Сравните первый код и этот последний. Они идентичны, но в каждом последующем я убрал описание по одному объекту или эффекту. В результате кусок кода разобрать на порядок труднее. И это ОДНА СТРОКА! А что будет если у вас тысяча строк?
Добавлено через 2 минуты 49 секунд
Я не прошу понимать что делает этот скрипт мне важно что бы вы на каждом следующем примере видели какое изменение произошло.
Добавлено через 11 минуту 31 секунду
п.с. При переносе форум съедает одну букву в строке NSS кода. Не пинать мну, не моя вина. Нео обещал найти причину.