Jump to content

Brauche hilfe bei Event NPC // Need help with Event NPC


Recommended Posts


  • Group:  Members
  • Topic Count:  7
  • Topics Per Day:  0.00
  • Content Count:  27
  • Reputation:   1
  • Joined:  05/27/12
  • Last Seen:  

Hello i think i wrote it in the wrong topic thats why i pass the link here

a lil help could be nice and u can use the script and all data anyways

My lil Event Project (Lil p_q)

Link to comment
Share on other sites


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

Hello

\doc\script_commands.txt
This document explain most commands used in scripting. It can be your best friend for learning.

I tried adding some stuff in the script you started.
The roulette is working
The shop is working
The entrance npc is working

Spoiler
//===== rAthena Script =======================================
//= Poring Island Event 
//===== Description: =========================================
//= Multiple NPCs that assigns quests, warps events
//===== Additional Comments: =================================
//= 1.0 Initial release. [Syrisone] [yourname]
//============================================================

//= Entry NPC

//prontera,159,192,4	script	Popo	1096,{
gonryun,167,138,5	script	Popo#tw	4_ANGELING,{

	//.@ticket_id = 1001148; // Poring Island Entry Ticket
	.@ticket_id = 7350; //placeholder

	//.@quest_id = 293140; // Poring Island entry 1
	.@quest_id = 3040; //placeholder

	.@time = 60 - gettime(DT_MINUTE); //get time left
	mes "[Popo]";
	mes "Have you heard about the mysterious";
	mes "island that is full of porings?";
	mes "I can send you there!";
	mes "Poring Island resets at every hour,";
	mes "and the remaining time is ^FF0000" + (.@time>1?.@time + " minutes":"only seconds") + "^000000.";
	next;

	// Erase quest to gain free entry at new day.
	if (checkquest(.@quest_id,PLAYTIME) == 2) {
		pi_entered = 0;
		erasequest .@quest_id;
	}

	// Check if player entered 3 times
	if (pi_entered >= 3) {
		mes "[Popo]";
		mes "You can only use tickets to enter the Poring Island two times.";
		mes "Come back ^0000FFtomorrow after 4:00^000000.";
		close;
	}

	if(select("Go:Stop") == 1) {
		//If GO --->Check once per day free warp if go above warp if been there go use ticket
		
		// Check if player already entered today for free
		if (pi_entered) {
			mes "[Popo]";
			mes "You've been there already! Its a";
			mes "pity that you can only go to Poring";
			mes "Island once a day.";
			mes "But if you use ^0000FFPoring Island Entry^000000";
			mes "^0000FFTicket 1 pcs^000000 you can go again. Do";
			mes "you want to use the Entry Ticket?";
			next;
			if(select("Use:Don't use") == 1) {
	
				// Check if player has item.
				if (countitem(.@ticket_id) < 1) {
					mes "[Popo]";
					mes "Sorry.";
					mes "You don't have enough ^0000FFPoring Island Entry Ticket^000000.";
					close;
				}
				mes "[Popo]";
				mes "Ticket verified. I will send you";
				mes "there right away!";
				close2;
				delitem .@ticket_id, 1; //remove ticket from player as payment
	
			} else {
				mes "[Popo]";
				mes "Ok.";
				close;
			}
		}

		if (pi_entered == 0) {
			mes "[Popo]";
			mes "I will let you enter for free this time.";
			mes "Remember all adventurers are transported out of the Island at every sharp hour.";
			close2;
		}
		
		// Everything okay. Give quest to player and teleport. 
		if (isbegin_quest(.@quest_id) == 0)
			setquest .@quest_id;
		pi_entered++;
		warp .map$, 0 , 0; // teleport player to Island
		end;

	}
	//if Stop
	mes "[Popo]";
	mes "Come back to me when you change your mind.";
	close;


