-
Posts
75 -
Joined
-
Last visited
-
Days Won
1 -
Feedback
0%
astroNOT last won the day on June 5 2021
astroNOT had the most liked content!
About astroNOT

Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
astroNOT's Achievements
-
Great work, thank you! PS use Github code ! Also is the Lv, name really high when u ride the mount for u guys too? [Hidden Content]
-
kacperhwdp started following astroNOT
-
Unforunatelly i do not have this one either, for referrence I m using marty's latest files Will update here if i where to figure it out Thank you tho!
-
That's amazing I got one ask if thats ok I seem to not have ```MarkUnusableInvenSlotOnTopWnd``` Would you mind sharing it with me ? But i assume functionality is greater than just this method so then, is there any system or prerequisite i need to install so that i can u se this ?
-
Great obs, can you share a fix if possible?
-
Hello, what special storage are you using with it, i'd like to buy that too, been looking for it, do u make it or somebody else? Also kudos on sharing this, will add it too, very nice
-
V3 / V4 / RedWood Forest big Map (expanded)
astroNOT replied to likeabeast's topic in Community Support - Questions & Answers
Would be awesome if, after such long time u'd be willing to share the minimaps hahaha -
Take a step back, its ok, its how it is in the beginning, and especially when u copy pasting code that u dont undestand But reality is sometimes u dont have enough time to understand everything One thing that will help you, especially in trial and error is git, learn git, create a new branch from master (a branch that is always stable) and try things like that, the plus side here is you can always rever to master branch which has stable code, you just made a copy pasting mistake most likely so no fuss here, remember to relax and enjoy it, if u enjoy just one file change, thats all you gotta do
-
For marty's files you need to go to s3ll_svfiles/main/gen_settings.py and change value for "ITEM_COUNT_LIMIT" then python admin_console.py gen else it will only stack up to 250
-
Hello, Could anyone help me with a proper quest for blue dragon dungeon? I'm using marty's files for referrence and compatibility, if somebody has a good/stable quest that he'd like to share Thank you in advance!
-
yes, gotta see why data is not applied to db, gonna connect directly to mysql, i suspect navicat is doing some dodgy stuff added logs from bootmanager seems like data read from db is not updated As said in previous comment, for some reason navicat did not apply changes, even tho visually it looked like it, editing driectly from mysql terminal worked fine, thanks!
-
Sort of an update So skilltable was read from client/root But duration is still not properly read from db, when i use a skill, client now quicly makes the skill available again But when i press it to toggle, server is raising cooltime not finished which leads me to beleive server does not take data from db?
-
Hi guys, I can't figure out how to make aos permanent (like sura) for the life of me Steps I did: Skill_proto table (SQL): for skill 4 I've changed szDurationPoly to 99999 and zsCooldownPoly to 0, and setFlag i've added Toggle option In locale/en/skilldesc.txt 4 WARRIOR Aura of the Sword Spiritual Sword Phantom Sword Increases attack value for a period of time. Buff Increases attack value Strengthened by STR STANDING_SKILL|TOGGLE|WEAPON_LIMITATION|IGNORE_BLOCK SWORD|TWO_HANDED geomgyeong 4 4 Attack value: +%.0f (100 + STR) * SkillPoint I've added toggle next to other flags In skilltable I've added toggle, modified duration to 999 and cooldown to 0 4 검경 1 1 1 0 ATT_GRADE (100+str+lv*3)*k 100+200*k 30+50*k 0 SELFONLY,TOGGLE 15 NONE 0 0 NORMAL 1 1 0 0 But in game i still get skills with cd still applied I also rebooted the server It seems i cannot attach a image unfortunatelly In game basically the "toggle" effect is applied but the skill cooldown greyish effect is applied too, and when i click aura again it says: "Cooltime not finished for aura of sword 95"
-
import logging import math import re import shutil from datetime import datetime from termcolor import colored logging.basicConfig(level=logging.INFO, format='%(message)s') logger = logging.getLogger() def replace_group_names(input_file, output_file): with open(input_file, 'r', encoding='utf-8', errors='replace') as file: content = file.read() # Find all group names, including those with Korean characters and any other content group_matches = re.findall(r'Group\t([^\n{]+)', content) # Create a mapping of old names to new generic names name_map = {name.strip(): f'Group_{i + 1}' for i, name in enumerate(group_matches)} # Replace old names with new generic names for old_name, new_name in name_map.items(): content = re.sub(rf'Group\t{re.escape(old_name)}(?=\s*\{{)', f'Group\t{new_name}', content, flags=re.MULTILINE) with open(output_file, 'w', encoding='utf-8') as file: file.write(content) print(f"Processed {len(name_map)} group names.") print(f"Modified content written to {output_file}") def create_backup(file_path): timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") backup_path = f"{file_path}.{timestamp}.bak" shutil.copy2(file_path, backup_path) logger.info(colored(f"Backup created: {backup_path}", "yellow")) def find_groups(content): pattern = r'Group\s+(\S+)\s*\{(.*?)\}' return re.finditer(pattern, content, re.DOTALL) def modify_mob_items(input_file, output_file, action, item_data=None, allow_duplicates=False): with open(input_file, 'r', encoding='utf-8', errors='replace') as file: content = file.read() groups = find_groups(content) remove_all = action == 'remove' and any(m['mob'] == 'all' for item_id in item_data for m in item_data[item_id]) for group_match in groups: group_name = group_match.group(1) group_content = group_match.group(2) lines = group_content.strip().split('\n') header_lines = [line for line in lines if not re.match(r'\s*\d+\s+\d+\s+\d+\s+\d+', line)] item_lines = [line for line in lines if re.match(r'\s*\d+\s+\d+\s+\d+\s+\d+', line)] modified = False if action == 'remove_duplicates': # Create a dictionary to store items with their highest chance item_chances = {} for line in item_lines: parts = line.split() item_id = parts[1] chance = float(parts[3]) quantity = int(parts[2]) if item_id in item_chances: if chance > item_chances[item_id]['chance']: item_chances[item_id] = {'chance': chance, 'quantity': quantity, 'line': line} else: item_chances[item_id] = {'chance': chance, 'quantity': quantity, 'line': line} # Check if we found any duplicates if len(item_chances) < len(item_lines): modified = True # Keep only the items with highest chances item_lines = [item_data['line'] for item_data in item_chances.values()] logger.info(colored( f"Group {group_name}: Removed duplicates, keeping highest chances", "green" )) if action == 'remove': for item_id in item_data: if remove_all or any(m['mob'] == 'all' for m in item_data[item_id]): original_count = len(item_lines) item_lines = [line for line in item_lines if item_id != line.split()[1]] if len(item_lines) < original_count: logger.info(colored(f"Group {group_name}: Removed item {item_id} (all condition)", "green")) modified = True else: mob_match = re.search(r'Mob\s+(\d+)', group_content) if mob_match: mob_id = mob_match.group(1) mob_data = next((m for m in item_data[item_id] if m['mob'] == mob_id), None) if mob_data: original_count = len(item_lines) item_lines = [line for line in item_lines if item_id != line.split()[1]] if len(item_lines) < original_count: logger.info( colored(f"Group {group_name}: Removed item {item_id} from mob {mob_id}", "green")) modified = True elif action == 'add': mob_match = re.search(r'Mob\s+(\d+)', group_content) if mob_match: mob_id = mob_match.group(1) for item_id in item_data: mob_data = next((m for m in item_data[item_id] if m['mob'] == mob_id or m['mob'] == 'all'), None) if mob_data: # Find the maximum chance in the current group max_chance = max(float(line.split()[-1]) for line in item_lines) if item_lines else 400 # Calculate new chance as a percentage of the max chance new_chance = math.ceil((mob_data['chance'] / 100) * max_chance) existing_items = [line for line in item_lines if item_id in line.split()] if existing_items and not allow_duplicates: for existing_item in existing_items: parts = existing_item.split() if mob_data.get('override', True): parts[2] = str(mob_data['quantity']) else: parts[2] = str(int(parts[2]) + mob_data['quantity']) parts[3] = str(new_chance) item_lines = [line if line != existing_item else '\t'.join(parts) for line in item_lines] logger.info(colored( f"Group {group_name}: Updated item {item_id} for mob {mob_id}, new quantity: {parts[2]}, new chance: {new_chance}", "green")) else: new_index = len(item_lines) + 1 new_item = f"\t{new_index}\t{item_id}\t{mob_data['quantity']}\t{new_chance}" item_lines.append(new_item) logger.info(colored( f"Group {group_name}: Added item {item_id} to mob {mob_id} with index {new_index}, chance {new_chance} (target: {mob_data['chance']}% of {max_chance})", "green")) modified = True if modified: # Renumber items item_lines = [ f"\t{i + 1}\t" + '\t'.join(line.split()[1:]) for i, line in enumerate(item_lines) ] # Reconstruct group content new_group_content = '\n'.join(header_lines + item_lines) content = content.replace(group_match.group(0), f"Group\t{group_name}\n{{\n{new_group_content}\n}}") with open(output_file, 'w', encoding='utf-8') as file: file.write(content) logger.info(colored(f"Modified content written to {output_file}", "green")) if __name__ == "__main__": input_file = 'mob_drop_item.txt' output_file = 'mob_drop_item.txt' create_backup(input_file) # Replace Korean group names # replace_group_names(input_file, output_file) # for mob in range(8001, 8010): # item_data_50514 = { # "50514": [{"mob": str(mob), "chance": 110, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50514, 'add') # item_data_50515 = { # "50515": [{"mob": str(mob), "chance": 17, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50515, 'add') # # Loop for mobs 8010 to 8027, adding 50514, 50515, and 50525 separately # for mob in range(8009, 8028): # item_data_50514 = { # "50514": [{"mob": str(mob), "chance": 15, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50514, 'add') # item_data_50515 = { # "50515": [{"mob": str(mob), "chance": 17, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50515, 'add') # item_data_50525 = { # "50525": [{"mob": str(mob), "chance": 90, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50525, 'add') # item_data = { # "50525": [{"mob": str(mob), "chance": 0, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data, 'add') # To remove items from specific mobs # item_data_remove = {"50300": [{"mob": "8007", "chance": 0, "quantity": 0}]} # modify_mob_items(input_file, output_file, item_data_remove, 'remove') # To remove items from all groups # item_data_remove_all = {"50300": [{"mob": "all", "chance": 0, "quantity": 0}]} # modify_mob_items(input_file, output_file, item_data_remove_all, 'remove') # List of items to remove from all mobs items_to_remove = [ 27003, 27005, 27006, 27002, 30022, 30046, 8003, 376, 396, 1226, 2246, 3266, 5216, 6166, 7346, 21326, 21346, 21366, 21386, 21406, 27621, 27622, 27623, 27624, 30000, 30001, 30002, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30029, 30030, 30031, 30032, 30033, 30034, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30061, 30062, 30063, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30091, 30092, 30101, 30102, 30103, 30104, 30105, 30106, 30107, 30108, 30109, 30110, 30111, 30112, 30113, 30114, 30115, 30116, 30117, 30118, 30119, 30120, 30121, 30122, 30123, 30124, 30125, 30126, 30127, 30128, 30129, 30130, 30131, 30132, 30133, 30134, 30135, 30136, 30137, 30138, 30139, 30140, 30141, 30142, 30143, 30144, 30145, 30146, 30147, 30148, 30149, 30150, 30151, 30152, 30153, 30154, 30155, 30156, 30157, 30158, 30159, 30160, 30161, 30162, 30163, 30164, 30165, 30166, 30167, 30168, 30169, 30170, 30171, 30172, 30173, 30174, 30175, 30176, 30177, 30178, 30179, 30180, 30183, 30184, 30185, 30186, 30187, 30188, 30189, 30190, 30191, 30192, 30193, 30194, 30195, 30196, 30197, 30198, 30199, 30203, 30204, 30205, 30210, 30211, 30212, 30213, 30214, 30215, 30216, 30217, 30218, 30219, 30220, 30221, 30222, 30223, 30224, 30225, 30226, 30227, 30228, 30251, 30252, 30253, 30254, 30265, 30266, 30267, 30268, 30269, 30500, 30501, 30502, 30503, 30504, 30505, 30506, 30507, 30508, 30509, 30510, 30511, 30512, 30513, 30514, 30515, 30516, 30517, 30518, 30519, 30520, 30521, 30522, 30523, 30524, 30525, 30526, 30527, 30528, 30529, 30530, 30531, 30532, 30533, 30534, 30535, 30536, 30537, 30538, 30539, 30540, 30541, 30542, 30543, 30544, 30545, 30546, 30547, 30548, 30549, 30550, 30551, 30552, 30553, 30554, 30555, 30556, 30557, 30558, 30559, 30560, 30561, 30562, 30563, 30564, 30565, 30566, 30567, 30568, 30569, 30570, 30571, 30572, 30573, 30574, 30575, 30576, 30577, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30585, 30586, 30600, 30601, 30602, 30603, 30604, 30605, 30606, 30607, 30608, 30609, 30610, 30611, 30612, 30613, 30614, 30615, 30616, 30617, 30618, 30619, 30620, 30621, 30622, 30623, 30624, 30625, 30626, 30627, 30628, 30629, 30630, 30639, 30640, 30641, 30642, 30643, 30644, 30645, 30646, 30647, 30648, 30649, 30650, 30651, 30652, 30653, 30654, 30655, 30656, 30657, 30658, 30659, 30660, 30661, 30662, 30663, 30664, 30666, 30667, 30668, 31001, 31002, 31003, 31004, 31006, 31007, 31009, 31010, 31011, 31012, 31013, 31014, 31015, 31016, 31017, 31018, 31019, 31020, 31021, 31022, 31023, 31024, 31025, 31026, 31027, 31028, 31029, 31030, 31031, 31033, 31034, 31035, 31036, 31037, 31038, 31039, 31040, 31041, 31042, 31043, 31044, 31045, 31046, 31047, 31048, 31049, 31050, 31051, 31052, 31053, 31054, 31055, 31056, 31057, 31058, 31059, 31060, 31061, 31062, 31063, 31064, 31065, 31066, 31067, 31068, 31069, 31070, 31071, 31072, 31074, 31075, 31076, 31077, 31079, 31080, 31081, 31082, 31083, 31084, 31085, 31086, 31087, 31088, 31089, 31090, 31092, 31093, 31094, 31095, 31101, 31102, 31103, 31108, 31109, 31110, 31111, 31112, 31113, 31114, 31115, 31117, 31118, 31120, 31121, 31122, 31123, 31124, 31125, 31126, 31127, 31128, 31129, 31130, 31131, 31132, 31133, 31134, 31135, 31136, 31137, 31138, 31145, 31146, 31147, 31149, 31160, 31161, 31180, 31181, 31196, 31197, 31198, 31199, 31200, 31201, 31202, 31203, 31204, 31205, 31206, 31207, 31208, 31209, 31210, 31211, 31212, 31213, 33029, 33030, 33031, 35000, 35001, 39070, 39071, 39072, 39073, 39074, 39075, 39076, 39077, 39078, 39079, 39080, 39085, 39086, 39087, 39088, 39089, 39090, 39091, 39092, 39093, 39094, 39095, 39096, 39097, 39098, 39099, 39100, 39101, 39102, 39103, 39104, 39105, 39106, 39107, 39108, 39110, 39111, 39112, 39117, 50116, 50701, 50702, 50703, 50704, 50705, 50706, 50707, 50708, 50709, 50710, 50711, 50712, 50721, 50722, 50723, 50724, 50725, 50726, 50727, 50728, 50729, 50730, 50731, 50732, 50733, 50734, 50735, 50736, 50737, 50738, 50739, 50740, 50741, 50926, 55003, 55004, 55005, 55006, 55007, 56013, 71095, 71122, 71123, 71129, 71130, 71201, 72342, 76029, 100300, 100400, 100500, 100700, 100701, 30022, 27002, 27003, 27004, 27005, 27006, 27007, 8001, 8002, 8003, 8004, 8005, 30046, 30045, ] # modify_mob_items(input_file, output_file, action='remove_duplicates') # items_to_remove = [50006, 50007, 50008, 50009, 30022, 27100, 27101, 27103, 27104, 27110, 2711] # # # Create the item_wdata_remove_all dictionary # item_data_remove_all = {str(item): [{"mob": "all", "chance": 0, "quantity": 0}] for item in items_to_remove} # # Call the modify_mob_items function # modify_mob_items(input_file, output_file, item_data_remove_all, 'remove') # for mob in range(8019, 8028): # item_data_50514 = { # "27992": [{"mob": str(mob), "chance": 55, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50514, 'add') # item_data_50514 = { # "27993": [{"mob": str(mob), "chance": 55, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50514, 'add') # item_data_50514 = { # "27994": [{"mob": str(mob), "chance": 55, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50514, 'add') # 2191 turtle # 1304 tiger # 1901 fox # 6431 Chief Orc # 1091 Demon King # 1092 Proud Demon King # 1093 Death Reaper # 2091 Queen Spider # 6433 Mighty Ice Witch # 6434 General Huashin bosses = [2191, 1304, 1901, 1091, 6431, 1092, 1093, 2091, 6433, 6434] bosses = [2191] for mob in bosses: item_data_50514 = { "27992": [{"mob": str(mob), "chance": 55, "quantity": 1}] } modify_mob_items(output_file, output_file, item_data_50514, 'add') # item_data_50514 = { # "27993": [{"mob": str(mob), "chance": 55, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50514, 'add') # item_data_50514 = { # "27994": [{"mob": str(mob), "chance": 55, "quantity": 1}] # } # modify_mob_items(output_file, output_file, item_data_50514, 'add') UPDATE: Now removes group if empty after removing all items from it Also it can be sefely used directly on bsd, in case japanese char appears just deal with them individually, had one item randomly have a japanese name, did not investigate tho Update2: Removes duplicates (all of them), for eg same item 2 dropchances New logic for chance calculation: Goes infinite so u can add 200% chance for eg 100% chance is determined by max drop chance present in a group For eg: item 1 20 item 2 30 100% drop is 30 And based on that 30 the desired percentage is determined, thus 200% means 60 Will proly add a 400 cap (max drop is 400) but not atm
-
- 4
-
-
