summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/emap/init.c1
-rw-r--r--src/emap/script_buildins.c65
-rw-r--r--src/emap/script_buildins.h1
3 files changed, 67 insertions, 0 deletions
diff --git a/src/emap/init.c b/src/emap/init.c
index f3b98cb..a9aaba5 100644
--- a/src/emap/init.c
+++ b/src/emap/init.c
@@ -143,6 +143,7 @@ HPExport void plugin_init (void)
addScriptCommand("failedrefindex", "i", failedRefIndex);
addScriptCommand("downrefindex", "ii", downRefIndex);
addScriptCommand("successrefindex", "ii", successRefIndex);
+ addScriptCommand("successremovecardsindex", "i", successRemoveCardsIndex);
addScriptCommand("isstr", "v", isStr);
addScriptCommand("setbgteam", "ii", setBgTeam);
addScriptCommand("checknpccell", "siii", checkNpcCell);
diff --git a/src/emap/script_buildins.c b/src/emap/script_buildins.c
index 05f6841..cbd246b 100644
--- a/src/emap/script_buildins.c
+++ b/src/emap/script_buildins.c
@@ -1182,6 +1182,71 @@ BUILDIN(successRefIndex)
return true;
}
+BUILDIN(successRemoveCardsIndex)
+{
+ int i = -1, c, cardflag = 0;
+
+ getSD()
+ getInventoryIndex(2)
+
+ if (sd->status.inventory[n].nameid <= 0 || sd->status.inventory[n].amount <= 0)
+ return false;
+
+ i = n;
+
+ if (itemdb_isspecial(sd->status.inventory[i].card[0]))
+ return true;
+
+ for (c = sd->inventory_data[i]->slot - 1; c >= 0; --c)
+ {
+ if (sd->status.inventory[i].card[c] && itemdb_type(sd->status.inventory[i].card[c]) == IT_CARD)
+ { // extract this card from the item
+ int flag;
+ struct item item_tmp;
+ memset(&item_tmp, 0, sizeof(item_tmp));
+ cardflag = 1;
+ item_tmp.nameid = sd->status.inventory[i].card[c];
+ item_tmp.identify = 1;
+
+ if ((flag = pc->additem(sd, &item_tmp, 1, LOG_TYPE_SCRIPT)))
+ {
+ // get back the cart in inventory
+ clif->additem(sd, 0, 0, flag);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ }
+ }
+ }
+
+ if (cardflag == 1)
+ {
+ //if card was remove replace item with no card
+ int flag, j;
+ struct item item_tmp;
+ memset(&item_tmp,0,sizeof(item_tmp));
+
+ item_tmp.nameid = sd->status.inventory[i].nameid;
+ item_tmp.identify = 1;
+ item_tmp.refine = sd->status.inventory[i].refine;
+ item_tmp.attribute = sd->status.inventory[i].attribute;
+ item_tmp.expire_time = sd->status.inventory[i].expire_time;
+ item_tmp.bound = sd->status.inventory[i].bound;
+
+ for (j = sd->inventory_data[i]->slot; j < MAX_SLOTS; j++)
+ item_tmp.card[j] = sd->status.inventory[i].card[j];
+
+ pc->delitem(sd, i, 1, 0, DELITEM_MATERIALCHANGE, LOG_TYPE_SCRIPT);
+ if ((flag = pc->additem(sd, &item_tmp, 1, LOG_TYPE_SCRIPT)))
+ {
+ //chk if can be spawn in inventory otherwise put on floor
+ clif->additem(sd, 0, 0, flag);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ }
+
+ clif->misceffect(&sd->bl,3);
+ }
+ return true;
+}
+
// return paramater type
// 0 - int
// 1 - string
diff --git a/src/emap/script_buildins.h b/src/emap/script_buildins.h
index 978f234..b3c3598 100644
--- a/src/emap/script_buildins.h
+++ b/src/emap/script_buildins.h
@@ -47,6 +47,7 @@ BUILDIN(isUnitWalking);
BUILDIN(failedRefIndex);
BUILDIN(downRefIndex);
BUILDIN(successRefIndex);
+BUILDIN(successRemoveCardsIndex);
BUILDIN(isStr);
BUILDIN(npcSit);
BUILDIN(npcStand);