Jump to content

Home

Writing a file based on IP address


eezstreet

Recommended Posts

I'm making a code modification, but I need some assisstance with something.

 

My code mod is going to have a 'challenge' system similar to Movie Battles 2, as well as an experience, levelling, and class system. Challenges unlock certain things, and certain challenges are limited to class and weapon.

 

I want the game to write a file serverside based on the IP address to achieve this, as well as a /wipe command in order to erase all data.

 

I'm thinking I can reference two new functions, oz_Write and oz_Read in ClientDisconnect and ClientConnect, respectively. I haven't the foggiest idea how to write oz_Write/Read though, and I tried using a register type system that Robo posted a while back, but it requires me to include Windows include files and that will crop up even more issues (But it will work with JK3...sigh).

 

I'm using the .vm compiler to compile in JK2 first, that way I know how to implement the features without worrying about JK3 exploits. Then I can fix the bugs, or use OJP's source.

 

I'm thinking something like a write file, but use ent->client->sess.IPString as a filename.

 

Could someone help me please? :)

Link to comment
Share on other sites

Create a new string in client->sess called IP

 

Upon ClientConnect it does a userinfo grab for the IP.

Create a local variable (char TmpIP[32] = {0})

 

Adjust the code to look like:

	// check to see if they are on the banned IP list
value = Info_ValueForKey (userinfo, "ip");
//Store the IP
if (!isBot)
	Q_strncpyz(TmpIP, value, sizeof(TmpIP)); // Used later
if ( G_FilterPacket( value ) ) {
	return "Banned";
}

 

Then, just before this block of code:

//if this is the first time then auto-assign a desired siege team and show briefing for that team

Chuck in...

if (firstTime && !isBot)
{
if(!TmpIP[0])
{// No IP sent when connecting, probably an unban hack attempt
	client->pers.connected = CON_DISCONNECTED;
	return "Invalid userinfo detected";
}
Q_strncpyz(client->sess.IP, TmpIP, sizeof(client->sess.IP));
}

 

So when someone connects for the first time, their IP is stored in client->sess.IP, which can then be accessed from anywhere in the gameside code.

That code there (As explained in comments) will also deny connection from someone attempting to overflow their userinfo string, in which case ban checks can't be performed

 

Then, create your file writing/reading funcs using that.

For file reading, I recommend poking around JA's token parsing system (You know, the way it reads .sab files)

 

 

Sorry I can't post much more, kind-of rushed =P

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...