Scripted Event Handlers – Arma 3

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Some wiki formatting)
(Add Arma 3 Contact Scripted Event Handler names until more details)
 
(3 intermediate revisions by the same user not shown)
Line 5: Line 5:
You can even implement your own scripted eventHandlers by using [[BIS_fnc_callScriptedEventHandler]].
You can even implement your own scripted eventHandlers by using [[BIS_fnc_callScriptedEventHandler]].
For all other available Event Handlers, see [[Arma 3: Event Handlers]].
For all other available Event Handlers, see [[Arma 3: Event Handlers]].
{{TOC|subtoc|content=
* 1. {{Link|#Functions}}
* 2. {{Link|#Examples}}
* 3. {{Link|#Events}}
* 4. {{Link|#{{Name|arma3contact}} Events}}
}}




Line 16: Line 23:


== Examples ==
== Examples ==
=== Create ===
<sqf>
waitUntil { sleep 1; player distance _GG < 10 };
[missionNamespace, "localPlayerNearFourArmedRobot", [player, _GG]] call BIS_fnc_callScriptedEventHandler;
</sqf>


=== Subscribe ===
=== Subscribe ===
Line 36: Line 36:
hint "Player opened the Arsenal"; // hint message to the player when he opens the Arsenal
hint "Player opened the Arsenal"; // hint message to the player when he opens the Arsenal
}] call BIS_fnc_addScriptedEventHandler;
}] call BIS_fnc_addScriptedEventHandler;
</sqf>
=== Trigger ===
<sqf>
waitUntil { sleep 1; player distance _GG < 10 };
[missionNamespace, "localPlayerNearFourArmedRobot", [player, _GG]] call BIS_fnc_callScriptedEventHandler;
</sqf>
</sqf>


Line 44: Line 51:
Each event is listed under the system that calls them whether this be a specific function or a module. List last updated for {{GVI|arma3|2.10}}
Each event is listed under the system that calls them whether this be a specific function or a module. List last updated for {{GVI|arma3|2.10}}


{| class="wikitable"
{| class="wikitable align-left"
|- class="align-center"
! Event namespace
! Event namespace
! Event name
! Event name
! Event passed parameters
! Event passed parameters


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== EG Spectator Display ===
=== EG Spectator Display ===
Line 73: Line 81:
| <sqf>params ["_isMapVisible"];</sqf>
| <sqf>params ["_isMapVisible"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Player opens pause menu ===
=== Player opens pause menu ===
Line 81: Line 89:
| <sqf>params ["_display"];</sqf>
| <sqf>params ["_display"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Player exits Game Options menu ===
=== Player exits Game Options menu ===
Line 89: Line 97:
| <sqf>params ["_okButtonPressed"];</sqf>
| <sqf>params ["_okButtonPressed"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Probing Beam (enoch) ===
=== Probing Beam (enoch) ===
Line 101: Line 109:
| <sqf>params ["_data", "_isEnded"];</sqf>
| <sqf>params ["_data", "_isEnded"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Respawn Display ===
=== Respawn Display ===
Line 109: Line 117:
| <sqf>params ["_display", "_keyCode", "_shift", "_ctrl", "_alt"];</sqf>
| <sqf>params ["_display", "_keyCode", "_shift", "_ctrl", "_alt"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Saving of the game, scripted or manual ===
=== Saving of the game, scripted or manual ===
Line 117: Line 125:
| {{n/a}}
| {{n/a}}


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[Event Scripts#teamSwitchedScript.sqs|teamSwitchedScript.sqs]] ===
=== [[Event Scripts#teamSwitchedScript.sqs|teamSwitchedScript.sqs]] ===
Line 125: Line 133:
| <sqf>params ["_originalUnit", "_switchToUnit"];</sqf>
| <sqf>params ["_originalUnit", "_switchToUnit"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_addScriptedEventHandler]] ===
=== [[BIS_fnc_addScriptedEventHandler]] ===
Line 133: Line 141:
| <sqf>params ["_namespace", "_name", "_handlerID"];</sqf>
| <sqf>params ["_namespace", "_name", "_handlerID"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_animateFlag]] ===
=== [[BIS_fnc_animateFlag]] ===
Line 141: Line 149:
| <sqf>params ["_flag", "_phaseEnd"];</sqf>
| <sqf>params ["_flag", "_phaseEnd"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== BIS_fnc_arsenal ===
=== [[BIS_fnc_arsenal]] ===
|-
|-
| <sqf>missionNamespace</sqf>
| <sqf>missionNamespace</sqf>
Line 159: Line 167:
* _toggleSpace: [[Boolean]] - <sqf inline>uiNamespace getVariable ["bis_fnc_arsenal_toggleSpace", false]];</sqf>
* _toggleSpace: [[Boolean]] - <sqf inline>uiNamespace getVariable ["bis_fnc_arsenal_toggleSpace", false]];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_bleedTickets]] ===
=== [[BIS_fnc_bleedTickets]] ===
Line 167: Line 175:
| <sqf>params ["_dominantSide", "_dominantSideOld", "_sides"];</sqf>
| <sqf>params ["_dominantSide", "_dominantSideOld", "_sides"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== BIS_fnc_EGSpectatorCamera ===
=== [[BIS_fnc_EGSpectatorCamera]] ===
|-
|-
| <sqf>missionNamespace</sqf>
| <sqf>missionNamespace</sqf>
Line 175: Line 183:
| <sqf>params ["_newMode"];</sqf>
| <sqf>params ["_newMode"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_garage]] ===
=== [[BIS_fnc_garage]] ===
Line 188: Line 196:
* _toggleSpace: [[Boolean]] - <sqf inline>uiNamespace getVariable ["bis_fnc_arsenal_toggleSpace", false]];</sqf>
* _toggleSpace: [[Boolean]] - <sqf inline>uiNamespace getVariable ["bis_fnc_arsenal_toggleSpace", false]];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
{{ArgTitle|3|[[BIS_fnc_initDisplay]]|{{GVI|arma3|2.04}}}}
{{ArgTitle|3|[[BIS_fnc_initDisplay]]|{{GVI|arma3|2.04}}}}
Line 200: Line 208:
| <sqf>params ["_display", "_class"];</sqf>
| <sqf>params ["_display", "_class"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_initInspectable]] ===
=== [[BIS_fnc_initInspectable]] ===
Line 209: Line 217:
any data, shown as used by the [[Arma 3: Leaflets|Leaflets]] system
any data, shown as used by the [[Arma 3: Leaflets|Leaflets]] system


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== BIS_fnc_initIntelObject ===
=== [[BIS_fnc_initIntelObject]] ===
|-
|-
| _object
| _object
Line 221: Line 229:
| <sqf>params ["_curator", "_foundBy", "_object"];</sqf>
| <sqf>params ["_curator", "_foundBy", "_object"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_kbTellLocal]] ===
=== [[BIS_fnc_kbTellLocal]] ===
Line 229: Line 237:
| <sqf>params ["_from", "_to", "_sentence", "_channel"];</sqf>
| <sqf>params ["_from", "_to", "_sentence", "_channel"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_packStaticWeapon]] ===
=== [[BIS_fnc_packStaticWeapon]] ===
Line 237: Line 245:
| <sqf>params ["_group", "_leader", "_gunner", "_assistant", "_weaponBag", "_baseBag"];</sqf>
| <sqf>params ["_group", "_leader", "_gunner", "_assistant", "_weaponBag", "_baseBag"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_playVideo]] ===
=== [[BIS_fnc_playVideo]] ===
Line 249: Line 257:
| <sqf>params ["_video"];</sqf>
| <sqf>params ["_video"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== BIS_fnc_priorityQueue* system ===
=== BIS_fnc_priorityQueue* system ===
Line 261: Line 269:
| <sqf>params ["_handle"];</sqf>
| <sqf>params ["_handle"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_removeAllScriptedEventHandlers]] ===
=== [[BIS_fnc_removeAllScriptedEventHandlers]] ===
Line 269: Line 277:
| <sqf>params ["_namespace", "_name", "_handlerID"];</sqf>
| <sqf>params ["_namespace", "_name", "_handlerID"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_removeScriptedEventHandler]] ===
=== [[BIS_fnc_removeScriptedEventHandler]] ===
Line 277: Line 285:
| <sqf>params ["_namespace", "_name", "_handlerID"];</sqf>
| <sqf>params ["_namespace", "_name", "_handlerID"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_respawnTickets]] ===
=== [[BIS_fnc_respawnTickets]] ===
Line 285: Line 293:
| <sqf>params ["_target"];</sqf>
| <sqf>params ["_target"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== [[BIS_fnc_unpackStaticWeapon]] ===
=== [[BIS_fnc_unpackStaticWeapon]] ===
Line 293: Line 301:
| <sqf>params ["_group", "_leader", "_gunner", "_assistant", "_weapon"];</sqf>
| <sqf>params ["_group", "_leader", "_gunner", "_assistant", "_weapon"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Curator RemoteControl ===
=== Module Curator RemoteControl ===
Line 302: Line 310:
* _isRemoteControlled is [[true]] when entering remote control, [[false]] when exiting
* _isRemoteControlled is [[true]] when entering remote control, [[false]] when exiting


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module End Game ===
=== Module End Game ===
Line 342: Line 350:
| <sqf>params ["_BIS_hvt_pickupInfo"];</sqf>
| <sqf>params ["_BIS_hvt_pickupInfo"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Game Master (Zeus) ===
=== Module Game Master (Zeus) ===
Line 358: Line 366:
| <sqf>params ["_curator", "_player"];</sqf>
| <sqf>params ["_curator", "_player"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Rich Curve Key ===
=== Module Rich Curve Key ===
Line 366: Line 374:
| <sqf>params ["_curKey"];</sqf>
| <sqf>params ["_curKey"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Sector ===
=== Module Sector ===
Line 374: Line 382:
| <sqf>params ["_sector", "_owner", "_ownerOld"];</sqf>
| <sqf>params ["_sector", "_owner", "_ownerOld"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Spawn AI: Sector Tactic ===
=== Module Spawn AI: Sector Tactic ===
Line 450: Line 458:
| <sqf>params ["_bis_groundSupport_disembarked", "_group", "_transport"];</sqf>
| <sqf>params ["_bis_groundSupport_disembarked", "_group", "_transport"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Timeline ===
=== Module Timeline ===
Line 466: Line 474:
| <sqf>params ["_timeline"];</sqf>
| <sqf>params ["_timeline"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Trident ===
=== Module Trident ===
Line 474: Line 482:
| <sqf>params ["_sideA", "_sideB", "_areFriendly"];</sqf>
| <sqf>params ["_sideA", "_sideB", "_areFriendly"];</sqf>


|- class="align-left"
|-
! colspan="3" |
! colspan="3" |
=== Module Vehicle Respawn ===
=== Module Vehicle Respawn ===
Line 482: Line 490:
| <sqf>params ["_newVeh", "_veh"];</sqf>
| <sqf>params ["_newVeh", "_veh"];</sqf>
|}
|}
== {{Name|arma3contact}} Events ==
{{Feature|arma3contact}}
{{Columns|5|
* "antennaAdded"
* "antennaDeleted"
* "arsenalPreOpen"
* "behaviourChanged"
* "currentSignalChanged"
* "dangerZoneEntered"
* "dangerZoneExited"
* "diaryRecordSet"
* "dominantSideChanged"
* "gravitPulseHit"
* "gravitPulseRewarded"
* "handleCombat"
* "handleWarningShot"
* "moveToModelSpaceCompleted"
* "puzzleReset"
* "puzzleStepCompleted"
* "puzzleTerminated"
* "refresh"
* "respawnTicketsExhausted"
* "rotationChanged"
* "signalEnded"
* "signalScanned"
* "signalStartedPassive"
* "siteSpawned"
* "taskSet"
* "translationChanged"
* "transmittingEnded"
* "transmittingStarted"
* "wpPatrolEnded"
* "wpPatrolStarted"
}}




[[Category: Event Handlers]]
[[Category: Event Handlers]]

Latest revision as of 12:55, 20 April 2024

Scripted Event Handlers are triggered by some of BI's modules and functions. When triggered any code registered for one of these events via BIS_fnc_addScriptedEventHandler will be executed. All the events exists as variables within a namespace, whether this is one of the main Namespaces like missionNamespace or uiNamespace or it could be a specific namespace like a Group or Object etc. The event also has a set of parameters passed to the executed code. You can even implement your own scripted eventHandlers by using BIS_fnc_callScriptedEventHandler. For all other available Event Handlers, see Arma 3: Event Handlers.


Functions


Examples

Subscribe

[missionNamespace, "localPlayerNearFourArmedRobot", { hint "Hello there"; }] call BIS_fnc_addScriptedEventHandler;

[missionNamespace, "arsenalOpened", { hint "Player opened the Arsenal"; // hint message to the player when he opens the Arsenal }] call BIS_fnc_addScriptedEventHandler;

Trigger

waitUntil { sleep 1; player distance _GG < 10 }; [missionNamespace, "localPlayerNearFourArmedRobot", [player, _GG]] call BIS_fnc_callScriptedEventHandler;


Events

This is a list of all available scripted events that exist through BI's functions and modules. Each event is listed under the system that calls them whether this be a specific function or a module. List last updated for Arma 3 logo black.png2.10

Event namespace Event name Event passed parameters

EG Spectator Display

"RscDisplayEGSpectator_OnCursorObjectFocused"
params ["_object"];
"RscDisplayEGSpectator_OnCursorObjectUnfocused"
params ["_object"];
"RscDisplayEGSpectator_OnFocusChanged"
params ["_newFocus"];
"RscDisplayEGSpectator_OnUiVisibilityChanged"
params ["_isVisible"];
"RscDisplayEGSpectator_MapStateChanged"
params ["_isMapVisible"];

Player opens pause menu

"OnGameInterrupt"
params ["_display"];

Player exits Game Options menu

"OnGameOptionsExited" Arma 3 logo black.png2.02
params ["_okButtonPressed"];

Probing Beam (enoch)

"probingStarted"
params ["_cursorTarget", "_data"];
"probingEnded"
params ["_data", "_isEnded"];

Respawn Display

"RscDisplayRespawnKeyDown"
params ["_display", "_keyCode", "_shift", "_ctrl", "_alt"];

Saving of the game, scripted or manual

"OnSaveGame" N/A

teamSwitchedScript.sqs

"teamSwitched"
params ["_originalUnit", "_switchToUnit"];

BIS_fnc_addScriptedEventHandler

"ScriptedEventHandlerAdded"
params ["_namespace", "_name", "_handlerID"];

BIS_fnc_animateFlag

_flag
"FlagAnimationDone"
params ["_flag", "_phaseEnd"];

BIS_fnc_arsenal

"arsenalPreOpen" Arma 3 logo black.png2.08 Fires just before Arsenal display is created
params ["_missionDisplay", "_center"];
"arsenalOpened"
params ["_display", "_toggleSpace"];
"arsenalClosed"
params ["_displayNull", "_toggleSpace"];

BIS_fnc_bleedTickets

"dominantSideChanged"
params ["_dominantSide", "_dominantSideOld", "_sides"];

BIS_fnc_EGSpectatorCamera

"EGSpectator_OnCameraModeChanged"
params ["_newMode"];

BIS_fnc_garage

"garageOpened"
params ["_display", "_toggleSpace"];
"garageClosed"
params ["_displayNull", "_toggleSpace"];
"OnDisplayRegistered"
params ["_display", "_class"];
"OnDisplayUnregistered"
params ["_display", "_class"];

BIS_fnc_initInspectable

"objectInspected"
params ["_object", "_texture", "_text", "_sound", "_textureRatio"];

any data, shown as used by the Leaflets system

BIS_fnc_initIntelObject

_object "intelObjectFound"
params ["_object", "_foundBy"];
_curator
"intelObjectFound"
params ["_curator", "_foundBy", "_object"];

BIS_fnc_kbTellLocal

"BIS_fnc_kbTellLocal_played"
params ["_from", "_to", "_sentence", "_channel"];

BIS_fnc_packStaticWeapon

_group
"StaticWeaponPacked"
params ["_group", "_leader", "_gunner", "_assistant", "_weaponBag", "_baseBag"];

BIS_fnc_playVideo

"BIS_fnc_playVideo_started"
params ["_video"];
"BIS_fnc_playVideo_stopped"
params ["_video"];

BIS_fnc_priorityQueue* system

"BIS_onQueue%1Pop" where %1 is ID returned from BIS_fnc_priorityQueue_Init
params ["_handle"];
"BIS_onQueue%1Push" where %1 is ID returned from BIS_fnc_priorityQueue_Init
params ["_handle"];

BIS_fnc_removeAllScriptedEventHandlers

"ScriptedEventHandlerRemoved"
params ["_namespace", "_name", "_handlerID"];

BIS_fnc_removeScriptedEventHandler

"ScriptedEventHandlerRemoved"
params ["_namespace", "_name", "_handlerID"];

BIS_fnc_respawnTickets

"respawnTicketsExhausted"
params ["_target"];

BIS_fnc_unpackStaticWeapon

_group
"StaticWeaponUnpacked"
params ["_group", "_leader", "_gunner", "_assistant", "_weapon"];

Module Curator RemoteControl

_curator
"curatorObjectRemoteControlled"
params ["_curator", "_player", "_unit", "_isRemoteControlled"];
  • _isRemoteControlled is true when entering remote control, false when exiting

Module End Game

"EndGame_OnStageChanged"
params ["_stage", "_side"];
"EndGame_OnStartGameObjectiveCompleted"
params ["_side"];
"EndGame_OnObjectiveStateChanged"
params ["_objective", "_side", "_newState"];
"EndGame_OnObjectiveCompleted"
params ["_objective"];
"EndGame_OnObjectiveEnded"
params ["_objective"];
"EndGame_OnDownloadCompleted"
params ["_side", "_isUpload"];
"EndGame_Ended"
params ["_winnerSide", "_loserSide", "_isDraw"];
"onUploadStateChanged"
params ["_side"]; // can be nil
"onPickupInfoChanged"
params ["_BIS_hvt_pickupInfo"];

Module Game Master (Zeus)

_curator
"curatorGroupPlaced"
params ["_group"];
_curator
"curatorObjectPlaced"
params ["_object"];
_curator
"curatorUnitAssigned"
params ["_curator", "_player"];

Module Rich Curve Key

_curKey "reached"
params ["_curKey"];

Module Sector

_sector
"ownerChanged"
params ["_sector", "_owner", "_ownerOld"];

Module Spawn AI: Sector Tactic

"bis_groundSupport_groupSpawned"
params ["_bis_groundSupport_groupSpawned", "_group", "_side"];
"bis_groundSupport_wiped"
params ["_bis_groundSupport_wiped", "_group"];
"bis_groundSupport_inEnemySector"
params ["_bis_groundSupport_inEnemySector", "_group"];
"bis_groundSupport_destinationReached"
params ["_bis_groundSupport_destinationReached", "_group"];
"bis_groundSupport_groupTypeChanged"
params ["_bis_groundSupport_groupTypeChanged", "_group", "_type", "_currentType"];
"bis_groundSupport_decimated"
params ["_bis_groundSupport_decimated", "_group"];
"bis_groundSupport_farFromDestination"
params ["_bis_groundSupport_farFromDestination", "_group"];
"bis_groundSupport_needTransport"
params ["_bis_groundSupport_needTransport", "_group"];
"bis_groundSupport_joined"
params ["_bis_groundSupport_joined", "_group", "_transportGroup"];
"bis_groundSupport_closeToDestination"
params ["_bis_groundSupport_closeToDestination", "_group"];
"bis_groundSupport_needEvac"
params ["_bis_groundSupport_needEvac", "_group"];
"bis_groundSupport_needAmmo"
params ["_bis_groundSupport_needAmmo", "_group"];
"bis_groundSupport_needSupport"
params ["_bis_groundSupport_needSupport", "_group", "_reportedVehicle"];
"bis_groundSupport_boarded"
params ["_bis_groundSupport_boarded", "_group", "_transport"];
"bis_groundSupport_transportStarted"
params ["_bis_groundSupport_transportStarted", "_group", "_transport"];
"bis_groundSupport_transportEnded"
params ["_bis_groundSupport_transportEnded", "_group", "_transport"];
"bis_groundSupport_transportAborted"
params ["_bis_groundSupport_transportAborted", "_group", "_transport"];
"bis_groundSupport_disembarked"
params ["_bis_groundSupport_disembarked", "_group", "_transport"];

Module Timeline

_timeline
"finished"
params ["_timeline"];
_timeline
"played" N/A
_timeline
"looped"
params ["_timeline"];

Module Trident

"BIS_fnc_moduleTrident_updated"
params ["_sideA", "_sideB", "_areFriendly"];

Module Vehicle Respawn

"respawn"
params ["_newVeh", "_veh"];


Arma 3 Contact Events

enoch icon ca.png
This content is exclusive to the Arma 3 Contact Expansion.
  • "antennaAdded"
  • "antennaDeleted"
  • "arsenalPreOpen"
  • "behaviourChanged"
  • "currentSignalChanged"
  • "dangerZoneEntered"
  • "dangerZoneExited"
  • "diaryRecordSet"
  • "dominantSideChanged"
  • "gravitPulseHit"
  • "gravitPulseRewarded"
  • "handleCombat"
  • "handleWarningShot"
  • "moveToModelSpaceCompleted"
  • "puzzleReset"
  • "puzzleStepCompleted"
  • "puzzleTerminated"
  • "refresh"
  • "respawnTicketsExhausted"
  • "rotationChanged"
  • "signalEnded"
  • "signalScanned"
  • "signalStartedPassive"
  • "siteSpawned"
  • "taskSet"
  • "translationChanged"
  • "transmittingEnded"
  • "transmittingStarted"
  • "wpPatrolEnded"
  • "wpPatrolStarted"