Jump to content

Shakto

Members
  • Posts

    402
  • Joined

  • Last visited

  • Days Won

    3

Shakto last won the day on October 10 2013

Shakto had the most liked content!

About Shakto

  • Birthday 01/15/1990

Profile Information

Contact Methods

Recent Profile Visitors

12669 profile views

Shakto's Achievements

Garling

Garling (8/15)

  • Well Followed Rare
  • Dedicated
  • Reacting Well
  • Conversation Starter
  • First Post

Recent Badges

89

Reputation

9

Community Answers

  1. FYI ; norodex is available on official rathena now : https://github.com/rathena/rathena/pull/6291
  2. Allow players to farm legally xp or drop or both on a map while they are away from computer / game. – Auto heal skill (skill list : Heal, Highness Heal, Potion Pitcher, others can be added on script side) – Auto HP / SP potions use (Configure min HP or SP before using it) – Sit / Regen (Configure min HP or SP before sit, it auto stand to attack if hit) – Auto buff skill (Player can choose between all his support skills, it checked if the player is still under status to rebuff) – Auto attack skill (Player can choose between all his target or ground skills, if ground, the skill is used on ennemie position) – Auto buff item use (item list : Concentration, Awakening, Berserk potions, others can be added on script side, player can choose the delay between each use) – Disallow warp to another map while autoattack running (avoid any issue if used with @afk) – If death, disactivate the auto attack status – Allow player to disable auto melee attack (usefull for job that only want to use skills) – Teleportation configuration (skill and fly wing, ex 1) if no mob meet after x s 2) if low hp)) – Allow player to choose enemies by mob id (+ Allow player to attack or ignore if hit by an aggressive monster not on list) – Allow player to choose item to loot by item id
  3. Services I'm working in IT irl since more than 15 years. Doing some scripts and sources modifications on my free time. I did it first for my server and decided to spare some on them. As it I was sure they was fully working and without bugs for customers. You can find here a list of my work : Anti-bot – Captcha images from server MVP Spawn – Restore MVPs state like it was before server restart @killcounter – Follow the number of monsters killed @nolootid – Prevent dropping chosen items with autoloot @showrare – Show a message when you drop /steal an item under a chosen rate @ltp – Show your last position on minimap before a teleport @session – Experience meter @ping command – Works on windows & linux 1.0.0 Rework of the faction system from Lilith to the last rAthena revision and with some more configurations (Functor Aura, color name and others) Shared zeny between all chars of an account Twilight Alchemy 4 – Create blue potion per 200 with a skill If any of the selling script doesn't work, i'll obviously provide support to help you to install or adapt for your sources.
  4. It's a client side part. Best you can do is changing the button bmp file with all white bmp file so players will not see it.
  5. Change the SQL request then : Number of players online (with shops) SELECT COUNT(*) as online FROM `char` WHERE `online` = 1; Number of players online (without shops) SELECT COUNT(*) as online FROM `char` WHERE `online` = 1 and `char`.`char_id` NOT IN (select vendings.char_id FROM `vendings` INNER JOIN `char` ON `char`.`char_id` = `vendings`.`char_id`) Number of shops online SELECT COUNT(*) as online FROM `char` WHERE `online` = 1 and `char`.`char_id` IN (select vendings.char_id FROM `vendings` INNER JOIN `char` ON `char`.`char_id` = `vendings`.`char_id`)
  6. Check if the packet is in src/map/packets.hpp #if PACKETVER_MAIN_NUM >= 20181212 || PACKETVER_RE_NUM >= 20181212 || PACKETVER_ZERO_NUM >= 20190130 struct PACKET_ZC_USESKILL_ACK { int16 packetType; uint32 srcId; uint32 dstId; uint16 x; uint16 y; uint16 skillId; uint32 element; uint32 delayTime; uint8 disposable; uint32 unknown; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x0b1a); #elif PACKETVER_MAIN_NUM >= 20091124 || PACKETVER_RE_NUM >= 20091124 || defined(PACKETVER_ZERO) struct PACKET_ZC_USESKILL_ACK { int16 packetType; uint32 srcId; uint32 dstId; uint16 x; uint16 y; uint16 skillId; uint32 element; uint32 delayTime; uint8 disposable; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x07fb); #elif PACKETVER_MAIN_NUM >= 20090406 || PACKETVER_SAK_NUM >= 20080618 || PACKETVER_RE_NUM >= 20080827 || defined(PACKETVER_ZERO) struct PACKET_ZC_USESKILL_ACK { int16 packetType; uint32 srcId; uint32 dstId; uint16 x; uint16 y; uint16 skillId; uint32 element; uint32 delayTime; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x013e); #endif
  7. src/map/instance.cpp comment those lines : clif_instance_create(instance_id, instance_wait.id.size()); clif_instance_create(instance_id, i + 1);
  8. Depend on the quest, it's possible but need adaptation in all scripts concerned
  9. /*========================================== * @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; }
  10. 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 ?
  11. 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
  12. Just add in service file those lines StandardOutput=append:/home/user/logs/map-server.log StandardError=append:/home/user/logs/map-server-error.log
×
×
  • Create New...