Сейчас 10:15:06 Четверг, 25 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [JASSфак] Лекция 2. Локальные переменные.
[JASSфак] Лекция 2. Локальные переменные.
AkvariumДата: Суббота, 21 Ноября 2009, 17:53:30 | Сообщение # 51
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Люди. Подскажите как JNGP поставить. В папку с варом все кинул. Работет. Проверку карте не делает(

 

[DUОS]Дата: Суббота, 21 Ноября 2009, 18:07:48 | Сообщение # 52
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (Akvarium)
Проверку карте не делает(

Akvarium,
Карту пускать онли обычным варом...

Добавлено (21-11-2009, 18:07)
---------------------------------------------
Даю вам ещё одну статью на заметку.

Quote (GooGLe)
GetInventoryIndexOfItemTypeBJ

Она самая.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

AkvariumДата: Суббота, 21 Ноября 2009, 18:08:39 | Сообщение # 53
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Quote (|DUОS|)
Карту пускать онли обычным варом...

?! Я в редакторе этом жду на проверку. Пробовал простым WE открыть. Карту открыл. Но при запуске выдал меню вара. При завпуску из JGNP выдает вот че:

ЗЫ: Ты вобще GUIфак забросил?




Сообщение отредактировал Akvarium - Суббота, 21 Ноября 2009, 18:17:27
 

DjimmДата: Суббота, 21 Ноября 2009, 18:19:16 | Сообщение # 54
5 уровень
Группа: Проверенные
Сообщений: 117
Награды: 0
Репутация: 20
Блокировки:
Quote (Akvarium)
Но при запуске выдал меню вара.

Если такое произошло, то где то в триггерах ошибка. У меня такое бывало уже :D Кстати, у меня тест карты через JNPG нормально делает. Бывает иногда гдюк, что при проверке jass кода пишет ошибку pjass'а, а потом просто не запускает проверку карты, но бывает такое редко (всего пока 2 раза было у меня).
Quote (|DUОS|)
Карту пускать онли обычным варом...

А почему??? JNPG обычный вар запускает вроде бы как.
 

[DUОS]Дата: Суббота, 21 Ноября 2009, 18:25:24 | Сообщение # 55
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (Djimm)
JNPG обычный вар запускает вроде бы как.

Djimm,
Неа. Он New Gen WarCraft пускает...


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

AkvariumДата: Суббота, 21 Ноября 2009, 18:28:33 | Сообщение # 56
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
HEELLPPP!!!!...
Quote (Djimm)
в триггерах ошибка

WE Ниче не сказал. Вкл/выкл триг и ниче не сказал.
Я эту карту где то 6 месяцов лепил О_о. С дуру открыл этим чтоб он провалился. Терь и норм вар не видит!!!!АААА!!!!




Сообщение отредактировал Akvarium - Суббота, 21 Ноября 2009, 18:32:47
 

DjimmДата: Суббота, 21 Ноября 2009, 18:37:26 | Сообщение # 57
5 уровень
Группа: Проверенные
Сообщений: 117
Награды: 0
Репутация: 20
Блокировки:
Quote (|DUОS|)
Он New Gen WarCraft пускает...

А разница обычного вара и New Gen'a?? Только что он в окне открывается, хотя это в настройках меняеться. Или тем, что в нем читы не работают?? <_<
Akvarium, ты через 1.24 делал?? JNPG как 1.23 открывает вроде бы. Если ты что то поменял через 1.23, то он мог на 1.24 не прочесть карту.
 

AkvariumДата: Суббота, 21 Ноября 2009, 18:39:26 | Сообщение # 58
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Djimm, я ее начал делать на 1.21 и продолжил делать на 1.24b. Сейчас стоит 1.24b КАК СПАСТИ ВЕРСИЮ?! А то трындец... :'(

 

GooGLeДата: Суббота, 21 Ноября 2009, 20:17:02 | Сообщение # 59
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Блокировки:
Quote (|DUОS|)
Объявлять их нужно в самом начале функции, причём до глобальных переменных.

Локальные переменные объявляются как аргументы функций или внутри тел функций до операторов.
Quote (|DUОS|)
local real r - реальная

Вещественная какой точности, знаем?
 

[DUОS]Дата: Суббота, 21 Ноября 2009, 21:24:50 | Сообщение # 60
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Akvarium,
common.j засунуть...


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

СорнемусДата: Воскресенье, 22 Ноября 2009, 01:55:24 | Сообщение # 61
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Щяс пойдёт жесткая волна оффтопа:
Тэк, чтот я отстал от жизни сайта...
1. Кто состоит в команде W.Info?
2. Котофиг бунтует?
3. Скоро штурмуем ХГМ? D:

Добавлено (22-11-2009, 01:55)
---------------------------------------------
4. "Создатели миров" это Б.ру?

Сообщение отредактировал Сорнемус - Воскресенье, 22 Ноября 2009, 02:43:36
 

AkvariumДата: Воскресенье, 22 Ноября 2009, 10:42:28 | Сообщение # 62
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Все!!!Нашел в чем была неисправность!Всем спс..) Версия спасена) уф....



