diff options
Diffstat (limited to 'npc/sample')
-rw-r--r-- | npc/sample/PCLoginEvent.txt | 33 | ||||
-rw-r--r-- | npc/sample/bank_test.txt | 59 | ||||
-rw-r--r-- | npc/sample/gstorage_test.txt | 33 | ||||
-rw-r--r-- | npc/sample/npc_card_remover.txt | 197 | ||||
-rw-r--r-- | npc/sample/npc_equip_sample.txt | 17 | ||||
-rw-r--r-- | npc/sample/npc_extend_shop.txt | 68 | ||||
-rw-r--r-- | npc/sample/npc_sample.txt | 457 | ||||
-rw-r--r-- | npc/sample/npc_shop_test.txt | 31 | ||||
-rw-r--r-- | npc/sample/npc_test_arena.txt | 104 | ||||
-rw-r--r-- | npc/sample/npc_test_array.txt | 35 | ||||
-rw-r--r-- | npc/sample/npc_test_chat.txt | 28 | ||||
-rw-r--r-- | npc/sample/npc_test_ev.txt | 146 | ||||
-rw-r--r-- | npc/sample/npc_test_func.txt | 27 | ||||
-rw-r--r-- | npc/sample/npc_test_npctimer.txt | 33 | ||||
-rw-r--r-- | npc/sample/npc_test_skill.txt | 19 | ||||
-rw-r--r-- | npc/sample/npc_test_str.txt | 17 | ||||
-rw-r--r-- | npc/sample/npc_testchkoption.txt | 15 | ||||
-rw-r--r-- | npc/sample/npc_time_sample.txt | 19 |
18 files changed, 1338 insertions, 0 deletions
diff --git a/npc/sample/PCLoginEvent.txt b/npc/sample/PCLoginEvent.txt new file mode 100644 index 000000000..d668c0960 --- /dev/null +++ b/npc/sample/PCLoginEvent.txt @@ -0,0 +1,33 @@ +// eAthena Special NPC + +// PCLoginEvent NPC (davidsiaw) +//============================================================================== +// How it works: +// When a player logs in, the NPC will run as if he just clicked it. Which means +// if the script is like this: +// +// [code] +// prontera.gat,0,0,0 script PCLoginEvent -1,{ +// mes "lmao"; +// close; +// } +// [/code] +// +// every player who logs in will recieve a message 'lmao' in their face as soon +// as they can see the map. +//----------------------------------------------------------------------------- +// Note: +// 1) This NPC will only run if its name is 'PCLoginEvent' +// 2) I made it invisible because you don't need to see it. Its an abstract NPC +// 3) If you don't want it, simply delete it +// 4) If you have more than one PCLoginEvent NPC, strange things will happen. +// 5) You can put this script in ANY file. +// 6) I put an end; there because that just makes it do nothing. +// 7) Modify this script to your liking and give your players a surprise +// 8) Remember: IT RUNS LIKE A NORMAL NPC. BUT THE ONLY WAY TO 'CLICK' IT IS BY +// LOGGING ON + + +prontera.gat,0,0,0 script PCLoginEvent -1,{ + end; +}
\ No newline at end of file diff --git a/npc/sample/bank_test.txt b/npc/sample/bank_test.txt new file mode 100644 index 000000000..6a9bfe08d --- /dev/null +++ b/npc/sample/bank_test.txt @@ -0,0 +1,59 @@ +// カプラ銀行サービス テストスクリプト +prontera.gat,162,188,1 script 銀行員カプラ 112,{ + cutin "kafra_06",2; + + mes"[銀行員カプラ]"; + mes "カプラ銀行サービスです。"; + mes "毎度ご利用ありがとうございます♪"; + mes "1000zからでのご利用になります。"; + next; + menu "預ける",BANK_IN,"引き出す",BANK_OUT,"やっぱやめる",B_EXIT2; +BANK_IN: + mes"[銀行員カプラ]"; + mes "預ける金額を入力してください♪"; + mes "ちなみに、手数料として"; + mes "預かり金の1%頂きます。"; + next; + input @kafrabank; + + if(@kafrabank<1000) goto B_EXIT2; + set @kafrabank2,@kafrabank*1/100; + if(@kafrabank+@kafrabank2>Zeny) goto BANK_F; + set Zeny,Zeny-@kafrabank-@kafrabank2; + set #kafrabank,#kafrabank+@kafrabank; + mes "手数料^135445" + @kafrabank2 + "z^000000頂きますね。"; + + goto B_EXIT; +BANK_OUT: + if(#kafrabank==0) goto BANK_F2; + mes"[銀行員カプラ]"; + mes "現在あなたからお預かりしているのは"; + mes "^135445" + #kafrabank + "^000000Zenyです。"; + mes "引き出す金額を入力してください♪"; + next; + input @kafrabank; + + if(@kafrabank<1) goto B_EXIT2; + if(@kafrabank>#kafrabank) goto BANK_F; + set #kafrabank,#kafrabank-@kafrabank; + set Zeny,Zeny+@kafrabank; + + goto B_EXIT; + +BANK_F: + mes"[銀行員カプラ]"; + mes "持ち金が足りないようですね。"; + goto B_EXIT2; +BANK_F2: + mes"[銀行員カプラ]"; + mes "あなたからは、1zも"; + mes "お預かりしていないですよ?"; + goto B_EXIT2; + +B_EXIT: + mes "無事に取り引きできました。"; +B_EXIT2: + mes "またのご利用をお待ちしています♪"; + cutin "kafra_06",255; + close; +} diff --git a/npc/sample/gstorage_test.txt b/npc/sample/gstorage_test.txt new file mode 100644 index 000000000..6a8816e43 --- /dev/null +++ b/npc/sample/gstorage_test.txt @@ -0,0 +1,33 @@ +// カプラギルド倉庫サービス テストスクリプト +prontera.gat,165,188,4 script ギルド倉庫カプラ 112,{ + cutin "kafra_06",2; + + mes"[ギルド倉庫カプラ]"; + mes "カプラギルド倉庫サービスです。"; + mes "毎度ご利用ありがとうございます♪"; + mes "テスト用なので金は貰いません。"; + next; + menu "ギルド倉庫を利用する",GS_OPEN,"やっぱやめる",GS_EXIT3; + +GS_OPEN: + set @flag,guildopenstorage(0); + if(@flag == 1) goto GS_EXIT1; + if(@flag == 2) goto GS_EXIT2; + goto GS_EXIT4; + +GS_EXIT1: + mes "ギルドメンバーが倉庫を使用中です。"; + mes "しばらく待ってから利用してください。"; + goto GS_EXIT4; + +GS_EXIT2: + mes "ギルドに所属してない方は利用することができません。"; + goto GS_EXIT4; + +GS_EXIT3: + mes "またのご利用をお待ちしています♪"; + +GS_EXIT4: + cutin "kafra_06",255; + close; +} diff --git a/npc/sample/npc_card_remover.txt b/npc/sample/npc_card_remover.txt new file mode 100644 index 000000000..f991bc32c --- /dev/null +++ b/npc/sample/npc_card_remover.txt @@ -0,0 +1,197 @@ +// Card removal NPC by TyrNemesis^ 日本語訳:胡蝶蘭 +prt_in.gat,28,73,4 script 賢い老女 78,{ + +UPGRADEROOT: +// mes "[Wise Old Woman]"; +// mes "Good day, young one. I have the power to remove cards that you have compounded onto your equipment. Does this idea please you?"; + mes "[賢い老女]"; + mes "いい天気だね、若いの。"; + mes "ところで、アタシは武具に装着している"; + mes "カードを取り外す力を持っているけど、"; + mes "力を貸そうかね?"; + next; +// menu "Yes, it does.",REMOVEMENU, +// "What do you charge?",REMOVEPRICE, +// "No thanks.",CLOSEOUT; + menu "お願いします。",REMOVEMENU, + "いくらかかるんですか?",REMOVEPRICE, + "必要ないです。",CLOSEOUT; + +REMOVEPRICE: +// mes "[Wise Old Woman]"; +// mes "I charge a flat fee of 200000 zeny, plus 25000 zeny for each card I remove from the item. In addition, I need a star crumb and a yellow gemstone to work my magic."; + mes "[賢い老女]"; + mes "そうだね、"; + mes "まず基本料金として^4040FF200000z^000000。"; + mes "そしてカード1枚につき^4040FF25000z^000000貰うよ。"; + mes "あとは、魔法を使うために^4040FF星のかけら^000000と"; + mes "^4040FFイエロージェムストーン^000000が1つずつ必要だよ。"; + next; +// menu "Very well. Let's do it.",REMOVEMENU, +// "No thanks.",CLOSEOUT; + menu "お願いします。",REMOVEMENU, + "必要ないです。",CLOSEOUT; + +REMOVEMENU: +// mes "[Wise Old Woman]"; +// mes "Very well. Which item shall I examine for you?"; + mes "[賢い老女]"; + mes "よしよし。"; + mes "どの武具のカードを取り外すんだね?"; + next; +// menu "I changed my mind.",CLOSEOUT, + menu "やっぱりやめます。",CLOSEOUT, + getequipname(1),-, + getequipname(2),-, + getequipname(3),-, + getequipname(4),-, + getequipname(5),-, + getequipname(6),-, + getequipname(7),-, + getequipname(8),-, + getequipname(9),-, + getequipname(10),-; + set @part,@menu-1; + if(getequipcardcnt(@part) == 0) goto DENYCARDCOUNT; + set @cardcount,getequipcardcnt(@part); +// if(@cardcount > 1) goto CARDNUMMULTIMSG; +// mes "[Wise Old Woman]"; +// mes "This item has " + @cardcount + " card compounded on it. To perform my magic, I will need 225000 zeny, a ^0000FFStar Crumb^000000, and a ^0000FFYellow Gemstone^000000."; +// goto CARDNUMPOSTMSG; +//CARDNUMMULTIMSG: +// mes "[Wise Old Woman]"; +// mes "This item has " + @cardcount + " cards compounded on it. To perform my magic, I will need " + (200000+(@cardcount * 25000)) + " zeny, a ^0000FFStar Crumb^000000, and a ^0000FFYellow Gemstone^000000."; + mes "[賢い老女]"; + mes "この武具には" + @cardcount + "つカードがついてるね。"; + mes "^0000FF" + (200000+(@cardcount * 25000)) + "z^000000と^0000FF星のかけら^000000と^0000FFイエロージェムストーン^000000が必要だよ。"; +//CARDNUMPOSTMSG: + next; +// menu "Very well. Do it.",REMOVECARDWARNING, +// "Never mind.",CLOSEOUT; + menu "わかりました、お願いします。",REMOVECARDWARNING, + "やっぱりやめます。",CLOSEOUT; + +REMOVECARDWARNING: +// mes "[Wise Old Woman]"; +// mes "Before I begin, I must warn you--I may fail. If I do, I may destroy the cards, the item, or both. I do not give refunds. That being said, which is more important to you: The cards, or the item?"; + mes "[賢い老女]"; + mes "おっと言い忘れるところだったね。"; + mes "この魔法はとても難しいから、"; + mes "^FF4040失敗するかもしれない^000000のさ。"; + mes "失敗したらカードか武具、あるいは"; + mes "その両方が^FF4040破壊されてしまう^000000かも"; + mes "しれないんだよ。"; + next; + mes "[賢い老女]"; + mes "失敗しても^FF4040返金はしない^000000から、"; + mes "一応聞いて置くけど、比べるなら"; + mes "カードと武具のどっちが大切だい?"; + next; +// menu "I changed my mind about this.",CLOSEOUT, +// "The item.",PRIORITYITEM, +// "The cards.",PRIORITYCARD; + menu "それならやめます。",CLOSEOUT, + "武具の方が大切です。",PRIORITYITEM, + "カードの方が大切です",PRIORITYCARD; + +PRIORITYITEM: + set @failtype,1; + goto REMOVECARD; + +PRIORITYCARD: + set @failtype,2; + goto REMOVECARD; + +REMOVECARD: +// mes "[Wise Old Woman]"; +// mes "Very well. I shall begin."; + mes "[賢い老女]"; + mes "よし、始めるよ。"; + next; + if((zeny < (200000+(@cardcount * 25000))) || (countitem(1000) < 1) || (countitem(715) < 1)) goto DENYMATERIAL; + set zeny,zeny - (200000+(@cardcount * 25000)); + delitem 1000,1; + delitem 715,1; + +// Replace the constants in the next 3 lines with failure chance values defined in refine_db.txt +// First value = Total failure chance (item and cards destroyed) +// Second value = Partial failure chance (one or the other is destroyed, player decides which one is safe) +// Third value = Harmless failure chance (all that's lost is your investment) + + set @failchance,rand(100); + if(@failchance < 2) goto FAILREMOVECARD0; + if((@failchance < 6) && (@failtype == 1)) goto FAILREMOVECARD1; + if((@failchance < 6) && (@failtype == 2)) goto FAILREMOVECARD2; + if(@failchance < 10) goto FAILREMOVECARD3; + successremovecards @part; +// mes "[Wise Old Woman]"; +// mes "The process was a success. Here are your cards and your item. Farewell."; + mes "[賢い老女]"; + mes "うまくいったよ。"; + mes "これらが武具とアイテムさ。じゃあね。"; + close; + +FAILREMOVECARD0: +// mes "[Wise Old Woman]"; +// mes "The process was a total failure. I am afraid the item and the cards were destroyed."; + mes "[賢い老女]"; + mes "残念だけど完全に失敗したよ。"; + mes "武具もカードも壊れてしまった。"; + failedremovecards @part,0; + close; + +FAILREMOVECARD1: +// mes "[Wise Old Woman]"; +// mes "While I have managed to remove the cards from the item, they were destroyed in the process. The item, however, is okay."; + mes "[賢い老女]"; + mes "頑張ったけどね、"; + mes "カードのほうは全部壊れてしまったよ。"; + mes "でも武具の方は無事だったよ。"; + failedremovecards @part,1; + close; + +FAILREMOVECARD2: +// mes "[Wise Old Woman]"; +// mes "Most unfortunate. I succeeded at removing the cards, but the item itself was destroyed in the process."; + mes "[賢い老女]"; + mes "不運だったね。"; + mes "カードを取り外すのはうまくいったけど"; + mes "武具が壊れてしまったよ。"; + failedremovecards @part,2; + close; + +FAILREMOVECARD3: +// mes "[Wise Old Woman]"; +// mes "I have failed to remove the cards. Luckily, however, both the item and the cards are still okay."; + mes "[賢い老女]"; + mes "カードを取り外すのに失敗したよ。"; + mes "でも、不幸中の幸いさ。"; + mes "武具もカードも無事だよ。"; + failedremovecards @part,3; + close; + +DENYCARDCOUNT: +// mes "[Wise Old Woman]"; +// mes "Young one... There are no cards compounded on this item. I can do nothing with it, I'm afraid."; + mes "[賢い老女]"; + mes "若いの、カードがついてないよ。"; + mes "それじゃアタシの出番はないさ。"; + close; + +DENYMATERIAL: +// mes "[Wise Old Woman]"; +// mes "You do not have all the items I require to work my magic, child. Come again when you do."; + mes "[賢い老女]"; + mes "必要なアイテムが足りないようだね。"; + mes "アイテムを揃えてもう一度来な。"; + close; + +CLOSEOUT: +// mes "[Wise Old Woman]"; +// mes "Very well. Return at once if you seek my services."; + mes "[賢い老女]"; + mes "わかったよ。"; + mes "アタシの力が必要ならいつでも来な。"; + close; + +} diff --git a/npc/sample/npc_equip_sample.txt b/npc/sample/npc_equip_sample.txt new file mode 100644 index 000000000..ce429d924 --- /dev/null +++ b/npc/sample/npc_equip_sample.txt @@ -0,0 +1,17 @@ + +prontera.gat,161,181,6 script GetEquipID Sample 105,{ + mes "[GetEquipID Sample]"; + mes " GetEquipID(01) : " + getequipid(1); + mes " GetEquipID(02) : " + getequipid(2); + mes " GetEquipID(03) : " + getequipid(3); + mes " GetEquipID(04) : " + getequipid(4); + mes " GetEquipID(05) : " + getequipid(5); + mes " GetEquipID(06) : " + getequipid(6); + mes " GetEquipID(07) : " + getequipid(7); + mes " GetEquipID(08) : " + getequipid(8); + mes " GetEquipID(09) : " + getequipid(9); + mes " GetEquipID(10) : " + getequipid(10); + close; + end; +} + diff --git a/npc/sample/npc_extend_shop.txt b/npc/sample/npc_extend_shop.txt new file mode 100644 index 000000000..3f9f71c2d --- /dev/null +++ b/npc/sample/npc_extend_shop.txt @@ -0,0 +1,68 @@ +//レアアイテムNPCショップ + + + +// アイテム系 +prontera.gat,163,170,3 shop 高級なアイテム屋 75,507:-1,508:-1,509:-1,510:-1,514:-1,518:-1,533:-1,607:-1,608:-1,529:-1,530:-1,603:-1,604:-1,616:-1,617:-1,644:-1,724:-1,718:-1,714:-1,756:-1,757:-1,984:-1,985:-1,1002:-1,998:-1,999:-1,1003:-1,989:-1,713:-1,970:-1,971:-1,972:-1,7026:-1,7027:-1701:-1,968:-1,1029:-1,1030:-1,7034:-1,7035:-1,7036:-1,7047:-1 + + + +// 装備 片手剣 +prontera.gat,149,170,3 shop 究極の片手剣屋 76,1108:-1,1111:-1,1114:-1,1120:-1,1125:-1,1127:-1,1128:-1,1130:-1,1131:-1,1132:-1,1133:-1,1134:-1,1135:-1,1136:-1,1137:-1,1138:-1,1139:-1,1140:-1,1141:-1,1144:-1,1145:-1 +// 装備 両手剣 +prontera.gat,149,167,3 shop 究極の両手剣屋 76,1117:-1,1152:-1,1155:-1,1158:-1,1161:-1,1162:-1,1164:-1,1165:-1,1166:-1,1167:-1,1168:-1,1170:-1 +// 装備 短剣 +prontera.gat,149,164,3 shop 究極の短剣屋 76,1202:-1,1205:-1,1208:-1,1211:-1,1214:-1,1220:-1,1223:-1,1226:-1,1227:-1,1228:-1,1229:-1,1231:-1,1232:-1,1233:-1,1234:-1,1236:-1,1237:-1,1239:-1 +// 装備 カタール +prontera.gat,149,161,3 shop 究極のカタール屋 76,1251:-1,1253:-1,1255:-1,1256:-1,1257:-1,1258:-1,1259:-1,1260:-1,1261:-1 +// 装備 斧 +prontera.gat,149,158,3 shop 究極の斧屋 76,1302:-1,1305:-1,1306:-1,1352:-1,1361:-1,1363:-1,1364:-1,1366:-1,1367:-1,1368:-1 +// 装備 槍 +prontera.gat,149,155,3 shop 究極の槍屋 76,1402:-1,1405:-1,1408:-1,1413:-1,1414:-1,1415:-1,1417:-1,1455:-1,1461:-1,1464:-1,1466:-1,1467:-1,1468:-1,1469:-1,1470:-1,1471:-1 +// 装備 鈍器 +prontera.gat,149,152,3 shop 究極の鈍器屋 76,1502:-1,1505:-1,1508:-1,1511:-1,1514:-1,1517:-1,1520:-1,1523:-1,1524:-1,1525:-1,1526:-1,1527:-1,1528:-1,1529:-1,1530:-1 +// 装備 本 +prontera.gat,149,149,3 shop 究極の本屋 76,1550:-1,1551:-1,1552:-1,1553:-1,1554:-1,1555:-1,1556:-1,1557:-1,1558:-1 +// 装備 杖 +prontera.gat,149,146,3 shop 究極の杖屋 76,1602:-1,1605:-1,1608:-1,1611:-1,1613:-1,1614:-1,1615:-1,1472:-1,1473:-1 +// 装備 弓 +prontera.gat,149,143,3 shop 究極の弓屋 76,1705:-1,1708:-1,1711:-1,1715:-1,1716:-1,1719:-1,1720:-1 + + + +// 装備 頭部(S付き) +prontera.gat,162,167,5 shop 至高のS兜屋 77,2202:-1,2204:-1,2209:-1,2217:-1,2221:-1,2223:-1,2225:-1,2227:-1,2229:-1,2231:-1,2233:-1 +// 装備 頭部(S無しその1) +prontera.gat,162,164,5 shop 至高の変装品屋1 77,2207:-1,2210:-1,2213:-1,2214:-1,2215:-1,2230:-1,2234:-1,2235:-1,2236:-1,2244:-1,2245:-1,2246:-1,2247:-1,2248:-1,2249:-1,2250:-1,2251:-1,2252:-1,2253:-1,2254:-1,2255:-1,2256:-1,2257:-1,2258:-1,2259:-1,2260:-1,2261:-1,2262:-1,2263:-1,2264:-1,2271:-1,2272:-1,2273:-1,2274:-1,2275:-1,2277:-1,2279:-1,2280:-1,2282:-1,2283:-1,2284:-1,2285:-1,2287:-1,2289:-1,2290:-1,2293:-1,2294:-1,2298:-1,2299:-1 +// 装備 頭部(S無しその2) +prontera.gat,162,161,5 shop 至高の変装品屋2 77,5001:-1,5002:-1,5003:-1,5006:-1,5007:-1,5008:-1,5009:-1,5010:-1,5011:-1,5012:-1,5013:-1,5014:-1,5015:-1,5016:-1,5017:-1,5018:-1,5019:-1,5020:-1,5021:-1,5022:-1,5023:-1,5024:-1,5025:-1,5026:-1,5027:-1,5028:-1,5029:-1,5030:-1,5031:-1,5032:-1,5033:-1,5034:-1,5035:-1,5036:-1,5037:-1,5038:-1,5039:-1,5040:-1,5041:-1,5042:-1,5043:-1,5045:-1,5046:-1,5047:-1,5048:-1,5049:-1,5050:-1,5052:-1,5053:-1 +// 装備 頭部(中段&下段) +prontera.gat,162,158,5 shop 至高の変装品屋3 77,2276:-1,2281:-1,2286:-1,2288:-1,2291:-1,2292:-1,2295:-1,2296:-1,2297:-1,5004:-1,5005:-1,5054:-1,2265:-1,2266:-1,2267:-1,2268:-1,2269:-1,2270:-1,5051:-1 +// 装備 鎧 +prontera.gat,162,155,5 shop 至高の鎧屋 77,2311:-1,2315:-1,2317:-1,2318:-1,2320:-1,2322:-1,2324:-1,2326:-1,2327:-1,2329:-1,2331:-1,2334:-1,2336:-1,2337:-1,2342:-1 +// 装備 盾 +prontera.gat,162,152,5 shop 至高の盾屋 77,2102:-1,2104:-1,2106:-1,2108:-1,2109:-1 +// 装備 靴 +prontera.gat,162,149,5 shop 至高の靴屋 77,2402:-1,2404:-1,2406:-1,2407:-1,2410:-1,2412:-1 +// 装備 外套 +prontera.gat,162,146,5 shop 至高の外套屋 77,2502:-1,2504:-1,2506:-1,2507:-1,2508:-1,2509:-1 +// 装備 アクセサリ +prontera.gat,162,143,5 shop 至高のアクセサリ屋 77,2601:-1,2602:-1,2603:-1,2604:-1,2605:-1,2607:-1,2610:-1,2615:-1,2616:-1,2617:-1,2618:-1,2619:-1,2620:-1,2621:-1,2622:-1,2623:-1,2624:-1,2625:-1,2626:-1,2629:-1,2631:-1 + + + +// 武器に刺すカード +prontera.gat,162,235,5 shop 最強の武器カード屋 80,4002:-1,4004:-1,4006:-1,4018:-1,4025:-1,4026:-1,4019:-1,4029:-1,4043:-1,4017:-1,4020:-1,4024:-1,4037:-1,4055:-1,4057:-1,4076:-1,4096:-1,4104:-1,4005:-1,4030:-1,4049:-1,4062:-1,4065:-1,4069:-1,4085:-1,4130:-1,4007:-1,4035:-1,4060:-1,4063:-1,4068:-1,4080:-1,4094:-1,4111:-1,4118:-1,4140:-1,4082:-1,4092:-1,4126:-1,4072:-1,4086:-1,4106:-1,4115:-1,4117:-1,4121:-1,4125:-1,4134:-1,4137:-1,4142:-1,4147:-1 +// 頭に挿すカード +prontera.gat,149,235,3 shop 最強の頭カード屋 80,4010:-1,4039:-1,4041:-1,4046:-1,4052:-1,4087:-1,4110:-1,4112:-1,4122:-1,4127:-1,4132:-1,4143:-1,4148:-1 +// 鎧に挿すカード +prontera.gat,162,238,5 shop 最強の鎧カード屋 80,4001:-1,4003:-1,4008:-1,4011:-1,4014:-1,4016:-1,4021:-1,4023:-1,4031:-1,4078:-1,4047:-1,4054:-1,4089:-1,4098:-1,4099:-1,4101:-1,4114:-1,4119:-1,4141:-1,4042:-1,4061:-1,4105:-1,4135:-1 +// 盾に挿すカード +prontera.gat,149,238,3 shop 最強の盾カード屋 80,4012:-1,4013:-1,4032:-1,4058:-1,4059:-1,4066:-1,4074:-1,4083:-1,4120:-1,4124:-1,4136:-1,4138:-1,4045:-1,4067:-1,4075:-1,4090:-1,4128:-1,4146:-1 +// 肩にかけるものに挿すカード +prontera.gat,162,241,5 shop 最強の外套カード屋 80,4056:-1,4071:-1,4081:-1,4095:-1,4108:-1,4109:-1,4113:-1,4116:-1,4133:-1,4015:-1,4088:-1,4102:-1,4129:-1 +// 靴に挿すカード +prontera.gat,149,241,3 shop 最強の靴カード屋 80,4009:-1,4038:-1,4050:-1,4070:-1,4097:-1,4100:-1,4107:-1,4123:-1,4131:-1 +// アクセサリーに挿すカード +prontera.gat,162,244,5 shop 最強のアクセサリカード屋 80,4022:-1,4027:-1,4028:-1,4034:-1,4051:-1,4064:-1,4091:-1,4079:-1,4033:-1,4040:-1,4044:-1,4048:-1,4053:-1,4073:-1,4084:-1,4093:-1,4103:-1,4139:-1,4036:-1,4077:-1,4144:-1,4145:-1 + diff --git a/npc/sample/npc_sample.txt b/npc/sample/npc_sample.txt new file mode 100644 index 000000000..390e5db28 --- /dev/null +++ b/npc/sample/npc_sample.txt @@ -0,0 +1,457 @@ +// +// Athena Sample Script +// (c) 2003 Athena Project. +// +// $Id: npc_sample.txt,v 1.1.1.1 2004/09/10 17:26:47 MagicalTux Exp $ + +// このファイルは、Athenaで使用されるスクリプトの解説と使用例のサンプルと +// なっています。 + +// ============= +// *基本的な書式 +// ============= +// <parameters_1>\t<command>\t<displayname>\t<parameters_2> +// \tはTABをあらわします。 +// command は "warp" / "monster" / "shop" / "script" のいずれかになります。 +// 各行において"//"以降はコメントとして無視されます。 +// 以下、個々について解説をしていきます。 +// +// 書式中<n>とかかれている部分はnという文字ではなく、任意の文字列/値を示します。 +// また、[n]は必要に応じて指定する任意の文字列/値となっています。 + +// ======== +// *command +// ======== +// +// --------------- +// *通常warp(warp) +// --------------- +// 書式 : <gatname>,<x>,<y> warp <displayname(hidden)> <dx>,<dy>,<destination_gatname>[.gat],<destination_x>,<destination_y> +// +// <gatname> - マップデータファイル名。拡張子は必須です。 +// <x>,<y> - ワープポイントの中心座標(x,y) +// <displayname(hidden)> - npc名。一文字以上の任意の文字で指定します。ユニークな名前である必要はありません。 +// 実際には表示されません。 +// <dx>,<dy> - 動作範囲(x,y) <x,y>を中心に(dx+1,dy+1)の範囲にPCが来ると発動します +// <destination_gatname>,<destination_x>,<destination_y> - +// 移動先のマップデータファイル名,座標(x,y) +// destination_gatnameについては拡張子".gat"はあっても無くても構いません。 +// 移動先のmapデータファイルが存在しない(あるいはmap_configで指定されていない)場合は発動しません。 +// 移動先の座標が進入禁止区域であった場合は、ランダムな座標にワープします。 +// また、同一座標に複数のwarpが置かれていた場合、先に記述されているものが有効になります +// これは、confファイル内で指定される、npc*.txtファイルをまたいでwarpを記述するときも同じことがいえます。 +// 例: +prontera.gat,156,185,4 warp sample1 0,0,prontera.gat,156,225 +prontera.gat,156,185,4 warp sample1a 0,0,prontera.gat,156,230 +// sample1の方が先に記述されているので、156,225に移動します +prontera.gat,156,220,4 warp sample1-1 0,0,prontera.gat,156,180 + +// -------------------- +// *モンスター(monster) +// -------------------- +// 書式:<gatname>,<x>,<y>[,<xs>,<ys>] monster <displayname> <npcid>,<number>[,<spawn_delay1>,<spawn_delay2>] +// <gatname> - マップデータファイル名。拡張子は必須です。 +// <x>,<y> - 初期配置座標(x,y) 0,0であればランダムな位置に配置されます。 +// [,<xs>,<ys>] - 特定範囲内に配置する時に指定します。 +// <displayname> - マウスカーソルを合わせたときに表示される名前。名前は一文字以上指定してください +// <npcid> - キャラクター種。詳細についてはお察しください(db/mob_db.txtが参考になると思いますが...) +// <number> - 配置数 +// [,<spawn_delay1>,<spawn_delay2>] - 同一pc_idをもつモンスターの生成時間についての定義 +// 前回出現時間+出現遅延1,倒された時間+出現遅延2,倒された時間+5秒 で算出される値のうち、最も大きい物を +// 出現時間とします +// 例: +prontera.gat,0,0 monster ポリン 1002,5 + +// --------- +// *店(shop) +// --------- +// 書式:<gatname>,<x>,<y>,<direction> shop <displayname> <npcid>,<item_id1>:<price1>[,<item_id2>:<price2>[,.....<item_id_N>:<priceN>]] +// <gatname> - マップデータファイル名。拡張子は必須です。 +// <x>,<y> - NPCの配置座標(x,y) +// <direction> - npcの向いている方向。0を北(y座標方向+)として、反時計回り45度きざみになっています +// <displayname> - マウスカーソルを合わせたときに表示される名前。名前は一文字以上指定してください +// <npcid> - キャラクター種。詳細についてはお察しください +// <item_id_N>:<price_N> - item_id_Nの商品を価格price_Nとして販売物ウインドウに表示します。 +// item_idについてはdb/item_db.txtを参照してください。 +// 例: +prontera.gat,136,203,6 shop 道具商人 73,501:5,502:20,503:55,504:120,506:20,645:80,656:150,601:30,602:30,611:20,610:400 + +// -====================- +// *NPCスクリプト(script) +// -====================- +// 書式: +// <gatname>,<x>,<y>,<direction> script <displayname> <npcid>[,<xs>,<ys>],{ <script> ... } +// <gatname> - マップデータファイル名。拡張子は必須です。 +// <x>,<y> - NPCの配置座標(x,y) +// <direction> - npcの向いている方向。0を北(y座標方向+)として、反時計回り45度きざみになっています +// <displayname> - マウスカーソルを合わせたときに表示される名前。名前は一文字以上指定してください +// <npcid> - キャラクター種。詳細についてはお察しください +// [,<xs>,<ys>] - (x,y)を中心として(xs,ys)以内にPCが近寄るとスクリプトが発動します +// (warpと同じような発動のしかたになります) +// +// この後に続く{}内がスクリプトとして認識されますが +// }(行末) でスクリプトの終了と判断しています。 +// そのため、}の後にはコメント(//〜)は付けないでください。 +// (後日この仕様は変更予定です) +// +// ------------------------ +// *{}内のスクリプトについて +// ------------------------ +// 個々の命令語や数字,文字列,ラベル,演算子等の間は +// スペースやタブ、改行、/* */により囲まれたコメント、//から改行までのコメントを +// 自由に入れる事が出来ます (C風味) +// 各命令は最後に";"をつけます (C風味) +// +// --- +// *値 +// --- +// script内で使用される値は 数字 / 文字列 / 変数名 / ラベル の4種類に分かれます。 +// +// *数字 [0-9]の列で表わされる10進数か、0xで始まる16進数 +// 数値として扱えるのは符号付32bit整数のみで、小数は扱えません +// *文字列 ""で囲まれた一通りの文字列が使えます。 +// 文字列中に"を入れたい場合は\"、\を入れたい場合は\\とします +// *変数名/ラベル名 [A-Za-z0-9_]と@(一文字目のみ)が使えます。 +// 特殊なラベルとして-が存在します。これは次の命令を意味します +// 以下で説明する定数や埋め込み変数もこれにあたります +// +// ----------------------- +// *定数または埋め込み変数 +// ----------------------- +// db/const.txtに<定数名> <数値>と記述する事で +// スクリプト内で利用可能な定数を宣言出来ます。 +// (NPC店の商品リスト,見た目の設定部分等には利用出来ません) +// +// また、この中でキャラクターのステータスを参照する +// 埋め込み変数の定義もしています。現在有効な物は以下の7つです +// +// BaseLevel : ベースレベル +// JobLevel : ジョブレベル +// StatusPoint : 振り分け可能なステータスポイント数 +// SkillPoint : 振り分け可能なスキルポイント数 +// Class : キャラクターの職業の種類 +// Class値についてはJob_Novice等db/const.txtで定数定義されてますのでこちらを使うと良いでしょう +// Zeny : お金 +// Sex : 性別[0=♂, 1=♀] +// +// これらの変数は、if命令やset命令で自由に参照が出来ますが、 +// 変更はStatusPointとSkillPointとZenyのみで他の埋め込み変数は変更しても意味を持ちません。 +// また、この3つの埋め込み変数を変更した場合、変更はクライアントに即座に反映されます。 +// +// ------- +// *ラベル +// ------- +// ラベルは、ラベル名の後に:を付け +// label: +// のように記述します。 +// goto文やmenu文、if文等の飛び先として使われます。 +// +// --- +// *式 +// --- +// 命令の引数として数値が要求されている所は、全ての所で式が利用可能です。 +// 整数演算のみですが、Cの式のサブセットになっています +// 利用可能な演算子は()、単項演算子 - ! ~、2項演算子 + - * / % & | ^ && || == != > >= < <= です +// +// 文字列の場合は + で連結が可能です。 +// 文字列 + 数値 や 数値 + 文字列 とした場合は数値を文字列へと変換し連結します。 +// +// ----------------- +// *{}内で使える命令 +// ----------------- +// +// mes "<message>"; +// メッセージウインドウにmessageを表示します +// 文字の色は^000000等^に続けて16進数6桁で指定します(初期色は黒(^000000)です) +// +// next; +// メッセージウインドウに"next"のボタンを表示します +// +// close; +// メッセージウインドウに"close"のボタンを表示し、スクリプトの実行を終了します +// +// menu "<choice1>",<Label1>[,"<choice2>",<Label2>....]; +// 選択肢ウインドウを表示します。"choice1","choice2"等か選択肢に表示され +// メニューで選んだ場合は、その後に記述されるラベルにジャンプします。 +// また、選択した項目はローカル変数l15にて参照できます。 +// 上の例ですと選択肢に"choice1"が現れ、これを選ぶとLabel1:で始まる行にジャンプします。 +// そして、変数l15には1という値がセットされます +// cancelを選んだ場合、スクリプトの実行を終了します +// +// goto <Label>; +// Label:で始まる行から続きを実行します +// +// cutin "<filename>[.bmp]",<pos>; +// 画面上にfilenameで指定する画像を表示します +// filename - 表示するbmpファイル名。拡張子は無くても構いません +// pos - 表示位置 0-左下 1-中央下 2-右下 3-? 4-? 255-非表示 +// 現在のクライアントでは、cutinを実行するときに以前cutinが実行されており画像が表示されている場合は、 +// 先に表示してある画像を消去してから後で指定される画像を表示します +// +// jobchange <Jobid>; +// PCの職をJobnameで指定した職に変更します。指定できるJobidについてはdb/const.txtのJob_ではじまる行を +// 参照してください。constで指定している埋めこみ変数名も使用できます。 +// jobchangeを行うと、JobLvは1に、ステータスボーナスはその職に +// 合わせた物に変化します。Athena-d2.1ではスキルは使えないので、見た目変更だけと思ってください。 +// [注意] +// 1.追加2次職(クルセイダー等)にjobchangeをする場合、服色パレットを変更している場合はリソースエラーが +// 起きますので、実行しないようにしてください。 +// 2.バードとダンサーのJobnameは別になっています。 +// このため、男性PCに対してJob_Dancerを実行したり、女性PCに対してjob_Birdを実行しないようにしてください。 +// クライアントによってはリソースエラーで落ちます。 +// map側では整合チェックを行っていないため、スクリプト側でチェックする必要があります。 +// npc_testJ.txtの例を参照してください。 +// 3.db/const.txtにはknight2/crusader2の記述がありますが、このjobへのjobchangeは行わないほうが無難です。 +// 実際のゲームでもこのjobは使用されていないようです。 +// +// input [<variable>]; +// 数字入力ウインドウを開きます。 +// 入力された数字はvariableがあった場合その変数に、 +// 無かった場合はローカル変数l14にセットされます。 +// +// warp "<destination_gatname>",<destination_x>,<destination_y>; +// 指定したマップのx,y座標にワープします。詳細は上記warp(NPC)の項を参照してください。 +// +// setlook <n1>,<n2>; +// PCの外見を設定します。 +// <n1> - (1 .. 8) +// 1-髪型 +// 2-武器 +// 3-頭下 +// 4-頭上 +// 5-頭中 +// 6-髪色 +// 7-服色 +// 8-盾 +// <n2> - 任意 +// 外見設定は該当アイテムを装備していなくても付加されます。 +// 想定外の番号を設定すると、クライアントがリソースエラーで落ちます。 +// アサシン男,追加2次職に関しては服色の変更は行わないでください(やはりリソースエラー落ちします) +// 武器や頭装備,盾の設定はステータス再計算時に上書きされてしまうため、 +// 実験的な用途にのみ利用可能です。 +// +// set <variable>,<n>; +// 変数<variable>の値を<n>にセットします。 +// 現在<n>は数値のみで文字列が扱えませんが、後日対応予定です。 +// +// if (<cond>) goto <Label>; +// 条件分岐です。<cond>の計算結果が0以外の場合、Labelにジャンプします。 +// +// getitem <item_id>,<num>; +// PCの所持品リストにitem_idで指定されるアイテムをnumだけ追加します。 +// +// delitem <item_id>,<num>; +// PCの所持品リストからitem_idで指定されるアイテムをnumだけ削除します。 +// +// viewpoint <type>,<x>,<y>,<id>,<color>; +// ミニマップのx,yの座標にマーク(color色を指定)を付けます。 +// <type> 1-表示 +// 2-削除 +// +// heal <hp>,<sp>; +// PCのHP/SPをhp,spで指定した値だけ回復させます。 +// +// end; +// ここでスクリプトの実行を終了します。 +// +// setoption <str>; +// PCに以下で示す付属品(?)を付けます。 +// 0x0000 - 付属品削除 +// 0x0001 - ? +// 0x0002 - ハイド(影付き) +// 0x0004 - ?? +// 0x0008 - カート +// 0x0010 - 鷹 +// 0x0020 - ペコペコ(ナイト,クルセイダーの時のみ有効) +// 0x0040 - ハイド(影無し) +// 0x0080 - カート2 +// 0x0100 - カート3 +// 0x0200 - カート4 +// 0x0400 - カート5 +// 0x0800 - 頭がオーク(Sageのスキル、リバースオーキッシュがかかった状態になる) +// setoptionを実行するとき、元々セットされていた値はクリアされます。 +// それぞれの値は加算した値を設定することにより、同時に付属品が付けられます。 +// 例えば、0x38でカートを引いて、鷹を連れたペコ乗りナイトといったものもできます。 +// setoptionでセットされた値はクライアント終了後も記憶されます。 +// [memo]暫定的なので仕様変更の可能性があります。 +// +// savepoint "<gatname>",<x>,<y>; +// セーブポイントをgatname,x,yに設定します +// +// ----- +// *関数 +// ----- +// 条件命令などで以下の関数が使用できます。 +// +// rand(<n>[,n2]) +// nのみの場合、0から(n-1)までの数をランダムに返します。 +// n2が与えられていた場合は n から n2 までの数をランダムに返します +// +// countitem(<item_id>) +// プレイヤーの所持する、item_idで指定するアイテムの数を返します +// +// [memo] +// ランダムワープを実装したい場合、範囲実行なscriptを利用します(npc_warp.txtを参照) +// + +// scriptの例: +prontera.gat,146,203,2 script デバッガー要員 116,{ + cutin "kafra_02",2; + if(countitem(515)<10) goto Llesscarrot; + mes "[デバッガー要員]"; + mes "あらあら、にんじんを沢山持ってますね。"; + mes "という事で、うさうさ好きと勝手にわたしが認定しました。"; + mes "にんじん10本と交換でうさみみヘアバンドをさしあげますね。"; + next; + if(countitem(515)<10) goto Llesscarrot_err; + delitem 515,10; + getitem 2214,1; + goto Llesscarrot; +Llesscarrot_err: + mes "[デバッガー要員]"; + mes "あら?にんじんが足りなくなってますね。"; + mes "という事で今回の事は無かった事にします。"; + next; +// 通常はここから +Llesscarrot: + mes "[デバッガー要員]"; + mes "いらっしゃいませ。"; + mes "何をしますか?"; + next; + menu "ステータスポイントを200増やす",Lstp,"スキルポイントを20増やす",Lskill, + "お金が欲しいです",Lzeny,"案内のテスト",Lviewpoint,"転職する",Ljobchange,"カートをつける",Lcart,"やめる",Lend; +Lstp: set StatusPoint,StatusPoint+200; + goto Lend; +Lskill: set SkillPoint,SkillPoint+20; + goto Lend; +Lzeny: set Zeny,Zeny+1000; + goto Lend; +Lviewpoint: + viewpoint 1,156,360,1,0x0000ff; + mes "[デバッガー要員]"; + mes "プロンテラ城"; + next; + viewpoint 2,156,360,1,0x0000ff; + viewpoint 1,156,22,2,0x00ff00; + viewpoint 1,22,203,3,0x00ff00; + viewpoint 1,289,203,4,0x00ff00; + mes "[デバッガー要員]"; + mes "この3箇所から外に出られます。"; + next; + viewpoint 2,156,22,2,0x00ff00; + viewpoint 2,22,203,3,0x00ff00; + viewpoint 2,289,203,4,0x00ff00; + goto Lend; +Ljobchange: + cutin "kafra_02",255; + mes "[デバッガー要員]"; + mes "見た目のみですが"; + mes "転職可能です。"; + mes "転職しても、スキル等は"; + mes "未実装のため使えません。"; + mes "どの職業に転職させますか?"; + next; + menu "初心者",Lnv, + "剣士",Lsm, + "マジシャン",Lmg, + "アーチャー",Lac, + "アコライト",Lal, + "商人",Lmc, + "シーフ",Ltf, + "ナイト",Lkn, + "プリースト",Lpr, + "ウィザード",Lwz, + "鍛冶屋",Lbs, + "ハンター",Lht, + "アサシン",Las, + "おまかせ",Lrandom, + "やめる",Ljchcancel; +Lnv: jobchange Job_Novice; goto Lend; +Lsm: jobchange Job_Swordman; goto Lend; +Lmg: jobchange Job_Mage; goto Lend; +Lac: jobchange Job_Archer; goto Lend; +Lal: jobchange Job_Acolyte; goto Lend; +Lmc: jobchange Job_Merchant; goto Lend; +Ltf: jobchange Job_Thief; goto Lend; +Lkn: jobchange Job_Knight; goto Lend; +Lpr: jobchange Job_Priest; goto Lend; +Lwz: jobchange Job_Wizard; goto Lend; +Lbs: jobchange Job_Blacksmith; goto Lend; +Lht: jobchange Job_Hunter; goto Lend; +Las: jobchange Job_Assassin; goto Lend; +Lrandom: + mes "[デバッガー要員]"; + mes "では…"; + set l0,rand(13); + jobchange l0; + mes "この職業で頑張ってくださいね。"; + goto Lend; +Ljchcancel: mes "あら、やめるのですか…"; + mes "転職されるときは"; + mes "気軽に声をかけてくださいね"; close; + goto Lend; +Lcart: + mes "[デバッガー要員]"; + mes "カートですね。"; + mes "付けますか?それとも外しますか?"; + menu "つける",LattachC,"外す",LremoveC; +LattachC: + mes "はい、どうぞ。"; + setoption 0x08; + goto Lend; +LremoveC: + mes "では、外しますね。"; + setoption 0x00; + goto Lend; +Lend: cutin "kafra_02",255; + close; + end; } + +prontera.gat,156,195,4 script カプラ職員 112,{ + mes "[カプラ職員]"; + mes "いらっしゃいませ"; + mes "こちらでは、現在のAthenaの状況を説明いたします。"; + next; + menu "聞く",Lcont,"聞かない",Lend; +Lcont: mes "[カプラ職員]"; + mes "AthenaではROエミュ鯖開発スレ35さんのプログラムをベースとして開発がはじまりました" + mes "途中、ソースの分割化が図られ、現在の状態になっています。"; + next; + mes "現在実装されているものはつぎの通りです"; + mes "・マップ間移動ポイント"; + mes "・商人NPC"; + mes "・会話NPC (条件分岐,ラベルジャンプ、ランダム変数、アイテム受け渡し、変数参照、cutin等"; + mes "・変数保存"; + mes "・床アイテム"; + mes "・チャット"; + mes "・戦闘(殴り)"; + mes "・Episode 4以降タイプのパケット仕様"; + mes "・経験値,lv上昇"; + mes "・アイテムの利用の一部"; + next; + mes "[カプラ職員]"; + mes "逆に現状実装されていないものは大体以下の通りです。"; + mes "・スキル"; + mes "・装備によるパラメータ変化"; + mes "・パーティ/ギルド"; + mes "・ペット"; + mes "・精錬/武器作成"; + next; + mes "[カプラ職員]"; + mes "それと注意点ですが、AthenaではIDの最後に_Fまたは_Mを付けると新規IDが発行される仕組になっていますが、"; +Lcont2: mes "2回目以降は_F,_Mを付けているとパスワードエラー扱いになります。"; + next; + mes "[カプラ職員]"; + mes "例えば、初回にID:^ff0000hoge^0000ff_F^000000 pass:0123とloginした場合、hogeがIDとして登録されます。"; + mes "よって、2回目以降はID:^ff0000hoge^000000 pass:0123としてloginして下さい。"; + next; + mes "[カプラ職員]"; + mes "keepにチェックを入れている場合、若干不便な仕様ですが、以上の点をよろしくお願いします。"; + close; +Lend: mes "[カプラ職員]"; + mes "では注意点のみ、説明させて頂きます。"; + next; + mes "[カプラ職員]"; + mes "AthenaではIDの最後に_Fまたは_Mを付けると新規IDが発行される仕組になっていますが、"; + goto Lcont2; } + diff --git a/npc/sample/npc_shop_test.txt b/npc/sample/npc_shop_test.txt new file mode 100644 index 000000000..f619cbdb1 --- /dev/null +++ b/npc/sample/npc_shop_test.txt @@ -0,0 +1,31 @@ +// プロンテラ噴水周辺 +prontera.gat,156,192,3 shop カードショップ1 95,4001:100,4002:100,4003:100,4004:100,4005:100,4006:100,4007:100,4008:100,4009:100,4010:100,4011:100,4012:100,4013:100,4014:100,4015:100,4016:100,4017:100,4018:100,4019:100,4020:100,4021:100,4022:100,4023:100,4024:100,4025:100,4026:100,4027:100,4028:100,4029:100,4030:100,4031:100,4032:100,4033:100,4034:100,4035:100,4036:100,4037:100,4038:100,4039:100,4040:100,4041:100,4042:100,4043:100,4044:100,4045:100,4046:100,4047:100,4048:100,4049:100,4050:100 +prontera.gat,154,192,1 shop カードショップ2 123,4051:100,4052:100,4053:100,4054:100,4055:100,4056:100,4057:100,4058:100,4059:100,4060:100,4061:100,4062:100,4063:100,4064:100,4065:100,4066:100,4067:100,4068:100,4069:100,4070:100,4071:100,4072:100,4073:100,4074:100,4075:100,4076:100,4077:100,4078:100,4079:100,4080:100,4081:100,4082:100,4083:100,4084:100,4085:100,4086:100,4087:100,4088:100,4089:100,4090:100,4091:100,4092:100,4093:100,4094:100,4095:100,4096:100,4097:100,4098:100,4099:100,4100:100 +prontera.gat,158,192,1 shop カードショップ3 67,4101:100,4102:100,4103:100,4104:100,4105:100,4106:100,4107:100,4108:100,4109:100,4110:100,4111:100,4112:100,4113:100,4114:100,4115:100,4116:100,4117:100,4118:100,4119:100,4120:100,4121:100,4122:100,4123:100,4124:100,4125:100,4126:100,4127:100,4128:100,4129:100,4130:100,4131:100,4132:100,4133:100,4134:100,4135:100,4136:100,4137:100,4138:100,4139:100,4140:100,4141:100,4142:100,4143:100,4144:100,4145:100,4146:100,4147:100,4148:100 +prontera.gat,144,205,1 shop 頭装備屋1 71,2201:100,2202:100,2203:100,2204:100,2205:100,2206:100,2207:100,2208:100,2209:100,2210:100,2211:100,2212:100,2213:100,2214:100,2215:100,2216:100,2217:100,2218:100,2219:100,2220:100,2221:100,2222:100,2223:100,2224:100,2225:100,2226:100,2227:100,2228:100,2229:100,2230:100,2231:100,2232:100,2233:100,2234:100,2235:100,2236:100,2237:100,2239:100,2240:100,2241:100,2242:100,2243:100,2244:100,2245:100,2246:100,2247:100,2248:100,2249:100,2250:100 +prontera.gat,144,203,3 shop 頭装備屋2 101,2251:100,2252:100,2253:100,2254:100,2255:100,2256:100,2257:100,2258:100,2259:100,2260:100,2261:100,2262:100,2263:100,2264:100,2265:100,2266:100,2267:100,2268:100,2269:100,2270:100,2271:100,2272:100,2273:100,2274:100,2275:100,2276:100,2277:100,2278:100,2279:100,2280:100,2281:100,2282:100,2283:100,2284:100,2285:100,2286:100,2287:100,2288:100,2289:100,2290:100,2291:100,2292:100,2293:100,2294:100,2295:100,2296:100,2297:100,2298:100,2299:100 +prontera.gat,144,201,3 shop 頭装備屋3 69,5001:100,5002:100,5003:100,5004:100,5005:100,5006:100,5007:100,5008:100,5009:100,5010:100,5011:100,5012:100,5013:100,5014:100,5015:100,5016:100,5017:100,5018:100,5019:100 +prontera.gat,167,202,5 shop アクセサリーショップ 102,2601:100,2602:100,2603:100,2604:100,2605:100,2607:100,2608:100,2609:100,2610:100,2611:100,2612:100,2613:100,2614:100,2615:100,2616:100,2617:100,2618:100,2619:100,2620:100,2621:100,2622:100,2623:100,2624:100,2625:100,2626:100,2627:100,2628:100 +prontera.gat,167,204,6 shop 雑貨屋 96,501:100,502:100,503:100,504:100,505:100,506:100,507:100,508:100,509:100,510:100,511:100,512:100,513:100,514:100,515:100,516:100,517:100,518:100,519:100,520:100,521:100,522:100,523:100,525:100,526:100,528:100,529:100,530:100,531:100,532:100,533:100,534:100,535:100,536:100,537:100,538:100,539:100,601:100,602:100,603:100,604:100,605:100,606:100,607:100,608:100,609:100,610:100 +prontera.gat,167,206,6 shop 鍛冶屋専門店 90,714:100,715:100,716:100,717:100,718:100,719:100,720:100,721:100,722:100,723:100,724:100,725:100,726:100,727:100,728:100,729:100,730:100,731:100,732:100,733:100,756:100,757:100,984:100,985:100,990:100,991:100,992:100,993:100,994:100,995:100,996:100,997:100,1010:100,1011:100,998:100,999:100,1000:100,1001:100,1002:100,1003:100,913:100,920:100,718:100,958:100,957:100,922:100,963:100,923:100,968:100,1005:100,612:100,615:100,989:100 +prontera.gat,164,204,5 shop 日本限定品店 81,542:100,543:100,1766:100 +// プロンテラ中央南 +prontera.gat,141,175,5 shop 弓屋 102,1705:100,1711:100,1716:100,1719:100,1720:100,1750:1,1751:1,1752:1,1753:1,1754:1,1755:1,1756:1,1766:1,1065:1 +prontera.gat,141,173,5 shop 剣屋 102,1117:100,1125:100,1155:100,1162:100,1130:100,1131:100,1132:100,1133:100,1134:100,1135:100,1136:100,1137:100,1138:100,1139:100,1140:100,1141:100,1161:100,1162:100,1163:100,1164:100,1165:100,1166:100,1167:100,1168:100,1169:100,1170:100 +prontera.gat,141,171,5 shop 槍屋 102,1408:100,1461:100,1464:100,1413:100,1414:100,1415:100,1416:100,1466:100,1467:100,1468:100,1469:100,1470:100,1471:100 +prontera.gat,141,169,5 shop 斧屋 102,1352:100,1355:100,1361:100,1363:100,1364:100,1365:100,1366:100,1367:100,1368:100,1369:100 +prontera.gat,141,167,5 shop 短剣屋 102,1208:100,1220:100,1223:100,1224:100,1225:100,1226:100,1227:100,1228:100,1229:100,1230:100,1231:100,1232:100,1233:100,1234:100,1235:100,1236:100,1237:100 +prontera.gat,141,165,5 shop 鈍器屋 102,1505:100,1520:100,1514:100,1517:100,1522:100,1523:100,1524:100,1525:100,1526:100,1527:100,1528:100 +prontera.gat,141,163,5 shop カタール屋 102,1251:100,1253:100,1255:100,1256:100,1257:100,1258:100,1259:100,1260:100,1261:100 +prontera.gat,141,161,5 shop 杖屋 102,1602:100,1608:100,1611:100,1613:100,1614:100,1615:100 +prontera.gat,141,159,5 shop 本屋 102,1550:100,1551:100,1552:100,1553:100,1554:100,1555:100,1556:100,1557:100,1558:100 +prontera.gat,141,177,5 shop 防具屋 102,2306:100,2339:100,2311:100,2331:100,2336:100,2337:100,2326:100,2327:100,2315:100,2317:100,2102:100,2104:100,2106:100,2108:100,2402:100,2404:100,2406:100,2407:100,2408:100,2409:100,2502:100,2504:100,2506:100,2507:100,2508:100 + +// テイミング商人 +prontera.gat,218,211,4 shop テイミング商人 125,537:2500,643:3000,10013:1500,10014:2000 +izlude.gat,164,138,4 shop テイミング商人 124,537:2500,643:3000,10013:1500,10014:2000 +morocc.gat,269,167,4 shop テイミング商人 125,537:2500,643:3000,10013:1500,10014:2000 +geffen.gat,193,152,4 shop テイミング商人 124,537:2500,643:3000,10013:1500,10014:2000 +payon.gat,142,104,4 shop テイミング商人 124,537:2500,643:3000,10013:1500,10014:2000 + +// EOF // diff --git a/npc/sample/npc_test_arena.txt b/npc/sample/npc_test_arena.txt new file mode 100644 index 000000000..1704c57bf --- /dev/null +++ b/npc/sample/npc_test_arena.txt @@ -0,0 +1,104 @@ +// ------------------------------------------------------------------ +// アリ−ナの設定 +// ------------------------------------------------------------------ + +// 次のマップを使います +//map: prontera.gat +//map: prt_are_in.gat +//map: force_1-1.gat + +// テレポなどの禁止処理 +prt_are_in.gat mapflag nomemo dummy +prt_are_in.gat mapflag noteleport dummy +prt_are_in.gat mapflag nosave prontera.gat,156,191 +force_1-1.gat mapflag nomemo dummy +force_1-1.gat mapflag noteleport dummy +force_1-1.gat mapflag nosave prontera.gat,156,191 + +// プロンテラに入り口を置く +prontera.gat,160,185,0 script アリーナ入り口 116,{ + mes "アリーナ入り口に飛びますか?"; + next; + menu "飛ぶ",L_GOARENA,"やめる",L_YAME; +L_GOARENA: + warp "prt_are_in.gat",31,82; + close; +L_YAME: + close; +} + +// 待機室から準備室への転送 +prt_are_in.gat,29,79,0 script タイムアタック1 116,{ + if( getmapusers("force_1-1.gat")>0 ) goto L_WAIT; + mes "ここはタイムアタックLv1です"; + mes "挑戦しますか?"; + menu "はい",L_GOLV1,"やめる",L_YAME; +L_GOLV1: + if( getmapusers("force_1-1.gat")>0 ) goto L_WAIT; + disablenpc "fc103-1"; + disablenpc "fc105"; + disablenpc "fc107"; + addtimer 5000,"arenatestev0000"; + warp "force_1-1.gat",99,12; + end; +L_WAIT: + mes "現在挑戦中の方がいますので、"; + mes "しばらくお待ちください。"; +L_YAME: + close; +} + +// 準備室(10秒準備期間) +force_1-1.gat,99,12,0 script arenatestev0000 -1,{ + announce "10秒後に開始します",3; + addtimer 10000,"arenatestev0001"; +} + +// 実際の部屋への転送とMOBの設定 +force_1-1.gat,99,12,0 script arenatestev0001 -1,{ + killmonster "force_1-1.gat","arenatestev1000"; + monster "force_1-1.gat",25,25,"--ja--",1002,1,"arenatestev1000"; + monster "force_1-1.gat",20,25,"--ja--",1002,1,"arenatestev1000"; + monster "force_1-1.gat",25,20,"--ja--",1002,1,"arenatestev1000"; + monster "force_1-1.gat",30,25,"--ja--",1002,1,"arenatestev1000"; + monster "force_1-1.gat",25,30,"--ja--",1002,1,"arenatestev1000"; + set $arenatest00,5; + disablenpc "fc101"; + disablenpc "fc103"; + warp "force_1-1.gat",25,26; + enablenpc "fc103-1"; + enablenpc "fc105"; + enablenpc "fc107"; + announce "30秒以内に殲滅せよ",19; + addtimer 30000,"arenatestev8000"; +} + +// 倒した処理 +force_1-1.gat,25,26,0 script arenatestev1000 -1,{ + set $arenatest00, $arenatest00 - 1; + if( $arenatest00 > 0 ) goto L_CONT; + deltimer "arenatestev8000"; + announce "クラッシュ!!",3; + enablenpc "fc101"; + enablenpc "fc103"; + areaannounce "prt_are_in.gat",25,75,40,90, + strcharinfo(0) + " がタイムアタックLv1をクリアしました",0; + addtimer 5000,"arenatestev9000"; +L_CONT: + end; +} + +// タイムアウト +force_1-1.gat,25,26,0 script arenatestev8000 -1,{ + set $arenatest00,99; + killmonster "force_1-1.gat","arenatestev1000"; + announce "タイムオーバー!!",3; + areaannounce "prt_are_in.gat",25,75,40,90, + strcharinfo(0) + " がタイムアタックLv1に失敗しました",0; + addtimer 5000,"arenatestev9000"; +} + +// プロンテラに帰る +force_1-1.gat,25,26,0 script arenatestev9000 -1,{ + warp "prontera.gat",156,191; +} diff --git a/npc/sample/npc_test_array.txt b/npc/sample/npc_test_array.txt new file mode 100644 index 000000000..9f1fd219c --- /dev/null +++ b/npc/sample/npc_test_array.txt @@ -0,0 +1,35 @@ +// 配列のテスト +prontera.gat,164,190,1 script 配列テスト 112,{ + set @hoge[0],1; + set @hoge[1],5; + mes "hoge[2]を入力してください"; + next; + input @hoge[2]; + mes "hoge => " + @hoge; + mes "hoge[0]=> " + @hoge[0]; + mes "hoge[1]=> " + @hoge[1]; + mes "hoge[2]=> " + @hoge[2]; + next; + setarray @hoge[1],2,3,4,5; + mes "true: 5,1,2,3,4"; + mes "hoge size = "+ getarraysize(@hoge); + mes "hoge[0]=> " + @hoge[0]; + mes "hoge[1]=> " + @hoge[1]; + mes "hoge[2]=> " + @hoge[2]; + mes "hoge[3]=> " + @hoge[3]; + next; + copyarray @fuga[0],@hoge[2],2; + mes "true: 3,4,0"; + mes "fuga[0]=> " + @fuga[0]; + mes "fuga[1]=> " + @fuga[1]; + mes "fuga[2]=> " + @fuga[2]; + next; + deletearray @hoge[1],2; + mes "true: 1,4,5,0"; + mes "hoge[0]=> " + @hoge[0]; + mes "hoge[1]=> " + @hoge[1]; + mes "hoge[2]=> " + @hoge[2]; + mes "hoge[3]=> " + @hoge[3]; + + close; +} diff --git a/npc/sample/npc_test_chat.txt b/npc/sample/npc_test_chat.txt new file mode 100644 index 000000000..6f29a2718 --- /dev/null +++ b/npc/sample/npc_test_chat.txt @@ -0,0 +1,28 @@ + + +prontera.gat,158,182,0 script chatテスト::test0001 116,{ + mes "トリガー人数" + getwaitingroomstate(2); + mes "トリガー状態" + getwaitingroomstate(3); + menu "有効化",L_ENA,"無効化",L_DISA,"削除",L_DEL,"作成",L_MAKE; + close; +L_ENA: + enablewaitingroomevent; + close; +L_DISA: + disablewaitingroomevent; + close; +L_DEL: + delwaitingroom; + close; +L_MAKE: + waitingroom "テスト",15,"test0001::OnChatEvent",1; + close; +OnInit: + waitingroom "テスト",15,"test0001::OnChatEvent",1; + end; +OnChatEvent: + disablewaitingroomevent; + warpwaitingpc "prontera.gat",160,180; + end; + +} diff --git a/npc/sample/npc_test_ev.txt b/npc/sample/npc_test_ev.txt new file mode 100644 index 000000000..e0303a61f --- /dev/null +++ b/npc/sample/npc_test_ev.txt @@ -0,0 +1,146 @@ +// イベントのテストと解説 +// + + +// * NPCの表示クラスを-1にするとイベントになり、実行可能になります。 +// * 通常のNPCでも以下のラベル付きイベントを使うことでイベントになれます。 +// * NPCスクリプトでOn〜で始まるラベルを定義すると、 +// ラベル付きのイベントとしてエクスポートし、実行可能になります。 +// * NPCイベントで"NPC名(orイベント名)::ラベル名"とすると、 +// 指定したラベルから実行できます。 +// * ラベル名は24バイト以内にして下さい。 + + +// ------------------------------------------------------------------ +// イベントの起こし方/起こり方 +// ------------------------------------------------------------------ + +// 1.doeventコマンドで起こす +// 2.MOBを倒したときに起こす +// a. スクリプトmonsterコマンドの第7引数でイベント名を設定 +// b. monsterの配置の最後の引数でイベント名を設定 +// 3.マップ初期化時に起こる(OnInit) +// 4.NPCチャットルームが満員になったときに起こる +// 5.時計によって起こる +// (OnMinute??,OnHour??,OnClock????,OnDate????) : ?は数字 + +// 3,5の初期化イベント、時計イベントは、対象のPCを持たないイベントになります +// よってPCを対象とするスクリプトを使うことは出来ません。 +// また、announceコマンドなどは0x08フラグを指定してNPC主体にする必要があります + +// ----------イベント駆動のサンプル ------------- +// クリックするとイベント「event_test2」を起こすNPC +prontera.gat,155,180,0 script ev_doテスト 116,{ + doevent "event_test2"; +} + +// ----------MOBによるイベント駆動のサンプル ------------- +// 倒すとイベント「event_test」を起こすモンスターの[召喚] +prontera.gat,150,185,0 script ev_mobテスト 116,{ + monster "this",0,0,"Event_Mob2",1002,1,"event_test"; +} + +// ----------MOBによるイベント駆動のサンプル2------------- +// 倒すとイベント「event_test3」を起こすモンスターの[配置] +prontera.gat,150,180,0 monster Event_Mob 1008,1,0,0,event_test3 + +// ----------タイマによるイベント駆動のサンプル ------------- +// クリックすると5秒後にラベル「OnTimer」を実行するNPC +// (イベント名に「NPC名::On〜で始まるラベル」を指定するとラベルを実行できる) +prontera.gat,155,185,0 script ev_timerテスト 116,{ + addtimer 5000,"ev_timerテスト::OnTimer"; + end; +OnTimer: + mes "5秒経ちました"; + close; +} + +// ----------OnInit/チャットルームによるイベント駆動のサンプル ------------- +// マップサーバー起動時にラベル「OnInit」が実行され、チャットを作る +// また、waitingroomの第3引数にイベントを設定する +prontera.gat,145,180,0 script ev_initテスト 116,{ + end; +OnInit: + waitingroom "OnInitテスト",1,"ev_initテスト::OnMax"; + end; +OnMax: + warpwaitingpc "prontera.gat",155,190; + end; + +} + +// ----------時計によるイベント駆動のサンプル ------------- +// 指定の時刻や日付でイベントを実行する +// announceに0x08フラグを指定しているところに注意してください。 +prontera.gat,145,185,0 script ev_clockテスト 116,{ + end; +// 毎時5分 +OnMinute05: + announce "毎時5分をお知らせします",8; + end; +// 毎日12時(24H) +OnHour12: + announce "正午のニュースです",8; + end; +// 23時59分 +OnClock2359: + announce "あと1分で明日です",8; + end; +// 1月1日 +OnDate0101: + announce "あけましておめでとうございます",8; + end; +} + + +// ------------------------------------------------------------------ +// イベントスクリプトの作り方 +// ------------------------------------------------------------------ +// 表示クラスを-1にするとイベント扱いになり、名前がイベント名になる。 +// エリアを指定しない場合、同じマップ内がイベントを起こす範囲になる。 +// エリアを指定する場合、共に-1にすると同じマップ鯖ならマップが違っても +// 駆動する。エリアは半径である。なお、イベントの起こる位置というのは、 +// 対象となるPCの座標である。たとえば、遠距離攻撃でMOBを倒したときに +// 起こるイベントはMOBの座標ではなく、PCの座標なので注意。 + +// ----------イベントで、エリアは指定していないサンプル------------ +// 同じマップ内でイベント「event_test」が起こると実行される +prontera.gat,150,185,0 script event_test -1,{ + announce strcharinfo(0) + " が召喚MOBを倒しました",2; + close; +} + +// ----------イベントで、エリアを指定したサンプル------------ +// (155,185)から半径5セル以内でイベント「event_test2」が起こると実行される +prontera.gat,155,180,0 script event_test2 -1,5,5 { + announce "5セル以内でクリックしましたね",19; + close; +} + +// ----------イベントで、エリアを-1にしたサンプル------------ +// 同じマップ鯖でイベント「event_test3」が起こると実行される +prontera.gat,150,180,0 script event_test3 -1,-1,-1 { + mes "配置MOB倒しましたね"; + close; +} + + + +// ------------------------------------------------------------------ +// イベントマップ用の設定 +// ------------------------------------------------------------------ +// (全てコメントアウトしてます) + +// ----------セーブ禁止のサンプル--------- +// このマップでログアウトすると、必ず プロンテラ の座標(156,190)に +// セーブされる +//prontera.gat mapflag nosave prontera.gat,156,190 + +// ----------メモ禁止のサンプル--------- +// このマップではメモがとれない +//prontera.gat mapflag nomemo dummy + +// ----------テレポ禁止のサンプル--------- +// このマップでは蝿、蝶、テレポ、ポタが使えない +// 注意:スクリプトのwarpの"Random","SavePoint"が無効になります +//prontera.gat mapflag noteleport dummy diff --git a/npc/sample/npc_test_func.txt b/npc/sample/npc_test_func.txt new file mode 100644 index 000000000..a484ccb48 --- /dev/null +++ b/npc/sample/npc_test_func.txt @@ -0,0 +1,27 @@ + +// 値を返さない関数 +function script func001 { + mes "ユーザー定義関数"; + next; + return; // 省略できない +} + +// 値を返す関数 +function script func002 { + return "ユーザー定義関数2"; +} + +// 関数の呼び出しとサブルーティンのテスト +prontera.gat,168,189,1 script 関数テスト 112,{ + callfunc "func001"; // ユーザー定義関数は文字列で指定 + mes callfunc("func002"); + next; + callsub L_SUB001; // サブルーティンはラベルを直接指定 + close; + end; + +L_SUB001: + mes "サブルーティン"; + return; // 省略できない +} + diff --git a/npc/sample/npc_test_npctimer.txt b/npc/sample/npc_test_npctimer.txt new file mode 100644 index 000000000..d35c7d4c3 --- /dev/null +++ b/npc/sample/npc_test_npctimer.txt @@ -0,0 +1,33 @@ + +prontera.gat,156,183,0 script NPCtimerテスト::npctimerX0000 116,{ + mes "タイマー値" + getnpctimer(0); + mes "タイマー状態" + getnpctimer(1,"npctimerX0000"); + mes "イベント個数" + getnpctimer(2); + menu "初期化",L_INIT,"停止",L_STOP,"再開",L_START,"設定",L_SET; + close; +L_INIT: + initnpctimer; + close; +L_STOP: + stopnpctimer; + close; +L_START: + startnpctimer; + close; +L_SET: + input @temp; + setnpctimer @temp; + close; + +OnTimer1000: + announce "1秒経過",0; + end; + +OnTimer5000: + announce "5秒経過",0; + end; + +OnTimer10000: + announce "10秒経過",0; + end; +} diff --git a/npc/sample/npc_test_skill.txt b/npc/sample/npc_test_skill.txt new file mode 100644 index 000000000..94b2195bb --- /dev/null +++ b/npc/sample/npc_test_skill.txt @@ -0,0 +1,19 @@ +// スキル所得テスト + +// skill スキルID ,スキルLV [,フラグ]; +// フラグは省略可能、省略時は1。 +// フラグ=1でカードなどの一時的な所得、 +// フラグ=2でクエストなどによる恒久的な所得(skill_tree.txtに依存) + +prontera.gat,157,182,0 script スキル所得テスト 116,{ + mes "スキル所得テスト"; + menu "応急処置所得",L_GETSKILL142,"死んだ振り所得",L_GETSKILL143,"やめる",L_YAME; +L_GETSKILL142: + skill 142,1,0; + close; +L_GETSKILL143: + skill 143,1,0; + close; +L_YAME: + close; +} diff --git a/npc/sample/npc_test_str.txt b/npc/sample/npc_test_str.txt new file mode 100644 index 000000000..77591a210 --- /dev/null +++ b/npc/sample/npc_test_str.txt @@ -0,0 +1,17 @@ +// 文字列変数のテスト +prontera.gat,164,188,1 script 文字列テスト 112,{ + set @str$, "文字列1"; + mes "文字列変数:" + @str$ ; + mes "確認:" + @str$ + " ...OK?"; + next; + mes "比較〜eqOK:" + (@str$=="文字列1"); + mes "比較〜eqNG:" + (@str$=="文字列"); + mes "比較〜neOK:" + (@str$!="00000"); + mes "比較〜neNG:" + (@str$!="文字列1"); + mes "比較〜gtOK:" + ("aab">"aaa"); + mes "比較〜ltNG:" + ("aab"<"aaa"); + next; + input @str2$; + mes "入力データは " + @str2$ + " です。"; + close; +} diff --git a/npc/sample/npc_testchkoption.txt b/npc/sample/npc_testchkoption.txt new file mode 100644 index 000000000..07c18bf59 --- /dev/null +++ b/npc/sample/npc_testchkoption.txt @@ -0,0 +1,15 @@ +prontera.gat,156,89,6 script test_chkoption 117,{ + mes "Please enter a value of type!"; + input @value; + if(checkoption(@value) == 1) goto L1; + if(checkoption(@value) == 0) goto L0; + end; + L1: + mes "True!"; + close; + end; + L0: + mes "False!"; + close; + end; +}
\ No newline at end of file diff --git a/npc/sample/npc_time_sample.txt b/npc/sample/npc_time_sample.txt new file mode 100644 index 000000000..ec620ecd9 --- /dev/null +++ b/npc/sample/npc_time_sample.txt @@ -0,0 +1,19 @@ + +prontera.gat,157,181,6 script Time Sample 105,{ + mes "[Time Sample]"; + mes "System Tick : " + gettimetick(0); + mes " Time Tick : " + gettimetick(1); + mes " GetTime(0) : " + gettime(0); + mes " GetTime(1) : " + gettime(1) + " (Sec)"; + mes " GetTime(2) : " + gettime(2) + " (Min)"; + mes " GetTime(3) : " + gettime(3) + " (Hour)"; + mes " GetTime(4) : " + gettime(4) + " (WeekDay)"; + mes " GetTime(5) : " + gettime(5) + " (MonthDay)"; + mes " GetTime(6) : " + gettime(6) + " (Month)"; + mes " GetTime(7) : " + gettime(7) + " (Year)"; + mes " GetTimeStr : " + gettimestr("%Y-%m/%d %H:%M:%S",19); + close; + end; +} + + |