Bringer
-
Posts
745 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by Bringer
-
-
-
3 hours ago, sader1992 said:
default on account
if you change
#HourlyRewards += 1; to HourlyRewards += 1;
it would be on char , with the points variable ofc HourlyRewards
sorry i mean the timer not the point
timer will continue even they change char
-
is this hourly reward base or char or account?
like when they change char timer will counting
-
-
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;
- 1
-
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
- Timer Account Base [ if player change Char Timer still continue ]
- Even They logout timer will remain or gettimetick save
-
12 hours ago, nasagnilac said:
Anyone can help me about my issue. I cant recall the autotrade or warp.
https://github.com/rathena/rathena/commit/62271358da41cfc3f6239d73af964ce79b5a909b
-
4 hours ago, Osus said:
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
-
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; }
-
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 mapserverannounce "MVP : Player ["+ strcharinfo(0) +"] has killed "+ getmonsterinfo( killedrid, MOB_NAME ) +" and received an item.", bc_all;
More info about strcharinfoSpoiler* 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.
-
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 ) -
11 hours ago, Slim said:
Dude, this saved me! Is this code yours? I'd like to thank the owner if not. Thank you, again!
from @Secrets
-
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 NamePhoto : Credit to RagnaForce
and i try to use on Extended Vending he detect Z not item like C = Credit
-
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 ?
-
12 hours ago, ScarrFace said:
you need condition for that
i have Job Costume System on my server but script version not src codeif( Class == Job_Knight && checkoption(Option_Dragon1) ) setoption Option_Dragon1, 0; if( Class == Job_Rune_Knight && checkriding() ) setoption Option_Dragon1, 1;
-
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
- 1
-
@Easycore how to fix this problem
-
-
-
10 minutes ago, Moooooon-Aisha said:
So basically you want what stat to get max?
yes all stats From STR > Luk
-
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; }
-
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
-
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) ))
- 2
-
56 minutes ago, Ryo Osaki said:
@Moooooon-Aisha how about this?
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;
- 1
Utility: Freebies NPC with Gepard Function (UniqueID)
in Utility Script Releases
Posted
can you explain how is UniqueID work?