GreaseMonkey для Travian. Сообщения.

Вы хотели бы иметь иметь возможность удалять сообешие в Травиане не переходя к списку? Примерно вот так.

модификация сообщения в Травиан

Для этого прекрассного чуда нам понадобить FireFox и GreaseMonkey. Где что взять и как установить можете глянуть в моей статье GreaseMonkey для Travian. Рынок.

А сам скрипт можете скачать по этому линку http://krolser.com/greasemonkey/scripts/travian/message.user.js.

Если вам интересно, как это написано, то можете читать эту статью дальше.

Давайте разберемся, по какому линку нам надо пойти, чтобы удалить сообщение. Для этого идём на страничку http://<ваш сервер>.travian.ru/berichte.php (я играю на speed) и смотрим исходный код этой страницы. Нас инетересует отправка данных по клику на кнопку «Удалить». Ищем в исходном коде это волшебное слово и находим строчку.

<input class="std" name="del" type="Submit" value="Удалить">

Т.к. у нас это кнопка, значит должна быть и форма. (Если вам непонятно про что я говорю, то вам следует поучить HTML). Ищем тэг <form>. Находит только одну.

<form method="post" action="berichte.php" name="msg">

Хм. а как же тогда сервер узнаёт какие месаги удалять, а просто. Есть же чекбоксы.

<input type="Checkbox" name="n1" value="28174557">
<input type="Checkbox" name="n2" value="28115395">

Честно сказать меня напугало, что у них имена разные-то. Или это программисты травиана не знали как работать с целой пачкой или есть какая-то хитрая защита? Параметр value, как вы наверное уже догадались и есть id нашего сообщения.

ВНИМАНИЕ ! : у вас параметры value будут оличаться от моих, ведь у вас то другие сообщения. :)

После нехитрых рассуждений прихожим к выводу, что нам на страничку нужно добавить что-то типа такого.

<form method="post" action="berichte.php" name="msg">
    <input type="Checkbox" name="n1" value="27801824">
    <input class="std" name="del" type="Submit" value="Удалить">
 </form>

Давай те попробуем протестировать. Для этого открывает блокнот, вставляем следующий код и сохраняем.

<form method="post" action="http://speed.travian.ru/berichte.php" name="msg">
    <input type="Checkbox" name="n1" value="27801824">
    <input class="std" name="del" type="Submit" value="Удалить">
</form>

Отличие в параметре action (выделено красным) тэга <form> связвно с тем, что мы будем тестировать на локальном компьютере. И так. Сохранили, запустили, выделили, нажали кнопку…. И попали на список сообщений, но сообщения с id равным тестовому не наблюдаеться. Значит у нас всё получилось. Теперь давайте у берем эту галоку. Зачем пользователю что-то убирать, если он и так будет на странице с сообщением которое надо удалить. Пишем что-то подобное:

<form method="post" action="http://speed.travian.ru/berichte.php" name="msg">
    <input type="hidden" name="n1" value="28286263">
    <input class="std" name="del" type="Submit" value="Удалить">
</form>

Внимательно смотрим, что поменялось. Во превых сменился value. Предыдущее сообщение мы уже удалили, надо удалять теперь другое, а также type — теперь вместо галочки мы ничего не видим.

Опять тестируем. Опа!! Работает. Как я рад, как я рад, что поеду в ленинград. Сорри, отвлёкся… :)

Осталось только втроить эту кнопку в страничку сообщения.

Идем на страничку сообщения и смотрим ей исходный код. Блин, а параметра value у нас тут нету….Но он есть в адресной строке.

http://speed.travian.ru/berichte.php?id=27855656

Как его оттуда достать, то? Легко. Весь URL в JavaScript можно посмотреть с помощью

window.location.href

А теперь, осталось вырезать из этого наш параметр. Хм, очень не хочеться думать, поэтому лезем и google и берем первый линк http://www.netlobo.com/url_query_string_javascript.htm и хестоко крадём оттуда следующий код:

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

