-
Posts
394 -
Joined
-
Last visited
-
Days Won
3
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Shakto
-
Depend on the quest, it's possible but need adaptation in all scripts concerned
-
/*========================================== * @jumptosell - warps to the cheapest shop. * Made by Vengence * Make it work for latest [Shakto] *------------------------------------------*/ ACMD_FUNC(jumptosell) { 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; struct map_session_data* pl_sd; struct map_session_data* pl_sd2; struct s_mapiterator* iter; unsigned int MinPrice = battle_config.vending_max_value, MaxPrice = 0; nullpo_retr(-1, sd); if (!message || !*message) { clif_displaymessage(fd, "Use: @jumptosell (<+refine> )(<item_id>)(<[card_id]>) or @jumptosell <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; std::shared_ptr<item_data> id = item_db.searchname( item_name ); if( id == nullptr ){ clif_displaymessage(fd, "No item found with this name"); return -1; } item_id = id->nameid; } else { clif_displaymessage(fd, "Use: @jumptosell (<+refine> )(<item_id>)(<[card_id]>) or @jumptosell <name>"); return -1; } struct item_data *item_data; //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(pl_sd->vending[j].value < MinPrice){ MinPrice = pl_sd->vending[j].value; pl_sd2 = pl_sd; } count++; } } } mapit_free(iter); if(count > 0) { pc_setpos(sd, pl_sd2->mapindex, pl_sd2->bl.x, pl_sd2->bl.y, CLR_TELEPORT); } else clif_displaymessage(fd, "Nobody is selling it now."); return 0; }
-
Version 1.0.0
4 downloads
Get a discount price of 30% by sending me a private message before buying it. @nolootid command To add an item to the list, use '@nolootid +<item name or ID>'. To remove an item, use '@nolootid -<item name or ID>'. '@nolootid reset' will clear your noloot item list. '@nolootid status' will show you the commands list and current items in your nolootid list.$14.00 -
View File @killcounter - Follow the number of monsters killed Count the number of monsters you killed during a session. You can choose the number of slot that you want to allow to the players (default is 5 slots). It allows you to follow a counter for more than only one monster at the same time. The counter is auto save for your char : that means if a player disconnect and reconnect later, the counter will be restored. @killcounter : activate / disactivate the count @killcounter reset : reset all counter @killcounter reset <position> : reset the counter on the position @killcounter <mobID / mobname> <position> : start to count kill on the chosen position @killcounter status : show the number of monsters killed in all your position Submitter Shakto Submitted 01/24/2022 Category Source Modifications Video Content Author Shakto
-
Version 1.0.0
7 downloads
Get a discount price of 30% by sending me a private message before buying it. Count the number of monsters you killed during a session. You can choose the number of slot that you want to allow to the players (default is 5 slots). It allows you to follow a counter for more than only one monster at the same time. The counter is auto save for your char : that means if a player disconnect and reconnect later, the counter will be restored. @killcounter : activate / disactivate the count @killcounter reset : reset all counter @killcounter reset <position> : reset the counter on the position @killcounter <mobID / mobname> <position> : start to count kill on the chosen position @killcounter status : show the number of monsters killed in all your position$14.00 -
View File @session - Count the experience you win by minute Count the experience (base and job) you win by minute or the total of experience you made during a session of experience. Ex : Session : Enabled. You got 12000 base exp and 9000 job xp for 3 mins. That means you did 4000 base exp / min and 3000 job exp per min. @session : Give the status, total exp, xp per min in the current session @session reset : Reset the counter @session on : Turn on the counter for the current session @session off : Turn off the counter for the current session @session help : Give you details on the command in game You can stop the session for a while and turn it on again without being reset. The counter is being reset on reconnection. Submitter Shakto Submitted 01/16/2022 Category Source Modifications Video Content Author Shakto
-
View File Master Storage - Shared Storage between accounts The master storage allow you to have a shared storage between one and several accounts. It adds a master_id in the login SQL table automatically that allow you to links accounts. It contains verifications to disable any kind of possible dupe items. Submitter Shakto Submitted 01/16/2022 Category Source Modifications Video Content Author Shakto
-
Version 1.0.1
4 downloads
Get a discount price of 30% by sending me a private message before buying it. Count the experience (base and job) you win by minute or the total of experience you made during a session of experience. Ex : Session : Enabled. You got 12000 base exp and 9000 job xp for 3 mins. That means you did 4000 base exp / min and 3000 job exp per min. @session : Give the status, total exp, xp per min in the current session @session reset : Reset the counter @session on : Turn on the counter for the current session @session off : Turn off the counter for the current session @session help : Give you details on the command in game You can stop the session for a while and turn it on again without being reset. The counter is being reset on reconnection.$14.00 -
View File @noress - Prevent for being ressurected if you don't want it A command @noress that give to a player the possibility to accept or deny ressurections. It can be useful in case of griefing behaviors where players are ressurected in a loop to the goal of make him loose percents of xp. Submitter Shakto Submitted 01/16/2022 Category Source Modifications Video Content Author Shakto
-
Version 1.0.1
6 downloads
Get a discount price of 30% by sending me a private message before buying it. A command @noress that give to a player the possibility to accept or deny ressurections. It can be useful in case of griefing behaviors where players are ressurected in a loop to the goal of make him loose percents of xp.$5.00 -
View File Twilight Alchemy 4 - Create blue potion per 200 with a skill This skill allow you to create blue potions per pack of 200. It works like others twilight skills, the alchemist need to be under spirit alchemist buff. The skill can be given by a quest (included) Submitter Shakto Submitted 01/16/2022 Category Source Modifications Video Content Author Shakto
-
Version 1.0.1
3 downloads
Get a discount price of 30% by sending me a private message before buying it. This skill allow you to create blue potions per pack of 200. It works like others twilight skills, the alchemist need to be under spirit alchemist buff. The skill can be given by a quest (included)$7.50 -
Version 1.0.3
7 downloads
Get a discount price of 30% by sending me a private message before buying it. The master storage allow you to have a shared storage between one and several accounts. It adds a master_id in the login SQL table automatically that allow you to links accounts. It contains verifications to disable any kind of possible dupe items.$42.00 -
Block a skill after relog - skill_blockpc_start ?
Shakto replied to Shakto's question in Source Support
Ok i think it should be in the function chrif_skillcooldown_load Added skill_blockpc_start(sd, HLIF_CHANGE, 1200000); before return 0; EDIT : I confirm it's working -
Hello, I want to block a specific skill after relog (mental change). I believe I have to use the skill_blockpc_start function but I can't figure out where the skills are loaded after relog Thanks for help Regards
-
Good job, is there any release possible ?
-
Auto Start RO when Server Accidentally Restart
Shakto replied to BuLaLaKaW's question in Linux Support
Just add in service file those lines StandardOutput=append:/home/user/logs/map-server.log StandardError=append:/home/user/logs/map-server-error.log -
Work great, thank you !
-
I changed WFIFOHEAD(fd,packet_len(0x11c)); WFIFOW(fd,0) = 0x11c; WFIFOW(fd,2) = skill_id; memset(WFIFOP(fd,4), 0x00, 4*MAP_NAME_LENGTH_EXT); if (map1 == (unsigned short)-1) strcpy(WFIFOCP(fd,4), "Random"); else // normal map name if (map1 > 0) mapindex_getmapname_ext(mapindex_id2name(map1), WFIFOCP(fd,4)); if (map2 > 0) mapindex_getmapname_ext(mapindex_id2name(map2), WFIFOCP(fd,20)); if (map3 > 0) mapindex_getmapname_ext(mapindex_id2name(map3), WFIFOCP(fd,36)); if (map4 > 0) mapindex_getmapname_ext(mapindex_id2name(map4), WFIFOCP(fd,52)); WFIFOSET(fd,packet_len(0x11c)); by WFIFOHEAD(fd,packet_len(0xabe)); WFIFOW(fd,0) = 0xabe; WFIFOW(fd,2) = skill_id; memset(WFIFOP(fd,4), 0x00, 4*MAP_NAME_LENGTH_EXT); if (map1 == (unsigned short)-1) strcpy(WFIFOCP(fd,4), "Random"); else // normal map name if (map1 > 0) mapindex_getmapname_ext(mapindex_id2name(map1), WFIFOCP(fd,4)); if (map2 > 0) mapindex_getmapname_ext(mapindex_id2name(map2), WFIFOCP(fd,20)); if (map3 > 0) mapindex_getmapname_ext(mapindex_id2name(map3), WFIFOCP(fd,36)); if (map4 > 0) mapindex_getmapname_ext(mapindex_id2name(map4), WFIFOCP(fd,52)); if (map5 > 0) mapindex_getmapname_ext(mapindex_id2name(map5), WFIFOCP(fd,68)); if (map6 > 0) mapindex_getmapname_ext(mapindex_id2name(map6), WFIFOCP(fd,84)); if (map7 > 0) mapindex_getmapname_ext(mapindex_id2name(map7), WFIFOCP(fd,100)); if (map8 > 0) mapindex_getmapname_ext(mapindex_id2name(map8), WFIFOCP(fd,116)); if (map9 > 0) mapindex_getmapname_ext(mapindex_id2name(map9), WFIFOCP(fd,132)); if (map10 > 0) mapindex_getmapname_ext(mapindex_id2name(map10), WFIFOCP(fd,248)); WFIFOSET(fd,packet_len(0xabe)); but the warp skill doesn't react on the client, no menu open
-
Here you are. Thank you ! 2020-07-15bRagexe_patched.exe Btw i couldn't figure out what to do with : change: 10, 39, 4, 10, 31, 35, 10, 18, 2, 13, 15, 20, 68, 2, 3, 16, to: 10, 39, 4, 10, 31, 35, 10, 18, 2, 13, 15, 20, 164, 2, 3, 16, i couldn't find it in last rev of rathena in cliff.cpp
-
Hello Functor, do you have the modified exe with from version of Artur9211 ? Thank you