Skip to content
Permalink
Browse files
Initial Release of Equipment Switch
Thanks to everyone who contributed to this release in any way, be it donations, information or testing.
  • Loading branch information
Lemongrass3110 committed Oct 4, 2018
1 parent 474cb7d commit 9387014979c7222a3c7540888fefa440cf8e5134
@@ -67,6 +67,10 @@ feature.roulette: on
// Requires: 2015-05-13aRagexe or later
feature.achievement: on

// Equipment Switch (Note 1)
// Requires: 2017-02-08bRagexeRE or later
feature.equipswitch: on

// Homunculues Autofeeding (Note 1)
// Requires: 2017-09-20bRagexeRE or later
feature.homunculus_autofeed: off
@@ -1752,6 +1752,9 @@
//-- ALL_FULL_THROTTLE
5014,0,500,0,10000:15000:20000:25000:30000,10000,1800000

//-- ALL_EQSWITCH
5067,0,0,0,0,0,10000,60

//===== Homunculus Skills ==================
//-- HLIF_HEAL
8001,0,2000,0,0,0,0
@@ -56,6 +56,8 @@
2536,7,7 //ALL_GUARDIAN_RECALL
2537,0,7 //ALL_ODINS_POWER

5067,7,7 //ALL_EQSWITCH

// Mercenary Skills
8214,7 //MA_CHARGEARROW
8215,7 //MA_SHARPSHOOTING
@@ -1404,6 +1404,8 @@
5064,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0, WE_ONEFOREVER,One Forever
5065,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0, WE_CHEERUP,Cheer Up

5067,0,0,4,0,0x1,0,1,0,no,0,0,0,none,0,0x0, ALL_EQSWITCH,Equip Switch

// New Arch Bishop Skills
5072,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0, AB_VITUPERATUM,Vituperatum
5073,0,0,0,0,0,0,1,0,no,0,0,0,none,0,0x0, AB_CONVENIO,Convenio
@@ -961,6 +961,8 @@
//3036,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //BA_POEMBRAGI2
//3037,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //DC_FORTUNEKISS2

5067,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_EQSWITCH

8001,0,0,13:16:19:22:25,0,0,0,99,0,0,none,0,0,545,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_HEAL
8002,0,0,20:25:30:35:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_AVOID
8004,0,0,100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_CHANGE
@@ -1840,6 +1840,10 @@
5064,1500,0,0,0,0,0,1500
//-- WE_CHEERUP
5065,1500,0,0,60000,0,0,1500

//-- ALL_EQSWITCH
5067,0,0,0,0,0,10000,60

//==========================================

//===== Homunculus Skills ==================
@@ -61,6 +61,8 @@
2537,0,7 //ALL_ODINS_POWER
3035,7,7 //ECLAGE_RECALL

5067,7,7 //ALL_EQSWITCH

// Mercenary Skills
8214,7 //MA_CHARGEARROW
8215,7 //MA_SHARPSHOOTING
@@ -1457,6 +1457,8 @@
5064,3,6,16,0,0x1,0,1,1,yes,0,0x4,0,none,0,0, WE_ONEFOREVER,One Forever
5065,1,6,4,0,0x3,3,1,1,yes,0,0x4,0,none,0,0, WE_CHEERUP,Cheer Up

5067,0,0,4,0,0x1,0,1,0,no,0,0,0,none,0,0x0, ALL_EQSWITCH,Equip Switch

// New Arch Bishop Skills
5072,9,6,1,0,0x3,1:1:1:2:2,5,0,yes,0,0,0,magic,0,0x0, AB_VITUPERATUM,Vituperatum
5073,0,6,4,0,0x1,0,1,0,yes,0,0,0,none,0,0x0, AB_CONVENIO,Convenio
@@ -1052,6 +1052,8 @@
5064,0,0,100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WE_ONEFOREVER
5065,0,0,50,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WE_CHEERUP

5067,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_EQSWITCH

