Результаты поиска
|
|
Сообщений: 1240
|
Опубликовано: 03.12.2008, 19:29:20
ищи в Local.xml там есть контейнеры, отвечающие за стили игры
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 03.12.2008, 23:37:34
закрываю тему, ибо неактуальна!
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 03.12.2008, 23:56:58
Идея: Сделать lua-скрипты в паке карт для игры по онлайну Тема зародилась тут. Паки карт поддерживают замену lua-скриптов, а это очень мощный инструмент для создания модов и всего-всего! если измудриться можно даже онлайн-миссию сделать! Основная проблема: при отключении lua-скрипта stdvs.lua для мультиплеерной карты игра не начинается, камера начинает хаотично крутиться и ничего не происходит. Отсюда вывод: в любом паке карт для каждой карты должен быть stdvs.lua. Значит надо прицепить свой lua-скрипт, обрабатывающий некоторые события. Надо: составить общий список событий, вызываемых в lua скриптах(надо проглядеть все lua файлы и посмотреть все функции, которые не вызываются внутри этого же lua-скрипта) После этого надо попробовать создать свой lua-скрипт со своими функциями, и там прописать обработку эти событий. Затем в паке карт к нужной карте попытаться прицепить этот lua-скрипт, т.е. чтобы в свойствах карты в строке lua-скрипты было: Code stdvs,wormpot,myscript.lua и посмотреть эффект Некоторая информация по lua тут p.s. у меня нет червей, не могу этого сам проделать, так что помогайте! возможно мы перевернём мир Worms!
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 03.12.2008, 23:59:31
думаю нет.. Данная тема далее будет развиваться тут В этой теме продолжаем обсуждать, что нужнее: паки карт и моды?
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 04.12.2008, 00:30:34
я помню вроде там есть контейнер, содержащий в се ссылки на контейнеры с количеством оружия каждого типа, его задержки по ходам и т.п. вот ищи в своём стиле нужную ссылку и меняй в контейнере по ссылке сами количества
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 04.12.2008, 10:11:19
я говорю именно о паках карт+lua, проблема как раз в том, что все карты, добавляемые через пак карт я сделал мультиплеерными. от stdvs не избавиться( и кстати другие просто не будут доступны в онлайн-игре вроде бы... я сейчас составляю список функций-обработчиков в lua-скриптах, надо попробовать их поставить в своих скриптх. Кстати, я 1 файл нашёл.. там 2 раза функция объявлена вот, Deathmatch4.lua: Code Deathmatch4.lua:41: PlayIntroMovie() Deathmatch4.lua:48: EFMV_Terminated() Deathmatch4.lua:53: DoOncePerTurnFunctions() Deathmatch4.lua:5 8: TurnEnded() Deathmatch4.lua:62: DoOncePerTurnFunctions() Поэтому мне кажется можно поверх своего обработчика написать новый. firsacho, проверь плз.. например к стандартной карте, в которой есть обработчик TurnEnded() прикрепи файл myscript.lua(см. в прикреплённых файлах). он перекрывает функцию TurnEnded(). Важно понять, что будет работать: обе функции, или только в myscript.lua или наооборот.. кстати, насчёт AI бота... открой stdlib.lua: Code function RunAILogic() -- ovverride this function to now have AI. SendMessage("AI.PerformDefaultAITurn"); -- actually called to start the AI turn. SendMessage("AI.ExecuteActions"); end какие-нибудь мысли есть?) насчёт распределения ролей.. тут посложнее. Есть функция в lib_help.lua: Code function lib_GetRandom(min, max) SendMessage("RandomNumber.Get") local RawRand = GetData("RandomNumber.Uint") local MyRand = min + math.mod(RawRand, max+1-min) return MyRand end так вот, по-моему не зря тут вызывают GetData("RandomNumber.Uint"), а не math.random, которая есть в lua. по-моему lib_GetRandom(min, max) вернёт одинковое число для всех игроков, таким образом назначение ролей вполне реально) надо только определить игрока, у которого запущен скрипт... ещё, до меня кое-что допёрло!) файл stdlib.lua содержит многие стандартные обработчики событий, они перекрываются обработчиками из других файлов.. наверно
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 04.12.2008, 10:38:03
у меня есть некоторые догадки по назначению ролей... кусок кода из lib_help.lua Code function lib_SetupMultiplayerTeam(TeamName, NumWorms, Worm1Name, Worm2Name, Worm3Name, Worm4Name, Worm5Name, Worm6Name, Skill, Grave, Flag, Speech, IsLocal, AlliedGroup, Handicap, HatAttachment, GlassesAttachment, TashAttachment, GlovesAttachment,vWormSpawnIndex)
local lock, team local WormSpawnIndexA WormSpawnIndexA=vWormSpawnIndex lock, team = EditContainer(lib_GetTeamContainerName(TeamIndex)) team.Active = true team.Name = TeamName team.TeamColour = 0 team.Skill = Skill team.GraveIndex = Grave team.FlagGfxName = Flag team.AlliedGroup = AlliedGroup team.IsLocal = IsLocal team.ATT_Hat = HatAttachment team.ATT_Glasses = GlassesAttachment team.ATT_Tash = TashAttachment team.ATT_Gloves = GlovesAttachment if Skill>0 then team.IsAIControlled = true else team.IsAIControlled = false end меня интересует team.IsLocal = IsLocal давайте подумаем. если у 2-х игроков 1 и тот же скрипт, он выполняется в одинаковом порядке, значит если у одного игрока team.IsLocal будет = true, или 1, а у другого false или 0, значит эта переменная означает, что это команда 1-го игрока. надо попытаться это проверить....
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 05.12.2008, 19:00:31
ну не мои проблемы)читай про xml, разбирайся, в общей структуре всех xml файлов, применяемых в игре и всё поймёшь
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 05.12.2008, 19:37:33
короче.. раньше на lua толком внимания не обращал, щас понимаю, что это мега-мощная штука. глядите сами: вот пример кода: Code function lib_SetupCrate(DataId) local CrateContainerData = QueryContainer(DataId) SendMessage("GameLogic.ResetCrateParameters") SetData("Crate.Type", CrateContainerData.Type) SetData("Crate.Contents", CrateContainerData.Contents) SetData("Crate.NumContents", CrateContainerData.NumContents) SetData("Crate.Index", CrateContainerData.Index) SetData("Crate.LifetimeSec", CrateContainerData.LifetimeSec) SetData("Crate.GroundSnap", CrateContainerData.GroundSnap) SetData("Crate.Parachute", CrateContainerData.Parachute) SetData("Crate.Spawn", CrateContainerData.Spawn) SetData("Crate.FallSpeed", CrateContainerData.FallSpeed) SetData("Crate.Gravity", CrateContainerData.Gravity) SetData("Crate.TeamDestructible", CrateContainerData.TeamDestructible) SetData("Crate.TeamCollectable", CrateContainerData.TeamCollectable) SetData("Crate.UXB", CrateContainerData.UXB) SetData("Crate.Hitpoints", CrateContainerData.Hitpoints) SetData("Crate.Pushable", CrateContainerData.Pushable) SetData("Crate.RandomSpawnPos", CrateContainerData.RandomSpawnPos) SetData("Crate.CanDropFromChute", CrateContainerData.CanDropFromChute) SetData("Crate.WaitTillLanded", CrateContainerData.WaitTillLanded) SetData("Crate.TrackCam", CrateContainerData.TrackCam) SetData("Crate.Scale", CrateContainerData.Scale) SetData("Crate.AddToWormInventory", CrateContainerData.AddToWormInventory) SetData("Crate.CustomGraphic", CrateContainerData.CustomGraphic) end все эти переменные определяются в Local.xml Code <XIntResourceDetails id='Crate.AddToWormInventory'> <Value>0</Value> <Name>Crate.AddToWormInventory</Name> <Flags>64</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.CanDropFromChute'> <Value>1</Value> <Name>Crate.CanDropFromChute</Name> <Flags>96</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.DelayMillisec'> <Value>0</Value> <Name>Crate.DelayMillisec</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.Gravity'> <Value>1</Value> <Name>Crate.Gravity</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.GroundSnap'> <Value>0</Value> <Name>Crate.GroundSnap</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.HealthInCrates'> <Value>25</Value> <Name>Crate.HealthInCrates</Name> <Flags>96</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.Hitpoints'> <Value>25</Value> <Name>Crate.Hitpoints</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.Index'> <Value>-1</Value> <Name>Crate.Index</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.LifetimeTurns'> <Value>-1</Value> <Name>Crate.LifetimeTurns</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.NumContents'> <Value>1</Value> <Name>Crate.NumContents</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.Parachute'> <Value>1</Value> <Name>Crate.Parachute</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.Pushable'> <Value>1</Value> <Name>Crate.Pushable</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.RandomSpawnPos'> <Value>0</Value> <Name>Crate.RandomSpawnPos</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.Showered'> <Value>0</Value> <Name>Crate.Showered</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.TeamCollectable'> <Value>-1</Value> <Name>Crate.TeamCollectable</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.TeamDestructible'> <Value>-1</Value> <Name>Crate.TeamDestructible</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.TrackCam'> <Value>1</Value> <Name>Crate.TrackCam</Name> <Flags>96</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.UXB'> <Value>0</Value> <Name>Crate.UXB</Name> <Flags>98</Flags> </XIntResourceDetails> <XIntResourceDetails id='Crate.WaitTillLanded'> <Value>1</Value> <Name>Crate.WaitTillLanded</Name> <Flags>96</Flags> </XIntResourceDetails> то есть вызывая SetData("Crate.Scale", CrateContainerData.Scale) или соответсвующий GetData мы записываем или извлекаем из xml-файла какие-то данные=) круто, да?) а вот ещё, нашёл код, который возможно содержит в себе какую-нито инфу о текущем игроке.. тока чё-то хз, как ей пользоваться) Code <XIntResourceDetails id='User.Changed'> <Value>0</Value> <Name>User.Changed</Name> <Flags>96</Flags> </XIntResourceDetails> <XIntResourceDetails id='User.NameCheck'> <Value>0</Value> <Name>User.NameCheck</Name> <Flags>96</Flags> </XIntResourceDetails> <XIntResourceDetails id='User.Room'> <Value>0</Value> <Name>User.Room</Name> <Flags>96</Flags> </XIntResourceDetails>
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 09.12.2008, 22:52:12
АлексБонд, вопрос: как ты узнаёшь, кто есть кто.. то есть как скрипт узнаёт, что он у игрока номер 1, а у второго, что у игрока номер 2?
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 10.12.2008, 11:42:43
у нас всё также, рандом тоже один, общий, и это круто) то есть нумерация команд у 1-го и 2-го игрока одинаковая, то есть если игрок 1 играет 1-ой командой, игрок 2 - 2-ой командой, тогда в скрипте у игрока 1 и в скрипте у игрока 2 к примеру такой код: Code lock, team = EditContainer("Team.Data00") team.Active = true team.Name = "The Lightsiders" team.TeamColour = 0 team.ATT_Glasses = "WXFE.A.Glasses.Pirate" team.ATT_Hat = "WXFE.A.Hat.Pirate" --team.ATT_Gloves = "WXFE.A.Gloves.Pirate" CloseContainer(lock) изменит именно команду 1-го игрока? то есть оба игрока увидят одинаковый результат? ещё, поподробнее рассказать о порядке выполнения скрипта? Quote (AlexBond) Скрипты загружаются от функции initialise которая и лежит в stdlib.lua, остальное лишь прикрепляющие файлы, в которых содержаться функции вызываемые из stdlib.lua. тут ты говоришь, что initialise лежит в stdlib.lua. А у нас не так) Вот наш stdlib: Code -- Called at the start of a game function StartFirstTurn() WaitUntilNoActivity = false SendMessage("Timer.StartGame") StartTurn() end
function StartTurn() done_once_per_turn_functions = false SendMessage("GameLogic.ActivateNextWorm") -- do this after activating the worm so his details appear in the HUD SendMessage("Timer.StartHotSeatTimer") --SendMessage("Weapon.Create") SetWind() --TurnStarted() SendMessage("GameLogic.Turn.Started") TurnStarted() -- moved here so TeleportIn camera can override startofturn camera RunAILogic() end
function RunAILogic() -- ovverride this function to now have AI. SendMessage("AI.PerformDefaultAITurn"); -- actually called to start the AI turn. SendMessage("AI.ExecuteActions"); end
function Timer_HotSeatTimedOut() SendMessage("Timer.StartTurn") end
function GameLogic_EndTurn_Immediate() -- this called by surrender and skip go -- do all the work here as EndTurn() by itself would be illegal SendMessage("Weapon.Delete") SendMessage("Utility.Delete") SendMessage("Timer.EndTurn") SendMessage("Weapon.DisableWeaponChange") EndTurn() end
function Timer_RetreatTimedOut() EndTurn() end
-- The worm whose turn it is has been damaged function Worm_Damaged_Current() SendMessage("Weapon.Delete") SendMessage("Utility.Delete") SendMessage("Timer.EndRetreatTimer") SendMessage("Timer.EndTurn") SendMessage("Weapon.DisableWeaponChange") EndTurn() end
function Timer_TurnTimedOut() SendMessage("Weapon.Delete") SendMessage("Utility.Delete") SendMessage("Weapon.DisableWeaponChange") EndTurn() end
-- Everything has come stopped moving function Timer_PostActivityTimedOut() SendMessage("GameLogic.AboutToApplyDamage") SendMessage("GameLogic.ApplyDamage") CheckActivity() end
function CheckActivity() Activity = GetData("ObjectCount.Active") if Activity == 0 then DoPostActivity() else WaitUntilNoActivity = true end end
function DoPostActivity() if done_once_per_turn_functions == true then SendMessage("GameLogic.Turn.Ended") TurnEnded() else -- Done only once SendMessage("Net.DisableAllInput") SendMessage("Worm.ApplyPoison") SendMessage("GameLogic.AboutToApplyDamage") SendMessage("GameLogic.ApplyDamage") SetData("DoubleDamage", 0) DoOncePerTurnFunctions() done_once_per_turn_functions = true local GameOver = GetData("FCS.GameOver") -- do no further processing if sudden death drew the game if GameOver == 0 then CheckActivity() -- in case an earthquake or similar was just started end end end
-- override this function TurnStarted() end
-- override this function TurnEnded() CheckOneTeamVictory() end
-- decides if the game has been won or drawn at the end of every turn -- Note do this last in the TurnEnded function as it finishes with the StartTurn Message function CheckOneTeamVictory() -- Changed to use alliances rather than teams so 2 teams vs 1 can end correctly SendMessage("WormManager.GetActiveAlliances") AllianceCount = GetData("AllianceCount") if AllianceCount == 0 then RoundOver() -- all the teams have just snuffed it SendMessage("GameLogic.Draw") elseif AllianceCount == 1 then RoundOver() -- only one team remains -- PC: changed this call to catch naughty use of GetActiveTeamIndex usage. Use the new -- call to get the last team with a worm thats alive on it. SendMessage("WormManager.GetSurvivingTeam") WinningTeam = GetData("SurvivingTeamIndex") SendIntMessage("GameLogic.Win", WinningTeam) else StartTurn() end end
function EndTurn() -- note: could this happen multiple times per turn (eg from WormDamagedCurrent)? -- if so does it matter?
-- Poisoning now moved to DoPostActivity
SendMessage("GameLogic.EndTurn") Activity = GetData("ObjectCount.Active") if Activity == 0 then SendMessage("Timer.StartPostActivity") -- pause else WaitUntilNoActivity = true end end
-- If there was some activity its finished now function GameLogic_NoActivity() if WaitUntilNoActivity == true then -- reset WaitUntilNoActivity before calling message below because zero time might -- cause it to call back immediately and set it true again WaitUntilNoActivity = false SendMessage("Timer.StartPostActivity") end end
function SetWind() SelectRandomWind() end
function SelectRandomWind() -- First the speed SendMessage("RandomNumber.Get") RandomNumber = GetData("RandomNumber.Float") MaxWind = GetData("Wind.MaxSpeed") WindCap = GetData("Wind.Cap")/10 -- Scheme can set the maximum value 1-10 as appears in HUD SetData("Wind.Speed", WindCap*RandomNumber*RandomNumber*MaxWind) -- now squared to make high winds less common
-- Now a direction SendMessage("RandomNumber.Get") RandomNumber = GetData("RandomNumber.Float") Direction = RandomNumber * 2 * 3.14 SetData("Wind.Direction", Direction) end
function DoOncePerTurnFunctions() end
function RoundOver() end
function SetWormpotModes() end
а Initialize обычно в других файлах определяется. Кстати, объясни поточнее, как тут функции перегружаются как определить, какая функция какую перегружает? просто порядок их определения не очень ясен..
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 10.12.2008, 13:13:18
Кто нибудь, попробуйте добавить в наш stdlib.lua в конец файла это: Code function Weapon_Fired_Start() SetData("Text.TestComment", "FIRE!") SetData("CommentaryPanel.Comment", "Text.TestComment") SendMessage("CommentaryPanel.ScriptText") SendMessage("Timer.EndTurn") SendMessage("Weapon.DisableWeaponChange") end и запустите какую-нибудь игру(не по инету, на компе), затем выстрелите меня интересуют 2 вещи, выведится ли при выстреле текст FIRE!, вылетит ли вообще игра, или будет всё корректно работать.. короче это важно! если всё заработает, значит можно писать свои обработчики аналогичные тем, которые в Worms3D(у нас обработчика выстрела нету( )
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 13.12.2008, 14:01:30
эта функция, которая вызывается при выстреле из оружия. Я её написал в прошлом посте. Я прошу вас попробовать написать её в луа файле, и посмотреть, вызовется ли она? (то есть есть ли этот обработчик в W4)
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 16.12.2008, 23:38:45
какое слово???при чём тут перевод?) Фирсачо, это никак с локализацией не связано... это связано с интерпретатором луа, точнее с тем, как он встроен в W4. Я так подозреваю(даже вроде где-то об этом читал), что луа позовляет вызывать функции из программы, в которую луа встроен.. короче, если разработчики W4 захотели, чтобы SetData позволял бы что-то сделать, то они прописали его в интерпретаторе Lua как доступную, вот и всё) P.S. когда скажете мне результат этого скрипта??? P.P.S. я тут щас весь в учёбе, так что появляюсь редко.. извините плохого Одмина..
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 20.12.2008, 15:12:12
не.. это надо в stdlib.lua... hitman, cпасибо!
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 20.12.2008, 15:13:19
Фирсачо... просьба,поставь скрипт тока на главной( я просто не могу по сайту ползать...
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 20.12.2008, 18:28:49
не в нете проблема! в компе! он не выдерживает всякую анимацию) проц под 100% грузится(
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 21.12.2008, 16:50:34
старый, отцовский) он говорит я его загажу всякими прогами, поэтому не даёт)
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 21.12.2008, 16:51:16
12
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 21.12.2008, 16:55:12
14
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|