📄 exp_and_level.lua
字号:
if lvPlayerNow > lvPlayer3 + 5 then
return Player3
end
end
if ValidCha(Player4) == 1 then
local lvPlayer4 = GetChaAttr(Player4, ATTR_LV)
if lvPlayerNow > lvPlayer4 + 5 then
return Player4
end
end
if ValidCha(Player5) == 1 then
local lvPlayer5 = GetChaAttr(Player5, ATTR_LV)
if lvPlayerNow > lvPlayer5 + 5 then
return Player5
end
end
return 0
end
function CheckExpShare ( ti , atk ) --ti如果atk相等那就有问题了
if ValidCha(ti)==0 then
LG ( "luascript_err" , "fucntion CheckExpShare : 队伍成员为空\n" )
return 0
end
if IsInSameMap ( atk , ti ) == 0 then
--SystemNotice( atk , "由于所在地图不同,您无法与某些队友分享战斗经验")
return 0
end
local pos_ti_x , pos_ti_y = GetChaPos ( ti )
if ValidCha( atk ) == 0 then
LG ( "luascript_err" , "fucntion CheckExpShare : 杀怪者为空\n" )
return 0
end
local pos_atk_x , pos_atk_y = GetChaPos ( atk )
local distance = Dis ( pos_ti_x , pos_ti_y , pos_atk_x , pos_atk_y )
if distance >= 4000 then
-- HelpInfo(ti,0,"由于相隔太远,您无法与您的某些队友分享战斗经验")
return 0
end
if IsChaInRegion ( ti , AREA_SAFE ) == 1 then
-- HelpInfo(ti,0,"由于处于安去区,您无法与您的队友分享战斗经验")
return 0
end
return 1
end
function Dead_Punish ( dead , atk ) --死亡惩罚
local map_name = GetChaMapName ( dead )
if map_name == "leiting2" or map_name == "binglang2" or map_name == "shalan2" or map_name == "guildwar" or map_name == "guildwar2" then
return
end
local map_name = GetChaMapName ( dead )
if map_name == "garner2" then
SetCharaAttr(0, dead, ATTR_SP)
return
end
dead = TurnToCha ( dead )
local lv = GetChaAttr( dead, ATTR_LV )
local check_pirate=CheckItem_pirate(dead)
local check_death=CheckItem_Death(dead)
local Time = os.date("%H")
local TimeNum = tonumber(Time)
if lv<=10 then
return
end --[[判定大于10级扣除经验]]--
if lv >= 70 and check_pirate ==1 then
if TimeNum<=6 or TimeNum >=18 then
SystemNotice (dead , "受到月光祝福,死亡不扣除经验和装备耐久" )
return
end
end
if lv >= 75 and check_death ==1 then
if TimeNum<=6 or TimeNum >=18 then
SystemNotice (dead , "受到死神庇佑,死亡不扣除经验和装备耐久" )
return
end
end
local exp_red
local exp = Exp(dead)
local nlexp = GetChaAttrI ( dead , ATTR_NLEXP )
local clexp = GetChaAttrI ( dead , ATTR_CLEXP )
if exp <= clexp then
exp_red = 0
else
exp_red = math.min ( math.floor ( ( nlexp - clexp ) * 0.02 ) , math.max ( exp - clexp , 0 ) )
end
SetCharaAttr(0, dead, ATTR_SP)
local i1 = CheckBagItem( dead,3846 )
local i2 = CheckBagItem( dead,3047 )
if map_name == "secretgarden" or map_name == "teampk" then
SetCharaAttr(0, dead, ATTR_SP)
return
end
local i= CheckBagItem( dead, 2954 )-------死亡证明
--SystemNotice( dead , "i=="..i)
if i==1 then
local Dead_BK = GetChaItem2 ( dead , 2 , 2954 )
local DeadPoint=GetItemAttr ( Dead_BK , ITEMATTR_VAL_STR)
--SystemNotice( dead , "DeadPoint之前为=="..DeadPoint)
local DeadPoint=DeadPoint+1
SetItemAttr( Dead_BK , ITEMATTR_VAL_STR , DeadPoint )
local DeadPoint1=GetItemAttr ( Dead_BK , ITEMATTR_VAL_STR)
--SystemNotice( dead , "DeadPoint现在为=="..DeadPoint1)
if DeadPoint>=100 then
end
end
if i1 <= 0 and i2 <= 0 then ---没娃娃没宝宝
exp = Exp(dead) - exp_red
if Lv ( dead ) >= 80 then
exp_red_80 = exp_red * 50
SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 )
else
SystemNotice (dead , "由于死亡丢失经验"..exp_red )
end
SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
if lv > 20 then
Dead_Punish_ItemURE ( dead )
end
elseif i1~=0 and i2==0 then --有娃娃没宝宝
local j1 = TakeItem( dead,0,3846,1)
if j1 == 0 then
LG ( "NewItem" , "替身娃娃删除失败" )
SystemNotice ( dead , "替身娃娃删除失败" )
exp = Exp(dead) - exp_red
if Lv ( dead ) >= 80 then
exp_red_80 = exp_red * 50
SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 )
else
SystemNotice (dead , "由于死亡丢失经验"..exp_red )
end
SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
if lv > 20 then
Dead_Punish_ItemURE ( dead )
end
else
SystemNotice ( dead , "由替身娃娃代替死亡,免予经验和耐久惩罚" )
end
elseif i1==0 and i2~=0 then --没娃娃有宝宝
local j2 = TakeItem( dead,0,3047,1)
if j2 == 0 then
LG ( "NewItem" , "替身宝宝删除失败" )
SystemNotice ( dead , "替身宝宝删除失败" )
exp = Exp(dead) - exp_red
if Lv ( dead ) >= 80 then
exp_red_80 = exp_red * 50
SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 )
else
SystemNotice (dead , "由于死亡丢失经验"..exp_red )
end
SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
if lv > 20 then
Dead_Punish_ItemURE ( dead )
end
else
SystemNotice ( dead , "由替身宝宝代替死亡,免予经验和耐久惩罚" )
end
elseif i1~=0 and i2~=0 then --有娃娃有宝宝--选择先删除娃娃
local j3 = TakeItem( dead,0,3846,1)
if j3 == 0 then
LG ( "NewItem" , "替身娃娃删除失败" )
SystemNotice ( dead , "替身娃娃删除失败" )
exp = Exp(dead) - exp_red
if Lv ( dead ) >= 80 then
exp_red_80 = exp_red * 50
SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 )
else
SystemNotice (dead , "由于死亡丢失经验"..exp_red )
end
SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
if lv > 20 then
Dead_Punish_ItemURE ( dead )
end
else
SystemNotice ( dead , "由替身娃娃代替死亡,免予经验和耐久惩罚" )
end
end
local name = GetChaDefaultName ( dead )
local exp_new = ( exp - clexp ) / ( nlexp - clexp )
LG ( "die_exp" , "角色名" , name , "当前等级 = ", lv , "死亡扣除经验值 = " , exp_red , "最新经验比例 = " , exp_new )
local mars = 0
for mars = 0 , 4 , 1 do
if name == CheckDmgChaNameTest [mars] then
LG ( "whydie" , name.."挂了" )
end
end
end
function GetExp_MKP(dead , atk) --[[player kill monster 经验值改变公式]]--
--LuaPrint("Enter function GetExp_MKP() --[[player kill monster 经验值改变公式]]--")
Dead_Punish( dead , atk)
--LuaPrint("Out function GetExp_MKP() --[[player kill monster 经验值改变公式]]--")
end
function GetExp_PKP(dead , atk) --[[player kill player 经验值改变公式]]--
--LuaPrint("Enter function GetExp_MKP() --[[player kill monster 经验值改变公式]]--")
-- Dead_Punish( dead , atk)
--LuaPrint("Out function GetExp_MKP() --[[player kill monster 经验值改变公式]]--")
end
function GetExp_Noexp(dead , atk) --[[无奖惩经验值改变公式]]--
--LuaPrint("Enter function GetExp_Noexp() --[[无奖惩经验值改变公式]]-- ".."\n" )
--LuaPrint("Out function GetExp_Noexp() --[[无奖惩经验值改变公式]]-- ".."\n" )
end
--角色非技能性复活脚本————————————————————————————————————————————
function Relive ( role )
local mxhp = GetChaAttr ( role , ATTR_MXHP )
local mxsp = GetChaAttr ( role , ATTR_MXSP )
local hp = math.max ( 1, math.floor( ( mxhp * 0.01 ) + 0.5 ) )
local sp = math.max ( 1, math.floor( ( mxsp * 0.01 ) + 0.5 ) )
SetCharaAttr ( hp , role , ATTR_HP )
SetCharaAttr ( sp , role , ATTR_SP )
end
--角色技能性复活脚本————————————————————————————————————————————
function Relive_now ( role , sklv )
local cha_role = TurnToCha ( role )
local hp = math.max ( 1 , math.floor ( 0.05 * sklv * Mxhp ( cha_role ) ) )
local sp = math.max ( 1 , math.floor ( 0.05 * sklv * Mxsp ( cha_role ) ) )
SetCharaAttr ( hp , cha_role , ATTR_HP )
SetCharaAttr ( sp , cha_role , ATTR_SP )
end
--船只死亡最大耐久减少——————————————————————————————————————————————————————————————
function Ship_ShipDieAttr ( role )
local bmxhp = GetChaAttr ( role , ATTR_BMXHP )
local dead_count = GetChaAttr ( role , ATTR_BOAT_DIECOUNT )
LG ( "shipmxhp" , "___a new dead ship_____________________________________________________" )
LG ( "shipmxhp" , "role = " , role , "dead_count = " , dead_count , "form_mxhp = " , bmxhp )
bmxhp = bmxhp * math.max ( 0 , ( 1 - 0.02 - dead_count * 0.01 ) )
LG ( "shipmxhp" , "role = " , role , "now_mxhp = " , bmxhp )
SetCharaAttr ( bmxhp , role , ATTR_BMXHP )
end
function BoatLevelUpProc ( cha, boat, levelup, exp, money )
if ValidCha( cha ) == 0 then
LG ( "luascript_err" , "function BoatLevelUpProc : cha 为空" )
return 0
end
if ValidCha( boat ) == 0 then
LG ( "luascript_err" , "function BoatLevelUpProc : boat 为空" )
return 0
end
PRINT( "BoatLevelUpProc: levelup = , exp = , money = ", levelup, exp, money )
local lv_up = levelup
local req_exp = exp
local req_gold = money
local boat_lv = GetChaAttr ( boat , ATTR_LV )
if boat_lv ~= lv_up - 1 then
PRINT( "BoatLevelUpProc:function BoatLevelUpProc :船只当前等级与想要提升的等级不匹配" )
LG ( "luascript_err" , "function BoatLevelUpProc :船只当前等级与想要提升的等级不匹配" )
return 0
end
local boat_exp = GetChaAttr ( boat , ATTR_CEXP )
if boat_exp < req_exp then
SystemNotice ( cha , "船只熟练不足无法提升船只等级,加油修练~")
return 0
end
local cha_money = GetChaAttr ( cha , ATTR_GD )
if cha_money < req_gold then
SystemNotice ( cha , "金钱不足无法提升船只等级,努力赚钱~")
return 0
end
PRINT( "BoatLevelUpProc: boat_exp, req_exp, cha_money, req_gold", boat_exp, req_exp, cha_money, req_gold )
SetAttrChangeFlag( boat)
SetAttrChangeFlag( cha)
boat_exp = boat_exp - req_exp
SetCharaAttr ( boat_exp , boat , ATTR_CEXP )
cha_money = cha_money - req_gold
SetCharaAttr ( cha_money , cha , ATTR_GD )
SetCharaAttr ( lv_up , boat , ATTR_LV )
ALLExAttrSet ( boat )
SystemNotice ( cha , "船只升级成功")
SystemNotice ( cha , "扣除金钱"..req_gold)
SystemNotice ( cha , "消耗船只熟练"..req_exp)
SyncBoat ( boat, 4 )
SyncChar ( cha, 4 )
PRINT( "BoarLevelUpProc: return 1" )
return 1
end
function Ship_Tran ( buyer , boat )
local ship_lv = GetChaAttr ( boat , ATTR_LV )
local ship_exp = GetChaAttr ( boat , ATTR_CEXP )
-- if ValidCha ( seller ) == 0 then
-- LG ( "luascript_err" , "function Ship_Tran : seller 为空" )
-- return
-- end
-- if ValidCha ( buyer ) == 0 then
-- LG ( "luascript_err" , "function Ship_Tran : buyer 为空" )
-- return
-- end
SetAttrChangeFlag( boat)
ship_lv = math.max ( 1 , math.max (math.floor ( ship_lv /2 ), ship_lv - 10 ) )
ship_exp = 0
SetCharaAttr ( ship_exp , boat , ATTR_CEXP )
SetCharaAttr ( ship_lv , boat , ATTR_LV )
SystemNotice ( buyer , "交易后,船只等级为"..ship_lv )
SystemNotice ( buyer , "交易后,船只经验为"..ship_exp )
SyncBoat ( boat, 4 )
end
--幸运一击
function CheckLuckyFinish ( StateLv )
if StateLv == 3 then
local Huge_Lucky = Percentage_Random ( 0.01 )
if Huge_Lucky == 1 then
return 2
end
end
local a = 0.1
local b = Percentage_Random ( a )
return b
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -