Когда игрок марчит местность, под ним создается видимый игрокам предмет.
Предупреждающий, что местность замарчена, тут не стоит ставить базу, дом, загон для животных и тд.
SERV.NEWITEM=I_RUNEBOOK_RUNE
//Запись тэгов на руну на земле
NEW.TAG.LINKED_RUNEBOOK=<UID>
NEW.TAG.LINKED_RUNEBOOK_SLOT=<DLOCAL.FREE_SPACE>
NEW.TAG.LINKED_OWNER_UID=<SRC.UID>
NEW.TAG.LINKED_OWNER_NAME=<SRC.NAME>
TAG.LINKED_RUNE_<DLOCAL.FREE_SPACE>=<NEW.UID>
NEW.P=<SRC.P.X>,<SRC.P.Y>,<EVAL (<SRC.P.Z> - 1)>,<SRC.P.M>
[FUNCTION REMOVE_RUNE]
//SERV.NEWITEM=I_RETURN_RUNE
//NEW.BOUNCE
TRY TAG.RUNEBOOK.<EVAL <ARGV[0]>>=
TRY TAG.RUNEBOOK.LOCATION.<EVAL <ARGV[0]>>=
IF <ARGV[0]> < 16
FOR <EVAL <ARGV[0]>+1> 16
IF !<ISEMPTY <TAG.RUNEBOOK.<EVAL <LOCAL._FOR>>>>
TRY TAG.RUNEBOOK.<EVAL <LOCAL._FOR>+-1>=<TAG.RUNEBOOK.<EVAL <LOCAL._FOR>>>
TRY TAG.RUNEBOOK.LOCATION.<EVAL <LOCAL._FOR>+-1>=<TAG.RUNEBOOK.LOCATION.<EVAL <LOCAL._FOR>>>
TRY TAG.RUNEBOOK.<EVAL <LOCAL._FOR>>=
TRY TAG.RUNEBOOK.LOCATION.<EVAL <LOCAL._FOR>>=
ENDIF
ENDFOR
ENDIF
[FUNCTION CHECK_RUNEBOOK_RUNE]
FORINSTANCES I_RUNEBOOK_RUNE
...
ENDFOR
Если есть доступ к событию типа "OnDelete", то просто проверять содержимое рунабуки на такого рода записи и чистить привязки.
Либо добавить марку ссылки на записи, и к примеру во время каждого сейва проверять, если у какого то либо марка ссылка введет на NULL, то удалять марк.
@OnDelete
Срабатывает ВСЕГДА когда предмет исчезает с сервера (удаление, продажа, пропажа на земле) ?>
> если у какого то либо марка ссылка введет на NULL
Вот это и не знаю как написать.
а что разве сфера сама не чистит от мусорных линков.
надо было эти метки линковать их бы автоматически удалило по ошибке
Invalid code=2205
а то навыдумываю функций... еще и тагов лишних мешок, а достаточно было бы ссылки на рунбук.
[FUNCTION CHECK_RUNEBOOK_RUNE]
ref1 = <uid>
FORINSTANCES I_RUNEBOOK_RUNE
ref2 = <TAG.LINKED_RUNEBOOK>
if <ref2.baseid> != i_runebook
remove
else
ref1.link = <ref2.uid>
endif
ENDFOR
//Удаляем все марки от не имеющихся рунбуков
[FUNCTION CHECK_RUNEBOOK_RUNE]
IF (<EVAL <SERV.RTIME.FORMAT %H>>==0) && (<EVAL <SERV.RTIME.FORMAT %M>>==5)
REF1 = <UID>
FORINSTANCES I_RUNEBOOK_RUNE
REF2 = <TAG0.LINKED_RUNEBOOK>
IF (<REF2.BASEID> != I_RUNEBOOK)
SERV.LOG <UID> -> HAVE NOT: <REF2.BASEID> <REF2.UID>
REMOVE
//ELSE
//SERV.LOG <UID> -> <REF2.NAME> <REF2.UID>
ENDIF
ENDFOR
ENDIF
//Удаляем все марки от не имеющихся звезд возврата
[FUNCTION CHECK_STAR_OF_RETURN_RUNE]
//IF (<EVAL <SERV.RTIME.FORMAT %H>>==0) && (<EVAL <SERV.RTIME.FORMAT %M>>==5)
REF1 = <UID>
FORINSTANCES I_STAR_OF_RETURN_RUNE
REF2 = <TAG0.LINKED_RUNEBOOK>
IF (<REF2.BASEID> != I_RETURN_RUNE)
SERV.LOG <UID> -> HAVE NOT: <REF2.BASEID> <REF2.UID>
REMOVE
//ELSE
//SERV.LOG <UID> -> <REF2.NAME> <REF2.UID>
ENDIF
ENDFOR
//ENDIF
и поэтому мы будем городить огород...
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)