Jump to content

MikZ

Members
  • Content Count

    461
  • Joined

  • Last visited

Posts posted by MikZ


  1. On 4/9/2020 at 9:36 AM, 4144 said:

    well gepard not prevent cheaters. it create some issues for botters only. Real protection can be only server side.

    from log this is packets with wrong skill id. you can ignore them or add some code for disconnect players with wrong skill sent.

     

    remove code what you add before, and place this code:

    if (skill->get_index(skill_id) == 0) { sockt->eof(fd); ShowWarning("Wrong skill detected %d. Player disconnected\n", skill_id); return; }

    
    if (skill->get_index(skill_id) == 0) {
    	sockt->eof(fd);
    	ShowWarning("Wrong skill detected %d. Player disconnected\n", skill_id);
    	return;
    }

    This code should disconnect anyone who using skill what was not added to skill_db.

     

     

     

    I got this error

    image.png.74efff8d80e8d9e6d8d056676aadebdf.png


  2. Hello,

    May I know how to convert this script to hercules. Tried to google addrid in hercules but per this TOPIC it was already pulled/merged with Hercules get.
    Also tried if was included in Deprecation. I can't find any idea how to fix it. please help. thanks!

     

    but has error in addrid

    [Error]: script error in file '(DIRECT INPUT)' line 148 column 5 
        parse_line: expect command, missing function name or calling undeclared function 
       145:     if( getcharid(2) == $App_Guilds[.@i] ){ 
       146:     .count = 0; 
       147:     .@origin = getcharid(3); 
    *  148:     addrid(3,0, getcharid(2)); 
            ~~~~^ 
       149:     if ( strcharinfo(3) == .checkmap$ ) 
       150:         .count++; 
       151:     if ( !.@origin ) end; 
    [Error]: npc_parsesrcfile: Unknown syntax in file '(DIRECT INPUT)', line '169'. Stopping... 
     * w1=-   script  kjdhfkjshf  -1,{ 
     * w2= 
     * w3= 
     * w4= 

     

    Script below.

    //Modified by - PandaLovesHamster
    //Custom Guild Limiter
    //Credits to the owners of the individual makers of the script, I just tied them all together to create this script
     
    ayothaya,171,144,5	script	Guild Limiter	4_M_JOB_KNIGHT2,{
     
    // this part registers the guild
        function sf {
            function s;
            .@a = getarg(2);
            .@len = getarg(3);
            return (
                sprintf( getarg(0),
                    s(.@a, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
                    s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
                    s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
                    s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
                    s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1))
                )
                +(( .@a+1 < .@len )?":Next":":")
                +(( .@a-11 > 0 )?":Back":":")
                +":Cancel"
            );
            function s {
                if( getarg(0) >= getarg(1) ) return "";
                else {
                    .@name$ = getguildname(getelementofarray(getarg(2),getarg(0)));
                    return .@name$=="null"?"":.@name$;
                }
            };
        };
        function nex { return((getarg(0)+10)<getarg(1)?getarg(0)+10:getarg(1)-(getarg(1)%10)); };
        function bac { return((getarg(0)-10)>=0?getarg(0)-10:0); };
     
        if(getgmlevel()>=80 ) {
            mes .Npc_Name$;
            mes "Hello Mr. GM what would you like to do?";
            next;
            switch( select("Add/Remove Guilds:Clear Guild Data:Player Menu:Cancel") ) {
                case 1:
                    mes .Npc_Name$;
                    mes "Would you like to add or remove a guild?";
                    .@a_len = getarraysize($App_Guilds);
                    .@format$ = "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s";
                    next;
                    if( select("Remove:Add") == 1 ) {
                        while( .@a != 9999 ) {
                            select( sf( .@format$, $App_Guilds, .@a, .@a_len ) );
                            switch( @menu ) {
                                case 11: .@a = nex( .@a, .@a_len ); break;
                                case 12: .@a = bac( .@a ); break;
                                case 13: end;
                               
                                default:
                                    .@select = .@a+@menu-1;
                                    mes .Npc_Name$;
                                    mes "You've selected ^0000FF["+getguildname($App_Guilds[.@select])+"]^000000 guild. Would you like to remove them from the accepted guilds?";
                                    next;
                                    if( select("Yes:No") == 1 ) {
                                        deletearray($App_Guilds[.@select],1);
                                        mes .Npc_Name$;
                                        mes "The guild has been removed!";
                                    }
                                    close;
                            }
                        }
                    } else {
                        mes .Npc_Name$;
                        mes "Please input guild name or masters name.";
                        next;
                        input(.@input$);
                        .@len = query_sql( "Select `guild_id` from `guild` where `name` like '%"+escape_sql(.@input$)+"%' or `master` like '%"+escape_sql(.@input$)+"%';",.@guild_id );
                        while( .@a != 9999 ) {
                            select( sf( .@format$, .@guild_id, .@a, .@len ) );
                            switch( @menu ) {
                                case 11: .@a = nex( .@a, .@len ); break;
                                case 12: .@a = bac( .@a ); break;
                                case 13: end;
                               
                                default:
                                    .@select = .@a+@menu-1;
                                    .@a_len = getarraysize($App_Guilds);
                                    for(.@b=0;.@b<.@a_len;.@b++)
                                        if( $App_Guilds[.@b]==.@guild_id[.@select] ) {
                                            mes .Npc_Name$;
                                            mes "You've selected ^0000FF["+getguildname(.@guild_id[.@select])+"]^000000 guild. I'm sorry but that guild has already been added to the accepted list.";
                                            close;
                                        }
                                    mes .Npc_Name$;
                                    mes "You've selected ^0000FF["+getguildname(.@guild_id[.@select])+"]^000000 guild. Would you like to add them to the accepted guilds?";
                                    next;
                                    if( select("Yes:No") == 1 ) {
                                        .@a_len = getarraysize($App_Guilds);
                                        if( .@a_len>=128 ) {
                                            mes .Npc_Name$;
                                            mes "I'm sorry but the accepted list is full please make some room and try again...";
                                        } else {
                                            mes .Npc_Name$;
                                            mes "The guild was successfully added!";
                                            $App_Guilds[.@a_len] = .@guild_id[.@select];
                                        }
                                    }
                                    close;
                            }
                        }
                    }
                case 2:
                    mes .Npc_Name$;
                    mes "Are you sure you want to clear the guild data?!";
                    next;
                    if( select("Yes!:No!")==1 ) {
                        mes .Npc_Name$;
                        mes "This is you last chance. Are you surely sure as sure can be?";
                        next;
                        if( select("Surly!:No, wait... Where am I?!!")==1 )
                            deletearray($App_Guilds);
                    }
                    if( @menu==1 ) {
                        mes .Npc_Name$;
                        mes "The deed is done...";
                    } else {
                        mes .Npc_Name$;
                        mes "Wow that was a close one... Have a nice day!";
                    }
                    close;
                   
                case 3: break;
               
                case 4:
                    mes .Npc_Name$;
                    mes "Alright, have a nice day!";
                    close;
            }
        }
     
        .@len = getarraysize($App_Guilds);
        for( .@i=0; .@i <= .@len; .@i++ ) {
            if( getcharid(2) == $App_Guilds[.@i] )
                set .@Guild_Check, .@Guild_Check+1;
        }
     
       
    // This part ejects players when they are in the map
        OnPCLoadMapEvent:
        if( getcharid(2) == $App_Guilds[.@i] ){
        .count = 0;
        .@origin = getcharid(3);
        addrid 3, 0, getcharid(2);
        if ( strcharinfo(3) == .checkmap$ )
            .count++;
        if ( !.@origin ) end;
        if ( .count > 5 ) { // 5 means only 5 players per guild allowed in a map.
            message strcharinfo(0), "Your guild members are over the limit";
            sleep2 2000;
            warp "SavePoint", 0,0;
        }
        }
        end;
    OnInit:
        setarray .@checkmap$, "arug_cas01", "arug_cas02", "arug_cas03", "arug_cas04", "arug_cas05", "schg_cas01", "schg_cas02", "schg_cas03", "schg_cas04", "schg_cas05";
        .@len = getarraysize( .@checkmap$ );
        for ( .@i = 0; .@i < .@size; .@i++ ) {
            setmapflag .@checkmap$[.@i], mf_loadevent;
            setd "."+ .@checkmap$[.@i], 1;
        }
        end;
    }
     
    -   script  kjdhfkjshf  -1,{
    OnPCLoadMapEvent:
        if ( getmapflag( strcharinfo(3), mf_gvg_castle ) && ( agitcheck() || agitcheck2() )) {
        .@len = getarraysize($App_Guilds);
        for( .@i=0; .@i <= .@len; .@i++ ) {
            if( getcharid(2) == $App_Guilds[.@i] )
                set .@Guild_Check, .@Guild_Check+1;
        }
        if( .@Guild_Check < 1 ) {
            dispbottom "Your guild has not yet been approved, please contact the GMs";
            sleep2 3000;
            warp "SavePoint",0,0;
            end;
        }
        if( !getcharid(2) ) {
            dispbottom "Sorry only members of a guild may enter a castle.";
            sleep2 3000;
            warp "SavePoint",0,0;
            end;
        }
    }
        end;
    OnInit:
        setarray .castles$[0],
            "prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
            "payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
            "gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
            "aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
            "arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05",
            "schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05";
        for ( .@i = 0; .@i < 30; .@i++ )
            setmapflag .castles$[.@i], mf_loadevent;
        end;
    }

     


  3. Good day!

    May I request additional script here please.
    Wanted to have Admin to register the GUILD first to get the reward not open to all Guild and will only provide the Supply every WOE TIME only.

    prontera,155,180,5	script	Daily Supply	4_M_UNCLEKNIGHT,{
    
    	setarray .@item_id, 671,1,672,2;	// <Item_ID>,<Item_Amount>,{...};
    	.@n$ = "["+strnpcinfo(0)+"]";
    	.@GID = getcharid(2);
    	.@GM = (getguildmaster(.@GID) == strcharinfo(0))?1:0;
    	mes .@n$;
    	mes "Welcome!";
    	mes (.@GM)?"Have you claimed your supplies today?":"You have no business with me.";
    	next;
    	if (select(((.@GM)?"Claim Supplies":"")+":Leave") == 2) close;
    	query_sql("SELECT COUNT(*) FROM `guild_member` WHERE `guild_id`="+.@GID, .@count);
    	if (.@count < 10) {
    		mes .@n$;
    		mes "You have not enough guild members to claim the supplies.";
    		close;
    	}
    	.@d$ = gettimestr("%Y%m%d",9);
    	.@p = .@GID / 128;
    	.@g = .@GID % 128;	
    	if (getd("$GS_"+.@p+"$["+.@g+"]") != .@d$) {
    		mes .@n$;
    		mes "Here you go!";
    		close2;
    		setd "$GS_"+.@p+"$["+.@g+"]", .@d$;
    		for (.@i = 0; .@i < getarraysize(.@item_id); .@i += 2)
    			getitem .@item_id[.@i],.@item_id[.@i+1];
    		end;
    	}
    	mes .@n$;
    	mes "You have taken your supplies today.";
    	close;
    }


     


  4. 21 hours ago, MikZ said:

    Hi I updated my GIT and got this error.

    Please help me.

    ExtendedBG.c: In function \u2018skill_notok_pre\u2019: ExtendedBG.c:2084:11: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019 if ((*sd)->skillitem == *skill_id) { ^ ExtendedBG.c: In function \u2018unit_guild_skill\u2019: ExtendedBG.c:4052:35: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019 if (skill_id < GD_SKILLBASE || sd->skillitem) ^ ExtendedBG.c:4089:9: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019 if (sd->skillitem != skill_id) { ^ ExtendedBG.c:4102:4: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019 sd->skillitem = sd->skillitemlv = 0; ^ ExtendedBG.c:4102:20: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitemlv\u2019 sd->skillitem = sd->skillitemlv = 0; ^ ExtendedBG.c: In function \u2018record_requirement\u2019: ExtendedBG.c:5466:18: error: \u2018struct <anonymous>\u2019 has no member named \u2018autocast\u2019 if (sd->state.autocast) ^

    
    ExtendedBG.c: In function \u2018skill_notok_pre\u2019:
    ExtendedBG.c:2084:11: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
      if ((*sd)->skillitem == *skill_id) {
               ^
    ExtendedBG.c: In function \u2018unit_guild_skill\u2019:
    ExtendedBG.c:4052:35: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
      if (skill_id < GD_SKILLBASE || sd->skillitem)
                                       ^
    ExtendedBG.c:4089:9: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
       if (sd->skillitem != skill_id) {
             ^
    ExtendedBG.c:4102:4: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
      sd->skillitem = sd->skillitemlv = 0;
        ^
    ExtendedBG.c:4102:20: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitemlv\u2019
      sd->skillitem = sd->skillitemlv = 0;
                        ^
    ExtendedBG.c: In function \u2018record_requirement\u2019:
    ExtendedBG.c:5466:18: error: \u2018struct <anonymous>\u2019 has no member named \u2018autocast\u2019
         if (sd->state.autocast)
                      ^

     

    Up please


  5. Good day!

    May I know how to make this getitembound in guild package exclusive in WOE map only?

     

    //===== rAthena Script =======================================
    //= GuildPack NPC with Gepard Function Supported
    //===== By: ==================================================
    //= BeWan
    //https://rathena.org/board/profile/62232-bewan/
    //===== Current Version: =====================================
    //= 1.0
    //===== Description: =========================================
    //= GuildPack NPC supported of gepard function " unique_id "
    //= Minimum of 10 members online
    //= Guild Leader and Member Reward Supported
    //============================================================
    
    prontera,155,182,4	script	GuildPack NPC	10191,{
    
    	.@unique_id$ = get_unique_id();
    	
    	if( !getcharid(2) ){
    		mes "You Don't Have Guild.";
    		close;
    	}
    
    	mes "[Master Krane]";
    	mes "Good day!";
    	mes "Do you want to claim Guild-Pack?!";
    	next;
    	menu "Yes Please",yes,"Nope",no;
    
    yes:
    	query_sql "SELECT `guild_id`, COUNT(`online`) FROM `char` WHERE `guild_id` = '"+getcharid(2)+"' AND `online` = '1'", .@Gid, .@online;
    	getinventorylist;
    	.@weight = 100 * Weight / MaxWeight;
    	if ( .@online < 10 ) {
    		mes "[Master Krane]";
    		mes "Sorry not enough online members";
    		mes "You must have 10 members online to claim Guild-Pack";
    		close;
    	}else if ( @inventorylist_count > 30 ) {
    		mes "[Master Krane]";
    		mes "You have 30 different items in your inventory.";
    		close;
    	}else if((.@weight) > 50){
    		mes "[Master Krane]";
    		mes "^FF0000You must atleast have 50 percent extra weight to receive guildpack.^000000";
    		mes " ";
    		mes "You are currently at " + .@weight + " percent of your maximum weight.";
    		close;
    	}else if(getd("$GpackID_" + .@unique_id$) > 0 || #GuildPackReward > 0){
    		mes "[Master Krane]";
    		mes "You have already claimed your GuildPack.";
    		close;
    	}else if (getguildmasterid(getcharid(2)) == getcharid(0)) {
    		mes "[Master Krane]";
    		mes "Hello Guild Leader.";
    		next;
    		mes "Here's your GuildPack. Have a nice day!";
    		
    		setd "$GpackID_" + .@unique_id$,1;
    		#GuildPackReward = 1;
    		$gpack_count -= 1;
    		/////GuildMaster REWARD
    			//getitembound 1202,1,Bound_Account;
    			//getitembound 1202,1,Bound_Guild;
    			//getitembound 1202,1,Bound_Party;
    			//getitembound 1202,1,Bound_Char;
    			getitem 2311,1;
    		////
    		if ($gpack_count == 0)
    			$reward_status = 1;
    		end;
    	}else{
    		mes "[Master Krane]";
    		mes "Hello Guild Member.";
    		next;
    		mes "Here's your GuildPack. Have a nice day!";
    		
    		setd "$GpackID_" + .@unique_id$,1;
    		#GuildPackReward = 1;
    		$gpack_count -= 1;
    		/////GuildMember REWARD
    			//getitembound 1601,1,Bound_Account;
    			//getitembound 1601,1,Bound_Guild;
    			//getitembound 1601,1,Bound_Party;
    			//getitembound 1601,1,Bound_Char;
    			getitem 2319,1;
    		////
    		if ($gpack_count == 0)
    			$reward_status = 1;
    		end;
    	}
    no:
    	mes "Well Okay";
    	close;
    	
    OnInit:
    	waitingroom "Guildpack!",0;
    	end;
    }

     


  6. 36 minutes ago, 4144 said:

    look like same errors but other skill id

    client send wrong skills.

    if this is on your production server as i said before it can be some one who cheating.

    if on your local server, then some thing wrong with your client.

     

    also if you using any client modifications like game guard or external tools, this can be from this things too.


    /sob I have Gepard. I don't know but per functor its not from gepard. Wonder if this can be fixed. So irritating to see. /sob


  7. On 4/6/2020 at 11:03 AM, 4144 said:

    i speaked about c code and not scripts. add it to clif.c

     

    wrong:

    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2))); static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) if (skill_id == 5423) { ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id); } { int64 tick = timer->gettick();

    
    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
    if (skill_id == 5423)
    {
    	ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
    }
    {
    	int64 tick = timer->gettick();

     

    correct:

    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2))); static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) { if (skill_id == 5423) { ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id); } int64 tick = timer->gettick();

    
    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
    {
    	if (skill_id == 5423)
    	{
    		ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
    	}
    	int64 tick = timer->gettick();

    and i add skill id what you show in first screenshot.

     



    Hi I got much more specific error. how can i fixed this?

     

    image.png.1236623af6b86dbd3c043685151d8dd1.png

    image.png.c759b5634c04b583d595ded02b00a488.png

    image.png.4a6229fdfb20fd39d909ad79db1793a3.png


  8. Hi I updated my GIT and got this error.

    Please help me.

    ExtendedBG.c: In function \u2018skill_notok_pre\u2019:
    ExtendedBG.c:2084:11: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
      if ((*sd)->skillitem == *skill_id) {
               ^
    ExtendedBG.c: In function \u2018unit_guild_skill\u2019:
    ExtendedBG.c:4052:35: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
      if (skill_id < GD_SKILLBASE || sd->skillitem)
                                       ^
    ExtendedBG.c:4089:9: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
       if (sd->skillitem != skill_id) {
             ^
    ExtendedBG.c:4102:4: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitem\u2019
      sd->skillitem = sd->skillitemlv = 0;
        ^
    ExtendedBG.c:4102:20: error: \u2018struct map_session_data\u2019 has no member named \u2018skillitemlv\u2019
      sd->skillitem = sd->skillitemlv = 0;
                        ^
    ExtendedBG.c: In function \u2018record_requirement\u2019:
    ExtendedBG.c:5466:18: error: \u2018struct <anonymous>\u2019 has no member named \u2018autocast\u2019
         if (sd->state.autocast)
                      ^

     


  9. Good day!

    I am using this script for @go command for easy editing. 
    However script cannot trigger mapflag nowarp  nowarpto and noteleport. how can I trigger the mapflag on this command
     

    /*=========================================================
    @go command
    Original concept by jTynne
    Revised by Mumbles
    ===========================================================
    Description:
    Alternative @go command. Allows for unlimited aliasing, as 
    well as level and group restrictions for each destination.
    
    Additional options to add a delay, prevent use when dead,
    and charge per use are available; default cost is defined 
    with '.cost', but this parameter can be set manually with 
    'go()'. These extra features are disabled by default.
    
    Be mindful that the delay uses a temporary player variable,
    '@go_delay'; if the player logs out, this variable will be
    cleared. If you would like for a more secure delay, replace
    all instances of '@go_delay' with 'go_delay'.
    ===========================================================
    Compatibility:
    Optimised for Hercules emulators.
    ===========================================================
    Changelog:
    v1.0 - First version. [jTynne]
    v2.0 - Added additional parameters for locations. [jTynne]
    v3.0 - Optimised for Hercules emulators. [Mumbles]
    	v3.0.1 - Introduced limitless aliasing. [Mumbles]
    	v3.0.2 - Added go() function. [Mumbles]
    v3.1 - Added option to charge per use. [Mumbles]
    	v3.1.1 - Added option to limit use when dead. [Mumbles]
    	v3.1.2 - Added option to limit use to towns. [Mumbles]
    	v3.1.3 - Added changelog. [Mumbles]
    =========================================================*/
    
    -	script	at_go	-1,{
    
    	/*-----------------------------------------------------
    	Configuration
    	-----------------------------------------------------*/
    	OnInit:
    		.delay = 1;		// Delay per use, in seconds (default: 0)
    		.cost = 0;	// Default cost to use command if '.charge' is enabled
    		.charge = 0;	// Charge to use command? 0 = no, 1 = yes (default: 0)
    		.deadlock = 1;	// Prevent usage when dead? 0 = no, 1 = yes (default: 0)
    		.town = 0;		// Require 'mf_town'? 0 = no, 1 = yes (default: 0)
    		
    		bindatcmd "go", strnpcinfo(3) +"::OnAtcommand", 0, 2;
    		end;
    		
    		
    	/*-----------------------------------------------------
    	Function: go()
    	-------------------------------------------------------
    	Description: Warps player and checks prerequisites.
    	-------------------------------------------------------
    	Usage:
    	go(<"map_name">, <x>, <y>, <level>, <group>, <cost>)
    	-----------------------------------------------------*/
    	function go {
    		if (.deadlock && !Hp) {
    			message strcharinfo(0), "You may not use @go when you are dead.";
    		} else if (.town && !getmapflag(strcharinfo(3), mf_town)) {
    			message strcharinfo(0), "You may only use @go in towns.";
    		} else if (.delay && @go_delay > gettimetick(2)) {
    			message strcharinfo(0), "You must wait "+ (@go_delay - gettimetick(2))  +" seconds before warping again.";
    		} else if (BaseLevel < getarg(3)) {
    			message strcharinfo(0), "You must be at least level "+ getarg(3) +" to warp to this map.";
    		} else if (getgroupid() < getarg(4) || getmapflag(getarg(0), mf_nowarp)) {
    			message strcharinfo(0), "You are not authorised to warp to this map.";
    		} else if (.charge && Zeny < getarg(5)) {
    			message strcharinfo(0), "You must have at least "+ getarg(5) +" zeny to warp to this map.";
    		} else {
    			if (.delay) {
    				@go_delay = gettimetick(2) + .delay;
    			}
    		
    			if (.charge) {
    				Zeny -= getarg(5);
    			}
    		
    			warp getarg(0), getarg(1), getarg(2);
    			end;
    		}
    		
    		message strcharinfo(0), "@go failed.";
    		end;
    	}
    	
    	
    	/*-----------------------------------------------------
    	Function: alias()
    	-------------------------------------------------------
    	Description: Determines if input matches alias.
    	-------------------------------------------------------
    	Usage: alias(<"number">, <"name1">{, <"name2">, <...>})
    	-----------------------------------------------------*/
    	function alias {
    		for (.@i = 0; .@i < getargcount(); .@i++) {
    			if (@input$ == getarg(.@i)) {
    				@input$ = "";
    				return true;
    			}
    		}
    		
    		return false;
    	}
    	
    	
    	/*-----------------------------------------------------
    	Script
    	-----------------------------------------------------*/
    	OnAtcommand:
    		@input$ = .@atcmd_parameters$[0];
    		
    		if (alias("0", "pro", "pront", "prontera")) {
    			go("prontera",156, 184, 0, 0, .cost);
    		} else if (alias("1", "moc", "mor", "morocc", "morroc")) {
    			go("morocc", 160, 100, 0, 0, .cost);
    		} else if (alias("2", "gef", "geffen")) {
    			go("geffen", 120, 70, 0, 0, .cost);
    		} else if (alias("3", "pay", "payo", "payon")) {
    			go("payon", 174, 98, 0, 0, .cost);
    		} else if (alias("4", "alb", "alberta")) {
    			go("alberta", 192, 147, 0, 0, .cost);
    		} else if (alias("5", "izl", "izlude")) {
    			go("izlude", 127, 109, 0, 0, .cost);
    		} else if (alias("6", "ald", "alde", "aldebaran")) {
    			go("aldebaran", 140, 114, 0, 0, .cost);
    		} else if (alias("7", "xmas", "lutie")) {
    			go("xmas", 148, 132, 0, 0, .cost);
    		} else if (alias("8", "com", "comodo")) {
    			go("comodo",189, 151, 0, 0, .cost);
    		} else if (alias("9", "juno", "yuno")) {
    			go("yuno", 157, 182, 0, 0, .cost);
    		} else if (alias("10", "ama", "amat", "amatsu")) {
    			go("amatsu", 197, 84, 0, 0, .cost);
    		} else if (alias("11", "gon", "gonr", "gonryun")) {
    			go("gonryun", 159, 116, 0, 0, .cost);
    		} else if (alias("12", "umb", "umbala", "umbrella")) {
    			go("umbala", 90, 154, 0, 0, .cost);
    		} else if (alias("13", "nif", "niflheim")) {
    			go("niflheim", 195, 175, 0, 0, .cost);
    		} else if (alias("14", "lou", "louyang")) {
    			go("louyang", 218, 99, 0, 0, .cost);
    		} else if (alias("15", "nov", "ng", "novice")) {
    			go("new_1-1", 53, 111, 0, 10, .cost);
    		} else if (alias("16", "jail", "prison")) {
    			go("sec_pri", 23, 61, 0, 10, .cost);
    		} else if (alias("17", "jaw", "jawaii")) {
    			go("jawaii", 221, 221, 0, 0, .cost);
    		} else if (alias("18", "ayo", "ayotaya", "ayothaya")) {
    			go("ayothaya", 151, 165, 0, 0, .cost);
    		} else if (alias("19", "ein", "einbroch")) {
    			go("einbroch", 64, 200, 0, 0, .cost);
    		} else if (alias("20", "lhz", "light", "lighthalzen")) {
    			go("lighthalzen", 158, 92, 0, 0, .cost);
    		} else if (alias("21", "einbe", "einbech")) {
    			go("einbech", 176, 125, 0, 0, .cost);
    		} else if (alias("22", "hug", "hugel")) {
    			go("hugel", 96, 145, 0, 0, .cost);
    		} else if (alias("23", "rach", "rachel")) {
    			go("rachel", 130, 110, 0, 0, .cost);
    		} else if (alias("24", "ve", "veins")) {
    			go("veins", 216, 123, 0, 0, .cost);
    		} else if (alias("25", "mosc", "mosk", "moscovia")) {
    			go("moscovia", 223, 184, 0, 0, .cost);
    		} else if (alias("26", "camp", "mid", "midgard")) {
    			go("mid_camp", 180, 240, 0, 0, .cost);
    		} else if (alias("27", "man", "manuk")) {
    			go("manuk", 282, 138, 0, 0, .cost);
    		} else if (alias("28", "spl", "splend", "splendide")) {
    			go("splendide", 197, 176, 0, 0, .cost);
    		} else if (alias("29", "br", "bra", "brasil", "brasilis")) {
    			go("brasilis", 182, 239, 0, 0, .cost);
    		} else if (alias("30", "el", "eldic", "dic", "dicastes")) {
    			go("dicastes01", 198, 187, 0, 0, .cost);
    		} else if (alias("31", "mora")) {
    			go("mora", 44, 151, 0, 0, .cost);
    		} else if (alias("32", "dew", "dewata")) {
    			go("dewata", 200, 180, 0, 0, .cost);
    		} else if (alias("33", "mal", "malang", "malangdo")) {
    			go("malangdo", 140, 114, 0, 0, .cost);
    		} else if (alias("34", "port", "malay", "malaya")) {
    			go("malaya", 242, 211, 0, 0, .cost);
    		} else if (alias("35", "ecl", "ecla", "eclag", "eclage")) {
    			go("eclage", 110, 39, 0, 0, .cost);
    		} else if (alias("36", "eve", "event")) {
    			go("prontera", 190, 173, 0, 0, .cost);
    		} else {
    			message strcharinfo(0), "Invalid location number, or name.";
    			message strcharinfo(0), "Params: <city name|number>";
    			message strcharinfo(0), "Warps you to a city.";	
    			message strcharinfo(0), "0: Prontera     1: Morroc     2: Geffen     3: Payon     4: Alberta";
    			message strcharinfo(0), "5: Izlude     6: Al De Baran     7: Lutie     8: Comodo     9: Yuno";
    			message strcharinfo(0), "10: Amatsu     11: Gonryun     12: Umbala     13: Niflheim     14: Louyang";
    			message strcharinfo(0), "15: Novice Grounds     16: Prison     17: Jawaii     18: Ayothaya     19: Einbroch";
    			message strcharinfo(0), "20: Lighthalzen     21: Einbech     22: Hugel     23: Rachel     24: Veins";
    			message strcharinfo(0), "25: Moscovia     26: Midgard Camp     27: Manuk     28: Splendide     29: Brasilis";
    			message strcharinfo(0), "30: El Dicastes     31: Mora     32: Dewata     33: Malangdo     34: Malaya";
    			message strcharinfo(0), "35: Eclage";
    			message strcharinfo(0), "@go failed.";
    		}
    		
    		end;
    		
    }

     


  10. On 4/1/2019 at 6:05 AM, AnnieRuru said:

    https://github.com/AnnieRuru/Release/blob/master/Guides/What is dynamic_mob and how it affects scripts.md.
    https://rathena.org/board/topic/102715-mvp-board/#comment-357487

    unfortunately, Hercules/rAthena has dynamic_mob option, which is not available on Aegis, official ragnarok emulator
    we can't just simply mobcount the MVP because the boss_monster are not loaded until someone warp into the map

    the TBL_MOB in the topic you link to, using iteration, is equivalent to getunits script command, also doesn't cache the boss_monster

    there is a tricky way to do this however, which, in my theory, whenever a script command boss_monster pops up, push a source variable,
    and again this source variable can be read by scripts, and thus provide us to check either that MVP is available or not

     

    this question also has been asked to me privately in discord, and currently in 1 of my todo list

    Hi annie, Good day! Hope everything is okay with you. Anyways any update on your to do list?


  11. 4 hours ago, 4144 said:

    you put code before function start, but need after first

    {

    
    {

     

    I tried adding this

    function	script	H_VIPBuff	-1,{

    then use Herc script check and got this error. Does the error had to do with GEPARD SHIELD 3.0 im getting above?

    [Error]: npc_parse_function: Missing left curly '%TAB%{' in file '(DIRECT INPUT)', line '1'. Skipping the rest of the file. 
     * w1=function 
     * w2=script 
     * w3=H_VIPBuff 
     * w4=-1,{ 

     


  12. don't know why,

     

    but its getting worse is this bug? or does the script below cause this error?

    image.png.76fd88513f4e1cfbf38a69a58c8f1d4a.png

    image.png.cdf1f11cd85442df07b230f1068d58fa.png

     

    function	script	H_VIPBuff	{
    		query_sql( "SELECT CAST( `vip` AS DATE ),DATEDIFF( IFNULL(`vip`,NOW()),NOW() ), TIMESTAMPDIFF(SECOND, NOW(), `vip`) FROM `login` WHERE `account_id` = "+getcharid(3)+" LIMIT 1", .@vip_date$, .@day, .@vip_second);
    		if ( .@day > 0 || .@vip_second > 0) {
    		return true;
    	end;
    }
    		return false;
    }
    
    -	script	Healer	FAKE_NPC,{
    
    	.@price = 0;	// Zeny required for heal
    	.@Buffs = 1;	// Also buff players? (1: yes / 0: no)
    	.@Delay = 2;	// Heal delay, in seconds
    
    	if (@HD > gettimetick(2)) end;
    	if (.@price) {
    		message strcharinfo(PC_NAME),"Healing costs "+.@price+" Zeny.";
    		if (Zeny < .@price) end;
    		if(select("^0055FFHeal^000000", "^777777Cancel^000000") == 2) close;
    		Zeny -= .@price;
    	}
    
    	specialeffect(EF_HEAL2, AREA, playerattached()); percentheal 100,100;
    	if (.@Buffs) {
    
    	if (callfunc ("H_VIPBuff")) {
    		//sc_start SC_CASH_PLUSEXP,.exp_bonus_duration,.bonus_vip_exp_rate;
    		//sc_start SC_CASH_RECEIVEITEM,.bonus_duration,.bonus_vip_drop_rate;
    
    		specialeffect(EF_INCAGILITY, AREA, playerattached());
    		sc_start SC_INC_AGI,240000,10;
    		specialeffect(EF_BLESSING, AREA, playerattached());
    		sc_start SC_BLESSING,240000,10;
           		specialeffect(EF_KYRIE, AREA, playerattached());
    		sc_start SC_KYRIE, 120000, 0;
    		specialeffect( EF_IMPOSITIO, AREA, playerattached());
    		sc_start SC_IMPOSITIO, 60000, 0;
    		specialeffect(EF_GLORIA, AREA, playerattached());
    		sc_start SC_GLORIA, 30000, 0;
    
    	sc_end SC_STONE;
    	sc_end SC_FREEZE;
    	sc_end SC_STUN;
    	sc_end SC_SLEEP;
    	sc_end SC_POISON;
    	sc_end SC_CURSE;
    	sc_end SC_SILENCE;
    	sc_end SC_CONFUSION;
    	sc_end SC_BLIND;
    	sc_end SC_BLOODING;
    	sc_end SC_DPOISON;
    	sc_end SC_FEAR;
    	sc_end SC_COLD;
    	sc_end SC_BURNING;
    	sc_end SC_DEEP_SLEEP;
    	sc_end SC_DEC_AGI;
    	sc_end SC_BROKENARMOR;
    	sc_end SC_BROKENWEAPON;
    	sc_end SC_NOEQUIPWEAPON;
    	sc_end SC_NOEQUIPSHIELD;
    	sc_end SC_NOEQUIPARMOR;
    	sc_end SC_NOEQUIPHELM;
    	sc_end SC__STRIPACCESSARY;
    	sc_end SC_PROPERTYUNDEAD;
    	sc_end SC_ORCISH;
    	sc_end SC_BERSERK;
    	sc_end SC_SKE;
    	sc_end SC_SWOO;
    	sc_end SC_SKA;
    	sc_end SC_SLOWDOWN;
    	sc_end SC_FROSTMISTY;
    	sc_end SC_ILLUSION;
    	sc_end SC_BITESCAR;
    
    	if( getbrokenid(1) ) repairall;
    		getinventorylist;
    		while( .@i < @inventorylist_count ){
    
    	getinventorylist;
    	freeloop(true);
    
    	for( .@i = 0; .@i < @inventorylist_count; .@i++ ) {
    		if ( @inventorylist_identify[.@i] == 1 )
    			continue;
    		else if ( getskilllv(MC_IDENTIFY) == 1 && Sp >= 10 )
    			heal 0,0; // lol... this is supposed to reduce their SP by 10, whatever
    		else if ( countitem(Spectacles) )
    			delitem Spectacles,1;
    		else if ( getskilllv(RG_COMPULSION) && Zeny >= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5 )
    			Zeny -= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5;
    		else if ( getskilllv(MC_DISCOUNT) && Zeny >= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5 )
    			Zeny -= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5;
    		else if ( Zeny >= 40 )
    			Zeny -= 40;
    		else
    			break;
    		delitem2 @inventorylist_id[.@i], 1, 0, @inventorylist_refine[.@i], @inventorylist_attribute[.@i], @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i];
    		getitem2 @inventorylist_id[.@i], 1, 1, @inventorylist_refine[.@i], 0, @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i];
    		.@icount++;
    	}
    	freeloop(false);
    
    	if ( .@icount )
    		message strcharinfo(0), "Identified "+ .@icount +" Items.";
    	}
    }
    else {
    		specialeffect(EF_INCAGILITY, AREA, playerattached());
    		sc_start SC_INC_AGI,240000,10;
    		specialeffect(EF_BLESSING, AREA, playerattached());
    		sc_start SC_BLESSING,240000,10;
    }
    	if (.@Delay) @HD = gettimetick(2)+.@Delay;
    	end;
    
    }
    	OnInit:	
    		setarray .debuffs[0], SC_LEXAETERNA, SC_DEC_AGI, SC_POISON, SC_CURSE, SC_SILENCE, SC_BLIND, SC_VENOMBLEED, SC_DPOISON, SC_BURNING;
    
    }

     

    Please help me with this errors.


  13. 1 hour ago, MikZ said:

    sorry. which file? Im new to this. 

    Is this correct under clif.c?

     

    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id) __attribute__((nonnull (2)));
    static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill_id, int skill_lv, int target_id)
    if (skill_id == 5423)
    {
    	ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
    }
    {
    	int64 tick = timer->gettick();
    
    	if (skill_lv < 1)
    		skill_lv = 1; //No clue, I have seen the client do this with guild skills :/ [Skotlex]
    
    	int tmp = skill->get_inf(skill_id);
    	if (tmp & INF_GROUND_SKILL || !tmp)
    		return; //Using a ground/passive skill on a target? WRONG.
    
    	if (skill_id >= HM_SKILLBASE && skill_id < HM_SKILLBASE + MAX_HOMUNSKILL) {
    		clif->pUseSkillToId_homun(sd->hd, sd, tick, skill_id, skill_lv, target_id);
    		return;
    	}
    
    	if (skill_id >= MC_SKILLBASE && skill_id < MC_SKILLBASE + MAX_MERCSKILL) {
    		clif->pUseSkillToId_mercenary(sd->md, sd, tick, skill_id, skill_lv, target_id);
    		return;
    	}
    
    	// Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex]
    	pc->update_idle_time(sd, BCIDLE_USESKILLTOID);
    
    	if (sd->npc_id || sd->state.workinprogress & 1) {

     


  14. 46 minutes ago, 4144 said:

    you can add into function clif_useSkillToIdReal at start code:

    if (skill_id == 5423) { ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id); }

    
    if (skill_id == 5423)
    {
    	ShowError("Wrong skill 5423 from account_id: %d\n", sd->status.account_id);
    }

     

    sorry. which file? Im new to this. 


  15. On 4/1/2020 at 11:45 AM, 4144 said:

    no you cant know where skill was used/added except stack trace what you show on screenshot.

    try search in your plugins and in hercules code for 5423.

     

    this skill usage look like code from client. may be you have this skill id in your client lua files?

     

    if this is some one want exploit some non existing skill, you can simply ignore it.


    If someone is cheating is there a way to trace whose that person is? Already updated my Hercules git. still got the same error.


  16. 1 hour ago, X-EcutiOnner said:

    In conf/messages.conf you can replace %.2fx with do you want.
    image.png.ed69610208198b311b53bbb832d3f322.png

    how about in @mi? 
    Drops: 

    
    1239: Please enter a monster name/ID (usage: @mobinfo <monster_name_or_monster_ID>).
    1240: MVP Monster: '%s'/'%s'/'%s' (%d)
    1241: Monster: '%s'/'%s'/'%s' (%d)
    1242:  Lv:%d  HP:%d  Base EXP:%u  Job EXP:%u  HIT:%d  FLEE:%d
    1243:  DEF:%d  MDEF:%d  STR:%d  AGI:%d  VIT:%d  INT:%d  DEX:%d  LUK:%d
    1244:  ATK:%d~%d  Range:%d~%d~%d  Size:%s  Race: %s  Element: %s (Lv:%d)
    1245:  Drops:
    1246: This monster has no drops.
    1247:  MVP Bonus EXP:%u
    1248:  MVP Items:
    1249: This monster has no MVP prizes.


     


  17. Good day!

    May I know how to get rid of error infinity loop in this script.

    or where to add this *freeloop(<toggle>). thanks!

    //===== Hercules Script ======================================
    //= Healer
    //===== By: ==================================================
    //= Euphy
    //===== Current Version: =====================================
    //= 1.2
    //===== Description: =========================================
    //= Basic healer script.
    //===== Additional Comments: =================================
    //= 1.0 Initial script.
    //= 1.1 Aligned coordinates with @go.
    //= 1.2 Fix variables and character stuck at healing
    //============================================================
    function	script	H_VIPBuff	{
    		query_sql( "SELECT CAST( `vip` AS DATE ),DATEDIFF( IFNULL(`vip`,NOW()),NOW() ), TIMESTAMPDIFF(SECOND, NOW(), `vip`) FROM `login` WHERE `account_id` = "+getcharid(3)+" LIMIT 1", .@vip_date$, .@day, .@vip_second);
    		if ( .@day > 0 || .@vip_second > 0) {
    		return true;
    	end;
    }
    		return false;
    }
    
    -	script	Healer	FAKE_NPC,{
    
    	.@price = 0;	// Zeny required for heal
    	.@Buffs = 1;	// Also buff players? (1: yes / 0: no)
    	.@Delay = 0;	// Heal delay, in seconds
    
    	if (@HD > gettimetick(2)) end;
    	if (.@price) {
    		message strcharinfo(PC_NAME),"Healing costs "+.@price+" Zeny.";
    		if (Zeny < .@price) end;
    		if(select("^0055FFHeal^000000", "^777777Cancel^000000") == 2) close;
    		Zeny -= .@price;
    	}
    
    	specialeffect(EF_HEAL2, AREA, playerattached()); percentheal 100,100;
    	if (.@Buffs) {
    
    	if (callfunc ("H_VIPBuff")) {
    		//sc_start SC_CASH_PLUSEXP,.exp_bonus_duration,.bonus_vip_exp_rate;
    		//sc_start SC_CASH_RECEIVEITEM,.bonus_duration,.bonus_vip_drop_rate;
    
    		specialeffect(EF_INCAGILITY, AREA, playerattached());
    		sc_start SC_INC_AGI,240000,10;
    		specialeffect(EF_BLESSING, AREA, playerattached());
    		sc_start SC_BLESSING,240000,10;
           		specialeffect(EF_KYRIE, AREA, playerattached());
    		sc_start SC_KYRIE, 120000, 0;
    		specialeffect( EF_IMPOSITIO, AREA, playerattached());
    		sc_start SC_IMPOSITIO, 60000, 0;
    		specialeffect(EF_GLORIA, AREA, playerattached());
    		sc_start SC_GLORIA, 30000, 0;
    
    	sc_end SC_STONE;
    	sc_end SC_FREEZE;
    	sc_end SC_STUN;
    	sc_end SC_SLEEP;
    	sc_end SC_POISON;
    	sc_end SC_CURSE;
    	sc_end SC_SILENCE;
    	sc_end SC_CONFUSION;
    	sc_end SC_BLIND;
    	sc_end SC_BLOODING;
    	sc_end SC_DPOISON;
    	sc_end SC_FEAR;
    	sc_end SC_COLD;
    	sc_end SC_BURNING;
    	sc_end SC_DEEP_SLEEP;
    	sc_end SC_DEC_AGI;
    	sc_end SC_BROKENARMOR;
    	sc_end SC_BROKENWEAPON;
    	sc_end SC_NOEQUIPWEAPON;
    	sc_end SC_NOEQUIPSHIELD;
    	sc_end SC_NOEQUIPARMOR;
    	sc_end SC_NOEQUIPHELM;
    	sc_end SC__STRIPACCESSARY;
    	sc_end SC_PROPERTYUNDEAD;
    	sc_end SC_ORCISH;
    	sc_end SC_BERSERK;
    	sc_end SC_SKE;
    	sc_end SC_SWOO;
    	sc_end SC_SKA;
    	sc_end SC_SLOWDOWN;
    	sc_end SC_FROSTMISTY;
    	sc_end SC_ILLUSION;
    	sc_end SC_BITESCAR;
    
    	if( getbrokenid(1) ) repairall;
    		getinventorylist;
    		while( .@i < @inventorylist_count ){
    //	if ( !@inventorylist_identify[.@i] ){
    //		delitem2 @inventorylist_id[.@i],1,0,0,0,0,0,0,0;
    //		getitem @inventorylist_id[.@i],1;
    //	}
    //	.@i++;
    //	}
    //	end;
    	getinventorylist;
    	for( .@i = 0; .@i < @inventorylist_count; .@i++ ) {
    		if ( @inventorylist_identify[.@i] == 1 )
    			continue;
    		else if ( getskilllv(MC_IDENTIFY) == 1 && Sp >= 10 )
    			heal 0,0; // lol... this is supposed to reduce their SP by 10, whatever
    		else if ( countitem(Spectacles) )
    			delitem Spectacles,1;
    		else if ( getskilllv(RG_COMPULSION) && Zeny >= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5 )
    			Zeny -= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5;
    		else if ( getskilllv(MC_DISCOUNT) && Zeny >= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5 )
    			Zeny -= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5;
    		else if ( Zeny >= 40 )
    			Zeny -= 40;
    		else
    			break;
    		delitem2 @inventorylist_id[.@i], 1, 0, @inventorylist_refine[.@i], @inventorylist_attribute[.@i], @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i];
    		getitem2 @inventorylist_id[.@i], 1, 1, @inventorylist_refine[.@i], 0, @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i];
    		.@icount++;
    	}
    	if ( .@icount )
    		message strcharinfo(0), "Identified "+ .@icount +" Items.";
    	}
    }
    else {
    		specialeffect(EF_INCAGILITY, AREA, playerattached());
    		sc_start SC_INC_AGI,240000,10;
    		specialeffect(EF_BLESSING, AREA, playerattached());
    		sc_start SC_BLESSING,240000,10;
    }
    	if (.@Delay) @HD = gettimetick(2)+.@Delay;
    	end;
    
    }
    	OnInit:	
    		.exp_bonus_duration = 3600000;
    		.bonus_duration = 3600000;
    		.bonus_vip_exp_rate = 100;
    		.bonus_vip_drop_rate = 100;
    		setarray .debuffs[0], SC_LEXAETERNA, SC_DEC_AGI, SC_POISON, SC_CURSE, SC_SILENCE, SC_BLIND, SC_VENOMBLEED, SC_DPOISON, SC_BURNING;
    
    }
    //===============//
    //set .@Price, 100;	// Zeny per identify
    //getinventorylist;
    //for(set .@i,0; .@i<@inventorylist_count; set .@i,.@i+1) {
    //	if (@inventorylist_identify[.@i]) continue;
    //	if (Zeny < .@Price) {
    //		dispbottom? "It costs "+.@Price+" to identify an item."; break; }
    //	set Zeny, Zeny-.@Price;
    //	delitem2 @inventorylist_id[.@i],1,0,0,0,0,0,0,0;
    //	getitem @inventorylist_id[.@i],1;
    //	setarray .@Total[0], .@Total[0]+1, .@Total[1]+.@Price; }
    //if (!.@Total[0]) {
    //	message strcharinfo(0),"No items identified."; end; }
    //specialeffect2 154;
    //message strcharinfo(0),"Identified "+.@Total[0]+" items"+((.@Total[1])?" for "+.@Total[1]+" Zeny":"")+".";
    //end;
    //}
    
    // Duplicates
    //============================================================
    alberta,25,240,6	duplicate(Healer)	Healer#alb	4_PORING
    aldebaran,135,118,6	duplicate(Healer)	Healer#alde	4_PORING
    amatsu,200,79,4	duplicate(Healer)	Healer#ama	4_PORING
    ayothaya,207,169,6	duplicate(Healer)	Healer#ayo	4_PORING
    comodo,184,158,6	duplicate(Healer)	Healer#com	4_PORING
    einbech,57,36,6	duplicate(Healer)	Healer#einbe	4_PORING
    einbroch,57,202,6	duplicate(Healer)	Healer#einbr	4_PORING
    geffen,115,72,6	duplicate(Healer)	Healer#gef	4_PORING
    gonryun,156,122,6	duplicate(Healer)	Healer#gon	4_PORING
    hugel,89,150,6	duplicate(Healer)	Healer#hug	4_PORING
    izlude,125,118,5	duplicate(Healer)	Healer#izl	4_PORING
    jawaii,250,139,4	duplicate(Healer)	Healer#jaw	4_PORING
    lighthalzen,152,100,6	duplicate(Healer)	Healer#lhz	4_PORING
    louyang,226,103,4	duplicate(Healer)	Healer#lou	4_PORING
    manuk,272,144,6	duplicate(Healer)	Healer#man	4_PORING
    mid_camp,203,289,6	duplicate(Healer)	Healer#mid	4_PORING
    moc_ruins,72,164,4	duplicate(Healer)	Healer#moc	4_PORING
    morocc,153,97,6	duplicate(Healer)	Healer#mor	4_PORING
    moscovia,220,191,4	duplicate(Healer)	Healer#mos	4_PORING
    niflheim,212,182,5	duplicate(Healer)	Healer#nif	4_PORING
    payon,179,106,4	duplicate(Healer)	Healer#pay	4_PORING
    prontera,163,185,4	duplicate(Healer)	Healer#prt	4_PORING
    rachel,125,116,6	duplicate(Healer)	Healer#rac	4_PORING
    splendide,201,153,4	duplicate(Healer)	Healer#spl	4_PORING
    thor_camp,249,74,4	duplicate(Healer)	Healer#thor	4_PORING
    umbala,105,148,3	duplicate(Healer)	Healer#umb	4_PORING
    veins,217,121,4	duplicate(Healer)	Healer#ve	4_PORING
    xmas,143,136,4	duplicate(Healer)	Healer#xmas	4_PORING
    yuno,164,45,4	duplicate(Healer)	Healer#yuno	4_PORING
    
    // Duplicates (Renewal)
    //============================================================
    brasilis,194,221,6	duplicate(Healer)	Healer#bra	4_PORING
    dewata,195,187,4	duplicate(Healer)	Healer#dew	4_PORING
    dicastes01,201,194,4	duplicate(Healer)	Healer#dic	4_PORING
    ecl_in01,45,60,4	duplicate(Healer)	Healer#ecl	4_PORING
    malangdo,132,114,6	duplicate(Healer)	Healer#mal	4_PORING
    malaya,205,205,6	duplicate(Healer)	Healer#ma	4_PORING
    mora,55,152,4	duplicate(Healer)	Healer#mora	4_PORING

     

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.