![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#96
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
скрипты надо было в хак пихать, (IMG:style_emoticons/kolobok_light/angel.gif)
|
![]()
Сообщение
#97
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Ахахахах... Мелисса все о своем) Ну тут она права. Хотя я сам в хаки скрипты не пихаю... Но я все тестю по 20 раз после каждого скрипта, так что я уверен, что такой необходимости нема.
P.S Сегодня вечером продолжу играть, настроение нет как-то с температурой 38... |
![]()
Сообщение
#98
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
NumberOne, Спасибо тебя огромнейшее! И за прохождение, и за замечания! Ссылку на модуль, наверное, удалю пока. Чтобы косячные версии не скачивали.
И я 20 раз проверяю. но у меня плохо с абстрактным мышлением. Я-то знаю, куда идти и не всегда могу продумать, как может поступить игрок. Скорейшего выздоровления и дальнейшей безбаговой игры! Melisse, я хотела все в хак кинуть, чесслово. Но испугалась, да и поленилась. =) |
![]()
Сообщение
#99
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Дневник Гиллеспи: "покинуть родную землю и близкий людейй". Опечатка. И еще, это нормально, что эльф называет своих сородичей из Креции людьми?
Счастье для шали в знания а мне некому - нет запятой перед а. Когда представляю себя Саллену: "Мое имя - господин" после господин нет пробела Я так рад, что согласились,господин! - Тоже пробела нет. В общем тебе нужно проверить многие диалоги, где используется жетон господин (если используется) потому много где просто нет пробелов. Убил жуков в амбаре, но у Саллена не появляется диалог на завершение кв. Он только говорит: "Прошу вас, господин [Полное имя], поторопитесь! Сообщение отредактировал NumberOne - Feb 25 2015, 16:18 |
![]()
Сообщение
#100
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
Цитата В общем тебе нужно проверить многие диалоги, где используется жетон господин (если используется) потому много где просто нет пробелов. Хах, я поняла в чем дело. В моем переводе "господин" - это "лорд". И там переводчиками добавлен лишний пробел. Поэтому у меня всегда "лорд ?" получался. Но я и забыла, что перевод может быть не один и тот же. И если это так, то игроков ждет множество "мигосподинов" вместо "милордов". XD Цитата Убил жуков в амбаре, но у Саллена не появляется диалог на завершение кв Странно, на жуках стоит скрипт on death с переменной +1. Может какой-нибудь жук заныкался? Сообщение отредактировал Heather - Feb 25 2015, 16:56 |
![]()
Сообщение
#101
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Запись в журнале нечиста на руку "Но расспросить няню поподробнее" Что-то не вяжется.
И если это так, то игроков ждет множество "мигосподинов" вместо "милордов" А почему бы самой не написать милорд прямо в диалоге? Вроде как персонаж и так по умолчанию человеческой расы мужского пола. Странно, на жуках стоит скрипт 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 |
![]()
Сообщение
#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 |
![]()
Сообщение
#103
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
пет или ловушка Насчет пета не знаю, но ловушка это точно))) а как это сделать? Не знаю, но я частенько замечал, что некоторые монстры покидают, а некоторые нет. Можно схитрить и сделать немного по другому: т.к там дверь, а не триггер, то можно пожалуй вообще исключить возможность стандартного перехода из области, т.е для жуков его точно не должно быть. В свойствах двери оставить пустой строку тега назначения, а в типе выстовить голочку дверь. Получится, что перехода как такового нет. А чтобы персонаж все же мог перейти, поставить в слоте 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(){} В нем конечно много лишнего, а точнее нам ненужного. Скрипт все таки писался для другого модуля со своими нуждами. Да, человеческой расы, но пол может быть и женским. Хм, не знал насчет пола В книгах частенько встречаются мелкие ошибки. То пробел отсутствует после точки, то запятая пропущена. И еще, не используй букву Ё она в игре выглядит как , |
![]()
Сообщение
#104
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
Ух, какой гигантский! Попробую сначала самостоятельно поколдовать над этими жуками, а этот скрипт оставлю "про запас".
Думаю, не только в книгах, но и в диалогах, журнале есть опечатки. Ибо ворда не имею, чтобы проверять. Все вручную.) |
![]()
Сообщение
#105
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Сделал, если этом можно так назвать, кв с бандитами и Лиамой, вот что приметил:
Диалог Лиамы: "А эти андиты", пропущена б. Запись журнала: "убил брата на глаза", отсутствует буква х. И еще, главное замечание. Когда я говорил с бандитами, они зарезали его брата. Меня это естественно не устраивало (дух оригинальной компании нвн, где я спаситель мира всего дает о себе знать). Поэтому я, видя, что бандиты являются нейтральными, решил убить их без суда и следствия (такой уж оказался менталитет у моего персонажа, не жалеть бандюг и тем более не идти на разговоры, начал тупо атаковать ближайших), рассчитывая, что потом брат будет спасен, так и есть, брат оказался жив, только вот сюжет продолжался по сценарию, если бы он был мертв. Тут либо надо сделать несколько линий развития истории, либо как-то сделать, чтобы диалог был неизбежен (самый лучший вариант запилить кат сцену, где персонаж сразу же по открытии двери начинает диалог. Сообщение отредактировал NumberOne - Feb 25 2015, 19:47 |
![]()
Сообщение
#106
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
NumberOne, а ты квест с теми жуками в Лойа-тан так и не завершил? А то, там по завершению нас зовут в дом к старейшинам, где находится еще 1 квест + маленькая сценка.
Насчет бандитов и брата, да, запилю катсцен. Ибо этот мужик должен-таки трагично умирать, все дела. Ну а ты, конечно, молодец, что попытался его спасти. =) Это мило. |
![]()
Сообщение
#107
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
NumberOne, а ты квест с теми жуками в Лойа-тан так и не завершил? А то, там по завершению нас зовут в дом к старейшинам, где находится еще 1 квест + маленькая сценка. Да? Ну и ладно, я все-равно уже в городе... Может быть заново буду проходить, загляну. Еще я в какой-то бочке нашел книгу про Фаэрун - мелочь, но миру не соответствует. И еще, эти бандиты дались мне весьма трудно, учитывая, что я плут (мало хп, мало защиты, + Тайный удар не пашет, т.к я с целью 1х1) Мне пришлось немного схитрить, пользуясь некоторыми особенностями игры. А там еще и маг, который кидает ошеломление и прочее. Ад. Сообщение отредактировал NumberOne - Feb 25 2015, 21:11 |
![]()
Сообщение
#108
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
Я все хочу сделать такой скрипт, чтобы фаэрунские книги вообще не попадались. И в шкафах нам рандомно выпадали мои книжки. Но пока не знаю, как это делать - читаю форум про скрипты, может найду-что-то.
Это околосюжетный квест, причем с возможностью пройти его после основного сюжета. Так что я рассчитывала, что если игроку будет трудно, он отложит и подкачается. На 5 уровне вроде они нормально мочатся (хотя и с зельями и прочими баффами) |
![]()
Сообщение
#109
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Прохожу квест с артефактами, нпс теперь нейтральный, все ок. Когда доходит до боя, я его не могу убить. Просто не наносится урон, пишет оружие неэффективно. Открыл модуль и посмотреть этого нпс, обнаружил, что у него в инвентаре, во вкладке естественная экипировка надета кожа, имеющая овер 99999 эфектов в том числе и с поглощением урона. Так задумано или там тоже нужно лвл подкачать?
P.S С меня сегодня хватит, багов вроде бы больше не замечал. |
![]()
Сообщение
#110
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
NumberOne, нет, так не задумано. Я шкурку кинула, а отредактировать ее забыла. Она не должна быть такой перекачанной. Ну, в принципе, данный квест тоже доступен после сюжета, так что можно немного покачаться, купить оружие получше и забить тварь.
Ах, да. Этот квест обязателен для выполнения (точнее, тот, который следует за ним). Поэтому, если демонетко окажется совсем крутой, придется убить ее с помощью читов. Я очень извиняюсь, какие-то изменения делала на скорую руку и не проверила потом. =( Надеюсь, хоть что-то приятное в игре присутствует? Или сплошные несостыковки и глюки? Сообщение отредактировал Heather - Feb 25 2015, 22:11 |
![]() ![]()
Сообщение
#111
|
|
Level 3 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Звучит так, будто и то, что работало год назад, уже не работает. (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Буду ждать вторую часть, нвн пока поднаскучил и я его снес. |
![]()
Сообщение
#112
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
|
![]()
Сообщение
#113
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
Ner1, скорее, так: я исправила то, что не работало тогда, сломав то, что работало. Вторую часть пилю потихоньку. Задумок много, посмотрим. все ли удастся реализовать. После первой главы я многое переосмыслила и теперь работаю по плану, стараясь продумать все до мелочей.
NumberOne, я очень переживаю (я ж девочко (IMG:style_emoticons/kolobok_light/spruce_up.gif) ). В любом случае, я никогда не буду довольна своим модулем на 100%. |
![]()
Сообщение
#114
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Бойцы на арену уж как-то легко отделываются с животными, слегка экшана не хватает. + Зрители ничего не выкрикивают.
Сегодня вроде как багов больше не заметил, за исключением банальных опечаток. |
![]()
Сообщение
#115
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
В кат сцене, где болтают Хамир и Терренс слова слишком быстро идут, я не успеваю прочитывать (IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]()
Сообщение
#116
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
В чат-окне можно прочитать
|
![]()
Сообщение
#117
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
Ну да, можно. Но там начинается диалог, а затем файтинг. Надо, значит, помедленнее. Вот еще 1 проблемка - я-то знаю. что они скажут, успеваю читать. А как другие воспринимают, мне трудно понять.
А вот еще вопрос к NumberOne - после этой сценки не слишком ли легкий бой? По идее, это типа босс главы, так что хотелось бы, чтобы было немного посложнее. |
![]()
Сообщение
#118
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Можно и по сложнее, но не в плане его урона.
Сцена суда хорошо проработана |
![]()
Сообщение
#119
|
|
Level 5 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек NWN: Модмейкер История дома Салливан ![]() |
NumberOne, я не знаю, как его сложнее сделать. У него и арбалет вроде мощный и стрельба в упор... А все равно какой-то лузерский парень... Хотя, мб это я воином его легко рублю, а остальным потяжелее?..
Спасибо, я очень долго над ней работала. Настолько долго, что успела уже возненавидеть))) Уже заканчиваешь? Очень интересно услышать мнение об интерлюдии (долина Афрат), кот. будет дальше. Особенно по поводу баланса и экспы. |
![]()
Сообщение
#120
|
|
Level 4 ![]() ![]() Класс: Воин Характер: Chaotic Good Раса: Человек ![]() |
Перешел в интерлюдию. Вечерком отпишусь.
А вообще модуль мне нравится, достойно. Можешь попытаться и дать ему какие-то особые способности что-ль, не знаю, увеличить хп. У меня вопрос. Как ты сделала так, что когда нажимаешь во время диалога на вариант ответа, то он как бы засвечивается и некоторое время ничего не происходит (точнее происходит, например подходит человек) Интерлюдия. На арене. Во-первых, третий круг мне кажется для моего плута непреодолим. Постоянный стан, пара тычек и я труп. Во-вторых, на противников агрятся зрители, убивают их (надо настроить фракции). Ну а так как там в скрипте смерти такая же проверка как у жуков, мне не засчитали. Буду перепроходить, но потом - опять температура разыгралась Сообщение отредактировал NumberOne - Feb 27 2015, 18:55 |
![]() ![]() |
Текстовая версия | Сейчас: 4th July 2025 - 23:09 |