Помощь - Поиск - Пользователи - Календарь
Полная версия: Модуль "История дома Салливан"
Город Мастеров > ГИЛЬДИЯ МАСТЕРОВ > Главный Зал
Страницы: 1, 2, 3, 4
NumberOne
Запись в журнале нечиста на руку "Но расспросить няню поподробнее" Что-то не вяжется.

Цитата(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) //Когда, наконец умирает последний монстр (в данном случае шестой)
    {
     Действия
    }
}


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


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

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

а как это сделать?
NumberOne
Цитата(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
Ух, какой гигантский! Попробую сначала самостоятельно поколдовать над этими жуками, а этот скрипт оставлю "про запас".
Думаю, не только в книгах, но и в диалогах, журнале есть опечатки. Ибо ворда не имею, чтобы проверять. Все вручную.)
NumberOne
Сделал, если этом можно так назвать, кв с бандитами и Лиамой, вот что приметил:

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

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

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


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

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

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

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

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


Надеюсь, хоть что-то приятное в игре присутствует? Или сплошные несостыковки и глюки?
Ner1
Звучит так, будто и то, что работало год назад, уже не работает. rolleyes.gif
Буду ждать вторую часть, нвн пока поднаскучил и я его снес.
NumberOne
Цитата(Heather @ Feb 25 2015, 23:08) *
Надеюсь, хоть что-то приятное в игре присутствует? Или сплошные несостыковки и глюки?


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

NumberOne, я очень переживаю (я ж девочко spruce_up.gif ). В любом случае, я никогда не буду довольна своим модулем на 100%.
NumberOne
Бойцы на арену уж как-то легко отделываются с животными, слегка экшана не хватает. + Зрители ничего не выкрикивают.

Сегодня вроде как багов больше не заметил, за исключением банальных опечаток.
NumberOne
В кат сцене, где болтают Хамир и Терренс слова слишком быстро идут, я не успеваю прочитывать biggrin.gif
Melisse
В чат-окне можно прочитать
Heather
Ну да, можно. Но там начинается диалог, а затем файтинг. Надо, значит, помедленнее. Вот еще 1 проблемка - я-то знаю. что они скажут, успеваю читать. А как другие воспринимают, мне трудно понять.
А вот еще вопрос к NumberOne - после этой сценки не слишком ли легкий бой? По идее, это типа босс главы, так что хотелось бы, чтобы было немного посложнее.
NumberOne
Можно и по сложнее, но не в плане его урона.

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

Спасибо, я очень долго над ней работала. Настолько долго, что успела уже возненавидеть)))
Уже заканчиваешь?
Очень интересно услышать мнение об интерлюдии (долина Афрат), кот. будет дальше. Особенно по поводу баланса и экспы.
NumberOne
Перешел в интерлюдию. Вечерком отпишусь.

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

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

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

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

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

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

Буду перепроходить, но потом - опять температура разыгралась
Melisse
Цитата
Ну да, можно. Но там начинается диалог, а затем файтинг.

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

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

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

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

Кстати, а что там с интерлюдией? Понравилась/не понравилась? Там очень много текста, но я хотела передать атмосферу...
NumberOne
Да, понравилась. В принципе доволен образом кочевников.
Heather
Вторая глава, наконец, начала продвигаться. Делаю сюжет.
Нашла очаровательную поэтессу, так что в модуле будут волшебные стихи и сказки. А может быть мы даже сможем посмотреть настоящее выступление барда!
Aiwan
Молодцы wink3.gif
Prince Corwyn
Цитата(Aiwan @ Jul 16 2015, 23:15) *
Молодцы wink3.gif

Айван,видишь-подрастает поколение,а то всё-некому передать,некому передать. scratch_one-s_head.gif
Теперь о главном.
Восхищён работой Хезер(правда сомневаюсь ,что она одна лепит модули невзирая на семейное положение))И ещё править их за год успеваетsmile.gif.
Мелиссе,Намбер Ван-как тестеры и скриптеры-тоже неплохо ..Даже очень неплохо..good.gif
Вобщем-всё нормально,ребят.Продолжайте.Удачи! victory.gif
Heather
Prince Corwyn, спасибо) Насчет сомнений, да, мне муж помогает со сложными скриптами (сейчас правда уже не так часто). Еще помог сделать пару локаций. Но весь сюжет, диалоги, персонажи сделаны мной. Только не за год, а за четыре) Ну, и я не поэт и не писатель, поэтому в игре присутствуют книги, написанные моими друзьями и еще одна за авторством Flaristan. =)

