歡迎您, 路人甲
您必須先注册才能在我們的網站發表。

用戶名
  

密碼
  





新奇搜索



(高級新奇搜索)

新奇統計
» 會員數: 863
» 最新會員: ipufigix
» 總主題數: 70
» 總帖子數: 169

完整統計

在線偷窺
目前有 40 隻貓在線。
» 2 隻貓 | 37 條魚
Google, Ronaldker, WillardCef

最近的主題
Handmatige of elektrische...
版塊: 系統支援
最近發表: frgrowpackage1
01-26-2022, 06:46 AM
» 回覆數: 0
» 人氣: 48
Which Rosin Press Have Yo...
版塊: 系統支援
最近發表: frgrowpackage1
01-26-2022, 06:39 AM
» 回覆數: 0
» 人氣: 10
Nike Dunk High 1985 Zwart...
版塊: 系統支援
最近發表: smytcla3
01-26-2022, 03:31 AM
» 回覆數: 0
» 人氣: 11
Nike Dunk High Cargo Khak...
版塊: 系統支援
最近發表: smytcla3
01-26-2022, 03:28 AM
» 回覆數: 0
» 人氣: 8
Adidas Harden Vol. 5 Ligh...
版塊: 系統支援
最近發表: smytcla3
01-26-2022, 03:25 AM
» 回覆數: 0
» 人氣: 15
Three steps to writing an...
版塊: 系統支援
最近發表: shatikhatun
01-16-2022, 09:23 AM
» 回覆數: 0
» 人氣: 194
Сериалы онлайн online aab...
版塊: 系統支援
最近發表: Brrftrl
01-12-2022, 09:09 AM
» 回覆數: 0
» 人氣: 363
Сериалы онлайн online aab...
版塊: 系統支援
最近發表: Brrftrl
01-12-2022, 08:39 AM
» 回覆數: 0
» 人氣: 112
Köp Adidas Superstar Onli...
版塊: 系統支援
最近發表: quague
01-12-2022, 08:17 AM
» 回覆數: 0
» 人氣: 104
Goedkope Reebok Phase
版塊: 系統支援
最近發表: quague
01-12-2022, 08:14 AM
» 回覆數: 0
» 人氣: 106

 
  NetBeans 不用重啟 應用修改源碼
發佈: fan - 02-07-2020, 04:02 PM - 版塊: 非楓之谷程式討論 - 無回覆

在debug模式中 應用變更代碼 按下紅框中的按鈕就可以了 或者在上面 Debug -> Apply Code Changes 
提供給跟我一樣傻傻還在重開的人做參考^^
[圖: pCthV4M.jpg]


  使用白狐113(src)編譯的問題
發佈: ahri0226 - 02-07-2020, 01:45 PM - 版塊: 楓之谷相關技術討論 - 回覆數 (1)

   
如圖所示,我編譯時發現了釋放記憶體的問題,請問有人遇過嗎?如何解決呢?


  小喵端 TMS145
發佈: 哈薩琪 - 02-06-2020, 06:39 AM - 版塊: 源碼與端口發布 - 回覆數 (9)

源碼: https://github.com/kevinlin0638/Piggy2

一個中階版本 從學習腳本 資料庫 源碼 都不錯的地方

小喵底端(作者:花花)
https://github.com/taida957789/twms145
歡迎任何有架設方面問題可以在此提問為何發佈此端:
本人可能會較忙碌所以修端的時間較少,裡面應該滿多新手們可以學習的東東,大概是我之前開源的冰火谷CMS143超級進化版吧還有一些東西待修復或新增
1.雙鍊
2.精靈遊俠 靈魂灌注buff
3.我寫的半成品撲克
4.家族
5.指令分階
6.GUI
7.消耗品236~245等無法使用(不知道原因可能是封包問題)
8.商城封包未完善
9.一些尚未發掘的此端一些特色系統 薛錢系統?
1.輪迴
2.日出勳章(擋怪物的Debuff)
3.寵物全圖撿
4.贊助衝捲軸
5.金流伺服器 付款完成會自動給贊助點,自動開單等等
6.附魔系統(尚未實裝 之後寫好會push)裝備系統
1.萬能剪刀
2.自製裝備強化
3.快速刷潛能
4.裝備合成系統
5.裝備墳墓系統(捲軸衝爆裝備還原)
6.道具鐵砧
7.道具回真
8.動態破攻系統(需搭配小喵谷登入器,過hs)其他
1.自製武陵道場
2.點裝交易指令
3.獎勵設定指令
4.公會排名系統(特殊的 有興趣可自行查看)
5.搜集道具活動系統
6.各種腳本模板
7.掉寶查詢系統
8.武陵排行領獎系統
9.專業村修復
等等.......主程式(未改UI前的主程式):
https://drive.google.com/open…麻煩不要使用小喵谷UI開服,如需客製化或使用請洽 @微笑如果有貢獻歡迎發 Request 到 github
有問題可以在此文章下留言
發這篇主要以提供想架設的新手作參考
或共同學習交流等


