![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#286
|
|||
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Эхх , если бы все было так просто :( скриптик object oMod = GetModule(); int i = 1; SetLocalObject(oMod,"CurMap",i); компилируется с ошибкой ERROR: DECLARATION DOES NOT MATCH PARAMETERS, хотя в Лексиконе ясно сказано "object - An integer that represents a particular object in the world (essentially a pointer to a real object)". Я не могу никаким образом получить какую-то идентификацию карты иначе, чем через объект, который на этой карте находится. Ясно, что тип object это ссылка, но как перебрать все-таки карты в модуле? В принципе , я уже нашел способ, но этот способ больно извращенный. Неужели в тулсете не предусмотрена все-таки более простая возможность? Через ресрефы тоже плохо - они все разные, через расставленные вэйпоинты - тоже: их надо расставлять. Объясню для чего мне нужен цикл по картам: дело в том, что на Сиале при сохранении положения персонажа, запоминается тэг локации. Если тэг одинаковый у двух карт, то с восстановлением положения могут быть проблемы. Так как карт у нас около 470, просматривать в тулсете тэг очень долго и муторно. Поэтому я хотел вывести тэги всех карт в текстовый файл или файл БД и потом каким - нибудь стандартным средством определить задвоение. |
||
![]()
Сообщение
#287
|
|||
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Хех, так в чем проблема запоминать НЕ ТЭГ ЛОКИ, а ЕЕ ОБЪЕКТ?! Уникально. Независимо от тэга?.. Возвращение перса опять-таки делать не по тэгу локи, а по ее объекту... Добавлено в [mergetime]1098772792[/mergetime] К тому же, обрати внимание на функцию ObjectToString(object oObj); ;) :yes: |
||
![]()
Сообщение
#288
|
|||
Вечно исчезающий ![]() Класс: Маг Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Это мне вобще непонятно %) Как это объекту можно присвоить числовое значение? :swoon: |
||
![]()
Сообщение
#289
|
|||||
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Потому что при добавлении новой карты все индексы перестраиваются и со сменой версии модуля игрок может оказаться или не там, где выходил или вообще в стартовой локации. ObjectToString ничего мне не дает - вот если бы была функция StringToObject - это бы все меняло :). Главный мой вопрос - как присвоить переменной типа Object какое то значение, не не пользуясь ссылкой.
Я же специально привел ссылку из лексикона - object содержит в себе натуральное число (иначе говоря просто номер объекта). Весь вопрос в том и состоит - как переменной типа object присвоить этот самый номер. Еще раз повторю - нету в НВН ни функции типа GetNextObjectInArea (только InModule), ни константы OBJECT_TYPE_ для ареи, чтобы выделить из массы объектов именно карту. Короче, я понял, что тут никто толкового сказать не может :( |
||||
![]()
Сообщение
#290
|
|||||||||
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Спасибо за твою благодарность в сторону наших попыток помочь. Либо ты слишком умный, либо слишком много у нас времени и главное ДАННЫХ, которые ты представил в своей задаче... :xz: :this: Но так, как ты говоришь и высказываешь мнение о пытающихся помочь - не делается. Здесь, на форуме ВРГ, никто никому ничего не должен, а потерпеть и выудить решение все равно можно. Увы, твое терпение коротко...
Мне не нравится немного, что ты "еще раз повторяешь: НЕТУ РЕШЕНИЯ! ЧТО ВЫ МУЧАЕТЕСЬ?". Как будто, задавая вопрос и отвечая сам же на него потом нам, ты говоришь: НУ ВЫ И... КАК ВЫ МОГЛИ ПОДУМАТЬ ТОЛЬКО, ЧТО Я ТАКОГО НЕ ПРОБОВАЛ ДЕЛАТЬ?..
Вообще-то индексы не перестраиваются. Они дописываются к последнему элементу.
Ты бы лучше ПОДРОБНО объяснил задачу, а не задавал вопрос, ОТРИЦАТЕЛЬНЫЙ ответ на который, ты сам заранее уже знаешь и ждешь чтобы тебе его просто подтвердили. Не спеши с выводами, а потерпи и решение придет. ;) Я понял, тебе надо будет пробегать таким циклом по поиску лок лишь ОДИН раз, на старте модуля? Или я опять не догнал? |
||||||||
![]()
Сообщение
#291
|
|||
Level 3 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Можно сохранять ResRef для подтверждения правильности локации. Но если пройти по модулю нужно один раз за версию - вопрос перешел в разряд теретических. Ведь какой-никакой метод, ты говришь, уже нашел. |
||
![]()
Сообщение
#292
|
|||||
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Шо цэ есть, ЗАДВОЕНИЕ? :unsure: Добавлено в [mergetime]1098827906[/mergetime]
Вот-вот. Отлично Shad! :yes: :good: |
||||
![]()
Сообщение
#293
|
|
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Я извиняюсь за резкость. Я не правильно выразился и благодарен тем, кто откликнулся. Уважаю ваш сайт и форум за нейтральность по отношению к шардам и их разборкам и открытость по отношению к игрокам. Ваш форум - это своеобразная "нейтральная территория", накоторой могут общаться все коммьюнити НВН.
Решение я нашел такое: Я сохраняю в БД какую-то локацию, потом каким-то внешним редактором (в моем случае FoxPro) правлю DBF файл и соэдаю в нем 64000 записи с последовательно увеличивающимся индексом и названием переменной (В моем случае MAP1 , 2 и т.д.), в которой присутствует индекс. Затем в скрипте загрузки модуля вставляю следующий текст: void CheckAreaTag() { object oMod = GetModule(); int iCur = GetLocalInt(oMod,"CurCount"); if (iCur < 64000) { WriteTimestampedLogEntry(" ~ Continue ~ "+IntToString(iCur)); int iBegin = iCur; iCur = iCur +2000; SetLocalInt(oMod,"CurCount",iCur); object oArea; object oTemp; location lLoc; string sVarName; int i; for (i = iBegin; i < iCur; i++) { sVarName = "MAP"+IntToString(i); lLoc = GetCampaignLocation("TEST",sVarName); oArea = GetAreaFromLocation(lLoc); if (GetIsAreaNatural(oArea)!=AREA_INVALID) WriteTimestampedLogEntry(sVarName + " id "+IntToString(i)+" ; "+"object "+ObjectToString(oArea)+" ; "+GetTag(oArea)+" ; "+GetName(oArea)+" ; "+GetResRef(oArea)); } DelayCommand(2.0f, CheckAreaTag()); } else WriteTimestampedLogEntry(" ~ End ~ "+ IntToString(iCur)); } void main() { WriteTimestampedLogEntry(" ~ Begin check area tag ~ "); CheckAreaTag(); } Получившийся текстовый лог-файл открываю в Exсel-e и сохраняю как таблицу (поля я специально разделяю знаком ; , так как Exсel понимает этот знак как разделитель. Дальше уже в Exсel-e можно сортировать , фильтровать и анализировать записи. Таким же образом можно получить сводную информацию обо всех объектах, находящихся на картах в модуле (не в палитре), например о НПС и плэйсэйблах |
![]()
Сообщение
#294
|
|||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Тобур даже я вчера до двух ночи голову ломал. ;) Зря ты так :drag:
Все ок! ;) ТО что ты сейчас сказал настолько важно, к примеру для меня :crazy: Ты даже не представляешь :yes: Заходи к нам почаще! :drag: Все плохое забыли :good: И молодец, что победил проблему. Кинь ее в базу скриптов, очень людям поможешь. |
||
![]()
Сообщение
#295
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Тобур
Все ок ;). Ты - взрослый человек. :good: По делу... А дальше что? Ну есть у тебя экселевский файл. И что с ним делать дальше? Я думал тебе данные нужны для обратного использования потом в скрипте... :unsure: |
![]()
Сообщение
#296
|
|
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Изначально моя цель была найти карты, у которых совпадают тэги. Для этого мне надо было получить список тэгов всех карт в модуле - я его получил, хоть и извращенным способом. После этого достаточно отсортировать в экселе таблицу по полю тэга и пробежаться взглядом по ней, чтобы найти задвоенность (дубляж) тэга. Я нашел в 470 картах 4 дубляжа - это тот результат, который я и хотел получить :)
|
![]()
Сообщение
#297
|
|
Level 4 ![]() ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Орк NWN: Скриптинг [PW] ![]() |
Менее извратный способ - создать 2дашку и забивать в нее таги(или ресрефы) локаций. Всего то делов остается - пробежать все строчки одного столбца( с тагами карт ) :crazy:
|
![]()
Сообщение
#298
|
|
Level 3 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Вот, кстати, ещё одно решение. Придумал днём, пока в инет доступа небыло: Можно взять теги прямо из файлов *.are модуля, так сказать напрямую. Я просмотрел несколько (5) файлов карт, из кампаний и новосозданого модуля. Во всех теги хранились после последовательности Tile_AnimLoop3 ровно через 6 байт.
|
![]()
Сообщение
#299
|
|||
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
А следуя из этого, программульку-анализатор на Сях или Дельфях написать - как 2 пальца... ;) |
||
![]()
Сообщение
#300
|
|
Level 2 ![]() Класс: Обыватель Характер: True Neutral Раса: Рептилия ![]() |
Вопрос. Как убрать ВСЕ из инвентаря (нет ли функции соответствующей, аль чето такого)? :umnik:
|
![]()
Сообщение
#301
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Ищи в базе скриптов. Есть кусок кода.
|
![]()
Сообщение
#302
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Сидел вчера скриптил и вдруг у меня возник комплекс неполноценности...
Я хочу чтобы при активировании одного предмета - игроку открывался инвентарь сундука который стоит в недоступном ему месте. Тоесть кто-то в может в тот сундук положить что захочет а игрок когда активирует предмет ему откроется инвентарь того самого сундука где лежит предмет который кто то положил. Вобщем что то вроде почты:) Ну естественно беру команду OpenInventory(GetObjectByTag(ТэгСундука),GetItemActivator()); И нифига... Теперь вопрос - что я в этой жизни упустил? :swoon: |
![]()
Сообщение
#303
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
хм..как насчет того, что далековато до сундука (в другой локе, или просто растояние большое)
|
![]()
Сообщение
#304
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Эх, Лекс, ну ведь для других действий то он этот сундук хоть за 22 локи использовать будет. Там же не Nearest:) Пробовал поставить прям рядом. Стою у сундука кликаю на сундук - открывается инвентарь, кладу вещь, использую предмет - инвентарь не вызывается, хоть расшибись. :bad:
|
![]()
Сообщение
#305
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
хм.. (другие действия это фигня, открывай, закрывай его хоть на другом конце модуля. А вот для показа инвентаря они должны быть близко. Посмотри на хенчшу и игрока.)..кстати..может функция только с кричами работает??
|
![]()
Сообщение
#306
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Лекс да я и с кричами пробовал! И около сундука предмет активировал. И около крича. Вот нет и все тут. Ладно, чем вилами по воде возить лучше подождем пока кто нить справится :DB:
|
![]()
Сообщение
#307
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
попробую дома в своем СоУ 1.32 сделать
|
![]()
Сообщение
#308
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Аваддон
Хоть расшибись, но сундук не откроется (точнее не покажет свой инвентарь!), если ты, как чар, будешь дальше "рабочего" экрана от него находится. Это движковое. Пример. Открой инвентарь хенча, потом скажи ему (с открытым на экране инвентарем!) через радиальное меню, типа: "стой здесь". Отегай по-тихому... инвентарь захлопнется эдак через метров 15... |
![]()
Сообщение
#309
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Вот блин :vava: А как можно тогда отсрочить событие CreateItemOnObject? Delay его не берет
|
![]()
Сообщение
#310
|
|||
Лорд AxisTown'a ![]() Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг ![]() |
ммм точно ? у мя в одном месте прошла вот такая несуразная строчка...сработало DelayCommand(fDelay,ActionGiveItem( CreateItemOnObject(sRezult,oFirst,1),oFirst)); |
||
![]() ![]() |
Текстовая версия | Сейчас: 14th May 2025 - 11:38 |