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

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

8 страниц V  « < 3 4 5 6 7 > »   
Ответить в эту темуОткрыть новую тему
> Модуль "История дома Салливан", Обсуждение модуля Heather
Рейтинг 5 V
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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Feb 27 2015, 19:09
Сообщение #121


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

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



Цитата
Ну да, можно. Но там начинается диалог, а затем файтинг.

Я просто обычно делю на два окна при игре - привычка с шардов - отдельно диалог, отдельно информация.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 27 2015, 19:16
Сообщение #122


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

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



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

Neverwinter Script
DelayCommand(0.0, ActionPauseConversation());
//////тут всякие действия
DelayCommand(7.0, ActionResumeConversation());

Вешается на строчку РС

Да, насчет третьего круга арены мне и было интересно. Я уже уменьшала противников, но, видимо, надо еще.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение May 10 2015, 19:33
Сообщение #123


Level 4
**

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



Скоро новая часть? Меня снова в невер потянуло. И да, что я давно хотел сказать, но забыл - не хватает больше всяких авантюр, не влияющих на сюжет (к примеру шел и случайно набрел на руины с кучей сокровищ и врагов), приключения, так сказать!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение May 10 2015, 22:35
Сообщение #124


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

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



NumberOne, увы, не думаю, что скоро. У меня жутчайший затык. Вдохновения нет, но я не бросаю - делаю по-маленьку. Но вот сейчас зашла на форум, прочитала сообщение и снова захотелось делать. =)
Я такого рода адвенчуру люблю, но делать не умею. Да и сил на нее не остается. Скажу только, что во второй главе будет много локаций, разнообразный ландшафт, но бОльшая часть будет завязана на сюжете. Однако сюжет ветвистый, т.е. для продвижения по игре нужно будет посетить нескольких нпс и выполнить несколько заданий. Квесты разнообразные, по-крайней мере, стараюсь их сделать таковыми.

Кстати, а что там с интерлюдией? Понравилась/не понравилась? Там очень много текста, но я хотела передать атмосферу...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение May 11 2015, 05:20
Сообщение #125


Level 4
**

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



Да, понравилась. В принципе доволен образом кочевников.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 28th March 2024 - 17:13