2016年8月4日 星期四

修改變身檔精華教學

如要轉貼請註明作者: T.G.G 論壇會員 james(冥后:嵐星痕)
感謝霖大提供的修改教學包,以及洋大等人對男法改聖誕潘朵拉這篇文章的精采的討論過程,讓我了解 106 指令的用法。我的家族冥后日不落CLUB
首先我們要了解什麼是變身檔。
我們游戲中所有的動作都先通過 list.spr 決定調用 Sprite.idx 的哪一張圖片。
通過修改目錄 list.spr 調用不同于原有的圖片,也就是修改 "
 變身檔 " 的過程。
要解list.spr請用 Pakext.exe 開啟天堂資料夾中的 text.idx,慢慢找到 list.spr 按右鍵第一個就解到天堂資料夾內了。
Pakext.exe 程式在 T.G.G 論壇的修改教學區的置頂文章裡有下載點,或者是去我的家族也是有放檔案。
得到 list.spr 文件後,我們只要用記事本打開就可以看見了。
裡面都是數字和英文。

在來是變身檔裡的名詞介紹:

動作編號:
0.sign ← 符號(物件用指令)
0.fire ← 特效(魔法等特效的動作,可呼叫)
0.walk ← 空手走路動作
1.attack ← 空手攻擊動作
2.damage ← 空手被打動作
3.Breath ← 呼吸動作
3.idle ← 工作
4.walk sword ← 拿劍走路動作
4.walksky ← 空中移動
5.attack sword ← 拿劍攻擊動作
6.damage sword← 拿劍被打動作
7.Breath Sword ← 拿劍呼吸
7.breathsky ← 空中呼吸
8.death ← 死亡動作
11.walk axe ← 拿斧頭走路動作
12.attack axe ← 拿斧頭攻擊動作
13.damage axe ← 拿斧頭被打動作
14.Breath Axe ← 拿斧呼吸
11.hide←隱藏(如:史巴托遁地)
13.hide damage←隱藏被打
14.hide breath←隱藏呼吸
15.get ← 撿東西
16.throw ← 投擲
17.wand ← 用變仗電仗
18.spell dir ← 攻擊魔法
19.spell nodir ← 輔助魔法
20.walk bow ← 拿弓走路動作
21.attack bow ← 拿弓攻擊動作
22.damage bow ← 拿弓被打動作
23.Breath Bow ← 拿弓呼吸
24.walk spear ← 拿茅走路動作
25.attack spear ← 拿茅攻擊動作
26.damage spear ← 拿茅被打動作
27.Breath Spear ← 拿矛呼吸
28.on ← 啟動(物件用指令)
29.off ← 關掉(物件用指令)
28.open ← 打開(物件用指令)
29.close ← 關閉(物件用指令)
28.south ← 南 (物件用指令)
29.west ← 西 (物件用指令)
30.alt attack ← 攻擊必殺技
31.spell direction extra ← 魔法必殺技
32.stateone ← 塔(物件用指令)
33.statetwo ← 破壞塔(物件用指令)
34.statethree ← 破壞塔(物件用指令)
35.statefour ← 破壞塔(物件用指令)
32.dooraction ← 城門(物件用指令)
33.dooraction ← 破壞城門(物件用指令)
34.dooraction ← 破壞城門(物件用指令)
35.dooraction ← 破壞城門(物件用指令)
36.dooraction ← 破壞城門(物件用指令)
37.dooraction ← 破壞城門(物件用指令)
40.walk staff ← 拿仗走路動作
41.attack staff ← 拿仗攻擊動作
42.damage staff ← 拿仗被打動作
43.Breath staff ← 拿杖呼吸
44.moveup ← 飛向天空
45.movedown ← 降落
46.walk dagger←拿匕首走路動作
47.attack dagger←拿匕首攻擊動作
48.damage dagger←拿匕首被打動作
49.breath dagger←拿匕首站立動作
54.walk double sword←雙刀走路動作
55.attack double sword←雙刀攻擊動作
56.damage double sword←雙刀被打動作
57.breath double sword←雙刀站立動作
58.walk claw←拿爪走路動作
59.attack claw←拿爪攻擊動作
61.breath claw←拿爪站立動作
60.damage claw←拿爪被打動作
62.walk shuriken←持飛鏢走路動作
63.attack shuriken←持飛鏢攻擊動作
64.damage shuriken←持飛鏢被打動作
65.breath shuriken←持飛鏢站立動作
100.switch ← 開關控制
101.shadow(X) ← 影子圖
102.type(X) ← 物件分辨
104.attr(X) ← 濾鏡
105.clothes(X X) ← 附加物件
106.weapon(@ # $ % &)←武器
107.size(X X) ← 體型
108.flying type(X) ← 飛行模式
109.effect(X X) ← 魔法造成效果
110.framerate(X) ← 加速指令
111.stride(1) ← 跳畫格移動
 
改變身檔時要注意很重要的一點就是,以上的動作編號只要原始的檔案裡有的全都可以加以修改,
但是不可以刪除。
在來看一下男妖精的數值
#138 208 elf male 0.walk(1 4,0.0:4 0.1:4[300 0.2:4 0.3:4)
#138是變編號138,208是代表這個編號裡總共有208張圖,elf male這個編號的英文名字翻過來因該是男妖精,
0.walk(1 4,0.0:4 0.1:4[300 0.2:4 0.3:4) 這就是上面所說的空手走路動作。
上面的 " (1 4, " 裡的是代表有向,有向的意思是當你面向不同方向時會讀取不同方向的圖
例如:
5.attack sword(1 5,24.0:4 32.0:3 32.1:7 32.2:2[248[701[702 32.3:6!)
當你:

面對左上就會跑32
面對正上就會跑33
面對右上就會跑34
面對正右就會跑35
面對右下就會跑36
面對正下就會跑37
面對左下就會跑38
面對正左就會跑39

如果數值為,不管面對哪,都是讀取32圖那張圖。
回到正題裡面的4代表一個動作有4張圖。
在來 " 0.0:4 0.1:4[300 0.2:4 0.3:4 " 這些數值裡的 " 0.0 "、" 0.1 "、" 0.2 "、" 0.3 " 是圖檔的編號。而0.0:4裡的4是這張圖執行時的時間單位,把裡面的四張圖的時間單位加起來就是這個動作的時間總合。
要是像這個作動5.attack sword(1 5,24.0:4 32.0:3]215 32.1:7 32.2:2[248[701[702 32.3:6!)
上面的 " ! " 是執行到 " 32.3:6 " 這張圖時對方會出現被打動作以及被打聲音,加的遇多對方會有遇多個被打動作及聲音出現。
如果把 " ! " 刪除了則對方不會出現被打動作及被打聲音,包括射出的箭以及魔法。
上面的 " [ " 是執行到 " 32.2:2 " 這張圖時執行 248、701、702 這三個聲音檔。
上面的 " ] " 是執行到 " 32.0:3 " 這張圖時執行 #215 這個圖檔,要套圖檔時要注意第一張圖不能套圖檔,
像這個動作裡就是把它套在第二個圖裡面。
例如你想被打時不要被貼住,想可以快一點拉開就把被打動作裡的圖減少到剩一張,並且把時間改1留下聲音檔。或者是不減少圖檔,只修改時間單位也是可以的,放魔法撿東西等等也是一樣。

動作指令的內容:

102.type(0) ← 影子,法術
102.type(1) ← 裝飾品
102.type(5) ← 玩家,不能對話的NPC
102.type(6) ← 可以對話NPC
102.type(7) ← 寶箱,開關
102.tyoe(8) ← 可以打開的門
102.type(9) ← 可撿取的物品
102.tyoe(10) ← 怪物,會出現攻擊符號
102.type(11) ← 城牆,城門
102.type(12) ← 新的NPC 可以對話
102.type(14) ← 盟屋前的告示牌
102.type(15) ← 拍賣告示板
104.attr(1) ← 半透明
104.attr(2) ← 隱形,可看見名字
104.attr(4) ← 正常
104.attr(8) ← 發光的
104.attr(9) 半透明+發光
104.attr(32) ← 中毒,綠色
104.attr(128) ← 黑邊半透明
104.attr(512) ← 石化,灰灰的
104.attr(4096) ← 南瓜怪隱形(有影子)
104.attr(4104) ← 南瓜怪隱形(沒影子)
104.attr(8192) ← 巨人守護者隱形(有影子)
104.attr(8193) ← 巨人守護者隱形(沒影子)
105.clothes(X X) ← (物件數量 物件圖號)
106.weapon(@ # $ % &)
@代表的是拿劍
#代表的是拿斧
$代表的是拿弓
%代表的是拿矛
&代表的是拿仗 

當拿不同武器要換不同圖檔時,
要用 106 而不是 105
109.() 這個是用在魔法動畫的,
表示這個動畫要接哪個動畫。
(1 X)X是任何一個魔法編號,
X=-1則是不接動畫,消失效果。

110.framerate(X) ← 24正常36綠水40勇水48雙綠水255完美
計算公式 110.(X) X=一秒鐘的畫格數 X/24=加速倍率
要改打變怪免強制就是把 102.type(5) 改成 102.tyoe(10)。

走路的修改方法:

通常人、怪都走路都是4張圖,但有些怪就很多,下面是狼人的數值:
0.walk(1 8,0.0:2 0.1:2> 0.2:2 0.3:2> 0.4:2 0.5:2> 0.6:2 0.7:2>),時間總合:2+2+2+2+2+2+2+2=16
在來是王子的數值:0.walk(1 4,24.0:4 24.1:4[300 24.2:4 24.3:4),時間總合:4+4+4+4=16
雖然狼人的時間總合跟王子的一樣,但卻有八張圖,王子的只有四張圖,這就是走的慢的原因了。
我們可以把狼人的改成 0.walk(1 4,0.0:4 0.2:4 0.4:4 0.6:4) 時間單位一樣是 16 不過在畫面上看起來會感覺走的比較快。
不過要說上是走路加數的話還稱不上,真正的加速是把時間單位減1。
減少1並不會照成回碩,除非當時很LAG。
當然也可以減2不過很少人這樣作,減2是伺服器的極限,如果網路有一些不穩就會照成回碩或LAG。
減1後的總時間單位是15,走起來是有比較快的感覺。
有些人是用 110.framerate(X) 這個指令去加快走路數度,可是這樣就還要在去調走路的時間總合,把時間加長,
只要時間上算的準也是可行的。
走路指令的最少總圖數要有四張圖,不能少於四張圖。
除了攻擊指令跟走路指令要注意總時間單位以及圖數限制外,其它的指令都可以隨意修改,但是不能刪除。

變身的圖檔變成其它的圖檔改法:

如果你要改史巴托變成死騎的話(史巴托的編號是#2378)
就要改成 #2378 64=240 spartoi morph
64是死騎的總圖數,240是死騎的編號,spartoi morph是史巴托的英文名字。
在來在把史巴托裡面的動作編號裡的數值換上死騎的數值。
可是死騎有30跟31這二個史巴托沒有的動作指令就不需要貼過去史巴托的數值裡。
而史巴托的11跟13還有14以及28這四個指令也可以不用去理他,因為變身的史巴托用不到那些數值。
可是很重要的一點就是
攻擊跟走路這二種動作指令的時間單位一定要跟原本變身成史巴托時的時間單位一樣
例如史巴托的攻擊時間總合是 21 ,死騎的攻擊時間總合是 15。
那你就必需把貼過來的死騎攻擊數值裡的時間修改成 21 ,可是原本的#240裡的死騎原本數值不能去修改到。
剩下的隨你高興愛怎麼改就怎麼改。
像死劍改肥王等等怪物上的修改也是同樣的改法,可是人物的改法可是跟變身的不完全一樣。

殘影的意思以及改法:

為了能怪死收刀,所以必須要把攻擊的總圖數減到最少。
但是減到一張圖時在畫面上看起來你的人物在攻擊時就好像中風了一樣,感覺不協調也不流暢。
所以有人想出了攻擊時換上了二張透明的圖,讓你的人物整個隱藏起來,換上另一個效果圖。
用些來美化攻擊時的動作,而且還可以作到怪死收刀,並且能改出攻一打一或攻一打三等等的效果。
可是要讓你的人物隱藏起來就必需要有一個什麼都沒有的圖檔,如果不會作透明圖的話可以去抓別人的變身檔裡的透明圖,
只要改一下透明圖的檔名就可以了。
例如死騎的透明圖的檔明設定是用 240-299.spr 因為死騎的總圖數是 64 所以透明圖的檔名一定要大族 63 要用多少都可以。
要是用 240-299.spr 這張透明圖的話,那你死騎的總圖數就不是 64 而要改成 300 。
可是光放240-299.spr是不夠的,死騎的編號裡還有用到影子圖跟附加物件圖,
分別是 #241、#242 所以這二個編號也要加上透明圖並把總圖數改成 300。
以死騎為例攻擊時就要改成 1.attack(0 2,299.0:14 299.0:1]437!)
裡面 (0 2, 的是代表無向,也就是說不管你面向那一個方向都讀取這一張圖。
第一張圖的時間單位是死騎攻擊時間總合的總時間減一,減下來的一用在第二張圖。
改二張圖而不用一張圖的原因是因為第一張圖不能加上 " ] " 這個指令,只能加在第二張圖以後,所以必須改成二張圖。
而第二張圖所指到的 #437 這個編號裡面的內容是 #437 1 dummy 102.type(0) 。
dummy是啞吧的意思,也就是說這是個空白的編號。
只要把裡面修改成 #437 300=240 dummy 0.attack(1 X, Y) 101.(241) 102.(10) 105.(1 242)
X是這個動作裡的總圖數。
Y是死騎揮刀的數值,要攻一打三就把死騎揮刀的數值貼三次,總圖數也要符合才行,但是裡面不能用 -1.0: 這種圖
Y裡面的時間單位你想改多少就改多少沒有限制。
一定會有人問為什麼要用 0.attack 這個指令,其實那個0可以說是特效的意思,也就是死騎拿刀打人時自己隱藏起來,
換上 #437 這個編號裡的特殊動畫,也就是說這個指令裡的只是畫面上的效果,而不是你的角色所作的動作。

就算你是改成攻1打3,可是那也只是畫面上看起來是如此,實際上你還是只有打一下而以。
殘影除了能用在攻擊指令上,還能用在施法、用變仗電仗、撿東西等等的地方,走路指令最好別用殘影改法。

指向指令:

在 #786、#788、#790 裡都會看到有一個數值是 8=784 而他的 8 不用懷疑就是死亡指令。
而 8=784 就是死亡時套用 #784 裡的死亡指令 8.death(1 6,24.5:4 24.0:3 24.1:8[52 24.2:4 24.3:6 24.4:4) 。
這個就是指向指令,指向指令也有使用上的限制。

你要指向的編號就必須要比你本身的編號還要低才不會跳出 。
當然要是你想指到比你高的編號的話,就要找比你小的空白編號,或是天堂裡沒有用的物品編號來修改。
要是找物品的話那最好加上 104 濾鏡這個指令來讓他隱型。
因為:比如 #734 裡的 1=138 那它也只會去讀取 #138 裡的 1.attack 這個指令裡的東西。
而且指向指令要是用在攻擊或走路指令上也要去注意他的時間單位,時間單位跟原本的不一樣是不行的。
所以上面的 #734 裡的 1=138 是不行的,因為時間單位不一樣。
超變的怪死消失以及火窟除霧除火也是用指向指令作出來的。

106武器指令的用法:

想改拿不同武器就變身成不同的角色就必須要知道如何使用 106 這個指令。
他跟 105 不同的地方在於, 105 只能套一個圖, 106 能套五個圖。
所以用 106 一個角色最多能有六種不同的的型態,用 105 則只能有一種型態。
不過你要改要套上來的圖(包括自身的圖)都沒有任何一個數值裡有 105 以及 106 的話,則不需使用 106 指令。
但是光會 106 也不能改出一個角色六種型態這種效果,必須也要會使用指向指令來配合使用才有辦法。
以目前所知的106.(@ # $ % &) ,@代表的是拿劍、#代表的是拿斧、$代表的是拿弓、%代表的是拿矛、&代表的是拿仗 。
拿劍跟必首是用同一張圖,所以拿劍跟必首只能變同一種角色。
但是空手的指令不能指向到有 105 的角色身上,要是指到有 105 角色身上,則 105 裡的圖不會被顯示出來。
假如你想男妖精拿刀跟必首變死騎、拿弓變黑妖、其它的都是原本角色。
那就要在 #138 的最後面有上 106.(242 138 1125 138 138) 這些數值。
也就是說
有 105 的把 105 裡的那個編號放進來,沒有 105 的就放上角色的編號。
在使用 106 的指令時也要注意到, 106 裡所用到的圖檔的總圖數必需要跟你自身的總圖數一檥。
以上面的妖精為例,最好改成 #138、#242、#1125 都要改成 300 圖。
也因為 #242、#1125 都改成了 300 圖,所以相對應的 #240、#241、#1126 也都要改成 300 圖。
而且都要加上透明圖。

物品明顯化:

以金錢為例:金錢編號是 #7 ,變巫妖的話修改方法如下
#7 X=Y adena 3.breath(Z) 101.shadow(A) 105.clothes(B) 102.type(9)

X是Y的總圖數,Y是要改的換上去的圖檔編號,Z是你希望他顯示出來的動作,A是Y的影子圖,B是Y的附件圖。
影子跟附件圖有一些圖並沒有,只要沒有則不需要加上去,102.type(9) 這個怪物宣告是一定要加上去的,不然不能撿東西。
要改巫妖的話就是X的地方打上巫妖的總圖數 56 ,Y的地方打上巫妖的編號 2495 ,A打上巫妖的影子 2496 ,B的地方打上 2 2497 2498 ,Z的地方就看你是要他站著就好還是會攻擊會施法等等,
要他站著就貼上巫妖的呼吸動作,攻擊就貼上巫妖的攻擊動作,施法就貼上巫妖的施法動作,
並且能用 " ] " 這個指令去加上魔法動畫。

像高治改生祝也是同樣的改法,只是要注意 102.type 指令,改魔法不是用 9 而是用 0 。
而且它們也不是用 3.breath 呼吸動作指令,而是用 0.animation 效果動作指令。

2016年2月29日 星期一

新種類的魔法武器

新種類的魔法武器~


新版的魔法武器會因為『武卷強數的多寡』做變動~

以下是全碼 + 教學~
還有些變化~ 大大們可以自行運用~
‧加成多少後~ 出現魔法攻擊 _
‧加成多少後~ 才有範圍性效果~
‧加成多少後~ 有吸血特效? 或麻痹效果?
諸如此類~ 以此類推~

Copy code 
int i = _random.nextInt(100) + 1; // 定義亂數機率 .
int j = weapon.getEnchantLevel(); // 取得武器強化數(我的設定是有點有算~ 不用過安定值)
if(j < 0) //避免武器的負加成
j = 0;



int k = j;//避免高加成武器,有太高的發動機率
if(j > 20)
k = 20;




Copy code 
if(weaponId == 301 && i < 1 + k) // 強化數k加入機率判斷式
{
if(j > 20) // 如果強化超過20
{ }
d += player.get_str() * _random.nextInt(j);
// 傷害= 角色力量 * 亂數(武卷強化數)
areaskill(player, (int)d, 3 + j / 10);
//區域攻擊格數加入強化數要素( j/10:每10張+一格(去小數))
player.sendPackets(new S_SkillSound(player.get_objectId(), 4037));
player.broadcastPacket(new S_SkillSound(player.get_objectId(), 4037));
} else
{ // 如果沒有強化超過20

2015年9月21日 星期一

掃街活動

L1PcInstance



if (lastAttacker instanceof L1GuardianInstance) {
if (getPkCountForElf() > 0) {
setPkCountForElf(getPkCountForElf() - 1);
}
setLastPkForElf(null);
}

下面加入

// 掃街活動
            if(L1KillAllMan.getInstance().getGameStatus() == 1) {
                int count = 2; //噴裝數量
                caoPenaltyResult(count);
            }
            // end





// 最後に殺したキャラがプレイヤーだったら、赤ネームにする
L1PcInstance player = null;
if (lastAttacker instanceof L1PcInstance) {
player = (L1PcInstance) lastAttacker;
}
if (player != null) {
if (getLawful() >= 0 && isPinkName() == false) {


下面加入

// 掃街活動
               if(L1KillAllMan.getInstance().getGameStatus() == 1) {
                   return;
               }
               // end




GameServer

// 掃街活動
L1KillAllMan.getInstance();


插入一隻檔案

L1KillAllMan

/**
 *                            License by 涼介                                              
 */
package l1j.kinlinlo;

import java.util.Timer;
import java.util.TimerTask;
import l1j.server.server.GetNowTime;
import l1j.server.server.model.L1World;
import l1j.server.server.serverpackets.S_ServerMessage;

public class L1KillAllMan {
private static final int STATUS_PLAYING = 1;
private static final int STATUS_END = 2;
private static int StartTIME = 21; // 開始時間
private static int PLAY_TIME = 1 * 60; // 遊戲時間(小時)
private static int EndTIME = StartTIME + PLAY_TIME / 60;
private static int WAIT_TIME = 5; // (分)
private static int nextGAMETIME = 24 * 60 - PLAY_TIME;
private static L1KillAllMan instance;

public static L1KillAllMan getInstance() {
if (instance == null) {
instance = new L1KillAllMan();
}
return instance;
}

L1KillAllMan() {
int Htime = 0;
int Mtime = 0;
if (GetNowTime.GetNowHour() < StartTIME) {
if (StartTIME - GetNowTime.GetNowHour() > 1) {
Htime = StartTIME - GetNowTime.GetNowHour();
}
Mtime = 60 - GetNowTime.GetNowMinute();
} else if (GetNowTime.GetNowHour() >= StartTIME
&& GetNowTime.GetNowHour() < EndTIME) {
WAIT_TIME = 0;
PLAY_TIME = PLAY_TIME - GetNowTime.GetNowMinute();
new RaceTimer(0).begin();
return;
} else if (GetNowTime.GetNowHour() >= EndTIME) {
return;
}
int totaltime = Htime * 60 + Mtime;
if (totaltime < WAIT_TIME) {
totaltime = 0;
WAIT_TIME = totaltime;
} else {
totaltime = totaltime - WAIT_TIME;
}
new RaceTimer(totaltime).begin();
}

private int _status = 0;

public void setGameStatus(int i) {
_status = i;
}

public int getGameStatus() {
return _status;
}

private class RaceTimer extends TimerTask {
int _startTime;

RaceTimer(int startTime) {
_startTime = startTime;
}

@Override
public void run() {

try {
for (int loop = 0; loop < WAIT_TIME; loop++) {
if (WAIT_TIME - loop != 0) { // 開始前五分鐘內每分鐘倒數公告
L1World.getInstance().broadcastPacketToAll(
new S_ServerMessage(166, (new StringBuilder())
.append("活動【掃街】將在" + (WAIT_TIME - loop)
+ "分鐘後開始!!").toString()));
}
Thread.sleep(60 * 1000);
}
L1World.getInstance().broadcastPacketToAll(
new S_ServerMessage(166, (new StringBuilder()).append(
"活動【掃街】開始!!").toString()));
setGameStatus(STATUS_PLAYING);
for (int loop = 0; loop < PLAY_TIME; loop++) {
/*
* if(PLAY_TIME - loop != 0) { //每分鐘倒數公告
* L1World.getInstance().broadcastPacketToAll(new
* S_ServerMessage(166, (new
* StringBuilder()).append("活動【掃街】進行中!!剩餘【"+ (PLAY_TIME -
* loop) +"】分").toString())); }
*/
if (PLAY_TIME - loop == 1) { // 結束前一分鐘公告
L1World.getInstance()
.broadcastPacketToAll(
new S_ServerMessage(166,
(new StringBuilder()).append(
"活動【掃街】將在1分鐘後結束!!")
.toString()));
}
Thread.sleep(60 * 1000);
}
setGameStatus(STATUS_END);
L1World.getInstance().broadcastPacketToAll(
new S_ServerMessage(166, (new StringBuilder()).append(
"活動【掃街】結束!!").toString()));
this.cancel();
new RaceTimer(nextGAMETIME).begin();
} catch (InterruptedException e) {
e.printStackTrace();
}

}

public void begin() {
Timer timer = new Timer();
timer.schedule(this, _startTime * 60 * 1000);
}
}
}


插入一隻檔案

GetNowTime

//********************************************************************
//  GetNowTime.java
//  by mca
// 2008/4/1
//********************************************************************
package l1j.server.server;

import java.util.*;// class Scanner
//************************************************************************
// 取得現在時間
//************************************************************************

public class GetNowTime {
public static int GetNowYear() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowYear;
nowYear = rightNow.get(Calendar.YEAR); // 取得現年之值
return nowYear; // 傳回取得現年之值
}

public static int GetNowMonth() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowMonth;
nowMonth = rightNow.get(Calendar.MONTH); // 取得現月之值
return nowMonth; // 傳回取得現月之值
}

public static int GetNowDay() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowDay;
nowDay = rightNow.get(Calendar.DATE); // 取得今日之值
return nowDay; // 傳回取得今日之值
}

public static int GetNowWeek() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowWeek;
nowWeek = rightNow.get(Calendar.WEEK_OF_MONTH); // 取得此週之值
return nowWeek; // 傳回取得此週之值
}

public static int GetNowDayWeek() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowDayWeek;
nowDayWeek = rightNow.get(Calendar.DAY_OF_WEEK); // 取得週幾之值
return nowDayWeek; // 傳回取得週幾之值
}

public static int GetNowHour() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowHour;
nowHour = rightNow.get(Calendar.HOUR_OF_DAY); // 取得此時之值
return nowHour; // 傳回取得此時之值
}

public static int GetNowMinute() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowMinute;
nowMinute = rightNow.get(Calendar.MINUTE); // 取得此分之值
return nowMinute; // 傳回取得此分之值
}

public static int GetNowSecond() {
Calendar rightNow = Calendar.getInstance(); // 取得預設月曆物件
int nowSecond;
nowSecond = rightNow.get(Calendar.SECOND); // 取得此秒之值
return nowSecond; // 傳回取得此秒之值
}
}


2015年9月11日 星期五

新增怪物掉落追加強化值

DropTable.java(2-1)



pstm = con.prepareStatement("select * from droplist");

下面找合適地方新增

int enchantlvl = rs.getInt("enchantlvl");//新增怪物掉落追加強化值 by 80363000


這個改成這樣
L1Drop drop = new L1Drop(mobId, itemId, min, max, chance, enchantlvl);

往下找並新增

int itemId;
int itemCount;
int addCount;
int randomChance;
int enchantlvl;//新增怪物掉落追加強化值 by 80363000




if (itemCount > 2000000000) {
itemCount = 2000000000;

}

下面改成

//新增怪物掉落追加強化值 by 80363000
enchantlvl = drop.getEnchantlvl();

// アイテムの生成
item = ItemTable.getInstance().createItem(itemId);
item.setCount(itemCount);
item.setEnchantLevel(enchantlvl);
//新增怪物掉落追加強化值 by 80363000






L1Drop.java(2-2)

找並新增

public class L1Drop {
int _mobId;

int _itemId;

int _min;

int _max;

int _chance;

int _enchantlvl;//新增怪物掉落追加強化值 by 80363000

public L1Drop(int mobId, int itemId, int min, int max, int chance, int enchantlvl) {//新增怪物掉落追加強化值 by 80363000
_mobId = mobId;
_itemId = itemId;
_min = min;
_max = max;
_chance = chance;
_enchantlvl = enchantlvl;//新增怪物掉落追加強化值 by 80363000


最下面

//新增怪物掉落追加強化值 by 80363000
public int getEnchantlvl() {
return _enchantlvl;
}

2015年5月14日 星期四

時空裂痕


https://blogger.googleusercontent.com/img/proxy/AVvXsEgwTY6VlpmpttzlAB5elUlt6p4qo-lmyaCyhbZEcwBj9Il71YCc4yD3rnUlz_l1ZQt0BW78f1uYTjWrVBKurkLLjXMtq078RVjPt68FaxF0VAtyyk0QSNQg3tLAs-uWWPptqp4v0bkpjSFE1TMw3B98dRaoGOXyRT6OrVlXIF5u=
底比斯神祕領域登場  《時空裂痕》改版後,亞丁大陸的玩家將可透過時空裂痕入口進入底比斯神祕未知領域。然而,入口將會於每兩天晚上七時起,在亞丁大陸上的九個點中隨機出現,且僅開放三小時,其他時間玩家是無法進入的。至於角色最好要到 670 級,有一定裝備水準進入會比較妥當。
  底比斯總共分為「底比斯沙漠」、「底比斯金字塔内部」及「底比斯歐西里斯祭壇」3款新地圖,當玩家透過時空裂痕入口進入後,會先出現在底比斯沙漠,玩家可以蒐集時空裂痕碎片來兌換龜裂之核,以便開啟歐西里斯寶箱等,玩家往地圖右上前進,一路橫渡廣大的沙漠與面對聖甲蟲等怪物挑戰,挺進到金字塔的門口。

https://blogger.googleusercontent.com/img/proxy/AVvXsEjVBJLcgSIDGeIfbAt2Y2dzb8rlVYoDZ3Dqnzp8wPYqRJGe_cfRiKeTk52su3_udDA7gdCHfR2bQ47kgwVKbOyVEeaJCsS23_w9xkMLOyqhbgriipm-uxrLEzOV3vKrJ9c9jUuI9QaLC6jTLNUYhf9QfWJfaN1mqHMFcdp7K2w=
https://blogger.googleusercontent.com/img/proxy/AVvXsEgIo7xDtsomMB0nAKbhR32nA5Tci7jeJU1pWKHC2yDvlKervreBmaHYs-rvqDEo5TXMscvotg3d7TfweEzkWZzwYI5MxciFrCJnOjshT_FS7i7-bbxvt8j1AtQ3pkw4HKw7wx4FzZx7TE017rdIHh1C1CUkmEvfuriXLxedXztw= 
底比斯沙漠
底比斯沙漠

  進入金字塔後,可以看見埃及風味濃厚的方尖碑、人面獅身等物品,雖然金字塔內的道路屬於地洞式地圖、路線並不複雜,但較為狹窄、閃怪不易,因此可得特別當心。

https://blogger.googleusercontent.com/img/proxy/AVvXsEgwTY6VlpmpttzlAB5elUlt6p4qo-lmyaCyhbZEcwBj9Il71YCc4yD3rnUlz_l1ZQt0BW78f1uYTjWrVBKurkLLjXMtq078RVjPt68FaxF0VAtyyk0QSNQg3tLAs-uWWPptqp4v0bkpjSFE1TMw3B98dRaoGOXyRT6OrVlXIF5u= 
https://blogger.googleusercontent.com/img/proxy/AVvXsEgL9XhYrZ3jW2g5fPNJCkfXmE_oSXGGUQQ_xP_2kH_t8cxTmXDOD-lDFZt7PCzOsk9HZvsp2cBgYtOgEhsg9e8vNmSpMkXjLXZPAGs0kurkJXIpj4nUPIUet1cp79ILmKWFxABRPlAyma2Ov1Alxcq3pAYOsZlEB4kd-Lzfydjp= 
終於到金字塔門口了
進入金字塔內部

  當底比斯開放兩個半小時後,玩家才能跟金字塔內的守門人交談,以便進入底比斯歐西里斯祭壇,而且唯有前 20 個取得鑰匙者才可以進入挑戰 BOSS 怪。根據遊戲橘子透露,若是 20 名玩家成功打敗 BOSS 怪後,亞丁大陸進入底比斯的隨機一個入口將會開放一整天,讓更多玩家得以進入底比斯地圖中冒險,但若挑戰 BOSS 怪失敗的話,底比斯就將會關閉,等到間隔時間到再予以開啟。

https://blogger.googleusercontent.com/img/proxy/AVvXsEhJ9bQMroZ_MQfR31uogFgcMJRXvOmZSSWjkea8mrepFzzlLPLox3v1_of3yQG7ltROcnfD3c51tDwbtHqADBPw0yC6GF4ERAoY2nOZm2YuFLZ-fsSCDUBcc690pO08jy_hQf9HjOGN87TiDj5k-RuMDTm9Y3PFcF_dADulf5LuCA= 
https://blogger.googleusercontent.com/img/proxy/AVvXsEjLeEn9yf531kNHnEBvmfV8HSSsSj0nl-R4SyaToTchj9R4n8VKX3ml6vFDQMH-1TCvSxGcobpfhssrAFcAMEOMgZKv5dSyS_S3wBtWOAD_VwGf6lVNxpgynOjKHQ_hmFCw2z10V-MRhXjex17Cdm0owlREi5ZSZUSvovANg9c= 
跟守門人對話
祭壇到了!

  BOSS 怪包括底比斯阿努比斯、賀洛斯,阿努比斯會使用火系魔法並召喚其他怪物來幫忙,賀洛斯則會衝暈玩家,因此需要大家一起合力攻略。當玩家合力打贏 BOSS 怪後,就會隨機掉相雙刀、魔杖等武器等。

https://blogger.googleusercontent.com/img/proxy/AVvXsEhzJXoirI8feULOADio-Qt5-I4AhjMQUHA1vRLLnunTvRgAj4KXAFZRIezLrAcNhHaPyeI4Q4Q5LfuYdALvIllMow4iA2S4QLW_MED0SbMDetRO0yb469rv8oafy1-iqCmOH2v4T7ZOiMb7ZYLxvZUHmsUTq7EBHYHhIsKvmDO7= 
https://blogger.googleusercontent.com/img/proxy/AVvXsEhnJ8T5gQNxeYiYmYQPxTjs657E3TwXfd1PvPDJQEkOp5Ya8XyX-8mm0hfaluJzwBsABCGm0vFw2igaLtfleGHdmRVfAA3Bp8zeorsi8v-PlkcUhGyHO8zHaNQZ_2oUL6sSwJ6q-udjF0-oOUZniFE79AKFEq6LvVlYbdJfvbxHqDU= 
官方公開的賀洛斯模樣
官方公開的阿努比斯模樣


2015年4月13日 星期一

預言師仿正服版

L1jtw 3.80c 版   npc 在隱藏之谷


src\l1j\server\server\clientpackets\C_NPCAction.java


在 else if 與 else if 之間加入以下程式碼


else if(s.equalsIgnoreCase("journey")){
             
                          int newx = 0;
                          int newy = 0;
                          short newMapId = 0;
                          Random random = new Random();
                          int place = random.nextInt(14);


                          switch(place) {
                          case 0:   //正義神殿
                          newx=33127;
                          newy=32940;
                          newMapId=4;


                          break;
                          case 1: //水晶洞穴
                          newx=32774;
                          newy=32909;
                          newMapId=74;
                          break;
       
                          case 2: //伊娃神殿
                          newx=32732;
                          newy=32814;
                          newMapId=62;
                          break;
             
                          case 3: //海底
                          newx=32742;
                          newy=32679;
                          newMapId=63;
                          break;
                   
                          case 4: //象牙塔
                          newx=32771;
                          newy=32797;
                          newMapId=77;
                          break;
                       
                          case 5: //亞丁村
                          newx=33937;
                          newy=33345;
                          newMapId=4;
                          break;
                       
                          case 6: //妖精森林
                          newx=33051;
                          newy=32340;
                          newMapId=4;
                          break;
                       
                          case 7: //綠洲
                          newx=32870;
                          newy=33255;
                          newMapId=4;
                          break;
                             
                          case 8: //教堂
                          newx=33972;
                          newy=33363;
                          newMapId=4;
                          break;
                       
                          case 9: //奇岩
                          newx=33429;
                          newy=32813;
                          newMapId=4;
                          break;
                       
                          case 10: //海音
                          newx=33597;
                          newy=33239;
                          newMapId=4;
                          break;
                       
                          case 11: //火龍窟
                          newx=33743;
                          newy=32277;
                          newMapId=4;
                          break;
                       
                          case 12: //說話之島碼頭
                          newx=32643;
                          newy=32954;
                          newMapId=0;
                          break;
                       
                          case 13: //傲慢之塔
                          newx=34249;
                          newy=33452;
                          newMapId=4;
                          break;
                       
                          case 14: //邪惡神殿
                          newx=32879;
                          newy=32652;
                          newMapId=4;
                          break;
                             
                          default:
                          break;
                          }
                       
              try {                                    
                        pc.save();
                        pc.beginGhost(newx,newy,(short)newMapId,true);
                          Thread.sleep(10000); //觀看10秒的意思
                      pc.makeReadyEndGhost();
                  } catch (final Exception e) {
                  _log.log(Level.SEVERE, e.getLocalizedMessage(), e);
                }
               
          }
                       
    參考資料       L1jtw & 參考大陸原始碼 & 99nets 資料