Jump to content

getguildmember


AnnieRuru

Recommended Posts


  • Group:  Members
  • Topic Count:  18
  • Topics Per Day:  0.00
  • Content Count:  2044
  • Reputation:   682
  • Joined:  10/09/12
  • Last Seen:  

reviving this topic -> http://www.eathena.ws/board/index.php?showtopic=183485

add this into SVN

BUILDIN_FUNC(getguildmember) {
struct guild *g = guild_search( script_getnum(st,2) );
int i, j = 0, c = 0, type = 0;
if ( script_hasdata(st,3) )
	type = script_getnum(st,3);
if ( g ) {
	for ( i = 0; i < MAX_GUILD; i++ ) {
		if ( g->member[i].account_id ) {
			switch ( type ) {
			case 1:
				mapreg_setreg( reference_uid( add_str("$@guildmembercid"), j ), g->member[i].char_id );
				break;
			case 2:
				mapreg_setreg( reference_uid( add_str("$@guildmemberaid"), j ),g->member[i].account_id );
				break;
			case 3:
				break;
			default:
				mapreg_setregstr( reference_uid( add_str("$@guildmembername$"), j ), g->member[i].name );
				break;
			}
			j++;
		}
	}
	if ( type != 3 ) {
		mapreg_setreg( add_str("$@guildlv"), g->guild_lv );
		mapreg_setreg( add_str("$@guildconnected"), g->connect_member );
		mapreg_setreg( add_str("$@guildmax"), g->max_member );
		mapreg_setreg( add_str("$@guildexp"), (int)g->exp );
		mapreg_setreg( add_str("$@guildmembercount"), j );
	}
	else {
		for ( i = 0; i < MAX_GUILDALLIANCE; i++ ) {
			if ( g->alliance[i].guild_id > 0) {
				mapreg_setreg( reference_uid( add_str("$@guildallianceid"), j ), g->alliance[i].guild_id );
				mapreg_setregstr( reference_uid( add_str("$@guildalliancename$"), j ), g->alliance[i].name );
				c++;
			}
		}
		mapreg_setreg( add_str("$@guildallianccount"), c );
	}
	script_pushint(st,1);
}
else {
	mapreg_setreg( add_str("$@guildmembercount"), 0 );
	mapreg_setreg( add_str("$@guildallianccount"), 0 );
	script_pushint(st,0);
}
return 0;
}

BUILDIN_DEF(getguildmember,"i?"),

credit to GodLesZ

Edited by AnnieRuru
  • Upvote 3
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  72
  • Topics Per Day:  0.02
  • Content Count:  2997
  • Reputation:   1130
  • Joined:  05/27/12
  • Last Seen:  

I agree, this would be good to have.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  80
  • Topics Per Day:  0.02
  • Content Count:  325
  • Reputation:   76
  • Joined:  03/22/12
  • Last Seen:  

Hwitz... it's pretty cool

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  18
  • Topics Per Day:  0.00
  • Content Count:  2044
  • Reputation:   682
  • Joined:  10/09/12
  • Last Seen:  

hmm .. lol after I test it, only type 0,1,2 works,

type 3 doesn't work at all, so I attempt to fix this

