Версия:Скрипт для Sphere server 56b-56c
Описание:С введением данной системы, все полученные ценные ресурсы при освежевании трупа сразу падают в инвентарь игрока.
Можно корректировать какие части тела появляются при разрезании трупа игрока.
Добавлена визуализация.
Понижение известности и кармы при освежевании трупа игрока.
Если в трупе остались вещи, они будут под разрезанным трупом.
После освежевания труп пропадает, что облегчает процесс резки когда вокруг много монстров.
Устранена ситуация когда игрок не знает, какой труп он разрезал а какой еще нет.
Установка:Все нижеуказанное вставить в любой скрипт до [EOF]
1: Добавляем в TYPE предметов, способных резать, две функции.
Код
[TYPEDEF T_WEAPON_SWORD]
ON=@TARGON_ITEM
IF (<SRC.TARG.TYPE>==T_CORPSE)
IF (<SRC.TARG.AMOUNT>==400) || (<SRC.TARG.AMOUNT>==401)
CUTSOMECORPSE
ELSE
CUTSOMENPCCORPSE
ENDIF
RETURN 1
ENDIF
[TYPEDEF T_WEAPON_FENCE]
ON=@TARGON_ITEM
IF (<SRC.TARG.TYPE>==T_CORPSE)
IF (<SRC.TARG.AMOUNT>==400) || (<SRC.TARG.AMOUNT>==401)
CUTSOMECORPSE
ELSE
CUTSOMENPCCORPSE
ENDIF
RETURN 1
ENDIF
2: Добавляем скрипт этих двух функций.
Код
[FUNCTION CUTSOMECORPSE]
//Проверка дистанции
IF (<SRC.TARG.DISTANCE> > 3) || !(<SRC.TARG.CANSEELOS>)
SRC.SYSMESSAGE @0486 Too far
RETURN 1
ENDIF
IF (<SRC.TARG.TYPE>==T_CORPSE) && ((<SRC.TARG.AMOUNT>==400) || (<SRC.TARG.AMOUNT>==401))
//Бросаем предметы из трупа на землю.
FORCONT <SRC.TARG.UID>
IF !(<ATTR>==ATTR_MOVE_NEVER) && !(<ATTR>==ATTR_NEWBIE) && !(<ATTR>==ATTR_INVIS) && !(<ATTR>==attr_static) && !(<TYPE>==T_EQ_SCRIPT) && !(<TYPE>==T_HAIR) && !(<TYPE>==T_BEARd)
P=<SRC.TARG.P>
ATTR=<ATTR> | ATTR_DECAY
TIMER=1800
ENDIF
ENDFOR
//Создаем человеческие останки
SERV.NEWITEM=I_FLESH_HEAD
IF (<SRC.TARG.LINK.ISPLAYER>)
NEW.NAME=head of <SRC.TARG.LINK.NAME>
ENDIF
NEW.P=<SRC.TARG.P>
NEW.ATTR=ATTR_DECAY
NEW.TIMER=120
SERV.NEWITEM=I_FLESH_torso
NEW.P=<SRC.TARG.P>
NEW.ATTR=ATTR_DECAY
NEW.TIMER=120
SERV.NEWITEM=I_FLESH_LEFT_ARM
NEW.P=<SRC.TARG.P>
NEW.ATTR=ATTR_DECAY
NEW.TIMER=120
SERV.NEWITEM=I_FLESH_RIGHT_ARM
NEW.P=<SRC.TARG.P>
NEW.ATTR=ATTR_DECAY
NEW.TIMER=120
SERV.NEWITEM=I_FLESH_LEFT_LEG
NEW.P=<SRC.TARG.P>
NEW.ATTR=ATTR_DECAY
NEW.TIMER=120
SERV.NEWITEM=I_FLESH_RIGHT_LEG
NEW.P=<SRC.TARG.P>
NEW.ATTR=ATTR_DECAY
NEW.TIMER=120
SERV.NEWITEM=I_SPECIALBLOOD_<EVAL {1 5}>
NEW.P=<EVAL <SRC.TARG.P.X> + {-1 1}>,<EVAL <SRC.TARG.P.Y> + {-1 1}>,<SRC.TARG.P.Z>
NEW.TIMER={4 8}
SRC.ANIM 32
// Понижаем карму и фаму при порезе трупов
IF !(<SRC.ACCOUNT.LASTIP>==<SRC.TARG.LINK.ACCOUNT.LASTIP>) && (<SRC.TARG.LINK.ISPLAYER>)
IF (<SRC.TARG.DTAG0.LINKED_KARMA> > 0)
SRC.KARMA=<EVAL (<SRC.KARMA> - <EVAL ((<SRC.TARG.DTAG0.LINKED_KARMA>*10)/100)>)>
SRC.SYSMESSAGE @0486 Вы потеряли <EVAL ((<SRC.TARG.DTAG0.LINKED_KARMA>*10)/100)> кармы.
ELSE
SRC.KARMA=<EVAL (<SRC.KARMA> - 500)>
SRC.FAME=<EVAL (<SRC.FAME> - 300)>
SRC.SYSMESSAGE @0486 Вы потеряли 500 кармы и 300 известности.
ENDIF
ENDIF
SRC.TARG.REMOVE
RETURN 1
ENDIF
Код
[FUNCTION CUTSOMENPCCORPSE]
IF (<SRC.TARG.DISTANCE> > 3) || !(<SRC.TARG.CANSEELOS>)
SRC.SYSMESSAGE @0486 Too far.
RETURN 1
ELIF (<ISEMPTY <SRC.TARG.TAG0.NPCID>>) || (<SRC.TARG.TAG0.CARVED>==1)
SRC.SYSMESSAGE @0486 Вы освежевали труп, но ничего полезного не нашли.
ELIF (<SRC.TARG.TYPE>==T_CORPSE) && (<SRC.TARG.TAG0.CARVED>==0) && !(<ISEMPTY <SRC.TARG.TAG0.NPCID>>)
SRC.SYSMESSAGE @0487 Вы разрезали труп на кусочки.
FOR X 1 <SERV.CHARDEF.<SRC.TARG.TAG0.NPCID>.RESOURCES>
IF (<SERV.CHARDEF.<SRC.TARG.TAG0.NPCID>.RESOURCES.<LOCAL.X>.VAL> > 0)
SERV.NEWITEM=<SERV.CHARDEF.<SRC.TARG.TAG0.NPCID>.RESOURCES.<LOCAL.X>.KEY>
NEW.AMOUNT=<EVAL <SERV.CHARDEF.<SRC.TARG.TAG0.NPCID>.RESOURCES.<LOCAL.X>.VAL>>
NEW.CONT=<SRC.FINDLAYER.21.UID>
SRC.ANIM=32
SRC.SYSMESSAGE @0487 Получено: + <SERV.CHARDEF.<SRC.TARG.TAG0.NPCID>.RESOURCES.<LOCAL.X>.VAL><NEW.NAME>
ENDIF
ENDFOR
SRC.TARG.TAG.CARVED=1
FOR X <EVAL (<SRC.TARG.P.X> - 2)> <EVAL (<SRC.TARG.P.X> + 2)>
FOR Y <EVAL (<SRC.TARG.P.Y> - 2)> <EVAL (<SRC.TARG.P.Y> + 2)>
IF 30 > <R100>
SERV.NEWITEM=I_SPECIALBLOOD_<EVAL {1 5}>
NEW.P=<DLOCAL.X>,<DLOCAL.Y>,<SRC.TARG.P.Z>
NEW.TIMER={60 70}
ENDIF
IF 20 > <R100>
SERV.NEWITEM=I_SPECIAL_BONE_<EVAL {1 12}>
NEW.P=<DLOCAL.X>,<DLOCAL.Y>,<EVAL (<SRC.TARG.P.Z> + 1)>
NEW.TIMER={80 100}
ENDIF
ENDFOR
ENDFOR
FORCONT <SRC.TARG.UID>
P=<SRC.TARG.P>
ATTR=<ATTR> | ATTR_DECAY
TIMER=1800
ENDFOR
SRC.TARG.REMOVE
ENDIF
RETURN 1
[EOF]
3: Добавляем предметы для визуализации: кровь и кости.
Код
[ITEMDEF I_SPECIALBLOOD_1]
ID=0122a
TYPE=T_BLOOD
NAME=Blood
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIALBLOOD_2]
ID=0122b
TYPE=T_BLOOD
NAME=Blood
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIALBLOOD_3]
ID=0122c
TYPE=T_BLOOD
NAME=Blood
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIALBLOOD_4]
ID=0122d
TYPE=T_BLOOD
NAME=Blood
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIALBLOOD_5]
ID=0122e
TYPE=T_BLOOD
NAME=Blood
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_1]
ID=6929
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_2]
ID=6930
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_3]
ID=6931
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_4]
ID=6932
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_5]
ID=6933
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_6]
ID=6934
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_7]
ID=6935
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_8]
ID=6936
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_9]
ID=6937
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_10]
ID=6938
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_11]
ID=6939
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
[ITEMDEF I_SPECIAL_BONE_12]
ID=6940
TYPE=T_BONE
NAME=Bone
WEIGHT=1
ON=@CREATE
ATTR=ATTR_MOVE_NEVER|ATTR_DECAY
ON=@TIMER
REMOVE
RETURN 1
(IMG:
http://olmer.su/img/news_images/23.09.18.jpg)
UPD: Отредактировано благодаря замечаниям Sirocco.