Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Тех-документация (https://forum.zone-game.info/forumdisplay.php?f=41)
-   -   Создание нового класса / создание новой профессии (https://forum.zone-game.info/showthread.php?t=2411)

marvellously 02.12.2008 16:36

Создание нового класса / создание новой профессии
 
Создание нового класса / создание новой профессии


в данном примере делается новый класс 1я профа по аналогии с Артизаном

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

и так берём исходники сервака (у меня это L2jFree 4843)

I. нам понадобятся следующие *.java файлы лежащие по адресу:
1) C:\L2jFree\l2jfree-core\src\main\java\com\l2jfree\gameserver\datatabl es\CharTemplateTable.java
2) C:\L2jFree\l2jfree-core\src\main\java\com\l2jfree\gameserver\model\baseClassId.java
3) C:\L2jFree\l2jfree-core\src\main\java\com\l2jfree\gameserver\model\PlayerClass.java

II. а также *.sql:
1) C:\server\sql\char_templates.sql
2) C:\server\sql\lvlupgain.sql
3) C:\server\sql\class_list.sql

I. изменение исходников:
Цитата:

1) CharTemplateTable.java находим строку:
Цитата:

"Dwarven Artisan",
"Warsmith",
"dummyEntry1", //меняем скажем на "New Class",
"dummyEntry2",
2) baseClassId.java находим строку:

Цитата:

artisan (0x38, false, Race.Dwarf, dwarvenFighter),
warsmith (0x39, false, Race.Dwarf, artisan),
dummyEntry1 (58, false, null, null), //меняем скажем на newClass (0x3a, false, Race.Dwarf, dwarvenFighter),*
dummyEntry2 (59, false, null, null),
*тут нужно пояснить думаю:
0x3a = id проффы 58 в шестнадцатеричной системе это 3a (можно переводить в калькуляторе винды)
false = физик (true, = мистик)
Race.Dwarf = ссылается на расу указанную в C:\L2jFree\l2jfree-core\src\main\java\com\l2jfree\gameserver\model\ba se\Race.java, чувствительно к регистру букв.
dwarvenFighter = предшествующая профа (видимо = )

3) PlayerClass.java находим строку:
DwarvenArtisan(Dwarf, Fighter, Second),
Цитата:

Warsmith(Dwarf, Fighter, Third),
dummyEntry1(null, null, null), //меняем скажем на NewClass(Dwarf, Fighter, Second),**
dummyEntry2(null, null, null),
**поясню:
Dwarf = опять расса
Fighter = тип класса (есть ещё два Mystic, Priest) C:\L2jFree\l2jfree-core\src\main\java\com\l2jfree\gameserver\model\ba se\ClassType.java
Second = какая профа по счёту (бывает 4е вида: базовая First, первая Second, вторая Third, третья Fourth) они описанны в файле C:\L2jFree\l2jfree-core\src\main\java\com\l2jfree\gameserver\model\ba se\ClassLevel.java
Компелим сервак, собираем, запихиваем всё скажем в C:\server

II. добавляем строки в *.sql:
Цитата:

1) char_templates.sql
Код:

(56, 'Artisan', 4, 39, 45, 29, 20, 10, 27, 4, 80, 6, 41, 300, 333, 33, 43, 33, 115, 83000, 108512, -174026, -400, 1, 1.09, 1.487196, 9.0, 18.0, 1.09, 1.487196, 5.0, 19.0),
(57, 'Warsmith', 4, 39, 45, 29, 20, 10, 27, 4, 80, 6, 41, 300, 333, 33, 43, 33, 115, 83000, 108512, -174026, -400, 1, 1.09, 1.487196, 9.0, 18.0, 1.09, 1.487196, 5.0, 19.0),
(58, 'New Class', 4, 39, 45, 29, 20, 10, 27, 4, 80, 6, 41, 300, 333, 33, 43, 33, 115, 83000, 108512, -174026, -400, 1, 1.09, 1.487196, 9.0, 18.0, 1.09, 1.487196, 5.0, 19.0),
(88, 'Duelist', 0, 40, 43, 30, 21, 11, 25, 4, 80, 6, 41, 300, 333, 33, 44, 33, 115, 81900, -71338, 258271, -3104, 0, 1.10, 1.188000, 9.0, 23.0, 1.10, 1.188000, 8.0, 23.5),

каждый столбец описан в шапке и в принципе там всё понятно называется

2) lvlupgain.sql
Цитата:

