Hi I would like to ask about emistry's item collector, is it possible to make it by account, it seems that if you have 2 characters in one account and submitted items it will count the item on both characters? any help on how to make it if one character already submitted if another one submitted on the same account it will increment on the said account and the first character instead of having 2 entries for the ranking
/*
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;
}
Question
noobonly
Hi I would like to ask about emistry's item collector, is it possible to make it by account, it seems that if you have 2 characters in one account and submitted items it will count the item on both characters? any help on how to make it if one character already submitted if another one submitted on the same account it will increment on the said account and the first character instead of having 2 entries for the ranking
Link to comment
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.