Video 運用登入器實現動態破攻
發佈: 哈薩琪 - 02-06-2020, 05:50 AM - 版塊: 成果展示 - 無回覆



小喵谷 使用登入器進行動態破攻
之後有時間將分享較詳細的教學


Information Ha Creator 高版本地圖修改製作工具
發佈: 哈薩琪 - 02-06-2020, 05:27 AM - 版塊: WZ修改 - 回覆數 (1)

原作者 原始碼: https://github.com/haha01haha01/HaSuite

修改後的下載連結: https://drive.google.com/file/d/1gGpy6F9...sp=sharing
 HaCreator 地圖編輯器 高版本修復版 (如還有出現錯誤可以留言回報)

此程式是開高版本WZ 的 HaCreator TMS 18x 跟 目前最新版新楓之谷 測試過分享給那些 不太熟悉程式 對美術或做圖有興趣的人


Video 手殘復健專用 衝方塊極限版
發佈: 哈薩琪 - 02-04-2020, 06:08 AM - 版塊: 成果展示 - 無回覆



一樣的 NPC 衝方塊
不一樣的 可以設定 跳階通知 特定潛能通知

使用 Python 撰寫腳本


  2020年01月整合更新日誌
發佈: 哈薩琪 - 02-04-2020, 05:37 AM - 版塊: 開發與更新日誌 - 回覆數 (1)

遊戲新增
遊戲與系統相關:

1. 培羅德副本
2. 資料庫系統修復
3. 很多系統上的 BUG 修復
4. 武陵道場副本


NPC相關:
1. 新增商店模板
2. 新增兌換/合成模板
3. 培羅德


  2019年12月整合更新日誌
發佈: 哈薩琪 - 02-03-2020, 04:09 PM - 版塊: 開發與更新日誌 - 回覆數 (1)

遊戲新增
遊戲與系統相關:

1. Buff 破攻系統
2. 混沌頻道設定 11~20 頻
3. 新增精英怪物
4. 降低怪物出生時間、新增地圖怪物數量
5. 新資料庫系統
5. 新腳本系統


NPC相關:
1. 新增衝方塊 NPC - 潛能提醒版
2. 新增潛能傳承 NPC


Star Python 腳本系統 (請使用第二版教學 較清楚)
發佈: 哈薩琪 - 01-21-2020, 04:00 PM - 版塊: 腳本分享 - 無回覆

前言: 



Python 是一個語法易讀的程式語言,對於剛接觸程式的新手更好理解。



此篇不會教學如何使用 Python 撰寫程式,且必須對 Java 語法有一定基礎。



此篇 Python 系統是參考 Swordie 端口撰寫,此篇教學僅 NPC,傳點、反應物、任務....等,類似







展示:



設定完成後,就可以輕鬆的撰寫腳本了,以下影片是衝方塊且可指定潛能提醒的NPC















目的:



在 OD 端架構下 讓 Js 腳本與 Python 腳本並存







好處:






  1. 語法簡潔易懂
  2. 流程較 Js 直觀,JS一個State一個State Python就是從上到下一行一行跑
  3. 使用 字典 陣列 等等 非常之方便
  4. .......




舉個例子 



如果今天JS 要拿 Selection 的數字的話 先 sendSimple 然後 下一個 State 的 Selection 變數會存放玩家選的選項



今天用 Python 只要一行 selection = int(sm.sendNext(u"#L1#選項1#l\r\n#L2#選項2#l"))







還有更多方便的東西等你來發掘











開始教學:











第一步: 下載第三方程式庫
想要使用 Python 腳本 首先要先下載 Jython 函式庫可以去官方下載最新版 .jar 也可以把專案轉成 Maven 專案 import Jython或下載 https://drive.google.com/open?id=10SQy2Y...GSf_HCu1XE 加入 Library












