Назад

Ragnarok 3D.

Автор: Cole McCormick: Дата: 04.17.2011



Тема посвященная, переносу механники и мира ро, на движек ро2.

Проблемы и их решения:

[LIST]
[*]Принцип скриптовки (квест,магазин и тд).
[SPOILER="Мануал 1."]
Рассмотрим первый пример:
using System;
using System.Collections.Generic;
using SagaMap;
using SagaDB.Actors;
using SagaDB.Items;

public class Az : Npc
{
public override void OnInit()
{
MapName = "Hod_f01";
Type = 1136;
Name = "Az Askew";
StartX = 4960F;
StartY = -1664F;
StartZ = -8640F;
Startyaw = 30000;
SetScript(823);
AddButton(Functions.EverydayConversation, new func(OnButton));
}
public void OnButton(ActorPC pc)
{
NPCChat(pc, 823);
}
}


Давайте рассмотрим первые несколько строк:

using System;
using System.Collections.Generic;
using SagaMap;
using SagaDB.Actors;
using SagaDB.Items;


Они говорят какие нужно использовать библиотеки и namespaces (Вы не обязаны знать какие namespaces именно вам нужны, поэтому можно писать все.)

Рассмотрим пример дальше:
public class Az : Npc
{
.....
}


Это основная часть или тело класса, в данном случаи оно объявляет класс NPC (Все классы подлинника должны унаследовать Npc/MapItem, этих двух классов)
Замечание Вы не можете объявить два класса с тем же самым названием в пределах того же самого namespace, используйте ключевое слово namespace, чтобы решить эту проблему.

Пример:
namespace Hodomimes
{
public class Test : Npc
{
...
}
}
namespace Prontera
{
public class Test : Npc
{
...
}
}


Если вы пишите так:
namespace Hodomimes
{
public class Test : Npc
{
...
}
public class Test : Npc
{
...
}
}


То это не правильно...


Давайте продолжим:
public override void OnInit()
{
...
}


Это метод инициализации класса NPC.
Если вы не знаете как пользоваться конструктором, то лучше не используйте это.

 MapName = "Hod_f01";
Type = 1136;
Name = "Az Askew";
StartX = 4960F;
StartY = -1664F;
StartZ = -8640F;
Startyaw = 30000;
SetScript(823);
AddButton(Functions.EverydayConversation, new func(OnButton));


MapName, название локации на которой находится NPC.
Type, внешний вид NPC согласно его ID-номеру
Name, Имя NPC (можете придумать сами)

StartX/Y/Z/ - координаты где распалагается NPC

SetScript, Установка диалога NPC (задается номером, все диалоги находятся в клиенте)
AddButton(Function,Handling Method) Добавляет варианты меню для NPC, такие как Кафра и различные Кафра-сервисы.

Расмотрим последний фрагмент кода:
public void OnButton(ActorPC pc)
{
NPCChat(pc, 823);
}


Это второй параметр метода AddButton, метод обработки (если игрок нажал на кнопку Everyday Converstion, этот кодекс будет выполнен).
класс ActorPC представляет игрока.
NPCChat, покажите некоторый текст в контейнере, тексты - снова берутся из клиента.

Взял гайд у Just
[/SPOILER]
[SPOILER="Мануал 2."]
На этот раз рассмотрим что нибудь поинтереснее.

Например:
using System;
using System.Collections.Generic;

using SagaMap;

using SagaDB.Actors;
using SagaDB.Items;

public class Scacciano : Npc
{
public override void OnInit()
{
MapName = "Hod_f01";
Type = 1003;
Name = "Scacciano Morrigan";
StartX = 12484F;
StartY = -15132F;
StartZ = -4779F;
Startyaw = 48000;
SetScript(823);
AddQuestStep(406, 40602, StepStatus.Active);
AddButton(Functions.EverydayConversation, new func(OnButton));
AddButton(Functions.OfficialQuest, new func(OnQuest), true);
}
public void OnButton(ActorPC pc)
{
NPCChat(pc, 823);
}

public void OnQuest(ActorPC pc)
{
if (GetQuestStepStatus(pc, 406, 40602) == StepStatus.Active)
{
UpdateQuest(pc, 406, 40602, StepStatus.Completed);
QuestCompleted(pc, 406);
UpdateIcon(pc, IconType.None);
NPCChat(pc, 0);
SetReward(pc, new rewardfunc(OnReward));
}
}

public void OnReward(ActorPC pc, uint QID)
{
if (QID == 406)
{
GiveExp(pc, 140, 50);
GiveZeny(pc, 5);
RemoveQuest(pc, 406);
}
}
}


