- Added support to Cash Shop for script command callshop
- Fixed a bug in OnTouchNPC - Cleanup in barricade code. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12896 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
59d67d996b
commit
fc312a5088
@ -545,8 +545,12 @@ short mob_barricade_build(short m, short x, short y, const char* mobname, short
|
||||
safestrncpy(barricade->npc_event, event, sizeof(barricade->npc_event));
|
||||
barricade->amount = 0;
|
||||
barricade->killable = killable;
|
||||
barricade->shootable = shootable;
|
||||
barricade->walkable = walkable;
|
||||
|
||||
// A protection just in case setting a walkable - non shootable
|
||||
if( (barricade->walkable = walkable) == true )
|
||||
barricade->shootable = true;
|
||||
else
|
||||
barricade->shootable = shootable;
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
{
|
||||
@ -567,8 +571,11 @@ short mob_barricade_build(short m, short x, short y, const char* mobname, short
|
||||
md->barricade = barricade;
|
||||
}
|
||||
|
||||
if( !barricade->walkable ) map_setcell(m, x1, y1, CELL_WALKABLE, false);
|
||||
map_setcell(m, x1, y1, CELL_SHOOTABLE, barricade->shootable);
|
||||
if( !barricade->walkable )
|
||||
{
|
||||
map_setcell(m, x1, y1, CELL_WALKABLE, false);
|
||||
map_setcell(m, x1, y1, CELL_SHOOTABLE, barricade->shootable);
|
||||
}
|
||||
|
||||
clif_changemapcell(0, m, x1, y1, map_getcell(barricade->m, x1, y1, CELL_GETTYPE), ALL_SAMEMAP);
|
||||
}
|
||||
@ -623,8 +630,11 @@ static void mob_barricade_break(struct barricade_data *barricade, struct block_l
|
||||
{
|
||||
mob_barricade_nextxy(barricade->x, barricade->y, barricade->dir, i, &x1, &y1);
|
||||
|
||||
if( !barricade->walkable ) map_setcell(barricade->m, x1, y1, CELL_WALKABLE, true);
|
||||
map_setcell(barricade->m, x1, y1, CELL_SHOOTABLE, !barricade->shootable);
|
||||
if( !barricade->shootable )
|
||||
map_setcell(barricade->m, x1, y1, CELL_SHOOTABLE, true);
|
||||
if( !barricade->walkable )
|
||||
map_setcell(barricade->m, x1, y1, CELL_WALKABLE, true);
|
||||
|
||||
clif_changemapcell(0, barricade->m, x1, y1, map_getcell(barricade->m, x1, y1, CELL_GETTYPE), ALL_SAMEMAP);
|
||||
}
|
||||
|
||||
@ -685,8 +695,11 @@ void mod_barricade_clearall(void)
|
||||
{
|
||||
mob_barricade_nextxy(barricade->x, barricade->y, barricade->dir, i, &x1, &y1);
|
||||
|
||||
if( !barricade->walkable ) map_setcell(barricade->m, x1, y1, CELL_WALKABLE, true);
|
||||
map_setcell(barricade->m, x1, y1, CELL_SHOOTABLE, !barricade->shootable);
|
||||
if( !barricade->shootable )
|
||||
map_setcell(barricade->m, x1, y1, CELL_SHOOTABLE, true);
|
||||
if( !barricade->walkable )
|
||||
map_setcell(barricade->m, x1, y1, CELL_WALKABLE, true);
|
||||
|
||||
clif_changemapcell(0, barricade->m, x1, y1, map_getcell(barricade->m, x1, y1, CELL_GETTYPE), ALL_SAMEMAP);
|
||||
}
|
||||
}
|
||||
|
@ -781,7 +781,7 @@ int npc_touch_areanpc(struct map_session_data* sd, int m, int x, int y)
|
||||
// Return 1 if Warped
|
||||
int npc_touch_areanpc2(struct mob_data *md)
|
||||
{
|
||||
int i, m = md->bl.m, x = md->bl.x, y = md->bl.y;
|
||||
int i, m = md->bl.m, x = md->bl.x, y = md->bl.y, id;
|
||||
char eventname[NAME_LENGTH*2+3];
|
||||
struct event_data* ev;
|
||||
int xs, ys;
|
||||
@ -825,7 +825,9 @@ int npc_touch_areanpc2(struct mob_data *md)
|
||||
if( (ev = (struct event_data*)strdb_get(ev_db, eventname)) == NULL || ev->nd == NULL )
|
||||
break; // No OnTouchNPC Event
|
||||
md->areanpc_id = map[m].npc[i]->bl.id;
|
||||
id = md->bl.id; // Stores Unique ID
|
||||
run_script(ev->nd->u.scr.script, ev->pos, md->bl.id, ev->nd->bl.id);
|
||||
if( map_id2md(id) == NULL ) return 1; // Not Warped, but killed
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -12132,23 +12132,25 @@ BUILDIN_FUNC(callshop)
|
||||
if( script_hasdata(st,3) )
|
||||
flag = script_getnum(st,3);
|
||||
nd = npc_name2id(shopname);
|
||||
if (!nd || nd->bl.type!=BL_NPC || nd->subtype!=SHOP) {
|
||||
if( !nd || nd->bl.type != BL_NPC || (nd->subtype != SHOP && nd->subtype != CASHSHOP) )
|
||||
{
|
||||
ShowError("buildin_callshop: Shop [%s] not found (or NPC is not shop type)\n", shopname);
|
||||
script_pushint(st,0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch (flag) {
|
||||
case 1: //Buy window
|
||||
npc_buysellsel(sd,nd->bl.id,0);
|
||||
break;
|
||||
case 2: //Sell window
|
||||
npc_buysellsel(sd,nd->bl.id,1);
|
||||
break;
|
||||
default: //Show menu
|
||||
clif_npcbuysell(sd,nd->bl.id);
|
||||
break;
|
||||
if( nd->subtype == SHOP )
|
||||
{
|
||||
switch( flag )
|
||||
{
|
||||
case 1: npc_buysellsel(sd,nd->bl.id,0); break; //Buy window
|
||||
case 2: npc_buysellsel(sd,nd->bl.id,1); break; //Sell window
|
||||
default: clif_npcbuysell(sd,nd->bl.id); break; //Show menu
|
||||
}
|
||||
}
|
||||
else
|
||||
clif_cashshop_show(sd, nd);
|
||||
|
||||
sd->npc_shopid = nd->bl.id;
|
||||
script_pushint(st,1);
|
||||
return 0;
|
||||
@ -13636,7 +13638,7 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(unequip,"i"), // unequip command [Spectre]
|
||||
BUILDIN_DEF(getstrlen,"s"), //strlen [Valaris]
|
||||
BUILDIN_DEF(charisalpha,"si"), //isalpha [Valaris]
|
||||
BUILDIN_DEF(setnpcdisplay,"sv?"),
|
||||
BUILDIN_DEF(setnpcdisplay,"sv??"),
|
||||
BUILDIN_DEF(compare,"ss"), // Lordalfa - To bring strstr to scripting Engine.
|
||||
BUILDIN_DEF(getiteminfo,"ii"), //[Lupus] returns Items Buy / sell Price, etc info
|
||||
BUILDIN_DEF(setiteminfo,"iii"), //[Lupus] set Items Buy / sell Price, etc info
|
||||
|
Loading…
x
Reference in New Issue
Block a user