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

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

8 страниц V  « < 3 4 5 6 7 > »   
Ответить в эту темуОткрыть новую тему
> Модуль "История дома Салливан", Обсуждение модуля Heather
Рейтинг 5 V
Melisse
сообщение Feb 25 2015, 10:00
Сообщение #96


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

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



скрипты надо было в хак пихать, (IMG:style_emoticons/kolobok_light/angel.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 10:31
Сообщение #97


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Ахахахах... Мелисса все о своем) Ну тут она права. Хотя я сам в хаки скрипты не пихаю... Но я все тестю по 20 раз после каждого скрипта, так что я уверен, что такой необходимости нема.

P.S Сегодня вечером продолжу играть, настроение нет как-то с температурой 38...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 11:47
Сообщение #98


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



NumberOne, Спасибо тебя огромнейшее! И за прохождение, и за замечания! Ссылку на модуль, наверное, удалю пока. Чтобы косячные версии не скачивали.
И я 20 раз проверяю. но у меня плохо с абстрактным мышлением. Я-то знаю, куда идти и не всегда могу продумать, как может поступить игрок.
Скорейшего выздоровления и дальнейшей безбаговой игры!

Melisse, я хотела все в хак кинуть, чесслово. Но испугалась, да и поленилась. =)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 16:34
Сообщение #99


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Дневник Гиллеспи: "покинуть родную землю и близкий людейй". Опечатка. И еще, это нормально, что эльф называет своих сородичей из Креции людьми?

Счастье для шали в знания а мне некому - нет запятой перед а.

Когда представляю себя Саллену: "Мое имя - господин" после господин нет пробела

Я так рад, что согласились,господин! - Тоже пробела нет.

В общем тебе нужно проверить многие диалоги, где используется жетон господин (если используется) потому много где просто нет пробелов.

Убил жуков в амбаре, но у Саллена не появляется диалог на завершение кв. Он только говорит: "Прошу вас, господин [Полное имя], поторопитесь!

Сообщение отредактировал NumberOne - Feb 25 2015, 16:18
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 16:51
Сообщение #100


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Цитата
В общем тебе нужно проверить многие диалоги, где используется жетон господин (если используется) потому много где просто нет пробелов.

Хах, я поняла в чем дело. В моем переводе "господин" - это "лорд". И там переводчиками добавлен лишний пробел. Поэтому у меня всегда "лорд ?" получался. Но я и забыла, что перевод может быть не один и тот же. И если это так, то игроков ждет множество "мигосподинов" вместо "милордов". XD

Цитата
Убил жуков в амбаре, но у Саллена не появляется диалог на завершение кв

Странно, на жуках стоит скрипт on death с переменной +1. Может какой-нибудь жук заныкался?

Сообщение отредактировал Heather - Feb 25 2015, 16:56
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 17:17
Сообщение #101


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Запись в журнале нечиста на руку "Но расспросить няню поподробнее" Что-то не вяжется.

Цитата(Heather @ Feb 25 2015, 17:51) *
И если это так, то игроков ждет множество "мигосподинов" вместо "милордов"


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

Цитата(Heather @ Feb 25 2015, 17:51) *
Странно, на жуках стоит скрипт on death с переменной +1. Может какой-нибудь жук заныкался?


Вроде бы всех убил, я бы сосчитал их, но у меня нет сохранения. Кстати говоря, т.к я играю за плута, 3 из них я убил электрической ловушкой... Возможно, в скрипте стоит проверка на то, убил ли именно сам персонаж и из-за этого возможно троих убитой ловушкой мне не засчитали...

if (!GetIsPC(oPC)) return;

вот, это проверека на то, что убийца является игроком, думаю ее можно удалить и локалку присваивать объекту object oPC = GetFirstPC(), все-равно в любом случае по идеи в убийстве косвенно или прямо участвует только игрок.

В своем модуле я использую этот скрипт:

Код
void main()
{
int nDead = GetLocalInt(GetModule(),"LOCAL") + 1; //Имеющаяся локалка на модуле +1
SetLocalInt(GetModule(),"LOCAL", nDead); //Вешается локалка на модуль
  
if (nDead >= 6) //Когда, наконец умирает последний монстр (в данном случае шестой)
    {
     Действия
    }
}


Чтобы избежать читерства в твоем случае, нужно еще запретить жукам выходить из локации. А то шибко умные могу выйти, привести за собой жуков и стравит их между нпс. И просто подождать, когда нпс сделают свою работу.

