The following warnings occurred:
Warning [2] Use of undefined constant SAPI_NAME - assumed 'SAPI_NAME' (this will throw an Error in a future version of PHP) - Line: 3388 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3388 errorHandler->error
/showthread.php 116 build_archive_link
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/inc/functions.php 3324 build_forum_breadcrumb
/showthread.php 195 build_forum_breadcrumb
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/showthread.php 195 build_forum_breadcrumb






Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Patrol script with lists, suggestion & improvements
Author Message
Crusader
Master
**

Posts: 254
Likes Given: 7
Likes Received: 19 in 12 posts
Joined: Apr 2012
Reputation: 6

Erehwon New Hera

Post: #1
Patrol script with lists, suggestion & improvements
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>]>
01-12-2014 12:06 PM
Find all posts by this user Like Post Quote this message in a reply
XuN
Sphere Developer
*****

Posts: 852
Likes Given: 102
Likes Received: 156 in 119 posts
Joined: Jul 2013
Reputation: 30



Post: #2
RE: Patrol script with lists, suggestion & improvements
To make the FORCHARS work from the target instead from yourself you must use a function to call it externally or just check for the distance difference

Code:
ref1=<argo>
FORCHARS <eval <argv[5]>+<ref1.distance>>
IF ((<ISCHAR>) && (<brain>) && (<distance <ref1>><=<argv[5]>))
And for the Patrol Controler: I guess in the Timer you are checking for the other members of the patrol, forchars 3 seems excesive small IMO as so much things can happen like combats, movement blocks, etc... I think you'll better do a forchars 20 or something like or better store the patrol members in the item and execute directly all your code on them, this way you can send all to attack if one is attacked and this kind of nice stuff.
01-12-2014 04:42 PM
Find all posts by this user Like Post Quote this message in a reply
Crusader
Master
**

Posts: 254
Likes Given: 7
Likes Received: 19 in 12 posts
Joined: Apr 2012
Reputation: 6

Erehwon New Hera

Post: #3
RE: Patrol script with lists, suggestion & improvements
Code:
ref1=<argo>
FORCHARS <eval <argv[5]>+<ref1.distance>>
IF ((<ISCHAR>) && (<brain>) && (<distance <ref1>><=<argv[5]>))

doesn't work =/

the patrol controller works fine like that...the only problem is that sometimes npcs get stuck in a corner or such...so i need to find a way to force (teleport?) them near the controller.
01-12-2014 11:20 PM
Find all posts by this user Like Post Quote this message in a reply
XuN
Sphere Developer
*****

Posts: 852
Likes Given: 102
Likes Received: 156 in 119 posts
Joined: Jul 2013
Reputation: 30



Post: #4
RE: Patrol script with lists, suggestion & improvements
argo.another_function <eval <argv[5]>+<ref1.distance>>


[function another_function]
forchars <dargn>
blabla code
endfor
01-12-2014 11:40 PM
Find all posts by this user Like Post Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)