INSERT INTO `lvlupgain` VALUES ('56', '346.0', '32.90', '0.37', '276.8', '26.30', '0.22', '144.0', '9.80', '0.14', '20');
INSERT INTO `lvlupgain` VALUES ('57', '1063.0', '54.50', '0.37', '850.4', '43.58', '0.22', '359.1', '19.40', '0.14', '40');
INSERT INTO `lvlupgain` VALUES ('58', '346.0', '32.90', '0.37', '276.8', '26.30', '0.22', '144.0', '9.80', '0.14', '20');
INSERT INTO `lvlupgain` VALUES ('88', '3061.8', '63.08', '0.37', '2755.6', '56.77', '0.22', '1155.6', '24.90', '0.14', '76');
каждый столбец описан в шапке и в принципе там всё понятно называется

3) class_list.sql
Цитата:

('D_Artisan', 56, 53),
('D_Warsmith', 57, 56),
('D_NewClass', 58, 53),
('D_Maestro', 118, 57),
тут всё просто, текущая профа и предыдущая
обновляем таблици в вшей вабзе, лично я делаю это так:
взял батник C:\server\tool\database_installer.bat копирнул, изменил:
Код:

@echo off

REM ############################################
REM ## You can change here your own DB params ##
REM ############################################
REM MYSQL BIN PATH
set mysqlBinPath=C:\Program Files\MySQL\MySQL Server 6.0\bin

REM LOGINSERVER
set lsuser=
set lspass=
set lsdb=
set lshost=localhost

REM GAMESERVER
set gsuser=
set gspass=
set gsdb=
set gshost=localhost
REM ############################################

set mysqldumpPath="%mysqlBinPath%\mysqldump"
set mysqlPath="%mysqlBinPath%\mysql"

echo install..

echo lvlupgain.sql
%mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/lvlupgain.sql
echo char_templates.sql
%mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/char_templates.sql
echo class_list.sql
%mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/class_list.sql


:end
echo.
echo Script complete.
pause

вот что нам вылазит:
http://img220.imageshack.us/img220/1...0016ph4.th.jpghttp://img150.imageshack.us/img150/9...0017un3.th.jpg
на втором скрине вместо профы написанно "Граф. курсор" это уже клиентская часть открываем sysstring-e.dat находим "Граф. курсор" его id 305
Цитата:

303 a,Artisan\0
304 a,Warsmith\0
305 u,Граф. курсор\0
306 u,Очень быстро\0
можно конечно изменить "Граф. курсор" на "New Class" но это изменение будет видно скорее всего не тока в профе чара, но и в интерфейсе.. так что интересно как изменить с id 305 на id 2000 (там пустые значения)

так что хочется услышать мнения как можно изменить id

p.s.
надеюсь исправил все огрехи которые допустил пока писал.. =)

energy 12.02.2009 00:38

Ответ: Создание нового класса / создание новой профессии
 
Я попробовал это зделать на L2jserver но после выбора класса оно не хочет заходить в игру после выбора персонажа вместо курсора у меня пишет "голос героя")
а в серве пишет:
Could not restore char data: java.lang.NullPointerException
could not restore in slot: 0

energy 30.07.2009 12:00

Ответ: Создание нового класса / создание новой профессии
 
Сделал я новый клас, но проблема в том, что какую бы я рассу не поставил на новый клас, в клиенте отображается всегда гном. Как это исправить?

marvellously 03.09.2009 01:45

Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от energy (Сообщение 37698)
Сделал я новый клас, но проблема в том, что какую бы я рассу не поставил на новый клас, в клиенте отображается всегда гном. Как это исправить?

дело в том что раса привязана к классу:

char_templates.sql

58, 'New Class', 4,
id класса 58, название (не то что в клиенте) 'New Class', id рассы (в данном случае гном) 4,

MeGa 03.01.2010 11:22

Re: Создание нового класса / создание новой профессии
 
Цитата:

минимальные требования:
умение скачивать исходники сервака и компелить его (мануалы имеются в изобилии, всяческие проблемы тоже рассмотрены, на новые дадут ответы)
для скачки исходников и компиляции
Eclipse этого хватит?

marvellously 25.01.2010 17:35

Re: Создание нового класса / создание новой профессии
 
да вполне.

pacifica 18.11.2010 17:13

Re: Создание нового класса / создание новой профессии
 
Разобрался ли кто с данной проблемой? Помогите с решением задачи этой пожалуйста)

finfan 30.01.2012 17:24

Re: Создание нового класса / создание новой профессии
 
Спасибо. Ценный мануал.

ElefanD 06.09.2012 05:49

Re: Создание нового класса / создание новой профессии
 
в базы и ядре все прописал правильно, но все равно при получении профессии скин меняется на гнома, повторюсь, в базе стоит id 3 (раса орков), видимо где-то еще надо прописывать, так же интересно почему именно 305 id присваивается в клиенте ? этот id нужен для русификации клиента, как сменить id ? подскажите пожалуйста

сборка H5 исходники overworld.su

Добавлено через 14 часов 28 минут
Не кто не поможет ? где все добрые люди

ZefirKO 02.07.2013 21:51

Re: Создание нового класса / создание новой профессии
 
