📄 exp_and_level.lua
字号:
t[3] = GetTeamCha(team_atker, 2 )
t[4] = GetTeamCha(team_atker, 3 )
--SystemNotice ( team_atker , "aaaa")
-- LG("harm", "t[0] = ", t[0]," t[1] = ", t[1], "t[2] = ", t[2])
-- LG("harm", "\n")
--local notice = "t[1]="..t[1].." t[2]="..t[2].." t[3]="..t[3].." t[4]="..t[4]
----SystemNotice ( team_atker , notice)
--SystemNotice ( team_atker , "bbbb")
local count = 0
local NewPlayer_CanGet = 0
local NewPlayer_Lv = 0
local NewPlayer_Lv_dif = -100
local Check_Killer = 0
if t[0] == The_Killer then
Check_Killer = 1
end
for i = 0 , 4 , 1 do
if ValidCha( t[i] )== 1 then --被加入组队经验分配的角色必须存在,且对队伍经验的加成和分享也仅由有效成员数起作用
--SystemNotice(team_atker, "开始调用CheckExpShare")
a = CheckExpShare ( t[i] , team_atker )
--SystemNotice(team_atker, "结束调用CheckExpShare, 返回值="..a)
if a == 1 then
count = count + 1
NewPlayer_Lv = Lv( TurnToCha(t[i]) )
NewPlayer_Lv_dif = dead_lv - NewPlayer_Lv
if NewPlayer_Lv <=30 and NewPlayer_Lv >= 10 and NewPlayer_Lv_dif >= -5 then
NewPlayer_CanGet = NewPlayer_CanGet + 1
end
end
end
end
if count == 0 then
LG ("luascript_err" , "function ShareTeamExp : 队员统计count 为 0 " )
return
end
local TeamExp_Increas = 0.25 * TeamExp_RAID
--SystemNotice ( team_atker , "被计入经验共享队员数count="..count)
LG("exp" , "deadlv = " , dead_lv )
LG("exp" , "dead_exp = " , dead_exp )
LG("exp" , "teamer_count = " , count )
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
local exp_add = math.floor( dead_exp * ( 1 + (count -1 )* TeamExp_Increas ) ) --总经验
local exp_increase = math.floor ( dead_exp * (count -1 )* TeamExp_Increas ) --附加经验
---BB调整
LG("exp" , "exp_add = " , exp_add )
if count >=2 then
exp_add = exp_add * InTeamGetExp_RAID
end
local exp_up
--SystemNotice ( team_atker , "开始为队员分配经验")
for i = 0 , 4 , 1 do
if ValidCha(t[i])==1 then --角色不为空
local a = 1 --初始化角色在开始时是否分配经验的监测系数
local b = 1 --初始化角色在开始时分配经验的倍数系数
LG("exp" , "loop = " , i )
if i >= 1 then
-- t[i] = TurnToCha ( t[i] ) --转成人指针
a = CheckExpShare ( t[i] , team_atker ) --经验分配检测
LG("exp" , "经验分配检测 a = " , a )
exp_up = math.max (1, math.floor ( exp_add/count ) ) * a
LG("exp" , "exp_up1 = " , exp_up )
else
exp_up = math.max ( 1, math.floor ( exp_add/count ) )
LG("exp" , "exp_up1 = " , exp_up )
--对直接杀怪者做特殊处理
end
t_lv = GetChaAttrI ( TurnToCha(t[i]) , ATTR_LV )
lv_dis = t_lv - dead_lv --与怪物等级差对经验获取倍数的判断
LG ( "exp" , " t_lv = " , t_lv , " dead_lv = " , dead_lv , " lv_dis = " , lv_dis )
if lv_dis >= 4 then
b = math.min ( 10 , 1 + ( math.abs ( lv_dis - 4 ) * 0.4 ) ) --与怪物等级差距过大,无法获得全额经验
elseif lv_dis <= -1 * 10 then
b = math.min ( 4 , 1 + math.abs ( lv_dis - 10) * 0.1 ) --与怪物等级差距过大,无法获得全额经验
end
LG ( "exp" , "exp_up2 = " , exp_up , " b = " , b , " a = ", a )
exp_up = math.floor ( math.max ( 1 , exp_up / b ) ) * a
LG ( "exp" , "exp_up3 = " , exp_up)
if count >=3 and NewPlayer_CanGet <= 0 and Check_Killer == 1 then ---判断获得组队贡献点数
if lv_dis <=3 then
Add_RYZ_TeamPoint ( TurnToCha(t[i]) , count , 1)
end
end
if t_lv >= 50 and NewPlayer_CanGet > 0 and Check_Killer == 1 then
Add_RYZ_TeamPoint ( TurnToCha(t[i]) , 6 , NewPlayer_CanGet)
end
exp = GetChaAttrI ( TurnToCha(t[i]) , ATTR_CEXP )
LG("exp" , "exp_original = " , exp )
local EXP_RAID_STATE = 1
local StateLv = GetChaStateLv ( t[i] , STATE_SBJYGZ )
if StateLv > 0 and StateLv <= 10 then
if StateLv == 1 then
EXP_RAID_STATE = StateLv + 1
end
if StateLv == 2 then
EXP_RAID_STATE = 2
end
if StateLv == 3 then
EXP_RAID_STATE = 2.5
end
if StateLv == 4 then----------------------------升级推进器------Amon
EXP_RAID_STATE = 5---------------------半小时5倍经验
end
end
if StateLv > 1 then
local CheckLucky = 0
CheckLucky = CheckLuckyFinish ( StateLv )
if CheckLucky == 1 then
EXP_RAID_STATE = EXP_RAID_STATE * 2
SystemNotice ( TurnToCha(t[i]) , "幸运一击,获得经验值加倍" )
end
if CheckLucky == 2 then
EXP_RAID_STATE = 10
SystemNotice ( TurnToCha(t[i]) , "超级幸运一击,获得10倍经验" )
end
end
if exp_up == 0 then
LG ( "exp" , "无经验成长" )
return
end
exp_up = exp_up * EXP_RAID_STATE
if Lv ( TurnToCha(t[i]) ) >= 80 then
exp_up = math.floor ( exp_up / 50 )
end
---------------------------------------精灵加经验状态判断
--local Check_star = {}
-- Check_star[0] = t[i]
-- Check_star[1] = GetTeamCha( t[i] , 0 )
-- Check_star[2] = GetTeamCha( t[i] , 1 )
-- Check_star[3] = GetTeamCha( t[i] , 2 )
-- Check_star[4] = GetTeamCha( t[i] , 3 )
--for m = 0 , 4 , 1 do
-- if ValidCha( Check_star[m] )== 1 then --被加入组队经验分配的角色必须存在
local Item_bg = GetChaItem ( t[i] , 2 , 1 ) --取角色背包第二栏的指针
local Get_Item_Type = GetItemType ( Item_bg ) --调用程序接口获得Item道具类型
if Get_Item_Type==59 then --------判断是否为精灵
local Item_ID = GetItemID ( Item_bg ) --取ID
local str = GetItemAttr( Item_bg ,ITEMATTR_VAL_STR ) --力量
local con = GetItemAttr( Item_bg ,ITEMATTR_VAL_CON ) ---体质
local agi = GetItemAttr( Item_bg ,ITEMATTR_VAL_AGI ) --敏捷
local dex = GetItemAttr( Item_bg ,ITEMATTR_VAL_DEX ) --专注
local sta = GetItemAttr( Item_bg ,ITEMATTR_VAL_STA ) --精神
local URE = GetItemAttr( Item_bg ,ITEMATTR_URE ) --体力
local MAXURE = GetItemAttr( Item_bg ,ITEMATTR_MAXURE ) --最大体力
local lv_JL = str + con + agi + dex + sta ----一个精灵的等级
local Num_JL = GetItemForgeParam ( Item_bg , 1 )
local Part1 = GetNum_Part1 ( Num_JL ) --Get Num Part 1 到 Part 7
local Part2 = GetNum_Part2 ( Num_JL )
local Part3 = GetNum_Part3 ( Num_JL )
local StateLv1 = GetChaStateLv (t[i] , STATE_JLFT7 )
local StateLv2 = GetChaStateLv (t[i] , STATE_JLFT8 )
local flag=0
if Item_ID==237 and StateLv1~=0 then
flag=1
end
if Item_ID==681 and StateLv2~=0 then
flag=1
end
if flag==1 then ----有id为237或是681号的精灵并且精灵附体技能存在
--if StateLv1 == 1 or StateLv2 == 1 then ---初级
-- exp_up = exp_up*(0.005*lv_JL*0.1+1)
--end
--if StateLv1 == 2 or StateLv2 == 2 then ---中级
-- exp_up = exp_up*(0.0125*lv_JL*0.1+1)
--end
--if StateLv1 == 3 or StateLv2 == 3 then ---高级
-- exp_up = exp_up*(0.025*lv_JL*0.1+1)
--end
if StateLv1 ~= 0 or StateLv2 ~= 0 then
exp_up = exp_up*(lv_JL*0.02+1)
end
-- URE=URE-4500
end
SetItemAttr ( Item_bg , ITEMATTR_URE , URE )
end
-- end
--end
-------------------------------------------
-------------------------------------------
local Check = {}
Check[0] = t[i]
Check[1] = GetTeamCha( t[i] , 0 )
Check[2] = GetTeamCha( t[i] , 1 )
Check[3] = GetTeamCha( t[i] , 2 )
Check[4] = GetTeamCha( t[i] , 3 )
for j = 0 , 4 , 1 do
if ValidCha( Check[j] )== 1 then --被加入组队经验分配的角色必须存在
local star = IsTeamLeader( Check[j] )
if star==1 then -------------判断队长
local StateLv = GetChaStateLv ( Check[j] , STATE_ZDSBJYGZ )
local Isshare = CheckExpShare ( t[i] , Check[j])
--SystemNotice ( TurnToCha(t[i]) , "Isshare" )
if StateLv == 1 and Isshare == 1 then
exp_up = 1.5*exp_up
end
end
end
end
----------------------------------------------
----------------------------------------------圣战打精灵草随机属性
--Notice("come here")
local map_name_atk = GetChaMapName ( The_Killer )
local map_name_def = GetChaMapName ( dead )
if map_name_atk == "guildwar" or map_name_def == "guildwar" then
local normal_monster = GetChaID(dead)
--Notice("normal_monster=="..normal_monster)
if normal_monster == 220 then ---紫色
--AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
AddState ( The_Killer , The_Killer , STATE_HFZQ , 10 , 10 )
end
if normal_monster == 219 then -----蓝色
AddState ( The_Killer , The_Killer , STATE_QINGZ , 10 , 300 )
end
if normal_monster == 217 then -----红色
AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
end
if normal_monster == 218 then -----黄色
AddState ( The_Killer , The_Killer , STATE_YS , 10 , 300 )
end
elseif map_name_atk == "guildwar2" or map_name_def == "guildwar2" then
local normal_monster = GetChaID(dead)
--Notice("normal_monster=="..normal_monster)
if normal_monster == 220 then ---紫色
--AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
AddState ( The_Killer , The_Killer , STATE_HFZQ , 10 , 10 )
end
if normal_monster == 219 then -----蓝色
AddState ( The_Killer , The_Killer , STATE_QINGZ , 10 , 300 )
end
if normal_monster == 217 then -----红色
AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
end
if normal_monster == 218 then -----黄色
AddState ( The_Killer , The_Killer , STATE_YS , 10 , 300 )
end
end
----------------------------------------
-----------------------------------------团队之星处理
local expGetNow = exp_up --当前角色正常打怪可可获得的经验
local expCanGive = 0
t[i] = TurnToCha ( t[i] )-- 海洋处理
local ptnItem = GetEquipItemP( t[i] , 8)--取到道具指针 pointer
local IdItem = GetItemID ( ptnItem )
local lvPerson = GetChaAttr(t[i] , ATTR_LV)
--Notice ( "进行到这里" )
if IdItem==1034 and lvPerson < 41 then
local expItemNow = GetItemAttr( ptnItem , ITEMATTR_URE)*10 --100初始值
local expItemMax = GetItemAttr ( ptnItem , ITEMATTR_MAXURE)*10
local retIsInTeam = IsInTeam(t[i] )
if retIsInTeam ~= LUA_TRUE then --触发石头经验储存机制
expItemNow = expItemNow + expGetNow
if expItemNow >= expItemMax then
expItemNow = expItemMax
end
else --组队了
if HasTeammate(t[i] ,0, 5) == LUA_TRUE then---没有比自己小5级的队友
local ptnLowLvPlayer = returnLowLVPlayer( t[i], t[0], t[1], t[2], t[3], t[4]) --返回队伍中比自己等级小5的人物指
if ValidCha(ptnLowLvPlayer) == 1 then --人没死的处理
local expCanUse = expItemNow - 1000 --经验返还处理
if expGetNow * 2>= expCanUse then
expCanGive = expCanUse
expItemNow = 1000
else
expItemNow = expItemNow - expGetNow*2
expCanGive = expGetNow * 2
end
if expItemNow <= 1000 then
expItemNow = 1000
end
exp_up = exp_up + expCanGive
else --死了的处理
expCanGive = 0
exp_up = exp_up + expCanGive
end
local expCanUse = expItemNow - 1000
end
end
expItemNow= math.floor(expItemNow/10)
SetItemAttr ( ptnItem ,ITEMATTR_URE , expItemNow )
end
---------------------------------
---------------------------------
-----------------------------------------
if exp_up > 20000 then
local cha_name = GetChaDefaultName ( TurnToCha(t[i]) )
local Monster_name = GetChaDefaultName ( dead )
LG ( "Big_exp" ,"角色"..cha_name.."攻击"..Monster_name.."获得"..exp_up.."经验" )
end
--SystemNotice ( team_atker , "经验为"..exp)
--SystemNotice ( team_atker , "获得经验为"..exp_up)
if exp_up == 0 then
SystemNotice ( TurnToCha(t[i]) , "实力差距太大,无法获得实战经验" )
end
exp = exp + exp_up
SetChaAttrI ( TurnToCha(t[i]) , ATTR_CEXP, exp )
LG("exp" , "exp_now = " , exp )
else
--SystemNotice ( team_atker , "队员排位["..i.."]的值为空")
end
end
local star112=GetChaAttr ( team_atker , ATTR_CEXP )----------当前等级经验
LG("star_exp" , "玩家"..cha_name1100.."当前经验为"..star112.."结束ShareTeamExp" )
LG("exp" , "end getexp " )
end
function returnLowLVPlayer(PlayerNow,Player1,Player2,Player3,Player4,Player5) --返回队伍中比自己等级小5级的玩家指针
local lvPlayerNow = GetChaAttr(PlayerNow, ATTR_LV)
PlayerNow = TurnToCha(PlayerNow)
Player1 = TurnToCha(Player1)
Player2 = TurnToCha(Player2)
Player3 = TurnToCha(Player3)
Player4 = TurnToCha(Player4)
Player5 = TurnToCha(Player5)
if ValidCha(Player1) == 1 then
local lvPlayer1 = GetChaAttr(Player1, ATTR_LV)
if lvPlayerNow > lvPlayer1 + 5 then
return Player1
end
end
if ValidCha(Player2) == 1 then
local lvPlayer2 = GetChaAttr(Player2, ATTR_LV)
if lvPlayerNow > lvPlayer2 + 5 then
return Player2
end
end
if ValidCha(Player3) == 1 then
local lvPlayer3 = GetChaAttr(Player3, ATTR_LV)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -