Многие из создателей шардов вводят на них уровни игроков или
систему классов, соответственно для этого нужны и ограничения на
скиллы. Вот сегодня мы и рассмотрим данное действие.
Для начала сразу расставим все точки над Ы.
1. Скрипт будет примитивно – простым, дабы объяснить суть дела,
улучшение кода, как то занесение нужных для ограничения скиилов
в cfg файлы, или хранение их на свойствах персонажа или
занесения их в массив уже будете делать вы :р.
2. Скрипт будем писать на ограничение скиллов относительно
уровня игрока. И будем считать что, уровень игрока будет
хранится на проперти чара с именем Level.
И так, для начала немного общей теории. Перед присваиванием
очков на скилл, функция AwardRawAttributePoints, отсылает ивент
файлу pkg\foundations\hooks\attributeCore.src, который и будет
проверять у нас значение скилла.
Открываем фаил attributeCore, находим функцию CheckSkillCap(who,
ev) и начинаем там все править к чертовой матери. Для начала
проверим того, кого будем проверять (Гы :)), если это НПС или
ГМ, то мы не будем их никоим образом резать, для этого напишем
следующее:
if(who.npctemplate)
return 1;
endif
if(who.cmdlevel)
return 1;
endif
Получим используемый скилл:
var attributeid := ev.skid;
Далее нам надо получить уровень игрока, следовательно пишем:
var level := Cint(GetObjProperty(who, "level"));
Далее уже будем ограничивать скиллы, скажем, например. Что на 0
уровне игрок может прокачать тактику не более 50, а все
остальные скиллы не более 70, на 1 все скиллы можно будет
прокачать не более 90, ну а на 2 не более 110. Далее оператором
кейс будем для каждого уровня проводить ограничения. И так
пишем:
case(level)
0:if(GetAttributeBaseValue(who, ATTRIBUTEID_TACTICS) > 500)
SetAttributeBaseValue(who, ATTRIBUTEID_DETECTINGHIDDEN, 500);
else
if(GetAttributeBaseValue(who, attributeid) > 700 )
SetAttributeBaseValue(who, attributeid, 700);
SendSysMessage(who, "You are not permitted to gain more than 70
in any skill with level 0");
Endif
endif
1: if(GetAttributeBaseValue(who, attributeid) > 900 )
SetAttributeBaseValue(who, attributeid, 900);
SendSysMessage(who, "You are not permitted to gain more than 90
in any skill with level 1");
endif
2: if(GetAttributeBaseValue(who, attributeid) > 1100 )
SetAttributeBaseValue(who, attributeid, 1100);
SendSysMessage(who, "You are not permitted to gain more than 110
in any skill with level 2");
endif
endcase
endfunction
За сим вроде как все, напишите, проверьте, если будут ошибки,
глюки или вопросы пишите.