Jump to content

  •  

ar7shadow

Member Since 27 Apr 2017
Offline Last Active May 20 2017 11:15 PM
-----

Posts I've Made

In Topic: Charity NPC - Help pls

27 April 2017 - 08:08 PM

Select Code
//Charity NPC//
//Ryonin//

izlude,124,139,6	script	Lucy	101,{

// Variables
	.@n$ = "[Lucy]";
//	$donate5m = 5000000; // you used global account variables, but you need global variable here ($)
//	$donate10m = 10000000; // if you do it like this, those variables will be set each time someone talks to the npc.
//	$donate15m = 15000000;
//	$donate25m = 25000000; // i kept em but they're totally not needed

/*// Zeny Detector  // this would prevent anyone to do anything
	if (Zeny < $donate5m) {
		mes .@n$;
		mes "Sorry, you dont have enough money to talk to me.";
		mes "You need to have atleast ^FF00005,000,000z^000000.";
		mes "The total amount I collected is : ^0000CD["+$totaldonate+"]^000000 zeny.";
		close;
		end;
	}
*/
// Start
	mes .@n$;
	mes "Hello, Citizen of Ragnarok Offline.";
	mes "Can I help you with something?";
	next;
	if (select("Yes, I would like to donate", "No, Thank you") ==2) { // removed the switch here, instead, if you select the 2nd answer the npc will directly end.
		mes .@n$;										// Also you had close; end; in your script, which is not needed.
		mes "Okay then. See you later.";
		close;
	}
	mes .@n$;
	mes "I was assigned by the ^DAA520 GM Team^000000 to collect the donation money.";
	mes "The total amount I collected is : ^0000CD["+$totaldonate+"]^000000 zeny.";
	next;
	mes .@n$;
	mes "You can only donate 1,000,000z or 5,000,000z.";
	next;
	mes .@n$;
	mes "If I collected a total amount of ^FF000075,000,000^000000z.";
	mes "I can activate this event:";
	mes "Event: ^8B008BComodo Hat Festival Quest^000000.";
	mes "Event Duration: ^006400[2 DAYS]^000000.";
	next;
	mes .@n$;
	mes "How much money you want to donate?";
	mes "Once you donate, I can't your money back.";
	next;
	.@menu = select("5,000,000z", "10,000,000z", "15,000,000z", "25,000,000z"); // removing the switch, instead we store selection in a variable (1-4 depending on selection)
	setarray(.@costs[0] = 5000000, 10000000, 15000000, 25000000); // setting a temporary array with the costs)
	switch (.@menu) { //switching the variable we set before
	case 1:
	case 2:
	case 3:
	case 4:
		mes .@n$;						// same message, regardless how much you donated
		if (Zeny < .@costs[.@menu-1]) {	// you forgot a Zeny check so I added one
			mes .@n$;
			mes "You don't have enough Zeny?";
                        close;
		}
		Zeny -= .@costs[.@menu-1];				// zeny -= the costs you selected (arrays start at 0, so its your selection -1)
		close;

		$totaldonate += .@costs[.@menu-1]; // variable += the donated amount
		mes "Thank you for donating "+.@costs[.@menu-1]+"!"; //
		mes "We appreciate your generosity.";
		announce "[Charity Lucy: "+strcharinfo(0)+"] has donated ["+.@costs[.@menu-1]+"] to Charity! We appreciate your generosity.", 0;
		next;
		mes .@n$;
		mes "The total amount I collected is : ^0000CD["+$totaldonate+"]^000000 zeny.";
		close;
	} // closing the switch
	end;
} // closing npc

 

i did some comments inside - everything is untested
 
to enable npcs depending on donated amount you can either use a fake_npc and check for $totaldonate > 25m or whatever, or you do like in rachel quest
 

//== Donation Lottery Quest/High Priest Quest :: rachel_oz & rachel_ma1 =
ra_temple,119,180,0	script	Temple Entrance#ra_tem	WARPNPC,1,1,{
OnTouch:
	if ($rachel_donate >= 10000) {
		if (MISC_QUEST & 8192) { warp "ra_temin",169,23; end; }

		if (ra_tem_q < 10) {
			mes "^3355FFThe temple's";
			mes "entrance is locked.^000000";
			next;
			select("Kick Door.", "Smash Door with Weapon.");
			emotion e_omg,0,"Nemma#ra_temple";
			mes "[Priestess Nemma]";
			mes "Please don't do that!";
			close;
		}
	}
	warp "ra_temin",169,23;
	end;
}

Thank you so much. I really appreciate your comments and suggestions.