Сообщение отредактировал NumberOne - Feb 25 2015, 17:19
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 17:21
Сообщение #102


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Да, человеческой расы, но пол может быть и женским. Поэтому для удобства и экономии времени я пользовалась стандартными жетонами. Но, похоже, придется переделывать каждый диалог и писать в них свой токен для лорда/леди.


if (!GetIsPC(oPC)) return - у меня именно так и стоит. и пц объявлен как last killer. Т.е. если жука убьет, скажем, пет или ловушка, то нам не засчитают? Уй, мамочки! Косяк на косяке едет и косяком погоняет. (IMG:style_emoticons/kolobok_light/biggrin.gif)

Цитата
запретить жукам выходить из локации.

а как это сделать?

Сообщение отредактировал Heather - Feb 25 2015, 17:22
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 17:46
Сообщение #103


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 25 2015, 18:21) *
пет или ловушка


Насчет пета не знаю, но ловушка это точно)))

Цитата(Heather @ Feb 25 2015, 18:21) *
а как это сделать?


Не знаю, но я частенько замечал, что некоторые монстры покидают, а некоторые нет. Можно схитрить и сделать немного по другому: т.к там дверь, а не триггер, то можно пожалуй вообще исключить возможность стандартного перехода из области, т.е для жуков его точно не должно быть. В свойствах двери оставить пустой строку тега назначения, а в типе выстовить голочку дверь. Получится, что перехода как такового нет. А чтобы персонаж все же мог перейти, поставить в слоте OnAreaTransitionClick хороший скрипт создателя рыцарской саги.

Код
//:://////////////////////////////////////////////
//:: Created By: Gennady  УНИВЕРСАЛЬНЫЙ СКРИПТ ПЕРЕМЕЩЕНИЙ
//:: Created On: 5.10.2006  Авто сохранение
//:://////////////////////////////////////////////
#include "ludi"
void main()
{
object oSelf = OBJECT_SELF;
object oPoint = GetWaypointByTag("WP_" + GetTag(oSelf));
object oPC = GetFirstPC();
if ((GetArea(oPC) == GetArea(oSelf)&&GetDistanceBetween(oPC, oSelf) < 3.0) ||
      GetIsPC(GetEnteringObject()))
  {
   if(GetLocalInt(oSelf, "OPEN_SD") == 1)
    JumpFirstPC(oPoint);
   else
   {
    SetLocalInt(oSelf,"OPEN_SD",1);
    DoSinglePlayerAutoSave();
    DelayCommand(60.0,SetLocalInt(oSelf,"OPEN_SD",0));
   }
  }
else
AssignCommand(GetEnteringObject(), ClearAllActions());
}
// помещать в слот OnUsed OnEnter OnClick OnAreaTransitionClick
// Точка перемещения содержит WP_+Тег объекта


Но к нему нужна инклюда, т.е чтобы в твоем модуле/хаке был следующий скрипт

