object objLandInterface; object objFastReloadTable; object objTownStateTable; int g_intRetVal; bool bDisableFastReload = false; #define BLI_UPDATE_PERIOD 500 #event_handler("evntBattleCommandSound","procBattleCommandSound"); bool bLandInterfaceStart = false; void procBattleCommandSound() { string comName = GetEventData(); if(comName=="deactivate") { PlaySound("interface\ok.wav"); } if(comName=="activate") { PlaySound("interface\ok.wav"); } if(comName=="right" || comName=="left") { PlaySound("interface\ok.wav"); } } void InitBattleLandInterface() { bLandInterfaceStart = false; SetEventHandler(EVENT_LOCATION_LOAD,"StartBattleLandInterface",0); SetEventHandler(EVENT_LOCATION_UNLOAD,"EndBattleLandInterface",0); LoadLIStates(); } void BLI_EnableShow() { SetLandInterfaceShow(sti(InterfaceStates.BattleShow.Command)); } void BLI_DisableShow() { SetLandInterfaceShow(false); } void StartBattleLandInterface() { if(bLandInterfaceStart) { BLI_SetObjectData(); return; } bLandInterfaceStart = true; BLI_SetShowParameters(); CreateEntity(&objLandInterface,"battle_land_interface"); DeleteAttribute(&objLandInterface,""); LayerAddObject("execute",&objLandInterface,-1); LayerAddObject("realize",&objLandInterface,-1); SetEventHandler(EVENT_CHANGE_OFFICERS,"BLI_UpdateOfficers",0); SetEventHandler(EVENT_DIALOG_START,"BLI_DisableShow",0); SetEventHandler(EVENT_DIALOG_EXIT,"BLI_EnableShow",0); BLI_SetObjectData(); if(dialogRun) BLI_DisableShow(); else BLI_EnableShow(); SetEventHandler("evntBLI_Update","BLI_UpdateObjectData",0); SetEventHandler("BI_CommandEndChecking","BLI_CheckCommand",0); SetEventHandler("BI_LaunchCommand","BLI_ExecuteCommand",0); SetEventHandler("BI_SetPossibleCommands","BLI_SetPossibleCommands",0); SetEventHandler("evntFindDialogChar","procFindDialogChar",0); SetEventHandler("Location_CharacterEntryToLocator", "BLI_ChrEnterToLocation", 0); SetEventHandler("Location_CharacterExitFromLocator", "BLI_ChrExitFromLocation", 0); SetEventHandler("evntPerkAgainUsable","BLI_RefreshCommandMenu",0); Event("evntBLI_Update"); Event("evntFindDialogChar"); } ref BLI_CheckCommand() { string commandName = GetEventData(); aref uiref; makearef(uiref,objLandInterface.UserIcons); aref ar; int nq = GetAttributesNum(uiref); int i; bool bUsed = false; for(i=0; i= 0 ) { if( CheckAttribute(arItm,"potion") ) { DoCharacterUsedItem(GetMainCharacter(),arItm.id); } } } } break; case "BI_DialogStart": tmpi = SendMessage(GetMainCharacter(),"ls",MSG_CHARACTER_EX_MSG,"FindDialogCharacter"); if(tmpi>=0) Event("dlgReady","l",tmpi); break; case "BI_ItemsChange": tmpi = SendMessage(GetMainCharacter(),"ls",MSG_CHARACTER_EX_MSG,"FindDialogCharacter"); if(tmpi>=0) LaunchCharacterItemChange(GetCharacter(tmpi)); break; case "BI_TakeItem": Item_OnPickItem(); break; case "BI_PlaceItem": Item_OnUseItem(); break; case "BI_OutDoor": Event("Control Activation","s","ChrAction"); break; case "BI_UseBox": OpenBoxProcedure(); break; case "BI_ActivateRush": ActivateCharacterPerk(GetMainCharacter(),"Rush"); break; } } void EndBattleLandInterface() { if(!bLandInterfaceStart) return; bLandInterfaceStart = false; DeleteAttribute( GetMainCharacter(), "boxname" ); BLI_DisableShow(); SendMessage(&objLandInterface,"l",MSG_BATTLE_LAND_END); DeleteClass(&objLandInterface); DelEventHandler(EVENT_CHANGE_OFFICERS,"BLI_UpdateOfficers"); DelEventHandler(EVENT_DIALOG_START,"BLI_DisableShow"); DelEventHandler(EVENT_DIALOG_EXIT,"BLI_EnableShow"); DelEventHandler("evntBLI_Update","BLI_UpdateObjectData"); DelEventHandler("BI_CommandEndChecking","BLI_CheckCommand"); DelEventHandler("BI_LaunchCommand","BLI_ExecuteCommand"); DelEventHandler("BI_SetPossibleCommands","BLI_SetPossibleCommands"); DelEventHandler("evntFindDialogChar","procFindDialogChar"); DelEventHandler("Location_CharacterEntryToLocator", "BLI_ChrEnterToLocation"); DelEventHandler("Location_CharacterExitFromLocator", "BLI_ChrExitFromLocation"); DelEventHandler("evntPerkAgainUsable","BLI_RefreshCommandMenu"); Log_SetActiveAction("Nothing"); } void BLI_SetObjectData() { DeleteAttribute(&objLandInterface,""); objLandInterface.data.riskAlarm = 0; // индикатор тревоги objLandInterface.data.alarm = 0.0; // персы вместе с нами ref mainCh = GetMainCharacter(); aref ar; int i,cn; ref curCh; string attrName; for(i=0; i<4; i++) { cn = GetOfficersIndex(mainCh,i); if(cn==-1) continue; curCh = GetCharacter(cn); attrName = "id"+i; makearef(ar,objLandInterface.data.icons.(attrName)); ar.picture = curCh.FaceId; ar.health = 0.0; ar.charge = 0.0; } BLI_SetCommandParameters(); BLI_SetMassageParameters(); // текстуры int idLngFile = LanguageOpenFile("commands_name.txt"); objLandInterface.CommandTextures.list.t0.name = "battle_interface\LandCommands.tga"; objLandInterface.CommandTextures.list.t0.xsize = 2; objLandInterface.CommandTextures.list.t0.ysize = 4; objLandInterface.CommandTextures.list.t1.name = "battle_interface\LandTarget4.tga"; objLandInterface.CommandTextures.list.t1.xsize = 4; objLandInterface.CommandTextures.list.t1.ysize = 1; objLandInterface.CommandTextures.list.t2.name = "battle_interface\LandTarget1.tga"; objLandInterface.CommandTextures.list.t2.xsize = 1; objLandInterface.CommandTextures.list.t2.ysize = 1; objLandInterface.CommandTextures.list.t3.name = "battle_interface\Cancel.tga"; objLandInterface.CommandTextures.list.t3.xsize = 1; objLandInterface.CommandTextures.list.t3.ysize = 1; objLandInterface.CommandTextures.list.t4.name = "battle_interface\UsedItems1.tga"; objLandInterface.CommandTextures.list.t4.xsize = 2; objLandInterface.CommandTextures.list.t4.ysize = 2; objLandInterface.CommandTextures.list.t5.name = "battle_interface\UsedItems2.tga"; objLandInterface.CommandTextures.list.t5.xsize = 1; objLandInterface.CommandTextures.list.t5.ysize = 2; objLandInterface.CommandTextures.CommandTexNum = 0; // DeleteAttribute(&objIconsNote,""); objIconsNote.1x0 = LanguageConvertString(idLngFile, "go_store"); objIconsNote.1x1 = LanguageConvertString(idLngFile, "go_shipyard"); objIconsNote.1x2 = LanguageConvertString(idLngFile, "go_tavern"); objIconsNote.1x3 = LanguageConvertString(idLngFile, "go_residence"); objIconsNote.2x0 = LanguageConvertString(idLngFile, "go_port"); // список команд objLandInterface.Commands.Cancel.enable = false; objLandInterface.Commands.Cancel.picNum = 0; objLandInterface.Commands.Cancel.texNum = 3; objLandInterface.Commands.Cancel.event = "Cancel"; objLandInterface.Commands.FastReload.enable = true; objLandInterface.Commands.FastReload.picNum = 3; objLandInterface.Commands.FastReload.event = "BI_FastReload"; objLandInterface.Commands.FastReload.note = LanguageConvertString(idLngFile, "land_FastReload"); objLandInterface.Commands.ItemsUse.enable = true; objLandInterface.Commands.ItemsUse.picNum = 0; objLandInterface.Commands.ItemsUse.event = "BI_ItemsUse"; objLandInterface.Commands.ItemsUse.note = LanguageConvertString(idLngFile, "land_ItemsUse"); objLandInterface.Commands.DialogStart.enable = true; objLandInterface.Commands.DialogStart.picNum = 4; objLandInterface.Commands.DialogStart.event = "BI_DialogStart"; objLandInterface.Commands.DialogStart.note = LanguageConvertString(idLngFile, "land_DialogStart"); objLandInterface.Commands.ItemsChange.enable = true; objLandInterface.Commands.ItemsChange.picNum = 1; objLandInterface.Commands.ItemsChange.event = "BI_ItemsChange"; objLandInterface.Commands.ItemsChange.note = LanguageConvertString(idLngFile, "land_ItemsChange"); objLandInterface.Commands.TakeItem.enable = true; objLandInterface.Commands.TakeItem.picNum = 5; objLandInterface.Commands.TakeItem.event = "BI_TakeItem"; objLandInterface.Commands.TakeItem.note = LanguageConvertString(idLngFile, "land_TakeItem"); objLandInterface.Commands.PlaceItem.enable = true; objLandInterface.Commands.PlaceItem.picNum = 5; objLandInterface.Commands.PlaceItem.event = "BI_PlaceItem"; objLandInterface.Commands.PlaceItem.note = LanguageConvertString(idLngFile, "land_PlaceItem"); objLandInterface.Commands.OutDoor.enable = true; objLandInterface.Commands.OutDoor.picNum = 2; objLandInterface.Commands.OutDoor.event = "BI_OutDoor"; objLandInterface.Commands.OutDoor.note = LanguageConvertString(idLngFile, "land_OutDoor"); objLandInterface.Commands.UseBox.enable = true; objLandInterface.Commands.UseBox.picNum = 1; objLandInterface.Commands.UseBox.event = "BI_UseBox"; objLandInterface.Commands.UseBox.note = LanguageConvertString(idLngFile, "land_UseBox"); objLandInterface.Commands.ActivateRush.enable = true; objLandInterface.Commands.ActivateRush.picNum = 6; objLandInterface.Commands.ActivateRush.event = "BI_ActivateRush"; objLandInterface.Commands.ActivateRush.note = LanguageConvertString(idLngFile, "land_ActivateRush"); // список пользовательских картинок // cancel icon objLandInterface.UserIcons.cancel.enable = true; objLandInterface.UserIcons.cancel.pic = 0; objLandInterface.UserIcons.cancel.tex = 3; objLandInterface.UserIcons.cancel.name = "cancel"; LanguageCloseFile(idLngFile); // go to icons int idxloc = FindLoadedLocation(); string outGroupName = ""; RecalculateHireCrew(idxloc); if(idxloc>=0 && CheckAttribute(&Locations[idxloc],"fastreload")) { outGroupName = Locations[idxloc].fastreload; CreateReloadPaths(outGroupName); } SendMessage(&objLandInterface,"l",MSG_BATTLE_LAND_START); } bool FindUserIcon(string id,ref uiref) { aref arroot,ar; makearef(arroot,objLandInterface.UserIcons); for(int i=0; i=0) { objLandInterface.Commands.DialogStart.enable = true; if( IsOfficer(&Characters[i]) ) { objLandInterface.Commands.ItemsChange.enable = true; } else { if( CheckAttribute(&Characters[i],"InterfaceFlags.ItemsChange") && Characters[i].InterfaceFlags.ItemsChange != "0" ) { objLandInterface.Commands.ItemsChange.enable = true; } } } bUseCommand = true; } if(GetCharacterPerkUsing(mchref,"Rush")) { objLandInterface.Commands.ActivateRush.enable = true; bUseCommand = true; } if( CanBeUseItem(mchref) ) { objLandInterface.Commands.ItemsUse.enable = true; bUseCommand = true; } if(CheckAttribute(mchref,"boxname")) { objLandInterface.Commands.UseBox.enable = true; bUseCommand = true; } if( CheckAttribute(mchref,"activeItem") && mchref.activeItem!="" ) { bUseCommand = true; if( CheckAttribute(mchref,"activeItem.pick") && mchref.activeItem.pick=="1" ) { objLandInterface.Commands.TakeItem.enable = true; } else { objLandInterface.Commands.PlaceItem.enable = true; } } if( chrWaitReloadLocator != "" ) { bUseCommand = true; objLandInterface.Commands.OutDoor.enable = true; } if(!bUseCommand) { SendMessage(&objLandInterface,"llllll",BI_IN_SET_COMMAND_MODE,0,-1,-1,-1,-1); } //objLandInterface.Commands.OutDoor.enable = true; } void BLI_evntRefreshCommandMenu() { DelEventHandler("frame","BLI_evntRefreshCommandMenu"); BLI_RefreshCommandMenu(); } void BLI_RefreshCommandMenu() { SendMessage(&objLandInterface,"lllll",BI_IN_SET_COMMAND_MODE,-1,-1,-1,-1,-1); } void procFindDialogChar() { ref mchref = GetMainCharacter(); int dlgChar = -1; if(!LAi_IsBoardingProcess()) dlgChar = SendMessage(mchref,"ls",MSG_CHARACTER_EX_MSG,"FindDialogCharacter"); int oldDlgChar = -1; if(CheckAttribute(mchref,"dialogready")) oldDlgChar = sti(mchref.dialogready); if(dlgChar!=oldDlgChar) { mchref.dialogready = dlgChar; BLI_RefreshCommandMenu(); } PostEvent("evntFindDialogChar",1000); } void BLI_ChrEnterToLocation() { aref loc = GetEventData(); aref chr = GetEventData(); string group = GetEventData(); string locator = GetEventData(); aref locList,locCur; int i,n; if(sti(chr.index) != GetMainCharacterIndex()) return; if(group=="reload") { makearef(locList,loc.reload); n = GetAttributesNum(locList); for(i=0;i=0) { if(CheckAttribute(&locations[i],"id.label")) { Log_SetStringToLog(locations[i].id.label); } } } SetEventHandler("frame","BLI_evntRefreshCommandMenu",1); } } void BLI_ChrExitFromLocation() { SetEventHandler("frame","BLI_evntRefreshCommandMenu",1); } void LI_Reload() { /* SetEvemt chrCharacterKeys ref mc = GetMainCharacter(); Reload(chrWaitReloadRef, chrWaitReloadLocator, mc.location); chrWaitReloadLocator = ""; chrWaitReloadIsNoLink = false;*/ Event("Control Activation","s","ChrAction"); } bool SetUsedPotionIcons() { aref arItm, ar, uiref; int i, itmIdx, nq; ref mc = GetMainCharacter(); bool bUsed = false; makearef(uiref,objLandInterface.UserIcons); nq = GetAttributesNum(uiref); for(i=0; i=0) { if( EnablePotionUsing(mc,arItm) ) { UI_idx++; UI_name = "potion"+UI_idx; objLandInterface.UserIcons.(UI_name).enable = true; objLandInterface.UserIcons.(UI_name).pic = GetPotionPicture(arItm); objLandInterface.UserIcons.(UI_name).tex = GetPotionTexture(arItm); objLandInterface.UserIcons.(UI_name).name = UI_name; objLandInterface.UserIcons.(UI_name).potion = arItm.id; bUsed = true; } itmIdx = FindPotionFromChr(mc, &arItm, itmIdx+1); } return bUsed; } bool SetReloadIcons() { int i, nq, locidx; aref ar, curloc, locref, locList, uiref; ref mc = GetMainCharacter(); bool bUse = false; makearef(uiref,objLandInterface.UserIcons); nq = GetAttributesNum(uiref); for(i=0; i=0 && CheckAttribute(&Locations[idxloc],"fastreload")) { outGroupName = Locations[idxloc].fastreload; if( CheckAttribute(&objFastReloadTable,"table."+outGroupName) ) { makearef(locList,objFastReloadTable.table.(outGroupName)); nq = GetAttributesNum(locList); for(i=0; i