第二步: 下載以下 Java 檔案 放到 Scripting 的資料夾
ScriptInfo.java ScriptManagerImpl.java(會有一些函式有錯誤 將不需要的註解掉即可 這個檔案有點像 NPCConversationManager.java 可以自己加函式進







第三步: 修改 NPCScriptManager.java 裡面的 start 語法
原本應為
代碼:
if (iv == null) {
                    if (c.getPlayer().isShowErr()) {
                        c.getPlayer().showInfo("NPC腳本", true, "找不到NPCID:" + npc + " 特殊腳本:" + script + c.getPlayer().getMap());
                        System.out.println("找不到NPCID:" + npc + " 特殊腳本:" + script + c.getPlayer().getMap() + "");
                    }
                    iv = getInvocable("normal/特殊/notcoded.js", c, true); //safe disposal
                    if (iv == null) {
                        dispose(c);
                        return;
                    }
                }



修改後

代碼:
if (iv == null) {
                    ScriptManagerImpl sm = c.getPlayer().getScriptManager();
                    if (script == null) {
                        sm.startScript(npc, objid, ScriptType.NPC);
                    } else {
                        sm.startScript(npc, objid, script, ScriptType.NPC);
                    }
                    return;
                }



如果在 js 裡面找不到腳本的話 就到 python 裡面找






第四: 在 ServerConfig.java 中新增這幾個變數
代碼:
    public static final String SCRIPT_DIR = DIR + "/script/python";

    public static final String SCRIPT_NPC = SCRIPT_DIR + "/NPC";
    public static final String SCRIPT_SPECIAL = SCRIPT_DIR + "/SPECIAL";
    public static final String SCRIPT_REACTOR = SCRIPT_DIR + "/REACTOR";
    public static final String SCRIPT_ITEM = SCRIPT_DIR + "/ITEM";
    public static final String SCRIPT_USER_ENTER = SCRIPT_DIR + "/USER_ENTER";
    public static final String SCRIPT_USER_FIRST_ENTER = SCRIPT_DIR + "/USER_FIRST_ENTER";
    public static final String SCRIPT_PORTAL = SCRIPT_DIR + "/PORTAL";
    public static final String SCRIPT_OTHER = SCRIPT_DIR + "/OTHER";
這些是宣告 你 Python腳本放的位置








第五步: 在 MapleCharacter 中新增以下函式以及變數
代碼:
    private ScriptManagerImpl scriptManagerImpl = new ScriptManagerImpl(this);
 
代碼:
    public ScriptManagerImpl getScriptManager() {
        return scriptManagerImpl;
    }
 些是讓你的腳色綁定腳本總管





第六步: 在 CField 新增以下函式
代碼:
public static byte[] scriptMessage(NpcScriptInfo nsi, NpcMessageType nmt) {
            if (ServerConfig.LOG_PACKETS) {
                System.out.println("調用位置: " + new java.lang.Throwable().getStackTrace()[0]);
            }
            MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();

            mplew.writeShort(SendPacketOpcode.LP_ScriptMessage.getValue());
            mplew.write(nsi.getSpeakerType());
            int overrideTemplate = nsi.getOverrideSpeakerTemplateID();
            mplew.writeInt(overrideTemplate != 0 ? overrideTemplate : nsi.getTemplateID());
            mplew.write(overrideTemplate > 0);
            if(overrideTemplate > 0) {
                mplew.writeInt(overrideTemplate);
            }
            mplew.write(nmt.getVal());
            mplew.write(nsi.getParam());
            mplew.write(nsi.getColor());

            switch(nmt) {
                case Say:
                case SayOk:
                case SayNext:
                case SayPrev:
                    if((nsi.getParam() & 4) != 0) {
                        mplew.writeInt(nsi.getOverrideSpeakerTemplateID());
                    }
                    mplew.writeMapleAsciiString(nsi.getText());
                    mplew.write(nmt.isPrevPossible());
                    mplew.write(nmt.isNextPossible());
                    mplew.writeInt(nmt.getDelay());
                    break;
                case AskMenu:
                case AskAccept:
                case AskYesNo:
                    if((nsi.getParam() & 4) != 0) {
                        mplew.writeInt(nsi.getOverrideSpeakerTemplateID());
                    }
                    mplew.writeMapleAsciiString(nsi.getText());
                    break;
                case SayImage:
                    String[] images = nsi.getImages();
                    mplew.write(images.length);
                    for(String image : images) {
                        mplew.writeMapleAsciiString(image);
                    }
                    break;
                case AskText:
                    if((nsi.getParam() & 4) != 0) {
                        mplew.writeInt(nsi.getOverrideSpeakerTemplateID());
                    }
                    mplew.writeMapleAsciiString(nsi.getText());
                    mplew.writeMapleAsciiString(nsi.getDefaultText());
                    mplew.writeShort(nsi.getMin());
                    mplew.writeShort(nsi.getMax());
                    break;
                case AskNumber:
                    mplew.writeMapleAsciiString(nsi.getText());
                    mplew.writeInt(nsi.getDefaultNumber());
                    mplew.writeInt(nsi.getMin());
                    mplew.writeInt(nsi.getMax());
                    break;
                case InitialQuiz:
                    mplew.write(nsi.getType());
                    if(nsi.getType() != 1) {
                        mplew.writeMapleAsciiString(nsi.getTitle());
                        mplew.writeMapleAsciiString(nsi.getProblemText());
                        mplew.writeMapleAsciiString(nsi.getHintText());
                        mplew.writeInt(nsi.getMin());
                        mplew.writeInt(nsi.getMax());
                        mplew.writeInt(nsi.getTime()); // in seconds
                    }
                    break;
                case InitialSpeedQuiz:
                    mplew.write(nsi.getType());
                    if(nsi.getType() != 1) {
                        mplew.writeInt(nsi.getQuizType());
                        mplew.writeInt(nsi.getAnswer());
                        mplew.writeInt(nsi.getCorrectAnswers());
                        mplew.writeInt(nsi.getRemaining());
                        mplew.writeInt(nsi.getTime()); // in seconds
                    }
                    break;
                case ICQuiz:
                    mplew.write(nsi.getType());
                    if(nsi.getType() != 1) {
                        mplew.writeMapleAsciiString(nsi.getText());
                        mplew.writeMapleAsciiString(nsi.getHintText());
                        mplew.writeInt(nsi.getTime()); // in seconds
                    }
                    break;
                case AskAvatar:
                    int[] options = nsi.getOptions();
                    mplew.write(nsi.isAngelicBuster());
                    mplew.write(nsi.isZeroBeta());
                    mplew.writeMapleAsciiString(nsi.getText());
                    mplew.write(options.length);
                    for (int option : options) {
                        mplew.writeInt(option);
                    }
                    break;
                case AskSlideMenu:
                    mplew.writeInt(nsi.getDlgType());
                    // start CSlideMenuDlg::SetSlideMenuDlg
                    mplew.writeInt(0); // last selected
                    StringBuilder sb = new StringBuilder();
                    for (DimensionalPortalType dpt : DimensionalPortalType.values()) {
                        if (dpt.getMapID() != 0) {
                            sb.append("#").append(dpt.getVal()).append("#").append(dpt.getDesc());
                        }
                    }
                    mplew.writeMapleAsciiString(sb.toString());
                    mplew.writeInt(0);
                    break;
                case AskSelectMenu:
                    mplew.writeInt(nsi.getDlgType());
                    if (nsi.getDlgType() <= 0 || nsi.getDlgType() == 1) {
                        mplew.writeInt(nsi.getDefaultSelect());
                        mplew.writeInt(nsi.getSelectText().length);
                        for (String selectText : nsi.getSelectText()) {
                            mplew.writeMapleAsciiString(selectText);
                        }
                    }
                    break;
            }
            if ((nsi.getParam() & 4) != 0) {
                nsi.setParam((byte) (nsi.getParam() ^ 4));
            }

            return mplew.getPacket();
        }

這個是發封包用的






第七步: 在 NPCHandler 中修改
在 NPCMoreTalk 裡面的
代碼:
byte action = -1;
        if (slea.available() > 0) {
            action = slea.readByte(); // 00 = end chat, 01 == follow
        }
下方 加入
代碼:
NpcMessageType nmt = smi.getNpcScriptInfo().getMessageType();
        if (nmt != null) {
            if (nmt != NpcMessageType.Monologue) {
                int answer = 0;
                boolean hasAnswer = false;
                String ans = null;
                if (nmt == NpcMessageType.AskIngameDirection) {
//                    InGameDirectionAsk answerType = InGameDirectionAsk.getByVal(action);
//                    if (answerType == null || answerType == InGameDirectionAsk.NOT) {
//                        return;
//                    }
//                    boolean success = inPacket.decodeByte() == 1;// bSuccess
//                    if (answerType == InGameDirectionAsk.CAMERA_MOVE_TIME && success) {
//                        int answerVal = inPacket.decodeInt();
//                        chr.write(UserLocal.inGameDirectionEvent(InGameDirectionEvent.delay(answerVal)));
//                        return;
//                    }
//                    chr.getScriptManager().handleAction(nmt, (byte) 1, answerType.getVal());
                    return;
                }
                if (nmt == NpcMessageType.AskText && action == 1) {
                    ans = slea.readMapleAsciiString();
                } else if (slea.available() >= 4) {
                    answer = slea.readInt();
                    hasAnswer = true;
                }
                if (nmt == NpcMessageType.AskAvatar || nmt == NpcMessageType.AskAvatarZero) {
                    slea.readByte();
                    hasAnswer = slea.readByte() != 0;
                    if (hasAnswer) {
                        answer = slea.readByte();
                    }
                }
                if (nmt == NpcMessageType.AskText && action != 0) {
                    chr.getScriptManager().handleAction(nmt, action, ans);
                } else if ((nmt != NpcMessageType.AskNumber && nmt != NpcMessageType.AskMenu
                        && nmt != NpcMessageType.AskAvatar && nmt != NpcMessageType.AskAvatarZero
                        && nmt != NpcMessageType.AskSlideMenu) || hasAnswer) {
                    // else -> User pressed escape in a selection (choice) screen
                    chr.getScriptManager().handleAction(nmt, action, answer);
                } else {
                    // User pressed escape in a selection (choice) screen
                    chr.getScriptManager().dispose(false);
                }
            } else {
                chr.getScriptManager().handleAction(nmt, (byte) 1, 1); // Doesn't use  response nor answer
            }
            return;
        }
這個是用來接收並繼續對話的 就是 State 1 -> State 2 的概念



第八步: 在你 Script 資料夾中 新增 第四步中 所有你宣告的資料夾
並且在 你設定的 SCRIPT_DIR 路徑中 放入這個 py 檔 NotCode.py這個檔案是範例檔案 如果 js 跟 python 都沒有此 NPC 那將會自動生成一個 py 檔 在你設定的 Python NPC 路徑中

快要完成了 Angel Angel




第九步: 除錯搂 把有錯誤的地方修正,依照每個端口寫法要修正的地方可能不太一樣 可以貼在留言處詢問
簡單來說此步驟就是把一些你沒有的函式或變數 新增或修改成你端口有的


第十步: 隨意找一個沒有腳本的NPC 測試看看行不行使用瞜!!!






Heart 恭喜完成 Python 腳本系統,如果遇到困難也不要灰心
論壇內隨時可以發問或留言的


Rainbow 各版本端口參考
發佈: 哈薩琪 - 01-21-2020, 01:44 PM - 版塊: 源碼與端口發布 - 回覆數 (3)

From FB 87架設 利金顫

V62 修改版
https://drive.google.com/file/d/1U43hGoZ...sp=sharing

陸版CMS072伺服端
https://drive.google.com/open?id=16PCbXD...G1XrBotQXL

陸版CMS079伺服端及客戶端

https://drive.google.com/open?id=1i85ONm...WcEsUXPtKe

小馬端V62伺服端及我修過的客戶端

https://www.facebook.com/groups/20496766...188711178/

TMS54客戶端WZ檔

https://drive.google.com/open?id=1GirM2H...5sScat3E9x

TMS63客戶端WZ檔

https://drive.google.com/open?id=1GdD37m...lrguUz8SJf-

TMS77客戶端

https://drive.google.com/open?id=1pieM1U...XNQbpyptKQ

辛巴端113伺服端

https://drive.google.com/open?id=1MBriEK...YE3oS_wUO9

白狐113伺服端及客戶端(還有一鍵安裝)

https://drive.google.com/open?id=10qghkc...NZwFuoId_0

117.2伺服端及客戶端

https://drive.google.com/open?id=1iWH5W5...PVTRqGB6a7

118伺服端

https://drive.google.com/open?id=1U9EW-m...dkahXyKzjj

TMS120伺服端

https://drive.google.com/open?id=103wYN5...V7g-qrmwMe

120伺服端及客戶端

https://drive.google.com/open?id=1aXG1n-...0HFseJYti2

夢夢谷120伺服端及客戶端

https://drive.google.com/open?id=1giljtN...kPIMBlAIkN

冰火谷伺服端及客戶端

https://drive.google.com/open?id=1fQN-nn...qVhyg94CZV

142伺服端及客戶端

https://drive.google.com/open?id=1VwkVB0...L65QUZN8XG

TMS142客戶端

https://drive.google.com/open?id=1pZPocz...-QPiBzzPi_

144.3伺服端及客戶端

https://drive.google.com/open?id=1oFKGTB...7uWWEatIX_

189.1伺服端及客戶端
https://drive.google.com/open?id=1C2dFuJ..._e3TM8PxIb

歡迎補充 但不建議發完整端口 以免伸手牌以及有心人士賣端
此處僅當作學習素材 建議從低版本開始上手