Skip to content

Commit

Permalink
Merged Pull Request #195 (@autoloottype)
Browse files Browse the repository at this point in the history
- Small tweaks to the command, fixed merge conflicts

Signed-off-by: Haru <haru@dotalux.com>
  • Loading branch information
MishimaHaruna committed Nov 3, 2013
2 parents 34b5ad0 + fa54cf5 commit 649e7b9
Show file tree
Hide file tree
Showing 8 changed files with 146 additions and 12 deletions.
1 change: 1 addition & 0 deletions conf/atcommand.conf
Expand Up @@ -56,6 +56,7 @@ aliases: {
accinfo: ["accountinfo"]
itemreset: ["clearinventory"]
channel: ["main"]
autoloottype: ["aloottype"]
}

/* List of commands that should not be logged at all */
Expand Down
1 change: 1 addition & 0 deletions conf/groups.conf
Expand Up @@ -120,6 +120,7 @@ groups: (
noks: true
autoloot: true
alootid: true
autoloottype: true
autotrade: true
request: true
go: true
Expand Down
5 changes: 5 additions & 0 deletions conf/help.txt
Expand Up @@ -300,3 +300,8 @@ reloadscript: "Reload all scripts."
gat: "For debugging (you inspect around gat)"
send: "For debugging (packet variety)"
nuke: "Params: <char name>\n" "Blow somebody up, including those surrounding them."
autoloottype: "Manage a list of autolooting item types.\n"
" To add an item type to the list, use \"@autoloottype +<type name>\".\n"
" To remove an item type, use \"@autoloottype -<type name>\".\n"
" Type List: healing, usable, etc, weapon, armor, card, petegg, petarmor, ammo.\n"
" \"@autoloottype reset\" will clear your autoloottype list."
12 changes: 12 additions & 0 deletions conf/messages.conf
Expand Up @@ -1534,5 +1534,17 @@

//CashShop mapflag
1489: Cash Shop is disabled in this map

// @autoloottype
1490: You're already autolooting this item type.
1491: Item type not found.
1492: Autolooting item type: '%s'
1493: You're currently not autolooting this item type.
1494: Removed item type: '%s' from your autoloottype list.
1495: Your autoloottype list is empty.
1496: Item types on your autoloottype list:
1497: Your autoloottype list has been reset.


//Custom translations
import: conf/import/msg_conf.txt
10 changes: 10 additions & 0 deletions doc/atcommands.txt
Expand Up @@ -337,6 +337,16 @@ By default, 10 items can be autolooted at one time.

---------------------------------------

@autoloottype <+/-><type name>
@autoloottype reset

Starts or stops autolooting a specified item type.
Type List: healing, usable, etc, weapon, armor, card, petegg, petarmor, ammo.
Typing "reset" will clear the autoloot item list.

---------------------------------------


@mobsearch <monster name>

Locates and displays the position of a certain mob on the current map.
Expand Down
118 changes: 108 additions & 10 deletions src/map/atcommand.c
Expand Up @@ -5603,16 +5603,16 @@ ACMD(autolootitem)
}
else if (!strcmp(message,"reset"))
action = 4;
}

if (action < 3) // add or remove
{
if ((item_data = itemdb->exists(atoi(message))) == NULL)
item_data = itemdb->search_name(message);
if (!item_data) {
// No items founds in the DB with Id or Name
clif->message(fd, msg_txt(1189)); // Item not found.
return false;

if (action < 3) // add or remove
{
if ((item_data = itemdb->exists(atoi(message))) == NULL)
item_data = itemdb->search_name(message);
if (!item_data) {
// No items founds in the DB with Id or Name
clif->message(fd, msg_txt(1189)); // Item not found.
return false;
}
}
}

Expand Down Expand Up @@ -5679,6 +5679,103 @@ ACMD(autolootitem)
return true;
}

/*==========================================
* @autoloottype
* Credits:
* chriser,Aleos
*------------------------------------------*/
ACMD(autoloottype) {
int i;
uint8 action = 3; // 1=add, 2=remove, 3=help+list (default), 4=reset
enum item_types type = -1;
int ITEM_NONE = 0;

if (message && *message) {
if (message[0] == '+') {
message++;
action = 1;
} else if (message[0] == '-') {
message++;
action = 2;
} else if (strcmp(message,"reset") == 0) {
action = 4;
}

if (action < 3) {
// add or remove
if (strncmp(message, "healing", 3) == 0)
type = IT_HEALING;
else if (strncmp(message, "usable", 3) == 0)
type = IT_USABLE;
else if (strncmp(message, "etc", 3) == 0)
type = IT_ETC;
else if (strncmp(message, "weapon", 3) == 0)
type = IT_WEAPON;
else if (strncmp(message, "armor", 3) == 0)
type = IT_ARMOR;
else if (strncmp(message, "card", 3) == 0)
type = IT_CARD;
else if (strncmp(message, "petegg", 4) == 0)
type = IT_PETEGG;
else if (strncmp(message, "petarmor", 4) == 0)
type = IT_PETARMOR;
else if (strncmp(message, "ammo", 3) == 0)
type = IT_AMMO;
else {
clif->message(fd, msg_txt(1491)); // Item type not found.
return false;
}
}
}

switch (action) {
case 1:
if (sd->state.autoloottype&(1<<type)) {
clif->message(fd, msg_txt(1490)); // You're already autolooting this item type.
return false;
}
sd->state.autoloottype |= (1<<type); // Stores the type
sprintf(atcmd_output, msg_txt(1492), itemdb->typename(type)); // Autolooting item type: '%s'
clif->message(fd, atcmd_output);
break;
case 2:
if (!(sd->state.autoloottype&(1<<type))) {
clif->message(fd, msg_txt(1493)); // You're currently not autolooting this item type.
return false;
}
sd->state.autoloottype &= ~(1<<type);
sprintf(atcmd_output, msg_txt(1494), itemdb->typename(type)); // Removed item type: '%s' from your autoloottype list.
clif->message(fd, atcmd_output);
break;
case 3:
clif->message(fd, msg_txt(38)); // Invalid location number, or name.

{
// attempt to find the text help string
const char *text = atcommand_help_string(info);
if (text) clif->messageln(fd, text); // send the text to the client
}

if (sd->state.autoloottype == ITEM_NONE) {
clif->message(fd, msg_txt(1495)); // Your autoloottype list is empty.
} else {
clif->message(fd, msg_txt(1496)); // Item types on your autoloottype list:
for(i=0; i < IT_MAX; i++) {
if (sd->state.autoloottype&(1<<i)) {
sprintf(atcmd_output, " '%s'", itemdb->typename(i));
clif->message(fd, atcmd_output);
}
}
}
break;
case 4:
sd->state.autoloottype = ITEM_NONE;
clif->message(fd, msg_txt(1497)); // Your autoloottype list has been reset.
break;
}
return true;
}

/*==========================================
* It is made to snow.
*------------------------------------------*/
Expand Down Expand Up @@ -9383,6 +9480,7 @@ void atcommand_basecommands(void) {
ACMD_DEF(changelook),
ACMD_DEF(autoloot),
ACMD_DEF2("alootid", autolootitem),
ACMD_DEF(autoloottype),
ACMD_DEF(mobinfo),
ACMD_DEF(exp),
ACMD_DEF(version),
Expand Down
10 changes: 8 additions & 2 deletions src/map/pc.c
Expand Up @@ -9414,10 +9414,16 @@ void pc_overheat(struct map_session_data *sd, int val) {
*/
bool pc_isautolooting(struct map_session_data *sd, int nameid)
{
int i;
if( !sd->state.autolooting )
int i = 0;

if (sd->state.autoloottype && sd->state.autoloottype&(1<<itemdb_type(nameid)))
return true;

if (!sd->state.autolooting)
return false;

ARR_FIND(0, AUTOLOOTITEM_SIZE, i, sd->state.autolootid[i] == nameid);

return (i != AUTOLOOTITEM_SIZE);
}

Expand Down
1 change: 1 addition & 0 deletions src/map/pc.h
Expand Up @@ -166,6 +166,7 @@ struct map_session_data {
short pmap; // Previous map on Map Change
unsigned short autoloot;
unsigned short autolootid[AUTOLOOTITEM_SIZE]; // [Zephyrus]
unsigned short autoloottype;
unsigned int autolooting : 1; //performance-saver, autolooting state for @alootid
unsigned short autobonus; //flag to indicate if an autobonus is activated. [Inkfish]
unsigned int gmaster_flag : 1;
Expand Down

0 comments on commit 649e7b9

Please sign in to comment.