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

> [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
сообщение 12.7.2013, 1:02
Сообщение #2


*********

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



Цитата
А разница? он же отмапит несколько раз одно и тоже )
Нет. Он маппит один раз, а потом пользуется поинтерами. Из таблицы файлов файлы будут отмапплены только один раз.


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


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Warstone @ 12.7.2013, 2:02) *

Нет. Он маппит один раз, а потом пользуется поинтерами. Из таблицы файлов файлы будут отмапплены только один раз.
Не факт, это смотря как написанно.. проверят надо, хотя звучит в принципе разумно и похоже не правду...


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 27.6.2014, 17:41
Сообщение #4


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Еще 5 копеек от меня:

В клиенте по умолчанию грузиться карта map0 и все значения ставятся по умолчанию для этой карты, в том числе и ее размеры. Меняются они лишь при смене карты, поэтому если надо менять размеры 0й карты, то стоит также изменить значения по умолчанию для переменных хранящих размер текущей карты. Найти их для клиента 7.0.23.1 можно по адресу 00708CF8, ну для любого другого клиента в принципе не сложно, самый простой способ - сделать тупо поиск "mobtypes.txt" в .data и немного выше будут искоеммые значения.

Впринципе можно и без этого, если при логине тупо перекинуть игрока на другую карту и обратно, но это не красивое решение ))

Сообщение отредактировал StaticZ - 27.6.2014, 17:43


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайне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


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

 

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