OnInit:
	.map$ = "pay_fild04"; // Event Map

	setmapflag .map$, mf_nowarp;
	setmapflag .map$, mf_nowarpto;
	setmapflag .map$, mf_noteleport;
	setmapflag .map$, mf_monster_noteleport;
	setmapflag .map$, mf_nosave;
	setmapflag .map$, mf_nomemo;
	setmapflag .map$, mf_nobranch;
	setmapflag .map$, mf_noicewall;
	questinfo QTYPE_EVENT, QMARK_YELLOW, "pi_entered < 3";
	end;

// All players are transported out at every sharp hours
OnMinute59:
	mapannounce .map$, "Popo : Everyone will be teleported out of the Island in 1 minute!",bc_map;
	sleep 60000; // (60000 = wait 60 seconds to continue the script.)
	mapwarp .map$,"gonryun", 169 , 130; // (teleport everyone on the map)
	end;
}
	
//============================================================
//= Reward NPC

//eventmap.gat,159,192,4	script	Ling Ling#tw	4_ARCHANGELING,{
gonryun,186,137,5	script	Ling Ling#tw	4_ARCHANGELING,{
	disable_items;

	//.@token_id = 1001005; // Event Token
	.@token_id = 909; // placeholder

	mes "[Ling Ling]";
	mes "You can use Event Tokens and";
	mes "Diamonds to Exchange for various";
	mes "goods. What do you need?";
	next;
	switch(select("Exchange Costume:Limited-time Items:Cancel")) {
	
	case 1:
		//if Exchange costume
		mes "[Ling Ling]";
		mes "The following can be exchanged:";
		next;
		switch(select("Costume Poring Mufffler:Costume Poporing Muffler:Costume Marin Muffler:Costume Drops Muffler:Costume Rainbow Poring Hat:Cancel")) {			
		case 1:
			mes "[Ling Ling]";
			mes "<ITEM>Poring Mufffler<INFO>31490</INFO></ITEM>?";
			mes "You need 500 Event Token and 2 Poring Diamonds to get this costume.";
			mes " ";
			mes "" + (countitem(.@token_id)<500?"^FF0000":"^008000") + "(" + countitem(.@token_id) + "/500) Event Token^000000";
			mes "" + (countitem(733)<2?"^FF0000":"^008000") + "(" + countitem(733) + "/2) Poring Diamond^000000";

			if (countitem(.@token_id) < 500 || countitem(733) < 2)
				close;
			
			next;
			if(select("Cancel", "Confirm exchange")== 1) {
				mes "[Ling Ling]";
				mes "Ok bye.";
				close;
			}

			if (checkweight(1301,1) == 0) {
				mes "[Ling Ling]";
				mes "You are carrying too much items, please reduce your weight.";
				close;
			}

			mes "[Ling Ling]";
			mes "Here is your new costume!";
			delitem .@token_id, 500;	// Event Token
			delitem 733, 2;		// Diamond
			getitem 31490, 1;	// Costume Hat
			close;

		case 2:
			mes "[Ling Ling]";
			mes "<ITEM>Poporing Mufffler<INFO>31586</INFO></ITEM>?";
			mes "You need 500 Event Token and 2 Poporing Diamonds to get this costume.";
			mes " ";
			mes "" + (countitem(.@token_id)<500?"^FF0000":"^008000") + "(" + countitem(.@token_id) + "/500) Event Token^000000";
			mes "" + (countitem(730)<2?"^FF0000":"^008000") + "(" + countitem(730) + "/2) Poporing Diamond^000000";

			if (countitem(.@token_id) < 500 || countitem(730) < 2)
				close;
			
			next;
			if(select("Cancel", "Confirm exchange")== 1) {
				mes "[Ling Ling]";
				mes "Ok bye.";
				close;
			}

			if (checkweight(1301,1) == 0) {
				mes "[Ling Ling]";
				mes "You are carrying too much items, please reduce your weight.";
				close;
			}

			mes "[Ling Ling]";
			mes "Here is your new costume!";
			delitem .@token_id, 500;	// Event Token
			delitem 730, 2;		// Diamond
			getitem 31586, 1;	// Costume Hat
			close;

		case 3:
			mes "[Ling Ling]";
			mes "<ITEM>Marin Mufffler<INFO>31584</INFO></ITEM>?";
			mes "You need 500 Event Token and 2 Marin Diamonds to get this costume.";
			mes " ";
			mes "" + (countitem(.@token_id)<500?"^FF0000":"^008000") + "(" + countitem(.@token_id) + "/500) Event Token^000000";
			mes "" + (countitem(731)<2?"^FF0000":"^008000") + "(" + countitem(731) + "/2) Marin Diamond^000000";

			if (countitem(.@token_id) < 500 || countitem(731) < 2)
				close;
			
			next;
			if(select("Cancel", "Confirm exchange")== 1) {
				mes "[Ling Ling]";
				mes "Ok bye.";
				close;
			}

			if (checkweight(1301,1) == 0) {
				mes "[Ling Ling]";
				mes "You are carrying too much items, please reduce your weight.";
				close;
			}

			mes "[Ling Ling]";
			mes "Here is your new costume!";
			delitem .@token_id, 500;	// Event Token
			delitem 731, 2;		// Diamond
			getitem 31584, 1;	// Costume Hat
			close;
		case 4:
			mes "[Ling Ling]";
			mes "<ITEM>Drops Mufffler<INFO>31585</INFO></ITEM>?";
			mes "You need 500 Event Token and 2 Drops Diamonds to get this costume.";
			mes " ";
			mes "" + (countitem(.@token_id)<500?"^FF0000":"^008000") + "(" + countitem(.@token_id) + "/500) Event Token^000000";
			mes "" + (countitem(732)<2?"^FF0000":"^008000") + "(" + countitem(732) + "/2) Drops Diamond^000000";

			if (countitem(.@token_id) < 500 || countitem(732) < 2)
				close;
			
			next;
			if(select("Cancel", "Confirm exchange")== 1) {
				mes "[Ling Ling]";
				mes "Ok bye.";
				close;
			}

			if (checkweight(1301,1) == 0) {
				mes "[Ling Ling]";
				mes "You are carrying too much items, please reduce your weight.";
				close;
			}

			mes "[Ling Ling]";
			mes "Here is your new costume!";
			delitem .@token_id, 500;	// Event Token
			delitem 732, 2;		// Diamond
			getitem 31585, 1;	// Costume Hat
			close;
		case 5:
			mes "[Ling Ling]";
			mes "<ITEM>Rainbow Poring Hat<INFO>19676</INFO></ITEM>?";
			mes "You need 500 Event Tokens to get this costume.";
			mes " ";
			mes "" + (countitem(.@token_id)<500?"^FF0000":"^008000") + "(" + countitem(.@token_id) + "/500) Event Token^000000";
			if (countitem(.@token_id) < 500)
				close;
			
			next;
			if(select("Cancel", "Confirm exchange")== 1) {
				mes "[Ling Ling]";
				mes "Ok bye.";
				close;
			}

			if (checkweight(1301,1) == 0) {
				mes "[Ling Ling]";
				mes "You are carrying too much items, please reduce your weight.";
				close;
			}

			mes "[Ling Ling]";
			mes "Here is your new costume!";
			delitem .@token_id, 500;	// Event Token
			getitem 19676, 1;	// Costume Hat
			close;
		case 6:
			mes "[Ling Ling]";
			mes "Ok bye.";
			close;
		}
		
//Limited-time Items only on this time other wise close
	case 2:
		mes "[Ling Ling]";
		mes "Limited exchanger will be open at";
		mes "04:00~05:00, 11:00~12:00,";
		mes "20:00~21:00.";

		// Check if open hours.
		if (.open == 0) close;

		mes "It's opening hours, what do you";
		mes "need?";
		next;
		
		for ( .@i = 0; .@i < getarraysize(.items); .@i+=3 )
			.@menu$ += (.items[.@i+2]<1?"^FF0000":"") + getitemname(.items[.@i]) + " - " + (.items[.@i+2]<1?"sold out":.items[.@i+2]+" left") + "^000000:";
		.@s = (select(.@menu$) -1) * 3;
		if (.items[.@s+2] < 1) {
			mes "[Ling Ling]";
			mes getitemname(.items[.@s]) + " is sold out.";
			mes "Try to buy it next time the shop opens.";
			close;
		}
		do {
			if (.open == 0)  callsub S_Closed;
			if (.items[.@s+2] > 1) {
				mes "[Ling Ling]";
				do {
					mes "Each [<ITEM>" + getitemname(.items[.@s]) + "<INFO>" + .items[.@s] + "</INFO></ITEM>] costs " + .items[.@s+1] + " tokens.";
					mes "I have " + .items[.@s+2] + " available to sell.";
					mes "How many do you want?";
					mes " ";
					mes "Input 0 to cancel.";
					next;
					input .@i;
					if (.@i == 0) {
						mes "[Ling Ling]";
						mes "Deal cancelled.";
						close;
					}
					if (.items[.@s+2] < 1) callsub "S_AllSold";
					if (.@i < 1 || .@i > .items[.@s+2]) {
						mes "[Ling Ling]";
						mes "I can't sell you this amount.";
					}
					else
						break;
				} while (1);
			}
			else
				.@i = 1;
		
			.@price = .items[.@s+1] * .@i;
			mes "[Ling Ling]";
			mes .@i + "x " + getitemname(.items[.@s]) + " will be ^0000FF" + .@price + " Event Tokens^000000.";
			mes "Do you want to proceed?";
			next;
			if (select("Yes. Buy item", "Cancel") == 2) {
				mes "[Ling Ling]";
				mes "Ok bye.";
				close;
			}

			if (.open == 0)  callsub S_Closed;
			if (.items[.@s+2] < 1) callsub "S_AllSold";
			if (countitem(.@token_id) < .@price) {
				mes "[Ling Ling]";
				mes "You don't have enough Event Tokens...";
				mes " ";
				mes "^FF0000(" + countitem(.@token_id) + "/" + .@price + ") Event Token^000000";
				close;
			}
			if (checkweight(.items[.@s], .@i) == 0) {
				mes "[Ling Ling]";
				mes "You are carrying too much items, please reduce your weight.";
				close;
			}
			if (.items[.@s+2] < .@i) {
				mes "[Ling Ling]";
				mes "Looks like someone bought some stock of the item while we were talking.";
				mes "Now I don't have the amount you were about to buy...";
				next;
				if (select( "Buy another amount", "Cancel") == 2) {
					mes "[Ling Ling]";
					mes "Try to buy it next time the shop opens.";
					close;
				}
			}
			else
				break;
		} while (1);

		delitem .@token_id, .@price;
		getitem .items[.@s], .@i;
		.items[.@s+2] -= .@i;

		mes "[Ling Ling]";
		mes "Here's your item.";
		close;

	case 3:
		mes "[Ling Ling]";
		mes "OK bye.";
		close;
	}

S_AllSold:
	mes "[Ling Ling]";
	mes "Looks like someone bought all stock I had of this item while we were talking.";
	mes "Try to buy it next time the shop opens.";
	close;

S_Closed:
	mes "[Ling Ling]";
	mes "Sorry. The shop just closed while we were talking.";
	mes "Come back later.";
	close;

OnInit:
	// Hours of Limited-Time Shop (4:00 11:00 20:00)
	setarray .open_hours, 4, 11, 20;

OnMinute00:
	if (inarray(.open_hours, gettime(DT_HOUR)) < 0) {
		.open = 0;
		end;
	}

OnOpen:
	setarray .items,
	
	// Limited-time Item list
	//<item ID, Price, Stock> 
		12429,   15,  199, 
		12433,   15,  199, 
		12431,   15,  199, 
		12430,   15,  199, 
		12432,   15,  199, 
		12434,   15,  199, 
		6224,    15,  199, 
		6223,    15,  199, 
		480108, 500,    1;

	.open = 1;
	end;
}


//============================================================
//= Roulette NPC

//eventmap.gat,159,192,4	script	Poring Roulette Staff	4_M_MANAGER,{
gonryun,164,131,5	script	Poring Roulette Staff	4_M_MANAGER,{

	//.@token_id = 1001005; // Event Token
	.@token_id = 909; // placeholder

	.@max_bet = 20; // How many tokens can the player bet maximum

	mes "[Poring Roulette Staff]";
	mes "I'm the Person in charge of Poring";
	mes "Roulett event!";
	mes "What do you need?";
	next;
	switch(select("What is Poring Roulette?:Roulette Betting:Claim Reward:Cancel")) {
	
		case 1:
			// Explain event.
			close;
	
		case 2:
			// Roulette started
			if ($pi_status) {
				mes "[Poring Roulette Staff]";
				mes "The roulette started.";
				mes "No more bets can be made.";
				close;
			}

			//if Roulette Betting check claim reward
			if (pi_betcheck == $pi_last_betcheck && pi_my_bet_name$ == $pi_winner_name$ && $pi_last_betcheck) {
				mes "[Poring Roulette Staff]";
				mes "Want to place a bet? Remind you";
				mes "that you have not claimed your";
				mes "Reward, so you cannot bet!";
				close;
			}

			// if already betted on current roulette
			if (pi_betcheck == $pi_current_betcheck) {
				mes "[Poring Roulette Staff]";
				mes "Want to place a bet? Remind you that you have betted already.";
				mes "You bet ^0000FF" + pi_my_bet_token + "x Token on " + pi_my_bet_name$ + "^000000.";
				mes "Please wait the roulette start spinning.";
				close;
			}

			mes "[Poring Roulette Staff]";
			mes "Which poring do you want to bet";
			mes "on?";
			next;
			switch(select("Poring(2x):Poporing(4x):Drops(6x):Golden Poring(10x)")) {
				case 1:
					.@ChoosedPoring$ = "Poring";
					break;
				case 2:
					.@ChoosedPoring$ = "Poporing";
					break;
				case 3:
					.@ChoosedPoring$ = "Drops";
					break;
				case 4:
					.@ChoosedPoring$ = "Golden Poring";
					break;
			}
					
			do {
				mes "[Poring Roulette Staff]";
				mes "Decide the number of Event Token to";
				mes "bet. Minimum 1 and Maximum " + .@max_bet + ".";
				next;
				input .@TokenSet; // input number here

				mes "[Poring Roulette Staff]";
				if (.@TokenSet == 0) {
					mes "Betting cancelled.";
					close;
				}
				if (.@TokenSet < 1 || .@TokenSet > .@max_bet) {
					mes "Sorry. You cannot bet this amount.";
					mes "Min: 1  ~ Max: 20.";
					mes " ";
					mes "Input 0 to cancel betting.";
					next;
				}
				else {

					mes "Roulette selection: " + .@ChoosedPoring$;
					mes "Amount of Event Token: " + .@TokenSet;
					mes " ";
					mes "Is it correct?";
					next;
					if(select("Correct:Wrong") == 2) {
						//If wrong go back to put number
					}

					else {
						//If Correct start roulette
						mes "[Poring Roulette Staff]";

						// Player don't have tokens to bet
						if (countitem(.@token_id) < .@TokenSet) {
							mes "Sorry. You don't seem to have this number of Tokens.";
							close;
						}
						
						// bet successful
						delitem .@token_id, .@TokenSet;
						pi_my_bet_token = .@TokenSet;
						pi_my_bet_name$ = .@ChoosedPoring$;
						pi_betcheck = $pi_current_betcheck;

						mes "Your bet has been confirmed. If you";
						mes "win, please collect your reward";
						mes "before the next spin.";
						close;
					}
				}
			} while (1);
	
		case 3:
			// Claim reward

			// Roulette started
			if ($pi_status) {
				mes "[Poring Roulette Staff]";
				mes "The roulette started.";
				mes "Let's see who will win!";
				close;
			}

			if (checkweight(1301,1) == 0) {
				mes "[Poring Roulette Staff]";
				mes "You are carrying too much items, please reduce your weight.";
				close;
			}

			// betted on winner of last roulette
			if (pi_betcheck == $pi_last_betcheck && pi_my_bet_name$ == $pi_winner_name$ && $pi_last_betcheck) {
				
				if ($pi_winner_name$ == "Golden Poring")
					.@multiplier = 10;

				else if ($pi_winner_name$ == "Drops")
					.@multiplier = 6;

				else if ($pi_winner_name$ == "Poporing")
					.@multiplier = 4;

				else
					.@multiplier = 2; //Poring

				.@won = pi_my_bet_token * .@multiplier;

				mes "[Poring Roulette Staff]";
				mes "You bet " + pi_my_bet_token + " tokens on " + $pi_winner_name$ + ".";
				mes "Here's your reward: " + .@won + " Event Tokens!";

				getitem .@token_id, .@won; // give tokens
				pi_my_bet_name$ = "";	// erase old bet
				pi_betcheck = 0;		// erase old bet
				pi_my_bet_token = 0;	// erase old bet
				close;
			}

			// Betted on loser of last roulette
			if (pi_betcheck == $pi_last_betcheck && pi_my_bet_name$ != $pi_winner_name$ && $pi_last_betcheck) {
				mes "[Poring Roulette Staff]";
				mes "You bet on " + pi_my_bet_name$ + "...";
				mes "And the winner of the last roulette was the " + $pi_winner_name$ + ".";
				mes "You can try again next time.";
				close;
			}

			// Did not bet on last roulette
			mes "[Poring Roulette Staff]";
			mes "There is not reward for you in my list.";
			mes "You did not win the last roulette.";
			mes "Or claimed your reward already.";
			close;
	
		case 4:
			mes "[Poring Roulette Staff]";
			mes "Have a good day.";
			close;
	}

OnMinute50:
	// check if 2 hours (2am, 4pm, 6am etc.)
	if (gettime(DT_HOUR) % 2)
		announce "Poring Roulette : The Roulette will start in 10 minutes in Gonryun.", 0;
	end;

OnMinute00:
	// check if 2 hours (2am, 4pm, 6am etc.)
	if (gettime(DT_HOUR) % 2)
		end;
	sleep 10000;
OnRoulette:
	if ($pi_status == 1) end;
	mapannounce strnpcinfo(4), "Poring Roulette : The Roulette is gonna start!",bc_map;
	sleep 2000;
	specialeffect EF_MAPPILLAR;
	sleep 10000;
	$pi_status = 1; // 0=bet time; 1=roulette started
	specialeffect EF_BEGINSPELL6;
	sleep 300;
	movenpc "effect#tw", .x, .y;
	specialeffect EF_SUI_EXPLOSION,AREA,"effect#tw";
	sleep 200;
	specialeffect EF_HEARTCASTING,AREA,"effect#tw";
	for( .@i = 1; .@i <= 7; .@i++ ) {
		specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
		sleep 700;
	}
	movenpc "effect#tw", .x-1, .y+1;
	specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
	sleep 200;
	movenpc "effect#tw",.x-3, .y+2;
	specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
	sleep 200;
	callsub S_Circle, 4;
	callsub S_Turn;
	callsub S_Circle, 3;
	callsub S_Turn;
	callsub S_Circle, 2;

	.@winner = rand(1,12);
	donpcevent "pi_r"+.@winner+"::OnWinnerChosen";
	.@slowdown = .@winner - rand(8,12);
	if (.@slowdown < 1)
		.@slowdown += 12;
	for( .@i = 1; .@i != .@slowdown; .@i++ ) {
		if (.@i == 13) .@i = 1;
		specialeffect EF_BEGINSPELL3,AREA,"pi_r"+.@i;
		sleep 200;
	}
	for( .@z = 1; .@i != .@winner; .@i++ ) {
		specialeffect EF_BEGINSPELL3,AREA,"pi_r"+.@i;
		.@wait += rand(100,150);
		sleep 100 + .@wait;
		if (.@i == 12)
			.@i = 0;
	}
	sleep 300;
	for( .@i = 1; .@i < 3; .@i++ ) {
		specialeffect EF_BEGINSPELL3,AREA,"pi_r"+.@winner;
		sleep 1000;
	}	
	mapannounce strnpcinfo(4), "Poring Roulette : Congratulations to everyone who bet on " + $pi_winner_name$ + " and won the roulette!!",bc_map;
	
	npctalk "Talk to me if you bet on " + $pi_winner_name$ + ".";
	for( .@i = 1; .@i <= 12; .@i++ )
		donpcevent "pi_r" + .@i + "::OnWinAnimation";

	$pi_last_betcheck = $pi_current_betcheck;
	$pi_current_betcheck = gettimetick(2);
	$pi_status = 0; // 0=bet time; 1=roulette started
	end;

S_Circle:
	do {
		for( .@i = 1; .@i <= 12; .@i++ ) {
			specialeffect EF_BEGINSPELL3,AREA,"pi_r"+.@i;
			sleep 100;
		}
	.@ii++;
	} while (.@ii < getarg(0));
	return;

S_Turn:
	specialeffect EF_BEGINSPELL3,AREA,"pi_r1";
	sleep 100;
	movenpc "effect#tw", .x-3, .y+2;
	specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
	sleep 100;
	movenpc "effect#tw", .x-2, .y+1;
	specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
	sleep 100;
	movenpc "effect#tw", .x-1, .y;
	specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
	sleep 100;
	movenpc "effect#tw", .x+1, .y-1;
	specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
	sleep 100;
	movenpc "effect#tw", .x+4, .y -2;
	specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
	sleep 100;
	for( .@i = 7; .@i != 10; .@i-- ) {
		specialeffect EF_BEGINSPELL3,AREA,"pi_r"+.@i;
		sleep 100;
		if (.@i == 1)
			.@i = 13;
	}
	.@x = .x - 4;
	.@y = .y - 2;
	for( .@i = 1; .@i <= 5; .@i++ ) {
		movenpc "effect#tw", .@x, .@y;
		specialeffect EF_BEGINSPELL3,AREA,"effect#tw";
		sleep 100;
		.@x += 2;
		.@y++;
	}
	for( .@i = 5; .@i <= 12; .@i++ ) {
		specialeffect EF_BEGINSPELL3,AREA,"pi_r"+.@i;
		sleep 100;
	}
	return;

OnInit:
	getmapxy(.@m$, .x, .y, BL_NPC, "effect#tw");
	if ($pi_current_betcheck == 0)
		$pi_current_betcheck = gettimetick(2);
	bindatcmd "pRoulette",strnpcinfo(3)+"::OnGM", 99, 99;
	end;

OnGM:
	message strcharinfo(0), "Those are special commands that only ADMs and GMs can use.";
	switch(select("Cancel", "^0000FFStart Roulette^000000", "^0000FFOpen Limited-time Shop^000000", "^0000FFReset my entrances^000000")) {
		case 1:
			end;
		case 2:
			donpcevent strnpcinfo(3)+"::OnRoulette";
			end;
		case 3:
			donpcevent "Ling Ling#tw::OnOpen";
			end;
		case 4:
			pi_entered = 0;
			end;
	}
}

gonryun,178,133,0	script	effect#tw	HIDDEN_wARP_NPC,{
	if (@twtalk > gettimetick(2))
		end;
	.@m$ = F_Rand("Did you bet on me?", "Good luck!");
	npctalk strnpcinfo(1) +" : " + .@m$, "", bc_self;
	@twtalk = gettimetick(2) + 5;
	end;

OnWinnerChosen:
	$pi_winner_name$ = strnpcinfo(1);
	end;

OnWinAnimation:
	if (strnpcinfo(1) == $pi_winner_name$) {
		for( .@i = 1; .@i < 5; .@i++ ) {
			specialeffect EF_ENHANCE;
			sleep 3000;
		}
	}
	end;
}

gonryun,173,136,3	duplicate(effect#tw)	Poporing#tw::pi_r1	POPORING
gonryun,175,139,3	duplicate(effect#tw)	Poring#tw::pi_r2	4_PORING
gonryun,178,140,3	duplicate(effect#tw)	Golden Poring#tw::pi_r3	GOLDPORING
gonryun,181,139,3	duplicate(effect#tw)	Poring#tw::pi_r4	4_PORING
gonryun,183,136,3	duplicate(effect#tw)	Poporing#tw::pi_r5	POPORING
gonryun,184,133,3	duplicate(effect#tw)	Poring#tw::pi_r6	4_PORING
gonryun,183,130,3	duplicate(effect#tw)	Drops#tw::pi_r7	DROPS
gonryun,181,128,3	duplicate(effect#tw)	Poring#tw::pi_r8	4_PORING
gonryun,178,127,3	duplicate(effect#tw)	Poporing#tw::pi_r9	POPORING
gonryun,175,128,3	duplicate(effect#tw)	Poring#tw::pi_r10	4_PORING
gonryun,173,130,3	duplicate(effect#tw)	Drops#tw::pi_r11	DROPS
gonryun,172,133,3	duplicate(effect#tw)	Poring#tw::pi_r12	4_PORING

You will have to change the Item/Quest IDs and some other numbers to match you database since I don't know the ones you're using.
Example, find and change those lines:

	.@ticket_id = 7350; //placeholder
	.@quest_id = 3040; //placeholder
	.map$ = "pay_fild04"; // Event Map
	.@token_id = 909; // placeholder
	.@max_bet = 20; // How many tokens can the player bet maximum

 

In your server folder there's a file named \db\(pre-)re\mob_db.yml.
It contains most data on monsters.
Example:

  - Id: 1242
    AegisName: MARIN
    Name: Marin
    Level: 37
    Hp: 987
    BaseExp: 279
    JobExp: 230
    Attack: 69
    Attack2: 14
    Defense: 32
    MagicDefense: 8
    Str: 24
    Agi: 5
    Vit: 10
    Int: 5
    Dex: 30
    Luk: 15
    AttackRange: 1
    SkillRange: 10
    ChaseRange: 12
    Size: Medium
    Race: Plant
    Element: Water
    ElementLevel: 2
    WalkSpeed: 400
    AttackDelay: 1872
    AttackMotion: 672
    DamageMotion: 480
    Ai: 01
    Drops:
      - Item: Sticky_Mucus
        Rate: 750
      - Item: Blue_Herb
        Rate: 38
      - Item: Candy
        Rate: 175

Elemental resistance is defined by the Element Level of the monster.
A Marin with Element Waler 3 has more resistance against fire than a Marin with Element Water 2.
So find the line ElementLevel: 2 and increase the number (1~4) to increase the monster resistances.

Link to comment
Share on other sites

  • 4 weeks later...

  • Group:  Forum Moderator
  • Topic Count:  44
  • Topics Per Day:  0.01
  • Content Count:  896
  • Reputation:   117
  • Joined:  05/23/12
  • Last Seen:  

I want to keep attention that this is the German section. Therefore u have to write German and can additional add the English language to.

 

Ich möchte darauf hinweisen, dass dies der deutsche Bereich ist. Deshalb hast du Deutsch zu schreiben und du kannst zusätzlich die Englische Sprache hinzufügen.

 

Rynbef~

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
Reply to this topic...

×   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...