BUILDIN_FUNC(getguildmember) {
struct guild *g = guild_search( script_getnum(st,2) );
int i, j = 0, type = 0;
if ( script_hasdata(st,3) )
	type = script_getnum(st,3);
if ( g ) {
	if ( type != 3 ) {
		for ( i = 0; i < MAX_GUILD; i++ ) {
			if ( g->member[i].account_id ) {
				switch ( type ) {
				case 1:
					mapreg_setreg( reference_uid( add_str("$@guildmembercid"), j ), g->member[i].char_id );
					break;
				case 2:
					mapreg_setreg( reference_uid( add_str("$@guildmemberaid"), j ),g->member[i].account_id );
					break;
				default:
					mapreg_setregstr( reference_uid( add_str("$@guildmembername$"), j ), g->member[i].name );
					break;
				}
				j++;
			}
		}
		mapreg_setreg( add_str("$@guildlv"), g->guild_lv );
		mapreg_setreg( add_str("$@guildconnected"), g->connect_member );
		mapreg_setreg( add_str("$@guildmax"), g->max_member );
		mapreg_setreg( add_str("$@guildexp"), (int)g->exp );
		mapreg_setreg( add_str("$@guildmembercount"), j );
	}
	else {
		for ( i = 0; i < MAX_GUILDALLIANCE; i++ ) {
			if ( g->alliance[i].guild_id ) {
				mapreg_setreg( reference_uid( add_str("$@guildallianceid"), j ), g->alliance[i].guild_id );
				mapreg_setregstr( reference_uid( add_str("$@guildalliancename$"), j ), g->alliance[i].name );
				mapreg_setreg( reference_uid( add_str("$@guildallianceflag"), j ), g->alliance[i].opposition );
				j++;
			}
		}
		mapreg_setreg( add_str("$@guildalliancecount"), j );
	}
	script_pushint(st,1);
}
else {
	mapreg_setreg( add_str("$@guildmembercount"), 0 );
	mapreg_setreg( add_str("$@guildalliancecount"), 0 );
	script_pushint(st,0);
}
return 0;
}

added a flag to determine opposition or alliance

example

prontera,155,187,5	script	dsasda	100,{
getguildmember getcharid(2);
for ( .@i = 0; .@i < $@guildmembercount; .@i++ )
	dispbottom .@i +". "+ $@guildmembername$[.@i];
getguildmember getcharid(2), 3;
for ( .@i = 0; .@i < $@guildalliancecount; .@i++ )
	dispbottom .@i +". "+ $@guildalliancename$[.@i] +" -> "+( ( $@guildallianceflag[.@i] )? "Opposition" : "Alliance" );
end;
}

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10013
  • Reputation:   2346
  • Joined:  10/28/11
  • Last Seen:  

since it retrieve all guild infos...isnt that better to name to something like this ?

getguildinfo
getguilddata

  • Upvote 2
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  18
  • Topics Per Day:  0.00
  • Content Count:  2044
  • Reputation:   682
  • Joined:  10/09/12
  • Last Seen:  

yeah, I kinda realized it a bit later

I just merely fixing GodLesZ's patch previously

BUILDIN_FUNC(getguildmember) {
   struct guild *g = guild_search( script_getnum(st,2) );
   int i, j = 0, type = 0;
   if ( script_hasdata(st,3) )
       type = script_getnum(st,3);
   if ( g ) {
       for ( i = 0; i < MAX_GUILD; i++ ) {
           if ( g->member[i].account_id ) {
               switch ( type ) {
               case 1:
                   mapreg_setreg( reference_uid( add_str("$@guildmembercid"), j ), g->member[i].char_id );
                   break;
               case 2:
                   mapreg_setreg( reference_uid( add_str("$@guildmemberaid"), j ),g->member[i].account_id );
                   break;
               case 3:
                   mapreg_setreg( reference_uid( add_str("$@guildmemberonline"), j ),g->member[i].online );
                   break;
               default:
                   mapreg_setregstr( reference_uid( add_str("$@guildmembername$"), j ), g->member[i].name );
                   break;
               }
               j++;
           }
       }
       mapreg_setreg( add_str("$@guildmembercount"), j );
       script_pushint(st,1);
   }
   else {
       mapreg_setreg( add_str("$@guildmembercount"), 0 );
       script_pushint(st,0);
   }
   return 0;
}

BUILDIN_DEF(getguildmember,"i?"),

took out useless information, and add in online check, since the guild data itself does show online/offline

prontera,155,187,5    script    dsasda    100,{
   getguildmember getcharid(2), 0;
   getguildmember getcharid(2), 3;
   for ( .@i = 0; .@i < $@guildmembercount; .@i++ )
       dispbottom .@i +". "+ $@guildmembername$[.@i] +" -> "+( ( $@guildmemberonline[.@i] )? "online" : "offline" );
}