Что нового мы тут видим?
первая строка:
AddQuestStep(QuestID,StepID,StepStatus)
Этот метод используется для добавления части квеста (не забутьте проверить его ID)

AddButton, В данном варианте, имеется скрытая конпка, которая будет доступна только если игрок согласился выполнить квест.

Теперь рассмотрим дальше.
 public void OnQuest(ActorPC pc)
{
if (GetQuestStepStatus(pc, 406, 40602) == StepStatus.Active)
{
UpdateQuest(pc, 406, 40602, StepStatus.Completed);
QuestCompleted(pc, 406);
UpdateIcon(pc, IconType.None);
NPCChat(pc, 0);
SetReward(pc, new rewardfunc(OnReward));
}
}


GetQuestStepStatus, возращает статус выполнения квеста

UpdateQuest, обновляет информацию о квесте
QuestCompleted, сообщает клиенту о том, что квест завершен
UpdateIcon, обновляет иконку у NPC (при различных событиях)
SetReward, устанавливает указатель о том, что нужно пройти квест снова

public void OnReward(ActorPC pc, uint QID)
{
if (QID == 406)
{
GiveExp(pc, 140, 50);
GiveZeny(pc, 5);
RemoveQuest(pc, 406);
}
}


Параметр QID сообщает о том, что квест пройден успешно полность.

GiveExp(player,CEXP,JEXP), дает игроку exp
GiveZeny, дает определенное кол-во ruffi (деньги)
RemoveQuest, Указывает клиенту о том, что тест пройден
[/SPOILER]
"Мануал by Sanasol": http://rus-ea.ru/forum/showthread.php?t=2603
[*]Редактор карт.
[*]Перевод.
[*]Скиллы.
[/LIST]

И по мелочи:

[LIST]
[*]Итемы.
[*]Мобы.
[*]Пк.
[/LIST]


Решения/способы реализации, Будут выкладываться в спойлах под каждым решенным пунктом.

Думаю большинство лакаций Ро2 можно оставить.

Так что, делитесь опытом/решениями в данной теме. Если все примут участие, буду благодарен. Хочу напомнить, что в самом эмуляторе, ничего сложного нет. Вся сложность во вскрытии клиента.

Черпаем инфу отсюда http://forum.ragezone.com/f523/

Автор: Cole McCormick: Дата: 04.17.2011

Диалоги храняться непосредственно в клиенте, сам скрипт в эмуляторе. Тоже самое с итемами, ну это уже как в первом ро.

Автор: Rectedo: Дата: 04.17.2011

Уточню насчет текстов:
Например говорим с НПС и он что то спрашивает и всплывают варианты ответов - это тоже в клиенте пишется (само меню и сами варианты). О_О

Автор: Cole McCormick: Дата: 04.17.2011

Обновил первый пост. //Добавлены мануалы, по написанию NPC.

Автор: Renegade: Дата: 04.17.2011

Цитата Rectedo;38992:
Уточню насчет текстов:
Например говорим с НПС и он что то спрашивает и всплывают варианты ответов - это тоже в клиенте пишется (само меню и сами варианты). О_О


омг... несекьюрно... вскрывашку когда сделаешь не выкладывай в паблик невкоемслучае.

Автор: Rectedo: Дата: 04.17.2011

Цитата Renegade;38994:
омг... несекьюрно... вскрывашку когда сделаешь не выкладывай в паблик невкоемслучае.


Само собой...:P

Автор: Cole McCormick: Дата: 04.17.2011

http://forum.ragezone.com/f523/ Тут гдето про декодинг(вскрытие) клиента читал.

Автор: Rectedo: Дата: 04.17.2011

Насчет всыкрытия клиента:
Переводы это ладно, но вот файлы с моделями\текстурами\анимацией\херней которые в папке Res лежат - вот там дейсвительно стенка. Не понятно даже откуда начинать.
Единственное что могу сказать - заголовки:

