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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> [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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Александр Needle™
сообщение 12.7.2009, 13:07
Сообщение #2


********

Mammy's hero
Сообщений: 1.215
Регистрация: 26.5.2009
Группа: Пользователи
Наличность: 114
Из: Украина , Одесса
Пользователь №: 11.891
Возраст: 29



Хм , познавательно спасибо
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Wap
сообщение 12.7.2009, 17:16
Сообщение #3


**********

Администратор Форума
Сообщений: 2.891
Регистрация: 22.12.2006
Группа: Администраторы
Наличность: 28158
Пользователь №: 9.227



Цитата(Warstone @ 12.7.2009, 9:14) *

Нет предела совершенству. И каждый, кто когда-либо делал свой шард хотел-бы увеличить размер карты. Особенно это актуально для Сферойдов, где карта только одна и та исхожена вдоль и поперек.
Попрошу не нести бред. Сфера 56б, при желании, поддерживает все существующие карты.
На правах холивара. (IMG:style_emoticons/default/smile.gif)

А да, где-то читал разговоры про такое, там писали, что чтобы все работало стабильно, нужно еще увеличивать объем памяти, который клиент выделяет под загрузку карты. Я не знаю, так ли это, просто для справки написал, вдруг пригодится...


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Warstone
сообщение 12.7.2009, 18:02
Сообщение #4


*********

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



Цитата
На правах холивара.
На правах холивара... Ну может быть. Я сразу сказал что я не Сферойд. Ты лучьше скажи, можно-ли там задать размеры карты и приведи код задания размеров этих. Даже если они в ini, а не холиварь. Хотя похоливарить - это конечно да...


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


**********

Администратор Форума
Сообщений: 2.891
Регистрация: 22.12.2006
Группа: Администраторы
Наличность: 28158
Пользователь №: 9.227



Ну есть в sphere.ini вот такие строчки.
Код
// To activate ML-sized map #0 uncomment the next line (don't forget to uncomment
// sphere_map0_ml.scp and sphere_map_points0_ml.scp in spheretables.scp if you want
// to use the default areas)
//MAP0=7168,4096,-1,-1

// To activate ML-sized map #1 uncomment the next line
//MAP1=7168,4096,-1,-1

Они вообще для переключения 0/1 карты на МЛовский размер. Но то, что за знаком "=" стоит не банальная цифра 1, а размеры, говорит, что написать там можно все, что угодно. Убираем комменты, редактируем размеры и вперед...
Более того, это все наводит на мысль, что таким же методом можно менять размеры любой карты. Это подтвердилось, строка в ини MAP2=10000,10000,-1,-1 без проблем расширила 2 карту до 10000х10000.
Итог, для того чтобы задать размеры карты достаточно прописать в sphere.ini:
Код
MAPномер_карты=длиннаx,длиннаy,-1,-1

Проверено.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 24.1.2010, 23:09
Сообщение #6


*********

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



Цитата(Warstone @ 12.7.2009, 11:14) *

следующие 4 байта после ссылки - ширина, а потом высота.


Хотелбы еще добавить о полезности следующих 8ми байт. Они задают конец карты, т.е. определяют начало "кармашка для данжей". в противном случае если граница кармашка не будет совпадать то на карте будут не приятые черные полосы... значение оставшихся байтов "записи" для меня пока осталось загадкой. есть подозрения что это просто какието флаги.


--------------------
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
сообщение 27.1.2010, 1:41
Сообщение #7


*********

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



Цитата
значение оставшихся байтов "записи" для меня пока осталось загадкой. есть подозрения что это просто какието флаги.
А было-бы не кисло понять что это за флаги. Скорей всего это что-то связанное с анимацией (мертвый мир) или еще чем-нибудь. Но у меня тупо нет времени на это.


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


*********

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



возможно я пока и сам не втыкал..


--------------------
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
сообщение 9.2.2010, 23:28
Сообщение #9


*********

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



и новая проблема возникла минимапа не отображает статику если Х больше памоему 0х1400 (5120 +- 5 ), а вот по У ограничения нет отображает вплоть до 8192, хотя вся статика прекрасно выводится клиентом, если какиенить идеи с чем это связанно и где копать?


--------------------
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
сообщение 10.2.2010, 13:04
Сообщение #10


*********

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



А вот не смотрел в эту сторону... удет время - займусь.


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


*********

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



былбы признателен очень еслиб помог или хотяб дал наводку где копать... пока у меня никаких идей кроме как копать в *.exe число 0х00001400 или число блоков нет... но это всеравно что искать иголку в стоге сена. Навсякий случай размер мапы 12288х8192


--------------------
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
сообщение 11.2.2010, 0:19
Сообщение #12


*********

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



Мапу на рапиду выложи - на выходных попробую поковыряться и скрины, где ты видишь несоответствие (подозреваю, что везде, но все-таки) в купе с координатами.


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


*********

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



скрин:
(IMG:http://rghost.ru/972457/thumb.png)

Координаты: по Х примерно 5100-5200 (иногда почемуто бывает поразаному), по Y - пофиг, тестить можно на верху карты Y(0-380) и самый низ Y (7900-8192).

Индекс мапы: 1 (трамель)
Размер мапы: 12288х8192
Клиент 6.0.13.0 (сам юзаю седьмой, но как понял семерки у тебя нет), патченый способом описанным тобой выше + после размера карты я изменил значения 00140000 00100000 на 00300000 00200000 эти значения определяют границы карты и начала кармашка данжа, без них по середине карты будет черная полоса.

Скрин карты:
(IMG:http://rghost.ru/972550/thumb.png)

Сылка на архив с картой и ехешником:
http://www.rapidshare.ru/1374762 (82 Мб)

Заранее спасибо -)


--------------------
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
сообщение 12.2.2010, 23:35
Сообщение #14


*********

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



Сейчас качаю карту. Просьба не выкладывать на ru версии... Самое нормальное - выкладывать на de версии, так как оттуда качается нормально. Пока смотрел - подумал что это как-то сильно перекликается со старым карманом... Надо будет посмотреть что с Х на 10-12К координате... Так-же ведет себя радар или все нормально показывает?


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


*********

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



Цитата(Warstone @ 12.2.2010, 23:35) *

Сейчас качаю карту. Просьба не выкладывать на ru версии... Самое нормальное - выкладывать на de версии, так как оттуда качается нормально.

Учту на будущее, хотя имхо нормально качать с рапиды можно только с платным акком )



Цитата(Warstone @ 12.2.2010, 23:35) *

Пока смотрел - подумал что это как-то сильно перекликается со старым карманом... Надо будет посмотреть что с Х на 10-12К координате... Так-же ведет себя радар или все нормально показывает?

Нет после Х = 5200 (примерно) уже на радаре показывается только рельеф и такая картина до самого упора при х == 12288... Но что странно, это то что размеры кармана я изменил, с какойто стороны так себя клиент стал ввести только после того как я изменил размеры кармана с другой стороны не изменяя размеры карманы клиент работает с новой мапой не корректно (непроходимый шов из 1-2 блоков пустых тайлов), да и заметить это было нельзя со старым карманом.


--------------------
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
сообщение 14.2.2010, 19:04
Сообщение #16


*********

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



ну как успехи? появились идеи какие нить?


--------------------
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
сообщение 15.2.2010, 1:24
Сообщение #17


*********

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



Цитата
ну как успехи? появились идеи какие нить?
Вообще не смотрел. Я как-то забыл что у нас воскресенье - пропащий день.


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


*********

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



Еще немного инфы.

Исходя из формата пакетов, максимальные размеры карт:
32768 * 16384
Так как в пакете WorldItem x = x & 0x7FFF, а y = y & 0x3FFF.


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


*********

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



Цитата(Warstone @ 2.1.2011, 18:22) *

Еще немного инфы.

Исходя из формата пакетов, максимальные размеры карт:
32768 * 16384
Так как в пакете WorldItem x = x & 0x7FFF, а y = y & 0x3FFF.

с равным успехом размер может быть и 16к * 8к, это маски для игнорирования битов, т.к. в пакете 1A старшие биты используются для флагов, чтобы случайно ничего не рухнуло изза левых координат - обнуляют лишние биты...Если смотреть на СА то там уже флаги не вшивают и теоритические координаты могут быть 64к х 64к


--------------------
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
сообщение 3.1.2011, 3:31
Сообщение #20


*********

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



Цитата(StaticZ @ 2.1.2011, 19:22) *

с равным успехом размер может быть и 16к * 8к, это маски для игнорирования битов, т.к. в пакете 1A старшие биты используются для флагов, чтобы случайно ничего не рухнуло изза левых координат - обнуляют лишние биты...Если смотреть на СА то там уже флаги не вшивают и теоритические координаты могут быть 64к х 64к
Только вот RunUO 2.1 (и ниже) для CA и HS все-еще делают 0x7FFF и 0x3FFF соответственно.


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

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

 

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