Jump to content

thanna

Members
  • Content Count

    212
  • Joined

  • Last visited

Everything posted by thanna

  1. 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
  2. I would stay with C too, instead of requesting recoding the emulator adapting to the programming language that almost all of us know, I would prefer adapting to its language which is C, learning it is better than asking someone to make it for you
  3. I would suggest that you use this small client that sir Judas release, its stable and work's fine http://herc.ws/board/topic/38-latest-kro-installation-small-client-package/
  4. update your herculse sir, all that errors will be fixed
  5. tested this patch and it works fine, hercules can be easily run on low end pc without and problems at all, thanks Ind and hercules community for the great work
  6. lol very cool update and very cool sig
  7. i am using 32bit Im using windows XP, maybe theres a .net framework required for this
  8. I tried it running but an error showed up saying R.o.L.ex is not a valid win32 application
  9. in hercules anyone can share their ideas not only just core dev's are making the emulator thats why hercules is the best community that there is
  10. I read it too somehow its a little bit confusing
  11. is there a better way of adding source mod which will not conflict on the upcoming hercules updates? if there is can someone teach it to me, thanks in advance
  12. hello Ms.Alexandria, I would like to ask if your data folder is the one used in this small client that sir Judas posted in this link http://herc.ws/board/topic/38-latest-kro-installation-small-client-package/
  13. thanks, looking forward on helping and learning from Hercules community
  14. thanks for the warm welcome
  15. Hi I'm thanna, its been a long time since I make a new server and I've waited years to finish my college decree and come back to develop a new server, I was a little confuse on how to start again but as I see this newly developed emulator Im interested and willing to help and learn, I hope that we'll help each other on this community -Thanna
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.