Код
///////////////////////////////////////////////
//  ***  БИБЛИОТЕКА  ***        #include "ludi"
///////////////////////////////////////////////
// ____________ Генерируем случайную точку _____________________________________
location CreateRandomLocation(object oTarget, float fRadius, int bOnLine = TRUE)
{
if(!bOnLine)
fRadius=IntToFloat(Random(FloatToInt(fRadius)));
float iXO=VectorMagnitude(GetPosition(oTarget))*cos(VectorToAngle(GetPosition(oTarget)));
float iYO=VectorMagnitude(GetPosition(oTarget))*sin(VectorToAngle(GetPosition(oTarget)));
float fRndomAngle=IntToFloat(Random(360));
location lNEW=Location(GetArea(oTarget),Vector(iXO+fRadius*cos(fRndomAngle),iYO+fRadius*sin(fRndomAngle)),360.0);
return lNEW;
}
// ЗАМЕНА МАЛОЙ БУКВЫ Я
// --------- Использование      МОЯ СТОЯТЬ КАК СТЕНА
//  1) string sTokenValue = "Мо"+ya()+" сто"+ya()+"ть как стена";
//  2) string sTokenValue = ya("Мойа стойать как стена");
string ya(string sTokenValue = "йа");
// Перемещаем создание к точкам днем и ночью
// object oWPD - Точка день
// object oWPN - Точка ночь
// object oPS - Существо перемещаемое
void pLudey(object oWPD, object oWPN, object oPS);
// Любой персонаж в радиусе 12 метров, который видит ГЕРОЯ,
// и имеет класс простолюдин, но не имеет класса животное
object NPCAlerts(object oPC);
// ТЕКСТ НАД ПЕРСОНАЖЕМ
// object oPC - ПЕРСОНАЖ
// string sTokenValue - ТЕКСТ НАД ПЕРСОНАЖЕМ
void text(object oPC, string sTokenValue);
// Перемещение людей
// object oPC - Существо
// object oWP - Точка Перемещение
void Jump(object oPC, object oWP);
// ПЕРЕМЕЩЕНИЕ ГЕРОЯ и всей его свиты к точке object oWP
void JumpFirstPC(object oWP);
// ДАТЬ ПРЕДМЕТ ИЗ ПАЛИТРЫ
// string sItemTemplate - ResRef предмета
// object oTarget - Объект или существо кому дать
// int nStackSize - Количество предметов, если они слаживаемые
void CreateItemPC(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1);
// ВЫЗВАТЬ ИЗ ПАЛИТРЫ
// nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE,
//   OBJECT_TYPE_STORE, OBJECT_TYPE_WAYPOINT
// string sTemplate - ResRef ВЫЗЫВАЕМОГО
// location lLocation - ЛОКАЦИЯ ВЫЗОВА
// bUseAppearAnimation
// ПРИСВОИТЬ НОВЫЙ ТЭГ
void CreateObjectN(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="");
// ДОПОЛНИТЕЛЬНЫЙ УРОН ДЛЯ ЗАКЛИНАНИЯ
// object oSelf - Объект = OBJECT_SELF
// int Damage - делитель максимальных ХР
void SpellDamage(object oSelf, int Damage);
//ПЕРЕДВИЖЕНИЕ ПЛЕЙСА
// object oSelf - Объект управлЯющий передвижением
// string sGtTag - тэг передвигаемого объекта
// float fDist=0.1 - дистанциЯ одного шага
// float fSpeed=0.3 - скорость кадра
// int iShag=20 количество создаваемых объектов (кадров)
// float fOrient=180.0 - направление движениЯ
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0);
// ЛОКАЦИЯ ОТНОСИТЕЛЬНО ОБЪЕКТА
// object oTarget - сам объект
// float fRadius - радиус локации от объекта
// float fAngle - градусы угла (0.0 - 360.0):
// 0.0 - 3 часа; 90.0 - 12 часов; 180.0 - 9 часов; 270.0 - 6 часов.
// float fAngle - oTarget равен GetFacing(oTarget)
// float fZ=0.0 - добавить высоту (по умолчанию равна высоте oTarget)
// float fOpient=0.0 - величина осевого угла локации
location CreateLocation(object oTarget, float fRadius, float fAngle, float fZ=0.0, float fOpient=0.0);
// ПЕРЕМЕННАЯ ТОРГОВОЙ РЕПУТАЦИИ
// int iRepa - величина смены репутации (от - 3 до 10 пунктов)
void ReputationTorg(int iRepa);
// Текущий день
int Day();
//КОПИЯ ОБЪЕКТА
// object oSource  - объкт который копируем
// location locLocation - локациЯ где поЯвитсЯ копиЯ
// object oOwner = OBJECT_INVALID - если копируем предмет,
// то его можно положить другому существу или плейсу
// string sNewTag = "" - присвоим копии новый тэг
void CopyObjectN(object oSource, location locLocation, object oOwner = OBJECT_INVALID, string sNewTag = "");


