Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )


Тобур
Отправлено: Jun 25 2006, 10:28


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Расскажу как сделано на Сиале. За основу взята лутовая система NESS. Суть ее в том, что лутовые таблицы находятся в магазине (merchant) на специальной системной локации. Для специфичных мобов (боссов), делается спец таблица, которая располагается на той локе, где находится моб. При первом обращении к таблице на модуль сохраняется переменная, в которую помещается ссылка на таблицу (чтобы каждый раз не искать по модулю), перибираются все предметы в магазине и на объект магазина вешаются переменные с порядковым номером вещи и ее ресрефом. Таким образом, в дальнейшем, работа идет только с переменными, что значительно ускоряет работу лутовой системы при большом разнообразии вещей и легкостью изменения содеожания лутовых таблиц
  Форум: Шарды рунета · Просмотр сообщения: #85829 · Ответов: 16 · Просмотров: 20,745

Тобур
Отправлено: Feb 26 2005, 18:05


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Круто! Правда у меня сомнения по поводу возможных багов и использования модов в следующих версиях тулсета, но сделана действительно нужная вещь
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #28328 · Ответов: 88 · Просмотров: 158,145

Тобур
Отправлено: Feb 26 2005, 18:00


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Я тоже присоединяюсь к этому воззванию :) Особенно по предложениям
1. SetName(oObj).
2. Set/GetDescription(oObj)
35. Сохранение локальных переменных при старте нового модуля. Или сделайте специальные локальные переменные, ограниченное число, для переноса из модуля в модуль.
71. Поддержку БД через ODBC или на прямую в самом сервере... mysql, postgres, access (хоть дополнительным модулем за деньги пусть продают)
От себя еще добавлю, что очень нужен эффект Time Stop действующий только на одну локацию, функции, которые возвращают полную атаку (как в чар листе) и вообще, побольше функций, возвращающих и устанавливающих значения переменных в игре
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #28326 · Ответов: 46 · Просмотров: 58,979

Тобур
Отправлено: Feb 21 2005, 08:52


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (Лито @ Feb 20 2005, 10:13)
Как заставить моба нормально пользоватся хайдом? Есть ли какие нибудь скрипты?

Если вопрос про моба-шадоудансера, то самый простой путь, который мы с Ярлом нашли не требует написания никаких скриптов. Все что надо, это не давать мобу НИКАКИХ активных боевых фитов (т.е. кнок, дизарм и т.д.). В этом случае, стандартные скрипты очень здорово позволяют ШД прятаться во время боя.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #27507 · Ответов: 5109 · Просмотров: 854,598

Важно! Скрипты
Тобур
Отправлено: Jan 27 2005, 19:27


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (Лито @ Jan 27 2005, 17:55)
Как сделать так чтобы мешки с лутом исчезали через указанное время, например 250 секунд?
Есть плэйс мешка на открытия которого стоит срипт генерации лута, с этим понятно, есть скрипт на смерть моба при испольнении скрипта создается заданый мешок, пробовал такой вариант :
Neverwinter Script Source
void main()
{
string sTemplate = "low_plc_loot";
string sTag = GetTag(OBJECT_SELF);
location lLoc = GetLocation(OBJECT_SELF);

CreateObject(OBJECT_TYPE_PLACEABLE, sTemplate, lLoc, TRUE, sTag);

DestroyObject(OBJECT_SELF, 250.0);
}

Но мешок не дестроится, подскажите вариант лучше, три часа на это убил а результата не добился :xz:

Не уверен, но, по-моему объект не уничтожается потому, что назначаешь команду уничтожения исполнить объекту, который сам будет уничтожен (умерший моб должен уничтожить мешок).
К тому же у тебя просто ошибка в скрипте: DestroyObject(OBJECT_SELF, 250.0); должна уничтожить моба (если скрипт запускает моб).
Попробуй в скрипте вместо
DestroyObject(OBJECT_SELF, 250.0);
такую конструкцию:
object oBag = CreateObject(OBJECT_TYPE_PLACEABLE, sTemplate, lLoc, TRUE, sTag);
AssignCommand(GetModule(), DestroyObject(oBag , 250.0));
т.е. чтобы какой то другой объект уничтожал (в данном случае модуль)
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #24048 · Ответов: 3670 · Просмотров: 702,417

Важно! Скрипты
Тобур
Отправлено: Jan 26 2005, 20:03


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


