JaranSwitch0101

Members
  • Content Count

    43
  • Avg. Content Per Day

    0
  • Joined

Community Reputation

4 Neutral

About JaranSwitch0101

  • Rank
    Drops

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I hope to know how to add navigation to find custom npc in maps? Please,help...
  2. When I saw this map, I had a melody of this song in my mind... [youtube]
  3. For only script Campfire,right? It's make script error when open my sever buit,Thanks for your suggestion!
  4. When @Emistry share it,I was very excited When i add system for my server,i don't know where i'm wrong? My npc.cpp,before add the source: http:// My npc.cpp after add the source: http:// My npc.hpp: http:// My script.inc: // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder /** * Custom Script Commands * Place the body of custom script commands in this file. * Format: * BUILDIN_FUNC(command_name) * { * <code>; * } **/ //BUILDIN_FUNC(example) //{ // ShowInfo("buildin_example: It works!\n"); // script_pushint(st,1); // return 0; //} /*========================================== * Duplicate any npc on live server * duplicatenpc "<Source NPC name>","<New NPC shown name>","<New NPC hidden name>","<mapname>",<map_x>,<map_y>,<dir>{, spriteid{, map_xs, map_ys}}}; *------------------------------------------*/ BUILDIN_FUNC(duplicatenpc) { int map_x = script_getnum(st, 6); int map_y = script_getnum(st, 7); int dir = script_getnum(st, 8); int spriteid, map_xs = -1, map_ys = -1, sourceid, type, mapid, i; const char *sourcename = script_getstr(st, 2); const char *new_shown_name = script_getstr(st, 3); const char *new_hidden_name = script_getstr(st, 4); const char *mapname = script_getstr(st, 5); char new_npc_name[24] = ""; struct npc_data *nd_source, *nd_target; if(script_hasdata(st, 10)) map_xs = (script_getnum(st, 10) < -1) ? -1 : script_getnum(st, 10); if(script_hasdata(st, 11)) map_ys = (script_getnum(st, 11) < -1) ? -1 : script_getnum(st, 10); if(map_xs == -1 && map_ys != -1) map_xs = 0; if(map_xs != - 1 && map_ys == -1) map_ys = 0; if(strlen(new_shown_name) + strlen(new_hidden_name) > NAME_LENGTH) { ShowError("buildin_duplicatenpc: New NPC shown name + New NPC hidden name is too long (max %d chars). (%s)\n", sourcename, NAME_LENGTH); script_pushint(st, 0); return SCRIPT_CMD_FAILURE; } nd_source = npc_name2id(sourcename); if(script_hasdata(st, 9)) spriteid = (script_getnum(st, 9) < -1) ? -1 : script_getnum(st, 9); else spriteid = nd_source->class_; if(nd_source == NULL) { ShowError("buildin_duplicatenpc: original npc not found for duplicate. (%s)\n", sourcename); script_pushint(st, 0); return SCRIPT_CMD_FAILURE; } sourceid = nd_source->bl.id; type = nd_source->subtype; mapid = map_mapname2mapid(mapname); if(mapid < 0) { ShowError("buildin_duplicatenpc: target map not found. (%s)\n", mapname); script_pushint(st, 0); return SCRIPT_CMD_FAILURE; } CREATE(nd_target, struct npc_data, 1); strcat(new_npc_name, new_shown_name); strncat(new_npc_name, "#", 1); strncat(new_npc_name, new_hidden_name, strlen(new_hidden_name)); safestrncpy(nd_target->name, new_npc_name , sizeof(nd_target->name)); safestrncpy(nd_target->exname, new_npc_name, sizeof(nd_target->exname)); nd_target->bl.prev = nd_target->bl.next = NULL; nd_target->bl.m = mapid; nd_target->bl.x = map_x; nd_target->bl.y = map_y; nd_target->bl.id = npc_get_new_npc_id(); nd_target->class_ = spriteid; 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 NPCTYPE_SCRIPT: nd_target->u.scr.xs = map_xs; nd_target->u.scr.ys = map_ys; 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; break; case NPCTYPE_SHOP: case NPCTYPE_CASHSHOP: case NPCTYPE_ITEMSHOP: case NPCTYPE_POINTSHOP: case NPCTYPE_MARKETSHOP: nd_target->u.shop.shop_item = nd_source->u.shop.shop_item; nd_target->u.shop.count = nd_source->u.shop.count; break; case NPCTYPE_WARP: if( !battle_config.warp_point_debug ) nd_target->class_ = JT_WARPNPC; else nd_target->class_ = JT_GUILD_FLAG; nd_target->u.warp.xs = map_xs; nd_target->u.warp.ys = map_ys; 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; nd_target->trigger_on_hidden = nd_source->trigger_on_hidden; break; } map_addnpc(mapid, nd_target); status_change_init(&nd_target->bl); unit_dataset(&nd_target->bl); nd_target->ud.dir = dir; npc_setcells(nd_target); map_addblock(&nd_target->bl); if(spriteid >= 0) { status_set_viewdata(&nd_target->bl, nd_target->class_); clif_spawn(&nd_target->bl); } strdb_put(npcname_db, nd_target->exname, nd_target); if(type == NPCTYPE_SCRIPT) { for (i = 0; i < nd_target->u.scr.label_list_num; i++) { char* lname = nd_target->u.scr.label_list[i].name; int pos = nd_target->u.scr.label_list[i].pos; if ((lname[0] == 'O' || lname[0] == 'o') && (lname[1] == 'N' || lname[1] == 'n')) { struct event_data* ev; char buf[NAME_LENGTH*2+3]; snprintf(buf, ARRAYLENGTH(buf), "%s::%s", nd_target->exname, lname); CREATE(ev, struct event_data, 1); ev->nd = nd_target; ev->pos = pos; if(strdb_put(ev_db, buf, ev)) ShowWarning("npc_parse_duplicate : duplicate event %s (%s)\n", buf, nd_target->name); } } for (i = 0; i < nd_target->u.scr.label_list_num; i++) { int t = 0, k = 0; char *lname = nd_target->u.scr.label_list[i].name; int pos = nd_target->u.scr.label_list[i].pos; if (sscanf(lname, "OnTimer%d%n", &t, &k) == 1 && lname[k] == '\0') { struct npc_timerevent_list *te = nd_target->u.scr.timer_event; int j, k = nd_target->u.scr.timeramount; if (te == NULL) te = (struct npc_timerevent_list *)aMalloc(sizeof(struct npc_timerevent_list)); else te = (struct npc_timerevent_list *)aRealloc( te, sizeof(struct npc_timerevent_list) * (k+1) ); for (j = 0; j < k; j++) { if (te[j].timer > t) { memmove(te+j+1, te+j, sizeof(struct npc_timerevent_list)*(k-j)); break; } } te[j].timer = t; te[j].pos = pos; nd_target->u.scr.timer_event = te; nd_target->u.scr.timeramount++; } } nd_target->u.scr.timerid = INVALID_TIMER; } script_pushint(st, 1); return SCRIPT_CMD_SUCCESS; } /*========================================== * Remove any npc duplicate on live server * duplicateremove "<NPC name>"; *------------------------------------------*/ BUILDIN_FUNC(duplicateremove) { struct npc_data *nd; if(script_hasdata(st, 2)) { nd = npc_name2id(script_getstr(st, 2)); if(nd == NULL) { script_pushint(st, -1); return SCRIPT_CMD_FAILURE; } } else nd = (struct npc_data *)map_id2bl(st->oid); if(!nd->src_id) npc_unload_duplicates(nd); else npc_unload(nd,true); script_pushint(st, 1); return SCRIPT_CMD_SUCCESS; } My script_def.inc: // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder /** * Custom Script Commands * Place the definition of custom script commands in this file. * Format: * BUILDIN_DEF(command_name,"parameters"), **/ //BUILDIN_DEF(example,""), BUILDIN_DEF(duplicatenpc, "ssssiii???"), BUILDIN_DEF(duplicateremove, "?"), My item_db: 902,Tree_Root,Tree Root,2,12,,10,,,,,,,,,,,,,{ callfunc("func_UpdateCampFire", rand(1, 5), 30, rand(1,8)); },{},{} 7035,Matchstick,Matchstick,2,100,,10,,,,,,,,,,,,,{ callfunc("func_CreateCampFire", rand(2, 5), 60, rand(1,10)); },{},{} 7850,Wooden_Block_,Wooden Block,2,20,,100,,,,,,,,,,,,,{ callfunc("func_UpdateCampFire", rand(3, 10), 60, rand(5,15)); },{},{} When I build for src, I don't see any problems except this when opening the server ... http:// and it doesn't work at all without seeing any error messages Please help,I really like this system
  5. Thanks! I waited this monsters so long time http://
  6. It's nice! Can you add a description line for each mission before performing monster hunting missions? It will be more perfect if there are items hunting...
  7. Can add functions like type ... When it is time to publish the results, it will notify the entire server of the result and the winner's name. Rewards will automatically transfer directly to the winner's mailbox. You can do it? And when the player wants to meet npc confirm the result, it will report the result and the lucky winner If you have these extra features, than the NPC Raffle will be awesome !! http://
  8. Can you do a monster hunting minigame in a short time? and if the player fails a certain number of times or runs out of time according to the rules, that player loses !!
  9. I just want to know how to add slash effects for Custom weapons Like other normal swords... Please,help...
  10. Do you have model moa and texture moa of this map?
  11. something wrong here... @keough http:// http:// Please,check it...Thanks for sharing!!
  12. Please show me!!Where i wrong? When i apply your code with my src? @Emistry [ I really like your campfire system ] My script.inc: // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder /** * Custom Script Commands * Place the body of custom script commands in this file. * Format: * BUILDIN_FUNC(command_name) * { * <code>; * } **/ //BUILDIN_FUNC(example) //{ // ShowInfo("buildin_example: It works!\n"); // script_pushint(st,1); // return 0; //} /*========================================== * Duplicate any npc on live server * duplicatenpc "<Source NPC name>","<New NPC shown name>","<New NPC hidden name>","<mapname>",<map_x>,<map_y>,<dir>{, spriteid{, map_xs, map_ys}}}; *------------------------------------------*/ BUILDIN_FUNC(duplicatenpc) { int map_x = script_getnum(st, 6); int map_y = script_getnum(st, 7); int dir = script_getnum(st, 8); int spriteid, map_xs = -1, map_ys = -1, sourceid, type, mapid, i; const char *sourcename = script_getstr(st, 2); const char *new_shown_name = script_getstr(st, 3); const char *new_hidden_name = script_getstr(st, 4); const char *mapname = script_getstr(st, 5); char new_npc_name[24] = ""; struct npc_data *nd_source, *nd_target; if(script_hasdata(st, 10)) map_xs = (script_getnum(st, 10) < -1) ? -1 : script_getnum(st, 10); if(script_hasdata(st, 11)) map_ys = (script_getnum(st, 11) < -1) ? -1 : script_getnum(st, 10); if(map_xs == -1 && map_ys != -1) map_xs = 0; if(map_xs != - 1 && map_ys == -1) map_ys = 0; if(strlen(new_shown_name) + strlen(new_hidden_name) > NAME_LENGTH) { ShowError("buildin_duplicatenpc: New NPC shown name + New NPC hidden name is too long (max %d chars). (%s)\n", sourcename, NAME_LENGTH); script_pushint(st, 0); return SCRIPT_CMD_FAILURE; } nd_source = npc_name2id(sourcename); if(script_hasdata(st, 9)) spriteid = (script_getnum(st, 9) < -1) ? -1 : script_getnum(st, 9); else spriteid = nd_source->class_; if(nd_source == NULL) { ShowError("buildin_duplicatenpc: original npc not found for duplicate. (%s)\n", sourcename); script_pushint(st, 0); return SCRIPT_CMD_FAILURE; } sourceid = nd_source->bl.id; type = nd_source->subtype; mapid = map_mapname2mapid(mapname); if(mapid < 0) { ShowError("buildin_duplicatenpc: target map not found. (%s)\n", mapname); script_pushint(st, 0); return SCRIPT_CMD_FAILURE; } CREATE(nd_target, struct npc_data, 1); strcat(new_npc_name, new_shown_name); strncat(new_npc_name, "#", 1); strncat(new_npc_name, new_hidden_name, strlen(new_hidden_name)); safestrncpy(nd_target->name, new_npc_name , sizeof(nd_target->name)); safestrncpy(nd_target->exname, new_npc_name, sizeof(nd_target->exname)); nd_target->bl.prev = nd_target->bl.next = NULL; nd_target->bl.m = mapid; nd_target->bl.x = map_x; nd_target->bl.y = map_y; nd_target->bl.id = npc_get_new_npc_id(); nd_target->class_ = spriteid; 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 NPCTYPE_SCRIPT: nd_target->u.scr.xs = map_xs; nd_target->u.scr.ys = map_ys; 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; break; case NPCTYPE_SHOP: case NPCTYPE_CASHSHOP: case NPCTYPE_ITEMSHOP: case NPCTYPE_POINTSHOP: case NPCTYPE_MARKETSHOP: nd_target->u.shop.shop_item = nd_source->u.shop.shop_item; nd_target->u.shop.count = nd_source->u.shop.count; break; case NPCTYPE_WARP: if( !battle_config.warp_point_debug ) nd_target->class_ = JT_WARPNPC; else nd_target->class_ = JT_GUILD_FLAG; nd_target->u.warp.xs = map_xs; nd_target->u.warp.ys = map_ys; 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; nd_target->trigger_on_hidden = nd_source->trigger_on_hidden; break; } map_addnpc(mapid, nd_target); status_change_init(&nd_target->bl); unit_dataset(&nd_target->bl); nd_target->ud.dir = dir; npc_setcells(nd_target); map_addblock(&nd_target->bl); if(spriteid >= 0) { status_set_viewdata(&nd_target->bl, nd_target->class_); clif_spawn(&nd_target->bl); } strdb_put(npcname_db, nd_target->exname, nd_target); if(type == NPCTYPE_SCRIPT) { for (i = 0; i < nd_target->u.scr.label_list_num; i++) { char* lname = nd_target->u.scr.label_list[i].name; int pos = nd_target->u.scr.label_list[i].pos; if ((lname[0] == 'O' || lname[0] == 'o') && (lname[1] == 'N' || lname[1] == 'n')) { struct event_data* ev; char buf[NAME_LENGTH*2+3]; snprintf(buf, ARRAYLENGTH(buf), "%s::%s", nd_target->exname, lname); CREATE(ev, struct event_data, 1); ev->nd = nd_target; ev->pos = pos; if(strdb_put(ev_db, buf, ev)) ShowWarning("npc_parse_duplicate : duplicate event %s (%s)\n", buf, nd_target->name); } } for (i = 0; i < nd_target->u.scr.label_list_num; i++) { int t = 0, k = 0; char *lname = nd_target->u.scr.label_list[i].name; int pos = nd_target->u.scr.label_list[i].pos; if (sscanf(lname, "OnTimer%d%n", &t, &k) == 1 && lname[k] == '\0') { struct npc_timerevent_list *te = nd_target->u.scr.timer_event; int j, k = nd_target->u.scr.timeramount; if (te == NULL) te = (struct npc_timerevent_list *)aMalloc(sizeof(struct npc_timerevent_list)); else te = (struct npc_timerevent_list *)aRealloc( te, sizeof(struct npc_timerevent_list) * (k+1) ); for (j = 0; j < k; j++) { if (te[j].timer > t) { memmove(te+j+1, te+j, sizeof(struct npc_timerevent_list)*(k-j)); break; } } te[j].timer = t; te[j].pos = pos; nd_target->u.scr.timer_event = te; nd_target->u.scr.timeramount++; } } nd_target->u.scr.timerid = INVALID_TIMER; } script_pushint(st, 1); return SCRIPT_CMD_SUCCESS; } /*========================================== * Remove any npc duplicate on live server * duplicateremove "<NPC name>"; *------------------------------------------*/ BUILDIN_FUNC(duplicateremove) { struct npc_data *nd; if(script_hasdata(st, 2)) { nd = npc_name2id(script_getstr(st, 2)); if(nd == NULL) { script_pushint(st, -1); return SCRIPT_CMD_FAILURE; } } else nd = (struct npc_data *)map_id2bl(st->oid); if(!nd->src_id) npc_unload_duplicates(nd); else npc_unload(nd,true); script_pushint(st, 1); return SCRIPT_CMD_SUCCESS; } My script_def.inc: // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder /** * Custom Script Commands * Place the definition of custom script commands in this file. * Format: * BUILDIN_DEF(command_name,"parameters"), **/ //BUILDIN_DEF(example,""), BUILDIN_DEF(duplicatenpc, "ssssiii???"), BUILDIN_DEF(duplicateremove, "?"), My npc.cpp,before add code: http:// My npc.cpp,after add code: http:// My npc.hpp: http://
  13. When download the Campfire Script of @Emistry .I added the function for item_db as instructed in the Campfire script http:// My item_db: I also tried change Ragexe,But it still does not work