//===== Hercules Script =======================================
//= Sample: CheckWeight
//===== By: ==================================================
//= Hercules Dev Team
//===== Current Version: =====================================
//= 20131225
//===== Description: =========================================
//= Demonstrates 'checkweight' command.
//============================================================

prontera,161,181,6	script	ChkSpace	4_M_JPN,{
	function ChkResult;
	function FinalReport;

	// Reset
	resetlvl(1);
	getinventorylist;
	for (.@i = 0; .@i < @inventorylist_count; ++.@i) {
		delitem(@inventorylist_id[.@i], @inventorylist_amount[.@i]); //clear inventory
	}

	//basic backward chk
	.@testid = 0;
	.@succes = 0;
	.@ret = checkweight(Apple, 10);
	.@succes += ChkResult(.@testid++, 1, .@ret); //should be success
	.@ret =	checkweight("Apple", 10);
	.@succes += ChkResult(.@testid++, 1, .@ret); //should be success
	.@ret = checkweight(Premium_Reset_Stone, 33000);
	.@succes += ChkResult(.@testid++, 0, .@ret); //should be failure too many item amount item weight=0
	.@ret = checkweight("Premium_Reset_Stone", 33000);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure too many item amount
	.@ret = checkweight(Blue_Gemstone, 500);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be success weight based on max weight=2030
	.@ret = checkweight(Blue_Gemstone, 1000);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure weight based on max weight=2030
	.@ret = checkweight(Magic_Stone_Ring, 100);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be success
	.@ret = checkweight(Magic_Stone_Ring, 101);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure (with MAX_INVENTORY = 100)
	.@ret = checkweight(-1, 1);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure invalid item id
	.@ret = checkweight(Apple, 0);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure invalid amount

	debugmes "End backward test";
	FinalReport(.@testid, .@succes);

	//update using list test
	.@testid = 0;
	.@succes = 0;

	.@ret = checkweight(Apple, 10, Banana, 10);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be success
	.@ret =	checkweight("Apple", 10, "Banana", 10);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be success
	.@ret = checkweight(Apple, 80, Banana, 33000);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure
	.@ret = checkweight("Apple", 80, "Banana", 33000);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure too many item amount
	.@ret = checkweight("Apple", 10, "Banana", 21, Apple);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure invalid nb of args
	.@ret = checkweight(Blue_Gemstone, 500, Red_Gemstone, 100);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be succes weight 1800/2030
	.@ret = checkweight(Blue_Gemstone, 500, Red_Gemstone, 500);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure weight 3000/2030
	.@ret = checkweight(Magic_Stone_Ring, 95, Green_Apple_Ring, 5);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be success
	.@ret = checkweight(Magic_Stone_Ring, 95, Green_Apple_Ring, 10);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure (with MAX_INVENTORY = 100)
	.@ret = checkweight(Apple, 1, -1, 1);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure invalid item id
	.@ret = checkweight(Apple, 1, Banana, 0);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure invalid amount
	.@ret = checkweight(Premium_Reset_Stone, 31000, Premium_Reset_Stone, 2000);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure overamount inventory
	.@ret = checkweight(Apple, 1, Banana, 1, Grape, 1, Carrot, 1);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be sucess

	debugmes "End update by list tests";
	FinalReport(.@testid, .@succes);

	//update using array tests
	.@testid = 0;
	.@succes = 0;

	setarray .@item[0], Apple, Banana, Grape, Carrot;
	setarray .@count[0],    1,      5,     9,     12;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be sucess
	cleararray .@item[0],  0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], Apple, Banana, Grape, Carrot;
	setarray .@count[0],    1,      5,    -1,     12;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure, invalid amout
	cleararray .@item[0],  0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], Apple, Banana, Grape, -1;
	setarray .@count[0],    1,      5,    15, 12;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure, invalid id
	cleararray .@item[0],  0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], Blue_Gemstone, Yellow_Gemstone, Red_Gemstone, Emperium;
	setarray .@count[0],          300,             300,          300,      300;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure, total by weight
	cleararray .@item[0],  0, 4;
	cleararray .@count[0], 0, 4;
	setarray .@item[0], Premium_Reset_Stone, Premium_Reset_Stone;
	setarray .@count[0],              31000,                2000;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure, total by weight
	cleararray .@item[0],  0, 2;
	cleararray .@count[0], 0, 2;
	setarray .@item[0], Magic_Stone_Ring, Green_Apple_Ring;
	setarray .@count[0],              95,                5;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 1, .@ret); //should be success
	setarray .@count[0], 95, 10;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure overamount item
	cleararray .@item[0],  0, 2;
	cleararray .@count[0], 0, 2;
	setarray .@item[0], Premium_Reset_Stone, Premium_Reset_Stone, Apple;
	setarray .@count[0],                  1,                   3;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure, size mistmatch
	cleararray .@item[0],  0, 3;
	cleararray .@count[0], 0, 2;
	setarray .@item[0], Premium_Reset_Stone, Premium_Reset_Stone;
	setarray .@count[0],                  1,                   3, 5;
	.@ret = checkweight2(.@item, .@count);
	.@success += ChkResult(.@testid++, 0, .@ret); //should be failure, size mistmatch

	debugmes "End update by array tests";
	FinalReport(.@testid, .@succes);

	end;

	function ChkResult {
		.@tid = getarg(0);
		.@expected = getarg(1);
		.@ret = getarg(2);
		.@sucess = (.@ret==.@expected);
		debugmes "Test "+.@tid+" = "+(.@sucess?"Sucess":"Fail");
		return .@sucess;
	}

	function FinalReport {
		.@tdone = getarg(0);
		.@succes = getarg(1);
		debugmes "Results = Pass : "+.@succes+"/"+.@tdone+" Fails : "+(.@tdone-.@succes)+"/"+.@tdone;
		if(.@succes != .@tdone) { debugmes "Some failure as occured, enable chkresult print to found out"; }
		return;
	}
}