#include "x2_inc_cutscene"
void CutSound(int nCutscene, object oSound);
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur);
void MultiJump(object oPC, string sWay);
void PlayMusic(int nCutscene, object oPC);
void SetShift(int nCutscene, object oPC, float fShift);

int nCutsceneNumber = 20;

void main()

{
object oPC = GetEnteringObject();
object oGlav = GetObjectByTag("PIVIGA");
object oWP1 = GetObjectByTag("WP_1");
object oWP3 = GetObjectByTag("WP_3");
object oWP4 = GetObjectByTag("WP_4");
object oWP5 = GetObjectByTag("WP_5");
object oWP6 = GetObjectByTag("WP_6");
object oWP7 = GetObjectByTag("WP_7");
object oSound = GetObjectByTag("cut20_summ_sfx");
//Effect Vizual Effect==========================================================
effect eZa1 = EffectVisualEffect(VFX_BEAM_BLACK);
effect eZa2 = EffectVisualEffect(VFX_BEAM_EVIL);
effect eZa3 = EffectVisualEffect(VFX_IMP_DEATH_WARD);
effect eZa4 = EffectVisualEffect(VFX_IMP_FEAR_S);
//Localnoe======================================================================
location lMes1=GetLocation(oWP1);
location lLoc2=GetLocation(oWP7);
location lMes3=GetLocation(oWP3);
location lMes4=GetLocation(oWP4);
location lMes5=GetLocation(oWP5);
//==============================================================================
if (!GetIsPC(oPC)||GetLocalInt(oPC,"Proverochoi tur!")==TRUE)
return;
{ // Первая ошибка
SetLocalInt(oPC,"Proverochoi tur",TRUE);
AssignCommand(oPC,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectDarkness(),oPC,20.0);
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa1,lMes1,3.0));
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa2,lLoc2,3.0));
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa3,lMes3,3.0));
DelayCommand(0.5,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eZa4,lMes4,3.0));
DelayCommand(2.0,AssignCommand(oGlav,JumpToLocation(lMes1)));
DelayCommand(2.0,AssignCommand(oGlav,ActionSpeakString("KO MHE MOI SLUGI")));
DelayCommand(1.0,AssignCommand(oGlav,ActionMoveToObject(oPC,FALSE,0.5)));
//Camera mode===================================================================
DelayCommand(1.5, DelayCommand(GetShift(oPC, TRUE), MyPentogramma(nCutsceneNumber, oPC, 482, 3.0)));
DelayCommand(1.5, FadeFromBlack(oPC));
CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 10.0, 50.0, CAMERA_TRANSITION_TYPE_SNAP);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 9.0, 40.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE);
CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 100.0, 12.0, 60.0, CAMERA_TRANSITION_TYPE_SLOW, FALSE);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Vso dla camera
object oCam1 = GetWaypointByTag("Camera1");
object oCam2 = GetWaypointByTag("Camera2");
object oCam3 = GetWaypointByTag("Camera3");
object oCam4 = GetWaypointByTag("Camera4");
object oCam5 = GetWaypointByTag("Camera5");
object oCam6 = GetWaypointByTag("Camera6");
//+++++++++++++++++++++++++++++CAMERA+++++++++++++++++++++++++++++++++++++++++++
CutPlayAnimation(1.5, oCam1, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(1.5, oCam2, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(0.5, oCam3, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(1.5, oCam4, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(0.5, oCam5, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
CutPlayAnimation(18.0, oCam6, ANIMATION_LOOPING_WORSHIP, 20.0, FALSE);
//Camera stroenie===============================================================
CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 182.0, 111.0, 56.0,
CAMERA_TRANSITION_TYPE_SLOW);
CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 5.0, 65.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_VERY_FAST);

CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 155.0, 45.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(15.6, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 10.0, 4.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(1.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(18.0, oPC, CAMERA_MODE_TOP_DOWN, 90.0, 40.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 210.0, 0.1, 80.0,
CAMERA_TRANSITION_TYPE_SNAP);

CutSetCamera(0.5, oPC, CAMERA_MODE_TOP_DOWN, 105.0, 4.0, 82.0,
CAMERA_TRANSITION_TYPE_SNAP);
}
//PENTAGRAMMA VOCRUG++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur)
{
if(CutGetActiveCutsceneForObject(oPC) == nCutscene)
{
object oPen1 = GetObjectByTag("Pen1");
object oPen2 = GetObjectByTag("Pen2");
object oPen3 = GetObjectByTag("Pen3");
object oPen4 = GetObjectByTag("Pen4");
object oPen5 = GetObjectByTag("Pen5");

int iBeam2 = 483;

//Rasstavlaem+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam, oPen1, BODY_NODE_CHEST, FALSE), oPen2, fDur);

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen2, BODY_NODE_CHEST, FALSE), oPen3, fDur);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen3, BODY_NODE_CHEST, FALSE), oPen4, fDur);

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen4, BODY_NODE_CHEST, FALSE), oPen5, fDur);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(iBeam2, oPen5, BODY_NODE_CHEST, FALSE), oPen1, fDur);
}
}