// ____________________ КОПИЯ ОБЪЕКТА __________________________________________
void CopyObjectN(object oSource, location locLocation, object oOwner = OBJECT_INVALID, string sNewTag = "")
{CopyObject(oSource, locLocation, oOwner, sNewTag);}
//______________ Перемещение день-ночь _________________________________________
void pLudey(object oWPD, object oWPN, object oPS)
{
  if (oPS==OBJECT_INVALID||oWPD==OBJECT_INVALID||oWP
N==OBJECT_INVALID) return;
  int T = GetTimeHour();
   if(T>=7 && T<21)   // день
   {
    if (GetLocalInt(OBJECT_SELF, "PEREMESH") != 1)
      {
       AssignCommand(oPS, ClearAllActions());
       DelayCommand(0.1, CopyObjectN(oPS, GetLocation(oWPD)));
       DestroyObject(oPS, 0.3);
       DelayCommand(2.0, SetLocalInt(OBJECT_SELF,"PEREMESH",1));
      }
    }
   else if (GetLocalInt(OBJECT_SELF, "PEREMESH") != 2)  // ночь
      {
       AssignCommand(oPS, ClearAllActions());
       DelayCommand(0.1, CopyObjectN(oPS, GetLocation(oWPN)));
       DestroyObject(oPS, 0.3);
       DelayCommand(2.0, SetLocalInt(OBJECT_SELF,"PEREMESH",2));
      }
}   // ДЛЯ СПЯЩИХ СКРИПТ de_sleep HB
//__________________________________________________
____________________________
object NPCAlerts(object oPC)
{
object oNPC = GetFirstObjectInShape(SHAPE_SPHERE, 12.0, GetLocation(OBJECT_SELF), TRUE);
object oPC = GetFirstPC();

while (GetIsObjectValid(oNPC))
  {
   if (GetObjectSeen(oPC, oNPC) && GetLevelByClass(CLASS_TYPE_COMMONER, oNPC) >= 1
       && !GetIsDead(oNPC) && GetLevelByClass(CLASS_TYPE_ANIMAL, oNPC) == FALSE)
      return oNPC;
   oNPC = GetNextObjectInShape(SHAPE_SPHERE, 12.0, GetLocation(OBJECT_SELF), TRUE);
  }
  return oNPC;
}
//__________________________________________________
____________________________
void OpenContainer(object oPC)
{
object oSelf = OBJECT_SELF;
object oItem = GetFirstItemInInventory(oSelf);
if (oItem == OBJECT_INVALID) return; // Если уже нет предметов
object oPC = GetFirstPC();
object oNPC = NPCAlerts(oPC);  // ЕСТЬ ЛИ В РАД 12 МЕТРОВ КТО? ВИДИТ ЛИ ОН PC?
vector vFace = GetPosition(oSelf);
location lNPC = GetLocation(oNPC);
int nMas = 20 + GetSkillRank(SKILL_HIDE, oPC);
int nPass = (GetSkillRank(SKILL_HIDE, oPC) + d20()) - (GetSkillRank(SKILL_SPOT, oNPC) + d20());
string sHide = "Бросок (Уход в тень): <cуу >20+"+IntToString(GetSkillRank(SKILL_HIDE, oPC))+"</c>";
if (GetLocalInt(OBJECT_SELF, "NPC_PROV") == 1) return;
if (GetIsObjectValid(oNPC))
  {
   if (GetStealthMode(oPC) == STEALTH_MODE_ACTIVATED)
    {
     if (nPass >= 0)
      {
       GiveXPToCreature(oPC, nMas);
       AssignCommand(oPC, SpeakString("Никто не видит... Можно брать..."));
       FloatingTextStringOnCreature("<c у >ВАС НЕ ЗАМЕТИЛИ!</c>", oPC);
       SendMessageToPC(oPC, "<c °у>"+sHide+"</c>");
       SetLocalInt(OBJECT_SELF, "NPC_PROV",1);
       return;
      }
      else
         FloatingTextStringOnCreature("Ваша маскировка замечена.", oPC);
     }
  }
else
{
  SetLocalInt(OBJECT_SELF, "NPC_PROV",1);
  AssignCommand(oPC, SpeakString("Никто не видит... Можно брать..."));
  return;
}
  AssignCommand(oNPC, ClearAllActions());
  AssignCommand(oPC, ClearAllActions());
  PlayVoiceChat(VOICE_CHAT_HELP, oNPC);
  AssignCommand(oNPC, SetFacingPoint(vFace));
  AssignCommand(oPC, SetFacingPoint(GetPosition(oNPC)));
  AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD));
  AssignCommand(oPC, SpeakString("Похоже, за мной кто-то наблюдает..."));
  AssignCommand(oNPC, ActionSpeakString("Эй, не трогай это!"));
  AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL, 1.0, 3.0));
  AssignCommand(oNPC, ActionForceMoveToObject(oPC, TRUE, 1.0, 5.0));
  AssignCommand(oNPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_NO, oNPC)));
  AssignCommand(oNPC, ActionSpeakString("Это не твое. Уходи!"));
  AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT));
  AssignCommand(oNPC, ActionDoCommand(AssignCommand(oSelf, ActionStartConversation(oPC,"konteiner"))));
  AssignCommand(oNPC, ActionDoCommand(AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE))));
  AssignCommand(oNPC, ActionForceMoveToLocation(lNPC, FALSE, 5.0));
  if(Random(100) >= 50)
  {
   AssignCommand(oNPC, ActionSpeakString("Эх, можешь брать это барахло. Только ничего не ломай!"));
   SetLocalInt(OBJECT_SELF, "NPC_PROV",1);
  }
  else
  {
   AssignCommand(oNPC, ActionSpeakString("Не тобой положено, не тебе и брать!"));
   SetLocalInt(oPC, "VOR_COMMONER", GetLocalInt(oPC, "VOR_COMMONER") + 1);
   if(GetLocalInt(oPC, "VOR_COMMONER")>=10)
   DelayCommand(16.1, ExecuteScript("stop_commoner", oPC));
  }
  DelayCommand(0.2, SetCommandable(FALSE, oPC)); // заблокировать очередь
  DelayCommand(0.3, SetCommandable(FALSE, oNPC));
  DelayCommand(15.0, SetCommandable(TRUE, oNPC));
  DelayCommand(15.2, AssignCommand(oNPC, ClearAllActions()));
  DelayCommand(15.3, AssignCommand(oNPC, SetFacingPoint(vFace)));
  DelayCommand(16.0, SetCommandable(TRUE, oPC));
}
//___________________ ЗАМЕНА МАЛОЙ БУКВЫ Я _____________________________________
string ya(string sTokenValue = "йа")
   {
    string sYa = GetName(GetObjectByTag("ax_letter_ya"));
    string sResult = "";
    string sSub;
    int i = 0;
    while ((sSub = GetSubString(sTokenValue, i, 2)) != "")
           {
           if (sSub == "йа")
              {
              sResult += sYa;
              i += 2;
              }
           else
              {
              sResult += GetStringLeft(sSub, 1);
              i++;
              }
           }
    return sResult;
  }
