N>advice and help on comparing array loop

utofaery

New member
Messages
101
Points
0
First off don't get mad to link from rathena:

https://rathena.org/board/topic/118192-on-checking-array-items-infinite-loop/

This is the test case I try to redo the thing but it's gotten into loop again and again.

Don't get mad at me for not understanding this stuff.  I always ask things till I get it.

function    script    F_testarraycompare    {
        setarray ( .@costumes[getarraysize(.@costumes)]    ,
19500, 19501, 19502, 19503, 19504, 19505, 19506, 19507, 19508, 19509, 19510, 19511, 19512, 19513, 19514, 
19515, 19516, 19517, 19518, 19519, 19520, 19521, 19522, 19523, 19524, 19525, 19526, 19527, 19528, 19529, 
19530, 19531, 19532, 19533, 19534, 19535, 19536, 19537, 19538, 19539, 19540, 19541, 19542, 19543, 19544, 
19545, 19546, 19547, 19548, 19549, 19550, 19551, 19552, 19553, 19554, 19555, 19556, 19557, 19558, 19559, 
19560, 19561, 19562, 19563, 19564, 19565, 19566, 19567, 19568, 19569, 19570, 19571, 19572, 19573, 19574, 
19575, 19576, 19577, 19578, 19579, 19580, 19581, 19582, 19583, 19584, 19585, 19586, 19587, 19588, 19589, 
19590, 19591, 19592, 19593, 19594, 19595, 19596, 19597, 19598, 19599, 19600, 19601, 19602, 19603, 19604, 
19605, 19606, 19607, 19608, 19609, 19610, 19611, 19612, 19613, 19614, 19615, 19616, 19617, 19618, 19619, 
19620, 19621, 19622, 19623, 19624, 19625, 19627, 19628, 19629, 19630, 19631, 19632, 19633, 19634, 19635, 
19636, 19637, 19638, 19639, 19640, 19641, 19642, 19643, 19644, 19645, 19646, 19647, 19648, 19649, 19650, 
19651, 19652, 19653, 19654, 19655, 19656, 19657, 19658, 19659, 19660, 19661, 19662, 19663, 19664, 19665, 
19666, 19667, 19668, 19669, 19670, 19671, 19672, 19673, 19674, 19675, 19676, 19677, 19678, 19679, 19680, 
19681, 19682, 19683, 19684, 19685, 19686, 19687, 19688, 19689, 19690, 19691, 19692, 19693, 19694, 19695, 
19696, 19697, 19698, 19699, 19700, 19701, 19702, 19703, 19704, 19705, 19706, 19707, 19708, 19709, 19710, 
19711, 19712, 19713, 19714, 19715, 19716, 19717, 19718, 19719, 19720, 19721, 19722, 19723, 19724, 19725, 
19726, 19727, 19728, 19729, 19730, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19738, 19739, 19741, 
19740, 19742, 19743, 19744, 19745, 19746, 19747, 19748, 19749, 19750, 19751, 19752, 19753, 19754, 19755, 
19756, 19757, 19758, 19759, 19760, 19761, 19762, 19763, 19764, 19765, 19767, 19766, 19768, 19769, 19770, 
19771, 19772, 19773, 19774, 19775, 19776, 19777, 19778, 19779, 19780, 19781, 19782, 19783, 19784, 19785, 
19786, 19787, 19788, 19789, 19790, 19791, 19792, 19793, 19794, 19795, 19796, 19797, 19798, 19799, 19800, 
19801, 19802, 19803, 19804, 19805, 19806, 19807, 19808, 19809, 19810, 19811, 19812, 19813, 19814, 19815, 
19816, 19817, 19818, 19819, 19820, 19821, 19822, 19823, 19824, 19825, 19826, 19827, 19828, 19829, 19830, 
19831, 19832, 19833, 19834, 19835, 19836, 19837, 19838, 19839, 19840, 19841, 19842, 19843, 19844, 19845, 
19846, 19847, 19848, 19849, 19850, 19851, 19852, 19853, 19854, 19855, 19856, 19857, 19858, 19859, 19860, 
19861, 19862, 19863, 19864, 19865, 19866, 19867, 19868, 19869, 19870, 19871, 19872, 19873, 19874, 19875, 
19876, 19877, 19878, 19879, 19880, 19881, 19882, 19883, 19884, 19885, 19886, 19887, 19888, 19889, 19890, 
19891, 19892, 19893, 19894, 19895, 19896, 19897, 19898, 19899, 19900, 19901, 19902, 19903, 19904, 19905, 
19906, 19907, 19908, 19909, 19910, 19911, 19912, 19913, 19914, 19915, 19916, 19917, 19918, 19919, 19920, 
19921, 19922, 19923, 19924, 19925, 19926, 19927, 19928, 19929, 19930, 19931, 19932, 19934, 19935, 19936, 
19937, 19938, 19939, 19940, 19941, 19942, 19943, 19944, 19945, 19946, 19947, 19949, 19950, 19951, 19952, 
19953, 19954, 19955, 19956, 19957, 19958, 19959, 19960, 19961, 19962, 19963, 19964, 19965, 19966, 19967, 
19968, 19969, 19970, 19971, 19972, 19973, 19974, 19975, 19976, 19977, 19978, 19979, 19980, 19981, 19982, 
19983, 19984, 19985, 19986, 19987, 19988, 19989, 19990, 19991, 19992, 19993, 19994, 19996, 19997, 19998, 
19999, 20000, 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20012, 20013, 
20014, 20015, 20016, 20017, 20018, 20019, 20020, 20021, 20022, 20023, 20024, 20025, 20026, 20027, 20028, 
20029, 20030, 20031, 20032, 20033, 20034, 20035, 20036, 20037, 20038, 20039, 20040, 20041, 20042, 20043, 
20044, 20045, 20046, 20047, 20048, 20049, 20050, 20051, 20052, 20053, 20054, 20055, 20056, 20057, 20058, 
20059, 20060, 20061, 20062, 20063, 20064, 20065, 20066, 20067, 20068, 20069, 20070, 20071, 20073, 20074, 
20075, 20076, 20077, 20078, 20079, 20080, 20081, 20082, 20083, 20084, 20085, 20086, 20087, 20088, 20089, 
20090, 20091, 20092, 20093, 20094, 20095, 20096, 20097, 20098, 20099, 20100, 20101, 20102, 20103, 20104, 
20105, 20106, 20107, 20108, 20109, 20110, 20111, 20112, 20113, 20114, 20115, 20116, 20117, 20118, 20119, 
20120, 20121, 20122, 20123, 20124, 20125, 20126, 20127, 20128, 20129, 20130, 20131, 20132, 20133, 20134, 
20135, 20136, 20137, 20138, 20139, 20140, 20141, 20142, 20143, 20144, 20145, 20146, 20147, 20148, 20149, 
20150, 20151, 20152, 20153, 20154, 20155, 20156, 20157, 20158, 20159, 20160, 20161, 20162, 20163, 20164, 
20165, 20166, 20167, 20168, 20169, 20170, 20171, 20172, 20173, 20174, 20175, 20176, 20177, 20178, 20179, 
20180, 20181, 20182, 20183, 20184, 20185, 20186, 20187, 20188, 20189, 20190, 20191, 20192, 20193, 20194, 
20195, 20196, 20197, 20198, 20199, 20200, 20201, 20202, 20203, 20204, 20205, 20206, 20207, 20208, 20209, 
20210, 20211, 20212, 20213, 20214, 20215, 20216, 20217, 20218, 20219, 20220, 20221, 20222, 20223, 20224, 
20225, 20226, 20227, 20228, 20229, 20230, 20231, 20232, 20233, 20234, 20235, 20236, 20237, 20238, 20239, 
20240, 20241, 20242, 20243, 20244, 20245, 20246, 20247, 20248, 20249, 20250, 20251, 20252, 20253, 20254, 
20255, 20256, 20257, 20258, 20259, 20260, 20262, 20263, 20264, 20265, 20266, 20267, 20268, 20269, 20270, 
20271, 20272, 20273, 20274, 20277, 20278, 20279, 20280, 20281, 20282, 20283, 20284, 20285, 20286, 20287, 
20288, 20291, 20292, 20293, 20294, 20295, 20296, 20297, 20298, 20299, 20300, 20301, 20302, 20303, 20304, 
20307, 20311, 20312, 20313, 20314, 20315, 20316, 20317, 20318, 20319, 20320, 20321, 20322, 20323, 20324, 
20325, 20326, 20327, 20328, 20329, 20330, 20331, 20332, 20333, 20334, 20335, 20338, 20339, 20340, 20341, 
20342, 20345, 20346, 20347, 20348, 20349, 20350, 20351, 20352, 20353, 20354, 20355, 20356, 20357, 20358, 
20359, 20360, 20361, 20362, 20363, 20364, 20365, 20366, 20367, 20368, 20369, 20370, 20371, 20372, 20373, 
20374, 20375, 20376, 20377, 20378, 20379, 20380, 20381, 20382, 20383, 20384, 20386, 20392, 20393, 20394, 
20396, 20397, 20398, 20399, 20400, 20401, 20402, 20403, 20404, 20405, 20406, 20407, 20408, 20409, 20416, 
20417, 20418, 20419, 20420, 20421, 20422, 20423, 20424, 20425, 20426, 20427, 20428, 20429, 20430, 20431, 
20432, 20433, 20434, 20435, 20436, 20437, 20438, 20439, 20440, 20441, 20442, 20446, 20447, 20448, 20449, 
20450, 20451, 20452, 20455, 20456, 20458, 20457, 20459, 20460, 20461, 20462, 20463, 20464, 20465, 20466, 
20467, 20468, 20470, 20476, 20481, 20482, 20483, 20484, 20485, 20486, 20487, 20488, 20489, 20490, 20491, 
20492, 20495, 20496, 20497, 20498, 20499, 20500, 20502, 20504, 20506, 20507, 20508, 20509, 20510, 20511, 
20512, 20514, 20515, 20516, 20517, 20530, 20533 ) ;

    disable_items;
    getinventorylist;
    for ( .@x = 0; .@x < getarraysize(@inventorylist_count); ++.@x ) {
        for ( .@y = 0; .@y < getarraysize(.@costumes); ++.@y ) {
                if ( @inventorylist_id[.@x] == .@costumes[.@y] ) {
                    dispbottom ( " Found item :: " + @inventory_id[.@x] ) ;
                    .@i++;
                }
                .@z++;
        }
    }
    dispbottom ( " .@x :: " + .@x  ) ;
    dispbottom ( " .@y :: " + .@y  ) ;
    dispbottom ( " .@z :: " + .@z  ) ;
    dispbottom ( " .@i :: " + .@i  ) ;
    return;
}

 
similar topic ->



