唔好巨集

從零學習巨集,創造無人仙境。

同盟公會頻道互通

| Comments

當你想跟分會或者同盟公會的朋友聊天時,很多時候都只是利用密頻,但只能一對一,有點可惜。 很久之前有人找我幫他寫了一個公會頻道互通的巨集,今天跟大家說一下原理跟寫法。

首先兩個公會都要有一個人物專門做通訊員,當A公會通訊員收到A公會的任何聊天信息就會通過密頻把A公會的聊天信息傳給B公會通訊員,當B公會通訊員收到後就在B公會發言,相反B對A也相同原理,先看以下模擬聊天記錄會比較容易理解。

    [A公會] A測試員 : B測試員在嗎?
    [B公會] B通訊員 : A測試員: B測試員在嗎?
    [B公會] B測試員 : 我在呀
    [A公會] A通訊員 : B測試員: 我在呀

巨集使用條件及注意事項:

  • 兩個公會也要有一人當通訊員才能互通
  • 通訊員密頻要開
  • 必須修改gmsg5,6行,pmsg2行的通訊員名稱。
  • 兩個公會的通訊員都要有gmsgpmsg兩個巨集
  • 這版本只支持兩個公會
  • 假如同時()出現大量聊天信息有機會出現遺留情況

使用方法:
如果設定沒出錯,正常用公會頻道聊天就OK

gmsg
1
2
3
4
5
6
7
8
9
10
11
automacro gmsg {
  guild /(.*)/
  call {
  [
  $me = 通訊員A # 本公會通訊員名稱
  $to = 通訊員B # 對方公會通訊員名稱
  if ($.lastguild = $me) stop
  do pm $to $.lastguild:$.lastguildMsg;stop
  ]
  }
}

pmsg
1
2
3
4
5
6
automacro pmsg {
  pm /(.*)/,通訊員B # 對方公會通訊員名稱
  call {
  do g $.lastpmMsg;stop
  }
}

查詢及平均分配金錢

| Comments

有些活動好像命運? 機會? 塔羅占卜師幫你解惑!每次都要轉錢是不是很煩?假如你人物多花的時間相對多,而且容易出錯。
往往大量金錢都集中在一個人物身上,而其他人物都只有少量。一旦到了需要金錢的活動或任務就變得麻煩。針對這問題寫了一個金錢交易巨集。先看看什麼情況下適用。

了解後我們來看一看整個交易流程,先準備一個人物作派錢員跟數個收錢的人物,把他們移動到同一格,這是為了確保不超過交易距離。很簡單,一同轉換地圖時就會重疊在一起。集體移動可參考這篇文章一次控制多個openkore。 然後利用隊頻或公會頻說出今次想要的金額,getzeny就會開始計算減去身上的差額,如果身上的金錢比想要的多就沒有動作,相反就會利用密頻通知派錢員派發多少錢,然後派錢員addzeny就會點缺錢的人物作交易並把差額加上。

巨集使用條件及注意事項:

  • 派錢員必須有足夠金錢
  • 派錢員密頻要開
  • 建議利用隊伍公會頻道
  • 派錢員距離不超過**2((格
  • 建議找一個比較少人的地方
  • 必須修改派錢員的名稱,getzeny第3,7行,名稱包含特別符號可能會出問題!
  • config.txtdealAuto2
  • config.txtdealAuto_names加上派錢員的名字,如果本身是空的就不用加
  • 7秒會密一次派錢員直到指定金錢才會停止。

使用方法:
e.g. 要求每人身上都要有10000000zeny (一千萬)
openkore: 隊伍用p z g 10000000 公會用g z g 10000000
官方遊戲程式: 在隊伍頻道直接輸入z g 10000000或在公會頻道輸入z g 10000000

getzeny
1
2
3
4
5
6
7
8
9
10
11
12
13
automacro getzeny {
  console /\[(隊伍|公會)\] (.*) \: z g (\d+)/
  player "派錢員",3
  call {
  while ($.zeny < $.lastMatch3) as loop        # 比較身上的金錢
  $z = @eval($.lastMatch3 - $.zeny)         # 計算差額
  $n = 派錢員
  do eval foreach my $_player (@{$::playersList->getItems()}) { next if $_player->{'name'} eq ""; next if $_player->{actorType} ne "Player"; if ($_player->{'name'} eq "$n") {$::Macro::Data::varStack{name} = $_player->{'name'}; $::Macro::Data::varStack{id} = $_player->{'binID'};}}
  do pm $n z a $z         # 通知派錢員派錢
  pause 7                  # 密一次派錢員的相隔秒數
  end loop
  }
}

addzeny
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
automacro addzeny {
  pm /z a (\d+)/
  exclusive 1
  call {
  if ($.zeny < $.lastMatch1) stop         # 比較身上跟要派的金額
  $n = $.lastpm                           # 最後密我的人的名字
  do eval foreach my $_player (@{$::playersList->getItems()}) { next if $_player->{'name'} eq ""; next if $_player->{actorType} ne "Player"; if ($_player->{'name'} eq "$n") {$::Macro::Data::varStack{name} = $_player->{'name'}; $::Macro::Data::varStack{id} = $_player->{'binID'};}}
  do deal $id                               # 交易最後密我的人
  pause 3
  do deal add z $.lastMatch1             # 放上金額
  do deal
  pause 3
  do deal
  }
}

另外查詢openkore們身上的zeny

使用方法:
openkore: 隊伍用p zeny 公會用g zeny
官方遊戲程式: 在隊伍頻道直接輸入zeny或在公會頻道輸入zeny

zenycheck
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
automacro zenycheck {
  console /\[(公會|隊伍)\] (.*) \: zeny/
  call {
  if ($.lastMatch1 == "公會") goto g
  if ($.lastMatch1 == "隊伍") goto p
  stop
  
  :g
  do g $.zeny
  stop
  
  :p
  do p $.zeny
  stop
  }
}

以下是openkore例出隊伍金錢報告的範本

    [隊伍] op01 : 1400000
    [隊伍] op01 : 500000
    [隊伍] op02 : 100410
    .
    .
    .
    [隊伍] op11 : 241232
    [隊伍] op12 : 5831323

用巨集播放音效

| Comments

今日教大家用openkore播放音效,什麼意思?就是用openkore時利用巨集觸發來播放音效檔案。有什麼好處? 看我以下的舉例!

  • openkore開聊天室收物品時有人進來叮一聲!
  • openkore開露天賣出貨物時叮一聲!
  • 有人在你openkore打怪時1:1密你叮一聲!
  • 有人在廣播賣或收你想要的東西時叮一聲!
  • 還有更多… 看個人創意!
  • 建議音效檔是從RO的data.grfgrftool解出來的,用回RO的音效比較有親切感。
  • 教學不包括音效檔,請自備。
  • 記得要開喇叭

以上共同之處是確保你正打Battlefield3,看電影,玩facebook等等時不會錯任何一個重要時刻。

我簡單用1:1語密做個例子,很簡單,先在config資料夾同一層開一個叫wav的新資料夾,把ting.wav放進去就可以,當然名稱跟什麼音樂檔可以自己更改,只要修改playSound('wav\ting.wav')後的字串就可以。

pm
1
2
3
4
5
6
7
automacro pm {
  pm /(.*)/
  exclusive 1
  call {
  do eval Utils::Win32::playSound('wav\ting.wav');
  }
}

露天賣出東西叫一聲!

autocloseshop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
automacro autocloseshop {
  soldout >= 1
  exclusive 1
  location prontera
  call {
  pause 7
  do eval Utils::Win32::playSound('wav\cat.wav');
  do closeshop
  pause 7
  do openshop
  release all
  stop
  }
}

指定玩家出現在你距離20格就喵一聲在關閉openkore

playernear
1
2
3
4
5
6
7
8
automacro playernear {
  player "GM03",20
  call {
  do eval Utils::Win32::playSound('wav\cat.wav');
  do quit
  }
  timeout 1
}

愚人節快樂!