summaryrefslogtreecommitdiff
path: root/src/map/script.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/script.c')
-rw-r--r--src/map/script.c194
1 files changed, 96 insertions, 98 deletions
diff --git a/src/map/script.c b/src/map/script.c
index 214cb4914..4466d79f1 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -10142,18 +10142,20 @@ BUILDIN(initnpctimer)
struct script_data *data;
data = script_getdata(st,2);
script->get_val(st,data); // dereference if it's a variable
- if( data_isstring(data) ) //NPC name
+ if (data_isstring(data)) {
+ //NPC name
nd = npc->name2id(script->conv_str(st, data));
- else if( data_isint(data) ) {
+ } else if (data_isint(data)) {
//Flag
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
flag = script->conv_num(st,data);
} else {
ShowError("initnpctimer: invalid argument type #1 (needs be int or string)).\n");
return false;
}
- } else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
+ }
if( !nd )
return true;
@@ -10185,18 +10187,20 @@ BUILDIN(startnpctimer)
struct script_data *data;
data = script_getdata(st,2);
script->get_val(st,data); // dereference if it's a variable
- if( data_isstring(data) ) //NPC name
+ if (data_isstring(data)) {
+ //NPC name
nd = npc->name2id(script->conv_str(st, data));
- else if( data_isint(data) ) {
+ } else if (data_isint(data)) {
//Flag
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
flag = script->conv_num(st,data);
} else {
ShowError("initnpctimer: invalid argument type #1 (needs be int or string)).\n");
return false;
}
- } else
- nd=(struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
+ }
if( !nd )
return true;
@@ -10225,18 +10229,20 @@ BUILDIN(stopnpctimer) {
struct script_data *data;
data = script_getdata(st,2);
script->get_val(st,data); // Dereference if it's a variable
- if( data_isstring(data) ) //NPC name
+ if (data_isstring(data)) {
+ //NPC name
nd = npc->name2id(script->conv_str(st, data));
- else if( data_isint(data) ) {
+ } else if (data_isint(data)) {
//Flag
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
flag = script->conv_num(st,data);
} else {
ShowError("initnpctimer: invalid argument type #1 (needs be int or string)).\n");
return false;
}
- } else
- nd=(struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
+ }
if( !nd )
return true;
@@ -10258,10 +10264,9 @@ BUILDIN(getnpctimer)
if( script_hasdata(st,3) )
nd = npc->name2id(script_getstr(st,3));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC )
- {
+ if (nd == NULL) {
script_pushint(st,0);
ShowError("getnpctimer: Invalid NPC.\n");
return false;
@@ -10296,9 +10301,9 @@ BUILDIN(setnpctimer)
if( script_hasdata(st,3) )
nd = npc->name2id(script_getstr(st,3));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC ) {
+ if (nd == NULL) {
script_pushint(st,1);
ShowError("setnpctimer: Invalid NPC.\n");
return false;
@@ -10315,10 +10320,9 @@ BUILDIN(setnpctimer)
BUILDIN(attachnpctimer)
{
struct map_session_data *sd;
- struct npc_data *nd = (struct npc_data *)map->id2bl(st->oid);
+ struct npc_data *nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC )
- {
+ if (nd == NULL) {
script_pushint(st,1);
ShowError("setnpctimer: Invalid NPC.\n");
return false;
@@ -10348,10 +10352,9 @@ BUILDIN(detachnpctimer) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st,2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC )
- {
+ if (nd == NULL) {
script_pushint(st,1);
ShowError("detachnpctimer: Invalid NPC.\n");
return false;
@@ -10441,8 +10444,8 @@ BUILDIN(itemeffect)
if (sd == NULL)
return true;
- nd = (struct npc_data *)map->id2bl(sd->npc_id);
- if( nd == NULL )
+ nd = map->id2nd(sd->npc_id);
+ if (nd == NULL)
return false;
if( script_isstringtype(st, 2) ) {
@@ -11293,9 +11296,8 @@ BUILDIN(changecharsex)
/*==========================================
* Works like 'announce' but outputs in the common chat window
*------------------------------------------*/
-BUILDIN(globalmes) {
- struct block_list *bl = map->id2bl(st->oid);
- struct npc_data *nd = (struct npc_data *)bl;
+BUILDIN(globalmes)
+{
const char *name=NULL,*mes;
mes=script_getstr(st,2);
@@ -11305,7 +11307,9 @@ BUILDIN(globalmes) {
// npc name to display
name=script_getstr(st,3);
} else {
- name=nd->name; //use current npc name
+ const struct npc_data *nd = map->id2nd(st->oid);
+ nullpo_retr(false, nd);
+ name = nd->name; //use current npc name
}
npc->globalmessage(name,mes); // broadcast to all players connected
@@ -11331,7 +11335,7 @@ BUILDIN(waitingroom)
int minLvl = script_hasdata(st,7) ? script_getnum(st,7) : 1;
int maxLvl = script_hasdata(st,8) ? script_getnum(st,8) : MAX_LEVEL;
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
if (nd != NULL) {
int pub = 1;
chat->create_npc_chat(nd, title, limit, pub, trigger, ev, zeny, minLvl, maxLvl);
@@ -11349,8 +11353,8 @@ BUILDIN(delwaitingroom) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st, 2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
- if( nd != NULL )
+ nd = map->id2nd(st->oid);
+ if (nd != NULL)
chat->delete_npc_chat(nd);
return true;
}
@@ -11366,9 +11370,9 @@ BUILDIN(waitingroomkickall) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st,2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL )
+ if (nd != NULL && (cd=map->id2cd(nd->chat_id)) != NULL)
chat->npc_kick_all(cd);
return true;
}
@@ -11384,9 +11388,9 @@ BUILDIN(enablewaitingroomevent) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st, 2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL )
+ if (nd != NULL && (cd=map->id2cd(nd->chat_id)) != NULL)
chat->enable_event(cd);
return true;
}
@@ -11402,9 +11406,9 @@ BUILDIN(disablewaitingroomevent) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st, 2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL )
+ if (nd != NULL && (cd=map->id2cd(nd->chat_id)) != NULL)
chat->disable_event(cd);
return true;
}
@@ -11427,9 +11431,10 @@ BUILDIN(disablewaitingroomevent) {
///
/// getwaitingroomstate(<type>,"<npc_name>") -> <info>
/// getwaitingroomstate(<type>) -> <info>
-BUILDIN(getwaitingroomstate) {
- struct npc_data *nd;
- struct chat_data *cd;
+BUILDIN(getwaitingroomstate)
+{
+ const struct npc_data *nd;
+ const struct chat_data *cd;
int type;
int i;
@@ -11437,9 +11442,9 @@ BUILDIN(getwaitingroomstate) {
if( script_hasdata(st,3) )
nd = npc->name2id(script_getstr(st, 3));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd == NULL || (cd=(struct chat_data *)map->id2bl(nd->chat_id)) == NULL ) {
+ if (nd == NULL || (cd=map->id2cd(nd->chat_id)) == NULL) {
script_pushint(st, -1);
return true;
}
@@ -11488,8 +11493,8 @@ BUILDIN(warpwaitingpc)
struct npc_data* nd;
struct chat_data* cd;
- nd = (struct npc_data *)map->id2bl(st->oid);
- if( nd == NULL || (cd=(struct chat_data *)map->id2bl(nd->chat_id)) == NULL )
+ nd = map->id2nd(st->oid);
+ if (nd == NULL || (cd=map->id2cd(nd->chat_id)) == NULL)
return true;
map_name = script_getstr(st,2);
@@ -12149,7 +12154,7 @@ BUILDIN(flagemblem)
if(g_id < 0) return true;
- nd = (struct npc_data *)map->id2nd(st->oid);
+ nd = map->id2nd(st->oid);
if( nd == NULL ) {
ShowError("script:flagemblem: npc %d not found\n", st->oid);
} else if( nd->subtype != SCRIPT ) {
@@ -13887,12 +13892,11 @@ BUILDIN(npctalk)
if (script_hasdata(st, 3)) {
nd = npc->name2id(script_getstr(st, 3));
- }
- else {
- nd = (struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
}
- if (nd) {
+ if (nd != NULL) {
char name[NAME_LENGTH], message[256];
safestrncpy(name, nd->name, sizeof(name));
strtok(name, "#"); // discard extra name identifier if present
@@ -13909,9 +13913,9 @@ BUILDIN(npcspeed) {
int speed;
speed = script_getnum(st,2);
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd ) {
+ if (nd != NULL) {
unit->bl2ud2(&nd->bl); // ensure nd->ud is safe to edit
nd->speed = speed;
nd->ud->state.speed_changed = 1;
@@ -13920,14 +13924,15 @@ BUILDIN(npcspeed) {
return true;
}
// make an npc walk to a position [Valaris]
-BUILDIN(npcwalkto) {
- struct npc_data *nd=(struct npc_data *)map->id2bl(st->oid);
+BUILDIN(npcwalkto)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
int x=0,y=0;
x=script_getnum(st,2);
y=script_getnum(st,3);
- if( nd ) {
+ if (nd != NULL) {
unit->bl2ud2(&nd->bl); // ensure nd->ud is safe to edit
if (!nd->status.hp) {
status_calc_npc(nd, SCO_FIRST);
@@ -13940,10 +13945,11 @@ BUILDIN(npcwalkto) {
return true;
}
// stop an npc's movement [Valaris]
-BUILDIN(npcstop) {
- struct npc_data *nd = (struct npc_data *)map->id2bl(st->oid);
+BUILDIN(npcstop)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
- if( nd ) {
+ if (nd != NULL) {
unit->bl2ud2(&nd->bl); // ensure nd->ud is safe to edit
unit->stop_walking(&nd->bl, STOPWALKING_FLAG_FIXPOS|STOPWALKING_FLAG_NEXTCELL);
}
@@ -13952,9 +13958,10 @@ BUILDIN(npcstop) {
}
// set click npc distance [4144]
-BUILDIN(setnpcdistance) {
- struct npc_data *nd = (struct npc_data *) map->id2bl (st->oid);
- if (!nd)
+BUILDIN(setnpcdistance)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
+ if (nd == NULL)
return false;
nd->area_size = script_getnum(st, 2);
@@ -13965,23 +13972,20 @@ BUILDIN(setnpcdistance) {
// return current npc direction [4144]
BUILDIN(getnpcdir)
{
- struct npc_data *nd = 0;
+ const struct npc_data *nd = NULL;
- if (script_hasdata(st, 2))
- {
- nd = npc->name2id (script_getstr(st, 2));
+ if (script_hasdata(st, 2)) {
+ nd = npc->name2id(script_getstr(st, 2));
}
- if (!nd && !st->oid)
- {
+ if (nd == NULL && !st->oid) {
script_pushint(st, -1);
return true;
}
- if (!nd)
- nd = (struct npc_data *) map->id2bl (st->oid);
+ if (nd == NULL)
+ nd = map->id2nd(st->oid);
- if (!nd)
- {
+ if (nd == NULL) {
script_pushint(st, -1);
return true;
}
@@ -13995,22 +13999,19 @@ BUILDIN(getnpcdir)
BUILDIN(setnpcdir)
{
int newdir;
- struct npc_data *nd = 0;
+ struct npc_data *nd = NULL;
- if (script_hasdata(st, 3))
- {
- nd = npc->name2id (script_getstr(st, 2));
+ if (script_hasdata(st, 3)) {
+ nd = npc->name2id(script_getstr(st, 2));
newdir = script_getnum(st, 3);
- }
- else if (script_hasdata(st, 2))
- {
+ } else if (script_hasdata(st, 2)) {
if (!st->oid)
return false;
- nd = (struct npc_data *) map->id2bl (st->oid);
+ nd = map->id2nd(st->oid);
newdir = script_getnum(st, 2);
}
- if (!nd)
+ if (nd == NULL)
return false;
if (newdir < 0)
@@ -14031,23 +14032,20 @@ BUILDIN(setnpcdir)
// return npc class [4144]
BUILDIN(getnpcclass)
{
- struct npc_data *nd = 0;
+ const struct npc_data *nd = NULL;
- if (script_hasdata(st, 2))
- {
- nd = npc->name2id (script_getstr(st, 2));
+ if (script_hasdata(st, 2)) {
+ nd = npc->name2id(script_getstr(st, 2));
}
- if (!nd && !st->oid)
- {
+ if (nd == NULL && !st->oid) {
script_pushint(st, -1);
return false;
}
- if (!nd)
- nd = (struct npc_data *) map->id2bl(st->oid);
+ if (nd == NULL)
+ nd = map->id2nd(st->oid);
- if (!nd)
- {
+ if (nd == NULL) {
script_pushint(st, -1);
return false;
}
@@ -16108,7 +16106,7 @@ BUILDIN(npcshopattach) {
}
if (flag)
- nd->master_nd = ((struct npc_data *)map->id2bl(st->oid));
+ nd->master_nd = map->id2nd(st->oid);
else
nd->master_nd = NULL;
@@ -17486,9 +17484,9 @@ BUILDIN(waitingroom2bg) {
if( script_hasdata(st,7) )
nd = npc->name2id(script_getstr(st,7));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd == NULL || (cd = (struct chat_data *)map->id2bl(nd->chat_id)) == NULL ) {
+ if (nd == NULL || (cd = map->id2cd(nd->chat_id)) == NULL) {
script_pushint(st,0);
return true;
}
@@ -17547,7 +17545,7 @@ BUILDIN(waitingroom2bg_single) {
y = script_getnum(st,5);
nd = npc->name2id(script_getstr(st,6));
- if( nd == NULL || (cd = (struct chat_data *)map->id2bl(nd->chat_id)) == NULL || cd->users <= 0 )
+ if (nd == NULL || (cd = map->id2cd(nd->chat_id)) == NULL || cd->users <= 0)
return true;
if( (sd = cd->usersd[0]) == NULL )
@@ -18889,7 +18887,7 @@ BUILDIN(npcskill)
if (sd == NULL)
return true;
- nd = (struct npc_data *)map->id2bl(sd->npc_id);
+ nd = map->id2nd(sd->npc_id);
if (stat_point > battle_config.max_third_parameter) {
ShowError("npcskill: stat point exceeded maximum of %d.\n",battle_config.max_third_parameter );