Сообщение отредактировал Akvarium - Воскресенье, 22 Ноября 2009, 11:33:25
 

0x4453Дата: Воскресенье, 22 Ноября 2009, 16:24:56 | Сообщение # 63
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
GooGLe, я ввёл такие усовершенствования:убрал цикл,занёс boolexpr в локалку
вышло такое:
Code
function InitTrig_A takes nothing returns nothing  
local integer i = 0x00  
local boolexpr filter = null
local trigger t = CreateTrigger( )   
call TriggerRegisterPlayerUnitEvent(t, Player(0x00), EVENT_PLAYER_UNIT_DEATH, filter)  
call TriggerRegisterPlayerUnitEvent(t, Player(0x01), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x02), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x03), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x04), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x05), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x06), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x07), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x08), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x09), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerAddAction( t, function Trig_A_Actions )  
call DestroyBoolExpr(filter)
set filter = null
set t = null
endfunction

Akvarium, открой wehack.lua и снеси следующий код:

Code
if rtc_enabled.checked then
--        local args = string.gsub(cmdline,"\"([^\"]*)\" ","")
--        wehack.messagebox(args,"Grimoire",false)
--        cmdline = "startwar3.bat " .. args

         local testmaparglist = argsplit(cmdline)
         local len = table.getn(testmaparglist)
         if len > 2 then
             cmdline = "startwar3.bat"
             --if not grim.exists(cmdline) then
             --    cmdline = "NewGen Warcraft.exe" -- NewGen version doesn't use batch files
             --end
             for i = 2, len do
                 if (i < len) and (usetestmapconf) then
                     local arglen = string.len(testmaparglist[i+1])
                     if testmaparglist[i] == "-loadfile" and arglen > 3 then
                         local ext = string.lower(string.sub(testmaparglist[i+1],arglen-4+1))
                         if ext == ".w3m" or ext == ".w3x" then
                             local substitute = wehack.setupwgcfile(testmaparglist[i+1]);
                             if (substitute ~= testmaparglist[i+1]) then
                    testmaparglist[i+1] = "\"" .. substitute .. "\""
                             end
                         end
                     end
                 end
                 cmdline = cmdline .. " " .. testmaparglist[i]
             end
         end
     end

ртц само собой не будет,но проверять можно будет(на себе проверял - работает)

Добавлено (22-11-2009, 16:22)
---------------------------------------------
открывать через текстовой редактор

Добавлено (22-11-2009, 16:24)
---------------------------------------------
GooGLe, хотя нет,даже так:

Code

function InitTrig_A takes nothing returns nothing  
local integer i = 0x00  
local boolexpr filter = null
local trigger t = CreateTrigger( )   
call TriggerRegisterPlayerUnitEvent(t, Player(0x00), ConvertPlayerUnitEvent(20), filter)  
call TriggerRegisterPlayerUnitEvent(t, Player(0x01), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x02), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x03), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x04), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x05), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x06), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x07), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x08), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x09), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), ConvertPlayerUnitEvent(20), filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), ConvertPlayerUnitEvent(20), filter)
call TriggerAddAction( t, function Trig_A_Actions )  
call DestroyBoolExpr(filter)
set filter = null
set t = null
endfunction
 

AkvariumДата: Воскресенье, 22 Ноября 2009, 16:42:22 | Сообщение # 64
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
0x4453, спс)))Проверяет)))

 

GooGLeДата: Воскресенье, 22 Ноября 2009, 19:50:54 | Сообщение # 65
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Блокировки:
Функцию GetInventoryIndexOfItemTypeBJ можешь не переделывать, там примерно то же, что и в моем примере. В стиле MaSer.
А в моем примере единственное, что нужно было сделать, - перенести exitwhen i>0x0f в позицию между set i = i + 0x01 и loop. Потому как при первом проходе нефиг проверку выполнять.
Разворачивать цикл неправильно. Код выполняется однократно при инициализации карты, значит оптимизировать нужно прежде всего по длине кода.
Заменять фильтр на локалку обязательно, когда этот фильтр есть. А когда его нет (null), то null и надо ставить. Если на локалку поменял в перспективу, то изволь откомментить код.
Твоя замена константы EVENT_PLAYER_UNIT_DEATH, которая вычисляется однажды, на 16 вызовов функции - глупость. (Сама функция тоже глупость близов.)
 

0x4453Дата: Воскресенье, 22 Ноября 2009, 21:39:04 | Сообщение # 66
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
Quote (GooGLe)
Заменять фильтр на локалку обязательно, когда этот фильтр есть. А когда его нет (null), то null и надо ставить. Если на локалку поменял в перспективу, то изволь откомментить код.