// _____________________ ДАТЬ ПРЕДМЕТ ИЗ ПАЛИТРЫ _______________________________
void CreateItemPC(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1)
{CreateItemOnObject(sItemTemplate, oTarget, nStackSize);}
// ____________________ ВЫЗВАТЬ ИЗ ПАЛИТРЫ _____________________________________
void CreateObjectN(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="")
{CreateObject(nObjectType, sTemplate, lLocation, bUseAppearAnimation, sNewTag);}
// __________________ ТЕКСТ НАД ПЕРСОНАЖЕМ _____________________________________
void text(object oPC, string sTokenValue)
{
  AssignCommand(oPC, SpeakString(sTokenValue));
}
//____________________ Перемещение людей _______________________________________
void Jump(object oPC, object oWP)
{
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, JumpToObject(oWP));
}
//____________________ ПЕРЕМЕЩЕНИЕ ГЕРОЯ _______________________________________
void JumpFirstPC(object oWP)
{
object oPC = GetFirstPC();
object oNPC = GetFirstObjectInArea(oPC);

   AssignCommand(oPC, ClearAllActions());
   AssignCommand(oPC, JumpToObject(oWP));
while (GetIsObjectValid(oNPC))
{
  if (oPC==GetMaster(oNPC))
  {
   AssignCommand(oNPC, ClearAllActions());
   AssignCommand(oNPC, JumpToObject(oWP));
  }
  oNPC = GetNextObjectInArea(oPC);
}
}
//______________ ДОПОЛНИТЕЛЬНЫЙ УРОН ДЛЯ ЗАКЛИНАНИЯ ____________________________
void SpellDamage(object oSelf, int Damage)
{
object oPC = GetLastSpellCaster();
int iD = GetCurrentHitPoints(oSelf);// Текущие ХР
int iDM = GetMaxHitPoints(oSelf)/Damage;// Повреждение
string siD = IntToString(iDM);
effect eDamage = EffectDamage(iDM);
effect eSav = EffectSavingThrowDecrease(SAVING_THROW_ALL, 10, SAVING_THROW_TYPE_ALL);
effect eKosti = EffectVisualEffect(VFX_COM_CHUNK_BONE_MEDIUM);
location lSmoke = GetLocation(oSelf);

if (iDM > iD)
  {
   if (iD < 12) return;
   iD = iD-10;
   iDM = iD; siD = IntToString(iDM);
   effect eDamageM = EffectDamage(iDM);
   ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamageM,oSelf);
   ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eKosti,lSmoke);
  }