// Taime =======================================================================
void SetShift(int nCutscene, object oPC, float fShift) {
if(CutGetActiveCutsceneForObject(oPC) == nCutscene)
SetLocalFloat(GetArea(oPC), ".."fShift); // Вторая ошибка
}

void CutSound(int nCutscene, object oSound)
{
if(CutGetActiveCutsceneForObject(oSound) == nCutscene)
{
SoundObjectPlay(oSound);
}
//===============================================================================

}
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #23890 · Ответов: 3670 · Просмотров: 702,417

Тобур
Отправлено: Jan 25 2005, 21:53


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


0Х0 - это размер предмета - пришлось создать в файле baseitems.2da новый предмет-контейнер
В сингле использовать эту фишку я особого смысла не вижу, так в нем спокойно можно пользоваться стандартной базой данных

QUOTE
Я знаю, что 0х0 это размеры вещи. Просто не знал, что движок такие размеры позволяет. Эту вещь нельзя выделить, можно только скриптово обратиться, так?


Это, конечно, баг движка, но именно он позволяет сделать предмет, который нельзя выделить и использовать (только надо предупредить игрока, чтобы он очистил от предметов 4 ячейки в левом нижнем углу 1 страницы инвентаря, т.к. хотя размер нулевой, но 4 ячейки все таки используются и исли на этом месте лежат какие-то предметы, то доступ к ним может пропасть). Смысл в том, что технически игрок носит свой сейф с собой (чем достигается высокая надежность хранения вещей), но доступ к сейфу имеет только через специальное устройство (в виде плэйсэйбла в здании банка), к которому привязаны скрипты взаимодействия с контейнером. Если на шарде есть выпадение вещей после смерти (но обычно делается так, что плотовые вещи не выпадают), то наличие сейфа, в котором ироки могут хранить ценные неиспользуемые предметы, является очень ценной функцией для них.

Для сингла я бы рекомендовал использовать шкурку-контейнер, так как , по-моему , при восстановлении игры она не пропадает.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #23736 · Ответов: 88 · Просмотров: 158,145

Тобур
Отправлено: Jan 25 2005, 21:37


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (Lemegeton @ Nov 22 2004, 20:14)
что позволяет вызвать скрипт с именем ТЭГА ПРЕДМЕТА.

Система тэговых скриптов включена в стандартные скрипты НВН (смотрите стандартные скрипты x2_mod_def_load, x2_mod_def_unaqu, x2_mod_def_unequ, x2_mod_def_act, x2_mod_def_aqu, x2_mod_def_equ, а так же скрипт-пример x2_it_example.nss)

Касательно моего вклада в копилку идей: поделюсь с вами тем, как на Сиале реализован банк вещей.
Сразу скажу, что описанная ситуация работает только с сервер-ваултными персонажами.
Идея основана на баге одно функции:
void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction)
Дело в том, что эта функция, не смотря на ее название, работает не только с плэйсэйблами, но и с контейнерами (улавливаете мою мысль? :) )
сделав вызов с действием PLACEABLE_ACTION_USE вы можете для игрока открыть любой контейнер.
А теперь наступают трудности. Надо сделать так, чтобы контейнер не был доступен пользователю и чтобы он и предметы из него не воровались.
Заманчиво сделать контейнер-шкурку (это решает проблему доступа и воровства), но, к сожалению, все шкурки на игроке пропадают при заходе на шард.
Поэтому пришлось сделать контэйнер размером 0Х0 (т.е. по нему нельзя щелкнуть мышкой, чтобы открыть) и делать в скрипте использования контейнера вещи, помещенные в контейнер плотовыми (как и сам контейнер),чтобы их нельзя было своровать.
Способ конечно извратный, но у него есть огромное преимущество: он не использует БД и поэтому не нагружает сервер.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #23728 · Ответов: 88 · Просмотров: 158,145

