Jump to content

Gidz Cross

Members
  • Posts

    646
  • Joined

  • Last visited

  • Days Won

    9

Posts posted by Gidz Cross

  1. On 1/19/2024 at 7:18 PM, Dev j said:

    Hello @Gidz Cross can  you share diff patch of that?

    I did already on the previous thread.

     

    In clif.c

    	if(!pc_isinvisible(sd) && mapdata->flag[MF_PVP]) {
    		//if(!battle_config.pk_mode) { // remove pvp stuff for pk_mode [Valaris]
    			if (!mapdata->flag[MF_PVP_NOCALCRANK])
    				sd->pvp_timer = add_timer(gettick()+200, pc_calc_pvprank_timer, sd->bl.id, 0);
    			sd->pvp_rank = 0;
    			sd->pvp_lastusers = 0;
    			sd->pvp_point = 5;
    			sd->pvp_won = 0;
    			sd->pvp_lost = 0;
    		//}

    in pc.c

    	// disable certain pvp functions on pk_mode [Valaris]
    	//if( !battle_config.pk_mode && mapdata->flag[MF_PVP] && !mapdata->flag[MF_PVP_NOCALCRANK] ) {
    		sd->pvp_point -= 5;
    		sd->pvp_lost++;
    		if( src && src->type == BL_PC ) {
    			struct map_session_data *ssd = (struct map_session_data *)src;
    			ssd->pvp_point++;
    			ssd->pvp_won++;
    		}
    		//if( sd->pvp_point < 0 ) {
    			//sd->respawn_tid = add_timer(tick+1000, pc_respawn_timer,sd->bl.id,0);
    			//return 1|8;
    		//}
    	//}

     

    This will enable the timers, ranking when server is set to pk mode: 1 and doesn't warp out players when died twice.

  2. On 1/12/2024 at 11:07 AM, Dev j said:

    Add also for guildrecall/partyrecall for some gm can't do cheat on woe

    For this one, you can simply make new group id with guildrecall/partyrecall restriction. This can be set in groups.conf if your rA is old and groups.yml if latest.

    This mod is simply created to not recall/recallall players that are on special maps (example: mining map, fishing map). On the contrary. This should applied in guildrecall and partyrecall since they behave like recall and recallall. So thank you @Dev j. But this doesn't prevent GMs to use guildrecall and partyrecall.

    A new version of this file is waiting for approval.

  3. On 10/14/2019 at 11:15 AM, Emistry said:
    // https://rathena.org/board/topic/121262-custom-bring-me-event/
    
    /* 
    CREATE TABLE IF NOT EXISTS `bring_me_event` (
    	`id` int(11) unsigned NOT NULL auto_increment,
    	`aid` int(11) unsigned NOT NULL default '0',
    	`cid` int(11) unsigned NOT NULL default '0',
    	`last_ip` varchar(100) NOT NULL default '',
    	`last_unique_id` varchar(100) NOT NULL default '',
    	`time` datetime NOT NULL,
    ) ENGINE=MyISAM;
    */
    
    prontera,0,0,0	script	Sample	444,{
    	.@aid = getcharid(3);
    	.@cid = getcharid(0);
    	.@ip$ = getcharip();
    	.@unique_id$ = get_unique_id();
    	
    	query_logsql("SELECT `id`,`time` FROM `bring_me_event` WHERE `aid` = "+.@aid+" OR `last_ip` = '"+escape_sql(.@ip$)+"' OR `last_unique_id` = '"+escape_sql(.@unique_id$)+"' LIMIT 1", .@id, .@time$);
    	query_logsql("SELECT COUNT(`id`) FROM `bring_me_event`", .@size);
    	if (.@size >= .max_redeem) {
    		mes "you missed the reward, only "+.max_redeem+" players got the reward.";
    	}
    	else if (.@id) {
    		mes "You've already claimed the rewards on "+.@time$+".";
    	}
    	else {
    		mes "Bring me "+.amount+"x "+getitemname(.item_id);
    		if (countitem(.item_id) >= .amount) {
    			if (select("Okay","Cancel") == 1) {
    				delitem .item_id, .amount;
    				query_logsql("INSERT INTO `bring_me_event` (`aid`,`cid`,`last_ip`,`last_unique_id`,`time`) VALUES ("+.@aid+","+.@cid+",'"+escape_sql(.@ip$)+"','"+escape_sql(.@unique_id$)+"', NOW())");
    				getitem 501,1;
    				getitem 502,1;
    				getitem 503,1;
    				mes "you are the "+(.@size+1)+"/"+.max_redeem+" players who got the reward";
    			}
    		}
    	}
    	close;
    	
    	OnInit:
    		.item_id = 512;
    		.amount = 300;
    		.max_redeem = 200;
    		end;
    }

    you can try this.

    It works. Can you further enhance this like configurable via in game like your promo code script? Lets talk.

  4. On 10/24/2023 at 2:52 AM, Tero said:

    If your rathena is old, the ignore range part is not present so you are instead looking for this:

    if(src->type == BL_PC && ud->walktimer != INVALID_TIMER && !battle_check_range(src, target, range)) {

    Which you replace with this:

    if(src->type == BL_PC && !battle_check_range(src, target, range)) {
    	if (ud->walktimer == INVALID_TIMER) {
    		unit_walktoxy(src, target->x, target->y, 8);
    	}

    My rA is much older than this i guess. I dont have this
     

    Quote

    if(src->type == BL_PC && ud->walktimer != INVALID_TIMER && !battle_check_range(src, target, range)) {

    But i got this instead
     

    	// Remember the skill request from the client while walking to the next cell
    	if(src->type == BL_PC && ud->walktimer != INVALID_TIMER && !battle_check_range(src, target, range-1)) {
    		ud->stepaction = true;
    		ud->target_to = target_id;
    		ud->stepskill_id = skill_id;
    		ud->stepskill_lv = skill_lv;
    		return 0; // Attacking will be handled by unit_walktoxy_timer in this case
    	}
    
    and
    
    	// Remember the skill request from the client while walking to the next cell
    	if(src->type == BL_PC && ud->walktimer != INVALID_TIMER && !battle_check_range(src, &bl, range-1)) {
    		struct map_data *md = &map[src->m];
    		// Convert coordinates to target_to so we can use it as target later
    		ud->stepaction = true;
    		ud->target_to = (skill_x + skill_y*md->xs);
    		ud->stepskill_id = skill_id;
    		ud->stepskill_lv = skill_lv;
    		return 0; // Attacking will be handled by unit_walktoxy_timer in this case
    	}
    
    and finally
    
    	// Remember the attack request from the client while walking to the next cell
    	if(src->type == BL_PC && ud->walktimer != INVALID_TIMER && !battle_check_range(src, target, range-1)) {
    		ud->stepaction = true;
    		ud->target_to = ud->target;
    		ud->stepskill_id = 0;
    		ud->stepskill_lv = 0;
    		return 0; // Attacking will be handled by unit_walktoxy_timer in this case
    	}

    Thanks!

  5. On 3/25/2023 at 10:19 PM, w0wZukuBg said:

    Hello! It's been a long time...
    But at the moment, the creation of updated sprites is completed!

    LINK TO FILE:

    https://mega.nz/file/tGFCxRSL#y5S8uLWw0cMCrLt059ycmZSeeFY1oLYTSVJwa0BoEWs

    Each sprite is hand tested and stamped inside.
    In the process of creation and testing, the version with the standard aura became irrelevant, so only the updated aura remains in the final version (like in this showcase).
    The pack now contains exactly 600 sprites.

    The last one was added single dagger version of Eremes Guile based on the sprite: md_ed_eremes.
    The sprite has been recreated in the style of standard biolab monsters with separate head, body and weapon.

    oiqpRnv.gif

    It belongs to the alternative sprites, due to the unique attack animation.
    This special one can be used on the lone Eremes Guile living on the 2nd floor of the biolab.
    Since he only has 1 dagger left, you can make him twice as weak so that low-level players are not very afraid of him.

    RubqthQ.png

     

    Thank you so much!

    • Upvote 1
    • Love 1
  6. 12 hours ago, GM Winter said:

    hello ive try to put it in the script i got a lot of errors dont know where to add this line heres the script 

     

     

    Find OnJoinEvent:

    add before sc_end SC_ALL;

     

    	if(getcharid(1)) {
    		dispbottom("Players with a party can't enter!");
    		end;
    	}

    It should be like: 

    OnJoinEvent:
        mes "[ Event Status ]";
        mes "Event are as follows : ";
        next;
        switch(select(
            "Dice Event - "+ ((getvariableofnpc(.start,"Event_Dice") == 1) ? "^0000ffJoin Event":((getvariableofnpc(.start,"Event_Dice") == 2) ? "^0000ffEvent On-Going":"^ff0000Not Available"))+"^000000",
            "Last Man Standing - "+ ((getvariableofnpc(.start,"Event_LMS") == 1) ? "^0000ffJoin Event":((getvariableofnpc(.start,"Event_LMS") == 2) ? "^0000ffEvent On-Going":"^ff0000Not Available"))+"^000000",
            "Poring Catcher - "+ ((getvariableofnpc(.start,"Poring_Catcher") == 1) ? "^0000ffJoin Event":((getvariableofnpc(.start,"Poring_Catcher") == 2) ? "^0000ffEvent On-Going":"^ff0000Not Available"))+"^000000"
        )) {
            
        case 1:
            .@start = getvariableofnpc(.start,"Event_Dice");
            .@map$ = "quiz_02"; .@x = 55; .@y = 87;
            break;
            
        case 2:
            .@start = getvariableofnpc(.start,"Event_LMS");
            .@map$ = "06guild_01"; .@x = 0; .@y = 0;
            break;
            
        case 3:
            .@start = getvariableofnpc(.start,"Poring_Catcher");
            .@map$ = "poring_w01"; .@x = 100; .@y = 100;
            break;
        }    
        if ( !.@start ) {
            mes "Event is not available.";
            close;
        } else if ( .@start == 2 ) {
            mes "Event is on-going";
            close;
        }
    	if(getcharid(1)) {
    		dispbottom("Players with a party can't enter!");
    		end;
    	}
        sc_end SC_ALL;
        percentheal 100,100;
        warp .@map$, .@x, .@y;
        end;

     

    • Upvote 1
  7. 18 hours ago, GM Winter said:

    if they have party they will kill the solo players first before they leave their party and kill each other 

    Oh yeah LMS (last man standing) I thought its NVZ (novice vs zombie) hahahaha! Winterfox is correct.

    On your script there is already mf_partylock in the Oninit area.

    Where is the script when the players use @eventjoin? That is where you need to add this 

     

    		if(getcharid(1)) {
    			dispbottom("Players with a party can't enter!");
    			end;
    		}
    
    		warp("izlude", 155, 155);
    }

     

  8. On 12/19/2023 at 11:28 PM, koneko33 said:

    i have this custom card on my server how can i make it stack only for 3 cards
    44457,Hydra_Card_Star,Hydra Card Star,6,20,,10,,,,,,,,769,,,,,{ bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_PLAYER_HUMAN,10;  bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Player_Human,10; },{},{};

    You can make script base for this. If you are familiar with 2-max deadly combo restriction then it should be similar.

  9. On 11/28/2023 at 2:55 AM, Winterfox said:

    You need an additional modification in your client to send some unique identifier based on the players pc to the server, that you can at least identify a unique pc to prevent most of the abuse via the usage of multiple accounts.
    You will also need the server to be able to handle the send unique id and to have it hand it over to your script so that it can make use of it.
    But even then it will be possible to abuse the it by the usage of virtual machines for example. There isn't any fool proof method to make sure, a player can't somehow abuse free giveaway items.

    I do have gepard. 

  10. Heya. I have this script and it works. But can be abuse by creating multiple accounts and re claim it. I wanted to add unique id features in it that resets each day.

    prontera,164,169,3	script	Daily Supply#1	647,{
    	set .@supplytoday,atoi( gettimestr( "%Y%m%d",21 ) );
    	
    	if ( Weight >= (MaxWeight/2) ) {
    		dispbottom "Please free some space from your inventory to get the Daily Supplies.";
    		end;
    	}
    	if( #DailySupply != .@supplytoday ){
    		set #DailySupply,.@supplytoday;
    		getitembound 11503,100,Bound_Account;
    		getitembound 11504,50,Bound_Account;
    		end;
    	} else {
    		dispbottom "Daily Supply can only be claimed once per day. Resets at 12am.";
    		end;
    	}
    }

     

  11. 19 hours ago, mervz02 said:

    Hi, im making this Donation NPC manager work, but apparently some menus are missing, i want to enable and test the Exlusive Donation and the conversion of the Donation Tickets and points. how can i do it. 

     

    //==== DarkRO Scripts ====================================
    //= Donation Shop
    //===== By: ================================================== 
    //= [GM] Brenth
    //===== Current Version: ===================================== 
    //= 1.2
    //===== Description: ========================================= 
    //= Multiple donation shop rewards (based on DarkRO)
    //===== Changelog: =========================================== 
    //= Not yet tested for bugs
    //= 1.0 Implementation
    //= 1.1 Added Gift Packages
    //= 1.2 Added Claim Bonuses (Ticket and Points)
    //============================================================
    
    //auction_01,41,85,5    script    Donation Manager    4_M_IAN,{
    prontera,133,188,5    script    Donation Manager    4_M_LGTGRAND,{
        set @header$,"[^FF8000 Donation Manager ^000000]";
        mes @header$; 
        mes "Good Day " + (Sex ? "Boss!" : "Madam!");
        mes "Welcome to Donation Shop!";
        mes "  ";
        mes "For every 1$ USD you donate, you will receive 1 ^5FD1D1Donation Point^000000 and 1 ^5FD1D1Wager Point^000000.";
        next;
        mes @header$; 
        mes "Just a few information before you visit our shop.";
        mes "  ";
        mes "We have 2 different kind of donation rewards and 2 different kind of shop, you will received";
        mes "both ^5FD1D1Donation Points^000000 and ^5FD1D1Wager Points^000000 everytime you donate!";
        switch(select(
            "Donation Points Shop",
            "Wager Points Shop",
            ($DONATE_EXCLUSIVE ? "[^FF0000Exclusive^000000] "+$DONATE_EX_TITLE$:""))) {
    /*        (#CASHPOINTS > 99 ? "Convert Wager Points to Donation Ticket":""))) {
        case 1:
            mes @header$;
            mes "Each Gift Packs contains different items and amount of ^7BCC70Donation Tickets^000000 and ^7BCC70Bonus Points^000000.";
            mes " ";
            mes "^FF0000NOTE^000000: Please choose wisely.";
            openshop("DShop_Pack");
            end;
        case 2:
            mes @header$;
            mes "We have 2 different kind of donation rewards, you received both ^7BCC70Donation Tickets^000000 and ^7BCC70Bonus Points^000000 everytime you open a Gift Package!";
            next;
            switch(select("Use Donation Tickets:Use Bonus Points")) {
    */
            case 1:
                mes @header$;
                mes "Welcome to Donation Points Shop";
                mes "You have total of "+#DONATIONPOINTS+" ^7BCC70Donation Points^000000.";
                openshop("DShop_Ticket");
                end;
            case 2: 
                mes @header$;
                mes "Welcome to Bonus Points Shop";
                mes "You have total of "+#BONUSPOINTS+" ^7BCC70Bonus Points^000000.";
                mes " ";
                mes "This shop rotates every end of the month.";
                openshop("DShop_Bonus");
                end;
            case 3:
                mes @header$;
                mes "Welcome to the Exclusive Donation Shop.";
                mes " ";
                mes "Select what currency will you use.";
                next;
                switch(select(
                    $DONATE_EXDT ? "Donation Ticket Shop":"",
                    $DONATE_EXBP ? "Bonus Point Shop":"",
                    "Cancel")) {
                    default:    close;    break;
                    case 1:
                        openshop("DShop_Ticket_Ex");
                        end;
                    case 2:
                        openshop("DShop_Bonus_Ex");
                        end;        
                }
                break;
    /*    case 4:
            getinventorylist();
            mes @header$;
            mes "You can convert your ^0000FF100 Wager Points^000000 for ^0099001 Donation Ticket^000000.";
            mes " ";
            mes "How will you exchange your Wager Point?";
            next;
            .@i = select("Decide on how many tickets to get.:Exchange all my Wager Points.:Cancel");
            if (.@i == 3) close();
            else if (.@i == 1) {
                if (@inventorylist_count == MAX_INVENTORY && !countitem(3101)) {
                    mes @header$;
                    mes "Make sure that you have a cleared your inventory before proceeding.";
                    close();
                }
                mes @header$;
                mes "You have total of "+F_InsertComma(#CASHPOINTS)+" ^0000FFWager Points^000000.";
                mes " ";
                mes "How many ^009900Donation Ticket^000000 do you want to get?";
                next;
                input(.@amt,0,30000);
                if (.@amt <= 0) close();
                if (#CASHPOINTS/100 < .@amt) {
                    L_LessPoints:
                    mes @header$;
                    mes "You don't have enough Wager Points.";
                    close();
                }
                else if (countitem(3101) + .@amt > 30000) {
                    mes @header$;
                    mes "You have exceeded the limit.";
                    close();
                } else {
                    L_ConvertDP:
                    mes @header$;
                    mes "You will be converting";
                    mes "your ^0000FF"+F_InsertComma(.@amt * 100)+" Wager Points^000000";
                    mes "to ^009900"+F_InsertComma(.@amt)+" Donation Ticket"+(.@amt != 1 ? "s":"")+"^000000.";
                    mes " ";
                    mes "Proceed?";
                    next;
                    if (select("No:Yes") == 1) close();
                    #CASHPOINTS -= (.@amt * 100);
                    #DONATIONPOINTS += .@amt;
                    getitem 3101, .@amt;
                    mes @header$;
                    mes "Here's your ^009900"+F_InsertComma(.@amt)+" Donation Ticket"+(.@amt != 1 ? "s":"")+"^000000 and ^0000FFBonus Point"+(.@amt != 1 ? "s":"")+"^000000.";
                    close();
                }
            } else {
                if (@inventorylist_count == MAX_INVENTORY && !countitem(3101)) {
                    mes @header$;
                    mes "Make sure that you have a cleared your inventory before proceeding.";
                    close();
                }
                .@amt = #CASHPOINTS / 100;
                if (.@amt == 0) goto L_LessPoints;
                else if (countitem(3101) + .@amt > 30000) {
                    .@amt = 30000 - countitem(3101);
                    if (.@amt == 0) {
                        mes @header$;
                        mes "You have exceeded the limit.";
                        close();
                    }
                    else goto L_ConvertDP;
                }
                else goto L_ConvertDP;
            }
            break;
    */
        }
        close;
    
    OnInit:
        waitingroom "Donation Manager",0;
        end;
    }
    
    -    trader    DShop_Ticket_Ex    -1,{
    OnInit:
        tradertype(NST_CUSTOM);
        sellitem Red_Potion,1;
        end;
    
    OnCountFunds:
        setcurrency(#DONATIONPOINTS); end;
    
    OnPayFunds:
        if( #DONATIONPOINTS < @price ) end;
        #DONATIONPOINTS = #DONATIONPOINTS - @price;
        purchaseok();
        dispbottom "You now have a total of "+#DONATIONPOINTS+" Donation Points.";
        end;
    }
    
    -    trader    DShop_Bonus_Ex    -1,{
        OnInit:
        tradertype(NST_CUSTOM);
        sellitem Red_Potion,200;
        end;
    
    OnCountFunds:
        setcurrency(#BONUSPOINTS); end;
    
    OnPayFunds:
        if( #BONUSPOINTS < @price ) end;
        #BONUSPOINTS = #BONUSPOINTS - @price;
        purchaseok();
        dispbottom "You now have a total of "+#BONUSPOINTS+" Bonus Points.";
        end;
    }
    
    /*
    -    trader    DShop_Pack    -1,{
        OnInit:
        tradertype(NST_CUSTOM);
        sellitem Gift_Pack_1,2500;
        sellitem Gift_Pack_2,3000;
        sellitem Gift_Pack_3,3500;
        sellitem Gift_Pack_4,4500;
        end;
        
    OnCountFunds:
        setcurrency(#CASHPOINTS); end;
    
    OnPayFunds:
        if( #CASHPOINTS < @price ) end;
        #CASHPOINTS = #CASHPOINTS - @price;
        purchaseok(); end;
    }
    */
    
    -    trader    DShop_Ticket    -1,{
        OnInit:
        tradertype(NST_CUSTOM);
        sellitem Banryu,12;
        sellitem Valkyrie_Armor,14;
        sellitem Valkyrja's_Shield,10;
        sellitem Valkyrie_Shoes,10;
        sellitem Valkyrie_Manteau,15;
        sellitem Sleipnir,20;
        sellitem Valkyrie_Helm_,20;
        sellitem Cyclops_Visor,30;
        sellitem Vampire_Wings,40;
        sellitem Nile_Rose,15;
        end;
    
    OnCountFunds:
        setcurrency(#DONATIONPOINTS); end;
    
    OnPayFunds:
        if( #DONATIONPOINTS < @price ) end;
        #DONATIONPOINTS = #DONATIONPOINTS - @price;
        purchaseok();
        dispbottom "You now have a total of "+#DONATIONPOINTS+" Donation Points.";
        end;
    }
    
    -    trader    DShop_Bonus    -1,{
        OnInit:
        tradertype(NST_CUSTOM);
        // Hats rotates
        sellitem Chanel_Captain,80;
        sellitem Gucci_Captain,80;
        sellitem LV_Captain,80;
        sellitem Chanel_Note_Headphone,80;
        sellitem Gucci_Note_Headphone,80;
        sellitem LV_Note_Headphone,80;
        end;
        
    OnCountFunds:
        setcurrency(#BONUSPOINTS); end;
    
    OnPayFunds:
        if( #BONUSPOINTS < @price ) end;
        #BONUSPOINTS = #BONUSPOINTS - @price;
        purchaseok();
        dispbottom "You now have a total of "+#BONUSPOINTS+" Bonus Points.";
        end;
    }


     

    donationshop.txt 7.01 kB · 2 downloads

    Some menus are hidden because of the /* script_here */. Those are comments. Try to remove those /* */


    P.S and this script is for Herc. We don't have tradershop in rA.

  12. You need to declare your unique item number. Let's based it on your medal thingy. 

      - Id: 30000
        AegisName: Medal_Thingy
        Name: Medal Thingy
        Type: Etc
        Buy: 100000
        Weight: 400

    Put this into your import folder. In this way you wont have to touch the original item_db_etc.yml. Once done go to your server and type @reload item. You may now @item 30000 to generate your Medal Thingy.

    You will be getting an Unknown Item(apple) since its not yet on your iteminfo.lua.


    You may put this in your iteminfo (Client/System/iteminfo.lub/lua

    	[30000] = {
    		unidentifiedDisplayName = "Medal Thingy",
    		unidentifiedResourceName = "Æ÷ÀåÁö",
    		unidentifiedDescriptionName = { "..." },
    		identifiedDisplayName = "Medal Thingy",
    		identifiedResourceName = "Æ÷ÀåÁö",
    		identifiedDescriptionName = {
    			"A custom Medal",
    			"^FFFFFF_^000000",
    			"Weight:^009900 1^000000"
    		},
    		slotCount = 0,
    		ClassNum = 0,
    		costume = false
    	},

    That's it!

    Restart your client.

    P.S the Æ÷ÀåÁö is taken from the item # 7175 which uses the pic below
    image.png.a643826baf487308568c209ab1e1ebc2.png

    • Upvote 2
    • Like 1
  13. I know that the food buffs uses gogi's (str_gogi, agi_gogi... etc etc. you get the idea). I wanted to create a separate buff just like what's on nova RO. I tried editing via clientside but it's not working. I believed that I have to do something with the source too.
     

    stateiconimginfo.lub
    [EFST_IDs.EFST_SAVAGE_STEAK] = "STRFOOD20.tga", -- I have to create this because its not in the stateiconimginfo
    

    Not working.

    Goal:

    To be able to create two different buff for +10 Foods and + 20 Foods.

    *EDIT

    Conclusion:
    I found out that this buff is hardcoded. So no matter what you do in stateiconimginfo will not work. Unless you diff your exe with this patch.
    image.thumb.png.8f849b46bd72e3d541600edcf89719c0.png
    But once you do most of the icon buff will not show like blessing and increase agi. Since them too are hardcoded.

    Possible Solution:
    1. Edit thru source on how the original food buff works when calling the icon?
    2. Creating Custom Food Buff that have the settings of the original food buff
    3. Diffing the patch in the exe but must have declared all icons in stateiconimginfo which we all know a hassle.

×
×
  • Create New...