[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Щас расскажу.... дебилу)))

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Итак, приступим! я конечно и сам не ас, но всё что знаю покажу.
Открываем W3DMapEditor By AlexBond. Видим такое окно
Разворачиваем его в полную ширину для удобства и жмём File->New map И теперь видим вот это:

Щёлкнем правой мышкой по корневому объекту(root) в списке объектов. Увидим менюшку. Выберим в ней Add Poxel - добавить поксель. Поксель-это как пиксель в 2д изображении. То есть это маленький кирпичик-самое простое, что может быть. Из покселей делаются все карты. Итак мы добавили поксель. В списке объектов(он очень похож на проводник в виндовс) в корневом объекте появился поксель. Теперь щёлкнем по вкладке Режим редактирования(Edit mode). На ней несколько кнопок.
Нажмите на редактирование покселя. Теперь в свойствах доступны свойства покселей. Это имя(Poxel name), размер (Poxel size) и текстура покселя(Poxel texture). Нажмите на плюсик рядом с размером покселя. Появятся размеры и текущая текстура, а также текстура. Зажмите стрелочку и тяните вверх или вниз. Размеры покселя будут меняться. Также поступите с текстурой и выберите текстуру. Нажмите применить(Apply) Всё мы сделали поксель. Теперь выберите основную правку(General edit). Станут доступными редактирование позиции(Position), поворота(Rotate), размера(Size), текстурных координат(Texture coordinates) и типа поверхности (Surface Type). Первые три изменяются анологично. Тип поверхности имеет цвет(Color), а также сглаживание и т.п. После выбора цвета, типов сглаживания и невидимости жмите применить(Apply). Готово.

Поксели можно вкладывать друг в друга, Объединять в группы создав поксель-папку(Dummy poxel) в списке объектов. Этот тип покселей-контейнер для других. Так можно объединить поксели в группу, которая описывает башню.

Поксели можно копировать. Для этого просто перетащите его в списке объектов в другой поксель. Можно копровать один поксель хоть 100 раз! При этом размер файла не будет сильно расти!

Также поксели можно искривлять. Выберите режим првки высотной карты(HMap). Потом выберите свойство высотная карта в покселе (Height Map). Нажмите Загрузить высотную карту(Import HMap). Там выберите файл с картинкой и нажмите применить.

Прикрепления: 3796827.jpg (56.6 Kb) · 1357594.jpg (182.2 Kb) · 4529081.jpg (151.1 Kb)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
В игре Worms 4 mayhem используются скрипты Lua. Для каждой карты в игре задаётся набор lua-скриптов, которые загружаются при создании игры на этой карте. Рассмотрим описание одной из карт в файле Scripts.xml:

Code
    <WXFE_LevelDetails id='Multi.ChuteToVictory-0'>
       <Frontend_Name>FETXT.Jur.Chute.MissionName</Frontend_Name>
       <Frontend_Briefing>FETXT.Jur.Chute.Brief</Frontend_Briefing>
       <Frontend_Image>ChuteToVictory.tga</Frontend_Image>
       <Level_ScriptName>stdvs,wormpot</Level_ScriptName>
       <Level_FileName>ChuteToVictory</Level_FileName>
       <Objectives></Objectives>
       <Level_Number>42</Level_Number>
       <Level_Type>0</Level_Type>
       <Lock>Lock.Map.ChuteToVictory</Lock>
       <Theme_Type>5</Theme_Type>
       <Preview_Type>0</Preview_Type>
       <BonusTime>600</BonusTime>
     </WXFE_LevelDetails>

В поле <Level_ScriptName> описаны скрипты. Это скрипт stdvs, отвечающий за загрузку стандартной игры и скрипт wormpot, отвечающий за применение настроек вормпота(у меня почему-то это зовётся "горшок червей"). Сами lua-файлы находятся в папке /scripts/. При изменении этих файлов вы можете испортить свою игру, поэтому перед запуском сохраните эту папку!

Вот содержимое файла stdvs.lua

Code
-- standard VS game

function Initialise()
    StartedSuddenDeath = false
     
    SetupScheme()

    lib_SetupMultiplayerWormsAndTeams()
    SendMessage("WormManager.Reinitialise")

    lib_SetupMinesAndOildrums() -- do this after worms are set up to get correct worm collision

    local scheme = QueryContainer("GM.SchemeData")
    if scheme.RoundTime == 0 then
       StartSuddenDeath() -- do this after worms are set up to readjust health
       local GameOver = GetData("FCS.GameOver")
       -- do no further processing if sudden death drew the game
       if GameOver ~= 0 then
          return  
       end
    end
     
    if scheme.MineFactoryOn == true then
       SendMessage("GameLogic.CreateRandMineFactory")
    end
     
    if scheme.TelepadsOn == true then
        SendMessage("GameLogic.PlaceTelepads")        
    end
     
    SetData("Camera.StartOfTurnCamera","Default")
     
    SetWormpotModes()
     

    WaitingForStartFirstTurn = false
    StartFirstTurn()