C1 83 2A 9E 82

RO2


C1 83 2A 9E 7E

UT2004

Автор: Rectedo: Дата: 04.18.2011

Дописал вобщем прогу.
Млять. Это пиздец. Она работает, но...
Это всеравно что... Драг-рейсинг на танке против Скайлайна.
оптимизируем код))

Автор: Cole McCormick: Дата: 04.18.2011

Ну, хоть работает)

Автор: Rectedo: Дата: 04.18.2011

ты не представляешь на сколько медленно. всего файлов 5558, я их ждать буду часов 6.
И памяти кушает до 100 Мб, а создает при это файлик 3 кБ))

Автор: Cole McCormick: Дата: 04.18.2011

Да, тут надо доработать.

Автор: Rectedo: Дата: 04.19.2011

Переписал заново с другим методом.
Производительность... Вобщем теперь это драг рейсинг на реактивном истебителе против улитки.
У меня хард не успевает записывать то, что она обрабатывает. Завтра напишу программу запаковки.
Позже
Готовы обе проги.

Автор: Cole McCormick: Дата: 04.19.2011

Цитата Rectedo;39172:
Переписал заново с другим методом.
Производительность... Вобщем теперь это драг рейсинг на реактивном истебителе против улитки.
У меня хард не успевает записывать то, что она обрабатывает. Завтра напишу программу запаковки.
Позже
Готовы обе проги.


Супер, на повестке дня, редактор карт. Также непомешала бы прога для интерактивного создания нпц.

Автор: Rectedo: Дата: 04.19.2011

Цитата Naota;39176:
Супер, на повестке дня, редактор карт. Также непомешала бы прога для интерактивного создания нпц.


Я что? На Хакера похож? С редактором труднее будет.

Автор: Cole McCormick: Дата: 04.19.2011

Цитата Rectedo;39178:
Я что? На Хакера похож? С редактором труднее будет.


Ниче, прорвемся!:rolleyes:

Автор: Renegade: Дата: 04.19.2011

Rectedo - спишемся, сведу тебя со своим програмистом.

Но он сраный дотнетчик, так что морально готовься :)

Автор: Rectedo: Дата: 04.19.2011

Цитата Renegade;39231:
Rectedo - спишемся, сведу тебя со своим програмистом.

Но он сраный дотнетчик, так что морально готовься :)


Ага, а дальше что?

Автор: MaXi: Дата: 04.20.2011

в тему или нет))
http://img130.imageshack.us/img130/5229/mayad.jpg

Автор: Renegade: Дата: 04.20.2011

Цитата Rectedo;39242:
Ага, а дальше что?


Как что? Введёшь в курс дела, перевалишь на него те задачи с которыми не можешь справится сам.

Я какбы говорил что планируется из этого коммерциум проект.

Автор: Cole McCormick: Дата: 04.20.2011

Кстате да, профы будут постепенно вводиться, изначально все просто новисы, и скилы не сразу полный набор как в ро, а придеться квесты на скилы проходить, и работать они у вас будут, в зависимости от вашего билда. Так что квесты на все подряд, проходить нестоит)) Квесты, очень сложные.

Автор: Renegade: Дата: 04.20.2011

перезапуск франшизы. Начнём с 1го эпизода ;)

Автор: Кеник: Дата: 04.20.2011

Тру идея на самом деле ;) Имеется желание помочь, но в сях\шарпах\на чем там написан эмуль не шарю, мб будет скриптовой язык наподобие афинского... В нем с удовольствием поковырялся бы =)

Автор: Cole McCormick: Дата: 04.20.2011

Цитата Кеник;39327:
Тру идея на самом деле ;) Имеется желание помочь, но в сях\шарпах\на чем там написан эмуль не шарю, мб будет скриптовой язык наподобие афинского... В нем с удовольствием поковырялся бы =)


Все будет интерактивно, для удобства будут написаны 2 редактора нпц и моб эдитор=) вот правка скилов, тут вопросики. И неразобрались с редактором карт.

ЗЫ Систему ВоЕ, продумывали? Есть вообще идеи по этому поводу?

Автор: Кеник: Дата: 04.20.2011

