Цитата(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;
}