--   Activity = GetData("ObjectCount.Active")
--   if Activity == 0 then
--  WaitingForStartFirstTurn = false
--        StartFirstTurn()
--    else
--  WaitingForStartFirstTurn = true
--    end
end

function SetSpecialWeapon(TeamIndex, WeaponName)
    SetData("SpecialWeapon.TeamIndex", WormIndex)
    SetData("SpecialWeapon.Weapon", WeaponName)
    SendMessage("GameLogic.SetSpecialWeapon")

    -- TODO
    -- uses GameLogicService to call inventory.SetWeaponCount(0, -1)
end

function DoOncePerTurnFunctions()
    -- skip all this if the end of the deathmatch
    SendMessage("WormManager.GetActiveAlliances")
    AllianceCount = GetData("AllianceCount")
    if AllianceCount >1 then
       CheckSuddenDeath()
       SendMessage("GameLogic.DropRandomCrate")
       SendMessage("GameLogic.StartMineFactory")
       DoWormpotOncePerTurnFunctions()
    end
end

function SetupScheme()

    local scheme = QueryContainer("GM.SchemeData")
     
    if scheme.FallDamage == 0 then
--       -- Don't override the wormpot setting
--       local Wormpot = QueryContainer("WormPot")
--       if Wormpot.FallingHurtsMore == false then
--           SetData("Worm.FallDamageRatio", 0)
--      end

   SendMessage("GameLogic.SetNoFallDamage")
    end
     
    SetData("HUD.Clock.DisplayRoundTime", scheme.DisplayTime)
    SetData("Crate.HealthInCrates", scheme.HealthInCrates)
    SetData("DefaultRetreatTime", scheme.LandTime)
    SetData("Land.Indestructable", GetData("FE.Land.Ind"))
    SetData("Wind.Cap", scheme.WindMaxStrength)

    SetupInventoriesAndDelays()
    SetupTeleportIn()
   
    SetData("HotSeatTime", scheme.HotSeat)
    SetData("TurnTime", scheme.TurnTime)
    SetData("RoundTime", scheme.RoundTime)

end

function SetupInventoriesAndDelays()
   
    local scheme = QueryContainer("GM.SchemeData")

    lib_SetupDefaultInventoryAndDelays()
    local index
    for index = 0,3 do
        lib_SetupTeamWeaponDelays(index, "Inventory.WeaponDelays.Default")
    end

    -- If this is the first round then no matter what the stockpiling options are
    -- of if "Stockpiling Off" then give every Alliance a copy of the Scheme inventory
    local RoundsCompleted = GetData("GameOver.RoundNumber")
    if RoundsCompleted == 0 or scheme.Stockpiling == 0 then
       CopyContainer("Inventory.Alliance.Default", "Inventory.Alliance00")
       CopyContainer("Inventory.Alliance.Default", "Inventory.Alliance01")
       CopyContainer("Inventory.Alliance.Default", "Inventory.Alliance02")
       CopyContainer("Inventory.Alliance.Default", "Inventory.Alliance03")
    -- "Stockpiling" this option gives the alliance the total of the default and the stockpile
    elseif scheme.Stockpiling == 1 then
       for i = 0,3 do
          InventoryName = lib_GetAllianceInventoryName(i)
          StockpileName = lib_GetStockpileInventoryName(i)
          CopyContainer("Inventory.Alliance.Default", InventoryName)
          SetData("GameLogic.AddInventory.Arg0", InventoryName)
          SetData("GameLogic.AddInventory.Arg1", StockpileName)
          SendMessage("GameLogic.AddInventory")
       end
    -- "Stockpiling Anti" (Stock continues to decrement throught all turns)
    elseif scheme.Stockpiling == 2 then  
       CopyContainer("Inventory.Stockpile00", "Inventory.Alliance00")
       CopyContainer("Inventory.Stockpile01", "Inventory.Alliance01")
       CopyContainer("Inventory.Stockpile02", "Inventory.Alliance02")
       CopyContainer("Inventory.Stockpile03", "Inventory.Alliance03")
    end

    -- Special weapons
    -- if option is enabled then the Alliance inventories are supplemented with
    -- the combined special weapons of all the teams
    GM = QueryContainer("GM.GameInitData")
    if scheme.Special == 1 then
        -- only add in the specials when we add the full inventories
        if RoundsCompleted == 0 or scheme.Stockpiling == 0 or scheme.Stockpiling == 1 then
           if GM.NumberOfTeams>=1 then  
              IncrementAlliedInventory(GM.T1_AlliedGroup, GM.T1_SWeapon)
           end
           if GM.NumberOfTeams>=2 then  
              IncrementAlliedInventory(GM.T2_AlliedGroup, GM.T2_SWeapon)
           end
           if GM.NumberOfTeams>=3 then  
              IncrementAlliedInventory(GM.T3_AlliedGroup, GM.T3_SWeapon)
           end
           if GM.NumberOfTeams>=4 then  
              IncrementAlliedInventory(GM.T4_AlliedGroup, GM.T4_SWeapon)
           end
        end
    end
     
