Jump to content

Mabuhay

Members
  • Posts

    446
  • Joined

  • Last visited

  • Days Won

    34

Posts posted by Mabuhay

  1. 5 hours ago, BFPkiller said:

    Hi there!

    I'd like to ask some help regarding a script that i use.

    It's the Wheel of Fortune script and i'd like to add a limit per use per ip, once a day.
    Can someone help me out on that ?

    Much appreciated!

    
    -	script	Wheel_of_Fortune	FAKE_NPC ,{
    
    OnInit:
    	disablenpc("Wheel of Fortune#Main");
    //	disablenpc("Hussein#WOF");
    	.Eventname$ = "[Wheel Of Fortune]";
    	end;
    
    OnClock1500:
    OnClock1630:
    OnClock1900:
    OnClock2200:
    
    OnStart:
    	.Start = true;
    	announce(sprintf("%s : The event will begin in 1 minute, in the Secret Gambling Room.", .Eventname$), bc_blue | bc_all);
    	initnpctimer();
    	end;
    
    OnTimer60000: // 1 min
    	enablenpc("Wheel of Fortune#Main");
    //	enablenpc("Hussein#WOF");
    	announce(sprintf("%s : Come to Secret Gambling Room and test your luck", .Eventname$), bc_blue | bc_all);
    	end;
    
    OnTimer1800000: // 30 mins
    	announce(sprintf("%s : One more minute, do your last spin!", .Eventname$), bc_blue | bc_all);
    	end;
    
    OnTimer1860000: // 31 mins
    OnEndEvent:
    	.Start = false;
            announce(sprintf("%s : The event is now over.", .Eventname$), bc_blue | bc_all);
    	stopnpctimer();
    	disablenpc("Wheel of Fortune#Main");
    //	disablenpc("Hussein#WOF");
    	end;
    
    OnCommand:
    	if (.@atcmd_numparameters != 1) {
    		dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00);
    		dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    		end;
    	}
    
    	if (.@atcmd_parameters$[0] == "start") {
    		if (!.Start)
    			donpcevent(sprintf("%s::OnStart", strnpcinfo(NPC_NAME)));
    		else {
    			dispbottom("The Wheel of Fortune has already started.", 0x00FF00);
    			dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    		}
    	} else if (.@atcmd_parameters$[0] == "end") {
    		if (.Start)
    			donpcevent(sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME)));
    		else {
    			dispbottom("The Wheel of Fortune is not active.", 0x00FF00);
    			dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    		}
    	} else {
    		dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00);
    		dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    	}
    	end;
    }
    
    vip_lounge,145,60,3	script	Wheel of Fortune#Main	2_SLOT_MACHINE,{
    	
    OnTalk:
    	if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) {
    		mes(.Eventname$);
    		mes("You are out of Zeny");
    		mes("and have no more");
    		mes("free spins. Come back");
    		mes("next time for more!");
    		close();
    	}
    
    	.@mes$ = (#freewheelfortunespin > 0) ? sprintf(", but you, my friend, have %d free spin%s!", #freewheelfortunespin, (#freewheelfortunespin == 1) ? "" : "s") : ".";
    	cutin("aca_salim02", 2);
    	addtimer(1, sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME)));
    	mes(.Eventname$);
    	mes("Do you want to spin the wheel?");
    	mes(sprintf("It costs ^FF0000%d Zeny^000000 to play%s", .Zeny_Cost, .@mes$));
    	next();
    
    	while (true) {
    		if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0)
    			callsub(S_End);
    		switch (select(
    			(#freewheelfortunespin > 0) ? sprintf("Yes! Use free spin! (%d left)", #freewheelfortunespin) : "",
    			(Zeny >= .Zeny_Cost ) ? sprintf("Yes! Use Zeny. (costs %dz)", .Zeny_Cost) : "",
    			"No (Leave)"
    		)) {
    		// pay with free spin
    		case 1:
    			if (#freewheelfortunespin > 0) {
    				if ((#freewheelfortunespin -= 1) < 0)
    					#freewheelfortunespin = 0;
    				callsub(S_Spin);
    			} else
    				callsub(S_End);
    			break;
    
    		// Pay with zeny
    		case 2:
    			if (Zeny >= .Zeny_Cost) {
    			    Zeny -= .Zeny_Cost;
    				callsub(S_Spin);
    			} else {
    				cutin("aca_salim02", 2);
    				mes(.Eventname$);
    				mes("Awww, you don't have enough to gamble...");
    				mes(" ");
    				mes("Have you ever heard?");
    				mes("'Money isn't all that matters' Got it?");
    				mes("Byeeeeeeeeeeeeee ;)");
    				callsub(S_End);
    			}
    			break;
    
    		default:
    			callsub(S_End);
    		}
    	}
    
    // Wheel spin animation
    S_Spin:
    	.@Sector = rand(.Sector_Range[0], .Sector_Range[1]);
    	.@Display = .@Sector * 2 - 1;
    	.@Speed = .Spin_Speed;
    	
    	for (.@i = 0; .@i < .nbTurns; .@i++) {
    		.@b = .Cutin_Range[0];
    		while (.@b <= .Cutin_Range[1]) {
    			cutin(sprintf("%s%d", .Cutin$, .@b), 4);
    			sleep2(.@Speed);
    			.@b++;
    			.@Speed += 1; // not ++, because  you may want to adjust the stopping +1 +2 +3
    		}
    	}
    	
    	.@b = .Cutin_Range[0];
    	while (.@b < .@Display) {
    		cutin(sprintf("%s%d", .Cutin$, .@b), 4);
    		sleep2(.@Speed);
    		.@b++;
    	}
    
    	cutin(sprintf("%s%d", .Cutin$, .@b), 4);
    
    	if (.Prize_ID[.@Sector] == -1) {
    		// Free spin
    		if (.Sound_Effects)
    			soundeffect("wheel_jackpot.wav", 0);
    		announce(sprintf("[%s] : Wow, %dx more Free spins!!!", .Eventname$, .Prize_Qty[.@Sector]), bc_blue | bc_self);
    		#freewheelfortunespin = #freewheelfortunespin == 0 ? .Prize_Qty[.@Sector] : #freewheelfortunespin + .Prize_Qty[.@Sector];
    	} else if (.Prize_ID[.@Sector] == 0) {
    		// Nothing
    		if (.Sound_Effects)
    			soundeffect("wheel_lost.wav", 0);
    		announce(sprintf("[%s] : Awwww, no luck in your gamble, more luck in love...", .Eventname$), bc_blue | bc_self);
    	} else { 
    		// Item
    		if (.Sound_Effects)
    			soundeffect("wheel_won.wav", 0);
    		announce(sprintf("[%s] : %dx %s - enjoy your prize!", .Eventname$, .Prize_Qty[.@Sector], getitemname(.Prize_ID[.@Sector])), bc_blue | bc_self);
    		getitem(.Prize_ID[.@Sector], .Prize_Qty[.@Sector]);
    	}
    
    	sleep2(1000);
    	if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) {
    		mes(.Eventname$);
    		mes("You are out of Zeny");
    		mes("and have no more");
    		mes("free spins. Come back");
    		mes("next time for more!");
    		close();
    	}
    	return;
    	
    S_End:
    	close2();
    OnEndEvent:
    	cutin("", 255);
    	end;
    	
    OnInit:
    	.Eventname$ = "Wheel Of Fortune";
    
    	bindatcmd("wof", "Wheel_of_Fortune::OnCommand", 99,  false);
    
    	.Spin_Speed = 50; // What is the base spin speed? (ms)
    	.nbTurns = 2; // How many times the arrow makes a complete turn, before entering the stopping routine
    	.Zeny_Cost = 100000; // How much zeny does it cost for a spin?
    	.Sound_Effects = true; // Enable sound effects? (true/false)
    
    	// You must have a total of 10 prizes. DO NOT remove 0 or -1 from the array and do not
    	// change their order.
    	setarray(.Prize_ID[1], -1, 6046, 13277, 12187,   617,   607, 603,   604, 0,  23093);
    	setarray(.Prize_Qty[1], 2,     1,     1,     1,     3,     3,     3,     3, 0,     1);
    
    	// Don't touch below
    	.Cutin$ = "WheelOfFortune_";
    	setarray(.Sector_Range, 1, 10); // Sector range
    	setarray(.Cutin_Range, 0, 19); // Cutin range
    	end;
    }

     

    Not tested.

    -	script	Wheel_of_Fortune	FAKE_NPC ,{
    
    OnInit:
    	disablenpc("Wheel of Fortune#Main");
    //	disablenpc("Hussein#WOF");
    	.Eventname$ = "[Wheel Of Fortune]";
    	end;
    
    OnClock1500:
    OnClock1630:
    OnClock1900:
    OnClock2200:
    
    OnStart:
    	.Start = true;
    	announce(sprintf("%s : The event will begin in 1 minute, in the Secret Gambling Room.", .Eventname$), bc_blue | bc_all);
    	initnpctimer();
    	end;
    
    OnTimer60000: // 1 min
    	enablenpc("Wheel of Fortune#Main");
    //	enablenpc("Hussein#WOF");
    	announce(sprintf("%s : Come to Secret Gambling Room and test your luck", .Eventname$), bc_blue | bc_all);
    	end;
    
    OnTimer1800000: // 30 mins
    	announce(sprintf("%s : One more minute, do your last spin!", .Eventname$), bc_blue | bc_all);
    	end;
    
    OnTimer1860000: // 31 mins
    OnEndEvent:
    	.Start = false;
            announce(sprintf("%s : The event is now over.", .Eventname$), bc_blue | bc_all);
    	stopnpctimer();
    	disablenpc("Wheel of Fortune#Main");
    //	disablenpc("Hussein#WOF");
    	end;
    
    OnCommand:
    	if (.@atcmd_numparameters != 1) {
    		dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00);
    		dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    		end;
    	}
    
    	if (.@atcmd_parameters$[0] == "start") {
    		if (!.Start)
    			donpcevent(sprintf("%s::OnStart", strnpcinfo(NPC_NAME)));
    		else {
    			dispbottom("The Wheel of Fortune has already started.", 0x00FF00);
    			dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    		}
    	} else if (.@atcmd_parameters$[0] == "end") {
    		if (.Start)
    			donpcevent(sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME)));
    		else {
    			dispbottom("The Wheel of Fortune is not active.", 0x00FF00);
    			dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    		}
    	} else {
    		dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00);
    		dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00);
    	}
    	end;
    }
    
    vip_lounge,145,60,3	script	Wheel of Fortune#Main	2_SLOT_MACHINE,{
    	
    OnTalk:
    	.@today = atoi( gettimestr( "%Y%m%d", 9 ) );
    	if ( $wof_today != .@today ) {
    		$wof_today = .@today;
    		deletearray $wof_charip$;
    	}
    	if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) {
    		mes(.Eventname$);
    		mes("You are out of Zeny");
    		mes("and have no more");
    		mes("free spins. Come back");
    		mes("next time for more!");
    		close();
    	}
    	.@mes$ = (#freewheelfortunespin > 0) ? sprintf(", but you, my friend, have %d free spin%s!", #freewheelfortunespin, (#freewheelfortunespin == 1) ? "" : "s") : ".";
    	cutin("aca_salim02", 2);
    	addtimer(1, sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME)));
    	mes(.Eventname$);
    	mes("Do you want to spin the wheel?");
    	mes(sprintf("It costs ^FF0000%d Zeny^000000 to play%s", .Zeny_Cost, .@mes$));
    	next();
    
    	while (true) {
    		if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0)
    			callsub(S_End);
    		switch (select(
    			(#freewheelfortunespin > 0) ? sprintf("Yes! Use free spin! (%d left)", #freewheelfortunespin) : "",
    			(Zeny >= .Zeny_Cost ) ? sprintf("Yes! Use Zeny. (costs %dz)", .Zeny_Cost) : "",
    			"No (Leave)"
    		)) {
    		// pay with free spin
    		case 1:
    			if (#freewheelfortunespin > 0) {
    				if ((#freewheelfortunespin -= 1) < 0)
    					#freewheelfortunespin = 0;
    				callsub(S_Spin);
    			} else
    				callsub(S_End);
    			break;
    
    		// Pay with zeny
    		case 2:
    			if (Zeny >= .Zeny_Cost) {
    			    Zeny -= .Zeny_Cost;
    				callsub(S_Spin);
    			} else {
    				cutin("aca_salim02", 2);
    				mes(.Eventname$);
    				mes("Awww, you don't have enough to gamble...");
    				mes(" ");
    				mes("Have you ever heard?");
    				mes("'Money isn't all that matters' Got it?");
    				mes("Byeeeeeeeeeeeeee ;)");
    				callsub(S_End);
    			}
    			break;
    
    		default:
    			callsub(S_End);
    		}
    	}
    
    // Wheel spin animation
    S_Spin:
    	.@Sector = rand(.Sector_Range[0], .Sector_Range[1]);
    	.@Display = .@Sector * 2 - 1;
    	.@Speed = .Spin_Speed;
    	.@charip$ = getcharip();
    	if ( countinarray($wof_charip$,.@charip$) ) {
    		mes "You can only spin one IP per day.";
    		close;
    	} else
    		$wof_charip$[getarraysize($wof_charip$)] = .@charip$;
    	
    	for (.@i = 0; .@i < .nbTurns; .@i++) {
    		.@b = .Cutin_Range[0];
    		while (.@b <= .Cutin_Range[1]) {
    			cutin(sprintf("%s%d", .Cutin$, .@b), 4);
    			sleep2(.@Speed);
    			.@b++;
    			.@Speed += 1; // not ++, because  you may want to adjust the stopping +1 +2 +3
    		}
    	}
    	
    	.@b = .Cutin_Range[0];
    	while (.@b < .@Display) {
    		cutin(sprintf("%s%d", .Cutin$, .@b), 4);
    		sleep2(.@Speed);
    		.@b++;
    	}
    
    	cutin(sprintf("%s%d", .Cutin$, .@b), 4);
    
    	if (.Prize_ID[.@Sector] == -1) {
    		// Free spin
    		if (.Sound_Effects)
    			soundeffect("wheel_jackpot.wav", 0);
    		announce(sprintf("[%s] : Wow, %dx more Free spins!!!", .Eventname$, .Prize_Qty[.@Sector]), bc_blue | bc_self);
    		#freewheelfortunespin = #freewheelfortunespin == 0 ? .Prize_Qty[.@Sector] : #freewheelfortunespin + .Prize_Qty[.@Sector];
    	} else if (.Prize_ID[.@Sector] == 0) {
    		// Nothing
    		if (.Sound_Effects)
    			soundeffect("wheel_lost.wav", 0);
    		announce(sprintf("[%s] : Awwww, no luck in your gamble, more luck in love...", .Eventname$), bc_blue | bc_self);
    	} else { 
    		// Item
    		if (.Sound_Effects)
    			soundeffect("wheel_won.wav", 0);
    		announce(sprintf("[%s] : %dx %s - enjoy your prize!", .Eventname$, .Prize_Qty[.@Sector], getitemname(.Prize_ID[.@Sector])), bc_blue | bc_self);
    		getitem(.Prize_ID[.@Sector], .Prize_Qty[.@Sector]);
    	}
    
    	sleep2(1000);
    	if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) {
    		mes(.Eventname$);
    		mes("You are out of Zeny");
    		mes("and have no more");
    		mes("free spins. Come back");
    		mes("next time for more!");
    		close();
    	}
    	return;
    	
    S_End:
    	close2();
    OnEndEvent:
    	cutin("", 255);
    	end;
    	
    OnInit:
    	.Eventname$ = "Wheel Of Fortune";
    
    	bindatcmd("wof", "Wheel_of_Fortune::OnCommand", 99,  false);
    
    	.Spin_Speed = 50; // What is the base spin speed? (ms)
    	.nbTurns = 2; // How many times the arrow makes a complete turn, before entering the stopping routine
    	.Zeny_Cost = 100000; // How much zeny does it cost for a spin?
    	.Sound_Effects = true; // Enable sound effects? (true/false)
    
    	// You must have a total of 10 prizes. DO NOT remove 0 or -1 from the array and do not
    	// change their order.
    	setarray(.Prize_ID[1], -1, 6046, 13277, 12187,   617,   607, 603,   604, 0,  23093);
    	setarray(.Prize_Qty[1], 2,     1,     1,     1,     3,     3,     3,     3, 0,     1);
    
    	// Don't touch below
    	.Cutin$ = "WheelOfFortune_";
    	setarray(.Sector_Range, 1, 10); // Sector range
    	setarray(.Cutin_Range, 0, 19); // Cutin range
    	end;
    }

     

    • Upvote 1
  2. Item/Variable(Points) reward function for beginners or lazy!


    Hi, there! this functions is ideal for newbie scripters or just someone who wants to "add" or "modify" scripts with rewards. It may be item or variables such as points or stuff...

    This function can also be used by experienced scripters who are lazy to code and stuff xD. Easy to use and all ?

     

    Here are the sample npcs on how to use it. (included in the downloadable files)

    // Sample NPC for using F_Reward_Item and F_Reward_Var
    // For beginners.
    prontera,150,180,0	script	F_Reward_Test	123,{
    	mes "What do you want to get?";
    	switch(select("Item","Points")) {
    	case 1:	
    		F_Reward_Item("501:10,502:5,503:10");
    		break;
    	case 2: 
    		F_Reward_Var("#CASHPOINTS","Cash Points",100); 
    		break;
    	}
    	mes "Enjoy!";
    	close;
    }
    
    // This is just a pseudo-code, you can understand what I mean by this xD
    // For advance scripters. You can do something like.
    prontera,150,180,0	script	F_Reward_Test	123,{
    	mes "get items";
    	close2;
    	F_Reward_Item(.itemlist$);
    	end;
    OnInit:
    	.itemlist$ = "501:10,502:5,503:10";
    	end;
    }

     

    I hope this will help! Keep those upvotes coming to motivate me moooore ? 

    Enjoy the rest of the day!


    • Submitter
    • Submitted
      11/28/2019
    • Category
    • Video
    • Content Author
      Mabuhay

     

    • Upvote 1
    • MVP 1
  3. Replace the minimap in data/texture/.. /minimap/<mapname>.bmp to a blank one if i get your question correctly.

    This is not a script problem tho.

    Edit: not sure if the folder is called minimap or just map.. Just check.. Im on mobile so i can't say where exactly. 

  4. Hey guys! I'd like to showcase a script I've been busy for a while. Game mechanics is based on RWC. There are quite a lot of stuffs I modified from it tho. Here are the mechanics of the script :
     

    Spoiler
    • Flexible in-game setter :
      • Set the variables via @setwc command by a GM Account.
      • You may set the ff in-game :
        • Players per team
        • Party vs Party or Guild vs Guild
        • No same class / job
        • Register with Party/Guild leader only
        • Points to win
        • Mins per round in-game
        • Map selection ( map rotation / random )
        • item Reward ( enable or disable )
        • Var Reward ( enable or disable )
        • Gepard Check upon registration
        • Announce time when looking for contender
        • Cooldown
    • Spectator modesrc mod ]
      • No chat and skill while spectating.
      • Cannot be hit and cant hit
      • Cannot be seen (same with @hide)
      • Free walk for participants (no cell block)
    • Event Consumable NPC [ Event consumable patch ]
      • I used this update I posted not so long ago.
    • Guild Ranker ( only on GvG Settings )
    • Entrance to and Exit from lobby NPC
    • Healer NPC
    • Repair NPC
    • Storage NPC

    Maps used are 2012rwc_01-04 maps since I dont know how to make custom map xD.
    Anyways, here is a video on how it work in-game for better understanding.

    Spoiler

     

    To-Do:

    • Add registration cooldown after match [ Added ]
    • Add points as reward [ Added ]
    • Disable [Guild Skill] Emergency Call while on Arena [cancelled - Already available in Extended BG's MF_NOECALL ]
    • Upvote 7
    • Love 2
    • MVP 1
    • Like 1
  5. 23 minutes ago, Bringer said:

    i check that part but on my offline server i cant get that debug msg but on my online server i get that

    Based on how I understand, its just a warning tho. And reading that part doesnt seem to harm the server in any ways.. May be used for debugging.. But for whatever reason that it is not working consistently on both of your servers, it is best answered by Easycore.

  6. I think its just an information for debug. If vend_loot / item is 0, it shouldnt open.
    otherwise, you just can comment that part out?

    @@ -7153,6 +7153,13 @@ void clif_openvendingreq(struct map_session_data* sd, int num)
     
     	nullpo_retv(sd);
     
    +	// Vending shouldn't open if vend_loot is 0 and extended vending is enabled [Easycore]
    +	// ShowWarning("vend loot = %d\n", sd->vend_loot);
    +	if (battle_config.extended_vending && sd->vend_loot == 0) {
    +		sd->state.prevend = 0;
    +		return;
    +	}

    Not sure tho. Just wait for easycore to reply.

    • Like 1
  7. [FREE] Event Manager


    Ehh since my event scripts are piling up, I decided to make an Event Manager

    // Basic Event Manager
    // By Mabuhay
    /*-=-=-=-=-=-=-=-=-=-=-=-=-=-
     Currently added are the ff :
     {#} NAME - "NPC_NAME" 
     [1] Bombring - "Event_Bombring"
     [2] Dice - "Event_Dice"
     [3] Last Man Standing - "Event_LMS"
     [4] Novice V Zombie - "Event_NvZ"
     [5] Poring Catcher - "Poring_Catcher"
     [6] Poring Hunter - "Poring_Hunter" (Added 12-15-2019)
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
    // For easier management of Event NPCs
    /////////////////////////////////////
    //            NOTE:                //
    /////////////////////////////////////
    // I don't support any modifications unless I want to.
    // But if you want to change things especially the rewards,
    // Please refer to my F_Reward Functions
    // https://rathena.org/board/files/file/4068-itemvariablepoints-reward-function-for-beginners-or-lazy/
    // You should be able to easily change the rewards
    // If you have basic scripting knowledge

    Header Settings:

    OnInit:
    	// 1 = item reward
    	// 2 = variable/cashpoints reward
    	// If you want to set item and variable/cashpoints rewards, do 1|2.
    	// If you only want 1, just choose between 1 or 2
    	$event_options = 1|2;
    	
    	// If item reward enabled
    	// What items will be rewarded
    	setarray $event_item_reward,
    		501, 10,
    		502, 5;
    		
    	// If variable reward.. set to your variable.
    	// If cashpoints.. set to #CASHPOINTS / #KAFRAPOINTS (Free Cash Points)
    	$event_var$ = "#EVENTVARIABLE";
    	
    	// Variable name?
    	// If cash points, set to Cash Points
    	// If your custom var, set to the name of that thing.
    	$event_var_name$ = "Custom Points";
    	
    	// How much points gain if #VAR / #CASHPOINTS / #KAFRAPOINTS?
    	$event_var_gain = 1;
    	
    	$event_item_arr = getarraysize($event_item_reward);
    	
    	// @eventstart for GM
    	bindatcmd "eventstart", strnpcinfo(0)+"::OnStart",60,60;
    	
    	// @eventjoin
    	bindatcmd "eventjoin", strnpcinfo(0)+"::OnJoinEvent";
    	end;

     

    You may now use @eventstart for GMs to select which ones to start.

    @eventjoin for players to enter and see which event is currently active

     

    Event timers / Clock are to be set here :

    	// OnClock<hour><minute>: donpcevent "<npc_name>::OnStart";
    	OnClock0000: donpcevent "Event_Bombring::OnStart"; end; //----- 12 mn
    	OnClock0100: donpcevent "Event_Dice::OnStart"; end;
    	OnClock0200: donpcevent "Event_LMS::OnStart"; end;
    	OnClock0300: donpcevent "Poring_Catcher::OnStart"; end;
    	OnClock0400: donpcevent "Event_NvZ::OnStart"; end;
    	OnClock0500: donpcevent "Poring_Hunter::OnStart"; end;
    	OnClock0600: donpcevent "Event_Bombring::OnStart"; end; //----- 6 am
    	OnClock0700: donpcevent "Event_Dice::OnStart"; end;
    	OnClock0800: donpcevent "Event_LMS::OnStart"; end;
    	OnClock0900: donpcevent "Poring_Catcher::OnStart"; end;
    	OnClock1000: donpcevent "Event_NvZ::OnStart"; end;
    	OnClock1100: donpcevent "Poring_Hunter::OnStart"; end;
    	OnClock1200: donpcevent "Event_Bombring::OnStart"; end; //----- 12 nn
    	OnClock1300: donpcevent "Event_Dice::OnStart"; end;
    	OnClock1400: donpcevent "Event_LMS::OnStart"; end;
    	OnClock1500: donpcevent "Poring_Catcher::OnStart"; end;
    	OnClock1600: donpcevent "Event_NvZ::OnStart"; end;
    	OnClock1700: donpcevent "::OnStart"; end;
    	OnClock1800: donpcevent "Event_Bombring::OnStart"; end; //----- 6 pm
    	OnClock1900: donpcevent "Event_Dice::OnStart"; end;
    	OnClock2000: donpcevent "Event_LMS::OnStart"; end;
    	OnClock2100: donpcevent "Poring_Catcher::OnStart"; end;
    	OnClock2200: donpcevent "Event_NvZ::OnStart"; end;
    	OnClock2300: donpcevent "Poring_Hunter::OnStart"; end; //----- 11 pm

    Currently I just alternately activate events per hour. You can change the event time as you wish. You may choose any of the ff:

    OnClock<hour><minute>:
    OnMinute<minute>:
    OnHour<hour>:
    On<weekday><hour><minute>:
    OnDay<month><day>:

     

    I hope this helps. If you want me to add more, just PM me on an event script that needs to be updated. Thank you. ?

    Compatibility is your responsibility.
    No backward Compatibility Support.

    Enjoy!

    NOTE : If you find this useful, please click the Upvote button to motivate me to do stuffs like this ? And you are welcome!


    • Submitter
    • Submitted
      11/23/2019
    • Category
    • Video
    • Content Author
      Mabuhay

     

    • Upvote 8
    • Love 1
    • MVP 2
    • Like 3
  8. 1 hour ago, nomade said:

    Hello everyone!
    I wonder if is can enable upe from a certain level only if you complete a certain quest.

    For example: maximum level is 1000 and the player can freely level up to level 150, after that level he will have to do a quest to level up 151, 152, 153....
    Each level will need to do a quest to enable the up.

     

     

    Then for the quest, just do something like this 

    BaseLevel++; // 1 + level

    when completing the quest ( you have to do this manually to all quest npcs that you want to give a level upon completion )

  9. 3 hours ago, Surefirer said:

    Hello,

    Is there any way to limit a specific amount of experience recieve from killing MVP and monster in a specific map? Say the player will only get 50% of regualr experience from killing MVP and monster in a specific map. I have a MVP monster map, and the player just kill the MVP to leveling, its way to fast. So I want to limit or reduce the experience from this map without change other file. Thanks.

    Check doc/mapflag.txt..

    *bexp	<rate>
    *jexp	<rate>
    
    Changes the base and job experience rates on a map. Supports negative values to reduce EXP
    rates as well.
    <rate> is given as a percentage (i.e. 100 = 1x EXP). This takes into account the modifiers
    'base_exp_rate' and 'job_exp_rate' in '/conf/battle/exp.conf'.

     

  10. Event Consumables (a Telma patch update)


    So, I decided to update this patch :

     

    However, I didnt realize that this is already available just right after I finished updating it from this :

     

    But... I gonna release this anyways... But made some modifications...

    So, what I did was I made my own consumable named 'Event'. These consumables can only be used on maps with "event_consume" mapflags.

    This patch is NOT to be diffed if you have Extended BG Pre-installed or If you are planning to install it in the future ESPECIALLY IF YOU DON'T KNOW A SINGLE THING ON SRC. This is likely for Servers who dont/wont have the Extended BG but wants to have this feature. Unless you know what you're doing. You can actually add this to Extended BG by Easycore. I intentionally coded it similarly and avoided conflicts to it for people who wants to add this but have Extended BG installed in their servers.

    Enjoy! I hope this will be to any use of any of you.

    Compatibility is your responsibility.

    No backward compatibility support.


     

    • Upvote 1
  11. 6 hours ago, Yuno said:

    Hello to the Rathena community!

    I apologize in advance if I post in the wrong place, I am not English and I have a little trouble with the language, as you can see I write to you using google translation.

     

    My problem being that one of the players of my private server used the command @autotrade (or @at) having open Guildstorage ... By reconnecting the next day, he can not reopen his Gstorage at all. It tells him that he is already open and that he has to wait for it to be closed by another user to be able to open it. Except he's alone in guild. I try to look in my SQL tables but no way to find a solution to solve the problem. In short, my server considers that the Gstorage is constantly open when it is not. The player just did @at while his Gstorage was open.

     

    Has anyone ever had the trouble? And if so how did you solve it? Any help puts precious.

     

    Cordially, Yuno.

    Tested and I can confirm to this..

    This may not be a solution but more of a prevention for future incidents. Tho untested, this should work.

    Go to atcommand.cpp.

    Look for this :

    ACMD_FUNC(autotrade) {
    	nullpo_retr(-1, sd);
    
    	if( map_getmapflag(sd->bl.m, MF_AUTOTRADE) != battle_config.autotrade_mapflag ) {
    		clif_displaymessage(fd, msg_txt(sd,1179)); // Autotrade is not allowed on this map.
    		return -1;
    	}
    
    	if( pc_isdead(sd) ) {
    		clif_displaymessage(fd, msg_txt(sd,1180)); // You cannot autotrade when dead.
    		return -1;
    	}
    
    	if( !sd->state.vending && !sd->state.buyingstore ) { //check if player is vending or buying
    		clif_displaymessage(fd, msg_txt(sd,549)); // "You should have a shop open to use @autotrade."
    		return -1;
    	}

    Place this under 

    	if (sd->state.storage_flag == 1) {
    		clif_displaymessage(fd, "Close your storage before using @autotrade."); 
    		return -1;
    	}
    	
    	if (sd->state.storage_flag == 2) {
    		clif_displaymessage(fd, "Close your guild storage before using @autotrade."); 
    		return -1;
    	}
    	
    	if (sd->state.storage_flag == 3) {
    		clif_displaymessage(fd, "Close your storage before using @autotrade."); 
    		return -1;
    	}

     

     

    • Upvote 1
  12. I dont understand the script but this may help you.

    add something like 

    if ( !getcharid(1) ) { // Checks if player have no party
    	mes "You dont have any party.";
    	close;
    }

    add it to some places where you want to put this check.

     

  13. 11 minutes ago, Krypt said:

    @Mabuhay What fix should this change give ?

     

    		if (sd->status.shield && battle_getcurrentskill(&sd->bl) == LG_SHIELDSPELL)
    			unit_skillcastcancel(&sd->bl, 0); // Cancel Shield Spell if player swaps shields.

    That is just for Royal Guard's Shield Spell. When players switch shield, it should cancell shield spell ( as what the description says )

     

    Try this part at pc.cpp.. didnt test but commenting it out may get you what you want. @Krypt

    	if(sd->status.shield <= 0) { // Skills requiring a shield
    		const enum sc_type scs_list[] = {
    			SC_AUTOGUARD,
    			SC_DEFENDER,
    			SC_REFLECTSHIELD,
    			SC_REFLECTDAMAGE
    		};
    		for (i = 0; i < ARRAYLENGTH(scs_list); i++)
    			if(sd->sc.data[scs_list[i]])
    				status_change_end(&sd->bl, scs_list[i], INVALID_TIMER);
    	}

     

  14. 47 minutes ago, Krypt said:

    Is there any way to keep the buff when changing shield ? I tried to remove this but there is a bug on it that if you don't have shield then you can still cast shield skills like autoguard etc..

    https://github.com/rathena/rathena/commit/d612788ed79f37851d6a3ce83561e922abf550fe

    check ..\db\pre-re(re)\skill_require_db.txt

    249,0,0,12:14:16:18:20:22:24:26:28:30,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//CR_AUTOGUARD

    remove the shield and put 0

     

    Edit: Shoot, didnt read properly, my bad. Ignore me please UwU

  15. 6 minutes ago, Takuyakii said:

    Good day is it possible be like this

     

    shop that currency is 7959 or any item

    this is my shop

    
    -	itemshop	misc	-1,7959,12790:15


    PS: i already used search engine and found out many but if only possible to make this code into that,

     

     

     

    Check doc/script_commands.txt

    <map name>,<x>,<y>,<facing>%TAB%itemshop%TAB%<NPC Name>%TAB%<sprite id>,<costitemid>{:<discount>},<itemid>:<price>{,<itemid>:<price>...}

     

    Answer is yes.
     

  16. I believe you missed putting the instance id? I dunno if putting 0 would work but if your instance id is not 0, i will really throw an error. The instance id created in the mapserver shown is 1..so... That may be the cause. 

    *instance_announce <instance id>,"<text>",<flag>{,<fontColor>{,<fontType>{,<fontSize>{,<fontAlign>{,<fontY>}}}}

     

     

    Personally i use mapannounce instead. It is easier and less confusing to use. Just call the instance map name and proper instance id. 

  17. 28 minutes ago, MatheusRDS said:

    Strange, is not generating any error in map-server, my rathena is a bit outdated, it was downloaded in 2018, does it have anything to do?

    Im not sure, maybe or maybe not..

    When killing the correct poring, this should trigger :

    announce strcharinfo(0)+" won the Poring Catcher Event!",bc_all,0xFF7F50;

     

    if it doesnt trigger, there might be a problem with your rathena files.

×
×
  • Create New...