and since you want method 3

prontera,155,185,5 script kjsdhfksjf 1_F_MARIA,{
disable_items;
getinventorylist;
for ( .@i = 0; .@i < @inventorylist_count; ++.@i ) {
if ( .costumeid[ @inventorylist_id[.@i] ] && !.@compare[ @inventorylist_id[.@i] ] ) {
.@found[.@c++] = @inventorylist_id[.@i];
.@compare[ @inventorylist_id[.@i] ] = true;
}
}
if ( !.@c ) {
mes "no costume found on your character";
close;
}
mesf "%d custome found on your character", .@c;
for ( .@i = 0; .@i < .@c; ++.@i )
mes getitemname( .@found[.@i] );
close;
OnInit:
// SQL query to fetch all the costumes
.@nb = query_sql( "select id from item_db where equip_locations & "+( EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT ), .@id );
// build the 'pointers' to compare later
freeloop true;
for ( .@i = 0; .@i < .@nb; ++.@i )
.costumeid[ .@id[.@i] ] = true;
end;
}


EDIT: no longer repeat the costume value

 
Last edited by a moderator:
EDIT: no longer repeat the costume value
Why and how does it repeat the costume at the first place ?

was it because there is not enough limitation or conditions check that causing the loop then?

and the loop can loop more than once??

