Jump to content
  • 0

Emistry's Item Collector


noobonly

Question


  • Group:  Members
  • Topic Count:  5
  • Topics Per Day:  0.00
  • Content Count:  17
  • Reputation:   0
  • Joined:  04/15/20
  • Last Seen:  

	/*
CREATE TABLE IF NOT EXISTS `e_npc_trade_item` (
  `cid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  `name` VARCHAR(30) NOT NULL DEFAULT '',
  `nameid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  `amount` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY (`cid`,`nameid`,`amount`)
) ENGINE=MyISAM;
*/
	prontera,155,175,5    script    Item Collector    4_F_KAFRA9,{
    doevent "trade_item_main::OnTalk";
}
	
-    script    trade_item_main    -1,{
    function    func_DisallowItem    {
        switch ( getarg( 0,0 ) ) {
            default: 
                return 0;
            // case <itemID>:
            case 501:    // Red Potion
            case 502:    // Orange Potion
            case 4001:    // Poring Card 
                return 1;
        }
        return 0;
    }
    
    OnInit:
        // Top Rank
        .top_rank = 10;
        
        // NPC take what item ID, 0 = all items.
        .only_one_itemid = 512;
        end;
    
    OnTalk:
        .@is_gm = ( getgmlevel() >= 99 );
        
        mes "^0055FF[ Item Collector ]^000000";
        mes "Do you have any used items? You may give it to me.";
        mes " ";
        mes "I'll always remember who giveaway his items to me.";
        next;
        switch( select(
            "View Top "+.top_rank+" Rank",
            "Give Item to NPC",
            ( .@is_gm ) ? "[GM] Reset" : ""
        )) {
            default:
                do {
                    
                    switch( select( 
                        "Filter by Name", 
                        ( .only_one_itemid ) ? "":"Filter by ItemID",
                        "Without Filter" 
                    ) ) {
                        case 1: mes "Enter Char Name"; break;
                        case 2: mes "Enter ItemID"; break;
                        default: break;
                    }
                    
                    if ( @menu && @menu < 3 ) {
                        next;
                        input .@input$;
                    }
                    
                    .@sql$ = "SELECT `name`, `nameid`, SUM(`amount`) AS `total` "
                            + "FROM `e_npc_trade_item` "
                            + "WHERE 1 = 1 "
                            + ( .only_one_itemid ? "AND `nameid` = "+.only_one_itemid+" " : "" )
                            + ( ( @menu == 1 ) ? "AND `name` = '"+escape_sql( .@input$ )+"' " : "" )
                            + ( ( @menu == 2 ) ? "AND `nameid` = '"+escape_sql( .@input$ )+"' " : "" )
                            + "GROUP BY `cid`,`nameid` "
                            + "ORDER BY `total` DESC LIMIT "+.top_rank;
                    query_sql( .@sql$,.@name$,.@nameid,.@total );
                    .@size = getarraysize( .@name$ );
                    
                    mes "Top "+.top_rank+" Records:";
                    if ( .@size ) {
                        for ( .@i = 0; .@i < .@size; .@i++ ) {
                            mes "["+(.@i+1)+".] '"+getitemname( .@nameid[.@i] )+"' ("+.@total[.@i]+"ea) - '"+.@name$[.@i]+"' ";
                        }
                    }
                    else {
                        mes "no record found.";
                    }
                    next;
                } while ( 1 );
                break;
            case 2:
                if ( !.only_one_itemid ) {
                    mes "Pick an item and give to me";
                    getinventorylist;
                    for ( .@i = 0; .@i < @inventorylist_count; .@i++ ) {
                        if ( @inventorylist_bound[.@i] <= 0
                            && @inventorylist_expire[.@i] <= 0
                            && @inventorylist_equip[.@i] <= 0
                            && func_DisallowItem( @inventorylist_id[.@i] ) <= 0
                        ) {
                            .@menu$ = .@menu$ + getitemname( @inventorylist_id[.@i] ) + " ("+@inventorylist_amount[.@i]+" left)";
                            .@count++;
                        }
                        .@menu$ = .@menu$ + ":";
                    }
                    if ( .@count ) {
                        .@i = select( .@menu$ ) - 1;
                        .@itemid = @inventorylist_id[.@i];
                    }
                }
                else {
                    .@itemid = .only_one_itemid;
                    .@count++;
                }
                if ( .@itemid ) {
                    mes "How many "+getitemname( .@itemid )+" will be given to me?";
                    input .@amount,0,countitem( .@itemid );
                    if ( .@amount ) {
                        delitem .@itemid,.@amount;
                        npctalk "Thank you, "+strcharinfo(0)+" donated "+.@amount+"x "+getitemname( .@itemid )+" to me.";
                        query_sql( "INSERT INTO `e_npc_trade_item` ( `cid`,`name`,`nameid`,`amount` ) VALUES ( "+getcharid(0)+",'"+escape_sql( strcharinfo(0) )+"',"+.@itemid+","+.@amount+" ) ON DUPLICATE KEY UPDATE `amount` = `amount` + "+.@amount );
                        mes "Thank for your kindness.";
                    }
                }
                else {
                    mes "You dont have any item available to give to NPC.";
                }
                break;
            case 3:
                mes "This action cant be undo, confirm your action?";
                next;
                if ( select( "Yes, confirm.","Cancel" ) == 1 ) {
                    query_sql( "TRUNCATE `e_npc_trade_item`" );
                }
                break;
        }
        close;
}

 

How to make it not use sum instead make the items convert it to points, for example 1 apple = 1 itemcollectpoints instead of having it sum up everything in the table that was collected? That way the ranking npc wouldnt need to have the filters such as what item id and just show who had the most recycled items instead.

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  5
  • Topics Per Day:  0.00
  • Content Count:  17
  • Reputation:   0
  • Joined:  04/15/20
  • Last Seen:  

edit fixed.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...