Вопросы о скриптах.
|
|
|
Donor (В тени)
Совершенный
ВЕЛИКИЙ МАГИСТР
Сообщений: 1156
|
Дата: 18.03.2010, 17:20 | Сообщение # 1
Вопрос такой: вот этот, всем известный скрипт на добавление итема в инвентарь игроку работает не совсем корректно. первая часть скрипта: Code //////////////////////////////////////////////////////////////////////// // Sent by: The engine // When: срабатывает при загрузке с сохранения или когда запущено в первый раз // Может вызываться несколько раз //////////////////////////////////////////////////////////////////////// case EVENT_TYPE_MODULE_LOAD: { //Делаем проверку, чтобы запускался только один раз. Если ниже лежащий код уже выполнялся, //повторять нам его не надо и пропускаем это событие. int iModuleLoaded = GetLocalInt(OBJECT_SELF, "aga_bowathena"); if (iModuleLoaded == 1) break; не исполняется и получается, что вторая часть скрипта Code // Получим объект игрока object oPlayer = GetHero();
// проверяем, нет ли уже этого объекта в рюкзаке игрока. // Мы же не хотим создавать новый лук при очередной загрузке? Хотя можно это назвать системой крафтинга =) (прим. ред.) int iItemCount = CountItemsByTag(oPlayer, "aga_bowofathena"); // Если это 0, тогда давайте дадим его. // Обратите внимание на формат R"resource_file_name" // "R" является важной частью и определяет его в качестве ресурса. Просто имя ресурса. Его можно увидеть в дереве объектов (справа) // Дадим только одну штуку if (iItemCount == 0) UT_AddItemToInventory(R"aga_bowofathena.uti",1); // добавляет предмет в инвентарь активного игрока
// сохраняем ранее определенную переменную как локальную в объекте SetLocalInt(OBJECT_SELF, "aga_bowathena", 1); break; исполняется снова и снова при каждой загрузке, при условии если итема нет в инвентаре игрока (продал, отдал сопартийцу, надел на себя, уничтожил). В результате мы имеем бесконечный крафтинг итема. Нужно только зайти в игру, получить итем, продать его и снова зайти в игру. Если не юзать итем и он продолжает оставаться в инвентаре - скрипт срабатывает нормально - новый итем не прибавляется. Кто может сказать где ошибка в скрипте и как её исправить?
|
|
|
Darkspawn (В тени)
Сообщений: 1690
|
Дата: 25.04.2010, 18:57 | Сообщение # 2
Правильный скрипт: Code // All module events #include "utility_h" #include "wrappers_h" #include "events_h" void main() { event ev = GetCurrentEvent(); int nEvent = GetEventType(ev); Log_Events("", ev); switch (nEvent) { case EVENT_TYPE_MODULE_LOAD: { // get the object which contains the player object oPlayer = GetHero();
object oBow = GetObjectByTag("aga_bowofathena"); if (!IsObjectValid(oBow)) UT_AddItemToInventory(R"aga_bowofathena.uti",1); break; } default: { break; } } } Взято отсюда, там есть пояснения ко всем командам.
Not all people are annoyng. Some of them are dead.
|
|
|
nominator (В тени)
Страж-магистр
Сообщений: 137
|
Дата: 25.04.2010, 19:05 | Сообщение # 3
это то же самое, что и в первом посте. Этот скрипт проверяет только игрока и если ты выкинул предмет или отдал сопартийцу, то он снова тебе добавится.
|
|
|
Donor (В тени)
Совершенный
ВЕЛИКИЙ МАГИСТР
Сообщений: 1156
|
Дата: 25.04.2010, 19:07 | Сообщение # 4
Kartman, Спасибо, попробую. Мне номинатор еще один вариант скинул. Еще руки не дошли потестить.
Сообщение отредактировал Donor - Воскресенье, 25.04.2010, 19:09
|
|
|
nominator (В тени)
Страж-магистр
Сообщений: 137
|
Дата: 25.04.2010, 19:20 | Сообщение # 5
Проще всего - просто поставить условием выполнения скрипта действие, которое выполняется только раз за игру. Например: старт модуля, но тогда предмет будет добавляться только после генерации персонажа, то есть в самом начале. В уже начатую игру таким образом нельзя импортировать предмет.
|
|
|
Donor (В тени)
Совершенный
ВЕЛИКИЙ МАГИСТР
Сообщений: 1156
|
Дата: 26.04.2010, 16:22 | Сообщение # 6
nominator, посмотри пожалуйста эти два скрипта. в чем проблема - выдают ошибку при компиляции. этот запускается через консоль и на экране должны отображаться координаты положения игрока в локации. Code #include “utility_h” void main() { object oPC = GetHero(); location lLoc = GetLocation(oPC); vector vPos = GetPositionFromLocation(lLoc); vector vOrientation = GetOrientationFromLocation(lLoc); float fAngle = GetFacing(oPC); DisplayFloatyMessage(oPC, VectorToString(vPos), FLOATY_MESSAGE, 16777215, 20.0); DisplayFloatyMessage(oPC, “————–”, FLOATY_MESSAGE, 16777215, 20.0); DisplayFloatyMessage(oPC, FloatToString(fAngle), FLOATY_MESSAGE, 16777215, 20.0); } а этот должен добавить в локацию (лагерь) созданного торговца (скрипт для расширения осн. компании) Code #include “wrappers_h” void main() { // The first thing we want to do, before anything, is look around and see // if we have already spawned this merchant object oPlayer = GetMainControlled(); DisplayFloatyMessage(oPlayer, “tut_merchant_spawn”, FLOATY_MESSAGE, 16777215, 20.0); object oMerchant = UT_GetNearestObjectByTag(oPlayer, “jwv_t_creature1″); if (!IsObjectValid(oMerchant)) { // If we get to this code, it means the merchant has not been placed yet // So let’s do that // get an object pointer to the party camp area object oArea = GetObjectByTag(“cam100ar_camp_plains”); // create a location for where our merchant NPC will be placed location lMerchantLocation = Location(oArea, Vector(166.61, 124.77, -1.33), 85.4); // Spawn the NPC CreateObject(OBJECT_TYPE_CREATURE, R”jwv_t_creature1.utc”, lMerchantLocation); } }
Сообщение отредактировал Donor - Понедельник, 26.04.2010, 17:01
|
|
|
nominator (В тени)
Страж-магистр
Сообщений: 137
|
Дата: 26.04.2010, 17:02 | Сообщение # 7
какие именно ошибки выдает? кажется, я понял
|
|
|
Donor (В тени)
Совершенный
ВЕЛИКИЙ МАГИСТР
Сообщений: 1156
|
Дата: 26.04.2010, 17:27 | Сообщение # 8
nominator, вот так пишет: W: 20:25:05 - Some resources failed their post processing. Please see below for more details. S: 20:25:05 - Export Summary, 1 Requested, 1 Success, 0 Skipped, 0 Failed. Please see below for more details. I: 20:25:05 - Offers.xml file has been updated successfully. I: 20:25:05 - AddIns.xml file has been updated successfully. I: 20:25:05 - Generated the campaign file. W: 20:25:05 - No starting area specified for campaign. E: 20:25:05 - d_store_merc.nss - d_store_merc.nss(1): After compound statement at end I: 20:25:05 - Compiling exported scripts I: 20:25:05 - PostProcessing
|
|
|
nominator (В тени)
Страж-магистр
Сообщений: 137
|
Дата: 26.04.2010, 20:30 | Сообщение # 9
тут просто кавычки вокруг значений не те)) вот я поменял Code #include "wrappers_h" void main() { // The first thing we want to do, before anything, is look around and see // if we have already spawned this merchant object oPlayer = GetMainControlled(); DisplayFloatyMessage(oPlayer, "tut_merchant_spawn", FLOATY_MESSAGE, 16777215, 20.0); object oMerchant = UT_GetNearestObjectByTag(oPlayer, "jwv_t_creature1"); if (!IsObjectValid(oMerchant)) { // If we get to this code, it means the merchant has not been placed yet // So let’s do that // get an object pointer to the party camp area object oArea = GetObjectByTag("cam100ar_camp_plains"); // create a location for where our merchant NPC will be placed location lMerchantLocation = Location(oArea, Vector(166.61, 124.77, -1.33), 85.4); // Spawn the NPC CreateObject(OBJECT_TYPE_CREATURE, R"jwv_t_creature1.utc", lMerchantLocation); } } Code #include "utility_h" void main() { object oPC = GetHero(); location lLoc = GetLocation(oPC); vector vPos = GetPositionFromLocation(lLoc); vector vOrientation = GetOrientationFromLocation(lLoc); float fAngle = GetFacing(oPC); DisplayFloatyMessage(oPC, VectorToString(vPos), FLOATY_MESSAGE, 16777215, 20.0); DisplayFloatyMessage(oPC, "————–", FLOATY_MESSAGE, 16777215, 20.0); DisplayFloatyMessage(oPC, FloatToString(fAngle), FLOATY_MESSAGE, 16777215, 20.0); }
|
|
|
Donor (В тени)
Совершенный
ВЕЛИКИЙ МАГИСТР
Сообщений: 1156
|
Дата: 26.04.2010, 21:06 | Сообщение # 10
nominator, я подозревал, что какой то элементарный косяк в символах. Спасибо
|
|
|
Darkspawn (В тени)
Сообщений: 1690
|
Дата: 26.04.2010, 23:41 | Сообщение # 11
Как скриптом сделать табличку с текстом?
Not all people are annoyng. Some of them are dead.
|
|
|
Donor (В тени)
Совершенный
ВЕЛИКИЙ МАГИСТР
Сообщений: 1156
|
Дата: 27.04.2010, 00:13 | Сообщение # 12
Kartman, Quote (Kartman) Как скриптом сделать табличку с текстом? ты имеешь ввиду доску с заданиями? есть 2DA файл JobBoards там все прописано. работает доска со скриптом donate.ncs. чтобы создать новую надо создать файл этой доски, расширить 2DA, и импортировать в игру. в donate.ncs наверное тоже что нибудь надо добавить - не знаю не смотрел.
|
|
|
Darkspawn (В тени)
Сообщений: 1690
|
Дата: 27.04.2010, 14:06 | Сообщение # 13
Donor, Нет...короче я не знаю как объяснить, как винду переустановлю проскриню.
Not all people are annoyng. Some of them are dead.
|
|
|
TUT-@NKH-AMUN (В тени)
Проходящий посвящение
Сообщений: 40
|
Дата: 11.06.2010, 14:38 | Сообщение # 14
1. Скажите пожалуйста, есть ли такой скрипт, чтобы предмет появился у персонажа в самом начале игры ??? 2. В скрипте на добавление торговца в лагерь нужно поменять только координаты или ещё чё-то??? location lMerchantLocation = Location(oArea, Vector(166.61, 124.77, -1.33), 85.4); 3. При добавлении торговца в лагерь, можно ли обойтись без 2DA файла???
|
|
|
nominator (В тени)
Страж-магистр
Сообщений: 137
|
Дата: 11.06.2010, 22:38 | Сообщение # 15
TUT-@NKH-AMUN, 1. http://www.city-of-masters.ru/forums/index.php?s=c0359b86887645bfb8e6df617951a7c8&showtopic=6082 тебе в помощь. 2. Какой скрипт? Дай ссылку или сюда кинь.
|
|