EDIT : I wonder issit getpartymember also can do this online/offline ...

EDIT2 : yeah can ... lol, perhaps I should remove this ? lol ? or add getpartymember allow $@partymemberonline ?


for getguildinfo, I think that will go into separate topic

// mmo.h ...
struct guild {
   int guild_id;
   short guild_lv, connect_member, max_member, average_lv;
   uint64 exp;
   unsigned int next_exp;
   int skill_point;
   char name[NAME_LENGTH],master[NAME_LENGTH];
   struct guild_member member[MAX_GUILD];
   struct guild_position position[MAX_GUILDPOSITION];
   char mes1[MAX_GUILDMES1],mes2[MAX_GUILDMES2];
   int emblem_len,emblem_id;
   char emblem_data[2048];
   struct guild_alliance alliance[MAX_GUILDALLIANCE];
   struct guild_expulsion expulsion[MAX_GUILDEXPULSION];
   struct guild_skill skill[MAX_GUILDSKILL];

   unsigned short save_flag; // for TXT saving
};

there are quite a few values seems useful to retrieve them

guess you guys settle it by introducing getguildinfo

I only wants the getguildmember, to make gvg event script better


now I just realize ...

// mmo.h
struct map_session_data;
struct guild_member {
   int account_id, char_id;
   short hair,hair_color,gender,class_,lv;
   uint64 exp;
   int exp_payper;
   short online,position;
   char name[NAME_LENGTH];
   struct map_session_data *sd;
   unsigned char modified;
};

if add in getguildinfo ... there're some info that depends on it

like guild position and exp_payper ...

Edited by AnnieRuru
  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  72
  • Topics Per Day:  0.02
  • Content Count:  2997
  • Reputation:   1130
  • Joined:  05/27/12
  • Last Seen:  

I prefer not having an 'online' array to save variables, since you get the same information with 'isloggedin'.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  18
  • Topics Per Day:  0.00
  • Content Count:  2044
  • Reputation:   682
  • Joined:  10/09/12
  • Last Seen:  

lol ... :ani_swt3:

now this has become a primitive command ...

BUILDIN_FUNC(getguildmember) {
   struct guild *g = guild_search( script_getnum(st,2) );
   int i, j = 0, type = 0;
   if ( script_hasdata(st,3) )
       type = script_getnum(st,3);
   if ( g ) {
       for ( i = 0; i < MAX_GUILD; i++ ) {
           if ( g->member[i].account_id ) {
               switch ( type ) {
               case 2:
                   mapreg_setreg( reference_uid( add_str("$@guildmemberaid"), j ),g->member[i].account_id );
                   break;
               case 1:
                   mapreg_setreg( reference_uid( add_str("$@guildmembercid"), j ), g->member[i].char_id );
                   break;
               default:
                   mapreg_setregstr( reference_uid( add_str("$@guildmembername$"), j ), g->member[i].name );
                   break;
               }
               j++;
           }
       }
   }
   mapreg_setreg( add_str("$@guildmembercount"), j );
   return 0;
}

BUILDIN_DEF(getguildmember,"i?"),

prontera,155,187,5    script    dsasda    100,{
   getguildmember getcharid(2), 0;
   getguildmember getcharid(2), 1;
   getguildmember getcharid(2), 2;
   for ( .@i = 0; .@i < $@guildmembercount; .@i++ )
       dispbottom .@i +". "+ $@guildmembername$[.@i] +" -> "+( ( isloggedin( $@guildmemberaid[.@i] , $@guildmembercid[.@i] ) )? "online" : "offline" );
   end;
}

without the g->member.online, needs to call out getguildmember 3 times

but I guess people don't care about the nano-seconds difference anyways

  • Upvote 1
Link to comment
Share on other sites

  • 1 year later...

  • Group:  Members
  • Topic Count:  72
  • Topics Per Day:  0.02
  • Content Count:  2997
  • Reputation:   1130
  • Joined:  05/27/12
  • Last Seen:  

Implemented in eba1539.

Link to comment
Share on other sites

×
×
  • Create New...