Здравствуйте, гость ( Вход | Регистрация )

> [tutorial] Mapx.mul Размером 20000 * 20000 Своми Руками
Warstone
сообщение 12.7.2009, 11:14
Сообщение #1


*********

Группа: Модераторы
Наличность: 0
Пользователь №: 10.905
Возраст: 25



Нет предела совершенству. И каждый, кто когда-либо делал свой шард хотел-бы увеличить размер карты. Особенно это актуально для Сферойдов, где карта только одна и та исхожена вдоль и поперек. Данный мануал будет писаться для RunUO, но на самом деле изменений в скриптах будет чуть(размеры у карты поменять), поэтому перенести данные изменения на Сферу - если она поддерживает кастомизацию размеров карты - очень легко. Возможно в дальнейшем обсуждении кто-то добавит как это делать. Ну, приступим.

Felucca 0x001A6B20
Мои изыскания начались с хотелки увеличить мир в 4 раза. Изшерстил гугуль вдоль и поперек нашел только неоднократное упоминание что размеры "hardcoded" и типа не рыпайтеь. Не наш метод, так что началась инжинерная мысля. Первое что было известно - в Ранке размеры карт - задаются... Задаются примерно так:
${RunUO}/Scripts/Misc/MapDefinitions.cs
Исходный код
using System;
using Server;

namespace Server.Misc
{
public class MapDefinitions
{
public static void Configure()
{
/* Here we configure all maps. Some notes:
*
* 1) The first 32 maps are reserved for core use.
* 2) Map 0x7F is reserved for core use.
* 3) Map 0xFF is reserved for core use.
* 4) Changing or removing any predefined maps may cause server instability.
*/

RegisterMap( 0, 0, 0, 14336, 8192, 4, "Felucca", MapRules.FeluccaRules );
RegisterMap( 1, 1, 1, 7168, 4096, 0, "Trammel", MapRules.TrammelRules );
RegisterMap( 2, 2, 2, 2304, 1600, 1, "Ilshenar", MapRules.TrammelRules );
RegisterMap( 3, 3, 3, 2560, 2048, 1, "Malas", MapRules.TrammelRules );
RegisterMap( 4, 4, 4, 1448, 1448, 1, "Tokuno", MapRules.TrammelRules );

RegisterMap( 0x7F, 0x7F, 0x7F, Map.SectorSize, Map.SectorSize, 1, "Internal", MapRules.Internal );

/* Example of registering a custom map:
* RegisterMap( 32, 0, 0, 6144, 4096, 3, "Iceland", MapRules.FeluccaRules );
*
* Defined:
* RegisterMap( <index>, <mapID>, <fileIndex>, <width>, <height>, <season>, <name>, <rules> );
* - <index> : An unreserved unique index for this map
* - <mapID> : An identification number used in client communications. For any visible maps, this value must be from 0-3
* - <fileIndex> : A file identification number. For any visible maps, this value must be 0, 2, 3, or 4
* - <width>, <height> : Size of the map (in tiles)
* - <name> : Reference name for the map, used in props gump, get/set commands, region loading, etc
* - <rules> : Rules and restrictions associated with the map. See documentation for details
*/

TileMatrixPatch.Enabled = false; //OSI client patch 6.0.0.0
}

public static void RegisterMap( int mapIndex, int mapID, int fileIndex, int width, int height, int season, string name, MapRules rules )
{
Map newMap = new Map( mapID, mapIndex, fileIndex, width, height, season, name, rules );

Map.Maps[mapIndex] = newMap;
Map.AllMaps.Add( newMap );
}
}
}
То есть размеры карт лежат вообще "как угодно". И не вина RunUO что они "hardcoded" в клиенте. Значит сервер это тянет. Вся проблема в клиенте. Первое что сделал - открыл client.exe (предварительно сделав копию и вообще для меня это было Warstone.exe) и тупо поискав там слово Felucca. Поиск дал только 1 вхождение. Посмотрев вокруг - как-то не нашел ничего похожего на константы размера. Инженерная мысля пошла дальше. Судя по тому что было написано рядом с заветным словом - это просто кусок текстовых констант. Значит где-то должна быть ссылка на эту константу... Итак, константа находилась в 0x001A6B20 вспоминая тот факт, что в х86 архитектуре все числа должны быть перевернуты я начал искать 206B1A и... не нашел. И правильно что не нашел. Так как никто не будет читать константы из ехе напрямую. Все-же отмаплено в память когда ехе загружается. И в PE заголовке есть такая страшная фраза как Image Base. Вообще-то она изменяется, но по дефолту = 0x00400000. Прибавив это к своему адресу я получил 0x005A6B20, поменял местами до 206B5A и... нашел! Одно вхождение. Дальнейшие пляски с бубном показали что:
После ссылки на константу идут... РАЗМЕРЫ! следующие 4 байта после ссылки - ширина, а потом высота. Вот поменяв их на в 2 раза больше (помните о переворачивании констант) и поменяв соотв данные в RunUO, а так-же программно нагенерив соотв. размеров карту я получил и запустил это хозяйство и прекрасно бегал по этой карте.

