-
Content Count
44 -
Joined
-
Last visited
-
Days Won
5
Hyroshima last won the day on May 16 2022
Hyroshima had the most liked content!
About Hyroshima
-
Rank
Advanced Member
- Birthday 09/08/1992
Profile Information
-
Gender
Not Telling
-
Emulator
Hercules
Recent Profile Visitors
2350 profile views
-
Hyroshima started following MVP ranking Statue, [Showcase] Weapons, Shields and more, Array manipulation functions and and 3 others
-
Hyroshima reacted to a post in a topic: Ragnarok Offline Newbie Pack 2022 | Make your RO server in less then 5 minutes
-
-
-
when I want to round values I check if the remainder of the division is greater than 5. example: [email protected] = 237/7; [email protected]_r = 237%7; if([email protected]_r > 5) [email protected]++;
-
-
//Add a call function in item // callfunc "Boxx"; function script Boxx { //Item ID //== setarray [email protected][0],1108,2104,5011,2301,2404; setarray [email protected][0], 10, 10, 10, 7, 10; //check if you still have an item with a refine lower than 10 //== for(set [email protected],0; [email protected]<getarraysize([email protected]); set [email protected],[email protected]+1) if((getd("eqi_"[email protected][[email protected]])-1) < [email protected][[email protected]]) setarray [email protected][getarraysize([email protected])],[email protected][[email protected]]; //All max refined //== if(!getarraysize([email protected])){ dispbottom "Bye bye."; end; } set [email protected],rand(getarraysize([email protected])); set [email protected],getiteminfo([email protected][[email protected]],ITEMINFO_LOC); switch([email protected]) { case 2: set [email protected],EQI_HAND_R; break; case 16: set [email protected],EQI_ARMOR; break; case 32: set [email protected]t,EQI_HAND_L; break; case 64: set [email protected],EQI_SHOES; break; case 256: set [email protected],EQI_HEAD_TOP; break; } if(getd("eqi_"[email protected][[email protected]])) { if(!countitem([email protected][[email protected]])){ dispbottom "Item not found "+getitemname([email protected][[email protected]])+"!"; end; } if(getequipid([email protected]) != [email protected][[email protected]]) equip [email protected][[email protected]]; successrefitem [email protected]; setd "eqi_"[email protected][[email protected]],getd("eqi_"[email protected][[email protected]])+1; } else { setd "eqi_"[email protected][[email protected]],1; getitem [email protected][[email protected]],1; } end; } I haven't tested it, check if it will work as you wanted.
-
-
-
I made this model as you explained how it works. //Add a call function in item // callfunc "Boxx"; function script Boxx { //Item ID //== setarray [email protected][0],1108,2104,5011,2301,2404; //check if you still have an item with a refine lower than 10 //== for(set [email protected],0; [email protected]<getarraysize([email protected]); set [email protected],[email protected]+1) if((getd("eqi_"[email protected][[email protected]])-1) < 10) setarray [email protected][getarraysize([email protected])],[email protected][[email protected]]; //All refined +10 //== if(!getarraysize([email protected])){ dispbottom "Bye bye."; end; } set [email protected],rand(getarraysize([email protected])); set [email protected],getiteminfo([email protected][[email protected]],ITEMINFO_LOC); switch([email protected]) { case 2: set [email protected],EQI_HAND_R; break; case 16: set [email protected],EQI_ARMOR; break; case 32: set [email protected],EQI_HAND_L; break; case 64: set [email protected],EQI_SHOES; break; case 256: set [email protected],EQI_HEAD_TOP; break; } if(getd("eqi_"[email protected][[email protected]])) { if(!countitem([email protected][[email protected]])){ dispbottom "Item not found "+getitemname([email protected][[email protected]])+"!"; end; } if(getequipid([email protected]) != [email protected][[email protected]]) equip [email protected][[email protected]]; successrefitem [email protected]; setd "eqi_"[email protected][[email protected]],getd("eqi_"[email protected][[email protected]])+1; } else { setd "eqi_"[email protected][[email protected]],1; getitem [email protected][[email protected]],1; } end; }
-
-
Sorry but it's still a little confusing for me to understand. let's do it like this, tell me what you want the script to do, so that instead of looking for a solution for this model you mentioned, I can create one without using your base. 🙂 without using codes, just place an order xD
-
seria isso? prontera,151,169,5 script Alquimista Teleport 113,{ if(Class == 5 || Class == 18 || Class == 4019) { dispbottom "class: "+Class+""; mes "Você pode ser teleportado."; next; warp "prontera",150,150; end; } mes "Somente Alquimistas podem usar esse npc."; close; }
-
tell me a little more about it, I need to understand the reason and why you will call again and again until the 5 cases are completed. so that I can make a suitable solution for the situation.
-
-
-
-
I made this function for a friend and it can be useful in general. basically allows you to add wait time for something in npc, you can put different times in the same npc using the reference names. a utility to put in Global_Functions //== Function F_SetNpcCD ================================ // Add cooldown to access specific functions of a pc but not limited //== // callfunc "F_SetNpcCD","reference_name",time_in_seconds{,cooldown type}; // Examples: // callfunc("F_SetNpcCD","name_example0",45) // Adds 45 second cooldown at player level // callfunc("F_SetNpcCD","name_example1",85,1) // Adds 1 minute 25 second cooldown at player level // callfunc("F_SetNpcCD","name_example2",120,2) // Adds 2-minute cooldown at account level function script F_SetNpcCD { set [email protected]$,(countstr(getarg(0)," ")?replacestr(getarg(0)," ","_"):getarg(0)); set [email protected],getarg(1); set [email protected],getarg(2,0); setd(""+([email protected]==2?"#":"")+""[email protected]$+"_time",gettimetick(2)[email protected]); return; } //== Function F_GetNpcCD ================================ // Check npc access cooldown //== // callfunc "F_GetNpcCD","name_example"{,cooldown type}; // Examples: // callfunc("F_GetNpcCD","name_example0") // returns "NPC Cooldown: 00H:00M:45s (player)" // callfunc("F_GetNpcCD","name_example1",1) // returns "NPC Cooldown: 00H:01M:25s (player)" // callfunc("F_GetNpcCD","name_example2",2) // returns "NPC Cooldown: 00H:02M:00s (account)" function script F_GetNpcCD { set [email protected]$,(countstr(getarg(0)," ")?replacestr(getarg(0)," ","_"):getarg(0)); set [email protected],getarg(1,0); if(gettimetick(2) < getd(""+([email protected]==2?"#":"")+""[email protected]$+"_time")) { set [email protected],getd(""+([email protected]==2?"#":"")+""[email protected]$+"_time")-gettimetick(2); set [email protected],[email protected]/3600; set [email protected],([email protected]%3600)/60; set [email protected],[email protected]%60; dispbottom "NPC Cooldown: "+([email protected]<10?"0"[email protected]:[email protected])+"H:"+([email protected]<10?"0"[email protected]:[email protected])+"M:"+([email protected]<10?"0"[email protected]:[email protected])+"s ("+([email protected]==2?"account":"player")+")"; end; } return; }
-
-
-
-
-
try like this: OnPCDieEvent: if(strcharinfo(3) == MY_EVENT_MAP) { for(set [email protected],0; [email protected]<getarraysize($MY_VARIABLE); set [email protected],[email protected]+1) { if(getcharid(3) == $MY_VARIABLE[[email protected]]) { deletearray $MY_VARIABLE[[email protected]],1; dispbottom "Game over."; break; } } } end;
-
-
-
-
I think you didn't see when I said that I tested both in an old and current revision and both present the same result. the information is there, if anyone is willing to check the consistency or not, it doesn't matter.
-
apparently the problem is happening with rates at 1x (100) and the mob_db drop at 10000 (100%). I found there on git in edits 2 related problem, a friend who has an older revision that doesn't have the current formula doesn't have this problem. I did the same test in rA and it is normal without this problem. my friend's is like this (because it's a previous review it's normal): if (src) { //Drops affected by luk as a fixed increase [Valaris] if (battle_config.drops_by_luk) drop_rate += status_get_luk(src)*battle_config.drops_by_luk/100; //Drops affected by luk as a % increase [Skotlex] if (battle_config.drops_by_luk2) drop_rate += (int)(0.5+drop_rate*status_get_luk(src)*battle_config.drops_by_luk2/10000.); } and the current one is like this: if (src != NULL) { //Drops affected by luk as a fixed increase [Valaris] if (battle_config.drops_by_luk) drop_rate += status_get_luk(src) * battle_config.drops_by_luk / 100; //Drops affected by luk as a % increase [Skotlex] if (battle_config.drops_by_luk2) drop_rate += (int)(0.5 + drop_rate * status_get_luk(src) * battle_config.drops_by_luk2 / 10000.); and now it has this part: if (sd != NULL) { int drop_rate_bonus = 100; // When PK Mode is enabled, increase item drop rate bonus of each items by 25% when there is a 20 level difference between the player and the monster.[KeiKun] if (battle_config.pk_mode && (md->level - sd->status.base_level >= 20)) drop_rate_bonus += 25; // flat 25% bonus drop_rate_bonus += sd->dropaddrace[md->status.race] + (is_boss(src) ? sd->dropaddrace[RC_BOSS] : sd->dropaddrace[RC_NONBOSS]); // bonus2 bDropAddRace[KeiKun] if (sd->sc.data[SC_CASH_RECEIVEITEM] != NULL) // Increase drop rate if user has SC_CASH_RECEIVEITEM drop_rate_bonus += sd->sc.data[SC_CASH_RECEIVEITEM]->val1; if (sd->sc.data[SC_OVERLAPEXPUP] != NULL) drop_rate_bonus += sd->sc.data[SC_OVERLAPEXPUP]->val2; drop_rate = (int)(0.5 + drop_rate * drop_rate_bonus / 100.); // Limit drop rate, default: 90% drop_rate = min(drop_rate, 9000); } } I'm just reporting it and seeing if it's really a problem because I encountered this while doing a script and I wasn't getting the result I should have. https://github.com/HerculesWS/Hercules/pull/3083 https://github.com/HerculesWS/Hercules/pull/2983
-
Hi guys, maybe I'm doing something wrong that I haven't noticed yet. the issue is that I didn't change the drop rates, I just went there on mob_db (mob_id 1101) and changed the item rate to 10000 (100%), so the item should drop whenever I kill mob 1101 correct? As I show in the video this does not happen. I tested it in a review (19792) and in the current one and both present this result. tested on renewal and pre-renewal both with same result. https://streamable.com/r539vo apparently it is correct as per this: https://github.com/HerculesWS/Hercules/pull/2970/commits/6f7680b47bcffaf6613f72b462f545e11d40957d
-
-
You can turn the string into a number and then use the switch, give an example of how you would like to use that i make an example model.
-
Hey guys. So, for some time I was creating an instance with interactive npcs, that walk around the map to give more immersion in the story. I was using a client 2018, so I tried it on a newer client in 2020 and it didn't work, so I went looking for where it was working to try to resolve it. maximum client that is working: 2019-05-08cRagexe (any client after that does not work.) I did the test on both rA and Hercules, i got the same result as shown in the video below. (Left does not work & Right work!) I am a few days trying to see if I can solve it but I have not succeeded so far. code used for testing: prontera,155,178,3 script testeeee 1039,{ sleep 1500; setarray [email protected][0],151,155,158,155; setarray [email protected][0],175,173,175,178; freeloop(1); while(true) { npcwalkto [email protected][[email protected]],[email protected][[email protected]]; set [email protected],([email protected] >= getarraysize([email protected]) ? 0:[email protected]+1); sleep 2500; } freeloop(0); end; }
-
-
hi guys how do i change the formula of these statuses to be the same as pre-re? RE (based on weapon attack): bonus2 bAddClass,Class_All,20; PRE (based on AtkPower player): bonus2 bAddClass,Class_All,20;
-
I was using this mod from the normal goddameit on windows (vs), but when I tried to compile in linux he accused the lack of a windows library: WINSOCK2.H would it be possible to convert the ping.c code for linux centos and maintain the same functionality? ping.c #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=%dms\n", inet_ntoa(SourceSockAddr.sin_addr), nRet, nTime); *nRet_ = nRet; *nTime_ = nTime; } return TRUE; } original link: https://rathena.org/board/files/file/2770-ping-ip-address/