Class MapleCharacter

All Implemented Interfaces:
MapleCharacterLook, Serializable

public class MapleCharacter extends AnimatedMapleMapObject implements Serializable, MapleCharacterLook
玩家角色實體,全庫最大的中央領域類別。

本類別以 MapleMapObject(經 AnimatedMapleMapObject)為基底代表一名在地圖上活動的玩家, 集中承載屬性、裝備、技能、buff、任務、社交與資料庫持久化等幾乎所有角色狀態,由 MapleClient 持有並透過 DatabaseConnection 載入與存檔(saveToDB)。為控制其規模,P5 重構已將數個子系統抽成 client.Character*Manager 協作者, 本類別保留簽名相同的一行委派:

角色透過 changeMapMapleMap 間移動,並大量被 handling.channel.handler.* 處理器、 tools.packet.* 封包 builder 及 scripts/ 的 GraalJS 腳本(以全域 cmNPCConversationManager)取用。

See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static enum 
    武陵道場的挑戰模式列舉。
    static enum 
    送出聲望(fame/人氣)結果狀態。
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    int
     
    int
    阿里安鬥技場目前累計分數。
    long
     
    long
     
    本角色目前的武陵道場挑戰模式,預設為 MapleCharacter.DojoMode.無
    long
     
    boolean
     
    boolean
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    achievementFinished(int achievementid)
    查詢指定成就是否已完成。
    void
    將阿里安鬥技場分數加 1。
    void
    新增一筆怪物嘉年華挑戰請求至待處理佇列。
    void
    addCooldown(int skillId, long startTime, long length)
    為指定技能加入冷卻時間。
    void
    addCP(int ammount)
    增加嘉年華點數(CP)。
    void
    為此角色新增一個傳送門(魔法門)。
    void
    將一段不含時間戳的原始字串追加至倉庫紀錄緩衝區。
    void
    將一段不含時間戳的原始字串追加至交易聊天紀錄緩衝區。
    void
    addFame(int famechange)
    增減角色的人氣值(fame)。
    final void
    addFriendShipToAdd(int points)
    將指定點數累加至待加入的好感度點數暫存值。
    void
    addHonorExp(int amount, boolean show)
    增加名譽(Honor)經驗值,達門檻時自動升級並送出更新封包。
    void
    addHP(int delta)
    Convenience function which adds the supplied parameter to the current hp then directly does a updateSingleStat.
    void
    將本角色目前所在地圖加入高級(VIP)傳送石清單,並標記為需存檔。
    void
    將一個連結召喚獸加入此角色的清單。
    void
    為此角色新增一個機械門(機甲師技能)。
    void
    將怪物吸怪(Mob Vac)使用計數加一。
    void
    addMP(int delta)
    Convenience function which adds the supplied parameter to the current mp then directly does a updateSingleStat.
    void
    addMP(int delta, boolean ignore)
    為此角色增加(或減少)MP,並送出單一屬性更新封包。
    void
    addMPHP(int hpDiff, int mpDiff)
    同時增減此角色的 HP 與 MP,並以單一封包送出實際變更的屬性。
    void
    將累計線上時間加 1。
    static void
    addPartTime(int cid, byte job, long time, int reward)
    將一筆兼職(part-time)工作紀錄寫入資料庫。
    static void
    PartTimeJob 物件新增一筆兼職工作紀錄至資料庫。
    void
    為此角色新增一隻寵物。
    boolean
    addProfessionExp(int id, int expGain)
    為指定專業技能增加經驗值,必要時自動升級並回饋對應特性(trait)經驗。
    void
    將本角色目前所在地圖加入特殊(記憶)傳送石清單,並標記為需存檔。
    void
    為指定檢舉類型累加一次計數。
    void
    將本角色目前所在地圖加入城市傳送石清單,並標記為需存檔。
    void
    將指定值累加至跑步(running)堆疊計數。
    void
    addStolenSkill(int skillID, int skillLevel)
    為此角色(幻影)新增一個偷取的技能。
    void
    將一筆帶時間戳與角色名稱的倉庫操作訊息追加至紀錄緩衝區。
    void
    新增一隻召喚獸至此角色。
    void
    將一筆帶有目前時間戳與發話者名稱的交易訊息追加至交易聊天紀錄緩衝區。
    void
    將指定地圖物件加入此角色「可見物件」集合。
    void
    afterAttack(int mobCount, int attackCount, int skillid)
    攻擊命中後依職業處理能量充能、戰艦耗血與潛行類 buff 的取消。
    boolean
    判斷本角色是否允許將指定角色作為(攻擊/互動)目標。
    void
    applyIceGage(int x)
    更新冰冷量表(ice gage)數值並同步至客戶端。
    void
    依目前職業與等級自動轉職(供自動/快速練功類設定使用)。
    final boolean
    ban(String reason, boolean IPMac, boolean autoban, boolean hellban)
    對此角色所屬帳號執行「永久封鎖」(ban),並中斷其連線。
    static boolean
    ban(String id, String reason, boolean accountId, int gmlevel, boolean hellban)
    依名稱或 IP 封鎖帳號(離線可用的靜態封鎖)。
    void
    補齊角色職業應有但尚未習得的基礎/預設技能。
    boolean
    判斷此角色目前能否與指定對象進行對戰。
    final boolean
    canBlood(long now)
    判斷龍之血效果是否到達下一次扣血時點(每 4 秒)。
    void
    正常取消角色身上所有作用中的 buff 效果。
    void
    直接清空角色的所有效果表,不送出任何取消封包。
    void
    取消本角色身上所有的異常狀態(debuff),不論是否原本可解除。
    void
    取消一組指定的 buff 狀態。
    void
    取消角色目前的對戰挑戰(challenge)。
    void
    cancelEffect(MapleStatEffect effect, boolean overwrite, long startTime)
     
    void
    cancelEffect(MapleStatEffect effect, boolean overwrite, long startTime, Map<MapleBuffStat, Integer> statups)
    取消指定狀態效果並依需要清除其所有 buff 數值(核心多載)。
    void
    依 buff 狀態找出對應的效果並取消之。
    void
    依 buff 狀態取消效果,但僅當該效果來自指定來源角色時才取消。
    void
    cancelFairySchedule(boolean exp)
    取消精靈吊墜的加成排程。
    void
    取消釣魚循環任務(若正在進行)。
    void
    取消角色的魔法門(Magic Door)效果。
    void
    取消地圖停留時間限制計時器(若有)。
    void
    取消角色身上的變身(Morph)效果。
    void
    cancelStolenSkill(int skillID)
    取消由此角色施放之偷取技能在地圖上仍生效的 buff/debuff 效果。
    boolean
    canDOT(long now)
    判斷持續傷害(DOT)是否到達下一次結算時點(每 8 秒)。
    final boolean
    canFairy(long now)
    判斷精靈吊墜的每小時加成是否到期可再次觸發(僅讀取,不更新狀態)。
    final boolean
    判斷距上次 familiar 被動效果是否已逾其間隔,可再次觸發。
    判斷此角色目前能否向指定對象贈送人氣(fame)。
    final boolean
    canHold(int itemid)
    判斷角色是否有足夠空格可容納指定道具。
    final boolean
    canHP(long now)
    判斷距上次 HP 計時是否已逾 5 秒;若是則更新計時並回傳允許。
    final boolean
    canHPRecover(long now)
    判斷是否到達 HP 自動回復間隔;若是則更新計時並回傳允許。
    final boolean
    canMP(long now)
    判斷距上次 MP 計時是否已逾 5 秒;若是則更新計時並回傳允許。
    final boolean
    canMPRecover(long now)
    判斷是否到達 MP 自動回復間隔;若是則更新計時並回傳允許。
    final boolean
    canRecover(long now)
    判斷回復效果是否到達下一次觸發時點(每 5 秒)。
    boolean
    判斷距離上次召喚是否已逾預設冷卻(5000 毫秒)。
    boolean
    canSummon(int g)
    判斷距離上次召喚是否已逾指定冷卻毫秒數,並在可召喚時重置計時。
    void
    canTalk(boolean talk)
    設定本角色是否允許交談。
    final boolean
    交易頻率閘門:更新最後交易時間並回傳是否允許交易。
    boolean
    判斷指定家族祝福是否已可再次使用(冷卻已過)。
    int
    CashShopGiftCount(int recipientid)
    查詢資料庫中指定收件者尚未領取的商城禮物數量。
    void
    changeChannel(int channel)
    將角色切換至指定的遊戲頻道。
    void
    標記擴充背包槽位資料已變更,待下次存檔時寫回資料庫。
    boolean
    changeFace(int color)
    在當前臉型基礎上套用指定的顏色偏移,切換為同款不同色的臉型。
    void
    changeJob(int newJob)
    將角色轉職/轉生為指定職業,並套用所有相關連動處理。
    void
    changeKeybinding(int key, byte type, int action)
    變更此角色的單一按鍵綁定(key binding)。
    void
    changeMap(int map)
    依地圖 ID 將角色傳送至目標地圖的 0 號(預設)傳送點。
    void
    changeMap(int map, int portal)
    依地圖 ID 與傳送點 ID 將角色傳送至目標地圖。
    void
    將角色傳送至目標地圖的 0 號(預設)傳送點。
    void
    將角色傳送至目標地圖的指定座標。
    void
    將角色傳送至目標地圖的指定傳送點。
    void
    changeMap(MapleMap to, MaplePortal pto, boolean changeMP)
    將角色傳送至目標地圖的指定傳送點,並可選擇是否同步更新 MP。
    void
    changeMapBanish(int mapid, String portal, String msg)
    將角色驅逐(banish)至指定地圖的具名傳送點,並先向其顯示一則訊息。
    void
    將角色傳送至目標地圖的指定傳送點,並在進圖時將該傳送點傳入換圖流程。
    void
    changeProfessionLevelExp(int id, int level, int exp)
    設定指定專業技能的等級與經驗值(兩者打包進同一技能等級欄位後寫入)。
    void
    執行角色離場前的清理(非斷線版本)。
    void
    changeRemoval(boolean dc)
    執行角色離場前的清理,移除暫時性的場上物件與狀態。
    void
    changeSingleSkillLevel(Skill skill, int newLevel, byte newMasterlevel)
    變更單一技能的等級與精通等級,到期時間採該技能的預設值(通常為一個月)。
    void
    changeSingleSkillLevel(Skill skill, int newLevel, byte newMasterlevel, long expiration)
    變更單一技能的等級、精通等級與到期時間,並送出技能更新封包。
    boolean
    changeSkillData(Skill skill, int newLevel, byte newMasterlevel, long expiration)
    將單一技能的資料寫入此角色的技能表(不送封包、不重算屬性)。
    void
    changeSkillLevel(Skill skill, byte newLevel, byte newMasterlevel)
    變更單一技能的等級與精通等級(不設過期時間)。
    void
    changeSkillLevel_Skip(Skill skil, int skilLevel, byte masterLevel)
    套用單一臨時技能等級(不存入資料庫),並送出技能更新封包。
    void
    changeSkillLevel_Skip(Map<Skill, SkillEntry> skill, boolean write)
    批次套用臨時技能等級(不存入資料庫)。
    void
    批次套用多個技能的等級/精通等級/到期時間變更,並一次送出技能更新封包。
    void
    changeTeachSkill(int skillId, int toCharId)
    為本角色(線上)即時加入一個帶有傳授來源標記的技能。
    void
    changeTeam(int newTeam)
    變更角色所屬隊伍(如椰子大賽/PVP 紅藍隊)並向客戶端與地圖呈現對應效果。
    void
    檢查並更新狂戰士「狂暴(Berserk)」被動的觸發狀態。
    void
    checkCopyItemsByID(int fromid, int itemid)
    偵測道具複製(duping)作弊:掃描指定道具是否存在重複的「裝備專屬唯一 id」並予以查封。
    void
    檢查並終止目前的跟隨關係。
    void
    依角色職業檢查並補發專屬的轉職盾牌(force shield)。
    void
    確認此角色對指定怪物的仇恨控制狀態。
    boolean
    檢查目前是否仍處於傳送門節流時間窗(1.5 秒內)。
    boolean
    檢查目前是否仍處於換圖節流時間窗(1.5 秒內)。
    void
    chooseStolenSkill(int skillID)
    選用一個已偷取的幻影技能,並送出更換偷取技能的封包。
    void
    清除角色所有技能冷卻並通知客戶端。
    void
    清空所有待處理的嘉年華挑戰請求。
    void
    清除此角色的所有傳送門(魔法門)。
    void
    清空連結怪物(link monster)清單並取消相關 buff。
    void
    清除此角色的所有機械門。
    void
    清除所有檢舉類型的累計計數。
    void
    清除指定檢舉類型的累計計數。
    void
    清除指定類型的記憶傳送點(設為 -1),並標記存檔。
    final void
    清除角色所有非專業技能(設為 0 級)。
    void
    清空本角色的商城願望清單(10 個欄位皆歸零),並標記為需存檔。
    final void
    在地圖上生成一個複製本角色外觀的分身並登記至分身陣列。
    建立一個複製本角色外觀的分身角色物件。
    void
    controlMonster(MapleMonster monster, boolean aggro)
    讓此角色開始控制指定怪物(成為其 controller),並送出控制封包。
    void
    CPUpdate(boolean party, int available, int total, int team)
    向自身連線送出嘉年華點數(CP)更新封包。
    取得角色的隨機數串流(用於與客戶端同步的偽隨機序列)。
    int
    取得戰艦目前的 HP。
    void
    decMoneytoBank(long money)
    將楓幣銀行存款金額減少指定值(先讀後寫)。
    void
    將戰艦目前的 HP 減少 1。
    void
    從高級(VIP)傳送石中移除指定地圖(找到第一個相符即停止),並標記為需存檔。
    void
    從特殊(記憶)傳送石中移除指定地圖(找到第一個相符即停止),並標記為需存檔。
    void
    deleteFromRocks(int map)
    從城市傳送石中移除指定地圖(找到第一個相符即停止),並標記為需存檔。
    void
    deleteNote(int id, int fame)
    刪除指定的便箋;若該便箋附有名聲贈禮且金額相符,則同時為本角色加上名聲。
    static void
    以角色編號為條件執行刪除(或更新)SQL,使用 executeUpdate
    static void
    以角色編號為條件執行刪除(或更新)SQL,使用 execute(不取資料表鎖的變體)。
    void
    disease(int type, int level)
    依怪物技能編號對角色施加對應的異常狀態(debuff)。
    void
    驅散角色身上可被驅散的技能 buff。
    void
    dispelBuff(int skillid)
    取消指定來源 id 的第一個 buff 效果(不限於技能)。
    void
    解除指定的單一異常狀態(debuff)。
    void
    解除所有可解除的異常狀態(debuff)。
    void
    dispelSkill(int skillid)
    取消指定技能 id 所產生的第一個 buff 效果。
    void
    取消角色所有召喚獸(具召喚移動型態)的 buff 效果。
    final void
    清除本角色的所有分身並釋放相關資源。
    void
    結算一次持續傷害(DOT),扣除累計傷害並清除 DOT 狀態。
    void
    執行龍之血(DRAGONBLOOD)週期扣血效果。
    void
    執行精靈吊墜每小時觸發效果。
    void
    週期性處理怪物寵物(familiar)的疲勞與被動效果。
    void
    移除此角色多餘的召喚獸,僅保留索引 0 的那一隻以外的逐一清除。
    void
    執行角色轉生:重置等級/經驗並重新隨機分配四圍,溢出能力點轉入 AP 儲存。
    void
    執行回復術(RECOVERY)/機甲變形的週期回復效果。
    void
    僅在本角色已開啟除錯訊息時,以系統訊息(type 6)向其用戶端輸出除錯文字。
    void
    dropMessage(int type, String message)
    依指定類型向本角色用戶端輸出一則訊息封包。
    void
    以預設的系統訊息類型(type 6)向本角色用戶端輸出一則文字訊息。
    void
    dropNPC(int npc, String message)
    以指定 NPC 的口吻向此角色發送一段對話訊息。
    void
    dropNPC(String message)
    以預設 NPC(9010000)的口吻向此角色發送一段對話訊息。
    void
    endPartyQuest(int questid)
    結束指定的組隊任務。
    void
    結束一段倉庫操作紀錄:將緩衝區內容寫入日誌檔後清空。
    void
    結束一段交易紀錄:將緩衝區內容寫入日誌檔後清空。
    void
    將超過上限的 HP/MP 校正回最大值,並在有變動時送出狀態更新封包。
    void
    equip(int itemId)
    將指定道具穿戴到此角色身上(不取代既有裝備、必要時自動取得)。
    void
    equip(int itemId, boolean replace)
    將指定道具穿戴到此角色身上,可選擇是否取代既有裝備。
    void
    equip(int itemId, boolean replace, boolean add)
    將指定道具穿戴到此角色對應的裝備位。
    final void
    處理裝備變更後的連動更新。
    void
    expandInventory(byte type, int amount)
    擴充指定背包類型的欄位數量。
    final void
    expirationTask(boolean pending, boolean firstLoad)
    處理道具與技能的到期回收,分為「掛起通知」與「實際掃描」兩種模式。
    void
    在不真正重新連線的情況下,對客戶端模擬一次重登以刷新角色狀態。
    void
    familyRep(int prevexp, int needed, boolean leveled)
    累加家族聲望(Family Rep)並處理升等。
    void
    將此角色的最新資訊同步給家族(向家族成員廣播更新)。
    void
    完成指定成就並發放對應獎勵。
    void
    fly()
    切換角色的飛行(翱翔)模式(GM 指令用)。
    void
    在已處於飛行狀態時重新套用翱翔效果(重登/換圖後恢復飛行用)。
    void
    對本角色強制完成指定任務。
    void
    重新加回道具並送出一般道具特殊使用更新封包。
    void
    重新加回道具並送出怪物圖鑑(monster book)升級封包。
    void
    重新加回道具並送出旗標(flag)變更的更新封包。
    void
    將指定道具自其所在槽位移除後立即重新加回(不送任何更新封包)。
    void
    gainAp(short ap)
    增減角色的剩餘能力點數(AP)。
    void
    gainAPS(int aps)
    增加角色的能力點儲存量(AP storage)。
    void
    gainExp(int total, boolean show, boolean inChat, boolean white)
    給予此角色經驗值並處理升級結算。
    void
    gainExpMonster(int gain, boolean show, boolean white, byte pty, int Class_Bonus_EXP, int Equipment_Bonus_EXP, int Premium_Bonus_EXP, boolean partyBonusMob, int partyBonusRate)
    給予擊殺怪物所得的經驗值(含各類加成)並處理升級。
    void
    gainHonor(int honor, boolean show)
    增加名譽經驗值,並可選擇向用戶端顯示獲得提示。
    void
    gainItem(int code, int amount)
    給予角色指定數量的道具。
    void
    gainMeso(int gain, boolean show)
    給予(或扣除)楓幣。
    void
    gainMeso(int gain, boolean show, boolean inChat)
    給予(或扣除)此角色楓幣,並處理相關特效與成就。
    void
    gainSP(int sp)
    增減角色預設技能書的剩餘技能點數(SP)。
    void
    gainSP(int sp, int skillbook)
    增減角色指定技能書的剩餘技能點數(SP)。
    int
    取得此角色所屬的帳號 ID。
    int
    getAcLog(String bossid)
    查詢角色的成就(ac)紀錄次數。
    取得角色目前所有 buff 的可序列化快照,依來源技能與等級合併同源狀態。
    取得目前所有異常狀態(debuff)的持有資料清單。
    byte
    取得在聯盟中的階級。
    取得連結怪物對應表(怪物 ID 對傷害增幅,回傳內部 Map 實體)。
    取得此角色所有連結召喚獸(link summon)的清單。
    int
    計算此角色所有已習得技能的等級總和(排除初心者技能與特殊技能)。
    取得角色目前的機器人(android)。
    取得可見物件集合並同時持有寫鎖,供呼叫端遍歷/修改。
    int
    傳回此角色的學徒角色 ID。
    int
    取得角色的能力點儲存量(AP storage)。
    傳回指定阿里安鬥技場房間的房主名稱。
    int
    傳回阿里安鬥技場目前累計分數。
    int
    傳回指定阿里安鬥技場房間目前的人數(座位)。
    boolean
    取得是否開啟攻擊(attack)除錯訊息。
    int
    取得目前可用的嘉年華點數(CP)。
    int
    計算當前地圖上所有玩家的平均等級。
    int
    計算所屬隊伍全體成員的平均等級。
    final List<Integer>
    取得本月內已與此角色對戰過的帳號 ID 清單。
    int
    取得角色的戰鬥點數(PVP points)。
    final String
    取得提供「女皇的祝福」加成的來源角色名稱。
    final String
    取得提供「妖精的祝福」加成的來源角色名稱。
    int
    查詢角色對指定 BOSS 的擊殺紀錄次數(每日門檻用)。
    取得以角色真實座標為基準的碰撞/命中矩形範圍。
    byte
    取得好友名單的容量上限。
    取得角色的好友清單。
    final Integer
    取得指定 buff 來源技能效果的 X 參數值。
    final Integer
    取得指定 buff 來源技能效果的 Y 參數值。
    取得指定 buff 狀態的生效起始時間。
    取得指定 buff 狀態目前生效的數值。
    int
    取得指定 buff 狀態的來源編號(技能或道具 ID)。
    getBuffStats(MapleStatEffect effect, long startTime)
    列出由同一狀態效果與起始時間提供的所有 buff 狀態。
    boolean
    查詢本角色目前是否允許交談(與 NPC/聊天互動)。
    byte
    傳回目前的卡片(card)堆疊數量。
    取得本角色所屬的怪物嘉年華隊伍。
    取得本角色的商城(CashShop)物品庫存。
    int
    取得本角色的商城點數加成。
    int
    getCData(MapleCharacter sai, int questid)
    讀取指定角色某任務自訂資料(customData)欄位的整數值。
    int
    取得此角色目前使用中的椅子 ID。
    取得本角色目前的黑板(小黑板)文字內容。
    int
    取得角色目前的挑戰值(武陵道場等挑戰進度)。
    long
    取得最近一次換圖的時間戳記(毫秒)。
    依編號取得角色,線上則回傳線上實例,否則由資料庫載入。
    依名稱取得角色,線上則回傳線上實例,否則由資料庫載入。
    取得角色卡(character cards)集合。
    static int
    getCharacterIdByName(int world, String name)
    依名稱取得角色編號(指定世界)。
    static int
    依名稱取得角色編號,優先查線上、未上線則查資料庫。
    static String
    依編號取得角色名稱,優先查線上、未上線則查資料庫。
    取得本角色的作弊偵測追蹤器。
    boolean
    取得釣魚 VIP 狀態旗標。
    int
    取得角色持有的時空石(Chronosphere)數量。
    int
    查詢角色的時空(Chronosphere)紀錄次數。
    取得角色所屬的客戶端連線。
    取得本角色的分身弱參考陣列。
    final int
    計算目前存活(弱參考未被回收)的分身數量。
    final short
    取得本角色目前的連擊(Combo)計數。
    取得此角色已取得的勳章及其完成時間。
    取得此角色所有已完成的任務狀態。
    int
    取得此角色目前控制中的怪物數量。
    int
    取得本角色目前正在對話的 NPC 對話實例編號。
    取得目前所有技能冷卻的持有資料清單。
    int
    取得目前處於冷卻中的技能數量。
    傳回此角色的核心光環(Core Aura)物件。
    int
    取得現金商城時空石(CS Chronosphere)數量。
    int
    getCSPoints(int type)
    取得指定類型的現金商城點數餘額。
    int
    取得目前的家族聲望值。
    int
    取得指定連結怪物對應的傷害增幅。
    boolean
    取得是否開啟一般除錯訊息。
    建立指定職業類別的全新初始角色(角色建立流程用)。
    boolean
    取得刪除角色記錄開關狀態。
    int
    取得惡魔職業的印記值(demon marking)。
    int
    取得角色的敏捷(DEX)數值。
    int
    取得本角色的對話方向狀態值。
    int
    取得目前生效中的異常狀態(debuff)數量。
    取得本角色目前的武陵道場挑戰模式。
    getDojoMode(int mode)
    依整數代碼查詢對應的武陵道場挑戰模式。
    int
    自資料庫重新讀取並回傳本帳號的累計儲值金額。
    取得此角色目前所有傳送門的複本清單。
    取得角色的龍(evan 龍)物件。
    int
    取得本角色的掉寶率加成。
    int
    取得角色精靈耳朵(Elf ear)狀態。
    取得角色已穿戴裝備的槽位與道具編號對應表。
    取得此角色目前所在的活動實例(事件/組隊任務)。
    int
    取得角色目前經驗值。
    double
    取得本角色的經驗值加成倍率。
    int
    getExtendedSlot(int index)
    取得指定索引的擴充背包槽位值。
    取得角色額外(擴充)背包槽位清單。
    取得本角色擺放的怪物抽取器(extractor)。
    int
     
    byte
    取得目前累積的精靈吊墜經驗加成百分比。
    final int
    取得角色的墜落計數器(防摔/防卡點偵測用)。
    final int
    取得角色人氣值。
    final List<Integer>
    取得本月內已被此角色贈送過人氣的角色 ID 清單。
    取得角色擁有的所有怪物寵物(familiar)對應表。
    int
    取得此角色所屬家族 ID。
    short
    取得角色目前的疲勞值。
    int
    取得本角色目前所在位置正下方的腳架(foothold)ID。
    取得本角色已完成的成就 ID 清單(回傳內部清單實體)。
    int
    取得連結怪物清單中的第一個怪物 ID。
    int
    取得目前跟隨對象的角色 ID。
    final int[]
    傳回好感度點數陣列(對應四位好感度 NPC)。
    final int
    傳回待加入的好感度點數暫存值。
    int
    取得角色的轉蛋經驗值。
    byte
    取得角色的性別(0=男、1=女)。
    int
    查詢角色的贈禮紀錄次數。
    int
    取得此角色的 GM 等級。
    取得所屬的公會物件。
    int
    取得對公會的貢獻值。
    int
    取得所屬公會的 ID。
    byte
    取得在公會中的階級。
    boolean
    取得是否開啟外掛偵測訊息。
    int
    取得角色的髮型 ID。
    int
    傳回名譽(Honor)等級。
    int
    傳回升至下一名譽等級所需的累計經驗門檻。
    int
    傳回目前的名譽(Honor)經驗值。
    int
    取得角色目前的 HP。
    short
    取得已用於增加 HP 的能力點(AP)數量。
    int[]
    取得本角色的高級(VIP)傳送石地圖清單(固定長度 13 的地圖編號陣列)。
    int
    計算高級(VIP)傳送石中已登錄的地圖數量。
    int
    取得角色的資料庫唯一 id。
    取得角色的小惡魔(imp)陣列。
    final String
    getInfoQuest(int questid)
    取得任務的自訂資訊字串。
    取得任務自訂資訊的對映表。
    byte
    取得角色進入地圖時的初始重生點(傳送門)索引。
    傳回此角色的內在能力(Inner Ability)技能清單。
    int
    取得角色的智力(INT)數值。
    int
    getIntNoRecord(int questID)
    讀取指定任務自訂資料並解析為整數,任務不存在時回傳 0(不會新增任務)。
    int
    getIntRecord(int questID)
    讀取指定任務自訂資料並解析為整數;任務不存在時會自動新增並初始化為 0。
    取得此角色指定類型的庫存(內部參照,非複本)。
    取得此角色的全部庫存陣列(內部參照,非複本)。
    int
    取得此角色目前播放中的道具效果 ID。
    int
    getItemQuantity(int itemid, boolean checkEquipped)
    計算角色持有指定道具的總數量。
    short
    取得角色的職業 ID。
    int
    取得角色的職業排名。
    int
    取得角色職業排名的名次變動量。
    int
    取得此角色在家族中的第一名徒弟(下線)角色 ID。
    int
    取得此角色在家族中的第二名徒弟(下線)角色 ID。
    final long
    取得上次施放長按蓄力技能的時間戳記。
    取得此角色的鍵盤配置(快捷鍵設定)。
    取得指定自訂鍵所對應的值。
    final long
    取得上次連擊的時間戳記。
    final long
    取得上次贈送人氣(fame)的時間戳記。
    取得本角色最後一次的移動軌跡片段清單(用於同步移動)。
    取得最後一次公開發話的內容。
    final short
    取得角色等級。
    int
    getLog(client.LogScope scope, client.ResetType resetType, String eventName)
    統一紀錄系統:取得指定維度在當前週期內的計數。
    int
    getLog(String scope, String resetType, String eventName)
    統一紀錄系統:getLog(LogScope, ResetType, String) 的字串便利重載(給腳本用)。
    int
    取得幸運木桶(Lucky Barrels)小遊戲狀態。
    int
    取得角色的幸運(LUK)數值。
    final SkillMacro[]
    取得此角色的全部技能巨集陣列。
    取得角色目前所在的地圖物件。
    int
    取得角色目前的地圖 id。
    int
    取得角色的結婚編號。
    int
    取得角色的結婚戒指道具 ID。
    byte
    getMasterLevel(int skill)
    取得指定技能 ID 的精通等級(master level)。
    byte
    取得指定技能的精通等級(master level)。
    int
    取得角色的最大 HP。
    int
    取得角色的最大 MP。
    取得此角色目前所有機械門的複本清單。
    int
    取得此角色目前持有的楓幣(meso)數量。
    long
    從資料庫讀取此角色所屬帳號的楓幣銀行存款金額。
    取得此角色目前所在的聊天室(messenger)。
    取得角色的家族成員資料。
    取得此角色對應的公會成員資料物件。
    int
    取得怪物吸怪(Mob Vac)使用計數。
    取得角色的怪物圖鑑(Monster Book)。
    int
    取得目前作用中變身效果的來源技能 id。
    取得本角色的座騎(騎寵)物件。
    int
    取得角色目前的 MP。
    boolean
    取得聊天訊息記錄開關狀態。
    boolean
    取得雇傭商人訊息記錄開關狀態。
    int
    取得本角色目前的武陵道場能量值。
    取得角色名稱。
    int
    取得升至下一等級所需的經驗值。
    取出並移除下一筆待處理的嘉年華挑戰請求。
    long
    取得下一次允許消耗(道具使用)的時間戳記。
    int
    取得家族中下屬(junior)的數量。
    int
    取得角色目前正在互動的 NPC 編號。
    byte
    取得目前待生成或記錄的分身數量。
    final int
    取得已開始任務的數量。
    int
    Oid of players is always = the cid
    取得角色先前記錄的座標位置。
    getOneInfo(int questid, String key)
    取得指定組隊任務中某個鍵對應的資訊值。
    自指定暫存鍵的值字串中,解析出單一子鍵對應的值。
    int
    查詢角色的一次性事件紀錄。
    依編號取得目前線上的角色(跨所有頻道查詢)。
    getOnlineCharacterByName(int world, String name)
    依名稱取得目前線上的角色(指定世界)。
    依名稱取得目前線上的角色(跨所有頻道查詢)。
    int
    傳回此角色累計的線上時間。
    getPartTime(int cid)
    從資料庫讀取指定角色的兼職(part-time)工作紀錄。
    取得此角色所屬隊伍。
    final byte
    getPetIndex(int petId)
    依寵物道具 ID 取得其在出戰清單中的索引。
    final byte
    取得指定寵物在出戰清單中的索引。
    final byte
    getPetIndexById(int petId)
    依寵物唯一 ID 取得其在出戰清單中的索引。
    final List<MaplePet>
    取得此角色所有寵物清單。
    final int
    取得下一個可用的寵物出戰槽位。
    final byte[]
    取得各寵物欄位的存放狀態位元組陣列。
    取得本角色目前開設或互動中的玩家商店/交易室物件。
    int
    取得本角色帳號的點數(自資料庫讀取)。
    int
    讀取指定角色帳號的點數(自 accounts.points 資料表欄位查詢)。
    int
    查詢角色的領獎紀錄次數。
    short
    取得指定專業技能目前的經驗值。
    byte
    取得指定專業技能的等級。
    取得角色已習得的所有專業技能(profession)類別。
    取得角色目前所屬的金字塔/地鐵活動實例。
    取得指定任務的狀態物件(必要時新增)。
    取得任務定義對狀態物件的對映表。
    取得任務狀態物件,不存在則新增空狀態。
    取得任務狀態物件,不存在則回傳 null(不新增)。
    移除並回傳指定任務的狀態物件。
    final byte
    getQuestStatus(int quest)
    取得指定任務的狀態碼。
    int
    取得角色的總排名。
    int
    取得角色總排名的名次變動量。
    int
    取得角色的轉生(reborn)次數。
    取得商店「再買一次」(rebuy)暫存的道具清單。
    int[]
    取得本角色的特殊(記憶)傳送石地圖清單(固定長度 5 的地圖編號陣列)。
    int
    計算特殊(記憶)傳送石中已登錄的地圖數量。
    short
    取得角色剩餘能力點(AP)。
    int
    取得角色目前技能書的剩餘技能點(SP)。
    int
    getRemainingSp(int skillbook)
    取得指定技能書的剩餘技能點(SP)。
    int[]
    取得各技能書剩餘技能點(SP)的完整陣列。
    int
    取得技能點數陣列的大小(技能書數量)。
    final int
    取得各類型檢舉換算後的總點數。
    取得各檢舉類型對應的累計次數。
    final String
    取得各類型檢舉次數的彙整文字摘要。
    int
    自資料庫重新讀取並回傳角色的獎勵等級。
    getRings(boolean equip)
    蒐集本角色身上的戒指,依類型分組並排序回傳。
    int[]
    取得本角色的城市傳送石(Teleport Rock)地圖清單(固定長度 10 的地圖編號陣列)。
    int
    計算城市傳送石中已登錄的地圖數量。
    取得角色目前的剪刀石頭布遊戲狀態。
    int
    傳回目前的跑步(running)堆疊計數。
    int
    取得指定類型的記憶傳送點地圖 ID。
    final int[]
    取得此角色的記憶傳送點陣列(內部參照,非複本)。
    int
    傳回累計的「說好話」(讚)時間值。
    short
    取得最近一次卷軸作用的裝備槽位。
    int
    取得此角色在家族中的師父(上線)角色 ID。
    取得此角色目前正在互動的商店。
    long
    取得指定技能的到期時間(毫秒)。
    int
    getSkillLevel(int skillid)
    取得指定技能 id 的(基礎)技能等級。
    int
    取得指定技能的基礎等級(不含任何加成)。
    取得此角色技能表的唯讀檢視。
    long
    getSkillWorking(int SkillID)
    取得指定技能的作用(到期)時間。
    取得技能剩餘作用時間表(技能編號對應到期時間戳)。
    byte
    取得角色的膚色代碼。
    boolean
    取得此角色是否接收世界喇叭訊息。
    取得此角色所有進行中的任務狀態。
    取得此角色的屬性計算物件 PlayerStats
    取得提供指定 buff 狀態的 MapleStatEffect
    傳回此角色(幻影/Phantom)所偷取的技能清單。
    取得此角色帳號的倉庫物件。
    int
    取得角色的力量(STR)數值。
    byte
    取得角色的職業子類別代碼(用於客戶端職業細分)。
    取得目前已召喚出場的怪物寵物(familiar)。
    final MaplePet
    getSummonedPet(int index)
    取得指定索引處已召喚的寵物。
    final List<MaplePet>
    取得此角色目前已召喚(出戰)的寵物清單。
    取得召喚獸清單並同時持有讀鎖,供呼叫端安全遍歷。
    int
    取得此角色目前的召喚獸數量。
    int
    取得本角色所屬的隊伍編號(用於椰子大賽等活動)。
    取得角色目前的傳送目標名稱。
    取得指定鍵的記憶體暫存值。
    int
    取得此角色目前的稱號效果 ID。
    int
    取得角色的累計戰鬥經驗(PVP exp)。
    int
    取得累計獲得的嘉年華總點數(CP)。
    int
    取得 PVP 累計敗場數。
    int
    取得家族累計總聲望值。
    int
    getTotalSkillLevel(int skillid)
    取得指定技能 id 的總技能等級(含裝備等加成)。
    int
    取得指定技能的「實際有效等級」(含戰鬥指令、全技能加成與個別技能加成)。
    int
    取得 PVP 累計勝場數。
    取得角色目前裝備中的圖騰槽位與道具對應表。
    取得此角色目前進行中的交易。
    取得指定類型的角色性向(trait)物件。
    int
    取得指定 buff 狀態的來源編號,並以正負號區分技能與道具來源。
    取得此地圖物件的型別,角色固定為 MapleMapObjectType.PLAYER
    int
    自資料庫重新讀取並回傳角色的 VIP 等級。
    int
    取得本角色的 V 點(投票點數)。
    boolean
    取得是否開啟移動(walk)除錯訊息。
    int[]
    取得本角色的商城願望清單(固定長度 10 的道具編號陣列)。
    int
    計算願望清單中已填入的道具數量。
    byte
    取得此角色所在的世界(World)編號。
    void
    giftMedal(int id)
    贈予角色一枚勳章(裝備類)並向全服廣播祝賀訊息。
    void
    giveCoolDowns(int skillid, long starttime, long length)
    賦予指定技能冷卻並送出對應封包。
    void
    由冷卻資料清單批次還原技能冷卻(多用於登入時還原)。
    void
    giveDebuff(MapleDisease disease, int x, long duration, int skillid, int level)
    以明確參數對本角色施加異常狀態(debuff)。
    void
    giveDebuff(MapleDisease disease, MobSkill skill)
    依怪物技能對本角色施加異常狀態(debuff)。
    final void
    靜默地(不發送特效封包)還原一批異常狀態,通常用於換頻或重新登入時重建狀態。
    void
    將此角色的最新等級/職業等資訊同步給公會(向公會成員廣播更新)。
    final void
    handleBattleshipHP(int damage)
    處理海盜戰艇(Battleship)受到傷害後的耐久度扣減。
    void
    處理幻影(Phantom)卡牌堆疊的累積判定與封包同步。
    final void
    handleEnergyCharge(int skillid, int targets)
    處理海盜「能量充滿」(Energy Charge)的能量累積與觸發。
    void
    handleForceGain(int oid, int skillid)
    處理鬥氣(force/MP)累積,使用預設額外鬥氣 0。
    void
    handleForceGain(int oid, int skillid, int extraForce)
    處理鬥氣(force)累積並回復對應 MP,同時可附加額外鬥氣。
    void
    handleOrbconsume(int howmany)
    消耗角色身上的英雄連擊(Combo)能量球。
    final void
    處理戰士「英雄連擊」(Combo)的能量球累積。
    boolean
    傳回此角色目前是否擁有學徒。
    void
    記錄此角色已與指定對象對戰的事實。
    boolean
    判斷角色目前是否處於禁止操作背包的狀態。
    final boolean
    判斷本角色是否正受指定異常狀態影響。
    boolean
    判斷角色目前是否處於持續傷害(DOT)狀態。
    final boolean
    hasEquipped(int itemid)
    判斷角色是否已穿戴指定道具。
    void
    記錄此角色已向指定對象贈送人氣的事實。
    boolean
    hasGmLevel(int level)
    判斷此角色的 GM 等級是否達到指定門檻。
    boolean
    hasSkill(int skillid)
    傳回此角色是否已學會指定技能(等級大於 0)。
    boolean
    判斷角色目前是否擁有召喚獸。
    final boolean
    haveItem(int itemid)
    判斷角色是否持有指定道具(至少一件,含已穿戴件數)。
    final boolean
    haveItem(int itemid, int quantity)
    判斷角色是否持有「至少」指定數量的道具(含已穿戴件數)。
    final boolean
    haveItem(int itemid, int quantity, boolean checkEquipped, boolean greaterOrEquals)
    判斷角色背包中是否持有指定數量的道具。
    void
    havePartyQuest(int itemId)
    處理組隊任務取得指定道具的相關邏輯。
    void
    healHP(int delta)
    為此角色回復 HP,並向自己與同地圖玩家送出回血特效封包。
    void
    healMP(int delta)
    為此角色回復 MP,並向自己與同地圖玩家送出回復特效封包。
    void
    提升名譽(Honor)等級 1 級,並在特定等級獎勵內在能力技能。
    boolean
    判斷角色目前是否位於阿斯旺(Azwan)地圖區段。
    void
    incMoneytoBank(long money)
    將楓幣銀行存款金額增加指定值(先讀後寫)。
    void
    將 PVP 累計敗場數加一。
    void
    將 PVP 累計勝場數加一。
    void
    為此角色所屬帳號在 mesobank 資料表建立一筆金額為 0 的楓幣銀行紀錄。
    boolean
    判斷角色是否處於 PVP 活動實例中。
    boolean
    是否為管理員(GM 等級 ≥ 5)。
    boolean
    判斷角色是否為冒險家(Adventurer)職業。
    boolean
    判斷此角色目前是否存活(HP 大於 0)。
    boolean
    判斷角色是否為戰神(Aran)職業。
    boolean
    判斷角色是否為弓箭手(Bowman)系職業,含冒險家、皇家騎士團與覺醒者的弓系職業。
    boolean
    判斷指定 buff 狀態是否來自特定技能。
    boolean
    判斷本角色物件是否為分身(clone)。
    boolean
    判斷角色是否為皇家騎士團(Cygnus)職業。
    boolean
    isDamage(int sec)
    判斷玩家是否在最近 sec 毫秒內攻擊怪物。
    boolean
    是否處於飛行(翱翔)狀態。
    boolean
    判斷本角色是否為跟隨關係的發起者。
    boolean
    判斷跟隨功能目前是否開啟。
    boolean
    isFreeSlot(int slot)
    檢查所有背包類型(裝備/消耗/設置/其他/現金)是否都至少有指定數量的空格。
    boolean
    是否為 GM(GM 等級 > 0)。
    boolean
    是否為最高權限「神」(GM 等級 ≥ 100)。
    boolean
    判斷角色是否處於隱身狀態。
    boolean
    判斷指定地圖是否已登錄於高級(VIP)傳送石清單中。
    boolean
    判斷角色目前是否位於受限制(禁用部分功能)的地圖。
    boolean
    是否為實習 GM(GM 等級 ≥ 1)。
    boolean
    判斷角色目前是否位於可正常使用城鎮功能的城鎮地圖。
    boolean
    判斷角色是否處於無敵狀態。
    boolean
    傳回此角色目前是否已送出交易邀請。
    boolean
    判斷角色是否屬於騎士團(Knights of Cygnus)職業群。
    boolean
    判斷角色是否為法師(Mage)系職業,含冒險家、皇家騎士團、覺醒者與 22xx 系列法師。
    boolean
    判斷指定地圖物件目前對此角色是否可見。
    boolean
    傳回此角色目前是否正在操作倉庫。
    boolean
    判斷角色是否為海盜(Pirate)系職業,含冒險家海盜與皇家騎士團的暴風使者。
    boolean
    isRegRockMap(int id)
    判斷指定地圖是否已登錄於特殊(記憶)傳送石清單中。
    boolean
    isRockMap(int id)
    判斷指定地圖是否已登錄於城市傳送石清單中。
    boolean
    是否顯示偵錯/管理資訊(等同 isAdmin())。
    boolean
    isSkillWorking(int SkillID)
    判斷指定技能是否仍在作用中(存在時間紀錄)。
    boolean
    判斷角色是否為管理人員(GM 等級高於普通玩家)。
    boolean
    isTakeDamage(int sec)
    判斷玩家是否在最近 sec 毫秒內被怪物攻擊。
    boolean
    判斷角色是否為盜賊(Thief)系職業,含冒險家盜賊與皇家騎士團的夜行者。
    boolean
    是否已使用堅固護身符(保護裝備的標記)。
    boolean
    是否已使用 VIP 護身符(防止經驗值損失的標記)。
    boolean
    判斷角色是否為劍士(Warrior)系職業,含冒險家、皇家騎士團與戰神的近戰職業。
    int
    itemQuantity(int itemid)
    計算角色身上指定道具的總數量。
    final void
    複製另一名角色的技能配置:先清除自身全部技能,再依對方的技能等級重新學習。
    void
    處理角色離開地圖時的各項清理工作。
    void
    於升級後送出等級相關的提示訊息。
    void
    處理此角色升級(提升等級並分配 HP/MP/AP/SP 等)。
    loadCharFromDB(int charid, MapleClient client, boolean channelserver)
    由資料庫載入指定角色,等同 loadCharFromDB(charid, client, channelserver, null)
    loadCharFromDB(int charid, MapleClient client, boolean channelserver, Map<Integer,CardData> cads)
    由資料庫載入完整角色狀態(屬性、背包、技能、任務、buff、寵物、社交關係等)。
    void
    為角色建立座騎龍(evan 龍),並向所在地圖廣播生成封包。
    void
    makeMFC(int familyid, int seniorid, int junior1, int junior2)
    建立角色的家族成員資料。
    final void
    將所有可學技能(編號 < 90000000 且適用)全部設為滿等。
    int
    maxBattleshipHP(int skillid)
    依指定技能計算戰艦的最大 HP。
    final void
    依角色目前職業將該職業可學技能設為滿等,並處理無用/極限冒險家技能。
    final void
    將角色已習得的專業(採集/製作)技能全部提升至 10 級。
    void
    mobKilled(int id, int skillID)
    通知任務系統此角色擊殺了某怪物,以推進相關任務的擊殺計數。
    void
    modifyCSPoints(int type, int quantity)
    調整現金商城點數(不顯示提示訊息)。
    void
    modifyCSPoints(int type, int quantity, boolean show)
    調整現金商城點數,並可選擇是否在聊天視窗顯示增減提示。
    modifyDamageTaken(double damage, MapleMapObject attacke)
    依角色各項減傷/護盾/反傷被動與 buff,計算實際承受傷害並處理連帶效果。
    void
    mulung_EnergyModify(boolean inc)
    調整本角色的武陵道場能量值,並即時將新數值以封包傳送給用戶端。
    boolean
    OfflineBanById(int id, String reason)
    依角色 id 進行離線封鎖(封鎖帳號、IP 與 MAC)。
    boolean
    依角色名稱進行離線封鎖。
    void
    onAttack(long maxhp, int maxmp, int skillid, int oid, long totDamage)
    角色發動攻擊後的結算:處理吸血/吸魔、特定 buff 與技能的攻擊後效果。
    void
    處理此角色死亡時的全部後續結算。
    void
    playerDiedCPQ(String name, int lostCP, int team)
    向自身連線送出嘉年華玩家陣亡(扣除 CP)的提示封包。
    void
    playSound(String sound, boolean broadcast)
    播放音效。
    final void
    將任務資訊寫入封包。
    static int
    rands(int lbound, int ubound)
    回傳介於上下界之間(含兩端)的隨機整數。
    void
    recalcPartyQuestRank(int questid)
    重新計算指定組隊任務的隊伍排名。
    void
    向同地圖的隊友請求其目前 HP 以更新隊伍血量顯示。
    void
    將既有角色實例重新繫結至新連線並修正所在地圖(跨頻道搬移善後)。
    static final MapleCharacter
    ReconstructChr(CharacterTransfer ct, MapleClient client, boolean isChannel)
    CharacterTransfer 重建角色(跨頻道/進出商城時的角色搬移)。
    void
    registerEffect(MapleStatEffect effect, long starttime, ScheduledFuture<?> schedule, int from)
    註冊狀態效果(buff)至角色,採用該效果的預設狀態增益與持續時間。
    void
    registerEffect(MapleStatEffect effect, long starttime, ScheduledFuture<?> schedule, Map<MapleBuffStat, Integer> statups, boolean silent, int localDuration, int cid)
    註冊狀態效果(buff)至角色的核心多載。
    void
    重新整理角色在當前地圖的顯示資料。
    void
    動態刷新單一裝備的能力顯示——不移除/重給道具,也不需換頻或重登。
    void
    removeAll(int id)
    移除背包中所有指定 ID 的道具(不顯示提示)。
    void
    removeAll(int id, boolean show)
    移除背包中所有指定 ID 的道具。
    void
    removeAll(int id, boolean show, boolean equip)
    移除背包中所有指定 ID 的道具,並選擇性顯示移除提示。
    void
    移除角色的機器人並向地圖廣播停用。
    void
    removeAriantRoom(int room)
    清空指定阿里安鬥技場房間的房主與人數資料。
    void
    removeCooldown(int skillId)
    移除指定技能的冷卻時間。
    void
    移除角色開設的所有傳送門。
    void
    移除本角色目前擺放的怪物抽取器。
    void
    收回目前召喚的怪物寵物(familiar)。
    void
    removeItem(int id, int quantity)
    自背包移除指定數量的道具,並送出物品變動提示封包。
    void
    從此角色的清單中移除指定的連結召喚獸。
    void
    移除角色開設的所有機械門(機械師職業)。
    static void
    removePartTime(int cid)
    自資料庫刪除指定角色的兼職(part-time)工作紀錄。
    void
    自此角色移除一隻寵物。
    void
    removeSkillWorking(int SkillID)
    移除指定技能的作用時間紀錄。
    void
    removeStolenSkill(int skillID)
    移除一個已偷取的幻影技能,並重建該職業的偷取技能用戶端顯示。
    void
    自此角色移除一隻召喚獸。
    void
    將目前召喚的怪物寵物(familiar)自地圖視覺上移除並取消其被動效果。
    void
    將指定地圖物件自此角色「可見物件」集合移除。
    void
    將角色的剩餘 AP 與 SP 全部歸零。
    void
    將阿里安鬥技場分數歸零。
    void
    重設嘉年華點數,將總點數與可用點數歸零。
    void
    將跑步(running)堆疊計數歸零。
    void
    將角色所有技能書的剩餘技能點(SP)歸零。
    void
    resetSP(int sp)
    重置角色的剩餘技能點數(SP)為指定值。
    void
    resetStats(int str, int dex, int int_, int luk)
    將四項基本能力值重設為指定數值,並把多出的點數退回剩餘 AP。
    void
    resetStatsByJob(boolean beginnerJob)
    依職業將角色能力值重設為對應的初始配點。
    void
    將此角色的家族狀態寫回資料庫。
    void
    將此角色的公會狀態(公會 ID/階級/貢獻值)寫回資料庫。
    void
    將此角色所有背包欄位的道具寫回資料庫。
    void
    將指定類型的記憶傳送點設為此角色目前所在地圖,並標記存檔。
    void
    將指定類型的記憶傳送點設為指定地圖,並標記存檔。
    static void
    將全新建立的角色寫入資料庫(角色建立流程)。
    void
    saveToDB(boolean dc, boolean fromcs)
    將此角色的完整狀態寫回資料庫。
    void
    向指定客戶端送出「移除此角色」封包,使其自該玩家畫面消失。
    void
    向客戶端發送英文問答(OX quiz)訊息。
    void
    向客戶端送出所有已存在小惡魔(imp)的召喚狀態。
    void
    向客戶端送出此角色的技能巨集(前 5 組)。
    void
    以本角色名義寄送一封不含名聲贈禮的便箋給指定收件者。
    void
    sendNote(String to, String msg, int fame)
    以本角色名義寄送一封便箋給指定收件者,並可附帶名聲贈禮。
    void
    向指定客戶端送出「生成此角色」所需的完整封包序列,使其出現在該玩家畫面。
    void
    set_DelChrLog(boolean control)
    設定是否記錄刪除角色的開關。
    void
    將指定成就標記為已完成。
    void
    setAcLog(String bossid)
    寫入角色的成就(ac)紀錄(DB 寫入)。
    void
    setAllianceRank(byte rank)
    設定在聯盟中的階級。
    void
    設定角色的機器人(android),並在地圖上生成與播放表情。
    void
    setApprentice(int app)
    設定此角色的學徒(收徒系統)角色 ID。
    void
    setAriantRoomLeader(int room, String charname)
    設定指定阿里安鬥技場房間的房主名稱。
    void
    setAriantSlotRoom(int room, int slot)
    設定指定阿里安鬥技場房間的人數(座位)值。
    void
    設定是否開啟攻擊(attack)除錯訊息。
    void
    設定角色的戰鬥點數(PVP points)並於有變動時通知客戶端。
    void
    設定戰艦目前的 HP。
    void
    寫入角色對指定 BOSS 的擊殺紀錄(DB 寫入)。
    void
    setBuddyCapacity(byte capacity)
    設定好友名單的容量上限。
    void
    setBuffedValue(MapleBuffStat effect, int value)
    設定指定 buff 狀態目前生效的數值(該 buff 未生效時不作為)。
    void
    setCardStack(byte amount)
    設定卡片(card)堆疊數量。
    void
    設定本角色所屬的怪物嘉年華隊伍。
    void
    setCData(int questid, int points)
    將指定點數「累加」到某任務的自訂資料(customData)欄位上。
    void
    setChair(int chair)
    設定此角色目前使用中的椅子,並重新觸發坐椅回復計算。
    void
    設定本角色的黑板(小黑板)文字內容,並向同地圖玩家廣播。
    void
    setChallenge(int c)
    設定角色目前的挑戰值。
    void
    將最近一次換圖時間記錄為目前系統時間。
    void
    設定釣魚 VIP 狀態旗標。
    void
    setChronosphere(int count)
    設定角色持有的時空石數量。
    void
    寫入角色的時空(Chronosphere)紀錄(DB 寫入)。
    void
    清空商店「再買一次」暫存清單(若已建立)。
    final void
    設定角色所屬的客戶端連線(換頻/重建角色時使用)。
    void
    setClone(boolean c)
    設定本角色物件是否為分身(clone)。
    void
    setCombo(short combo)
    設定本角色目前的連擊(Combo)計數。
    void
    setConversation(int inst)
    設定本角色目前正在對話的 NPC 對話實例編號。
    void
    setCSChronsphere(int count)
    設定現金商城時空石(CS Chronosphere)數量。
    void
    setCurrentRep(int _rank)
    設定目前的家族聲望值。
    void
    setDebugMessage(boolean control)
    設定是否開啟一般除錯訊息。
    void
    setDemonMarking(int mark)
    設定惡魔職業的印記值(demon marking)。
    void
    setDex(int dex)
    設定角色的敏捷(DEX)數值,並重新計算衍生屬性。
    void
    setDirection(int inst)
    設定本角色的對話方向狀態值。
    void
    設定本角色目前的武陵道場挑戰模式。
    void
    setDOT(int d, int source, int sourceLevel)
    對角色施加持續傷害(DOT,多用於 PVP 毒霧)。
    void
    設定角色的龍(evan 龍)物件。
    void
    setElf(int elf)
    設定角色精靈耳朵(Elf ear)狀態並更新外觀。
    void
    設定此角色目前所在的活動實例。
    void
    setExp(int exp)
    設定角色經驗值。
    void
    設定本角色的怪物抽取器。
    void
    setFace(int face)
    設定角色的臉型 ID。
    void
    setFallCounter(int fallcounter)
    設定角色的墜落計數器。
    void
    setFame(int fame)
    設定角色人氣值。
    void
    setFamily(int newf, int news, int newj1, int newj2)
    設定角色的家族關係資料。
    void
    setFatigue(int j)
    設定角色的疲勞值並同步至客戶端。
    void
    setFlying(boolean toggle)
    設定飛行(翱翔)狀態旗標。
    void
    setFollowId(int fi)
    設定跟隨對象的角色 ID。
    void
    setFollowInitiator(boolean fi)
    設定本角色是否為跟隨關係的發起者。
    void
    setFollowOn(boolean fi)
    設定跟隨功能的開啟狀態。
    final void
    setFriendShipPoints(int joejoe, int hermoninny, int littledragon, int ika)
    一次設定四位好感度 NPC 的好感度點數。
    final void
    setFriendShipToAdd(int points)
    設定待加入的好感度點數暫存值。
    void
    setGachExp(int ge)
    設定角色的轉蛋經驗值。
    void
    setGender(byte gender)
    設定角色的性別。
    void
    設定對公會的貢獻值。
    void
    setGuildId(int _id)
    設定所屬公會的 ID。
    void
    setGuildRank(byte _rank)
    設定在公會中的階級。
    void
    setHackMessage(boolean control)
    設定是否開啟外掛偵測訊息。
    void
    setHair(int hair)
    設定角色的髮型 ID。
    void
    setHasSummon(boolean summ)
    設定角色是否擁有召喚獸的旗標。
    void
    setHonorLevel(int level)
    設定名譽(Honor)等級。
    void
    setHonourExp(int exp)
    設定名譽(Honor)經驗值。
    void
    setHp(int amount)
    設定角色目前的 HP(會夾在 0 與最大 HP 之間並更新狀態)。
    void
    setHpApUsed(short hpApUsed)
    設定已用於增加 HP 的能力點(AP)數量。
    void
    setInt(int int_)
    設定角色的智力(INT)數值,並重新計算衍生屬性。
    void
    SetIntNoRecord(int questID, String point)
    將指定任務的自訂資料(customData)設為給定字串,但不會新增不存在的任務。
    void
    setInvincible(boolean invinc)
    設定角色的無敵狀態,並同步套用或解除對應的無敵 buff。
    void
    setInvited(boolean set)
    設定此角色的交易邀請狀態旗標。
    void
    setItemEffect(int itemEffect)
    設定此角色目前播放中的道具效果 ID。
    void
    setJob(int j)
    設定角色的職業 ID(直接寫入欄位,不觸發轉職流程)。
    void
    setKeyDownSkill_Time(long keydown_skill)
    設定上次施放長按蓄力技能的時間戳記。
    void
    setKeyValue(String key, String values)
    設定一筆自訂鍵值(key-value)資料,並標記為已變更以待存檔。
    void
    setLastCombo(long combo)
    設定上次連擊的時間戳記。
    void
    設定最後一次攻擊怪物的時間戳(毫秒)。
    void
    設定本角色最後一次的移動軌跡片段清單。
    void
    設定最後一次公開發話的內容。
    void
    設定最後一次被怪物攻擊的時間戳(毫秒)。
    void
    setLevel(short level)
    設定角色等級。
    void
    setLinkMid(int lm, int x)
    設定(或更新)某連結怪物對應的傷害增幅。
    void
    setLog(client.LogScope scope, client.ResetType resetType, String eventName)
    統一紀錄系統:對指定維度的計數 +1(UPSERT)。
    void
    setLog(client.LogScope scope, client.ResetType resetType, String eventName, int delta)
    統一紀錄系統:對指定維度的計數累加 delta(UPSERT,依日曆邊界自動重置)。
    void
    setLog(String scope, String resetType, String eventName)
    統一紀錄系統:setLog(LogScope, ResetType, String) 的字串便利重載(給腳本用)。
    void
    setLog(String scope, String resetType, String eventName, int delta)
    統一紀錄系統:setLog(LogScope, ResetType, String, int) 的字串便利重載(給腳本用)。
    void
    setLuckyBarrelsStatus(int luckyBarrelsStatus)
    設定幸運木桶(Lucky Barrels)小遊戲狀態。
    void
    setLuk(int luk)
    設定角色的幸運(LUK)數值,並重新計算衍生屬性。
    void
    setMap(int PmapId)
    設定角色記錄的地圖 id(僅更新 id 欄位,不變更 getMap() 物件參考)。
    void
    setMap(MapleMap newmap)
    設定角色目前所在的地圖物件參考。
    void
    setMarriageId(int mi)
    設定角色的結婚編號。
    void
    設定角色的結婚戒指道具 ID。
    void
    setMaxHp(int amount)
    設定角色的最大 HP。
    void
    setMaxMp(int amount)
    設定角色的最大 MP。
    void
    setMeso(int mesos)
    直接設定此角色的楓幣數量(不送封包、不觸發成就)。
    void
    設定此角色目前所在的聊天室(messenger)。
    void
    setMoneytoBank(long money)
    將此角色所屬帳號的楓幣銀行存款金額覆寫為指定值。
    void
    setMp(int amount)
    設定角色目前的 MP(會夾在 0 與最大 MP 之間並更新狀態)。
    void
    setmsg_Chat(boolean control)
    設定是否記錄聊天訊息的開關。
    void
    setmsg_HiredMerchant(boolean control)
    設定是否記錄雇傭商人(販賣)相關訊息的開關。
    void
    設定角色名稱(僅變更記憶體欄位,不直接寫入資料庫)。
    void
    setNextConsume(long nc)
    設定下一次允許消耗(道具使用)的時間戳記。
    void
    setNpcNow(int id)
    設定角色目前正在互動的 NPC 編號。
    void
    setObjectId(int id)
    Throws unsupported operation exception, oid of players is read only
    void
    設定角色先前記錄的座標位置。
    void
    寫入角色的一次性事件紀錄(DB 寫入)。
    void
    setOperateStorage(boolean set)
    設定此角色是否正在操作倉庫的狀態旗標。
    void
    設定此角色所屬隊伍。
    void
    設定本角色目前開設或互動中的玩家商店/交易室物件。
    void
    setPoints(int p)
    將指定點數寫入本角色帳號(更新 accounts.points 資料表欄位)。
    void
    寫入角色的領獎紀錄(DB 寫入)。
    void
    設定角色所屬的金字塔/地鐵活動實例。
    final void
    setQuestAdd(MapleQuest quest, byte status, String customData)
    新增任務並設定其狀態與自訂資料。
    void
    setReborns(int rb)
    以累加方式增加角色的轉生次數。
    void
    setRebuy(List<Item> rebuy)
    設定商店「再買一次」暫存的道具清單。
    void
    setRemainingAp(short remainingAp)
    設定角色剩餘能力點(AP)。
    void
    setRemainingSp(int remainingSp)
    設定角色目前技能書的剩餘技能點(SP)。
    void
    setRemainingSp(int remainingSp, int skillbook)
    設定指定技能書的剩餘技能點數(SP)。
    void
    setRewardLevel(int reward)
    設定角色獎勵等級並即時寫回資料庫。
    void
    設定角色目前的剪刀石頭布遊戲狀態。
    void
    setSayGood(int time)
    將指定時間值累加至「說好話」(讚)時間。
    void
    替換指定 buff 狀態的排程任務,並取消原排程。
    void
    設定最近一次卷軸作用的裝備槽位。
    void
    設定此角色目前互動的商店。
    void
    setSkillWorking(int SkillID, long SkillTime)
    設定指定技能的作用(到期)時間。
    void
    setSkinColor(byte skinColor)
    設定角色的膚色代碼。
    void
    切換此角色接收世界喇叭(super megaphone)訊息的開關,並提示目前狀態。
    void
    setStr(int str)
    設定角色的力量(STR)數值,並重新計算衍生屬性。
    void
    設定角色的職業子類別代碼。
    void
    setTeam(int v)
    設定本角色所屬的隊伍編號(用於椰子大賽等活動)。
    void
    設定角色的傳送目標名稱。
    void
    setTempValue(String arg, String values)
    設定(或清除)一筆記憶體暫存值。
    void
    setTitleEffect(int titleEffect)
    設定此角色目前的稱號效果 ID。
    void
    設定角色的累計戰鬥經驗(PVP exp)並在有變動時重算 PVP 排名。
    void
    setTotalRep(int _rank)
    設定家族累計總聲望值。
    void
    設定此角色目前進行中的交易。
    void
    setUseFirmCharm(boolean useFirmCharm)
    設定堅固護身符使用狀態。
    void
    setUseVipCharm(boolean useVipCharm)
    設定 VIP 護身符使用狀態。
    void
    setVip(int vip)
    設定角色 VIP 等級並即時寫回資料庫。
    void
    setVPoints(int p)
    設定本角色的 V 點(投票點數)。
    void
    設定是否開啟移動(walk)除錯訊息。
    void
    setWishlist(int[] wl)
    設定本角色的商城願望清單,並標記為需存檔。
    void
    setWorld(byte world)
    設定此角色所在的世界(World)編號。
    void
    showEffect(String effect, boolean broadcast)
    播放畫面效果。
    void
    showInfo(String caption, boolean pink, String msg)
    以畫面上方訊息(type -1)向本角色顯示一則資訊,可選擇加上方括號標題前綴。
    final void
    showInstruction(String msg, int width, int height)
    向此角色的用戶端送出一則指定尺寸的提示框(hint)。
    void
    showMessage(int type, String msg)
    向此角色的客戶端送出訊息。
    void
    查詢資料庫中寄給本角色的所有便箋,並將便箋列表封包傳送給本角色用戶端。
    void
    靜默地將目前 HP/MP 重新套用上限校正,不送出狀態更新封包。
    void
    靜默地為角色重新套用一組既存 buff(通常用於換頻/復原)。
    void
    靜默更新此角色在隊伍中的成員資料(不觸發客戶端可見的隊伍變動提示)。
    boolean
    skillisCooling(int skillId)
    判斷指定技能是否正在冷卻中。
    void
    依據設定的分身數量在地圖上生成對應數量的分身。
    void
    在地圖上召喚指定的怪物寵物(familiar)並套用其被動效果。
    void
    spawnPet(byte slot)
    召喚指定欄位的寵物。
    void
    spawnPet(byte slot, boolean lead)
    召喚指定欄位的寵物,並指定是否設為領隊寵物。
    void
    spawnPet(byte slot, boolean lead, boolean broadcast)
    召喚指定欄位的寵物,並指定領隊與是否向地圖廣播。
    final void
    重新生成先前存檔的寵物。
    void
    startFairySchedule(boolean exp)
    啟動精靈吊墜的每小時加成排程。
    void
    startFairySchedule(boolean exp, boolean equipped)
    啟動精靈吊墜的每小時加成排程。
    void
    startFishingTask(boolean VIP)
    啟動釣魚循環任務。
    void
    啟動地圖停留時間限制計時器,時間到時自動傳送至指定地圖。
    void
    startMonsterCarnival(int enemyavailable, int enemytotal)
    向自身連線送出開始怪物嘉年華的封包。
    boolean
    startPartyQuest(int questid)
    開始指定的組隊任務。
    void
    startPartySearch(List<Integer> jobs, int maxLevel, int minLevel, int membersNeeded)
    於目前地圖搜尋符合條件的玩家並邀入隊伍(組隊搜尋)。
    void
    讓此角色停止控制指定怪物,將其自受控集合移除。
    int
    teachSkill(int skillId, int toCharId)
    由本角色向另一名角色「傳授」一個技能(直接寫入資料庫的離線授予)。
    void
    tempban(String reason, Calendar duration, int greason, boolean IPMac)
    對此角色所屬帳號執行「限時封鎖」(tempban),並中斷其連線。
    void
    tryPartyQuest(int questid)
    嘗試開始指定的組隊任務。
    void
    unchooseStolenSkill(int skillID)
    取消選用與指定技能同職業的所有已選偷取技能。
    void
    unequip(int itemId)
    卸下指定的已穿戴道具(放回背包,不從背包移除)。
    void
    unequip(int itemId, boolean remove)
    卸下指定的已穿戴道具,可選擇直接刪除而非放回背包。
    final void
    取消此角色所有寵物的出戰。
    void
    unequipPet(MaplePet pet, boolean hunger)
    取消指定寵物的出戰。
    void
    釋放 getSummonsReadLock() 取得的 summonsLock 讀鎖。
    void
    釋放 getAndWriteLockVisibleMapObjects() 取得的 visibleMapObjectsLock 寫鎖。
    void
    updateAndroid(short pos, int itemId)
    更新機器人在指定槽位的外觀道具並向地圖廣播。
    void
    重新向客戶端推送四項基礎能力值(STR/DEX/INT/LUK)。
    void
    向整張地圖廣播此角色最新的阿里安鬥技場分數。
    void
    將目前人氣值同步更新給客戶端。
    final void
    updateInfoQuest(int questid, String data)
    更新任務的自訂資訊字串。
    void
    updateMacros(int position, SkillMacro updateMacro)
    更新指定槽位的技能巨集(Skill Macro),並標記巨集資料為已變更以待存檔。
    void
    updateOneInfo(int questid, String key, String value)
    更新指定組隊任務中某個鍵的資訊值。
    void
    更新指定暫存鍵內的單一子鍵值。
    void
    將此角色的 HP 變化廣播給隊伍其他成員。
    void
    更新寵物自動進食/自動撿取等自動行為設定。
    final void
    更新任務狀態並送出對應封包。
    final void
    updateQuest(MapleQuestStatus quest, boolean update)
    更新任務狀態,並依旗標決定是否送出封包。
    void
    updateSingleStat(MapleStat stat, int newval)
    向客戶端送出單一屬性更新封包(不含道具反應)。
    void
    updateSingleStat(MapleStat stat, int newval, boolean itemReaction)
    Updates a single stat of this MapleCharacter for the client.
    void
    updateTick(int newTick)
    更新反作弊用的客戶端時間刻度。
    void
    updateUsingPortal(boolean set)
    標記或清除「正在使用傳送門」的時間戳(用於傳送門防連點節流)。
    void
    updateWarpingMap(boolean set)
    標記或清除「正在換圖」的時間戳(用於換圖防連點節流)。
    void
    useCP(int ammount)
    消耗指定數量的可用嘉年華點數(CP)。
    取得目前仍在冷卻中(不可使用)的家族祝福索引清單。
    void
    使用指定的家族祝福並記錄使用時間。
    void
    向用戶端傳送金字塔(PQ)能量更新封包。
    void
    將本角色目前的武陵道場能量值以封包重新傳送給用戶端(不更動數值)。
    void
    writePoint(String type, String inc)
    向用戶端傳送幽靈船(Ghost)分數更新封包。
    void
    向用戶端傳送幽靈船(Ghost)狀態更新封包。

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • keyvalue_changed

      public boolean keyvalue_changed
    • innerskill_changed

      public boolean innerskill_changed
    • apprentice

      public int apprentice
    • dojoStartTime

      public long dojoStartTime
    • dojoMapEndTime

      public long dojoMapEndTime
    • dojoMapEndTimeTotal

      public long dojoMapEndTimeTotal
    • dojoMode

      public MapleCharacter.DojoMode dojoMode
      本角色目前的武陵道場挑戰模式,預設為 MapleCharacter.DojoMode.無
    • ariantScore

      public int ariantScore
      阿里安鬥技場目前累計分數。
  • Method Details

    • getDefault

      public static MapleCharacter getDefault(MapleClient client, LoginInformationProvider.JobType type)
      建立指定職業類別的全新初始角色(角色建立流程用)。

      套用各職業起手屬性點(STR/DEX/INT/LUK 與 HP/MP)並指定 level=1、空背包、 預設好友清單;同時以 accountid 查詢 accounts 資料表,將帳號名稱、 點數券(ACash/mPoints/points/vpoints)填入回傳角色。

      Parameters:
      client - 此角色所屬的連線
      type - 要建立的職業類別
      Returns:
      已套用初始屬性的新 MapleCharacter(尚未寫入資料庫)
    • ReconstructChr

      public static final MapleCharacter ReconstructChr(CharacterTransfer ct, MapleClient client, boolean isChannel)
      CharacterTransfer 重建角色(跨頻道/進出商城時的角色搬移)。

      不重新讀取資料庫,而是把搬移封包中的快照(屬性、背包、技能、buff 等)還原到一個 新的 MapleCharacter 實例上,達成玩家在頻道與商城間移動時毋須重新登入。

      Parameters:
      ct - 來源頻道序列化的角色搬移資料
      client - 目標連線
      isChannel - true 表示在頻道伺服器間搬移;false 會改用 ct 的頻道編號
      Returns:
      由搬移資料重建出的 MapleCharacter
    • loadCharFromDB

      public static MapleCharacter loadCharFromDB(int charid, MapleClient client, boolean channelserver)
      由資料庫載入指定角色,等同 loadCharFromDB(charid, client, channelserver, null)
      Parameters:
      charid - 角色編號
      client - 此角色所屬的連線
      channelserver - true 表示在頻道伺服器載入(會載入完整遊戲狀態)
      Returns:
      載入完成的角色
    • loadCharFromDB

      public static MapleCharacter loadCharFromDB(int charid, MapleClient client, boolean channelserver, Map<Integer,CardData> cads)
      由資料庫載入完整角色狀態(屬性、背包、技能、任務、buff、寵物、社交關係等)。

      角色實體的核心讀取進入點,會大量查詢 characters 及其相關資料表並組裝出 可進入遊戲的 MapleCharacterchannelserverfalse 時僅載入 角色選單所需的精簡資料。

      Parameters:
      charid - 角色編號
      client - 此角色所屬的連線
      channelserver - true 表示在頻道伺服器載入完整遊戲狀態
      cads - 預先載入的角色卡資料(可為 null
      Returns:
      載入完成的角色
    • saveNewCharToDB

      public static void saveNewCharToDB(MapleCharacter chr, LoginInformationProvider.JobType type, short db)
      將全新建立的角色寫入資料庫(角色建立流程)。

      於單一交易內 INSERT characters 主紀錄並依職業類別寫入起始技能、背包、 鍵盤配置等附屬資料;失敗時回滾。會修改資料庫狀態。

      Parameters:
      chr - 待寫入的新角色
      type - 角色職業類別
      db - 起始技能組/資料變體選擇器
    • deleteWhereCharacterId

      public static void deleteWhereCharacterId(Connection con, String sql, int id) throws SQLException
      以角色編號為條件執行刪除(或更新)SQL,使用 executeUpdate
      Parameters:
      con - 共用連線(不會被關閉)
      sql - 帶單一 ? 角色編號參數的 SQL
      id - 角色編號
      Throws:
      SQLException - 資料庫存取失敗時拋出
    • deleteWhereCharacterId_NoLock

      public static void deleteWhereCharacterId_NoLock(Connection con, String sql, int id) throws SQLException
      以角色編號為條件執行刪除(或更新)SQL,使用 execute(不取資料表鎖的變體)。
      Parameters:
      con - 共用連線(不會被關閉)
      sql - 帶單一 ? 角色編號參數的 SQL
      id - 角色編號
      Throws:
      SQLException - 資料庫存取失敗時拋出
    • rands

      public static int rands(int lbound, int ubound)
      回傳介於上下界之間(含兩端)的隨機整數。
      Parameters:
      lbound - 下界(含)
      ubound - 上界(含)
      Returns:
      [lbound, ubound] 範圍內的隨機整數
    • ban

      public static boolean ban(String id, String reason, boolean accountId, int gmlevel, boolean hellban)
      依名稱或 IP 封鎖帳號(離線可用的靜態封鎖)。

      id 形如 IP 則直接寫入 ipbans;否則查出對應帳號並設定 banned=1(僅當該帳號 gm 等級低於 gmlevel 時生效)。gmlevel>100 的管理員封鎖會連帶封鎖該帳號最後登入 IP 與 MAC;hellban 另以 email/IP 連坐封鎖。會修改資料庫狀態。

      Parameters:
      id - 目標帳號名稱、角色名稱或 IP
      reason - 封鎖原因
      accountId - true 以帳號名稱查詢,false 以角色名稱查詢
      gmlevel - 執行者的 GM 等級(僅能封鎖等級更低者)
      hellban - 是否連坐封鎖同 email/IP 的其他帳號
      Returns:
      成功封鎖回傳 true,找不到目標或發生例外回傳 false
    • getOnlineCharacterByName

      public static MapleCharacter getOnlineCharacterByName(int world, String name)
      依名稱取得目前線上的角色(指定世界)。
      Parameters:
      world - 世界編號
      name - 角色名稱
      Returns:
      線上的角色,找不到則回傳 null
    • getCharacterIdByName

      public static int getCharacterIdByName(int world, String name)
      依名稱取得角色編號(指定世界)。

      優先查線上角色,未上線則查詢 characters 資料表。

      Parameters:
      world - 世界編號
      name - 角色名稱
      Returns:
      角色編號,找不到則回傳 -1
    • getCharacterByName

      public static MapleCharacter getCharacterByName(String name)
      依名稱取得角色,線上則回傳線上實例,否則由資料庫載入。

      未上線時會以暫時連線 loadCharFromDB(int, MapleClient, boolean) 載入離線角色快照。

      Parameters:
      name - 角色名稱
      Returns:
      角色實例,找不到則回傳 null
    • getOnlineCharacterByName

      public static MapleCharacter getOnlineCharacterByName(String name)
      依名稱取得目前線上的角色(跨所有頻道查詢)。
      Parameters:
      name - 角色名稱
      Returns:
      線上的角色,找不到則回傳 null
    • getCharacterIdByName

      public static int getCharacterIdByName(String name)
      依名稱取得角色編號,優先查線上、未上線則查資料庫。
      Parameters:
      name - 角色名稱
      Returns:
      角色編號,找不到則回傳 -1
    • getCharacterById

      public static MapleCharacter getCharacterById(int cid)
      依編號取得角色,線上則回傳線上實例,否則由資料庫載入。
      Parameters:
      cid - 角色編號
      Returns:
      角色實例,找不到則回傳 null
    • getCharacterNameById

      public static String getCharacterNameById(int id)
      依編號取得角色名稱,優先查線上、未上線則查資料庫。
      Parameters:
      id - 角色編號
      Returns:
      角色名稱,找不到則回傳 null
    • getOnlineCharacterById

      public static MapleCharacter getOnlineCharacterById(int cid)
      依編號取得目前線上的角色(跨所有頻道查詢)。
      Parameters:
      cid - 角色編號
      Returns:
      線上的角色,找不到則回傳 null
    • ReconstructChr

      public void ReconstructChr(MapleCharacter player, MapleClient client)
      將既有角色實例重新繫結至新連線並修正所在地圖(跨頻道搬移善後)。

      從暫存值還原暫時 IP 與帳號名稱,依目標頻道的 MapleMapFactory 重新取得地圖 物件;若原地圖不存在則改送至杜鵑花森林(950000100),並處理強制返回地圖與出生點失效 的後備(退回 0 號出生點)。會修改 player 的連線、地圖與座標狀態。

      Parameters:
      player - 待重新繫結的角色
      client - 目標連線
    • saveToDB

      public void saveToDB(boolean dc, boolean fromcs)
      將此角色的完整狀態寫回資料庫。

      角色持久化的核心進入點:於單一交易內 UPDATE characters 主紀錄並儲存背包、 技能、任務、buff、寵物、社交關係等附屬資料,全程持有 saveLock 並向 World 登記儲存中狀態,失敗時回滾。分身(isClone())會直接略過。會大量修改資料庫狀態。

      Parameters:
      dc - 是否為登出/斷線觸發的儲存
      fromcs - 是否由商城伺服器觸發的儲存
    • saveInventory

      public void saveInventory(Connection con) throws SQLException
      將此角色所有背包欄位的道具寫回資料庫。

      彙整各 MapleInventory 的道具後委由 ItemLoader.INVENTORY 儲存; connull 時改用其自有連線。會修改資料庫狀態。

      Parameters:
      con - 共用連線;為 null 時改由道具載入器自取連線
      Throws:
      SQLException - 資料庫存取失敗時拋出
    • getStat

      public final PlayerStats getStat()
      取得此角色的屬性計算物件 PlayerStats
      Returns:
      角色屬性物件
    • QuestInfoPacket

      public final void QuestInfoPacket(MaplePacketLittleEndianWriter mplew)
      Parameters:
      mplew - 目標封包寫入器
    • updateInfoQuest

      public final void updateInfoQuest(int questid, String data)
      更新任務的自訂資訊字串。委派至 CharacterQuestManager.updateInfoQuest(int, String)
      Parameters:
      questid - 任務編號
      data - 自訂資訊字串
    • getInfoQuest

      public final String getInfoQuest(int questid)
      取得任務的自訂資訊字串。委派至 CharacterQuestManager.getInfoQuest(int)
      Parameters:
      questid - 任務編號
      Returns:
      自訂資訊字串
    • getNumQuest

      public final int getNumQuest()
      取得已開始任務的數量。委派至 CharacterQuestManager.getNumQuest()
      Returns:
      任務數量
    • getQuestStatus

      public final byte getQuestStatus(int quest)
      取得指定任務的狀態碼。委派至 CharacterQuestManager.getQuestStatus(int)
      Parameters:
      quest - 任務編號
      Returns:
      任務狀態碼
    • getQuest

      public final MapleQuestStatus getQuest(MapleQuest quest)
      取得指定任務的狀態物件(必要時新增)。委派至 CharacterQuestManager.getQuest(MapleQuest)
      Parameters:
      quest - 任務定義
      Returns:
      任務狀態物件
    • setQuestAdd

      public final void setQuestAdd(MapleQuest quest, byte status, String customData)
      新增任務並設定其狀態與自訂資料。委派至 CharacterQuestManager.setQuestAdd(MapleQuest, byte, String)
      Parameters:
      quest - 任務定義
      status - 任務狀態碼
      customData - 自訂資料字串
    • getQuestNAdd

      public final MapleQuestStatus getQuestNAdd(MapleQuest quest)
      取得任務狀態物件,不存在則新增空狀態。委派至 CharacterQuestManager.getQuestNAdd(MapleQuest)
      Parameters:
      quest - 任務定義
      Returns:
      任務狀態物件
    • getQuestNoAdd

      public final MapleQuestStatus getQuestNoAdd(MapleQuest quest)
      取得任務狀態物件,不存在則回傳 null(不新增)。 委派至 CharacterQuestManager.getQuestNoAdd(MapleQuest)
      Parameters:
      quest - 任務定義
      Returns:
      任務狀態物件,不存在則為 null
    • getQuestRemove

      public final MapleQuestStatus getQuestRemove(MapleQuest quest)
      移除並回傳指定任務的狀態物件。委派至 CharacterQuestManager.getQuestRemove(MapleQuest)
      Parameters:
      quest - 任務定義
      Returns:
      被移除的任務狀態物件
    • updateQuest

      public final void updateQuest(MapleQuestStatus quest)
      更新任務狀態並送出對應封包。委派至 CharacterQuestManager.updateQuest(MapleQuestStatus)
      Parameters:
      quest - 任務狀態物件
    • updateQuest

      public final void updateQuest(MapleQuestStatus quest, boolean update)
      更新任務狀態,並依旗標決定是否送出封包。 委派至 CharacterQuestManager.updateQuest(MapleQuestStatus, boolean)
      Parameters:
      quest - 任務狀態物件
      update - true 表示同時送出更新封包
    • getInfoQuest_Map

      public final Map<Integer,String> getInfoQuest_Map()
      取得任務自訂資訊的對映表。委派至 CharacterQuestManager.getInfoQuest_Map()
      Returns:
      任務編號對自訂資訊字串的對映
    • getQuest_Map

      public final Map<MapleQuest, MapleQuestStatus> getQuest_Map()
      取得任務定義對狀態物件的對映表。委派至 CharacterQuestManager.getQuest_Map()
      Returns:
      任務定義對狀態物件的對映
    • getBuffedValue

      public Integer getBuffedValue(MapleBuffStat effect)
      取得指定 buff 狀態目前生效的數值。
      Parameters:
      effect - buff 狀態
      Returns:
      該 buff 的數值,未生效則回傳 null
    • getBuffedSkill_X

      public final Integer getBuffedSkill_X(MapleBuffStat effect)
      取得指定 buff 來源技能效果的 X 參數值。
      Parameters:
      effect - buff 狀態
      Returns:
      效果的 X 值,未生效則回傳 null
    • getBuffedSkill_Y

      public final Integer getBuffedSkill_Y(MapleBuffStat effect)
      取得指定 buff 來源技能效果的 Y 參數值。
      Parameters:
      effect - buff 狀態
      Returns:
      效果的 Y 值,未生效則回傳 null
    • isBuffFrom

      public boolean isBuffFrom(MapleBuffStat stat, Skill skill)
      判斷指定 buff 狀態是否來自特定技能。
      Parameters:
      stat - buff 狀態
      skill - 待比對的技能
      Returns:
      該 buff 由此技能提供時回傳 true
    • getBuffSource

      public int getBuffSource(MapleBuffStat stat)
      取得指定 buff 狀態的來源編號(技能或道具 ID)。
      Parameters:
      stat - buff 狀態
      Returns:
      來源編號,未生效則回傳 -1
    • getTrueBuffSource

      public int getTrueBuffSource(MapleBuffStat stat)
      取得指定 buff 狀態的來源編號,並以正負號區分技能與道具來源。

      技能來源回傳正值,道具來源回傳負值。

      Parameters:
      stat - buff 狀態
      Returns:
      帶正負號的來源編號,未生效則回傳 -1
    • getItemQuantity

      public int getItemQuantity(int itemid, boolean checkEquipped)
      計算角色持有指定道具的總數量。
      Parameters:
      itemid - 道具編號
      checkEquipped - true 時一併計入已裝備欄位的數量
      Returns:
      持有的道具數量
    • setBuffedValue

      public void setBuffedValue(MapleBuffStat effect, int value)
      設定指定 buff 狀態目前生效的數值(該 buff 未生效時不作為)。
      Parameters:
      effect - buff 狀態
      value - 新數值
    • setSchedule

      public void setSchedule(MapleBuffStat effect, ScheduledFuture<?> sched)
      替換指定 buff 狀態的排程任務,並取消原排程。

      該 buff 未生效時不作為。

      Parameters:
      effect - buff 狀態
      sched - 新的排程任務
    • getBuffedStarttime

      public Long getBuffedStarttime(MapleBuffStat effect)
      取得指定 buff 狀態的生效起始時間。
      Parameters:
      effect - buff 狀態
      Returns:
      起始時間(毫秒),未生效則回傳 null
    • getStatForBuff

      public MapleStatEffect getStatForBuff(MapleBuffStat effect)
      取得提供指定 buff 狀態的 MapleStatEffect
      Parameters:
      effect - buff 狀態
      Returns:
      對應的狀態效果,未生效則回傳 null
    • doDragonBlood

      public void doDragonBlood()
      執行龍之血(DRAGONBLOOD)週期扣血效果。

      每次扣除效果 X 值的 HP;若扣血後 HP 將 ≤1 則改為取消該 buff。扣血時會對自身客戶端 與地圖廣播 buff 特效封包。會修改 HP 並送出封包。

    • canBlood

      public final boolean canBlood(long now)
      判斷龍之血效果是否到達下一次扣血時點(每 4 秒)。
      Parameters:
      now - 目前時間(毫秒)
      Returns:
      可再次觸發時回傳 true
    • doRecovery

      public void doRecovery()
      執行回復術(RECOVERY)/機甲變形的週期回復效果。

      回復術會以效果 X 值回血、HP 滿時取消;機甲變形(來源 35121005)則持續扣 MP 維持, MP 不足時取消騎乘與變形 buff。會修改 HP/MP。

    • canRecover

      public final boolean canRecover(long now)
      判斷回復效果是否到達下一次觸發時點(每 5 秒)。
      Parameters:
      now - 目前時間(毫秒)
      Returns:
      可再次觸發時回傳 true
    • startMapTimeLimitTask

      public void startMapTimeLimitTask(int time, MapleMap to)
      啟動地圖停留時間限制計時器,時間到時自動傳送至指定地圖。

      送出倒數時鐘封包並註冊 Timer.MapTimer 任務;若目前位於監獄地圖,時間到時會更新監獄 相關任務的自訂資料以釋放角色,隨後執行 changeMap(int)。會送出封包並可能觸發換圖。

      Parameters:
      time - 限制秒數(≤0 時以 1 秒處理)
      to - 時間到時要傳送的目標地圖
    • canDOT

      public boolean canDOT(long now)
      判斷持續傷害(DOT)是否到達下一次結算時點(每 8 秒)。
      Parameters:
      now - 目前時間(毫秒)
      Returns:
      可結算時回傳 true
    • hasDOT

      public boolean hasDOT()
      判斷角色目前是否處於持續傷害(DOT)狀態。
      Returns:
      有持續傷害時回傳 true
    • doDOT

      public void doDOT()
      結算一次持續傷害(DOT),扣除累計傷害並清除 DOT 狀態。

      扣除 dotHP*4 的 HP 後歸零。會修改 HP。

    • setDOT

      public void setDOT(int d, int source, int sourceLevel)
      對角色施加持續傷害(DOT,多用於 PVP 毒霧)。

      立即扣除一次 d*4 的 HP,並向地圖廣播毒霧封包;記錄起始時間供後續週期結算。 會修改 HP 並送出地圖廣播封包。

      Parameters:
      d - 每次結算的基礎傷害值
      source - 傷害來源編號
      sourceLevel - 傷害來源等級
    • startFishingTask

      public void startFishingTask(boolean VIP)
      啟動釣魚循環任務。

      註冊 Timer.EtcTimer 週期任務,每次依魚餌種類消耗魚餌並隨機給予楓幣、經驗或道具獎勵, 並向自身客戶端送出釣魚更新封包、向地圖廣播上鉤特效。背包滿、無魚餌、伺服器關閉或楓幣異常 時會自動取消。會修改背包/楓幣/經驗並送出封包。

      Parameters:
      VIP - 是否使用 VIP 釣竿(較高獎勵與消耗對應的 VIP 魚餌)
    • cancelMapTimeLimitTask

      public void cancelMapTimeLimitTask()
      取消地圖停留時間限制計時器(若有)。
    • getNeededExp

      public int getNeededExp()
      取得升至下一等級所需的經驗值。委派至 CharacterStatsManager.getNeededExp()
      Returns:
      升級所需經驗值
    • cancelFishingTask

      public void cancelFishingTask()
      取消釣魚循環任務(若正在進行)。
    • registerEffect

      public void registerEffect(MapleStatEffect effect, long starttime, ScheduledFuture<?> schedule, int from)
      註冊狀態效果(buff)至角色,採用該效果的預設狀態增益與持續時間。

      等同呼叫完整多載並帶入 effect.getStatups()、非靜默、effect.getDuration()

      Parameters:
      effect - 狀態效果
      starttime - 生效起始時間(毫秒)
      schedule - 到期解除的排程任務
      from - 來源角色編號
    • registerEffect

      public void registerEffect(MapleStatEffect effect, long starttime, ScheduledFuture<?> schedule, Map<MapleBuffStat, Integer> statups, boolean silent, int localDuration, int cid)
      註冊狀態效果(buff)至角色的核心多載。

      逐一將各 MapleBuffStat 增益寫入內部 buff 表,並處理特殊效果的前置(隱身 GM 自地圖 移除、龍之血/回復計時、狂暴、騎乘啟動、海盜船血量、召喚分身等)。非靜默時會重算本地屬性。 會修改角色 buff 狀態並可能送出地圖廣播。

      Parameters:
      effect - 狀態效果
      starttime - 生效起始時間(毫秒)
      schedule - 到期解除的排程任務
      statups - 要套用的狀態增益對映
      silent - true 時不重算本地屬性
      localDuration - 本地持續時間(毫秒)
      cid - 來源角色編號
    • getBuffStats

      public List<MapleBuffStat> getBuffStats(MapleStatEffect effect, long startTime)
      列出由同一狀態效果與起始時間提供的所有 buff 狀態。

      startTime-1 時忽略起始時間比對;可堆疊的狀態亦一律納入。

      Parameters:
      effect - 來源狀態效果
      startTime - 生效起始時間(-1 表示不比對)
      Returns:
      符合條件的 buff 狀態清單
    • cancelEffect

      public void cancelEffect(MapleStatEffect effect, boolean overwrite, long startTime)
      Parameters:
      effect -
      overwrite - when overwrite is set no data is sent and all the Buffstats in the StatEffect are deregistered
      startTime -
    • cancelEffect

      public void cancelEffect(MapleStatEffect effect, boolean overwrite, long startTime, Map<MapleBuffStat, Integer> statups)
      取消指定狀態效果並依需要清除其所有 buff 數值(核心多載)。

      會處理門(魔法門/機械門)、坐騎、英雄連擊歸零等特殊效果的善後, 透過 deregisterBuffStats(List) 解除 buff 註冊、cancelPlayerBuffs(List, boolean) 對自身客戶端與地圖廣播取消封包;隱身 GM 取消時會重新對地圖廣播角色與寵物。 並會遞迴對所有分身(clones)連動取消。對無限(Infinity)效果有特例處理。 具封包送出、地圖廣播、狀態變動等副作用;effectnull 時直接返回。

      Parameters:
      effect - 欲取消的狀態效果,null 時不做任何事
      overwrite - 為 true 時不送資料、直接以 statups 的鍵集合解除註冊
      startTime - 該效果的起始時間,用於非覆寫模式比對
      statups - 覆寫模式下作為待解除 buff 來源的狀態映射
    • cancelBuffStats

      public void cancelBuffStats(MapleBuffStat... stat)
      取消一組指定的 buff 狀態。

      對給定的狀態先 deregisterBuffStats(List) 解除註冊,再以非覆寫模式 cancelPlayerBuffs(List, boolean) 送出取消封包並向地圖廣播。具封包送出與廣播副作用。

      Parameters:
      stat - 欲取消的一個或多個 buff 狀態
    • cancelEffectFromBuffStat

      public void cancelEffectFromBuffStat(MapleBuffStat stat)
      依 buff 狀態找出對應的效果並取消之。

      若該狀態目前有作用中的效果,委由 cancelEffect(MapleStatEffect, boolean, long) 取消(具封包/廣播副作用)。

      Parameters:
      stat - 欲取消其來源效果的 buff 狀態
    • cancelEffectFromBuffStat

      public void cancelEffectFromBuffStat(MapleBuffStat stat, int from)
      依 buff 狀態取消效果,但僅當該效果來自指定來源角色時才取消。

      用於僅清除由特定施法者(cid == from)所給予的 buff。具封包/廣播副作用。

      Parameters:
      stat - 欲取消其來源效果的 buff 狀態
      from - 必須相符的來源角色 id
    • dispel

      public void dispel()
      驅散角色身上可被驅散的技能 buff。

      僅在非隱身狀態下作用;逐一取消屬於技能、且非變身/GM buff/坐騎/機甲變形/ 能量充滿/英雄連擊的有排程效果。具封包/廣播副作用。

    • dispelSkill

      public void dispelSkill(int skillid)
      取消指定技能 id 所產生的第一個 buff 效果。

      找到第一個來源為 skillid 的技能效果即取消並停止。具封包/廣播副作用。

      Parameters:
      skillid - 欲驅散其 buff 的技能 id
    • dispelSummons

      public void dispelSummons()
      取消角色所有召喚獸(具召喚移動型態)的 buff 效果。

      逐一取消所有 getSummonMovementType() != null 的效果。具封包/廣播副作用。

    • dispelBuff

      public void dispelBuff(int skillid)
      取消指定來源 id 的第一個 buff 效果(不限於技能)。

      dispelSkill(int) 類似,但不檢查是否為技能來源;找到第一個相符即取消並停止。 具封包/廣播副作用。

      Parameters:
      skillid - 欲驅散的 buff 來源 id
    • cancelAllBuffs_

      public void cancelAllBuffs_()
      直接清空角色的所有效果表,不送出任何取消封包。

      僅清除內部 effects 映射;不通知客戶端或地圖,通常用於登出/換頻等狀態重置。

    • cancelAllBuffs

      public void cancelAllBuffs()
      正常取消角色身上所有作用中的 buff 效果。

      逐一以 cancelEffect(MapleStatEffect, boolean, long) 取消,會送出取消封包並向地圖廣播 (與 cancelAllBuffs_() 的靜默清空不同)。

    • cancelMorphs

      public void cancelMorphs()
      取消角色身上的變身(Morph)效果。

      逐一取消屬於變身的效果;遇到特定不可疊加的變身技能(如海盜變身系列)即提早返回以省略迴圈。 具封包/廣播副作用。

    • getMorphState

      public int getMorphState()
      取得目前作用中變身效果的來源技能 id。
      Returns:
      第一個變身效果的來源技能 id;若無變身則回傳 -1
    • silentGiveBuffs

      public void silentGiveBuffs(List<PlayerBuffValueHolder> buffs)
      靜默地為角色重新套用一組既存 buff(通常用於換頻/復原)。

      逐一呼叫各效果的 silentApplyBuff 以還原 buff 數值與排程,不送出一般取得 buff 的效果動畫。 buffsnull 或空時直接返回。

      Parameters:
      buffs - 欲還原的 buff 值持有者清單,可為 null
    • getAllBuffs

      public List<PlayerBuffValueHolder> getAllBuffs()
      取得角色目前所有 buff 的可序列化快照,依來源技能與等級合併同源狀態。

      常用於換頻/進出商城時把 buff 暫存至 PlayerBuffStorage。 相同(來源 id、等級)的多個 buff 狀態會合併到同一個 PlayerBuffValueHolder 內。

      Returns:
      合併後的 buff 值持有者清單
    • cancelMagicDoor

      public void cancelMagicDoor()
      取消角色的魔法門(Magic Door)效果。

      找到第一個魔法門效果即取消並停止。具封包/廣播副作用(並由 cancelEffect(MapleStatEffect, boolean, long) 一併移除門物件)。

    • getSkillLevel

      public int getSkillLevel(int skillid)
      取得指定技能 id 的(基礎)技能等級。
      Parameters:
      skillid - 技能 id
      Returns:
      該技能目前的等級,未學習則為 0
    • getTotalSkillLevel

      public int getTotalSkillLevel(int skillid)
      取得指定技能 id 的總技能等級(含裝備等加成)。
      Parameters:
      skillid - 技能 id
      Returns:
      該技能含加成後的總等級
    • handleEnergyCharge

      public final void handleEnergyCharge(int skillid, int targets)
      處理海盜「能量充滿」(Energy Charge)的能量累積與觸發。

      依命中目標數提升能量值;尚未開始充能時以無限時間套用充能 buff, 達上限(10000)時改為套用「能量爆發」效果。期間會送出效果動畫封包、向地圖廣播, 並送出能量條更新封包。具封包/廣播與 buff 狀態變動副作用。

      Parameters:
      skillid - 能量充滿技能的 id
      targets - 本次攻擊命中的目標數
    • handleBattleshipHP

      public final void handleBattleshipHP(int damage)
      處理海盜戰艇(Battleship)受到傷害後的耐久度扣減。

      僅在角色乘坐戰艇(坐騎效果來源為 5221006)時生效;扣減 battleshipHP 並送出冷卻條更新封包,歸零時送出技能冷卻、加入冷卻時間並取消坐騎效果。 具封包送出與冷卻/狀態變動副作用。

      Parameters:
      damage - 戰艇受到的傷害量
    • handleOrbgain

      public final void handleOrbgain()
      處理戰士「英雄連擊」(Combo)的能量球累積。

      依職業選擇連擊/進階連擊技能,命中時增加連擊球數(進階連擊可機率多加一球), 未達上限時更新 MapleBuffStat.COMBO 數值並送出 buff 封包與地圖廣播。 具封包/廣播與 buff 狀態變動副作用。

    • handleOrbconsume

      public void handleOrbconsume(int howmany)
      消耗角色身上的英雄連擊(Combo)能量球。

      無連擊技能或無作用中連擊效果時直接返回;否則將連擊球數減少 howmany(最低保留 1), 更新 MapleBuffStat.COMBO 並送出 buff 封包與地圖廣播。具封包/廣播與 buff 狀態變動副作用。

      Parameters:
      howmany - 欲消耗的連擊球數
    • silentEnforceMaxHpMp

      public void silentEnforceMaxHpMp()
      靜默地將目前 HP/MP 重新套用上限校正,不送出狀態更新封包。

      透過 PlayerStats 重設 HP/MP 以套用最大值限制,不通知客戶端。

    • enforceMaxHpMp

      public void enforceMaxHpMp()
      將超過上限的 HP/MP 校正回最大值,並在有變動時送出狀態更新封包。

      當目前 MP/HP 超過當前最大值時重設之,並把變動的 MapleStat 透過 updatePlayerStats 封包送回客戶端。具封包送出副作用。

    • getMap

      public MapleMap getMap()
      取得角色目前所在的地圖物件。
      Returns:
      目前的 MapleMap,未在地圖上時可能為 null
    • setMap

      public void setMap(int PmapId)
      設定角色記錄的地圖 id(僅更新 id 欄位,不變更 getMap() 物件參考)。
      Parameters:
      PmapId - 欲記錄的地圖 id
    • showEffect

      public void showEffect(String effect, boolean broadcast)
      播放畫面效果。

      broadcasttrue 時對整張地圖廣播 CField.showEffect(String); 否則僅送給當前玩家。

      Parameters:
      effect - 效果資料名稱
      broadcast - 是否對整張地圖廣播
    • playSound

      public void playSound(String sound, boolean broadcast)
      播放音效。

      broadcasttrue 時對整張地圖廣播 CField.playSound(String); 否則僅送給當前玩家。

      Parameters:
      sound - 音效資料名稱
      broadcast - 是否對整張地圖廣播
    • getLastSpeak

      public String getLastSpeak()
      取得最後一次公開發話的內容。

      此為地圖內暫存狀態,不寫入 DB,角色離線後即消失。

      Returns:
      最後公開發話的內容(從未發話時為空字串)
    • setLastSpeak

      public void setLastSpeak(String msg)
      設定最後一次公開發話的內容。
      Parameters:
      msg - 發話內容
    • setLastTakeDamage

      public void setLastTakeDamage(Long time)
      設定最後一次被怪物攻擊的時間戳(毫秒)。
      Parameters:
      time - 時間戳(System.currentTimeMillis()
    • setLastDamage

      public void setLastDamage(Long time)
      設定最後一次攻擊怪物的時間戳(毫秒)。
      Parameters:
      time - 時間戳(System.currentTimeMillis()
    • isTakeDamage

      public boolean isTakeDamage(int sec)
      判斷玩家是否在最近 sec 毫秒內被怪物攻擊。
      Parameters:
      sec - 時間區間(毫秒)
      Returns:
      區間內曾被攻擊時回傳 true
    • isDamage

      public boolean isDamage(int sec)
      判斷玩家是否在最近 sec 毫秒內攻擊怪物。
      Parameters:
      sec - 時間區間(毫秒)
      Returns:
      區間內曾攻擊怪物時回傳 true
    • isFreeSlot

      public boolean isFreeSlot(int slot)
      檢查所有背包類型(裝備/消耗/設置/其他/現金)是否都至少有指定數量的空格。
      Parameters:
      slot - 每種背包所需的最少空格數
      Returns:
      所有背包類別空間都足夠時回傳 true,只要任一種不足即回傳 false
    • setMap

      public void setMap(MapleMap newmap)
      設定角色目前所在的地圖物件參考。
      Parameters:
      newmap - 新的 MapleMap
    • getMonsterBook

      public MonsterBook getMonsterBook()
      取得角色的怪物圖鑑(Monster Book)。
      Returns:
      角色的 MonsterBook
    • getBossLog

      public int getBossLog(String bossid)
      查詢角色對指定 BOSS 的擊殺紀錄次數(每日門檻用)。委派至 CharacterLogManager.getBossLog(String)
      Parameters:
      bossid - BOSS 識別字
      Returns:
      紀錄中的次數
    • setBossLog

      public void setBossLog(String bossid)
      寫入角色對指定 BOSS 的擊殺紀錄(DB 寫入)。委派至 CharacterLogManager.setBossLog(String)
      Parameters:
      bossid - BOSS 識別字
    • getOneTimeLog

      public int getOneTimeLog(String log)
      查詢角色的一次性事件紀錄。委派至 CharacterLogManager.getOneTimeLog(String)
      Parameters:
      log - 事件識別字
      Returns:
      紀錄中的次數
    • setOneTimeLog

      public void setOneTimeLog(String log)
      寫入角色的一次性事件紀錄(DB 寫入)。委派至 CharacterLogManager.setOneTimeLog(String)
      Parameters:
      log - 事件識別字
    • setPrizeLog

      public void setPrizeLog(String bossid)
      寫入角色的領獎紀錄(DB 寫入)。委派至 CharacterLogManager.setPrizeLog(String)
      Parameters:
      bossid - 獎勵/BOSS 識別字
    • getPrizeLog

      public int getPrizeLog(String bossid)
      查詢角色的領獎紀錄次數。委派至 CharacterLogManager.getPrizeLog(String)
      Parameters:
      bossid - 獎勵/BOSS 識別字
      Returns:
      紀錄中的次數
    • setAcLog

      public void setAcLog(String bossid)
      寫入角色的成就(ac)紀錄(DB 寫入)。委派至 CharacterLogManager.setAcLog(String)
      Parameters:
      bossid - 成就/事件識別字
    • getAcLog

      public int getAcLog(String bossid)
      查詢角色的成就(ac)紀錄次數。委派至 CharacterLogManager.getAcLog(String)
      Parameters:
      bossid - 成就/事件識別字
      Returns:
      紀錄中的次數
    • getGiftLog

      public int getGiftLog(String bossid)
      查詢角色的贈禮紀錄次數。委派至 CharacterLogManager.getGiftLog(String)
      Parameters:
      bossid - 贈禮/事件識別字
      Returns:
      紀錄中的次數
    • getChronosphereLog

      public int getChronosphereLog(String chronoLog)
      查詢角色的時空(Chronosphere)紀錄次數。委派至 CharacterLogManager.getChronosphereLog(String)
      Parameters:
      chronoLog - 時空事件識別字
      Returns:
      紀錄中的次數
    • setChronosphereLog

      public void setChronosphereLog(String chronoLog)
      寫入角色的時空(Chronosphere)紀錄(DB 寫入)。委派至 CharacterLogManager.setChronosphereLog(String)
      Parameters:
      chronoLog - 時空事件識別字
    • setLog

      public void setLog(client.LogScope scope, client.ResetType resetType, String eventName)
      統一紀錄系統:對指定維度的計數 +1(UPSERT)。委派至 CharacterLogManager.setLog(LogScope, ResetType, String)
      Parameters:
      scope - 範圍維度(角色/帳號)
      resetType - 重置週期維度(日/週/月/永久)
      eventName - 事件名稱(識別字)
    • setLog

      public void setLog(client.LogScope scope, client.ResetType resetType, String eventName, int delta)
      統一紀錄系統:對指定維度的計數累加 delta(UPSERT,依日曆邊界自動重置)。 委派至 CharacterLogManager.setLog(LogScope, ResetType, String, int)
      Parameters:
      scope - 範圍維度(角色/帳號)
      resetType - 重置週期維度(日/週/月/永久)
      eventName - 事件名稱(識別字)
      delta - 累加量
    • getLog

      public int getLog(client.LogScope scope, client.ResetType resetType, String eventName)
      統一紀錄系統:取得指定維度在當前週期內的計數。委派至 CharacterLogManager.getLog(LogScope, ResetType, String)
      Parameters:
      scope - 範圍維度(角色/帳號)
      resetType - 重置週期維度(日/週/月/永久)
      eventName - 事件名稱(識別字)
      Returns:
      當前週期內的計數(查無/已過期回 0
    • setLog

      public void setLog(String scope, String resetType, String eventName)
      統一紀錄系統:setLog(LogScope, ResetType, String) 的字串便利重載(給腳本用)。 委派至 CharacterLogManager.setLog(String, String, String)
      Parameters:
      scope - 範圍維度字串("CHAR" / "ACC"
      resetType - 重置週期字串("DAY" / "WEEK" / "MON" / "NEVER"
      eventName - 事件名稱(識別字)
    • setLog

      public void setLog(String scope, String resetType, String eventName, int delta)
      統一紀錄系統:setLog(LogScope, ResetType, String, int) 的字串便利重載(給腳本用)。 委派至 CharacterLogManager.setLog(String, String, String, int)
      Parameters:
      scope - 範圍維度字串("CHAR" / "ACC"
      resetType - 重置週期字串("DAY" / "WEEK" / "MON" / "NEVER"
      eventName - 事件名稱(識別字)
      delta - 累加量
    • getLog

      public int getLog(String scope, String resetType, String eventName)
      統一紀錄系統:getLog(LogScope, ResetType, String) 的字串便利重載(給腳本用)。 委派至 CharacterLogManager.getLog(String, String, String)
      Parameters:
      scope - 範圍維度字串("CHAR" / "ACC"
      resetType - 重置週期字串("DAY" / "WEEK" / "MON" / "NEVER"
      eventName - 事件名稱(識別字)
      Returns:
      當前週期內的計數(無法解析/查無/已過期回 0
    • getMapId

      public int getMapId()
      取得角色目前的地圖 id。

      若有地圖物件參考則回傳其 id,否則回傳記錄的 mapid 欄位。

      Returns:
      目前地圖 id
    • getInitialSpawnpoint

      public byte getInitialSpawnpoint()
      取得角色進入地圖時的初始重生點(傳送門)索引。
      Returns:
      初始重生點索引
    • getId

      public int getId()
      取得角色的資料庫唯一 id。
      Returns:
      角色 id
    • getName

      public String getName()
      取得角色名稱。
      Returns:
      角色名稱
    • setName

      public void setName(String name)
      設定角色名稱(僅變更記憶體欄位,不直接寫入資料庫)。
      Parameters:
      name - 新的角色名稱
    • canHold

      public final boolean canHold(int itemid)
      判斷角色是否有足夠空格可容納指定道具。

      依道具 id 推得其 MapleInventoryType 並檢查對應背包是否仍有空格。

      Parameters:
      itemid - 道具 id
      Returns:
      對應背包尚有空格時為 true
    • getBlessOfFairyOrigin

      public final String getBlessOfFairyOrigin()
      取得提供「妖精的祝福」加成的來源角色名稱。
      Returns:
      來源角色名稱,可能為 null
    • getBlessOfEmpressOrigin

      public final String getBlessOfEmpressOrigin()
      取得提供「女皇的祝福」加成的來源角色名稱。
      Returns:
      來源角色名稱,可能為 null
    • getLevel

      public final short getLevel()
      取得角色等級。委派至 CharacterStatsManager.getLevel()
      Returns:
      角色等級
    • setLevel

      public void setLevel(short level)
      設定角色等級。委派至 CharacterStatsManager.setLevel(short)
      Parameters:
      level - 新的角色等級
    • getFame

      public final int getFame()
      取得角色人氣值。委派至 CharacterStatsManager.getFame()
      Returns:
      人氣值
    • setFame

      public void setFame(int fame)
      設定角色人氣值。委派至 CharacterStatsManager.setFame(int)
      Parameters:
      fame - 新的人氣值
    • getFallCounter

      public final int getFallCounter()
      取得角色的墜落計數器(防摔/防卡點偵測用)。
      Returns:
      墜落計數值
    • setFallCounter

      public void setFallCounter(int fallcounter)
      設定角色的墜落計數器。
      Parameters:
      fallcounter - 新的墜落計數值
    • getClient

      public final MapleClient getClient()
      取得角色所屬的客戶端連線。
      Returns:
      對應的 MapleClient,離線時可能為 null
    • setClient

      public final void setClient(MapleClient client)
      設定角色所屬的客戶端連線(換頻/重建角色時使用)。
      Parameters:
      client - 新的 MapleClient
    • getExp

      public int getExp()
      取得角色目前經驗值。委派至 CharacterStatsManager.getExp()
      Returns:
      經驗值
    • setExp

      public void setExp(int exp)
      設定角色經驗值。委派至 CharacterStatsManager.setExp(int)
      Parameters:
      exp - 新的經驗值
    • getRemainingAp

      public short getRemainingAp()
      取得角色剩餘能力點(AP)。委派至 CharacterStatsManager.getRemainingAp()
      Returns:
      剩餘 AP
    • setRemainingAp

      public void setRemainingAp(short remainingAp)
      設定角色剩餘能力點(AP)。委派至 CharacterStatsManager.setRemainingAp(short)
      Parameters:
      remainingAp - 新的剩餘 AP
    • getRemainingSp

      public int getRemainingSp()
      取得角色目前技能書的剩餘技能點(SP)。委派至 CharacterStatsManager.getRemainingSp()
      Returns:
      剩餘 SP
    • setRemainingSp

      public void setRemainingSp(int remainingSp)
      設定角色目前技能書的剩餘技能點(SP)。委派至 CharacterStatsManager.setRemainingSp(int)
      Parameters:
      remainingSp - 新的剩餘 SP
    • getRemainingSp

      public int getRemainingSp(int skillbook)
      取得指定技能書的剩餘技能點(SP)。委派至 CharacterStatsManager.getRemainingSp(int)
      Parameters:
      skillbook - 技能書索引
      Returns:
      該技能書的剩餘 SP
    • getRemainingSps

      public int[] getRemainingSps()
      取得各技能書剩餘技能點(SP)的完整陣列。委派至 CharacterStatsManager.getRemainingSps()
      Returns:
      以技能書為索引的剩餘 SP 陣列
    • getRemainingSpSize

      public int getRemainingSpSize()
      取得技能點數陣列的大小(技能書數量)。委派至 CharacterStatsManager.getRemainingSpSize()
      Returns:
      各技能書剩餘 SP 陣列的長度
    • getHpApUsed

      public short getHpApUsed()
      取得已用於增加 HP 的能力點(AP)數量。委派至 CharacterStatsManager.getHpApUsed()
      Returns:
      投入 HP 的 AP 數量
    • setHpApUsed

      public void setHpApUsed(short hpApUsed)
      設定已用於增加 HP 的能力點(AP)數量。委派至 CharacterStatsManager.setHpApUsed(short)
      Parameters:
      hpApUsed - 投入 HP 的 AP 數量
    • isHidden

      public boolean isHidden()
      判斷角色是否處於隱身狀態。

      MapleBuffStat.DARKSIGHT 的 buff 來源技能 ID 是否屬於 GM 隱身技能(前綴 9)判定, 因此 GM 的「隱身術」會回傳 true,而一般黑暗視野不會。

      Returns:
      若角色目前隱身則為 true
    • getSkinColor

      public byte getSkinColor()
      取得角色的膚色代碼。
      Specified by:
      getSkinColor in interface MapleCharacterLook
      Returns:
      膚色代碼
    • setSkinColor

      public void setSkinColor(byte skinColor)
      設定角色的膚色代碼。
      Parameters:
      skinColor - 膚色代碼
    • getJob

      public short getJob()
      取得角色的職業 ID。
      Specified by:
      getJob in interface MapleCharacterLook
      Returns:
      職業 ID
    • setJob

      public void setJob(int j)
      設定角色的職業 ID(直接寫入欄位,不觸發轉職流程)。
      Parameters:
      j - 職業 ID
    • getGender

      public byte getGender()
      取得角色的性別(0=男、1=女)。
      Specified by:
      getGender in interface MapleCharacterLook
      Returns:
      性別代碼
    • setGender

      public void setGender(byte gender)
      設定角色的性別。
      Parameters:
      gender - 性別代碼(0=男、1=女)
    • getHair

      public int getHair()
      取得角色的髮型 ID。
      Specified by:
      getHair in interface MapleCharacterLook
      Returns:
      髮型 ID
    • setHair

      public void setHair(int hair)
      設定角色的髮型 ID。
      Parameters:
      hair - 髮型 ID
    • getFace

      public int getFace()
      Specified by:
      getFace in interface MapleCharacterLook
    • setFace

      public void setFace(int face)
      設定角色的臉型 ID。
      Parameters:
      face - 臉型 ID
    • getDemonMarking

      public int getDemonMarking()
      取得惡魔職業的印記值(demon marking)。
      Specified by:
      getDemonMarking in interface MapleCharacterLook
      Returns:
      惡魔印記值
    • setDemonMarking

      public void setDemonMarking(int mark)
      設定惡魔職業的印記值(demon marking)。
      Parameters:
      mark - 惡魔印記值
    • getOldPosition

      public Point getOldPosition()
      取得角色先前記錄的座標位置。
      Returns:
      先前的 Point 座標,可能為 null
    • setOldPosition

      public void setOldPosition(Point x)
      設定角色先前記錄的座標位置。
      Parameters:
      x - 要記錄的 Point 座標
    • setRemainingSp

      public void setRemainingSp(int remainingSp, int skillbook)
      設定指定技能書的剩餘技能點數(SP)。委派至 CharacterStatsManager.setRemainingSp(int, int)
      Parameters:
      remainingSp - 剩餘 SP 數量
      skillbook - 技能書索引
    • isInvincible

      public boolean isInvincible()
      判斷角色是否處於無敵狀態。
      Returns:
      若無敵則為 true
    • setInvincible

      public void setInvincible(boolean invinc)
      設定角色的無敵狀態,並同步套用或解除對應的無敵 buff。

      開啟時對自身套用技能 1010 的效果(會送出 buff 封包); 關閉時呼叫 dispelBuff(int) 解除該技能。

      Parameters:
      invinc - true 開啟無敵、false 關閉
    • getCheatTracker

      public CheatTracker getCheatTracker()
      取得本角色的作弊偵測追蹤器。委派至 CharacterAnticheatManager.getCheatTracker()
      Returns:
      對應的 CheatTracker
    • getBuddylist

      public BuddyList getBuddylist()
      取得角色的好友清單。委派至 CharacterSocialManager.getBuddylist()
      Returns:
      對應的 BuddyList
    • addFame

      public void addFame(int famechange)
      增減角色的人氣值(fame)。委派至 CharacterStatsManager.addFame(int)
      Parameters:
      famechange - 人氣變動量(可為負數)
    • updateFame

      public void updateFame()
      將目前人氣值同步更新給客戶端。委派至 CharacterStatsManager.updateFame()
    • getStr

      public int getStr()
      取得角色的力量(STR)數值。
      Returns:
      力量數值
    • setStr

      public void setStr(int str)
      設定角色的力量(STR)數值,並重新計算衍生屬性。

      寫入後呼叫 PlayerStats.recalcLocalStats(MapleCharacter) 重算本地屬性(不傳送封包)。

      Parameters:
      str - 力量數值
    • getInt

      public int getInt()
      取得角色的智力(INT)數值。
      Returns:
      智力數值
    • setInt

      public void setInt(int int_)
      設定角色的智力(INT)數值,並重新計算衍生屬性。

      寫入後呼叫 PlayerStats.recalcLocalStats(MapleCharacter) 重算本地屬性(不傳送封包)。

      Parameters:
      int_ - 智力數值
    • getLuk

      public int getLuk()
      取得角色的幸運(LUK)數值。
      Returns:
      幸運數值
    • setLuk

      public void setLuk(int luk)
      設定角色的幸運(LUK)數值,並重新計算衍生屬性。

      寫入後呼叫 PlayerStats.recalcLocalStats(MapleCharacter) 重算本地屬性(不傳送封包)。

      Parameters:
      luk - 幸運數值
    • getDex

      public int getDex()
      取得角色的敏捷(DEX)數值。
      Returns:
      敏捷數值
    • setDex

      public void setDex(int dex)
      設定角色的敏捷(DEX)數值,並重新計算衍生屬性。

      寫入後呼叫 PlayerStats.recalcLocalStats(MapleCharacter) 重算本地屬性(不傳送封包)。

      Parameters:
      dex - 敏捷數值
    • getHp

      public int getHp()
      取得角色目前的 HP。
      Returns:
      目前 HP
    • setHp

      public void setHp(int amount)
      設定角色目前的 HP(會夾在 0 與最大 HP 之間並更新狀態)。
      Parameters:
      amount - 目標 HP
    • getMp

      public int getMp()
      取得角色目前的 MP。
      Returns:
      目前 MP
    • setMp

      public void setMp(int amount)
      設定角色目前的 MP(會夾在 0 與最大 MP 之間並更新狀態)。
      Parameters:
      amount - 目標 MP
    • getMaxHp

      public int getMaxHp()
      取得角色的最大 HP。
      Returns:
      最大 HP
    • setMaxHp

      public void setMaxHp(int amount)
      設定角色的最大 HP。
      Parameters:
      amount - 最大 HP
    • getMaxMp

      public int getMaxMp()
      取得角色的最大 MP。
      Returns:
      最大 MP
    • setMaxMp

      public void setMaxMp(int amount)
      設定角色的最大 MP。
      Parameters:
      amount - 最大 MP
    • changeMapBanish

      public void changeMapBanish(int mapid, String portal, String msg)
      將角色驅逐(banish)至指定地圖的具名傳送點,並先向其顯示一則訊息。

      先以類型 5 對自身 dropMessage(String) 顯示 msg,再依目標地圖的具名傳送點執行傳送。

      Parameters:
      mapid - 目標地圖 ID
      portal - 目標傳送點名稱
      msg - 傳送前顯示給玩家的訊息
    • changeMap

      public void changeMap(int map)
      依地圖 ID 將角色傳送至目標地圖的 0 號(預設)傳送點。

      等同於以傳送點 ID 0 呼叫 changeMap(int, int)

      Parameters:
      map - 目標地圖 ID
    • changeMap

      public void changeMap(int map, int portal)
      依地圖 ID 與傳送點 ID 將角色傳送至目標地圖。

      會自當前頻道的地圖工廠取得目標 MapleMap,並執行換圖(送出換圖封包、離開原圖、加入新圖)。

      Parameters:
      map - 目標地圖 ID
      portal - 目標傳送點 ID
    • changeMap

      public void changeMap(MapleMap to, Point pos)
      將角色傳送至目標地圖的指定座標。

      以傳送點旗標 0x80 組出換圖封包並執行換圖。

      Parameters:
      to - 目標 MapleMap
      pos - 落點座標
    • changeMap

      public void changeMap(MapleMap to)
      將角色傳送至目標地圖的 0 號(預設)傳送點。
      Parameters:
      to - 目標 MapleMap
    • changeMap

      public void changeMap(MapleMap to, MaplePortal pto)
      將角色傳送至目標地圖的指定傳送點。
      Parameters:
      to - 目標 MapleMap
      pto - 目標 MaplePortal
    • changeMap

      public void changeMap(MapleMap to, MaplePortal pto, boolean changeMP)
      將角色傳送至目標地圖的指定傳送點,並可選擇是否同步更新 MP。
      Parameters:
      to - 目標 MapleMap
      pto - 目標 MaplePortal
      changeMP - 若為 true 換圖後會送出一次 MP 屬性更新
    • changeMapPortal

      public void changeMapPortal(MapleMap to, MaplePortal pto)
      將角色傳送至目標地圖的指定傳送點,並在進圖時將該傳送點傳入換圖流程。
      Parameters:
      to - 目標 MapleMap
      pto - 目標 MaplePortal
    • cancelChallenge

      public void cancelChallenge()
      取消角色目前的對戰挑戰(challenge)。

      若存在挑戰對象,會向對方送出「拒絕」訊息並清除其挑戰狀態,再清除自身的挑戰狀態。

    • leaveMap

      public void leaveMap(MapleMap map)
      處理角色離開地圖時的各項清理工作。

      controlledLockvisibleMapObjectsLock 寫鎖保護下, 釋放所有被本角色控制的怪物(交還控制權)並清空可見地圖物件集合; 接著重置椅子、清除連結怪物、取消釣魚/挑戰、移除機械門、取消交易、關閉倉庫, 並取消地圖時限任務。

      Parameters:
      map - 角色正在離開的 MapleMap
    • changeJob

      public void changeJob(int newJob)
      將角色轉職/轉生為指定職業,並套用所有相關連動處理。

      此為轉職核心流程,會依新職業執行大量副作用:設定子分類(影武者/重砲指揮官)、 初心者重置屬性、依職業階級調整 HP/MP/SP、授予新職業基礎技能、更新職業欄位、 重算屬性並向地圖廣播職業效果與更新封包;若新舊職業跨大類,亦會處理對應的數值修正。 若角色身上有影分身或水之盾 buff,會先以類型 5 提示玩家關閉並中止本次轉職。 過程中的例外會記錄到 ScriptEx_Log

      Parameters:
      newJob - 目標職業 ID
    • baseSkills

      public void baseSkills()
      補齊角色職業應有但尚未習得的基礎/預設技能。

      針對三轉以上職業補上四轉技能與「英雄的意志」等被動,並為夜光(Evan)補魔法防護、 為米哈逸(Mercedes)與惡魔(Demon)補上其專屬的初始技能組。所有需新增的技能彙整後 透過 changeSkillsLevel(Map) 一次寫入(會送出技能更新封包)。

    • makeDragon

      public void makeDragon()
      為角色建立座騎龍(evan 龍),並向所在地圖廣播生成封包。

      會新建 MapleDragon 指派給本角色,並透過 map.broadcastMessage 廣播給同圖玩家。

    • getDragon

      public MapleDragon getDragon()
      取得角色的龍(evan 龍)物件。
      Returns:
      對應的 MapleDragon,若未建立則為 null
    • setDragon

      public void setDragon(MapleDragon d)
      設定角色的龍(evan 龍)物件。
      Parameters:
      d - 要設定的 MapleDragon,可為 null
    • gainAp

      public void gainAp(short ap)
      增減角色的剩餘能力點數(AP)。委派至 CharacterStatsManager.gainAp(short)
      Parameters:
      ap - AP 變動量(可為負數)
    • gainSP

      public void gainSP(int sp)
      增減角色預設技能書的剩餘技能點數(SP)。委派至 CharacterStatsManager.gainSP(int)
      Parameters:
      sp - SP 變動量(可為負數)
    • gainSP

      public void gainSP(int sp, int skillbook)
      增減角色指定技能書的剩餘技能點數(SP)。委派至 CharacterStatsManager.gainSP(int, int)
      Parameters:
      sp - SP 變動量(可為負數)
      skillbook - 技能書索引
    • resetSP

      public void resetSP(int sp)
      重置角色的剩餘技能點數(SP)為指定值。委派至 CharacterStatsManager.resetSP(int)
      Parameters:
      sp - 重置後的 SP 數量
    • resetSP

      public void resetSP()
      將角色所有技能書的剩餘技能點(SP)歸零。委派至 CharacterStatsManager.resetSP()
    • resetAPSP

      public void resetAPSP()
      將角色的剩餘 AP 與 SP 全部歸零。

      resetSP(int) 歸零 SP,再以 gainAp(short) 扣除目前剩餘 AP。

    • getProfessions

      public List<Integer> getProfessions()
      取得角色已習得的所有專業技能(profession)類別。

      掃描 9200~9204 的專業技能群,凡等級大於 0 者收集其群號回傳。

      Returns:
      已習得專業技能的群號清單(可能為空)
    • getProfessionLevel

      public byte getProfessionLevel(int id)
      取得指定專業技能的等級。

      專業技能的等級與經驗值打包在技能等級欄位中:本方法取其高位元組作為等級。

      Parameters:
      id - 專業技能 ID
      Returns:
      專業技能等級,未習得則為 0
    • getProfessionExp

      public short getProfessionExp(int id)
      取得指定專業技能目前的經驗值。

      取技能等級欄位的低 16 位元作為經驗值(與等級共用同一欄位打包)。

      Parameters:
      id - 專業技能 ID
      Returns:
      專業技能經驗值,未習得則為 0
    • addProfessionExp

      public boolean addProfessionExp(int id, int expGain)
      為指定專業技能增加經驗值,必要時自動升級並回饋對應特性(trait)經驗。

      若經驗達到該等級門檻則升一級(透過 changeProfessionLevelExp(int, int, int)),並依專業類別 為對應的 MapleTrait.MapleTraitType(感性/意志/手藝)加上特性經驗;否則僅更新經驗值。 專業未習得或已達 10 級(上限)時不處理。

      Parameters:
      id - 專業技能 ID
      expGain - 增加的經驗值
      Returns:
      若本次升級則為 true,否則為 false
    • changeProfessionLevelExp

      public void changeProfessionLevelExp(int id, int level, int exp)
      設定指定專業技能的等級與經驗值(兩者打包進同一技能等級欄位後寫入)。

      level(高位元組)與 exp(低 16 位元)打包,透過 changeSingleSkillLevel(Skill, int, byte) 寫入並送出技能更新封包。

      Parameters:
      id - 專業技能 ID
      level - 專業等級
      exp - 專業經驗值
    • changeSingleSkillLevel

      public void changeSingleSkillLevel(Skill skill, int newLevel, byte newMasterlevel)
      變更單一技能的等級與精通等級,到期時間採該技能的預設值(通常為一個月)。

      skillnull 時直接返回;否則委派至 changeSingleSkillLevel(Skill, int, byte, long)

      Parameters:
      skill - 目標技能,可為 null(不處理)
      newLevel - 新的技能等級
      newMasterlevel - 新的精通等級
    • changeSingleSkillLevel

      public void changeSingleSkillLevel(Skill skill, int newLevel, byte newMasterlevel, long expiration)
      變更單一技能的等級、精通等級與到期時間,並送出技能更新封包。

      透過 changeSkillData(Skill, int, byte, long) 寫入技能資料;若確有變更,會送出 updateSkills 封包, 並依該技能是否影響回復或屬性,呼叫 reUpdateStat(boolean, boolean) 重算。無任何變更時直接返回。

      Parameters:
      skill - 目標技能
      newLevel - 新的技能等級
      newMasterlevel - 新的精通等級
      expiration - 技能到期時間(毫秒時戳;-1 表示永久)
    • changeSkillsLevel

      public void changeSkillsLevel(Map<Skill, SkillEntry> ss)
      批次套用多個技能的等級/精通等級/到期時間變更,並一次送出技能更新封包。

      逐一委派 changeSkillData(Skill, int, byte, long) 寫入每個成功變更的技能;僅當至少有一個技能 確實變更時,才向客戶端送出 CWvsContext.updateSkills(Map) 並重算相關屬性 (回血類技能會重置回復、非召喚技能會觸發本地屬性重算)。會標記 changed_skills

      Parameters:
      ss - 欲變更的技能對應表(key 為 Skill,value 為 SkillEntry);空表時直接返回
    • changeSkillData

      public boolean changeSkillData(Skill skill, int newLevel, byte newMasterlevel, long expiration)
      將單一技能的資料寫入此角色的技能表(不送封包、不重算屬性)。

      newLevelnewMasterlevel 皆為 0 時表示移除該技能; 若技能不適用(非 GameConstants.isApplicableSkill(int) 系列)或無實際變更,則不做任何事。 通常由 changeSkillsLevel(Map) 呼叫以收集本次更新清單。

      Parameters:
      skill - 欲寫入的技能;為 null 或不適用時回傳 false
      newLevel - 新的技能等級(0 表示移除)
      newMasterlevel - 新的精通等級
      expiration - 技能到期時間(毫秒;-1 表示永不過期)
      Returns:
      技能表確實變更回傳 true,否則 false
    • changeSkillLevel_Skip

      public void changeSkillLevel_Skip(Skill skil, int skilLevel, byte masterLevel)
      套用單一臨時技能等級(不存入資料庫),並送出技能更新封包。

      便利多載:包裝成單筆對應表後委派至 changeSkillLevel_Skip(Map, boolean),並以 write=true 送出封包。

      Parameters:
      skil - 欲設定的技能
      skilLevel - 技能等級(0 表示移除)
      masterLevel - 精通等級
    • changeSkillLevel_Skip

      public void changeSkillLevel_Skip(Map<Skill, SkillEntry> skill, boolean write)
      批次套用臨時技能等級(不存入資料庫)。

      專供「不寫回資料庫」的臨時技能使用:等級與精通皆為 0 時移除技能,否則寫入技能表。 當 write 為真且確有變更時,向客戶端送出 CWvsContext.updateSkills(Map)。 不會標記 changed_skills,故重新登入後不保留。

      Parameters:
      skill - 欲套用的技能對應表;空表時直接返回
      write - 為 true 時送出技能更新封包
    • playerDead

      public void playerDead()
      處理此角色死亡時的全部後續結算。

      依序進行:靈魂之石(SOUL_STONE)保命復活(免經驗懲罰、原地復活後直接返回); 通知所屬事件實例 EventInstanceManager.playerKilled(MapleCharacter);取消大量增益狀態與召喚獸; 依序消耗 VIP/強效/一般護身符以免除經驗懲罰(MapleInventoryManipulator.removeById(MapleClient, MapleInventoryType, int, int, boolean, boolean), 庫存異動+向客戶端送出護身符封包);無護身符時依地圖類型計算並扣除經驗值 (MapleStat.EXP);檢查裝備耐久;金字塔地鐵任務失敗結算。

      會送出多個封包、變更角色狀態與庫存。初心者職業或 PVP 中不扣經驗。

    • updatePartyMemberHP

      public void updatePartyMemberHP()
      將此角色的 HP 變化廣播給隊伍其他成員。委派至 CharacterSocialManager.updatePartyMemberHP()
    • receivePartyMemberHP

      public void receivePartyMemberHP()
      向同地圖的隊友請求其目前 HP 以更新隊伍血量顯示。委派至 CharacterSocialManager.receivePartyMemberHP()
    • healHP

      public void healHP(int delta)
      為此角色回復 HP,並向自己與同地圖玩家送出回血特效封包。

      透過 addHP(int) 增加 HP,再送出 EffectPacket.showOwnHpHealed(int) 給自己並廣播 EffectPacket.showHpHealed(int, int) 至地圖(不含自己)。

      Parameters:
      delta - 回復的 HP 量
    • healMP

      public void healMP(int delta)
      為此角色回復 MP,並向自己與同地圖玩家送出回復特效封包。

      透過 addMP(int) 增加 MP,再送出 EffectPacket.showOwnHpHealed(int) 給自己並廣播 EffectPacket.showHpHealed(int, int) 至地圖(不含自己)。

      Parameters:
      delta - 回復的 MP 量
    • addHP

      public void addHP(int delta)
      Convenience function which adds the supplied parameter to the current hp then directly does a updateSingleStat.
      Parameters:
      delta -
      See Also:
    • addMP

      public void addMP(int delta)
      Convenience function which adds the supplied parameter to the current mp then directly does a updateSingleStat.
      Parameters:
      delta -
      See Also:
    • addMP

      public void addMP(int delta, boolean ignore)
      為此角色增加(或減少)MP,並送出單一屬性更新封包。

      惡魔(Demon)職業在 ignorefalse 時不會被「增加」MP (僅允許扣減),因其以「需求」機制取代一般 MP;其他職業則照常增減。

      Parameters:
      delta - 變化量(可為負)
      ignore - 為 true 時略過惡魔職業限制,強制套用變化
    • addMPHP

      public void addMPHP(int hpDiff, int mpDiff)
      同時增減此角色的 HP 與 MP,並以單一封包送出實際變更的屬性。

      分別嘗試更新 HP/MP(惡魔職業在非扣減時不增加 MP,同 addMP(int, boolean)), 僅將確實變更的屬性彙整為一個 CWvsContext.updatePlayerStats(Map, MapleCharacter) 封包送出。

      Parameters:
      hpDiff - HP 變化量(可為負)
      mpDiff - MP 變化量(可為負)
    • updateSingleStat

      public void updateSingleStat(MapleStat stat, int newval)
      向客戶端送出單一屬性更新封包(不含道具反應)。便利多載,委派至 updateSingleStat(MapleStat, int, boolean) 並帶入 itemReaction=false
      Parameters:
      stat - 欲更新的屬性
      newval - 新數值
    • updateSingleStat

      public void updateSingleStat(MapleStat stat, int newval, boolean itemReaction)
      Updates a single stat of this MapleCharacter for the client. This method only creates and sends an update packet, it does not update the stat stored in this MapleCharacter instance.
      Parameters:
      stat -
      newval -
      itemReaction -
    • gainExp

      public void gainExp(int total, boolean show, boolean inChat, boolean white)
      給予此角色經驗值並處理升級結算。委派至 CharacterStatsManager.gainExp(int, boolean, boolean, boolean)
      Parameters:
      total - 取得的經驗值總量
      show - 是否顯示取得經驗特效
      inChat - 是否於聊天視窗顯示
      white - 是否以白字顯示
    • familyRep

      public void familyRep(int prevexp, int needed, boolean leveled)
      累加家族聲望(Family Rep)並處理升等。委派至 CharacterSocialManager.familyRep(int, int, boolean)
      Parameters:
      prevexp - 先前的家族經驗
      needed - 升等所需經驗
      leveled - 是否已升等
    • gainExpMonster

      public void gainExpMonster(int gain, boolean show, boolean white, byte pty, int Class_Bonus_EXP, int Equipment_Bonus_EXP, int Premium_Bonus_EXP, boolean partyBonusMob, int partyBonusRate)
      給予擊殺怪物所得的經驗值(含各類加成)並處理升級。委派至 CharacterStatsManager.gainExpMonster(int, boolean, boolean, byte, int, int, int, boolean, int)
      Parameters:
      gain - 基礎經驗值
      show - 是否顯示取得經驗特效
      white - 是否以白字顯示
      pty - 隊伍成員數/分配係數
      Class_Bonus_EXP - 職業加成經驗
      Equipment_Bonus_EXP - 裝備加成經驗
      Premium_Bonus_EXP - 付費加成經驗
      partyBonusMob - 是否為提供組隊加成的怪物
      partyBonusRate - 組隊加成比率
    • forceReAddItem_NoUpdate

      public void forceReAddItem_NoUpdate(Item item, MapleInventoryType type)
      將指定道具自其所在槽位移除後立即重新加回(不送任何更新封包)。

      用於刷新道具的記憶體狀態而不通知客戶端;其他 forceReAddItem* 多載皆以此為基礎再附帶不同的更新封包。

      Parameters:
      item - 欲重新加入的道具
      type - 該道具所屬的庫存類型
    • forceReAddItem

      public void forceReAddItem(Item item, MapleInventoryType type)
      重新加回道具並送出一般道具特殊使用更新封包。

      用於耐久度、道具經驗/等級、擁有者等狀態變更後刷新顯示;先呼叫 forceReAddItem_NoUpdate(Item, MapleInventoryType) 再送出 InventoryPacket.updateSpecialItemUse(Item, byte, MapleCharacter)

      Parameters:
      item - 欲重新加入的道具
      type - 該道具所屬的庫存類型;為 UNDEFINED 時不送封包
    • forceReAddItem_Flag

      public void forceReAddItem_Flag(Item item, MapleInventoryType type)
      重新加回道具並送出旗標(flag)變更的更新封包。

      用於道具旗標變更(如鎖定/封印)後刷新顯示;先呼叫 forceReAddItem_NoUpdate(Item, MapleInventoryType) 再送出 InventoryPacket.updateSpecialItemUse_(Item, byte, MapleCharacter)

      Parameters:
      item - 欲重新加入的道具
      type - 該道具所屬的庫存類型;為 UNDEFINED 時不送封包
    • forceReAddItem_Book

      public void forceReAddItem_Book(Item item, MapleInventoryType type)
      重新加回道具並送出怪物圖鑑(monster book)升級封包。

      用於怪物卡冊相關道具變更後刷新顯示;先呼叫 forceReAddItem_NoUpdate(Item, MapleInventoryType) 再送出 CWvsContext.upgradeBook(Item, MapleCharacter)

      Parameters:
      item - 欲重新加入的道具
      type - 該道具所屬的庫存類型;為 UNDEFINED 時不送封包
    • reloadEquip

      public void reloadEquip(Equip equip)
      動態刷新單一裝備的能力顯示——不移除/重給道具,也不需換頻或重登。

      適用情境:腳本(或其他程式)已直接改好某件 Equip 的記憶體屬性 (例如 equip.setStr(999)),要讓客戶端立即反映變更,包含背包中滑鼠移上去 顯示的能力 tooltip。處理流程:

      1. 依裝備槽位正負判定所屬庫存(負值=已穿戴 MapleInventoryType.EQUIPPED, 其餘=一般裝備背包 MapleInventoryType.EQUIP),以 forceReAddItem(Item, MapleInventoryType) 在原槽位重新加回並送出 InventoryPacket.updateSpecialItemUse(Item, byte, MapleCharacter)(單一封包內先移除 再加入、夾帶完整道具資訊),客戶端即重繪該槽位的道具與 tooltip;
      2. 若該裝備正穿戴於身上(槽位為負),再呼叫 equipChanged() 重新計算本地戰鬥屬性 並向同地圖廣播外觀更新,使能力變更即時生效、他人也看得到外觀變化。

      本方法不寫入資料庫;變更會在角色存檔(登出/換頻/定時存檔)時一併持久化,與卷軸強化一致。

      Parameters:
      equip - 已在記憶體改好屬性、要刷新顯示的裝備物件;為 null 時不做任何事
    • silentPartyUpdate

      public void silentPartyUpdate()
      靜默更新此角色在隊伍中的成員資料(不觸發客戶端可見的隊伍變動提示)。

      若身處隊伍中,向 World.Party 送出 PartyOperation.SILENT_UPDATE。 不在隊伍時不做任何事。

    • isIntern

      public boolean isIntern()
      是否為實習 GM(GM 等級 ≥ 1)。
      Returns:
      GM 等級不低於 1 回傳 true
    • isGM

      public boolean isGM()
      是否為 GM(GM 等級 > 0)。
      Returns:
      GM 等級大於 0 回傳 true
    • isGod

      public boolean isGod()
      是否為最高權限「神」(GM 等級 ≥ 100)。
      Returns:
      GM 等級不低於 100 回傳 true
    • isAdmin

      public boolean isAdmin()
      是否為管理員(GM 等級 ≥ 5)。
      Returns:
      GM 等級不低於 5 回傳 true
    • getGMLevel

      public int getGMLevel()
      取得此角色的 GM 等級。
      Returns:
      GM 等級(普通玩家為 0,神為 100)
    • hasGmLevel

      public boolean hasGmLevel(int level)
      判斷此角色的 GM 等級是否達到指定門檻。
      Parameters:
      level - 要比較的 GM 等級門檻
      Returns:
      GM 等級不低於 level 回傳 true
    • isShowInfo

      public boolean isShowInfo()
      是否顯示偵錯/管理資訊(等同 isAdmin())。
      Returns:
      為管理員時回傳 true
    • showMessage

      public void showMessage(int type, String msg)
      向此角色的客戶端送出訊息。

      type 介於 0~44 時以遊戲訊息(CField.getGameMessage(String, boolean))形式送出, 否則退回為一般伺服器通知(CWvsContext.serverNotice(int, String),type 5)。

      Parameters:
      type - 訊息類型(0~44 為遊戲訊息,其餘走伺服器通知)
      msg - 訊息內容
    • getInventory

      public final MapleInventory getInventory(MapleInventoryType type)
      取得此角色指定類型的庫存(內部參照,非複本)。
      Parameters:
      type - 庫存類型
      Returns:
      對應的 MapleInventory
    • getInventorys

      public final MapleInventory[] getInventorys()
      取得此角色的全部庫存陣列(內部參照,非複本)。
      Returns:
      以庫存類型序數為索引的 MapleInventory 陣列
    • expirationTask

      public final void expirationTask(boolean pending, boolean firstLoad)
      處理道具與技能的到期回收,分為「掛起通知」與「實際掃描」兩種模式。

      pending 為真:送出先前掃描累積的到期道具/技能通知封包 (InfoPacket.itemExpired(int)CWvsContext.updateSkills(Map) 及伺服器訊息), 並清空 pendingExpiration/pendingSkills 後返回。

      pending 為假:掃描全部庫存與技能,移除已過期項目(鎖定道具改為解鎖、 部分道具可被替換道具取代並重新入庫),更新吊飾槽相關任務,並處理寶盒(coreAura)到期重置 (存檔+送出 CWvsContext.updateCoreAura(MapleCharacter)+重算屬性)。被移除的項目暫存於 pendingExpiration/pendingSkills 待下一次以 pending=true 發送通知。

      會變更庫存與技能狀態、可能標記 changed_skills、並送出多個封包。

      Parameters:
      pending - true 僅送出先前累積的到期通知;false 進行實際到期掃描
      firstLoad - 是否為登入首次載入(影響「登出即過期」道具的處理與是否提示替換道具)
    • getShop

      public MapleShop getShop()
      取得此角色目前正在互動的商店。
      Returns:
      目前的 MapleShop,未開啟商店時為 null
    • setShop

      public void setShop(MapleShop shop)
      設定此角色目前互動的商店。
      Parameters:
      shop - 要設定的 MapleShopnull 表示關閉)
    • getMeso

      public int getMeso()
      取得此角色目前持有的楓幣(meso)數量。
      Returns:
      楓幣數量
    • setMeso

      public void setMeso(int mesos)
      直接設定此角色的楓幣數量(不送封包、不觸發成就)。
      Parameters:
      mesos - 新的楓幣數量
    • getSavedLocations

      public final int[] getSavedLocations()
      取得此角色的記憶傳送點陣列(內部參照,非複本)。
      Returns:
      SavedLocationType 序數為索引的地圖 ID 陣列
    • getSavedLocation

      public int getSavedLocation(SavedLocationType type)
      取得指定類型的記憶傳送點地圖 ID。
      Parameters:
      type - 記憶傳送點類型
      Returns:
      對應的地圖 ID,未設定時為 -1
    • saveLocation

      public void saveLocation(SavedLocationType type)
      將指定類型的記憶傳送點設為此角色目前所在地圖,並標記存檔。
      Parameters:
      type - 記憶傳送點類型
    • saveLocation

      public void saveLocation(SavedLocationType type, int mapz)
      將指定類型的記憶傳送點設為指定地圖,並標記存檔。
      Parameters:
      type - 記憶傳送點類型
      mapz - 要記住的地圖 ID
    • clearSavedLocation

      public void clearSavedLocation(SavedLocationType type)
      清除指定類型的記憶傳送點(設為 -1),並標記存檔。
      Parameters:
      type - 記憶傳送點類型
    • gainMeso

      public void gainMeso(int gain, boolean show)
      給予(或扣除)楓幣。便利多載,委派至 gainMeso(int, boolean, boolean) 並帶入 inChat=false
      Parameters:
      gain - 楓幣變化量(可為負)
      show - 是否顯示取得楓幣特效
    • gainMeso

      public void gainMeso(int gain, boolean show, boolean inChat)
      給予(或扣除)此角色楓幣,並處理相關特效與成就。

      若扣除後楓幣為負則僅送出 CWvsContext.enableActions() 後返回(不變更)。 成功後更新楓幣、檢查百萬/千萬/億/十億等成就(finishAchievement(int))、 送出 MapleStat.MESO 與 enableActions,並依 show 送出 InfoPacket.showMesoGain(int, boolean)。當 ServerConstants.LOG_TRACE_GAINMESO 開啟時會額外輸出堆疊追蹤檔案。

      Parameters:
      gain - 楓幣變化量(可為負)
      show - 是否顯示取得楓幣特效
      inChat - 是否於聊天視窗顯示
    • controlMonster

      public void controlMonster(MapleMonster monster, boolean aggro)
      讓此角色開始控制指定怪物(成為其 controller),並送出控制封包。

      將怪物的 controller 設為自己、於 controlledLock 寫鎖下加入受控集合, 再送出 MobPacket.controlMonster(MapleMonster, boolean, boolean) 與怪物狀態給此角色客戶端。 分身(clone)或怪物為 null 時不做任何事。

      Parameters:
      monster - 欲控制的怪物
      aggro - 是否帶有仇恨(aggro)狀態
    • stopControllingMonster

      public void stopControllingMonster(MapleMonster monster)
      讓此角色停止控制指定怪物,將其自受控集合移除。

      controlledLock 寫鎖下移除。分身(clone)或怪物為 null 時不做任何事。本方法不送封包,僅變更受控集合。

      Parameters:
      monster - 欲停止控制的怪物
    • checkMonsterAggro

      public void checkMonsterAggro(MapleMonster monster)
      確認此角色對指定怪物的仇恨控制狀態。

      若已是該怪物的 controller,則標記其 controller 具有仇恨;否則將控制權切換給自己 (MapleMonster.switchController(MapleCharacter, boolean),帶仇恨)。分身或怪物為 null 時不做任何事。

      Parameters:
      monster - 要檢查的怪物
    • getControlledSize

      public int getControlledSize()
      取得此角色目前控制中的怪物數量。
      Returns:
      受控怪物集合的大小
    • getAccountID

      public int getAccountID()
      取得此角色所屬的帳號 ID。
      Returns:
      帳號 ID
    • mobKilled

      public void mobKilled(int id, int skillID)
      通知任務系統此角色擊殺了某怪物,以推進相關任務的擊殺計數。委派至 CharacterQuestManager.mobKilled(int, int)
      Parameters:
      id - 被擊殺怪物的 ID
      skillID - 造成擊殺的技能 ID
    • getStartedQuests

      public final List<MapleQuestStatus> getStartedQuests()
      取得此角色所有進行中的任務狀態。委派至 CharacterQuestManager.getStartedQuests()
      Returns:
      進行中任務狀態清單
    • getCompletedQuests

      public final List<MapleQuestStatus> getCompletedQuests()
      取得此角色所有已完成的任務狀態。委派至 CharacterQuestManager.getCompletedQuests()
      Returns:
      已完成任務狀態清單
    • getCompletedMedals

      public final List<Pair<Integer,Long>> getCompletedMedals()
      取得此角色已取得的勳章及其完成時間。委派至 CharacterQuestManager.getCompletedMedals()
      Returns:
      勳章 ID 與完成時間(毫秒)的配對清單
    • getSkills

      public Map<Skill, SkillEntry> getSkills()
      取得此角色技能表的唯讀檢視。
      Returns:
      不可修改的技能對應表(SkillSkillEntry
    • getTotalSkillLevel

      public int getTotalSkillLevel(Skill skill)
      取得指定技能的「實際有效等級」(含戰鬥指令、全技能加成與個別技能加成)。

      在基礎等級之上,非初心者技能會加上 combatOrders、(最大等級 > 10 時的) incAllskill 與該技能的加成值,最後以技能真實上限封頂。

      Parameters:
      skill - 要查詢的技能;為 null 或未習得(等級 ≤ 0)時回傳 0
      Returns:
      套用各項加成並封頂後的有效技能等級
    • getAllSkillLevels

      public int getAllSkillLevels()
      計算此角色所有已習得技能的等級總和(排除初心者技能與特殊技能)。
      Returns:
      各非初心者、非特殊技能的等級加總
    • getSkillExpiry

      public long getSkillExpiry(Skill skill)
      取得指定技能的到期時間(毫秒)。
      Parameters:
      skill - 要查詢的技能;為 null 或未習得(等級 ≤ 0)時回傳 0
      Returns:
      到期時間(毫秒;-1 表示永不過期)
    • getSkillLevel

      public int getSkillLevel(Skill skill)
      取得指定技能的基礎等級(不含任何加成)。
      Parameters:
      skill - 要查詢的技能;為 null 或未習得(等級 ≤ 0)時回傳 0
      Returns:
      技能基礎等級
    • getMasterLevel

      public byte getMasterLevel(int skill)
      取得指定技能 ID 的精通等級(master level)。便利多載,先以 SkillFactory.getSkill(int) 解析後委派至 getMasterLevel(Skill)
      Parameters:
      skill - 技能 ID
      Returns:
      精通等級,未習得時為 0
    • getMasterLevel

      public byte getMasterLevel(Skill skill)
      取得指定技能的精通等級(master level)。
      Parameters:
      skill - 要查詢的技能
      Returns:
      精通等級,未習得時為 0
    • levelUp

      public void levelUp()
      處理此角色升級(提升等級並分配 HP/MP/AP/SP 等)。委派至 CharacterStatsManager.levelUp()
    • autoJob

      public void autoJob()
      依目前職業與等級自動轉職(供自動/快速練功類設定使用)。

      針對各職業線(英雄、聖騎士……至米哈逸等)在特定等級門檻 自動呼叫 changeJob(int)。會變更角色職業並送出對應封包。

    • LevelMsg

      public void LevelMsg()
      於升級後送出等級相關的提示訊息。

      非 GM 角色達到 200 級時,向全服廣播恭賀訊息(World.Broadcast, 含其勳章名稱與角色名)。另依職業(龍魔導士、伊班、一般職業)在可轉職的等級 顯示地圖效果提示(MapleMap.startMapEffect(String, int))。

    • changeKeybinding

      public void changeKeybinding(int key, byte type, int action)
      變更此角色的單一按鍵綁定(key binding)。

      type 不為 0 時,於按鍵配置中設定該按鍵對應的 (type, action); 為 0 時則移除該按鍵綁定。僅變更記憶體中的按鍵配置。

      Parameters:
      key - 按鍵代碼
      type - 綁定類型(0 表示移除該綁定)
      action - 該按鍵對應的動作/技能 ID
    • sendMacros

      public void sendMacros()
      向客戶端送出此角色的技能巨集(前 5 組)。

      僅在至少存在一組非空巨集時送出 CField.getMacros(SkillMacro[])(且只送一次)。

    • updateMacros

      public void updateMacros(int position, SkillMacro updateMacro)
      更新指定槽位的技能巨集(Skill Macro),並標記巨集資料為已變更以待存檔。
      Parameters:
      position - 巨集槽位索引
      updateMacro - 要寫入該槽位的 SkillMacro
    • getMacros

      public final SkillMacro[] getMacros()
      取得此角色的全部技能巨集陣列。
      Returns:
      技能巨集陣列(內部參照,非複本)
    • tempban

      public void tempban(String reason, Calendar duration, int greason, boolean IPMac)
      對此角色所屬帳號執行「限時封鎖」(tempban),並中斷其連線。

      會送出 GM 警察封包後關閉連線,並寫入 accounts 資料表的 tempban/banreason/greason 欄位(DB 寫入);若 IPMac 為真,另會封鎖該連線的 MAC 並將其 IP 寫入 ipbans 資料表。 SQL 例外僅記錄於 log,不向外拋出。

      Parameters:
      reason - 封鎖理由
      duration - 封鎖到期時間(以 Calendar 表示)
      greason - GM 封鎖原因代碼
      IPMac - 為 true 時一併封鎖 IP 與 MAC
    • ban

      public final boolean ban(String reason, boolean IPMac, boolean autoban, boolean hellban)
      對此角色所屬帳號執行「永久封鎖」(ban),並中斷其連線。

      會送出 GM 警察封包,並更新 accounts 資料表的 banned/ banreason(DB 寫入;autoban 為真時 banned=2,否則 1)。若 IPMac 為真則封鎖 MAC 並將 IP 寫入 ipbans;若再加上 hellban,則連動封鎖同 email 或同 SessionIP 的所有帳號。完成後關閉連線。

      Parameters:
      reason - 封鎖理由
      IPMac - 為 true 時一併封鎖 IP 與 MAC
      autoban - 為 true 表示系統自動封鎖(banned 標記為 2)
      hellban - 為 true 時連動封鎖同 email/同 IP 的帳號
      Returns:
      封鎖成功回傳 true;發生 SQL 例外回傳 false
      Throws:
      RuntimeException - 若角色尚未完整載入(lastmonthfameids 為 null)
    • getObjectId

      public int getObjectId()
      Oid of players is always = the cid
      Overrides:
      getObjectId in class MapleMapObject
    • setObjectId

      public void setObjectId(int id)
      Throws unsupported operation exception, oid of players is read only
      Overrides:
      setObjectId in class MapleMapObject
    • getStorage

      public MapleStorage getStorage()
      取得此角色帳號的倉庫物件。
      Returns:
      帳號倉庫 MapleStorage
    • addVisibleMapObject

      public void addVisibleMapObject(MapleMapObject mo)
      將指定地圖物件加入此角色「可見物件」集合。

      分身(clone)角色直接略過。操作於 visibleMapObjectsLock 寫鎖下進行。

      Parameters:
      mo - 要標記為可見的 MapleMapObject
    • removeVisibleMapObject

      public void removeVisibleMapObject(MapleMapObject mo)
      將指定地圖物件自此角色「可見物件」集合移除。

      分身(clone)角色直接略過。操作於 visibleMapObjectsLock 寫鎖下進行。

      Parameters:
      mo - 要移除的 MapleMapObject
    • isMapObjectVisible

      public boolean isMapObjectVisible(MapleMapObject mo)
      判斷指定地圖物件目前對此角色是否可見。

      visibleMapObjectsLock 讀鎖下查詢;分身(clone)角色一律視為不可見。

      Parameters:
      mo - 欲查詢的 MapleMapObject
      Returns:
      可見回傳 true,否則 false
    • getAndWriteLockVisibleMapObjects

      public Collection<MapleMapObject> getAndWriteLockVisibleMapObjects()
      取得可見物件集合並同時持有寫鎖,供呼叫端遍歷/修改。

      注意:此方法回傳時 visibleMapObjectsLock 寫鎖仍處於鎖定狀態, 呼叫端務必於用畢後呼叫 unlockWriteVisibleMapObjects() 解鎖,否則造成死鎖。

      Returns:
      可見地圖物件集合(內部參照,非複本)
    • unlockWriteVisibleMapObjects

      public void unlockWriteVisibleMapObjects()
      釋放 getAndWriteLockVisibleMapObjects() 取得的 visibleMapObjectsLock 寫鎖。
    • isAlive

      public boolean isAlive()
      判斷此角色目前是否存活(HP 大於 0)。
      Returns:
      存活回傳 true,否則 false
    • sendDestroyData

      public void sendDestroyData(MapleClient client)
      向指定客戶端送出「移除此角色」封包,使其自該玩家畫面消失。

      送出 CField.removePlayerFromMap(int) 封包(封包傳送),並遞迴對所有分身 (clone)執行相同處理。龍/機器人/召喚獸的移除由客戶端自行處理,故此處不另送。

      Specified by:
      sendDestroyData in class MapleMapObject
      Parameters:
      client - 接收移除封包的目標客戶端
    • sendSpawnData

      public void sendSpawnData(MapleClient client)
      向指定客戶端送出「生成此角色」所需的完整封包序列,使其出現在該玩家畫面。

      僅在對方玩家 allowedToTarget(this) 為真時才送出(封包傳送)。內容包含 玩家本體生成封包、隊伍 HP 同步、所有已召喚寵物、分身、龍、機器人、召喚的精靈 (familiar)、一般召喚獸(於 summonsLock 讀鎖下遍歷)以及跟隨效果。

      Specified by:
      sendSpawnData in class MapleMapObject
      Parameters:
      client - 接收生成封包的目標客戶端
    • equipChanged

      public final void equipChanged()
      處理裝備變更後的連動更新。

      向同地圖廣播更新外觀封包(CField.updateCharLook(MapleCharacter),地圖廣播),重新計算 本地屬性(stats.recalcLocalStats,狀態變更),並在角色身處聊天室時同步 聊天室顯示資訊。地圖為 null 時直接返回。

    • getPets

      public final List<MaplePet> getPets()
      取得此角色所有寵物清單。委派至 CharacterPetManager.getPets()
      Returns:
      寵物 MaplePet 清單
    • addPet

      public void addPet(MaplePet pet)
      為此角色新增一隻寵物。委派至 CharacterPetManager.addPet(MaplePet)
      Parameters:
      pet - 要新增的 MaplePet
    • removePet

      public void removePet(MaplePet pet)
      自此角色移除一隻寵物。委派至 CharacterPetManager.removePet(MaplePet)
      Parameters:
      pet - 要移除的 MaplePet
    • getSummonedPets

      public final List<MaplePet> getSummonedPets()
      取得此角色目前已召喚(出戰)的寵物清單。委派至 CharacterPetManager.getSummonedPets()
      Returns:
      已召喚的 MaplePet 清單
    • getSummonedPet

      public final MaplePet getSummonedPet(int index)
      取得指定索引處已召喚的寵物。委派至 CharacterPetManager.getSummonedPet(int)
      Parameters:
      index - 召喚寵物索引
      Returns:
      對應的 MaplePet,無則可能為 null
    • getPetSlotNext

      public final int getPetSlotNext()
      取得下一個可用的寵物出戰槽位。委派至 CharacterPetManager.getPetSlotNext()
      Returns:
      下一個寵物槽位索引
    • getPetIndex

      public final byte getPetIndex(MaplePet petz)
      取得指定寵物在出戰清單中的索引。委派至 CharacterPetManager.getPetIndex(MaplePet)
      Parameters:
      petz - 目標 MaplePet
      Returns:
      寵物索引
    • getPetIndex

      public final byte getPetIndex(int petId)
      依寵物道具 ID 取得其在出戰清單中的索引。委派至 CharacterPetManager.getPetIndex(int)
      Parameters:
      petId - 寵物道具 ID
      Returns:
      寵物索引
    • getPetIndexById

      public final byte getPetIndexById(int petId)
      依寵物唯一 ID 取得其在出戰清單中的索引。委派至 CharacterPetManager.getPetIndexById(int)
      Parameters:
      petId - 寵物唯一 ID
      Returns:
      寵物索引
    • unequipAllPets

      public final void unequipAllPets()
      取消此角色所有寵物的出戰。委派至 CharacterPetManager.unequipAllPets()
    • unequipPet

      public void unequipPet(MaplePet pet, boolean hunger)
      取消指定寵物的出戰。委派至 CharacterPetManager.unequipPet(MaplePet, boolean)
      Parameters:
      pet - 要收回的 MaplePet
      hunger - 是否因飢餓值而收回
    • getLastFameTime

      public final long getLastFameTime()
      取得上次贈送人氣(fame)的時間戳記。
      Returns:
      上次贈送人氣的時間(毫秒)
    • getFamedCharacters

      public final List<Integer> getFamedCharacters()
      取得本月內已被此角色贈送過人氣的角色 ID 清單。
      Returns:
      本月已贈送人氣對象的角色 ID 清單(內部參照,未載入時可能為 null)
    • getBattledCharacters

      public final List<Integer> getBattledCharacters()
      取得本月內已與此角色對戰過的帳號 ID 清單。
      Returns:
      本月對戰過對象的帳號 ID 清單(內部參照,未載入時可能為 null)
    • canGiveFame

      public MapleCharacter.FameStatus canGiveFame(MapleCharacter from)
      判斷此角色目前能否向指定對象贈送人氣(fame)。

      規則:24 小時內已贈送過則為 MapleCharacter.FameStatus.NOT_TODAY;對象為 null、本月名單 未載入或本月已對該對象贈送過則為 MapleCharacter.FameStatus.NOT_THIS_MONTH;否則為 MapleCharacter.FameStatus.OK

      Parameters:
      from - 欲贈送人氣的目標角色(可為 null)
      Returns:
      對應的 MapleCharacter.FameStatus 結果
    • hasGivenFame

      public void hasGivenFame(MapleCharacter to)
      記錄此角色已向指定對象贈送人氣的事實。

      更新上次贈送時間、將對象加入本月名單,並寫入 famelog 資料表(DB 寫入)。 SQL 例外僅記錄於 log。

      Parameters:
      to - 已被贈送人氣的目標角色
    • canBattle

      public boolean canBattle(MapleCharacter to)
      判斷此角色目前能否與指定對象進行對戰。

      對象為 null、本月對戰名單未載入,或本月已與該對象的帳號對戰過時回傳 false

      Parameters:
      to - 欲對戰的目標角色(可為 null)
      Returns:
      可對戰回傳 true,否則 false
    • hasBattled

      public void hasBattled(MapleCharacter to)
      記錄此角色已與指定對象對戰的事實。

      將對象帳號加入本月對戰名單,並寫入 battlelog 資料表(DB 寫入)。SQL 例外僅記錄於 log。

      Parameters:
      to - 已對戰的目標角色
    • getKeyLayout

      public final MapleKeyLayout getKeyLayout()
      取得此角色的鍵盤配置(快捷鍵設定)。
      Returns:
      鍵盤配置 MapleKeyLayout
    • getParty

      public MapleParty getParty()
      取得此角色所屬隊伍。委派至 CharacterSocialManager.getParty()
      Returns:
      所屬 MapleParty,未組隊時為 null
    • setParty

      public void setParty(MapleParty party)
      設定此角色所屬隊伍。委派至 CharacterSocialManager.setParty(MapleParty)
      Parameters:
      party - 要設定的 MapleParty(可為 null 表示離隊)
    • getWorld

      public byte getWorld()
      取得此角色所在的世界(World)編號。
      Returns:
      世界編號
    • setWorld

      public void setWorld(byte world)
      設定此角色所在的世界(World)編號。
      Parameters:
      world - 世界編號
    • getTrade

      public MapleTrade getTrade()
      取得此角色目前進行中的交易。
      Returns:
      進行中的 MapleTrade,無交易時為 null
    • setTrade

      public void setTrade(MapleTrade trade)
      設定此角色目前進行中的交易。
      Parameters:
      trade - 要設定的 MapleTrade(可為 null 表示結束交易)
    • getEventInstance

      public EventInstanceManager getEventInstance()
      取得此角色目前所在的活動實例(事件/組隊任務)。
      Returns:
      所在的 EventInstanceManager,不在任何活動中時為 null
    • setEventInstance

      public void setEventInstance(EventInstanceManager eventInstance)
      設定此角色目前所在的活動實例。
      Parameters:
      eventInstance - 要設定的 EventInstanceManager(可為 null)
    • addDoor

      public void addDoor(MapleDoor door)
      為此角色新增一個傳送門(魔法門)。
      Parameters:
      door - 要新增的 MapleDoor
    • clearDoors

      public void clearDoors()
      清除此角色的所有傳送門(魔法門)。
    • getDoors

      public List<MapleDoor> getDoors()
      取得此角色目前所有傳送門的複本清單。
      Returns:
      傳送門 MapleDoor 清單(複本)
    • addMechDoor

      public void addMechDoor(MechDoor door)
      為此角色新增一個機械門(機甲師技能)。
      Parameters:
      door - 要新增的 MechDoor
    • clearMechDoors

      public void clearMechDoors()
      清除此角色的所有機械門。
    • getMechDoors

      public List<MechDoor> getMechDoors()
      取得此角色目前所有機械門的複本清單。
      Returns:
      機械門 MechDoor 清單(複本)
    • setSmega

      public void setSmega()
      切換此角色接收世界喇叭(super megaphone)訊息的開關,並提示目前狀態。

      切換後會向此角色送出狀態提示訊息(封包傳送)。

    • getSmega

      public boolean getSmega()
      取得此角色是否接收世界喇叭訊息。
      Returns:
      接收則為 true,否則 false
    • getSummonsReadLock

      public List<MapleSummon> getSummonsReadLock()
      取得召喚獸清單並同時持有讀鎖,供呼叫端安全遍歷。

      注意:回傳時 summonsLock 讀鎖仍處於鎖定狀態,呼叫端務必於用畢後 呼叫 unlockSummonsReadLock() 解鎖。

      Returns:
      召喚獸 MapleSummon 清單(內部參照,非複本)
    • getSummonsSize

      public int getSummonsSize()
      取得此角色目前的召喚獸數量。
      Returns:
      召喚獸數量
    • unlockSummonsReadLock

      public void unlockSummonsReadLock()
      釋放 getSummonsReadLock() 取得的 summonsLock 讀鎖。
    • addSummon

      public void addSummon(MapleSummon s)
      新增一隻召喚獸至此角色。

      操作於 summonsLock 寫鎖下進行。

      Parameters:
      s - 要新增的 MapleSummon
    • removeSummon

      public void removeSummon(MapleSummon s)
      自此角色移除一隻召喚獸。

      操作於 summonsLock 寫鎖下進行。

      Parameters:
      s - 要移除的 MapleSummon
    • getChair

      public int getChair()
      取得此角色目前使用中的椅子 ID。
      Returns:
      椅子 ID(0 表示未坐下)
    • setChair

      public void setChair(int chair)
      設定此角色目前使用中的椅子,並重新觸發坐椅回復計算。
      Parameters:
      chair - 椅子 ID(0 表示起身)
    • getItemEffect

      public int getItemEffect()
      取得此角色目前播放中的道具效果 ID。
      Returns:
      道具效果 ID
    • setItemEffect

      public void setItemEffect(int itemEffect)
      設定此角色目前播放中的道具效果 ID。
      Parameters:
      itemEffect - 道具效果 ID
    • getTitleEffect

      public int getTitleEffect()
      取得此角色目前的稱號效果 ID。
      Returns:
      稱號效果 ID
    • setTitleEffect

      public void setTitleEffect(int titleEffect)
      設定此角色目前的稱號效果 ID。
      Parameters:
      titleEffect - 稱號效果 ID
    • getType

      public MapleMapObjectType getType()
      取得此地圖物件的型別,角色固定為 MapleMapObjectType.PLAYER
      Specified by:
      getType in class MapleMapObject
      Returns:
      恆為 MapleMapObjectType.PLAYER
    • getFamilyId

      public int getFamilyId()
      取得此角色所屬家族 ID。委派至 CharacterSocialManager.getFamilyId()
      Returns:
      家族 ID
    • getSeniorId

      public int getSeniorId()
      取得此角色在家族中的師父(上線)角色 ID。委派至 CharacterSocialManager.getSeniorId()
      Returns:
      師父角色 ID
    • getJunior1

      public int getJunior1()
      取得此角色在家族中的第一名徒弟(下線)角色 ID。委派至 CharacterSocialManager.getJunior1()
      Returns:
      第一名徒弟角色 ID
    • getJunior2

      public int getJunior2()
      取得此角色在家族中的第二名徒弟(下線)角色 ID。委派至 CharacterSocialManager.getJunior2()
      Returns:
      第二名徒弟角色 ID
    • getCurrentRep

      public int getCurrentRep()
      取得目前的家族聲望值。委派至 CharacterSocialManager.getCurrentRep()
      Returns:
      目前聲望值
    • setCurrentRep

      public void setCurrentRep(int _rank)
      設定目前的家族聲望值。委派至 CharacterSocialManager.setCurrentRep(int)
      Parameters:
      _rank - 新的聲望值
    • getTotalRep

      public int getTotalRep()
      取得家族累計總聲望值。委派至 CharacterSocialManager.getTotalRep()
      Returns:
      累計總聲望值
    • setTotalRep

      public void setTotalRep(int _rank)
      設定家族累計總聲望值。委派至 CharacterSocialManager.setTotalRep(int)
      Parameters:
      _rank - 新的累計總聲望值
    • getTotalWins

      public int getTotalWins()
      取得 PVP 累計勝場數。
      Returns:
      總勝場數
    • getTotalLosses

      public int getTotalLosses()
      取得 PVP 累計敗場數。
      Returns:
      總敗場數
    • increaseTotalWins

      public void increaseTotalWins()
      將 PVP 累計勝場數加一。
    • increaseTotalLosses

      public void increaseTotalLosses()
      將 PVP 累計敗場數加一。
    • getGuildId

      public int getGuildId()
      取得所屬公會的 ID。委派至 CharacterSocialManager.getGuildId()
      Returns:
      公會 ID,未加入公會時為 0
    • setGuildId

      public void setGuildId(int _id)
      設定所屬公會的 ID。委派至 CharacterSocialManager.setGuildId(int)
      Parameters:
      _id - 新的公會 ID
    • getGuildRank

      public byte getGuildRank()
      取得在公會中的階級。委派至 CharacterSocialManager.getGuildRank()
      Returns:
      公會階級
    • setGuildRank

      public void setGuildRank(byte _rank)
      設定在公會中的階級。委派至 CharacterSocialManager.setGuildRank(byte)
      Parameters:
      _rank - 新的公會階級
    • getGuildContribution

      public int getGuildContribution()
      取得對公會的貢獻值。委派至 CharacterSocialManager.getGuildContribution()
      Returns:
      公會貢獻值
    • setGuildContribution

      public void setGuildContribution(int _c)
      設定對公會的貢獻值。委派至 CharacterSocialManager.setGuildContribution(int)
      Parameters:
      _c - 新的公會貢獻值
    • getMGC

      public MapleGuildCharacter getMGC()
      取得此角色對應的公會成員資料物件。委派至 CharacterSocialManager.getMGC()
      Returns:
      MapleGuildCharacter,未加入公會時可能為 null
    • getAllianceRank

      public byte getAllianceRank()
      取得在聯盟中的階級。委派至 CharacterSocialManager.getAllianceRank()
      Returns:
      聯盟階級
    • setAllianceRank

      public void setAllianceRank(byte rank)
      設定在聯盟中的階級。委派至 CharacterSocialManager.setAllianceRank(byte)
      Parameters:
      rank - 新的聯盟階級
    • getGuild

      public MapleGuild getGuild()
      取得所屬的公會物件。委派至 CharacterSocialManager.getGuild()
      Returns:
      MapleGuild,未加入公會時可能為 null
    • guildUpdate

      public void guildUpdate()
      將此角色的最新等級/職業等資訊同步給公會(向公會成員廣播更新)。委派至 CharacterSocialManager.guildUpdate()

      會對公會頻道發送封包,無公會時為無作用。

    • saveGuildStatus

      public void saveGuildStatus()
      將此角色的公會狀態(公會 ID/階級/貢獻值)寫回資料庫。委派至 CharacterSocialManager.saveGuildStatus()

      有資料庫寫入的副作用。

    • familyUpdate

      public void familyUpdate()
      將此角色的最新資訊同步給家族(向家族成員廣播更新)。委派至 CharacterSocialManager.familyUpdate()

      會對家族發送封包,無家族時為無作用。

    • saveFamilyStatus

      public void saveFamilyStatus()
      將此角色的家族狀態寫回資料庫。委派至 CharacterSocialManager.saveFamilyStatus()

      有資料庫寫入的副作用。

    • modifyCSPoints

      public void modifyCSPoints(int type, int quantity)
      調整現金商城點數(不顯示提示訊息)。

      等同呼叫 modifyCSPoints(int, int, boolean) 並將 show 設為 false

      Parameters:
      type - 點數類型:0=樂豆點數(acash),1=楓葉點數(maplepoints)
      quantity - 增減量,可為負值
    • modifyCSPoints

      public void modifyCSPoints(int type, int quantity, boolean show)
      調整現金商城點數,並可選擇是否在聊天視窗顯示增減提示。

      若調整後點數會變為負值,則放棄此次調整(視為已達上限/不足),必要時送出提示訊息後直接返回。 否則更新對應的點數欄位。當 showtruequantity != 0 時, 向玩家發送一則獲得/損失點數的訊息。

      Parameters:
      type - 點數類型:0=樂豆點數(acash),1=楓葉點數(maplepoints)
      quantity - 增減量,可為負值
      show - 是否在聊天視窗顯示增減提示
    • getCSPoints

      public int getCSPoints(int type)
      取得指定類型的現金商城點數餘額。
      Parameters:
      type - 點數類型:0=樂豆點數(acash),1=楓葉點數(maplepoints)
      Returns:
      對應類型的點數餘額;類型無效時回傳 0
    • setCData

      public void setCData(int questid, int points)
      將指定點數「累加」到某任務的自訂資料(customData)欄位上。

      若該任務記錄已有自訂資料,則解析為整數後加上 points 再寫回; 首次設定時直接寫入 points。會在必要時新增該任務記錄。

      Parameters:
      questid - 任務 ID
      points - 欲累加的點數
    • getCData

      public int getCData(MapleCharacter sai, int questid)
      讀取指定角色某任務自訂資料(customData)欄位的整數值。
      Parameters:
      sai - 欲查詢的目標角色
      questid - 任務 ID
      Returns:
      自訂資料解析後的整數值;尚未設定時回傳 0
    • hasEquipped

      public final boolean hasEquipped(int itemid)
      判斷角色是否已穿戴指定道具。
      Parameters:
      itemid - 道具 ID
      Returns:
      已穿戴(在 EQUIPPED 欄位中至少有一件)時為 true
    • haveItem

      public final boolean haveItem(int itemid, int quantity, boolean checkEquipped, boolean greaterOrEquals)
      判斷角色背包中是否持有指定數量的道具。

      若角色目前正在與 NPC 對話(getNpcNow() != 0),會額外做防外掛檢查: 數量小於等於 0、或道具代碼不存在時,記錄漏洞日誌、送出 CWvsContext.enableActions() 並回傳 false。對 EQUIP 類道具,checkEquipped 為真時會把已穿戴的件數一併計入。

      Parameters:
      itemid - 道具 ID
      quantity - 欲檢查的數量
      checkEquipped - EQUIP 類道具是否將已穿戴件數計入
      greaterOrEquals - true=持有量「大於等於」即通過;false=必須「剛好等於」
      Returns:
      符合條件時為 true
    • haveItem

      public final boolean haveItem(int itemid, int quantity)
      判斷角色是否持有「至少」指定數量的道具(含已穿戴件數)。

      等同 haveItem(int, int, boolean, boolean) 並將後兩參數皆設為 true

      Parameters:
      itemid - 道具 ID
      quantity - 欲檢查的數量
      Returns:
      持有量大於等於 quantity 時為 true
    • haveItem

      public final boolean haveItem(int itemid)
      判斷角色是否持有指定道具(至少一件,含已穿戴件數)。

      等同 haveItem(int, int, boolean, boolean) 並以數量 1、後兩參數皆 true 呼叫。

      Parameters:
      itemid - 道具 ID
      Returns:
      至少持有一件時為 true
    • dropNPC

      public void dropNPC(String message)
      以預設 NPC(9010000)的口吻向此角色發送一段對話訊息。

      向自身 client 送出 NPCPacket.getNPCTalk(int, byte, String, String, byte) 封包。

      Parameters:
      message - 要顯示的訊息文字
    • dropNPC

      public void dropNPC(int npc, String message)
      以指定 NPC 的口吻向此角色發送一段對話訊息。

      向自身 client 送出 NPCPacket.getNPCTalk(int, byte, String, String, byte) 封包。

      Parameters:
      npc - 發話的 NPC ID
      message - 要顯示的訊息文字
    • changeSkillLevel

      public void changeSkillLevel(Skill skill, byte newLevel, byte newMasterlevel)
      變更單一技能的等級與精通等級(不設過期時間)。

      將該技能包裝為單筆 SkillEntry(過期時間與到期等級為 -1), 透過 changeSkillLevel_Skip(Map, boolean) 寫入(writetrue,會持久化)。

      Parameters:
      skill - 欲變更的技能
      newLevel - 新的技能等級
      newMasterlevel - 新的精通(master)等級
    • getDebugMessage

      public boolean getDebugMessage()
      取得是否開啟一般除錯訊息。
      Returns:
      已開啟時為 true
    • setDebugMessage

      public void setDebugMessage(boolean control)
      設定是否開啟一般除錯訊息。
      Parameters:
      control - true 開啟、false 關閉
    • getHackMessage

      public boolean getHackMessage()
      取得是否開啟外掛偵測訊息。
      Returns:
      已開啟時為 true
    • setHackMessage

      public void setHackMessage(boolean control)
      設定是否開啟外掛偵測訊息。
      Parameters:
      control - true 開啟、false 關閉
    • getWalkDebugMessage

      public boolean getWalkDebugMessage()
      取得是否開啟移動(walk)除錯訊息。
      Returns:
      已開啟時為 true
    • setWalkDebugMessage

      public void setWalkDebugMessage(boolean x)
      設定是否開啟移動(walk)除錯訊息。
      Parameters:
      x - true 開啟、false 關閉
    • getAttackDebugMessage

      public boolean getAttackDebugMessage()
      取得是否開啟攻擊(attack)除錯訊息。
      Returns:
      已開啟時為 true
    • setAttackDebugMessage

      public void setAttackDebugMessage(boolean x)
      設定是否開啟攻擊(attack)除錯訊息。
      Parameters:
      x - true 開啟、false 關閉
    • isCygnus

      public boolean isCygnus()
      判斷角色是否為皇家騎士團(Cygnus)職業。
      Returns:
      職業 ID 落在 1000–1512 區間時為 true
    • isKOC

      public boolean isKOC()
      判斷角色是否屬於騎士團(Knights of Cygnus)職業群。
      Returns:
      職業 ID 落在 1000–1999 區間時為 true
    • isAdventurer

      public boolean isAdventurer()
      判斷角色是否為冒險家(Adventurer)職業。
      Returns:
      職業 ID 落在 0–999 區間時為 true
    • isAran

      public boolean isAran()
      判斷角色是否為戰神(Aran)職業。
      Returns:
      職業 ID 為 2000 或落在 2100–2112 區間時為 true
    • isPirate

      public boolean isPirate()
      判斷角色是否為海盜(Pirate)系職業,含冒險家海盜與皇家騎士團的暴風使者。
      Returns:
      職業 ID 落在 500–522 或 1500–1512 區間時為 true
    • isThief

      public boolean isThief()
      判斷角色是否為盜賊(Thief)系職業,含冒險家盜賊與皇家騎士團的夜行者。
      Returns:
      職業 ID 落在 400–422 或 1400–1412 區間時為 true
    • isBowman

      public boolean isBowman()
      判斷角色是否為弓箭手(Bowman)系職業,含冒險家、皇家騎士團與覺醒者的弓系職業。
      Returns:
      職業 ID 落在 300–322、1300–1312 或 3300–3312 區間時為 true
    • isMage

      public boolean isMage()
      判斷角色是否為法師(Mage)系職業,含冒險家、皇家騎士團、覺醒者與 22xx 系列法師。
      Returns:
      職業 ID 落在 200–232、1200–1212、3200–3212,或百位為 22 時為 true
    • isWarrior

      public boolean isWarrior()
      判斷角色是否為劍士(Warrior)系職業,含冒險家、皇家騎士團與戰神的近戰職業。
      Returns:
      職業 ID 落在 100–132、1100–1112 或 2100–2112 區間時為 true
    • getAllLinksummon

      public List<MapleSummon> getAllLinksummon()
      取得此角色所有連結召喚獸(link summon)的清單。
      Returns:
      連結召喚獸清單(回傳內部清單本身)
    • addLinksummon

      public void addLinksummon(MapleSummon x)
      將一個連結召喚獸加入此角色的清單。
      Parameters:
      x - 要加入的 MapleSummon
    • removeLinksummon

      public void removeLinksummon(MapleSummon x)
      從此角色的清單中移除指定的連結召喚獸。

      清單為空時不做任何事。

      Parameters:
      x - 要移除的 MapleSummon
    • getBuddyCapacity

      public byte getBuddyCapacity()
      取得好友名單的容量上限。委派至 CharacterSocialManager.getBuddyCapacity()
      Returns:
      好友名單容量
    • setBuddyCapacity

      public void setBuddyCapacity(byte capacity)
      設定好友名單的容量上限。委派至 CharacterSocialManager.setBuddyCapacity(byte)
      Parameters:
      capacity - 新的好友名單容量
    • getMessenger

      public MapleMessenger getMessenger()
      取得此角色目前所在的聊天室(messenger)。委派至 CharacterSocialManager.getMessenger()
      Returns:
      MapleMessenger,未加入聊天室時可能為 null
    • setMessenger

      public void setMessenger(MapleMessenger messenger)
      設定此角色目前所在的聊天室(messenger)。委派至 CharacterSocialManager.setMessenger(MapleMessenger)
      Parameters:
      messenger - 新的聊天室,可為 null 表示離開
    • addCooldown

      public void addCooldown(int skillId, long startTime, long length)
      為指定技能加入冷卻時間。委派至 CharacterCooldownDiseaseManager.addCooldown(int, long, long)
      Parameters:
      skillId - 技能 ID
      startTime - 冷卻起算時間(毫秒)
      length - 冷卻持續時間(毫秒)
    • removeCooldown

      public void removeCooldown(int skillId)
      移除指定技能的冷卻時間。委派至 CharacterCooldownDiseaseManager.removeCooldown(int)
      Parameters:
      skillId - 技能 ID
    • skillisCooling

      public boolean skillisCooling(int skillId)
      判斷指定技能是否正在冷卻中。委派至 CharacterCooldownDiseaseManager.skillisCooling(int)
      Parameters:
      skillId - 技能 ID
      Returns:
      冷卻中時為 true
    • giveCoolDowns

      public void giveCoolDowns(int skillid, long starttime, long length)
      賦予指定技能冷卻並送出對應封包。委派至 CharacterCooldownDiseaseManager.giveCoolDowns(int, long, long)
      Parameters:
      skillid - 技能 ID
      starttime - 冷卻起算時間(毫秒)
      length - 冷卻持續時間(毫秒)
    • giveCoolDowns

      public void giveCoolDowns(List<MapleCoolDownValueHolder> cooldowns)
      由冷卻資料清單批次還原技能冷卻(多用於登入時還原)。委派至 CharacterCooldownDiseaseManager.giveCoolDowns(List)
      Parameters:
      cooldowns - 冷卻資料清單
    • getCooldownSize

      public int getCooldownSize()
      取得目前處於冷卻中的技能數量。委派至 CharacterCooldownDiseaseManager.getCooldownSize()
      Returns:
      冷卻中的技能數量
    • getcheck_FishingVip

      public boolean getcheck_FishingVip()
      取得釣魚 VIP 狀態旗標。
      Returns:
      具備釣魚 VIP 時為 true
    • setcheck_FishingVip

      public void setcheck_FishingVip(boolean x)
      設定釣魚 VIP 狀態旗標。
      Parameters:
      x - true 表示具備釣魚 VIP
    • getDiseaseSize

      public int getDiseaseSize()
      取得目前生效中的異常狀態(debuff)數量。委派至 CharacterCooldownDiseaseManager.getDiseaseSize()
      Returns:
      異常狀態的數量
    • getCooldowns

      public List<MapleCoolDownValueHolder> getCooldowns()
      取得目前所有技能冷卻的持有資料清單。委派至 CharacterCooldownDiseaseManager.getCooldowns()
      Returns:
      冷卻資料持有物件的清單
    • getAllDiseases

      public final List<MapleDiseaseValueHolder> getAllDiseases()
      取得目前所有異常狀態(debuff)的持有資料清單。委派至 CharacterCooldownDiseaseManager.getAllDiseases()
      Returns:
      異常狀態資料持有物件的清單
    • hasDisease

      public final boolean hasDisease(MapleDisease dis)
      判斷本角色是否正受指定異常狀態影響。委派至 CharacterCooldownDiseaseManager.hasDisease(MapleDisease)
      Parameters:
      dis - 要查詢的異常狀態
      Returns:
      若該異常狀態生效中則為 true
    • giveDebuff

      public void giveDebuff(MapleDisease disease, MobSkill skill)
      依怪物技能對本角色施加異常狀態(debuff)。委派至 CharacterCooldownDiseaseManager.giveDebuff(MapleDisease, MobSkill)
      Parameters:
      disease - 要施加的異常狀態
      skill - 造成此異常狀態的怪物技能
    • giveDebuff

      public void giveDebuff(MapleDisease disease, int x, long duration, int skillid, int level)
      以明確參數對本角色施加異常狀態(debuff)。委派至 CharacterCooldownDiseaseManager.giveDebuff(MapleDisease, MobSkill)
      Parameters:
      disease - 要施加的異常狀態
      x - 異常狀態的效果數值
      duration - 持續時間(毫秒)
      skillid - 造成此異常狀態的技能編號
      level - 技能等級
    • giveSilentDebuff

      public final void giveSilentDebuff(List<MapleDiseaseValueHolder> ld)
      靜默地(不發送特效封包)還原一批異常狀態,通常用於換頻或重新登入時重建狀態。委派至 CharacterCooldownDiseaseManager.giveSilentDebuff(List)
      Parameters:
      ld - 要還原的異常狀態資料清單
    • dispelDebuff

      public void dispelDebuff(MapleDisease debuff)
      解除指定的單一異常狀態(debuff)。委派至 CharacterCooldownDiseaseManager.dispelDebuff(MapleDisease)
      Parameters:
      debuff - 要解除的異常狀態
    • dispelDebuffs

      public void dispelDebuffs()
      解除所有可解除的異常狀態(debuff)。委派至 CharacterCooldownDiseaseManager.dispelDebuffs()
    • cancelAllDebuffs

      public void cancelAllDebuffs()
      取消本角色身上所有的異常狀態(debuff),不論是否原本可解除。委派至 CharacterCooldownDiseaseManager.cancelAllDebuffs()
    • sendNote

      public void sendNote(String to, String msg)
      以本角色名義寄送一封不含名聲贈禮的便箋給指定收件者。

      委派至 sendNote(String, String, int),名聲值固定為 0

      Parameters:
      to - 收件者角色名稱
      msg - 便箋內容
    • sendNote

      public void sendNote(String to, String msg, int fame)
      以本角色名義寄送一封便箋給指定收件者,並可附帶名聲贈禮。

      委派至 MapleCharacterUtil.sendNote(String, String, String, int),寄件者為本角色名稱。便箋會寫入資料庫 notes 資料表。

      Parameters:
      to - 收件者角色名稱
      msg - 便箋內容
      fame - 隨便箋附贈的名聲值
    • showNote

      public void showNote()
      查詢資料庫中寄給本角色的所有便箋,並將便箋列表封包傳送給本角色用戶端。

      讀取 notes 資料表(依收件者名稱),統計筆數後送出 MTSCSPacket.showNotes(ResultSet, int)。 發生 SQLException 時僅記錄錯誤、不向上拋出。

    • deleteNote

      public void deleteNote(int id, int fame)
      刪除指定的便箋;若該便箋附有名聲贈禮且金額相符,則同時為本角色加上名聲。

      先查詢 notes 資料表確認贈禮金額,符合(且 fame > 0)時呼叫 addFame(int)updateSingleStat(MapleStat, int) 並送出 InfoPacket.getShowFameGain(int), 接著從資料表刪除該便箋。發生 SQLException 時僅記錄錯誤、不向上拋出。

      Parameters:
      id - 便箋的資料庫主鍵
      fame - 用戶端宣告的贈禮名聲值,須與資料庫紀錄相符才會發放(防止外掛)
    • getDojoMode

      public MapleCharacter.DojoMode getDojoMode()
      取得本角色目前的武陵道場挑戰模式。
      Returns:
      目前的 MapleCharacter.DojoMode
    • setDojoMode

      public void setDojoMode(MapleCharacter.DojoMode mode)
      設定本角色目前的武陵道場挑戰模式。
      Parameters:
      mode - 要設定的 MapleCharacter.DojoMode
    • getDojoMode

      public MapleCharacter.DojoMode getDojoMode(int mode)
      依整數代碼查詢對應的武陵道場挑戰模式。
      Parameters:
      mode - 模式代碼(簡單=0、普通=1、困難=2、排名=3、無=4)
      Returns:
      對應的 MapleCharacter.DojoMode;若無相符者則回傳 null
    • getMulungEnergy

      public int getMulungEnergy()
      取得本角色目前的武陵道場能量值。
      Returns:
      武陵道場能量值(0–10000)
    • mulung_EnergyModify

      public void mulung_EnergyModify(boolean inc)
      調整本角色的武陵道場能量值,並即時將新數值以封包傳送給用戶端。

      增加時每次 +100、上限封頂於 10000;非增加時直接歸零。隨後送出 CWvsContext.MulungEnergy(int)

      Parameters:
      inc - true 表示增加能量,false 表示歸零
    • writeMulungEnergy

      public void writeMulungEnergy()
      將本角色目前的武陵道場能量值以封包重新傳送給用戶端(不更動數值)。

      送出 CWvsContext.MulungEnergy(int)

    • writeEnergy

      public void writeEnergy(String type, String inc)
      向用戶端傳送金字塔(PQ)能量更新封包。

      送出 CWvsContext.sendPyramidEnergy(String, String)

      Parameters:
      type - 能量類型字串
      inc - 能量增減字串
    • writeStatus

      public void writeStatus(String type, String inc)
      向用戶端傳送幽靈船(Ghost)狀態更新封包。

      送出 CWvsContext.sendGhostStatus(String, String)

      Parameters:
      type - 狀態類型字串
      inc - 狀態增減字串
    • writePoint

      public void writePoint(String type, String inc)
      向用戶端傳送幽靈船(Ghost)分數更新封包。

      送出 CWvsContext.sendGhostPoint(String, String)

      Parameters:
      type - 分數類型字串
      inc - 分數增減字串
    • getCombo

      public final short getCombo()
      取得本角色目前的連擊(Combo)計數。
      Returns:
      連擊計數
    • setCombo

      public void setCombo(short combo)
      設定本角色目前的連擊(Combo)計數。
      Parameters:
      combo - 要設定的連擊計數
    • getLastCombo

      public final long getLastCombo()
      取得上次連擊的時間戳記。
      Returns:
      上次連擊的時間(毫秒)
    • setLastCombo

      public void setLastCombo(long combo)
      設定上次連擊的時間戳記。
      Parameters:
      combo - 上次連擊的時間(毫秒)
    • getKeyDownSkill_Time

      public final long getKeyDownSkill_Time()
      取得上次施放長按蓄力技能的時間戳記。
      Returns:
      長按技能的時間(毫秒)
    • setKeyDownSkill_Time

      public void setKeyDownSkill_Time(long keydown_skill)
      設定上次施放長按蓄力技能的時間戳記。
      Parameters:
      keydown_skill - 長按技能的時間(毫秒)
    • checkBerserk

      public void checkBerserk()
      檢查並更新狂戰士「狂暴(Berserk)」被動的觸發狀態。

      僅對職業 132(英雄/狂戰士)生效,且距上次觸發須超過 10 秒。依目前 HP 是否低於技能門檻 決定 stats.Berserk,並向本角色與同地圖玩家廣播狂暴特效封包 (EffectPacket.showOwnBuffEffect(int, int, int, int) / EffectPacket.showBuffeffect(int, int, int, int, int))。 此被動不使用 WorldTimer,而是於攻擊時被動檢查。

    • getChalkboard

      public String getChalkboard()
      取得本角色目前的黑板(小黑板)文字內容。
      Returns:
      黑板文字,可能為 null
    • setChalkboard

      public void setChalkboard(String text)
      設定本角色的黑板(小黑板)文字內容,並向同地圖玩家廣播。

      ServerConstants.log_chalkboard 啟用,會將使用紀錄寫入記錄檔; 隨後向同地圖玩家廣播 MTSCSPacket.useChalkboard(int, String)。傳入 null 或空字串通常代表收起黑板。

      Parameters:
      text - 要顯示的黑板文字,可為 null
    • getMount

      public MapleMount getMount()
      取得本角色的座騎(騎寵)物件。
      Returns:
      座騎物件,可能為 null
    • getWishlist

      public int[] getWishlist()
      取得本角色的商城願望清單(固定長度 10 的道具編號陣列)。
      Returns:
      願望清單陣列
    • setWishlist

      public void setWishlist(int[] wl)
      設定本角色的商城願望清單,並標記為需存檔。
      Parameters:
      wl - 新的願望清單陣列
    • clearWishlist

      public void clearWishlist()
      清空本角色的商城願望清單(10 個欄位皆歸零),並標記為需存檔。
    • getWishlistSize

      public int getWishlistSize()
      計算願望清單中已填入的道具數量。
      Returns:
      願望清單中大於 0 的項目數
    • getRocks

      public int[] getRocks()
      取得本角色的城市傳送石(Teleport Rock)地圖清單(固定長度 10 的地圖編號陣列)。
      Returns:
      傳送石地圖編號陣列;未使用的欄位以 999999999 表示
    • getRockSize

      public int getRockSize()
      計算城市傳送石中已登錄的地圖數量。
      Returns:
      已登錄的地圖數(陣列中不等於 999999999 的項目數)
    • deleteFromRocks

      public void deleteFromRocks(int map)
      從城市傳送石中移除指定地圖(找到第一個相符即停止),並標記為需存檔。
      Parameters:
      map - 要移除的地圖編號
    • addRockMap

      public void addRockMap()
      將本角色目前所在地圖加入城市傳送石清單,並標記為需存檔。

      若清單已滿(10 個)則不做任何事。

    • isRockMap

      public boolean isRockMap(int id)
      判斷指定地圖是否已登錄於城市傳送石清單中。
      Parameters:
      id - 要查詢的地圖編號
      Returns:
      若已登錄則為 true
    • getRegRocks

      public int[] getRegRocks()
      取得本角色的特殊(記憶)傳送石地圖清單(固定長度 5 的地圖編號陣列)。
      Returns:
      特殊傳送石地圖編號陣列;未使用的欄位以 999999999 表示
    • getRegRockSize

      public int getRegRockSize()
      計算特殊(記憶)傳送石中已登錄的地圖數量。
      Returns:
      已登錄的地圖數(陣列中不等於 999999999 的項目數)
    • deleteFromRegRocks

      public void deleteFromRegRocks(int map)
      從特殊(記憶)傳送石中移除指定地圖(找到第一個相符即停止),並標記為需存檔。
      Parameters:
      map - 要移除的地圖編號
    • addRegRockMap

      public void addRegRockMap()
      將本角色目前所在地圖加入特殊(記憶)傳送石清單,並標記為需存檔。

      若清單已滿(5 個)則不做任何事。

    • isRegRockMap

      public boolean isRegRockMap(int id)
      判斷指定地圖是否已登錄於特殊(記憶)傳送石清單中。
      Parameters:
      id - 要查詢的地圖編號
      Returns:
      若已登錄則為 true
    • getHyperRocks

      public int[] getHyperRocks()
      取得本角色的高級(VIP)傳送石地圖清單(固定長度 13 的地圖編號陣列)。
      Returns:
      高級傳送石地圖編號陣列;未使用的欄位以 999999999 表示
    • getHyperRockSize

      public int getHyperRockSize()
      計算高級(VIP)傳送石中已登錄的地圖數量。
      Returns:
      已登錄的地圖數(陣列中不等於 999999999 的項目數)
    • deleteFromHyperRocks

      public void deleteFromHyperRocks(int map)
      從高級(VIP)傳送石中移除指定地圖(找到第一個相符即停止),並標記為需存檔。
      Parameters:
      map - 要移除的地圖編號
    • addHyperRockMap

      public void addHyperRockMap()
      將本角色目前所在地圖加入高級(VIP)傳送石清單,並標記為需存檔。

      滿載檢查目前沿用 getRegRockSize()(須 < 13);通過後寫入 getHyperRockSize() 指向的空欄位。

    • isHyperRockMap

      public boolean isHyperRockMap(int id)
      判斷指定地圖是否已登錄於高級(VIP)傳送石清單中。
      Parameters:
      id - 要查詢的地圖編號
      Returns:
      若已登錄則為 true
    • getLastRes

      public List<LifeMovementFragment> getLastRes()
      取得本角色最後一次的移動軌跡片段清單(用於同步移動)。
      Returns:
      最後的移動片段清單,可能為 null
    • setLastRes

      public void setLastRes(List<LifeMovementFragment> lastres)
      設定本角色最後一次的移動軌跡片段清單。
      Parameters:
      lastres - 要儲存的移動片段清單
    • dropDebugMessage

      public void dropDebugMessage(String msg)
      僅在本角色已開啟除錯訊息時,以系統訊息(type 6)向其用戶端輸出除錯文字。

      是否輸出取決於 getDebugMessage()

      Parameters:
      msg - 要顯示的除錯訊息
    • dropMessage

      public void dropMessage(String message)
      以預設的系統訊息類型(type 6)向本角色用戶端輸出一則文字訊息。

      委派至 dropMessage(int, String)

      Parameters:
      message - 要顯示的訊息文字
    • dropMessage

      public void dropMessage(int type, String message)
      依指定類型向本角色用戶端輸出一則訊息封包。

      負值對應特殊顯示通道:-1 畫面上方訊息、-2 商店聊天、-3/-4 一般聊天框(顯示/隱藏)、 -5/-6 系統公告(粉紅/白底)、-7/-8 畫面中央訊息;其餘(正值)則作為 serverNotice 的訊息類型。

      Parameters:
      type - 訊息類型;負值對應上述特殊通道,其餘透過 CWvsContext.serverNotice(int, String) 送出
      message - 要顯示的訊息文字
    • showInfo

      public void showInfo(String caption, boolean pink, String msg)
      以畫面上方訊息(type -1)向本角色顯示一則資訊,可選擇加上方括號標題前綴。

      caption 非空時,訊息會被包裝成「[caption] msg」形式後送出。 注意:區域變數 type 在此方法中計算後並未實際使用,最終一律以 type -1 送出。

      Parameters:
      caption - 標題前綴,可為 null 或空字串表示不加前綴
      pink - 是否以粉紅樣式顯示(僅影響已停用的內部 type 計算)
      msg - 要顯示的訊息文字
    • getPlayerShop

      public IMaplePlayerShop getPlayerShop()
      取得本角色目前開設或互動中的玩家商店/交易室物件。
      Returns:
      玩家商店物件,可能為 null
    • setPlayerShop

      public void setPlayerShop(IMaplePlayerShop playerShop)
      設定本角色目前開設或互動中的玩家商店/交易室物件。
      Parameters:
      playerShop - 玩家商店物件,可為 null 表示離開
    • getConversation

      public int getConversation()
      取得本角色目前正在對話的 NPC 對話實例編號。
      Returns:
      對話實例編號(0 表示無對話進行中)
    • setConversation

      public void setConversation(int inst)
      設定本角色目前正在對話的 NPC 對話實例編號。
      Parameters:
      inst - 對話實例編號(0 表示清除對話狀態)
    • getDirection

      public int getDirection()
      取得本角色的對話方向狀態值。
      Returns:
      方向狀態值
    • setDirection

      public void setDirection(int inst)
      設定本角色的對話方向狀態值。
      Parameters:
      inst - 方向狀態值
    • getCarnivalParty

      public MapleCarnivalParty getCarnivalParty()
      取得本角色所屬的怪物嘉年華隊伍。
      Returns:
      嘉年華隊伍物件,可能為 null
    • setCarnivalParty

      public void setCarnivalParty(MapleCarnivalParty party)
      設定本角色所屬的怪物嘉年華隊伍。
      Parameters:
      party - 嘉年華隊伍物件,可為 null 表示離開隊伍
    • addCP

      public void addCP(int ammount)
      增加嘉年華點數(CP)。

      同時累加總點數與可用點數。

      Parameters:
      ammount - 要增加的點數
    • useCP

      public void useCP(int ammount)
      消耗指定數量的可用嘉年華點數(CP)。
      Parameters:
      ammount - 要消耗的點數
    • getAvailableCP

      public int getAvailableCP()
      取得目前可用的嘉年華點數(CP)。
      Returns:
      可用 CP
    • getTotalCP

      public int getTotalCP()
      取得累計獲得的嘉年華總點數(CP)。
      Returns:
      總 CP
    • resetCP

      public void resetCP()
      重設嘉年華點數,將總點數與可用點數歸零。
    • reloadC

      public void reloadC()
      重新整理角色在當前地圖的顯示資料。

      先向自身連線送出角色資訊封包,再將玩家自地圖移除後重新加入, 以刷新其他玩家對本角色的可見狀態。

    • addCarnivalRequest

      public void addCarnivalRequest(MapleCarnivalChallenge request)
      新增一筆怪物嘉年華挑戰請求至待處理佇列。
      Parameters:
      request - 嘉年華挑戰請求
    • getNextCarnivalRequest

      public final MapleCarnivalChallenge getNextCarnivalRequest()
      取出並移除下一筆待處理的嘉年華挑戰請求。
      Returns:
      佇列尾端的挑戰請求;若佇列為空則回傳 null
    • clearCarnivalRequests

      public void clearCarnivalRequests()
      清空所有待處理的嘉年華挑戰請求。
    • startMonsterCarnival

      public void startMonsterCarnival(int enemyavailable, int enemytotal)
      向自身連線送出開始怪物嘉年華的封包。
      Parameters:
      enemyavailable - 敵方可用怪物數
      enemytotal - 敵方怪物總數
    • CPUpdate

      public void CPUpdate(boolean party, int available, int total, int team)
      向自身連線送出嘉年華點數(CP)更新封包。
      Parameters:
      party - 是否為隊伍層級的更新
      available - 可用 CP
      total - 總 CP
      team - 隊伍編號
    • playerDiedCPQ

      public void playerDiedCPQ(String name, int lostCP, int team)
      向自身連線送出嘉年華玩家陣亡(扣除 CP)的提示封包。
      Parameters:
      name - 陣亡玩家名稱
      lostCP - 損失的 CP
      team - 隊伍編號
    • setAchievementFinished

      public void setAchievementFinished(int id)
      將指定成就標記為已完成。

      若該成就尚未記錄,會加入已完成清單並設定變更旗標以待存檔; 此方法僅更新狀態,不發送完成獎勵或封包。

      Parameters:
      id - 成就 ID
    • achievementFinished

      public boolean achievementFinished(int achievementid)
      查詢指定成就是否已完成。
      Parameters:
      achievementid - 成就 ID
      Returns:
      已完成回傳 true
    • finishAchievement

      public void finishAchievement(int id)
      完成指定成就並發放對應獎勵。

      僅在成就尚未完成、角色存活且非分身時,委派 MapleAchievements 執行完成流程(可能發放獎勵、送出封包)。

      Parameters:
      id - 成就 ID
    • getFinishedAchievements

      public List<Integer> getFinishedAchievements()
      取得本角色已完成的成就 ID 清單(回傳內部清單實體)。
      Returns:
      已完成成就 ID 的清單
    • getCanTalk

      public boolean getCanTalk()
      查詢本角色目前是否允許交談(與 NPC/聊天互動)。
      Returns:
      允許交談回傳 true
    • canTalk

      public void canTalk(boolean talk)
      設定本角色是否允許交談。
      Parameters:
      talk - true 允許交談、false 禁止
    • getEXPMod

      public double getEXPMod()
      取得本角色的經驗值加成倍率。
      Returns:
      經驗加成倍率
    • getDropMod

      public int getDropMod()
      取得本角色的掉寶率加成。
      Returns:
      掉寶率加成
    • getCashMod

      public int getCashMod()
      取得本角色的商城點數加成。
      Returns:
      商城點數加成
    • getPoints

      public int getPoints()
      取得本角色帳號的點數(自資料庫讀取)。
      Returns:
      帳號點數
      See Also:
    • setPoints

      public void setPoints(int p)
      將指定點數寫入本角色帳號(更新 accounts.points 資料表欄位)。

      有副作用:直接執行 DB 更新;連線或執行失敗時僅記錄錯誤而不拋出例外。

      Parameters:
      p - 要寫入的點數值
    • getPoints

      public int getPoints(MapleCharacter chr)
      讀取指定角色帳號的點數(自 accounts.points 資料表欄位查詢)。

      有副作用:執行 DB 查詢。內含重試機制——讀取失敗時最多重試 10 次, 每次間隔 500 毫秒(重試期間會 Thread.sleep 阻塞當前執行緒); 查詢或連線失敗時僅記錄錯誤而不拋出例外。

      Parameters:
      chr - 要查詢點數的角色
      Returns:
      帳號點數;多次重試後仍失敗則回傳 0
    • getVPoints

      public int getVPoints()
      取得本角色的 V 點(投票點數)。
      Returns:
      V 點數
    • setVPoints

      public void setVPoints(int p)
      設定本角色的 V 點(投票點數)。
      Parameters:
      p - V 點數
    • getCashInventory

      public CashShop getCashInventory()
      取得本角色的商城(CashShop)物品庫存。
      Returns:
      商城庫存物件
    • removeItem

      public void removeItem(int id, int quantity)
      自背包移除指定數量的道具,並送出物品變動提示封包。

      有副作用:透過 MapleInventoryManipulator.removeById(MapleClient, MapleInventoryType, int, int, boolean, boolean) 變更背包狀態, 並向自身連線送出物品獲得(負數量)提示。

      Parameters:
      id - 道具 ID
      quantity - 要移除的數量
    • removeAll

      public void removeAll(int id)
      移除背包中所有指定 ID 的道具(不顯示提示)。
      Parameters:
      id - 道具 ID
      See Also:
    • removeAll

      public void removeAll(int id, boolean show)
      移除背包中所有指定 ID 的道具。
      Parameters:
      id - 道具 ID
      show - 是否顯示移除提示
      See Also:
    • removeAll

      public void removeAll(int id, boolean show, boolean equip)
      移除背包中所有指定 ID 的道具,並選擇性顯示移除提示。

      有副作用:依據道具 ID 推斷的背包類型,透過 MapleInventoryManipulator.removeById(MapleClient, MapleInventoryType, int, int, boolean, boolean) 移除全部持有數量; 當 showtrue 且確有移除時向自身連線送出提示封包。

      Parameters:
      id - 道具 ID
      show - 是否顯示移除提示
      equip - 是否一併處理裝備(保留參數)
    • getRings

      public Triple<List<MapleRing>, List<MapleRing>, List<MapleRing>> getRings(boolean equip)
      蒐集本角色身上的戒指,依類型分組並排序回傳。

      掃描已裝備(MapleInventoryType.EQUIPPED)的裝備,找出帶有戒指的項目, 依情侶戒(crush)/友情戒(friendship)/婚戒(marriage)分為三類; 當 equiptrue 時額外納入背包(MapleInventoryType.EQUIP)中的戒指, 否則每類僅取首枚。各類清單以 MapleRing.RingComparator 排序。

      Parameters:
      equip - true 含背包內戒指(並標記裝備狀態);false 僅取已裝備且每類首枚
      Returns:
      三元組,依序為情侶戒、友情戒、婚戒清單
    • getFH

      public int getFH()
      取得本角色目前所在位置正下方的腳架(foothold)ID。
      Returns:
      正下方腳架的 ID;若該處無腳架則回傳 0
    • startFairySchedule

      public void startFairySchedule(boolean exp)
      啟動精靈吊墜的每小時加成排程。
      Parameters:
      exp - 是否同時重設累積的精靈經驗加成
      See Also:
    • startFairySchedule

      public void startFairySchedule(boolean exp, boolean equipped)
      啟動精靈吊墜的每小時加成排程。

      視情況先取消既有排程並重設加成;若目前加成為零則以裝備的精靈值初始化, 並在尚未達上限(裝備值的 3 倍)時向自身送出提示訊息,最後更新計時起點。

      Parameters:
      exp - 是否重設精靈經驗加成(未裝備精靈時亦會重設)
      equipped - 是否因裝備精靈而觸發,用於決定是否顯示提示訊息
    • canFairy

      public final boolean canFairy(long now)
      判斷精靈吊墜的每小時加成是否到期可再次觸發(僅讀取,不更新狀態)。
      Parameters:
      now - 目前時間(毫秒)
      Returns:
      距上次觸發已滿一小時則回傳 true
    • canHP

      public final boolean canHP(long now)
      判斷距上次 HP 計時是否已逾 5 秒;若是則更新計時並回傳允許。

      有副作用:通過時會將 HP 計時更新為 now

      Parameters:
      now - 目前時間(毫秒)
      Returns:
      允許回傳 true
    • canMP

      public final boolean canMP(long now)
      判斷距上次 MP 計時是否已逾 5 秒;若是則更新計時並回傳允許。

      有副作用:通過時會將 MP 計時更新為 now

      Parameters:
      now - 目前時間(毫秒)
      Returns:
      允許回傳 true
    • canHPRecover

      public final boolean canHPRecover(long now)
      判斷是否到達 HP 自動回復間隔;若是則更新計時並回傳允許。

      依角色的 HP 回復間隔(stats.hpRecoverTime)判定;有副作用: 通過時會將 HP 計時更新為 now

      Parameters:
      now - 目前時間(毫秒)
      Returns:
      可回復回傳 true
    • canMPRecover

      public final boolean canMPRecover(long now)
      判斷是否到達 MP 自動回復間隔;若是則更新計時並回傳允許。

      依角色的 MP 回復間隔(stats.mpRecoverTime)判定;有副作用: 通過時會將 MP 計時更新為 now

      Parameters:
      now - 目前時間(毫秒)
      Returns:
      可回復回傳 true
    • canTrade

      public final boolean canTrade()
      交易頻率閘門:更新最後交易時間並回傳是否允許交易。

      有副作用:每次呼叫都會將最後交易時間更新為目前時間。目前的 500 毫秒間隔限制已被註解停用,故恆回傳 true

      Returns:
      恆為 true
    • cancelFairySchedule

      public void cancelFairySchedule(boolean exp)
      取消精靈吊墜的加成排程。
      Parameters:
      exp - true 時一併將累積的精靈經驗加成歸零
    • doFairy

      public void doFairy()
      執行精靈吊墜每小時觸發效果。

      有多重副作用:在未達上限時提升精靈經驗加成並提示玩家;若有公會則為公會增加 公會點數(GP)並送出貢獻封包;提升意志(will)特性經驗;最後重新啟動精靈排程。

    • getFairyExp

      public byte getFairyExp()
      取得目前累積的精靈吊墜經驗加成百分比。
      Returns:
      精靈經驗加成
    • getTeam

      public int getTeam()
      取得本角色所屬的隊伍編號(用於椰子大賽等活動)。
      Returns:
      隊伍編號
    • setTeam

      public void setTeam(int v)
      設定本角色所屬的隊伍編號(用於椰子大賽等活動)。
      Parameters:
      v - 隊伍編號
    • spawnPet

      public void spawnPet(byte slot)
      召喚指定欄位的寵物。

      委派至 CharacterPetManager.spawnPet(byte)

      Parameters:
      slot - 寵物欄位索引
    • spawnPet

      public void spawnPet(byte slot, boolean lead)
      召喚指定欄位的寵物,並指定是否設為領隊寵物。

      委派至 CharacterPetManager.spawnPet(byte, boolean)

      Parameters:
      slot - 寵物欄位索引
      lead - 是否設為領隊寵物
    • spawnPet

      public void spawnPet(byte slot, boolean lead, boolean broadcast)
      召喚指定欄位的寵物,並指定領隊與是否向地圖廣播。

      委派至 CharacterPetManager.spawnPet(byte, boolean, boolean)

      Parameters:
      slot - 寵物欄位索引
      lead - 是否設為領隊寵物
      broadcast - 是否向地圖廣播召喚
    • clearLinkMid

      public void clearLinkMid()
      清空連結怪物(link monster)清單並取消相關 buff。

      有副作用:移除導引飛彈(HOMING_BEACON)與秘法瞄準(ARCANE_AIM)兩項 buff 效果。

    • getFirstLinkMid

      public int getFirstLinkMid()
      取得連結怪物清單中的第一個怪物 ID。
      Returns:
      第一個連結怪物 ID;清單為空則回傳 0
    • getAllLinkMid

      public Map<Integer,Integer> getAllLinkMid()
      取得連結怪物對應表(怪物 ID 對傷害增幅,回傳內部 Map 實體)。
      Returns:
      連結怪物對應表
    • setLinkMid

      public void setLinkMid(int lm, int x)
      設定(或更新)某連結怪物對應的傷害增幅。
      Parameters:
      lm - 連結怪物 ID
      x - 傷害增幅值
    • getDamageIncrease

      public int getDamageIncrease(int lm)
      取得指定連結怪物對應的傷害增幅。
      Parameters:
      lm - 連結怪物 ID
      Returns:
      該怪物的傷害增幅;無對應則回傳 0
    • isClone

      public boolean isClone()
      判斷本角色物件是否為分身(clone)。
      Returns:
      為分身回傳 true
    • setClone

      public void setClone(boolean c)
      設定本角色物件是否為分身(clone)。
      Parameters:
      c - true 標記為分身
    • getClones

      public WeakReference<MapleCharacter>[] getClones()
      取得本角色的分身弱參考陣列。
      Returns:
      分身的 WeakReference 陣列
    • cloneLooks

      public MapleCharacter cloneLooks()
      建立一個複製本角色外觀的分身角色物件。

      使用模擬連線(MockIOSession)與隨機產生的唯一 ID 建立新的 MapleCharacter,複製外觀、等級、職業、公會/聲望資訊與已裝備道具等狀態, 經驗/楓幣/能力點等則歸零並標記為分身。會持續遞增 ID 直到在當前地圖與頻道玩家儲存中 都不重複,最後將分身綁定回其模擬連線。

      Returns:
      新建立的分身角色物件
    • cloneLook

      public final void cloneLook()
      在地圖上生成一個複製本角色外觀的分身並登記至分身陣列。

      若本身已是分身或處於 PVP 則不執行。有副作用:建立分身(見 cloneLooks())、 將其加入當前地圖、向地圖廣播外觀更新並移動至本角色位置,並佔用分身陣列的首個空槽。

    • disposeClones

      public final void disposeClones()
      清除本角色的所有分身並釋放相關資源。

      有副作用:將每個存活分身自地圖移除、解除其與連線的關聯,並把分身陣列各槽 重設為空弱參考。

    • getCloneSize

      public final int getCloneSize()
      計算目前存活(弱參考未被回收)的分身數量。
      Returns:
      存活分身數
    • spawnClones

      public void spawnClones()
      依據設定的分身數量在地圖上生成對應數量的分身。

      有副作用:非 GM 時依角色是否具備分身能力(stats.hasClone)重設待生成數, 接著逐一呼叫 cloneLook() 生成分身,最後將計數歸零。

    • getNumClones

      public byte getNumClones()
      取得目前待生成或記錄的分身數量。
      Returns:
      分身數量
    • getExtractor

      public MapleExtractor getExtractor()
      取得本角色擺放的怪物抽取器(extractor)。
      Returns:
      抽取器物件;若無則為 null
    • setExtractor

      public void setExtractor(MapleExtractor me)
      設定本角色的怪物抽取器。

      有副作用:會先移除既有抽取器(見 removeExtractor())再設定新的。

      Parameters:
      me - 新的抽取器物件
    • removeExtractor

      public void removeExtractor()
      移除本角色目前擺放的怪物抽取器。

      有副作用:若存在抽取器,會向地圖廣播移除封包、自地圖物件移除該抽取器,並清空參考。

    • spawnSavedPets

      public final void spawnSavedPets()
      重新生成先前存檔的寵物。

      委派至 CharacterPetManager.spawnSavedPets()

    • getPetStores

      public final byte[] getPetStores()
      取得各寵物欄位的存放狀態位元組陣列。

      委派至 CharacterPetManager.getPetStores()

      Returns:
      寵物欄位存放狀態的位元組陣列
    • resetStats

      public void resetStats(int str, int dex, int int_, int luk)
      將四項基本能力值重設為指定數值,並把多出的點數退回剩餘 AP。

      會以 STR/DEX/INT/LUK 之原值加上現有剩餘 AP 計算總點數,扣除新設定的四項數值後將餘額設為剩餘 AP, 接著重算本地能力值並向自身客戶端送出能力更新封包(CWvsContext.updatePlayerStats(Map, MapleCharacter))。

      Parameters:
      str - 重設後的力量
      dex - 重設後的敏捷
      int_ - 重設後的智力
      luk - 重設後的幸運
    • getPyramidSubway

      public Event_PyramidSubway getPyramidSubway()
      取得角色目前所屬的金字塔/地鐵活動實例。
      Returns:
      活動實例,若未參與則為 null
    • setPyramidSubway

      public void setPyramidSubway(Event_PyramidSubway ps)
      設定角色所屬的金字塔/地鐵活動實例。
      Parameters:
      ps - 活動實例,可為 null 以清除
    • getSubcategory

      public byte getSubcategory()
      取得角色的職業子類別代碼(用於客戶端職業細分)。

      依目前職業推導:弩槍手系(430–434)回傳 1、加農砲手或新手回傳 2、其他已轉職者回傳 0, 僅未轉職的特殊狀態回傳實際儲存的 subcategory 欄位值。

      Returns:
      職業子類別代碼
    • setSubcategory

      public void setSubcategory(int z)
      設定角色的職業子類別代碼。
      Parameters:
      z - 子類別代碼(將被轉型為 byte 儲存)
    • itemQuantity

      public int itemQuantity(int itemid)
      計算角色身上指定道具的總數量。

      依道具 ID 推導對應的背包類型後統計該道具的持有數量。

      Parameters:
      itemid - 道具 ID
      Returns:
      該道具在對應背包中的總數量
    • getRPS

      public RockPaperScissors getRPS()
      取得角色目前的剪刀石頭布遊戲狀態。
      Returns:
      剪刀石頭布遊戲物件,若未進行則為 null
    • setRPS

      public void setRPS(RockPaperScissors rps)
      設定角色目前的剪刀石頭布遊戲狀態。
      Parameters:
      rps - 剪刀石頭布遊戲物件,可為 null 以清除
    • getNextConsume

      public long getNextConsume()
      取得下一次允許消耗(道具使用)的時間戳記。
      Returns:
      下一次可消耗的時間戳記(毫秒)
    • setNextConsume

      public void setNextConsume(long nc)
      設定下一次允許消耗(道具使用)的時間戳記。
      Parameters:
      nc - 下一次可消耗的時間戳記(毫秒)
    • getRank

      public int getRank()
      取得角色的總排名。
      Returns:
      總排名名次
    • getRankMove

      public int getRankMove()
      取得角色總排名的名次變動量。
      Returns:
      總排名名次的變動量
    • getJobRank

      public int getJobRank()
      取得角色的職業排名。
      Returns:
      職業排名名次
    • getJobRankMove

      public int getJobRankMove()
      取得角色職業排名的名次變動量。
      Returns:
      職業排名名次的變動量
    • changeChannel

      public void changeChannel(int channel)
      將角色切換至指定的遊戲頻道。

      若目標頻道與現頻道相同、頻道不存在或正在關閉,則送出伺服器阻擋封包並直接返回。 否則先存檔至資料庫,執行換頻清理(changeRemoval()),靜默離開信使聊天, 將現有 buff/冷卻/異常狀態暫存至 PlayerBuffStorage,透過 World.ChannelChange_Data(MapleClient, MapleCharacter, int) 轉移角色資料,從現頻道移除玩家、 更新登入狀態、新增 IP 授權並送出換頻封包,最後從地圖移除玩家並清空客戶端的玩家參照。

      具有大量副作用:DB 寫入、跨伺服器狀態轉移、封包送出與地圖/頻道狀態變更。

      Parameters:
      channel - 目標頻道編號
    • expandInventory

      public void expandInventory(byte type, int amount)
      擴充指定背包類型的欄位數量。

      為對應背包增加指定數量的欄位,並向自身客戶端送出欄位更新封包 (InventoryPacket.getSlotUpdate(byte, byte))。

      Parameters:
      type - 背包類型代碼
      amount - 欲增加的欄位數
    • allowedToTarget

      public boolean allowedToTarget(MapleCharacter other)
      判斷本角色是否允許將指定角色作為(攻擊/互動)目標。

      當對方非 null,且其未隱身、或本角色 GM 等級不低於對方時回傳 true

      Parameters:
      other - 目標角色,可為 null
      Returns:
      允許鎖定目標時為 true
    • getFollowId

      public int getFollowId()
      取得目前跟隨對象的角色 ID。
      Returns:
      跟隨對象的角色 ID,未跟隨時為 0
    • setFollowId

      public void setFollowId(int fi)
      設定跟隨對象的角色 ID。

      當傳入 0 時一併清除跟隨發起者與跟隨開啟旗標。

      Parameters:
      fi - 跟隨對象的角色 ID,0 表示取消跟隨
    • isFollowOn

      public boolean isFollowOn()
      判斷跟隨功能目前是否開啟。
      Returns:
      跟隨開啟時為 true
    • setFollowOn

      public void setFollowOn(boolean fi)
      設定跟隨功能的開啟狀態。
      Parameters:
      fi - 是否開啟跟隨
    • isFollowInitiator

      public boolean isFollowInitiator()
      判斷本角色是否為跟隨關係的發起者。
      Returns:
      為發起者時為 true
    • setFollowInitiator

      public void setFollowInitiator(boolean fi)
      設定本角色是否為跟隨關係的發起者。
      Parameters:
      fi - 是否為發起者
    • checkFollow

      public void checkFollow()
      檢查並終止目前的跟隨關係。

      若未跟隨任何對象則直接返回。否則若跟隨開啟,向地圖廣播雙方的跟隨特效封包, 接著向自身與對象客戶端送出「跟隨取消。」訊息,並將雙方的跟隨對象 ID 重設為 0。

      副作用:地圖廣播與封包送出,並修改本角色與對象角色的跟隨狀態。

    • getMarriageId

      public int getMarriageId()
      取得角色的結婚編號。
      Returns:
      結婚編號,未結婚時為 0
    • setMarriageId

      public void setMarriageId(int mi)
      設定角色的結婚編號。
      Parameters:
      mi - 結婚編號
    • getMarriageItemId

      public int getMarriageItemId()
      取得角色的結婚戒指道具 ID。
      Returns:
      結婚戒指道具 ID
    • setMarriageItemId

      public void setMarriageItemId(int mi)
      設定角色的結婚戒指道具 ID。
      Parameters:
      mi - 結婚戒指道具 ID
    • isStaff

      public boolean isStaff()
      判斷角色是否為管理人員(GM 等級高於普通玩家)。
      Returns:
      為管理人員時為 true
    • startPartyQuest

      public boolean startPartyQuest(int questid)
      開始指定的組隊任務。

      委派至 CharacterQuestManager.startPartyQuest(int)

      Parameters:
      questid - 任務 ID
      Returns:
      成功開始時為 true
    • getOneInfo

      public String getOneInfo(int questid, String key)
      取得指定組隊任務中某個鍵對應的資訊值。

      委派至 CharacterQuestManager.getOneInfo(int, String)

      Parameters:
      questid - 任務 ID
      key - 資訊鍵
      Returns:
      對應的資訊值,可能為 null
    • updateOneInfo

      public void updateOneInfo(int questid, String key, String value)
      更新指定組隊任務中某個鍵的資訊值。

      委派至 CharacterQuestManager.updateOneInfo(int, String, String)

      Parameters:
      questid - 任務 ID
      key - 資訊鍵
      value - 欲設定的資訊值
    • recalcPartyQuestRank

      public void recalcPartyQuestRank(int questid)
      重新計算指定組隊任務的隊伍排名。

      委派至 CharacterQuestManager.recalcPartyQuestRank(int)

      Parameters:
      questid - 任務 ID
    • tryPartyQuest

      public void tryPartyQuest(int questid)
      嘗試開始指定的組隊任務。

      委派至 CharacterQuestManager.tryPartyQuest(int)

      Parameters:
      questid - 任務 ID
    • endPartyQuest

      public void endPartyQuest(int questid)
      結束指定的組隊任務。

      委派至 CharacterQuestManager.endPartyQuest(int)

      Parameters:
      questid - 任務 ID
    • havePartyQuest

      public void havePartyQuest(int itemId)
      處理組隊任務取得指定道具的相關邏輯。

      委派至 CharacterQuestManager.havePartyQuest(int)

      Parameters:
      itemId - 道具 ID
    • resetStatsByJob

      public void resetStatsByJob(boolean beginnerJob)
      依職業將角色能力值重設為對應的初始配點。

      依是否為新手職業推導基礎職業群組(如 1112 → 112 → 100),再依劍士/法師/弓箭手/盜賊系 套用該系的預設配點,並考量是否完成「終極冒險者」任務(GameConstants.ULT_EXPLORER) 調整主屬性。最終透過 resetStats(int, int, int, int) 套用並送出能力更新封包。

      Parameters:
      beginnerJob - 是否以新手職業(取職業末三碼)作為重設基準
    • hasSummon

      public boolean hasSummon()
      判斷角色目前是否擁有召喚獸。
      Returns:
      擁有召喚獸時為 true
    • setHasSummon

      public void setHasSummon(boolean summ)
      設定角色是否擁有召喚獸的旗標。
      Parameters:
      summ - 是否擁有召喚獸
    • removeDoor

      public void removeDoor()
      移除角色開設的所有傳送門。

      向傳送門目標地圖與所在城鎮的所有玩家送出傳送門銷毀封包,從兩地地圖移除傳送門物件, 最後清空角色的傳送門集合。

      副作用:對多名玩家送出封包並變更地圖物件狀態。

    • removeMechDoor

      public void removeMechDoor()
      移除角色開設的所有機械門(機械師職業)。

      對每個機械門向地圖中所有玩家送出銷毀封包並從地圖移除該物件,最後清空機械門集合。

      副作用:對多名玩家送出封包並變更地圖物件狀態。

    • changeRemoval

      public void changeRemoval()
      執行角色離場前的清理(非斷線版本)。

      委派至 changeRemoval(boolean),以 dc=false 呼叫。

    • changeRemoval

      public void changeRemoval(boolean dc)
      執行角色離場前的清理,移除暫時性的場上物件與狀態。

      包含:斷線時釋放反作弊追蹤器;移除夥伴、解除召喚獸;非斷線時取消飛行/騎乘/機械變身/回復等 buff;結束金字塔/地鐵活動;處理個人商店(移除訪客、若為店主則設為開啟);移除傳送門與機械門; 釋放分身;透過 NPCScriptManager 釋放 NPC 對話;並取消妖精排程。

      副作用:大量狀態清理、封包送出與地圖物件移除。

      Parameters:
      dc - 是否因斷線而觸發;true 時跳過部分需與客戶端互動的清理
    • updateTick

      public void updateTick(int newTick)
      更新反作弊用的客戶端時間刻度。

      目前實作已停用(內部呼叫被註解),呼叫不會產生任何效果。

      Parameters:
      newTick - 新的時間刻度值
    • canUseFamilyBuff

      public boolean canUseFamilyBuff(MapleFamilyBuff buff)
      判斷指定家族祝福是否已可再次使用(冷卻已過)。

      依該祝福對應任務(buff.questID)的客製資料判斷:若無此任務狀態則視為可用; 否則以上次使用時間加上 24 小時與目前系統時間比較。

      Parameters:
      buff - 家族祝福類型
      Returns:
      已可再次使用時為 true
    • useFamilyBuff

      public void useFamilyBuff(MapleFamilyBuff buff)
      使用指定的家族祝福並記錄使用時間。

      取得(必要時建立)該祝福對應任務的狀態,並將其客製資料設為目前系統時間,作為下次冷卻判斷依據。

      Parameters:
      buff - 家族祝福類型
    • usedBuffs

      public List<Integer> usedBuffs()
      取得目前仍在冷卻中(不可使用)的家族祝福索引清單。

      逐一檢查所有 MapleFamilyBuff 值,將無法使用者的列舉索引加入回傳清單。

      Returns:
      冷卻中家族祝福的索引清單
    • getTeleportName

      public String getTeleportName()
      取得角色目前的傳送目標名稱。
      Returns:
      傳送目標名稱,可能為 null
    • setTeleportName

      public void setTeleportName(String tname)
      設定角色的傳送目標名稱。
      Parameters:
      tname - 傳送目標名稱,可為 null 以清除
    • getNoJuniors

      public int getNoJuniors()
      取得家族中下屬(junior)的數量。

      委派至 CharacterSocialManager.getNoJuniors()

      Returns:
      下屬數量
    • getMFC

      public MapleFamilyCharacter getMFC()
      取得角色的家族成員資料。

      委派至 CharacterSocialManager.getMFC()

      Returns:
      家族成員資料,未加入家族時可能為 null
    • makeMFC

      public void makeMFC(int familyid, int seniorid, int junior1, int junior2)
      建立角色的家族成員資料。

      委派至 CharacterSocialManager.makeMFC(int, int, int, int)

      Parameters:
      familyid - 家族 ID
      seniorid - 上司角色 ID
      junior1 - 第一位下屬角色 ID
      junior2 - 第二位下屬角色 ID
    • setFamily

      public void setFamily(int newf, int news, int newj1, int newj2)
      設定角色的家族關係資料。

      委派至 CharacterSocialManager.setFamily(int, int, int, int)

      Parameters:
      newf - 家族 ID
      news - 上司角色 ID
      newj1 - 第一位下屬角色 ID
      newj2 - 第二位下屬角色 ID
    • maxBattleshipHP

      public int maxBattleshipHP(int skillid)
      依指定技能計算戰艦的最大 HP。

      公式為「該技能總等級 × 5000」加上「(角色等級 − 120)× 3000」。

      Parameters:
      skillid - 戰艦技能 ID
      Returns:
      戰艦最大 HP
    • currentBattleshipHP

      public int currentBattleshipHP()
      取得戰艦目前的 HP。
      Returns:
      戰艦目前 HP
    • setBattleshipHP

      public void setBattleshipHP(int v)
      設定戰艦目前的 HP。
      Parameters:
      v - 戰艦 HP 數值
    • decreaseBattleshipHP

      public void decreaseBattleshipHP()
      將戰艦目前的 HP 減少 1。
    • getGachExp

      public int getGachExp()
      取得角色的轉蛋經驗值。
      Returns:
      轉蛋經驗值
    • setGachExp

      public void setGachExp(int ge)
      設定角色的轉蛋經驗值。
      Parameters:
      ge - 轉蛋經驗值
    • isInBlockedMap

      public boolean isInBlockedMap()
      判斷角色目前是否位於受限制(禁用部分功能)的地圖。

      當角色已死亡、處於金字塔/地鐵活動、所在地圖屬於遠征隊或活動管理、位於特定地圖區段 (如 680000210–680000502、925020100 起的 92502 系、92503 系或監獄),或地圖列於 GameConstants.blockedMaps 時,視為受限地圖。

      Returns:
      位於受限地圖時為 true
    • isInTownMap

      public boolean isInTownMap()
      判斷角色目前是否位於可正常使用城鎮功能的城鎮地圖。

      當背包被封鎖、地圖非城鎮、地圖禁用回城卷(FieldLimitType.VipRock)、 處於活動實例中,或地圖列於 GameConstants.blockedMaps 時回傳 false

      Returns:
      位於可用城鎮地圖時為 true
    • hasBlockedInventory

      public boolean hasBlockedInventory()
      判斷角色目前是否處於禁止操作背包的狀態。

      當角色已死亡、正在交易、處於對話中、有設定方向(坐下等)、開設個人商店,或地圖為 null 時, 視為背包被封鎖。

      Returns:
      背包被封鎖時為 true
    • startPartySearch

      public void startPartySearch(List<Integer> jobs, int maxLevel, int minLevel, int membersNeeded)
      於目前地圖搜尋符合條件的玩家並邀入隊伍(組隊搜尋)。

      逐一檢查地圖中的玩家,篩選條件為:非本人、尚未組隊、等級介於指定上下限、職業符合(清單為空則不限), 且本角色為 GM 或對方非 GM。對符合者,若隊伍未滿(少於 6 人且少於所需人數)便將其加入隊伍、 透過 World.Party.updateParty(int, PartyOperation, MaplePartyCharacter) 廣播加入並同步雙方隊員 HP;隊伍已滿則停止搜尋。

      副作用:修改其他玩家的隊伍狀態並進行跨伺服器隊伍廣播。

      Parameters:
      jobs - 允許的職業 ID 清單,為空時不限職業
      maxLevel - 招募的最高等級
      minLevel - 招募的最低等級
      membersNeeded - 需要招募的隊員人數上限
    • getChallenge

      public int getChallenge()
      取得角色目前的挑戰值(武陵道場等挑戰進度)。
      Returns:
      挑戰值
    • setChallenge

      public void setChallenge(int c)
      設定角色目前的挑戰值。
      Parameters:
      c - 新的挑戰值
    • getFatigue

      public short getFatigue()
      取得角色目前的疲勞值。
      Returns:
      疲勞值
    • setFatigue

      public void setFatigue(int j)
      設定角色的疲勞值並同步至客戶端。

      數值會以 Math.max(0, j) 夾為非負,再透過 updateSingleStat(MapleStat, int) 送出 MapleStat.FATIGUE 更新封包。

      Parameters:
      j - 欲設定的疲勞值(負值會被夾為 0)
    • fakeRelog

      public void fakeRelog()
      在不真正重新連線的情況下,對客戶端模擬一次重登以刷新角色狀態。

      會重送角色資訊封包,並於目前地圖暫停狀態檢查(setCheckStates(false))後 將玩家移除再加回(觸發完整的進場流程),最後恢復狀態檢查並補送怪物寵物(familiar)資訊。

    • canSummon

      public boolean canSummon()
      判斷距離上次召喚是否已逾預設冷卻(5000 毫秒)。

      等同呼叫 canSummon(5000);回傳 true 時會一併更新上次召喚時間。

      Returns:
      已過冷卻可再次召喚則為 true
    • canSummon

      public boolean canSummon(int g)
      判斷距離上次召喚是否已逾指定冷卻毫秒數,並在可召喚時重置計時。

      具副作用:回傳 true 的同時會將上次召喚時間更新為目前系統時間。

      Parameters:
      g - 冷卻間隔(毫秒)
      Returns:
      已過冷卻可再次召喚則為 true,否則為 false
    • SetIntNoRecord

      public void SetIntNoRecord(int questID, String point)
      將指定任務的自訂資料(customData)設為給定字串,但不會新增不存在的任務。

      常用於以任務槽位充當整數計數器的暫存。

      Parameters:
      questID - 任務編號
      point - 欲寫入的字串值
    • getIntNoRecord

      public int getIntNoRecord(int questID)
      讀取指定任務自訂資料並解析為整數,任務不存在時回傳 0(不會新增任務)。
      Parameters:
      questID - 任務編號
      Returns:
      解析後的整數值,任務或資料不存在時為 0
    • getIntRecord

      public int getIntRecord(int questID)
      讀取指定任務自訂資料並解析為整數;任務不存在時會自動新增並初始化為 0。

      getIntNoRecord(int) 的差異在於本方法透過 getQuestNAdd 確保任務存在。

      Parameters:
      questID - 任務編號
      Returns:
      解析後的整數值
    • updatePetAuto

      public void updatePetAuto()
      更新寵物自動進食/自動撿取等自動行為設定。

      委派至 CharacterPetManager.updatePetAuto()

    • sendEnglishQuiz

      public void sendEnglishQuiz(String msg)
      向客戶端發送英文問答(OX quiz)訊息。

      目前實作已停用(封包送出語句被註解),呼叫不會產生任何效果。

      Parameters:
      msg - 問答訊息內容
    • setChangeTime

      public void setChangeTime()
      將最近一次換圖時間記錄為目前系統時間。
    • getChangeTime

      public long getChangeTime()
      取得最近一次換圖的時間戳記(毫秒)。
      Returns:
      換圖時間戳記
    • getReports

      public Map<ReportType, Integer> getReports()
      取得各檢舉類型對應的累計次數。

      委派至 CharacterAnticheatManager.getReports()

      Returns:
      檢舉類型對應次數的對應表
    • addReport

      public void addReport(ReportType type)
      為指定檢舉類型累加一次計數。

      委派至 CharacterAnticheatManager.addReport(ReportType)

      Parameters:
      type - 檢舉類型
    • clearReports

      public void clearReports(ReportType type)
      清除指定檢舉類型的累計計數。

      委派至 CharacterAnticheatManager.clearReports(ReportType)

      Parameters:
      type - 欲清除的檢舉類型
    • clearReports

      public void clearReports()
      清除所有檢舉類型的累計計數。

      委派至 CharacterAnticheatManager.clearReports()

    • getReportPoints

      public final int getReportPoints()
      取得各類型檢舉換算後的總點數。

      委派至 CharacterAnticheatManager.getReportPoints()

      Returns:
      檢舉總點數
    • getReportSummary

      public final String getReportSummary()
      取得各類型檢舉次數的彙整文字摘要。

      委派至 CharacterAnticheatManager.getReportSummary()

      Returns:
      檢舉摘要字串
    • getScrolledPosition

      public short getScrolledPosition()
      取得最近一次卷軸作用的裝備槽位。
      Returns:
      卷軸作用槽位
    • setScrolledPosition

      public void setScrolledPosition(short s)
      設定最近一次卷軸作用的裝備槽位。
      Parameters:
      s - 卷軸作用槽位
    • getTrait

      取得指定類型的角色性向(trait)物件。
      Parameters:
      t - 性向類型
      Returns:
      對應的 MapleTrait,未持有時可能為 null
    • forceCompleteQuest

      public void forceCompleteQuest(int id)
      對本角色強制完成指定任務。

      以固定 NPC 編號 9270035 呼叫 MapleQuest.forceComplete(MapleCharacter, int) 強制結束任務。

      Parameters:
      id - 任務編號
    • getExtendedSlots

      public List<Integer> getExtendedSlots()
      取得角色額外(擴充)背包槽位清單。
      Returns:
      擴充槽位清單
    • getExtendedSlot

      public int getExtendedSlot(int index)
      取得指定索引的擴充背包槽位值。
      Parameters:
      index - 槽位索引
      Returns:
      對應槽位值;索引越界(< 0>= 清單大小)時回傳 -1
    • changedExtended

      public void changedExtended()
      標記擴充背包槽位資料已變更,待下次存檔時寫回資料庫。
    • getAndroid

      public MapleAndroid getAndroid()
      取得角色目前的機器人(android)。
      Returns:
      MapleAndroid,未裝備時可能為 null
    • setAndroid

      public void setAndroid(MapleAndroid a)
      設定角色的機器人(android),並在地圖上生成與播放表情。

      具副作用:當角色已在地圖中且 anull 時,會向地圖廣播機器人生成封包 與一個隨機表情(1~17)。傳入 null 僅清除欄位,不另行廣播移除。

      Parameters:
      a - 欲設定的機器人,可為 null
    • updateAndroid

      public void updateAndroid(short pos, int itemId)
      更新機器人在指定槽位的外觀道具並向地圖廣播。

      具副作用:角色在地圖中時,向地圖廣播機器人外觀更新封包。

      Parameters:
      pos - 機器人裝備槽位
      itemId - 套用的道具編號
    • removeAndroid

      public void removeAndroid()
      移除角色的機器人並向地圖廣播停用。

      具副作用:角色在地圖中時,向地圖廣播機器人停用封包,最後清空機器人欄位。

    • getRebuy

      public List<Item> getRebuy()
      取得商店「再買一次」(rebuy)暫存的道具清單。
      Returns:
      再買清單,可能為 null
    • setRebuy

      public void setRebuy(List<Item> rebuy)
      設定商店「再買一次」暫存的道具清單。
      Parameters:
      rebuy - 再買清單
    • setClearRebuy

      public void setClearRebuy()
      清空商店「再買一次」暫存清單(若已建立)。
    • getFamiliars

      public Map<Integer, MonsterFamiliar> getFamiliars()
      取得角色擁有的所有怪物寵物(familiar)對應表。
      Returns:
      familiar 編號對應 MonsterFamiliar 的對應表,可能為 null
    • getSummonedFamiliar

      public MonsterFamiliar getSummonedFamiliar()
      取得目前已召喚出場的怪物寵物(familiar)。
      Returns:
      已召喚的 MonsterFamiliar,未召喚時為 null
    • removeFamiliar

      public void removeFamiliar()
      收回目前召喚的怪物寵物(familiar)。

      具副作用:若已召喚且在地圖中,會透過 removeVisibleFamiliar() 自地圖移除並廣播; 最後清空已召喚欄位。

    • removeVisibleFamiliar

      public void removeVisibleFamiliar()
      將目前召喚的怪物寵物(familiar)自地圖視覺上移除並取消其被動效果。

      具副作用:自地圖移除地圖物件、自可見物件清單移除、向地圖廣播移除封包、重置反作弊 familiar 攻擊計數,並取消該 familiar 被動道具對應的 buff。呼叫前應確保 summonedFamiliarnull

    • spawnFamiliar

      public void spawnFamiliar(MonsterFamiliar mf)
      在地圖上召喚指定的怪物寵物(familiar)並套用其被動效果。

      具副作用:設定為目前召喚的 familiar、定位於玩家座標與所在地面(foothold)、加入可見物件、 於地圖生成;若其被動效果為無間隔(interval ≤ 0)且機率判定成功,立即對自身套用該效果, 並記錄本次 familiar 效果時間。

      Parameters:
      mf - 欲召喚的怪物寵物
    • canFamiliarEffect

      public final boolean canFamiliarEffect(long now, MapleStatEffect eff)
      判斷距上次 familiar 被動效果是否已逾其間隔,可再次觸發。
      Parameters:
      now - 目前時間戳記(毫秒)
      eff - familiar 被動效果,用以取得觸發間隔
      Returns:
      已過間隔且曾觸發過則為 true
    • doFamiliarSchedule

      public void doFamiliarSchedule(long now)
      週期性處理怪物寵物(familiar)的疲勞與被動效果。

      對已召喚的 familiar 增加疲勞並在符合間隔與機率時套用其被動效果(具副作用);其餘 familiar 則逐步回復疲勞。familiarsnull 時直接返回。

      Parameters:
      now - 目前時間戳記(毫秒)
    • getImps

      public MapleImp[] getImps()
      取得角色的小惡魔(imp)陣列。
      Returns:
      imp 陣列
    • sendImp

      public void sendImp()
      向客戶端送出所有已存在小惡魔(imp)的召喚狀態。

      具副作用:對每個非 null 的 imp 送出標記為已召喚(SUMMONED)的更新封包。

    • getBattlePoints

      public int getBattlePoints()
      取得角色的戰鬥點數(PVP points)。
      Returns:
      戰鬥點數
    • setBattlePoints

      public void setBattlePoints(int p)
      設定角色的戰鬥點數(PVP points)並於有變動時通知客戶端。

      具副作用:當新值與現值不同時,向客戶端送出點數增減訊息並更新 MapleStat.BATTLE_POINTS

      Parameters:
      p - 新的戰鬥點數
    • getTotalBattleExp

      public int getTotalBattleExp()
      取得角色的累計戰鬥經驗(PVP exp)。
      Returns:
      累計戰鬥經驗
    • setTotalBattleExp

      public void setTotalBattleExp(int p)
      設定角色的累計戰鬥經驗(PVP exp)並在有變動時重算 PVP 排名。

      具副作用:值有變動時呼叫 stats.recalcPVPRank,並更新 MapleStat.BATTLE_EXPMapleStat.BATTLE_RANK

      Parameters:
      p - 新的累計戰鬥經驗
    • changeTeam

      public void changeTeam(int newTeam)
      變更角色所屬隊伍(如椰子大賽/PVP 紅藍隊)並向客戶端與地圖呈現對應效果。

      具副作用:設定隊伍編號後,PVP 中送出變身與隊伍變更廣播,否則向自身送出裝備特效封包。

      Parameters:
      newTeam - 新的隊伍編號
    • disease

      public void disease(int type, int level)
      依怪物技能編號對角色施加對應的異常狀態(debuff)。

      具副作用:先強制起身(清除座椅、向自身送出取消座椅封包、向地圖廣播起身),再以 giveDebuff(MapleDisease, MobSkill) 施加由 type/level 對應的怪物技能 debuff。當該技能無對應 MapleDisease 時直接返回。

      Parameters:
      type - 怪物技能編號(用以對應異常狀態)
      level - 怪物技能等級
    • inPVP

      public boolean inPVP()
      判斷角色是否處於 PVP 活動實例中。
      Returns:
      所在事件實例名稱以 "PVP" 開頭則為 true
    • inAzwan

      public boolean inAzwan()
      判斷角色目前是否位於阿斯旺(Azwan)地圖區段。
      Returns:
      地圖編號落在 262020000~262022999 之間則為 true
    • clearAllCooldowns

      public void clearAllCooldowns()
      清除角色所有技能冷卻並通知客戶端。

      具副作用:逐一移除冷卻(委派狀態由 CharacterCooldownDiseaseManager 管理)並向客戶端 送出冷卻歸零封包。

    • modifyDamageTaken

      public Pair<Double,Boolean> modifyDamageTaken(double damage, MapleMapObject attacke)
      依角色各項減傷/護盾/反傷被動與 buff,計算實際承受傷害並處理連帶效果。

      此為傷害結算的核心邏輯,可能產生大量副作用:忽視傷害(ignoreDAM/ignoreDAMr)、神聖之盾/ 魔法護罩等抵銷、衛星安全、職業專屬的反擊/格擋技能(含對攻擊者造成傷害並廣播 MobPacket.damageMonster(int, long)、施加狀態、套用 buff、設定冷卻),以及力場護甲/黑暗之眼/ 召喚獸協同反傷等。對玩家攻擊者會直接扣血並彙整反傷數列,最後向地圖廣播 PVP 反傷封包。

      Parameters:
      damage - 原始承受傷害
      attacke - 攻擊來源地圖物件(MapleMonster 或玩家),可能為 null
      Returns:
      Pair:left 為結算後的實際傷害,right 表示是否已對攻擊者反彈傷害
    • onAttack

      public void onAttack(long maxhp, int maxmp, int skillid, int oid, long totDamage)
      角色發動攻擊後的結算:處理吸血/吸魔、特定 buff 與技能的攻擊後效果。

      此為攻擊後處理的核心邏輯,副作用眾多:依機率回復 HP/MP(hpRecover/mpRecover 與百分比)、 連擊吸取(COMBO_DRAIN)回 HP/MP、死神(REAPER)自動召喚、毒系職業累積連結傷害(linkMid), 以及依技能編號(如各式吸血、追蹤、美洲豹)套用回血或設定/清除連結傷害目標。

      Parameters:
      maxhp - 用於回復上限換算的最大 HP
      maxmp - 用於回復上限換算的最大 MP
      skillid - 本次攻擊使用的技能編號(0 表示無技能)
      oid - 攻擊目標的物件編號(用於連結傷害)
      totDamage - 本次攻擊造成的總傷害(用於百分比回復換算)
    • handleForceGain

      public void handleForceGain(int oid, int skillid)
      處理鬥氣(force/MP)累積,使用預設額外鬥氣 0。

      等同 handleForceGain(oid, skillid, 0)

      Parameters:
      oid - 來源物件編號
      skillid - 觸發的技能編號
    • handleForceGain

      public void handleForceGain(int oid, int skillid, int extraForce)
      處理鬥氣(force)累積並回復對應 MP,同時可附加額外鬥氣。

      具副作用:依等級決定基礎鬥氣量(30 以下 1、30~69 為 2、70~119 為 3、120 以上 4), 增加 MP 並向客戶端送出鬥氣封包;當 extraForce <= 0 時,另依 mpRecover 機率再回復一次 並送出對應封包。當技能非鬥氣增益且 extraForce <= 0 時直接返回。

      Parameters:
      oid - 來源物件編號
      skillid - 觸發的技能編號
      extraForce - 額外鬥氣量;大於 0 時以此值取代基礎鬥氣並略過機率回復
    • afterAttack

      public void afterAttack(int mobCount, int attackCount, int skillid)
      攻擊命中後依職業處理能量充能、戰艦耗血與潛行類 buff 的取消。

      具副作用:海盜系(拳手/打手等)依擊中數累積能量充能、戰士系與幻影累積連擊球(orb); 貓頭鷹之靈(OWL_SPIRIT,借用戰艦 HP)扣血並於歸零時取消;非實習生身分則取消疾風步、 滲透與(依機率)黑暗之眼等暴露類 buff。

      Parameters:
      mobCount - 本次攻擊命中的怪物數
      attackCount - 每隻怪物的攻擊次數
      skillid - 使用的技能編號(用於排除特定技能不給球,如吼叫)
    • applyIceGage

      public void applyIceGage(int x)
      更新冰冷量表(ice gage)數值並同步至客戶端。

      具副作用:透過 updateSingleStat(MapleStat, int) 送出 MapleStat.ICE_GAGE 更新封包。

      Parameters:
      x - 新的冰冷量表值
    • getBounds

      public Rectangle getBounds()
      取得以角色真實座標為基準的碰撞/命中矩形範圍。

      矩形以角色腳下座標為錨點向左 25、向上 75,寬 50、高 75。

      Returns:
      角色範圍 Rectangle
    • getEquips

      public final Map<Byte,Integer> getEquips()
      取得角色已穿戴裝備的槽位與道具編號對應表。

      每次呼叫掃描 EQUIPPED 背包並建立新的 HashMap

      Specified by:
      getEquips in interface MapleCharacterLook
      Returns:
      裝備槽位(byte)對應道具編號的對應表
    • CRand

      public final PlayerRandomStream CRand()
      取得角色的隨機數串流(用於與客戶端同步的偽隨機序列)。
      Returns:
      PlayerRandomStream 實例
    • getCharacterCard

      public final MapleCharacterCards getCharacterCard()
      取得角色卡(character cards)集合。
      Returns:
      MapleCharacterCards 實例
    • getReborns

      public int getReborns()
      取得角色的轉生(reborn)次數。
      Returns:
      轉生次數
    • setReborns

      public void setReborns(int rb)
      以累加方式增加角色的轉生次數。

      行為上為累加(reborns += rb)而非直接設值,故傳入值會疊加至現有次數。

      Parameters:
      rb - 欲增加的轉生次數
    • getAPS

      public int getAPS()
      取得角色的能力點儲存量(AP storage)。
      Returns:
      AP 儲存量
    • gainAPS

      public void gainAPS(int aps)
      增加角色的能力點儲存量(AP storage)。
      Parameters:
      aps - 欲增加的 AP 量
    • doReborn

      public void doReborn()
      執行角色轉生:重置等級/經驗並重新隨機分配四圍,溢出能力點轉入 AP 儲存。

      自訂功能。具副作用:轉生次數加一、等級設為 11、經驗與剩餘 AP 歸零;以原四圍為上限隨機產生 新的 STR/DEX/INT/LUK(每項至少 25),將「原四圍總和 − 新四圍總和 + 剩餘 AP」併入 AP 儲存 (gainAPS(int));重算並套用新四圍,最後向客戶端送出等級/職業/經驗/四圍更新封包。

    • checkForceShield

      public void checkForceShield()
      依角色職業檢查並補發專屬的轉職盾牌(force shield)。

      具副作用:依 job 對應的盾牌道具編號建立裝備(部分職業會重置潛在能力),設定其位置為 -10(特殊盾牌槽)、數量 1 並寫入 GM 取得紀錄;接著以 forceReAddItem_NoUpdate(Item, MapleInventoryType) 直接放入已穿戴背包,向客戶端送出裝備更新封包並觸發 equipChanged()。職業無對應盾牌時不做任何事。

    • getTotems

      public Map<Byte,Integer> getTotems()
      取得角色目前裝備中的圖騰槽位與道具對應表。

      掃描 EQUIPPED 背包,只收錄三個圖騰槽(負位置換算後 0~2)且道具編號落在 1200000~1209999 區間者。

      Specified by:
      getTotems in interface MapleCharacterLook
      Returns:
      槽位(byte 0~2)對應圖騰道具編號的對應表,無圖騰時為空 map(不為 null
    • handleCardStack

      public void handleCardStack()
      處理幻影(Phantom)卡牌堆疊的累積判定與封包同步。

      依角色職業(2412 上限 40、其餘 2400/2410/2411 上限 20) 決定堆疊上限;以對應卡牌技能(24120002 進階 / 24100003)的 MapleStatEffect.makeChanceResult() 機率判定是否疊加,成功時遞增 cardStackrunningStack,並向自身客戶端送出 gainCardStackupdateCardStack 封包。 若兩種卡牌技能皆未習得則直接返回。

      副作用:變更角色卡牌堆疊狀態並送出封包;其中 gainCardStack 使用 Randomizer 故為非確定性。

    • getChronosphere

      public int getChronosphere()
      取得角色持有的時空石(Chronosphere)數量。
      Returns:
      時空石數量
    • setChronosphere

      public void setChronosphere(int count)
      設定角色持有的時空石數量。
      Parameters:
      count - 時空石數量
    • setCSChronsphere

      public void setCSChronsphere(int count)
      設定現金商城時空石(CS Chronosphere)數量。
      Parameters:
      count - 現金商城時空石數量
    • getCSChronosphere

      public int getCSChronosphere()
      取得現金商城時空石(CS Chronosphere)數量。
      Returns:
      現金商城時空石數量
    • getVip

      public int getVip()
      自資料庫重新讀取並回傳角色的 VIP 等級。

      副作用:characters 資料表執行 SELECT,並以查得值刷新欄位 vip; 查詢例外會被吞掉(僅 log.debug),此時回傳當前快取值。

      Returns:
      角色 VIP 等級
    • setVip

      public void setVip(int vip)
      設定角色 VIP 等級並即時寫回資料庫。

      副作用:更新欄位 vip,並對 characters 資料表執行 UPDATE; 寫入例外會被吞掉(僅 log.debug)。

      Parameters:
      vip - 新的 VIP 等級
    • getDonate

      public int getDonate()
      自資料庫重新讀取並回傳本帳號的累計儲值金額。

      副作用:accounts 資料表執行 SELECT,並以查得值刷新欄位 total_donate;查詢例外會被吞掉(僅 log.debug),此時回傳當前快取值。

      Returns:
      帳號累計儲值金額(total_donate
    • getRewardLevel

      public int getRewardLevel()
      自資料庫重新讀取並回傳角色的獎勵等級。

      副作用:characters 資料表執行 SELECT,並以查得值刷新欄位 reward;查詢例外會被吞掉(僅 log.debug),此時回傳當前快取值。

      Returns:
      角色獎勵等級(reward
    • setRewardLevel

      public void setRewardLevel(int reward)
      設定角色獎勵等級並即時寫回資料庫。

      副作用:更新欄位 reward,並對 characters 資料表執行 UPDATE; 寫入例外會被吞掉(僅 log.debug)。

      Parameters:
      reward - 新的獎勵等級
    • changeFace

      public boolean changeFace(int color)
      在當前臉型基礎上套用指定的顏色偏移,切換為同款不同色的臉型。

      依現有 face 的色階區段(每 100 一段,0~700)歸零後加上 color, 算出目標臉型編號;若該編號不存在(MapleItemInformationProvider.itemExists(int)false)則不變更並回傳 false。成功時更新 face、送出 MapleStat.FACE 單一屬性更新並觸發 equipChanged()

      Parameters:
      color - 臉型顏色偏移量
      Returns:
      成功變更回傳 true;目標臉型不存在則回傳 false
    • gainItem

      public void gainItem(int code, int amount)
      給予角色指定數量的道具。

      僅當 amount 為正時,透過 MapleInventoryManipulator.addById(MapleClient, int, short, String) 加入背包; 非正數則不做任何事。

      Parameters:
      code - 道具編號
      amount - 給予數量(須為正才生效)
    • giftMedal

      public void giftMedal(int id)
      贈予角色一枚勳章(裝備類)並向全服廣播祝賀訊息。

      僅當 EQUIP 背包未滿、且該道具在 EQUIPEQUIPPED 背包中皆未持有時, 加入 1 件並透過 World.Broadcast.broadcastMessage(byte[]) 對全服送出祝賀公告;否則不做任何事。

      副作用:修改背包並進行全服封包廣播。

      Parameters:
      id - 勳章道具編號
    • getAveragePartyLevel

      public int getAveragePartyLevel()
      計算所屬隊伍全體成員的平均等級。

      隊伍人數為 0 時退回回傳本角色自身等級。注意未檢查 getParty() 是否為 null(無隊伍時呼叫會擲 NullPointerException)。

      Returns:
      隊伍平均等級;隊伍為空時為本角色等級
    • getAverageMapLevel

      public int getAverageMapLevel()
      計算當前地圖上所有玩家的平均等級。

      地圖上無玩家時退回回傳本角色自身等級。

      Returns:
      當前地圖平均等級;無玩家時為本角色等級
    • getNpcNow

      public int getNpcNow()
      取得角色目前正在互動的 NPC 編號。
      Returns:
      目前互動的 NPC 編號
    • setNpcNow

      public void setNpcNow(int id)
      設定角色目前正在互動的 NPC 編號。
      Parameters:
      id - NPC 編號
    • getElf

      public int getElf()
      取得角色精靈耳朵(Elf ear)狀態。

      由任務資訊 GameConstants.精靈耳朵sw 子值解析;無紀錄時回傳 0

      Specified by:
      getElf in interface MapleCharacterLook
      Returns:
      精靈耳朵狀態值,未設定時為 0
    • setElf

      public void setElf(int elf)
      設定角色精靈耳朵(Elf ear)狀態並更新外觀。

      將值寫入任務資訊 GameConstants.精靈耳朵sw 子值,並觸發 equipChanged() 同步外觀。

      Parameters:
      elf - 精靈耳朵狀態值
    • setTempValue

      public void setTempValue(String arg, String values)
      設定(或清除)一筆記憶體暫存值。

      會先移除既有同鍵值;若 valuesnull 則僅清除不再寫入。 暫存值不寫入資料庫,僅存於記憶體 map。

      Parameters:
      arg - 暫存鍵
      values - 暫存值;傳入 null 表示清除該鍵
    • getTempValue

      public String getTempValue(String arg)
      取得指定鍵的記憶體暫存值。
      Parameters:
      arg - 暫存鍵
      Returns:
      對應暫存值;不存在時為 null
    • getOneTempValue

      public String getOneTempValue(String arg, String key)
      自指定暫存鍵的值字串中,解析出單一子鍵對應的值。

      透過 StringTool.getOneValue(String, String) 解析 key=value 形式的子值; 暫存鍵不存在時回傳 null

      Parameters:
      arg - 暫存鍵
      key - 子鍵名稱
      Returns:
      子鍵對應的值;暫存鍵不存在時為 null
    • updateOneTempValue

      public void updateOneTempValue(String arg, String key, String value)
      更新指定暫存鍵內的單一子鍵值。

      透過 StringTool.updateOneValue(String, String, String) 更新 key=value 子值後寫回; keynull 時直接返回。若更新後字串為空則清除整個暫存鍵 (以 null 呼叫 setTempValue(String, String))。

      Parameters:
      arg - 暫存鍵
      key - 子鍵名稱
      value - 子鍵新值
    • maxAllSkills

      public final void maxAllSkills()
      將所有可學技能(編號 < 90000000 且適用)全部設為滿等。

      排除 db/附加/抵抗類技能;透過 changeSkillsLevel(java.util.Map) 套用變更, 會送出技能更新封包並標記需存檔。

    • maxSkillsByJob

      public final void maxSkillsByJob()
      依角色目前職業將該職業可學技能設為滿等,並處理無用/極限冒險家技能。

      GameConstants.isUselssSkill(int) 判定的無用技能,除非角色具備極限冒險家任務 (ULT_EXPLORER)或該技能為對應職業的有用極限(連結)技能,否則清除(設為 0 級); 其餘可學且非專業技能設為滿等。透過 changeSkillsLevel(java.util.Map) 套用變更 (送出封包並標記存檔)。

    • maxTeachSkills

      public final void maxTeachSkills()
      將角色已習得的專業(採集/製作)技能全部提升至 10 級。

      遍歷編號 92000000~92040000 的專業技能,凡已習得者透過 changeProfessionLevelExp(int, int, int) 設為等級 10、經驗 0。

    • clearSkills

      public final void clearSkills()
      清除角色所有非專業技能(設為 0 級)。

      專業技能(GameConstants.isProfessionSkill(int))予以保留;其餘技能透過 changeSkillsLevel(java.util.Map) 重設為 0 級(送出封包並標記存檔)。

    • LearnSameSkill

      public final void LearnSameSkill(MapleCharacter victim)
      複製另一名角色的技能配置:先清除自身全部技能,再依對方的技能等級重新學習。

      兩階段皆透過 changeSkillsLevel(java.util.Map) 套用(送出封包並標記存檔); 學習階段採用 victim 的當前技能等級與技能本身的精通等級。

      Parameters:
      victim - 作為技能來源的角色
    • OfflineBanByName

      public boolean OfflineBanByName(String name, String reason)
      依角色名稱進行離線封鎖。

      先查 characters 資料表取得角色 id,查無(id 為 0)時回傳 false; 否則委派 OfflineBanById(int, String) 執行實際封鎖。查詢例外會被吞掉 (僅 log.debug)。

      Parameters:
      name - 目標角色名稱
      reason - 封鎖理由
      Returns:
      成功封鎖回傳 true;查無角色或封鎖失敗回傳 false
    • OfflineBanById

      public boolean OfflineBanById(int id, String reason)
      依角色 id 進行離線封鎖(封鎖帳號、IP 與 MAC)。

      由角色 id 查得帳號 id(查無則回傳 false),接著:

      • 更新 accounts 將該帳號標記為封鎖並寫入理由;
      • 查出該帳號的 SessionIPmac,記錄至封鎖日誌檔;
      • 將該 IP 寫入 ipbans,並透過 MapleClient.banSingleMacs(String) 封鎖 MAC。
      整體例外會被捕捉並記錄(log.error)後回傳 false

      副作用:多筆資料庫寫入與檔案日誌;不會主動踢線目標連線(踢線區塊已註解停用)。

      Parameters:
      id - 目標角色 id
      reason - 封鎖理由
      Returns:
      成功封鎖回傳 true;查無帳號或過程發生例外回傳 false
    • isUseVipCharm

      public boolean isUseVipCharm()
      是否已使用 VIP 護身符(防止經驗值損失的標記)。
      Returns:
      已使用回傳 true
    • setUseVipCharm

      public void setUseVipCharm(boolean useVipCharm)
      設定 VIP 護身符使用狀態。
      Parameters:
      useVipCharm - 是否已使用 VIP 護身符
    • isUseFirmCharm

      public boolean isUseFirmCharm()
      是否已使用堅固護身符(保護裝備的標記)。
      Returns:
      已使用回傳 true
    • setUseFirmCharm

      public void setUseFirmCharm(boolean useFirmCharm)
      設定堅固護身符使用狀態。
      Parameters:
      useFirmCharm - 是否已使用堅固護身符
    • updateAP

      public void updateAP()
      重新向客戶端推送四項基礎能力值(STR/DEX/INT/LUK)。

      依當前 PlayerStats 之值對 MapleStat.STR/MapleStat.DEX/ MapleStat.INT/MapleStat.LUK 各送出一次單一屬性更新封包。

    • setmsg_HiredMerchant

      public void setmsg_HiredMerchant(boolean control)
      設定是否記錄雇傭商人(販賣)相關訊息的開關。
      Parameters:
      control - 開啟記錄為 true
    • setmsg_Chat

      public void setmsg_Chat(boolean control)
      設定是否記錄聊天訊息的開關。
      Parameters:
      control - 開啟記錄為 true
    • getmsg_HiredMerchant

      public boolean getmsg_HiredMerchant()
      取得雇傭商人訊息記錄開關狀態。
      Returns:
      開啟記錄回傳 true
    • getmsg_Chat

      public boolean getmsg_Chat()
      取得聊天訊息記錄開關狀態。
      Returns:
      開啟記錄回傳 true
    • getDelChrLog

      public boolean getDelChrLog()
      取得刪除角色記錄開關狀態。
      Returns:
      開啟記錄回傳 true
    • set_DelChrLog

      public void set_DelChrLog(boolean control)
      設定是否記錄刪除角色的開關。
      Parameters:
      control - 開啟記錄為 true
    • teachSkill

      public int teachSkill(int skillId, int toCharId)
      由本角色向另一名角色「傳授」一個技能(直接寫入資料庫的離線授予)。

      先刪除本角色(teachId = this.id)先前對該技能的傳授紀錄;若目標角色尚未持有該技能, 則在 skills 資料表插入一筆(等級 1、精通 1、永久、teachId 為本角色 id)並回傳 1; 若目標已持有則回傳 -1。SQL 例外會被記錄(log.error)並回傳 -1。

      副作用:skills 資料表執行刪除與插入。

      Parameters:
      skillId - 要傳授的技能編號
      toCharId - 接受傳授的目標角色 id
      Returns:
      成功新增回傳 1;目標已持有或發生例外回傳 -1
    • changeTeachSkill

      public void changeTeachSkill(int skillId, int toCharId)
      為本角色(線上)即時加入一個帶有傳授來源標記的技能。

      技能不存在時直接返回。否則以等級 1、精通 1、永久、teachIdtoCharId 寫入記憶體技能表,送出 updateSkills 封包至本客戶端,並標記 changed_skills 待存檔。

      副作用:修改記憶體技能狀態並送出封包。

      Parameters:
      skillId - 要加入的技能編號
      toCharId - 傳授來源角色 id(寫入 teachId
    • fly

      public void fly()
      切換角色的飛行(翱翔)模式(GM 指令用)。

      未飛行時先套用騎乘技能 80001069,若取得 MapleBuffStat.MONSTER_RIDING 則改套用翱翔技能 80001089、取消騎乘 buff 並標記 flying;已飛行時取消 MapleBuffStat.SOARING buff 並關閉飛行。GM 會收到操作提示訊息。

      副作用:套用/取消 buff 並修改飛行狀態。

    • fly1

      public void fly1()
      在已處於飛行狀態時重新套用翱翔效果(重登/換圖後恢復飛行用)。

      僅當 isFlying() 為真才動作:套用騎乘技能 80001069,取得 MapleBuffStat.MONSTER_RIDING 後改套用翱翔技能 80001089 並取消騎乘 buff; 非飛行狀態則不做任何事。

      副作用:套用/取消 buff。

    • isFlying

      public boolean isFlying()
      是否處於飛行(翱翔)狀態。
      Returns:
      飛行中回傳 true
    • setFlying

      public void setFlying(boolean toggle)
      設定飛行(翱翔)狀態旗標。
      Parameters:
      toggle - true 為飛行中
    • addMobVac

      public void addMobVac()
      將怪物吸怪(Mob Vac)使用計數加一。

      用於反作弊偵測短時間內的吸怪頻率。

    • getMobVac

      public int getMobVac()
      取得怪物吸怪(Mob Vac)使用計數。
      Returns:
      吸怪計數
    • updateWarpingMap

      public void updateWarpingMap(boolean set)
      標記或清除「正在換圖」的時間戳(用於換圖防連點節流)。
      Parameters:
      set - true 記錄當前時間為換圖起點;false 清除(歸 0)
    • checkWarpingMap

      public boolean checkWarpingMap()
      檢查目前是否仍處於換圖節流時間窗(1.5 秒內)。

      未開始換圖(時間戳為 0)時回傳 false;換圖後 1.5 秒內回傳 true,逾時回傳 false

      Returns:
      仍在節流窗內回傳 true
    • getSkillWorkings

      public HashMap<Integer,Long> getSkillWorkings()
      取得技能剩餘作用時間表(技能編號對應到期時間戳)。
      Returns:
      內部 leftSkillTime 對應表(直接參照,非複本)
    • removeSkillWorking

      public void removeSkillWorking(int SkillID)
      移除指定技能的作用時間紀錄。
      Parameters:
      SkillID - 技能編號
    • setSkillWorking

      public void setSkillWorking(int SkillID, long SkillTime)
      設定指定技能的作用(到期)時間。
      Parameters:
      SkillID - 技能編號
      SkillTime - 作用時間戳
    • isSkillWorking

      public boolean isSkillWorking(int SkillID)
      判斷指定技能是否仍在作用中(存在時間紀錄)。
      Parameters:
      SkillID - 技能編號
      Returns:
      仍在作用中回傳 true
    • getSkillWorking

      public long getSkillWorking(int SkillID)
      取得指定技能的作用(到期)時間。
      Parameters:
      SkillID - 技能編號
      Returns:
      作用時間戳;無紀錄時為 0
    • updateUsingPortal

      public void updateUsingPortal(boolean set)
      標記或清除「正在使用傳送門」的時間戳(用於傳送門防連點節流)。
      Parameters:
      set - true 記錄當前時間為傳送起點;false 清除(歸 0)
    • checkUsingPortal

      public boolean checkUsingPortal()
      檢查目前是否仍處於傳送門節流時間窗(1.5 秒內)。

      未開始傳送(時間戳為 0)時回傳 false;傳送後 1.5 秒內回傳 true,逾時回傳 false

      Returns:
      仍在節流窗內回傳 true
    • checkCopyItemsByID

      public void checkCopyItemsByID(int fromid, int itemid)
      偵測道具複製(duping)作弊:掃描指定道具是否存在重複的「裝備專屬唯一 id」並予以查封。

      遍歷本角色的 USE/EQUIP/EQUIPPED 背包(以及來源角色 fromidEQUIP/EQUIPPED 背包,當其有效且非自身時),以 equipOnlyId 為鍵偵測 同一唯一 id 重複出現的道具。一旦發現重複,移除相關道具(雙方),並透過 AutobanManager.autoban(MapleClient, String) 以「複製裝備.」為由自動封鎖涉事雙方。

      副作用:可能刪除背包道具並觸發自動封鎖。

      Parameters:
      fromid - 道具來源角色 id(撿取者);-1 或等於自身 id 時不納入來源角色檢查
      itemid - 要檢查的道具編號
    • getLuckyBarrelsStatus

      public int getLuckyBarrelsStatus()
      取得幸運木桶(Lucky Barrels)小遊戲狀態。
      Returns:
      幸運木桶狀態值
    • setLuckyBarrelsStatus

      public void setLuckyBarrelsStatus(int luckyBarrelsStatus)
      設定幸運木桶(Lucky Barrels)小遊戲狀態。
      Parameters:
      luckyBarrelsStatus - 幸運木桶狀態值
    • endStorageMsg

      public void endStorageMsg(String name)
      結束一段倉庫操作紀錄:將緩衝區內容寫入日誌檔後清空。

      僅當 ServerConstants.log_storage 開啟時,將累積的 storagemsg 寫入 logs/data/倉庫紀錄.txt;不論是否寫檔都會清空緩衝區。name 參數目前未被使用。

      Parameters:
      name - 角色名稱(目前未使用)
    • addEmptyStorageMsg

      public void addEmptyStorageMsg(String msg)
      將一段不含時間戳的原始字串追加至倉庫紀錄緩衝區。
      Parameters:
      msg - 要追加的字串
    • addStorageMsg

      public void addStorageMsg(String name, String msg)
      將一筆帶時間戳與角色名稱的倉庫操作訊息追加至紀錄緩衝區。
      Parameters:
      name - 角色名稱
      msg - 操作訊息內容
    • endTradeMsg

      public void endTradeMsg(String name)
      結束一段交易紀錄:將緩衝區內容寫入日誌檔後清空。

      僅當 ServerConstants.log_trade 開啟時,將累積的 chatmsg 寫入 logs/data/交易紀錄.txt;不論是否寫檔都會清空緩衝區。name 參數目前未被使用。

      Parameters:
      name - 角色名稱(目前未使用)
    • addEmptyTradeMsg

      public void addEmptyTradeMsg(String msg)
      將一段不含時間戳的原始字串追加至交易聊天紀錄緩衝區。
      Parameters:
      msg - 要追加的字串
    • addTradeMsg

      public void addTradeMsg(String name, String msg)
      將一筆帶有目前時間戳與發話者名稱的交易訊息追加至交易聊天紀錄緩衝區。
      Parameters:
      name - 發話者角色名稱
      msg - 訊息內容
    • isOperateStorage

      public boolean isOperateStorage()
      傳回此角色目前是否正在操作倉庫。
      Returns:
      正在操作倉庫則為 true
    • setOperateStorage

      public void setOperateStorage(boolean set)
      設定此角色是否正在操作倉庫的狀態旗標。
      Parameters:
      set - 是否正在操作倉庫
    • isInvited

      public boolean isInvited()
      傳回此角色目前是否已送出交易邀請。
      Returns:
      已送出交易邀請則為 true
    • setInvited

      public void setInvited(boolean set)
      設定此角色的交易邀請狀態旗標。
      Parameters:
      set - 是否已送出交易邀請
    • getSayGood

      public int getSayGood()
      傳回累計的「說好話」(讚)時間值。
      Returns:
      累計的說好話時間值
    • setSayGood

      public void setSayGood(int time)
      將指定時間值累加至「說好話」(讚)時間。
      Parameters:
      time - 要累加的時間值
    • CashShopGiftCount

      public int CashShopGiftCount(int recipientid)
      查詢資料庫中指定收件者尚未領取的商城禮物數量。

      gifts 資料表執行 SELECT count(*) 查詢;查詢失敗時記錄為 debug 並回傳 0。

      Parameters:
      recipientid - 收件者角色 ID
      Returns:
      該收件者的禮物筆數;發生 SQL 例外時為 0
    • showInstruction

      public final void showInstruction(String msg, int width, int height)
      向此角色的用戶端送出一則指定尺寸的提示框(hint)。

      透過 CField.sendHint(String, int, int) 組包後送往自身用戶端。

      Parameters:
      msg - 提示內容文字
      width - 提示框寬度
      height - 提示框高度
    • initMesoBank

      public void initMesoBank()
      為此角色所屬帳號在 mesobank 資料表建立一筆金額為 0 的楓幣銀行紀錄。

      以帳號 ID 為主鍵執行 INSERT;失敗時寫入錯誤紀錄檔。

    • getMesoFromBank

      public long getMesoFromBank()
      從資料庫讀取此角色所屬帳號的楓幣銀行存款金額。

      查無紀錄時會呼叫 initMesoBank() 建立並回傳 0。

      Returns:
      銀行存款金額;查無紀錄或發生例外時為 0
    • setMoneytoBank

      public void setMoneytoBank(long money)
      將此角色所屬帳號的楓幣銀行存款金額覆寫為指定值。

      以帳號 ID 為條件執行 UPDATE;失敗時寫入錯誤紀錄檔。

      Parameters:
      money - 要寫入的存款金額
    • incMoneytoBank

      public void incMoneytoBank(long money)
      將楓幣銀行存款金額增加指定值(先讀後寫)。
      Parameters:
      money - 要增加的金額
    • decMoneytoBank

      public void decMoneytoBank(long money)
      將楓幣銀行存款金額減少指定值(先讀後寫)。
      Parameters:
      money - 要扣除的金額
    • hasSkill

      public boolean hasSkill(int skillid)
      傳回此角色是否已學會指定技能(等級大於 0)。
      Parameters:
      skillid - 技能 ID
      Returns:
      已學會該技能則為 true;技能不存在時為 false
    • getAriantRoomLeaderName

      public String getAriantRoomLeaderName(int room)
      傳回指定阿里安鬥技場房間的房主名稱。
      Parameters:
      room - 房間索引
      Returns:
      該房間的房主角色名稱
    • getAriantSlotsRoom

      public int getAriantSlotsRoom(int room)
      傳回指定阿里安鬥技場房間目前的人數(座位)。
      Parameters:
      room - 房間索引
      Returns:
      該房間的座位/人數值
    • removeAriantRoom

      public void removeAriantRoom(int room)
      清空指定阿里安鬥技場房間的房主與人數資料。
      Parameters:
      room - 房間索引
    • setAriantRoomLeader

      public void setAriantRoomLeader(int room, String charname)
      設定指定阿里安鬥技場房間的房主名稱。
      Parameters:
      room - 房間索引
      charname - 房主角色名稱
    • setAriantSlotRoom

      public void setAriantSlotRoom(int room, int slot)
      設定指定阿里安鬥技場房間的人數(座位)值。
      Parameters:
      room - 房間索引
      slot - 座位/人數值
    • setApprentice

      public void setApprentice(int app)
      設定此角色的學徒(收徒系統)角色 ID。
      Parameters:
      app - 學徒角色 ID
    • hasApprentice

      public boolean hasApprentice()
      傳回此角色目前是否擁有學徒。
      Returns:
      學徒 ID 大於 0 則為 true
    • getApprentice

      public int getApprentice()
      傳回此角色的學徒角色 ID。
      Returns:
      學徒角色 ID,無學徒時為 0
    • addAriantScore

      public void addAriantScore()
      將阿里安鬥技場分數加 1。
    • resetAriantScore

      public void resetAriantScore()
      將阿里安鬥技場分數歸零。
    • getAriantScore

      public int getAriantScore()
      傳回阿里安鬥技場目前累計分數。
      Returns:
      目前分數
    • updateAriantScore

      public void updateAriantScore()
      向整張地圖廣播此角色最新的阿里安鬥技場分數。

      透過 CField.updateAriantScore(String, int, boolean) 組包後對所在地圖全體玩家廣播。

    • getCoreAura

      public MapleCoreAura getCoreAura()
      傳回此角色的核心光環(Core Aura)物件。
      Returns:
      核心光環物件,可能為 null
    • getStolenSkills

      public List<Pair<Integer,Boolean>> getStolenSkills()
      傳回此角色(幻影/Phantom)所偷取的技能清單。

      每筆為 Pair<技能ID, 是否已選用>

      Returns:
      偷取技能清單,可能為 null
    • chooseStolenSkill

      public void chooseStolenSkill(int skillID)
      選用一個已偷取的幻影技能,並送出更換偷取技能的封包。

      會先取消同職業的其他已選技能(透過 unchooseStolenSkill(int)),再將指定技能標記為選用並向自身用戶端送出 JobPacket.PhantomPacket.replaceStolenSkill(int, int) 封包。若偷取技能 20031208 處於冷卻或清單為 null 則僅提示並中止。

      Parameters:
      skillID - 欲選用的偷取技能 ID
    • unchooseStolenSkill

      public void unchooseStolenSkill(int skillID)
      取消選用與指定技能同職業的所有已選偷取技能。

      對同職業每個已選技能呼叫 cancelStolenSkill(int) 取消其效果,並在有變更時透過 changeSkillLevel_Skip(Skill, int, byte)JobPacket.PhantomPacket.replaceStolenSkill(int, int) 同步用戶端。 若偷取技能 20031208 處於冷卻或清單為 null 則僅提示並中止。

      Parameters:
      skillID - 用來判定職業的偷取技能 ID
    • addStolenSkill

      public void addStolenSkill(int skillID, int skillLevel)
      為此角色(幻影)新增一個偷取的技能。

      會檢查該技能可被偷取(GameConstants.canSteal(Skill))、尚未偷過、且同職業已偷數量未達上限 (GameConstants.getNumSteal(int));條件符合時加入清單、設定 changed_skills、以 changeSkillLevel_Skip(Skill, int, byte) 賦予技能,並向自身用戶端送出 JobPacket.PhantomPacket.addStolenSkill(int, int, int, int)。 超過上限或重複時改送提示與 CWvsContext.enableActions()。若 20031208 冷卻中或清單為 null 則中止。

      Parameters:
      skillID - 欲偷取的技能 ID
      skillLevel - 欲設定的技能等級(會被夾在技能最大等級與偷取主動技能等級之內)
    • removeStolenSkill

      public void removeStolenSkill(int skillID)
      移除一個已偷取的幻影技能,並重建該職業的偷取技能用戶端顯示。

      若該技能正被選用會先 unchooseStolenSkill(int);接著取消其效果、自清單移除、設定 changed_skills、將技能等級歸零,並重送該職業所有剩餘偷取技能的封包以重建 UI。 若 20031208 冷卻中或清單為 null 則中止。

      Parameters:
      skillID - 欲移除的偷取技能 ID
    • cancelStolenSkill

      public void cancelStolenSkill(int skillID)
      取消由此角色施放之偷取技能在地圖上仍生效的 buff/debuff 效果。

      若該技能為怪物 debuff,會走訪地圖上所有怪物(MapleMap.getAllMonstersThreadsafe())取消由本角色施放的對應狀態; 若為持續性的玩家增益,則對地圖上所有玩家(MapleMap.getCharactersThreadsafe())呼叫 cancelEffect(MapleStatEffect, boolean, long)

      Parameters:
      skillID - 偷取技能 ID
    • getInnerSkills

      public List<InnerSkillValueHolder> getInnerSkills()
      傳回此角色的內在能力(Inner Ability)技能清單。
      Returns:
      內在能力技能清單
    • getFriendShipPoints

      public final int[] getFriendShipPoints()
      傳回好感度點數陣列(對應四位好感度 NPC)。
      Returns:
      好感度點數陣列
    • setFriendShipPoints

      public final void setFriendShipPoints(int joejoe, int hermoninny, int littledragon, int ika)
      一次設定四位好感度 NPC 的好感度點數。
      Parameters:
      joejoe - 第 0 格(喬喬)點數
      hermoninny - 第 1 格點數
      littledragon - 第 2 格(小龍)點數
      ika - 第 3 格點數
    • getFriendShipToAdd

      public final int getFriendShipToAdd()
      傳回待加入的好感度點數暫存值。
      Returns:
      待加入的好感度點數
    • setFriendShipToAdd

      public final void setFriendShipToAdd(int points)
      設定待加入的好感度點數暫存值。
      Parameters:
      points - 待加入的好感度點數
    • addFriendShipToAdd

      public final void addFriendShipToAdd(int points)
      將指定點數累加至待加入的好感度點數暫存值。
      Parameters:
      points - 要累加的好感度點數
    • setHonourExp

      public void setHonourExp(int exp)
      設定名譽(Honor)經驗值。
      Parameters:
      exp - 名譽經驗值
    • getHonourExp

      public int getHonourExp()
      傳回目前的名譽(Honor)經驗值。
      Returns:
      名譽經驗值
    • setHonorLevel

      public void setHonorLevel(int level)
      設定名譽(Honor)等級。
      Parameters:
      level - 名譽等級
    • getHonorLevel

      public int getHonorLevel()
      傳回名譽(Honor)等級。

      副作用:若等級為 0 會先自增為 1 再回傳。

      Returns:
      名譽等級(至少為 1)
    • addHonorExp

      public void addHonorExp(int amount, boolean show)
      增加名譽(Honor)經驗值,達門檻時自動升級並送出更新封包。

      經驗門檻為 名譽等級 * 500;跨越門檻時呼叫 honorLevelUp() 並結轉剩餘經驗。 向自身用戶端送出 CWvsContext.updateAzwanFame(int, int, boolean)CWvsContext.professionInfo(String, int, int, int) 封包; show 為真時並向玩家顯示獲得訊息。

      Parameters:
      amount - 要增加的名譽經驗值
      show - 是否顯示獲得提示訊息
    • honorLevelUp

      public void honorLevelUp()
      提升名譽(Honor)等級 1 級,並在特定等級獎勵內在能力技能。

      升級後送出 CWvsContext.updateAzwanFame(int, int, boolean);於等級 2/30/70 時透過 InnerAbillity 取得一個新的內在能力技能、加入 innerSkills、以 changeSkillLevel(Skill, byte, byte) 賦予,並送出 CField.updateInnerPotential(byte, int, int, int) 封包。

    • getHonorNextExp

      public int getHonorNextExp()
      傳回升至下一名譽等級所需的累計經驗門檻。
      Returns:
      下一級所需經驗((名譽等級+1) * 500);等級為 0 時為 0
    • gainHonor

      public void gainHonor(int honor, boolean show)
      增加名譽經驗值,並可選擇向用戶端顯示獲得提示。

      委派至 addHonorExp(int, boolean)(以 show=false 呼叫); 當 show 為真時另送 InfoPacket.showInfo(String) 至自身用戶端。

      Parameters:
      honor - 要增加的名譽經驗值
      show - 是否顯示獲得提示
    • setKeyValue

      public void setKeyValue(String key, String values)
      設定一筆自訂鍵值(key-value)資料,並標記為已變更以待存檔。

      若鍵已存在會先移除再寫入,並將 keyvalue_changed 設為 true

      Parameters:
      key - 自訂鍵
      values - 對應的值
    • getKeyValue

      public String getKeyValue(String key)
      取得指定自訂鍵所對應的值。
      Parameters:
      key - 自訂鍵
      Returns:
      對應的值;鍵不存在時為 null
    • resetRunningStack

      public void resetRunningStack()
      將跑步(running)堆疊計數歸零。
    • getRunningStack

      public int getRunningStack()
      傳回目前的跑步(running)堆疊計數。
      Returns:
      跑步堆疊計數
    • addRunningStack

      public void addRunningStack(int s)
      將指定值累加至跑步(running)堆疊計數。
      Parameters:
      s - 要累加的數值
    • setCardStack

      public void setCardStack(byte amount)
      設定卡片(card)堆疊數量。
      Parameters:
      amount - 卡片堆疊數量
    • getCardStack

      public byte getCardStack()
      傳回目前的卡片(card)堆疊數量。
      Returns:
      卡片堆疊數量
    • removePartTime

      public static void removePartTime(int cid)
      自資料庫刪除指定角色的兼職(part-time)工作紀錄。

      parttime 資料表以角色 ID 為條件執行 DELETE;失敗時記錄於日誌。

      Parameters:
      cid - 角色 ID
    • addPartTime

      public static void addPartTime(PartTimeJob partTime)
      PartTimeJob 物件新增一筆兼職工作紀錄至資料庫。

      角色 ID 小於 1 時直接略過;否則委派至 addPartTime(int, byte, long, int)

      Parameters:
      partTime - 兼職工作資料物件
    • addPartTime

      public static void addPartTime(int cid, byte job, long time, int reward)
      將一筆兼職(part-time)工作紀錄寫入資料庫。

      parttime 資料表執行 INSERT;失敗時記錄於日誌。

      Parameters:
      cid - 角色 ID
      job - 兼職工作類別
      time - 工作時間值
      reward - 獎勵值
    • getPartTime

      public static PartTimeJob getPartTime(int cid)
      從資料庫讀取指定角色的兼職(part-time)工作紀錄。

      parttime 資料表以角色 ID 查詢;查無紀錄時回傳僅含角色 ID 的空白物件。

      Parameters:
      cid - 角色 ID
      Returns:
      兼職工作資料物件(永不為 null)
    • equip

      public void equip(int itemId)
      將指定道具穿戴到此角色身上(不取代既有裝備、必要時自動取得)。

      委派至 equip(int, boolean, boolean),以 replace=falseadd=true 呼叫。

      Parameters:
      itemId - 要穿戴的裝備道具 ID
    • equip

      public void equip(int itemId, boolean replace)
      將指定道具穿戴到此角色身上,可選擇是否取代既有裝備。

      委派至 equip(int, boolean, boolean),以 add=true 呼叫。

      Parameters:
      itemId - 要穿戴的裝備道具 ID
      replace - 該裝備位若已有道具是否先卸下取代
    • equip

      public void equip(int itemId, boolean replace, boolean add)
      將指定道具穿戴到此角色對應的裝備位。

      EQUIP 背包中尋找該道具;找不到且 add 為真時會自動產生並加入背包 (透過 MapleInventoryManipulator.addbyItem(MapleClient, Item))。依 ItemConstants.getEquipedSlot(int) 決定裝備位, 找不到位置時對 GM 顯示提示後中止。replace 為真且該位已有裝備時先卸下並送出 InventoryPacket.dropInventoryItem(MapleInventoryType, short),最後以 MapleInventoryManipulator.equip(MapleClient, short, short) 完成穿戴。 會變更背包狀態並送出封包。

      Parameters:
      itemId - 要穿戴的裝備道具 ID
      replace - 該裝備位若已有道具是否先卸下取代
      add - 背包中無此道具時是否自動產生並加入
    • unequip

      public void unequip(int itemId)
      卸下指定的已穿戴道具(放回背包,不從背包移除)。

      委派至 unequip(int, boolean),以 remove=false 呼叫。

      Parameters:
      itemId - 要卸下的道具 ID;負值時視為裝備位 slot
    • unequip

      public void unequip(int itemId, boolean remove)
      卸下指定的已穿戴道具,可選擇直接刪除而非放回背包。

      itemId 為非負時依道具 ID 於 EQUIPPED 背包搜尋,為負時視為裝備位 slot 直接取得。 remove 為真時自裝備位移除並送出 InventoryPacket.dropInventoryItem(MapleInventoryType, short);否則以 MapleInventoryManipulator.unequip(MapleClient, short, short) 卸至 EQUIP 背包空位。會變更背包狀態並送出封包。

      Parameters:
      itemId - 要卸下的道具 ID;負值時視為裝備位 slot
      remove - 是否直接刪除(true)而非放回背包(false)
    • dofkingputer

      public void dofkingputer()
      移除此角色多餘的召喚獸,僅保留索引 0 的那一隻以外的逐一清除。

      同時取得 visibleMapObjectsLocksummonsLock 的寫鎖(先鎖前者以避免死結); 對符合條件的召喚獸向地圖廣播 SummonPacket.removeSummon(int, int)、自地圖移除、並自可見物件清單與召喚清單移除。

    • getOnlineTime

      public int getOnlineTime()
      傳回此角色累計的線上時間。
      Returns:
      線上時間值
    • addOnlineTime

      public void addOnlineTime()
      將累計線上時間加 1。