Важно! Скрипты
Тобур
Отправлено: Jan 25 2005, 21:11


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (Csardas @ Jan 22 2005, 04:07)
Народ помогайте дайте скриптик, мне очень нужно чтобы НПК дерется с тобой и когда он будет присмерти начел разговор с РС помогите.

Я бы предложил такую схему:

1 НПС делается или через тулсет сразу Immortal или в скрипте спауна через функцию (Immortal - статус означает, что урон ему наносится, но никогда не понижается ниже 1)

2 в событии On Damage этого НПСя идет проверка, равны ли его текущие хит поинты 1 (или тому значению, при котором ты хочешь остановить бой) или нет
Если да, то останавливаешь бой и начинаешь диалог.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #23721 · Ответов: 3670 · Просмотров: 702,417

Важно! Скрипты
Тобур
Отправлено: Jan 25 2005, 21:01


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (Nokoll @ Jan 23 2005, 19:39)
Срочно нужна помощь я написал скрипт где много наворотов всяких но скрипт не доделан до конца потому что я не знаю что делать с этой проблемой
Neverwinter Script Source
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur)

; здесь не нужно, но почему эта проблема всегда вылезает?
Neverwinter Script Source
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur);

Поставлено.
Помогите коль кто может.
Маленькая просьба можно по подробнее.
ЗАРАНЕЕ СПАСИБО ВСЕМ!!!!!!!!!!!!

Честно говоря не понял вопроса, но если ты спрашиваешь почему в одном случае после функции надо ставить ; а в другом не надо, то ответ будет такой:
void MyPentogramma(int nCutscene, object oPC, int iBeam, float fDur); - это объявление функции (такое же объявление применимо к константам, переменным). Это объявление говорит компилятору, что такая функция существует.
Дело в том, что компилирование скрипта идет сверху вниз. Если бы ты не объявил эту функцию, то при попытке ее вызова из главного тела программы была бы выдана ошибка, т.к. компилятор еще этой функции не знает.

Можно обойтись без объявления функции, если ее описание (т.е. ее текст) поставить перед телом основной программы.

Объявление функций и переменных служит также для документирования программы, т.к. если выбрать название функции в теле программы , в окошке подсказки высвечивается ее заголовок и примечание (если оно есть) , предшествующее заголовку. Например, все стандартные константы и функции НВНа объявлены в стандартном скрипте nwscript.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #23720 · Ответов: 3670 · Просмотров: 702,417

Тобур
Отправлено: Dec 22 2004, 08:26


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Есть идея по поводу стимула для игроков других шардов посешать общую арену: награждать игрока хонор-поинтами, на которые они в своем мире могли бы в спец-магазинах или через диалоги покупать элитные вещи. Политику этих магазинов, естественно, определяла бы администрация каждого шарда самостоятельно.
  Форум: Шарды рунета · Просмотр сообщения: #19079 · Ответов: 243 · Просмотров: 83,699

Тобур
Отправлено: Dec 9 2004, 20:45


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE
Если очень нужно хранить - ... задавайте уникальные теги локациям (не проверял) и с ними работайте.


QUOTE
Вообще легче всего сохранять локу на какой нить плот-итем в инвентаре, который невозможно выкинуть и т.п.
Или же делать LocationToString а потом наоборот.


QUOTE
Да, если еще написать обратную функцию StringToLocation и следить за уникальностью тегов локаций в модуле - то достаточно просто и надежно получится.


Именно так и сделано на Сиале - так что способ проверенный :)
  Форум: Шарды рунета · Просмотр сообщения: #17862 · Ответов: 40 · Просмотров: 122,362

Важно! Скрипты
Тобур
Отправлено: Oct 27 2004, 19:28


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Изначально моя цель была найти карты, у которых совпадают тэги. Для этого мне надо было получить список тэгов всех карт в модуле - я его получил, хоть и извращенным способом. После этого достаточно отсортировать в экселе таблицу по полю тэга и пробежаться взглядом по ней, чтобы найти задвоенность (дубляж) тэга. Я нашел в 470 картах 4 дубляжа - это тот результат, который я и хотел получить :)
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #14627 · Ответов: 3670 · Просмотров: 702,417