because in some cases I have seen

.@i got bigger than .@c in some test

Code:
[COLOR=rgb(122,171,255)]for[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)]([/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)].[/COLOR][COLOR=rgb(143,255,255)]@i[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)]=[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(143,255,255)]0[/COLOR][COLOR=rgb(255,255,143)];[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)].[/COLOR][COLOR=rgb(143,255,255)]@i[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)]<[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)].[/COLOR][COLOR=rgb(143,255,255)]@c[/COLOR][COLOR=rgb(255,255,143)];[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)]++.[/COLOR][COLOR=rgb(143,255,255)]@i[/COLOR][COLOR=rgb(232,231,227)] [/COLOR][COLOR=rgb(255,255,143)])[/COLOR]

side note:

for the code box thing could changes be made so that it only run Codebox script after posting?

so it load faster when trying to posting (aka before post is made)

then after the post is made only then it load it's code?

similar topic ->



and since you want method 3

prontera,155,185,5 script kjsdhfksjf 1_F_MARIA,{
disable_items;
getinventorylist;
for ( .@i = 0; .@i < @inventorylist_count; ++.@i ) {
if ( .costumeid[ @inventorylist_id[.@i] ] && !.@compare[ @inventorylist_id[.@i] ] ) {
.@found[.@c++] = @inventorylist_id[.@i];
.@compare[ @inventorylist_id[.@i] ] = true;
}
}
if ( !.@c ) {
mes "no costume found on your character";
close;
}
mesf "%d custome found on your character", .@c;
for ( .@i = 0; .@i < .@c; ++.@i )
mes getitemname( .@found[.@i] );
close;
OnInit:
// SQL query to fetch all the costumes
.@nb = query_sql( "select id from item_db where equip_locations & "+( EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT ), .@id );
// build the 'pointers' to compare later
freeloop true;
for ( .@i = 0; .@i < .@nb; ++.@i )
.costumeid[ .@id[.@i] ] = true;
end;
}

