diff options
author | gumi <git@gumi.ca> | 2018-02-15 10:53:32 -0500 |
---|---|---|
committer | gumi <git@gumi.ca> | 2018-03-20 21:22:00 -0400 |
commit | 3605ca68d55461cb1da9b01f41f5d2c0ff514503 (patch) | |
tree | 8c21604bef095c4a5fc5c6b3bd4f2dcc1bc4ac27 /npc/functions | |
parent | 99f4e1606e8e4bd5c476d81758803da82476c5f4 (diff) | |
download | serverdata-3605ca68d55461cb1da9b01f41f5d2c0ff514503.tar.gz serverdata-3605ca68d55461cb1da9b01f41f5d2c0ff514503.tar.bz2 serverdata-3605ca68d55461cb1da9b01f41f5d2c0ff514503.tar.xz serverdata-3605ca68d55461cb1da9b01f41f5d2c0ff514503.zip |
yeah... this got very messy (my bad!). let's not use custom terminators after all
Diffstat (limited to 'npc/functions')
-rw-r--r-- | npc/functions/game-rules.txt | 6 | ||||
-rw-r--r-- | npc/functions/goodbye.txt | 138 | ||||
-rw-r--r-- | npc/functions/warp.txt | 47 |
3 files changed, 58 insertions, 133 deletions
diff --git a/npc/functions/game-rules.txt b/npc/functions/game-rules.txt index f633ee5f..0a9f6569 100644 --- a/npc/functions/game-rules.txt +++ b/npc/functions/game-rules.txt @@ -46,12 +46,14 @@ OnCall: OnUseBook: if (openbook()) read_book; - bye; + closeclientdialog(); + close; OnShelfUse: if (openbookshelf()) read_book; - bye; + closeclientdialog(); + close; OnInit: .book_name$ = "The Book of Laws"; diff --git a/npc/functions/goodbye.txt b/npc/functions/goodbye.txt index 0e8dfc2e..6c8879c5 100644 --- a/npc/functions/goodbye.txt +++ b/npc/functions/goodbye.txt @@ -1,19 +1,13 @@ // Evol functions. // Authors: -// gumi // Reid -// Description: -// script terminator functions +// goodbye +// displays a canned message and quits -// goodbye_msg -// Tell a random goodbye sentence. -// Variables: -// .@rand = Random number between the number of "goodbye" choice. - -function script goodbye_msg { - setarray .byemsg$[0], +function script goodbye { + setarray(.@byemsg$[0], l("See you!"), l("See you later!"), l("See you soon!"), @@ -26,127 +20,9 @@ function script goodbye_msg { l("Talk to you later!"), l("Have a good day!"), l("Cheers!"), - l("Take care!"); - - return .byemsg$[rand(getarraysize(.byemsg$))]; -} - - - -// cwarp -// Closes the dialog, then warps the player. -// You almost always want to use this instead of `warp`. -// usage: -// cwarp; -// cwarp x, y; -// cwarp map, x, y; - -function script cwarp { - .@map$ = getarg(0, ""); - .@x = getarg(1, 0); - .@y = getarg(2, 0); - - if (getargcount() > 0 && getargcount() < 3) - { - .@npc$ = strnpcinfo(0); - .@map$ = getvariableofnpc(.map$, .@npc$); - .@x = getarg(0); - .@y = getarg(1); - } - - getmapxy .@pc_map$, .@pc_x, .@pc_y, UNITTYPE_PC; // get char location - - closeclientdialog; - - if (getargcount() < 1) - { - warp .@pc_map$, .@pc_x, .@pc_y; // no arguments, just refresh - close; - } + l("Take care!")); - if (.@map$ == .@pc_map$) - { - if (.@pc_x == .@x && .@pc_y == .@y) - { - close; // same location, don't move - } - - else - { - slide .@x, .@y; // same map, slide instead of full warp - close; - } - } - - warp .@map$, .@x, .@y; // different map, warp to given location + closeclientdialog(); + npctalkonce(.@byemsg$[rand(getarraysize(.@byemsg$))]); close; } - - - -// cshop -// closes the dialog, then opens a shop -// if no npc is given, calls "#<npc> $" - -function script cshop { - closeclientdialog; - shop getarg(0, "#" + strnpcinfo(0) + " $"); - //close; => the shop buildin already sends close, and is a terminator itself -} - - - -// cstorage -// closes the dialog, then opens storage - -function script cstorage { - closeclientdialog; - openstorage; - close; -} - - - -// bye -// closes the dialog without waiting for the player to press close -// can also display an emote - -function script bye { - .@emote = getarg(0, -1); - closeclientdialog; - - if (.@emote >= 0) - emotion .@emote; - - close; -} - - - -// goodbye -// same as bye, but also displays a canned message -// can also display an emote - -function script goodbye { - npctalkonce(goodbye_msg()); - bye getarg(0, -1); -} - - - -// goodbye2 -// Waits for the player to press close, displays a canned message, -// ends execution. -// Can also display an emote - -function script goodbye2 { - .@emote = getarg(0, -1); - - close2; - npctalkonce(goodbye_msg()); - - if (.@emote >= 0) - emotion .@emote; - - end; -} diff --git a/npc/functions/warp.txt b/npc/functions/warp.txt new file mode 100644 index 00000000..844baf7d --- /dev/null +++ b/npc/functions/warp.txt @@ -0,0 +1,47 @@ +// Evol functions. +// Authors: +// gumi + + +// slide_or_warp +// Slides the player instead of warping, when possible. +// usage: +// slide_or_warp({<aid>}); +// slide_or_warp(<x>, <y>{, <aid>}); +// slide_or_warp("<map>", <x>, <y>{, <aid>}); + +function script slide_or_warp { + if (getargcount() <= 1) { + .@aid = getarg(1, 0); + } else { + if (getargcount() >= 3 && getdatatype(getarg(0)) & DATATYPE_STR) { + .@map$ = getarg(0); + .@x = getarg(1); + .@y = getarg(2); + .@aid = getarg(3, 0); + } else { + .@x = getarg(0); + .@y = getarg(1); + .@aid = getarg(2, 0); + } + } + + if (!isloggedin(.@aid)) { + if (.@aid = playerattached() == 0) { + debugmes("slide_or_warp: no player attached!"); + return false; + } + } + + getmapxy(.@pc_map$, .@pc_x, .@pc_y, UNITTYPE_PC, .@aid); // get char location + + if (getargcount() < 1) { + warpchar(.@pc_map$, .@pc_x, .@pc_y, .@aid); // no arguments, just refresh + } else if (.@map$ == .@pc_map$ && (.@pc_x != .@x || .@pc_y != .@y)) { + slide(.@x, .@y); // same map, slide instead of full warp + // FIXME: make slide take GID as optional arg + } else { + warpchar(.@map$, .@x, .@y, .@aid); // different map, warp to given location + } + return true; +} |