else
   ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oSelf);
   ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSav,oSelf,10.0);
   SendMessageToPC(oPC, "<c °у>"+GetName(oSelf)+"</c> получил урон от <c °у>"+GetName(oPC)+"</c>: (<cу  >"+siD+"</c>)");
}
//____________________ ПЕРЕДВИЖЕНИЕ ПЛЕЙСА _____________________________________
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0)
{
if (GetLocalInt(oSelf,"STENA") == 1) return;
object oPlace = GetNearestObjectByTag(sGtTag, oSelf);
effect eVis = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); // невидимость
effect eIskra = EffectVisualEffect(VFX_COM_SPARKS_PARRY);
int i;
AssignCommand(oSelf, ClearAllActions());
AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eIskra, oSelf);
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oPlace));
for (i=1; i<iShag; i++)
  {
    vector vSpawn = GetPosition(oPlace);
    float fFacing = GetFacing(oPlace);
    vSpawn.x += cos(fFacing) * fDist*i;
    vSpawn.y += sin(fFacing) * fDist*i;
    // Если отрицательное значение, то locSpawn позади oPC
    location locSpawn = Location(GetArea(oPlace), vSpawn, fOrient+fFacing);
  object oNew = CreateObject(OBJECT_TYPE_PLACEABLE, GetResRef(oPlace), locSpawn, FALSE, sGtTag);
  SetPlotFlag(oNew, TRUE); // Сюжетный
   ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oNew);
   AssignCommand(oSelf, ActionDoCommand(RemoveEffect(oNew, GetFirstEffect(oNew))));
   if (i<(iShag-1))
   {
    if (i<3) AssignCommand(oSelf, ActionWait(1.0));
    else AssignCommand(oSelf, ActionWait(fSpeed));
    AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oNew)));
    AssignCommand(oSelf, ActionDoCommand(DestroyObject(oNew, 0.5)));
   }
  }
  AssignCommand(oPlace,PlaySound("al_cv_millwheel1"));
  DelayCommand(4.0, AssignCommand(oPlace,PlaySound("as_cv_minercar1")));
  SetLocalInt(oSelf,"STENA",1);
  AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT, eIskra, oSelf)));
  AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
  AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf,"STENA",0)));
  AssignCommand(oSelf, ActionDoCommand(DestroyObject(oPlace)));
}
//_________________ Действие с большим числом предметов в инвентаре ____________
int Match(string s1, string s2)
{
return (s1 == s2);
}
// ------- Проверить
//  int StartingConditional()
// {return (GetNumItemsInInventory(GetPCSpeaker(), "ТЕГ") >= 3);}

int GetNumItemsInInventory(object oInventory = OBJECT_SELF, string sTag = "*")
{
int nNum = 0;
object oItem = GetFirstItemInInventory(oInventory);
    while (GetIsObjectValid(oItem))
    {
     if (Match(GetTag(oItem), sTag))
       nNum += GetItemStackSize(oItem);
       oItem = GetNextItemInInventory(oInventory);
    }
    return nNum;
}
// -------- Забрать (если число отрицательное -3, забрать все)
// void main()
// {RemoveItemsFromInventory(GetPCSpeaker(), "ТЕГ", 3);}

int RemoveItemsFromInventory(object oInventory = OBJECT_SELF, string sTag = "*", int nNum = -1)
{
int nStack;
object oItem = GetFirstItemInInventory(oInventory);
   while (GetIsObjectValid(oItem) && (nNum != 0))
    {
     if (Match(GetTag(oItem), sTag))
      {
        if (nNum < 0) DestroyObject(oItem);
         else if ((nStack = GetItemStackSize(oItem)) > nNum)
         {
          SetItemStackSize(oItem, nStack - nNum);
          return 0;
         }
        else
        {
         DestroyObject(oItem);
         nNum -= nStack;
        }
      }
        oItem = GetNextItemInInventory(oInventory);
    }
    return nNum;
}
//___________________ ЛОКАЦИЯ ОТНОСИТЕЛЬНО ОБЪЕКТА _____________________________
location CreateLocation(object oTarget, float fRadius, float fAngle, float fZ=0.0, float fOpient=0.0)
{
vector vTarget = GetPosition(oTarget);
float fXNew = vTarget.x+(fRadius*cos(fAngle));
float fYNew = vTarget.y+(fRadius*sin(fAngle));
float fZNew = vTarget.z+fZ;
vector vNew = Vector(fXNew,fYNew,fZNew);
location LNew = Location(GetArea(oTarget), vNew , fOpient);
return LNew;
}
// _______________ ПЕРЕМЕННАЯ ТОРГОВОЙ РЕПУТАЦИИ _______________________________
void ReputationTorg(int iRepa)
{
object oPC = GetFirstPC();
int iReput = GetLocalInt(oPC,"TORGOVEZ_REPA");
int iNew =iReput+iRepa;
if (iNew >= 10) iNew = 10;
if (iNew <= -3) iNew = -3;
SetLocalInt(oPC,"TORGOVEZ_REPA",iNew);
if (iRepa > 0)
SendMessageToPC(oPC, ya("Ваша репутацийа повысилась на: <c у >"+IntToString(iRepa)+"0%</c>"));
else
SendMessageToPC(oPC, ya("Ваша репутацийа понизилась на: <cу  >"+IntToString(iRepa)+"0%</c>"));
}
// _______________  Текущий день _______________________________________________
int Day()
{
int nDay = GetCalendarDay();
int nMes = 28*GetCalendarMonth();
int nYear = GetCalendarYear();
int iDay = 336*nYear+nMes+nDay;
return iDay;
}
//void main(){}


