Выложенно в "Скрипты 54-55"
telepups'ом.
Привожу для сведения, потому как вопрос насчет хилинга задается постоянно.
Код
[ITEMDEF 0e21]
DEFNAME=i_bandage
RESOURCES=i_cloth
TYPE=T_eq_script
WEIGHT=.1
VALUE=2
DUPELIST=0ee9
CATEGORY=Items by Professions
SUBSECTION=Healer
DESCRIPTION=Clean Bandages
ON=@DClick
IF (0<SRC.FINDID.i_memory_healer>)
SRC.SYSMESSAGE You're already using your Healing skill.
RETURN 1
ENDIF
IF (<CONT.TOPOBJ.UID> != <SRC.UID>)
SRC.SYSMESSAGE You may only use these if they are on your person.
RETURN 1
ELSE
SRC.VAROPTIONS
TARGET Please target someone to use these on.
RETURN 1
ENDIF
ON=@Targon_Char
IF (<SRC.TARG.DISTANCE>>=5)
SRC.SYSMESSAGE The target is too far away.
RETURN 1
ENDIF
IF (0<VAR.POISON>==1)
IF (<SRC.TARG.FLAGS>&statf_poisoned)
VAR.CUREACT=<SRC.ACT>
SRC.NEWITEM=i_memory_healer
SRC.ACT.MORE=1
SRC.ACT.CONT=<SRC.UID>
SRC.ACT.LINK=<SRC.TARG.UID>
SRC.ACT.TIMER=5
SRC.ACT=<VAR.CUREACT>
VAR.CUREACT=
SRC.EVENTS +e_death_mem_fix
IF (0<VAR.INTERRUPT>==1)
SRC.EVENTS +e_healing_interrupt
ENDIF
RETURN 1
ENDIF
ENDIF
IF (<SRC.TARG.FLAGS>&statf_dead)
IF (<SRC.HEALING>>=9000) && (<SRC.ANATOMY>>=9000)
SRC.HITS=<SRC.HITS> +- 50
SRC.TARG.RESURRECT
SRC.CONSUME 2 i_bandage
SRC.TARG.CONSUME 1 i_deathshroud
VAR.HEALERUID=<SRC.UID>
IF (0<VAR.CANCEL>==2)
SRC.ACTION -1
ENDIF
RETURN 1
ELSE
SRC.SYSMESSAGE You are lacking the required skill to do this.
RETURN 1
ENDIF
ENDIF
IF (<SRC.TARG.HITS>==<SRC.TARG.STR>)
SRC.SYSMESSAGE The target seems to be healthy.
RETURN 1
ELSE
IF (<SRC.TARG.UID>==<SRC.UID>)
SRC.SYSMESSAGE You apply a bandage to yourself.
SRC.CONSUME 1 i_bandage
VAR.HEALERUID=<SRC.UID>
IF (0<VAR.CANCEL>==2)
SRC.ACTION -1
ENDIF
VAR.HEALACT1=<SRC.ACT>
SRC.NEWITEM=i_memory_healer
SRC.ACT.CONT=<SRC.UID>
SRC.ACT.LINK=<SRC.TARG.UID>
SRC.ACT.TIMER=4
SRC.EVENTS +e_death_mem_fix
IF (0<VAR.INTERRUPT>==1)
SRC.EVENTS +e_healing_interrupt
ENDIF
SRC.ACT=<VAR.HEALACT1>
VAR.HEALACT1=
RETURN 1
ELSE
SRC.TARG.SYSMESSAGE <SRC.NAME> has applied a bandage to you.
SRC.SYSMESSAGE You apply a bandage to <SRC.TARG.NAME>.
SRC.CONSUME 1 i_bandage
VAR.HEALERUID=<SRC.UID>
IF (0<VAR.CANCEL>==2)
SRC.ACTION -1
ENDIF
VAR.HEALACT2=<SRC.ACT>
SRC.NEWITEM=i_memory_healer
SRC.ACT.CONT=<SRC.UID>
SRC.ACT.LINK=<SRC.TARG.UID>
SRC.ACT.TIMER=4
SRC.EVENTS +e_death_mem_fix
IF (0<VAR.INTERRUPT>==1)
SRC.EVENTS +e_healing_interrupt
ENDIF
SRC.ACT=<VAR.HEALACT2>
VAR.HEALACT2=
RETURN 1
ENDIF
ENDIF
[ITEMDEF i_memory_healer]
ID=i_memory
NAME=Healer
WEIGHT=0
TYPE=t_eq_script
ON=@Create
ATTR=attr_newbie|attr_invis|attr_decay
ON=@Timer
IF (<MORE>==1)
CUREPOISON
RETURN 1
ENDIF
IF (<LINK.FLAGS>&statf_dead)
REMOVE
RETURN 1
ENDIF
VAR.HEALINGACT=<CONT.ACT>
IF (<CONT.HEALING>>=001) && (<CONT.HEALING><200)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {1 3}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=200) && (<CONT.HEALING><300)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {2 5}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=300) && (<CONT.HEALING><400)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {5 7}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
CLINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=400) && (<CONT.HEALING><500)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<CONT.HITS> + {6 10}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=500) && (<CONT.HEALING><600)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {8 14}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=600) && (<CONT.HEALING><700)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {9 17}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=700) && (<CONT.HEALING><800)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {11 20}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=800) && (<CONT.HEALING><900)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {13 24}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=900) && (<CONT.HEALING><1000)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {16 32}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=1001) && (<CONT.HEALING><2001)
FAIL_CHANCE
GAIN_CHANCE
CRIMACTION
LINK.HITS=<LINK.HITS> + {15 20}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
IF (<CONT.HEALING>>=1000)
IF (0<VAR.CRIMINAL>==2)
RETURN 0
ELSE
CRIMACTION
LINK.HITS=<LINK.HITS> + {30 42}
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.HEALINGACT>
VAR.HEALINGACT=
VAR.GAINCHANCE=
IF (<LINK.HITS> > <LINK.STR>)
LINK.HITS=<LINK.STR>
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
CONT.EVENTS -e_healing_interrupt
CONT.EVENTS -e_death_mem_fix
[FUNCTION Fail_Chance]
VAR.FAILCHANCE=<EVAL {1 1000}>
IF (<VAR.FAIL>==2)
RETURN 0
ENDIF
IF (<VAR.FAIL>==1)
IF <VAR.FAILCHANCE> > <CONT.HEALING>
IF (<LINK.UID>==<CONT.UID>)
LINK.SYSMESSAGE You have failed to heal yourself.
CONT.FINDID.i_memory_healer.REMOVE
RETURN 1
ELSE
CONT.SYSMESSAGE You have failed to heal <CONT.NAME>.
LINK.SYSMESSAGE <LINK.NAME> has failed to heal you.
CONT.FINDID.i_memory_healer.REMOVE
RETURN 1
ENDIF
ENDIF
ENDIF
[FUNCTION Gain_Chance]
IF <CONT.HEALING>>=1000
VAR.GAINCHANCE=0
RETURN 1
ELSE
VAR.GAINCHANCE=<VAR.GAINCHANCE> + 90
IF 0<VAR.GAINCHANCE> > <LINK.HEALING>
CONT.HEALING=<CONT.HEALING> + 0.1
VAR.GAINCHANCE=0
RETURN 0
ENDIF
ENDIF
[FUNCTION VarOptions]
// Enable is 1.
// Disable is 2 .
VAR.INTERRUPT=2
VAR.CRIMINAL=1
VAR.CANCEL=1
VAR.POISON=2
VAR.FAIL=1
[FUNCTION CurePoison]
VAR.POISONACT=<CONT.ACT>
IF (0<VAR.POISON>==2)
RETURN 1
ELSE
IF (<CONT.HEALING>>=001) && (<CONT.HEALING><200)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=200) && (<CONT.HEALING><300)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=300) && (<CONT.HEALING><400)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=400) && (<CONT.HEALING><500)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=500) && (<CONT.HEALING><600)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=600) && (<CONT.HEALING><700)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.POISONACT>
REMOVE
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=700) && (<CONT.HEALING><800)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
REMOVE
LINK.UPDATE
CONT.UPDATE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=800) && (<CONT.HEALING><900)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<CONT.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=900) && (<CONT.HEALING><1000)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=1000)
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
VAR.GAINCHANCE=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
IF (<CONT.HEALING>>=1001) && (<CONT.HEALING><2001)
FAIL_POISON
GAIN_CHANCE
CRIMACTION
LINK.FINDLAYER(42).REMOVE
LINK.NEWITEM=i_bandage_bloody
LINK.ACT.CONT=<LINK.UID>
LINK.ACT=<VAR.POISONACT>
VAR.POISONACT=
LINK.UPDATE
CONT.UPDATE
REMOVE
RETURN 1
ENDIF
ENDIF
CONT.EVENTS -e_healing_interrupt
CONT.EVENTS -e_death_mem_fix
[FUNCTION Fail_Chance]
VAR.FAILCHANCE=<EVAL {1 1000}>
IF (<VAR.FAIL>==2)
RETURN 0
ENDIF
IF (<VAR.FAIL>==1)
IF <VAR.FAILCHANCE> > <CONT.HEALING>
IF (<LINK.UID>==<CONT.UID>)
LINK.SYSMESSAGE You have failed to heal yourself.
CONT.FINDID.i_memory_healer.REMOVE
RETURN 1
ELSE
CONT.SYSMESSAGE You have failed to heal <CONT.NAME>.
LINK.SYSMESSAGE <LINK.NAME> has failed to heal you.
CONT.FINDID.i_memory_healer.REMOVE
RETURN 1
ENDIF
ENDIF
ENDIF
[FUNCTION Fail_Poison]
VAR.FAILPOISON=<EVAL {1 1000}>
IF (<VAR.FAIL>==2)
RETURN 0
ENDIF
IF (<VAR.FAIL>==1)
IF <VAR.FAILPOISON> > <CONT.HEALING>
IF (<LINK.UID>==<CONT.UID>)
LINK.SYSMESSAGE You have failed to cure yourself.
CONT.FINDID.i_memory_healer.REMOVE
RETURN 1
ELSE
CONT.SYSMESSAGE You have failed to cure <CONT.NAME>.
LINK.SYSMESSAGE <LINK.NAME> has failed to cure you.
CONT.FINDID.i_memory_healer.REMOVE
RETURN 1
ENDIF
ENDIF
ENDIF
[FUNCTION CrimAction]
IF (0<VAR.CRIMINAL>==2)
RETURN 1
ELSE
IF (<LINK.KILLS> >= <SERV.MURDERMINCOUNT>) || (<LINK.FLAGS>&statf_criminal)
CONT.SYSMESSAGE You are now a criminal for your action.
CONT.CRIMINAL=1
ENDIF
ENDIF
[EVENTS e_healing_interrupt]
ON=@GetHit
MESSAGE Interrupted!
FINDID.i_memory_healer.REMOVE
EVENTS -e_healing_interrupt
RETURN 0
[EVENTS e_death_mem_fix]
ON=@Death
FINDID.i_memory_healer.REMOVE
EVENTS -e_death_mem_fix
RETURN 0