Jump to content

Emistry

Forum Moderator
  • Posts

    10015
  • Joined

  • Days Won

    405

Posts posted by Emistry

  1. depend on your script, you can do like these

    if (condition_A) {
    	select("Menu 1", "Menu 2", "Menu 3");
    }
    else {
    	select("Menu 4", "Menu 5", "Menu 6");
    }

    or

    select((condition_A ? "Menu 1" : ""), (condition_A ? "Menu 2" : ""), (condition_A ? "Menu 3" : ""), "Menu 4", "Menu 5", "Menu 6");

    etc

    • Upvote 2
  2. Version 2.0.0

    1. added option to bulk add/remove item
      (to cater scenario where chat box insufficient max length like 10 items with million ID range)
    2. added option to clear/reset the items in a group.
    3. added option to allow different save mode
      (experimental) use at your own risk (example: other players may share same settings with you)
    4. refactor the script to make it slightly easier to read/maintain

     

  3. conf/battle/feature.conf#L143-L148

    // Itemlink System on informational related commands (Note 1)
    // Generates an itemlink string for an item and can be used for npctalk, message,
    // dispbottom, and broadcast commands. The result is clickable-item name just
    // like from SHIFT+Click from player's inventory/cart/equipment window.
    // Requires: 2015-11-04Ragexe or later
    feature.itemlink: on

     

  4. prontera,155,181,5	script	Sample	757,{
    	mes "Exchange "+.amount+"x "+getitemname(.itemid)+" into a costume.";
    	if (select("Yes" , "Cancel") == 1) {
    		if (countitem(.itemid) < .amount) {
    			mes "not enough item.";
    		}
    		else {
    			delitem .itemid, .amount;
    			getitem F_Rand(501, 502, 503, 504, 505), 1;
    			mes "You gained a costume.";
    		}
    	}
    	close;
    	
    	OnInit:
    		.itemid = 512;
    		.amount = 1;
    		end;
    }

    there are probably thousand of exchanger NPCs like these can be found in the forum, might as well try to search for it next time.

  5. function Go {
        set lastwarp$, getarg(0);
        set lastwarpx, getarg(1,0);
        set lastwarpy, getarg(2,0);
        warp getarg(0),getarg(1,0),getarg(2,0);
        end;
    }

    change to

    function Go {
    	if (select("Pay 20k Zeny", "Cancel") == 2) close3;
    	if (Zeny < 20000) {
    		mes "You don't have enough Zeny.";
    		close3;
    	}
    	Zeny -= 20000;
    	close2;
    	set lastwarp$, getarg(0);
    	set lastwarpx, getarg(1,0);
    	set lastwarpy, getarg(2,0);
    	warp getarg(0),getarg(1,0),getarg(2,0);
    	end;
    }

     

    • Love 1
  6. maybe you can remove the flag from here src/map/pc.cpp#L6596

    	md->state.steal_flag = UCHAR_MAX; //you can't steal from this mob any more

    or

    adjust the config here conf/battle/skill.conf#L223-L226

    // How many times you could try to steal from a mob.
    // Note: It helps to avoid stealing exploit on monsters with few rare items
    // Use 0 to disable (max allowed value is 255)
    skill_steal_max_tries: 0

     

    if you want it to auto steal with skill with minimum src mod

    you can consider to grant the char with both steal skill and snatcher skill, it should do the trick

  7. On 11/17/2022 at 4:44 PM, abdol said:

    why rental items are not detected?

    *rentalcountitem(<item id>{,<accountID>})
    *rentalcountitem("<item name>"{,<accountID>})
    
    This function will return the number of rental items for the specified item ID that the
    invoking character has in the inventory.

     

  8. alternative using NPC script

    -	script	sample	-1,{
    
    	OnInit:
    		bindatcmd("killmonsterarea", strnpcinfo(3)+"::OnStart");
    		end;
    		
    	OnStart:
    		if (.@atcmd_numparameters == 4) {
    			.@map$ = strcharinfo(3);
    			.@x1 = .@atcmd_parameters$[0];
    			.@y1 = .@atcmd_parameters$[1];
    			.@x2 = .@atcmd_parameters$[2];
    			.@y2 = .@atcmd_parameters$[3];
    		}
    		else if (.@atcmd_numparameters == 5) {
    			.@map$ = .@atcmd_parameters$[0];
    			.@x1 = .@atcmd_parameters$[1];
    			.@y1 = .@atcmd_parameters$[2];
    			.@x2 = .@atcmd_parameters$[3];
    			.@y2 = .@atcmd_parameters$[4];
    		}
    		else {
    			getmapxy(.@map$, .@pc_x, .@pc_y, BL_PC);
    			.@x1 = .@pc_x - 14;
    			.@y1 = .@pc_y - 14;
    			.@x2 = .@pc_x + 14;
    			.@y2 = .@pc_y + 14;
    		}
    		
    		if (getmapusers(.@map$) == -1) {
    			dispbottom "Invalid map - "+.@map$+".";
    		}
    		else {
    			.@size = getareaunits(BL_MOB, .@map$, .@x1, .@y1, .@x2, .@y2, .@gid);
    			for (.@i = 0; .@i < .@size; .@i++) {
    				if (unitexists(.@gid[.@i])) {
    					unitkill .@gid[.@i];
    					.@count++;
    				}
    			}
    			dispbottom "Killed "+.@count+" monsters";
    		}
    		end;
    }
    
    @killmonsterarea    -> kill monster around you
    @killmonsterarea 100 200 200 300   -> kill monster at current map (100,200) to (200,300)
    @killmonsterarea prontera 100 200 200 300   -> kill monster at prontera (100,200) to (200,300)

     

  9. 34 minutes ago, Charlemagne19 said:

    Hmmm... If I remove the item permanently, would it also be removed in my character costume slot?

    if this case, you should also patch the database after you removed the item from the server permanently, else you probably getting alot warning from map-server stating invalid item founds.

    all the item will render become unknown item in server if its removed from the item_db

  10. conf/log_athena.conf#L10-L44

    // Enable Logs? (Note 3)
    // 0x00000000 - Don't log at all
    // 0x00000001 - (T) Log trades
    // 0x00000002 - (V) Log vending transactions
    // 0x00000004 - (P) Log items drop/picked by players
    // 0x00000008 - (L) Log items drop/looted by monsters
    // 0x00000010 - (S) Log NPC transactions (buy/sell)
    // 0x00000020 - (N) Log Script transactions (items deleted/acquired through quests)
    // 0x00000040 - (D) Log items stolen from mobs (Steal/Gank)
    // 0x00000080 - (C) Log player-used items (consumables/pet&hom&merc food/items used for skills&attacks)
    // 0x00000100 - (O) Log produced/ingredient items
    // 0x00000200 - (U) Log MVP prize items
    // 0x00000400 - (A) Log player created/deleted items (through @/# commands)
    // 0x00000800 - (R) Log items placed/retrieved from storage.
    // 0x00001000 - (G) Log items placed/retrieved from guild storage.
    // 0x00002000 - (E) Log mail system transactions.
    // 0x00004000 - (I) Log auction system transactions.
    // 0x00008000 - (B) Log buying store transactions
    // 0x00010000 - (X) Log all other transactions (rentals expiring/inserting cards/items removed by item_check/
    //           rings deleted by divorce/pet egg (un)hatching/pet armor (un)equipping/Weapon Refine skill/Remove Trap skill/Stylist)
    // 0x00020000 - ($) Log cash transactions
    // 0x00040000 - (K) Log account bank transactions
    // 0x00080000 - (F) Removed bound items when guild/party is broken
    // 0x00100000 - (Y) Log Roulette Lottery
    // 0x00200000 - (Z) Merged items from item mergers process.
    // 0x00400000 - (Q) Log items given from quest-granted drops.
    // 0x00800000 - (H) Log items consumed by Private Airship system
    // 0x01000000 - (J) Log Barter Shop transactions
    // 0x02000000 - (W) Log Laphine system transactions
    // 0x04000000 - (0) Enchantgrade UI
    // 0x08000000 - (1) Reform UI
    // 0x10000000 - (2) Enchant UI
    // Example: Log trades+vending+script items+created items: 1+2+32+1024 = 1059
    // Please note that moving items from inventory to cart and back is not logged by design.
    enable_logs: 0xFFFFFFFF

    the log here should be good enough for you to track most of the item in your server.

     

  11. prontera,147,173,4    script    Bulletin Board#29    1903,1,1,{
    	end;
    
    OnTouch:
        mes "Opening chest in";
        sleep2 1000;
        mes "5...";
        sleep2 1000;
        mes "4...";
        sleep2 1000;
        mes "3...";
        sleep2 1000;
        mes "2...";
        sleep2 1000;
        mes "1...";
        sleep2 1000;
        mes "Loot obtained.";
        close;
    }
    OnTouch:
    
    This label will be executed if a trigger area is defined for the NPC object it's
    in. If it isn't present, the execution will start from the beginning of the NPC
    code. The RID of the triggering character object will be attached.
    
    OnTouch_:
    
    Similar to OnTouch, but will only run one instance. Another character is
    chosen once the triggering character leaves the area.

     

    or check the distance between NPC and Player

    prontera,147,173,4    script    Bulletin Board#29    1903,{
    	getmapxy(.@npc_map$, .@npc_x, .@npc_y, BL_NPC);
    	getmapxy(.@map$, .@x, .@y, BL_PC);
    	if (distance(.@npc_x, .@npc_y, .@x, .@y) > 1) end;
    	mes "Opening chest in";
    	sleep2 1000;
    	mes "5...";
    	sleep2 1000;
    	mes "4...";
    	sleep2 1000;
    	mes "3...";
    	sleep2 1000;
    	mes "2...";
    	sleep2 1000;
    	mes "1...";
    	sleep2 1000;
    	mes "Loot obtained.";
    	close;
    }

     

  12. if you are creating an equipment that give additional exp when hunting mob, maybe consider to use a proper item bonuses instead?

    Experience
    ----------
    bonus2 bExpAddRace,r,x; 		Increase exp gained by x% against enemies of race r
    bonus2 bExpAddClass,c,x;		Increase exp gained by x% against enemies of class c

     

  13. if the shop is reading the buy/sell (default) value from item_db, then edit the item_db info

    #   Buy                     Buying price. When not specified, becomes double the sell price. (Default: 0)
    #   Sell                    Selling price. When not specified, becomes half the buy price. (Default: 0)

    if the shop is readying the buy/sell value from the npc script, then edit the amount in the npc script

    if its value is -1, meant it read the default value from item_db

×
×
  • Create New...