summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt14
-rw-r--r--doc/script_commands.txt23
-rw-r--r--src/map/atcommand.c3
-rw-r--r--src/map/npc.c3
-rw-r--r--src/map/script.c19
5 files changed, 50 insertions, 12 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index b31f124c5..e1e8ec311 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,20 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2006/04/19
+ * Removed the max cap of autoloot so you are now allowed to set autoloot
+ values above 100. [Skotlex]
+ * Initialized w1/w2/w3/w4 before reading each npc line to avoid sending
+ unread values to the parsers (for example, if w4 has a value in one line
+ and none on the next, it will be parsed with the previous value of w4 on
+ the following lines), this could cause serious problems with mapflags and
+ the recent "off" addition. [Skotlex]
+ * Updated getpartymember to receive an int which specifies what to
+ retrieve. 0: Character names (array $@partymembername$), 1 character char
+ ids (array $@partymembercid), 2 character account ids (array
+ $@partynameaid). By default it returns party member names. [Skotlex]
+ * Updated script_commands.txt with the updated behaviour of getpartymember.
+ [Skotlex]
2006/04/18
* Fixed a typo in map_search_freecell which was returning incorrect cells
according to the ranges given. [Skotlex]
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index 4a0458177..2a3064a6c 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -1988,19 +1988,30 @@ Lets say the ID of a party was saved as a global variable:
---------------------------------------
-*getpartymember <party id>;
+*getpartymember <party id>,[<type>];
Thank you to HappyDenn for all this information.
This command will finds all members of a specified party and returns their names
-into an array of temporary global variables. There's actually quite a few
-commands like this which will fill a special variable with data upon execution
-and not do anything else.
+(or character id or account id depending on the value of "type") into an array
+of temporary global variables. There's actually quite a few commands like this
+which will fill a special variable with data upon execution and not do anything
+else.
Upon executing this,
$@partymembername$[] is a global temporary stringarray which contains all the
- names of these party members.
+ names of these party members
+ (only set when type is 0 or not specified)
+
+$@partymembercid[] is a global temporary number array which contains the
+ character id of these party members.
+ (only set when type is 1)
+
+$@partymemberaid[] is a global temporary number array which contains the
+ account id of these party members.
+ (only set when type is 2)
+
$@partymembercount is the number of party members that were found.
The party members will (apparently) be found regardless of whether they are
@@ -2014,7 +2025,7 @@ server will not clear the array for you, overwriting the values instead. So in
addition to returning the 5 member names, the 6th and 7th elements from the last
call remain, and you will get 5+2 members, of which the last 2 don't belong to
the new guy's party. $@partymembercount will always contain the correct number,
-(5) unlike 'getarraysise()' which will return 7 in this case.
+(5) unlike 'getarraysize()' which will return 7 in this case.
Example:
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index d6389639f..adaa5c117 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -7711,8 +7711,7 @@ atcommand_autoloot(
drate = atof(message);
rate = (int)(drate*100);
}
- if (rate > 10000) rate = 10000;
- else if (rate < 0) rate = 0;
+ if (rate < 0) rate = 0;
sd->state.autoloot = rate;
if (sd->state.autoloot) {
diff --git a/src/map/npc.c b/src/map/npc.c
index 87d6a9b17..e0dda3344 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -2484,6 +2484,9 @@ void npc_parsesrcfile (char *name)
}
line[j] = '\0'; //Forget to terminate the string. From [jA 1091]
// 最初はタブ区切りでチェックしてみて、ダメならスペース区切りで確認
+ w1[0] = w2[0] = w3[0] = w4[0] = '\0'; //It's best to initialize values
+ //to prevent passing previously parsed values to the parsers when not all
+ //fields are specified. [Skotlex]
if ((count = sscanf(line,"%[^\t]\t%[^\t]\t%[^\t\r\n]\t%n%[^\t\r\n]", w1, w2, w3, &w4pos, w4)) < 3 &&
(count = sscanf(line,"%s%s%s%n%s", w1, w2, w3, &w4pos, w4)) < 3) {
continue;
diff --git a/src/map/script.c b/src/map/script.c
index 3760e75cf..f5230dc3e 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -504,7 +504,7 @@ struct {
{buildin_readparam,"readparam","i*"},
{buildin_getcharid,"getcharid","i*"},
{buildin_getpartyname,"getpartyname","i"},
- {buildin_getpartymember,"getpartymember","i"},
+ {buildin_getpartymember,"getpartymember","i*"},
{buildin_getguildname,"getguildname","i"},
{buildin_getguildmaster,"getguildmaster","i"},
{buildin_getguildmasterid,"getguildmasterid","i"},
@@ -4303,16 +4303,27 @@ int buildin_getpartyname(struct script_state *st)
int buildin_getpartymember(struct script_state *st)
{
struct party *p;
- int i,j=0;
+ int i,j=0,type=0;
p=NULL;
p=party_search(conv_num(st,& (st->stack->stack_data[st->start+2])));
+ if( st->end>st->start+3 )
+ type=conv_num(st,& (st->stack->stack_data[st->start+3]));
+
if(p!=NULL){
for(i=0;i<MAX_PARTY;i++){
if(p->member[i].account_id){
-// printf("name:%s %d\n",p->member[i].name,i);
- mapreg_setregstr(add_str((unsigned char *) "$@partymembername$")+(i<<24),p->member[i].name);
+ switch (type) {
+ case 2:
+ mapreg_setreg(add_str((unsigned char *) "$@partymemberaid")+(j<<24),p->member[i].account_id);
+ break;
+ case 1:
+ mapreg_setreg(add_str((unsigned char *) "$@partymembercid")+(j<<24),p->member[i].char_id);
+ break;
+ default:
+ mapreg_setregstr(add_str((unsigned char *) "$@partymembername$")+(j<<24),p->member[i].name);
+ }
j++;
}
}