Jump to content

Cyborg

Members
  • Posts

    54
  • Joined

  • Last visited

Posts posted by Cyborg

  1. On 11/30/2023 at 10:47 AM, hendra814 said:

    are you want more than 10 round, if yes, change this at oninit part

    set .Rounds,10;

    okay i will try thanks for your advice i will feedback later if work

    this not working

  2. 17 minutes ago, hendra814 said:

    you want the npc hide after 10 round

    the script already run like that at this part

    if (.RoundCount>=.Rounds) {
    		setnpcdisplay "Disguise Event",795;
    		set .RoundCount,0; set .Change,0; set .EventON,0;
    		setnpctimer 0; stopnpctimer;
    		hideonnpc strnpcinfo(3); // this is will hide the npc after all round finished
    		npctalk "Disguise Event : Thank you all for playing. That was the last round of the Disguise Event. Come play again later.";
    		end;
    	}

    if you want the npc not hide remove that part.

    if I erase him, he won't hide because I have to hide, but his round will end in 10 rounds

  3. I'm going to sleep here, I don't want to hide after 10 rounds, I hope you can help me here, how can he stop after 10 rounds and hide again

     

     

    //===== rAthena Script =======================================
    //= Disguise Event
    //===== By: ==================================================
    //= GmOcean
    //===== Current Version: =====================================
    //= 5.1
    //===== Compatible With: =====================================
    //= rAthena Project
    //===== Description: =========================================
    //= Guess a monster name correctly for prizes.
    //= 
    //= NOTE: Requires PCRE library installed.
    //===== Additional Comments: =================================
    //= 5.0 Last update by GmOcean.
    //= 5.1 Cleaned and standardized, mostly. [Euphy]
    //============================================================
    
    prontera,160,155,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 amount 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 monster'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:
    	hideonnpc strnpcinfo(3);
    	set .EventON,0;
    	set .Wait,0;
    	set .Winner,0;
    	set .ResetCounter,0;
    	set .Rounds,10;
    	set .Prize,512;
    	set .PrizeAmt,1;
    	set .Rule,1;
    	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;
    	set .BlackList$, "1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168," + 
    	    "1171,1172,1173,1181,1187,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,2119,2120,2121,2123,2124,2125,1496,";
    	end;
    OnClock0000:
    OnClock0200:
    OnClock0400:
    OnClock0600:
    OnClock0800:
    OnClock1000:
    OnClock1200:
    OnClock1400:
    OnClock1600:
    OnClock1800:
    OnClock2000:
    OnClock2200:
    	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 "Disguise Event : You took too long to guess what I was. Please wait 10 seconds while I disguise again.";
    	specialeffect EF_DETECT2;
    	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;
    	hideoffnpc strnpcinfo(3);
    	set .Timer,0; stopnpctimer;
    	setnpctimer 0; initnpctimer;
    iDisguise:
    	if (.Rule==1) {
    		set .Winner,0;
    		set .Monster,1000+rand(1,995);
    		if (compare(","+.BlackList$+"," , ","+.Monster+",")) 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;
    		hideonnpc strnpcinfo(3);
    		npctalk "Disguise Event : 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;
    }

     

  4. paano po siya bagohin na single npc lang sa isang coordinate po salamat po sa tutulong.

     

    JIKmqR8.jpg

     

    //===== rAthena Script =====================================
    //= Vendor Control
    //===== By: ================================================
    //= Original by Emistry
    //= Rewrite by AnnieRuru
    //===== Current Version: ===================================
    //= 2.1r
    //===== Compatible With: ===================================
    //= rAthena 2019-2-10
    //===== Description: =======================================
    //= Vendors only vend on certain coordinate, looks tidy :P
    //===== Topic ==============================================
    //= https://rathena.org/board/topic/117737-error-vendinghelp/
    //===== Additional Comments: ===============================
    //= Revert back to use warp
    //==========================================================
    
    prontera,156,178,4	script	Vending Helper	4_F_JPN2,{
    	mes "["+ strnpcinfo(NPC_NAME_VISIBLE) +"]";
    	if ( !getskilllv( "MC_VENDING" ) ) {
    		mes "You dont have ^0055FFVending Skill^000000.";
    		close;
    	}
    	mes "Select a slot and start vending.";
    	while ( true ) {
    		.@menu$ = .@currentpage ? "Previous Page:" : ":";
    		.@pageindex = .@currentpage * .slotperpage;
    		for ( .@i = 0; .@i < .slotperpage && .@pageindex + .@i < .count; ++.@i ) {
    			if ( !getmapxy( .@map$, .@x, .@y, BL_NPC, "#vend_slot"+( .@pageindex + .@i ) ) && getareausers( .map$, .@x, .@y, .@x, .@y ) )
    				.@menu$ += "Slot No."+( .@pageindex + .@i +1 )+" - ^FF0000[Unavailable]^000000:";
    			else
    				.@menu$ += "Slot No."+( .@pageindex + .@i +1 )+" - ^00CC00[Available]^000000:";
    		}
    		if ( .@currentpage != .maxpage )
    			.@menu$ = .@menu$ + "Next Page";
    		.@pick = select( .@menu$ ) -1;
    		if ( !.@pick )
    			{ --.@currentpage; }
    		else if ( .@pick == .slotperpage +1 )
    			{ ++.@currentpage; }
    		else
    			break;
    	}
    	.@s =  .@currentpage * .slotperpage + .@pick -1 ;
    	if ( !getmapxy( .@map$, .@x, .@y, BL_NPC, "#vend_slot"+ .@s ) && getareausers( .map$, .@x, .@y, .@x, .@y ) ) {
    		mes " ";
    		mes "This slot is ^FF0000[UnAvailable]^000000.";
    		close;
    	}
    	warp .@map$, .@x, .@y;
    	hideonnpc "#vend_slot"+ .@s;
    	donpcevent "#vend_slot"+ .@s +"::OnCheckAvailable";
    	end;
    OnInit:
    	setbattleflag "min_npc_vendchat_distance", 0;
    //	======================= Configuration HERE =============================
    	.map$ = "prontera"; // map
    	setarray .@x, 150,153,156,159,162; // x coordinates
    	setarray .@y, 175,172,169,166,163,160,157,154,151,148,145,142,139,136,133; // y coordinates
    	.slotperpage = 20; // display how many slots per page (prevent making the menu too long)
    
    	freeloop true;
    	setcell .map$, 0,0, 500,500, cell_novending, true;
    	.@x_size = getarraysize( .@x );
    	.@y_size = getarraysize( .@y );
    	for ( .@i = 0; .@i < .@y_size; ++.@i ) {
    		for ( .@j = 0; .@j < .@x_size; ++.@j ) {
    			if ( checkcell( .map$, .@x[.@j], .@y[.@i], cell_chkpass ) ) {
    				movenpc "#vend_slot"+ .count, .@x[.@j], .@y[.@i];
    				setcell .map$, .@x[.@j], .@y[.@i], .@x[.@j], .@y[.@i], cell_novending, false;
    				if ( getareausers( .map$, .@x[.@j], .@y[.@i], .@x[.@j], .@y[.@i] ) ) {
    					hideonnpc "#vend_slot"+ .count;
    					donpcevent "#vend_slot"+ .count +"::OnCheckAvailable";
    				}
    				++.count;
    			}
    		}
    	}
    	.maxpage = .count / .slotperpage + ( .count % .slotperpage > 0 ) -1;
    //	debugmes "Vendor NPC needed -> "+ .count;
    	end;
    }
    
    -	script	vend_slot	FAKE_NPC,{
    	mes "[Vending Slot]";
    	if ( !getskilllv( "MC_VENDING" ) ) {
    		mes "You dont have ^0055FFVending Skill^000000.";
    		close;
    	}
    	getmapxy .@map$, .@x, .@y, BL_NPC;
    	if ( getareausers( .@map$, .@x, .@y, .@x, .@y ) ) {
    		mes "Someone already using this slot";
    		close;
    	}
    //	unitwalk getcharid(3), .@x, .@y;
    	warp strcharinfo(3), .@x, .@y;
    	mes "Spot : ^777777Available^000000";
    	mes "^0055FF[ Vending Area Rules ]^000000";
    	mes "^FF0000 ~ Use proper Shop Name.^000000";
    	mes "^777777Player who failed to follow these rules will be punished.^000000";
    	hideonnpc strnpcinfo(0);
    	donpcevent strnpcinfo(0)+"::OnCheckAvailable";
    	close;
    OnCheckAvailable:
    	sleep 10000;
    	getmapxy .@map$, .@x, .@y, BL_NPC;
    	while ( getareausers( .@map$, .@x, .@y, .@x, .@y ) )
    		sleep 10000;
    	hideoffnpc strnpcinfo(0);
    	end;
    }
    
    // Add more if needed.
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot0	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot1	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot2	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot3	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot4	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot5	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot6	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot7	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot8	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot9	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot10	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot11	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot12	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot13	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot14	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot15	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot16	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot17	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot18	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot19	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot20	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot21	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot22	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot23	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot24	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot25	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot26	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot27	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot28	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot29	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot30	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot31	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot32	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot33	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot34	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot35	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot36	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot37	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot38	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot39	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot40	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot41	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot42	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot43	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot44	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot45	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot46	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot47	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot48	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot49	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot50	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot51	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot52	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot53	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot54	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot55	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot56	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot57	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot58	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot59	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot60	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot61	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot62	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot63	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot64	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot65	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot66	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot67	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot68	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot69	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot70	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot71	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot72	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot73	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot74	4_BULLETIN_BOARD2
    prontera,0,0,4	duplicate(vend_slot)	#vend_slot75	4_BULLETIN_BOARD2

     

  5. i have a error for recompile i do no why missing here a code o simbol

    can you help me to fix it

    edrSUEX.jpg

    itemmap diff patch

    Index: doc/sample/npc_getitem_map.txt
    ===================================================================
    --- doc/sample/npc_getitem_map.txt	(revision 0)
    +++ doc/sample/npc_getitem_map.txt	(working copy)
    @@ -0,0 +1,24 @@
    +// Sample NPC to test the custom getitem_map script command
    +// Script and command created by Xantara
    +prontera,156,170,3	script	getitem_map test	120,{
    +	mes "input item id";
    +	next;
    +	input .@id;
    +	mes "input item amount";
    +	next;
    +	input .@amt;
    +	mes "input type:";
    +	mes "0=everyone, 1=party, 2=guild 3=bg";
    +	next;
    +	input .@t;
    +	//getitem_map .@id,.@amt,strcharinfo(3),.@t,((.@t==1) ? getcharid(1) : (.@t==2) ? getcharid(2) : getcharid(4));
    +	switch(.@t)
    +	{
    +		case 1:	set .@type_id, getcharid(1);	break;
    +		case 2:	set .@type_id, getcharid(2);	break;
    +		case 3:	set .@type_id, getcharid(4);	break;
    +	}
    +	getitem_map .@id,.@amt,strcharinfo(3),.@t,.@type_id;
    +	mes "done";
    +	close;
    +}
    Index: doc/sample/npc_getitem_map.txt
    ===================================================================
    --- doc/sample/npc_getitem_map.txt	(revision 0)
    +++ doc/sample/npc_getitem_map.txt	(working copy)
    
    Property changes on: doc/sample/npc_getitem_map.txt
    ___________________________________________________________________
    Added: svn:eol-style
    ## -0,0 +1 ##
    +native
    \ No newline at end of property
    Index: doc/script_commands.txt
    ===================================================================
    --- doc/script_commands.txt	(revision 17062)
    +++ doc/script_commands.txt	(working copy)
    @@ -4259,6 +4259,34 @@
     
     ---------------------------------------
     
    +*getitem_map <item id>,<amount>,"<mapname>"{,<type>,<ID for Type>};
    +
    +This command will give a specific amount of specified items to the players on the specified map. 
    +
    +Works similarly to getitem but for multiple players on certain map.
    +Negative ID numbers also apply. However item name is currently not supported.
    +
    +Those parameters that are different from 'getitem' are:
    +	mapname     - Map name of the players to give the item(s) too
    +	type        - Optional.
    +				  Type	0 = everyone on the map (default) 
    +						1 = specific party and their members on the map
    +						2 = specific guild and their members on the map
    +						3 = specific battleground team and their members on the map
    +	ID for Type - Only needed if type is not 0
    +				  If type = 1, ID is Party ID
    +				  If type = 2, ID is Guild ID
    +				  If type = 3, ID is Battleground ID
    +
    +If type is given, party members who are offline or are not on the specific map do not get the item.
    +Same for guild members. If BG ID is not found, it will not give to any players.
    +
    +This transaction is logged if the log script generated transactions option is enabled.
    +
    +Created by Xantara
    +
    +---------------------------------------
    +
     *getnameditem <item id>,<character name|character ID>;
     *getnameditem "<item name>",<character name|character ID>;
     
    Index: src/map/atcommand.c
    ===================================================================
    --- src/map/atcommand.c	(revision 17062)
    +++ src/map/atcommand.c	(working copy)
    @@ -1297,8 +1297,117 @@
     }
     
     /*==========================================
    - *
    + * 0 = @itemmap <item id/name> {<amount>}
    + * 1 = @itemmap1 <item id/name> <amount>, <party name>
    + * 2 = @itemmap2 <item id/name> <amount>, <guild name>
    + * [Xantara]
      *------------------------------------------*/
    +ACMD_FUNC(itemmap)
    +{
    +	char item_name[100], party_name[NAME_LENGTH], guild_name[NAME_LENGTH];
    +	int amount, get_type = 0, flag = 0, get_count, i, map;
    +	struct item it;
    +	struct item_data *item_data;
    +	struct party_data *p;
    +	struct guild *g;
    +	struct s_mapiterator *iter = NULL;
    +	struct map_session_data *pl_sd = NULL;
    +
    +	nullpo_retr(-1, sd);
    +	
    +	memset(item_name, '\0', sizeof(item_name));
    +	memset(party_name, '\0', sizeof(party_name));
    +	memset(guild_name, '\0', sizeof(guild_name));
    +
    +	if (strstr(command, "1") != NULL)
    +		get_type = 1;
    +	else if (strstr(command, "2") != NULL)
    +		get_type = 2;
    +
    +	if (!message || !*message || 
    +		get_type == 0 && sscanf(message, "\"%99[^\"]\" %d", item_name, &amount) < 1 
    +					  && sscanf(message, "%99s %d", item_name, &amount) < 1 )
    +	{
    +		clif_displaymessage(fd, "Please, enter an item name/id (usage: @itemmap <item name or ID> {amount}).");
    +		return -1;
    +	}
    +	if ( get_type == 1 && sscanf(message, "\"%99[^\"]\" %d, %23[^\n]", item_name, &amount, party_name) < 2 
    +					   && sscanf(message, "%99s %d, %23[^\n]", item_name, &amount, party_name) < 2 )
    +	{
    +		clif_displaymessage(fd, "Please, enter an item name/id (usage: @itemmap1 <item id/name> <amount>, <party name>).");
    +		return -1;
    +	}
    +	if ( get_type == 2 && sscanf(message, "\"%99[^\"]\" %d, %23[^\n]", item_name, &amount, guild_name) < 2 
    +					   && sscanf(message, "%99s %d, %23[^\n]", item_name, &amount, guild_name) < 2 )
    +	{
    +		clif_displaymessage(fd, "Please, enter an item name/id (usage: @itemmap2 <item id/name> <amount>, <guild name>).");
    +		return -1;
    +	}
    +
    +	if ((item_data = itemdb_searchname(item_name)) == NULL &&
    +	    (item_data = itemdb_exists(atoi(item_name))) == NULL)
    +	{
    +		clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name.
    +		return -1;
    +	}
    +
    +	if (amount <= 0)
    +		amount = 1;	
    +
    +	map = sd->bl.m;
    +	
    +	memset(&it,0,sizeof(it));
    +	it.nameid = item_data->nameid;
    +	if(!flag)
    +		it.identify = 1;
    +	else
    +		it.identify = itemdb_isidentified(item_data->nameid);
    +
    +	if (!itemdb_isstackable(item_data->nameid))
    +		get_count = 1;
    +	else
    +		get_count = amount;
    +
    +	switch(get_type)
    +	{
    +		case 1:
    +			if( (p = party_searchname(party_name)) == NULL )
    +			{
    +				clif_displaymessage(fd, msg_txt(96)); // Incorrect name or ID, or no one from the party is online.
    +				return -1;
    +			}
    +			for( i=0; i < MAX_PARTY; i++ )
    +				if( p->data[i].sd && map == p->data[i].sd->bl.m )
    +					pc_getitem_map(p->data[i].sd,it,amount,get_count,LOG_TYPE_COMMAND);
    +			break;
    +		case 2:
    +			if( (g = guild_searchname(guild_name)) == NULL )
    +			{
    +				clif_displaymessage(fd, msg_txt(94)); // Incorrect name/ID, or no one from the guild is online.
    +				return -1;
    +			}
    +			for( i=0; i < g->max_member; i++ )
    +				if( g->member[i].sd && map == g->member[i].sd->bl.m )
    +					pc_getitem_map(g->member[i].sd,it,amount,get_count,LOG_TYPE_COMMAND);
    +			break;
    +		default:
    +			iter = mapit_getallusers();
    +			for (pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter)) {
    +				if( map != pl_sd->bl.m )
    +					continue;
    +				pc_getitem_map(pl_sd,it,amount,get_count,LOG_TYPE_COMMAND);
    +			}
    +			mapit_free(iter);
    +			break;
    +	}
    +
    +	clif_displaymessage(fd, msg_txt(18)); // Item created.
    +	return 0;
    +}
    +
    +/*==========================================
    + * itemreset
    + *------------------------------------------*/
     ACMD_FUNC(itemreset)
     {
     	int i;
    @@ -8849,6 +8958,10 @@
     		ACMD_DEF(heal),
     		ACMD_DEF(item),
     		ACMD_DEF(item2),
    +		ACMD_DEF(itemmap),
    +		ACMD_DEF2("itemmap1", itemmap),
    +		ACMD_DEF2("itemmap2", itemmap),
    +		ACMD_DEF2("itemmap3", itemmap),
     		ACMD_DEF(itemreset),
     		ACMD_DEF(clearstorage),
     		ACMD_DEF(cleargstorage),
    Index: src/map/pc.c
    ===================================================================
    --- src/map/pc.c	(revision 17062)
    +++ src/map/pc.c	(working copy)
    @@ -4009,6 +4009,32 @@
     	return 1;
     }
     
    +/*------------------------------------------
    + * pc_getitem_map [Xantara]
    + *------------------------------------------*/
    +int pc_getitem_map(struct map_session_data *sd,struct item it,int amt,int count,e_log_pick_type log_type)
    +{
    +	int i, flag;
    +
    +	nullpo_ret(sd);
    +
    +	for ( i = 0; i < amt; i += count )
    +	{
    +		if ( !pet_create_egg(sd,it.nameid) )
    +		{ // if not pet egg
    +			if ( flag = pc_additem(sd,&it,count,log_type) )
    +			{
    +				clif_additem(sd, 0, 0, flag);
    +				if( pc_candrop(sd,&it) )
    +					map_addflooritem(&it,count,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
    +			}
    +		}
    +	}
    +
    +	log_pick_pc(sd, log_type, -amt, &sd->status.inventory[i]);
    +	return 1;
    +}
    +
     /*==========================================
      * Check if item is usable.
      * Return:
      
    Index: src/map/pc.h
    ===================================================================
    --- src/map/pc.h	(revision 17062)
    +++ src/map/pc.h	(working copy)
    @@ -725,6 +725,7 @@
     int pc_putitemtocart(struct map_session_data *sd,int idx,int amount);
     int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount);
     int pc_cartitem_amount(struct map_session_data *sd,int idx,int amount);
    +int pc_getitem_map(struct map_session_data *sd,struct item it,int amt,int count,e_log_pick_type log_type); // [Xantara]
     
     int pc_takeitem(struct map_session_data*,struct flooritem_data*);
     int pc_dropitem(struct map_session_data*,int,int);
     
    Index: src/map/script.c
    ===================================================================
    --- src/map/script.c	(revision 17062)
    +++ src/map/script.c	(working copy)
    @@ -6474,6 +6474,122 @@
     	return 0;
     }
     
    +/*====================================================================
    +  [Xantara]
    +     *getitem_map <item id>,<amount>,"<mapname>"{,<type>,<ID for Type>};
    +       type: 0=everyone, 1=party, 2=guild, 3=bg
    + =====================================================================*/
    +static int buildin_getitem_map_sub(struct block_list *bl,va_list ap)
    +{
    +	struct item it;
    +	struct guild *g = NULL;
    +	struct party_data *p = NULL;
    +
    +	int amt,count;
    +	TBL_PC *sd = (TBL_PC *)bl;
    +
    +	it    = va_arg(ap,struct item);
    +	amt   = va_arg(ap,int);
    +	count = va_arg(ap,int);
    +
    +	pc_getitem_map(sd,it,amt,count,LOG_TYPE_SCRIPT);
    +
    +	return 0;
    +}
    +
    +BUILDIN_FUNC(getitem_map)
    +{
    +	struct item it;
    +	struct guild *g = NULL;
    +	struct party_data *p = NULL;
    +	struct battleground_data *bg = NULL;
    +	struct script_data *data;
    +
    +	int m,i,get_count,nameid,amount,flag=0,type=0,type_id=0;
    +	const char *mapname;
    +
    +	data = script_getdata(st,2);
    +	get_val(st,data);
    +	if( data_isstring(data) )
    +	{
    +		const char *name = conv_str(st,data);
    +		struct item_data *item_data = itemdb_searchname(name);
    +		if( item_data )
    +			nameid = item_data->nameid;
    +		else
    +			nameid = UNKNOWN_ITEM_ID;
    +	}
    +	else
    +		nameid = conv_num(st,data);
    +
    +	if( (amount = script_getnum(st,3)) <= 0 )
    +		return 0;
    +
    +	mapname = script_getstr(st,4);
    +	if( (m = map_mapname2mapid(mapname)) < 0 )
    +		return 0;
    +
    +	if( script_hasdata(st,5) ){
    +		type    = script_getnum(st,5);
    +		type_id = script_getnum(st,6);
    +	}
    +
    +	if(nameid < 0) {
    +		nameid = itemdb_searchrandomid(-nameid);
    +		flag = 1;
    +	}
    +	
    +	if( nameid <= 0 || !itemdb_exists(nameid) ){
    +		ShowError("buildin_getitem_map: Nonexistant item %d requested.\n", nameid);
    +		return 1; //No item created.
    +	}
    +
    +	memset(&it,0,sizeof(it));
    +	it.nameid = nameid;
    +	if(!flag)
    +		it.identify = 1;
    +	else
    +		it.identify = itemdb_isidentified(nameid);
    +
    +	if (!itemdb_isstackable(nameid))
    +		get_count = 1;
    +	else
    +		get_count = amount;
    +
    +	switch(type)
    +	{
    +		case 1:
    +			if( (p = party_search(type_id)) != NULL )
    +			{
    +				for( i=0; i < MAX_PARTY; i++ )
    +					if( p->data[i].sd && m == p->data[i].sd->bl.m )
    +						pc_getitem_map(p->data[i].sd,it,amount,get_count,LOG_TYPE_SCRIPT);
    +			}
    +			break;
    +		case 2:
    +			if( (g = guild_search(type_id)) != NULL )
    +			{
    +				for( i=0; i < g->max_member; i++ )
    +					if( g->member[i].sd && m == g->member[i].sd->bl.m )
    +						pc_getitem_map(g->member[i].sd,it,amount,get_count,LOG_TYPE_SCRIPT);
    +			}
    +			break;
    +		case 3:
    +			if( (bg = bg_team_search(type_id)) != NULL )
    +			{
    +				for( i=0; i < MAX_BG_MEMBERS; i++ )
    +					if( bg->members[i].sd && m == bg->members[i].sd->bl.m )
    +						pc_getitem_map(bg->members[i].sd,it,amount,get_count,LOG_TYPE_SCRIPT);
    +			}
    +			break;
    +		default:
    +			map_foreachinmap(buildin_getitem_map_sub,m,BL_PC,it,amount,get_count);
    +			break;
    +	}
    +
    +	return 0;
    +}
    +
     /*==========================================
      * rentitem <item id>,<seconds>
      * rentitem "<item name>",<seconds>
    @@ -17364,6 +17480,7 @@
     	BUILDIN_DEF(getitem,"vi?"),
     	BUILDIN_DEF(rentitem,"vi"),
     	BUILDIN_DEF(getitem2,"viiiiiiii?"),
    +	BUILDIN_DEF(getitem_map,"iis??"),
     	BUILDIN_DEF(getnameditem,"vv"),
     	BUILDIN_DEF2(grouprandomitem,"groupranditem","i"),
     	BUILDIN_DEF(makeitem,"visii"),

     

  6. 6 hours ago, Winterfox said:

    I am not sure if I really understood you 100% but if I got you right, you want your script to work like this:
     

    ma_in01,49,99,3	script	Fallen Hero#main	651,{
    	cutin("3rd_rune_knight", 2);
    	.@remaining_minutes  = (#next_fallen_gift - gettimetick(2)) / 60;
    
    	if(#next_fallen_gift > 0 && .@remaining_minutes > 0) {
    		if(.@remaining_minutes > 60)
    			.@remaining_hours = .@remaining_minutes / 60;
    
    		mes "[ ^0000FFFallen Hero^000000 ]";
    		mes "You have to wait ^FF0000" + ((.@remaining_hours > 0) ? F_InsertPlural(.@remaining_hours, "hour") : F_InsertPlural(.@remaining_minutes, "minute")) + "^000000 until you can get your next gift.";
    		close3;
    	}
    
    	mes "[ ^0000FFFallen Hero^000000 ]";
    	mes "Hello " + strcharinfo(0) + ".";
    	mes "I give you a free gift every day.";
    	mes "Let's hope that you will get something good today.";
    	next;
    	mes "[ ^0000FFFallen Hero^000000 ]";
    	mes "Let me see what I gift have for you...";
    
    	.@pick = rand(1, .items_sum);
    	for(.@i = 0; .@i < getarraysize(.items); .@i += 2) {
    			.@pick -= .items[.@i + 1];
    			if(.@pick <= 0) {
    				.@item = .items[.@i];
    				break;
    			}
    	}
    
        getitem(.@item, 1);
    	announce(strcharinfo(0) + " has obtained " + getitemname(.@item) + " from the Fallen Hero!", bc_all, 0x00FFFF, FW_NORMAL, 15);
    	mes "Here take this " + getitemname(.@item) + ".";
    	#next_fallen_gift = gettimetick(2) + .next_gift_duration;
    	next;
    	mes "[ ^0000FFFallen Hero^000000 ]";
    	mes "Come back later to receive a new gift.";
    	close3;
    
    	OnInit:
            // duration until the next gift can be gotten.
    		.next_gift_duration = 86400;
    
            // item chances <<item id>, <chance>>, <<item id>, <chance>>...
    		setarray(.items, 6232, 10, 6228, 10, 13710, 10, 12916, 10, 5184, 10, 5199, 10, 5209, 10, 5762, 10, 5467, 10, 12884, 20, 12885, 20, 12886, 20, 12887, 20, 35078, 20, 13698, 70, 13697, 70, 14175, 70, 14587, 70, 12920, 70, 12921, 70, 14192, 70, 16504, 70, 12922, 70, 7776, 70, 12412, 70, 35111, 70);
    
    		for(.@i = 0; .@i < getarraysize(.items); .@i += 2)
    			.items_sum += .items[.@i + 1];
    }

     

    he is already working but how to change him that will save time then they can exchange items here?

  7. 13 minutes ago, hendra814 said:

    after this script

    getitem FHitem,1;

    put

    .@remain = 0;

     

    	if (rand(100) < 10) setarray .@i[0],6232,6228,13710,12916,5184,5199,5209,5762,5467; // 10% chance
    	else if (rand(100) < 20) setarray .@i[0],12884,12885,12886,12887,35078; // 20% chance
    	else setarray .@i[0],13698,13697,14175,14587,12920,12921,14192,16504,12922,7776,12412,35111; // 70% chance
    	set FHitem,.@i[rand(getarraysize(.@i))];
    	getitem FHitem,1;
    	.@remain = 0;

    like this?

×
×
  • Create New...