В нем конечно много лишнего, а точнее нам ненужного. Скрипт все таки писался для другого модуля со своими нуждами.

Цитата(Heather @ Feb 25 2015, 18:21) *
Да, человеческой расы, но пол может быть и женским.


Хм, не знал насчет пола

В книгах частенько встречаются мелкие ошибки. То пробел отсутствует после точки, то запятая пропущена. И еще, не используй букву Ё она в игре выглядит как ,
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 18:44
Сообщение #104


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Ух, какой гигантский! Попробую сначала самостоятельно поколдовать над этими жуками, а этот скрипт оставлю "про запас".
Думаю, не только в книгах, но и в диалогах, журнале есть опечатки. Ибо ворда не имею, чтобы проверять. Все вручную.)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 19:45
Сообщение #105


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Сделал, если этом можно так назвать, кв с бандитами и Лиамой, вот что приметил:

Диалог Лиамы: "А эти андиты", пропущена б.
Запись журнала: "убил брата на глаза", отсутствует буква х.

И еще, главное замечание. Когда я говорил с бандитами, они зарезали его брата. Меня это естественно не устраивало (дух оригинальной компании нвн, где я спаситель мира всего дает о себе знать). Поэтому я, видя, что бандиты являются нейтральными, решил убить их без суда и следствия (такой уж оказался менталитет у моего персонажа, не жалеть бандюг и тем более не идти на разговоры, начал тупо атаковать ближайших), рассчитывая, что потом брат будет спасен, так и есть, брат оказался жив, только вот сюжет продолжался по сценарию, если бы он был мертв. Тут либо надо сделать несколько линий развития истории, либо как-то сделать, чтобы диалог был неизбежен (самый лучший вариант запилить кат сцену, где персонаж сразу же по открытии двери начинает диалог.

Сообщение отредактировал NumberOne - Feb 25 2015, 19:47
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 21:07
Сообщение #106


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



NumberOne, а ты квест с теми жуками в Лойа-тан так и не завершил? А то, там по завершению нас зовут в дом к старейшинам, где находится еще 1 квест + маленькая сценка.

Насчет бандитов и брата, да, запилю катсцен. Ибо этот мужик должен-таки трагично умирать, все дела. Ну а ты, конечно, молодец, что попытался его спасти. =) Это мило.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 21:08
Сообщение #107


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 25 2015, 22:07) *
NumberOne, а ты квест с теми жуками в Лойа-тан так и не завершил? А то, там по завершению нас зовут в дом к старейшинам, где находится еще 1 квест + маленькая сценка.


Да? Ну и ладно, я все-равно уже в городе... Может быть заново буду проходить, загляну.

Еще я в какой-то бочке нашел книгу про Фаэрун - мелочь, но миру не соответствует.

И еще, эти бандиты дались мне весьма трудно, учитывая, что я плут (мало хп, мало защиты, + Тайный удар не пашет, т.к я с целью 1х1) Мне пришлось немного схитрить, пользуясь некоторыми особенностями игры. А там еще и маг, который кидает ошеломление и прочее. Ад.

Сообщение отредактировал NumberOne - Feb 25 2015, 21:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 21:29
Сообщение #108


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



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

Это околосюжетный квест, причем с возможностью пройти его после основного сюжета. Так что я рассчитывала, что если игроку будет трудно, он отложит и подкачается. На 5 уровне вроде они нормально мочатся (хотя и с зельями и прочими баффами)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 21:57
Сообщение #109


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



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