присоиденяюсь к даному вопросу! поможет что?

Map 29.03.2015 12:54

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от energy (Сообщение 37698)
Сделал я новый клас, но проблема в том, что какую бы я рассу не поставил на новый клас, в клиенте отображается всегда гном. Как это исправить?

присоиденяюсь к даному вопросу! поможет что?

LifeGame32 29.03.2015 14:41

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от Map (Сообщение 390826)
присоиденяюсь к даному вопросу! поможет что?

https://forum.zone-game.info/showthr...033#post388033

obs 29.03.2015 16:27

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от LifeGame32 (Сообщение 390835)

что это значит?)

LifeGame32 29.03.2015 17:18

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от obs (Сообщение 390845)
что это значит?)

Базовые классы персонажей;
classId="0" name="Human Fighter"
classId="10" name="Human Mystic"
classId="18" name="Elven Fighter"
classId="25" name="Elven Mystic"
classId="31" name="Dark Fighter"
classId="38" name="Dark Mystic"
classId="44" name="Orc Fighter"
classId="49" name="Orc Mystic"
classId="53" name="Dwarf Fighter"
classId="123" name="Male Kamael Soldier"
classId="124" name="Female Kamael Soldier"

serverpackets/CharInfo , UserInfo + CharSelectionInfo
В этих пакетах переменная classId используется 2 раза;
для корректного отображения персонажей нужно слать клиенту
1 базовый класс а 2 вообще пофиг он служит для отображения названия
профессии. а также доработать множество классов.

obs 29.03.2015 19:08

Re: Ответ: Создание нового класса / создание новой профессии
 
подробнее пожалуйста :(

Map 30.03.2015 09:48

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от LifeGame32 (Сообщение 390847)
Базовые классы персонажей;
classId="0" name="Human Fighter"
classId="10" name="Human Mystic"
classId="18" name="Elven Fighter"
classId="25" name="Elven Mystic"
classId="31" name="Dark Fighter"
classId="38" name="Dark Mystic"
classId="44" name="Orc Fighter"
classId="49" name="Orc Mystic"
classId="53" name="Dwarf Fighter"
classId="123" name="Male Kamael Soldier"
classId="124" name="Female Kamael Soldier"

serverpackets/CharInfo , UserInfo + CharSelectionInfo
В этих пакетах переменная classId используется 2 раза;
для корректного отображения персонажей нужно слать клиенту
1 базовый класс а 2 вообще пофиг он служит для отображения названия
профессии. а также доработать множество классов.

Я это понимаю, но можно хоть маленький пример?), я только изучаю яву, слишком тяжело это для меня.

shegan 30.03.2015 10:02

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от Map (Сообщение 390882)
Я это понимаю, но можно хоть маленький пример?), я только изучаю яву, слишком тяжело это для меня.

Пример чего?
Может для начала стоит изучить Джаву, а потом уже заниматься непосредственно разработкой эмуля? Это не веб, где можно/нужно юзать сниппеты (копипаст-говнокод).

Map 30.03.2015 10:10

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от shegan (Сообщение 390883)
Пример чего?
Может для начала стоит изучить Джаву, а потом уже заниматься непосредственно разработкой эмуля? Это не веб, где можно/нужно юзать сниппеты (копипаст-говнокод).

А как можно изучить Джаву, не занимаясь разработкой и изучая ядро сборки? Без говнокода, ничего толкового сразу и не выйдет... Даже когда заказывал у людей скрипты, через время, они сами удивлялись что за говнокод они написали и переписывали всю систему с 0...

shegan 30.03.2015 10:22

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от Map (Сообщение 390884)
А как можно изучить Джаву, не занимаясь разработкой и изучая ядро сборки? Без говнокода, ничего толкового сразу и не выйдет... Даже когда заказывал у людей скрипты, через время, они сами удивлялись что за говнокод они написали и переписывали всю систему с 0...

Взять литературу и изучить её. Потом написать пару десятков хелловорлдов на нужную тебе тему.

Цитата:

serverpackets/CharInfo , UserInfo + CharSelectionInfo
В этих пакетах переменная classId используется 2 раза;
для корректного отображения персонажей нужно слать клиенту
Уже выше крайне понятно написали в каких классах и что происходит.
Какие примеры-то нужны?
Все примеры уже есть - это реализация уже существующих классов(персонажей).

Map 30.03.2015 10:33

Re: Ответ: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от shegan (Сообщение 390885)
Взять литературу и изучить её. Потом написать пару десятков хелловорлдов на нужную тебе тему.



Уже выше крайне понятно написали в каких классах и что происходит.
Какие примеры-то нужны?
Все примеры уже есть - это реализация уже существующих классов(персонажей).

Мне не понятно, что нужно слать клиенту... Я пытался уже экспериментировать сам, но ничего толкового не вышло...

Donatte 30.03.2015 11:16