Вторая глава толком не продвигалась аж с февраля, делаю ооочень медленно.. Однако, думаю, что осенью меня накроет вдохновением и я усиленно начну все доделывать.
Aiwan
Heather, не заставляй себя, лучше совсем забей на модуль сездий в отпуск, отдохни. Иначе часть два не выйдет smile.gif Верю в тебя. Муж у тебя молодец, цени. yes3.gif
Heather
Информация для тех, кто сюда еще заглядывает (а может быть и ждет вторую часть)
Вторую часть делаю! Сейчас занимаюсь ей очень плотно и дело хорошо продвигается.
Первую главу и интерлюдию подпилила еще раз. Как только допилю баланс врагов, выложу еще раз (и пусть это будет последняя и окончательная версия!)
Если есть ждущие и к тому же желающие помочь, обращайтесь! У меня вот, например, совсем не доходят руки до магазинов, а делать их надо)))
Всем добра.
Heather
Новая, исправленная версия первой части и интерлюдии.
Скачать с гугл диска

Aiwan, если можно, поправьте, плиз, ссылку на WRG.
Aiwan
Исправил. Но залить с работы не смогу, инет тупенький. Давай с дома перезалью на сайт, а пока просто дал ссылку с сайта на новую твою версию.
пы сы. Можешь мне тюкнуть по темечку, если забуду перенести файл с гугла.
Heather
Aiwan, спасибо!
Уже можно тюкать или пока рано? biggrin.gif
Aiwan
Рано smile.gif Я работаю вахтовым методом - месяц дома, месяц на работе moil.gif
Feron
QUOTE (Heather @ Jan 7 2016, 19:06) *
Вторую часть делаю! Сейчас занимаюсь ей очень плотно и дело хорошо продвигается.


Если нужна помощь, обращайся с чем угодно. С удовольствием поддержим.
Heather
Feron, большое спасибо за предложение! А как можно с вами связаться?
Feron
QUOTE (Heather @ Mar 10 2016, 22:06) *
Feron, большое спасибо за предложение! А как можно с вами связаться?


Тут в привате (но могу не сразу увидеть) либо в скайпе в любое время. Имя в скайпе:

eveferon


Aiwan
Цитата(Heather @ Feb 27 2016, 12:59) *
Aiwan, спасибо!
Уже можно тюкать или пока рано? biggrin.gif

Обновил. prankster2.gif
Heather
Состояние 2-й главы модуля на 16.05.2016
-готовы квесты гильдий
-сделана большая часть локаций
-создано более 59 уникальных персонажей с портретами и диалогами
-создана система быстрого перемещения
-написаны более 15 оригинальных мини-книг

Спутников скорее всего не будет. Наш герой одинок и самодостаточен. biggrin.gif
Heather
Маякую тут, что я еще жива и все еще пилю вторую главу. Сроков уже никаких не ставлю))) Скорее всего, вторая глава выйдет двумя частями: основной сюжет + интерлюдия, наподобие Долины Афрат.
Всем добра!
Aiwan
yes3.gif Молодец! Ждемс!
Heather
29 и 30 ноября потестила готовую часть модуля и...
Не очень-то она и готова. 😒
Пилим дальше.
Бета-тестирование планирую на январские праздники. Соответственно готовый модуль будет выложен в феврале-марте 2017. В идеале.
Aiwan
Ничего страшного, поклонники подождут. wink3.gif
Heather
Цитата
Соответственно готовый модуль будет выложен в феврале-марте 2017. В идеале.
Переношу на май-июнь, в связи в нехваткой времени.
"Последний бой, он трудный самый", а другими словами - вторая часть готова на 95%, а оставшиеся пять упорно не хотят доделываться. crazy.gif
Heather
History of Sullivan House - Part II
доступна по ссылке https://drive.google.com/open?id=0B6cJSgmeM...MlVjR1JDenJmSjg

Aiwan
Heather, вернусь домой, залью на сайт. this.gif Вумницца! clapping.gif
Heather
Aiwan, спасибо!)
Только, можешь, пожалуйста, эту версию не выкладывать? Я залью на диск в выходные ту, где баги исправлены.
Aiwan
Я все магу! bb.gif
Aiwan
Я дома, давай ссылку. this.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.