Важно! Скрипты
Тобур
Отправлено: Oct 27 2004, 07:52


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Я извиняюсь за резкость. Я не правильно выразился и благодарен тем, кто откликнулся. Уважаю ваш сайт и форум за нейтральность по отношению к шардам и их разборкам и открытость по отношению к игрокам. Ваш форум - это своеобразная "нейтральная территория", накоторой могут общаться все коммьюнити НВН.
Решение я нашел такое: Я сохраняю в БД какую-то локацию, потом каким-то внешним редактором (в моем случае FoxPro) правлю DBF файл и соэдаю в нем 64000 записи с последовательно увеличивающимся индексом и названием переменной (В моем случае MAP1 , 2 и т.д.), в которой присутствует индекс. Затем в скрипте загрузки модуля вставляю следующий текст:

void CheckAreaTag()
{
object oMod = GetModule();
int iCur = GetLocalInt(oMod,"CurCount");
if (iCur < 64000)
{
WriteTimestampedLogEntry(" ~ Continue ~ "+IntToString(iCur));
int iBegin = iCur;
iCur = iCur +2000;
SetLocalInt(oMod,"CurCount",iCur);
object oArea;
object oTemp;
location lLoc;
string sVarName;
int i;
for (i = iBegin; i < iCur; i++)
{
sVarName = "MAP"+IntToString(i);
lLoc = GetCampaignLocation("TEST",sVarName);
oArea = GetAreaFromLocation(lLoc);
if (GetIsAreaNatural(oArea)!=AREA_INVALID)
WriteTimestampedLogEntry(sVarName + " id "+IntToString(i)+" ; "+"object "+ObjectToString(oArea)+" ; "+GetTag(oArea)+" ; "+GetName(oArea)+" ; "+GetResRef(oArea));
}
DelayCommand(2.0f, CheckAreaTag());

}
else
WriteTimestampedLogEntry(" ~ End ~ "+ IntToString(iCur));

}
void main()
{
WriteTimestampedLogEntry(" ~ Begin check area tag ~ ");
CheckAreaTag();
}

Получившийся текстовый лог-файл открываю в Exсel-e и сохраняю как таблицу (поля я специально разделяю знаком ; , так как Exсel понимает этот знак как разделитель. Дальше уже в Exсel-e можно сортировать , фильтровать и анализировать записи. Таким же образом можно получить сводную информацию обо всех объектах, находящихся на картах в модуле (не в палитре), например о НПС и плэйсэйблах
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #14578 · Ответов: 3670 · Просмотров: 702,417

Важно! Скрипты
Тобур
Отправлено: Oct 26 2004, 18:49


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (DBColl @ Oct 26 2004, 09:30)
Хех, так в чем проблема запоминать НЕ ТЭГ ЛОКИ, а ЕЕ ОБЪЕКТ?! Уникально. Независимо от тэга?.. Возвращение перса опять-таки делать не по тэгу локи, а по ее объекту...
<small>Добавлено в [mergetime]1098772792[/mergetime]</small>
К тому же, обрати внимание на функцию ObjectToString(object oObj); ;) :yes:

Потому что при добавлении новой карты все индексы перестраиваются и со сменой версии модуля игрок может оказаться или не там, где выходил или вообще в стартовой локации. ObjectToString ничего мне не дает - вот если бы была функция StringToObject - это бы все меняло :). Главный мой вопрос - как присвоить переменной типа Object какое то значение, не не пользуясь ссылкой.

QUOTE
QUOTE (Тобур @ Oct 26 2004, 04:41)

object oMod = GetModule();
int i = 1;
SetLocalObject(oMod,"CurMap",i);


Это мне вобще непонятно  Как это объекту можно присвоить числовое значение? 


Я же специально привел ссылку из лексикона - object содержит в себе натуральное число (иначе говоря просто номер объекта). Весь вопрос в том и состоит - как переменной типа object присвоить этот самый номер.

Еще раз повторю - нету в НВН ни функции типа GetNextObjectInArea (только InModule), ни константы OBJECT_TYPE_ для ареи, чтобы выделить из массы объектов именно карту.

