Lin-JN 發表於 2024-4-10 07:09

新手教学贴(什么都可以问)

有任何问题可以留言,请尽量不要贴图,以文字形式描述遇到的问题为佳,因为是在内地,不翻墙经常看不到图片。


不定期会上来回答问题并与大家相互学习。

问题包括但不限于源码、变身档编译(包括跑步、残影编译)等等,但是登陆器方面确实不懂,可能解答不了。

PS:本人不卖版本,对天堂纯属情怀。

先分享一个解决容易造成CPU爆炸的代码写法吧。

如果你要从世界获取一个物件来长期使用,请不要使用 for (xxxx xx : world.get().getXXX(X) 的代码,而应该在最初期就把这个对象定义下来。

比如,你要一个随身助手,或者随身祭司(奶妈)等等,或者获取一个固定的怪物目标。

可以使用类似 L1Character XXX
XXX = World.get().getFindObjId(objid)
或者
pc.XXX = this(物件) 之类
之后调用这个对象的时候就直接使用 XXX 即可
尤其是

for (L1Object obj : World.get().getAllObj()){
        if (obj.getXXX() == xxx) {
                dosomething();
        }
}

这样的代码,一定要慎用。
假设,你要写两只编号分别为 123、321的BOSS靠近后产生特殊效果(比如靠近十码内无敌),就一定不能用这种循环写法,哪怕是32核的CPU,也会在极短时间内爆掉。
那么应该怎么写呢?
我们在L1NpcInstance先定义一个变量,比如 isCloseBoss
在怪物出生或者你需要它变成这样的时候就给它定义好,直接


switch(npc.getNpcId()) {
        case 123:
        case 312:
                setCloseBoss(true);
                break;
}


if (npc.isCloseBoss) dosomething();


以上呢,是我经历过多次爆CPU后抓线程抓出来的一点经验,哪怕是连续攻击封包中的,都建议不要使用 World.get().getFindObjId(targetAttackId),表面看是瞬间的事,实际上还是遍历了一次世界编号,然后到 targetAttackId 才停止的,世界物件太多可能就会对资源使用造成影响,累积过多可能还会造成频繁GC,然后爆内存。
当尽量减少这些低效代码之后,伺服端连续几天不重启都不会有什么烦恼了。
同样的道理,如果是写自动打怪,建议直接用 getKnownObjects()去寻找目标,而不要用World循环,可以减少很多重复的运算,以此类推,各种重复的代码,我们也应该把它整理成一个方法来调用,这样看起来舒心,新添加东西时引用也方便。
做版本,最重要的是想法,是创新,而不是代码能力,写代码也一样,很多能实现目标的代码,我们也要看它是不是够简洁,够直接,够粗暴。

Poiu51688 發表於 2024-4-10 07:13

有誰能分享8.8c的登入器

keiggoo 發表於 2024-4-10 07:40

謝謝大大教學
感謝您

jacker78251 發表於 2024-4-10 07:54

本帖最後由 jacker78251 於 2024-4-10 07:57 編輯

請問使用l1j 3.80 版本模擬器及登入器
登入時, 是先進入賬號密碼, 而不是先跑遊戲動畫
發現把 Login.cfg 的 beanfunLogin = 1 改成 0
就會變成遊戲動畫先, 如正常的遊戲啟動

但是, 輸入帳密後, 會卡主
爬文 有看到有人說把模擬器內config 資料夾的pack.properties 中的 auth 改成 false
但是這個版本好像沒有這個pack.properties 設定檔

請問該如何解決呢~?

JCLee 發表於 2024-4-10 08:21

感謝大大分享

勇於發言 發表於 2024-4-10 08:31

jacker78251 發表於 2024-4-10 07:54
請問使用l1j 3.80 版本模擬器及登入器
登入時, 是先進入賬號密碼, 而不是先跑遊戲動畫
發現把 Login.cfg 的 ...

編碼器解決 , 用編碼器創造

jacker78251 發表於 2024-4-10 19:26

勇於發言 發表於 2024-4-10 08:31
編碼器解決 , 用編碼器創造

Login.cfg 我是從編碼器 編出來後改成 0 的@@

jacker78251 發表於 2024-4-10 19:33

jacker78251 發表於 2024-4-10 07:54
請問使用l1j 3.80 版本模擬器及登入器
登入時, 是先進入賬號密碼, 而不是先跑遊戲動畫
發現把 Login.cfg 的 ...

这是基础常识性的问题了,beanfunLogin是限定创建账号,只能以你在文件中预留的指定账号登录,pack.properties是用登陆器编码器加密创建的。

大大請問, 那如果我想實現, 先進入遊戲動畫, 再進行輸入帳號密碼, 該往哪個方向研究呢?
感謝回覆

diorlive 發表於 2024-4-11 17:14

請問你是如何擴建人物裝備視窗格子數量的?我看你的影片人物裝備視窗可以穿滿..

Lin-JN 發表於 2024-4-11 21:01

diorlive 發表於 2024-4-11 17:14
請問你是如何擴建人物裝備視窗格子數量的?我看你的影片人物裝備視窗可以穿滿.. ...

需要对应版本主程式的支持才可以哦


363因为UI的问题,没有办法做到,除非自己改UI,但我尝试过,发现改过的UI无法生效,对主程式研究比较少,所以也没弄明白是什么原因。
7.6版本以上的UI可以改,这点可以确定。

diorlive 發表於 2024-4-11 21:30

Lin-JN 發表於 2024-4-11 21:01
需要对应版本主程式的支持才可以哦




謝謝回覆

我是380, 卡在沒有足夠的 idx 位置可以使用XD


看樣子 760 以下只能改登入器了...O_Q

Java大神 發表於 2024-4-12 02:38

覺醒的特效 有辦法使用核心做到完美的跟隨效果嗎 (別人也看得很順)

# 補充一下 l1j 380版本 公版登入器

Lin-JN 發表於 2024-4-12 03:54

Java大神 發表於 2024-4-12 02:38
覺醒的特效 有辦法使用核心做到完美的跟隨效果嗎 (別人也看得很順)

# 補充一下 l1j 380版本 公版登入器


不明白你说的”觉醒“是个什么东西。

如果是类似一个跟随的effect的话,这个是没办法做到100%的,因为你需要考虑每个PC的网络延迟。

尽量让effect所使用的图档和角色图档数量一致助移动时间一致(帧数协调),就可以最大程度上协调双方移动速度,但这也是不可能的,因为玩家会使用变身。

so,无解,毕竟天堂不是传奇,简单的套图就可以。

唯一真正能够100%解决移速协调的,只有在变身档里面套影子挂件,但这个办法明显不可取,太繁琐了。

所以,还是忍受一下偶尔二者移动时偶尔的偏离吧。


新手上路 發表於 2024-4-16 00:40

大神好。
想請問關於武器魔法特效問題
我在一把武器,想用上巴拉卡斯-範圍流星雨
進入遊戲攻擊怪物,魔法特效都沒有出來
已經把機率設定為100%了

有些魔法可以顯現出來
有些就不行,

請問我該怎麼設定,材都有辦法顯現出來。
還是哪個環節錯誤。


也新增在DB,weapon_skill

Lin-JN 發表於 2024-4-18 00:49

新手上路 發表於 2024-4-16 00:40
大神好。
想請問關於武器魔法特效問題
我在一把武器,想用上巴拉卡斯-範圍流星雨


每个版本的 weapon_skill 功能不一定相同,主要看作者。


有的是必须写skill_id,然后特效使用的是 skill 里面的 castgfx 或者 castgfx2。
有的则是写skill_id,特效使用skill对应的特效,如果skill_id为0,则使用weapon_skill里面设定的特效。
还有的无视skill自身的特效,直接使用weapon_skill里面设定的特效。
有的需要写skill_id,有些则完全不用……

还有的weapon_skill可能会支持多个不同的effect特效,可能同时出现多个,也可能限制一次只出现一种,等等。
总之,得看你的版本是如何设定的。

blackgood 發表於 2024-4-18 20:18

感謝無私的教學

xinjiemail11 發表於 2024-4-20 19:58

大神,我想问问,3.81的76戒指和81戒指位置,当第三第四个戒指戴起来的时候,应该给客户端发送什么封包信息才可以让戒指显示到76和81的位置?

xinjiemail11 發表於 2024-4-20 21:37

xinjiemail11 發表於 2024-4-20 19:58
大神,我想问问,3.81的76戒指和81戒指位置,当第三第四个戒指戴起来的时候,应该给客户端发送什么封包信息 ...

好吧,搞定了,DEBUG一段一段改代码真要命。。。

gm20082008 發表於 2024-9-20 18:44

感謝大神無私~~~

特調嘎逼 發表於 2024-9-20 19:27

推推分享
頁: [1] 2
查看完整版本: 新手教学贴(什么都可以问)