function ShareTeamExp ( dead , team_atker , dead_exp , The_Killer)
local cha_name1100 = GetChaDefaultName (team_atker )
local star111=GetChaAttr ( team_atker , ATTR_CEXP )
LG("star_exp" , "Player"..cha_name1100.."Current Experience is"..star111.."Starts ShareTeamExp" )
local atker_role = ChaIsBoat ( team_atker )
local monster_location = IsChaInLand ( dead )
if atker_role == 1 and monster_location == 1 then
dead_exp = math.floor ( dead_exp / 5 + 1 )
end
local dead_lv = GetChaAttrI( dead , ATTR_LV )
local t = {}
t[0] = team_atker
if ValidCha (team_atker) == 0 then
LG ( "luascript_err" , "function ShareTeamExp : party experience source as null" )
return
end
t[1] = GetTeamCha(team_atker, 0 )
t[2] = GetTeamCha(team_atker, 1 )
t[3] = GetTeamCha(team_atker, 2 )
t[4] = GetTeamCha(team_atker, 3 )
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
a = CheckExpShare ( t[i] , team_atker )
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 : Member total count as 0 " )
return
end
local TeamExp_Increas = 0.25 * TeamExp_RAID
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 )
LG("exp" , "exp_add = " , exp_add )
if count >=2 then
exp_add = exp_add * InTeamGetExp_RAID
end
local exp_up
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
a = CheckExpShare ( t[i] , team_atker )
LG("exp" , "experience distribution test 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
EXP_RAID_STATE = 3
end
if StateLv == 5 then
EXP_RAID_STATE = 5
end
if StateLv == 6 then
EXP_RAID_STATE = 10
end
if StateLv == 7 then
EXP_RAID_STATE = 20
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" , "No experience growth" )
return
end
exp_up = exp_up * EXP_RAID_STATE
local Item_bg = GetChaItem ( t[i] , 2 , 1 )
local Get_Item_Type = GetItemType ( Item_bg )
if Get_Item_Type==59 then
local Item_ID = GetItemID ( Item_bg )
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 )
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
if StateLv1 ~= 0 then
exp_up =exp_up*(lv_JL*0.03+1)
end
if StateLv2 ~= 0 then
exp_up = exp_up*(lv_JL*0.02+1)
end
end
SetItemAttr ( Item_bg , ITEMATTR_URE , URE )
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])
if StateLv == 1 and Isshare == 1 then
exp_up = 1.5*exp_up
end
end
end
end
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)
if normal_monster == 220 then
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)
if normal_monster == 220 then
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)
local IdItem = GetItemID ( ptnItem )
local lvPerson = GetChaAttr(t[i] , ATTR_LV)
if IdItem==1034 and lvPerson < 41 then
local expItemNow = GetItemAttr( ptnItem , ITEMATTR_URE)*10
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
local ptnLowLvPlayer = returnLowLVPlayer( t[i], t[0], t[1], t[2], t[3], t[4])
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" ,"Character"..cha_name.."Attack"..Monster_name.."Obtained"..exp_up.."EXP" )
end
if exp<DEXP[80] and (exp+exp_up)>DEXP[80] then
exp_up =math.floor((DEXP[80]-exp) +(exp_up-(DEXP[80]-exp))/50)
end
if Lv ( TurnToCha(t[i]) ) >= 80 then
exp_up = math.floor ( exp_up / 50 )
end
if exp_up == 0 and retExpState ~= 0 then
SystemNotice ( TurnToCha(t[i]) , "Ваш уровень слишком высок, что бы получать опыт!" )
end
exp = exp + exp_up
SetChaAttrI ( TurnToCha(t[i]) , ATTR_CEXP, exp )
LG("exp" , "exp_now = " , exp )
else
end
end
local star112=GetChaAttr ( team_atker , ATTR_CEXP )
LG("star_exp" , "Player"..cha_name1100.."Current Experience is"..star112.."End ShareTeamExp" )
LG("exp" , "end getexp " )
end