Редактор нпц и моб эдитор. Здорово, да. А сами квесты? Обработка событий? Это все в клиенте хранится?

Автор: Cole McCormick: Дата: 04.20.2011

Только озвука/текст, и некаторые действия.

Автор: Кеник: Дата: 04.20.2011

Я так и предполагал)

Автор: Rectedo: Дата: 04.21.2011

Есть у кого Сага Легаси с сорцами?

Автор: Cole McCormick: Дата: 04.21.2011

А тут ссылка сдохла?

Автор: Rectedo: Дата: 04.21.2011

ну сюда ее выкладывал только я и причем скачивал с svn.

Автор: Cole McCormick: Дата: 04.21.2011

Я тоже выкладывал, она у нас на фтп была, а это значит что копия есть у меня на компе.

Автор: Rectedo: Дата: 04.21.2011

Посмотри плиз... очень прошу.

Автор: MaXi: Дата: 04.21.2011

у меняя есть но он в архиве с паролем а не помню какой =((

Автор: Cole McCormick: Дата: 04.21.2011

если у нас качал то пароль либо www.rus-ea.ru либо rus-ea.ru либо rus-ea либо eathena.lgg.ru

Автор: Rectedo: Дата: 04.21.2011

выложи плииз, архив то я ломану...

Автор: Cole McCormick: Дата: 04.21.2011

У меня на компе, а в компе видюха сгорела. Некак до магаза недойду.

Автор: Speder: Дата: 04.21.2011

Цитата Naota;39477:
У меня на компе, а в компе видюха сгорела. Некак до магаза недойду.

А ты пересиль себяя и дойди))) а то задрал меня уже всё время за ноутом сидеть xDD

Автор: MaXi: Дата: 04.21.2011

Цитата Naota;39462]если у нас качал то пароль либо [url]www.rus-ea.ru[/url:
либо rus-ea.ru либо rus-ea либо eathena.lgg.ru


нее я с сага сайта качал !

Автор: Rectedo: Дата: 04.22.2011

Цитата Naota;39477:
У меня на компе, а в компе видюха сгорела. Некак до магаза недойду.


Дай хард - сам возьму):D
Серег, посмотри правда. Архивчик который Maxi кинул я не вскрою, там файлы шифрованные в пароль.
Maxi, а ты сайт вспомни.

Автор: MaXi: Дата: 04.22.2011

чёта sagaro2.info вроде так был точно не помню..может сайт и есть пароль

Автор: Cole McCormick: Дата: 04.22.2011

ragezone ?

Автор: Rectedo: Дата: 04.25.2011

Пилять серег! давай я те видюху дам - ты только перекинь.

Автор: Cole McCormick: Дата: 04.25.2011

Погоди, на этой неделе поставлю.

Автор: Rectedo: Дата: 04.25.2011

Цитата Naota;39782:
Погоди, на этой неделе поставлю.


давай давай)):D

Автор: Rectedo: Дата: 04.27.2011

Пилять Серега!!!!!!!! У мя ломка - спаси мя, дай Легаси!!!

Автор: geralex88: Дата: 07.09.2011

Приветствую. Подскажите найден способ как распаковать .fpk и .pak файлы в клиенте?

Автор: Rectedo: Дата: 07.09.2011

Да.

Автор: geralex88: Дата: 07.09.2011

