Coding AJAX-compatible GM scripts
Moderator: Tech Team
Forum rules
Please read the Community Guidelines before posting.
Please read the Community Guidelines before posting.
- lackattack
- Posts: 6097
- Joined: Sun Jan 01, 2006 10:34 pm
- Location: Montreal, QC
Coding AJAX-compatible GM scripts
Here's a tip for anyone trying to fix BOB. There is an function I put in called handleResponse() that runs each time an AJAX response comes in. Perhaps the GM script could re-define that function to call gm_ConquerClubGame() at the end?
Last edited by lackattack on Thu Sep 13, 2007 8:57 am, edited 2 times in total.
Lack, I see your new code and I can not figure out how capture the refreshed code.
Maybe I am doing something wrong, but I can not intercept your calls!
For example, I can do the clock works but I can get the changes after it, for example, when the turn begins!
Do you have plans to put stats, card count and map inspect on original CC code?
Maybe I am doing something wrong, but I can not intercept your calls!
For example, I can do the clock works but I can get the changes after it, for example, when the turn begins!
Do you have plans to put stats, card count and map inspect on original CC code?
Code: Select all
// ==UserScript==
// @name Conquer Club - Ajax BOB
// @namespace http://www.itj.com.br/
// @description Ajax BOB
// @include http://*conquerclub.com*
// ==/UserScript==
var TimeStr = document.getElementById('clock').innerHTML;
var TargetTime = TimeStr.split(/hrs\n|min\n|sec/);
var CurrHour = parseInt(TargetTime[0]);
var CurrMinute = parseInt(TargetTime[1]);
var CurrSecond = parseInt(TargetTime[2]);
ClockInterval = window.setInterval(ClockTimer, 1000);
function ClockTimer()
{
--CurrSecond;
if(CurrSecond < 0 ){
--CurrMinute;
if( CurrMinute < 0 ){
--CurrHour;
if( CurrHour < 0 ){
CurrHour = 0;
}
CurrMinute = 59;
}
CurrSecond = 59;
}
StrClock = document.getElementById('clock');
if (CurrHour < 10) {
StrClock.innerHTML = '0' + CurrHour + 'hrs ';
} else {
StrClock.innerHTML = CurrHour + 'hrs ';
}
if (CurrMinute < 10) {
StrClock.innerHTML += '0' + CurrMinute + 'min ';
} else {
StrClock.innerHTML += CurrMinute + 'min ';
}
if (CurrSecond < 10) {
StrClock.innerHTML += '0' + CurrSecond + 'sec ';
} else {
StrClock.innerHTML += CurrSecond + 'sec ';
}
var CurrDate = new Date();
if (CurrDate.getHours() < 10) {
StrClock.innerHTML += ' @ <b>0' + (CurrDate.getHours()) + ':</b>';
} else {
StrClock.innerHTML += ' @ <b>' + (CurrDate.getHours()) + ':</b>';
}
if (CurrDate.getMinutes() < 10) {
StrClock.innerHTML += '<b>0' + (CurrDate.getMinutes()) + '</b>';
} else {
StrClock.innerHTML += '<b>' + (CurrDate.getMinutes()) + '</b>';
}
}
var handleResponse = function()
{
alert('Nothing will happen');
}
Brazil #3 @ Agu, 2007.
- lackattack
- Posts: 6097
- Joined: Sun Jan 01, 2006 10:34 pm
- Location: Montreal, QC
What if you had
instead of
Code: Select all
function handleResponse()
{
alert('Nothing will happen');
}instead of
Code: Select all
var handleResponse = function()
{
alert('Nothing will happen');
}lackattack wrote:Here's a tip for anyone trying to fix BOB. There is an function I put in called handleResponse() that runs each time an AJAX response comes in. Perhaps the GM script could re-define that function to call gm_ConquerClubGame() at the end?
tell you what.......you install this crap for me on my computer, and ill make your moves in your game so you can win one
this would have been so much funnier if it wasnt for that "neverland game we played"
Here is where I think we can go for...
Code: Select all
var bob_gameLog = unsafeWindow.gameLog;
var newhandleResponse = unsafeWindow.handleResponse;
unsafeWindow.handleResponse = function() {
bob_gameLog.innerHTML += 'I am here!<br>';
return newhandleResponse();
}
Brazil #3 @ Agu, 2007.
- Ishiro
- Posts: 324
- Joined: Mon Jul 17, 2006 5:53 pm
- Gender: Male
- Location: Under the Rainbow
- Contact:
lackattack wrote:What if you hadCode: Select all
function handleResponse()
{
alert('Nothing will happen');
}
instead ofCode: Select all
var handleResponse = function()
{
alert('Nothing will happen');
}
I tried that and it didn't work. Your version of the function executed, and not mine.
- Ishiro
- Posts: 324
- Joined: Mon Jul 17, 2006 5:53 pm
- Gender: Male
- Location: Under the Rainbow
- Contact:
mfontolan wrote:Here is where I think we can go for...Code: Select all
var bob_gameLog = unsafeWindow.gameLog;
var newhandleResponse = unsafeWindow.handleResponse;
unsafeWindow.handleResponse = function() {
bob_gameLog.innerHTML += 'I am here!<br>';
return newhandleResponse();
}
This works for inserting code into the AJAX, or replacing functions entirely. Now just the hard work of converting the old scripts to work in the new formats.
Ishiro wrote:This works for inserting code into the AJAX, or replacing functions entirely. Now just the hard work of converting the old scripts to work in the new formats.
We can work together and make a new tool.
This are working and calling CC original function (...I think...
Code: Select all
// ==UserScript==
// @name Conquer Club - Ajax BOB
// @namespace http://www.itj.com.br/
// @description Ajax BOB
// @include http://*conquerclub.com*
// ==/UserScript==
var bob_gameLog = unsafeWindow.gameLog;
var newhandleResponse = unsafeWindow.handleResponse;
unsafeWindow.handleResponse = function() {
bob_gameLog.innerHTML += 'I am here!<br>';
return newhandleResponse();
}
var TimeStr = document.getElementById('clock').innerHTML;
var TargetTime = TimeStr.split(/hrs\n|min\n|sec/);
var CurrHour = parseInt(TargetTime[0]);
var CurrMinute = parseInt(TargetTime[1]);
var CurrSecond = parseInt(TargetTime[2]) - 2;
ClockInterval = window.setInterval(ClockTimer, 1000);
function ClockTimer()
{
--CurrSecond;
if(CurrSecond < 0 ){
--CurrMinute;
if( CurrMinute < 0 ){
--CurrHour;
if( CurrHour < 0 ){
CurrHour = 0;
}
CurrMinute = 59;
}
CurrSecond = 59;
}
StrClock = document.getElementById('clock');
StrClock.innerHTML = zslash(CurrHour, 2) + 'hrs ' + zslash(String(CurrMinute), 2) + 'min ' + zslash(CurrSecond, 2) + 'sec ';
var CurrDate = new Date();
StrClock.innerHTML += ' @ <b>' + zslash(CurrDate.getHours(), 2) + ':' + zslash(CurrDate.getMinutes(), 2) + '</b>';
}
function zslash(svalue, iwidth)
{
var szero = String(svalue);
var ch = szero.substr(0,1);
while (ch == ' ')
{
szero = szero.substr(1, szero.length);
ch = szero.substr(0,1);
}
ch = szero.substr(szero.length - 1, szero.length);
while (ch == ' ')
{
szero = szero.substr(0, szero.length - 1);
ch = szero.substr(szero.length - 1, szero.length);
}
var i=0;
for (i=0; i < (iwidth - szero.length); i++)
{
szero = '0' + szero;
}
return szero;
}Brazil #3 @ Agu, 2007.
- Ishiro
- Posts: 324
- Joined: Mon Jul 17, 2006 5:53 pm
- Gender: Male
- Location: Under the Rainbow
- Contact:
I can't seem to get the Options serializations to work like it does in the BOB script, so I'm back to coding in options that will have to be edited by the user.
The following code snippet put in a greasemonkey script will put the confirmation popups back on the various buttons.
The following code snippet put in a greasemonkey script will put the confirmation popups back on the various buttons.
Code: Select all
var confirmEnds = true;
var confirmAutoAttack = true;
var confirmDeploy = true;
var confirmChat = true;
var dashboard = document.getElementById('dashboard');
var newsendRequest = unsafeWindow.sendRequest;
unsafeWindow.sendRequest = function(command) {
/* --- Confirmation Popups --- */
if (((command == 'End Attacks' || command == 'End Fortification' || (command == 'Fortify' && !dashboard.innerHTML.has("Unlimited"))) && confirmEnds) || (command == 'Auto-Attack' && confirmAutoAttack) || (command == 'Deploy' && confirmDeploy) || (command == 'Post Message' && confirmChat))
{
if (confirm("Are you sure?"))
{
return newsendRequest(command);
}
else {
return false;
}
}
else {
return newsendRequest(command);
}
}
- Ishiro
- Posts: 324
- Joined: Mon Jul 17, 2006 5:53 pm
- Gender: Male
- Location: Under the Rainbow
- Contact:
Progress update...
I have everything working on page load, except color blind armies.
However, currently nothing updates as the AJAX updates. The reason is that the script was written to execute once per page, so, no care was given to being able to rebuild already built sections. The result right now is that every time you take an action, items like the player stats, text maps and menus will build 4 times. After taking a regular simple turn (begin, deploy, attack, advance, end attack, end fortification) you'll have 24 copies of each of the BOB items.
Working on it, but may not have a solution until next week. I'll put up what I have later when I have access to a place to upload the script.
I have everything working on page load, except color blind armies.
However, currently nothing updates as the AJAX updates. The reason is that the script was written to execute once per page, so, no care was given to being able to rebuild already built sections. The result right now is that every time you take an action, items like the player stats, text maps and menus will build 4 times. After taking a regular simple turn (begin, deploy, attack, advance, end attack, end fortification) you'll have 24 copies of each of the BOB items.
Working on it, but may not have a solution until next week. I'll put up what I have later when I have access to a place to upload the script.
- Optimus Prime
- Posts: 9665
- Joined: Mon Mar 12, 2007 9:33 pm
- Gender: Male
- stringybeany
- Posts: 551
- Joined: Mon May 28, 2007 10:28 am
- Gender: Male
- sully800
- Posts: 4978
- Joined: Wed Jun 14, 2006 5:45 pm
- Gender: Male
- Location: Bethlehem, Pennsylvania
AAFitz wrote:lackattack wrote:Here's a tip for anyone trying to fix BOB. There is an function I put in called handleResponse() that runs each time an AJAX response comes in. Perhaps the GM script could re-define that function to call gm_ConquerClubGame() at the end?
tell you what.......you install this crap for me on my computer, and ill make your moves in your game so you can win one
this would have been so much funnier if it wasnt for that "neverland game we played"
lack just beat me in a game
He gained 146 points total
Ishiro wrote:Not yet, because parts of it don't work well at all. The map doesn't update when you do things... have to fix that first.
The original BOB was write when pages are totally reloaded and now, only a few part of the page are reloaded.
I do not thing that we can make original BOB work and is not a easy think fix/maintain/upgrade someone code.
Above is what I think that is more important on the new code, that is a prototype model of clock fully working in Ajax way.
The 2 seconds difference (in the setInterval) is intentional to show that after refresh (use page link (Ajax) and not navigator button) the clock became correctly.
Code: Select all
// ==UserScript==
// @name Conquer Club - Ajax BOB
// @namespace http://www.itj.com.br/
// @description Ajax BOB
// @include http://*conquerclub.com*
// ==/UserScript==
// Starting
var TimeStr = document.getElementById('clock').innerHTML;
var TargetTime = TimeStr.split(/hrs\n|min\n|sec/);
var CurrHour = parseInt(TargetTime[0]);
var CurrMinute = parseInt(TargetTime[1]);
var CurrSecond = parseInt(TargetTime[2]);
ClockInterval = window.setInterval(ClockTimer, 2000);
// Running clock
function ClockTimer()
{
--CurrSecond;
if (CurrSecond < 0)
{
--CurrMinute;
if (CurrMinute < 0)
{
--CurrHour;
if (CurrHour < 0)
{
CurrHour = 0;
}
CurrMinute = 59;
}
CurrSecond = 59;
}
snextTurn = ' @ ';
CurrDate = new Date();
nextTurn = (CurrHour * 60) + CurrMinute + (CurrDate.getHours() * 60) + CurrDate.getMinutes();
if (nextTurn > 1440)
{
nextTurn -= 1440;
snextTurn = ' tomorrow @ ';
}
StrClock = document.getElementById('clock');
StrClock.innerHTML = zslash(CurrHour, 2) + 'hrs ' + zslash(CurrMinute, 2) + 'min ' + zslash(CurrSecond, 2) + 'sec' + snextTurn + '<b>' + zslash(parseInt(nextTurn / 60), 2) + ':' + zslash(nextTurn - parseInt(parseInt(nextTurn / 60) * 60), 2) + '</b />';
}
// Ajax Code
var bob_gameLog = unsafeWindow.gameLog;
var bob_gameChat = unsafeWindow.gameChat;
var bob_handleResponse = unsafeWindow.handleResponse;
unsafeWindow.handleResponse = function() {
if (typeof(unsafeWindow.request.responseText) != "undefined")
{
var bob_response = unsafeWindow.request.responseText.split("&");
if (bob_response.length > 2)
{
if (bob_response[2] != "")
{
TargetTime = bob_response[2].split(/hrs|min|sec/);
CurrHour = parseInt(TargetTime[0]);
CurrMinute = parseInt(TargetTime[1]);
CurrSecond = parseInt(TargetTime[2]);
}
var CurrDate = new Date();
bob_gameChat.innerHTML += '<b>' + zslash(CurrDate.getHours(), 2) + ':' + zslash(CurrDate.getMinutes(), 2) + ':' + zslash(CurrDate.getSeconds(), 2) + '</b /> Ajax Test - I am a response!<br />';
}
} else {
var CurrDate = new Date();
bob_gameChat.innerHTML += '<b>' + zslash(CurrDate.getHours(), 2) + ':' + zslash(CurrDate.getMinutes(), 2) + ':' + zslash(CurrDate.getSeconds(), 2) + '</b /> Ajax Test - I am not!<br />';
}
return bob_handleResponse();
}
// Counters, Map inspect...
// Common Functions
function zslash(svalue, iwidth)
{
var szero = String(svalue);
var ch = szero.substr(0,1);
while (ch == ' ')
{
szero = szero.substr(1, szero.length);
ch = szero.substr(0,1);
}
ch = szero.substr(szero.length - 1, szero.length);
while (ch == ' ')
{
szero = szero.substr(0, szero.length - 1);
ch = szero.substr(szero.length - 1, szero.length);
}
for (var i=0; i < (iwidth - szero.length); i++)
{
szero = '0' + szero;
}
return szero;
}Brazil #3 @ Agu, 2007.
- Incandenza
- Posts: 4949
- Joined: Thu Oct 19, 2006 5:34 pm
- Gender: Male
- Location: Playing Eschaton with a bucket of old tennis balls
Most aspects of the map inspect are fairly rigid (i.e. what you can and can't attack)
But obviously the things that change are the colour coding of each territory.
The Table of data code would need to be run on every refresh... of course that's the bit that takes time as it inspects game logs - so may not actually complete in time for a refresh... so could be nasty - unless it's made easier to get this info out of the system now.
C.
But obviously the things that change are the colour coding of each territory.
The Table of data code would need to be run on every refresh... of course that's the bit that takes time as it inspects game logs - so may not actually complete in time for a refresh... so could be nasty - unless it's made easier to get this info out of the system now.
C.

Highest score : 2297

