Aiwan, вопрос лично к тебе. Он может казаться странным, а в свете того, что на дворе 2017 год, так и вовсе нелепым, но тем не менее...
Решал дать денек отдыха своему робинзону и сел поиграть. Представь себе, в ПЛ. Такое иногда случается. Во всяком случае, со мной.
Так вот, минут за 10 игры мне пришлось трижды вызывать диспетчер задач, чтобы он прихлопнул НВН. Как только на Прокампур опускалась ночь, я нервно нажимал кнопку быстрого сохранения чуть ли не каждую минуту...
А все из-за печально-знаменитого непися-бандита. Он спавмится, подвешивает игру и идет по своим делам. Вместо того, чтобы нападать на героя, как это и задумано, изображает бродячего непися-обывателя.
Вот скрипт на последнем слоте бандита:
Neverwinter Script
#include "nw_i0_generic"
#include "mm_common"
void main()
{
int nEvent = GetUserDefinedEventNumber();
if (nEvent == 1002)
{
object oPC = GetLastPerceived();
if (GetIsPC(oPC) && GetLastPerceptionSeen() && GetTag(OBJECT_SELF) == "SEWER1_BANDIT1")
{
SpeakString(ya("Это же то животное, что на менйа плюнуло!.. Убью!!!"));
AssignCommand(oPC, PlaySound("vs_nhalorm1_bat2"));
object oNPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, OBJECT_SELF);
// AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHIN
G, 1.0f, 6.0f));
DelayCommand(1.0f, AssignCommand(oNPC, SpeakString("Хе-хе-хе...")));
AssignCommand(oNPC, AssignCommand(oPC, PlaySound("vs_fvengaum_haha")));
return;
}
else if (GetIsPC(oPC) && GetLastPerceptionSeen() && GetTag(OBJECT_SELF) != "SEWER1_BANDIT1")
{
if (!GetIsInCombat() && !IsInConversation(OBJECT_SELF))
{
SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, FALSE);
SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMA
TIONS, FALSE);
if (Random(4) == 0)
SpeakString("Эй ты, стой!..");
SetCutsceneMode(oPC);
vector vD = GetPosition(OBJECT_SELF) - GetPosition(oPC);
float fDir = VectorToAngle(vD);
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, SetCameraFacing(fDir, 8.0, 50.0, CAMERA_TRANSITION_TYPE_MEDIUM));
AssignCommand(oPC, SetFacing(fDir));
ClearAllActions();
ActionForceMoveToObject(oPC, TRUE);
ActionDoCommand(SetCommandable(TRUE));
ActionDoCommand(SetCutsceneMode(oPC, FALSE));
ActionStartConversation(oPC, "bandit", TRUE, FALSE);
DelayCommand(0.1, SetCommandable(FALSE));
}
}
}
//Дальше реплики драки, которые тут не играют значения и не имеют роли
Так вот, вопрс: что именно и куда вписать, чтобы эта чертова "ClearAllActions();" соскочила с героя, если:
- бандит отошел далеко и уж точно не нападет.
или
- просто не нападает, допустим, 10-15 секунд реального времени.
К примеру, достаточно будет написать в конце перед тремя галками: "DelayCommand(22.0,ActionResumeConversation())
;" или надо как-то более иначе?
Разумеется, я и сам могу покопаться, (исправил же в свое время "легендарный" квест с доилкой!). Но:
У меня нет твоего опыта, а следовательно, уверенности что делаю правильно. С моей кармой скорее получится усугубить, чем исправить. Проверять сложно, эти бандюки то пропадают неделями, то вдруг начинают лезть из всех щелей, как тараканы.
Во-вторых, ты, наверное, единственный из команды создателей ПЛ, который еще активен на форуме ГМ. Кого еще спрашивать?
З.Ы. Ради прикола: самая дисциплинированная непись в ПЛ - бандит. Он
накогда не лезет в триггер на сточной канаве. То есть если он отспавмился, а между ним и героем эта канава - все! Считай, висяк гарантирован. А простые быватели шастают по этим канавам как придется, и плевать им на триггеры...
З.Ы.Ы. Так что лучше второй вариант, тупо на время. А то ПС и бандит могут часами стоять рядышком и любоваться друг на друга через канаву...