* Changed skill_db array to better memory allocation.
* Reduced MAX_SKILL_LEVEL from 100 to 10 (part of Hercules 0f4a50d135), also has changes on skill_get checks for skill level that more than 10.
* Reduced MAX_SKILL from 5020 to 1200 (actually only 1109 skills are used).
* Added macros for checking Homunculus, Guild, Mercenary, & Elemental skill ranges.
* Added skill check & index validation when player logged in and when @reloadskilldb.
* Corrected `enum e_skill_flag` order for SKILL_FLAG_REPLACED_LV_0's sake.
* Merged 'addtoskill' script command just as alias of 'skill' script command.
* Fixed#277
* Changed 'skill' script command flag to constant value
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
NOTE:
* Decreased memory usage by map-server reduced up to 50 MB.
* Decreased memory for each player because of mmo_charstatus::skill[] only has 1200 array, before is 5020.
* Please use skill_get_index() for accessing sd->status.skill[] or skill_db[], don't reckless use skill_id as array index.
* Please import upgrade_20150211_skillset.sql
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Changed skill_db array to better memory allocation.
* Reduced MAX_SKILL_LEVEL from 100 to 10 (part of Hercules 0f4a50d135), also has changes on skill_get checks for skill level that more than 10.
* Reduced MAX_SKILL from 5020 to 1200 (actually only 1109 skills are used).
* Added macros for checking Homunculus, Guild, Mercenary, & Elemental skill ranges.
* Added skill check & index validation when player logged in and when @reloadskilldb.
* Corrected `enum e_skill_flag` order for SKILL_FLAG_REPLACED_LV_0's sake.
* Merged 'addtoskill' script command just as alias of 'skill' script command.
Summary:
* Decreased memory usage by map-server reduced up to 50 MB.
* Decreased memory for each player because of mmo_charstatus::skill[] only has 1200 array, before is 5020.
* Please use skill_get_index() for accessing sd->status.skill[] or skill_db[], don't reckless use skill_id as array index.
NOTE:
* Please import upgrade_20150131_skillset.sql
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Changed Guild/Party Bound Item Retrieval Methods:
- Fixes bugreport:9338
- Now resend the list to map-server from char/inter-server to avoid "weird" item allocation on guild storage. Example, previously you will meet stacked item like GUID does, but it shouldn't!
- Also will check the maximum amount that can be store in guild store. If guild storage is full (the slots or item stack limit is reach) the rest value/item will be dropped.
- Account of kicked guild member won't be kicked from server any more if the player idle on character select window (just prevents player to login when retrieving items are in progress)
- Delete guild bound items from guild master when guild is disbanded! Previously, the bound type just changed to NONE. Also for party bound item.
- If kicked guild/party member is trading bound item when be kicked, the trade will be cancelled!
- If the guild member is being kicked when open guild storage, storage will be closed first waiting for next item retrieval.
- Now when guild storage is opened, storage_status (changed the var to 'opened') will be used to hold char_id who opens it.
* Misc:
- Cleanup guild storage prefix functions, changed them to "gstorage_*"
- Added picklog type 'B' for logging deleted bound item because of kicked from guild/party.
- Updated documentation for new used packet 0x3857
* Missing `item_ratio->nameid = nameid;` assignment when item_ratio isn't exist in db yet
* Modified @whodrops result for monster list to: "- <monster name> (<mob_id>): <rate>%"
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Bug Fixes bug:9338
* Now resend the list to map-server from char/inter-server to avoid "weird" item allocation on guild storage. Example, previously you will meet stacked item like GUID does, but it shouldn't!
* Also will check the maximum amount that can be store in guild store. If guild storage is full (the slots or item stack limit is reach) the rest value/item will be dropped.
* Account of kicked guild member won't be kicked from server anymore if the player idle on character select window (just prevents player to login when retriving items are in progress)
* Delete guild bound items from guild master when guild is disbanded! Previously, the bound type just changed to NONE. Also for party bound item.
* If kicked guild/party member is trading bound item when be kicked, the trade will be canceled!
* If the guild member is being kicked when open guild storage, storage will be closed first waiting for next item retrieval.
* Now when guild storage is opened, storage_status (changed the var to 'opened') will be used to hold char_id who opens it.
Misc:
* Cleanup guild storage prefix functions, changed them to "gstorage_*"
* Added `picklog` type 'B' for logging deleted bound item because of kicked from guild/party.
* Updated documentation for new used packet 0x3857
NOTE: Please import upgrade-20150103_log.sql
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* re-Disabled the ADJUST_SKILL_DAMAGE by default (core.h) that enabled by accident since 794c1a8. :P
* Removed MAX_MAP_SKILL_MODIFIER variable.
* Removed fixed array for skill damage adjustment in each map.
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
Align account_id and char_id to uint32 as this is the value they can be
in DB.
Remove src/test folder, unused
Remove useless #include to speedup compilation.
* Typo "status" should be "equip" at 267d521
* Follow up 3428ae2, use the 'parent' command name -atcommand_checkalias()- to compare the command, so it won't breaks alias recognition
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Changed wrong flag value, 6 -> 4
* Added UID check in pc_cart_additem()
* Generate GUID moved to pc_additem() for item with flag.guid
* Added card comparison in 'mergeitem' to avoid merge CARD0_* items with non-CARD0_*
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Enabled by default to take effect of `guid` function.
* When it's disabled, `guid` function will be ignored as suggestion to disable this 'weird. official feature.
* NOTE: If this feature is disabled "in the middle" of your game, the separated is still separated in inventory, storage, or guild storage until player move the item to/from storage/inventory to restack them.
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* GUID
- `guid` field in official PackageItem.lua supposed to make item will be separated even item is stackable item.
- Currently `guid` usage is using item Unique ID that generated when item with GUID flag is appear from package.
- Some item containers in official PackageItem.lua are also separated, not stacked when player obtain it. Example when using atcommand "@item Xmas_Bless". For current implementation, the items are flagged in item_flag.txt (db folder) with flag 4.
- `isNamed` field in item group is replaced by `GUID` and move the `isNamed` as new additional field. See doc/item_group.txt or db/re/item_package.txt.
* NPC:
- Enabled npc/re/other/item_merge.txt and it's now usable.
* Script Command:
- Added `mergeitem` to merge separated items in player's inventory. See doc/script_commands.txt.
* Misc:
- Changed how to broadcast the item that obtained from package with flag `isAnnounced` to intif_broadcast, so it will be announced to all connected map-servers.
- Added some items that flagged as 'item group container' in db/re/item_flag.txt
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Now inter-server always asking to login-server for account info instead using direct query to `login` table. Merged from HerculesWS/Hercules@da233d5
* Inter-server packet usage: HA 0x2720 & AH 0x2721
* Additional changes from inter-server to map-server to parse the account info result with type 1 by using packet 0x3808 for clif_account_name(). Just some changes from @lighta at his old diff
* Moved some messages to char_msg.conf
* Updated inter-server packet documentation
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
- Reverted all the icewall-related changes done in SVN r15777 and following as testing shows they aren't official and are actually pretty exploitable (bugreport:7412)
- Instead implemented the official icewall characteristic that monsters can only leave an icewall cell to the west or south, the changes include:
* The "sight" path check no longer checks for the current cell so standing on an icewall allows you to see/attack into any direction
* The path finding will still ignore the current cell as before but the walk routine will not allow to walk east or north while standing on an icewall cell
* This leads monsters in the situation where they go through an AI loop not allowing them to escape the icewall (if their target is north or east of them)
* Monster in this situation will use idle skills and if they get attacked will use their rudeattacked skills if available, similar to traps like Spiderweb
* Added a configuration icewall_walk_block that allows to configure how long a monster should go through the AI loop before the server allows it any movement, this "safety" system is official and seems to equal about 75 AI loops; if you want to disable the whole icewall system so that monsters don't get stuck in icewall at all, just set this to 0
* Here are videos from jRO showing how this system works: http://ragdo.blog56.fc2.com/blog-entry-763.html
- Implemented the official calculation for "direction"; now you will be considered horizontal/vertical/diagonally aligned with a target cell in the exact same way as on official servers, this is for example used to determine whether an icewall or a firewall should be horizontal, vertical or diagonal; the only thing that is still unofficial is the default direction (officially always "west"); effectively now there are more situations considered diagonal than before
- Fixed a compiler warning (converting double to float)
- Further cleanups on the idle skill use code for immobile monsters and monsters near a player but without a target (now skill using will always go via mob_unlocktarget)
* This also fixes that monsters switched to idle mode and start to use idle skills one second too late
- Added a new configuration setting "item_drop_mvp_mode"
* By default "item_drop_mvp_mode" is set to official order (0) which is always starting at first, then going to the second if the first didn't drop and only checking the third if the second didn't drop either
* @mobinfo will now properly consider this and display the effective chance, so if the MVP has 3 MVP item drops at 50%, the first item will display the chance 50%, the second 25% and the third 12.5%, this should help a lot against drop rate confusion (e.g. players wondering why always only the first item drops when all three are displayed at 100%); this only applies to official order (0)
* When "item_drop_mvp_mode" is set to random order (1), MVP item drops are checked in random order, but if one MVP item drops, the process will be canceled, so you will never get more than one MVP item no matter how high the drop rate is
* When "item_drop_mvp_mode" is set to all items (2), all MVP item drops are checked and have a chance to drop, regardless of other MVP items already being dropped or not (i.e. there is a chance that the player gets all 3 MVP items)
* Wizard/Warlock Skill
* Moved Sightrasher (WZ_SIGHTRASHER) requirement to check Sight (SC_SIGHT) is active or not to skill_check_condition_castend section.
* Fixed Sightrasher (WZ_SIGHTRASHER) splash area to 3x3. (bugreport:9298)
* Now Comet (WL_COMET) cannot hits Hiding target (The mistake is not at flag 0x10000 in skill_db.txt, the flash should be added by SD_ANIMATION). (bugreport:8909).
* Now Reading Spell Book (WL_READING_SB) checking the number of available spell books in Spell Book DB first to prevent infinite loop.
* Sage Skill
* Now Abracadabra (SA_ABRACADABRA) checking the number of available skills in Abra DB first to prevent infinite loop.
* Reduced MAX_SKILL_ABRA_DB from 350 to 160.
* Shadow Chaser Skill
* Fixed Chaos Panic (SC_CHAOSPANIC) effect. (bugreport:9321).
* Genetic Skill
* Now Wall of Thorn (GN_WALLOFTHORN) can be knocked back but not a whole skill group and durability (HP & max hit) for each skill unit.
* Guillotine Cross Skill
* Now Magic Mushroom (SC_MAGICMUSHROOM) effect checks the number of available skills in Magic Mushroom DB first to prevent infinite loop.
* Changed 'RemoveFlag' in db/magicmushroom_db.txt value to 1 to remove skill by importing. (bugreport:9322).
* Wanderer/Minstrel Skill
* Now Randomize Spell (WM_RANDOMIZESPELL) checks the number of available skills in Improvise DB first to prevent infinite loop.
* Reduced MAX_SKILL_IMPROVISE_DB from 50 to 30.
* Rebellion Skill
* Cleaned up, added, corrected some (missing) sequences & DB values.
* Fixed Hammer of God (RL_HAMMER_OF_GOD) splash damage.
* Fixed Shaterred Strom (RL_S_STORM) push back & force to sit effect (for player, or stun for monsters) (first implementation leftover).
* Fixed Slug Shot (RL_SLUGSHOT) hitrate-distance penalty (first implementation leftover).
* Fixed Howling Mine (RL_H_MINE) damage ratios (first implementation leftover).
* Now Bind Trap (RL_B_TRAP) only can be placed 1 at same time.
* Fixed Bind Trap (RL_B_TRAP) damage calculation by using Caster's DEX, Target's Current HP, & Skill Level. FIXME: Exact formula still unknown (refers to idAthena formula).
* Now Dragon Tail (RL_D_TAIL) doesn't split damage among targets anymore.
* Now Crimson Marker (RL_C_MARKER) will fails to cast if no slot available.
* Implemented official packet `ZC_C_MARKERINFO` of Crimson Marker (RL_C_MARKER) mini-map marker (first implementation leftover). !TODO: Confirm the packet for older or newer clients (idAthena partial merge r1497)
* References: http://forums.irowiki.org/showpost.php?p=1387992&postcount=968, follow up 507f047, dd67f9d
Misc:
* Fixed some skills that should work only in shoot range (map_foreachinshootange, by default), and added check for respecting *skill_wall_check* (map_foreachinrange).
* Fixed item stackable check for `/item` command, follow up 9b4d922.
* Fixed npc source file isn't removed properly by @unloadnpcfile. (bugreport:9311).
* Added constantan for status_change_start() and sc_start() scripts as well
* SCSTART_NONE = 0x0
* SCSTART_NOAVOID = 0x1
* SCSTART_NOTICKDEF = 0x2
* SCSTART_LOADED = 0x4
* SCSTART_NORATEDEF = 0x8
* SCSTART_NOICON = 0x10
* Moved and changed itemdb_unique_id() to pc_generate_unique_id().
* Seperated check for skill SC requirement to skill_check_condition_sc_required().
* Added skill unit flag `UF_KNOCKBACK_GROUP`, just an option to make skill unit can be knocked back a whole group.
* Typos and other minor changes!
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
- Changed enum for NPC subtype, added prefix NPCTYPE_. See map.h::npc_subtype.
- Changed Channel_Config struct usage to -> extern struct Channel_Config channel_config.
- Added restriction for atcommand that cannot be executed when Player is in autotrade, to prevent map crash. (bugreport:9196) TODO: Check other atcommand or change this behavior.
- Added enum for atcommand restriction with prefix ATCMD_NO. See atcommand.c::e_atcmd_restict.
- Updated atcommand documentations.
- Changed dummy_sd's attributes to group_id & group_level 99, and gives all permissions (PC_PERM_ALLPERMISSION). dummy_sd is being used by 'atcommand' or 'useatcmd' script when no rid/player attached.
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
- Follow up 7fd6776, correcting how to make player sit by autotrade persistance.
- Follow up 7fd6776, pc_setstand() does a check if player can stand or not.
- bugreport:9174, buyingstore_close() doesn't clear buyingstores data on table.
- Fixed "missing" buyingstore search (purchase type search) in searchstore, by adding DBMap *buyingstore_db.
- Added nullpo checks on some buyingstore.c functions.
- Added do_init_buyingstore() and do_final_buyingstore().
- Failing autotrader from pc_setpos(). (Since autotrade doesn't have 'fd'? FIXME later)
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Fixed the stun effect from Berkana Rune. (bugreport:9057)
* Adjusted Thorn Wall to be a placeable skill and to ignore caster's % damage cards.
* Field Manuals (SC_EXPBOOST and SC_JEXPBOOST) now increase EXP gained from NPC quests (through the getexp script command). (bugreport:9091)
* Lif's Mental Change no longer fully restores her HP and SP upon activation.
* Fixed fakename atcommand not working while disguised. (bugreport:8896) (Hercules 1e492e3)
* Fixed speed atcommand resetting when swapping equipment/changing maps. (bugreport:8915) (Hercules 37fdcba)
* Cleaned up some compile warnings.
- Changed Monster, Mercenary, & Elemental defense element check, from %10 to %20, to support 10 custom elements. Thank @Atemo
- Updated some arrays in ACMD_FUNC(mobinfo)
- Removed element number limit for each level in db/[pre-]re/attr_fix.txt
- Allowing 'getitembound' and 'getitembound2' to put bound type 0 (no bound) for scripting easier
- Updated doc/mob_db.txt, follow up ca4a0ea
- Updated map_msg_idn.conf
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Follow up 171e2f2, added battle config 'at_monsterignore' at conf/battle/misc.conf to makes autotrader cannot be attacked. Thank @Lemongrass3110
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
- Failure when initializing autotrade persitance for PACKETVER < 20120201 or NEW_CARTS, ENABLE_SC_SAVING aren't defined
- Added 'feature.autotrade_open_delay' config at conf/battle/feature.conf to give delay to open vending/buyingstore by autotrade persistency (bugreport:9077)
- Add immediate save after vending/buyingstore opened to avoid missing sc_data (for SC_PUSH_CART) when server terminated before saving routine (bugreport:9077)
- Disable to trigger NPCE_LOGIN (and NPCE_LOADMAP?) for autotraders, avoid vending_reopen & buyingstore_reopen failure (bugreport:9077)
- Set player's state, 'monster_ignore' when autotrade
- EXP calculation overload (bugreport:9127)
- Added macro apply_rate(val,rate) & apply_rate2(val,rate,per)
Thank you all for reports & helps
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Fixed Concentration ending when Frenzy is used. (bugreport:8942)
* Fixed Hells Plant hitting Ghost element enemies. (bugreport:8799)
* Forced guild notice changes to save immediately. (bugreport:8961)
* Fixed Cart Tornado damage formula. (bugreport:9065)
* Adjust Amistr's Castling to now switch to any target type. Still needs skill switching support. (bugreport:1784)
* Removed hard coded 1 second skill duration reduction for Spore Explosion.
* Fixed the party window not displaying the correct map name when in an instance. (bugreport:7949)
* Fixed hatching a pet causing client disconnections. (bugreport:9059) (Hercules 533ff4f)
* Updated Kagerou/Oboro skill cast times. (bugreport:9035)
* Removed deprecated negative nameid value for getitem/getitem2.
* Renamed incuvate to incubate throughout source and SQL.
* Added skill ID to the error display for battle_calc_attack to help resolve issues. (bugreport:8876)
* Cleaned and corrected some Sorcerer Elemental skills. (bugreport:9058)
* Cleaned up some more compile warnings.
-- Pin code issue after char_refac (bugreport:9027)
-- Delete date issue after char_refac (bugreport:9029)
-- Stuck when drag item from/to inventory/cart/storage if the item cannot be moved. (bugreport:8935)
Command:
-- Added @cloneequip to clone other's equipments.
-- Added @clonestat to clone other's statuses.
-- Thank Antares for the suggestion, http://rathena.org/board/topic/95076-new-atcommands-suggestion/
Permission:
-- Added 'bypass_stat_onclone' to make user who use @clonestat can bypass stat limit.
-- Change 'atcommand_enable_npc' to 'command_enable' permission to enable use command while talking with NPC. Suggested by @aleos long time ago.
Misc:
-- Correcting some checks for bAddEff bonuses.
-- Moved status point calculaiton formula to PC_STATUS_POINT_COST, removing redundancy in pc_need_status_point and pc_maxparameterincrease.
-- Added pc_is_same_equip_index function to move all item index checks, removing redundancy in some cases.
-- Some random in-source documentations.
-- Updated map_msg_idn.conf.
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
- Increased limit from 32,767 to 65,535.
- Still uses same amount of memory with doubled usable size.
- Adjusted CARD0_PET from -256 to 256.
- Please run both SQL files after applying this update to avoid values becoming corrupt.
- Tested and works on clients 2012-04-10 and up thanks to Cydh.
- Removed an unused SQL file.
-- Compiling errors when VIP_ENABLE (bugreport:9013)
-- Taekwon skills leftover when player was in Taekwon Ranker then changes to other job (bugreport:8973)
-- Follow up f511107.Fixed parentheses statement.
-- Follow up 6afcdeb. Updated check for char table.
-- Follow up 794c1a8. Wrong SC constanta order.
* Battle Config Updates
-- 'transcendent_status_points', stat point bonus for trans classes.
-- 'revive_onwarp', disable/enable to revive a dead player when set new position (warping).
-- 'taekwon_ranker_min_lv', minimum level bonus of Taekwon Ranker.
-- 'fame_taekwon_mission', fame point gained when complete Taekwon Mission.
-- 'fame_refine_lv1', fame point when success to refine to +10 forged weapon level 1.
-- 'fame_refine_lv2', fame point when success to refine to +10 forged weapon level 2.
-- 'fame_refine_lv3', fame point when success to refine to +10 forged weapon level 3.
-- 'fame_forge', fame point when success to forge level 3 weapon with 3 additional ingredients.
-- 'fame_pharmacy_3', fame point when success do pharmacy 3 times in a row.
-- 'fame_pharmacy_5', fame point when success do pharmacy 5 times in a row.
-- 'fame_pharmacy_7', fame point when success do pharmacy 7 times in a row.
-- 'fame_pharmacy_10', fame point when success do pharmacy 8 times in a row.
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
-- Map crashed because empty item_combo script (bugreport:8959)
-- Wrong MATK calculation of Distort Crescent/Zangetsu effect (SC_ZANGETSU) (bugreport:8998)
-- Wrong damage reduction of Sera's Pain Killer effect (SC_PAIN_KILLER) (bugreport:8994)
-- Fixed Shape Shift (NC_SHAPESHIFT) wrong requirement (bugreport:9002)
-- @itembound, getitembound usage. Not, now allowed for unspecified bound_type (thank Ceejay Abne! http://rathena.org/board/index.php?showtopic=94726)
-- Change check behavior for skill requirement level-dependent check.
-- Removed NC_REPAIR hardcoded requirement.
-- Moved the required equipped item to 'RequiredEquipment' on skill_require_db.txt.
-- Missing "Option_Ruwach" as contantan.
-- Corrected Chasewalk STR bonus, it's SC_CHASEWALK2, different with SC_INCSTR.
-- Corrected some Rebellion skill's effects.
-- USESKILL_FAIL_MADOGEAR message for failed skill that needs player has Madogear.
-- Changed skill name and description length to 31 chars.
-- Some documentation updates.
-- Follow up 0f2dd7f. (Well, using empty password in import file, won't works, if you want, empty the original conf file. Fix this later, related on 'sscanf' for those files)
-- Follow up 28c90bb, thank @julia40124009
-- Misc. :P
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
* Added missing feature flag for the Auction System. (bugreport:8980) (Hercules 646f7e2)
* Some more clean ups to skills that have a sliding effect. Thanks to exneval.
* Adjusted Flash Combo damage for renewal.
* Moved Explosion Spirits timer and added extra check to avoid map server crashes.
- Revert MAP_MAX_MSG to 1500
- Moved some messages to empty spaces
- Added warning message if msg_number is invalid when msg_conf files are being read
- And minor stuffs
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
Move skill_get_cooldown_ into pc_get_skillcooldown
and add a short src_doc description to promote his usage
(and avoid duplicate code)
Fix few cppcheck issues (variable scope optimisation mostly)
* Fixed wrong bonus for Max HP (bugreport:8679)
* HP/SP respawn (restart_hp_rate and restart_sp_rate) should be work now (bugreport:8642)
* Fixed MVP drop that failed to make random order (bugreport:8665)
Signed-off-by: Cydh Ramdh <house.bad@gmail.com>