даже null`евой boolexpr может вызвать утечку
Quote (GooGLe)
Разворачивать цикл неправильно. Код выполняется однократно при инициализации карты, значит оптимизировать нужно прежде всего по длине кода.

а разве он не выполняется при срабатывании события?
итого - цикл в данном случае лучше?
Quote (GooGLe)
Твоя замена константы EVENT_PLAYER_UNIT_DEATH, которая вычисляется однажды, на 16 вызовов функции - глупость. (Сама функция тоже глупость близов.)

тогда замена константы не имеет смысла?
Quote (GooGLe)
А в моем примере единственное, что нужно было сделать, - перенести exitwhen i>0x0f в позицию между set i = i + 0x01 и loop. Потому как при первом проходе нефиг проверку выполнять.

буду знать,спасибо

итого:очередной раз понимаю что надо ещё учиться и учиться
но тут как бы школа,и спасибо ещё раз за объяснения некоторых вещнй

Добавлено (22-11-2009, 21:39)
---------------------------------------------
вещей*

 

GooGLeДата: Понедельник, 23 Ноября 2009, 10:27:10 | Сообщение # 67
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Блокировки:
Quote (0x4453)
даже null`евой boolexpr может вызвать утечку

И такая пакость уже не удивляет. Обоснуй кодом.
Quote (0x4453)
а разве он не выполняется при срабатывании события

Нет, в потоке main.
Quote (0x4453)
но тут как бы школа

Ты ведешь себя не как ученик, а как я, а меня и так две.
 

0x4453Дата: Понедельник, 23 Ноября 2009, 11:27:55 | Сообщение # 68
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
Quote (GooGLe)
И такая пакость уже не удивляет. Обоснуй кодом.

проверял на основе этого кода с подсчётом хэндлов
без занесения в локалку доходило до 300 и падало на 280,а с локалкой доходило до 250 и возвращалось на 200,+ вар кушал на 0,5к кб меньше
хотя возможно это и не так
 

HAPKOMAHДата: Понедельник, 23 Ноября 2009, 12:04:47 | Сообщение # 69
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
Код давай, блин.
 

0x4453Дата: Понедельник, 23 Ноября 2009, 13:05:22 | Сообщение # 70
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
HAPKOMAH, выше посты читать умеем?
 

СорнемусДата: Понедельник, 23 Ноября 2009, 15:16:21 | Сообщение # 71
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Когда будет 3 урок?

Добавлено (23-11-2009, 15:16)
---------------------------------------------
Кстати, надо выставить оценки в дневник =)

 

[DUОS]Дата: Понедельник, 23 Ноября 2009, 15:47:08 | Сообщение # 72
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
3-й урок - сегодня.
Quote (Сорнемус)
Кстати, надо выставить оценки в дневник =)
Я выставлю после того, как дам вам контрольную...


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

СорнемусДата: Понедельник, 23 Ноября 2009, 16:08:18 | Сообщение # 73
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (|DUОS|)
Я выставлю после того, как дам вам контрольную...

А, ну да, ну да)
 

HAPKOMAHДата: Вторник, 24 Ноября 2009, 22:08:39 | Сообщение # 74
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
Code
function InitTrig_A takes nothing returns nothing   
local integer i = 0x00   
local boolexpr filter = null
local trigger t = CreateTrigger( )    
call TriggerRegisterPlayerUnitEvent(t, Player(0x00), EVENT_PLAYER_UNIT_DEATH, filter)   
call TriggerRegisterPlayerUnitEvent(t, Player(0x01), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x02), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x03), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x04), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x05), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x06), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x07), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x08), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x09), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, filter)
call TriggerAddAction( t, function Trig_A_Actions )   
call DestroyBoolExpr(filter)
set filter = null
set t = null
endfunction

Code
function InitTrig_A takes nothing returns nothing   
local integer i = 0x00   
local boolexpr filter = null
local trigger t = CreateTrigger( )    
call TriggerRegisterPlayerUnitEvent(t, Player(0x00), EVENT_PLAYER_UNIT_DEATH, null)   
call TriggerRegisterPlayerUnitEvent(t, Player(0x01), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x02), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x03), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x04), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x05), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x06), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x07), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x08), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x09), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerAddAction( t, function Trig_A_Actions )   
call DestroyBoolExpr(filter)
set filter = null
set t = null
endfunction

Абсолютно идентичны в плане утечек.
 

СорнемусДата: Вторник, 24 Ноября 2009, 22:52:47 | Сообщение # 75
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (HAPKOMAH)
Абсолютно идентичны в плане утечек.

Почти абсолютно идентичны вобще.

Добавлено (24-11-2009, 22:52)
---------------------------------------------
Обьясние, мне, непонятливому, зачем нужно:

Code
local integer i = 0x00    
local boolexpr filter = null


Сообщение отредактировал Сорнемус - Вторник, 24 Ноября 2009, 22:48:56
 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [JASSфак] Лекция 2. Локальные переменные.
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz