Jump to content

friomixx

Members
  • Posts

    18
  • Joined

  • Last visited

Posts posted by friomixx

  1. On 2/3/2019 at 9:31 AM, Metahego said:

    Finally i make this .diff manualy, it work on my rathena's version

    Edit: Resolved some issues, and added possibility to config range in battle_conf
    But don't know why, when i put range to 10 that make not difference with 3

     

    @arealoot.diff

     

    whenever @arealoot is disabled, and you try to pick up an item, you will be able to pick it up but it also displays the message You cannot get the item.

    image.png.91fa0a12ba7b74a8916889f2d0752dc7.png

  2. i'm using searchstore,
    with the tick box checked for Include Similar Items, I'm not able to search due to too many result found message.
    Though I only have 4 Bows (2 Bows and 2 Composite Bows) that is currently in vending.
    Removing that I'm able to search for the specific item.

    is there a way for me to remove the default check in the tick box?
    or how to fix the issue I'm encountering regarding too many results.

    edit:
    the tick box works properly for Buy type.
    image.png.89db1988d6d99a0ecbf81c3928c6fa12.png

    image.png.8a828fe8e9553909aef1b3dd72b578a4.png

    image.png.3649667dc5f267fa896e2e0bcd173a9b.png

  3. switch( select( "Edit Party Member",/*"Required Item","Required Zeny",*/"^FF0000Start Event^000000" ) ){

     

    Make sure to include Case 4, so your previous Case 4 will now become Case 2

                    Case 2:
                       /* mes "Enter item ID :";
                        do{
                            input .@input;
                        }while( getitemname( .@input ) == "null" );
                        mes "Enter Amount : "+getitemname( .@input );
                        mes "^777777( 0 ~ "+callfunc( "ValueConvert", 30000 )+" )^000000";
                        input $match_amount,0,30000;
                        if( $match_amount ) set $match_itemid,.@input;
                        break;
                    Case 3:
                        mes "Enter Zeny amount :";
                        mes "^777777( 0 ~ "+callfunc( "ValueConvert", 10000000 )+" )^000000";
                        input $zeny,0,10000000;
                        break;
                    Case 4:*/

     

                        if( $party_member < 1 ){
                            mes "^FF0000Invalid^000000. Minimum 1 Party Member.";
                        }/*else if( !$match_amount && !$zeny ){
                            mes "^FF0000Invalid^000000. Required 1 item or Zeny.";
                        }*/else{

     

        if( $party_member /*&& ( $match_amount || $zeny )*/ && !.status ) set .status,1;
        end;

     

        if( $party_member /*&& ( $match_amount || $zeny )*/ && !.status ){

     

  4. ---------------------------------------
    
    *callfunc "<function>"{,<argument>,...<argument>};
    *callfunc("<function>"{,<argument>,...<argument>})
    
    This command lets you call up a function NPC. A function NPC can be called from
    any script on any map server. Using the 'return' command it will come back to
    the place that called it.
    
    	place,50,50,6%TAB%script%TAB%Woman%TAB%115,{
    		mes "[Woman]"
    		mes "Let's see if you win...";
    		callfunc "funcNPC";
    		mes "Well done, you have won!";
    		close;
    	}
    	function%TAB%script%TAB%funcNPC%TAB%{
    		.@win = rand(2);
    		if (.@win == 0)
    			return;
    		mes "Sorry, you lost.";
    		close;
    	}
    
    You can pass arguments to your function - values telling it what exactly to do -
    which will be available there with getarg() (see 'getarg')
    Notice that returning is not mandatory, you can end execution right there.
    
    If you want to return a real value from inside your function NPC, it is better
    to write it in the function form, which will also work and will make the script
    generally cleaner:
    
    	place,50,50,6%TAB%script%TAB%Man%TAB%115,{
    		mes "[Man]"
    		mes "Gimme a number!";
    		next;
    		input .@number;
    		if (callfunc("OddFunc",.@number)) mes "It's Odd!";
    		close;
    	}
    	function%TAB%script%TAB%OddFunc%TAB%{
    		if (getarg(0)%2 == 0)
    			return 0;// it's even
    		return 1;// it's odd
    	}
    
    Alternately, as of rAthena revision 15979 and 15981, user-defined functions
    may be called directly without the use of the 'callfunc' script command.
    
    	function<tab>script<tab>SayHello<tab>{
    		mes "Hello " + getarg(0);
    		return 0;
    	}
    
    	place,50,50,6<tab>script<tab>Man<tab>115,{
    		mes "[Man]";
    		SayHello strcharinfo(0);
    		close;
    	}
    
    Note:
    
     !! A user-defined function must be declared /before/ a script attempts to
     !! call it. That is to say, any functions should be placed above scripts or NPCs
     !! (or loaded in a separate file first) before attempting to call them directly.
    
    ---------------------------------------

    https://github.com/rathena/rathena/blob/master/doc/script_commands.txt

  5. Hi,

    Can anyone help me, how should i patch my client?
    when i'm trying to view Euphy's Quest Shop, it is getting displayed like this.

    image.png.d8d85cf14ba46115cd85866bc48eb852.png

     

    However, when using 2019-06-05 (i dont diff this client, i just downloaded it somewhere here in rathena but i can't remember the exact post) , i dont have any issue as showed below.

    image.png.3d45870613a9ee46ccf1ae58e605e41d.png

    Below are the patches i've selected for 2021-11-03 using Nemo.
     

    8 Custom Window Title
    9 Disable 1rag1 type parameters (Recommended)
    13 Disable Ragexe Filename Check (Recommended)
    14 Disable Hallucination Wavy Screen (Recommended)
    18 Skip Service Selection Screen
    23 Enable /who command (Recommended)
    24 Fix Camera Angles (Recommended)
    34 Enable /showname (Recommended)
    35 Read Data Folder First
    36 Always read msgstringtable.txt (Recommended)
    38 Remove Gravity Ads (Recommended)
    39 Remove Gravity Logo (Recommended)
    41 Disable Nagle Algorithm (Recommended)
    44 Translate Client (Recommended)
    46 Use Normal Guild Brackets (Recommended)
    47 Use Ragnarok Icon
    48 Use Plain Text Descriptions (Recommended)
    49 Enable Multiple GRFs (Recommended)
    50 Skip License Screen
    64 @ Bug Fix (Recommended)
    65 Load Custom lua file instead of iteminfo*.lub (Recommended)
    71 Ignore Resource Errors
    73 Remove Hourly Announce (Recommended)
    84 Remove Serial Display (Recommended)
    90 Enable DNS Support (Recommended)
    208 Restore Cash Shop Icon
    213 Disable Help Message on Login (Recommended)
    230 Always load Korea ExternalSettings lua file (Recommended)
    231 Remove hardcoded address/port (Recommended)
    232 Restore old login packet (Recommended)
    234 Ignore Lua Errors
    270 Change AchievementList*.lub path
    271 Change MonsterSizeEffect*.lub path
    272 Change Towninfo*.lub path
    273 Change PetEvolutionCln*.lub path
    274 Change Tipbox*.lub path
    275 Change CheckAttendance*.lub path
    276 Change OngoingQuestInfoList*.lub path
    277 Change RecommendedQuestInfoList*.lub path
    278 Change PrivateAirplane*.lub path
    290 Hide build info in client (Recommended)
    291 Hide packets from peek (Recommended)
    307 Hide attendance button
    308 Hide adventurer agency button
    313 Change MapInfo*.lub path
    326 Disable OTP Login Packet (Recommended)
    338 Additional client validation (Recommended)
    348 Send client flags to server (Recommended)
    403 Ignore most errors
    404 Use borderless mode in full screen (Recommended)
    409 Add close button to game window
    418 Hide reputation button
    427 Check is servertype in xml file was set to correct value (Recommended)
    429 Protect shorten and bold name flags

     

  6. Hi All,

    I'm trying to implement below diff for src/map/atcommand.cpp. This is to convert any headgear to costumes and vice versa.

    diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp
    index 43d6ad4d7d..e2897a48b5 100644
    --- a/src/map/atcommand.cpp
    +++ b/src/map/atcommand.cpp
    @@ -1218,7 +1218,7 @@ ACMD_FUNC(heal)
     ACMD_FUNC(item)
     {
     	char item_name[100];
    -	int number = 0, bound = BOUND_NONE;
    +	int number = 0, bound = BOUND_NONE, costume = 0;
     	char flag = 0;
     	struct item item_tmp;
     	struct item_data *item_data[10];
    @@ -1267,6 +1267,27 @@ ACMD_FUNC(item)
     
     	for(j--; j>=0; j--){ //produce items in list
     		unsigned short item_id = item_data[j]->nameid;
    +		if (!strcmpi(command + 1, "costumeitem"))
    +		{
    +			if (!battle_config.reserved_costume_id)
    +			{
    +				clif_displaymessage(fd, "Costume convertion is disable. Set a value for reserved_cosutme_id on your battle.conf file.");
    +				return -1;
    +			}
    +			if (!(item_data[j]->equip&EQP_HEAD_LOW) &&
    +				!(item_data[j]->equip&EQP_HEAD_MID) &&
    +				!(item_data[j]->equip&EQP_HEAD_TOP) &&
    +				!(item_data[j]->equip&EQP_COSTUME_HEAD_LOW) &&
    +				!(item_data[j]->equip&EQP_COSTUME_HEAD_MID) &&
    +				!(item_data[j]->equip&EQP_COSTUME_HEAD_TOP) &&
    +				!(item_data[j]->equip&EQP_GARMENT) &&
    +				!(item_data[j]->equip&EQP_COSTUME_GARMENT))
    +			{
    +				clif_displaymessage(fd, "You cannot costume this item. Costume only work for headgears.");
    +				return -1;
    +			}
    +			costume = 1;
    +		}
     		//Check if it's stackable.
     		if (!itemdb_isstackable2(item_data[j]))
     			get_count = 1;
    @@ -1277,6 +1298,11 @@ ACMD_FUNC(item)
     				memset(&item_tmp, 0, sizeof(item_tmp));
     				item_tmp.nameid = item_id;
     				item_tmp.identify = 1;
    +				if (costume == 1) { // Costume item
    +					item_tmp.card[0] = CARD0_CREATE;
    +					item_tmp.card[2] = GetWord(battle_config.reserved_costume_id, 0);
    +					item_tmp.card[3] = GetWord(battle_config.reserved_costume_id, 1);
    +				}
     				item_tmp.bound = bound;
     				if ((flag = pc_additem(sd, &item_tmp, get_count, LOG_TYPE_COMMAND)))
     					clif_additem(sd, 0, 0, flag);

    however, after compiling, i received below errors. can you help me identify the fix for this errors?
    image.thumb.jpeg.db8525b6bcdaa22eeeb356424886c348.jpeg

    Below is the complete block code where I implemented the diffs.

    /*==========================================
     * @item command (usage: @item <itemdid1:itemid2:itemname:..> <quantity>) (modified by [Yor] for pet_egg)
     * @itembound command (usage: @itembound <name/id_of_item> <quantity> <bound_type>)
     *------------------------------------------*/
    ACMD_FUNC(item)
    {
    	char item_name[100];
    	//int number = 0, bound = BOUND_NONE;
    	/*[GSF] begin convert headgear to costume*/
    	int number = 0, bound = BOUND_NONE, costume = 0;
    	/*[GSF] end convert headgear to costume*/
    	char flag = 0;
    	char *itemlist;
    
    	nullpo_retr(-1, sd);
    	memset(item_name, '\0', sizeof(item_name));
    
    	parent_cmd = atcommand_alias_db.checkAlias(command+1);
    
    	if (!strcmpi(parent_cmd,"itembound")) {
    		if (!message || !*message || (
    			sscanf(message, "\"%99[^\"]\" %11d %11d", item_name, &number, &bound) < 3 &&
    			sscanf(message, "%99s %11d %11d", item_name, &number, &bound) < 3))
    		{
    			clif_displaymessage(fd, msg_txt(sd,295)); // Please enter an item name or ID (usage: @item <item name/ID> <quantity> <bound_type>).
    			clif_displaymessage(fd, msg_txt(sd,298)); // Invalid bound type
    			return -1;
    		}
    		if( bound <= BOUND_NONE || bound >= BOUND_MAX ) {
    			clif_displaymessage(fd, msg_txt(sd,298)); // Invalid bound type
    			return -1;
    		}
    	} else if (!message || !*message || (
    		sscanf(message, "\"%99[^\"]\" %11d", item_name, &number) < 1 &&
    		sscanf(message, "%99s %11d", item_name, &number) < 1
    	)) {
    		clif_displaymessage(fd, msg_txt(sd,983)); // Please enter an item name or ID (usage: @item <item name/ID> <quantity>).
    		return -1;
    	}
    
    	std::vector<std::shared_ptr<item_data>> items;
    	itemlist = strtok(item_name, ":");
    
    	while( itemlist != nullptr ){
    		std::shared_ptr<item_data> item = item_db.searchname( itemlist );
    
    		if( item == nullptr ){
    			item = item_db.find( strtoul( itemlist, nullptr, 10 ) );
    		}
    
    		if( item == nullptr ){
    			clif_displaymessage(fd, msg_txt(sd,19)); // Invalid item ID or name.
    			return -1;
    		}
    
    		items.push_back( item );
    		itemlist = strtok(NULL, ":"); //next itemline
    	}
    
    	if (number <= 0)
    		number = 1;
    	int get_count = number;
    
    	// Produce items in list
    	for( const auto& item : items ){
    		t_itemid item_id = item->nameid;
    
    		/*[GSF] begin convert headgear to costume*/
    		if (!strcmpi(command + 1, "costumeitem"))
    		{
    			if (!battle_config.reserved_costume_id)
    			{
    				clif_displaymessage(fd, "Costume convertion is disable. Set a value for reserved_cosutme_id on your battle.conf file.");
    				return -1;
    			}
    			if (!(item_data[j]->equip&EQP_HEAD_LOW) &&
    				!(item_data[j]->equip&EQP_HEAD_MID) &&
    				!(item_data[j]->equip&EQP_HEAD_TOP) &&
    				!(item_data[j]->equip&EQP_COSTUME_HEAD_LOW) &&
    				!(item_data[j]->equip&EQP_COSTUME_HEAD_MID) &&
    				!(item_data[j]->equip&EQP_COSTUME_HEAD_TOP) &&
    				!(item_data[j]->equip&EQP_GARMENT) &&
    				!(item_data[j]->equip&EQP_COSTUME_GARMENT))
    			{
    				clif_displaymessage(fd, "You cannot costume this item. Costume only work for headgears.");
    				return -1;
    			}
    			costume = 1;
    		}
    		/*[GSF] end convert headgear to costume*/
    
    		//Check if it's stackable.
    		if( !itemdb_isstackable2( item.get() ) ){
    			get_count = 1;
    		}
    
    		for( int i = 0; i < number; i += get_count ){
    			// if not pet egg
    			if (!pet_create_egg(sd, item_id)) {
    				struct item item_tmp = {};
    
    				item_tmp.nameid = item_id;
    				item_tmp.identify = 1;
    				/*[GSF] begin convert headgear to costume*/
    				if (costume == 1) { // Costume item
    					item_tmp.card[0] = CARD0_CREATE;
    					item_tmp.card[2] = GetWord(battle_config.reserved_costume_id, 0);
    					item_tmp.card[3] = GetWord(battle_config.reserved_costume_id, 1);
    				}
    				/*[GSF] end convert headgear to costume*/
    				item_tmp.bound = bound;
    				if ((flag = pc_additem(sd, &item_tmp, get_count, LOG_TYPE_COMMAND)))
    					clif_additem(sd, 0, 0, flag);
    			}
    		}
    	}
    
    	if (flag == 0)
    		clif_displaymessage(fd, msg_txt(sd,18)); // Item created.
    	return 0;
    }

     

    next is for src/map/script.cpp with below error message, can i also ask for help to fix the error?
    Error    C3861    'itemdb_searchname': identifier not found

    Below is the block code for above error message.

    /*===============================
     * getcostumeitem <item id>;
     * getcostumeitem <"item name">;
     *===============================*/
    BUILDIN_FUNC(getcostumeitem)
    {
    	unsigned short nameid;
    	struct item item_tmp;
    	TBL_PC *sd;
    	struct script_data *data;
    
    	if (!script_rid2sd(sd))
    	{	// No player attached.
    		script_pushint(st, 0);
    		return SCRIPT_CMD_SUCCESS;
    	}
    
    	data = script_getdata(st, 2);
    	get_val(st, data);
    	if (data_isstring(data)) {
    		int ep;
    		const char *name = conv_str(st, data);
    		struct item_data *item_data = itemdb_searchname(name);
    		if (item_data == NULL)
    		{	//Failed
    			script_pushint(st, 0);
    			return SCRIPT_CMD_SUCCESS;
    		}
    		ep = item_data->equip;
    		if (!(ep&EQP_HEAD_LOW) && !(ep&EQP_HEAD_MID) && !(ep&EQP_HEAD_TOP) && !(ep&EQP_GARMENT)){
    			ShowError("buildin_getcostumeitem: Attempted to convert non-cosmetic item to costume.");
    			return SCRIPT_CMD_FAILURE;
    		}
    		nameid = item_data->nameid;
    	}
    	else
    		nameid = conv_num(st, data);
    
    	if (!itemdb_exists(nameid))
    	{	// Item does not exist.
    		script_pushint(st, 0);
    		return SCRIPT_CMD_SUCCESS;
    	}
    
    	memset(&item_tmp, 0, sizeof(item_tmp));
    	item_tmp.nameid = nameid;
    	item_tmp.amount = 1;
    	item_tmp.identify = 1;
    	item_tmp.card[0] = CARD0_CREATE;
    	item_tmp.card[2] = GetWord(battle_config.reserved_costume_id, 0);
    	item_tmp.card[3] = GetWord(battle_config.reserved_costume_id, 1);
    	if (pc_additem(sd, &item_tmp, 1, LOG_TYPE_SCRIPT)) {
    		script_pushint(st, 0);
    		return SCRIPT_CMD_SUCCESS;	//Failed to add item, we will not drop if they don't fit
    	}
    
    	script_pushint(st, 1);
    	return SCRIPT_CMD_SUCCESS;
    }

  7. Hi All,

    I'm encountering below error messages after I diffed 2021-11-03 client using WARP.
    Can anyone help me how to solve this issues?
    image.png.9c640fdc81d1ea4bbe43d434d8149ae6.png

    image.png.fb256f6c5d1ee1810e1e04d0a3e02859.png

    image.png.55251cf846b15e297b39ed630ffc4863.png

    image.png.f11d9bb293dd16a515cc689791330f44.png

    image.png.b30d6b37cd67b89ff7efd687f7720186.png

     

    For the data and System folder, i've used the ones available from GitHub - llchrisll/ROenglishRE: An unofficial english translation project for Korea Ragnarok Online (kRO).
    where i copied the renewal folder and it was over written by the files from Pre-Renewal.

    I'm also using the default sclientinfo.xml

    <?xml version="1.0" encoding="euc-kr" ?>
    <clientinfo>
    	<desc>Ragnarok Client Information</desc>
    	<servicetype>korea</servicetype>
    	<servertype>sakray</servertype>
    	<connection>
    		<display>Local</display>
          		<address>127.0.0.1</address>
          		<port>6900</port>
          		<version>55</version>
          		<langtype>0</langtype>
    		<registrationweb>www.ragnarok.com</registrationweb>
    		<loading>
    			<image>loading00.jpg</image>
    			<image>loading01.jpg</image>
    			<image>loading02.jpg</image>
    			<image>loading03.jpg</image>
    			<image>loading04.jpg</image>
    			<image>loading05.jpg</image>
    			<image>loading06.jpg</image>
    		</loading>
    		<aid>
    			<admin>2000000</admin>
    		</aid>
       	</connection>
    </clientinfo>

    while below are the patches that i've selected.

    2021-11-03_Ragexe_1635926200_patched.exe_session.yml

  8. On 10/8/2022 at 4:27 PM, Emistry said:
    //===== rAthena Script =======================================
    //= Free Script
    //===== By: ==================================================
    //= Sader1992
    //= https://rathena.org/board/profile/30766-sader1992/
    //= Email [email protected]
    //===== Compatible With: =====================================
    //= rAthena Project
    //= ==========================================================
    //= @aitem this command allows you to check how many of the item in the server
    //= command @aitem2 allows you to check also who have the items
    //= @aitem is fast, but @aitem2 will take some time to finish
    //= the time depend on how big your database is!
    //= ==========================================================
    //= you should wait until the command is done , do not logout/talk to npc/ anything until you get the results!
    //= ==========================================================
    //= '@AnalyzeItem' return the count of the item in the server.
    //= '@AnalyzeItem2' return the count of the item and the lst of who have it in the server (take more time).
    //= USAGE:
    //= @AnalyzeItem <ITEM_ID>
    //= @AnalyzeItem2 <ITEM_ID>
    //= OR
    //= @AItem <ITEM_ID>
    //= @AItem2 <ITEM_ID>
    //= Wait until you get the results in your chat
    //= to add more tables (like other storages) check the array .@tables$ and .@id$
    //= F_GET_REAL_OWNER_NAME(<"string table">,<id>) get the name for id
    //============================================================
    function	script	F_GET_REAL_OWNER_NAME	{
    	.@table$ = getarg(0);
    	.@id = getarg(1);
    	.@n$ = "";
    	if(.@table$ != "account_id" && .@table$ != "char_id"){
    		if(.@table$ != "id"){
    			return "(Mails):";
    		}else{
    			return "(Guilds):";
    		}
    	}
    	.@acc = .@id;
    	if(.@table$ == "char_id"){
    		query_sql("SELECT `account_id` FROM `char` WHERE `char_id` = '" + .@id + "'",.@acc);
    	}
    	query_sql("SELECT `group_id`,`userid` FROM `login` WHERE `account_id` = '" + .@acc + "'",.@g,.@name$);
    	if(.@g >= 1){
    		.@n$ = "[ Player ] ";
    	}
    	if(.@g >= 80){
    		.@n$ = "[ Staff ] ";
    	}
    	.@name1$ = .@n$ + .@name$;
    	return .@name1$;
    }
    
    
    prontera,155,181,5	script	Sample	757,{
    	input .@item_id;
    	.@owner_name = select("Continue", "Get Real Owner Name") - 1;
    	setarray .@tables$,"cart_inventory","guild_storage","inventory","storage",  "mail_attachments";
    	setarray .@id$,		"char_id",		"guild_id",		"char_id",	"account_id","id";
    	mes "Searching for item '" + getitemname(.@item_id) + "'",0x9FFFB5;
    	mes "Analyze Tables",0x9FFFB5;
    	for(.@i=0;.@i<getarraysize(.@tables$);.@i++){
    		query_sql("SELECT `amount`,`" + .@id$[.@i] + "` FROM `" + .@tables$[.@i] + "` WHERE nameid = '"+ .@item_id +"'", .@count,.@id);
    		
    		for(.@n=0;.@n<getarraysize(.@count);.@n++){
    			.@allcounts += .@count[.@n];
    			if(.@owner_name){
    				.@n$ = F_GET_REAL_OWNER_NAME(.@id$[.@i],.@id[.@n]);
    				.@ndx = inarray(.@name_list$,.@n$);
    				if(.@ndx == -1){
    					.@ndx = getarraysize(.@name_list$);
    					.@name_list$[.@ndx] = .@n$;
    				}
    				.@count_list[.@ndx] += .@count[.@n];
    				sleep2 2;
    			}
    		}
    		sleep2 5;
    		deletearray .@count[0],getarraysize(.@count);
    	}
    	if(.@owner_name){
    		mes "==================================",0x9FFFB5;
    		mes "Extended List:",0x9FFFB5;
    		if(getarraysize(.@name_list$) > 20){
    			for(.@i=0;.@i<getarraysize(.@name_list$);.@i += 3){
    				mes "" + .@name_list$[.@i] + " - (" + .@count_list[.@i] + ")" + "    " + "(" + .@name_list$[.@i+1] + "): (" + .@count_list[.@i+1] + ")" + "    " + "(" + .@name_list$[.@i+2] + "): (" + .@count_list[.@i+2] + ")",0x9FFFB5;
    			}
    		}else{
    			for(.@i=0;.@i<getarraysize(.@name_list$);.@i++){
    				mes "" + .@name_list$[.@i] + " - (" + .@count_list[.@i] + ")";
    			}
    		}
    		
    		mes "==================================",0x9FFFB5;
    	}
    	mes "Analyze Done.",0x9FFFB5;
    	mes "(" + .@allcounts + ")" + getitemname(.@item_id) + ".",0x9FFFB5;
    	close;
    }

     

    is there a way to count as well those cards that are already attached in the item?

  9. On 12/19/2012 at 11:22 PM, AnnieRuru said:

    yeah lol you are right

     

    -	script	jfksdhfkjs	-1,{
    OnNPCKillEvent:
    if ( getmonsterinfo( killedrid, MOB_MVPEXP ) && rand(100) < 40 ) {
    	if ( getcharid(1) ) {
    		getpartymember getcharid(1), 1;
    		getpartymember getcharid(1), 2;
    		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
    			if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { // what happens if someone in the party member is offline =/
    				.@partymemberaid[.@c] = $@partymemberaid[.@i];
    				.@c++;
    			}
    		}
    		getitem 607, 3, .@partymemberaid[ rand( .@c ) ];
    		announce "Party ["+ strcharinfo(1) +"] has killed "+ getmonsterinfo( killedrid, MOB_NAME ) +" at "+ strcharinfo(3), 0;
    	}
    	else {
    		getitem 607, 3;
    		announce "Player ["+ strcharinfo(0) +"] has killed "+ getmonsterinfo( killedrid, MOB_NAME ) +" at "+ strcharinfo(3), 0;
    	}
    }
    end;
    }
     

     

    How to make this rewards all party members online.

  10. hey emistry.. i used your script before and its awesome, but one day ive experience a bug during woe.. after the emperium breaks, it doesn't respawn again.. if i'm not mistaken i used the version 1.21.. is this bug is already fix in v.1.22??

    i use your script at 3ceam svn revision 640+..

    now i'm planning to use again your script at 3ceam 661.. i hope it's already fix..

    thanks for the script btw. :)

×
×
  • Create New...