P.S С меня сегодня хватит, багов вроде бы больше не замечал.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 22:08
Сообщение #110


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



NumberOne, нет, так не задумано. Я шкурку кинула, а отредактировать ее забыла. Она не должна быть такой перекачанной. Ну, в принципе, данный квест тоже доступен после сюжета, так что можно немного покачаться, купить оружие получше и забить тварь.
Ах, да. Этот квест обязателен для выполнения (точнее, тот, который следует за ним). Поэтому, если демонетко окажется совсем крутой, придется убить ее с помощью читов. Я очень извиняюсь, какие-то изменения делала на скорую руку и не проверила потом. =(


Надеюсь, хоть что-то приятное в игре присутствует? Или сплошные несостыковки и глюки?

Сообщение отредактировал Heather - Feb 25 2015, 22:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ner1
сообщение Feb 26 2015, 00:35
Сообщение #111


Level 3
*

Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Звучит так, будто и то, что работало год назад, уже не работает. (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Буду ждать вторую часть, нвн пока поднаскучил и я его снес.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 26 2015, 08:51
Сообщение #112


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 25 2015, 23:08) *
Надеюсь, хоть что-то приятное в игре присутствует? Или сплошные несостыковки и глюки?


Хороший модуль, что ты так прям переживаешь...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 26 2015, 18:12
Сообщение #113


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Ner1, скорее, так: я исправила то, что не работало тогда, сломав то, что работало. Вторую часть пилю потихоньку. Задумок много, посмотрим. все ли удастся реализовать. После первой главы я многое переосмыслила и теперь работаю по плану, стараясь продумать все до мелочей.

NumberOne, я очень переживаю (я ж девочко (IMG:style_emoticons/kolobok_light/spruce_up.gif) ). В любом случае, я никогда не буду довольна своим модулем на 100%.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 26 2015, 19:33
Сообщение #114


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Бойцы на арену уж как-то легко отделываются с животными, слегка экшана не хватает. + Зрители ничего не выкрикивают.

Сегодня вроде как багов больше не заметил, за исключением банальных опечаток.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 27 2015, 06:00
Сообщение #115


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



В кат сцене, где болтают Хамир и Терренс слова слишком быстро идут, я не успеваю прочитывать (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Feb 27 2015, 10:33
Сообщение #116


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

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



В чат-окне можно прочитать
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 27 2015, 12:02
Сообщение #117


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Ну да, можно. Но там начинается диалог, а затем файтинг. Надо, значит, помедленнее. Вот еще 1 проблемка - я-то знаю. что они скажут, успеваю читать. А как другие воспринимают, мне трудно понять.
А вот еще вопрос к NumberOne - после этой сценки не слишком ли легкий бой? По идее, это типа босс главы, так что хотелось бы, чтобы было немного посложнее.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 27 2015, 14:44
Сообщение #118


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Можно и по сложнее, но не в плане его урона.

Сцена суда хорошо проработана
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 27 2015, 15:01
Сообщение #119


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

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



NumberOne, я не знаю, как его сложнее сделать. У него и арбалет вроде мощный и стрельба в упор... А все равно какой-то лузерский парень... Хотя, мб это я воином его легко рублю, а остальным потяжелее?..

Спасибо, я очень долго над ней работала. Настолько долго, что успела уже возненавидеть)))
Уже заканчиваешь?
Очень интересно услышать мнение об интерлюдии (долина Афрат), кот. будет дальше. Особенно по поводу баланса и экспы.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 27 2015, 18:54
Сообщение #120


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Перешел в интерлюдию. Вечерком отпишусь.

А вообще модуль мне нравится, достойно.

Можешь попытаться и дать ему какие-то особые способности что-ль, не знаю, увеличить хп.

У меня вопрос. Как ты сделала так, что когда нажимаешь во время диалога на вариант ответа, то он как бы засвечивается и некоторое время ничего не происходит (точнее происходит, например подходит человек)

Интерлюдия. На арене.

Во-первых, третий круг мне кажется для моего плута непреодолим. Постоянный стан, пара тычек и я труп.

Во-вторых, на противников агрятся зрители, убивают их (надо настроить фракции). Ну а так как там в скрипте смерти такая же проверка как у жуков, мне не засчитали.

Буду перепроходить, но потом - опять температура разыгралась

Сообщение отредактировал NumberOne - Feb 27 2015, 18:55
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

8 страниц V  « < 3 4 5 6 7 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 4th July 2025 - 23:09