Файлы Res/* распаковываются утилитой выложенной в сети для игр на движке Unreal.
По поводу формата .unr классический формат Unreal движка для создания карт. Достаточно подобрать нужную версию и раскодировать скрипты .u из папки system перенеся соответственно их в Unreal будет готовый редактор карт.
Пример без внедрения u-скриптов: http://cs11018.vkontakte.ru/u584438/126132470/z_cb0c6612.jpg
Пример карты *где пингвины =) не помню название* без моделей (модели можно самим Unreal запаковать для клиента + закодировать если необходимо): http://cs11018.vkontakte.ru/u584438/126132470/y_c1a27134.jpg
Классическая демонстрационная карты на движке Unreal в клиенте Ragnarok ii

что-то такое нарыл файл Rag2Game.u


[SPOILER="Rag2Game.u"]Loading package: Rag2Game.u Ver: 131/0 Names: 489 Exports: 160 Imports: 69 Game:
2006
0 1EA5 63 Class Rag2MonsterVertex
1 1F08 AE Class Rag2Monster
2 1FB6 C StrProperty Name
3 1FC2 D ByteProperty State
4 1FCF C NameProperty G_Stand01
5 1FDB C StrProperty Name
6 1FE7 C IntProperty Index
7 1FF3 C BoolProperty Hidden
8 1FFF D ByteProperty State
9 200C C FloatProperty Rate
10 2018 C NameProperty G_Stand_Talk01
11 2024 C NameProperty G_Stand_Click01
12 2030 55640 Texture TheifbugTex
13 57670 C FloatProperty Rate
14 5767C D ObjectProperty m
15 57689 C FloatProperty Rate
16 57695 4C Function PlayDieAnim
17 576E1 C NameProperty A_Die02
18 576ED D ObjectProperty VMesh_Die
19 576FA D ObjectProperty VMesh
20 57707 C FloatProperty Rate
21 57713 45 Function PlayDieAnim
22 57758 C IntProperty Index
23 57764 8A Class Rag2CirclecShadow
24 577EE 885 TextBuffer ScriptText
25 58073 58 Class Rag2MonsterSkel
26 580CB 39 TextBuffer ScriptText
27 58104 20D TextBuffer ScriptText
28 58311 8D Class Rag2MovePositionProjector
29 5839E 72 TextBuffer ScriptText
30 58410 D3 Class Rag2Npc
31 584E3 B21 TextBuffer ScriptText
32 59004 5C Class Rag2NpcPart
33 59060 12B TextBuffer ScriptText
34 5918B 5C Class Rag2PawnAniItem
35 591E7 36 TextBuffer ScriptText
36 5921D 58 Class Rag2PlayerDimago
37 59275 39 TextBuffer ScriptText
38 592AE 59 Class Rag2PlayerEllr
39 59307 FD TextBuffer ScriptText
40 59404 69 Class Rag2PlayerNM
41 5946D FA TextBuffer ScriptText
42 59567 75 Class Rag2PlayerSubFace_EL_F
43 595DC 326 TextBuffer ScriptText
44 59902 75 Class Rag2PlayerSubFace_EL_M
45 59977 322 TextBuffer ScriptText
46 59C99 7C Class Rag2PlayerSubFace_NM_F
47 59D15 2CF5 TextBuffer ScriptText
48 5CA0A 7C Class Rag2PlayerSubFace_NM_M
49 5CA86 2BED TextBuffer ScriptText
50 5F673 7E Class Rag2Poporing
51 5F6F1 714 TextBuffer ScriptText
52 5FE05 7E Class Rag2Poring
53 5FE83 6CB TextBuffer ScriptText
54 6054E 5C Class Rag2Shield_Shield
55 605AA 3A TextBuffer ScriptText
56 605E4 58 Class Rag2StaticItem
57 6063C 35 TextBuffer ScriptText
58 60671 62 Class Rag2TargetMesh
59 606D3 59 TextBuffer ScriptText
60 6072C 84 Class Rag2ThefBug
61 607B0 560 TextBuffer ScriptText
62 60D10 6E Class Rag2Weapon_Bow
63 60D7E 37 TextBuffer ScriptText
64 60DB5 75 Class Rag2Weapon_DampfFlinte
65 60E2A 3F TextBuffer ScriptText
66 60E69 73 Class Rag2Weapon_DampfSchwertz
67 60EDC 41 TextBuffer ScriptText
68 60F1D 75 Class Rag2Weapon_Katana
69 60F92 3A TextBuffer ScriptText
70 60FCC 75 Class Rag2Weapon_LongSword
71 61041 3D TextBuffer ScriptText
72 6107E 5E Class Rag2Weapon_None
73 610DC 38 TextBuffer ScriptText
74 61114 73 Class Rag2Weapon_Rod
75 61187 37 TextBuffer ScriptText
76 611BE 733 TextBuffer ScriptText
77 618F1 3A TextBuffer ScriptText
78 6192B 32 TextBuffer ScriptText
79 6195D 3E TextBuffer ScriptText
80 6199B 7A Class Rag2Weapon_SwordStick
81 61A15 86 TextBuffer ScriptText
82 61A9B D NameProperty G_Stand01
83 61AA8 C NameProperty G_Stand_Click01
84 61AB4 34 Function PostBeginPlay
85 61AE8 33 Function PostBeginPlay
86 61B1B 33 Function PostBeginPlay
87 61B4E 86 Class Rag2Mastering
88 61BD4 51A TextBuffer ScriptText
89 620EE E8 Function SetAnimState
90 621D6 D7 Function PlayAnimState
91 622AD 5A Class Rag2AniItem
92 62307 87 Class Rag2MarinSpher
93 6238E 6C3 TextBuffer ScriptText
94 62A51 86 Class Rag2Marin
95 62AD7 24 Function PostBeginPlay
96 62AFB 37 TextBuffer ScriptText
97 62B32 6A Class Rag2Item_TOPHEAD
98 62B9C 26 Function ChangeMesh
99 62BC2 3A TextBuffer ScriptText
100 62BFC 81E60 VertMesh DropsMesh
101 E4A5C 74 Function InitSkins
102 E4AD0 2ACDF VertMesh DropsMesh_Die
103 10F7AF 55640 Texture DropsTexture
104 164DEF 1562F Texture DropsUmb
105 17A41E 7A7DC VertMesh MarinMesh
106 1F4BFA 55640 Texture DropsTexture_Die
107 24A23A 24838 VertMesh MarinMesh_Die
108 26EA72 55640 Texture MarinTexture
109 2C40B2 4DABA VertMesh SphereMesh
110 311B6C 55640 Texture MarinTexture_Die
111 3671AC 45 Function PlayDieAnim
112 3671F1 5D Class Rag2Item_MIDDLEHEAD
113 36724E 55640 Texture SphereTexture
114 3BC88E 7A7DC VertMesh MasteringMesh
115 43706A 247E4 VertMesh MasteringMesh_Die
116 45B84E 55640 Texture MasteringTexture
117 4B0E8E 7A7DC VertMesh PoporingMesh
118 52B66A 55640 Texture MasteringTexture_Die
119 580CAA 24838 VertMesh PoporingMesh_Die
120 5A54E2 55640 Texture PoporingTexture
121 5FAB22 7A7DC VertMesh PoringMesh
122 6752FE 55640 Texture PoporingTexture_Die
123 6CA93E 24838 VertMesh PoringMesh_Die
124 6EF176 55640 Texture PoringTex
125 7447B6 8DA18 VertMesh TheifbugMesh
126 7D21CE 55640 Texture PoringTex_Die
127 82780E 22 Function PostBeginPlay
128 827830 1A6AC VertMesh TheifbugMesh_Die
129 841EDC 3A TextBuffer ScriptText
130 841F16 3C TextBuffer ScriptText
131 841F52 5D Class Rag2Item_BOTTOMHEAD
132 841FAF 34 TextBuffer ScriptText
133 841FE3 C1 Function PlayWaiting
134 8420A4 36 Function PlayNpcClickAnim
135 8420DA 46 Function PlayDieAnim
136 842120 5E Class Rag2Item_BACK
137 84217E D5 Function SetAnimState
138 842253 C1 Function PlayAnimState
139 842314 7AA TextBuffer ScriptText
140 842ABE 2A Function HiddenSheath
141 842AE8 6A TextBuffer ScriptText
142 842B52 330D VertMesh EL_F
143 845E5F 22 Function PostBeginPlay
144 845E81 66 Function InitSkins
145 845EE7 4F Function ChnageEB
146 845F36 69 Class Rag2Weapon_Sheath
147 845F9F 3692 VertMesh EL_M
148 849631 22 Function PostBeginPlay
149 849653 3B Function InitSkins
150 84968E 4F Function ChnageEB
151 8496DD 86 Class Rag2Drops
152 849763 1E1401 VertMesh NM_F
153 A2AB64 22 Function PostBeginPlay
154 A2AB86 74 Function InitSkins
155 A2ABFA 75 Class Rag2Weapon_ShortSword
156 A2AC6F 23DCEF VertMesh NM_M
157 C6895E 6A Class Rag2ActionMesh
158 C689C8 1 Package Poring
159 C689C9 1 Package theifbug
...
[/SPOILER]