Похоже, я у вас тут поселюсь...
| |
Anttton | Дата: Четверг, 20.03.2014, 20:18 | Сообщение # 21 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, А так тебе нужно просто лечение без эффектов?) Добавлено (20.03.2014, 20:13) --------------------------------------------- void main() { effect eConPenalty = EffectHeal (APPEARANCE_TYPE_GHOUL_LORD); ApplyEffectToObject(DURATION_TYPE_INSTANT, eConPenalty, GetFirstPC()); } Вот скрипт на лечение без визуальных эффектов) Добавлено (20.03.2014, 20:18) --------------------------------------------- Сейчас поищу еще скрипт для карты)
|
|
| |
Revole | Дата: Четверг, 20.03.2014, 20:20 | Сообщение # 22 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| О, спс. Прям то, что надо. Просто появилась необходимость излечить цель, но без всяких вздымающих над целью столбов супер света)
|
|
| |
Anttton | Дата: Четверг, 20.03.2014, 20:26 | Сообщение # 23 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, // 28. Reveals player map of area when map item is acquired if (sItemTag == "M1_Map_M1Q2A") ExploreAreaForPlayer(GetObjectByTag("Map_M1Q2A"),oPC); if (sItemTag == "M1_Map_M1Q3A") ExploreAreaForPlayer(GetObjectByTag("Map_M1Q3A"),oPC); if (sItemTag == "M1_Map_M1Q4A") ExploreAreaForPlayer(GetObjectByTag("Map_M1Q4A"),oPC); if (sItemTag == "M1Q04IAUCTION") ExploreAreaForPlayer(GetObjectByTag("Map_M1Q4A"),oPC); if (sItemTag == "M1_Map_M1Q5A") ExploreAreaForPlayer(GetObjectByTag("Map_M1Q5A"),oPC);
это ставь на модуль онакьюреитем, "M1_Map_M1Q2A" тег карты, Map_M1Q2A тег арены)
|
|
| |
Revole | Дата: Четверг, 20.03.2014, 20:40 | Сообщение # 24 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Anttton ( ) это ставь на модуль онакьюреитем В моем случае предметы вообще не нужны.
ExploreAreaForPlayer(GetObjectByTag("Map_M1Q2A"),oPC) - а вот за этот кусочек спасибо, его-то мне и не хватало.
|
|
| |
Anttton | Дата: Четверг, 20.03.2014, 20:43 | Сообщение # 25 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, )
|
|
| |
Revole | Дата: Пятница, 21.03.2014, 18:05 | Сообщение # 26 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| А как реализовать респ спутника после его смерти?
Добавлено (21.03.2014, 18:05) --------------------------------------------- И еще 1 вопросик, пока я тута: как сделать проверку на то, видит ли определенный персонаж игрока (например игрок выпел зелье невидимости или заюзал навык)?
Сообщение отредактировал Revole - Пятница, 21.03.2014, 19:00 |
|
| |
Anttton | Дата: Пятница, 21.03.2014, 20:11 | Сообщение # 27 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, сейчас кину скрипт) Добавлено (21.03.2014, 20:09) --------------------------------------------- Revole, void main() { object oSelf = OBJECT_SELF; object oPC = GetFirstPC(); object oItem = GetFirstItemInInventory(oSelf); int iHide = 20 + GetSkillRank(SKILL_HIDE, oPC); int i, iUd = 20; object oNPC = GetNearestObject(OBJECT_TYPE_CREATURE, oPC, i);
if (oItem == OBJECT_INVALID) return; // Åñëè óæå íåò ïðåäìåòîâ while (GetIsObjectValid(oNPC)) { if (!GetObjectSeen(oPC, oNPC) || GetIsDead(oNPC) || GetLevelByClass(CLASS_TYPE_ANIMAL, oNPC) >= TRUE || GetLevelByClass(CLASS_TYPE_COMMONER, oNPC)== FALSE) {i++; oNPC = GetNearestObject(OBJECT_TYPE_CREATURE, oPC, i);} else break; } float fFas = GetFacing(oNPC); location Loc = GetLocation(oNPC); float fTime = GetDistanceBetween(oNPC, oPC); if (fTime < 8.0) fTime = 8.0; if(oNPC==OBJECT_INVALID || fTime > 15.0) { AssignCommand(oPC, SpeakString("Íèêòî íå âèäèò... Ìîæíî áðàòü...")); return; } if (GetStealthMode(oPC)==STEALTH_MODE_ACTIVATED) { if(iHide > 20) iUd = 40; if(iHide > 24) iUd = 60; if(iHide > 28) iUd = 80; if(iHide > 30) iUd = 100; if(Random(100) < iUd) { AssignCommand(oPC, SpeakString("Íèêòî íå âèäèò... Ìîæíî áðàòü...")); DelayCommand(0.5,FloatingTextStringOnCreature("<c ó >Ìàñêèðîâêà óäàëàñü!",oPC)); return; } else DelayCommand(0.5,FloatingTextStringOnCreature("<cþa >Ìàñêèðîâêà íå óäàëàñü!",oPC)); }
AssignCommand(oPC, ClearAllActions()); AssignCommand(oPC, ActionWait(fTime*2)); AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC))); // ðàçáëîêèðîâàòü DelayCommand(0.1, SetCommandable(FALSE, oPC)); // çàáëîêèðîâàòü AssignCommand(oNPC, ClearAllActions()); AssignCommand(oNPC, SetFacingPoint(GetPosition(oPC))); AssignCommand(oNPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_NO, oNPC))); AssignCommand(oNPC, ActionSpeakString("Ýé, íå òðîãàé ýòî!")); AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL, 1.0, 2.0)); AssignCommand(oNPC, ActionForceMoveToObject(oPC, TRUE, 1.0, fTime/4)); AssignCommand(oNPC, ActionDoCommand(AssignCommand(oSelf, ActionStartConversation(oPC, "konteyner")))); AssignCommand(oNPC, ActionSpeakString("Ýòî íå òâîå... Óõîäè!")); AssignCommand(oNPC, ActionWait(2.0)); AssignCommand(oNPC, ActionForceMoveToLocation(Loc, FALSE, fTime/2)); AssignCommand(oNPC, ActionDoCommand(DelayCommand(0.3, SetFacing(fFas)))); AssignCommand(oNPC, ActionDoCommand(SetCommandable(TRUE, oNPC))); // ðàçáëîêèðîâàòü AssignCommand(oNPC, ActionDoCommand(SetCommandable(TRUE, oPC))); // ðàçáëîêèðîâàòü DelayCommand(0.1, SetCommandable(FALSE, oNPC)); // çàáëîêèðîâàòü } Вот тут где-то есть проверка видит ли ближайщий нпс, ставится на онюзед и оноупен, при воровстве из ящика нпс прогоняет героя Добавлено (21.03.2014, 20:11) --------------------------------------------- //::////////////////////////////////////////////// //::////////////////////////////////////////////////// //:: Modified By: Deva Winblood //:: Modified On: April 9th, 2008 //:: Added Support for Dying Wile Mounted //:://///////////////////////////////////////////////
#include "nw_i0_generic" #include "nw_i0_plot" #include "x3_inc_horse"
// ----------------------------------------------------------------------------- // Georg, 2003-10-08 // Rewrote that jump part to get rid of the DelayCommand Code that was prone to // timing problems. If want to see a really back hack, this function is just that. // ----------------------------------------------------------------------------- void WrapJump(string sTarget) { if (GetIsDead(OBJECT_SELF)) { // * Resurrect and heal again, just in case ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectResurrection(), OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF);
// * recursively call self until we are alive again DelayCommand(1.0f,WrapJump( sTarget)); return; } // * since the henchmen are teleporting very fast now, we leave a bloodstain on the ground object oBlood = CreateObject(OBJECT_TYPE_PLACEABLE,"plc_bloodstain", GetLocation(OBJECT_SELF));
// * Remove blood after a while DestroyObject(oBlood,30.0f);
// * Ensure the action queue is open to modification again SetCommandable(TRUE,OBJECT_SELF);
// * Jump to Target JumpToObject(GetObjectByTag(sTarget), FALSE);
// * Unset busy state ActionDoCommand(SetAssociateState(NW_ASC_IS_BUSY, FALSE));
// * Make self vulnerable SetPlotFlag(OBJECT_SELF, FALSE);
// * Set destroyable flag to leave corpse DelayCommand(6.0f, SetIsDestroyable(TRUE, TRUE, TRUE));
// * if mounted make sure dismounted if (HorseGetIsMounted(OBJECT_SELF)) { // dismount DelayCommand(3.0,AssignCommand(OBJECT_SELF,HorseDismountWrapper())); } // dismount
}
// ----------------------------------------------------------------------------- // Georg, 2003-10-08 // Changed to run the bad recursive function above. // ----------------------------------------------------------------------------- void BringBack() { object oSelf = OBJECT_SELF;
SetLocalObject(oSelf,"NW_L_FORMERMASTER", GetMaster()); RemoveEffects(oSelf); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectResurrection(), OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF);
object oWay = GetObjectByTag("NW_DEATH_TEMPLE");
if (GetIsObjectValid(oWay) == TRUE) { // * if in Source stone area, respawn at opening to area if (GetTag(GetArea(oSelf)) == "M4Q1D2") { DelayCommand(1.0, WrapJump("M4QD07_ENTER")); } else { DelayCommand(1.0, WrapJump(GetTag(oWay))); } } else { WriteTimestampedLogEntry("UT: No place to go"); }
}
void main() { SetLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT","nw_ch_ac7"); if (HorseHandleDeath()) return; DeleteLocalString(OBJECT_SELF,"sX3_DEATH_SCRIPT");
// * This is used by the advanced henchmen // * Let Brent know if it interferes with animal // * companions et cetera if (GetIsObjectValid(GetMaster()) == TRUE) { object oMe = OBJECT_SELF; if (GetAssociateType(oMe) == ASSOCIATE_TYPE_HENCHMAN // * this is to prevent 'double hits' from stopping // * the henchmen from moving to the temple of tyr // * I.e., henchmen dies 'twice', once after leaving your party || GetLocalInt(oMe, "NW_L_HEN_I_DIED") == TRUE) { // ----------------------------------------------------------------------------- // Georg, 2003-10-08 // Rewrote code from here. // -----------------------------------------------------------------------------
SetPlotFlag(oMe, TRUE); SetAssociateState(NW_ASC_IS_BUSY, TRUE); AddJournalQuestEntry("Henchman", 99, GetMaster(), FALSE, FALSE, FALSE); SetIsDestroyable(FALSE, TRUE, TRUE); SetLocalInt(OBJECT_SELF, "NW_L_HEN_I_DIED", TRUE); BringBack();
// ----------------------------------------------------------------------------- // End of rewrite // -----------------------------------------------------------------------------
} else // * I am a familiar, give 1d6 damage to my master if (GetAssociate(ASSOCIATE_TYPE_FAMILIAR, GetMaster()) == OBJECT_SELF) { // April 2002: Made it so that familiar death can never kill the player // only wound them. int nDam =d6(); if (nDam >= GetCurrentHitPoints(GetMaster())) { nDam = GetCurrentHitPoints(GetMaster()) - 1; } effect eDam = EffectDamage(nDam); FloatingTextStrRefOnCreature(63489, GetMaster(), FALSE); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, GetMaster()); } } } ПРи смерти спутник появляется в определенном месте
|
|
| |
Revole | Дата: Пятница, 21.03.2014, 20:45 | Сообщение # 28 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Anttton ( ) ПРи смерти спутник появляется в определенном месте Я интересуюсь как это реализовано в Рыцарской Саге (там после смерти спутник дохлый валяется на земле, пока не воскреснешь саморучно) А вот за первый скрипт спасибо, я, кажется, нашел то, что надо.
|
|
| |
Anttton | Дата: Суббота, 22.03.2014, 12:05 | Сообщение # 29 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, А, так это легко) Потом скрипт кину) Сейчас спать ушел) Добавлено (22.03.2014, 12:05) --------------------------------------------- Revole, void main() { string sDeath = "ß óìèðàþ... <c ó >Âîñêðåñèòå ñêîðåé!</c> A-a-a!"; if (Random(2) == 0) PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT); else PlayAnimation(ANIMATION_LOOPING_DEAD_BACK); SetIsDestroyable(FALSE, TRUE, TRUE); PlayVoiceChat(VOICE_CHAT_DEATH); if (GetTag(OBJECT_SELF) == "TUZIK") { sDeath = "Óóóóó....."; SendMessageToPC(GetFirstPC(), "Âîé óìèðàþùåãî Òóçèêà ïðîñòî íåâûíîñèì... <c ó >Ìîæåò ñòîèò åãî âîñêðåñèòü?</c>"); } DelayCommand(0.1, SpeakString(sDeath)); } Скрипт на "Тузике" в саге)
|
|
| |
Revole | Дата: Суббота, 22.03.2014, 12:34 | Сообщение # 30 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата Anttton ( ) Скрипт на "Тузике" в саге) Это случаем не скрипт смерти? Ну, который называется "rs_death"?
|
|
| |
Anttton | Дата: Суббота, 22.03.2014, 13:11 | Сообщение # 31 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, да)
|
|
| |
Revole | Дата: Суббота, 22.03.2014, 15:14 | Сообщение # 32 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Это не то(
Похоже, без Геннадия не обойтись
|
|
| |
Anttton | Дата: Суббота, 22.03.2014, 17:20 | Сообщение # 33 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, ВКЛЮЧИ ТУЛСЕТ, НАЖМИ НПС, ТАМ ПОСТАВЬ "тОМИ" У НЕГО ЕСТЬ СКРИПТ
|
|
| |
Revole | Дата: Суббота, 22.03.2014, 17:34 | Сообщение # 34 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Ты меня не понял. В общем, проехали, я нашел способ сделать по своему.
|
|
| |
Anttton | Дата: Суббота, 22.03.2014, 20:28 | Сообщение # 35 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Revole, Ясно)
|
|
| |
alyonalakshmi | Дата: Понедельник, 24.03.2014, 13:46 | Сообщение # 36 |
Кавалерист
Группа: Пользователи
Сообщений: 98
Репутация: 7
Статус: Offline
| Привет всем
|
|
| |
Remm | Дата: Понедельник, 24.03.2014, 13:50 | Сообщение # 37 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Чтобы труп не исчезал и был юзабельным нужна функция SetIsDestroyable(FALSE, TRUE, TRUE); А уж в каком скрипте она применяется к существу, так это вам решать...
Модмейкер Рыцарская Сага
|
|
| |
Revole | Дата: Вторник, 01.04.2014, 18:19 | Сообщение # 38 |
Алебардщик
Группа: Пользователи
Сообщений: 31
Репутация: 1
Статус: Offline
| Цитата alyonalakshmi ( ) Привет всем И тебе не хворать, коли не шутишь.Добавлено (01.04.2014, 18:19) --------------------------------------------- Уф! Помоги пожалуйста, не знаю как записать проверку: эм, я даже не знаю как кратко записать на словах, придется подробно: игрок юзает предмет на цель, идет проверка на определенный тег этой цели...
|
|
| |
Remm | Дата: Суббота, 05.04.2014, 08:33 | Сообщение # 39 |
Капитан
Группа: Администраторы
Сообщений: 269
Репутация: 10
Статус: Offline
| Цитата Revole ( ) игрок юзает предмет на цель Типа навел курсор и определил тег? Я не знаю такой проверки...
Модмейкер Рыцарская Сага
|
|
| |
Anttton | Дата: Суббота, 05.04.2014, 14:38 | Сообщение # 40 |
Алебардщик
Группа: Пользователи
Сообщений: 28
Репутация: 1
Статус: Offline
| Мне кажется можно сделать так на тригере) Я вроде гдето видел на тригере)
|
|
| |
|