Jump to content
  • 0

Disguise Npc Wrong?


Techno

Question


  • Group:  Members
  • Topic Count:  11
  • Topics Per Day:  0.00
  • Content Count:  34
  • Reputation:   0
  • Joined:  07/02/12
  • Last Seen:  

This NPC Just keeps on Runing None Stop can someone set it to Run every 4 hours and stop not keep on going thanks

//===== rAthena Script =======================================
//= Disguise Event
//===== By: ==================================================
//= GmOcean
//===== Current Version: =====================================
//= 5.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Additional Comments: =================================
//= 5.0 Last update by GmOcean.
//= 5.1 Cleaned and standardized, mostly. [Euphy]
//============================================================
prontera,156,160,4 script Disguise Event 795,{
// Currently set to run every two hours.
// To change times, edit the OnClock labels below.
set .@GMLevel,60; // GM level required to access NPC.
set .@n$,"[^0000FFDisguise NPC^000000]";
if (getgmlevel()>=.@GMLevel) {
 mes .@n$;
 mes "Select an option.";
 next;
 switch(select("Turn ON/OFF Event:Event Settings")) {
  case 1:
mes .@n$;
if ($@EventON) {
 mes "The Event is currently: [^0000FFON^000000]";
 mes "Would you like to turn it OFF?"; }
else {
 mes "The Event is currently: [^FF0000OFF^000000]";
 mes "Would you like to turn it ON?"; }
if(select("Yes:No")==2) close;
if ($@EventON) {
 set $@EventON,0; set $@Timer,0;
 setnpctimer 0; stopnpctimer;
 announce "A GM has decided to turn the Disguise Event off. As a result no further prizes will be given.",bc_map | bc_blue;
 deletepset 1;
 setnpcdisplay "Disguise Event",795;
 close; }
set $@EventON,1; set $@Timer,1; setnpctimer 0; initnpctimer;
set $@ResetCounter,$@ResetCounter+1;
announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
close;
  case 2:
mes .@n$;
mes "Pick a setting to modify.";
next;
switch(select("Monster Display:Number of Rounds:Prize Settings")) {
 case 1:
  setarray .@r$[0],"Disguise as all monsters.","Disguise as MVPs only.";
  mes .@n$;
  mes "Choose a disguise rule.";
  next;
  set $Rule, select(implode(.@r$,":"));
  mes .@n$;
  mes "The Disguise Rule has been set:";
  mes "  > ^0055FF"+.@r$[$Rule-1]+"^000000";
  close;
 case 2:
  mes .@n$;
  mes "Input the number of rounds you want the event to last.";
  mes "Current number: [^0000FF"+$Rounds+"^000000]";
  next;
  input .@Rounds;
  set $Rounds,.@Rounds;
  mes .@n$;
  mes "The number of rounds has been changed to "+$Rounds+".";
  close;
 case 3:
  mes .@n$;
  mes "Input the Item ID of the prize given each round.";
  mes "Current item: [^0000FF"+getitemname($Prize)+"^000000] (ID #"+$Prize+")";
  next;
  input .@Prize;
  mes .@n$;
  if (getitemname(.@Prize)=="" || getitemname(.@Prize)=="null") {
   mes "That item does not exist. Please try again.";
   close; }
  set $Prize,.@Prize;
  mes "Input the amount to be given.";
  next;
  input .@amount;
  mes .@n$;
  if (.@amount<=0 || .@amount>=10000) {
   mes "That amount is invalid. Using default ammount of 1.";
   set .@amount,1;
   next;
   mes .@n$; }
  set $PrizeAmt,.@amount;
  mes "The Prize has been changed successfully.";
  mes "Prize: "+$PrizeAmt+"x [^0000FF"+getitemname($Prize)+"^000000]";
  close;
}
 }
}
if ($@EventON) end;
mes .@n$;
mes "Welcome.";
mes "How may I be of assistance?";
if(select("Information:Nothing, just passing through.")==2) close;
next;
mes .@n$;
mes "This event is quite simple.";
mes "At the start of the event, I will";
mes "disguise myself as a random";
mes "monster. You have to shout";
mes "that monter's name out loud.";
next;
mes "If you are correct, you will receive";
mes "a prize. If not, keep trying!";
mes "That's all that there is to this event.";
close;
OnInit:
set $@EventON,0;
set $@Wait,0;
set $@Winner,0;
set $@ResetCounter,0;
set $Points,$Points;
if (!$Rounds) set $Rounds,10;
else set $Rounds,$Rounds;
if (!$Prize) set $Prize,512;
else set $Prize,$Prize;
if (!$PrizeAmt) set $PrizeAmt,1;
else set $PrizeAmt,$PrizeAmt;
if ($Rule) set $Rule,1;
else set $Rule,$Rule;
setarray $@MVP[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,
			   1389,1399,1418,1492,1502,1511,1583,1623,1630,1646,1647,1648,1649,1650,1651,1658,1685,1688,
   1708,1719,1734,1751,1768,1779,1785,1802,1832,1871,1874,1885,1917,1980,2022,2068,2087,2131,
   2156,2165;
setarray $@BlackList[0], 1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168,1171,1172,1173,1181,1210,1217,1218,
  1222,1223,1224,1225,1226,1227,1228,1233,1284,1407,1411,1414,1495,1501,1900,1996,2000,2001,
  2002,2003,2004,2005,2006,2007,2011,2012,2025,2028,2029,2030,2031,2032,2033,2034,2035,2036,
  2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,
  2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2075,2076,2077,2078,2079,
  2080,2081,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,
  2099,2100,2101,2012,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,
  2117,2118;
setarray $@BlackList2[0],2119,2120,2121,2123,2124,2125,1496;
end;
OnClock0000:
OnClock0400:
OnClock0800:
OnClock1200:
OnClock1600:
OnClock2000:
OnClock2400:
set $@ResetCounter,$@ResetCounter+1;
set $@EventON,1;
set $@Timer,1;
set $@Wait,1;
announce "The Disguise Event will begin in 3 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
setnpctimer 0;
initnpctimer;
end;
OnTimer10000:
if ($@Timer || $@Change) end;
set $@Wait,0;
goto iDisguise;
end;
OnTimer30000:
if ($@Timer) end;
set $@Change,0;
setnpcdisplay "Disguise Event",795;
npctalk "You took too long to guess what I was. Please wait 10 seconds while I disguise again.";
specialeffect 725;
set $MonsterName$,"";
deletepset 1;
stopnpctimer;
setnpctimer 0;
initnpctimer;
end;
OnTimer60000:
if ($@Timer!=1) end;
announce "The Disguise Event will begin in 2 minutes.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
end;
OnTimer120000:
if ($@Timer!=1) end;
announce "The Disguise Event will begin 1 minute.",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
end;
OnTimer180000:
if ($@Timer!=1) end;
announce "The Disguise Event has begun!",bc_all | bc_blue;
announce "The Event is being held in Prontera.",bc_all | bc_blue;
set $@Timer,0; stopnpctimer;
setnpctimer 0; initnpctimer;
goto iDisguise;
end;
iDisguise:
if ($Rule==1) {
 set $@Winner,0;
 set $@Monster,1000+rand(1,995);
 for(set .@BL,0; .@BL<getarraysize($@BlackList); set .@BL,.@BL+1)
  if ($@Monster==$@BlackList[.@BL] || $@Monster==$@BlackList2[.@BL]) goto iDisguise;
 if ($@Monster==$@LastMonster) goto iDisguise;
 set $@LastMonster,$@Monster;
 set $MonsterName$,getmonsterinfo($@Monster,0); }
if ($Rule==2) {
 set $@Winner,0;
 set $@Monster,rand(49);
 set $MonsterName$,getmonsterinfo($@MVP[$@Monster],0); }
deletepset 1;
defpattern 1,"([^:]+):.\\s*"+$MonsterName$+".*", "iCorrect";
activatepset 1;
if ($Rule==1) setnpcdisplay "Disguise Event",$@Monster;
if ($Rule==2) setnpcdisplay "Disguise Event",$@MVP[$@Monster];
set $@Change,1;
setnpctimer 0;
end;
iCorrect:
if ($@Winner) {
 dispbottom "Someone has already won this round."; end; }
set $@Winner,1;
set $@RoundCount,$@RoundCount+1;
deletepset 1;
activatepset 1;
getitem $Prize,$PrizeAmt;
announce strcharinfo(0)+" is correct! I was disguised as: "+$MonsterName$+"",bc_map | bc_blue;
if ($@RoundCount>=$Rounds) {
 setnpcdisplay "Disguise Event",795;
 set $@RoundCount,0; set $@Change,0; set $@EventON,0;
 setnpctimer 0; stopnpctimer;
 npctalk "Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
 end; }
setnpcdisplay "Disguise Event",795;
set $@Change,0;
setnpctimer 0;
end;
}

And i want it to do only 10rounds

bump

Edited by Arcenciel
Codeboxed
Link to comment
Share on other sites

1 answer to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  94
  • Topics Per Day:  0.02
  • Content Count:  2192
  • Reputation:   252
  • Joined:  11/11/11
  • Last Seen:  

You input the number of rounds you want VIA the NPC itself in-game:

case 2:
	  mes .@n$;
	  mes "Input the number of rounds you want the event to last.";
	  mes "Current number: [^0000FF"+$Rounds+"^000000]";
	  next;
	  input .@Rounds;
	  set $Rounds,.@Rounds;

From what I see, it does begin every 4 hours:

OnClock0000:
OnClock0400:
OnClock0800:
OnClock1200:
OnClock1600:
OnClock2000:
OnClock2400:

But what you want is so that the NPC checks the area to see if players are participating? You can't really do that unless you make it check the current map (in which it's placed on) to see if there are 1> players. However, doing so will cause the NPC to continue on even if it counts 1+ players on the map who are just (walking through) if you set the Event in a town or field, dungeon etc.

Can use any of these:


---------------------------------------

*getmapusers("<map name>")

This function will return the number of users currently located on the specified
map.

Currently being used in the PVP scripts to check if a PVP room is full of not,
if the number returned it equal to the maximum allowed it will not let you
enter.

---------------------------------------

*getareausers("<map name>",<x1>,<y1>,<x2>,<y2>)

This function will return the count of connected characters which are located
within the specified area - an x1/y1-x2/y2 square on the specified map.

This is useful for maps that are split into many buildings, such as all the
"*_in" maps, due to all the shops and houses.

---------------------------------------

for your preference.

On a side note, please make your script in a

 [./code] tag since it has more than 10 lines.
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...