This is just an embrional script, but i would like ideas for improvement and make it work better (if possible)
Code:
[FUNCTION f_assegna_patrol]
//serv.log <args> <- i tried to check if there aren't arguments..but doesn't work like this... help?
//IF !(<args>)
//src.Sysmessage You need 6 arguments: Continent (ex Sigil), Region (ex Lumen), Type (ex Guard), Route (ex 1), How Many chars(ex 4), Radius(4)
//ELSE
TARGETF f_patrol <argv[0]>,<argv[1]>,<argv[2]>,<argv[3]>,<argv[4]>,<argv[5]>
src.sysmessage On whom u wanna put a patrol script?
//ENDIF
RETURN 1
[FUNCTION f_patrol]
local.npchome=<serv.list.Patrol_<argv[0]>_<argv[1]>_<argv[2]>_<argv[3]>.0>
FORCHARS <eval <argv[5]>> // //note: actually the forchars starts from the player not from the targetted npc... meh =/
IF ((<ISCHAR>) && (<brain>))
events +e_patrol
tag.status = 2
tag.patrol_routenum=<argv[3]>
home = <local.npchome>
homedist = 3
goto <home>
LOCAL.FIND_PATROLCHAR=1
ENDIF
ENDFOR
IF (<LOCAL.FIND_PATROLCHAR>)
serv.newitem i_patrol_controller
new.tag.infolist=<argv[0]>,<argv[1]>,<argv[2]>,<argv[3]>,<argv[4]>
new.tag.patrol_now=0
new.p = <local.npchome>
new.more1=0
new.timer=5
ENDIF
[ITEMDEF i_patrol_controller]
ID=I_CRYSTAL_RED
Name=Patrolling Controller [DO NOT REMOVE!]
TYPE=t_eq_script
ON=@CREATE
ATTR=ATTR_Invis|attr_move_never
ON=@TIMER
REF1=<uid>
IF <MORE1>=0
LOCAL.TIMERVAR=0
LOCAL.LIGHTGREEN=0
LOCAL.PATROL_COUNT=0
FORCHARS 3
IF (<tag0.status> == 2)
LOCAL.PATROL_MAXCHARCOUNT=<ritorna 5,<ref1.tag.infolist>> //n of npc patrolling together
IF <eval <TAG.PATROL_ROUTENUM>> == <ritorna 4,<ref1.tag.infolist>> //which route
LOCAL.PATROL_COUNT += 1
IF <dLOCAL.PATROL_COUNT> == <dLOCAL.PATROL_MAXCHARCOUNT>
REF1.MORE1=1
LOCAL.TIMERVAR=-12
ENDIF
ENDIF
ENDIF
ENDFOR
ELSE
tag.homecoord=<serv.list.Patrol_<ritorna 1,<tag.infolist>>_<ritorna 2,<tag.infolist>>_<ritorna 3,<tag.infolist>>_<ritorna 4,<tag.infolist>>.<tag.patrol_now>>
FORCHARS 3
IF (<tag0.status> == 2) && (<eval <TAG.PATROL_ROUTENUM>> == <ritorna 4,<ref1.tag.infolist>>)
home = <ref1.tag.homecoord>
goto <home>
ENDIF
ENDFOR
IF (<tag.patrol_now> == <eval <serv.list.Patrol_<ritorna 1,<tag.infolist>>_<ritorna 2,<tag.infolist>>_<ritorna 3,<tag.infolist>>_<ritorna 4,<tag.infolist>>.COUNT>-1>)
tag.patrol_now=0
ELSE
tag.patrol_now += 1
ENDIF
REF1.P = <tag.homecoord>
LOCAL.TIMERVAR=0
MORE1=0
ENDIF
TIMER=<eval <LOCAL.TIMERVAR>+15>
RETURN 1
[EVENTS e_patrol]
[function patrol_list]
//serv.list.Patrol_Continent_Region_Type_0.ADD 4511,1439,0 // example
serv.list.Patrol_Trammel_Britain_Guard_0.ADD 1110,1222,0
serv.list.Patrol_Trammel_Britain_Guard_0.ADD 1130,1222,0
sserv.list.Patrol_Trammel_Britain_Guard_0.ADD 1150,1222,0
serv.list.Patrol_Trammel_Britain_Guard_0.ADD 1170,1222,0
serv.list.Patrol_Trammel_Britain_Guard_0.ADD 1190,1222,0
serv.list.Patrol_LostLands_Papua_Citizen_0.ADD 4110,1222,0
serv.list.Patrol_LostLands_Papua_Citizen_0.ADD 4210,1322,0
serv.list.Patrol_LostLands_Papua_Citizen_1.ADD 4510,1222,0
serv.list.Patrol_LostLands_Papua_Citizen_1.ADD 4610,1322,0
[FUNCTION ritorna] // returns a tag array cell value
return <argv[<argn1>]>