1. How to add exclusion on this script like another array which exclude items from being found?

 
1. How to add exclusion on this script like another array which exclude items from being found?
Code:
prontera,155,185,5	script	kjsdhfksjf	1_F_MARIA,{
	disable_items;
	getinventorylist;
	for ( .@i = 0; .@i < @inventorylist_count; ++.@i ) {
		.@item_type = getiteminfo( @inventorylist_id[.@i], ITEMINFO_TYPE );
		if ( ( .@item_type == IT_WEAPON || .@item_type == IT_ARMOR ) && !@inventorylist_equip[.@i] && !.costumeid[ @inventorylist_id[.@i] ] )
			.@id[.@c++] = @inventorylist_id[.@i];
	}
	mes "Equipments found that are not costumes";
	if ( !.@c ) {
		mes "<none>";
		close;
	}
	mesf "Total -> %d", .@c;
	for ( .@i = 0; .@i < .@c; ++.@i )
		mes getitemname( .@id[.@i] );
	close;
OnInit:
//	SQL query to fetch all the costumes
	.@nb = query_sql( "select id from item_db where equip_locations & "+( EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT ), .@id );
//	build the 'pointers' to compare later
	freeloop true;
	for ( .@i = 0; .@i < .@nb; ++.@i )
		.costumeid[ .@id[.@i] ] = true;
	end;
}
 
prontera,155,185,5 script kjsdhfksjf 1_F_MARIA,{
disable_items;
getinventorylist;
for ( .@i = 0; .@i < @inventorylist_count; ++.@i ) {
.@item_type = getiteminfo( @inventorylist_id[.@i], ITEMINFO_TYPE );
if ( ( .@item_type == IT_WEAPON || .@item_type == IT_ARMOR ) && !@inventorylist_equip[.@i] && !.costumeid[ @inventorylist_id[.@i] ] )
.@id[.@c++] = @inventorylist_id[.@i];
}
mes "Equipments found that are not costumes";
if ( !.@c ) {
mes "<none>";
close;
}
mesf "Total -> %d", .@c;
for ( .@i = 0; .@i < .@c; ++.@i )
mes getitemname( .@id[.@i] );
close;
OnInit:
// SQL query to fetch all the costumes
.@nb = query_sql( "select id from item_db where equip_locations & "+( EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT ), .@id );
// build the 'pointers' to compare later
freeloop true;
for ( .@i = 0; .@i < .@nb; ++.@i )
.costumeid[ .@id[.@i] ] = true;
end;
}

I really fix up a lot of other script I have by comparing your script with whatever is in my script folder...

1. How to add exclusion on this script like another array which exclude items from being found?
I guess it's my bad for not explaining this correctly..

on .nb part where it query_sql to fetch all the costumes, can I have another array to 

.@arrayA which include a list of item which not to be compared or "found"?  from the big list of query_sql?

 
Last edited by a moderator:
1 sentence ->

I cannot understand your post

looks like spam, but I am turning this topic to other members who can understand him




btw if you are talking about having a long list of array, isn't that already in your 1st post
yeah, can't understand you, despite we live in the same country

catch me in discord
https://discordapp.com/invite/ZUzbRSp

 
.@nb = query_sql( "select id from item_db where equip_locations & "+( EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT ), .@id );



Say after collected this list EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT 

I want to put extra check which exclude some of the item from being listed in the 

.@id[.@c++] = @inventorylist_id[.@i];

like putting in an extra check so it doesn't get included in the .@id[.@c++]??

mes getitemname( .@id[.@i] );


then in this part it won't list the excluded "certain item"?

 
Last edited by a moderator:
.@nb = query_sql( "select id from item_db where equip_locations & "+( EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT ), .@id );



Say after collected this list EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT 

I want to put extra check which exclude some of the item from being listed in the 

.@id[.@c++] = @inventorylist_id[.@i];

like putting in an extra check so it doesn't get included in the .@id[.@c++]??

mes getitemname( .@id[.@i] );


then in this part it won't list the excluded "certain item"?
Please don't use light colors, it is extremely difficult to read on this theme of forum.

 
Back
Top