Jump to content

Playtester

Developer
  • Posts

    765
  • Joined

  • Last visited

  • Days Won

    19

Posts posted by Playtester

  1. Hmm, maybe try a vanilla rAthena without modifications first. Your first goal should be to have no warnings at map-server start. Check if everything is working then.

    If you want to to add episode 17 stuff, just do it one-by-one and check if it still works. That way you can find out what change breaks the equipment system.

  2. What even is a "correct" formula when you customize max level and stats?

    You could just put any required exp values you think look cool and are balanced if you want. Gravity didn't do it much differently in the old days.

  3. The way I'd go about it is use the existing Cooldown functionality. The Cooldown is stored per skill, but you could just make Skill B and Skill C also store their cooldown as "Skill A".

    And then just block Skill B and Skill C when there's a Cooldown for "Skill A".

    All the code you need would be in skill.cpp.

    You could for example take a look at WL_RELEASE because that actually fetches the Cooldown from another skill (the preserved skill) and applies it.

    • MVP 1
  4. You will need to edit the source code. Open skill.cpp and search for SC_COMBO, then you find all parts with combo checks.

    For example:

    		case MO_CHAINCOMBO:
    			if(!sc)
    				return false;
    			if(sc->data[SC_BLADESTOP])
    				break;
    			if(sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == MO_TRIPLEATTACK)
    				break;
    			return false;

    This says you can use MO_CHAINCOMBO only if you have the status change SC_BLADESTOP or when you are in combo state (SC_COMBO) and the last skill was MO_TRIPLEATTACK.

    ("break;" here basically means it works, if you return false, it's blocked.)

  5. This is already working in current rAthena master.

    It's defined via status.yml now:

      - Status: Reflectshield
        Icon: EFST_REFLECTSHIELD
        DurationLookup: CR_REFLECTSHIELD
        Flags:
          NoClearance: true
          RequireShield: true
        End:
          Reflectdamage: true

     

  6. On 4/4/2022 at 7:38 AM, cook1e said:

    Here is an example.

    db/item_db.yml
     

    # This file is a part of rAthena.
    #   Copyright(C) 2021 rAthena Development Team
    #   https://rathena.org - https://github.com/rathena
    #
    # This program is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program. If not, see <http://www.gnu.org/licenses/>.
    #
    ###########################################################################
    # Item Database
    ###########################################################################
    #
    # Item Settings
    #
    ###########################################################################
    # - Id                      Item ID.
    #   AegisName               Server name to reference the item in scripts and lookups, should use no spaces.
    #   Name                    Name in English for displaying as output.
    #   Type                    Item type. (Default: Etc)
    #   SubType                 Weapon or Ammo type. (Default: 0)
    #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
    #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)
    #   Weight                  Item weight. Each 10 is 1 weight. (Default: 0)
    #   Attack                  Weapon's attack. (Default: 0)
    #   MagicAttack             Weapon's magic attack. (Default: 0)
    #   Defense                 Armor's defense. (Default: 0)
    #   Range                   Weapon's attack range. (Default: 0)
    #   Slots                   Available slots in item. (Default: 0)
    #   Jobs                    Jobs that can equip the item. (Map default is 'All: true')
    #   Classes                 Upper class types that can equip the item. (Map default is 'All: true')
    #   Gender                  Gender that can equip the item. (Default: Both)
    #   Locations               Equipment's placement. (Default: None)
    #   WeaponLevel             Weapon level. (Default: 0)
    #   EquipLevelMin           Minimum required level to equip. (Default: 0)
    #   EquipLevelMax           Maximum level that can equip. (Default: 0)
    #   Refineable              If the item can be refined. (Default: false)
    #   View                    View sprite of an item. (Default: 0)
    #   AliasName               Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
    #   Flags:                  Item flags. (Default: null)
    #     BuyingStore           If the item is available for Buyingstores. (Default: false)
    #     DeadBranch            If the item is a Dead Branch. (Default: false)
    #     Container             If the item is part of a container. (Default: false)
    #     UniqueId              If the item is a unique stack. (Default: false)
    #     BindOnEquip           If the item is bound to the character upon equipping. (Default: false)
    #     DropAnnounce          If the item has a special announcement to self on drop. (Default: false)
    #     NoConsume             If the item is consumed on use. (Default: false)
    #     DropEffect            If the item has a special effect on the ground when dropped by a monster. (Default: None)
    #   Delay:                  Item use delay. (Default: null)
    #     Duration              Duration of delay in seconds.
    #     Status                Status Change used to track delay. (Default: None)
    #   Stack:                  Item stack amount. (Default: null)
    #     Amount                Maximum amount that can be stacked.
    #     Inventory             If the stack is applied to player's inventory. (Default: true)
    #     Cart                  If the stack is applied to the player's cart. (Default: false)
    #     Storage               If the stack is applied to the player's storage. (Default: false)
    #     GuildStorage          If the stack is applied to the player's guild storage. (Default: false)
    #   NoUse:                  Conditions when the item is unusable. (Default: null)
    #     Override              Group level to override these conditions.
    #     Sitting               If the item can not be used while sitting. (Default: false)
    #   Trade:                  Trade restrictions. (Default: null)
    #     Override              Group level to override these conditions.
    #     NoDrop                If the item can not be dropped. (Default: false)
    #     NoTrade               If the item can not be traded. (Default: false)
    #     TradePartner          If the item can not be traded to the player's partner. (Default: false)
    #     NoSell                If the item can not be sold. (Default: false)
    #     NoCart                If the item can not be put in a cart. (Default: false)
    #     NoStorage             If the item can not be put in a storage. (Default: false)
    #     NoGuildStorage        If the item can not be put in a guild storage. (Default: false)
    #     NoMail                If the item can not be put in a mail. (Default: false)
    #     NoAuction             If the item can not be put in an auction. (Default: false)
    #   Script                  Script to execute when the item is used/equipped. (Default: null)
    #   EquipScript             Script to execute when the item is equipped. (Default: null)
    #   UnEquipScript           Script to execute when the item is unequipped or when a rental item expires. (Default: null)
    ###########################################################################
    
    Header:
      Type: ITEM_DB
      Version: 1
    
    Footer:
      Imports:
      - Path: db/pre-re/item_db.yml
        Mode: Prerenewal
      - Path: db/re/item_db.yml
        Mode: Prerenewal
      - Path: db/re/item_db.yml
        Mode: Renewal
      - Path: db/import/item_db.yml

     

    Technically that makes you load renewal items, but you should put /re/ before /pre-re/, otherwise all pre-renewal items will be overwritten by renewal stats which would be really bad.

    Also, you will need to edit most of the items in the files first. For example you need to recalculate the DEF, change weapon level 5 to a different weapon level, etc.

    It's honestly cleaner to go step-by-step and copy a few renewal items into import/item_db.yml and adjust them so they fit pre-renewal.

  7. If you want status resistance of GTB still work as normal, then there's a battle config for it:

    items.conf

    Quote

    // Required level of bNoMagicDamage before Status Changes are blocked (Golden Thief Bug card).
    // For example, if left at 50. An item can give bNoMagicDamage,40;
    // which reduces magic damage by 40%, but does not blocks status changes.
    gtb_sc_immunity: 50

    Be careful because it will also affect other cards that grant bNoMagicDamage of similar or higher power.

    If you only want Lex Aeteran and Decrease Agi to be blocked but nothing else then you'll need to edit the source code: status.cpp -> status_get_sc_def

  8. If you have an NVidia graphic card there is no easy way to fix this. You could remove the /lightmap and it fixes most of the issues, but then you won't have any shadows.

    I personally upgraded to the currently recommended 2021-11-03 client. The graphic glitch caused by NVidia is strongly reduced there.

  9. In case someone else runs into it: This updates makes VS require Windows 10 SDK to compile. If you are still running Windows 8.1 like me, it could be that you can't compile rAthena anymore.

    But! You can just install Windows 10 SDK on Windows 8.1. It will tell you that the OS is not supported during installation, but it works anyway.

    • Upvote 1
  10. Okay I searched for a while and figured out the root cause is the config change that came with the commit above. It also affects pre-renewal.

    You will need to find battle.conf config file and change:

    // Who should have a baseatk value (makes str affect damage)? (Note 3)
    enable_baseatk: 0x29F

    Back to:

    // Who should have a baseatk value (makes str affect damage)? (Note 3)
    enable_baseatk: 9

     

    • Love 1
  11. Are you on renewal because if you are there are new damage calculations for monsters: https://github.com/rathena/rathena/commit/fe197bfa120aef5fd31c6896122b35fdc06774b4

    Basically the ATK displayed in mobinfo is:

    mob->status.batk + mob->status.rhw.atk, mob->status.batk + mob->status.rhw.atk2

    Base attack for monsters:

    str = dstr + level;

    Atk is 80% of Atk.

    Atk2 is 120% of Atk.

    So let's take a look at lunatic:

    // ID,Sprite_Name,kROName,iROName,LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK

    1063,LUNATIC,Lunatic,Lunatic,3,55,1,36,27,1,11,1,18,0,10,3,3,0,8,5

    LEVEL=3
    ATK1=11
    STR=10

    Base attack = 10+3 = 13
    ATK1 = 11 * 0.8 = 8
    ATK2 = 11 * 1.2 = 13

    So Lunatic damage is 21~26.

  12. Just do the modifications you want in the skill_db.txt

    For pre-re it would be this one: https://github.com/rathena/rathena/blob/master/db/pre-re/skill_db.txt

    // 06 nk (skill damage properties):
    //    0x01 - No damage skill
    //    0x02 - Has splash area
    //    0x04 - Damage should be split among targets
    //    0x08 - Skill ignores caster's % damage cards (misc type always ignores)
    //    0x10 - Skill ignores elemental adjustments
    //    0x20 - Skill ignores target's defense (misc type always ignores)
    //    0x40 - Skill ignores target's flee (magic type always ignores)
    // 0x80 - Skill ignores target's def cards

     

  13. Make sure you modify the correct file. If you are compiling on renewal you have to modify /re/skill_cast_db.txt instead.

    //-- CH_SOULCOLLECT
    401,0,0,0,600000,0,0,2000

    Right now it's defined to have a 2 second fixed casting for the skill.

    I don't know what you want to adjust but just put whatever values you want here.

    Columns are described at top:

    // SkillID,CastingTime,AfterCastActDelay,AfterCastWalkDelay,Duration1,Duration2,Cool Down,Fixed Casting Time

     

  14. Remove the call of "clif_skill_nodamage" in skill.cpp.

    In case of AL_HEAL that would be here:

    clif_skill_nodamage (src, bl, skill_id, heal, 1);

    If you don't want to remove it for HLIF_HEAL and AB_HIGHNESSHEAL then you need to write an "if".

    • Upvote 2
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.