![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3301
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
1) Во-первых, джамп в НВНе переносит объект, вызвавший функцию (ты пытаешься перенести триггер). Во-вторых, он сделан криво, перед джампом обязательно вызывать ClearAllActions(TRUE) для нужного объекта. Т. е. в этом случае:
Neverwinter Script AssignCommand(oPC, ClearAllActions(TRUE)); Для непися аналогично.AssignCommand(oPC, JumpToObject(GetWaypointByTag("wp_siegers"))); 2) Я полагаю, эти самые "стандартные скрипты хербита" забивают стек экшенов так, что атака выполняется хз когда (IMG:style_emoticons/kolobok_light/smile.gif) Сообщение отредактировал Ilerien - Jun 8 2010, 18:39 |
![]()
Сообщение
#3302
|
|
Level 2 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
За перенос объекта огромнейшее спасибо=) подействовало. А вот мои чудаки ни в какую не хотят бежать на врага, даже когда в скрипте хертбита ничего кроме атаки нет... тупо стоят, пока я не подойду к ним.
На всякий случай попробую объяснить, как все у меня взаимодействует. Я захожу в игру, наступаю на триггер, меня переносит на одну из сторон(в зависимости от того, кого в игре больше - стражей (которые охраняют замок) или осаждающих). Потом, где-то на краю карты сидит человечек, который в хертбите создает осаждающих в точке их появления. По плану эти осаждающие должны сразу же бежать бить ближайшего врага. А они тупо появляются, и стоят. Хотя они являются вражеской к защитникам фракцией. Проверил отношения фракций - все в норме.. |
![]()
Сообщение
#3303
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата По плану эти осаждающие должны сразу же бежать бить ближайшего врага. А они тупо появляются, и стоят. Хотя они являются вражеской к защитникам фракцией. Посмотреть, что возвращает GetNearest Enemy() и GetCurrentAction().
|
![]()
Сообщение
#3304
|
|
Level 2 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Neverwinter Script // Gets the nearest enemy. Берет ближайшего врага object GetNearestEnemy(object oSource=OBJECT_SELF, int nNth = 1) { return GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oSource, nNth); } Neverwinter Script // Get the current action (ACTION_*) that oObject is executing. Берет текущее действие которое исполнЯет объект. int GetCurrentAction(object oObject=OBJECT_SELF) Всё! У меня получилось! Вот на что я изменил хертбит: #include "nw_i0_generic" #include "inc_nearest" Neverwinter Script void main() { if(GetCurrentAction() != ACTION_ATTACKOBJECT) { ClearAllActions(); ActionAttack(GetNearestEnemy()); } } После пессив мода они поползли=) |
![]()
Сообщение
#3305
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Посмотреть, что возвращает GetNearest Enemy() и GetCurrentAction(). (IMG:style_emoticons/kolobok_light/smile.gif) Имелось в виду выполнить скрипт:Neverwinter Script object oSelf = OBJECT_SELF; AssignCommand(GetModule(), SpeakString("Action: " + IntToString(GetCurrentAction(oSelf)), TALKVOLUME_SHOUT)); AssignCommand(GetModule(), SpeakString("Nearest enemy: " + GetName(GetNearestEnemy(oSelf)), TALKVOLUME_SHOUT)); Цитата После пессив мода они поползли=) Ну значит мое первое предположение в широком смысле верно - что-то забивает стек экшенов.
Сообщение отредактировал Ilerien - Jun 8 2010, 20:43 |
![]()
Сообщение
#3306
|
|
Level 1 Класс: Страж Тьмы Характер: Lawful Evil Раса: Эльф ![]() |
Доброго времени суток. Боюсь показаться тупым юзером, но у меня не работает встроенный в редактор скрипт "дать награду" что-либо. Не выдаёт ни денег, ни опыта ни вещей. Что у меня неверно? Вот так на данный момент выглядит скрипт:
//:://///////////////////////////////////////////// //:: FileName at_003 //::////////////////////////////////////////////// //::////////////////////////////////////////////// //:: Created By: Script Wizard //:: Created On: 11.06.2010 17:34:41 //::////////////////////////////////////////////// void main() { // Äàòü ãîâîðÿùåìó îïûò GiveXPToCreature(GetPCSpeaker(), 10); } Вместо абракадабры, соответственно " Дать говорящему опыт" |
![]()
Сообщение
#3307
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
маленькая буква "я" в скрипте - древнейшая проблема, о упоминание о которой есть в куче тем.
Убирай русский коммент или, что гораздо лучше, ставь патч Думбо |
![]()
Сообщение
#3308
|
|
Level 1 Класс: Страж Тьмы Характер: Lawful Evil Раса: Эльф ![]() |
Благодарю. Страниц море всё читать - никакого времени не хватит ) Честно пролистал первые две страницы этого раздела, не нашёл )
Пойду разбираться с патчем: как и куда втыкать ) Более чем уверен, что будут ещё вопросы, так что моралььно готовьтесь: я тот ещё чайник )) (IMG:style_emoticons/kolobok_light/crazy.gif) |
![]()
Сообщение
#3309
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Rommantic, есть еще версия для печати и поиск по странице. Плюс, есть скрипты для новичков там всяко разно есть то что ищется. Например, Вот тут.
Neverwinter Script //:://////////////////////////////////////////////
//:: Даем партии ХР //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 18.09.2005 //::////////////////////////////////////////////// #include "nw_i0_tool" void main() { RewardPartyXP(150, GetPCSpeaker()); } |
![]()
Сообщение
#3310
|
|
Level 1 Класс: Страж Тьмы Характер: Lawful Evil Раса: Эльф ![]() |
Вот,кстати, сразу и вопрос. Если мне нужно написать скрипт оценки наличия определённого количества золота у игрока, где пивать количество золота? Пока что выглядит оно вот так:
Neverwinter Script //:://///////////////////////////////////////////// //:: FileName sc_002 //::////////////////////////////////////////////// //::////////////////////////////////////////////// //:: Created By: Script Wizard //:: Created On: 12.06.2010 8:44:20 //::////////////////////////////////////////////// #include "nw_i0_tool" int StartingConditional() { // Удостовериться, что в снаряжении персонажа игрока имеются данные предметы if(!HasItem (GetPCSpeaker(), "NW_IT_GOLD001") ) return FALSE; return TRUE; } Попытался методом тыка, пока что пришёл к такому варианту (компелирует, но не работает): Neverwinter Script //:://///////////////////////////////////////////// //:: FileName sc_002 //::////////////////////////////////////////////// //::////////////////////////////////////////////// //:: Created By: Script Wizard //:: Created On: 12.06.2010 8:44:20 //::////////////////////////////////////////////// #include "nw_i0_tool" int StartingConditional() { // Удостовериться, что в снаряжении персонажа игрока имеются данные предметы if(!HasItem (GetPCSpeaker(), "NW_IT_GOLD001 (1000)") ) return FALSE; return TRUE; } как правильно? (IMG:style_emoticons/kolobok_light/unsure.gif)
Причины изменения: Для скриптов есть тег [nss]
|
![]()
Сообщение
#3311
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
Есть функция GetGold().
Соответственно: Neverwinter Script if (GetGold(GetPCSpeaker()) < 1000) {
return FALSE; } return TRUE; Сообщение отредактировал greye - Jun 12 2010, 08:59 |
![]()
Сообщение
#3312
|
|
Level 2 ![]() Класс: Вор Характер: Lawful Good Раса: Человек ![]() |
Доброго времени суток
У меня такой вопросик : вот у меня есть модуль старой версии 1.6 , а так охота в нём покататся на лошадях какие команды мне использовать в скрипте чтоб это было возможно |
![]()
Сообщение
#3313
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]()
Сообщение
#3314
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
likkil
это долгая история во первых что за модуль...кастомный иль не кастомный - вопрос непонятен во вторых лошадки появляются только после патча 1.69 до него жалкие попытки покататься на лошадках выливались в тяжелые хаки и муторные системы скриптов. |
![]()
Сообщение
#3315
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
В 1.69 по сути те же хаки (просто включены в ресурсы игры) и те же муторные системы скриптов. Ничего конкретно нативного в коняшках нет - всё тот же геморрой с кастомными анимациями и подменой аппиаранса. Изврат в общем.
|
![]()
Сообщение
#3316
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Здравствуйте. У меня не работает (или постоянно удаётся, даже при минусовых значениях навыка) проверка убеждения для появления реплики, соотв. фраза всегда доступна в диалоге. Где косяк?
Neverwinter Script #include "nw_i0_tool" int StartingConditional() { if(!GetHasSkill(SKILL_PERSUADE, GetPCSpeaker())) if(!(AutoDC(DC_MEDIUM, SKILL_PERSUADE, GetPCSpeaker()))) return FALSE;; return TRUE;; } А так же http://www.city-of-masters.ru/forums/index...0&start=200 последний пост (18.06.2010) |
![]()
Сообщение
#3317
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Попробуй как-то так.
Neverwinter Script #include "nw_i0_tool" int StartingConditional() { if(!GetHasSkill(SKILL_PERSUADE, GetPCSpeaker()) || !AutoDC(DC_MEDIUM, SKILL_PERSUADE, GetPCSpeaker())) return FALSE; return TRUE; } У тебя ошибка, во первых две пары дочки тире, во вторых после IF ставится скобка и в скобке выполняется условие. Если скобки не ставить (как у тебя) то будет выполнено только самое первое и одно условие. Твой скрипт можно было записать и так: Neverwinter Script #include "nw_i0_tool"
int StartingConditional() { if(!GetHasSkill(SKILL_PERSUADE, GetPCSpeaker())) return FALSE; if(!AutoDC(DC_MEDIUM, SKILL_PERSUADE, GetPCSpeaker())) return FALSE; return TRUE; } |
![]()
Сообщение
#3318
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
спс заработало (IMG:style_emoticons/kolobok_light/yahoo.gif) а как проверить отсутствие навыка (фраза а-ля "я нуб, я не качал убеждение, блеф и запугивание и у меня нет денег. Я должен умереть!)
|
![]()
Сообщение
#3319
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Как раз первая проверка в скрипте и есть проверка навыка убедить... А вот дальше идет бросок, записанный в инклюде. Я же пользуюсь своими скриптами проверки необходимого навыка на убеждение + строка в отчете, что там как прошло:
Neverwinter Script //::///////////////////////////////////////////////
//:: Проверка навыка "УБЕДИТЬ" сложность НОРМАЛЬНО. //::////////////////////////////////////////////// int StartingConditional() { object oPC = GetPCSpeaker(); int nSkillZ = GetSkillRank(SKILL_PERSUADE, oPC); int nDC = 2 + d3(); if(nSkillZ > nDC) { SendMessageToPC(oPC, "<c у >Убедить</c><c °у> Бросок : "+IntToString(nSkillZ)+" против "+IntToString(nDC)+" </c><c у >УДАЧА</c>"); return TRUE; } SendMessageToPC(oPC, "<c у >Убедить</c><c °у> Бросок : "+IntToString(nSkillZ)+" против "+IntToString(nDC)+" </c><cу >ПРОВАЛ</c>"); return FALSE; } |
![]()
Сообщение
#3320
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Ещё один глупый вопрос:
есть скрипт (подгон под себя первого скрипта выложенного Aiwan в разделе "Скрипты для новичков") с попыткой перед дестроем из инвентаря сложить всё в сундук Neverwinter Script void main() { object oChest = GetObjectByTag("piratechest"); object oPC = GetEnteringObject(); // Того кто вошел object oArmor = GetObjectByTag("item112"); //-----------------В сундук--------------------- object oItem = GetFirstItemInInventory(oPC); // Первый итем в инвентаре while(GetIsObjectValid(oItem)) // Пока такой объект существует { ActionGiveItem(oItem, oChest); DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); // Берем другой объект... } //------------------ Убиваем весь инвентарь ------------------------------------ while(GetIsObjectValid(oItem)) // Пока такой объект существует { DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); // Берем другой объект... } int i=0; while(i<14) // ПОКА i меньше 14. 14 - это количество всех слот у объекта { ActionGiveItem(GetItemInSlot(i, oPC), oChest); i++; ActionGiveItem(GetItemInSlot(i, oPC), oChest); } //------------------ Убиваем всю амуницию ------------------------------------- while(i<14) // ПОКА i меньше 14. 14 - это количество всех слот у объекта { DestroyObject(GetItemInSlot(i, oPC)); i++; DestroyObject(GetItemInSlot(i, oPC)); } // Было ноль к примеру, станет 1 и т.д. // -------------------одёжка------------------------- CreateItemOnObject("item112", oPC, 1); AssignCommand(oPC, ActionEquipItem(oArmor, INVENTORY_SLOT_CHEST)); } Проблемы: 1) В сундук ничего не попадает 2) Уничтожаются только неодетые вещи 3) Следует из проблемы 2) - одёжка не одевается (но появляется в инве) На всякий случай: 1) Скрипт стоит на onenter локации 2) Проверки на повторность захода в локацию etc нету т.к. предусмотрено только одиночное её посещение и модуль планируется сингловый 3)"item112" и тэг и ресреф вещи 4) item 112 ничего не требует для ношения 5) на onclientrun модуля стоит скрипт схожего действия (при надобности запосчу) (он работает) вышеуказанный скрипт не работает и с и без включённого модулестартоовского |
![]()
Сообщение
#3321
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
Во-первых, ты уничтожаешь вещи при переносе. Логично, что после этого ты ничего не найдёшь в сундуке. Во-вторых, я не особо помню, но ActionGiveItem вроде бы работает только от лица владельцев предмета, т.е. надо либо вешать скрипт на игрока, либо делать AssignCommand.
|
![]()
Сообщение
#3322
|
|
Level 2 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
А еще можно использовать CreateItemOnObject вместо ActionGiveItem.
|
![]()
Сообщение
#3323
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Спасибо, но ни то ни другое не работает (при убирании дестроя он оставляет всё как было, только новую шмотку дает, ни с ассигнкомманд (экшнгивайтем(...)) ни с крейтайтемонобжект сундук пустует (IMG:style_emoticons/kolobok_light/sad.gif)
|
![]()
Сообщение
#3324
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Neverwinter Script void main() { object oChest = GetObjectByTag("piratechest"); object oPC = GetEnteringObject(); object oArmor = GetObjectByTag("item112"); //первая ошибка - таким способом можно получить только уже существующий в игре объект, если планируется создавать итем, то так делать нельзя object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { ActionGiveItem(oItem, oChest); //любой экшен выполняется от лица вызвавшего команду объекта - нужно использовать AssignCommand DestroyObject(oItem); //что самое интересное, уничтожается _тот же самый_ итем, который хотим положить в сундук oItem = GetNextItemInInventory(oPC); } //этот блок вообще не нужен - все итемы в инвентаре уже помечены на удаление while(GetIsObjectValid(oItem)) { DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } int i=0; while(i<14) { ActionGiveItem(GetItemInSlot(i, oPC), oChest); //опять AssignCommand i++; ActionGiveItem(GetItemInSlot(i, oPC), oChest); //зачем дублировать-то? } while(i<14) { DestroyObject(GetItemInSlot(i, oPC)); i++; DestroyObject(GetItemInSlot(i, oPC)); //тоже зачем-то дублируется команда } CreateItemOnObject("item112", oPC, 1); AssignCommand(oPC, ActionEquipItem(oArmor, INVENTORY_SLOT_CHEST)); //ага, и пытаемся надеть что угодно, только не созданную предыдущей командой одежду } Правильно будет так: Neverwinter Script void main() { object oChest = GetObjectByTag("piratechest"); object oPC = GetEnteringObject(); object oNewItem; object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { if(GetBaseItemType(oItem) != BASE_ITEM_LARGEBOX) { oNewItem = CopyItem(oItem, oChest, TRUE); //копируем итем в сундук SetDescription(oNewItem, GetDescription(oItem)); } DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } int i; for(i = INVENTORY_SLOT_HEAD; i <= INVENTORY_SLOT_BOLTS; i++) { oItem = GetItemInSlot(i, oPC); oNewItem = CopyItem(oItem, oChest, TRUE); SetDescription(oNewItem, GetDescription(oItem)); DestroyObject(oItem); } AssignCommand(oPC, ClearAllActions(TRUE)); //чистка стека oItem = CreateItemOnObject("item112", oPC); AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); Если ящики так уж критично копировать, в чём я сильно сомневаюсь, то код будет таким: Neverwinter Script ... Соответственно, AssignCommand(oPC, ClearAllActions(TRUE)); переедет в начало скрипта.
while(GetIsObjectValid(oItem)) { if(GetBaseItemType(oItem) == BASE_ITEM_LARGEBOX) AssignCommand(oPC, ActionGiveItem(oItem, oChest)); //не знаю, как себя поведет передача полного ящика в таком скрипте - надо тестить else { oNewItem = CopyItem(oItem, oChest, TRUE); //копируем итем в сундук SetDescription(oNewItem, GetDescription(oItem)); DestroyObject(oItem); } oItem = GetNextItemInInventory(oPC); } Сообщение отредактировал Ilerien - Jun 23 2010, 02:14 |
![]()
Сообщение
#3325
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Я уже когда-то выкладывал скрипт переноса вещей в ящик. Вот ссылка на пост: http://www.city-of-masters.ru/forums/index...;p=122407&#
В принципе Ilerien, контейнеры, т.е. волшебные сумки нужно переносить оператором ActionGiveItem. Переходят со всем содержимым и в том же раскладе в них вещей. Можно обойтись и этой одной функцией для переноса всех шмоток... Но есть одно НО. Не тестил для НПС, а вот для плейсов теряется переносимый инвентарь. Видно по причине превышения акций... Поэтому нужно сперва перебрать инвентарь и перенести сумки. Затем скопировать остальной шмот. Да и про золото не стоит забывать, т.к. передать плейсу мы можем не более 50.000 злотых... Neverwinter Script // Take nAmount of gold from oCreatureToTakeFrom.
// - nAmount // - oCreatureToTakeFrom: If this is not a valid creature, nothing will happen. // - bDestroy: If this is TRUE, the caller will not get the gold. Instead, the // gold will be destroyed and will vanish from the game. void TakeGoldFromCreature(int nAmount, object oCreatureToTakeFrom, int bDestroy=FALSE) |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 01:08 |