Собственно остались проблемы: Как создать карту таких размеров, ведь ни один (разве что кроме CentrEd) редактор такого не позволяет, но и это оказалось не проблема. Так как увеличивали в 2 раза, то были подготовлены 4 карты и потом с помощью небольшой самописной программки объединены в одну. ЕХЕ версии 6.0.13.0 могу выслать по запросу.

Хочу сразу сказать, что Траммель и прочее меняется так-же.

ЗЫ: На правах рекламы: Все желающие могут присоединиться к проекту... На данном моменте нужны скриптеры... сервер RunUO. (IMG:style_emoticons/default/wink.gif)


--------------------
Do. Or do not. There is no Try!
© Master Joda, Dagobah, Star Wars: Episode V.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Warstone   [tutorial] Mapx.mul Размером 20000 * 20000 Своми Руками   12.7.2009, 11:14
Александр Needle™   Хм , познавательно спасибо   12.7.2009, 13:07
wap   Нет предела совершенству. И каждый, кто когда-либ...   12.7.2009, 17:16
Warstone   На правах холивара... Ну может быть. Я сразу сказа...   12.7.2009, 18:02
wap   Ну есть в sphere.ini вот такие строчки. // To acti...   13.7.2009, 0:26
StaticZ   следующие 4 байта после ссылки - ширина, а потом ...   24.1.2010, 23:09
Warstone   А было-бы не кисло понять что это за флаги. Скорей...   27.1.2010, 1:41
StaticZ   возможно я пока и сам не втыкал..   27.1.2010, 4:59
StaticZ   и новая проблема возникла минимапа не отображает с...   9.2.2010, 23:28
Warstone   А вот не смотрел в эту сторону... удет время - зай...   10.2.2010, 13:04
StaticZ   былбы признателен очень еслиб помог или хотяб дал ...   10.2.2010, 17:37
Warstone   Мапу на рапиду выложи - на выходных попробую поков...   11.2.2010, 0:19
StaticZ   скрин: [img]http://rghost.ru/972457/thumb.png Коо...   11.2.2010, 19:54
Warstone   Сейчас качаю карту. Просьба не выкладывать на ru в...   12.2.2010, 23:35
StaticZ   Сейчас качаю карту. Просьба не выкладывать на ru ...   13.2.2010, 0:58
StaticZ   ну как успехи? появились идеи какие нить?   14.2.2010, 19:04
Warstone   Вообще не смотрел. Я как-то забыл что у нас воскре...   15.2.2010, 1:24
Warstone   Еще немного инфы. Исходя из формата пакетов, макс...   2.1.2011, 18:22
StaticZ   Еще немного инфы. Исходя из формата пакетов, мак...   2.1.2011, 19:22
Warstone   с равным успехом размер может быть и 16к * 8к, эт...   3.1.2011, 3:31
StaticZ   Только вот RunUO 2.1 (и ниже) для CA и HS все-еще...   3.1.2011, 4:57
Warstone   Ну это - да. Правда мы тут говорим о технической в...   3.1.2011, 14:57
Warstone   Значит так... Что вытащили: Запись на одну карту ...   1.11.2012, 20:06
StaticZ   Хотел бы еще добавить, что в HS\SA в таблице ...   4.12.2012, 19:26
Nickname   Спасибо за инструкцию, помогла. Тема старая, воз...   10.7.2013, 20:18
StaticZ   Тема старая, возможно уже нашлось решение с мини-к...   10.7.2013, 23:48
Nickname   Понятно... и спасибо за Fiddler+, я и подумать не ...   11.7.2013, 1:02
StaticZ   Понятно... и спасибо за Fiddler+, я и подумать не...   11.7.2013, 2:07
Warstone   Да... Заодно для любителей оставлять только Феллюк...   11.7.2013, 10:57
StaticZ   Да... Заодно для любителей оставлять только Феллю...   11.7.2013, 12:39
Warstone   Нет. Он маппит один раз, а потом пользуется поинте...   12.7.2013, 1:02
StaticZ   Нет. Он маппит один раз, а потом пользуется поинт...   13.7.2013, 4:33
StaticZ   Еще 5 копеек от меня: В клиенте по умолчанию груз...   27.6.2014, 17:41


Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 18.4.2024, 19:34
Designed by Nickostyle