As the titles says, I seen this on rathena and use it on my old emulator but I wonder if it is possible to convert this to hercules and can someone please convert this to a plugin, because the plugin feature is much better due to updating the emulator can conflict source codes, thanks in advance
As the titles says, I seen this on rathena and use it on my old emulator but I wonder if it is possible to convert this to hercules and can someone please convert this to a plugin, because the plugin feature is much better due to updating the emulator can conflict source codes, thanks in advance
Index: src/map/ping.c===================================================================--- src/map/ping.c (revision 0)+++ src/map/ping.c (working copy)@@ -0,0 +1,89 @@+#ifdef _DEBUG+#define new DEBUG_NEW+#undef THIS_FILE+static char THIS_FILE[] = __FILE__;+#endif++#include <WINSOCK2.H>+#define DEF_BUF_SIZE 1024 +#define IP_HEADER_SIZE 20 +#define ICMP_HEADER_SIZE 12 +typedef struct _ICMP_HEADER +{ + BYTE bType;+ BYTE bCode;+ USHORT nCheckSum;+ USHORT nId;+ USHORT nSequence;+ UINT nTimeStamp;+}ICMP_HEADER, *PICMP_HEADER; +USHORT GetCheckSum(LPBYTE lpBuff, DWORD dwSize)+{+ DWORD dwCheckSum = 0;+ USHORT* lpWord = (USHORT*)lpBuff; + while(dwSize > 1) + { + dwCheckSum += *lpWord++;+ dwSize -= 2;+ } + if(dwSize ==1) + dwCheckSum += *((LPBYTE)lpBuff);+ dwCheckSum = (dwCheckSum >> 16) + (dwCheckSum & 0XFFFF);+ return (USHORT)(~dwCheckSum); +} +BOOL Ping(char* lpDestIP, int *nRet_, int *nTime_)+{+ int nTime = 0;+ int ret = 0;+ char ICMPPack[ICMP_HEADER_SIZE] = {0};+ char szRcvBuff[DEF_BUF_SIZE] = {0};+ int i = 0;+ int nRet = 0;+ int nLen = 0;+ int nError = 0;+ SOCKET s;+ PICMP_HEADER pRcvHeader;+ SOCKADDR_IN SourceSockAddr;+ SOCKADDR_IN DestSockAddr;+ PICMP_HEADER pICMPHeader;+ DestSockAddr.sin_family = AF_INET;+ DestSockAddr.sin_addr.S_un.S_addr = inet_addr(lpDestIP);+ DestSockAddr.sin_port = htons(0);+ pICMPHeader = (PICMP_HEADER)ICMPPack; + pICMPHeader->bType = 8;+ pICMPHeader->bCode = 0;+ pICMPHeader->nId = (USHORT)GetCurrentProcessId();+ pICMPHeader->nCheckSum = 0;+ pICMPHeader->nTimeStamp = 0;+ s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);+ nTime = 1000;+ ret = setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTime, sizeof(nTime));+ for(i=0; i <1; i++) + { + pICMPHeader->nCheckSum = 0;+ pICMPHeader->nSequence = i;+ pICMPHeader->nTimeStamp = GetTickCount();+ pICMPHeader->nCheckSum = GetCheckSum((LPBYTE)(ICMPPack), ICMP_HEADER_SIZE);+ nRet = sendto(s, ICMPPack, ICMP_HEADER_SIZE, 0, (SOCKADDR*)&DestSockAddr, sizeof(DestSockAddr)); + if(nRet == SOCKET_ERROR)+ { + return FALSE;+ } + nLen = sizeof(SOCKADDR_IN);+ if(nRet == SOCKET_ERROR)+ {+ return FALSE;+ }+ nRet = recvfrom(s, szRcvBuff,DEF_BUF_SIZE,0,(SOCKADDR*)&SourceSockAddr,&nLen);+ if(nRet == SOCKET_ERROR)+ {+ return FALSE;+ }+ pRcvHeader = (PICMP_HEADER)(szRcvBuff + IP_HEADER_SIZE);+ nTime = GetTickCount() - pRcvHeader->nTimeStamp;+ //printf("Return Message: %s bytes=%d time=%dmsn", inet_ntoa(SourceSockAddr.sin_addr), nRet, nTime);+ *nRet_ = nRet;+ *nTime_ = nTime;+ }+ return TRUE;+} No newline at end of fileIndex: src/map/script.c===================================================================--- src/map/script.c (revision 17101)+++ src/map/script.c (working copy)@@ -17323,6 +17323,25 @@ return 0; } +#include "ping.c"+BUILDIN_FUNC(ping) {+ //+ const char *name;+ char _cmd[500];+ int nRet=0, nTime=0;+ //+ //+ name = script_getstr(st,2);+ Ping((char *)name, &nRet, &nTime);+ if( nRet <= 0 || nTime < 0 )+ sprintf(_cmd,"Return Message: %s fail to connect", (char *)name);+ else+ sprintf(_cmd,"Return Message: %s bytes=%d time=%dmsn", (char *)name, nRet, nTime);+ //+ script_pushstrcopy(st, _cmd);+ return 0;+}+ // declarations that were supposed to be exported from npc_chat.c #ifdef PCRE_SUPPORT BUILDIN_FUNC(defpattern);@@ -17334,6 +17353,7 @@ /// script command definitions /// for an explanation on args, see add_buildin_func struct script_function buildin_func[] = {+ BUILDIN_DEF(ping,"s"), // NPC interaction BUILDIN_DEF(mes,"s*"), BUILDIN_DEF(next,""),Edit: Can you move this to the Plugin section, sorry
Edited by thannaShare this post
Link to post
Share on other sites