Похоже, я у вас тут поселюсь...
| |
Revole | Дата: Понедельник, 17.02.2014, 18:03 | Сообщение # 1 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Приветствую всех...
Так как на форум http://knighttale.mybb3.ru/ видать никто не заходит, решил создать эту тему здесь... Всё ещё делаю свой модуль, но блин тыщу раз переделывал и удалял, сейчас опять решил заняться им, по серьезному. И накопились таких вот два вопроса:
1. Как задать определенное время суткам. Мне надо, что бы запустился скрипт, который установит определенный час (например час ночи). Ну, или просто сделает ночь.
2. Проверку на наличие спутника у персонажа (я хз засчитываются ли фамильяры спутниками или нет, но они по сути не в счет).
3. Можно ли как-то скриптом завершить режим боя?
4. Проверка на наличие враждебных мобов в локации. Слот ХБ на локации
П.С Хотелось бы выразить большую благодарность Геннадию, т.к с его помощи и раздела "игроделу" я научился чувствовать себя в тулсете более менее свободно.
Сообщение отредактировал Revole - Понедельник, 17.02.2014, 20:00 |
|
| |
Remm | Дата: Вторник, 18.02.2014, 09:21 | Сообщение # 2 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Привет! Мы перебрались на Юкос, тут вроде форум нормальный. Сейчас под рукой нет тулсета, вечером отвечу на все вопросы. Цитата Revole ( ) 2. Проверку на наличие спутника у персонажа (я хз засчитываются ли фамильяры спутниками или нет, но они по сути не в счет). Можно делать все проверки на наличие спутникоф, фамильяров, подконтрольных... Цитата Revole ( ) 3. Можно ли как-то скриптом завершить режим боя? Я рекомендую наш скрипт из саги 100 раз проверенный лежит на этой странице: http://remmgen.narod.ru/tmonster.html //::////////////////////////////////////////////////// //:: Прекращение атаки //:: File name: end_attak //:: Слот: OnDamaged, OnCombatRoundEnd, OnHeartBeat //::////////////////////////////////////////////////// Остальное вечером по Москве..
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Вторник, 18.02.2014, 10:35 | Сообщение # 3 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Remm ( ) Я рекомендую наш скрипт из саги 100 раз проверенный лежит на этой странице: http://remmgen.narod.ru/tmonster.html //::////////////////////////////////////////////////// //:: Прекращение атаки //:: File name: end_attak //:: Слот: OnDamaged, OnCombatRoundEnd, OnHeartBeat //:://////////////////////////////////////////////////
То, что надо! Теперь не надо будет ждать 10 секунд, прежде, чем начать диалог. Мелочь - а приятно.
Добавлено (18.02.2014, 10:35) --------------------------------------------- С анимацией проблемы до сих пор. ANIMATION_LOOPING_DEAD_FRONT (NPC падает на колени, а потом лицом вниз – умер). Прочитал про анимацию в игроделу, вроде бы понял, но в игре выходит вообще не так. В диалоге нпс должен вот так упасть на колени, но при этом рожой не шмякнутся в землю, т.е продолжать стоять на коленях и потом встать, не падая вообще. Но у меня выходит только то, что он встаёт на колени, а потом еще падает и лежит рожой в грязи столько времени, сколько он должен был стоять на коленях. Не знаю как быть
Сообщение отредактировал Revole - Вторник, 18.02.2014, 10:38 |
|
| |
Remm | Дата: Вторник, 18.02.2014, 20:18 | Сообщение # 4 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Цитата Revole ( ) 1. Как задать определенное время суткам. Мне надо, что бы запустился скрипт, который установит определенный час (например час ночи). Ну, или просто сделает ночь. Задаем нужное время функцией: SetTime(int nHour,int nMinute,int nSecond,int nMillisecond)
например:
Код int nHour = GetTimeHour(); if(nHour > 21) SetTime(8,0,0,0); // если 9 вечера, то задаем 8 часов утра Цитата Revole ( ) 2. Проверку на наличие спутника у персонажа (я хз засчитываются ли фамильяры спутниками или нет, но они по сути не в счет). object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC); object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION,oPC); object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oPC); object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED,oPC); object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oPC);
Это все что может быть у перса А вот сама проверкаКод void main() { object oPC = GetFirstPC(); object oNPC = GetFirstObjectInArea(oPC);
while (GetIsObjectValid(oNPC)) { if(oNPC == GetAssociate(ASSOCIATE_TYPE_HENCHMAN,oPC)) AssignCommand(oPC, SpeakString("Ìîé ñïóòíèê!")); oNPC = GetNextObjectInArea(oPC); } } проверка врагов на слот НБ Код void main() { object oPC = GetFirstPC(); object oSelf = OBJECT_SELF;
if(GetArea(oPC) != GetArea(oSelf)) return; // если ПС нет в локе object oBrag = GetFirstObjectInArea();
while (GetIsObjectValid(oBrag)) // Проверем враждебных NPC { if(GetIsEnemy(oPC,oBrag) && GetObjectType(oBrag)== OBJECT_TYPE_CREATURE) return; oBrag = GetNextObjectInArea(); } //тут пишем код что должно произойти когда нет врагов }
|
|
| |
Revole | Дата: Среда, 19.02.2014, 08:30 | Сообщение # 5 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Благодарю, особенно за проверку на HБ, а то в него вся разработка уперлась!
Добавлено (18.02.2014, 21:35) --------------------------------------------- Цитата Remm ( ) проверка врагов на слот НБ
Забыл спросить, мертвые мобы учитываются? У меня скрипты в слоте death стоят, чтобы моб мертвый лежал.Добавлено (19.02.2014, 08:30) --------------------------------------------- Эх... мертвых мобов он все-таки тоже учитывает( А жаль...
Тэкс, придется искать замену...
Сообщение отредактировал Revole - Вторник, 18.02.2014, 21:36 |
|
| |
Remm | Дата: Среда, 19.02.2014, 09:47 | Сообщение # 6 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Так в чем проблема, сделай еще одну проверку мертвый ли твой моб...
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Среда, 19.02.2014, 17:28 | Сообщение # 7 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Remm ( ) сделай еще одну проверку мертвый ли твой моб...
Не знаю как
Да и потом я уже по другому начал делать...Добавлено (19.02.2014, 12:21) ---------------------------------------------
Цитата Remm ( ) сделай еще одну проверку мертвый ли твой моб...
Подскажешь как? А то мой новопридуманный способ накрылся медным тазом...Добавлено (19.02.2014, 12:41) ---------------------------------------------
Код void main() { object oPC = GetFirstPC(); object oSelf = OBJECT_SELF;
if(GetArea(oPC) != GetArea(oSelf)) return; // ???? ?? ??? ? ???? object oBrag = GetFirstObjectInArea();
while (GetIsObjectValid(oBrag)) // ???????? ?????????? NPC { if(GetIsEnemy(oPC,oBrag) && GetObjectType(oBrag)== OBJECT_TYPE_CREATURE && GetIsDead(oBrag) == FALSE) return; oBrag = GetNextObjectInArea(); } DelayCommand(1.5, AssignCommand(oPC, SpeakString("Âðîäå áû íè÷åãî íå çàáûë..."))); }
Ты имел ввиду так?Добавлено (19.02.2014, 17:28) ---------------------------------------------
Код void main() { object oTarget = GetLastAttacker();
AssignCommand(OBJECT_SELF, ActionCastSpellAtObject(SPELL_FEAR, oTarget)); }
Слот "АтакованФизачески". Вроде все правильно, но почему он не кастует нужный спел?
|
|
| |
Remm | Дата: Четверг, 20.02.2014, 08:40 | Сообщение # 8 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Цитата Revole ( ) Ты имел ввиду так? Да, это именно то! Проверяем враждебность, существо и жизнь. Должно работать...
Цитата Revole ( ) Слот "АтакованФизачески". Вроде все правильно, но почему он не кастует нужный спел? Вроде код правильно записан... Попробуй еще так записать. Код void main() { object oTarget = GetLastAttacker();
AssignCommand(OBJECT_SELF, ActionCastSpellAtObject(SPELL_FEAR, oTarget, METAMAGIC_QUICKEN, TRUE)); }
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Суббота, 22.02.2014, 07:53 | Сообщение # 9 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Странно, тоже не кастует(
Добавлено (22.02.2014, 07:53) --------------------------------------------- Здорова еще раз. Можешь с небольшим скрипткиком помочь? А то у меня не получается.
Ситуация такая: есть триггер, мне нужно что-бы за пределы этого тригера никто не выходил. Для игрока: если вышел за предел - мгновенная смерть с системным сообщением в чате. Для NPC: если вышел за предел - не смотря на бой/диалог/какое-либо другое действие сразу же бежит к определенной точке.
Сообщение отредактировал Revole - Суббота, 22.02.2014, 07:54 |
|
| |
Remm | Дата: Суббота, 22.02.2014, 08:13 | Сообщение # 10 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Код void main() { object oPC = GetEnteringObject(); object oWP = GetNearestObjectByTag("LOC"); effect eDeath = EffectDeath();
if(GetIsPC(oPC)) { ApplyEffectToObject(DURATION_TYPE_INSTANT,eDeath,oPC); SpeakString("СМЕРТЬ"); } else { AssignCommand(oPC, ClearAllActions(TRUE)); AssignCommand(oPC, ActionForceMoveToObject(oWP, TRUE, 1.0, 20.0)); AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC))); DelayCommand(0.1, SetCommandable(FALSE, oPC)); // заблокировать DelayCommand(20.5, SetCommandable(TRUE, oPC)); // разблокировать } }
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Воскресенье, 23.02.2014, 10:42 | Сообщение # 11 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Благодарю
Добавлено (23.02.2014, 10:18) --------------------------------------------- Помоги со скриптом, если не особо занят.
Ситуация такая: босс, скажем объект oBOSS, перестает атаковать (в это время игрок тоже останавливает атаку и начинает пошатывается как пьяный в течении 6 секунд и у него над головой кружит эффект ошеломления). потом босс делает вид, что произносит какое-то заклинание и говорит текст. Все, все снова продолжают бой.Добавлено (23.02.2014, 10:42) --------------------------------------------- И еще: как удалить сразу много объектов с одинаковым тегом в один миг?
Сообщение отредактировал Revole - Воскресенье, 23.02.2014, 10:31 |
|
| |
Remm | Дата: Понедельник, 24.02.2014, 09:04 | Сообщение # 12 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Цитата Revole ( ) И еще: как удалить сразу много объектов с одинаковым тегом в один миг? Запусти цикл с проверкой тега и численным оператором. Если тег совпал, увеличиваем оператор на единичку... На босса и героя можно эффект паралича кинуть... Ну и на всех кто рядом и проиграть сценку. Могу вечером помочь, но ты хоть шаблон скрипта боса кинь...
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Понедельник, 24.02.2014, 17:46 | Сообщение # 13 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Remm ( ) Запусти цикл с проверкой тега и численным оператором. Если тег совпал, увеличиваем оператор на единичку...
Я в принципе так и думал, но я не знаю, как это записать.
Цитата Remm ( ) скрипта боса кинь
Вот скрипт: игрок наступает на триггер и пошло поехало.
#include "nw_i0_2q4luskan" void main() { object oSelf = OBJECT_SELF; object oPC = GetEnteringObject(); object oPC1 = GetFirstPC(); object oUmir = GetObjectByTag("Umir"); object oStan = GetObjectByTag("Stan"); object oRat = GetObjectByTag("rat"); object oOP = GetObjectByTag("imp_dlal_chasovoi1"); object oBOSS = GetObjectByTag("boss_a"); object oSound = GetObjectByTag("sound_stena_ogn");
object oTargetPC = GetWaypointByTag("WP_PC"); location lTargetPC = GetLocation(oTargetPC);
object oTargetOGN = GetWaypointByTag("spawn_stena_ogn"); location lTargetOGN = GetLocation(oTargetOGN);
effect ePar = EffectCutsceneParalyze(); float fDurationPAR = 8.2;
int nHeal = GetMaxHitPoints(oBOSS) - GetCurrentHitPoints(oBOSS); effect eHeal = EffectHeal(nHeal);
effect eVol = EffectVisualEffect(VFX_FNF_LOS_NORMAL_10);// Волна оглушения. Хотя можно конечно было найти и лучше эффект, но я не знаю как.
if (!GetIsPC(oPC)) return; if (GetLocalInt(oPC1, "a_ataka1v") == 4) { DelayCommand(0.5, FadeToBlack(oPC, FADE_SPEED_FASTEST)); //Занавес DelayCommand(2.0, AssignCommand(oPC, ClearAllActions(TRUE)));//Отменяем действия игрока DelayCommand(2.0, SetCutsceneMode(oPC, TRUE)); // Сцена DelayCommand(5.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM)); //Убираем занавес DelayCommand(3.0, AssignCommand(oPC, ActionJumpToLocation(lTargetPC))); //Телепортируем игрока к месту рядом с боссом (типо подбежал) DelayCommand(7.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oBOSS)); //Отхиливаем босса DelayCommand(9.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVol, oBOSS));//Босс как бы кидает оглушающую волну
*И тут все НПС (oStan, oUmir, oRat, oOP, oCH) прекращают атаку и игрок вместе с ними пьяно покачиваются, а у них всех над головам эффект какой-нибудь, чтобы игрок точно видел, что они как бы под контролем у босса*
*А босс тем временем прекращает атаку и произносит какое-нибудь заклинание (чисто для вида)*
//Тут я реализую свою задумку DelayCommand(13.0, AssignCommand(oBOSS, SpeakString("Ха-ха-ха! Ловушка! Гхрыы!"))); //Босс как бы издевательски смеется DelayCommand(15.0, SetCutsceneMode(oPC, FALSE)); DestroyObject(GetObjectByTag("rol_sorc1")); } if (GetLocalInt(oPC1, "a_ataka1v") == 0) { SetLocalInt(oPC, "a_ataka1v", 1); DelayCommand(1.5, AssignCommand(oRat, SpeakString("В бой, братия! Во славу Велемира!"))); DelayCommand(6.0, AssignCommand(oRat, SpeakString("Вы вовремя прибыли! Без вас мы не справимся..."))); } }Добавлено (24.02.2014, 17:46) --------------------------------------------- И еще я такую странную вещь заметил: в моем модуле за убийство мобов не дается опыт... КАК ТАК?
Сообщение отредактировал Revole - Понедельник, 24.02.2014, 16:24 |
|
| |
Remm | Дата: Понедельник, 24.02.2014, 19:07 | Сообщение # 14 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Код void main() { int nNth; object oVrag = GetObjectByTag("NAEMNIK_VRAG", nNth);
for(nNth=0; nNth <= 100; nNth++) { if(GetIsObjectValid(oVrag)) { DestroyObject((oVrag)); oVrag = GetObjectByTag("NAEMNIK_VRAG", nNth); } else break; } } Это на 100 А это на всех: Код void main() { int nNth; object oVrag = GetObjectByTag("NAEMNIK_VRAG", nNth);
while(GetIsObjectValid(oVrag)) { DestroyObject((oVrag)); nNth++; oVrag = GetObjectByTag("NAEMNIK_VRAG", nNth); } } Ну и бос. Тут я записал отдельной функцией остановку.. Код #include "nw_i0_2q4luskan" void BOSS() { object oPC = GetFirstPC(); object oNPC = GetFirstObjectInArea(oPC); effect eCatPar = EffectCutsceneParalyze(); // Эффект парализации effect eDIS = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);// Замешательство птички float Time = 5.0;//Время парализации
while (GetIsObjectValid(oNPC)) { if(GetObjectType(oNPC)== OBJECT_TYPE_CREATURE) { AssignCommand(oNPC, ClearAllActions()); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCatPar, oNPC, Time); if(GetTag(oNPC) != "boss_a")//Кроме БОССА ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDIS, oNPC, Time); } oNPC = GetNextObjectInArea(oPC); } } ////////////////////////////////////////////// void main() { object oSelf = OBJECT_SELF; object oPC = GetEnteringObject(); object oPC1 = GetFirstPC(); object oUmir = GetObjectByTag("Umir"); object oStan = GetObjectByTag("Stan"); object oRat = GetObjectByTag("rat"); object oOP = GetObjectByTag("imp_dlal_chasovoi1"); object oBOSS = GetObjectByTag("boss_a"); object oSound = GetObjectByTag("sound_stena_ogn");
object oTargetPC = GetWaypointByTag("WP_PC"); location lTargetPC = GetLocation(oTargetPC);
object oTargetOGN = GetWaypointByTag("spawn_stena_ogn"); location lTargetOGN = GetLocation(oTargetOGN);
effect ePar = EffectCutsceneParalyze(); float fDurationPAR = 8.2;
int nHeal = GetMaxHitPoints(oBOSS) - GetCurrentHitPoints(oBOSS); effect eHeal = EffectHeal(nHeal);
effect eVol = EffectVisualEffect(VFX_FNF_LOS_NORMAL_10);// Волна оглушения. Хотя можно конечно было найти и лучше эффект, но я не знаю как.
if (!GetIsPC(oPC)) return; if (GetLocalInt(oPC1, "a_ataka1v") == 4) { DelayCommand(0.5, FadeToBlack(oPC, FADE_SPEED_FASTEST)); //Занавес DelayCommand(2.0, AssignCommand(oPC, ClearAllActions(TRUE)));//Отменяем действия игрока DelayCommand(2.0, SetCutsceneMode(oPC, TRUE)); // Сцена DelayCommand(5.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM)); //Убираем занавес DelayCommand(3.0, AssignCommand(oPC, ActionJumpToLocation(lTargetPC))); //Телепортируем игрока к месту рядом с боссом (типо подбежал) DelayCommand(7.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oBOSS)); //Отхиливаем босса DelayCommand(9.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVol, oBOSS));//Босс как бы кидает оглушающую волну
DelayCommand(10.0, BOSS());
/*И тут все НПС (oStan, oUmir, oRat, oOP, oCH) прекращают атаку и игрок вместе с ними пьяно покачиваются, а у них всех над головам эффект какой-нибудь, чтобы игрок точно видел, что они как бы под контролем у босса*
*А босс тем временем прекращает атаку и произносит какое-нибудь заклинание (чисто для вида)*/
//Тут я реализую свою задумку DelayCommand(13.0, AssignCommand(oBOSS, SpeakString("Ха-ха-ха! Ловушка! Гхрыы!"))); //Босс как бы издевательски смеется DelayCommand(15.0, SetCutsceneMode(oPC, FALSE)); DestroyObject(GetObjectByTag("rol_sorc1")); } if (GetLocalInt(oPC1, "a_ataka1v") == 0) { SetLocalInt(oPC, "a_ataka1v", 1); DelayCommand(1.5, AssignCommand(oRat, SpeakString("В бой, братия! Во славу Велемира!"))); DelayCommand(6.0, AssignCommand(oRat, SpeakString("Вы вовремя прибыли! Без вас мы не справимся..."))); } }
Модмейкер Рыцарская Сага
|
|
| |
Remm | Дата: Понедельник, 24.02.2014, 19:15 | Сообщение # 15 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Цитата Revole ( ) И еще я такую странную вещь заметил: в моем модуле за убийство мобов не дается опыт... КАК ТАК? Проверь шкалу получения опыта в свойствах модуля...
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Понедельник, 24.02.2014, 19:24 | Сообщение # 16 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Remm ( ) Проверь шкалу получения опыта в свойствах модуля...
Ахахаха, так вот за что отвечает та хрень, которую я от любопытства крутил в самом начале... На сколько она должна стоять?
|
|
| |
Remm | Дата: Вторник, 25.02.2014, 08:47 | Сообщение # 17 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Цитата Revole ( ) На сколько она должна стоять? Всё зависит от модуля и целей. Т.е. уровень героя для прохождения, опыт за квесты...
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Четверг, 20.03.2014, 19:14 | Сообщение # 18 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| И снова здравствуй. После небольшого отдыха решил продолжить труд. Были у меня тут два очень старых вопросов, которые я все забывал спросить:
1. Как полностью отхилить цель (без визуальных эффектов)
2. Как сделать мини карту разведанной.
Заранее благодарен.
|
|
| |
Anttton | Дата: Четверг, 20.03.2014, 19:37 | Сообщение # 19 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, Возьми скрипты из кампании, там все есть)
|
|
| |
Revole | Дата: Четверг, 20.03.2014, 20:06 | Сообщение # 20 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Anttton ( ) Revole, Возьми скрипты из кампании, там все есть) Искал уже, но это слишком муторно + я английский нифига не знаю, да еще и сами компании открыть не могу по кое-какой причине. К тому же я нашёл скрипт на лечение, но он с эффектом, а еще там куча текста, в общем я не понял как убрать эффект и оставить просто лечение благополучным способом.
А по второму пункту я вообще ничего не нашел.
|
|
| |
|