Jump to content

4144

Core Developers
  • Content Count

    1189
  • Joined

  • Last visited

  • Days Won

    124

4144 last won the day on March 12

4144 had the most liked content!

About 4144

  • Rank
    Advanced Member
  • Birthday July 18

Contact Methods

  • Discord
    4144
  • IRC Nickname
    _41444d494e_
  • Website URL
    https://discord.com/invite/ByEQHDf

Profile Information

  • Gender
    Male
  • Github
    4144
  • Emulator
    Hercules
  • Client Version
    latest

Recent Profile Visitors

38254 profile views

Single Status Update

See all updates by 4144

  1. hi, good night, how are you?

     

    I'm trying to bring the swap item system to my hercules emulator and then launch it here in the community, I was successful, I'm just having a problem that according to the rathena commit they use the namespace std::map and std::pair that are C ++ languages not supported by hercules, how can I do this via struct or some function in C ?? Follow the link, if you can help I am grateful.

     

    https://github.com/rathena/rathena/pull/3548/commits/2a733e04268970fd5e42e23697cf944f14449119

     

    PC.C

     

    int pc_equipswitch( struct map_session_data* sd, int index ) {

     

    // Get the target equip mask

    int position = sd->inventory.u.items_inventory[index].equipSwitch;

     

    // Get the currently equipped item

    short equippedItem = pc_checkequip( sd, position );

     

    // No item equipped at the target

    if( equippedItem == -1 ) {

     

    // Remove it from the equip switch

    pc_equipswitch_remove( sd, index );

     

    pc_equipitem( sd, index, position );

     

    return position;

     

    }else{

     

    std::map<int, int> unequipped;

    int unequipped_position = 0;

     

    for( int i = 0; i < EQI_MAX; i++ ) {

    int unequip_index = sd->equip_index;

     

    if( unequip_index >= 0 && position & equip_bitmask ) {

    struct item* unequip_item = &sd->inventory.u.items_inventory[unequip_index];

     

    // Store the unequipped index and position mask for later

    unequipped[unequip_index] = unequip_item->equip;

     

    // Keep the position for later

    unequipped_position |= unequip_item->equip;

     

    // Unequip the item

    pc_unequipitem( sd, unequip_index, 0 );

     

    }

    }

     

    int all_position = position | unequipped_position;

     

    // Equip everything that is hit by the mask

    for( int i = 0; i < EQI_MAX; i++ ){

    int exchange_index = sd->equip_switch_index;

     

    if( exchange_index >= 0 && all_position & equip_bitmask ){

    struct item* exchange_item = &sd->inventory.u.items_inventory[exchange_index];

     

    // Store the target position

    int exchange_position = exchange_item->equipSwitch;

     

    // Remove the item from equip switch

    pc_equipswitch_remove( sd, exchange_index );

     

    // Equip the item at the destinated position

    pc_equipitem( sd, exchange_index, exchange_position );

    }

    }

     

    // Place all unequipped items into the equip switch window

    for( std::pair<int, int> pair : unequipped ){

    int unequipped_index = pair.first;

    int unequipped_position = pair.second;

     

    // Rebuild the index cache

    for( int i = 0; i < EQI_MAX; i++ ){

    if( unequipped_position & equip_bitmask ){

    sd->equip_switch_index = unequipped_index;

    }

    }

     

    // Set the correct position mask

    sd->inventory.u.items_inventory[unequipped_index].equipSwitch = unequipped_position;

     

    // Notify the client

    clif_equipswitch_add( sd, unequipped_index, unequipped_position, false );

    }

     

    return all_position;

    }

    }

    1. 4144

      4144

      you know what this is not private messages?

      For arrays use VECTOR or fixed sized arrays

       

    2. pedrodks

      pedrodks

      Sorry, thank's for solution

×
×
  • Create New...

Important Information

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