<?xml version="1.0" encoding="utf-8" ?> 
<rss version="2.0">
<channel>
<title>Скрол</title> 
<link>http://scrolls.combats.com/~Gents/</link> 
<description>Скрол - френд-лента - scrolls.combats.com</description> 
<lastBuildDate>Tue, 23 Jun 2009 00:54:00 GMT</lastBuildDate> 
<generator>scrolls.combats.com - Скроллы Бойцовского Клуба</generator> 
<image>
<url>http://scrolls.combats.com/i/avatar/big/00.jpg</url> 
<title>Gents</title> <link>http://scrolls.combats.com/~Gents/</link><width>90</width> 
<height>80</height> 
</image>
<item>
<guid isPermaLink="true">http://scrolls.combats.com/community/~developers/522691.html</guid> 
<pubDate>Tue, 23 Jun 2009 00:54:00 GMT</pubDate> 
<link>http://scrolls.combats.com/community/~developers/522691.html</link><author>developers : чесло зверя</author>
<title>Клановые абилки</title>
<description>Всем привет.&lt;br&gt;В Бк я играю не так давно так что если гдето буду неправ поправте..&lt;br&gt;Из разговоров с бывалыми игроками я узнал что давным давно за высокое место клана в рейтинге давались игровые бонусы, но по какимто непонятным причинам админы это отменили. Изза этого из Бк произошел большой отток людей делавших игру интересней (журналистов, прогеров, писателей и тд) т.к. стало бессмыслено тратить личное время на то чтобы сделать сайт своего клана более интересным и полезным. Сечас мы имеем такую ситуацию, что более-менее поддерживаются от силы 10 клановых сайтов, а на все остальные уже давно забили. Новых прогамных ресурсов не появляется вобще, а те которые есть уже практически не развиваются, в лучшем случае только поддерживаются &lt;br&gt;&lt;br&gt;Думаю такое положение дел плохо для всех сторон:&lt;br&gt; - для творческих людей, которые по натуре азартны и хотелибы проявить свое мастерство и посостязаться со своими коллегами, кто сможет сделать свой сайт самым лучшим, но при текущем положении дел это будет борьба ради борьбы, т.к. награды нет никакой&lt;br&gt; - для игроков. Во первых по изложеным выше причинам игра не так интересна как могла бы быть. Во вторых если админы внесут какието существеные изменения в игру, то не факт что имеющиеся ресурсы (переодевалки, карты и тд) к ним адаптируют за короткие сроки, если адаптируют вобще (опятьже трудится над этим большого резона нет).&lt;br&gt; - для админов. Тут в принципе все то же самое что и для игроков только с админской колокольни, то есть 1) играет не так много народу как могло бы 2) они самим по какимто причинам немогут писать подробную помощь по нововедениям и предаставлять хотябы самые необходимые ресурсы (карты, переодевалку и тд), по этому этим занимаются кланы, но делают это на энтузиазме и поэтому вобщем коекак&lt;br&gt;&lt;br&gt;К чему я все это написал.. Хотел узнать мнение прогерской обществености по этому поводу и если эта проблема небезразлична нетолько мне вместе написать обращение к админам с просьбой вернуть поощерение за место в рейтинге.. И попросить дать четкий ответ будет это сделано или нет.. Если под обращением подпишутся уважаемые людей с высоким уровнем врядли они его проигнорируют.</description> 
</item>
<item>
<guid isPermaLink="true">http://scrolls.combats.com/community/~developers/499006.html</guid> 
<pubDate>Wed, 27 May 2009 04:56:00 GMT</pubDate> 
<link>http://scrolls.combats.com/community/~developers/499006.html</link><author>developers : Vikis</author>
<title>Получение инфы о персонаже</title>
<description>Доброй ночи. &lt;br&gt;Имеется код  для выдирания инфы о персонаже из БК. Код работоспособен только на 25-30 записей  в БД. Далее айпи блокируется и соответственно выдаётся ошибка:). Я приводил этот код в комментариях тремя постами ниже, мне посоветовали выставить sleep (3); &lt;br&gt;Выставил, но нифига не прошло. Обновились 34 записи а дальше как всегда :&quot;Ваш IP временно заблокирован...&lt;br&gt;&lt;br&gt;Собственно сам код &lt;div id=&quot;s_54291144_2&quot; style=&quot;display:&quot;&gt;&lt;a href=&quot;#&quot; onClick=&quot;document.all.s_54291144_2.style.display=&#39;none&#39;; document.all.s_54291144_1.style.display=&#39;&#39;;return false;&quot;&gt;[&#37;param.l.filters.Show&#37;]&lt;/a&gt;&lt;/div&gt;&lt;div id=&quot;s_54291144_1&quot; style=&quot;display:none&quot;&gt;&lt;a href=&quot;#&quot; onClick=&quot;document.all.s_54291144_1.style.display=&#39;none&#39;; document.all.s_54291144_2.style.display=&#39;&#39;;return false;&quot;&gt;[&#37;param.l.filters.Hide&#37;]&lt;/a&gt;&lt;br/&gt;&lt;?&lt;br&gt;include_once(&quot;mysql.php&quot;);&lt;br&gt;&lt;br&gt;class CURL {&lt;br&gt;   var $callback = false;&lt;br&gt;&lt;br&gt;function setCallback($func_name) {&lt;br&gt;   $this-&gt;callback = $func_name;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function doRequest($method, $url, $vars) {&lt;br&gt;   $ch = curl_init();&lt;br&gt;curl_setopt($ch, CURLOPT_URL, $url);&lt;br&gt;curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br&gt;curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br&gt;curl_setopt($ch, CURLOPT_TIMEOUT, 7);&lt;br&gt;curl_setopt($ch, CURLOPT_MAXREDIRS, 3);&lt;br&gt;curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);&lt;br&gt;curl_setopt($ch, CURLOPT_FAILONERROR, true);&lt;br&gt;curl_setopt($ch, CURLOPT_ENCODING, &#39;gzip&#39;);&lt;br&gt;   //curl_setopt($ch, CURLOPT_URL, $url);&lt;br&gt;   //curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br&gt;   //curl_setopt($ch, CURLOPT_TIMEOUT, 1);&lt;br&gt;   //curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER[&#39;HTTP_USER_AGENT&#39;]);&lt;br&gt;   //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);&lt;br&gt;   //curl_setopt($fh, CURLOPT_REFERER, &#39;http://knl/&#39;);&lt;br&gt;   //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br&gt;   //curl_setopt($ch, CURLOPT_COOKIEJAR, &#39;cookie.txt&#39;);&lt;br&gt;   //curl_setopt($ch, CURLOPT_COOKIEFILE, &#39;cookie.txt&#39;);&lt;br&gt;   if ($method == &#39;POST&#39;) {&lt;br&gt;       curl_setopt($ch, CURLOPT_POST, 1);&lt;br&gt;       curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);&lt;br&gt;   }&lt;br&gt;   $data = curl_exec($ch);&lt;br&gt;   curl_close($ch);&lt;br&gt;   if ($data) {&lt;br&gt;       if ($this-&gt;callback)&lt;br&gt;       {&lt;br&gt;           $callback = $this-&gt;callback;&lt;br&gt;           $this-&gt;callback = false;&lt;br&gt;           return call_user_func($callback, $data);&lt;br&gt;       } else {&lt;br&gt;           return $data;&lt;br&gt;       }&lt;br&gt;   } else {&lt;br&gt;       return curl_error($ch);&lt;br&gt;   }&lt;br&gt;}&lt;br&gt;&lt;br&gt;function get($url) {&lt;br&gt;   return $this-&gt;doRequest(&#39;GET&#39;, $url, &#39;NULL&#39;);&lt;br&gt;}&lt;br&gt;&lt;br&gt;function post($url, $vars) {&lt;br&gt;   return $this-&gt;doRequest(&#39;POST&#39;, $url, $vars);&lt;br&gt;}&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;if (&#33;function_exists(&#39;array_combine&#39;)) {&lt;br&gt;   function array_combine($a, $b) {&lt;br&gt;       $c = array();&lt;br&gt;       if (is_array($a) &amp;&amp; is_array($b))&lt;br&gt;           while (list(, $va) = each($a))&lt;br&gt;               if (list(, $vb) = each($b))&lt;br&gt;                   $c[$va] = $vb;&lt;br&gt;               else&lt;br&gt;                   break 1;&lt;br&gt;       return $c;&lt;br&gt;   }&lt;br&gt;}&lt;br&gt;&lt;br&gt;   function doPost($uri,$postdata,$host){&lt;br&gt;       $da = fsockopen($host, 80, $errno, $errstr);&lt;br&gt;       if (!$da) {&lt;br&gt;           echo &quot;$errstr ($errno)&lt;br/&gt;\n&quot;;&lt;br&gt;           echo $da;&lt;br&gt;       }&lt;br&gt;       else {&lt;br&gt;           $salida =&quot;POST $uri  HTTP/1.1\r\n&quot;;&lt;br&gt;           $salida.=&quot;Host: $host\r\n&quot;;&lt;br&gt;           $salida.=&quot;User-Agent: PHP Script\r\n&quot;;&lt;br&gt;           $salida.=&quot;Content-Type: application/x-www-form-urlencoded\r\n&quot;;&lt;br&gt;           $salida.=&quot;Content-Length: &quot;.strlen($postdata).&quot;\r\n&quot;;&lt;br&gt;           $salida.=&quot;Connection: close\r\n\r\n&quot;;&lt;br&gt;           $salida.=$postdata;&lt;br&gt;           fwrite($da, $salida);&lt;br&gt;                     while (!feof($da))&lt;br&gt;               $response.=fgets($da, 128);&lt;br&gt;           $response=split(&quot;\r\n\r\n&quot;,$response);&lt;br&gt;           $header=$response[0];&lt;br&gt;           $responsecontent=$response[1];&lt;br&gt;           if(!(strpos($header,&quot;Transfer-Encoding: chunked&quot;)===false)){&lt;br&gt;               $aux=split(&quot;\r\n&quot;,$responsecontent);&lt;br&gt;               for($i=0;$i&lt;count($aux);$i++)&lt;br&gt;                   if($i==0 || ($i&#37;2==0))&lt;br&gt;                       $aux[$i]=&quot;&quot;;&lt;br&gt;               $responsecontent=implode(&quot;&quot;,$aux);&lt;br&gt;           }//if&lt;br&gt;           return chop($responsecontent);&lt;br&gt;       }//else&lt;br&gt;   }//function-doPost&lt;br&gt;&lt;br&gt;$ar_complete=array();&lt;br&gt;$ar_keys=array();&lt;br&gt;$ar_items=array();&lt;br&gt;&lt;br&gt;function myarray(&amp;$item)&lt;br&gt;{&lt;br&gt;global $ar_keys;&lt;br&gt;global $ar_items;&lt;br&gt;&lt;br&gt;$tmp_ar=split(&quot;=&quot;,$item);&lt;br&gt;$ar_keys[]=$tmp_ar[0];&lt;br&gt;$ar_items[]=$tmp_ar[1];&lt;br&gt;}&lt;br&gt;&lt;br&gt;function print_rf($str)&lt;br&gt;{&lt;br&gt;echo(&quot;&lt;pre&gt;&quot;);&lt;br&gt;print_r($str);&lt;br&gt;echo(&quot;&lt;/pre&gt;&quot;);&lt;br&gt;}&lt;br&gt;&lt;br&gt;$result = mysql_query (&quot;SELECT login,gamecity_url FROM &quot;.ST_TABLE, $LINK) or die(&quot;index.php -&gt; err &quot;.mysql_error($LINK));&lt;br&gt;&lt;br&gt;if ($row-&gt;gamecity==&quot;&quot;)&lt;br&gt;{&lt;br&gt;$gamecity=&quot;http://emeraldscity.combats.com&quot;;&lt;br&gt;} else {&lt;br&gt;$gamecity=$row-&gt;gamecity_url;&lt;br&gt;}&lt;br&gt;&lt;br&gt;$curl=new CURL;&lt;br&gt;&lt;br&gt;for ($i = 0; $i &lt; mysql_num_rows ($result); $i++) {&lt;br&gt;  $row = mysql_fetch_object ($result);&lt;br&gt;//$url=$gamecity.&quot;/inf.pl?login=&quot;.$row-&gt;login.&quot;&amp;short=1&quot;;&lt;br&gt;//$p_url=parse_url($gamecity);&lt;br&gt;&lt;br&gt;$contents=$curl-&gt;post($gamecity.&quot;/inf.pl&quot;,&quot;login=&quot;.$row-&gt;login.&quot;&amp;short=1&quot;);&lt;br&gt;&lt;br&gt;//$contents = @doPost(&quot;/inf.pl&quot;,&quot;login=&quot;.$row-&gt;login.&quot;&amp;short=1&quot;,$p_url[host]);&lt;br&gt;if (stristr($contents,&quot;[503]&quot;)) break;&lt;br&gt;if (stristr($contents,&quot;The document has moved&quot;)) {&lt;br&gt;    sleep(3);&lt;br&gt;  $host=stristr($contents,&quot;http://&quot;);&lt;br&gt;  $host=str_replace(&quot;\n&quot;,&quot;&quot;,$host);&lt;br&gt;  $host=str_replace(&quot;\r&quot;,&quot;&quot;,$host);&lt;br&gt;  $host=str_replace(&quot; &quot;,&quot;&quot;,$host);&lt;br&gt;  $pos = strpos($host, &#39;&quot;&#39;, 1);&lt;br&gt;  $url=substr($host, 0, $pos);&lt;br&gt;  $p_url=parse_url($url);&lt;br&gt;  $contents =$curl-&gt;post(&quot;http://&quot;.$p_url[host].&quot;/inf.pl&quot;,&quot;login=&quot;.$row-&gt;login.&quot;&amp;short=1&quot;);&lt;br&gt;  //$contents = @doPost(&quot;/inf.pl&quot;,&quot;login=&quot;.$row-&gt;login.&quot;&amp;short=1&quot;,$p_url[host]);&lt;br&gt;}&lt;br&gt;&lt;br&gt;$ar=$ar_complete=$ar_keys=$ar_items=array();&lt;br&gt;$ar=split(&quot;\n&quot;,$contents);&lt;br&gt;array_walk($ar,&#39;myarray&#39;);&lt;br&gt;$ar_complete = array_combine ( $ar_keys, $ar_items );&lt;br&gt;&lt;br&gt;$login=$row-&gt;login;&lt;br&gt;if (!array_key_exists(&quot;login_online&quot;, $ar_complete)) {&lt;br&gt;  mysql_query (&quot;UPDATE `&quot;.ST_TABLE.&quot;` SET login_online=&#39;0&#39; WHERE login=&#39;$login&#39;&quot;) or die(&quot;update.php -&gt; err &quot;.mysql_error($LINK).&quot;\n&quot;);&lt;br&gt;  mysql_query (&quot;UPDATE `&quot;.ST_TABLE.&quot;` SET room_name=&#39;&#39; WHERE login=&#39;$login&#39;&quot;) or die(&quot;update.php -&gt; err &quot;.mysql_error($LINK)).&quot;\n&quot;;&lt;br&gt;}&lt;br&gt;foreach ($ar_complete as $key =&gt; $value) {&lt;br&gt;//print_rf($ar_complete);&lt;br&gt;//echo(&quot;UPDATE &quot;.ST_TABLE.&quot; SET &quot;.$key.&quot;=&#39;&quot;.$value.&quot;&#39; WHERE login=&#39;$login&#39;&quot;);&lt;br&gt;//exit;&lt;br&gt;&lt;br&gt;if (($row-&gt;key)!=$value) {&lt;br&gt;  //print_rf($row-&gt;$key);&lt;br&gt;//  print_rf($value);&lt;br&gt;&lt;br&gt;   //print_rf (&quot;UPDATE `&quot;.ST_TABLE.&quot;` SET &quot;$key&quot;=&#39;&quot;$value&quot;&#39; WHERE login=&#39;&quot;.$login.&quot;&#39;\n&quot;);&lt;br&gt;    mysql_query (&quot;UPDATE &quot;.ST_TABLE.&quot; SET &quot;.$key.&quot;=&#39;&quot;.$value.&quot;&#39; WHERE login=&#39;&quot;.$login.&quot;&#39;&quot;) or die(&quot;update.php -&gt; err &quot;.mysql_error($LINK).&quot;\n&quot;);&lt;br&gt;//exit;&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;//set_time_limit(0);&lt;br&gt;sleep (3);&lt;br&gt;}&lt;br&gt;&lt;br&gt;mysql_free_result ($result);&lt;br&gt;?&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;Хотелось бы услышать ваше мнение.&lt;br&gt;</description> 
</item>
<item>
<guid isPermaLink="true">http://scrolls.combats.com/community/~developers/486699.html</guid> 
<pubDate>Tue, 12 May 2009 17:38:00 GMT</pubDate> 
<link>http://scrolls.combats.com/community/~developers/486699.html</link><author>developers : Alex Nomad</author>
<title>Хранение данных без cookies</title>
<description>Многие сталкиваюся в своем веб-программинге с необходимостью хранить пользовательские данные в cookies. Но ограничение в 3 Кб на домен портит весь кайф от работы с ними. Да и каждый запрос гонять их между клиентом и сервером тоже напрягает.&lt;br&gt;&lt;br&gt;Представляю вам подборку методов о том, как можно хранить пользовательские данные на компьютере клиентов, не вовлекая в это cookies.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://forum.antichat.ru/showthread.php?p=714022&quot; target=&quot;_blank&quot;&gt;Хранение данных без cookies&lt;/a&gt; (Евгений Минаев)&lt;br&gt;&lt;br&gt;На всякий случай копирую в скролл  полный текст статьи.&lt;br&gt;&lt;br&gt;[color=#06088B]----[ NITRO ... ]&lt;br&gt;&lt;br&gt;&quot;Стою на шестом этаже пятиэтажного дома, да это незаконно, но здесь многим так знакомо&quot;&lt;br&gt;&lt;br&gt;Cookies впервые появились в Netscape, чтобы не хранить данные на веб сервере. Технология прижилась и даже с ростом вместимости жестких дисков до сих пор широко применяется. С появлением ajaxа и вследствие многократного увеличения запросов, приходится каждый раз при посылке запроса посылать также и cookies, что ведет к росту трафика, да и ограничение на них всего три килобайта. Первым эту проблему попытались исправить в Microsoft, внедрив поддержку userData в свой браузер пятой версии, но только после публикации предварительного описания HTML5 технология стала освещаться в различных веб изданиях. В статье расскажется об использовании данных в браузере на примерах Internet Explorer и Mozilla Firefox.&lt;br&gt;&lt;br&gt;----[ WHAT THE FUCK ?&#33; ... ] &lt;br&gt;&lt;br&gt;Из преимуществ можно отметить такие факты, как : уменьшение трафика, неограниченная длина данных, да и просто гарантия что у вас будет не как у всех xD. Применений такому способу масса - сохранение черновиков в веб формах, автозаполненных данных, хранение неособо важных данных, как дата последнего посещения, поисковый запрос или, например, название темы оформления сайта. Из достоинств метода можно выделить еще и безопасность - злоумышленник будет весьма удивлен отсутствию кук на сниффере. Но это вопрос времени. &lt;br&gt;&lt;br&gt;Так почему бы и не воспользоваться таким мощным и удобным средством?&lt;br&gt;&lt;br&gt;&lt;br&gt;----[ USER DATA ... ]&lt;br&gt;&lt;br&gt;userData появился в пятой версии Microsoft Internet Explorer и использовался для запоминания расположения элементов. Все данные представлены в виде связанной xml структуры в файле с расположением в Application Data/Microsoft/Internet Explorer/UserData. Первым технологию заметили программисты из Google. Чуть позже userData стали использовать как механизм хранения данных между сессиями. Все хранимые методы и свойства становятся доступными после события window.onload.&lt;br&gt;&lt;br&gt;Для начала работы с userData следует прописать определенную конструкцию в стиль документа.&lt;br&gt;&lt;br&gt;ie\:userdata {behavior:url(#default#userData);}&lt;br&gt;&lt;br&gt;После этого можно приступать к работе с данными, используя методы объекта.&lt;br&gt;&lt;br&gt;| Свойства &lt;br&gt;|&lt;br&gt;| expires&lt;br&gt;| Устанавливает или возвращает дату устаревания информации в хранилище&lt;br&gt;|&lt;br&gt;| XMLDocument&lt;br&gt;| Возвращает ссылку на объект XMLDocument, предоставляемый объектом&lt;br&gt;|&lt;br&gt;| Методы&lt;br&gt;|&lt;br&gt;| load (&lt;br&gt;| параметр object userDat Элемент, которому назначено поведение userData&lt;br&gt;| параметр string sStoreName Имя хранилища данных&lt;br&gt;| результат nothing )&lt;br&gt;|&lt;br&gt;| Метод load осуществляет чтение информации из хранилища данных.&lt;br&gt;| Для правильного выполнения метода load, элемент должен содержать установленный атрибут ID. &lt;br&gt;| &lt;html xmlns:IE&gt;&lt;br&gt;| &lt;head&gt;&lt;br&gt;| &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=windows-1251&quot;&gt;&lt;br&gt;| &lt;style type=&#39;text/css&#39;&gt;&lt;br&gt;| ie\:userdata {behavior:url(#default#userData);}&lt;br&gt;| &lt;/style&gt;&lt;br&gt;| &lt;/head&gt;&lt;br&gt;|&lt;br&gt;| &lt;body onload=&#39;oUserData.load(&quot;sDataStor&quot;);&#39;&gt;&lt;br&gt;| &lt;ie:userData ID=&quot;oUserData&quot; /&gt;&lt;br&gt;| &lt;/body&gt;&lt;br&gt;| &lt;/html&gt;&lt;br&gt;|&lt;br&gt;| save (&lt;br&gt;| параметр object userDat Элемент, которому назначено поведение userData&lt;br&gt;| параметр string sStoreName Имя хранилища данных&lt;br&gt;| результат nothing )&lt;br&gt;|&lt;br&gt;| Метод save осуществляет запись информации в хранилище данных. Доступность хранилища зависит от адреса ресурса, использующего &lt;br&gt;| это хранилище. Для того, что бы ресурс мог обратится к хранилищу данных, адрес ресурса, загружающего информацию из указанного &lt;br&gt;| хранилища данных, должен совпадать с адресом ресурса, создавшего это хранилище с точностью до всех используемых папок. &lt;br&gt;| &lt;html xmlns:IE&gt;&lt;br&gt;| &lt;head&gt;&lt;br&gt;| &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=windows-1251&quot;&gt;&lt;br&gt;| &lt;style type=&#39;text/css&#39;&gt;&lt;br&gt;| ie\:userdata {behavior:url(#default#userData);}&lt;br&gt;| &lt;/style&gt;&lt;br&gt;| &lt;/head&gt;&lt;br&gt;|&lt;br&gt;| &lt;body onunload=&#39;oUserData.save(&quot;sDataStor&quot;);&#39;&gt;&lt;br&gt;| &lt;ie:userData ID=&quot;oUserData&quot; /&gt;&lt;br&gt;| &lt;/body&gt;&lt;br&gt;| &lt;/html&gt;&lt;br&gt;|&lt;br&gt;| setAttribute (&lt;br&gt;| параметр string sAttrName Имя ключа&lt;br&gt;| параметр string vAttrValue Назначаемое ключу значение&lt;br&gt;| результат nothing )&lt;br&gt;| &lt;br&gt;| Метод setAttribute устанавливает значение нужному ключу, и в случае его отсутсвия сама добавляет ключ.&lt;br&gt;|&lt;br&gt;| getAttribute (&lt;br&gt;| параметр string sAttrName Имя ключа&lt;br&gt;| результат nothing )&lt;br&gt;|&lt;br&gt;| Метод getAttribute возвращает значение ключа или пустую строку.&lt;br&gt;|&lt;br&gt;| removeAttribute (&lt;br&gt;| параметр string sAttrName Имя ключа&lt;br&gt;| результат nothing )&lt;br&gt;|&lt;br&gt;| Метод getAttribute возвращает значение ключа или пустую строку.&lt;br&gt;|&lt;br&gt;|&lt;br&gt;| &lt;HEAD&gt;&lt;br&gt;|&lt;br&gt;| &lt;STYLE&gt;&lt;br&gt;| .userData {behavior:url(#default#userdata);}&lt;br&gt;| &lt;/STYLE&gt; &lt;br&gt;|&lt;br&gt;| &lt;SCRIPT&gt;&lt;br&gt;| function fnGet(){&lt;br&gt;| oPersistInput.load(&quot;oDataStore&quot;);&lt;br&gt;| oPersistInput.value=oPersistInput.getAttribute(&quot;sPersistAttr&quot;);&lt;br&gt;| }&lt;br&gt;| function fnSet(){&lt;br&gt;| oPersistInput.setAttribute(&quot;sPersistAttr&quot;,oPersistInput.value);&lt;br&gt;| oPersistInput.save(&quot;oDataStore&quot;);&lt;br&gt;| }&lt;br&gt;| function fnRem(){&lt;br&gt;| oPersistInput.removeAttribute(&quot;sPersistAttr&quot;);&lt;br&gt;| oPersistInput.save(&quot;oDataStore&quot;);&lt;br&gt;| }&lt;br&gt;| &lt;/SCRIPT&gt;&lt;br&gt;| &lt;/HEAD&gt;&lt;br&gt;|&lt;br&gt;| &lt;BODY&gt;&lt;br&gt;| &lt;INPUT type=text class=userData id=oPersistInput&gt; &lt;br&gt;| &lt;INPUT type=button value=&quot;Get Attribute&quot; onclick=&quot;fnGet()&quot;&gt;&lt;br&gt;| &lt;INPUT type=button value=&quot;Set Attribute&quot; onclick=&quot;fnSet()&quot;&gt;&lt;br&gt;| &lt;INPUT type=button value=&quot;Remove Attribute&quot; onclick=&quot;fnRem()&quot;&gt;&lt;br&gt;| &lt;/BODY&gt;&lt;br&gt;|&lt;br&gt;&lt;br&gt;----[ WINDOW.NAME ... ]&lt;br&gt;&lt;br&gt;DOM свойство я решил затронуть не просто так. Первым этот метод хранения данных предложил использовать Thomas Frank, в силу сохранения свойства на протяжении всей сессии жизни окна / закладки и является необязательным. Для удобства хранения данных я решил использовать структуру&lt;br&gt;ключ1=значение1&amp;ключ2=значение2...ключn=значениеn. Мой маленький набор функций позволяет заменять значения данных, добавлять новые и удалять существующие.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;| function replaceKey(key, value) {&lt;br&gt;| if(window.name == &#39;&#39; || window.name.indexOf(key) == -1){&lt;br&gt;| alert(&#39;No data in storage saved&#39;)&lt;br&gt;| return;&lt;br&gt;| } &lt;br&gt;| delKey(key);&lt;br&gt;| addKey(key,value);&lt;br&gt;| }&lt;br&gt;| &lt;br&gt;| function addKey(key, value) {&lt;br&gt;| myStorage = window.name;&lt;br&gt;| if(myStorage.indexOf(key+&#39;=&#39;)!= -1) {&lt;br&gt;| alert(&#39;Yet another key&#39;);&lt;br&gt;| return;&lt;br&gt;| }&lt;br&gt;| myStorage += key + &#39;=&#39; + encodeURIComponent(value) +&#39;&amp;&#39;; &lt;br&gt;| window.name = myStorage; &lt;br&gt;| }&lt;br&gt;| &lt;br&gt;| function getKey(key){&lt;br&gt;| if(window.name == &#39;&#39; || window.name.indexOf(key) == -1){&lt;br&gt;| alert(&#39;No data in storage saved&#39;)&lt;br&gt;| return;&lt;br&gt;| }&lt;br&gt;| myStorage = window.name;&lt;br&gt;| temp = myStorage.substring(myStorage.indexOf(key)+key.len gth,myStorage.length);&lt;br&gt;| temp = temp.substring(1,temp.indexOf(&#39;&amp;&#39;));&lt;br&gt;| return temp;&lt;br&gt;| }&lt;br&gt;| &lt;br&gt;| function delKey(key){&lt;br&gt;| if(window.name == &#39;&#39; || window.name.indexOf(key) == -1){&lt;br&gt;| alert(&#39;No data in storage saved&#39;)&lt;br&gt;| return;&lt;br&gt;| } &lt;br&gt;| value = getKey(key);&lt;br&gt;| myStorage = window.name; &lt;br&gt;| rExp = key + &#39;=&#39; + value + &#39;&amp;&#39;;&lt;br&gt;| window.name = myStorage.replace(rExp, &#39;&#39;);&lt;br&gt;| }&lt;br&gt;|&lt;br&gt;| replaceKey (&lt;br&gt;| параметр string key Имя ключа&lt;br&gt;| параметр string value Значение&lt;br&gt;| результат nothing )&lt;br&gt;|&lt;br&gt;| Фунцкция replaceKey удаляет меняет значение ключа на новое.&lt;br&gt;|&lt;br&gt;| addKey (&lt;br&gt;| параметр string key Имя ключа&lt;br&gt;| результат nothing )&lt;br&gt;|&lt;br&gt;| Функция addKey добавляет значение к уже сущестующим.&lt;br&gt;|&lt;br&gt;| delKey (&lt;br&gt;| параметр string key Имя ключа&lt;br&gt;| результат nothing )&lt;br&gt;|&lt;br&gt;| Функция delKey удаляет ключ из массива данных.&lt;br&gt;|&lt;br&gt;| getKey (&lt;br&gt;| параметр string key Имя ключа&lt;br&gt;| результат string temp Значение )&lt;br&gt;|&lt;br&gt;| Функция getKey возвращает значение ключа.&lt;br&gt;| &lt;br&gt;| &lt;html&gt;&lt;br&gt;| &lt;head&gt;&lt;br&gt;| &lt;title&gt;Пример к статье&lt;/title&gt;&lt;br&gt;| &lt;script type=&quot;text/jаvаscript&quot; src=&quot;ex.js&quot;&gt;&lt;/script&gt;&lt;br&gt;| &lt;/head&gt;&lt;br&gt;| &lt;br&gt;| &lt;body&gt;&lt;br&gt;| Hello world&lt;br&gt;| &lt;script type=&quot;text/jаvаscript&quot;&gt;&lt;br&gt;| addKey(&#39;key1&#39;,&#39;value1&#39;);&lt;br&gt;| // window name = key1=value1&amp;&lt;br&gt;| addKey(&#39;key2&#39;,&#39;value2&#39;);&lt;br&gt;| // window name = key1=value1&amp;key2=value2&amp;&lt;br&gt;| delKey(&#39;key2&#39;);&lt;br&gt;| // window name = key1=value1&amp;&lt;br&gt;| replaceKey(&#39;key1&#39;,&#39;newvalue&#39;);&lt;br&gt;| // window name = key1=newvalue&amp;&lt;br&gt;| &lt;/script&gt;&lt;br&gt;| &lt;/body&gt;&lt;br&gt;| &lt;/html&gt;&lt;br&gt;&lt;br&gt;----[ STORAGE ... ]&lt;br&gt;&lt;br&gt;Описание модели, реализующей хранение данных на стороне клиента, появилось в html 5 (http://www.whatwg.org/specs/web-apps/current-work/#storage0).&lt;br&gt;Данный способ является на данный момент самым удобным и даже кроссбраузерным.Люди в w3c представляют структуру storage так&lt;br&gt;&lt;br&gt;&lt;br&gt;Цитата:&lt;br&gt;interface Storage {&lt;br&gt;readonly attribute unsigned long length;&lt;br&gt;[IndexGetter] DOMString key(in unsigned long index);&lt;br&gt;[NameGetter] DOMString getItem(in DOMString key);&lt;br&gt;[NameSetter] void setItem(in DOMString key, in DOMString data);&lt;br&gt;[XXX] void removeItem(in DOMString key); &lt;br&gt;void clear();&lt;br&gt;};&lt;br&gt;&lt;br&gt;&lt;br&gt;Mozilla Firefox предлагает использовать два типа хранилищей - sessionStorage и globalStorage. Первый доступен только на протяжение времени жизни страницы и как только страница закрывается получить доступ к данным уже невозможно. Получить состояние storage можно через dom свойство Dom.storage.enabled&lt;br&gt;&lt;br&gt;| // Сохраняем в sessionStorage переменную username со значением antichat&lt;br&gt;| sessionStorage.username = &quot;antichat&quot;;&lt;br&gt;| // Проверяем, сохранилась ли переменная&lt;br&gt;| alert( &quot;username = &quot; + sessionStorage.username );&lt;br&gt;&lt;br&gt;&lt;br&gt;| // Получаем дескриптор текстового поля &lt;br&gt;| var field = document.getElementById(&quot;field&quot;);&lt;br&gt;| &lt;br&gt;| // Если включен режим автосохранения, загружаем черновик&lt;br&gt;| if ( sessionStorage.autosave ) {&lt;br&gt;| field.value = sessionStorage.autosave;&lt;br&gt;| }&lt;br&gt;| &lt;br&gt;| // Проверяем каждую секунду содержимое текстового поля на изменения&lt;br&gt;| setInterval(function(){&lt;br&gt;| // Сохраняем в черновик&lt;br&gt;| sessionStorage.autosave = field.value;&lt;br&gt;| }, 1000);&lt;br&gt;&lt;br&gt;GlobalStorage позволяет держать данные на протяжение длительного промежутка времени.&lt;br&gt;&lt;br&gt;| // Сохранить переменную snippet в globalStorage только для сайта antichat.ru&lt;br&gt;| globalStorage[&#39;antichat.ru&#39;].snippet = &quot;underWHAT?!&quot;;&lt;br&gt;&lt;br&gt;Счетчик посещения&lt;br&gt;&lt;br&gt;| // parseInt используется для перевода переменной visits в число&lt;br&gt;| // все данные в *Storage хранятся в виде строки&lt;br&gt;| globalStorage[&#39;mozilla.org&#39;].visits =&lt;br&gt;| parseInt( globalStorage[&#39;mozilla.org&#39;].visits || 0 ) + 1;&lt;br&gt;&lt;br&gt;Пример #1 http://aaronboodman.com/halfnote/&lt;br&gt;Пример #2 http://channy.creation.net/work/firefox/domstorage/#&lt;br&gt;&lt;br&gt;Thomas Frank написал библиотеку sessvars, облегчающей работу с globalStorage ( http://www.thomasfrank.se/sessvars.js )&lt;br&gt;&lt;br&gt;Единственная переменная-свойство объекта sessvars, которую вы не должны трогать, это $, потому что она содержит ряд полезных методов:&lt;br&gt;&lt;br&gt;Методы &lt;br&gt;&lt;br&gt;| sessvars.$.clearMem()&lt;br&gt;| Очищает sessvars&lt;br&gt;|&lt;br&gt;| sessvars.$.usedMem()&lt;br&gt;| Возвращает объем используемой памяти в килобайтах&lt;br&gt;|&lt;br&gt;| sessvars.$.usedMemPercent()&lt;br&gt;| Возвращает объем используемой памяти в процентах от общего возможного объема&lt;br&gt;|&lt;br&gt;| sessvars.$.debug()&lt;br&gt;| Выводит окно дебага вверху страницы (как в примере выше)&lt;br&gt;|&lt;br&gt;| sessvars.$.flush()&lt;br&gt;| Явно сохраняет текущее состояние sessvars, так что все данные будут сохранены когда будет совершен переход на другую страницу. Это редко бывает необходимо, так как в нормальной ситуации это делается автоматически при событии unload.&lt;br&gt;&lt;br&gt;Флаги&lt;br&gt;&lt;br&gt;Также есть ряд различных флагов, которыми вы можете устанавливать поведение sessvars:&lt;br&gt;&lt;br&gt;| sessvars.$.prefs.memlimit&lt;br&gt;| По умолчанию - 2000&lt;br&gt;| Указывает объем данных в Кб, разрешенный для хранения в sessvars. По умолчанию 2000 Кб, так как Opera 9.25 имеет ограничение чуть выше этого числа. У остальных браузеров (IE7.0, Firefox 1.5/2.0 и Safari 3.0) ограничение намного выше - 10 Мб не представляют сложности для этих браузеров.&lt;br&gt;&lt;br&gt;| sessvars.$.prefs.autoFlush&lt;br&gt;| true/false, по умолчанию true&lt;br&gt;| Определяет, будет ли метод flush() вызываться автоматически&lt;br&gt;&lt;br&gt;| sessvars.$.prefs.crossDomain&lt;br&gt;| true/false, по умолчанию false&lt;br&gt;| Если флаг установлен в true, содержимое sessvars можно читать из разных доменов (если оба сайта используют sessvars.js).&lt;br&gt;&lt;br&gt;| sessvars.$.prefs.includeFunctions&lt;br&gt;| true/false, по умолчанию false&lt;br&gt;| Определяет, будет ли sessvars сохранять функции.&lt;br&gt;&lt;br&gt;| sessvars.$.prefs.includeProtos&lt;br&gt;| true/false, по умолчанию false&lt;br&gt;| Если true, то будут сохранены свойства, назначенные прототипам различных данных или объектов. Редко бывает необходимо.&lt;br&gt;&lt;br&gt;----[ PersistJS ... ] &lt;br&gt;&lt;br&gt;PersistJS - первая jаvаscript библиотека, которую можно поправу назвать кроссбраузерной ( http://pablotron.org/?cid=1557 )&lt;br&gt;В данный момент он поддерживает следующие механизмы:&lt;br&gt;&lt;br&gt;| Flash 8&lt;br&gt;| Google Gears&lt;br&gt;| localstorage&lt;br&gt;| whatwg_db&lt;br&gt;| globalstorage&lt;br&gt;| UserData (Internet Explorer)&lt;br&gt;| cookie: хранение данных при помощи Cookie.&lt;br&gt;&lt;br&gt;Cookies используются только в случае отсутствия остальных способов.&lt;br&gt;&lt;br&gt;Сохранение данных&lt;br&gt;| // создаем новое хранилище данных&lt;br&gt;| var store = new Persist.Store(&#39;My Data Store&#39;);&lt;br&gt;| &lt;br&gt;| // данные для хранения&lt;br&gt;| var data = &quot;Некая длинная строка ...........&quot;;&lt;br&gt;| &lt;br&gt;| // сохраняем данные&lt;br&gt;| store.set(&#39;saved_data&#39;, data);&lt;br&gt;&lt;br&gt;Получение данных&lt;br&gt;| // получаем данные и показываем их пользователю&lt;br&gt;| store.get(&#39;saved_data&#39;, function(ok, val) { &lt;br&gt;| if (ok)&lt;br&gt;| alert(&#39;saved data = &#39; + val);&lt;br&gt;| }); &lt;br&gt;&lt;br&gt;Удаление данных&lt;br&gt;| store.remove(&#39;saved_data&#39;);&lt;br&gt;&lt;br&gt;Пример #1 http://jstoolbox.com/demo/persistjs/test/test_flash.html&lt;br&gt;&lt;br&gt;----[ OUTRO ... ] &lt;br&gt;&lt;br&gt;При написании статьи были использованы материалы с сайта habrahabr.ru, jstoolbox.com, developer.mozilla.org и msdn.microsoft.com.&lt;br&gt;&lt;br&gt;&lt;br&gt;Надеюсь, что информация не пройдет мимо, потому что эта статья как Ктулху - всё равно рано или поздно придёт и захавает. 2008[/color]</description> 
</item>
<item>
<guid isPermaLink="true">http://scrolls.combats.com/community/~developers/483188.html</guid> 
<pubDate>Fri, 08 May 2009 17:21:00 GMT</pubDate> 
<link>http://scrolls.combats.com/community/~developers/483188.html</link><author>developers : Alex Nomad</author>
<title>Подождите немного и попробуйте ещё раз</title>
<description>Как же мне надоела эта фраза, висящая минутами в бою&lt;br&gt;&quot;&lt;i&gt;&lt;b&gt;Подождите немного и попробуйте ещё раз&lt;/b&gt;&lt;/i&gt;&quot;&lt;br&gt;&lt;br&gt;Самому разбираться почему так ведет себя скрипт боя мне сейчас лень.&lt;br&gt;&lt;br&gt;Поэтому объявляю &lt;b&gt;конкурс&lt;/b&gt; для программистов (и всех кто себя таковыми считает):&lt;br&gt;&lt;br&gt;1) Тому кто разберется в причинах этой баги.&lt;br&gt;2) Тому кто напишет код, исправляющий ее.&lt;br&gt;3) Тому кто первым опубликует правильное описание причин баги и ее исправление в компьюнити Developers&lt;br&gt;&lt;br&gt;От меня будет вручено &lt;b&gt;&lt;font color=&quot;#CD2C28&quot;&gt;20 екр&lt;/font&gt;&lt;/b&gt;.&lt;br&gt;&lt;br&gt;Дерзайте&#33;&lt;br&gt;&lt;br&gt;П.С. Сроки конкурса ограничу 1 июлем, но при необходимости можно и продлить.</description> 
</item>
<item>
<guid isPermaLink="true">http://scrolls.combats.com/community/~developers/445953.html</guid> 
<pubDate>Tue, 24 Mar 2009 01:59:00 GMT</pubDate> 
<link>http://scrolls.combats.com/community/~developers/445953.html</link><author>developers : Damnedest</author>
<title>Получаем инфу из БК</title>
<description>Давным давно &lt;nobr&gt;&lt;A HREF=http://capitalcity.combats.com/clans_inf.pl?Ritter target=_blank&gt;&lt;img src=&quot;http://img.combats.com/i/klan/Ritter.gif&quot; border=0&gt;&lt;/a&gt;&amp;nbsp;&lt;b&gt;Alex Nomad&lt;/b&gt; [9]&lt;a href=&quot;http://capitalcity.combats.com/inf.pl?login=Alex Nomad&quot; target=_blank&gt;&lt;img src=&quot;http://img.combats.com/i/inf.gif&quot; border=0&gt;&lt;/a&gt;&lt;/nobr&gt; &lt;a href=&quot;http://scrolls.combats.com/&#37;7EAlex&#37;20Nomad/9350.html&quot; target=&quot;_blank&quot;&gt;рассказывал&lt;/a&gt; о том, как правильно получать информацию о персонаже в и приводил пример обращения к страницам БК. Мне кажется, что уже давным давно пора начинать использовать ООП, котрое есть в пыхе и использовать &lt;b&gt;православные&lt;/b&gt; методы.&lt;br&gt;&lt;br&gt;Собственно преимущества кода, который я предлагаю:&lt;br&gt; 1. Мы ограничиваем максимальное количество редиректов &lt;u&gt;тремя&lt;/u&gt;. Это не даст возможность серверу БК зациклить наш скрипт.&lt;br&gt;2. Мы ограничиваем время доступа к странице 10 секундами (хотя даже 10 много, лучше 3-5), чтобы не тратить много времени на тормозящий сервер БК.&lt;br&gt;3. Получением данных занимается curl (редиректы, таймауты, правильное разархивация)&lt;br&gt;4. В результате работы, с помощью iconv, мы получаем нормальную UTF-8 строчку, с которой можем спокойно работать. Забудьте вы уже о win-1251 - это архаизм&#33; Надо смотреть в будущее.&lt;br&gt;5. Ну и собственно мы получаем очень хорошие исключение на все ошибки, которые возникнут во время получения данных, которые можно будет отловить и как-то обработать.&lt;br&gt;&lt;br&gt;Код модуля можно посмотреть под катом. Появившиеся вопросы можно оставить в комментах.&lt;br&gt;&lt;br&gt;&lt;?&lt;br&gt;&lt;br&gt;/**&lt;br&gt;.* Класс утилит для работы с БК&lt;br&gt;.*&lt;br&gt;.* @version 0.1&lt;br&gt;.* @author Eugene Reich &lt;eugene.reich@gmail.com&gt;&lt;br&gt;.*/&lt;br&gt;&lt;br&gt;class CombatsUtils&lt;br&gt;{&lt;br&gt;..../**&lt;br&gt;.... * Возвращает содержимое страницы в UTF-8 кодировке&lt;br&gt;.... * Метод анализирует возвращаемые результаты и кидает соответствующие исключения&lt;br&gt;.... *&lt;br&gt;.... * @param string $url&lt;br&gt;.... * @static&lt;br&gt;.... * @access public&lt;br&gt;.... * @return string&lt;br&gt;.... */&lt;br&gt;....&lt;br&gt;....static public function getUrl($url)&lt;br&gt;....{&lt;br&gt;........$ch = curl_init();&lt;br&gt;........&lt;br&gt;........curl_setopt($ch, CURLOPT_URL, $url);&lt;br&gt;........curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br&gt;........curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br&gt;........curl_setopt($ch, CURLOPT_TIMEOUT, 10);&lt;br&gt;........curl_setopt($ch, CURLOPT_MAXREDIRS, 3);&lt;br&gt;........curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);&lt;br&gt;........curl_setopt($ch, CURLOPT_FAILONERROR, true);&lt;br&gt;........curl_setopt($ch, CURLOPT_ENCODING, &#39;gzip&#39;);&lt;br&gt;&lt;br&gt;........$result     = curl_exec($ch);&lt;br&gt;........$error      = curl_error($ch);&lt;br&gt;........$error_no   = curl_errno($ch);&lt;br&gt;........&lt;br&gt;........if ($error_no)&lt;br&gt;........{&lt;br&gt;............if ($error_no == 47)&lt;br&gt;...............throw new CombatsUtilsExceptionMaxRedirects();&lt;br&gt;&lt;br&gt;............if ($error_no == 28)&lt;br&gt;................throw new CombatsUtilsExceptionTimeout();&lt;br&gt;&lt;br&gt;............if ($error_no == 7)&lt;br&gt;................throw new CombatsUtilsExceptionConnection();&lt;br&gt;&lt;br&gt;............if ($error_no == 52)&lt;br&gt;................throw new CombatsUtilsExceptionEmpty();&lt;br&gt;&lt;br&gt;............throw new CombatsUtilsExceptionCurl($error_no.&#39;:&#39;.$error);&lt;br&gt;........}&lt;br&gt;&lt;br&gt;........// Меняем кодировку&lt;br&gt;........return iconv(&#39;windows-1251&#39;, &#39;utf-8&#39;, $result);&lt;br&gt;....}&lt;br&gt;}&lt;br&gt;&lt;br&gt;/**&lt;br&gt;.* Базовый класс исключений&lt;br&gt;.*&lt;br&gt;.* @uses NException&lt;br&gt;.* @version 0.1&lt;br&gt;.* @author Eugene Reich &lt;eugene.reich@gmail.com&gt;&lt;br&gt;.*/&lt;br&gt;&lt;br&gt;class CombatsUtilsException extends Exception {}&lt;br&gt;&lt;br&gt;/**&lt;br&gt;.* Превышено максимально допустимое количество редиректов&lt;br&gt;.*&lt;br&gt;.* @uses CombatsUtilsException&lt;br&gt;.* @version 0.1&lt;br&gt;.* @author Eugene Reich &lt;eugene.reich@gmail.com&gt;&lt;br&gt;.*/&lt;br&gt;&lt;br&gt;class CombatsUtilsExceptionMaxRedirects extends CombatsUtilsException {}&lt;br&gt;&lt;br&gt;/**&lt;br&gt;.* Превышен таймаут ожидания ответа от сервера&lt;br&gt;.*&lt;br&gt;.* @uses CombatsUtilsException&lt;br&gt;.* @version 0.1&lt;br&gt;.* @author Eugene Reich &lt;eugene.reich@gmail.com&gt;&lt;br&gt;.*/&lt;br&gt;&lt;br&gt;class CombatsUtilsExceptionTimeout extends CombatsUtilsException {}&lt;br&gt;&lt;br&gt;/**&lt;br&gt;.* Не удалось установить соединение с сервером&lt;br&gt;.*&lt;br&gt;.* @uses CombatsUtilsException&lt;br&gt;.* @version 0.1&lt;br&gt;.* @author Eugene Reich &lt;eugene.reich@gmail.com&gt;&lt;br&gt;.*/&lt;br&gt;&lt;br&gt;class CombatsUtilsExceptionConnection extends CombatsUtilsException {}&lt;br&gt;&lt;br&gt;/**&lt;br&gt;.* Пришел пустой ответ&lt;br&gt;.*&lt;br&gt;.* @uses CombatsUtilsException&lt;br&gt;.* @version 0.1&lt;br&gt;.* @author Eugene Reich &lt;eugene.reich@gmail.com&gt;&lt;br&gt;.*/&lt;br&gt;&lt;br&gt;class CombatsUtilsExceptionEmpty extends CombatsUtilsException {}&lt;br&gt;&lt;br&gt;/**&lt;br&gt;.* Непредусмотренное исключение&lt;br&gt;.*&lt;br&gt;.* @uses CombatsUtilsException&lt;br&gt;.* @version 0.1&lt;br&gt;.* @author Eugene Reich &lt;eugene.reich@gmail.com&gt;&lt;br&gt;.*/&lt;br&gt;&lt;br&gt;class CombatsUtilsExceptionCurl extends CombatsUtilsException {}</description> 
</item></channel>
</rss>