Теперь в нашем скрипте достаточно вызвать что-типа такого

var value = gup( 'id' );

Давайте теперь просто попытаемся вставить это в нашу страничку. Осталось только придумать куда. Идем вмануал по GreaseMokey находим там раздел «Inserting complex HTML quickly». Там написано примерно следующее:

var logo = document.createElement("div");
logo.innerHTML = '<div style="margin: 0 auto 0 auto; ' +
	'border−bottom: 1px solid #000000; margin−bottom: 5px; ' +
	'font−size: small; background−color: #000000; ' +
	'color: #ffffff;"><p style="margin: 2px 0 1px 0;"> ' +
	'YOUR TEXT HERE ' +
	'</p></div>';
document.body.insertBefore(logo, document.body.firstChild);

После исплнения этого в верхнем углу должен появиться банер с надписью YOUR TEXT HERE. Давате поменяем вставляемый HTML на наш. Получим:

var value = gup( 'id' );
var logo = document.createElement("form");
logo.innerHTML =
'<form method="post" action="http://speed.travian.ru/berichte.php" name="msg">' +
'    <input type="hidden" name="n1" value="' + value + '">' +
'    <input class="std" name="del" type="Submit" value="Удалить">' +
'</form>';
document.body.insertBefore(logo, document.body.firstChild);

Устанавливаем скрип и тестируем…. Блин… Вместо слово удалить одни кубики. Проблемы с кодировкой. Давайте напишем просто «Delete», а уже потом исправим на привильное «Удалить» в кодировке UFT-8.

Проверяем. Работает. но кнопка в верху страницы — это неудобно. Попробуем поставить её ппосле сообщения.

Опять роем исходник страницы сообщения. Экспериментируем….

Вот оканчательный вариант скрипта.

Если есть еще что-то непонятное, милости просим в коменты.

Всё…. Устал. Конец. :)

Реклама

комментариев 9 to “GreaseMonkey для Travian. Сообщения.”

  1. cigarettes Says:

    Very nice this blog =)

  2. Zeniozynomo Says:

    есть кто в оксфорде?

    А вообще, буду рад советам.

  3. Zev Says:

    Не тот ли ты KrOlSer, что на спиде рядом был?

  4. krolser Says:

    Да именно тот :) Мир тесен.

  5. TopaZ Says:

    Прикольно.. Были бы пояснения к отдельным элементам скрипта, вообще цены бы небыло… Если не сложно, напиши туториал по замене текста на странице. Просто есть один сайт и очень бы хотелось его на русский перевести с помощью гризмонкей.

  6. krolser Says:

    Чесное слово, в последнее время очень сильно занят. Поэтому нет времени написать туториал. А если ты хочешь переводить сайт, то воспользуйся переводчиками сайтов. Они явно сделают это качественне тебя, если конечно это не какая-нибудь узкая специфика.

  7. TopaZ Says:

    Не, с переводчиком очень не удобно.. Надо что бы включил один раз скрипт и весь сайт на русском стал пока скрипт не отключишь..
    Я пробовал заменять текст 2мя способами, но в 1м у меня некоторые проблемы с сайтом были, а во 2м Alt Text не переводился и текст который в всплывающих окошках внутри самого сайта. Если есть какой нибудь способ хотя бы до этих окошек добраться, буду очень благодарен за подсказку :) Кстати сайт наверняка знаешь ибо тоже поклонник травиана http://www.travianer.de

  8. Sutew Says:

    Привет всем. Может кто нибудь написать скрипт, чтоб он на емаил отправлял сообщение об начале атаки на любую мою деревню?!!!

  9. krolser Says:

    to Sutew:
    Дело в том. что это возможно только в том случае, если у тебя всё время окрыт браузер. И он (браузер) через некоторое время перезагружает страничку, а это трафик.

    А если у тебя открыт браузер, то достаточно выкинуть alert. И тогда твой браузер начнёт моргать.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s


%d такие блоггеры, как: