ScriptUO
Official ScriptUO EasyUO Scripts => Script Debug => Topic started by: breh on April 02, 2011, 05:56:34 AM
-
Ok this is making me crazy.
I'm trying to cycle through a certain number of names, and passing them on to scanjournal within a sub. The problem is that while I can get the names to be in the %1 %2 %3 etc. variables, when I call the gosub within the sub, it overwrites the %2 %3 with its own %2 %3 variables. How do I avoid that?
Here is a code tidbit:
gosub example_goSub name1 name2 name3 name4
sub example_goSub
set %_cnt 1
while %_cnt < %0
{
set %message
display ok MSG: %message % . %_cnt , #spc
set %message % . %_cnt , #spc
display ok MSG: %message %_cnt
gosub TM_AdvJournalScan network VALID_ADVANCE %message hi
display ok MSNG2: %message %_cnt
;set %_cnt %_cnt + 1
display ok %_cnt
}
return
sub TM_AdvJournalSync
namespace push
namespace local TM_AdvJS_ , %1
set !_jindex #jindex + 1
if %0 > 1
set !lpc_set %2
namespace pop
set !TM_FunctionCalled #TRUE
return
sub TM_AdvJournalScan
namespace push
namespace local TM_AdvJS_ , %1
set !args %2
set !temp_lpc #LPC
if !lpc_set = N/A
set #LPC 1000
else
set #LPC !lpc_set
set !num_args %0
if VALID in !args
{
set !charname %3
set !first_arg 4
}
else
set !first_arg 3
if !_jindex = N/A
set !_jindex #jindex
if !charname = N/A
{
set !charname #CHARNAME
AdvJournalScan_loop1:
str pos !charname #SPC
if #STRRES <> 0
{
set !val #STRRES - 1
str left !charname !val
set !left #STRRES
set !val !val + 1
str del !charname 1 !val
set !charname !left , _ , #STRRES
goto AdvJournalScan_loop1
}
}
set !index !first_arg
repeat
set !temp_jindex !_jindex
set !text % . !index
while !temp_jindex <= #jindex
{
scanjournal !temp_jindex
str pos #JOURNAL !charname 1
set !namepos #STRRES
str count #JOURNAL !charname
set !namecnt #STRRES
str pos #JOURNAL :_ 1
set !smcpos #STRRES
str pos #JOURNAL !text 1
set !textpos #STRRES
if !textpos < !smcpos && !smcpos <> 0 || !smcpos = 1 || :_ notin #JOURNAL || VALID notin !args
set !pass #TRUE
else
set !pass #FALSE
if ( !text in #journal && ( ( !namepos = 1 && !namecnt <= 1 ) || !pass ) )
{
set !temp_jindex !temp_jindex + 1
if ADVANCE in !args
set !_jindex !temp_jindex
set #LPC !temp_lpc
namespace pop
set !TM_FunctionCalled #TRUE
return #TRUE
}
set !temp_jindex !temp_jindex + 1
}
set !index !index + 1
until !index - !first_arg > !num_args - !first_arg
set #LPC !temp_lpc
namespace pop
set !TM_FunctionCalled #TRUE
return #FALSE
-
your going to have to learn Namespace (http://www.scriptuo.com/index.php?topic=108.0;highlight=namespace). this is a good tutorial to get your feet wet.
-
your going to have to learn Namespace (http://www.scriptuo.com/index.php?topic=108.0;highlight=namespace). this is a good tutorial to get your feet wet.
Thanks, but that doesnt work. In the sub there is already namespace (the TM_AdvJournalScan) so that doesnt solve it.
-
YOU have to use it in your SUBS.. name space will store and separate each set of variables as their own.
-
Hmm but as far as I can read from that site I am doing it correctly?
once i go into gosub TM_AdvJournalScan network VALID_ADVANCE %message hi
I create a namespace as seen here:
sub TM_AdvJournalScan
namespace push
namespace local TM_AdvJS_ , %1
.....
and at the end when I exit
namespace pop
to re-create the old namespace, correct?
It still doesnt work :(
-
Ok this is making me crazy.
I'm trying to cycle through a certain number of names, and passing them on to scanjournal within a sub. The problem is that while I can get the names to be in the %1 %2 %3 etc. variables, when I call the gosub within the sub, it overwrites the %2 %3 with its own %2 %3 variables. How do I avoid that?
Unless I'm not quite understanding what you are trying to do...
Maybe you should first be setting some variables to the values you are sending to the sub then use those not the %1, %2 etc:
gosub Mysub val1 val2 val3
sub Mysub
set %Mysub1 %1
set %Mysub2 %2
set %Mysub3 %3
do stuff with %Mysub1
do stuff with %Mysub2
do stuff with %Mysub3
return
Adding the Namespace to your sub is even better but it isn't always necessary to use a Namespace, it really depends on what you are trying to accomplish and where in the script the sub is.
Maybe I'm misunderstanding you though, I'm VERY tired ;)
X
-
Ok this is making me crazy.
I'm trying to cycle through a certain number of names, and passing them on to scanjournal within a sub. The problem is that while I can get the names to be in the %1 %2 %3 etc. variables, when I call the gosub within the sub, it overwrites the %2 %3 with its own %2 %3 variables. How do I avoid that?
Unless I'm not quite understanding what you are trying to do...
Maybe you should first be setting some variables to the values you are sending to the sub then use those not the %1, %2 etc:
gosub Mysub val1 val2 val3
sub Mysub
set %Mysub1 %1
set %Mysub2 %2
set %Mysub3 %3
do stuff with %Mysub1
do stuff with %Mysub2
do stuff with %Mysub3
return
Adding the Namespace to your sub is even better but it isn't always necessary to use a Namespace, it really depends on what you are trying to accomplish and where in the script the sub is.
Maybe I'm misunderstanding you though, I'm VERY tired ;)
X
Hmm, what im trying to do is feed the sub a bunch of names, which it then checks via journal to say if any of those names said something (in this example hi).
Again the problem is as you can see if you run the script that the gosub makes it so the initial %1 %2 &3 &4 gets overwritten by the %1 %2 %3 of the subscript.
-
Well you've got your counter increase commented out... You gotta set your count to count + 1 somewhere... uncomment it and it will work. You also have your formatting a bit wrong for the while statement. It wasn't counting the 4th variable and setting it. Doing it the way I did it below will ensure it checks the variables 1-4 that are sent to the sub. It should look more like this:
gosub example_goSub name1 name2 name3 name4
halt
sub example_goSub
set %_cnt 0
while %_cnt < %0
{
set %_cnt %_cnt + 1
set %message
display ok MSG: %message % . %_cnt , #spc
set %message % . %_cnt , #spc
display ok MSG: %message %_cnt
gosub TM_AdvJournalScan network VALID_ADVANCE %message hi
display ok MSNG2: %message %_cnt
display ok %_cnt
}
return
-
I get this:
Name1 (correct)
then VALID_ADVANCE (which is wrong should be name2)
thenV ALID_ADVANCE (which should be name3)
then i get hi (which is wrong should be name4)
So still not working :(
-
Well I wasn't trying to make it work, I was trying to fix your formatting errors. I dont use TM's journal scanner, so you'll have to talk to someone with more experience with it. I'm pretty sure tho that VALID should not be used in this case. VALID invokes spam filtering that will keep things being said from others from giving a positive in a search. Not sure how it would interact with your scans tho. Sounds like you need to go find hit thread and do a lot more reading.
-
Ok thanks anyway :) hopefully someone else can shed some light on it.
-
Ok thanks anyway :) hopefully someone else can shed some light on it.
Like I said, don't use %1 %2 etc, assign them to variables that won't be overwritten and use those instead.
X
-
Exactly what 12x said, once you get to the sub, set new variables for the values of %1.
Essentially %1 %2 %3 %n are placeholders used by subs, so the second you use another sub it will override the old placeholders. Only way around that is to set your own variables at the start of the sub to %1 %2 %3 etc