Blockland Forums > Modification Help
Making the client respond to the server(TOPIC NAME CHANGED)
Reinforcements:
Found this in the DRPG client
--- Code: ---//---MISC---
$DRPG::Client::Version = 0.17;
deactivatePackage(RTB_Client);
package DRPG_Client
{
function GameConnection::setConnectArgs(%a,%b,%c,%d,%e,%f,%g)
{
Parent::setConnectArgs(%a,%b,%c,%d,%e,%f,%g,"\tDRPG\t" @ $DRPG::Client::Version);
}
};
activatePackage(DRPG_Client);
activatePackage(RTB_Client);
--- End code ---
Red_Guy:
erm... kinda.
first off -- "function serverCmdStuff" never goes into client.cs - it just wont work.
The flow works like this:
client joins
server sends a message to the client asking "do you have my addon?"
client gets the message
client sends a response, "yes your addon is loaded"
if the client does NOT have the addon loaded (or activated). then this happens
server sends a message to the client asking "do you have my addon?"
client gets the message
client ignores the message
server waits for 2 seconds total
server boots the client
server.cs
--- Code: ---package checkForAddOn_package
{
function GameConnection::autoAdminCheck(%this)
{
%parent = parent::autoAdminCheck(%this);
%this.myAddon = false;
//wait 2 seconds before booting the player to allow for lag
%this.checkForAddon = schedule(2000,0,kickPlayerFromServerForNotHavingACertainAddOn,%this);
commandToClient(%client, 'CheckForMyAddon');
return %parent;
}
};
activatePackage(checkForAddOn_package);
function kickPlayerFromServerForNotHavingACertainAddOn(%this)
{
if (%this.myAddon == true)
return;
echo("kicking player");
findClientByName(%this.name).delete("You must have <a:http://www.apple.com/>this add-on</a> to play on this server.");
}
function serverCmdMyAddonIsLoaded(%client)
{
%client.myAddon = true;
}
--- End code ---
client.cs
--- Code: ---function clientCmdCheckForMyAddon()
{
commandToServer('MyAddonIsLoaded');
}
--- End code ---
Bauklotz:
crappy/unreadable code above.
--- Code: (server.cs) ---package requiredAddOn {
function gameConnection::autoAdminCheck(%this) {
commandToClient(%this, 'addOnCheck');
%this.addOnTimeout = %this.schedule((%this.getPing() * 2) + 100, delete, "You must have <a:apple.com>this add-on</a> to play on this server.");
return parent::autoAdminCheck(%this);
}
};
activatePackage(requiredAddOn);
function serverCmdAddOnLoaded(%cl) {
cancel(%cl.addOnTimeout);
%cl.addOnLoaded = true;
}
--- End code ---
--- Code: (client.cs) ---function clientCmdAddOnCheck() {
commandToServer('addOnLoaded');
}
--- End code ---
Reinforcements:
--- Quote from: Bauklotz on February 14, 2011, 06:27:57 PM ---crappy/unreadable code above.
--- Code: (server.cs) ---package requiredAddOn {
function gameConnection::autoAdminCheck(%this) {
commandToClient(%this, 'addOnCheck');
%this.addOnTimeout = %this.schedule((%this.getPing() * 2) + 100, delete, "You must have <a:apple.com>this add-on</a> to play on this server.");
return parent::autoAdminCheck(%this);
}
};
activatePackage(requiredAddOn);
function serverCmdAddOnLoaded(%cl) {
cancel(%cl.addOnTimeout);
%cl.addOnLoaded = true;
}
--- End code ---
--- Code: (client.cs) ---function clientCmdAddOnCheck() {
commandToServer('addOnLoaded');
}
--- End code ---
--- End quote ---
The code Red_Guy posted is based off mine. XD
Thanks, I'll try this out...
--- Quote from: Red_Guy on February 14, 2011, 06:12:06 PM ---erm... kinda.
first off -- "function serverCmdStuff" never goes into client.cs - it just wont work.
The flow works like this:
client joins
server sends a message to the client asking "do you have my addon?"
client gets the message
client sends a response, "yes your addon is loaded"
if the client does NOT have the addon loaded (or activated). then this happens
server sends a message to the client asking "do you have my addon?"
client gets the message
client ignores the message
server waits for 2 seconds total
server boots the client
server.cs
--- Code: ---package checkForAddOn_package
{
function GameConnection::autoAdminCheck(%this)
{
%parent = parent::autoAdminCheck(%this);
%this.myAddon = false;
//wait 2 seconds before booting the player to allow for lag
%this.checkForAddon = schedule(2000,0,kickPlayerFromServerForNotHavingACertainAddOn,%this);
commandToClient(%client, 'CheckForMyAddon');
return %parent;
}
};
activatePackage(checkForAddOn_package);
function kickPlayerFromServerForNotHavingACertainAddOn(%this)
{
if (%this.myAddon == true)
return;
echo("kicking player");
findClientByName(%this.name).delete("You must have <a:http://www.apple.com/>this add-on</a> to play on this server.");
}
function serverCmdMyAddonIsLoaded(%client)
{
%client.myAddon = true;
}
--- End code ---
client.cs
--- Code: ---function clientCmdCheckForMyAddon()
{
commandToServer('MyAddonIsLoaded');
}
--- End code ---
--- End quote ---
Thanks to you too. :)
I appreciate the help guys! :D
Reinforcements:
Oh noes! Its not working....troubleshooting now....
This should work with LAN right?
EDIT: It was kicking me when I started the server, so I had it check for the host.
--- Code: ---package requiredAddOn {
function gameConnection::autoAdminCheck(%this) {
%this.isHost = (%this.isLocalConnection() || %this.bl_id == getNumKeyID());
if(%this.isHost == true)
{
return parent::autoAdminCheck(%this);
}
commandToClient(%this, 'AddOnCheck');
%this.addOnTimeout = %this.schedule((%this.getPing() * 2) + 100, delete, "You must have <a:apple.com>this add-on</a> to play on this server.");
return parent::autoAdminCheck(%this);
}
};
activatePackage(requiredAddOn);
function serverCmdaddOnLoaded(%cl) {
cancel(%cl.addOnTimeout);
%cl.addOnLoaded = true;
}
--- End code ---