PGCC_PRC8/_module/nss/fcb__main.nss
Jaysyn904 e51634d39b Initial upload
Initial upload.
2024-10-09 14:17:22 -04:00

645 lines
24 KiB
Plaintext

#include "fcb_inc_vars"
#include "fcb_inc_cvgen"
#include "fcb_inc_cvdisp"
#include "fcb_inc_general"
#include "fcb_inc_typespec"
//==========================================/
void main()
//==========================================/
{
int script_param = GetLocalInt(FCB_HOST, SCRIPT_PARAM);
int stack_index_sel = FILTER_F1 & script_param;
int stack_param = GetLocalInt(FCB_HOST, STACK_PARAM_ + IntToHexString(stack_index_sel));
object user = GetLocalObject(FCB_HOST, USER);
//--------------------------------------/
switch(FILTER_F100 & script_param)
{
//--------------------------------------/
case SCRIPT_INDEX_IPRP_SEL_0:
{
int folder_index_iprp = MAIN_FOLDER_INDEX_IPRP;
int param0 = 0; //main
int param1 = 0; //subtype
int param2 = 0; //cost
int param3 = 0; //param1
string iprp_txt = "";
int file_dir_0 = FILTER_F11 & GetLocalInt(FCB_HOST, STACK_PARAM_ + IntToHexString(stack_index_sel));
//--------------------------------------/
if((FILTER_F10 & file_dir_0) == folder_index_iprp)
{
param0 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_0));
//--------------------------------------/
iprp_txt = GetStringByStrRef(StringToInt(Get2DAString("itempropdef", "GameStrRef", param0)));
//--------------------------------------/
}
else
{
int file_dir_1 = FILTER_F11 & GetLocalInt(FCB_HOST, STACK_PARAM_ + IntToHexString(stack_index_sel-1));
if((FILTER_F10 & file_dir_1) == folder_index_iprp)
{
param0 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_1));
param1 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_0));
//--------------------------------------/
iprp_txt = GetStringByStrRef(StringToInt(Get2DAString("itempropdef", "GameStrRef", param0)));
if(file_dir_0 > 0)
{
iprp_txt += UI_TXT_SPACE + GetLocalString(FCB_HOST, MAIN_FILE_NAME_ + IntToHexString(file_dir_0));
}
//--------------------------------------/
}
else
{
int file_dir_2 = FILTER_F11 & GetLocalInt(FCB_HOST, STACK_PARAM_ + IntToHexString(stack_index_sel-2));
if((FILTER_F10 & file_dir_2) == folder_index_iprp)
{
param0 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_2));
param1 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_1));
param2 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_0));
//--------------------------------------/
iprp_txt = GetStringByStrRef(StringToInt(Get2DAString("itempropdef", "GameStrRef", param0)));
if(file_dir_1 > 0)
{
iprp_txt += UI_TXT_SPACE + GetLocalString(FCB_HOST, MAIN_FILE_NAME_ + IntToHexString(file_dir_1));
}
if(file_dir_0 > 0)
{
iprp_txt += UI_TXT_SPACE + GetLocalString(FCB_HOST, MAIN_FILE_NAME_ + IntToHexString(file_dir_0));
}
//--------------------------------------/
}
else
{
int file_dir_3 = FILTER_F11 & GetLocalInt(FCB_HOST, STACK_PARAM_ + IntToHexString(stack_index_sel-3));
if((FILTER_F10 & file_dir_3) == folder_index_iprp)
{
param0 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_3));
param1 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_2));
param2 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_1));
param3 = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir_0));
//--------------------------------------/
iprp_txt = GetStringByStrRef(StringToInt(Get2DAString("itempropdef", "GameStrRef", param0)));
if(file_dir_2 > 0)
{
iprp_txt += UI_TXT_SPACE + GetLocalString(FCB_HOST, MAIN_FILE_NAME_ + IntToHexString(file_dir_2));
}
if(file_dir_1 > 0)
{
iprp_txt += UI_TXT_SPACE + GetLocalString(FCB_HOST, MAIN_FILE_NAME_ + IntToHexString(file_dir_1));
}
if(file_dir_0 > 0)
{
iprp_txt += UI_TXT_SPACE + GetLocalString(FCB_HOST, MAIN_FILE_NAME_ + IntToHexString(file_dir_0));
}
//--------------------------------------/
}
}
}
}
SetLocalString(FCB_HOST, IPRP_SEL_TXT, iprp_txt);
object item = get_working_item();
object item_copy = copy_item(item, FCB_INV);
itemproperty iprp = convert_iprp(param0, param1, param2, param3);
AddItemProperty(DURATION_TYPE_PERMANENT, iprp, item_copy);
//--------------------------------------/
//check cost and ILR restriction
int mod_enable = 1;
//--------------------------------------/
int cost = get_item_cost(item_copy) - get_item_cost(item);
int user_gold = GetGold(user);
string cost_disp = IntToString(cost) + UI_TXT_UNIT_GP;
if(cost > user_gold)
{
cost_disp = c_crs(cost_disp + UI_TXT_INDENT + UI_TXT_COST_OUTOFBOUND);
mod_enable = 0;
}
else
{
if(cost <= 0)
{
cost_disp = c_hlt2(cost_disp);
}
}
//--------------------------------------/
int item_level = get_item_level(item);
int item_copy_level = get_item_level(item_copy);
int user_level = get_character_level(user);
string item_copy_level_disp = IntToString(item_copy_level);
if(GetLocalInt(FCB_HOST, SW_ILR_ENABLE)
&& item_copy_level > user_level
&& cost > 0)
{
item_copy_level_disp = c_crs(item_copy_level_disp + UI_TXT_INDENT + UI_TXT_LEVEL_OUTOFBOUND);
mod_enable = 0;
}
//--------------------------------------/
if(mod_enable)
{
SetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST, cost);
SetLocalInt(FCB_HOST, IPRP_PARAM_SEL_0_1, (param0 << BITLEN_FILE_1) | param1);
SetLocalInt(FCB_HOST, IPRP_PARAM_SEL_2_3, (param2 << BITLEN_FILE_1) | param3);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_IPRP_MENU | 1, 0);
}
else
{
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_IPRP_MENU | 1, 1);
}
//--------------------------------------/
DestroyObject(item_copy);
//--------------------------------------/
iprp_txt += UI_TXT_INDENT + c_hdr1(UI_TXT_COST) + UI_TXT_SPACE + cost_disp + UI_TXT_INDENT + c_hdr1(UI_TXT_LEVEL) + UI_TXT_SPACE + item_copy_level_disp;
/////
//--------------------------------------/
ui_disp_set_txt(DISP_INDEX_LOCAL1, "", c_hdr1(UI_TXT_IPRP_SEL) + UI_TXT_SPACE + iprp_txt);
ui_disp_state_new(DISP_INDEX_LOCAL1, 1);
//--------------------------------------/
break;
}
//--------------------------------------/
case SCRIPT_INDEX_IPRP_SEL_1:
{
//charge player
//--------------------------------------/
int cost = GetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST);
DeleteLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST);
if(give_gold(-cost, user))
{
//--------------------------------------/
int param0_1 = GetLocalInt(FCB_HOST, IPRP_PARAM_SEL_0_1);
int param2_3 = GetLocalInt(FCB_HOST, IPRP_PARAM_SEL_2_3);
itemproperty iprp = convert_iprp(param0_1 >>> BITLEN_FILE_1, FILTER_F1 & param0_1, param2_3 >>> BITLEN_FILE_1, FILTER_F1 & param2_3);
if(GetIsItemPropertyValid(iprp))
{
object item = get_working_item();
iprp_addto(item, iprp);
//--------------------------------------/
ui_disp_clear_local();
}
}
ui_stack_index(1);
visual_effect();
break;
}
//--------------------------------------/
case SCRIPT_INDEX_IPRPR_SEL_0:
{
int stack_index_sel = FILTER_F1 & GetLocalInt(FCB_HOST, STACK_STATE);
int file_dir_sel = FILTER_F11 & stack_param;
string file_name = GetLocalString(FCB_HOST, MAIN_FILE_NAME_ + IntToHexString(file_dir_sel));
object item = get_working_item();
object item_copy = copy_item(GetLocalObject(FCB_HOST, ITEM_WORKING_SEL_BLANK), FCB_INV);
int file_dir_max = GetLocalInt(FCB_HOST, MAIN_FILE_INDEX_ + IntToHexString(FILTER_F10 & file_dir_sel));
int file_dir = (FILTER_F10 & file_dir_sel) | UI_MAIN_DEFAULT_OFFSET;
while(file_dir <= file_dir_max)
{
if(file_dir != file_dir_sel)
{
int file_param = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(file_dir));
AddItemProperty(DURATION_TYPE_PERMANENT, param_to_iprp(file_param), item_copy);
}
file_dir++;
}
//--------------------------------------/
//check cost and ILR restriction
int mod_enable = 1;
//--------------------------------------/
int cost = get_item_cost(item_copy) - get_item_cost(item);
int user_gold = GetGold(user);
string cost_disp = IntToString(cost) + UI_TXT_UNIT_GP;
if(cost > user_gold)
{
cost_disp = c_crs(cost_disp + UI_TXT_INDENT + UI_TXT_COST_OUTOFBOUND);
mod_enable = 0;
}
else
{
if(cost <= 0)
{
cost_disp = c_hlt2(cost_disp);
}
}
//--------------------------------------/
int item_level = get_item_level(item);
int item_copy_level = get_item_level(item_copy);
int user_level = get_character_level(user);
string item_copy_level_disp = IntToString(item_copy_level);
if(GetLocalInt(FCB_HOST, SW_ILR_ENABLE)
&& item_copy_level > user_level
&& cost > 0)
{
item_copy_level_disp = c_crs(item_copy_level_disp + UI_TXT_INDENT + UI_TXT_LEVEL_OUTOFBOUND);
mod_enable = 0;
}
//--------------------------------------/
if(mod_enable)
{
SetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST, cost);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_IPRPR_MENU | 1, 0);
}
else
{
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_IPRPR_MENU | 1, 1);
}
//--------------------------------------/
file_name += UI_TXT_INDENT + c_hdr1(UI_TXT_COST) + UI_TXT_SPACE + cost_disp + UI_TXT_INDENT + c_hdr1(UI_TXT_LEVEL) + UI_TXT_SPACE + item_copy_level_disp;
/////
//----------------------------------------//
ui_disp_set_txt(DISP_INDEX_LOCAL1, "", c_hdr1(UI_TXT_IPRPR_SEL) + UI_TXT_SPACE + file_name);
ui_disp_state_new(DISP_INDEX_LOCAL1, 1);
//--------------------------------------/
break;
}
//--------------------------------------/
case SCRIPT_INDEX_IPRPR_SEL_1:
{
//charge player
//--------------------------------------/
int cost = GetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST);
//stack: [...][offset: 10][folder_index: 10][selected: 10]
int stack_param_1 = GetLocalInt(FCB_HOST, STACK_PARAM_ + IntToHexString(stack_index_sel-1));
if(give_gold(-cost, user))
{
//--------------------------------------/
object item = get_working_item();
int item_value = cost + get_item_cost(item);
//--------------------------------------/
//set currently selected to 0
SetLocalInt(FCB_HOST, STACK_PARAM_ + IntToHexString(stack_index_sel-1), (FILTER_F110 & stack_param_1));
//--------------------------------------/
int file_dir_sel = FILTER_F11 & stack_param_1;
int file_index_sel = FILTER_F1 & stack_param_1;
int file_index_offset = stack_param_1 >>> BITLEN_FILE_2;
int folder_index = FILTER_F10 & stack_param_1;
int file_index_start = FILTER_F1 & stack_param_1;
int file_type_menu = create_main_file_type_link(SCRIPT_INDEX_IPRPR_SEL_0 | MAIN_FOLDER_INDEX_IPRPR_MENU);
//clear for new entry
//--------------------------------------/
clear_main_folder(file_dir_sel - 1);
int n = 1;
int m = 1;
string iprp_list = "";
itemproperty iprp = GetFirstItemProperty(item);
while(GetIsItemPropertyValid(iprp))
{
if(n != file_index_sel)
{
string iprp_txt = ui_iprp_display(iprp);
if(m > 1)
{
iprp_list += UI_TXT_INDENT + iprp_txt;
}
else
{
iprp_list = iprp_txt;
}
if(file_index_start <= m)
{
create_main_file_int(folder_index, iprp_txt, file_type_menu, iprp_to_param(iprp));
}
m++;
}
else
{
RemoveItemProperty(item, iprp);
}
n++;
iprp = GetNextItemProperty(item);
}
//--------------------------------------/
SetLocalString(FCB_HOST, ITEM_SEL_TXT, iprp_list);
//set disp text
//--------------------------------------/
string item_header = ui_item_header(item, item_value);
ui_disp_set_txt(DISP_INDEX_HEADER, UI_TXT_ITEM_WORKING_CURRENT, item_header);
ui_disp_set_txt(DISP_INDEX_IPRP, UI_TXT_IPRP_CURRENT, iprp_list);
ui_disp_clear_local();
}
ui_stack_index(1);
visual_effect();
break;
}
//--------------------------------------/
case SCRIPT_INDEX_SETNAME_SEL_1:
{
string name = GetLocalString(FCB_HOST, SETNAME_SEL);
object item = set_working_item_name(name);
string item_header = ui_item_header(item);
ui_disp_set_txt(DISP_INDEX_HEADER, UI_TXT_ITEM_WORKING_CURRENT, item_header);
ui_disp_clear_local();
ui_stack_index(0);
visual_effect();
break;
}
//--------------------------------------/
case SCRIPT_INDEX_SETNAME_DEFAULT:
{
string name = GetName(get_working_item(), 1);
SetLocalString(FCB_HOST, SETNAME_SEL, name);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_SETNAME | 1, 0);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_SETNAME | 2, 0);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_SETNAME | 3, 1);
ui_disp_set_txt(DISP_INDEX_LOCAL1, UI_TXT_SETNAME_ENTERED, name);
ui_disp_state_new(DISP_INDEX_LOCAL1, 1);
break;
}
//--------------------------------------/
case SCRIPT_INDEX_CHARGE_SEL_0:
{
object item = get_working_item();
object item_copy = copy_item(item, FCB_INV);
int chcnt = GetLocalInt(FCB_HOST, MAIN_FILE_PARAM_ + IntToHexString(FILTER_F11 & stack_param));
SetItemCharges(item_copy, chcnt);
string charge_txt = IntToString(chcnt);
//--------------------------------------/
//check cost and ILR restriction
int mod_enable = 1;
//--------------------------------------/
int cost = get_item_cost(item_copy) - get_item_cost(item);
int user_gold = GetGold(user);
string cost_disp = IntToString(cost) + UI_TXT_UNIT_GP;
if(cost > user_gold)
{
cost_disp = c_crs(cost_disp + UI_TXT_INDENT + UI_TXT_COST_OUTOFBOUND);
mod_enable = 0;
}
else
{
if(cost <= 0)
{
cost_disp = c_hlt2(cost_disp);
}
}
//--------------------------------------/
int item_level = get_item_level(item);
int item_copy_level = get_item_level(item_copy);
int user_level = get_character_level(user);
string item_copy_level_disp = IntToString(item_copy_level);
if(GetLocalInt(FCB_HOST, SW_ILR_ENABLE)
&& item_copy_level > user_level
&& cost > 0)
{
item_copy_level_disp = c_crs(item_copy_level_disp + UI_TXT_INDENT + UI_TXT_LEVEL_OUTOFBOUND);
mod_enable = 0;
}
//--------------------------------------/
if(mod_enable)
{
SetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST, cost);
SetLocalInt(FCB_HOST, CHARGE_SEL, FILTER_F11 & chcnt);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_CHARGE_MENU | 1, 0);
}
else
{
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_CHARGE_MENU | 1, 1);
}
//--------------------------------------/
charge_txt += UI_TXT_INDENT + c_hdr1(UI_TXT_COST) + UI_TXT_SPACE + cost_disp + UI_TXT_INDENT + c_hdr1(UI_TXT_LEVEL) + UI_TXT_SPACE + item_copy_level_disp;
/////
//--------------------------------------/
DestroyObject(item_copy);
//--------------------------------------/
ui_disp_set_txt(DISP_INDEX_LOCAL1, "", c_hdr1(UI_TXT_CHARGE_SEL) + UI_TXT_SPACE + charge_txt);
ui_disp_state_new(DISP_INDEX_LOCAL1, 1);
//--------------------------------------/
break;
}
//--------------------------------------/
case SCRIPT_INDEX_CHARGE_SEL_1:
{
//charge player
//--------------------------------------/
int cost = GetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST);
DeleteLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST);
if(give_gold(-cost, user))
{
//--------------------------------------/
int chcnt = GetLocalInt(FCB_HOST, CHARGE_SEL);
object item = get_working_item();
SetItemCharges(item, chcnt);
string item_header = ui_item_header(item);
//--------------------------------------/
ui_disp_set_txt(DISP_INDEX_HEADER, UI_TXT_ITEM_WORKING_CURRENT, item_header);
ui_disp_clear_local();
}
ui_stack_index(0);
visual_effect();
break;
}
//--------------------------------------/
case SCRIPT_INDEX_DUPE_SEL_0:
{
object item = get_working_item();
//--------------------------------------/
int cost = get_item_cost(item);
string cost_disp = IntToString(cost) + UI_TXT_UNIT_GP;
if(cost > GetGold(user))
{
cost_disp = c_crs(cost_disp + UI_TXT_INDENT + UI_TXT_COST_OUTOFBOUND);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_DUPE | 1, 1);
}
else
{
if(cost <= 0)
{
cost_disp = c_hlt2(cost_disp);
}
SetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST, cost);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_DUPE | 1, 0);
}
string disp_txt = c_hdr1(UI_TXT_DUPE_COST) + UI_TXT_SPACE + cost_disp;
//--------------------------------------/
ui_disp_set_txt(DISP_INDEX_LOCAL1, "", disp_txt);
ui_disp_state_new(DISP_INDEX_LOCAL1, 1);
break;
}
//--------------------------------------/
case SCRIPT_INDEX_DUPE_SEL_1:
{
//charge player
//--------------------------------------/
int cost = GetLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST);
DeleteLocalInt(FCB_HOST, ITEM_WORKING_SEL_MOD_COST);
if(give_gold(-cost, user))
{
copy_item(get_working_item(), user);
//--------------------------------------/
ui_disp_clear_local();
}
ui_stack_index(0);
visual_effect();
break;
}
//--------------------------------------/
case SCRIPT_INDEX_COLORGUIDE:
{
ExecuteScript("fcb__colorguide", FCB_HOST);
break;
}
//--------------------------------------/
//--------------------------------------/
//--------------------------------------/
case SCRIPT_INDEX_DISP_IPRP:
{
ui_set_active_disp_index(DISP_INDEX_IPRP);
break;
}
//--------------------------------------/
case SCRIPT_INDEX_DISP_HEADER:
{
ui_set_active_disp_index(DISP_INDEX_HEADER);
break;
}
//--------------------------------------/
case SCRIPT_INDEX_DISP_BLANK:
{
ui_set_active_disp_index();
break;
}
//--------------------------------------/
//--------------------------------------/
//--------------------------------------/
case SCRIPT_INDEX_LISTEN_SETNAME:
{
ui_set_active_disp_index(DISP_INDEX_HEADER);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_SETNAME | 1, 1);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_SETNAME | 2, 1);
ui_main_set_hidden_refresh(MAIN_FOLDER_INDEX_SETNAME | 3, 0);
ui_disp_set_txt(DISP_INDEX_LOCAL1, UI_TXT_SETNAME_NONE);
ui_disp_state_new(DISP_INDEX_LOCAL1, 1);
break;
}
}
}