Re: Создание нового класса / создание новой профессии
 
А ещё, вам придётся переписывать скрипты и патчить либы. Оно того стоит?

Или проще, если у вас интерлюд, взять клиент более поздний и переправить камаелей на новую расу или взять их классы?

Map 30.03.2015 11:23

Re: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от Donatte (Сообщение 390887)
А ещё, вам придётся переписывать скрипты и патчить либы. Оно того стоит?

Или проще, если у вас интерлюд, взять клиент более поздний и переправить камаелей на новую расу или взять их классы?

То есть, я никак не смогу сделать больше профессий чем, есть в Interlude изначально? Ну всмысле, кроме того, что много чего переписать надо будет

Donatte 30.03.2015 12:15

Re: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от Map (Сообщение 390889)
То есть, я никак не смогу сделать больше профессий чем, есть в Interlude изначально? Ну всмысле, кроме того, что много чего переписать надо будет

Да. Клиент их просто не увидит, т.к. в *.dat файлах лежит только верхушка айсберга.

Возьмите например клиент CT1 The Kamael и используйте профы расы камаэлей под свои новые профы. Интерфейс можно порезать, да и возможностей у клиента больше.

У этого есть большАя проблема - пакетка перепишится на 30-40% и придётся изменить ряд подсистем под новые реалии.

В этом случае вам понадобятся только знания Java.

LifeGame32 30.03.2015 12:16

Re: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от Map (Сообщение 390889)
То есть, я никак не смогу сделать больше профессий чем, есть в Interlude изначально? Ну всмысле, кроме того, что много чего переписать надо будет

1)https://forum.zone-game.info/showpos...35&postcount=1
2)https://forum.zone-game.info/showpos...27&postcount=2
И чтобы небыло проблем кторые описаны в 2 внимательно читаем.
(l2j)
В бд characters есть базовый и активный класс.
При создании персонажа идет пакет C:CharacterCreate(содержит базовых классах собствено определение какого персонажа вы создаете) с него и начинайте.
тоесь он должен стать статическим и неизменным и будет служить для корректного отображения персонажей +коллизий.
Активный класс может быть любым и модель персонажа будет отображатся нормально.
https://forum.zone-game.info/showpos...7&postcount=14
Всё основное я сказал инфы предостаточно.
я не собираюсь расписыват каждый метод со всеми вытекающими.
Если очень хочется за деньги сделаю.

4zh 02.06.2017 13:15

Re: Создание нового класса / создание новой профессии
 
Исходники interlude_su. Добавил новую профессию, изменения сделал в файлах:
ClassId.java
PlayerClass.java
CharTemplateTable.java

char_templates.sql
lvlupgain.sql
class_list.sql

Проблема в том что какую расу я бы не ставил всегда при взятии профессии будет гном.
Многие пишут что базовый класс должен быть статическим.
Делаю например:
Код:

newClass(0x77, false, Race.Human, fighter)
При взятии этой профессии всё равно будет гном.

Ещё пробовал заменить старые классы.
Например "Titan" 3 профа орка война.

ClassId.java:
Код:

titan(0x71, false, Race.Orc, destroyer)
PlayerClass.java:
Код:

titan(Orc, Fighter, Fourth)
Меняю на
ClassId.java:
Код:

newClass(0x71, false, Race.Human, fighter)
PlayerClass.java:
Код:

titan(Human, Fighter, Second)
В char_templates.sql меняю рассу.
В lvlupgain.sql уровень с 76 на 20.
class_list.sql у титана меняю ид родительской профессии.

А тут уже при смене класса раса меняется на орка.

Я так понимаю это может быть из за клиента? Но где это менять в клиенте?

Map 05.09.2017 20:55

Re: Создание нового класса / создание новой профессии
 
Решил подправить стандартные классы которые используются в ИТ, dummyEntry1 поставил орка, но 100% при создании появляется гном, чтобы я не пробовал делать в исходниках, может проблема где-то кроется в клиенте?

Nelige 06.09.2017 02:52

Re: Создание нового класса / создание новой профессии
 
Цитата:

Сообщение от Map (Сообщение 427669)
Решил подправить стандартные классы которые используются в ИТ, dummyEntry1 поставил орка, но 100% при создании появляется гном, чтобы я не пробовал делать в исходниках, может проблема где-то кроется в клиенте?

Решал подобную проблему достаточно давно, сейчас разбираться не очень хочу. Тем не менее, могу сказать, что клиентом ничего не ограничено (подтверждение тому - сабкласс). Гном создается в любом случае, когда клиенту отсылаются некоррекнтая инфа о расе и/или классе. Решается это, если мне память не изменяет, в двух серверных пакетах.

Другой вопрос заключается в том, что проблемы будут с названием новой профы в клиенте, если вписывать ее в пустой ID.


Текущее время: 17:05. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot