Jump to content

Bringer

Members
  • Posts

    745
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Bringer

  1. 1 hour ago, Krypt said:

    Can I ask an old fcp behavior ? The one that removes strip buffs when using FCP. Or you can just teach me how can I find old rAthena revision so I can find the old one...

     

    http://trac.rathena.org/changeset/16567/rathena --> NOT WORKING LINK

    Skill.cpp

     

    	case AM_CP_WEAPON:
    	case AM_CP_SHIELD:
    	case AM_CP_ARMOR:
    	case AM_CP_HELM:
    		{
    			unsigned int equip[] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP};
    
    			if( sd && ( bl->type != BL_PC /*|| ( dstsd && pc_checkequip(dstsd,equip[skill_id - AM_CP_WEAPON]) < 0 )*/ ) ){
    				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
    				map_freeblock_unlock(); // Don't consume item requirements
    				return 0;
    			}
    			status_change_end(bl, type, INVALID_TIMER);
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,
    				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
    		}
    		break;


     

    	// Full Chemical Protection
    	case CR_FULLPROTECTION:
    		{
    			unsigned int equip[] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP};
    			int i_eqp, s = 0, skilltime = skill_get_time(skill_id,skill_lv);
    
    			for (i_eqp = 0; i_eqp < 4; i_eqp++) {
    				if( bl->type != BL_PC /*|| ( dstsd && pc_checkequip(dstsd,equip[i_eqp]) < 0 )*/ )
    					continue;
    				status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
    				status_change_end(bl, (sc_type)(SC_STRIPHELM + i), INVALID_TIMER);
    				status_change_end(bl, (sc_type)(SC_STRIPSHIELD + i), INVALID_TIMER);
    				status_change_end(bl, (sc_type)(SC_STRIPARMOR + i), INVALID_TIMER);
    				sc_start(src,bl,(sc_type)(SC_CP_WEAPON + i_eqp),100,skill_lv,skilltime);
    				s++;
    			}
    			if( sd && !s ){
    				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
    				map_freeblock_unlock(); // Don't consume item requirements
    				return 0;
    			}
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    		}
    		break;

     

    • Upvote 1
  2. Spoiler
    
    // https://rathena.org/board/topic/110719-hourly-vending-timer-stop/#comment-324042
    
    -	script	hourly_point_main	-1,{
        
    	OnInit:
    		.duration = 3600;
    		.vip_multi = 2;
    		.npc_name$ = strnpcinfo(3);
    		//.delay   = 1000;       //Delay for idle re-check check. ( Default: 1000 [ = 1 Second ] )
    		//.idle    = 60*1;       //Player is idle after not moving for this many seconds. ( Default: 60*5 [ = 5 Minutes ] )    
    		set .point_amt, 1; //Normal points gained.
    		bindatcmd "reward",    .npc_name$ + "::OnCheck";
    		end;
    
    	OnUpdate:
    		//Check for idle.
    		if (@hourly_point_stopped || checkvending() >= 1) {
    			@hourly_point_stopped = 1;
    			dispbottom "The hourly points event stopped because you were vending, chatting, or idle!";
    			end;
    		}
    		set #HourlyPoints, #HourlyPoints + .point_amt * 1 * ( vip_status(1) ? .vip_multi : 1 );
    		dispbottom "You received "+.point_amt+" Reward Hourly Points by staying ingame for 1 hour";
    		dispbottom "Current Balance = "+#HourlyPoints+" Reward Hourly Points";
    		set @consecutive_hour, @consecutive_hour + 1;
    
    		@timer = gettimetick(2) + .duration;
    		addtimer ( .duration * 1000 ), .npc_name$+"::OnUpdate";
    		end;
           
    	OnPCLoginEvent:
    		@timer = gettimetick(2) + .duration;
    		addtimer ( .duration * 1000 ), .npc_name$+"::OnUpdate";
    		dispbottom "Hourly Rewards have been started for this character.";
    		end;
    
    	OnPCLogoutEvent:
    		@timer = gettimetick(2) + .duration;
    		end;
    
    	OnCheck:
    		.@min = (@timer - gettimetick(2))/60;
    		.@sec = (@timer - gettimetick(2))%60;
    		dispbottom "Remaining Online Time:",0x9ae2d7;
    		dispbottom "====================================",0x9ae2d7;
    		dispbottom "Reward Hourly Points : [ "+#HourlyPoints+" ]",0x9ae2d7;
    			if ( @hourly_point_stopped ) {
    				dispbottom "The hourly points event stopped because you were previously vending, chatting, or idle!";
    			}
    			else {
    				dispbottom "Hourly Reward : " +
    					((.@min)?            "" + .@min + " minute"         + ((.@min > 1)?"s":""):"") +
    					((.@min && .@sec)?    " and ":"") +
    					((.@sec)?            "" + .@sec + " second"    + ((.@sec > 1)?"s":""):"") +
    					"",0x9ae2d7;
    				dispbottom "====================================",0x9ae2d7;
    			}
    		end;            
    	}

     

    can anyone help this Mod script

    1. Timer Account Base  [ if player change Char Timer still continue ]
    2. Even They logout timer will remain or gettimetick save
  3. 4 hours ago, Osus said:

     

    image.thumb.png.739083155feedeb3c49991ec59832f0a.png

    image.png.467c36bb30bdd2c61530631f1ef5a1eb.png

     

    It gives me an error for my source code. can anyone help me?

     

     

    					if (sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HUNTER && pc_isfalcon(sd) && sd->status.weapon == W_BOW &&
    						(skill=pc_checkskill(sd,SN_FALCONASSAULT))>0 &&
    						rnd()%1000 <= sstatus->luk*10/3+1 ) {
    						skill_castend_damage_id(src,bl,SN_FALCONASSAULT,skill,tick,SD_LEVEL);
    					}

    on the screehshot error sC_SPIRIT

  4. 2 hours ago, Ryo Osaki said:

    Hi, anyone can help me with the script? It's a Freebies NPC and Account Bounded, but can't get the item.

    PER ACCOUNT

    AND IF YOU GET IT, ACCOUNT BOUNDED

    Here's the script

    
    force_3-1,169,180,4	script	Freebies NPC	123,{
        query_sql ("SELECT `last_ip` FROM `login` WHERE `account_id`= '" + getcharid(3) + "'", .@lip$);
        mes "[Hello]";
        mes "[I can give you a free gift based on your future job.]";
        mes "[Please choose the correct item for the future job]";
        next;
        if(!#Freeitems && ( getd("$" + .@lip$ + "_ASD") == 0 )) {
            mes "Select one:";
            next;
            switch(select("Swordsman:Magician:Archer:Acolyte:Merchant:Thief")) {
                case 1:
                    getitem2 3670,1,1,0,0,0,0,0,0;
                    getitem2 3671,1,1,0,0,0,0,0,0;
                    getitem2 3672,1,1,0,0,0,0,0,0;
                    getitem2 3673,1,1,0,0,0,0,0,0;
                    getitem2 12263,5,1,0,0,0,0,0,0;
    		getitem2 1108,1,7,0,0,0,0,0,0;
                    break;
    
                case 2:
                    getitem2 3670,1,1,0,0,0,0,0,0;
                    getitem2 3671,1,1,0,0,0,0,0,0;
                    getitem2 3672,1,1,0,0,0,0,0,0;
                    getitem2 3673,1,1,0,0,0,0,0,0;
                    getitem2 12263,5,1,0,0,0,0,0,0;
    		getitem2 1602,1,7,0,0,0,0,0,0;
                    break;
    
                case 3:
                    getitem2 3670,1,1,0,0,0,0,0,0;
                    getitem2 3671,1,1,0,0,0,0,0,0;
                    getitem2 3672,1,1,0,0,0,0,0,0;
                    getitem2 3673,1,1,0,0,0,0,0,0;
                    getitem2 12263,5,1,0,0,0,0,0,0;
    		getitem2 1702,1,7,0,0,0,0,0,0;
                    break;
                    
                case 4:
                    getitem2 3670,1,1,0,0,0,0,0,0;
                    getitem2 3671,1,1,0,0,0,0,0,0;
                    getitem2 3672,1,1,0,0,0,0,0,0;
                    getitem2 3673,1,1,0,0,0,0,0,0;
                    getitem2 12263,5,1,0,0,0,0,0,0;
    		getitem2 1550,1,7,0,0,0,0,0,0;
    		getitem2 1505,1,7,0,0,0,0,0,0;
                    break;
                
                case 5:
                    getitem2 3670,1,1,0,0,0,0,0,0;
                    getitem2 3671,1,1,0,0,0,0,0,0;
                    getitem2 3672,1,1,0,0,0,0,0,0;
                    getitem2 3673,1,1,0,0,0,0,0,0;
                    getitem2 12263,5,1,0,0,0,0,0,0;
    		getitem2 1302,1,7,0,0,0,0,0,0;
                    break;
                
                case 6:
                    getitem2 3670,1,1,0,0,0,0,0,0;
                    getitem2 3671,1,1,0,0,0,0,0,0;
                    getitem2 3672,1,1,0,0,0,0,0,0;
                    getitem2 3673,1,1,0,0,0,0,0,0;
                    getitem2 12263,5,1,0,0,0,0,0,0;
    		getitem2 1209,1,7,0,0,0,0,0,0;
                    break;
                    
                }
                set #Freebie, 1;
                setd "$" + .@lip$ + "_ASD", getd("$" + .@lip$ + "_ASD") + 1;
                close;
        }
        OnInit:
        waitingroom "Get your freebies here!",0;
        end;
    }

     

     

    Screenshot_20191201-230842_Chrome.jpg

  5. 8 hours ago, gnashxalex said:

    the announce is char name has killed mob name at map name
    but i want to announce like this [char name] has killed 'mob name' at 'map name'

    but each time i try to put [char name] it gives me an error in the mapserver

    announce "MVP : Player ["+ strcharinfo(0) +"] has killed "+ getmonsterinfo( killedrid, MOB_NAME ) +" and received an item.", bc_all;


    More info about strcharinfo

     

    Spoiler
    
    * strcharinfo <type>;
     
    This function will return either the name, party name or guild name for the
    invoking character. Whatever it returns is determined by type.
    
    0 - Character's name.
    1 - The name of the party they're in if any.
    2 - The name of the guild they're in if any.
    
    If a character is not a member of any party or guild, an empty string will be
    returned when requesting that information.

     

     

  6. 						mes @header$;
    						set .@i$,callfunc( "int_format", Zeny );
    						mes "Do you want to exchange your ^33CC33"+.@i$+"^000000 Zeny to a ???";
    						next;
    							if(select("Cancel:Yes, Exchange it!")==1) close;
    						next;
    							mes @header$;
    							mes "Okay, Here you go!, Thank you for using my services.";
    							close;
    							}
    					break;
    
    function	script	int_format	{
    set .@int,  getarg(0);
    set .@sep$, getarg(1,",");
    set .@str$, "";
    if ( .@int < 0 ) {
    	set .@int, -.@int;
     	set .@neg, 1;
    }
    set .@len, getstrlen(.@int+"") - .@neg;
    
    for ( set .@i,0; .@i<.@len; set .@i,.@i+1 )
    	set .@str$, ( .@i % 3 == 2 && .@i < .@len-1 ? .@sep$ : "" ) + ( .@int / pow(10,.@i) ) % 10 + .@str$;
    return ( .@neg ? "-" : "" ) + .@str$;
    }

    can anyone help to exchange all my  Zeny > TCG

    Sample i have 27,000,000 Zeny i will get 2pcs TCG Card ( 10m * by 1 TCG )

  7. 1 hour ago, sader1992 said:

    try this

    
    /*==========================================
    * @whosell - List who is vending the item (amount, price, and location).
    * revamped by VoidLess, original by zephyrus_cr
    *------------------------------------------*/
    ACMD_FUNC(whosell)
    {
    	char item_name[100];
    	int item_id = 0, j, count = 0, sat_num = 0;
    	int s_type = 1; // search bitmask: 0-name,1-id, 2-card, 4-refine
    	int refine = 0,card_id = 0;
    	bool flag = 1; // place dot on the minimap?
    	struct map_session_data* pl_sd;
    	struct s_mapiterator* iter;
    	unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0;
    	struct item_data *item_data;
    	static char atcmd_output[CHAT_SIZE_MAX];
    
    	if (!*message) {
    		clif_displaymessage(fd, "Use: @whosell <item_id> or @whosell <name>");
    		return -1;
    	}
    	if (sscanf(message, "+%d %d[%d]", &refine, &item_id, &card_id) == 3){
    		s_type = 1+2+4;
    	}
    	else if (sscanf(message, "+%d %d", &refine, &item_id) == 2){
    		s_type = 1+4;
    	}
    	else if (sscanf(message, "+%d [%d]", &refine, &card_id) == 2){
    		s_type = 2+4;
    	}
    	else if (sscanf(message, "%d[%d]", &item_id, &card_id) == 2){
    		s_type = 1+2;
    	}
    	else if (sscanf(message, "[%d]", &card_id) == 1){
    		s_type = 2;
    	}
    	else if (sscanf(message, "+%d", &refine) == 1){
    		s_type = 4;
    	}
    	else if (sscanf(message, "%d", &item_id) == 1 && item_id == atoi(message)){
    		s_type = 1;
    	}
    	else if (sscanf(message, "%99[^\n]", item_name) == 1){
    		s_type = 1;
    	if ((item_data = itemdb_searchname(item_name)) == NULL){
    		clif_displaymessage(fd, "Not found item with this name");
    		return -1;
    	}
    		item_id = item_data->nameid;
    	} else {
    		clif_displaymessage(fd, "Use: @whosell <item_id> or @whosell <name>");
    		return -1;
    	}
    
    	//check card
    	if(s_type & 2 && ((item_data = itemdb_exists(card_id)) == NULL || item_data->type != IT_CARD)){
    		clif_displaymessage(fd, "Not found a card with than ID");
    		return -1;
    	}
    	//check item
    	if(s_type & 1 && (item_data = itemdb_exists(item_id)) == NULL){
    		clif_displaymessage(fd, "Not found an item with than ID");
    		return -1;
    	}
    	//check refine
    	if(s_type & 4){
    		if (refine<0 || refine>10){
    			clif_displaymessage(fd, "Refine out of bounds: 0 - 10");
    			return -1;
    		}
    		/*if(item_data->type != IT_WEAPON && item_data->type != IT_ARMOR){
    			clif_displaymessage(fd, "Use refine only with weapon or armor");
    			return -1;
    		}*/
    	}
    	iter = mapit_getallusers();
    	for (pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter)) 
    	{
    	if (pl_sd->vender_id ) {	 // check if player is vending
    		for (j = 0; j < pl_sd->vend_num; j++) {
    			if ((item_data = itemdb_exists(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid)) == NULL)
    				continue;
    			if(s_type & 1 && pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid != item_id)
    				continue;
    			if(s_type & 2 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) ||
    					(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3] != card_id)))
    				continue;
    			if(s_type & 4 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) || pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine != refine))
    				continue;
    			if(item_data->type == IT_ARMOR)
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %s[%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					,item_data->jname
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    					,pl_sd->vending[j].value
    					,pl_sd->vending[j].amount
    					,mapindex_id2name(pl_sd->mapindex)
    					,pl_sd->bl.x,pl_sd->bl.y
    					,pl_sd->message);
    			else if(item_data->type == IT_WEAPON)
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %s[%d,%d,%d,%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					,item_data->jname
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3]
    					,pl_sd->vending[j].value
    					,pl_sd->vending[j].amount
    					,mapindex_id2name(pl_sd->mapindex)
    					,pl_sd->bl.x,pl_sd->bl.y
    					,pl_sd->message);
    			else
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "%s | Price %ud | Amount %d | %s[%d,%d] | %s",item_data->jname
    					,pl_sd->vending[j].value
    					,pl_sd->vending[j].amount
    					,mapindex_id2name(pl_sd->mapindex)
    					,pl_sd->bl.x, pl_sd->bl.y
    					,pl_sd->message);
    			if(pl_sd->vending[j].value < MinPrice) MinPrice = pl_sd->vending[j].value;
    			if(pl_sd->vending[j].value > MaxPrice) MaxPrice = pl_sd->vending[j].value;
    			clif_displaymessage(fd, atcmd_output);
    			count++;
    			flag = 1;
    		}
    			if (flag && pl_sd->mapindex == sd->mapindex) {
    				clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, ++sat_num, 0xFFFFFF);
    				flag = 0;
    			}
    		}
    	}
    	mapit_free(iter);
    	if(count > 0) {
    		snprintf(atcmd_output, CHAT_SIZE_MAX, "================== Found %d entries. ==================", count, MinPrice, MaxPrice);
    		clif_displaymessage(fd, atcmd_output);
    	} else
    		clif_displaymessage(fd, "Nobody is selling it now.");
    
    	return 0;
    }

     

    it's working can but i can request display the card name too 
    like this 

    Item Name [Card] | [Item Price] | Map(x.y) | Shop Name

    image.png.4c4fec9aecee39576f429b8bab241277.png

    Photo : Credit to RagnaForce

    and i try to use on Extended Vending he detect Z not item like C = Credit
     

  8. Spoiler
    
    /*==========================================
    * @whosell - List who is vending the item (amount, price, and location).
    * revamped by VoidLess, original by zephyrus_cr
    *------------------------------------------*/
    ACMD_FUNC(whosell)
    {
    	char item_name[100];
    	int item_id = 0, j, count = 0, sat_num = 0;
    	int s_type = 1; // search bitmask: 0-name,1-id, 2-card, 4-refine
    	int refine = 0,card_id = 0;
    	bool flag = 1; // place dot on the minimap?
    	struct map_session_data* pl_sd;
    	struct s_mapiterator* iter;
    	unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0;
    	struct item_data *item_data;
    	static char atcmd_output[CHAT_SIZE_MAX];
    
    	if (!*message) {
    		clif_displaymessage(fd, "Use: @whosell <item_id> or @whosell <name>");
    		return -1;
    	}
    	if (sscanf(message, "+%d %d[%d]", &refine, &item_id, &card_id) == 3){
    		s_type = 1+2+4;
    	}
    	else if (sscanf(message, "+%d %d", &refine, &item_id) == 2){
    		s_type = 1+4;
    	}
    	else if (sscanf(message, "+%d [%d]", &refine, &card_id) == 2){
    		s_type = 2+4;
    	}
    	else if (sscanf(message, "%d[%d]", &item_id, &card_id) == 2){
    		s_type = 1+2;
    	}
    	else if (sscanf(message, "[%d]", &card_id) == 1){
    		s_type = 2;
    	}
    	else if (sscanf(message, "+%d", &refine) == 1){
    		s_type = 4;
    	}
    	else if (sscanf(message, "%d", &item_id) == 1 && item_id == atoi(message)){
    		s_type = 1;
    	}
    	else if (sscanf(message, "%99[^\n]", item_name) == 1){
    		s_type = 1;
    	if ((item_data = itemdb_searchname(item_name)) == NULL){
    		clif_displaymessage(fd, "Not found item with this name");
    		return -1;
    	}
    		item_id = item_data->nameid;
    	} else {
    		clif_displaymessage(fd, "Use: @whosell <item_id> or @whosell <name>");
    		return -1;
    	}
    
    	//check card
    	if(s_type & 2 && ((item_data = itemdb_exists(card_id)) == NULL || item_data->type != IT_CARD)){
    		clif_displaymessage(fd, "Not found a card with than ID");
    		return -1;
    	}
    	//check item
    	if(s_type & 1 && (item_data = itemdb_exists(item_id)) == NULL){
    		clif_displaymessage(fd, "Not found an item with than ID");
    		return -1;
    	}
    	//check refine
    	if(s_type & 4){
    		if (refine<0 || refine>10){
    			clif_displaymessage(fd, "Refine out of bounds: 0 - 10");
    			return -1;
    		}
    		/*if(item_data->type != IT_WEAPON && item_data->type != IT_ARMOR){
    			clif_displaymessage(fd, "Use refine only with weapon or armor");
    			return -1;
    		}*/
    	}
    	iter = mapit_getallusers();
    	for (pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter)) 
    	{
    	if (pl_sd->vender_id ) {	 // check if player is vending
    		for (j = 0; j < pl_sd->vend_num; j++) {
    			if ((item_data = itemdb_exists(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid)) == NULL)
    				continue;
    			if(s_type & 1 && pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid != item_id)
    				continue;
    			if(s_type & 2 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) ||
    					(pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2] != card_id &&
    					pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3] != card_id)))
    				continue;
    			if(s_type & 4 && ((item_data->type != IT_ARMOR && item_data->type != IT_WEAPON) || pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine != refine))
    				continue;
    			if(item_data->type == IT_ARMOR)
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %d[%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    					,pl_sd->vending[j].value
    					,pl_sd->vending[j].amount
    					,mapindex_id2name(pl_sd->mapindex)
    					,pl_sd->bl.x,pl_sd->bl.y
    					,pl_sd->message);
    			else if(item_data->type == IT_WEAPON)
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "+%d %d[%d,%d,%d,%d] | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].refine
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[0]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[1]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[2]
    					,pl_sd->cart.u.items_cart[pl_sd->vending[j].index].card[3]
    					,pl_sd->vending[j].value
    					,pl_sd->vending[j].amount
    					,mapindex_id2name(pl_sd->mapindex)
    					,pl_sd->bl.x,pl_sd->bl.y
    					,pl_sd->message);
    			else
    				snprintf(atcmd_output, CHAT_SIZE_MAX, "ID %d | Price %ud | Amount %d | %s[%d,%d] | %s",pl_sd->cart.u.items_cart[pl_sd->vending[j].index].nameid
    					,pl_sd->vending[j].value
    					,pl_sd->vending[j].amount
    					,mapindex_id2name(pl_sd->mapindex)
    					,pl_sd->bl.x, pl_sd->bl.y
    					,pl_sd->message);
    			if(pl_sd->vending[j].value < MinPrice) MinPrice = pl_sd->vending[j].value;
    			if(pl_sd->vending[j].value > MaxPrice) MaxPrice = pl_sd->vending[j].value;
    			clif_displaymessage(fd, atcmd_output);
    			count++;
    			flag = 1;
    		}
    			if (flag && pl_sd->mapindex == sd->mapindex) {
    				clif_viewpoint(sd, 1, 1, pl_sd->bl.x, pl_sd->bl.y, ++sat_num, 0xFFFFFF);
    				flag = 0;
    			}
    		}
    	}
    	mapit_free(iter);
    	if(count > 0) {
    		snprintf(atcmd_output, CHAT_SIZE_MAX, "================== Found %d entries. ==================", count, MinPrice, MaxPrice);
    		clif_displaymessage(fd, atcmd_output);
    	} else
    		clif_displaymessage(fd, "Nobody is selling it now.");
    
    	return 0;
    }

     

    how about display the item's name instead of the ID ?

  9. 12 hours ago, ScarrFace said:

    Anyone can help me about my problem? TIA

    Royal Guard Suit and mount working perfectly
    but when it comes to Rune knight and get a mount nothing happen

    check the picture below. 

    3a.png

    1a.png

    2a.png

     

    you need condition for that

    i have Job Costume System on my server but script version not src code

    			if( Class == Job_Knight && checkoption(Option_Dragon1) )
    				setoption Option_Dragon1, 0;
    			if( Class == Job_Rune_Knight && checkriding() )
                			setoption Option_Dragon1, 1;

     

  10. 46 minutes ago, Mabuhay said:

    I think its just an information for debug. If vend_loot / item is 0, it shouldnt open.
    otherwise, you just can comment that part out?

    
    @@ -7153,6 +7153,13 @@ void clif_openvendingreq(struct map_session_data* sd, int num)
     
     	nullpo_retv(sd);
     
    +	// Vending shouldn't open if vend_loot is 0 and extended vending is enabled [Easycore]
    +	// ShowWarning("vend loot = %d\n", sd->vend_loot);
    +	if (battle_config.extended_vending && sd->vend_loot == 0) {
    +		sd->state.prevend = 0;
    +		return;
    +	}

    Not sure tho. Just wait for easycore to reply.

    i check that part but on my offline server i cant get that debug msg but on my online server i get that

    • Love 1
  11. can anyone help to change this script to Max Stats NOT By Level

    Request to Mod this script

    • Max All Stats 300
    • get_unique_id
    • Char Base Rewards
    • 3 Winners For Each Jobs
    •  
    Spoiler
    
    ///////////////////////////////////////////////////////
    //  ___________               _____.__                
    //  \__    ___/__.__.________/ ____\__| ____    ____  
    //    |    | <   |  |\_  __ \   __\|  |/    \  / ___\ 
    //    |    |  \___  | |  | \/|  |  |  |   |  \/ /_/  >
    //    |____|  / ____| |__|   |__|  |__|___|  /\___  / 
    //            \/       Scripts             \//_____/  
    //
    //=====================================================
    // Name: Race to Max Level
    //
    // Description:
    // This NPC allows for Game Masters to set a reward to
    // be given to the first player of each 2nd class that
    // reaches maximum level (base and class).
    //=====================================================
    ///////////////////////////////////////////////////////
    morocc,159,91,5	script	Race to Max Level	58,{
    	set .@gm_level, 99; // GM level required to set the reward
    	set .@maxbase, 99;
    	set .@maxjob, 50;
    	set .@defaultreward, 510;
    	setarray .@rewardablejobs[0], Job_Lord_Knight, Job_High_Priest, Job_High_Wizard, Job_Whitesmith, Job_Sniper, Job_Assassin_Cross, Job_Paladin, Job_Champion, Job_Professor, Job_Stalker, Job_Creator, Job_Clown, Job_Gypsy;
    	
    	Begin:
    	clear;
    	mes "[ ^0099ccRace to Max Level^000000 ]";
    	mes "Hello, " + ((getgmlevel() >= .@gm_level) ? "master! What do you want to do today?" : "are you here for your reward?");
    	switch(select(((getgmlevel() >= .@gm_level) ? "Set Reward:Restart Race" : ":") + ":YES!:...Reward?:Who was rewarded?:Cancel")) {
    		case 1:
    			goto SetReward;
    		case 2:
    			goto RestartRace;
    		case 3:
    			goto GetReward;
    		case 4:
    			goto ExplainRace;
    		case 5:
    			goto ShowRewarded;
    		default:
    			end;
    	}
    	
    	SetReward:
    		clear;
    		mes "[ ^0099ccRace to Max Level^000000 ]";
    		if ($reward == 0)
    			set $reward, .@defaultreward;
    		mes "The reward is " + getitemname($reward) + " (ID: " + $reward + ").";
    		mes "Do you want to change it?";
    		if (select("Yes:No") == 1) {
    			clear;
    			mes "[ ^0099ccRace to Max Level^000000 ]";
    			mes "Please enter the new reward item ID.";
    			input .@rewardid;			
    			clear;
    			mes "[ ^0099ccRace to Max Level^000000 ]";
    			mes "Set " + getitemname(.@rewardid) + " as the reward?";
    			if(select("Yes:No") == 1) {
    				set $reward, .@rewardid;
    			}
    		}
    		goto Begin;
    	
    	RestartRace:
    		clear;
    		mes "[ ^0099ccRace to Max Level^000000 ]";
    		mes "Are you sure you want to restart the race?";
    		if (select("Yes:No") == 1) {
    			for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) {
    				set $rewarded$[.@rewardablejobs[.@i]], "";
    			}
    			announce "The Race to Max Level has begun! Claim a reward once you reach " + .@maxbase + " base and " + .@maxjob + " class!", bc_all;
    		}
    		goto Begin;
    	
    	GetReward:
    		next;
    		mes "[ ^0099ccRace to Max Level^000000 ]";
    		mes "Let's see... " + strcharinfo(0) + ", huh?";
    		
    		set .@competitioner, 0;
    		for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) {
    			if (Class == .@rewardablejobs[.@i]) {
    				set .@competitioner, 1;
    				if (BaseLevel < .@maxbase || JobLevel < .@maxjob) {
    					mes "I'm sorry, but you still need to level a bit more.";
    				} else if ($rewarded$[Class] == strcharinfo(0)) {
    					mes "You have already claimed your reward.";
    				} else if ($rewarded$[Class] != "") {
    					mes "Too late!";
    					mes "The reward for " + jobname(Class) + " was already claimed by " + $rewarded$[Class] + ".";
    				} else goto GiveReward;
    			}
    		}
    		if (.@competitioner == 0)
    			mes "[ ^0099ccRace to Max Level^000000 ]";
    			mes "You need to change your job.";
    		close;
    	
    	GiveReward:
    		set $rewarded$[Class], strcharinfo(0);
    		clear;
    		mes "[ ^0099ccRace to Max Level^000000 ]";
    		mes "Congratulations! You were the first " + jobname(Class) + " to reach " + .@maxbase + " base and " + .@maxjob + " class!";
    		getitem $reward, 1;
    		announce strcharinfo(0) + " (" + jobname(Class) + ") reached Max. Level and received " + getitemname($reward) + "!", bc_all;
    		close;
    	
    	ExplainRace:
    		clear;
    		mes "[ ^0099ccRace to Max Level^000000 ]";
    		mes "Yes! When you reach the maximum level for your class, talk to me and you'll be rewarded with a special item.";
    		next;
    		goto Begin;
    		
    	ShowRewarded:
    		clear;
    		mes "[ ^0099ccRace to Max Level^000000 ]";
    		for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) {
    			mes jobname(.@rewardablejobs[.@i]) + ": " + (($rewarded$[.@rewardablejobs[.@i]] != "") ? $rewarded$[.@rewardablejobs[.@i]] : "^ff0000Nobody^000000");
    		}
    		next;
    		goto Begin;
    }

     

     

  12. 4 minutes ago, Ryo Osaki said:

    I will replace this 

    
    -	script	Basic Weapons	-1,{

    to

     

    
    new_1-1,44,103,5	script	Basic Weapons	100,{
    

    ?

    just duplicate the npc

    prontera,150,150,4	duplicate(Basic Weapons)	Basic Weapons#prt	4_DOG01

     

  13. 1 minute ago, Ryo Osaki said:

    Hi, I want a source edit for Professor casting Guild Emergency Call while walking.

     

    Unit.cpp

    -	if (ud->skilltimer != INVALID_TIMER && ud->skill_id != LG_EXEEDBREAK && (!sd || !pc_checkskill(sd, SA_FREECAST) || skill_get_inf2(ud->skill_id)&INF2_GUILD_SKILL))
    + 	if (ud->skilltimer != INVALID_TIMER && ud->skill_id != LG_EXEEDBREAK && (!sd || !pc_checkskill(sd, SA_FREECAST) ))

     

    • MVP 2
  14. 56 minutes ago, Ryo Osaki said:

    @Moooooon-Aisha how about this?

    image.png.8708fb7df0003866f1be77842b2fda15.png

     

    Status.cpp

     		case SC_PARRYING:
    -		    val2 = 20 + val1*3; // Block Chance
    +			if (sd && sd->weapontype1 == W_1HSWORD)
    +				val2 = val1 * 3;
    +			else
    +				val2 = 20 + val1*3; // Block Chance
     			break;

     

    Skill.cpp

    /*==========================================
     * Does delay reductions based on dex/agi, sc data, item bonuses, ...
     *------------------------------------------*/
    
    	if (sc && sc->data[SC_SPIRIT]) {
    +		if(sc->data[SC_SPIRIT]->val2 == SL_KNIGHT)
    +			time /= 9;
    		switch (skill_id) {
    			case CR_SHIELDBOOMERANG:
    				if (sc->data[SC_SPIRIT]->val2 == SL_CRUSADER)
    					time /= 2;
    				break;
    			case AS_SONICBLOW:
    				if (!map_flag_gvg2(bl->m) && !map_getmapflag(bl->m, MF_BATTLEGROUND) && sc->data[SC_SPIRIT]->val2 == SL_ASSASIN)
    					time /= 2;
    				break;
    		}
    	}

    Spear Boomerang Increase (200*SkillLV)%

    		case KN_SPEARBOOMERANG:
    			skillratio += 50 * skill_lv;
    			if (sd && sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_KNIGHT)
    			skillratio += 200 * skill_lv;
    					break;

     

    • Upvote 1
×
×
  • Create New...