end

function IncrementAlliedInventory(AlliedGroup, Weapon)
    local InventoryName = lib_GetAllianceInventoryName(AlliedGroup)
    SetData("GameLogic.AddInventory.Arg0", InventoryName)
    SetData("GameLogic.AddInventory.Arg1", Weapon)
    SendMessage("GameLogic.IncrementInventory")
end

function Stockpile()
    -- record the remaining stock for future rounds
    CopyContainer("Inventory.Alliance00", "Inventory.Stockpile00")
    CopyContainer("Inventory.Alliance01", "Inventory.Stockpile01")
    CopyContainer("Inventory.Alliance02", "Inventory.Stockpile02")
    CopyContainer("Inventory.Alliance03", "Inventory.Stockpile03")
end

function RoundOver()
    Stockpile()
end

function TurnStarted()
    local scheme = QueryContainer("GM.SchemeData")
    if scheme.WormSelect == 1 then
       SendMessage("WormSelect.OptionSelected")
    end
    TeleportIn()
end

function SetupTeleportIn()
    -- Must do this BEFORE call to ReinitialiseWorms
    local scheme = QueryContainer("GM.SchemeData")
    local WormIndex = 0
    local DataId = lib_GetWormContainerName(WormIndex)
    while DataId ~= "" do
        
       lock, worm = EditContainer(DataId)
       if scheme.TeleportIn == 1 then
          worm.TeleportIn = true
       else
          worm.TeleportIn = false
       end
       CloseContainer(lock)
        
       WormIndex = WormIndex + 1
       DataId = lib_GetWormContainerName(WormIndex)
    end
end

function TeleportIn()
    local CurrentWorm = GetData("ActiveWormIndex")
    if CurrentWorm ~= -1 then
       local DataId = lib_GetWormContainerName(CurrentWorm)
       local worm = QueryContainer(DataId)
       if worm.TeleportIn == true then
          SendMessage("WormManager.TeleportIn")
       end
    end
end

function Timer_GameTimedOut()
    -- game over dealth with in CheckSuddenDeath()
end

function CheckSuddenDeath()

    -- dont start or continue sudden death if a win is pending
    -- ie. if a team already won dont risk killing it due to sudden death
    SendMessage("WormManager.GetActiveAlliances")
    local AllianceCount = GetData("AllianceCount")

    if AllianceCount>1 then
       local RoundTimeRemaining = GetData("RoundTimeRemaining")
     
       if RoundTimeRemaining == 0 and StartedSuddenDeath==false then
          StartSuddenDeath()
       end

       -- Tell game water is about to rise, so as not to award kills
       SendMessage( "GameLogic.AboutToWaterRise" )
        
       -- Raise the water level
       SetData("Water.Level", GetData("Water.Level") + GetData("Water.RiseSpeed.Current") )
    end
end

function StartSuddenDeath()
    -- called at start if No game timer

    -- Set Sudden Death Options
    -- (0 = One health, 1 = Water rise, 2 = GameOver)

    StartedSuddenDeath = true

    local scheme = QueryContainer("GM.SchemeData")
    if scheme.SuddenDeath == 0 then
       SendMessage("Comment.SuddenDeath")
       lib_SetAllWormsEnergy(1)
    -- unecessary (we can switch it on and off by the later level rise button)
    elseif scheme.SuddenDeath == 1 then
       SendMessage("Comment.SuddenDeath")
    elseif scheme.SuddenDeath == 2 then
       RoundOver()
       SendMessage("GameLogic.Draw")
    end
     
    -- Set Water Rise Speed
    -- (0 = No Rise, 1 = Slow rise, 2 = Medium rise, 3 = fast rise)
    if scheme.WaterSpeed == 0 then
       SetData("Water.RiseSpeed.Current", 0)
    elseif scheme.WaterSpeed == 1 then
       SetData("Water.RiseSpeed.Current", GetData("Water.RiseSpeed.Slow") )
    elseif scheme.WaterSpeed == 2 then
       SetData("Water.RiseSpeed.Current", GetData("Water.RiseSpeed.Medium") )
    elseif scheme.WaterSpeed == 3 then
       SetData("Water.RiseSpeed.Current", GetData("Water.RiseSpeed.Fast") )
    end

