![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]() ![]()
Сообщение
#2486
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Кто-нибудь сможет выложить скрипт, чтобы после использования предмета срабатывал нужный мне скрипт.
Или дать ссылку, где это уже написано. |
![]()
Сообщение
#2487
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Для срабатывания скрипта при использовани предмета ни какой скрипт писать не надо, есть специальное событие - OnActivateItem в св-вах модуля. Вот туда и нужно вписать скрипт, который будет срабатывать при использовании предмета. Можешь пасмотреть еще ТУТ
|
![]() ![]()
Сообщение
#2488
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Понятно
Спасибо! Я пытался написать скрипт по той схеме но у меня нечего не вышло. NSS void main()
{ object oActivator = GetItemActivator(); object oActivated = GetItemActivated(); object oPC = GetEnteringObject(); if ("item_1" == GetTag(oActivated)) { effect eDamage = EffectDamage(1); string sString="Текст"; ActionDoCommand(AssignCommand(oPC, ActionSpeakString(sString))); } } |
![]()
Сообщение
#2489
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Артём, ты меня извини, конечно, но ты вообще читаешь, для чего служат те или иные функции, прежде чем их использовать? Как я понял из скрипта, ты хотел нанести урон цели, и при этом цель должна что-то сказать. Скрипт такой:
NSS void main()
{ object oPC = GetItemActivator(); object oItem = GetItemActivated(); object oTarget = GetItemActivatedTarget(); // не GetEnteringObject(); Прочитай про эту функцию string sItem = GetTag(oItem); if ("item_1" == sItem) { AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget)); AssignCommand(oTarget, ActionSpeakString("Текст")); } } |
![]() ![]()
Сообщение
#2490
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Прошу прощение за глупость.[
Скрипт я написал, не проверял, я просто хотел привести пример. Сам скрипт такой. NSS void main() { object oActivator = GetItemActivator(); object oActivated = GetItemActivated(); object oTarget = GetFirstPC(); location lSparks = GetLocation(oTarget); if ("item_1" == GetTag(oActivated)) { DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect (VFX_IMP_DIVINE_STRIKE_FIRE),lSparks)); string sString="Упс..."; ActionDoCommand(AssignCommand(oTarget, ActionSpeakString(sString))); } } У меня ещё один вопрос, какой нужен скрипт для прибавления нужного количество мне жизней. Сообщение отредактировал Артём - Aug 28 2006, 16:52 |
![]()
Сообщение
#2491
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Ты на предположение мое не ответил. Скрипт на кого должен использоваться? Только на игрока? Если на игрока, то зачем "object oTarget = GetFirstPC();"? У тебя есть функция "GetItemActivator();", а это никто иной, как игрок.
NSS void main() { object oPC = GetItemActivator(); object oItem = GetItemActivated(); string sItem = GetTag(oItem); location lSparks = GetLocation(oPC); if ("item_1" == sItem) { ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_FIRE), lSparks); DelayCommand(1.0, AssignCommand(oPC, ActionSpeakString("Упс..."))); } } Советую все главные функции выносить наверх модульного эвента, чтобы потом, если ты решишь добавить описание срабатывания иной вещи, не писать их снова. Чтобы выполнить скрипт на кого-угодно (зависит от установки в самой вещи), т.е. на себя или на любой объект, на который будет направлен предмет, то можно сделать так: NSS void main()
{ object oPC = GetItemActivator(); object oItem = GetItemActivated(); object oTarget = GetItemActivatedTarget(); string sItem = GetTag(oItem); if ("item" == sItem) { // если на цель ExecuteScript("name_script", oTarget); // если на себя ExecuteScript("name_script", oPC); } } Сообщение отредактировал Zirrex - Aug 28 2006, 17:23 |
![]() ![]()
Сообщение
#2492
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Понятно
Спасибо! Все скрипты которые мне дают я сохраняю у меня, их уже около сотни. Я уже спрашивал, но спрошу ещё. Какой нужен скрипт для прибавления нужного количество мне жизней. Сообщение отредактировал Артём - Aug 28 2006, 17:54 |
![]()
Сообщение
#2493
|
|
Level 1 Класс: Некромант Характер: Lawful Evil Раса: Человек ![]() |
Вопрос конечно может и странный...
Где находится текст функции GetRacialType() дабы его похерить и написать так как оно мне надо? Эксплорером разодрал весь scrpits.bif, но в nwnscript.nss только заголовок нашел :-( Где эта функция находится никто не знает? И получится ли вообще править общесистемные функции? |
![]()
Сообщение
#2494
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
если функция стандартная - то она фшыта в движок ...изменить можно каким нить извратом с дизасмом и хуками вроде (IMG:style_emoticons/kolobok_light/crazy.gif) да и зачем ее менять О_о
|
![]()
Сообщение
#2495
|
|
Level 1 Класс: Некромант Характер: Lawful Evil Раса: Человек ![]() |
а папка оверрайд ничем помочь не может? мне надо заменить эту функцию в игре на свою... как вот только это сделать?
|
![]()
Сообщение
#2496
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Зачем что-то менять/заменять??
Напиши свою функцию!!! Скажи точно, что тебе надо, чтобы функция делала?? Сообщение отредактировал -fenix- - Aug 29 2006, 14:00 |
![]()
Сообщение
#2497
|
|
Level 1 Класс: Некромант Характер: Lawful Evil Раса: Человек ![]() |
Мне надо чтобы Невер читал расу чара не из файла перса, а из БД. Хранить цифру в БД несложно, сложнее заставить Невер считать эту цифру расой.
Ну или менять расу персонажа на лету, скриптом. Если не получится гетрасиалтайп переписать, буду искать адрес в памяти где раса и через nwnx пытаться че-нить сделать. Но геморрой... |
![]()
Сообщение
#2498
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
А не проще написать функцую, каторая бы по имени или там ID или чему там, возвращала из базы расу перса, и использовать ее замест стандартной???
|
![]()
Сообщение
#2499
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE Ну или менять расу персонажа на лету, скриптом. Если не получится гетрасиалтайп переписать, буду искать адрес в памяти где раса и через nwnx пытаться че-нить сделать. Но геморрой... RacialType:CODE pObjectData = pObject+0xC64; //(смещения в байтах) nRacialType = *(pObjectData+0x3E4); //только учти, что в NWNX-Functions объект смещён на 4: //this->pGameObject = gameObject+4; типа того. Но проще и безопасней заюзать LetoScript и изменять значение в bic-файле. Вряд ли расу придётся менять как перчатки. Ещё можно заменить эту функцию в nwscript.nss и использовать вместо неё свою, но для этого всё равно придётся вставлять свой инклюд в каждый файл, где используется эта функция (Креон перл-скрипт для этого юзал). Сообщение отредактировал virusman - Aug 29 2006, 18:19 |
![]()
Сообщение
#2500
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
У меня вопрос, какой нужен скрипт чтобы после смерти непися заработал новый скрипт.
|
![]()
Сообщение
#2501
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
|
![]()
Сообщение
#2502
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Мне нужен скрипт, который ставится на область, а не на непися.
|
![]()
Сообщение
#2503
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
QUOTE У меня вопрос, какой нужен скрипт чтобы после смерти непися заработал новый скрипт. И: QUOTE Мне нужен скрипт, который ставится на область, а не на непися. (IMG:style_emoticons/kolobok_light/shok.gif) (IMG:style_emoticons/kolobok_light/swoon.gif) (IMG:style_emoticons/kolobok_light/shok.gif) http://www.city-of-masters.ru/forums/index...p;p=88758&# (Сообщение #2415) ЗЫ: http://www.city-of-masters.ru/forums/index...=Search&f=5 Сообщение отредактировал Waromon - Aug 30 2006, 09:56 |
![]() ![]()
Сообщение
#2504
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
|
![]()
Сообщение
#2505
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Увижу спам в этой теме, головы поотрываю. (IMG:style_emoticons/kolobok_light/big_boss.gif) Касается молодежи... Отвечать не надо.
|
![]()
Сообщение
#2506
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Меня этот скрипт уже бесит. Не желает он работать правильно. Вроде все верно, но значение репутации меняться по отношению к игроку не желает. Сразу обмолвлюсь, пытаюсь восстановить отношение своей (не стандартной) фракции к игроку. Скрипт:
NSS void AdjustFactionReputation(object oPC, object oFaction, int nCurRep, int nSetRep) { object oMember = GetFirstFactionMember(oFaction, FALSE); while (oMember != OBJECT_INVALID) { AdjustReputation(oPC, oMember, nCurRep + nSetRep); oMember = GetNextFactionMember(oFaction, FALSE); } } void main() { object oPC = OBJECT_SELF; location lPC = GetLocation(oPC); object oNeutral = GetObjectByTag("npc_faction"); int nCurRep, nNeutral = 50; object oNPC = GetFirstObjectInShape(SHAPE_SPHERE, 20.0, lPC, FALSE, OBJECT_TYPE_CREATURE); while (oNPC != OBJECT_INVALID) { if (GetFactionEqual(oNPC, oNeutral)) { nCurRep = GetReputation(oNPC, oPC); if (nCurRep != nNeutral) { AdjustFactionReputation(oPC, oNPC, nCurRep, nNeutral); } } oNPC = GetNextObjectInShape(SHAPE_SPHERE, 20.0, lPC, FALSE, OBJECT_TYPE_CREATURE); } } Пробовал по-разному, работает нормально, если только "AdjustReputation" вытащить из цикла, а вместо него внести "SetIsTemporaryNeutral". Почему значение не хочет устанавливаться без второй функции, я не понимаю. Краткое описание работы скрипта, как я его вижу. В сфере, радиусом 20 метров, ищу любых существ. Внутреннее условие проверки фракции отсекает существ, которые не подпадают под него. Значение во время смерти игрока по отношению к НПС, на которого игрок напал, равно 0. Проверяю, неравно ли полученное значение 50, если неравно, продолжаю выполнение скрипта. С помощью кастомной функции через цикл проверяю, сколько у НПС было существ в партии. Всем пытаюсь установить значение 50 по отношению к игроку. В итоге значение как было 0, так и остается 0. Фракция не имеет глобального эффекта. Обижается только то существо, на которое напали. Кстати, во время мучений со скриптом, заметил некоторую странность в логих. Иногда не пишут, кто же именно убил игрока. Просто фраза "Someone killed Player". Шутку не понимаю, учитывая то, что предыдущая строчка четко показывает, что игрока ударил такой-то. Баг? Из-за этой пакости невозможно вычислить убийцу. Сообщение отредактировал Zirrex - Sep 1 2006, 02:22 |
![]()
Сообщение
#2507
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
AdjustFactionReputation - лишнее. Или по крайней мере она не в том направлении работает.
Тебе не надо искать каждого НПС этой фракции и устанавливать значение общее. Тебе надо установить лидеру фракции репу в 50 у других участников фракции сделать ClearPersonalReputation(oPC,oMember); К тому же, если у твоей фракции не стоит ГЛОБАЛЬНЫЙ эффект, то ничего менять не надо в репе. Только почистить у всех и они забудут старые грешки. Не надо глобально править репутацию у всей фракции. К примеру, если у фракции стоит глобальное отслеживание репы, то меняй у главаря на 50 и чисти у тех, кто видим и все. Вот такой функцией: (примерно...) NSS void ClearFactionReputation(object oPC, object oFaction=OBJECT_SELF)
{ object oMember = GetFirstFactionMember(oFaction, FALSE); while (oMember != OBJECT_INVALID) { ClearPersonalReputation(oPC, oMember); oMember = GetNextFactionMember(oFaction, FALSE); } } |
![]()
Сообщение
#2508
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Aiwan, спасибо, то, что нужно было (IMG:style_emoticons/kolobok_light/smile.gif) Я как раз подумывал использовать эту функцию, тем более, когда искал на форуме что-нибудь про фракции, натолкнулся на нее в твоем скрипте, но решил вначале добить все же ту функцию, которую использовал изначально. Видимо, работает она нормально только тогда, когда эффект у фракции глобальный.
Немного усовершенствовал общий скрипт, добавить перечисление всех своих фракций с помощью цикла, а то писать объект такой-то, и впихивать их все под условие, все же не очень весело, да и лишние проверки для цикла. Получился следующий скрипт, если кому нужен на вооружение, можно использовать, я не буду против (IMG:style_emoticons/kolobok_light/smile.gif) NSS void ClearFactionReputation(object oPC, object oFaction=OBJECT_SELF)
{ object oMember = GetFirstFactionMember(oFaction, FALSE); while (oMember != OBJECT_INVALID) { ClearPersonalReputation(oPC, oMember); oMember = GetNextFactionMember(oFaction, FALSE); } } void main() { object oPC = OBJECT_SELF, oFaction, oNPC; location lPC = GetLocation(oPC); int i, nCurRep, nNeutral = 50; for (i = 1; i <= 7; i++) // значение зависит от количества своих фракций { oFaction = GetObjectByTag("factionnpc_" + IntToString(i)); oNPC = GetFirstObjectInShape(SHAPE_SPHERE, 20.0, lPC, FALSE, OBJECT_TYPE_CREATURE); while (oNPC != OBJECT_INVALID) { if (GetFactionEqual(oNPC, oFaction)) { nCurRep = GetReputation(oNPC, oPC); if (nCurRep != nNeutral) { ClearFactionReputation(oPC, oNPC); } } oNPC = GetNextObjectInShape(SHAPE_SPHERE, 20.0, lPC, FALSE, OBJECT_TYPE_CREATURE); } } } |
![]()
Сообщение
#2509
|
|
Level 1 Класс: Клерик Характер: Neutral Evil Раса: Дварф ![]() |
Люди, помогите! Кинте ктонить хороший скриптик AI с описанием. Заранее спасибо! (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#2510
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
|
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 04:28 |