• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.

Автор Тема: Avoiding Message Spam  (Прочитано 625 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Avoiding Message Spam
« : 09 Декабрь, 2006, 02:08:32 »
0
Перевод Eugene: Avoiding Message Spam
Aвтор: guidobot101

Как избежать назойливых сообщений для объектов инвентаря


Если вам тоже неприятно лицезреть сообщения типа "xxx добавлен" или "xxx удален", то эта статья для вас.

Вот основная идея для добавления одного предмета:

set itemRef to PlaceAtMe MyModdedItemType 1 0 0
itemRef.Activate player

Примечания:

1) Этот метод может быть использован только для добавления непостоянных объектов.

2) Необходимость в отдельных названиях для удержания скриптов на объектах особенно проявляется здесь!

Вот более специфическая версия, которая позволяет добавлять N стандартных объектов в инвентарь (без назойливых сообщений), используя внутри-игровую функцию скрипта:


scn MyAddItemScript
; item type/number
short numItems
short itemType

; private
short runAdd
ref itemRef

Begin OnActivate

if numItems > 0
  set runAdd to 1
endif

End

Begin GameMode

if runAdd == 0
  Return
endif

if itemType == 0
  set itemRef to player.PlaceAtMe Gold001 1 0 0
elseif itemType == 1
  set itemRef to player.PlaceAtMe Lockpick 1 0 0
elseif itemType == 2
  set itemRef to player.PlaceAtMe RepairHammer 1 0 0
elseif itemType == 3
  set itemRef to player.PlaceAtMe Torch02 1 0 0
else
  set itemRef to 0
endif
if itemRef
  itemRef.Activate player
endif
set numItems to (numItems)-1
set runAdd to numItems

Далее для использования:

; какой-нибудь скрипт – пример
set MyAddItemFunc.numItems to 1+0.1*GetRandomPercent; 1-10 для номера
set MyAddItemFunc.itemType to 0.04*GetRandomPercent; 0-3 для типа
MyAddItemFunc.Activate player 1

Примечание: Поскольку фактическое добавление многозначных объектов происходит в GameMode, ничего не произойдет пока не будет закончен текущий скрипт. Вы бы легко могли добавить один из них в блок activate и потом N-1 в другие, или добавить больше чем один за раз в GameMode, и т.д. Это просто образец, с этим кодом нужно поэкспериментировать самостоятельно, что бы увидеть что вам лучше подходит.

Для выбрасывания предметов из инвентаря без назойливых сообщений, можно использовать метод Drop. Нужно отметить, что по умолчанию Drop не заменяет метод OnDrop.

Чтобы удалить предмет из инвентаря, вам потребуется своя собственная копия внутри-игрового объекта, или что более предпочтительно свой собственный заскриптованный объект. Это наилучшим образом осуществляется при помощи глобальной переменной, в случае если у вас есть многочисленные копии. В этом случае глобальная переменная в скрипте привязана к MyQuest, а объект к MyItem.

Begin GameMode
...
if MyQuest.RemoveMyItem > 0 && player.GetItemCount MyItem > 0
  set MyQuest.RemoveMyItem to (MyQuest.RemoveMyItem)-1
  RemoveMe
endif
...
End

Данный код ничего не делает для объекта (MyItem) не находящегося на игроке. Поскольку MyQuest.RemoveMyItem может быть соответственно не названо, "бесшумное" удаление объекта следует производить с помощью данного:

set MyQuest.RemoveMyItem to player.GetItemCount MyItemОсновные примечания:

1) Конкретные объекты, использованные в MyAddItemScript – специальные и не могут быть скопированы как объекты, имеющие те же самые внутри-игровые свойства. Они могут быть заскриптованы, но это плохая идея из-за возможных конфликтов мода и других причин. Тем не менее, вы можете сохранить с некоторыми дополнениями список ID объектов (как массив или список ссылок) и вызвать RemoveMe по сохраненной ссылке ID.

2) Составные объекты, например, при создании группы с единственным названием PlaceAtMe или AddItem, могут быть удалены только с использованием RemoveItem (функция Drop тоже работает, если вы ее используете).

3) Я все еще пытаюсь найти способ избежать назойливых сообщений EquipItem для составных объектов.
Награды За огромный вклад в развитие Румора

Теги:
 

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal