Jump to content
  • 0

Tolong Koreksi Script saya


monyet

Question


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

prontera,158,180,4    script    VRO Asisten    100,{
    // Inisialisasi
    setarray .price[0], 10, 20, 30; // Array harga yang mungkin
    mes "[VRO Asisten]";
    mes "Halo! Apakah kamu ingin menjual Jellopy padaku? Saya membayar harga yang berbeda tergantung waktu!";
    next;

    // Menetapkan harga acak dari array .price
    set .selected_price, .price[rand(getarraysize(.price))];

    // Tampilkan harga yang saat ini ditawarkan
    mes "Saat ini, saya akan membeli Jellopy seharga "+.selected_price+" Zeny per buah.";
    next;

    // Cek apakah pemain memiliki Jellopy
    if (countitem(909) > 0) {
        mes "Berapa banyak Jellopy yang ingin kamu jual?";
        input .amount;
        if (.amount > 0 && .amount <= countitem(909)) {
            // Hitung total zeny yang akan diterima pemain
            .total_price = .amount * .selected_price;
            mes "Kamu akan mendapatkan "+.total_price+" Zeny untuk "+.amount+" Jellopy.";
            next;
            if (select("Jual:Ya,Tidak") == 1) {
                // Konfirmasi penjualan dan transaksi
                delitem 909, .amount; // Hapus Jellopy dari inventory pemain
                zeny += .total_price; // Berikan Zeny kepada pemain
                mes "Terima kasih telah menjual Jellopy-mu!";
            } else {
                mes "Mungkin lain waktu!";
            }
        } else {
            mes "Mohon masukkan jumlah yang valid!";
        }
    } else {
        mes "Tampaknya kamu tidak memiliki Jellopy!";
    }
    close;
}

1. Disini saya pengen NPC akan merubah harga setiap 15 menit sekali sesuai waktu server

2. Di mapserv consol have error npc_event: event not found [VRO asisten: :OnTimerUpdatePrice]  Maksudnya ini apa ya dan apa disini maksudnya kita harus membuat npc_event kah ? atau bagaimana ?

Atas perhatianya terimakasih

Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.01
  • Content Count:  39
  • Reputation:   30
  • Joined:  06/08/23
  • Last Seen:  

On 4/16/2024 at 2:16 AM, monyet said:

prontera,158,180,4    script    VRO Asisten    100,{
    // Inisialisasi
    setarray .price[0], 10, 20, 30; // Array harga yang mungkin
    mes "[VRO Asisten]";
    mes "Halo! Apakah kamu ingin menjual Jellopy padaku? Saya membayar harga yang berbeda tergantung waktu!";
    next;

    // Menetapkan harga acak dari array .price
    set .selected_price, .price[rand(getarraysize(.price))];

    // Tampilkan harga yang saat ini ditawarkan
    mes "Saat ini, saya akan membeli Jellopy seharga "+.selected_price+" Zeny per buah.";
    next;

    // Cek apakah pemain memiliki Jellopy
    if (countitem(909) > 0) {
        mes "Berapa banyak Jellopy yang ingin kamu jual?";
        input .amount;
        if (.amount > 0 && .amount <= countitem(909)) {
            // Hitung total zeny yang akan diterima pemain
            .total_price = .amount * .selected_price;
            mes "Kamu akan mendapatkan "+.total_price+" Zeny untuk "+.amount+" Jellopy.";
            next;
            if (select("Jual:Ya,Tidak") == 1) {
                // Konfirmasi penjualan dan transaksi
                delitem 909, .amount; // Hapus Jellopy dari inventory pemain
                zeny += .total_price; // Berikan Zeny kepada pemain
                mes "Terima kasih telah menjual Jellopy-mu!";
            } else {
                mes "Mungkin lain waktu!";
            }
        } else {
            mes "Mohon masukkan jumlah yang valid!";
        }
    } else {
        mes "Tampaknya kamu tidak memiliki Jellopy!";
    }
    close;
}

1. Disini saya pengen NPC akan merubah harga setiap 15 menit sekali sesuai waktu server

2. Di mapserv consol have error npc_event: event not found [VRO asisten: :OnTimerUpdatePrice]  Maksudnya ini apa ya dan apa disini maksudnya kita harus membuat npc_event kah ? atau bagaimana ?

Atas perhatianya terimakasih

gunakan code box formating untuk code agar lebih rapih dan text formating code tidak berubah, script engine pada emulator sensitive untuk tab dan space pada saat parsing code.
saya telah meninggalkan beberapa catatan pada script silahkan di telaah.

prontera,158,180,4    script    VRO Asisten    100,{
	mes "[VRO Asisten]";
	mes "Halo! Apakah kamu ingin menjual Jellopy padaku? Saya membayar harga yang berbeda tergantung waktu!";
	next;
	// Tampilkan harga yang saat ini ditawarkan
	mes "Saat ini, saya akan membeli Jellopy seharga "+.selected_price+" Zeny per buah.";
	next;
	// Note 1:
	// Kalau bisa jangan terlalu banyak membuat nesting if else
	// buat script mudah di baca dan pahami dengan sekilas agar mudah dalam debuging.
	// Cek apakah pemain memiliki Jellopy
	if (countitem(909) < 1)
	{
		mes "Tampaknya kamu tidak memiliki Jellopy!";
		close;
	}
	mes "Berapa banyak Jellopy yang ingin kamu jual?";
	// Note 2:
	// gunakan variable type yg tepat
	// untuk user input seperti ini gunakan temporary script variable type ".@"
	// Note 3:
	// ".selected_price" dapat berubah ketika script dalam keadaan "suspended / pause" state
	// script command yg dapat menyebabkan suspended / pause state,
	// sleep, sleep2, next, progressbar, menu, select.
	// sebaiknya preserve value ".selected_price" pada saat user akses time dan bandingkan nanti
	// apakah value ".selected_price" berubah atau tidak (validasi).
	.@selected_price = .selected_price;
	input .@amount;
	// *Note 1, prevent nesting if else
	if (.@amount < 0 || .@amount > countitem(909))
	{
		mes "Mohon masukkan jumlah yang valid!";
		close;
	}
	// *Note 3 validasi value ".selected_price"
	if (.@selected_price != .selected_price)
	{
		mes "Harga telah berubah, silahkan coba lagi!";
		close;
	}
	// Hitung total zeny yang akan diterima pemain
	// *Note 2, use apt variable type.
	.@total_price = .@amount * .selected_price;
	mes "Kamu akan mendapatkan "+ .@total_price +" Zeny untuk "+ .@amount +" Jellopy.";
	next;
	// *Note 3 validasi value ".selected_price"
	if (.@selected_price != .selected_price)
	{
		mes "Harga telah berubah, silahkan coba lagi!";
		close;
	}
	.@s = select("Jual:Ya,Tidak");
	if (.@s == 1)
	{
		// *Note 3 validasi value ".selected_price"
		if (.@selected_price != .selected_price)
		{
			mes "Harga telah berubah, silahkan coba lagi!";
			close;
		}
		// Konfirmasi penjualan dan transaksi
		delitem 909, .@amount; // Hapus Jellopy dari inventory pemain
		Zeny += .@total_price; // Berikan Zeny kepada pemain
		mes "Terima kasih telah menjual Jellopy-mu!";
	}
	else
	{
		mes "Mungkin lain waktu!";
	}
    close;

OnInit:
    // Inisialisasi
    setarray .price[0], 10, 20, 30; // Array harga yang mungkin

OnTimer900000: // ubah harga setiap 15 menit.
	stopnpctimer();
    // Menetapkan harga acak dari array .price
    set .selected_price, .price[rand(getarraysize(.price))];
	
	// use initnpctimer() script command disini untuk membuat loop.
	initnpctimer();
	end;
}

 

  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

apa yang anda perbaiki saya sangat terlolong dan sangat berterimakasih, lalu disini saya menambhakn beberapa script untuk broadcaster global setiap perubahan harga item dengan script sebagai brikut :

 

prontera,158,180,4	script	Pedagang Grup Eden	100,{
	mes "[VRO Asisten]";
	mes "Halo! Apakah kamu ingin menjual Jellopy padaku? Saya membayar harga yang berbeda tergantung waktu!";
	next;
	// Tampilkan harga yang saat ini ditawarkan
	mes "Saat ini, saya akan membeli Jellopy seharga "+.selected_price+" Zeny per buah.";
	announce "Pedagang Grup Eden: Harga Jellopy saat ini adalah " + .selected_price + " Zeny per buah!", bc_all; // Mengumumkan harga kepada semua pemain
	next;
	if (countitem(909) < 1) {
		mes "Tampaknya kamu tidak memiliki Jellopy!";
		close;
	}
	mes "Berapa banyak Jellopy yang ingin kamu jual?";
	.@selected_price = .selected_price; // Preserve price during user interaction
	input .@amount;
	if (.@amount <= 0 || .@amount > countitem(909)) {
		mes "Mohon masukkan jumlah yang valid!";
		close;
	}
	.@total_price = .@amount * .selected_price;
	mes "Kamu akan mendapatkan "+ .@total_price +" Zeny untuk "+ .@amount +" Jellopy.";
	next;
	.@s = select("Jual:Ya,Tidak");
	if (.@s == 1) {
		if (.@selected_price != .selected_price) {
			mes "Harga telah berubah, silahkan coba lagi!";
			close;
		}
		delitem 909, .@amount; // Hapus Jellopy dari inventory pemain
		Zeny += .@total_price; // Berikan Zeny kepada pemain
		mes "Terima kasih telah menjual Jellopy-mu!";
	} else {
		mes "Mungkin lain waktu!";
	}
	close;

OnInit:
	.selected_price = rand(1, 500); // Inisialisasi harga secara acak antara 1 dan 500 Zeny
	announce "Pedagang Grup Eden: Harga Jellopy saat ini adalah " + .selected_price + " Zeny per buah!", bc_all; // Mengumumkan harga awal kepada semua pemain
	initnpctimer();
	end;

OnTimer900000: // Perbarui harga setiap 15 menit.
	stopnpctimer();
	.selected_price = rand(1, 500);
	announce "Pedagang Grup Eden: Harga Jellopy telah berubah! Harga baru adalah " + .selected_price + " Zeny per buah!", bc_all;
	initnpctimer();
	end;
}

tapi disini setelah saya coba, setiap saya klick npc akan broadcast harganya, dan saya ingin disini walau player berinteraksi dengan NPC tidak akan broadcast berapa harga saat ini kecuali saat harga berubah saja, tolong bantu saya dimana salahnya.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  1211
  • Reputation:   163
  • Joined:  06/12/12
  • Last Seen:  

9 hours ago, monyet said:

apa yang anda perbaiki saya sangat terlolong dan sangat berterimakasih, lalu disini saya menambhakn beberapa script untuk broadcaster global setiap perubahan harga item dengan script sebagai brikut :

 

prontera,158,180,4	script	Pedagang Grup Eden	100,{
	mes "[VRO Asisten]";
	mes "Halo! Apakah kamu ingin menjual Jellopy padaku? Saya membayar harga yang berbeda tergantung waktu!";
	next;
	// Tampilkan harga yang saat ini ditawarkan
	mes "Saat ini, saya akan membeli Jellopy seharga "+.selected_price+" Zeny per buah.";
	announce "Pedagang Grup Eden: Harga Jellopy saat ini adalah " + .selected_price + " Zeny per buah!", bc_all; // Mengumumkan harga kepada semua pemain
	next;
	if (countitem(909) < 1) {
		mes "Tampaknya kamu tidak memiliki Jellopy!";
		close;
	}
	mes "Berapa banyak Jellopy yang ingin kamu jual?";
	.@selected_price = .selected_price; // Preserve price during user interaction
	input .@amount;
	if (.@amount <= 0 || .@amount > countitem(909)) {
		mes "Mohon masukkan jumlah yang valid!";
		close;
	}
	.@total_price = .@amount * .selected_price;
	mes "Kamu akan mendapatkan "+ .@total_price +" Zeny untuk "+ .@amount +" Jellopy.";
	next;
	.@s = select("Jual:Ya,Tidak");
	if (.@s == 1) {
		if (.@selected_price != .selected_price) {
			mes "Harga telah berubah, silahkan coba lagi!";
			close;
		}
		delitem 909, .@amount; // Hapus Jellopy dari inventory pemain
		Zeny += .@total_price; // Berikan Zeny kepada pemain
		mes "Terima kasih telah menjual Jellopy-mu!";
	} else {
		mes "Mungkin lain waktu!";
	}
	close;

OnInit:
	.selected_price = rand(1, 500); // Inisialisasi harga secara acak antara 1 dan 500 Zeny
	announce "Pedagang Grup Eden: Harga Jellopy saat ini adalah " + .selected_price + " Zeny per buah!", bc_all; // Mengumumkan harga awal kepada semua pemain
	initnpctimer();
	end;

OnTimer900000: // Perbarui harga setiap 15 menit.
	stopnpctimer();
	.selected_price = rand(1, 500);
	announce "Pedagang Grup Eden: Harga Jellopy telah berubah! Harga baru adalah " + .selected_price + " Zeny per buah!", bc_all;
	initnpctimer();
	end;
}

tapi disini setelah saya coba, setiap saya klick npc akan broadcast harganya, dan saya ingin disini walau player berinteraksi dengan NPC tidak akan broadcast berapa harga saat ini kecuali saat harga berubah saja, tolong bantu saya dimana salahnya.

Disable line no 7 ini saya bantu update scriptnya

prontera,158,180,4	script	Pedagang Grup Eden	100,{
	mes "[VRO Asisten]";
	mes "Halo! Apakah kamu ingin menjual Jellopy padaku? Saya membayar harga yang berbeda tergantung waktu!";
	next;
	// Tampilkan harga yang saat ini ditawarkan
	mes "Saat ini, saya akan membeli Jellopy seharga "+.selected_price+" Zeny per buah.";
	//announce "Pedagang Grup Eden: Harga Jellopy saat ini adalah " + .selected_price + " Zeny per buah!", bc_all; // Mengumumkan harga kepada semua pemain
	next;
	if (countitem(909) < 1) {
		mes "Tampaknya kamu tidak memiliki Jellopy!";
		close;
	}
	mes "Berapa banyak Jellopy yang ingin kamu jual?";
	.@selected_price = .selected_price; // Preserve price during user interaction
	input .@amount;
	if (.@amount <= 0 || .@amount > countitem(909)) {
		mes "Mohon masukkan jumlah yang valid!";
		close;
	}
	.@total_price = .@amount * .selected_price;
	mes "Kamu akan mendapatkan "+ .@total_price +" Zeny untuk "+ .@amount +" Jellopy.";
	next;
	.@s = select("Jual:Ya,Tidak");
	if (.@s == 1) {
		if (.@selected_price != .selected_price) {
			mes "Harga telah berubah, silahkan coba lagi!";
			close;
		}
		delitem 909, .@amount; // Hapus Jellopy dari inventory pemain
		Zeny += .@total_price; // Berikan Zeny kepada pemain
		mes "Terima kasih telah menjual Jellopy-mu!";
	} else {
		mes "Mungkin lain waktu!";
	}
	close;

OnInit:
	.selected_price = rand(1, 500); // Inisialisasi harga secara acak antara 1 dan 500 Zeny
	announce "Pedagang Grup Eden: Harga Jellopy saat ini adalah " + .selected_price + " Zeny per buah!", bc_all; // Mengumumkan harga awal kepada semua pemain
	initnpctimer();
	end;

OnTimer900000: // Perbarui harga setiap 15 menit.
	stopnpctimer();
	.selected_price = rand(1, 500);
	announce "Pedagang Grup Eden: Harga Jellopy telah berubah! Harga baru adalah " + .selected_price + " Zeny per buah!", bc_all;
	initnpctimer();
	end;
}

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

Posted (edited)

Terimakasih banyak @hendra814 udah sangat terbantu 

Apakah mungkin jika npcnya saya cloning dan npc yang lain bisa jual item yagn berbeda ?

Edited by monyet
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  1211
  • Reputation:   163
  • Joined:  06/12/12
  • Last Seen:  

50 minutes ago, monyet said:

Terimakasih banyak @hendra814 udah sangat terbantu 

Apakah mungkin jika npcnya saya cloning dan npc yang lain bisa jual item yagn berbeda ?

Dear @monyet

setau saya tidak bisa, kalau mau pakai item lain harus dibuat ulang dan diganti item ID nya.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

5 minutes ago, hendra814 said:

Dear @monyet

setau saya tidak bisa, kalau mau pakai item lain harus dibuat ulang dan diganti item ID nya.

ok deh kalo begitu, sekarang lagi nyoba script selanjutnya 

NPC Embiroc Factory // namanya XD
- saat berinteraksi NPC , NPC akan meminta nama perusahaan
- Npc akan meminta barang apa yang hendak di produksi ( sesuai dengan list item yang tersedia )
- Deposit zeni untuk membayar gaji Karyawan ( karyawan disini adalah player lain )
- Bisa melihat list Perusahaan berapa gaji yang di berikan ( untuk pekerja )
- Item hasil produksi akan di kirim lewat E-mail
- Karyawan mendapatkan gaji setelah dia selesai main mini game ( rencana menggunakan slot machine )
- Item hasil produksi itu random 
- Perusahaan yang bisa di daftarkan 1 player 1 aja, trus untuk ke seluruhan hanya ada 30 slot
- pajak penghasilan tiap minggu berubah max 11 persen
- jumblah hasil prokduksi random
- Barang hasil produksi bisa di jual ke player lain, npc , atau npc Eden Group 

rencananya si gitu ternyata sulit juga buatnya tapi tetap gw lakuin, dan nanti mohon bantuanya dalam koreksi ^^ Hendra dan Harvin

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  1211
  • Reputation:   163
  • Joined:  06/12/12
  • Last Seen:  

48 minutes ago, monyet said:

ok deh kalo begitu, sekarang lagi nyoba script selanjutnya 

NPC Embiroc Factory // namanya XD
- saat berinteraksi NPC , NPC akan meminta nama perusahaan
- Npc akan meminta barang apa yang hendak di produksi ( sesuai dengan list item yang tersedia )
- Deposit zeni untuk membayar gaji Karyawan ( karyawan disini adalah player lain )
- Bisa melihat list Perusahaan berapa gaji yang di berikan ( untuk pekerja )
- Item hasil produksi akan di kirim lewat E-mail
- Karyawan mendapatkan gaji setelah dia selesai main mini game ( rencana menggunakan slot machine )
- Item hasil produksi itu random 
- Perusahaan yang bisa di daftarkan 1 player 1 aja, trus untuk ke seluruhan hanya ada 30 slot
- pajak penghasilan tiap minggu berubah max 11 persen
- jumblah hasil prokduksi random
- Barang hasil produksi bisa di jual ke player lain, npc , atau npc Eden Group 

rencananya si gitu ternyata sulit juga buatnya tapi tetap gw lakuin, dan nanti mohon bantuanya dalam koreksi ^^ Hendra dan Harvin

ini buat script untuk player bisa buat quest untuk dikerjakan player lain?

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

Posted (edited)
28 minutes ago, hendra814 said:

ini buat script untuk player bisa buat quest untuk dikerjakan player lain?

bener jadi player nanti melihat kan dari semua perusahaan terdaftar mana yang paling banyak memberikan gaji , nah player sebagai pekerja dia akan memainkan mini game contohnya roulet atau tiktakto ataupun yang lain untuk minigamenya. Hingga nanti uang deposit yang di masukan oleh player selaku owner perusahaan habis uangnya dan ia wajib mengisi kembali ke npc tersebut

Edited by monyet
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  1211
  • Reputation:   163
  • Joined:  06/12/12
  • Last Seen:  

44 minutes ago, monyet said:

bener jadi player nanti melihat kan dari semua perusahaan terdaftar mana yang paling banyak memberikan gaji , nah player sebagai pekerja dia akan memainkan mini game contohnya roulet atau tiktakto ataupun yang lain untuk minigamenya. Hingga nanti uang deposit yang di masukan oleh player selaku owner perusahaan habis uangnya dan ia wajib mengisi kembali ke npc tersebut

mungkin bisa contek script ini 

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

36 minutes ago, hendra814 said:

mungkin bisa contek script ini 

aku akan mencobanya XD

 

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.01
  • Content Count:  39
  • Reputation:   30
  • Joined:  06/08/23
  • Last Seen:  

11 hours ago, monyet said:

Terimakasih banyak @hendra814 udah sangat terbantu 

Apakah mungkin jika npcnya saya cloning dan npc yang lain bisa jual item yagn berbeda ?

 

10 hours ago, hendra814 said:

Dear @monyet

setau saya tidak bisa, kalau mau pakai item lain harus dibuat ulang dan diganti item ID nya.

 

ini bisa saja di lakukan dengan advanced script technique, anda bisa ambil referensi dari euphy script (quest shop) yg menggunakan dynamic variable setter dan getter dengan script command setd dan getd.
memang agak sedikit sulit, jika anda ingin mencobanya bisa saja.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

13 hours ago, Harvin said:

 

 

ini bisa saja di lakukan dengan advanced script technique, anda bisa ambil referensi dari euphy script (quest shop) yg menggunakan dynamic variable setter dan getter dengan script command setd dan getd.
memang agak sedikit sulit, jika anda ingin mencobanya bisa saja.

saya rasa, saya mencoba yang dasar dulu saja >.< dan pelan pelan step by step 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

Posted (edited)

bagaimana script saya yang ini apakah bisa di buat lebih sederhana lagi ?

 

Quote

prontera,152,180,5    script    NamaNPC    757,{
    mes "Halo, Aku adalah NPC contoh.";
    mes "Apa yang ingin kamu buat?";
    switch(select("Grape Juice Herbal Tea:Honey Grape Juice:Autumn Red Tea:Honey Herbal Tea:Herb Marinade Beef:Green Salad:Steamed Bat Wing in Pumpkin:Spicy Fried Bao")) {
        case 1:
            mes "Untuk membuat Grape Juice Herbal Tea, kamu membutuhkan: 2 Red Potion dan 3 Grape.";
            if (countitem(501) >= 2 && countitem(514) >= 3) {
                delitem(501, 2);
                delitem(514, 3);
                if (rand(100) < 80) {
                    getitem(12046, 1);
                    mes "Berhasil membuat Grape Juice Herbal Tea!";
                } else {
                    mes "Pembuatan Grape Juice Herbal Tea gagal!";
                }
            } else mes "Kamu tidak memiliki bahan yang cukup.";
            break;
        case 2:
            mes "Untuk membuat Honey Grape Juice, kamu membutuhkan: 1 Red Potion, 2 Grape, dan 1 Honey.";
            if (countitem(501) >= 1 && countitem(514) >= 2 && countitem(518) >= 1) {
                delitem(501, 1);
                delitem(514, 2);
                delitem(518, 1);
                if (rand(100) < 80) {
                    getitem(12061, 1);
                    mes "Berhasil membuat Honey Grape Juice!";
                } else {
                    mes "Pembuatan Honey Grape Juice gagal!";
                }
            } else mes "Kamu tidak memiliki bahan yang cukup.";
            break;
        case 3:
            mes "Untuk membuat Autumn Red Tea, kamu membutuhkan: 10 Red Herb, 10 Yellow Herb, dan 5 Blue Herb.";
            if (countitem(507) >= 10 && countitem(508) >= 10 && countitem(510) >= 5) {
                delitem(507, 10);
                delitem(508, 10);
                delitem(510, 5);
                if (rand(100) < 80) {
                    getitem(12047, 1);
                    mes "Berhasil membuat Autumn Red Tea!";
                } else {
                    mes "Pembuatan Autumn Red Tea gagal!";
                }
            } else mes "Kamu tidak memiliki bahan yang cukup.";
            break;
        case 4:
            mes "Untuk membuat Honey Herbal Tea, kamu membutuhkan: 10 White Herb, 2 Honey, dan 1 Yellow Spice.";
            if (countitem(509) >= 10 && countitem(518) >= 2 && countitem(7452) >= 1) {
                delitem(509, 10);
                delitem(518, 2);
                delitem(7452, 1);
                if (rand(100) < 80) {
                    getitem(12048, 1);
                    mes "Berhasil membuat Honey Herbal Tea!";
                } else {
                    mes "Pembuatan Honey Herbal Tea gagal!";
                }
            } else mes "Kamu tidak memiliki bahan yang cukup.";
            break;
      // jika setiap menambah item baru saya akan menambah lagi maksudnya mengulang ulang script lagi apa ada cara lain kah ?
    }
    close;
}
 

 

Edited by monyet
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  139
  • Reputation:   55
  • Joined:  06/02/12
  • Last Seen:  

11 hours ago, monyet said:

bagaimana script saya yang ini apakah bisa di buat lebih sederhana lagi ?

 

 

Halo

//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.6c
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//===== Additional Comments: =================================
//= 1.0 Initial script.
//= 1.2 Added category support.
//= 1.3 More options and fixes.
//= 1.4 Added debug settings.
//= 1.5 Replaced categories with shop IDs.
//= 1.6 Added support for purchasing stackables.
//= 1.6a Added support for previewing costumes and robes.
//= 1.6b Added 'disable_items' command.
//= 1.6c Replaced function 'A_An' with "F_InsertArticle".
//============================================================

// Shop NPCs -- supplying no argument displays entire menu.
//  callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//  ADD YOUR NPC HERE
//============================================================
prontera,152,180,5	script	NamaNPC	4_F_JPN2,{ callfunc "qshop",1; }

//============================================================


// Script Core - DO NOT DUPLICATE THIS NPC !!!!!!!!!!!!!
//============================================================
-	script	quest_shop	-1,{
function Add; function Chk; function Slot;
OnInit:
    freeloop(1);

// -----------------------------------------------------------
//  Basic shop settings.
// -----------------------------------------------------------

    set .ShowSlot,1;    // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
    set .ShowID,0;      // Show item IDs? (1: yes / 0: no)
    set .ShowZeny,0;    // Show Zeny cost, if any? (1: yes / 0: no)
    set .MaxStack,100;  // Max number of quest items purchased at one time.
    .SkipShop = true;	// Ignore shop window
    .Chance = 80;		// Success chance

// -----------------------------------------------------------
//  Points variable -- optional quest requirement.
//  setarray .Points$[0],"<variable name>","<display name>";
// -----------------------------------------------------------

    setarray .Points$[0],
        "#CASHPOINTS", "Cash Points";


//=====================================================================================
// ------------------- ADD YOUR SHOPS NAME AND ITEMS SHOPS STARTING HERE --------------
//=====================================================================================

// -----------------------------------------------------------
//  Shop IDs -- to add shops, copy dummy data at bottom of file.
//  setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
// -----------------------------------------------------------

    setarray .Shops$[1],
        "Food",    // Shop Named 1
        "Other";        // Shop Named 2

// -----------------------------------------------------------
//  Quest items -- do NOT use a reward item more than once!
//  Add(<shop ID>,<reward ID>,<reward amount>,
//      <Zeny cost>,<point cost>,
//      <required item ID>,<required item amount>{,...});
// -----------------------------------------------------------

// Shop 1
    Add(1,12046,1,0,0,501,2,514,3);
    Add(1,12061,1,0,0,501,1,514,2,518,1);
    Add(1,12047,1,0,0,507,10,508,10,510,5);
    Add(1,12048,1,0,0,509,10,518,2,7452,1);
    Add(1,12044,1,0,0,507,3,508,2,511,3,568,1,517,5,7453,1);
    Add(1,12065,1,0,0,520,2,521,3,7100,10,7198,6,7453,1,7452,1);
    Add(1,12060,1,0,0,7006,20,520,10,507,10,1062,20,7482,1);
    Add(1,12055,1,0,0,553,20,508,10,511,20,7455,1,7456,1);

// -----------------------------------------------------------

//=====================================================================================
// ------------------- YOUR SHOPS AND ITEMS SHOPS HAVE BEEN ADDED ---------------------
//=====================================================================================

    freeloop(0);
    set .menu$,"";
    for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
        set .menu$, .menu$+.Shops$[.@i]+":";
        npcshopdelitem "qshop"+.@i,909;
    }
    end;

OnMenu:
    set .@size, getarraysize(@i);
    if (!.@size) set @shop_index, select(.menu$);
    else if (.@size == 1) set @shop_index, @i[0];
    else {
        for(set .@j,0; .@j<.@size; set .@j,.@j+1)
            set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
        set @shop_index, @i[select(.@menu$)-1];
    }
    deletearray @i[0],getarraysize(@i);
    if (.Shops$[@shop_index] == "") {
        message strcharinfo(0),"An error has occurred.";
        end;
    }
    if (!.SkipShop) {
    	dispbottom "Select one item at a time.";
    	callshop "qshop"+@shop_index,1;
    	npcshopattach "qshop"+@shop_index;
    	end;
    }
    mes "[NamaNPC]";
    mes "Halo, Aku adalah NPC contoh.";
    mes "Apa yang ingin kamu buat?";
	//for (.@i = 0;.@i < getarraysize(getd(".q_list_"+@shop_index));.@i++)
	//	mes "- " + mesitemlink(getd(".q_list_"+@shop_index+"["+ .@i + "]"));
	.@menu$ = "";
	for (.@i = 0;.@i < getarraysize(getd(".q_list_"+@shop_index));.@i++)
		.@menu$ += getitemname(getd(".q_list_"+@shop_index+"["+ .@i + "]")) + ":";
	.@s = select(.@menu$) - 1;
   	setarray .@q[0],getd(".q_list_"+@shop_index+"["+ .@s + "]"),1;
   	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
   	clear;

OnBuyItem:
    // .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
    if (!.SkipShop) {
    	setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
    	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
    }
    mes "[NamaNPC]";
    set .@q[2],.@q[1]*.@q[3];
    if (!.@q[2] || .@q[2] > 30000) {
        mes "You can't purchase that many "+getitemname(.@q[0])+".";
        close;
    }
    mes "Untuk membuat";
    //mes "^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
    mes "^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"") + mesitemlink(.@q[0]) + "^000000, kamu membutuhkan:";
    disable_items;
    if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
    if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
    if (.@q[6]) {
    	for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2) {
        	//mes (.@q[.@i+2]?"":"dan ") + Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000" + (.@q[.@i+2]?",":".");
        	mes (.@q[.@i+2]?"":"dan ") + Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+mesitemlink(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000" + (.@q[.@i+2]?",":".");
		}
	}
    setarray @qe[1], getiteminfo(.@q[0], ITEMINFO_LOCATIONS), getiteminfo(.@q[0], ITEMINFO_VIEW);
    if (@qe[2] > 0 && ((@qe[1] & EQP_HEAD_LOW) || (@qe[1] & EQP_HEAD_TOP) || (@qe[1] & EQP_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_TOP) || (@qe[1] & EQP_COSTUME_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_LOW) || (@qe[1] & EQP_GARMENT) || (@qe[1] & EQP_COSTUME_GARMENT)))
        set .@preview,1;
    addtimer 1000, strnpcinfo(0)+"::OnEnd";
    while(1) {
        switch(select("Membuat ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[7])?" ~ Preview...":"")+":^777777Membatalkan^000000")) {
        case 1:
        	mes "[NamaNPC]";
            if (@qe[0]) {
                mes "Kamu tidak memiliki bahan yang cukup.";
                close;
            }
            if (!checkweight(.@q[0],.@q[2])) {
                mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0], ITEMINFO_WEIGHT))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
                close;
            }
            if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
            if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
            if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
                delitem .@q[.@i],.@q[.@i+1]*.@q[1];
            if (rand(100) >= .Chance) {
            	mes "Pembuatan " + getitemname(.@q[0]) + " gagal!";
            	close;
            }
            getitem .@q[0],.@q[2];
            mes "Berhasil membuat " + getitemname(.@q[0]) + "!";
            close;
        case 2:
            setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
            if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
            else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
            else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
            else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
            break;
        case 3:
            close;
        }
    }

OnEnd:
    if (@qe[7]) {
        changelook LOOK_HEAD_BOTTOM, @qe[3];
        changelook LOOK_HEAD_TOP, @qe[4];
        changelook LOOK_HEAD_MID, @qe[5];
        changelook LOOK_ROBE, @qe[6];
    }
    deletearray @qe[0],8;
    end;

function Add {
    if (getitemname(getarg(1)) == "null") {
        debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
        return;
    }
    setarray .@j[0],getarg(2),getarg(3),getarg(4);
    for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
        if (getitemname(getarg(.@i)) == "null") {
            debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
            return;
        } else
            setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
    }
    copyarray getd(".q_"+getarg(0)+"_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
    npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
    .@ii = getarraysize(getd(".q_list_"+getarg(0)));
    setarray getd(".q_list_"+getarg(0)+"["+.@ii+"]"),getarg(1);
    return;
}

function Chk {
    if (getarg(0) < getarg(1)) {
        set @qe[0],1;
        return "^FF0000";
    } else
        return "^00FF00";
}

function Slot {
    set .@s$,getitemname(getarg(0));
    switch(.ShowSlot) {
        case 1: if (!getitemslots(getarg(0))) return .@s$;
        case 2: if (getiteminfo(getarg(0), ITEMINFO_TYPE) == 4 || getiteminfo(getarg(0), ITEMINFO_TYPE) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
        default: return .@s$;
    }
}
}

function	script	qshop	{
    deletearray @i[0],getarraysize(@i);
    for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
        set @i[.@i],getarg(.@i);
    doevent "quest_shop::OnMenu";
    end;
}


// Dummy shop data -- copy as needed.
//============================================================
-	shop	qshop1	-1,909:-1
-	shop	qshop2	-1,909:-1

Temukan bagian ini untuk menambahkan lebih banyak item:

    Add(1,12046,1,0,0,501,2,514,3);
    Add(1,12061,1,0,0,501,1,514,2,518,1);
    Add(1,12047,1,0,0,507,10,508,10,510,5);
    Add(1,12048,1,0,0,509,10,518,2,7452,1);
    Add(1,12044,1,0,0,507,3,508,2,511,3,568,1,517,5,7453,1);
    Add(1,12065,1,0,0,520,2,521,3,7100,10,7198,6,7453,1,7452,1);
    Add(1,12060,1,0,0,7006,20,520,10,507,10,1062,20,7482,1);
    Add(1,12055,1,0,0,553,20,508,10,511,20,7455,1,7456,1);

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.01
  • Content Count:  39
  • Reputation:   30
  • Joined:  06/08/23
  • Last Seen:  

11 hours ago, monyet said:

bagaimana script saya yang ini apakah bisa di buat lebih sederhana lagi ?

 

 

menurut saya dengan teknik dasar itu sudah cukup bagus, ya walau pengulangan yg harus anda lakukan adalah kelemahannya.

Just now, Racaae said:

Halo

//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.6c
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//===== Additional Comments: =================================
//= 1.0 Initial script.
//= 1.2 Added category support.
//= 1.3 More options and fixes.
//= 1.4 Added debug settings.
//= 1.5 Replaced categories with shop IDs.
//= 1.6 Added support for purchasing stackables.
//= 1.6a Added support for previewing costumes and robes.
//= 1.6b Added 'disable_items' command.
//= 1.6c Replaced function 'A_An' with "F_InsertArticle".
//============================================================

// Shop NPCs -- supplying no argument displays entire menu.
//  callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//  ADD YOUR NPC HERE
//============================================================
prontera,152,180,5	script	NamaNPC	4_F_JPN2,{ callfunc "qshop",1; }

//============================================================


// Script Core - DO NOT DUPLICATE THIS NPC !!!!!!!!!!!!!
//============================================================
-	script	quest_shop	-1,{
function Add; function Chk; function Slot;
OnInit:
    freeloop(1);

// -----------------------------------------------------------
//  Basic shop settings.
// -----------------------------------------------------------

    set .ShowSlot,1;    // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
    set .ShowID,0;      // Show item IDs? (1: yes / 0: no)
    set .ShowZeny,0;    // Show Zeny cost, if any? (1: yes / 0: no)
    set .MaxStack,100;  // Max number of quest items purchased at one time.
    .SkipShop = true;	// Ignore shop window
    .Chance = 80;		// Success chance

// -----------------------------------------------------------
//  Points variable -- optional quest requirement.
//  setarray .Points$[0],"<variable name>","<display name>";
// -----------------------------------------------------------

    setarray .Points$[0],
        "#CASHPOINTS", "Cash Points";


//=====================================================================================
// ------------------- ADD YOUR SHOPS NAME AND ITEMS SHOPS STARTING HERE --------------
//=====================================================================================

// -----------------------------------------------------------
//  Shop IDs -- to add shops, copy dummy data at bottom of file.
//  setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
// -----------------------------------------------------------

    setarray .Shops$[1],
        "Food",    // Shop Named 1
        "Other";        // Shop Named 2

// -----------------------------------------------------------
//  Quest items -- do NOT use a reward item more than once!
//  Add(<shop ID>,<reward ID>,<reward amount>,
//      <Zeny cost>,<point cost>,
//      <required item ID>,<required item amount>{,...});
// -----------------------------------------------------------

// Shop 1
    Add(1,12046,1,0,0,501,2,514,3);
    Add(1,12061,1,0,0,501,1,514,2,518,1);
    Add(1,12047,1,0,0,507,10,508,10,510,5);
    Add(1,12048,1,0,0,509,10,518,2,7452,1);
    Add(1,12044,1,0,0,507,3,508,2,511,3,568,1,517,5,7453,1);
    Add(1,12065,1,0,0,520,2,521,3,7100,10,7198,6,7453,1,7452,1);
    Add(1,12060,1,0,0,7006,20,520,10,507,10,1062,20,7482,1);
    Add(1,12055,1,0,0,553,20,508,10,511,20,7455,1,7456,1);

// -----------------------------------------------------------

//=====================================================================================
// ------------------- YOUR SHOPS AND ITEMS SHOPS HAVE BEEN ADDED ---------------------
//=====================================================================================

    freeloop(0);
    set .menu$,"";
    for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
        set .menu$, .menu$+.Shops$[.@i]+":";
        npcshopdelitem "qshop"+.@i,909;
    }
    end;

OnMenu:
    set .@size, getarraysize(@i);
    if (!.@size) set @shop_index, select(.menu$);
    else if (.@size == 1) set @shop_index, @i[0];
    else {
        for(set .@j,0; .@j<.@size; set .@j,.@j+1)
            set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
        set @shop_index, @i[select(.@menu$)-1];
    }
    deletearray @i[0],getarraysize(@i);
    if (.Shops$[@shop_index] == "") {
        message strcharinfo(0),"An error has occurred.";
        end;
    }
    if (!.SkipShop) {
    	dispbottom "Select one item at a time.";
    	callshop "qshop"+@shop_index,1;
    	npcshopattach "qshop"+@shop_index;
    	end;
    }
    mes "[NamaNPC]";
    mes "Halo, Aku adalah NPC contoh.";
    mes "Apa yang ingin kamu buat?";
	//for (.@i = 0;.@i < getarraysize(getd(".q_list_"+@shop_index));.@i++)
	//	mes "- " + mesitemlink(getd(".q_list_"+@shop_index+"["+ .@i + "]"));
	.@menu$ = "";
	for (.@i = 0;.@i < getarraysize(getd(".q_list_"+@shop_index));.@i++)
		.@menu$ += getitemname(getd(".q_list_"+@shop_index+"["+ .@i + "]")) + ":";
	.@s = select(.@menu$) - 1;
   	setarray .@q[0],getd(".q_list_"+@shop_index+"["+ .@s + "]"),1;
   	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
   	clear;

OnBuyItem:
    // .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
    if (!.SkipShop) {
    	setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
    	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
    }
    mes "[NamaNPC]";
    set .@q[2],.@q[1]*.@q[3];
    if (!.@q[2] || .@q[2] > 30000) {
        mes "You can't purchase that many "+getitemname(.@q[0])+".";
        close;
    }
    mes "Untuk membuat";
    //mes "^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
    mes "^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"") + mesitemlink(.@q[0]) + "^000000, kamu membutuhkan:";
    disable_items;
    if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
    if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
    if (.@q[6]) {
    	for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2) {
        	//mes (.@q[.@i+2]?"":"dan ") + Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000" + (.@q[.@i+2]?",":".");
        	mes (.@q[.@i+2]?"":"dan ") + Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+mesitemlink(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000" + (.@q[.@i+2]?",":".");
		}
	}
    setarray @qe[1], getiteminfo(.@q[0], ITEMINFO_LOCATIONS), getiteminfo(.@q[0], ITEMINFO_VIEW);
    if (@qe[2] > 0 && ((@qe[1] & EQP_HEAD_LOW) || (@qe[1] & EQP_HEAD_TOP) || (@qe[1] & EQP_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_TOP) || (@qe[1] & EQP_COSTUME_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_LOW) || (@qe[1] & EQP_GARMENT) || (@qe[1] & EQP_COSTUME_GARMENT)))
        set .@preview,1;
    addtimer 1000, strnpcinfo(0)+"::OnEnd";
    while(1) {
        switch(select("Membuat ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[7])?" ~ Preview...":"")+":^777777Membatalkan^000000")) {
        case 1:
        	mes "[NamaNPC]";
            if (@qe[0]) {
                mes "Kamu tidak memiliki bahan yang cukup.";
                close;
            }
            if (!checkweight(.@q[0],.@q[2])) {
                mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0], ITEMINFO_WEIGHT))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
                close;
            }
            if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
            if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
            if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
                delitem .@q[.@i],.@q[.@i+1]*.@q[1];
            if (rand(100) >= .Chance) {
            	mes "Pembuatan " + getitemname(.@q[0]) + " gagal!";
            	close;
            }
            getitem .@q[0],.@q[2];
            mes "Berhasil membuat " + getitemname(.@q[0]) + "!";
            close;
        case 2:
            setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
            if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
            else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
            else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
            else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
            break;
        case 3:
            close;
        }
    }

OnEnd:
    if (@qe[7]) {
        changelook LOOK_HEAD_BOTTOM, @qe[3];
        changelook LOOK_HEAD_TOP, @qe[4];
        changelook LOOK_HEAD_MID, @qe[5];
        changelook LOOK_ROBE, @qe[6];
    }
    deletearray @qe[0],8;
    end;

function Add {
    if (getitemname(getarg(1)) == "null") {
        debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
        return;
    }
    setarray .@j[0],getarg(2),getarg(3),getarg(4);
    for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
        if (getitemname(getarg(.@i)) == "null") {
            debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
            return;
        } else
            setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
    }
    copyarray getd(".q_"+getarg(0)+"_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
    npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
    .@ii = getarraysize(getd(".q_list_"+getarg(0)));
    setarray getd(".q_list_"+getarg(0)+"["+.@ii+"]"),getarg(1);
    return;
}

function Chk {
    if (getarg(0) < getarg(1)) {
        set @qe[0],1;
        return "^FF0000";
    } else
        return "^00FF00";
}

function Slot {
    set .@s$,getitemname(getarg(0));
    switch(.ShowSlot) {
        case 1: if (!getitemslots(getarg(0))) return .@s$;
        case 2: if (getiteminfo(getarg(0), ITEMINFO_TYPE) == 4 || getiteminfo(getarg(0), ITEMINFO_TYPE) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
        default: return .@s$;
    }
}
}

function	script	qshop	{
    deletearray @i[0],getarraysize(@i);
    for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
        set @i[.@i],getarg(.@i);
    doevent "quest_shop::OnMenu";
    end;
}


// Dummy shop data -- copy as needed.
//============================================================
-	shop	qshop1	-1,909:-1
-	shop	qshop2	-1,909:-1

Temukan bagian ini untuk menambahkan lebih banyak item:

    Add(1,12046,1,0,0,501,2,514,3);
    Add(1,12061,1,0,0,501,1,514,2,518,1);
    Add(1,12047,1,0,0,507,10,508,10,510,5);
    Add(1,12048,1,0,0,509,10,518,2,7452,1);
    Add(1,12044,1,0,0,507,3,508,2,511,3,568,1,517,5,7453,1);
    Add(1,12065,1,0,0,520,2,521,3,7100,10,7198,6,7453,1,7452,1);
    Add(1,12060,1,0,0,7006,20,520,10,507,10,1062,20,7482,1);
    Add(1,12055,1,0,0,553,20,508,10,511,20,7455,1,7456,1);

 

untuk teknik yg lebih advanced pengulangan code dapat di hilangkan seperti yg disebutkan di atas hanya butuh menambah beberapa line semua beres sebagain new entry.

walau ada sedikit perbedaan jika langsung menggunakan equphy quest shop untuk script yg anda lampirkan di atas, anda akan kehilangan aspect chance.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  15
  • Reputation:   0
  • Joined:  03/10/14
  • Last Seen:  

2 hours ago, Racaae said:

Halo

//===== rAthena Script =======================================
//= Euphy's Quest Shop
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.6c
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= A dynamic quest shop based on Lunar's, with easier config.
//= Includes support for multiple shops & cashpoints.
//= Item Preview script by ToastOfDoom.
//===== Additional Comments: =================================
//= 1.0 Initial script.
//= 1.2 Added category support.
//= 1.3 More options and fixes.
//= 1.4 Added debug settings.
//= 1.5 Replaced categories with shop IDs.
//= 1.6 Added support for purchasing stackables.
//= 1.6a Added support for previewing costumes and robes.
//= 1.6b Added 'disable_items' command.
//= 1.6c Replaced function 'A_An' with "F_InsertArticle".
//============================================================

// Shop NPCs -- supplying no argument displays entire menu.
//  callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}};
//  ADD YOUR NPC HERE
//============================================================
prontera,152,180,5	script	NamaNPC	4_F_JPN2,{ callfunc "qshop",1; }

//============================================================


// Script Core - DO NOT DUPLICATE THIS NPC !!!!!!!!!!!!!
//============================================================
-	script	quest_shop	-1,{
function Add; function Chk; function Slot;
OnInit:
    freeloop(1);

// -----------------------------------------------------------
//  Basic shop settings.
// -----------------------------------------------------------

    set .ShowSlot,1;    // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
    set .ShowID,0;      // Show item IDs? (1: yes / 0: no)
    set .ShowZeny,0;    // Show Zeny cost, if any? (1: yes / 0: no)
    set .MaxStack,100;  // Max number of quest items purchased at one time.
    .SkipShop = true;	// Ignore shop window
    .Chance = 80;		// Success chance

// -----------------------------------------------------------
//  Points variable -- optional quest requirement.
//  setarray .Points$[0],"<variable name>","<display name>";
// -----------------------------------------------------------

    setarray .Points$[0],
        "#CASHPOINTS", "Cash Points";


//=====================================================================================
// ------------------- ADD YOUR SHOPS NAME AND ITEMS SHOPS STARTING HERE --------------
//=====================================================================================

// -----------------------------------------------------------
//  Shop IDs -- to add shops, copy dummy data at bottom of file.
//  setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
// -----------------------------------------------------------

    setarray .Shops$[1],
        "Food",    // Shop Named 1
        "Other";        // Shop Named 2

// -----------------------------------------------------------
//  Quest items -- do NOT use a reward item more than once!
//  Add(<shop ID>,<reward ID>,<reward amount>,
//      <Zeny cost>,<point cost>,
//      <required item ID>,<required item amount>{,...});
// -----------------------------------------------------------

// Shop 1
    Add(1,12046,1,0,0,501,2,514,3);
    Add(1,12061,1,0,0,501,1,514,2,518,1);
    Add(1,12047,1,0,0,507,10,508,10,510,5);
    Add(1,12048,1,0,0,509,10,518,2,7452,1);
    Add(1,12044,1,0,0,507,3,508,2,511,3,568,1,517,5,7453,1);
    Add(1,12065,1,0,0,520,2,521,3,7100,10,7198,6,7453,1,7452,1);
    Add(1,12060,1,0,0,7006,20,520,10,507,10,1062,20,7482,1);
    Add(1,12055,1,0,0,553,20,508,10,511,20,7455,1,7456,1);

// -----------------------------------------------------------

//=====================================================================================
// ------------------- YOUR SHOPS AND ITEMS SHOPS HAVE BEEN ADDED ---------------------
//=====================================================================================

    freeloop(0);
    set .menu$,"";
    for(set .@i,1; .@i<=getarraysize(.Shops$); set .@i,.@i+1) {
        set .menu$, .menu$+.Shops$[.@i]+":";
        npcshopdelitem "qshop"+.@i,909;
    }
    end;

OnMenu:
    set .@size, getarraysize(@i);
    if (!.@size) set @shop_index, select(.menu$);
    else if (.@size == 1) set @shop_index, @i[0];
    else {
        for(set .@j,0; .@j<.@size; set .@j,.@j+1)
            set .@menu$, .@menu$+.Shops$[@i[.@j]]+":";
        set @shop_index, @i[select(.@menu$)-1];
    }
    deletearray @i[0],getarraysize(@i);
    if (.Shops$[@shop_index] == "") {
        message strcharinfo(0),"An error has occurred.";
        end;
    }
    if (!.SkipShop) {
    	dispbottom "Select one item at a time.";
    	callshop "qshop"+@shop_index,1;
    	npcshopattach "qshop"+@shop_index;
    	end;
    }
    mes "[NamaNPC]";
    mes "Halo, Aku adalah NPC contoh.";
    mes "Apa yang ingin kamu buat?";
	//for (.@i = 0;.@i < getarraysize(getd(".q_list_"+@shop_index));.@i++)
	//	mes "- " + mesitemlink(getd(".q_list_"+@shop_index+"["+ .@i + "]"));
	.@menu$ = "";
	for (.@i = 0;.@i < getarraysize(getd(".q_list_"+@shop_index));.@i++)
		.@menu$ += getitemname(getd(".q_list_"+@shop_index+"["+ .@i + "]")) + ":";
	.@s = select(.@menu$) - 1;
   	setarray .@q[0],getd(".q_list_"+@shop_index+"["+ .@s + "]"),1;
   	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
   	clear;

OnBuyItem:
    // .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
    if (!.SkipShop) {
    	setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
    	copyarray .@q[3],getd(".q_"+@shop_index+"_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+@shop_index+"_"+.@q[0]));
    }
    mes "[NamaNPC]";
    set .@q[2],.@q[1]*.@q[3];
    if (!.@q[2] || .@q[2] > 30000) {
        mes "You can't purchase that many "+getitemname(.@q[0])+".";
        close;
    }
    mes "Untuk membuat";
    //mes "^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+Slot(.@q[0])+"^000000";
    mes "^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"") + mesitemlink(.@q[0]) + "^000000, kamu membutuhkan:";
    disable_items;
    if (.@q[4]) mes " > "+Chk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
    if (.@q[5]) mes " > "+Chk(getd(.Points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
    if (.@q[6]) {
    	for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2) {
        	//mes (.@q[.@i+2]?"":"dan ") + Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000" + (.@q[.@i+2]?",":".");
        	mes (.@q[.@i+2]?"":"dan ") + Chk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+mesitemlink(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000" + (.@q[.@i+2]?",":".");
		}
	}
    setarray @qe[1], getiteminfo(.@q[0], ITEMINFO_LOCATIONS), getiteminfo(.@q[0], ITEMINFO_VIEW);
    if (@qe[2] > 0 && ((@qe[1] & EQP_HEAD_LOW) || (@qe[1] & EQP_HEAD_TOP) || (@qe[1] & EQP_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_TOP) || (@qe[1] & EQP_COSTUME_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_LOW) || (@qe[1] & EQP_GARMENT) || (@qe[1] & EQP_COSTUME_GARMENT)))
        set .@preview,1;
    addtimer 1000, strnpcinfo(0)+"::OnEnd";
    while(1) {
        switch(select("Membuat ^0055FF"+getitemname(.@q[0])+"^000000:"+((.@preview && !@qe[7])?" ~ Preview...":"")+":^777777Membatalkan^000000")) {
        case 1:
        	mes "[NamaNPC]";
            if (@qe[0]) {
                mes "Kamu tidak memiliki bahan yang cukup.";
                close;
            }
            if (!checkweight(.@q[0],.@q[2])) {
                mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0], ITEMINFO_WEIGHT))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
                close;
            }
            if (.@q[4]) set Zeny, Zeny-(.@q[4]*.@q[1]);
            if (.@q[5]) setd .Points$[0], getd(.Points$[0])-(.@q[5]*.@q[1]);
            if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
                delitem .@q[.@i],.@q[.@i+1]*.@q[1];
            if (rand(100) >= .Chance) {
            	mes "Pembuatan " + getitemname(.@q[0]) + " gagal!";
            	close;
            }
            getitem .@q[0],.@q[2];
            mes "Berhasil membuat " + getitemname(.@q[0]) + "!";
            close;
        case 2:
            setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
            if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
            else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
            else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
            else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
            break;
        case 3:
            close;
        }
    }

OnEnd:
    if (@qe[7]) {
        changelook LOOK_HEAD_BOTTOM, @qe[3];
        changelook LOOK_HEAD_TOP, @qe[4];
        changelook LOOK_HEAD_MID, @qe[5];
        changelook LOOK_ROBE, @qe[6];
    }
    deletearray @qe[0],8;
    end;

function Add {
    if (getitemname(getarg(1)) == "null") {
        debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
        return;
    }
    setarray .@j[0],getarg(2),getarg(3),getarg(4);
    for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
        if (getitemname(getarg(.@i)) == "null") {
            debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
            return;
        } else
            setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
    }
    copyarray getd(".q_"+getarg(0)+"_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
    npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
    .@ii = getarraysize(getd(".q_list_"+getarg(0)));
    setarray getd(".q_list_"+getarg(0)+"["+.@ii+"]"),getarg(1);
    return;
}

function Chk {
    if (getarg(0) < getarg(1)) {
        set @qe[0],1;
        return "^FF0000";
    } else
        return "^00FF00";
}

function Slot {
    set .@s$,getitemname(getarg(0));
    switch(.ShowSlot) {
        case 1: if (!getitemslots(getarg(0))) return .@s$;
        case 2: if (getiteminfo(getarg(0), ITEMINFO_TYPE) == 4 || getiteminfo(getarg(0), ITEMINFO_TYPE) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
        default: return .@s$;
    }
}
}

function	script	qshop	{
    deletearray @i[0],getarraysize(@i);
    for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
        set @i[.@i],getarg(.@i);
    doevent "quest_shop::OnMenu";
    end;
}


// Dummy shop data -- copy as needed.
//============================================================
-	shop	qshop1	-1,909:-1
-	shop	qshop2	-1,909:-1

Temukan bagian ini untuk menambahkan lebih banyak item:

    Add(1,12046,1,0,0,501,2,514,3);
    Add(1,12061,1,0,0,501,1,514,2,518,1);
    Add(1,12047,1,0,0,507,10,508,10,510,5);
    Add(1,12048,1,0,0,509,10,518,2,7452,1);
    Add(1,12044,1,0,0,507,3,508,2,511,3,568,1,517,5,7453,1);
    Add(1,12065,1,0,0,520,2,521,3,7100,10,7198,6,7453,1,7452,1);
    Add(1,12060,1,0,0,7006,20,520,10,507,10,1062,20,7482,1);
    Add(1,12055,1,0,0,553,20,508,10,511,20,7455,1,7456,1);

 

terimakasih banyak saya bisa menambah pengetahuan saya soal scriptnya

1 hour ago, Harvin said:

menurut saya dengan teknik dasar itu sudah cukup bagus, ya walau pengulangan yg harus anda lakukan adalah kelemahannya.

untuk teknik yg lebih advanced pengulangan code dapat di hilangkan seperti yg disebutkan di atas hanya butuh menambah beberapa line semua beres sebagain new entry.

walau ada sedikit perbedaan jika langsung menggunakan equphy quest shop untuk script yg anda lampirkan di atas, anda akan kehilangan aspect chance.

ok saya akan praktekan, saya sangat terbantu sekali dengan penjelasannya 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...