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

 
Ответить в эту темуОткрыть новую тему
> Как Сделать Прокачку Скилов Сложнее
Volonter
сообщение 29.12.2006, 21:49
Сообщение #1


****

Группа: Пользователи
Наличность: 0
Из: Ставрополя
Пользователь №: 8.096
Возраст: 19



собственно вот такой вопрос заранее оч. благодарен


--------------------
Nord-Kavkaz лучший мир,лучшим игрокам
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Barracoon
сообщение 29.12.2006, 22:56
Сообщение #2


*******

Adept
Сообщений: 1.169
Регистрация: 21.1.2006
Группа: Пользователи
Наличность: 0
Из: Vladivostok
Пользователь №: 4.839



Цитата(Volonter @ 30.12.2006, 4:49) *
собственно вот такой вопрос заранее оч. благодарен
Какого-то определенного, или всех сразу? И какая версия RunUO? Если как я предпологаю - какая-нибудь из второй ветки версии(2.x), то:
Если определенного - в файле "Server\Skills.cs" есть масив из определений всех 55 скилов - "SkillInfo[] m_Table":
Исходный код
private static SkillInfo[] m_Table = new SkillInfo[55]
{
...
new SkillInfo( 25, "Magery", 0.0, 0.0, 15.0, "Mage", null, 0.0, 0.0, 1.5, 1.0 );
...
};
Так вот, значение которое я выделил красным - GainFactor, изменяя его, ты можеш напрямую влиять на шанс "повышения" данного скила при прокачке. Указывая в пути файла папку "Server" я имел ввиду папку в которой находится "исходный код основной части сервера"(стоит заметить то, в RunUO фактически несушествует "скриптов" - их роль играет отдельный "довесок" к основной части).

Если для всех сразу, то например в SkillCheck.cs есть метод CheckSkill - в нем можно можно произвольно изменить алгоритм влияюший на прокачку:
Исходный код
public static bool CheckSkill( Mobile from, Skill skill, object amObj, double chance )
{
if ( from.Skills.Cap == 0 )
return false;

bool success = ( chance >= Utility.RandomDouble() );
// gc - сокрашение от "Gain Chance", именно оно и будет влиять на возможность возрастания скила
double gc = (double)(from.Skills.Cap - from.Skills.Total) / from.Skills.Cap; // Отнимаем от максимального значения скилкапа(from.Skills.Cap) сумированое значение уже "прокачаных" скилов(from.Skills.Total), и делим полученое на максимальный скилкап(from.Skills.Cap) - этим самым мы узнаем сколько процентов осталось до того, как у персонажа "заполнится скилкап"
gc += ( skill.Cap - skill.Base ) / skill.Cap; // Отнимаем "максимальнго значения данного скила у персонажа"(skill.Cap - возможно 100, а возможно и нет - например после "употребления ПауерСкролла" это значение может быть и 105,110,115,120...) настояшее количестово скила(skill.Base - без всяческих бонусов от предметов, кастов и т.д.), и делим полученое значение на максимальное значение данного скила у данного персонажа полученое число добавляем к текушему значению gc
gc /= 2; // делим gc на 2 - убрав эту строчку можно сразу ускорить прокачку всех скилов вдвое

// Далее - всячески "изврашаемся" над данным числом(если чесно просто лень дальше коментировать каждую строчку - если будет что-то непонятно - напиши, постораюсь обьяснить)
gc += ( 1.0 - chance ) * ( success ? 0.5 : (Core.AOS ? 0.0 : 0.2) );
gc /= 2;

gc *= skill.Info.GainFactor;

if ( gc < 0.01 )
gc = 0.01;

if ( from is BaseCreature && ((BaseCreature)from).Controlled )
gc *= 2;

if ( from.Alive && ( ( gc >= Utility.RandomDouble() && AllowGain( from, skill, amObj ) ) || skill.Base < 10.0 ) )
Gain( from, skill ); // И вот тут, наконец-то добавляем к скилу данного персонажа заветне 0.1(при скиле меньше 10.0 - возможно и 0.2-0.3)

return success;
}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Volonter
сообщение 31.12.2006, 10:18
Сообщение #3


****

Группа: Пользователи
Наличность: 0
Из: Ставрополя
Пользователь №: 8.096
Возраст: 19



спасибо большое буду пробовать


--------------------
Nord-Kavkaz лучший мир,лучшим игрокам
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Agares
сообщение 24.1.2007, 21:52
Сообщение #4


***

Novice
Сообщений: 60
Регистрация: 7.7.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 6.764



такой вопрос!
а чем отличается

m.Skillscap от m.Skills.Cap
и что в чаректергрейшене из этих парпметров выставлять на текущий скилкап?

и если я хочу у всех персонажей на сервере сменить скиллкап и статкап на новый
как мне прописать игде это лучче сделать? можно ли сделать это в веб статусе так:
Код
foreach ( NetState state in NetState.Instances )
                {
                    Mobile m = state.Mobile;
                    m.SkillsCap=10000; m.Skills.Cap=10000;???


                    

                    
                    
                    if ( m != null ) {
                        if (!(GetStaffMember(m)))
                    
                    {
                        Guild g = m.Guild as Guild;

                        op.Write( "         <tr><td>" );

                        if ( g != null )
                        {
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 25.1.2007, 1:05
Сообщение #5


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Принципиально по-моему ничем. Тем более при изменении одного аналогично меняется и значение другого. Изменить скилкап можно прямо из игры командой:
Код
[global skillscap = значение where playermobile

Это значит, что поиск будет осуществлен global (по всему миру), искать будут playermobile (т.е. игроков, независимо онлайн или офлайн) и найдя будет выставляться значение skillscap равное указанному тобой.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Agares
сообщение 25.1.2007, 3:46
Сообщение #6


***

Novice
Сообщений: 60
Регистрация: 7.7.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 6.764



спасибо, во всем разобрлася
[global set skillscap 7000 where playermobile

важно обратить внимание что 7000 это не семь тысяч а семсот.
большое спасибо. думаю это надо запихнуть в ФАКУ.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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