// New Arch Bishop Skills
5072,0,0,144:120:106:92:78,0,0,0,99,0,0,none,0,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_VITUPERATUM##
5073,0,0,70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CONVENIO##
@@ -680,6 +680,7 @@ CREATE TABLE IF NOT EXISTS `inventory` (
`favorite` tinyint(3) unsigned NOT NULL default '0',
`bound` tinyint(3) unsigned NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL default '0',
`equip_switch` int(11) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `char_id` (`char_id`)
) ENGINE=MyISAM;
@@ -0,0 +1,2 @@
alter table `inventory`
add column `equip_switch` int(11) unsigned NOT NULL default '0' after `unique_id`;
@@ -566,8 +566,8 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto
StringBuf_Init(&buf);
StringBuf_AppendStr(&buf, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`");
if (tableswitch == TABLE_INVENTORY) {
StringBuf_Printf(&buf, ", `favorite`");
offset = 1;
StringBuf_Printf(&buf, ", `favorite`, `equip_switch`");
offset = 2;
}

for( i = 0; i < MAX_SLOTS; ++i )
@@ -599,8 +599,10 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto
SqlStmt_BindColumn(stmt, 7, SQLDT_UINT, &item.expire_time, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 8, SQLDT_UINT, &item.bound, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 9, SQLDT_UINT64, &item.unique_id, 0, NULL, NULL);
if (tableswitch == TABLE_INVENTORY)
if (tableswitch == TABLE_INVENTORY){
SqlStmt_BindColumn(stmt, 10, SQLDT_CHAR, &item.favorite, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 11, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL);
}
for( i = 0; i < MAX_SLOTS; ++i )
SqlStmt_BindColumn(stmt, 10+offset+i, SQLDT_USHORT, &item.card[i], 0, NULL, NULL);
for( i = 0; i < MAX_ITEM_RDM_OPT; ++i ) {
@@ -634,23 +636,23 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto

if( j == MAX_SLOTS &&
k == MAX_ITEM_RDM_OPT &&
items[i].amount == item.amount &&
items[i].equip == item.equip &&
items[i].identify == item.identify &&
items[i].refine == item.refine &&
items[i].attribute == item.attribute &&
items[i].expire_time == item.expire_time &&
items[i].bound == item.bound &&
(tableswitch != TABLE_INVENTORY || items[i].favorite == item.favorite) )
items[i].amount == item.amount &&
items[i].equip == item.equip &&
items[i].identify == item.identify &&
items[i].refine == item.refine &&
items[i].attribute == item.attribute &&
items[i].expire_time == item.expire_time &&
items[i].bound == item.bound &&
(tableswitch != TABLE_INVENTORY || (items[i].favorite == item.favorite && items[i].equipSwitch == item.equipSwitch)) )
; //Do nothing.
else
{
// update all fields.
StringBuf_Clear(&buf);
StringBuf_Printf(&buf, "UPDATE `%s` SET `amount`='%d', `equip`='%d', `identify`='%d', `refine`='%d',`attribute`='%d', `expire_time`='%u', `bound`='%d', `unique_id`='%" PRIu64 "'",
StringBuf_Printf(&buf, "UPDATE `%s` SET `amount`='%d', `equip`='%u', `identify`='%d', `refine`='%d',`attribute`='%d', `expire_time`='%u', `bound`='%d', `unique_id`='%" PRIu64 "'",
tablename, items[i].amount, items[i].equip, items[i].identify, items[i].refine, items[i].attribute, items[i].expire_time, items[i].bound, items[i].unique_id);
if (tableswitch == TABLE_INVENTORY)
StringBuf_Printf(&buf, ", `favorite`='%d'", items[i].favorite);
StringBuf_Printf(&buf, ", `favorite`='%d', `equip_switch`='%u'", items[i].favorite, items[i].equipSwitch);
for( j = 0; j < MAX_SLOTS; ++j )
StringBuf_Printf(&buf, ", `card%d`=%hu", j, items[i].card[j]);
for( j = 0; j < MAX_ITEM_RDM_OPT; ++j ) {
@@ -685,7 +687,7 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto
StringBuf_Clear(&buf);
StringBuf_Printf(&buf, "INSERT INTO `%s`(`%s`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`", tablename, selectoption);
if (tableswitch == TABLE_INVENTORY)
StringBuf_Printf(&buf, ", `favorite`");
StringBuf_Printf(&buf, ", `favorite`, `equip_switch`");
for( j = 0; j < MAX_SLOTS; ++j )
StringBuf_Printf(&buf, ", `card%d`", j);
for( j = 0; j < MAX_ITEM_RDM_OPT; ++j ) {
@@ -708,10 +710,10 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto
else
found = true;

StringBuf_Printf(&buf, "('%d', '%hu', '%d', '%d', '%d', '%d', '%d', '%u', '%d', '%" PRIu64 "'",
StringBuf_Printf(&buf, "('%d', '%hu', '%d', '%u', '%d', '%d', '%d', '%u', '%d', '%" PRIu64 "'",
id, items[i].nameid, items[i].amount, items[i].equip, items[i].identify, items[i].refine, items[i].attribute, items[i].expire_time, items[i].bound, items[i].unique_id);
if (tableswitch == TABLE_INVENTORY)
StringBuf_Printf(&buf, ", '%d'", items[i].favorite);
StringBuf_Printf(&buf, ", '%d', '%u'", items[i].favorite, items[i].equipSwitch);
for( j = 0; j < MAX_SLOTS; ++j )
StringBuf_Printf(&buf, ", '%hu'", items[i].card[j]);
for( j = 0; j < MAX_ITEM_RDM_OPT; ++j ) {
@@ -791,8 +793,8 @@ bool char_memitemdata_from_sql(struct s_storage* p, int max, int id, enum storag
StringBuf_Init(&buf);
StringBuf_AppendStr(&buf, "SELECT `id`,`nameid`,`amount`,`equip`,`identify`,`refine`,`attribute`,`expire_time`,`bound`,`unique_id`");
if (tableswitch == TABLE_INVENTORY) {
StringBuf_Printf(&buf, ", `favorite`");
offset = 1;
StringBuf_Printf(&buf, ", `favorite`, `equip_switch`");
offset = 2;
}
for( j = 0; j < MAX_SLOTS; ++j )
StringBuf_Printf(&buf, ",`card%d`", j);
@@ -823,8 +825,10 @@ bool char_memitemdata_from_sql(struct s_storage* p, int max, int id, enum storag
SqlStmt_BindColumn(stmt, 7, SQLDT_UINT, &item.expire_time, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 8, SQLDT_CHAR, &item.bound, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 9, SQLDT_ULONGLONG, &item.unique_id, 0, NULL, NULL);
if (tableswitch == TABLE_INVENTORY)
if (tableswitch == TABLE_INVENTORY){
SqlStmt_BindColumn(stmt, 10, SQLDT_CHAR, &item.favorite, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 11, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL);
}
for( i = 0; i < MAX_SLOTS; ++i )
SqlStmt_BindColumn(stmt, 10+offset+i, SQLDT_USHORT, &item.card[i], 0, NULL, NULL);
for( i = 0; i < MAX_ITEM_RDM_OPT; ++i ) {
@@ -2512,7 +2516,8 @@ bool char_checkdb(void){
}
//checking inventory_db
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`char_id`,`nameid`,`amount`,`equip`,`identify`,`refine`,"
"`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`favorite`,`bound`,`unique_id`"
"`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`bound`,`unique_id`"
",`favorite`,`equip_switch`"
" FROM `%s` LIMIT 1;", schema_config.inventory_db) ){
Sql_ShowDebug(sql_handle);
return false;
@@ -254,6 +254,7 @@ struct item {
unsigned int expire_time;
char favorite, bound;
uint64 unique_id;
unsigned int equipSwitch; // location(s) where item is equipped for equip switching (using enum equip_pos for bitmasking)
};

//Equip position constants
@@ -5515,6 +5515,7 @@ ACMD_FUNC(dropall)
if( type == -1 || type == (uint8)item_data->type ) {
if( sd->inventory.u.items_inventory[i].equip != 0 )
pc_unequipitem(sd, i, 3);
pc_equipswitch_remove(sd, i);
if(pc_dropitem(sd, i, sd->inventory.u.items_inventory[i].amount))
count += sd->inventory.u.items_inventory[i].amount;
else count2 += sd->inventory.u.items_inventory[i].amount;
@@ -5547,6 +5548,7 @@ ACMD_FUNC(storeall)
if (sd->inventory.u.items_inventory[i].amount) {
if(sd->inventory.u.items_inventory[i].equip != 0)
pc_unequipitem(sd, i, 3);
pc_equipswitch_remove(sd, i);
storage_storageadd(sd, &sd->storage, i, sd->inventory.u.items_inventory[i].amount);
}
}
@@ -8529,6 +8529,7 @@ static const struct _battle_data {
{ "feature.attendance", &battle_config.feature_attendance, 1, 0, 1, },
{ "feature.privateairship", &battle_config.feature_privateairship, 1, 0, 1, },
{ "rental_transaction", &battle_config.rental_transaction, 1, 0, 1, },
{ "feature.equipswitch", &battle_config.feature_equipswitch, 1, 0, 1, },

#include "../custom/battle_config_init.inc"
};
@@ -8659,6 +8660,13 @@ void battle_adjust_conf()
}
#endif

#if PACKETVER < 20170208
if (battle_config.feature_equipswitch) {
ShowWarning("conf/battle/feature.conf equip switch is enabled but it requires PACKETVER 2017-02-08 or newer, disabling...\n");
battle_config.feature_equipswitch = 0;
}
#endif

#if PACKETVER < 20170920
if( battle_config.feature_homunculus_autofeed ){
ShowWarning("conf/battle/feature.conf homunculus autofeeding is enabled but it requires PACKETVER 2017-09-20 or newer, disabling...\n");
@@ -650,6 +650,7 @@ struct Battle_Config
int feature_attendance;
int feature_privateairship;
int rental_transaction;
int feature_equipswitch;

#include "../custom/battle_config_struct.inc"
};

0 comments on commit 9387014

Please sign in to comment.