diff options
author | shennetsind <ind@henn.et> | 2013-08-04 12:19:25 -0300 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2013-08-08 15:07:40 -0300 |
commit | 6b9f58446c46877ecfc5fe40847636145acf5af8 (patch) | |
tree | 81b71aa95a47e611a5415528cf72efefe0d552b1 /src/plugins | |
parent | defac0ef9714121a872ab48c3f6c4ddd177ae509 (diff) | |
download | hercules-6b9f58446c46877ecfc5fe40847636145acf5af8.tar.gz hercules-6b9f58446c46877ecfc5fe40847636145acf5af8.tar.bz2 hercules-6b9f58446c46877ecfc5fe40847636145acf5af8.tar.xz hercules-6b9f58446c46877ecfc5fe40847636145acf5af8.zip |
HPM Update
- Custom Packet Support
- Custom Data Struct Support (currently append-able to map_session_data and socket_data)
- Char Server Support
- Login Server Support
http://hercules.ws/board/topic/1934-hercules-plugin-manager-update/
Documentation will soon be updated in http://hercules.ws/wiki/HPM
Signed-off-by: shennetsind <ind@henn.et>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/sample.c | 82 |
1 files changed, 78 insertions, 4 deletions
diff --git a/src/plugins/sample.c b/src/plugins/sample.c index 7f7528cb7..4a8402560 100644 --- a/src/plugins/sample.c +++ b/src/plugins/sample.c @@ -4,9 +4,15 @@ #include <stdio.h> #include <string.h> +#include <stdlib.h> + #include "../common/HPMi.h" +#include "../common/mmo.h" +#include "../common/socket.h" +#include "../common/malloc.h" #include "../map/script.h" #include "../map/pc.h" +#include "../map/clif.h" HPExport struct hplugin_info pinfo = { "Sample", // Plugin name @@ -26,18 +32,81 @@ BUILDIN(sample) {//script command 'sample(num);' - 1 param: struct script_state* CPCMD(sample) {//console command 'sample' - 1 param: char *line ShowInfo("I'm being run! arg -> '%s'\n",line?line:"NONE"); } -struct script_interface *script;/* used by script commands */ +struct sample_data_struct { + struct point lastMSGPosition; + unsigned int someNumber; +}; +/* sample packet implementation */ +/* cmd 0xf3 - it is a client-server existent id, for clif_parse_GlobalMessage */ +/* in this sample we do nothing and simply redirect */ +void sample_packet0f3(int fd) { + struct map_session_data *sd = session[fd]->session_data; + struct sample_data_struct *data; + + if( !sd ) return;/* socket didn't fully log-in? this packet shouldn't do anything then! */ + + ShowInfo("sample_packet0f3: Hello World! received 0xf3 for '%s', redirecting!\n",sd->status.name); + + /* sample usage of appending data to a socket_data (session[]) entry */ + if( !(data = HPMi->getFromSession(session[fd],HPMi->pid,0)) ) { + CREATE(data,struct sample_data_struct,1); + + data->lastMSGPosition.map = sd->status.last_point.map; + data->lastMSGPosition.x = sd->status.last_point.x; + data->lastMSGPosition.y = sd->status.last_point.y; + data->someNumber = rand()%777; + + ShowInfo("Created Appended session[] data, %d %d %d %d\n",data->lastMSGPosition.map,data->lastMSGPosition.x,data->lastMSGPosition.y,data->someNumber); + HPMi->addToSession(session[fd],data,HPMi->pid,0,true); + } else { + ShowInfo("Existent Appended session[] data, %d %d %d %d\n",data->lastMSGPosition.map,data->lastMSGPosition.x,data->lastMSGPosition.y,data->someNumber); + if( rand()%4 == 2 ) { + ShowInfo("Removing Appended session[] data\n"); + HPMi->removeFromSession(session[fd],HPMi->pid,0); + } + } + + /* sample usage of appending data to a map_session_data (sd) entry */ + if( !(data = HPMi->getFromMSD(sd,HPMi->pid,0)) ) { + CREATE(data,struct sample_data_struct,1); + + data->lastMSGPosition.map = sd->status.last_point.map; + data->lastMSGPosition.x = sd->status.last_point.x; + data->lastMSGPosition.y = sd->status.last_point.y; + data->someNumber = rand()%777; + + ShowInfo("Created Appended map_session_data data, %d %d %d %d\n",data->lastMSGPosition.map,data->lastMSGPosition.x,data->lastMSGPosition.y,data->someNumber); + HPMi->addToMSD(sd,data,HPMi->pid,0,true); + } else { + ShowInfo("Existent Appended map_session_data data, %d %d %d %d\n",data->lastMSGPosition.map,data->lastMSGPosition.x,data->lastMSGPosition.y,data->someNumber); + if( rand()%4 == 2 ) { + ShowInfo("Removing Appended map_session_data data\n"); + HPMi->removeFromMSD(sd,HPMi->pid,0); + } + } + + + clif->pGlobalMessage(fd,sd); +} /* run when server starts */ HPExport void plugin_init (void) { char *server_type; char *server_name; - - //get the symbols from the server + + /* core vars */ server_type = GET_SYMBOL("SERVER_TYPE"); server_name = GET_SYMBOL("SERVER_NAME"); + /* core interfaces */ + iMalloc = GET_SYMBOL("iMalloc"); + + /* map-server interfaces */ script = GET_SYMBOL("script"); - + clif = GET_SYMBOL("clif"); + + /* session[] */ + session = GET_SYMBOL("session"); + ShowInfo ("Server type is "); switch (*server_type) { @@ -59,6 +128,11 @@ HPExport void plugin_init (void) { if( HPMi->addCPCommand != NULL ) {//link our 'sample' console command HPMi->addCPCommand("this:is:a:sample",CPCMD_A(sample)); } + + if( HPMi->addPacket != NULL ) {//link our 'sample' packet to map-server + HPMi->addPacket(0xf3,-1,sample_packet0f3,hpClif_Parse,HPMi->pid); + } + } /* run when server is ready (online) */ HPExport void server_online (void) { |