Kichi 6 Posted November 2, 2013 (edited) Helo guysi tried to convert my mod to HPM, i got error when compile,I certainly write in wrong formatThis is the MOD --- a/src/map/battleground.c+++ b/src/map/battleground.c@@ -187,6 +187,21 @@ int bg_create(unsigned short mapindex, short rx, short ry, const char *ev, const return bgd->bg_id; } +int bg_create2( unsigned short bg_id, unsigned short mapindex, short rx, short ry, const char *ev, const char *dev ) {+ struct battleground_data *bgd = bg->team_search(bg_id);+ if ( bgd ) return 0;+ CREATE(bgd, struct battleground_data, 1);+ bgd->bg_id = bg_id;+ bgd->count = 0;+ bgd->mapindex = mapindex;+ bgd->x = rx;+ bgd->y = ry;+ safestrncpy(bgd->logout_event, ev, sizeof(bgd->logout_event));+ safestrncpy(bgd->die_event, dev, sizeof(bgd->die_event));+ memset(&bgd->members, 0, sizeof(bgd->members));+ idb_put(bg->team_db, bg_id, bgd);+ return bgd->bg_id;+} int bg_team_get_id(struct block_list *bl) { nullpo_ret(bl); switch( bl->type ) {@@ -787,7 +802,7 @@ void battleground_defaults(void) { bg->arenas = 0; /* */ bg->team_db = NULL;- bg->team_counter = 0;+ bg->team_counter = 1000; /* */ bg->init = do_init_battleground; bg->final = do_final_battleground;@@ -813,6 +828,7 @@ void battleground_defaults(void) { bg->team_leave = bg_team_leave; bg->member_respawn = bg_member_respawn; bg->create = bg_create;+ bg->create2 = bg_create2; bg->team_get_id = bg_team_get_id; bg->send_message = bg_send_message; bg->send_xy_timer_sub = bg_send_xy_timer_sub;diff --git a/src/map/battleground.h b/src/map/battleground.hindex a5e5409..3236fd3 100644--- a/src/map/battleground.h+++ b/src/map/battleground.h@@ -102,7 +102,8 @@ struct battleground_interface { int (*team_get_id) (struct block_list *bl); int (*send_message) (struct map_session_data *sd, const char *mes, int len); int (*send_xy_timer_sub) (DBKey key, DBData *data, va_list ap);- int (*send_xy_timer) (int tid, int64 tick, int id, intptr_t data); + int (*send_xy_timer) (int tid, int64 tick, int id, intptr_t data);+ int (*create2) ( unsigned short bg_id, unsigned short mapindex, short rx, short ry, const char *ev, const char *dev ); /* */ void (*config_read) (void); };diff --git a/src/map/script.c b/src/map/script.cindex d51f27c..ff21ec7 100644--- a/src/map/script.c+++ b/src/map/script.c@@ -15851,7 +15851,52 @@ int axtoi(const char *hexStg) return true; }-+// createbgid <battleground ID>, <respawn map>, <respawn x>, <respawn y>, <On Quit event>, <On Death event>;+BUILDIN(createbgid) {+ if ( bg->create2( script_getnum(st,2), mapindex_name2id( script_getstr(st,3) ), script_getnum(st,4), script_getnum(st,5), script_getstr(st,6), script_getstr(st,7) ) > 0 )+ script_pushint( st, script_getnum(st,2) );+ else+ script_pushint( st, 0 );+ return 0;+}+ +// setbgid <battleground ID> {, <player name> };+BUILDIN(setbgid) {+ unsigned short bg_id = script_getnum(st,2);+ struct battleground_data *bgd = bg->team_search(bg_id);+ TBL_PC* sd;+ if ( bg_id < 0 || bg_id > 1000 ) {+ script_pushint( st, -4 );+ return 0;+ }+ if ( script_hasdata(st,3) ) + sd = map->nick2sd( script_getstr(st,3) );+ else+ sd = script_rid2sd(st);+ if ( sd == NULL ) {+ script_pushint( st, -3 );+ return 0;+ }+ if ( bg_id > 0 && bg == NULL ) {+ script_pushint( st, -1 );+ return 0;+ }+ if ( sd->bg_id == bg_id && bg_id != 0 ) {+ script_pushint( st, -5 );+ return 0;+ }+ if ( sd->bg_id )+ bg->team_leave(sd,0);+ if ( bg_id == 0 ) {+ script_pushint( st, 0 );+ return 0;+ }+ if ( bg->team_join( bg_id, sd ) == 0 )+ script_pushint( st, -2 );+ else+ script_pushint( st, bg_id );+ return 0;+} /*========================================== * Instancing Script Commands *------------------------------------------*/@@ -18061,7 +18106,9 @@ void script_parse_builtin(void) { BUILDIN_DEF(bg_get_data,"ii"), BUILDIN_DEF(bg_getareausers,"isiiii"), BUILDIN_DEF(bg_updatescore,"sii"),- + //custom bg+ BUILDIN_DEF(createbgid,"isiiss"),+ BUILDIN_DEF(setbgid,"i?"), // Instancing BUILDIN_DEF(instance_create,"si?"), BUILDIN_DEF(instance_destroy,"?"), and This is the HPM // Copyright (c) Hercules Dev Team, licensed under GNU GPL.// See the LICENSE file// Sample Hercules Plugin#include <stdio.h>#include <stdlib.h>#include <string.h>#include "../common/HPMi.h"#include "../common/mmo.h"#include "../common/mapindex.h"#include "../common/mapindex.c"#include "../map/script.h"#include "../map/pc.h"#include "../map/battle.h"#include "../map/status.h"#include "../map/map.h"#include "../map/battleground.h"HPExport struct hplugin_info pinfo = { "BG2",// Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.0", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated)};static int bg_create2( unsigned short bg_id, unsigned short mapindex, short rx, short ry, const char *ev, const char *dev ) { struct battleground_data *bgd = bg->team_search(bg_id); if ( bgd ) return 0; CREATE(bgd, struct battleground_data, 1); bgd->bg_id = bg_id; bgd->count = 0; bgd->mapindex = mapindex; bgd->x = rx; bgd->y = ry; safestrncpy(bgd->logout_event, ev, sizeof(bgd->logout_event)); safestrncpy(bgd->die_event, dev, sizeof(bgd->die_event)); memset(&bgd->members, 0, sizeof(bgd->members)); idb_put(bg->team_db, bg_id, bgd); return bgd->bg_id;}/* to check for the bonus *//* createbgid <battleground ID>, <respawn map>, <respawn x>, <respawn y>, <On Quit event>, <On Death event>;*/BUILDIN(createbgid) { int mapindex; mapindex = mapindex_name2id( script_getstr(st,3) ); if ( bg->create2( script_getnum(st,2), mapindex, script_getnum(st,4), script_getnum(st,5), script_getstr(st,6), script_getstr(st,7) ) > 0 ) script_pushint( st, script_getnum(st,2) ); else script_pushint( st, 0 ); return 0;} // setbgid <battleground ID> {, <player name> };BUILDIN(setbgid) { unsigned short bg_id = script_getnum(st,2); struct battleground_data *bgd = bg->team_search(bg_id); TBL_PC* sd; if ( bg_id < 0 || bg_id > 1000 ) { script_pushint( st, -4 ); return 0; } if ( script_hasdata(st,3) ) sd = map->nick2sd( script_getstr(st,3) ); else sd = script->rid2sd(st); if ( sd == NULL ) { script_pushint( st, -3 ); return 0; } if ( bg_id > 0 && bg == NULL ) { script_pushint( st, -1 ); return 0; } if ( sd->bg_id == bg_id && bg_id != 0 ) { script_pushint( st, -5 ); return 0; } if ( sd->bg_id ) bg->team_leave(sd,0); if ( bg_id == 0 ) { script_pushint( st, 0 ); return 0; } if ( bg->team_join( bg_id, sd ) == 0 ) script_pushint( st, -2 ); else script_pushint( st, bg_id ); return 0;}/*void battleground_defaults(void) { bg->team_counter = 1000; bg->create2 = bg_create2;}*/HPExport void plugin_init (void){ map = GET_SYMBOL("map"); script = GET_SYMBOL("script"); bg = GET_SYMBOL("battleground"); skill = GET_SYMBOL("skill"); pc = GET_SYMBOL("pc"); battle = GET_SYMBOL("battle"); if( HPMi->addScript != NULL ) {//link our 'sample' script command HPMi->addScript("createbgid","isiiss",BUILDIN_A(createbgid)); HPMi->addScript("setbgid","i?",BUILDIN_A(setbgid)); }} im new using HPM What i've tried apply battleground.c and battleground.h and script.c in HPM NO WORK apply "void battleground_defaults" to core and leave other in HPM NO WORK apply mod to battleground.c and battleground.h and leave script.c in HPM NO WORK including mapindex.c < NO ERROR, but the map CRASH and much other NO WORK ---- INFO---- This mod work when applied directly to core ---- EDIT ------- Update Plugin and Mod Edited November 2, 2013 by Kichi Quote Share this post Link to post Share on other sites
0 Mhalicot 392 Posted December 11, 2013 havnt test it yet, try this // Copyright (c) Hercules Dev Team, licensed under GNU GPL.// See the LICENSE file// Sample Hercules Plugin#include <stdio.h>#include <stdlib.h>#include <string.h>#include "../common/HPMi.h"#include "../map/script.h"#include "../map/pc.h"#include "../map/map.h"#include "../map/battleground.h"HPExport struct hplugin_info pinfo = { "BG2",// Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.0", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated)};static int bg_create2( unsigned short bg_id, unsigned short mapindex, short rx, short ry, const char *ev, const char *dev ) { struct battleground_data *bgd = bg->team_search(bg_id); if ( bgd ) return 0; CREATE(bgd, struct battleground_data, 1); bgd->bg_id = bg_id; bgd->count = 0; bgd->mapindex = mapindex; bgd->x = rx; bgd->y = ry; safestrncpy(bgd->logout_event, ev, sizeof(bgd->logout_event)); safestrncpy(bgd->die_event, dev, sizeof(bgd->die_event)); memset(&bgd->members, 0, sizeof(bgd->members)); idb_put(bg->team_db, bg_id, bgd); return bgd->bg_id;}/* to check for the bonus *//* createbgid <battleground ID>, <respawn map>, <respawn x>, <respawn y>, <On Quit event>, <On Death event>;*/BUILDIN(createbgid) { int map_index; const char* str = script_getstr(st,3); map_index = mapindex->name2id(str); if ( bg_create2( script_getnum(st,2), map_index, script_getnum(st,4), script_getnum(st,5), script_getstr(st,6), script_getstr(st,7) ) > 0 ) script_pushint( st, script_getnum(st,2) ); else script_pushint( st, 0 ); return true;} // setbgid <battleground ID> {, <player name> };BUILDIN(setbgid) { unsigned short bg_id = script_getnum(st,2); struct battleground_data *bgd = bg->team_search(bg_id); TBL_PC* sd; if ( bg_id < 0 || bg_id > 1000 ) { script_pushint( st, -4 ); return 0; } if ( script_hasdata(st,3) ) sd = map->nick2sd( script_getstr(st,3) ); else sd = script->rid2sd(st); if ( sd == NULL ) { script_pushint( st, -3 ); return 0; } if ( bg_id > 0 && bg == NULL ) { script_pushint( st, -1 ); return 0; } if ( sd->bg_id == bg_id && bg_id != 0 ) { script_pushint( st, -5 ); return 0; } if ( sd->bg_id ) bg->team_leave(sd,0); if ( bg_id == 0 ) { script_pushint( st, 0 ); return 0; } if ( bg->team_join( bg_id, sd ) == 0 ) script_pushint( st, -2 ); else script_pushint( st, bg_id ); return true;}/*void battleground_defaults(void) { bg->team_counter = 1000; bg->create2 = bg_create2;}*/HPExport void plugin_init (void){ map = GET_SYMBOL("map"); mapindex = GET_SYMBOL("mapindex"); bg = GET_SYMBOL("battleground"); pc = GET_SYMBOL("pc"); addScriptCommand("createbgid","isiiss",createbgid); addScriptCommand("setbgid","i?",setbgid);} Quote Share this post Link to post Share on other sites
Helo guys
i tried to convert my mod to HPM, i got error when compile,
I certainly write in wrong format
This is the MOD
and This is the HPM
im new using HPM
What i've tried
---- INFO----
This mod work when applied directly to core
---- EDIT -------
Update Plugin and Mod
Edited by KichiShare this post
Link to post
Share on other sites