Короче, я понял, что тут никто толкового сказать не может :(
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #14552 · Ответов: 3670 · Просмотров: 702,417

Важно! Скрипты
Тобур
Отправлено: Oct 26 2004, 07:41


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (DBColl @ Oct 26 2004, 03:34)
??? Это что значит нельзя?! Кто сказал такую чушь? SetLocalObject(...) нельзя делать??? Или я не понял?.. :this:  :unsure:

Эхх , если бы все было так просто :(
скриптик
object oMod = GetModule();
int i = 1;
SetLocalObject(oMod,"CurMap",i);
компилируется с ошибкой ERROR: DECLARATION DOES NOT MATCH PARAMETERS, хотя в Лексиконе ясно сказано "object - An integer that represents a particular object in the world (essentially a pointer to a real object)".

Я не могу никаким образом получить какую-то идентификацию карты иначе, чем через объект, который на этой карте находится. Ясно, что тип object это ссылка, но как перебрать все-таки карты в модуле? В принципе , я уже нашел способ, но этот способ больно извращенный. Неужели в тулсете не предусмотрена все-таки более простая возможность?

Через ресрефы тоже плохо - они все разные, через расставленные вэйпоинты - тоже: их надо расставлять.

Объясню для чего мне нужен цикл по картам: дело в том, что на Сиале при сохранении положения персонажа, запоминается тэг локации. Если тэг одинаковый у двух карт, то с восстановлением положения могут быть проблемы. Так как карт у нас около 470, просматривать в тулсете тэг очень долго и муторно. Поэтому я хотел вывести тэги всех карт в текстовый файл или файл БД и потом каким - нибудь стандартным средством определить задвоение.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #14518 · Ответов: 3670 · Просмотров: 702,417

Важно! Скрипты
Тобур
Отправлено: Oct 25 2004, 23:38


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Не подскажут ли мастера тулсета: Как сделать цикл перебора всех карт в модуле? Что-то я рылся в функция, рылся - ничего не нашел. Вся беда в том, что невозможно присваивать свою величину перепенной типа object :(
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #14500 · Ответов: 3670 · Просмотров: 702,417

Тобур
Отправлено: Oct 23 2004, 09:18


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Не все так просто - я когда реализовывал на Сиале такую систему, столкнулся с большим количеством трудностей. Где-то на форуме Кормира местные "отцы" говорили, что все можно сделать гораздо проще: как на Темпларе - каким-то образом (внешней программой) удерживать игрока на сервере еще 30 сек, но я не владею такой технологией.

По поводу создания куклы я могу вкратце обрисовать трудности:
1 Надо периодически запоминать положение игрока, т.к. во время выхода положение уже неопределенное
2 Необходимо в какой-то переменной запоминать аккаунт игрока при входе в игру, т.к. при выходе он уже недоступен.
3 Необходимо придусмотреть защиту от обворовывания куклы и ее дисарма.
4 АИ у куклы нет - лично я обходил эту проблему создавая невидимый плэйсэйбл, который и управлял куклой.
5 Будут проблемы с фракциями куклы - т.к. она НПС, то если присвоить ей стандартную фракцию, то после нападения на нее, вся фракция становится враждебной к игроку.
6 Проблема с НоПВП - если на игрока в этой зоне напасть нельзя, то на куклу - можно.
  Форум: Шарды рунета · Просмотр сообщения: #14230 · Ответов: 17 · Просмотров: 19,336

Тобур
Отправлено: Sep 24 2004, 08:25


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


Вот ссылка на описание крафта на Сиале Крафт Сиалы
  Форум: Шарды рунета · Просмотр сообщения: #12220 · Ответов: 91 · Просмотров: 68,729

Тобур
Отправлено: Sep 17 2004, 07:39


Level 2
Иконки Групп

Группа: Master
Сообщений: 28
Регистрация: 12.07.2004
Пользователь №: 165


QUOTE (Hety the Lightbringer @ Sep 13 2004, 22:19)
И наконец если кто хочет захостить шард - спросите меня. Я пока стресс-тестю тачку, так что могу похостить в течение 1-3х месяцев.

Вроде бы Эксис мучаеться без хоста
  Форум: Шарды рунета · Просмотр сообщения: #11693 · Ответов: 13 · Просмотров: 17,133


Есть новые сообщения  Открытая тема (есть новые ответы)
Нет новых сообщений  Открытая тема (нет новых ответов)
Горячая тема (есть новые сообщения)  Горячая тема (есть новые ответы)
Горячая тема (нет новых сообщений)  Горячая тема (нет новых ответов)
Опрос (есть новые голоса)  Опрос (есть новые голоса)
Опрос (нет новых голосов)  Опрос (нет новых голосов)
Тема закрыта  Закрытая тема
Тема перемещена  Тема перемещена
 

Текстовая версия Сейчас: 16th April 2024 - 13:21