I need help in this code !!!

dungpt8782

New member
Messages
63
Points
0
Age
43
Emulator
// duplicatenpc("NpcName", "DuplicateName", "DupHiddenName", "map", x, y, dir{, sprite{, xs, ys}});
BUILDIN(duplicatenpc)
{
const char *npc_name = script_getstr(st, 2);
const char *dup_name = script_getstr(st, 3);
const char *dup_hidden_name = script_getstr(st, 4);
const char *tmap = script_getstr(st, 5);
int tx = script_getnum(st, 6);
int ty = script_getnum(st, 7);
int tdir = script_getnum(st, 8);
int tclass_, txs = -1, tys = -1, sourceid, type, tmapid, i;
struct npc_data *nd_source, *nd_target;
char targetname[24] = "";

if(script_hasdata(st, 10))
txs = (script_getnum(st, 10) < -1) ? -1 : script_getnum(st, 10);
if(script_hasdata(st, 11))
tys = (script_getnum(st, 11) < -1) ? -1 : script_getnum(st, 10);

if(txs == -1 && tys != -1)
txs = 0;
if(txs != - 1 && tys == -1)
tys = 0;

if(strlen(dup_name) + strlen(dup_hidden_name) > NAME_LENGTH)
{
ShowError("duplicatenpc: Name#HiddenName is to long (max %d chars). (%s)\n",NAME_LENGTH, npc_name);
script_pushint(st, 0);
return 0;
}

nd_source = npc->name2id(npc_name);

if(script_hasdata(st, 9))
tclass_ = (script_getnum(st, 9) < -1) ? -1 : script_getnum(st, 9);
else
tclass_ = nd_source->class_;

if( nd_source == NULL)
{
ShowError("duplicatenpc: original npc not found for duplicate. (%s)\n", npc_name);
script_pushint(st, 0);
return 0;
}

sourceid = nd_source->bl.id;
type = nd_source->subtype;

tmapid = map->mapname2mapid(tmap);
if(tmapid < 0)
{
ShowError("duplicatenpc: target map not found. (%s)\n", tmap);
script_pushint(st, 0);
return 0;
}

// nd_target = npc->create_npc(tmapid, tx, ty);

strcat(targetname, dup_name);
strncat(targetname, "#", 1);
strncat(targetname, dup_hidden_name, strlen(dup_hidden_name));

safestrncpy(nd_target->name, targetname , sizeof(nd_target->name));
safestrncpy(nd_target->exname, targetname, sizeof(nd_target->exname));

nd_target->class_ = tclass_;
nd_target->speed = 200;
nd_target->src_id = sourceid;
nd_target->bl.type = BL_NPC;
nd_target->subtype = (enum npc_subtype)type;
switch(type)
{
case SCRIPT:
nd_target->u.scr.xs = txs;
nd_target->u.scr.ys = tys;
nd_target->u.scr.script = nd_source->u.scr.script;
nd_target->u.scr.label_list = nd_source->u.scr.label_list;
nd_target->u.scr.label_list_num = nd_source->u.scr.label_list_num;
nd_target->u.scr.shop = nd_source->u.scr.shop;
nd_target->u.scr.trader = nd_source->u.scr.trader;
break;

case SHOP:
case CASHSHOP:
nd_target->u.shop.shop_item = nd_source->u.shop.shop_item;
nd_target->u.shop.count = nd_source->u.shop.count;
break;

case WARP:
if( !battle->bc->warp_point_debug )
nd_target->class_ = WARP_CLASS;
else
nd_target->class_ = WARP_DEBUG_CLASS;
nd_target->u.warp.xs = txs;
nd_target->u.warp.ys = tys;
nd_target->u.warp.mapindex = nd_source->u.warp.mapindex;
nd_target->u.warp.x = nd_source->u.warp.x;
nd_target->u.warp.y = nd_source->u.warp.y;
break;
}

map->addnpc(tmapid, nd_target);
//status->change_init(&nd_target->bl);
//unit->dataset(&nd_target->bl);
nd_target->ud = &npc->base_ud;
nd_target->dir = tdir;
npc->setcells(nd_target);
map->addblock(&nd_target->bl);
if(tclass_ >= 0)
{
status->set_viewdata(&nd_target->bl, nd_target->class_);
if( map->list[tmapid].users )
clif->spawn(&nd_target->bl);
}
strdb_put(npc->name_db, nd_target->exname, nd_target);

if(type == SCRIPT)
{
for (i = 0; i < nd_target->u.scr.label_list_num; i++)
{
if (npc->event_export(nd_target, i)) {
ShowWarning("duplicatenpc: duplicate event %s::%s.\n",
nd_target->exname, nd_target->u.scr.label_list.name);
}
npc->timerevent_export(nd_target, i);
}
nd_target->u.scr.timerid = INVALID_TIMER;
}

script_pushint(st, 1);
return true;
}

Yh7ZEXZ.jpg


 
Back
Top