end

-- If there was some activity its finished now
function GameLogic_NoActivity()

    if WaitUntilNoActivity == true then
       SendMessage("Timer.StartPostActivity")
       WaitUntilNoActivity = false
    end
     
    if WaitingForStartFirstTurn == true then
       StartFirstTurn()
       WaitingForStartFirstTurn = false
    end
     
end

function Worm_Died()
    -- if there is only one team left abort the turn now rather than wait on
    SendMessage("WormManager.GetActiveAlliances")
    AllianceCount = GetData("AllianceCount")
    if AllianceCount < 2 then
       SendMessage("Weapon.Delete")
       SendMessage("Utility.Delete")
       SendMessage("Timer.EndTurn")  
       SendMessage("Weapon.DisableWeaponChange")
       EndTurn()
    end
end

Этот файл - по сути набор функций. Функция начинается со слова function, а заканчивается словом end. Сразу после слова function идёт имя функции а далее список параметров в скобках. Это заголовок функции. Далее вплоть до слова end идёт тело функции. Из тела функции могут вызываться другие функции, там могут встречаться условные операторы и циклы. Также стоит заметить, что могут вызываться функции из библиотеки(файл lib_help.lua). Символы -- это начало комментария, то есть всё что после него не будет выполняться.

Сам я не знаю язык lua, но как программист представляю в общих чертах его смысл, поэтому и решил натолкнуть вас на мысль поизучать его и скрипты для карт. А изучить его вы сможете тут.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Не буду голословным в утверждении, что изменения луа скриптов дают широкие возможности. вот скриншотик

Тут 200 бочек вместо стандартных 15.
Как сделать? Откройте файл lib_help.lua, найдите в самом конце файла
Code

    if scheme.Objects == 2 or scheme.Objects == 3 then
       for i = 1,15 do
          SendMessage("GameLogic.CreateRandomOildrum")
       end
    end

число 15 замените на 100 и сохраните. всё!

Прикрепления: 3449090.jpg (90.1 Kb)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Чтобы сделать турнир создайте тему в этом форуме и напишите туда правила, количество участников, дату и чё сами захотите

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
опа! а можешь залить в файлы?

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Quote (Chih-Pyh)
эх был бы код на языке html....

Это я не совсем понял))


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
хм... ну я б написал прогу для конвертации в хтмл))

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
ты про код самой игры или про ксом файлы?

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Найдите в файле Tweak.xml следующий текст:
Code
    <XFloatResourceDetails id='Land.OverrideScale'>
        <Value>20</Value>
        <Name>Land.OverrideScale</Name>
        <Flags>64</Flags>

и замените число 20 числом 200, а потом включите игру и поставьте любую карту!
При этом все предметы, здания и вообще все расстояния увеличатся в 10 раз!


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Ну мне просто хочется своебразную статистику, скока у мну народа)))интересно просто.

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
мне кажется не оч(((

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
ну тогда пробуй ассемблер изучать, скачай OllyDebug и смотри как игра работает, и по необходимости изменяй её.... но это сложно!я пробовал так посмотреть как старый редактор карт работает.но устал!

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
То Данил: я твоё сообщение удалил. не надо мой сайт превращать в место для выяснения отношений. Если чё не нравится в других, ищи их кланы или аськи и там всё говори!

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Для того чтобы сайт сделать лучше мне надо бы что-нибудь писать на сайте. Про что писать?Или что выкладывать?Смотрите опрос

Ответьте пожалуйста все!


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
кроме этого ещё что, просто это долго, а щас у мну нет времени, я учусь.

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
да... наверно можно. тогда тебе надо будет в своей карте разместить штук 16 эммитеров на твоей платформе. для этого скорее всего придётся чуток помудиться. Открыть любую карту из миссий, открыть найти там эммитеры, скопировать их к себе, потому что создавать свои в редакторе по-моему нельзя. А потом надо будет написать своё размещение червяков на карте в соответсвующем скрипте. а ещё в списке карт надо указать свой скрипт-файл вместо stdvs. wormpot можно оставить.

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Проги проги! - их искать надо. Сам я их не могу штамповать. А про карты-скоро будет пак с картами на 50 мб

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
ну как вариант.... чтоб знать общественное мнение.просто найти их оч трудно, но если надо постараюсь

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Перемещённые сообщения.

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Поиск: