Идем в resource\script\calculate\forge.lua
Добавляем в конец файла
local money = HasMoney(role , 1000) --Проверка на наличие нужного количества золота (по умолчанию 1000)
if money == 0 then --Если суммы недостаточно, то
SystemNotice( role ,"У Вас недостаточно золота! ") --Вывести системное сообщение о недостатке золота
end
local StateType = GetChaStateLv ( role , STATE_QINGZ ) --Проверка наложен ли уже этот бафф
if StateType == 0 then --Если не наложен, то
AddState ( role , role , STATE_QINGZ , 15 , 300 ) --Наложить состояние STATE_QINGZ на персонажа, сроком на 300 секунд (5 минут), с уровнем состояния 15 (не менять!)
TakeMoney (role, nil, 1000) --Отобрать у персонажа 1000 золота
SystemNotice( role ,"Получено Благословление новичка, Ваша защита повышена на 20 пунктов на 5 минут! ") --Вывести системное сообщение об удачном наложении баффа
else --В противном случае
SystemNotice( role ,"У Вас уже есть Благословление новичка! ") --Вывести сообщение что бафф на игрока уже был наложен
end
end
function NewbieBuff2( role )
local money = HasMoney(role , 1000)
if money == 0 then
SystemNotice( role ,"У Вас недостаточно золота! ")
end
local StateType = GetChaStateLv ( role , STATE_QINGZ )
if StateType == 0 then
AddState ( role , role , STATE_QINGZ , 16 , 300 )
TakeMoney (role, nil, 1000)
SystemNotice( role ,"Получено Благословление новичка, Ваша атака повышена на 10 пунктов на 5 минут! ")
else
SystemNotice( role ,"У Вас уже есть Благословление новичка! ")
end
end
function NewbieBuff3( role )
local money = HasMoney(role , 1000)
if money == 0 then
SystemNotice( role ,"У Вас недостаточно золота! ")
end
local StateType = GetChaStateLv ( role , STATE_QINGZ )
if StateType == 0 then
AddState ( role , role , STATE_QINGZ , 17 , 300 )
TakeMoney (role, nil, 1000)
SystemNotice( role ,"Получено Благословление новичка, Ваш уровень жизни повышен на 50 пунктов на 5 минут! ")
else
SystemNotice( role ,"У Вас уже есть Благословление новичка! ")
end
end
function StandartBuff1( role )
local money = HasMoney(role , 10000)
if money == 0 then
SystemNotice( role ,"У Вас недостаточно золота! ")
end
local StateType = GetChaStateLv ( role , STATE_XLZH )
if StateType == 0 then
AddState( role , role , STATE_XLZH, 10 , 300 ) --Наложить состояние STATE_XLZH (Призрачный огонь) 10лвл сроком на 300 секунд (5 минут). Здесь уровень состояния МОЖНО менять. Уровень состояния будет соответсвовать уровню накладываемого заклинания.
TakeMoney (role, nil, 10000)
SystemNotice( role ,"Наложен Призрачный огонь 10лвл на 5 минут! ")
else
SystemNotice( role ,"Нельзя использовать одновременно два заклинания одного типа! ")
end
end
function StandartBuff2( role )
local money = HasMoney(role , 10000)
if money == 0 then
SystemNotice( role ,"У Вас недостаточно золота! ")
end
local StateType = GetChaStateLv ( role , STATE_SHPF )
if StateType == 0 then
AddState ( role , role , STATE_SHPF , 10 , 300 )
TakeMoney (role, nil, 10000)
SystemNotice( role ,"Наложена Закалка 10лвл на 5 минут! ")
else
SystemNotice( role ,"Нельзя использовать одновременно два заклинания одного типа! ")
end
end
function StandartBuff3( role )
local money = HasMoney(role , 10000)
if money == 0 then
SystemNotice( role ,"У Вас недостаточно золота! ")
end
local StateType = GetChaStateLv ( role , STATE_TSHD )
if StateType == 0 then
AddState( role , role , STATE_TSHD, 10 , 300 )
TakeMoney (role, nil, 10000)
SystemNotice( role ,"Наложен Ангельский щит 10лвл на 5 минут! ")
else
SystemNotice( role ,"Нельзя использовать одновременно два заклинания одного типа! ")
end
end
function StandartBuff4( role )
local money = HasMoney(role , 10000)
if money == 0 then
SystemNotice( role ,"У Вас недостаточно золота! ")
end
local StateType = GetChaStateLv ( role , STATE_MLCH )
if StateType == 0 then
AddState ( role , role , STATE_MLCH , 10 , 300 )
TakeMoney (role, nil, 10000)
SystemNotice( role ,"Наложена Интенсивная магия 10лвл на 5 минут! ")
else
SystemNotice( role ,"Нельзя использовать одновременно два заклинания одного типа! ")
end
end
Идем в resource\script\MisSdk\NpcSdk.lua
Найдем в файле строчки
if item.func == JumpPage then
return JumpPage( character, npc, page, item.p1 )
и добавить ниже
elseif item.func == NewbieBuff1 then
return NewbieBuff1(character)
elseif item.func == NewbieBuff2 then
return NewbieBuff2(character)
elseif item.func == NewbieBuff3 then
return NewbieBuff3(character)
elseif item.func == StandartBuff1 then
return StandartBuff1(character)
elseif item.func == StandartBuff2 then
return StandartBuff2(character)
elseif item.func == StandartBuff3 then
return StandartBuff3(character)
elseif item.func == StandartBuff4 then
return StandartBuff4(character)
Идем в resource\script\MisScript\NpcScript01.lua
Добавляем в конец файла
function d_talk021()
Talk(1, "Жрец: Приветствую тебя от имени богов. Могу ли я чем то помочь? ")
Text(1, "Я хочу получить Благословление новичка. " , JumpPage,2)
Text(1, "Я хочу получить улучшающее заклинание. " , JumpPage,3)
Text(1, "Прощай " , CloseTalk)
Talk(2, "Жрец: Благосклонности богов добиться не так то просто. Ты готов пожертвовать 1000 золотых монет во имя их славы? ")
Text(2, "Укрепи мое тело (+20 защиты) ", NewbieBuff1, 1)
Text(2, "Помоги одолеть врагов (+10 атаки) ", NewbieBuff2, 1)
Text(2, "Дай мне волю к жизни (+50 жизни) ", NewbieBuff3, 1)
Text(2, "Назад " , JumpPage,1)
Talk(3, "Жрец: Не хватает силы на очередной подвиг? Я могу помочь тебе, однако мои услуги стоят денег. Будь готов заплатить мне 10 тысяч золотых монет. ")
Text(3, "Получить Призрачный огонь ", StandartBuff1, 1)
Text(3, "Получить Закалку ", StandartBuff2, 1)
Text(3, "Получить Ангельский щит ", StandartBuff3, 1)
Text(3, "Получить Интенсивную магию ", StandartBuff4, 1)
Text(3, "Назад " , JumpPage,1)
end
Идем в resource\garner\garnerNPC.txt
Добавляем в конец файла
ххх Жрец 1 11 15 220300,277400 220300,277400 270 Argent City 1 0 d_talk021 0
Не забудьте сменить айди (ххх) на свое значение.
Идем в resource\script\calculate\skilleffect.lua
Найдем функцию State_QINGZ_Add и заменим все содержимое на
function State_QINGZ_Add ( role , statelv )
if statelv == 15 then
local defens = GetChaAttr ( role , ATTR_STATEV_DEF )
local def_dif = 20 --Сколько защиты прибавится
local def = defens + def_dif
SetCharaAttr( def , role , ATTR_STATEV_DEF )
ALLExAttrSet(role)
RefreshCha(role)
elseif statelv == 16 then
local minattack = GetChaAttr ( role , ATTR_STATEV_MNATK )
local maxattack = GetChaAttr ( role , ATTR_STATEV_MXATK )
local mnatksa_dif = 10 --Сколько мин. атаки прибавится
local mxatksa_dif = 10 --Сколько макс. атаки прибавится
local mnattack = minattack + mnatksa_dif
local mxattack = maxattack + mxatksa_dif
SetCharaAttr( mnattack , role , ATTR_STATEV_MNATK )
SetCharaAttr( mxattack , role , ATTR_STATEV_MXATK )
ALLExAttrSet(role)
RefreshCha(role)
elseif statelv == 17 then
local hp = GetChaAttr ( role , ATTR_STATEV_MXHP )
local hp_dif = 50 --Сколько жизни прибавится
local newhp = hp + hp_dif
SetCharaAttr( hp_dif , role , ATTR_STATEV_MXHP )
ALLExAttrSet(role)
RefreshCha(role)
else
local mspdsa_dif = 0.3
local def_dif = 50
local mspdsa = MspdSa ( role )
local mspdsa_fin = ( mspdsa + mspdsa_dif ) * ATTR_RADIX
local defsb = DefSb( role ) - def_dif
SetCharaAttr( defsb , role , ATTR_STATEV_DEF )
SetCharaAttr( mspdsa_fin , role , ATTR_STATEC_MSPD )
ALLExAttrSet(role)
RefreshCha(role)
end
end
Затем ниже функцию State_QINGZ_Rem заменим на
function State_QINGZ_Rem ( role , statelv )
if statelv == 15 then
local defens = GetChaAttr ( role , ATTR_STATEV_DEF )
local def_dif = 20
local def = defens - def_dif
SetCharaAttr( def , role , ATTR_STATEV_DEF )
ALLExAttrSet(role)
RefreshCha(role)
elseif statelv == 16 then
local minattack = GetChaAttr ( role , ATTR_STATEV_MNATK )
local maxattack = GetChaAttr ( role , ATTR_STATEV_MXATK )
local mnatksa_dif = 10
local mxatksa_dif = 10
local mnattack = minattack - mnatksa_dif
local mxattack = maxattack - mxatksa_dif
SetCharaAttr( mnattack , role , ATTR_STATEV_MNATK )
SetCharaAttr( mxattack , role , ATTR_STATEV_MXATK )
ALLExAttrSet(role)
RefreshCha(role)
elseif statelv == 17 then
local hp = GetChaAttr ( role , ATTR_STATEV_MXHP )
local hp_dif = 50
local newhp = hp - hp_dif
SetCharaAttr( hp_dif , role , ATTR_STATEV_MXHP )
ALLExAttrSet(role)
RefreshCha(role)
else
local mspdsa_dif = 0.3
local def_dif = 50
local mspdsa = MspdSa ( role )
local mspdsa_fin = ( mspdsa - mspdsa_dif ) * ATTR_RADIX
local defsb = DefSb( role ) + def_dif
SetCharaAttr( defsb , role , ATTR_STATEV_DEF )
SetCharaAttr( mspdsa_fin , role , ATTR_STATEC_MSPD )
ALLExAttrSet(role)
RefreshCha(role)
end
end
Если захотите изменить какой то параметр - не забудьте поменять его в обоих функциях
Существует небольшой баг, из за которого отображаемые характеристики игрока не меняются после применения бафа. Чтобы все отображалось корректно необходимо после нанесения бафа снять и снова одеть какой-нибудь предмет. Либо внести в файлы еще один небольшой фикс.
Нам снова потребуется файл resource\script\calculate\skilleffect.lua
Найдите в нем функцию State_Xlzh_Add , затем в данной функции найдите строку ALLExAttrSet(role) . Добавьте после данной строки ниже RefreshCha(role)
В итоге у вас должно получится так
function State_Xlzh_Add ( role , statelv )
local mnatksa_dif =0.1 + 0.01 * statelv
local mxatksa_dif =0.1 + 0.01 * statelv
local mnatksa = math.floor ( (MnatkSa(role) + mnatksa_dif ) * ATTR_RADIX)
local mxatksa = math.floor ( (MxatkSa(role) + mxatksa_dif ) * ATTR_RADIX)
SetCharaAttr( mnatksa , role , ATTR_STATEC_MNATK )
SetCharaAttr( mxatksa , role , ATTR_STATEC_MXATK )
ALLExAttrSet(role)
RefreshCha(role)
end
Теперь проделайте все тоже самое со следующими функциями State_Shpf_Add и State_Tshd_Add