Jump to content

Mabuhay

Members
  • Posts

    446
  • Joined

  • Last visited

  • Days Won

    34

Posts posted by Mabuhay

  1. Emperium Breaker Ladder + Points + Shop


    The title says it all..

    This would record a player's emp break count

    GM can easily reset the table

    This method is more optimized because the data is properly indexed on a table.

    Added emp breaker point shop - Account bounded..

    Enjoy!

     

    Installation instructions :

    Spoiler
    
    // For WoE First Edition
    // open npc/guild/agit_main.txt
    
    ---------------------------------------------
    Look for this part: 
    ---------------------------------------------
    // The Emperium has been broken.
    OnAgitBreak:
    	set .@GID,getcharid(2);
    	// Show and log error if an unguilded player breaks the Emperium. (Should NEVER happen)
    	if (.@GID <= 0) {
    		set .@notice$,"Character "+strcharinfo(0)+" ("+getcharid(0)+") broke the Emperium in Castle: "+strnpcinfo(2)+" while guildless. No data will be saved and Emperium respawned.";
     		logmes .@notice$; debugmes .@notice$;
    		donpcevent "Agit#"+strnpcinfo(2)+"::OnStartArena";
    		end;
    	}
    
    ---------------------------------------------
     Add these below..
     ---------------------------------------------
    	query_sql("INSERT INTO `breaker_ladder` SET `char_id` = '"+getcharid(0)+"', `count` = '1' ON DUPLICATE KEY UPDATE `count` = `count`+1");
    	#EMPBREAKERPTS += $@empbreakpoints;
    
    // For WoE Second Edition
    // open npc/guild2/agit_main_se.txt
    
    ---------------------------------------------
    Look for this part: 
    ---------------------------------------------
    
    OnStartArena:
    	set .@GID,getcharid(2);
    	set .@region$, (compare(strnpcinfo(4),"arug"))?"Valfreyja":"Nithafjoll";
    	// Lower castle Economy
    	set .@Economy,getcastledata(strnpcinfo(4),CD_CURRENT_ECONOMY)-5;
    	if (.@Economy < 0) set .@Economy, 0;
    	setcastledata strnpcinfo(4),CD_CURRENT_ECONOMY,.@Economy;
    	// Lower Castle Defence
    	set .@Defence,getcastledata(strnpcinfo(4),CD_CURRENT_DEFENSE)-5;
    	if (.@Defence < 0) set .@Defence, 0;
    	setcastledata strnpcinfo(4),CD_CURRENT_DEFENSE,.@Defence;
    	// Set new owner
    	setcastledata strnpcinfo(4),CD_GUILD_ID,.@GID;
    	// Clear castle's data.
    	for(set .@i,CD_INVESTED_ECONOMY; .@i<CD_ENABLED_GUARDIAN00; set .@i,.@i+1)
    		setcastledata strnpcinfo(4),.@i,0;
    	// Disable Kafra
    	disablenpc "Kafra Employee#"+strnpcinfo(2);
    	
    ---------------------------------------------
     Add these below..
     ---------------------------------------------
    	query_sql("INSERT INTO `breaker_ladder` SET `char_id` = '"+getcharid(0)+"', `count` = '1' ON DUPLICATE KEY UPDATE `count` = `count`+1");
    	#EMPBREAKERPTS += $@empbreakpoints;

     

     


    • Submitter
    • Submitted
      01/18/2020
    • Category
    • Video
    • Content Author
      Mabuhay

     

    • Upvote 1
    • MVP 1
    • Like 1
  2. Euphy's WoE Controller + Gepard Check + Minor fix


    As the title says.

    • I added some fix on checkweight part where it will throw some error when item mailing is disabled. ( I literally have uploaded the wrong file for months and only been known recently)
    • Added gepard id check support.

     

     


    • Submitter
    • Submitted
      01/15/2020
    • Category
    • Video
    • Content Author
      Euphy, Mabuhay

     

    • MVP 1
  3. ---------------------------------------
    
    *disablenpc "<NPC object name>";
    *enablenpc "<NPC object name>";
    
    These two commands will disable and enable, respectively, an NPC object
    specified by name. The disabled NPC will disappear from sight and will no longer
    be triggerable in the normal way. It is not clear whether it will still be
    accessible through 'donpcevent' and other triggering commands, but it probably
    will be. You can disable even warp NPCs if you know their object names, which is
    an easy way to make a map only accessible through walking half the time. Then
    you 'enablenpc' them back.
    
    You can also use these commands to create the illusion of an NPC switching
    between several locations, which is often better than actually moving the NPC -
    create one NPC object with a visible and a hidden part to their name, make a few
    copies, and then disable all except one.
    
    ---------------------------------------

    doc/script_commands.txt

    • Upvote 1
  4. 5 hours ago, kasim03 said:

    Hi Guy, i already create this script, but this script have bug and i need help to fix it...

    
    prontera,149,189,4    script    Event NPC    859,{
    
        if (countitem(501) > 0)    goto    callfunc    ("E_Warp1");
        if (countitem(502) > 0)    goto    callfunc    ("E_Warp2");
        else    
        mes    "you dont have item A to use Event NPC";    end;
    }
    function    script    E_Warp1    {
    
        if (countitem(501) > 0)    goto    warp ("prontera",151,185);
        end;
    }
    function    script    E_Warp2    {
    
        if (countitem(502) > 0)    goto    warp ("prontera",151,185);
        end;
    }

    i want make script can send you to different warp with different items, this script work but have bug.. i already use other script but have error... if you guy have script more simpler then this i like to try it...

    Desktop-1-7-2020-11-37-08-AM-571.png

    Untested but should work..

    // How to use F_Warp?
    // F_Warp(<item_id>,<item_amount>,"<mapname>"{,<x>{,<y>}});
    prontera,150,180,0	script	Toll Warp	123,{
    function F_Warp;
    	mes "Where would you like to warp?";
    	next;
    	switch(select(
    		"Prontera", 	// Case 1
    		"Geffen", 		// Case 2
    		"Payon" 		// Case 3 -- no "," since this is the last in the lst..
    	)) {
    	case 1: // Prontera
    		F_Warp(501,5,"prontera",150,160);
    		break;
    	case 2: // Geffen
    		F_Warp(502,3,"geffen",50,100);
    		break;
    	case 3: // Payon
    		F_Warp(503,1,"payon",145,170);
    		break;
    	}
    	end;
    
    	function	F_Warp	{
    		.@item = getarg(0);
    		.@amount = getarg(1);
    		.@map$ = getarg(2,"");
    		.@x = getarg(3,0);
    		.@y = getarg(4,0);
    		if ( countitem(.@item) < .@amount ) {
    			mes "You dont have enough "+getitemname(.@item)+" to warp in this map.";
    			close;
    		}
    		delitem .@item, .@amount;
    		warp .@map$, .@x, .@y;
    		return;
    	}
    }

    Read how F_Warp works..

    You should know the basic on how to add menu..

    If you are still confused, refer to script_commands.txt

    • Upvote 1
  5. Here is my solution.

    All thanks to @Litro Endemic for the idea..

    goto pc.cpp

    look for 

    /*==========================================
     * Invoked once after the char/account/account2 registry variables are received. [Skotlex]
     * We didn't receive item information at this point so DO NOT attempt to do item operations here.
     * See intif_parse_StorageReceived() for item operations [lighta]
     *------------------------------------------*/
    void pc_reg_received(struct map_session_data *sd)

    Add this :

    	// Cash shop
    	sd->cashPoints = pc_readaccountreg(sd, add_str(CASHPOINT_VAR));
    	sd->kafraPoints = pc_readaccountreg(sd, add_str(KAFRAPOINT_VAR));
    	
    +	if ( pc_readaccountreg(sd, add_str("#BLOCKPASS")) )
    +		sd->state.protection_acc = 1;
    +	else
    +		sd->state.protection_acc = 0;

    Dont include +

     

    compile and done.

    • Upvote 3
    • Love 1
  6. 9 hours ago, gidzdlcrz said:

    @Mabuhay & @Litro Endemic

    So i have tried this

     

    
    SR_CRESCENTELBOW,1,7,-100 // In PVP and GVG, players deal -100% damage to other players with Crescent Elbow.

    I have somehow cloned the example for Asura Strike. But i still get damage from it. I put 7 to have it in all maps. I tried 6 as well but no to avail. And oh this txt file comes from db/import.

    *EDIT

    I have tried other skills such as ASURA STRIKE. It works! But CRESCENT ELBOW is not DAMAGE SKILL i think? Its a reflect thingy so editing the skill_damage_db.txt is useless for it. Correct me if im wrong. Thanks!
     


    I really dont this part. Hehe! Im sorry!

    You can just tag me once. No need to tag me everytime. I also have something called "personal life" so I couldn't attend to every queries in a flash.

    Anyhow... This part of the script already tells you how it calculates stuff..

    		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
    		int64 rdamage = 0;
    		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
    		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK
    		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
    		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;

    to break it down for you..

    		//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
    		int64 rdamage = 0;
    
    		// [{(Target HP / 100) x Skill Level} x Caster Base Level / 125]
    		int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125;
    
    		if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK -- this is just a damage limit cap..
    
    		// [Received damage x {1 + (Skill Level x 0.2)}] -- the rest of the calculation
    		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
    		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;

    You will only need basic arithmetic to adjust the damage carefully.. try to adjust one  part at a time to avoid confusion..

    Goodluck!

    • Upvote 1
  7. 28 minutes ago, hardelite said:

    Hey, community friends, how are you ?!

    Please could someone help me fix this script?

    His problem is as follows:

    The first time the event starts, everything happens normally, ok!

    But the next time the event occurs (2nd time), the player simply receives the direct prize, and no bombring is summoned.

    The event ends before it starts and everyone gets the prize.

    Script

      Hide contents
    
    
    // Original script by Unknown
    // Edit by Mabuhay
    // Removed my timer cool downs and stuff.
    // Adjust to your time you wish for it to start.
    
    -	script	Event_Bombring	-1,{
    OnInit:
    	// item reward
    	setarray .item,
    		501, 10,
    		502, 5;
    
    	// @bombstart - gm manual start
    	bindatcmd "bombstart", strnpcinfo(0)+"::OnStart",60,60;
    	
    	// @bomb - player join event
    	bindatcmd "bomb", strnpcinfo(0)+"::OnJoinEvent";
    	
    	// Mapflags
    	setarray .@mapflag,
    		mf_nowarp,
    		mf_nowarpto,
    		mf_noskill,
    		mf_noteleport,
    		mf_nomemo,
    		mf_nosave,
    		mf_noicewall,
    		mf_nobranch,
    		mf_noreturn,
    		mf_nocommand;
    		
    	for ( .@i = 0; .@i < getarraysize(.@mapflag); .@i++)
    		setmapflag "quiz_02", .@mapflag[.@i];
    	end;
    	
    OnJoinEvent:
    	mes " [ Event Status ] ";
    	switch ( .start ) {
    		case 1: .@status$ = "active"; break;
    		case 2: .@status$ = "on-going"; break;
    		default: .@status$ = "not active"; break;
    	}
    	mes "Event is currently ^ff0000"+ .@status$ +"^000000";
    	next;
    	switch(select(
    		"Bombring Event - "+ ((.start == 1) ? "^0000ffJoin Event":((.start == 2) ? "^0000ffEvent On-Going":"^ff0000Not Available"))+"^000000" )) {
    	case 1:
    		if ( !.start ) {
    			mes "Event is not available.";
    			close;
    		} else if ( .start == 2 ) {
    			mes "Event is on-going";
    			close;
    		}
    		sc_end SC_ALL;
    		sc_start SC_DECREASEAGI,600000,10;
    		percentheal 100,100;
    		warp "quiz_02",59,345;
    	}
    	end;
    
    OnStart:
    // Add your clock timers here.
    OnClock0000: // 12 MN
    OnClock0300: // 3 AM
    OnClock0600: // 6 AM
    OnClock1700: // 5 PM
    	if ( .start ) end;
    	.start = 1;
    	killmonsterall "quiz_02";
    	announce "Bombring: We are going to have a Bombring event.",0;
    	sleep 10000;
    	announce "Bombring: For those who wants to join, use @bomb",0;
    	sleep 10000;
    	announce "Bombring: After 1 Minute Event will close.",0;
    	sleep 10000;
    	announce "Bombring: So please if you want to join. use @bomb",0;
    	sleep 60000;
    	announce "Bombring: The entry to the event is now closed.",bc_all,0x0ceedb;
    	if ( getmapusers("quiz_02") < 1 ) {
    		announce "Bombring: Not enough participants.",bc_all,0x0ceedb;
    		.start = false;
    		mapwarp "quiz_02", "prontera", 150, 180; // warp out.
    		end;
    	}
    	.start = 2;
    	sleep 3500;
    	mapannounce "quiz_02","We're about to begin the event.",bc_map,0x0ceedb;
    	sleep 2500;
    	mapannounce "quiz_02","The rules are simple.",bc_map,0x0ceedb;
    	sleep 2000;
    	mapannounce "quiz_02","Event will run for 30 seconds for 5 total rounds.",bc_map,0x0ceedb;
    	sleep 2500;
    	mapannounce "quiz_02","All you have to do is avoid Bombrings and stay alive for 30 seconds.",bc_map,0x0ceedb;
    	sleep 2000;
    	mapannounce "quiz_02","That's all. Let's begin.",bc_map,0x0ceedb;
    	sleep 3000;
    	while ( .round < 5 ) {
    		.@count = getmapusers("quiz_02");
    		.round++;
    		mapannounce "quiz_02","Round "+.round,bc_map,0x0ceedb;
    		areamonster "quiz_02",48,334,71,357,"Run for you life!",1904, 5 * .@count * .round;
    		sleep 10000 - ( 1000*.round );
    	}
    	.@count = getmapusers("quiz_02");
    	if ( !.@count )
    		announce "Bombring: No one survived the bombrings.",bc_all,0x0ceedb;
    	else if ( .@count ) {
    		.@size = getmapunits(BL_PC,"quiz_02",.@aid);
    		.@amt = getarraysize(.item);
    		if ( .@size > 1 ) announce "A lot players has won the Bombring Event.",bc_all,0x0ceedb;
    		for ( .@i = 0; .@i < getarraysize(.@aid); .@i++) {
    			attachrid .@aid[.@i];
    			if ( .@size == 1 ) announce strcharinfo(0)+" has won the Bombring Event.",bc_all,0x0ceedb;
    			for ( .@j = 0; .@j < .@amt; .@j += 2 )
    				getitem .item[.@j], .item[.@j+1];
    		}
    		detachrid;
    	}
    	.start = false;
    	sleep 5000;
    	mapwarp "quiz_02","prontera",rand(148,163),rand(167,186);
    	end;
    	
    OnPCDieEvent:
    	if ( .start && strcharinfo(3) == "quiz_02" )
    		warp "prontera",rand(148,163),rand(167,186);
    	end;
    }

     

    Best regards, thank you very much!

    I already have fixed this on latest version of event manager. To fix, find for..  .start = false;

    Then replace to

    .start = .round = false;

    • Like 1
  8. 3 hours ago, Chaoszinho said:

    Hey @Mabuhay you do a awesome job here

    if u can do it 

    you can set the option to select the reward in game

    and  cancel a current event option ?

     

    i appreciate that.

     

     

     

    You can use my Reward Function for each Events and try to be creative.

    All my Free release are intended for you guys to modify and get creative. You may freely modify this in any way you see fit. I am not interested in upgrading/changing its mechanics. But if you have some old or cool events, I will check and see if I want to add it here.

    • MVP 1
  9. 1 hour ago, Strand said:

    Hello community!

    I'm setting the WoE for Pre-Renewall but there is an error that is being shown repeteadly about the command "GetCastleData" which apparently the syntax is wrong... I have no clue what could be causing it.

    image.png.2e1f23c1cb88ee3a6eddb54c825eed9c.png

    Hope you can give me a hand on this!

    *getcastledata("<map name>",<type of data>)

    you have a third arguement.

  10. 5 minutes ago, Surefirer said:

    Thank you for your help. I tried, it works. I have a question, when should I use 

    
    @set  $illusion_mvp 1

    Do I have to use everytime I restart sever, or do it's a onetime thing. Sorry, I am new to script, still learning.

    and since you set $illusion_mvp 1, I am assuming that 1 means clean the kill number set to 0, but why in the script right after the MVP summoned, then follow by "$illusion_mvp = 0", what's that "0" mean?  Are "@set  $illusion_mvp 1" and "$illusion_mvp=0" does the same job?

    Read and learn from scripting bible doc/script_commands.txt

    Learn basic Variable. it is straightforward and no need big brain to understand.

    PS: it should have been :

    @set  $illusion_mvp 0

    to set its value to 0, just a bit of typo on my side.

  11. 2 hours ago, Surefirer said:

    Hello,

    I downloaded illusion moonlight script, for the MVP summon part, for some reason, the MVP does not summon after 800 kill, I set to 5 for test, but it does not summon after 5 kill, can anyone take a look script, and fix it? Thanks in advance.

    -    script    illusion_mob#moonlight    -1,{
        OnInit:
            monster "pay_d03_i",0,0,"Angry Nine Tail",3759,10,strnpcinfo(0)+"::OnSummonMVP";
            end;
            
        OnSummonMVP:
            monster "pay_d03_i",0,0,"Angry Nine Tail",3759,1,strnpcinfo(0)+"::OnSummonMVP";
            $illusion_mvp += 1;
            if($illusion_mvp == 2){ //= jRO Summons the MVP after 800 kills or so
                mapannounce "pay_d03_i","Angry Moonlight Flower : Who dares bully us again? They're in a lot of trouble.",bc_map;
                monster "pay_d03_i",0,0,"Angry Moonlight Flower",3758,1;
               $illusion_mvp = 0;
            }
            end;

    apparently, it is using a permanent global variable. Try set it to zero first.

    @set  $illusion_mvp 1

    or change all :

    `$illusion_mvp` to  `$@illusion_mvp` << this method is uncertain because I dunno how the whole script works.

    or simply change 

      if($illusion_mvp == 2){ //= jRO Summons the MVP after 800 kills or so

    to 

      if($illusion_mvp >= 2){ //= jRO Summons the MVP after 800 kills or so

     

    Any of these methods should work.

×
×
  • Create New...