Jump to content

ProjectX

Members
  • Content Count

    21
  • Joined

  • Last visited

Posts posted by ProjectX


  1. Need some help with ITEM LINK. When we link an item in an INPUT the .@variablestring$ looks like this. (Example: S><ITEML>0004811iL&1v(00(00(00(00</ITEML> OFFER )
    My question is how can I get the value of the encrypted ITEML as a plain string? 

    So that my .@variabletring$ will just have S>Grand Circlet as value.

    Hope that make sense.

     


  2. Thanks. Love reading your insight. 

    I just want to make sure the answer to my question about reading what's inside the variable.

    if this is my variable .@encrypted$ in the NPC. Can BOT read its value?
    Because if not, there's no way they can decrypt it. OR if they can they also need to decrypt it first because the value inside is also encrypted, the value exposed in the URL parameter needs to be decrypted as well before it shows on the webpage or before they know the real value. But of course, they can scrape maybe the value from the web page but that's something that requires more resources which maybe not worth it unless I have 2 to 5k unique players. 
     

     


  3. That's good news if BOT can't read what's on the variable's value. What I'm going to do is encrypt a bot code and send it to a browser, the PHP will decrypt back the code, and the player will input the value to the input.


    So let's say I have .@encrypted$ string which is an encrypted string of a real value of 5 digit numbers. (e.g 27524 will have an encrypted value of 5754565A57)
    The user will get the decrypted value in the browser and will get a match if typed correctly in an NPC input.

    Do you think BOT can bypass the encryption? Take note that this value is not displayed anywhere in the NPC dialog but the encrypted value is appended to the <URL> so PHP can decrypt it.

    And this NPC is constantly moving around where only real players can follow and click. BOT can see the NPC ID but move to it's location is the issue since the location is changing every second, so if herc only allows a click when the bot is near the NPC then it will definitely give a hard time to the bot, especially on a time pressure situation :)


  4. Thank you. That's actually the goal. BOT has everything it needs to send a packet, but having difficulty finding the right NPC unless you're human playing will make it hard to bypass the security.
    Changing NPCs so it will have difficulty getting constant GID, and monsters around, if BOT is set up to attack all then it won't get a chance to find the NPC.

    Also thinking of another way that is almost impossible to bypass using Webhook but is not supported atm. Not even sure if it can be integrated.


  5. 22 hours ago, KirieZ said:

     

    BUT, on the other hand, Hercules does have measures to prevent those kinds of exploits, it won't simply accept the client request. Before executing the NPC, hercules will ensure the player is close enough to that NPC.

     

    So the answer is: It could try to, but it will be forced to be in acceptable distance in order to really work (due to Hercules checks)


    Wow someone replied. Thank you so much. So based on this, BOT can Identify the NPC GID but needs to go near it so herc allow to send the packet. (do I need to code it or it is just the way it is right now without an extra script?)

     

     

    22 hours ago, KirieZ said:

    I don't know the details inside OpenKore, but it will receive info on every unit that enters, moves or leaves the near area, because hercules has to send that to a normal client, and openkore does need that info if it wants to interact with something (because of the GID I mentioned before)

     

    It is also able to communicate with NPCs, move to coordinates, and etc just like a normal client does. That's how it works in order to interact with RO world. It will send the same packets a normal client needs to send in order to perform the same operations.

     

    It can even tell about NPCs that has invisible sprites if Hercules is sending them to the client :) 

     

    Given that it knows the position of everything, telling if something is in the screen would be possible if you know your position and the other unit position, it is a simple distance in 2d space. also several clients (if not all) relies on Hercules sending enter/leave packets, which controls what is in the near area.

     

    There might be features that are not fully coded in OpenKore, like some specific UI or things like that. But this would be more of a "not implemented yet" (just like Hercules misses some features the client has), rather than a "it can't do that"


    Hmm.. then maybe other distractions can also help fool the BOT like monsters and a constantly changing NPC to make it hard for the BOT to identify the GID.


  6. Can I ask a question about BOT?

     

    ~ Can both communicate to an NPC even if it's not visible on the screen? (They are both in the same MAP it is just that the NPC is not visible on screen or further in terms of CELL, because it's moving or changing coordinates.)

    ~ Can BOT identify the NPC on the screen or the entire map? (some kind of ID? How?) and click it or go to the location to communicate? 

    Coz I only know they can only go to coordinates and talk to that NPC?


  7. I'm trying to have knowledge of how the openkore bot works, to be able to come up with something on how to prevent it. (Hopefully).
    Coz just wondering that maybe Gepard got bypassed by some players since there are still lots of bots on the server I know. 

     

    Here are some of the questions I want to know ~

     

    ~ Can both communicate to an NPC even if it's not visible on the screen? (They are both in the same MAP it is just that the NPC is not visible on screen because it's moving or changing coordinates.)

    ~ Can BOT identify the NPC on the screen (some kind of ID? How?) and click it or go to the location to communicate? 

     

    Hopefully, someone knowledgeable can help answer this.
     


  8. 7 minutes ago, chojuro said:

    are you wearing katar but it shows dagger? maybe you need to equip same weapon class for this?

    Sorry mixed it up. The real problem is when you're wearing a DAGGER sprite it won't show up for both hands and will use the default dagger so the only solution to this right now is to use a katar costume weapon that looks like a dagger hehehe...


  9. I just want to have this discussion since we rarely have this kind of topic in this community. 
    The main objective here is to know which is really good DDOS protection that WORKS, and how much are we talking about here.

    Based on my research, servers with a huge population are using Path Network as their main DDOS protection and I tested it myself during one of the openings of I think one of the most successful launching of a server withstand any DDOS attack.
    I am pretty sure it's under attack during that time. So my conclusion is this protection they have is really effective, I just want to know more details like pricing, how to avail, any alternatives, maybe it can help more people if someone share their own experience.

    BTW, Already inquired about their service and just waiting for reply. Will share it here soon...


  10. 15 hours ago, Neffletics said:

    I changed the time slots to be in 30-minute intervals rather than hourly increments.

    Here's the code. I haven't tested it. Please let us know if it works. ~

    case 1: mes "[New Session]"; if (.Size > 127) { mes "You have already reached the maximum of 32 sessions."; next; break; } mes "Select a day."; next; set .@day, select(" ~ "+implode(.Days$,": ~ "))-1; mes "[New Session]"; mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000."; next; set .@menu$,""; for(set .@i,0; .@i<47; set .@i,.@i+2) set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":"; set .@start, select(.@menu$)-1; mes "[New Session]"; mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000."; next; set .@menu$,""; for(set .@i,.@start+1; .@i<48; set.@i,.@i+2) set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":"; set .@end, select(.@menu$)+.@start; for(set .@i,0; .@i<.Size; set .@i,.@i+4) if (.@day == $WOE_CONTROL[.@i] && ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) || (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) || (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) { mes "[New Session]"; mes "The chosen times overlap with an existing session."; next; set .@d,1; break; } if (.@d) { set .@d,0; break; }

    
    case 1:
    			mes "[New Session]";
    			if (.Size > 127) {
    				mes "You have already reached the maximum of 32 sessions.";
    				next;
    				break;
    			}
    			mes "Select a day.";
    			next;
    			set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
    			mes "[New Session]";
    			mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
    			next;
    			set .@menu$,"";
    			for(set .@i,0; .@i<47; set .@i,.@i+2)
    				set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
    			set .@start, select(.@menu$)-1;
    			mes "[New Session]";
    			mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
    			next;
    			set .@menu$,"";
    			for(set .@i,.@start+1; .@i<48; set.@i,.@i+2)
    				set .@menu$, .@menu$+" ~ "+Add_Zero(floor(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
    			set .@end, select(.@menu$)+.@start;
    			for(set .@i,0; .@i<.Size; set .@i,.@i+4)
    				if (.@day == $WOE_CONTROL[.@i] &&
    				   ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
    				    (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
    				    (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
    					mes "[New Session]";
    					mes "The chosen times overlap with an existing session.";
    					next;
    					set .@d,1;
    					break;
    				}
    			if (.@d) { set .@d,0; break; }



     


    Thank you for trying. I got an error on the floor() part I changed it to atoi but checking I got this menu and the time is not matching either.

     

    image.png.5bb250abb06068176f6d21b3eabc67fb.png

     

    New code:

    case 1:
                mes "[New Session]";
                if (.Size > 127) {
                    mes "You have already reached the maximum of 32 sessions.";
                    next;
                    break;
                }
                mes "Select a day.";
                next;
                set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
                mes "[New Session]";
                mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
                next;
                set .@menu$,"";
                for(set .@i,0; .@i<47; set .@i,.@i+2)
                    set .@menu$, .@menu$+" ~ "+Add_Zero(atoi(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
                set .@start, select(.@menu$)-1;
                mes "[New Session]";
                mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
                next;
                set .@menu$,"";
                for(set .@i,.@start+1; .@i<48; set.@i,.@i+2)
                        set .@menu$, .@menu$+" ~ "+Add_Zero(atoi(.@i/2),1)+":"+Add_Zero((.@i%2)*30,2)+":";
                set .@end, select(.@menu$)+.@start;
                for(set .@i,0; .@i<.Size; set .@i,.@i+4)
                    if (.@day == $WOE_CONTROL[.@i] &&
                       ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
                        (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
                        (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
                        mes "[New Session]";
                        mes "The chosen times overlap with an existing session.";
                        next;
                        set .@d,1;
                        break;
                    }
                if (.@d) { set .@d,0; break; }

     


  11. On 3/4/2023 at 2:17 PM, jimboy09232 said:

    Anyone has contact to GODAMINT ? or anyone here is good at source code modification I am willing to pay

    Hahaha I just remember this guy way back 2013-2015. Most of my custom scripting was done by him.


  12. On 12/11/2022 at 8:58 AM, R3SP said:

    I guess we all got so focused on the future we forgot to preserve the past... Too bad.

    Yes, the majority like the classic but we didn't forget the past majority is trying to revive the game by improving it over time.
    I am more impressed by the servers that trying to find a way to create REAL changes that have the potential to make RO even better.

    Coz obviously the majority are just doing it for money especially those who have the resources to do it.

    I really think that separates me from most of the RO I know, because I do it to have better RO and monetization is the least. (Of course it is subjective)

    Just too bad only a few can appreciate it for now. Or maybe my reach is not that enough. But someday I know it will be appreciated by many...


  13. Hello! Just want to post here and maybe someone can help me figure this out. I already gave up so I need to ask and hopefully someone can help.

    I'm trying to modify the WoE Controller https://github.com/HerculesWS/Hercules/blob/master/npc/custom/woe_controller.txt
    To support a 30 minutes interval for start and end time.

    This is part of the code.

    case 1:
    			mes "[New Session]";
    			if (.Size > 127) {
    				mes "You have already reached the maximum of 32 sessions.";
    				next;
    				break;
    			}
    			mes "Select a day.";
    			next;
    			set .@day, select(" ~ "+implode(.Days$,": ~ "))-1;
    			mes "[New Session]";
    			mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000.";
    			next;
    			set .@menu$,"";
    			for(set .@i,0; .@i<23; set .@i,.@i+1)
    				set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":";
    			set .@start, select(.@menu$)-1;
    			mes "[New Session]";
    			mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
    			next;
    			set .@menu$,"";
    			for(set .@i,.@start+1; .@i<24; set.@i,.@i+1)
    				set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":";
    			set .@end, select(.@menu$)+.@start;
    			for(set .@i,0; .@i<.Size; set .@i,.@i+4)
    				if (.@day == $WOE_CONTROL[.@i] &&
    				   ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) ||
    				    (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) ||
    				    (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) {
    					mes "[New Session]";
    					mes "The chosen times overlap with an existing session.";
    					next;
    					set .@d,1;
    					break;
    				}
    			if (.@d) { set .@d,0; break; }

     

    This is what I have right now

     

    set .@menu$,"";
    for(set .@i,0; .@i<48; set .@i,.@i+1)
        set .@menu$, .@menu$+" ~ "+Add_Zero(.@i/2,1)+":"+(.@i%2==0?"00":"30");
    set .@start, select(.@menu$)-1;
    set .@start, .@start*30;
    mes "[New Session]";
    mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
    next;
    set .@menu$,"";
    for(set .@i,.@start/30+1; .@i<48; set .@i,.@i+1)
        set .@menu$, .@menu$+" ~ "+Add_Zero(.@i/2,1)+":"+(.@i%2==0?"00":"30");
    set .@end, select(.@menu$)-1;
    set .@end, .@end*30;

     

    Another attempt 

    for(set .@i,0; .@i<48; set .@i,.@i+1)
        set .@menu$, .@menu$+" ~ "+sprintf("%02d:%02d", .@i/2, .@i%2*30);
    set .@start, select(.@menu$)-1;
    set .@start, .@start*30;
    mes "[New Session]";
    mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000.";
    next;
    set .@menu$,"";
    for(set .@i,.@start/30+1; .@i<48; set .@i,.@i+1)
        set .@menu$, .@menu$+" ~ "+sprintf("%02d:%02d", .@i/2, .@i%2*30);
    set .@end, select(.@menu$)-1;
    set .@end, .@end*30;

     

    Output in-game. Can anyone point me in the right direction?

     

    image.png.6f184907cb16278d7ff26985834b5f18.png

×
×
  • Create New...

Important Information

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