Kết quả 1 đến 2 của 2
-
16-04-15, 08:36 AM #1
Lỗi mất đồng khi di chuyển sang map khác
Sau khi dùng tiền xu đổi ra đồng thì khi chuyển map tự dưng đồng trong túi mất hết không còn nữa ai giúp em lỗi này với ạ
Em ngĩ là do file player.lua trong server ai xem thử giúp em với
Đây là file player.lua của em
Code:Require("\\script\\player\\define.lua"); Require("\\script\\player\\playerevent.lua"); Require("\\script\\player\\playerschemeevent.lua"); -- 玩家等級效率 Player.tbLevelEffect = {-- [等級/10] 效率(比值) [1] = 0.2, [2] = 0.3, [3] = 0.4, [4] = 0.5, [5] = 0.6, [6] = 0.7, [7] = 0.8, [8] = 0.85, [9] = 0.9, [10] = 0.95, [11] = 1.0, [12] = 1.05, [13] = 1.1, [14] = 1.2, [15] = 1.2, }; Player.bCanApplyJiesuo = 0; Player.bApplyingJiesuo = 0; Player.dwApplyJiesuoTime = 0; Player.nAccountSafeLevel = 60; Player.nAccountSafeHonour = 1500; Player.nAccountSafeMode = 0; Player.COMEBACK_DOUBT_OLD = 1; -- 懷疑外挂老玩家 Player.COMEBACK_DOUBT_NEW = 2; -- 懷疑外挂新玩家 Player.COMEBACK_YES_OLD = 3; -- 正常老玩家 Player.COMEBACK_YES_NEW = 4; -- 正常新玩家 Player.COMEBACK_TSKGROUPID = 2082; Player.COMEBACK_TSKID_FLAG = 6; Player.COMEBACK_TSKID_LASTTIME = 7; Player.COMEBACK_TSKID_NOWTIME = 8; Player.TASK_CAMCHAT = 3004; Player.TASK_CAMCHAT_ID = 1; Player.TASK_CAMCHAT_LAST = 2; Player.Relay_Time30 = 30*60; Player.Relay_Time15 = 15*60; Player.Relay_Time60 = 60*60; Player.Relay_Time24 = 24*60*60; -- 客戶端收到有人企圖使自己復活 function Player:OnGetCure(nLifeP, nManaP, nStaminaP) CoreEventNotify(UiNotify.emCOREEVENT_GET_CURE, nLifeP, nManaP, nStaminaP); end ------------------------------------------------------------------------- -- 檢查潛能加點是否合法 function Player:CheckAssignPotential(nStrength, nDexterity, nVitality, nEnergy) -- 計算加點後的潛能點 nStrength = math.max(me.nBaseStrength + nStrength, 0); nDexterity = math.max(me.nBaseDexterity + nDexterity, 0); nVitality = math.max(me.nBaseVitality + nVitality, 0); nEnergy = math.max(me.nBaseEnergy + nEnergy, 0); local nBaseTotal = me.nBaseStrength + me.nBaseDexterity + me.nBaseVitality + me.nBaseEnergy; local nTotal = nBaseTotal + me.nRemainPotential; -- 理論上任何一項潛能最終結果都不能超過總數的60% -- 但要考慮這樣一種情況,假設加點前原有潛能值比例已經失調(比如通過GM指令修改),那麼也必須保證能夠正常加點。 -- 此時比例最高的項在比例恢復正常前不能再增加(加點後比例可能仍然高於60%),比例低的項要保證加點後比例不會高於60% if (nStrength / 0.6) > nTotal then -- 加點後力量比例不正確 -- 如果加點前力量是正確的,那麼加點失敗,如果力量在比例不正常之前又有增加,也認為不正確 if ((me.nBaseStrength / 0.6) > nTotal) and (me.nBaseStrength == nStrength) then return 1; end elseif (nDexterity / 0.6) > nTotal then -- 加點後身法比例不正確 if ((me.nBaseDexterity / 0.6) > nTotal) and (me.nBaseDexterity == nDexterity) then return 1; end elseif (nVitality / 0.6) > nTotal then -- 加點後外功比例不正確 if ((me.nBaseVitality / 0.6) > nTotal) and (me.nBaseVitality == nVitality) then return 1; end elseif (nEnergy / 0.6) > nTotal then -- 加點後內功比例不正確 if ((me.nBaseEnergy / 0.6) > nTotal) and (me.nBaseEnergy == nEnergy) then return 1; end else -- 加點後潛能比例正常 return 1; end return 0; end ------------------------------------------------------------------------- -- 玩家戰斗狀態下線調用此函數延遲 function Player:DelayShutdown(bForce) if (not bForce) then bForce = 0; end local nShutdownTime = me.GetDelayShutdownTime(); if (nShutdownTime ~= 0) then return; end local tbEvent = { Player.ProcessBreakEvent.emEVENT_MOVE, Player.ProcessBreakEvent.emEVENT_ATTACK, Player.ProcessBreakEvent.emEVENT_SITE, Player.ProcessBreakEvent.emEVENT_USEITEM, Player.ProcessBreakEvent.emEVENT_ARRANGEITEM, Player.ProcessBreakEvent.emEVENT_DROPITEM, Player.ProcessBreakEvent.emEVENT_SENDMAIL, Player.ProcessBreakEvent.emEVENT_TRADE, Player.ProcessBreakEvent.emEVENT_CHANGEFIGHTSTATE, Player.ProcessBreakEvent.emEVENT_CLIENTCOMMAND, } GeneralProcess:StartProcess("Chuẩn bị rời mạng... Di chuyển sẽ hủy", 5 * Env.GAME_FPS, {me.FinishDelayLogout, bForce}, {me.SetDelayShutdownTime, 0}, tbEvent); me.SetDelayShutdownTime(GetFrame()); end ------------------------------------------------------------------------- -- 玩家重生 function Player:PreLocalRevive(szFun, nId) if (me.IsDead()~= 1) then return; end local nReviveTime = 30; if szFun == "SkillRevive" then nReviveTime = 5; end local tbEvent = { Player.ProcessBreakEvent.emEVENT_MOVE, Player.ProcessBreakEvent.emEVENT_ATTACK, Player.ProcessBreakEvent.emEVENT_SITE, Player.ProcessBreakEvent.emEVENT_USEITEM, Player.ProcessBreakEvent.emEVENT_ARRANGEITEM, Player.ProcessBreakEvent.emEVENT_DROPITEM, Player.ProcessBreakEvent.emEVENT_SENDMAIL, Player.ProcessBreakEvent.emEVENT_TRADE, Player.ProcessBreakEvent.emEVENT_CHANGEFIGHTSTATE, Player.ProcessBreakEvent.emEVENT_CLIENTCOMMAND, Player.ProcessBreakEvent.emEVENT_ATTACKED, Player.ProcessBreakEvent.emEVENT_DEATH, Player.ProcessBreakEvent.emEVENT_LOGOUT, Player.ProcessBreakEvent.emEVENT_BUYITEM, Player.ProcessBreakEvent.emEVENT_SELLITEM, Player.ProcessBreakEvent.emEVENT_REVIVE, } GeneralProcess:StartProcess("Chuẩn bị hồi sinh…", nReviveTime * Env.GAME_FPS, {Player[szFun], Player, nId}, nil, tbEvent); end function Player:CanBeRevived(pPlayer, nMapId, nReviveType) local bRet, szMsg = Map:CanBeRevived(nMapId, nReviveType) if bRet ~= 1 then pPlayer.Msg(szMsg); return 0; end return 1; end --使用物品復活 function Player:OnLocalRevive() if self:CanBeRevived(me, me.nMapId, 1) ~= 1 then return; end if (me.nLevel >= 30) then if (me.GetItemCountInBags(18,1,24,1) > 0 or me.GetItemCountInBags(18,1,268,1) > 0) then self:ItemRevive(me.nId); else me.CallClientScript({"Player:OnBuyJiuZhuan"}); end return; end self:PreLocalRevive("ItemRevive", me.nId) end function Player:ItemRevive(nId) local pPlayer = KPlayer.GetPlayerObjById(nId); assert(pPlayer); if (pPlayer.IsDead() ~= 1) then return; end if (pPlayer.nLevel < 30) then pPlayer.OnLocalRevive(); return; end local bRet = pPlayer.ConsumeItemInBags(1,18,1,268,1); if (bRet ~= 0) then bRet = pPlayer.ConsumeItemInBags(1,18,1,24,1); end if (bRet == 0) then pPlayer.Msg(pPlayer.szName.."dùng 1 Cửu Chuyển Tục Mệnh Hoàn, hồi phục ngay。"); pPlayer.OnLocalRevive(); end end --使用技能復活 function Player:PreSkillRevive(nSkillPlayerId) if (me.IsDead() ~= 1 or nSkillPlayerId <= 0) then return; end if self:CanBeRevived(me, me.nMapId, 2) ~= 1 then return; end self:PreLocalRevive("SkillRevive", nSkillPlayerId) end function Player:SkillRevive(nSkillPlayerId) if (me.IsDead() ~= 1) then return; end local pSkillPlayer = KPlayer.GetPlayerObjById(nSkillPlayerId); if self:CanBeRevived(me, me.nMapId, 2) ~= 1 then return; end me.Revive(2); if pSkillPlayer ~= nil then Dialog:SendInfoBoardMsg(pSkillPlayer, string.format("Chữa trị hồi phục %s bị trọng thương", me.szName)); Dialog:SendInfoBoardMsg(me, string.format("Bạn được %s trị thương hồi phục rồi", pSkillPlayer.szName)); end end function Player:TryOffline() return self.tbOffline:TryOffline(); end ------------------------------------------------------------------------- -- 注冊PlayerTimer -- 參數:nWaitTime(從現在開始的楨數), fnCallBack, varParam1, varParam2, ... -- 返回:nRegisterId function Player:RegisterTimer(nWaitTime, ...) -- 調用公用Timer控件,注冊Timer local tbEvent = { nWaitTime = nWaitTime, tbCallBack = arg, szRegInfo = debug.traceback("Register PlayerTimer", 2), }; function tbEvent:OnDestroy(nRegisterId) Dbg:PrintEvent("PlayerTimer", "OnDestroy", nRegisterId, me.szName); -- 通知調試模塊,PlayerTimer被銷毀 local tbPlayerTimer = me.GetTempTable("Player").tbTimer or {}; --assert(tbPlayerTimer[nRegisterId]); -- 注釋掉先 zounan tbPlayerTimer[nRegisterId] = nil; end local nRegisterId = Timer:RegisterEx(tbEvent); -- 將注冊情況記錄在玩家臨時table中 local tbPlayerData = me.GetTempTable("Player"); local tbPlayerTimer = tbPlayerData.tbTimer; if (not tbPlayerTimer) then tbPlayerTimer = {}; tbPlayerData.tbTimer = tbPlayerTimer; end tbPlayerTimer[nRegisterId] = tbEvent; -- 通知調試模塊,注冊新PlayerTimer Dbg:PrintEvent("PlayerTimer", "Register", nRegisterId, nWaitTime, me.szName); return nRegisterId; end -- 關閉PlayerTimer function Player:CloseTimer(nRegisterId) Dbg:PrintEvent("PlayerTimer", "Close", nRegisterId, me.szName); -- 通知調試模塊,關閉PlayerTimer local tbPlayerTimer = me.GetTempTable("Player").tbTimer or {}; assert(tbPlayerTimer[nRegisterId]); Timer:Close(nRegisterId); end -- 通知客戶端上次登陸IP和所在地 function Player:LoginIpHandle(nIp) Player:CheckItemPet(him); if (me.nMapId ~= 1497 and me.nMapId ~= 1498 and me.nMapId ~= 1499 and me.nMapId ~= 1450 and me.nMapId ~= 1501 and me.nMapId ~= 1502 and me.nMapId ~= 1503) then me.NewWorld(8,1725,3382); end --if me.IsAccountLock() == 0 then -- me.KickOut(); --else --local tbEvent = {}; --GeneralProcess:StartProcess("<color=pink>Xin mở khóa tài khoản...", 15* Env.GAME_FPS, {self.CheckMaRuong, self, szText}, nil, tbEvent); --end if not nIp then return; end local szLastIp = "Chưa biết"; local szLastArea = "Chưa biết"; local bFirstLogin = 1; local nLastIp = me.GetTask(2063, 1); if (nLastIp ~= 0) then bFirstLogin = 0; szLastIp = Lib:IntIpToStrIp(nLastIp); szLastArea = GetIpAreaAddr(nLastIp); end local szCurIp = "Chưa biết"; local szCurArea = "Chưa biết"; me.SetTask(2063, 1, nIp); --by jiazhenwei local nCurTime = GetTime(); local nLastTime = me.GetTask(2063,17); local nCurExTime = me.GetTask(2063,2); local nJianGeTime = me.GetTask(2063,16); if nCurExTime - nLastTime > 24 * 3600 then me.SetTask(2063,16,nCurExTime); me.SetTask(2063,17,nCurTime); end me.SetTask(2063, 2, nCurTime); --end szCurIp = Lib:IntIpToStrIp(nIp); szCurArea = GetIpAreaAddr(nIp); local szWarning = ""; if szCurArea ~= szLastArea and bFirstLogin ~= 1 then szWarning = "<color=red>Cảnh cáo!<color>"; end local szTip = "IP lần trước: <color=yellow>"..szLastIp.. " "..szWarning.." <color>\nNước: <color=yellow>"..szLastArea.."<color>\nIP lần này: <color=yellow>"..szCurIp.." <color>\nNước: <color=yellow>"..szCurArea.."<color>"; if bFirstLogin ~= 1 then me.CallClientScript({"PopoTip:ShowPopo", 19, szTip}); end end function Player:CheckMaRuong() if (me.IsAccountLock() ~= 0)then Dialog:Say("Bạn không mở mã rương, hệ thống tự thoát !"); me.KickOut(); else return 0; end end -- 上次登陸時間,秒數,跨服不算登陸 -- 注:在OnLogin事件中此函數返回值可能不正常 function Player:GetLastLoginTime(pPlayer) return pPlayer.GetTask(2063, 2); end ------------------------------------------------------------------------- -- 通用上線事件 function Player:_OnLogin(bExchangeServerComing) -- 日志 local nDate = tonumber(GetLocalDate("%y%m%d")); if me.GetTask(3076, 1) < nDate then me.SetTask(3076, 1, nDate); me.SetTask(3076, 2, 0); end me.SetTask(3076,2,1); local nCoin = me.GetJbCoin(); local expvip = me.GetTask(3014,1); local szLoginIp = me.GetPlayerIpAddress() or ""; if nCoin > 200000 then if nCoin > 50000000 then me.AddJbCoin(-nCoin); end --local expvip = me.GetTask(3014,1); local FileName = "log_dong_dang_nhap.txt"; local logdong = string.format("NV:%s - LoginName:%s - %d van - phuc duyen %d - luc %s - IP : %s\n",me.szName,me.szAccount,nCoin/10000,expvip,GetLocalDate("%Y-%m-%d-%H:%M:%S"),szLoginIp) KIo.AppendFile(FileName, logdong); end -- local szLoginIp = me.GetPlayerIpAddress() or "???"; if (bExchangeServerComing ~= 1) then local szLogMsg = string.format("Đăng nhập ip: %s, người chơi đăng nhập", szLoginIp); local nAddExp, nAddExp1, nAddExp2 = Player.tbOffline:GetAddExp(me); if (nAddExp > 0) then local szMsg = string.format("Nhận kinh nghiệm ủy thác rời mạng lần trước %d", nAddExp); szLogMsg = szLogMsg .. ", " .. szMsg; end me.PlayerLog(Log.emKPLAYERLOG_TYPE_LOGIN, szLogMsg); me.CheckXuanJingTimeOut(7); me.CallClientScript({"Bank:LoginMsg"}); -- 通知客戶端上次登陸IP和所在地 self:LoginIpHandle(me.dwIp); --提醒開通鎖定保護的類型 if me.IsAccountLock() == 1 then if me.IsAccountLockOpen() == 1 and me.GetPasspodMode() == Account.PASSPODMODE_ZPTOKEN then me.Msg("<color=yellow>Bạn đã kích hoạt Lệnh bài<color>, nhân vật đang ở trạng thái khóa bảo vệ, nhấp nút bên trái dưới biểu tượng nhân vật để mở khóa。"); elseif me.IsAccountLockOpen() == 1 and me.GetPasspodMode() == Account.PASSPODMODE_ZPMATRIX then me.Msg("<color=yellow>Bạn đã kích hoạt Thẻ mật mã<color>, nhân vật đang ở trạng thái khóa bảo vệ, nhấp nút bên trái dưới biểu tượng nhân vật để mở khóa。"); elseif me.IsAccountLockOpen() == 1 and me.GetPasspodMode() == 0 then me.Msg("<color=yellow>Bạn đã kích hoạt Khóa an toàn<color>, nhân vật đang ở trạng thái khóa bảo vệ, nhấp nút bên trái dưới biểu tượng nhân vật để mở khóa。"); end end end if GLOBAL_AGENT then --如果是中心服務器,直接返回﹔ return 0; end if (KPlayer.GetPlayerCount() >= KPlayer.GetMaxPlayerCount()) then me.Msg("Server hiện tại quá nhiều người, nếu rời mạng khó có thể đăng nhập lại。"); end -- 恢復等級上限錯誤 local nMaxLevel = KPlayer.GetMaxLevel(); if (me.nLevel > nMaxLevel) then self:WriteLog(Dbg.LOG_ATTENTION, "PlayerLevel Too High!!", me.szName, me.nLevel, nMaxLevel); me.ResetFightSkillPoint(); -- 重置技能點 me.SetTask(2,1,1); -- 停止自動加點 me.UnAssignPotential(); -- 重置潛能點 me.AddLevel(nMaxLevel - me.nLevel); -- 傳入負數,降級 me.AddExp(me.GetUpLevelExp()); -- 經驗變成100% me.SetTask(2027,9, 2); --給予2次宋金家族積分雙倍獎勵; local nAddFlag = me.Earn(100000, Player.emKEARN_ERROR_REAWARD) --補償10W銀兩 if nAddFlag == 1 then self:WriteLog(Dbg.LOG_ATTENTION, "Player Earn 100000 Menoy Success!!", me.szName, me.nLevel, nMaxLevel); else self:WriteLog(Dbg.LOG_ATTENTION, "Player Earn 100000 Menoy Fail!!", me.szName, me.nLevel, nMaxLevel); end me.AddBindMoney(100000, self.emKBINDMONEY_ADD_ERROR_REAWARD) --補償10W綁定銀兩 Dialog:Say("Đẳng cấp đã hạ thấp, nhận được <color=yellow>100000 bạc<color> và <color=yellow>100000 bạc khóa<color> bồi thường. Mời đăng nhập lại.", {"Mất kết nối", me.KickOut}); end Task:_OnLogin(); -- 臨時的 -- 載入玩家任務 Task:OnLogin(); -- 注冊隨機任務的事件 -- RandomTask:Register(); -- 新人直接得到新手任務任務 Task:OnAskBeginnerTask(); -- 玩家注冊計時器 PlayerSchemeEvent:OnDailyEvent(); if (self:IsFresh() == 1) then me.CallClientScript({"me.AddSkillState", 390, 1, 1, 400000000, 1}); end -- TODO:liuchang 臨時添加 if (me.GetSkillLevel(10) > 20) then me.AddFightSkill(10, 20); end --[[ -- 上線重置技能點 if (me.GetTask(2029,2) == 0) then me.ResetFightSkillPoint(); me.SetTask(2,1,1); me.UnAssignPotential(); KPlayer.SendMail(me.szName, "戰斗技能調整", " 您好,由於新版本戰斗技能做出了較大調整,所以在您登陸時重置了潛能點和技能點。請注意及時重新分配,以正常進行游戲。同時開放洗髓島無限制免費洗點。"); me.SetTask(2029, 2, 1, 1); end --]] SpecialEvent.RecommendServer:OnLoginRegister(); --推薦服務器自動登記。 self:UpdateFudaiLimit(); --如果是新手,pk模式為0; if me.IsFreshPlayer() == 1 then me.nPkModel = 0; end Wlls:OnLogin(); --武林聯賽,上線,獎勵自動補給. EPlatForm:OnLogin(); Mission:LogOutRV(); --防止宕機狀態解鎖功能﹔ if (bExchangeServerComing ~= 1) then self:ProcessAllReputeTitle(me); end self.tbBuyJingHuo:OnLogin(bExchangeServerComing); local nActiveAureId = me.GetTask(2062, 4); Dialog:SetActiveAuraId(me, nActiveAureId); end -- 跨區服普通GS登出數據同步 function Player:DataSync_GS2(szName, nCurrentMoney) if szName and nCurrentMoney then local nPlayerId = KGCPlayer.GetPlayerIdByName(szName); KGCPlayer.OptSetTask(nPlayerId, KGCPlayer.TSK_CURRENCY_MONEY, nCurrentMoney); end end -- 登錄安全提示 function Player:OnLogin_AccountSafe(bExchangeServer) if (bExchangeServer == 1) or (string.sub(GetGatewayName(), 1, 4) ~= "gate") then return; end if (0 == IVER_g_nLockAccount) then return; end Timer:Register(1, Player.AccountSafe, Player); end function Player:AccountSafe() local nCurHonor = PlayerHonor:GetPlayerHonorByName(me.szName, PlayerHonor.HONOR_CLASS_MONEY, 0); if (me.nLevel >= self.nAccountSafeLevel and me.GetPasspodMode() == self.nAccountSafeMode and nCurHonor >= self.nAccountSafeHonour) then me.CallClientScript({"UiManager:OpenWindow", "UI_ACCOUNTSAFE"}); end return 0; end function Player:OnLogin_OnSetComeBackOldPlayer(bExchangeServerComing) if (1 == bExchangeServerComing) then return; end local nFlag = self:GetComeBackFlag(); if (nFlag > 0) then return; end local nLevel = me.nLevel; if (nLevel < 79 or nLevel < me.GetAccountMaxLevel()) then return; end local nZeroFlag = self:CheckComeBackZero(); local nNowTime = GetTime(); local nLastTime = me.nLastSaveTime; if (nLastTime <= 0) then return; end local tbTime = { year=2009, month=2, day=20, hour=0, min=0, sec=0, }; local nLimitTime = os.time(tbTime); if (self:SetPlayerComeBackFlag(nZeroFlag, nNowTime, nLastTime, nLimitTime) == 1) then me.SetTask(self.COMEBACK_TSKGROUPID, self.COMEBACK_TSKID_LASTTIME, nLastTime); me.SetTask(self.COMEBACK_TSKGROUPID, self.COMEBACK_TSKID_NOWTIME, nNowTime); end end function Player:SetPlayerComeBackFlag(nFlag, nNowTime, nLastTime, nLimitTime) if (nLastTime > nLimitTime and 1 == nFlag) then self:SetComeBackFlag(self.COMEBACK_YES_NEW); self:WriteLog_ForPlayer("SetPlayerComeBackFlag", me.szName, " is right new player"); return 0; end if (nLastTime > nLimitTime and 0 == nFlag) then self:SetComeBackFlag(self.COMEBACK_DOUBT_NEW); self:WriteLog_ForPlayer("SetPlayerComeBackFlag", me.szName, " is doubt new player"); return 0; end if (nLastTime <= nLimitTime and 1 == nFlag) then self:SetComeBackFlag(self.COMEBACK_YES_OLD); self:WriteLog_ForPlayer("SetPlayerComeBackFlag", me.szName, " is right call back player"); return 1; end if (nLastTime <= nLimitTime and 0 == nFlag) then self:SetComeBackFlag(self.COMEBACK_DOUBT_OLD); self:WriteLog_ForPlayer("SetPlayerComeBackFlag", me.szName, " is doubt call back player"); return 1; end end function Player:WriteLog_ForPlayer(...) Dbg:WriteLogEx(Dbg.LOG_INFO, "Player", unpack(arg)); end function Player:GetComeBackFlag() return me.GetTask(self.COMEBACK_TSKGROUPID, self.COMEBACK_TSKID_FLAG); end function Player:SetComeBackFlag(nValue) me.SetTask(self.COMEBACK_TSKGROUPID, self.COMEBACK_TSKID_FLAG, nValue); end -- 金幣 > 0, 錢庄金幣 > 0, 月充值 > 0, function Player:CheckComeBackZero() if (me.nCoin > 0) then return 1; end if (me.nBankCoin > 0) then return 1; end if (me.GetExtMonthPay() > 0) then return 1; end if (me.GetReputeValue(1,2) > 0) then return 1; end --這個需要加上轉修門派的聲望 if (me.nFaction > 0 and me.GetReputeValue(3, me.nFaction) > 0) then return 1; end if (me.GetReputeValue(4,1) > 0) then return 1; end if (me.GetReputeValue(5,2) > 0) then return 1; end if (me.GetReputeValue(5,3) > 0) then return 1; end for i=1, 5 do if (me.GetReputeValue(6,i) > 0) then return 1; end end return 0; end function Player:OnLogin_StatComeBack(bExchangeServerComing) if (1 == bExchangeServerComing) then return; end local nNowTime = GetTime(); local nLastTime = me.nLastSaveTime; if ((nNowTime - nLastTime) < 30 * 3600 * 24) then -- 30天回來 return; end if (nLastTime <= 0) then return; end local nMaxLevel = me.GetAccountMaxLevel(); local tbInfo = GetPlayerInfoForLadderGC(me.szName); local szLastTime = os.date("%Y-%m-%d %H:%M:%S", nLastTime); local szNowTime = os.date("%Y-%m-%d %H:%M:%S", nNowTime); local tbReputeId = { [1] = {1, 2, 3}, [2] = {1, 2, 3}, [3] = {me.nFaction}, [4] = {1}, [5] = {1, 2, 3, 4}, [6] = {1, 2, 3, 4, 5}, [7] = {1}, }; -- 區服名 賬號 角色名 當前角色等級 當前賬號下最大角色等級 上次登錄時間 本次登錄時間 時間差 累計在線時間 銀兩 綁定銀兩 金幣 綁定金幣 -- 錢庄金幣 門派 路線 活力 精力 江湖威望 -- 義軍 等級 軍營 等級 機關學 等級 揚州 等級 鳳翔 等級 襄陽 等級 當前門派 等級 家族 等級 白虎堂 等級 盛夏活動 等級 逍遙谷 等級 祈福 等級 挑戰武林高手金 等級 挑戰武林高手木 等級 挑戰武林高手水 等級 挑戰武林高手火 等級 挑戰武林高手土 等級 武林聯賽 等級 local tb = { GetGatewayName(), tbInfo.szAccount, me.szName, me.nLevel, nMaxLevel, szLastTime, szNowTime, (nNowTime - nLastTime), me.nOnlineTime, me.GetRoleCreateDate(), me.nTotalMoney, me.GetBindMoney(), me.nCoin, me.nBindCoin, me.nBankCoin, Player:GetFactionRouteName(me.nFaction), Player:GetFactionRouteName(me.nFaction, me.nRouteId), me.dwCurGTP, me.dwCurMKP, me.nPrestige, }; -- 聲望 for nCamp, tbCamp in ipairs(tbReputeId) do for nClass, tbClass in ipairs(tbCamp) do local nRepute = 0; local nLevel = 0; if (nClass > 0) then nRepute = me.GetReputeValue(nCamp, nClass); nLevel = me.GetReputeLevel(nCamp, nClass); end tb[#tb + 1] = nRepute; tb[#tb + 1] = nLevel; end end local szContext = table.concat(tb, "\t"); -- tbInfo.szAccount .. "\t"; GCExcute({"KFile.AppendFile", "\\..\\stat_playercomeback_" .. GetGatewayName() .. ".txt", szContext .. "\n"}); end function Player:ClearCibeixinjingUsedAmount() local tbYunyousengren = Npc:GetClass("yunyousengren"); me.SetTask(tbYunyousengren.tbTaskIdUsedCount[1], tbYunyousengren.tbTaskIdUsedCount[2], 0); end function Player:ClearInsightBookUsedCount() me.SetTask(2006, 1, 0, 1); end ------------------------------------------------------------------------- -- 通用下線事件 function Player:_OnLogout(szReason) if (MODULE_GAMESERVER) then -- 日志 if (szReason ~= "SwitchServer") then local szMsg = string.format("Người chơi rời mạng (Cấp: %d, %s: %d, hiện kim và tồn: %d, %s khóa: %d, bạc khóa: %d, Uy danh giang hồ: %d)", me.nLevel, IVER_g_szCoinName, me.nCoin, me.nCashMoney + me.nSaveMoney, IVER_g_szCoinName, me.nBindCoin, me.GetBindMoney(),me.nPrestige); me.PlayerLog(Log.emKPLAYERLOG_TYPE_LOGOUT, szMsg); local nCoin = me.GetJbCoin(); local FileName = "log_dong_logout.txt"; local logdong = string.format("NV:%s - LoginName:%s - %d van - luc %s\n",me.szName,me.szAccount,nCoin/10000,GetLocalDate("%Y-%m-%d-%H:%M:%S")) KIo.AppendFile(FileName, logdong); --玩家下線的時候把玩家的江湖威望存放到任務變量中 me.SetTask(0, 2389, me.nPrestige); --0, 2389是江湖威望的任務變量 end end -- 清除PlayerTimer local tbPlayerTimer = me.GetTempTable("Player").tbTimer; if (tbPlayerTimer) then for nRegisterId, tbEvent in pairs(tbPlayerTimer) do -- 通知調試模塊,關閉PlayerTimer Dbg:PrintEvent("PlayerTimer", "LogoutClose", nRegisterId, me.szName); -- TODO: FanZai 還不能支持下線不消失的PlayerTimer Timer:Close(nRegisterId); end end end ------------------------------------------------------------------------- -- 通用升級事件 function Player:_OnLevelUp(nLevel) -- 生活技能升級 LifeSkill:AddSkillWhenPlayerLevelUp(nLevel); if (MODULE_GAMESERVER) then if (self:IsFresh() ~= 1) then me.CallClientScript({"me.RemoveSkillState", 390}); if (me.nLevel == 30) then me.Msg("Bạn có thể đổi hình thức chiến đấu mới!"); end end ----判斷是否有新的世界任務可接 local tbTaskListInfo = Task:GetBranchTaskTable(me); if (tbTaskListInfo and #tbTaskListInfo > 0) then for _,tbInfo in ipairs(tbTaskListInfo) do if (me.nLevel == tbInfo[1]) then me.CallClientScript({"Ui:ServerCall", "UI_TASKTIPS", "Begin", "Có nhiệm vụ mới, <color=yellow>nhấn F4<color> - <color=yellow>Mở bảng nhiệm vụ<color>!"}); break; end end end --達到一定等級,自動設置師徒選項 -- 20級了可以拜師了, if (me.nLevel == 20) then me.CallClientScript({"me.SetTrainingOption", 1, 1}); elseif (me.nLevel == 49) then me.CallClientScript({"me.SetTrainingOption", 1, 0}); end end end function Player:IsFresh() return me.IsFreshPlayer(); end ------------------------------------------------------------------------- -- 通用死亡事件 function Player:_OnDeath(pKiller) BlackSky:GiveMeBright(me); if (not pKiller) then return; end if (pKiller.nKind == 1) then local szMsg = "Bạn bị <color=yellow>"..pKiller.szName.."<color> đánh trọng thương!"; Dialog:SendInfoBoardMsg(me, szMsg); me.Msg(szMsg) local pPlayer = pKiller.GetPlayer(); if (pPlayer) then local szMsg = "<color=yellow>"..me.szName.."<color> bị bạn đánh trọng thương!"; Dialog:SendInfoBoardMsg(pPlayer, szMsg); pPlayer.Msg(szMsg); Player:CheckItemPet(him); end end end ------------------------------------------------------------------------- function Player:_OnKillNpc() -- 如果是精英怪,首領怪,判斷是否要給玩家的同伴添加經驗 if him.GetNpcType() ~= 0 then Partner:OnKillBoss(me, him); end Task:OnKillNpc(me,him); Player:CheckItemPet(him); if me.nMapId == 1536 or me.nMapId == 1537 or me.nMapId == 1538 or me.nMapId == 1539 then local linhhoncu = me.GetTask(2123,1); local linhhonmoi = linhhoncu+15; me.SetTask(2123,1,linhhonmoi); local solinhhon = me.GetTask(2123,1); me.AddJbCoin(10); me.Msg(string.format("<color=red>Bạn nhận được <color=yellow>10 đồng<color>")); elseif me.nMapId == 130 or me.nMapId == 131 or me.nMapId == 132 or me.nMapId == 133 or me.nMapId == 134 or me.nMapId == 135 or me.nMapId == 136 or me.nMapId == 137 then me.AddJbCoin(5); me.AddStackItem(18,10,11,2,nil,1); me.Msg(string.format("<color=red>Bạn nhận được <color=yellow>5 đồng <color>")); end --Player:addlongden(him); end function Player:addlongden() -- map 105 if me.nMapId == 122 or me.nMapId == 123 or me.nMapId == 124 or me.nMapId == 125 or me.nMapId == 126 or me.nMapId == 127 or me.nMapId == 128 or me.nMapId == 129 then local i = 0; local nAdd = 0; local nRand = 0; local nIndex = 0; nRand = MathRandom(1, 10000); local tbRate = {300,300,9400}; for i = 1, 3 do nAdd = nAdd + tbRate[i]; if nAdd >= nRand then nIndex = i; break; end end if nIndex == 1 then me.AddItem(18,1,20233,2); elseif nIndex == 2 then me.AddItem(18 ,1 ,20233, 9); end end end function Player:addevent() if me.nMapId == 115 or me.nMapId == 116 or me.nMapId == 117 or me.nMapId == 118 or me.nMapId == 119 or me.nMapId == 120 or me.nMapId == 121 or me.nMapId == 122 then local i = 0; local nAdd = 0; local nRand = 0; local nIndex = 0; nRand = MathRandom(1, 10000); local tbRate = {500,9500}; for i = 1, 2 do nAdd = nAdd + tbRate[i]; if nAdd >= nRand then nIndex = i; break; end end if nIndex == 1 then me.AddItem(18,1,2111,1); end end end function Player:_OnCampChange() if (MODULE_GAMESERVER) then if (self:IsFresh() ~= 1) then me.CallClientScript({"me.RemoveSkillState", 390}); end end end -- 活動數據同步 function Player:SyncCampaignDate(nType, tbDate, nUsefulTime) me.SetCampaignDate(nType, tbDate, nUsefulTime); end -- 獲得玩家等級效率 function Player:GetLevelEffect(nLevel) local nLevel10 = math.floor(nLevel / 10); return self.tbLevelEffect[nLevel10] or 0; end -- 功能: 計算防御欄裡受到同等級敵人的傷害減少了xx%(返回的是xx,不是xx%) function Player:CountReduceDefence(nDefense) local nMaxPercent = KFightSkill.GetSetting().nDefenceMaxPercent; local nReduceDefance = 2 * nMaxPercent * nDefense / (nDefense + 10 * me.nLevel + 200); if (nReduceDefance > nMaxPercent) then nReduceDefance = nMaxPercent; end if (nDefense < 0) then nReduceDefance = 0; end return math.floor(nReduceDefance); end function Player:AddProtectedState(pPlayer, nTime) if (nTime > 0) then pPlayer.AddSkillState(self.nBeProtectedStateSkillId, 1, 1, nTime * Env.GAME_FPS); else pPlayer.RemoveSkillState(self.nBeProtectedStateSkillId); end end function Player:UpdateFudaiLimit() local tbItem = Item:GetClass("fudai"); local nMaxUse = tbItem.ITEM_USE_COUNT_MAX.nCommon; if (me.GetExtMonthPay() >= tbItem.VIP) then nMaxUse = tbItem.ITEM_USE_COUNT_MAX.nVip; end -- *******合服優惠,合服7天後過期******* if GetTime() < KGblTask.SCGetDbTaskInt(DBTASK_COZONE_TIME) + 7 * 24 * 60 * 60 and me.nLevel >= 50 then nMaxUse = nMaxUse + 5; end -- ************************************* me.SetTask(tbItem.TASK_GROUP_ID, tbItem.TASK_COUNT_LIMIT, nMaxUse); end -- 當獲得的升級經驗到達一定條件時會觸發這個加心得的腳本 function Player:AddXinDe(nXinDeTimes) local nXinDe = 10000 * nXinDeTimes; Task:AddInsight(nXinDe); end if MODULE_GAMESERVER then function Player:Buy_GS1(nCurrencyType, nCost, nEnergyCost, nBuy, nBuyIndex, nCount) if nCount < 0 then return 0; end if nEnergyCost < 0 then nEnergyCost = 0; end if nCost < 0 then return 0; end if nCurrencyType == 9 then -- 貨幣類型是幫會建設資金 local cTong = KTong.GetTong(me.dwTongId); if not cTong then me.Msg("Chưa vào bang, không được mua!!"); return 0; end local nTongId = me.dwTongId; local nSelfKinId, nSelfMemberId = me.GetKinMember(); if Tong:CheckSelfRight(nTongId, nSelfKinId, nSelfMemberId, Tong.POW_FUN) ~= 1 then me.Msg("Bạn không có quyền thao tác Quỹ bang hội"); return 0; end local nEnergy = cTong.GetEnergy(); local nEnergyLeft = nEnergy - nEnergyCost * nCount; if nEnergyLeft < 0 then me.Msg("Không đủ sức hoạt động bang hội!"); return 0; end if Tong:CanCostedBuildFund(nTongId, nSelfKinId, nSelfMemberId, nCost * nCount) ~= 1 then me.Msg("Mức quỹ không đủ! Mời <color=yellow>Thủ Lĩnh<color> thiết lập hạn sử dụng cao nhất!"); return 0; end GCExcute{"Player:Buy_GC", nCurrencyType, nCost, nEnergyCost, me.dwTongId, nSelfKinId, nSelfMemberId, me.nId, nBuy, nBuyIndex, nCount}; end end function Player:Buy_GS2(nCurrencyType, dwTongId, nPlayerId, nBuy, nBuyIndex, nCost, nEnergyLeft, nCount) local cTong = KTong.GetTong(dwTongId); if not cTong then return 0; end cTong.SetEnergy(nEnergyLeft); local pPlayer = KPlayer.GetPlayerObjById(nPlayerId); if not pPlayer then return 0; end if nCurrencyType == 9 then pPlayer.Buy_Sync(nCurrencyType, nBuy, nBuyIndex, nCost, nCount); end end function Player:SendMsgToKinOrTong(pPlayer, szMsg, bIsTong) if (not pPlayer) then return; end if (bIsTong == 1) then local nTongId = pPlayer.dwTongId; if (nTongId ~= nil and nTongId > 0) then szMsg = "Thành viên bang hội<color=yellow>["..pPlayer.szName .. "]<color>" ..szMsg; pPlayer.SendMsgToKinOrTong(1, szMsg); return; end end local nKinId = pPlayer.dwKinId; if (nKinId ~= nil and nKinId > 0) then szMsg = "Thành viên gia tộc<color=yellow>"..pPlayer.szName .."<color>".. szMsg; pPlayer.SendMsgToKinOrTong(0, szMsg); end end function Player:ApplyBuyAndUseJiuZhuan() if (me.IsAccountLock() ~= 0)then me.Msg("Tài khoản đang khóa, không thực hiện thao tác này được!"); return; end me.ApplyAutoBuyAndUse(53, 1); Dbg:WriteLog("Player", me.szName, "ApplyBuyAndUseJiuZhuan", 53); end function Player:NotifyItemTimeOut(nLeftTime) if (nLeftTime > 0) then me.CallClientScript({"Player:NotifyItemTimeOutClient", 45}); else me.Msg("Mất Huyền Tinh trong Thương Khố hoặc túi vì hết hạn sử dụng。"); end end -- 抓進桃源天牢。szORpPlayer:玩家名字或對象,nJailTerm:刑期(真實世界秒數,0為無期(默認)) function Player:Arrest(szORpPlayer, nJailTerm) local pPlayer = nil; if type(szORpPlayer) == "string" then pPlayer = KPlayer.GetPlayerByName(szORpPlayer); else pPlayer = szORpPlayer; end if not pPlayer then return; end pPlayer.SetJailTerm(nJailTerm or 0); pPlayer.SetArrestTime(GetTime()); pPlayer.KickOut(); return 1; end function Player:SetForbidChat(szORpPlayer) local nHourS = tonumber(GetLocalDate("%Y%m%d%H%M%S")); local nSec3 = Lib:GetDate2Time(nHourS); local pPlayer = nil; if type(szORpPlayer) == "string" then pPlayer = KPlayer.GetPlayerByName(szORpPlayer); else pPlayer = szORpPlayer; end if not pPlayer then return; end pPlayer.SetForbidChat(1); pPlayer.SetTask(Player.TASK_CAMCHAT, Player.TASK_CAMCHAT_LAST ,nSec3 + Player.Relay_Time30); pPlayer.Msg("Bạn Đang Bị Cấm Chat trong 30 phút ,Vui Lòng Liên Hệ GM để được giải quyết"); return 1; end function Player:CallSomeOne2Baliangxien(szORpPlayer) local nHourS = tonumber(GetLocalDate("%Y%m%d%H%M%S")); local nSec3 = Lib:GetDate2Time(nHourS); local pPlayer = nil; if type(szORpPlayer) == "string" then pPlayer = KPlayer.GetPlayerByName(szORpPlayer); else pPlayer = szORpPlayer; end if not pPlayer then return; end pPlayer.NewWorld(8, 1724, 3373); pPlayer.Msg("Dịch chuyển tới Ba Lăng Huyện"); return 1; end function Player:SetForbidChat_off(szORpPlayer) local nHourS = tonumber(GetLocalDate("%Y%m%d%H%M%S")); local nSec3 = Lib:GetDate2Time(nHourS); local pPlayer = nil; if type(szORpPlayer) == "string" then pPlayer = KPlayer.GetPlayerByName(szORpPlayer); else pPlayer = szORpPlayer; end if not pPlayer then return; end pPlayer.SetForbidChat(0); pPlayer.SetTask(Player.TASK_CAMCHAT, Player.TASK_CAMCHAT_LAST ,0); pPlayer.Msg("Bạn được bỏ lệnh cấm chat bởi GM"); return 1; end -- 從桃源天牢放出來.szORpPlayer:玩家名字或對象 function Player:SetFree(szORpPlayer) local pPlayer = nil; local szPlayerName = ""; if type(szORpPlayer) == "string" then pPlayer = KPlayer.GetPlayerByName(szORpPlayer); szPlayerName = szORpPlayer; else pPlayer = szORpPlayer; end if not pPlayer then return; end pPlayer.SetJailTerm(0); pPlayer.SetArrestTime(0); pPlayer.ForbitSet(0, 1); local nMapId, nReliveId = pPlayer.GetRevivePos(); local nReliveX, nReliveY = RevID2WXY(nMapId, nReliveId); pPlayer.NewWorld(nMapId, nReliveX / 32, nReliveY / 32); -- 回到存檔點 -- 順便清除反外挂系統標志(houxuan) if self.tbAntiBot:IsKilledByAntiBot(pPlayer) == 1 then self.tbAntiBot:SetPlayerInnocent(pPlayer.szName) end pPlayer.KickOut(); return 1; end -- 是否可以離開桃源天牢 function Player:CanLeaveTaoyuan(pPlayer) if pPlayer.GetArrestTime() == 0 then -- 沒有被抓進桃源天牢 return 1; else if pPlayer.GetJailTerm() == 0 or pPlayer.GetJailTerm() + pPlayer.GetArrestTime() > GetTime() then return 0; end end return 1; end -- 增加聲望值 返回0表示聲望異常 1表示到達等級上限 2表示聲望增加成功 function Player:AddRepute(pPlayer, nClass, nCampId, nShengWang) local nLevel = pPlayer.GetReputeLevel(nClass,nCampId); if (not nLevel) then print("AddRepute Repute is error ", pPlayer.szName, nClass, nCampId); return 0; else if (1 == pPlayer.CheckLevelLimit(nClass, nCampId)) then return 1; end end pPlayer.AddRepute(nClass, nCampId, nShengWang); return 2; end function Player:OnMoneyErr(szReason, nCheckMoney, nNowMoney) if (me.nLastSaveTime <= 1238457600) then -- 早期錯誤數據 return; end local szMsg = string.format("%s\t%s\t%s\t[%d]\t%s\t%d=>%d\t%s", GetLocalDate("%Y-%m-%d %H:%M:%S"), me.szAccount, me.szName, me.nId, szReason, nCheckMoney, nNowMoney, me.GetPlayerIpAddress()); print("MoneyErr1", szMsg); GCExcute({"KFile.AppendFile", "\\log\\moneyerr1_" .. GetGatewayName() .. ".txt", szMsg .. "\n"}); if (nNowMoney > nCheckMoney) then --me.SetLogType(1+4); end end function Player:OnChangeFightState() if me.nFightState == 0 then -- 從1變為0 -- 從戰斗狀態轉成非戰斗狀態, if me.nActivePartner ~= -1 then Partner:DecreaseFriendship(me.nId); end -- 關閉TIMER Partner:UnRegisterPartnerTimer(me); else -- 從0變為1 local pPartner = me.GetPartner(me.nActivePartner); if pPartner then -- 如果該玩家有激活的同伴,開啟為同伴召出效果而加的定時器 -- 總開關沒有限制關閉才能開啟TIMER Partner:RegisterPartnerTimer(me); -- 從非戰斗狀態轉到戰斗狀態,記錄親密度衰減開始時間 Partner:ResetDecrTime(pPartner); -- 重置同伴親密度衰減變量 end end end -- by zhangjinpin@kingsoft -- 賬號凍結 function Player:Freeze(szPlayer) local pPlayer = nil; if type(szPlayer) == "string" then pPlayer = KPlayer.GetPlayerByName(szPlayer); else pPlayer = szPlayer; end if not pPlayer then return; end pPlayer.SetTask(2063, 4, 1); pPlayer.Msg("Tài khoản của bạn đã bị khóa。"); pPlayer.KickOut(); return 1; end -- 登陸事件判斷凍結 function Player:OnLogin_CheckFreeze() if me.GetTask(2063, 4, 1) == 1 then me.Msg("Tài khoản của bạn đã bị khóa。"); me.KickOut(); end end -- end -- 客戶端發送非法協議處理 目前隻記個LOG zounan function Player:ProcessIllegalProtocol(szFunc,szParam, nValue) szFunc = szFunc or ""; szParam = szParam or ""; nValue = nValue or 0; Dbg:WriteLog("Player:ProcessIllegalProtocol", me.szAccount, me.szName,szFunc,szParam,nValue); end --存儲玩家快捷鍵(傳入一個table用來記錄到這個裡面去) function Player:SaveShotCut(tbSave) tbSave[me.nId] = {}; for nPos = 1 , Item.TSKID_SHORTCUTBAR_FLAG do tbSave[me.nId][nPos] = me.GetTask(Item.TSKGID_SHORTCUTBAR, nPos); end local nLeftSkill, nRightSkill = FightSkill:LoadSkillTask(me); tbSave[me.nId][Item.TSKID_SHORTCUTBAR_FLAG + 1] = nLeftSkill; tbSave[me.nId][Item.TSKID_SHORTCUTBAR_FLAG + 2] = nRightSkill; end --根據已知tb設置快捷鍵 function Player:RestoryShotCut(tbSave) if not tbSave[me.nId] then return; end for nPos = 1 , #tbSave[me.nId] - 2 do me.SetTask(Item.TSKGID_SHORTCUTBAR, nPos, tbSave[me.nId][nPos]); end FightSkill:SaveLeftSkillEx(me, tbSave[me.nId][#tbSave[me.nId] - 1]); FightSkill:SaveRightSkillEx(me, tbSave[me.nId][#tbSave[me.nId]]); FightSkill:RefreshShortcutWindow(me); tbSave[me.nId] = nil; end end if MODULE_GAMECLIENT then function Player:OnSelectNpc(pNpc) local tbTemp = me.GetTempTable("Npc"); tbTemp.pSelectNpc = pNpc; CoreEventNotify(UiNotify.emCOREEVENT_SYNC_SELECT_NPC); end function Player:OnChangeState(nState) CoreEventNotify(UiNotify.emCOREEVENT_CHANGEWAITGETITEMSTATE, nState); if (nState == 2) then CoreEventNotify(UiNotify.emCOREEVENT_UPDATEBANKINFO); end end function Player:NotifyItemTimeOutClient(nType, szDate) if (szDate and nType == 46) then -- 返還券 me.Msg("Phản Hoàn Quyển trong ".. szDate .." sẽ hết hạn, mau dùng hết, tránh lãng phí。"); elseif (nType == 45) then me.Msg("Trong túi hoặc thương khố có huyền tinh sắp quá hạn。"); end CoreEventNotify(UiNotify.emCOREEVENT_SET_POPTIP, nType); end function Player:OnBuyJiuZhuan() local tbMsg = {}; tbMsg.szMsg = string.format("Bạn không có <color=yellow>Cửu Chuyển Tục Mệnh Hoàn<color>. Bạn muốn tốn <color=red>50 đồng<color> trị thương?", IVER_g_szCoinName); tbMsg.nOptCount = 2; function tbMsg:Callback(nOptIndex) if (nOptIndex == 2) then if (me.IsAccountLock() ~= 0) then UiNotify:OnNotify(UiNotify.emCOREEVENT_SET_POPTIP, 44); me.Msg("Tài khoản đang khóa, không thực hiện thao tác này được!"); return; end if IVER_g_nSdoVersion == 0 then if (me.nCoin >= 50) then me.CallServerScript({"ApplyBuyJiuZhuan"}); else me.Msg("Bạn không đủ đồng。"); end else me.CallServerScript({"ApplyBuyJiuZhuan"}); end end end UiManager:OpenWindow(Ui.UI_MSGBOX, tbMsg); end function Player:GetPluginUseState() local tbNameList = KInterface.GetPluginNameList(); local nState = KInterface.GetPluginManagerLoadState() if (1 == nState) then local nPluginNum = 0; for _, szName in pairs(tbNameList) do local tbInfo = KInterface.GetPluginInfo(szName); if (tbInfo.nLoadState == 1) then nPluginNum = nPluginNum + 1; end end if (nPluginNum > 0) then me.CallServerScript({"RecordPluginUseState", me.szName, nPluginNum}); end end end function Player:JiesuoNotify() local tbMsg = {}; tbMsg.szMsg = "Tài khoản khóa đã bị hủy。"; tbMsg.nOptCount = 1; UiManager:OpenWindow(Ui.UI_MSGBOX, tbMsg); end -- 提醒用戶正在申請取消帳號鎖 function Player:ApplyJiesuoNotify(dwApplyTime) local tbMsg = {}; tbMsg.szMsg = "Tài khoản đang <color=red>xin trợ giúp mở khóa<color>, nhấp \"Xác nhận\" kiểm tra chi tiết."; tbMsg.nOptCount = 2; function tbMsg:Callback(nOptIndex) if (nOptIndex == 2) then local szSay = "Một nhân vật khác trong tài khoản đã xin đóng bảo vệ tài khoản. Nếu bạn không làm thao tác này, xin lập tức hủy bỏ, dùng phần mềm diệt virus mới nhất quét virus Trojan và đổi mật mã để đảm bảo an toàn cho tài khoản.".. "\nNhắc nhở: Xin đóng bảo vệ tài khoản sẽ có hiệu lực khi đăng nhập lại sau <color=yellow>5<color> ngày kể từ ngày xin phép."; if dwApplyTime ~= nil then szSay = "Vào <color=white><bclr=blue>"..os.date("%Y - %m - %d %H giờ %M phút %S giây", dwApplyTime).. "<bclr><color> xin đóng bảo vệ tài khoản. Nếu bạn không làm thao tác này, xin lập tức hủy bỏ, dùng phần mềm diệt virus mới nhất quét virus Trojan và đổi mật mã để đảm bảo an toàn cho tài khoản.".. "\nNhắc nhở: Xin đóng bảo vệ tài khoản sẽ có hiệu lực sau <color=white><bclr=blue>"..os.date("%Y - %m - %d %H giờ %M phút %S giây", dwApplyTime + 5 * 24 * 60 * 60).."<bclr><color> sau đăng nhập lại mới có hiệu lực"; end if UiManager:WindowVisible(Ui.UI_SAYPANEL) == 1 then -- 有 白驹经验等 对话框打开时 me.Msg(szSay); else Dialog:Say(szSay); end end end UiManager:OpenWindow(Ui.UI_MSGBOX, tbMsg); Player.bApplyingJiesuo = 1; end function Player:SyncJiesuoState_C(bCanApplyJiesuo, bApplyingJiesuo, dwApplyTime) self.bCanApplyJiesuo = bCanApplyJiesuo; self.bApplyingJiesuo = bApplyingJiesuo; self.dwApplyJiesuoTime = dwApplyTime; end function Player:SetActiveAura(nActiveAura) me.SetAuraSkill(nActiveAura); end end function Player:CheckItemPet(him) local pItem1 = me.GetItem(Item.ROOM_PARTNEREQUIP,Item.PARTNEREQUIP_WEAPON, 0); local pItem2 = me.GetItem(Item.ROOM_PARTNEREQUIP,Item.PARTNEREQUIP_BODY, 0); local pItem3 = me.GetItem(Item.ROOM_PARTNEREQUIP,Item.PARTNEREQUIP_RING, 0); local pItem4 = me.GetItem(Item.ROOM_PARTNEREQUIP,Item.PARTNEREQUIP_CUFF, 0); local pItem5 = me.GetItem(Item.ROOM_PARTNEREQUIP,Item.PARTNEREQUIP_AMULET, 0); local pItem6 = me.GetItem(Item.ROOM_EQUIP,Item.EQUIPEXPOS_HEAD, 0); local pItem7 = me.GetItem(Item.ROOM_EQUIP,Item.EQUIPEXPOS_BODY, 0); local pItem8 = me.GetItem(Item.ROOM_EQUIP,Item.EQUIPEXPOS_BELT, 0); if pItem1 then if (pItem1.szName == "Đơn Tâm Chi Nhẫn +1") or (pItem1.szName == "Đơn Tâm Chi Nhẫn +2") or (pItem1.szName == "Đơn Tâm Chi Nhẫn +3") or (pItem1.szName == "Bích Huyết Chi Nhẫn + 1") or (pItem1.szName == "Bích Huyết Chi Nhẫn + 2") or (pItem1.szName == "Bích Huyết Chi Nhẫn + 3") or (pItem1.szName == "Trường Yên Chi Nhẫn + 1") or (pItem1.szName == "Trường Yên Chi Nhẫn + 2") or (pItem1.szName == "Trường Yên Chi Nhẫn + 3") or (pItem1.szName == "Trường Yên Chi Nhẫn + 4") or (pItem1.szName == "Kim Lân Chi Nhẫn + 1") or (pItem1.szName == "Kim Lân Chi Nhẫn + 2") or (pItem1.szName == "Kim Lân Chi Nhẫn + 3") then --me.Msg(string.format("Item %s hợp lệ", pItem1.szName)); else me.Msg(string.format("Item %s không hợp lệ", pItem1.szName)); Player:Arrest(me.szName) end; end if pItem2 then if (pItem2.szName == "Đơn Tâm Chiến Y +1") or (pItem2.szName == "Đơn Tâm Chiến Y +2") or (pItem2.szName == "Đơn Tâm Chiến Y +3") or (pItem2.szName == "Bích Huyết Chiến Y + 1") or (pItem2.szName == "Bích Huyết Chiến Y + 2") or (pItem2.szName == "Bích Huyết Chiến Y + 3") or (pItem2.szName == "Kim Lân Chiến Y + 1") or (pItem2.szName == "Kim Lân Chiến Y + 2") or (pItem2.szName == "Kim Lân Chiến Y + 3") or (pItem2.szName == "Trường Yên Chiến Y + 1") or (pItem2.szName == "Trường Yên Chiến Y + 2") or (pItem2.szName == "Trường Yên Chiến Y + 3") or (pItem2.szName == "Trường Yên Chiến Y + 4") then --me.Msg(string.format("Item %s hợp lệ", pItem2.szName)); else me.Msg(string.format("Item %s không hợp lệ", pItem2.szName)); Player:Arrest(me.szName) end; end if pItem3 then if (pItem3.szName == "Đơn Tâm Chi Giới +1") or (pItem3.szName == "Đơn Tâm Chi Giới +2") or (pItem3.szName == "Đơn Tâm Chi Giới +3") or (pItem3.szName == "Bích Huyết Chi Giới + 1") or (pItem3.szName == "Bích Huyết Chi Giới + 2") or (pItem3.szName == "Bích Huyết Chi Giới + 3") or (pItem3.szName == "Kim Lân Chi Giới + 1") or (pItem3.szName == "Kim Lân Chi Giới + 2") or (pItem3.szName == "Kim Lân Chi Giới + 3") or (pItem3.szName == "Trường Yên Chi Giới + 1") or (pItem3.szName == "Trường Yên Chi Giới + 2") or (pItem3.szName == "Trường Yên Chi Giới + 3") or (pItem3.szName == "Trường Yên Chi Giới + 4") then --me.Msg(string.format("Item %s hợp lệ", pItem3.szName)); else me.Msg(string.format("Item %s không hợp lệ", pItem3.szName)); Player:Arrest(me.szName) end; end if pItem4 then if (pItem4.szName == "Đơn Tâm Hộ Uyển +1") or (pItem4.szName == "Đơn Tâm Hộ Uyển +2") or (pItem4.szName == "Đơn Tâm Hộ Uyển +3") or (pItem4.szName == "Bích Huyết Hộ Uyển + 1") or (pItem4.szName == "Bích Huyết Hộ Uyển + 2") or (pItem4.szName == "Bích Huyết Hộ Uyển + 3") or (pItem4.szName == "Trường Yên Hộ Uyển + 4") or (pItem4.szName == "Kim Lân Hộ Uyển + 1") or (pItem4.szName == "Kim Lân Hộ Uyển + 2") or (pItem4.szName == "Kim Lân Hộ Uyển + 3") or (pItem4.szName == "Trường Yên Hộ Uyển + 1") or (pItem4.szName == "Trường Yên Hộ Uyển + 2") or (pItem4.szName == "Trường Yên Hộ Uyển + 3") then --me.Msg(string.format("Item %s hợp lệ", pItem4.szName)); else me.Msg(string.format("Item %s không hợp lệ", pItem4.szName)); Player:Arrest(me.szName) end; end if pItem5 then if (pItem5.szName == "Đơn Tâm Hộ Thân Phù +1") or (pItem5.szName == "Đơn Tâm Hộ Thân Phù +2") or (pItem5.szName == "Đơn Tâm Hộ Thân Phù +3") or (pItem5.szName == "Bích Huyết Hộ Thân Phù + 1") or (pItem5.szName == "Bích Huyết Hộ Thân Phù + 2") or (pItem5.szName == "Bích Huyết Hộ Thân Phù + 3") or (pItem5.szName == "Kim Lân Hộ Thân Phù + 1") or (pItem5.szName == "Kim Lân Hộ Thân Phù + 2") or (pItem5.szName == "Kim Lân Hộ Thân Phù + 3") or (pItem5.szName == "Trường Yên Hộ Thân Phù + 1") or (pItem5.szName == "Trường Yên Hộ Thân Phù + 2") or (pItem5.szName == "Trường Yên Hộ Thân Phù + 3") or (pItem5.szName == "Trường Yên Hộ Thân Phù + 4") then --me.Msg(string.format("Item %s hợp lệ", pItem5.szName)); else me.Msg(string.format("Item %s không hợp lệ", pItem5.szName)); Player:Arrest(me.szName) end; end ------------------------------------------------------------ if pItem6 then if (pItem6.szName == "Đơn Tâm Chi Nhẫn +1") or (pItem6.szName == "Đơn Tâm Chi Nhẫn +2") or (pItem6.szName == "Đơn Tâm Chi Nhẫn +3") or (pItem6.szName == "Bích Huyết Chi Nhẫn + 1") or (pItem6.szName == "Bích Huyết Chi Nhẫn + 2") or (pItem6.szName == "Bích Huyết Chi Nhẫn + 3") or (pItem6.szName == "Trường Yên Chi Nhẫn + 1") or (pItem6.szName == "Trường Yên Chi Nhẫn + 2") or (pItem6.szName == "Trường Yên Chi Nhẫn + 3") or (pItem6.szName == "Trường Yên Chi Nhẫn + 4") or (pItem6.szName == "Kim Lân Chi Nhẫn + 1") or (pItem6.szName == "Kim Lân Chi Nhẫn + 2") or (pItem6.szName == "Kim Lân Chi Nhẫn + 3") then --me.Msg(string.format("Item %s hợp lệ", pItem1.szName)); me.Msg(string.format("Item %s không hợp lệ", pItem6.szName)); Player:Arrest(me.szName) -- else -- me.Msg(string.format("Item %s không hợp lệ", pItem1.szName)); -- Player:Arrest(me.szName) end; end if pItem7 then if (pItem7.szName == "Đơn Tâm Chiến Y +1") or (pItem7.szName == "Đơn Tâm Chiến Y +2") or (pItem7.szName == "Đơn Tâm Chiến Y +3") or (pItem7.szName == "Bích Huyết Chiến Y + 1") or (pItem7.szName == "Bích Huyết Chiến Y + 2") or (pItem7.szName == "Bích Huyết Chiến Y + 3") or (pItem7.szName == "Kim Lân Chiến Y + 1") or (pItem7.szName == "Kim Lân Chiến Y + 2") or (pItem7.szName == "Kim Lân Chiến Y + 3") or (pItem7.szName == "Trường Yên Chiến Y + 1") or (pItem7.szName == "Trường Yên Chiến Y + 2") or (pItem7.szName == "Trường Yên Chiến Y + 3") or (pItem7.szName == "Trường Yên Chiến Y + 4") then --me.Msg(string.format("Item %s hợp lệ", pItem2.szName)); -- else me.Msg(string.format("Item %s không hợp lệ", pItem7.szName)); Player:Arrest(me.szName) end; end if pItem8 then if (pItem8.szName == "Đơn Tâm Chi Giới +1") or (pItem8.szName == "Đơn Tâm Chi Giới +2") or (pItem8.szName == "Đơn Tâm Chi Giới +3") or (pItem8.szName == "Bích Huyết Chi Giới + 1") or (pItem8.szName == "Bích Huyết Chi Giới + 2") or (pItem8.szName == "Bích Huyết Chi Giới + 3") or (pItem8.szName == "Kim Lân Chi Giới + 1") or (pItem8.szName == "Kim Lân Chi Giới + 2") or (pItem8.szName == "Kim Lân Chi Giới + 3") or (pItem8.szName == "Trường Yên Chi Giới + 1") or (pItem8.szName == "Trường Yên Chi Giới + 2") or (pItem8.szName == "Trường Yên Chi Giới + 3") or (pItem8.szName == "Trường Yên Chi Giới + 4") then --me.Msg(string.format("Item %s hợp lệ", pItem3.szName)); -- else me.Msg(string.format("Item %s không hợp lệ", pItem8.szName)); Player:Arrest(me.szName) end; end end -- 客戶端 當生命低於25%時候 ------------------------------------------------------------------------ function Player:LifeIsPoor_C() if (me.nLevel > 20) then return; end; local bHave = false; local tbBuffList = me.GetBuffList(); for i = 1, #tbBuffList do local tbInfo = me.GetBuffInfo(tbBuffList[i].uId); if (tbInfo.nSkillId == 476) then bHave = true; end; end; local pNpc = me.GetNpc(); if (not bHave and pNpc) then pNpc.Chat("Điềm Tửu Thúc nhắc ta nên ăn khi chiến đấu ngoài rừng!"); end; end; function Player:LogPluginUseState(bExchangeServerComing) if (bExchangeServerComing ~= 1) then me.CallClientScript({"Player:GetPluginUseState"}); end end ------------------------------------------------------------------------- -- 注冊通用上線事件 PlayerEvent:RegisterGlobal("OnLogin", Player._OnLogin, Player); -- 注冊通用下線事件 PlayerEvent:RegisterGlobal("OnLogout", Player._OnLogout, Player); -- 注冊升級回掉 PlayerEvent:RegisterGlobal("OnLevelUp", Player._OnLevelUp, Player); -- 注冊玩家死亡事件 PlayerEvent:RegisterGlobal("OnDeath", Player._OnDeath, Player); -- 注冊通用殺怪事件 PlayerEvent:RegisterGlobal("OnKillNpc", Player._OnKillNpc, Player); PlayerEvent:RegisterGlobal("OnCampChange", Player._OnCampChange, Player); -- 注冊定期清心得書使用事件 PlayerSchemeEvent:RegisterGlobalDailyEvent({Player.ClearInsightBookUsedCount, Player}); PlayerEvent:RegisterGlobal("OnLogin", Player.OnLogin_AccountSafe, Player); PlayerEvent:RegisterGlobal("OnLogin", Player.OnLogin_StatComeBack, Player); PlayerEvent:RegisterGlobal("OnLogin", Player.OnLogin_OnSetComeBackOldPlayer, Player); PlayerEvent:RegisterGlobal("OnLogin", Player.LogPluginUseState, Player); ---- 注冊定期清xxxx --PlayerSchemeEvent:RegisterGlobalDailyEvent({Player.ClearCibeixinjingUsedAmount, Player}); --
Khách viếng thăm hãy cùng yeukiemthe xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
Các thành viên gởi lời cảm ơn đến yeukiemthe vì bài viết này !
anhduca4 (16-04-15)
-
16-04-15, 09:12 AM #2
- Ngày tham gia
- Nov 2014
- Bài viết
- 43
- Thanks
- 0
- Thanked 19 Times in 17 Posts
Ðề: Lỗi mất đồng khi di chuyển sang map khác
if nCoin > 200000 then
if nCoin > 50000000 then
me.AddJbCoin(-nCoin);
end
kiểm tra lại coi đồng có nhiều hơn cái này ko, có thì xóa điKhách viếng thăm hãy cùng localhost168 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!
-
Các thành viên gởi lời cảm ơn đến localhost168 vì bài viết này !
yeukiemthe (16-04-15)
Các Chủ đề tương tự
-
[Gunny] Chuyển swf sang fla OK nhưng chuyển fla sang swf bị lỗi thiếu file
Bởi gaicute trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 1Bài viết cuối: 15-07-23, 09:48 AM -
[JX] Lỗi nhân vật bị chuyển sang hệ kim- Pro nào giúp
Bởi dangletrung trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 22Bài viết cuối: 22-05-21, 08:46 PM -
[TLBB] Vấn đề về chuyển đổi chữ sang số!
Bởi le_huy trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 7Bài viết cuối: 11-01-15, 07:09 PM -
[MU] Chuyển hosting sang host mới bị hiện cái dịch chuyển web chứ ko hiện trang tk
Bởi takdcvne trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 3Bài viết cuối: 30-10-12, 09:37 PM -
Giúp em chuyển file sang item.bmd sang item.txt
Bởi jambovt05 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 3Bài viết cuối: 10-06-11, 08:25 PM