DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ScriptConsoleItemsTab.c
См. документацию.
1typedef Param3<string, bool, bool> PresetParams;// param1 - ??, param2 - ??, param3 - ??
2
4{
5 protected const string CONST_DEFAULT_PRESET_PREFIX = "[Default]";
6 protected static int ITEMS_SELECTED_ROW = -1;
7 protected static int PRESETS_SELECTED_ROW = 0;
8 protected static int ITEMS_IN_PRESET_SELECTED_ROW;
9 protected static float DRAW_DISTANCE = 1000;
10 protected static bool CLEAR_IVN;
11 static int OBJECT_SCOPE = 2;
12 protected static string m_LastSelectedObject;
13 protected static int m_SelectedObjectIsPreset = -1;
14 protected static ref array<Shape> m_DebugShapes = new array<Shape>;
15 protected static EntityAI m_PreviewEntity;
16 protected static float m_ItemQuantity = 1;
17 protected static bool m_WithPhysics = false;
18
19
21 protected ref array<string> m_CategoryButtonsNames = {"FIREARMS","MELEE","ATTACHMENTS","MAGAZINES","AMMO","FOOD","MEDICAL","CARS","BACKPACKS","B-BUILDING"};
23 protected int m_CategoryMask;
24 protected MissionGameplay m_MissionGameplay;
25 protected ref Timer m_RefreshFilterTimer = new Timer();
26 protected PluginDeveloper m_Developer;
27 protected bool m_FilterOrderReversed;
28 protected string m_SelectedObject;
29 protected string m_FilterTextPrev;
30 //Widgets
31 protected CheckBoxWidget m_CategoryMergeType;
32 protected CheckBoxWidget m_ItemPreviewCheckbox;
33 protected CheckBoxWidget m_ShowProtected;
34 protected CheckBoxWidget m_ClearInventory;
35 protected TextListboxWidget m_ObjectsTextListbox;
36 protected TextListboxWidget m_PresetsTextListbox;
37 protected TextListboxWidget m_PresetItemsTextListbox;
38 protected ButtonWidget m_DrawInWorld;
39 protected ButtonWidget m_DrawInWorldClear;
40 protected ButtonWidget m_PresetNewButton;
41 protected ButtonWidget m_PresetDeleteButton;
42 protected ButtonWidget m_PresetRenameButton;
43 protected ButtonWidget m_PresetSetDefaultButton;
44 protected ButtonWidget m_PresetAddItemtButton;
45 protected ButtonWidget m_ItemNameCopy;
46 protected ButtonWidget m_PresetRemoveItemButton;
47 protected ButtonWidget m_ItemMoveUpButton;
48 protected ButtonWidget m_ItemMoveDownButton;
49 protected ButtonWidget m_FilterOrderButton;
50 protected ButtonWidget m_SpawnInInvButton;
51 protected ButtonWidget m_SpawnGroundButton;
52 protected ButtonWidget m_SpawnGroundPatternGrid;
53 protected ButtonWidget m_SpawnOnTarget;
54 protected ButtonWidget m_SpawnOnCursor;
55 protected ButtonWidget m_SpawnInHands;
56 protected ButtonWidget m_SpawnBatchButton;
57 protected ButtonWidget m_ListActions;
58 protected MultilineEditBoxWidget m_ObjectFilter;
68 protected CheckBoxWidget m_WithPhysicsCheckbox;
69 protected ButtonWidget m_ReloadShapeButton;
75 protected ImageWidget m_FilterOrderImage;
76
77 override void InitializeTab(Widget root, ScriptConsole console, Widget button, ScriptConsoleTabBase parent = null)
78 {
79 super.InitializeTab(root, console, button, parent);
80
81 m_Developer = PluginDeveloper.Cast(GetPlugin(PluginDeveloper));
82
83 m_DrawInWorld = ButtonWidget.Cast(root.FindAnyWidget("ButtonDrawItem"));
84 m_DrawInWorldClear = ButtonWidget.Cast(root.FindAnyWidget("ButtonDrawItemClear"));
85
86 m_CategoryMergeType = CheckBoxWidget.Cast(root.FindAnyWidget("CategoryMergeType"));
87 m_ItemPreviewCheckbox = CheckBoxWidget.Cast(root.FindAnyWidget("ItemPreviewCheckbox"));
88 m_ReloadShapeButton = ButtonWidget.Cast(root.FindAnyWidget("ReloadShapeButton"));
89 m_ShowProtected = CheckBoxWidget.Cast(root.FindAnyWidget("ShowProtectedCheckbox"));
90 m_FilterOrderImage = ImageWidget.Cast(root.FindAnyWidget("ObjectFilterSortPic"));
91 m_ClearInventory = CheckBoxWidget.Cast(root.FindAnyWidget("ForceClearCheckbox"));
92 m_DrawDistanceWidget = EditBoxWidget.Cast(root.FindAnyWidget("DrawItemDistance"));
93 m_ObjectFilter = MultilineEditBoxWidget.Cast(root.FindAnyWidget("ObjectFilter"));
94 m_SpawnDistanceEditBox = EditBoxWidget.Cast(root.FindAnyWidget("SpawnDistance"));
95 m_SelectedObjectText = TextWidget.Cast(root.FindAnyWidget("SelectedObject"));
96 m_SelectedObjectLocalized = TextWidget.Cast(root.FindAnyWidget("SelectedObjectLocalized"));
97 m_ObjectsTextListbox = TextListboxWidget.Cast(root.FindAnyWidget("ObjectsList"));
98 m_PresetsTextListbox = TextListboxWidget.Cast(root.FindAnyWidget("PresetList"));
99 m_PresetItemsTextListbox = TextListboxWidget.Cast(root.FindAnyWidget("PresetItemsList"));
100 m_PresetNewButton = ButtonWidget.Cast(root.FindAnyWidget("NewPresetButton"));
101 m_PresetDeleteButton = ButtonWidget.Cast(root.FindAnyWidget("DeletePresetButton"));
102 m_PresetRenameButton = ButtonWidget.Cast(root.FindAnyWidget("RenamePresetButton"));
103 m_PresetSetDefaultButton = ButtonWidget.Cast(root.FindAnyWidget("SetDefaultPresetButton"));
104 m_PresetAddItemtButton = ButtonWidget.Cast(root.FindAnyWidget("AddToPresetButton"));
105 m_ItemNameCopy = ButtonWidget.Cast(root.FindAnyWidget("ItemNameCopy"));
106 m_PresetRemoveItemButton = ButtonWidget.Cast(root.FindAnyWidget("RemoveFromPresetButton"));
107 m_ItemMoveUpButton = ButtonWidget.Cast(root.FindAnyWidget("ItemMoveUpButton"));
108 m_ItemMoveDownButton = ButtonWidget.Cast(root.FindAnyWidget("ItemMoveDownButton"));
109 m_ItemPreviewWidget = ItemPreviewWidget.Cast(root.FindAnyWidget("ItemPreviewWidget"));
110
111 m_QuantityEditBox = EditBoxWidget.Cast(root.FindAnyWidget("QuantityValue"));
112 m_DamageEditBox = EditBoxWidget.Cast(root.FindAnyWidget("DamageValue"));
113 m_ItemDamageLabel = TextWidget.Cast(root.FindAnyWidget("DamageLabel"));
114 m_ItemQuantityLabel = TextWidget.Cast(root.FindAnyWidget("QuantityLabel"));
115 m_WithPhysicsCheckbox = CheckBoxWidget.Cast(root.FindAnyWidget("WithPhysicsCheckbox"));
116
117 m_SpawnInInvButton = ButtonWidget.Cast(root.FindAnyWidget("ButtonSpawnInInv"));
118 m_SpawnGroundButton = ButtonWidget.Cast(root.FindAnyWidget("ButtonSpawnInGround"));
119 m_SpawnOnTarget = ButtonWidget.Cast(root.FindAnyWidget("ButtonSpawnInTarget"));
120 m_SpawnOnCursor = ButtonWidget.Cast(root.FindAnyWidget("ButtonSpawnCursor"));
121 m_SpawnInHands = ButtonWidget.Cast(root.FindAnyWidget("ButtonSpawnHands"));
122 m_SpawnBatchButton = ButtonWidget.Cast(root.FindAnyWidget("ButtonSpawnBatch"));
123
124 string text;
125 m_SpawnInInvButton.GetText(text);
127 m_SpawnGroundButton.GetText(text);
129 m_SpawnOnTarget.GetText(text);
131 m_SpawnOnCursor.GetText(text);
133 m_SpawnInHands.GetText(text);
135 m_SpawnBatchButton.GetText(text);
137
138 m_ListActions = ButtonWidget.Cast(root.FindAnyWidget("ListActions"));
139
140
141 m_RectSpawnColumn = EditBoxWidget.Cast(root.FindAnyWidget("RectangleColumnValue"));
142 m_RectSpawnRow = EditBoxWidget.Cast(root.FindAnyWidget("RectangleRowValue"));
143 m_BatchSpawnQuantity = EditBoxWidget.Cast(root.FindAnyWidget("BatchCount"));
144
145 m_RectSpawnColumnStep = EditBoxWidget.Cast(root.FindAnyWidget("RectangleStepXValue"));
146 m_RectSpawnRowStep = EditBoxWidget.Cast(root.FindAnyWidget("RectangleStepYValue"));
147
148 m_FilterOrderButton = ButtonWidget.Cast(root.FindAnyWidget("ObjectFilterSortButton"));
149 Init();
150 }
151
153 {
154 ITEMS_SELECTED_ROW = m_ObjectsTextListbox.GetSelectedRow();
157
158 m_PresetsTextListbox.ClearItems();
159
160 if (m_PreviewEntity)
161 {
162 m_PreviewEntity.Delete();
163 }
164
166
168 {
169 m_ConfigDebugProfile.SetItemCategoryFlag(m_CategoryMask);
170 }
171
172 m_ItemQuantity = m_QuantityEditBox.GetText().ToFloat();
174 }
175
176
177
178 protected void Init()
179 {
180 m_RefreshFilterTimer.Run(0.85, this, "ChangeFilterItems", null, true);
181 m_PresetDeleteButton.Show(false);
182 m_PresetRenameButton.Show(false);
183 m_DrawDistanceWidget.SetText(DRAW_DISTANCE.ToString());
184
185 m_QuantityEditBox.SetText(m_ItemQuantity.ToString());
187
189 {
190 string txt = (m_ConfigDebugProfile.GetItemSearch());
191 m_ObjectFilter.SetText(m_ConfigDebugProfile.GetItemSearch());
192 m_SpawnDistanceEditBox.SetText(m_ConfigDebugProfile.GetSpawnDistance().ToString());
193
194
195 SetFilterOrder(m_ConfigDebugProfile.GetFilterOrderReversed());
196 //m_ConfigDebugProfile.SetItemCategoryFlag(m_CategoryMask);
197
198 m_BatchSpawnQuantity.SetText(m_ConfigDebugProfile.GetBatchSpawnQuantity().ToString());
199
200 m_CategoryMask = m_ConfigDebugProfile.GetItemCategoryFlag();
202 {
203 m_ItemPreviewCheckbox.SetChecked(m_ConfigDebugProfile.GetShowItemPreview());
204 }
205
206 array<ref CfgParam> params = m_ConfigDebugProfile.GetBatchSpawnRectangle();
207
208 m_RectSpawnRow.SetText(CfgParamInt.Cast(params.Get(0)).GetValue().ToString());
209 m_RectSpawnColumn.SetText(CfgParamInt.Cast(params.Get(1)).GetValue().ToString());
210 m_RectSpawnRowStep.SetText(CfgParamFloat.Cast(params.Get(2)).GetValue().ToString());
211 m_RectSpawnColumnStep.SetText(CfgParamFloat.Cast(params.Get(3)).GetValue().ToString());
212 }
213
214
215 if (OBJECT_SCOPE == 1)
216 m_ShowProtected.SetChecked(true);
217 else
218 m_ShowProtected.SetChecked(false);
219
220 int counter = 0;
221 foreach (string name: m_CategoryButtonsNames)
222 {
223 string widget_name = "ItemCategory" + counter;
224
225 CheckBoxWidget btw = CheckBoxWidget.Cast(m_ParentRoot.FindAnyWidget(widget_name));
226 if (btw)
227 {
228 btw.SetText(name);
229 m_CategoryButtonsWidgets.Insert(btw);
230 int bit = 1 << counter;
231 if (bit & m_CategoryMask)
232 {
233 btw.SetChecked(true);
234 btw.SetTextColor(ARGB(255, 255, 0, 0));
235 }
236 }
237 counter++;
238 }
239
241 {
244
245 m_SelectedObjectText.SetText("Object : " + GetCurrentItemName());
248 }
249
250 ChangeFilterItems(true);
251
253 //RenderPresetItems();
254
255 m_MissionGameplay = MissionGameplay.Cast(g_Game.GetMission());
256
257 if (!m_SelectedObjectIsPreset == 1 && ITEMS_SELECTED_ROW < m_ObjectsTextListbox.GetNumItems() && m_ObjectsTextListbox.GetNumItems() > 0 && ITEMS_SELECTED_ROW > -1)
258 {
261
262
264
265
268 m_PresetItemsTextListbox.SelectRow(-1);
270 }
271
272 if (m_PresetsTextListbox.GetNumItems() >= 0)
273 {
277 SelectPreset();
278 else
280 }
281
282 if (OBJECT_SCOPE == 1)
283 m_ShowProtected.SetChecked(true);
284 else
285 m_ShowProtected.SetChecked(false);
286
287
288 m_CategoryMergeType.SetChecked(m_ConfigDebugProfile.GetMergeType());
289
292 }
293
294 static void DrawItems(string type, float distance = 0)
295 {
296 if (!distance)
297 {
298 distance = DRAW_DISTANCE;
299 }
300 array<Object> objects = new array<Object>;
302
303 g_Game.GetObjectsAtPosition(g_Game.GetPlayer().GetPosition(), distance, objects, proxies);
304 int i = 0;
305 foreach (Object o: objects)
306 {
307 if (o.IsKindOf(type))
308 {
309 i++;
310 ScriptConsole.m_MarkedEntities.Insert(new MapMarker(o.GetPosition(),"",COLOR_RED,eMapMarkerTypes.MARKERTYPE_MAP_BORDER_CROSS));
311 Shape shape = Shape.CreateSphere(COLOR_RED, ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE|ShapeFlags.NOZBUFFER, o.GetPosition() + "0 30 0", 1);
312 vector lines[2];
313 lines[0] = o.GetPosition();
314 lines[1] = o.GetPosition() + "0 30 0";
315 Shape line = Shape.CreateLines(COLOR_RED, ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE|ShapeFlags.NOZBUFFER, lines, 2);
316 m_DebugShapes.Insert(shape);
317 m_DebugShapes.Insert(line);
318 }
319 }
320
322 //g_Game.GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLaterByName(this, "DrawItemsClear", 5000);
323 Debug.Log(string.Format("found %1 instances of type %1", i, type));
324 }
325
326
327 static void DrawItemsClear()
328 {
329 ScriptConsole.m_MarkedEntities.Clear();
330 foreach (Shape s: m_DebugShapes)
331 {
332 s.Destroy();
333 }
334 m_DebugShapes.Clear();
335 }
336
338 static string GetLastSelectedObject()
339 {
341 }
342
343 override bool OnKeyDown(Widget w, int x, int y, int key)
344 {
345 if (key == KeyCode.KC_D && m_SelectedObject != "")
346 {
348 return true;
349 }
350 else
351 return super.OnKeyDown(w, x, y, key);
352 }
353
354 void SelectObject(bool hide_presets = true)
355 {
356 if (hide_presets)
357 m_PresetItemsTextListbox.SelectRow(-1);
362
365 }
366
367
369 {
370 m_ObjectsTextListbox.SelectRow(-1);
375 m_SelectedObjectText.SetText("Preset : " + m_SelectedObject);
377
378 TStringArray command_array = new TStringArray;
379
380 m_ConfigDebugProfileFixed.GetPresetItems(m_SelectedObject, command_array, "cmd");
381
382 bool clear = !IsPresetFixed(m_SelectedObject);
383 if (command_array.IsValidIndex(0))
384 {
385 string first_line = command_array.Get(0);
386 first_line.ToLower();
387 clear = (first_line == "clear_inv");
388 }
389
390 m_ClearInventory.SetChecked(clear);
391 }
392
394 {
395 return m_PresetsTextListbox.GetSelectedRow();
396 }
397
399 {
400 return m_PresetItemsTextListbox.GetSelectedRow();
401 }
402
404 {
405 int index = GetCurrentPresetIndex();
406 if (index > -1 && index < m_PresetsTextListbox.GetNumItems())
407 {
408 PresetParams item_params_array;
409 m_PresetsTextListbox.GetItemData(index, 0, item_params_array);
410 return item_params_array.param2;
411 }
412 return false;
413 }
414
415 bool IsPresetFixed(string preset_name)
416 {
417 int preset_index = GetPresetIndexByName(preset_name);
418 PresetParams item_params_array;
419 if (preset_index > -1 && preset_index < m_PresetsTextListbox.GetNumItems())
420 {
421 m_PresetsTextListbox.GetItemData(preset_index, 0, item_params_array);
422 return item_params_array.param2;
423 }
424 return false;
425 }
426
427 int GetPresetIndexByName(string preset_name)
428 {
429 int i;
430 for (i = 0; i < m_PresetsTextListbox.GetNumItems(); i++)
431 {
432 PresetParams item_params_array;
433 m_PresetsTextListbox.GetItemData(i, 0, item_params_array);
434
435 if (item_params_array.param1 == preset_name)
436 {
437 return i;
438 }
439 }
440 return -1;
441 }
442
444 {
446 {
448
449 string preset_name = GetCurrentPresetName();
450 int item_index = GetCurrentItemIndex();
451
452 m_ItemMoveUpButton.Show(true);
453 m_ItemMoveDownButton.Show(true);
454
455 m_ItemDamageLabel.Show(true);
456 m_ItemQuantityLabel.Show(true);
457
458 if (preset_name != "" && item_index > -1)
459 {
460 m_DamageEditBox.Show(true);
461 m_QuantityEditBox.Show(true);
462 m_WithPhysicsCheckbox.Show(true);
463
464 float item_health= m_ConfigDebugProfile.GetItemHealth(GetCurrentPresetName(), GetCurrentItemIndex());
465 int item_quantity = m_ConfigDebugProfile.GetItemQuantity(GetCurrentPresetName(), GetCurrentItemIndex());
466 bool item_with_physics = m_ConfigDebugProfile.GetItemWithPhysics(GetCurrentPresetName(), GetCurrentItemIndex());
467
468 // damage
469 m_DamageEditBox.SetText(item_health.ToString());
470
471 // quantity
472 m_QuantityEditBox.SetText(item_quantity.ToString());
473
474 // with physics
475 m_WithPhysicsCheckbox.SetChecked(item_with_physics);
476 }
477 else
478 {
479 m_DamageEditBox.Show(false);
480 m_QuantityEditBox.Show(false);
481 m_WithPhysicsCheckbox.Show(false);
482
483 }
484 }
485 }
486
488 {
489 m_ItemMoveUpButton.Show(false);
490 m_ItemMoveDownButton.Show(false);
491 }
492
494 {
495 int object_row = m_ObjectsTextListbox.GetSelectedRow();
496 if (object_row >-1 && GetCurrentPresetIndex() >-1 && !IsCurrentPresetFixed())
497 {
498 m_PresetAddItemtButton.Show(true);
499 }
500 else
501 {
502 m_PresetAddItemtButton.Show(false);
503 }
504
506 {
507 m_PresetRemoveItemButton.Show(true);
508 }
509 else
510 {
511 m_PresetRemoveItemButton.Show(false);
512 }
513
514 if (object_row > -1)
515 {
516 m_ItemNameCopy.Show(true);
517 }
518 else
519 {
520 m_ItemNameCopy.Show(false);
521 }
522
523 }
524
526 {
527 int new_index = GetCurrentItemIndex() - 1;
528 if (GetCurrentItemIndex() != -1 && GetCurrentPresetIndex() != -1 && new_index > -1)
529 {
532 m_PresetItemsTextListbox.SelectRow (new_index);
533 }
534 }
535
537 {
538 int new_index = GetCurrentItemIndex() + 1;
539 if (GetCurrentItemIndex() != -1 && GetCurrentPresetIndex() != -1 && new_index < m_PresetItemsTextListbox.GetNumItems())
540 {
543 m_PresetItemsTextListbox.SelectRow (new_index);
544 }
545 }
546
547
549 {
551 {
552 m_ConfigDebugProfile.SetSpawnDistance(m_SpawnDistanceEditBox.GetText().ToFloat());
553 }
554 }
555
556 void RenamePreset(string new_preset_name)
557 {
558 if (new_preset_name && GetCurrentPresetIndex() != -1)
559 {
560 bool result = m_ConfigDebugProfile.PresetRename(GetCurrentPresetName(), new_preset_name);
561 RefreshLists();
562 }
563 }
564
565
566 void SpawnPreset(EntityAI target, bool clear_inventory, string preset_name, InventoryLocationType location = InventoryLocationType.ATTACHMENT, float distance = 0)
567 {
568 // spawn preset items into inventory
569 PlayerBase player = PlayerBase.Cast(g_Game.GetPlayer());
570 if (GetCurrentPresetIndex() != -1)
571 {
572 bool is_preset_fixed = IsCurrentPresetFixed();
573 TStringArray preset_array = new TStringArray;
574
575 if (is_preset_fixed)
576 {
577 m_ConfigDebugProfileFixed.GetPresetItems(preset_name, preset_array);
578
579 }
580 else
581 {
582 m_ConfigDebugProfile.GetPresetItems(preset_name, preset_array);
583 }
584
585 if (clear_inventory)
586 {
587 m_Developer.ClearInventory(target);
588 }
589
590 for (int i = 0; i < preset_array.Count(); i++)
591 {
592 float health = -1;
593 int quantity = 1;
594 bool with_physics = false;
595 if (is_preset_fixed)
596 {
597 health = m_ConfigDebugProfileFixed.GetItemHealth(preset_name, i);
598 quantity = m_ConfigDebugProfileFixed.GetItemQuantity(preset_name, i);
599 with_physics = m_ConfigDebugProfileFixed.GetItemWithPhysics(preset_name, i);
600 }
601 else
602 {
603 health = m_ConfigDebugProfile.GetItemHealth(preset_name, i);
604 quantity = m_ConfigDebugProfile.GetItemQuantity(preset_name, i);
605 with_physics = m_ConfigDebugProfile.GetItemWithPhysics(preset_name, i);
606 }
607 if (location == InventoryLocationType.ATTACHMENT)
608 EntityAI ent = m_Developer.SpawnEntityInInventory(target, preset_array.Get(i), -1, quantity, false, preset_name);
609 //m_Developer.SpawnEntityAsAttachment(player, target, preset_array.Get(i), -1, quantity, false, preset_name);
610 else if (location == InventoryLocationType.GROUND)
611 {
612 m_Developer.SpawnEntityOnCursorDir(player, preset_array.Get(i), quantity, distance, health, false, preset_name, with_physics);
613 }
614 }
615 if (g_Game.IsMultiplayer())
616 {
617 ScriptRPC rpc = new ScriptRPC();
618 rpc.Write(preset_name);
619 rpc.Write(target);
620 rpc.Send(player, ERPCs.DEV_RPC_SPAWN_PRESET, true, player.GetIdentity());
621 }
622 else
623 {
624 PluginDeveloper plugin = PluginDeveloper.Cast(GetPlugin(PluginDeveloper));
625 plugin.HandlePresetSpawn(player,preset_name,target);
626 }
627 }
628 }
629
630 void SetDefaultPreset(int preset_index)
631 {
632 // remove previous default parameter
633 string default_preset = m_ConfigDebugProfile.GetDefaultPreset();
634 if (default_preset != "")
635 {
636 int index = GetPresetIndexByName(default_preset);
637 // if is fixed
638 if (IsPresetFixed(default_preset))
639 {
640 default_preset = "[" + default_preset + "]";
641 }
642 PresetParams prev_preset_params_array;
643 if (index > -1 && index < m_PresetsTextListbox.GetNumItems())
644 {
645 m_PresetsTextListbox.GetItemData(index, 0, prev_preset_params_array);
646 prev_preset_params_array.param3 = false; // remove DEFAULT
647 m_PresetsTextListbox.SetItem(index, default_preset, prev_preset_params_array, 0);
648 }
649 }
650
651 // set preset on preset_index to default
652 // if is fixed
653 string preset_name = GetCurrentPresetName();
654 if (IsPresetFixed(preset_name))
655 {
656 preset_name = "[" + preset_name + "]";
657 }
658 // set new default preset
659 PresetParams preset_params_array;
660 index = GetCurrentPresetIndex();
661 if (index > -1 && index < m_PresetsTextListbox.GetNumItems())
662 {
663 m_PresetsTextListbox.GetItemData(index, 0, preset_params_array);
664 preset_params_array.param3 = true; // DEFAULT
665 m_PresetsTextListbox.SetItem(index, preset_name + CONST_DEFAULT_PRESET_PREFIX, preset_params_array, 0);
666 }
667 // store preset
668 m_ConfigDebugProfile.SetDefaultPreset(GetCurrentPresetName());
669 }
670
671 void SetObject(string object)
672 {
674
675 if (m_ConfigDebugProfile && m_ConfigDebugProfile.GetShowItemPreview())
676 {
677 SetPreviewObject(object);
678 }
679
680 }
681
682 void SetPreviewObject(string object)
683 {
684 #ifdef DEVELOPER
685 if (m_PreviewEntity)
686 {
687 m_PreviewEntity.Delete();
688 }
689
690 m_SelectedObjectLocalized.SetText("");
691
692 if (!g_Game.IsKindOf(object, "DZ_LightAI") && !g_Game.IsKindOf(object, "Man"))
693 {
694 DayZGame.m_IsPreviewSpawn = true;
696 m_PreviewEntity = EntityAI.Cast(g_Game.CreateObjectEx(object, "0 0 0", ECE_LOCAL | ECE_CREATEPHYSICS | ECE_TRACE));
697 DayZGame.m_IsPreviewSpawn = false;
698 if (m_PreviewEntity)
699 {
700 dBodyDestroy(m_PreviewEntity);//prevents cars from acting up when spawned this way(we only want the preview pic, no physics required)
701 m_PreviewEntity.DisableSimulation(true);
703 m_PreviewEntity.SetAllowDamage(false);
704
705 m_SelectedObjectLocalized.SetText(m_PreviewEntity.GetDisplayName());
706 }
707 }
708 #endif
709 }
710
712 {
713 string itemName = GetCurrentObjectName();
714 if (itemName != string.Empty && GetCurrentPresetIndex() != -1)
715 {
716 m_ConfigDebugProfile.ItemAddToPreset(GetCurrentPresetName(), itemName);
718 }
719 }
720
722 {
723 bool show = true;
725 {
726 show = false;
727 }
728 m_PresetDeleteButton.Show(show);
729 m_PresetRenameButton.Show(show);
730
732
733 }
734
735 protected void AddItemToClipboard()
736 {
737 string itemName = GetCurrentObjectName();
738 if (itemName != string.Empty)
739 {
740 g_Game.CopyToClipboard(itemName);
741 }
742 }
743
745 {
746 if (GetCurrentItemIndex() != -1 && GetCurrentPresetIndex() != -1)
747 {
750 }
751 }
752
754 {
755 int index = GetCurrentPresetIndex();
756 // load preset items list
757 if (index > -1 && index < m_PresetsTextListbox.GetNumItems())
758 {
759 PresetParams item_params_array;
760 m_PresetsTextListbox.GetItemData(index, 0, item_params_array);
761 return item_params_array.param1;
762 }
763 return "";
764 }
765
767 {
768 if (GetCurrentItemIndex() != -1)
769 {
770 string item_name;
771 m_PresetItemsTextListbox.GetItemText(GetCurrentItemIndex(), 0, item_name);
772 return item_name;
773 }
774 return "";
775 }
776
778 {
779 int selected_row_index = m_ObjectsTextListbox.GetSelectedRow();
780 if (selected_row_index != -1)
781 {
782 string item_name;
783 m_ObjectsTextListbox.GetItemText(selected_row_index, 0, item_name);
784
785 array<string> tokens = new array<string>();
786 int index = item_name.IndexOf(" - [");
787 if (index > -1)
788 {
789 item_name.Split(" - [", tokens);
790 }
791
792 return tokens[0];
793 }
794 return "";
795 }
796
798 {
801 }
802
803 // Render specific Preset Items
805 {
806 m_PresetsTextListbox.ClearItems();
807
808 int i;
809 TBoolArray preset_params;
810
811 // load custom presets list
812 TStringArray custom_presets_array = m_ConfigDebugProfile.GetPresets();
813 for (i = custom_presets_array.Count() - 1; i >= 0; i--)
814 {
815 m_PresetsTextListbox.AddItem(custom_presets_array.Get(i), new PresetParams (custom_presets_array.Get(i),false, false), 0);
816 }
817
818 // load fixed presets list
819 TStringArray presets_array = m_ConfigDebugProfileFixed.GetPresets();
820 for (i = 0; i < presets_array.Count(); i++)
821 {
822 m_PresetsTextListbox.AddItem("["+presets_array.Get(i)+"]", new PresetParams (presets_array.Get(i), true, false), 0);
823 }
824 string default_preset = m_ConfigDebugProfile.GetDefaultPreset();
825 if (default_preset != "")
826 {
827 // if is fixed
828 int index = GetPresetIndexByName(default_preset);
829 if (IsPresetFixed(default_preset))
830 {
831 default_preset = "[" + default_preset + "]";
832 }
833 PresetParams preset_params_array;
834 if (index > -1 && index < m_PresetsTextListbox.GetNumItems())
835 {
836 m_PresetsTextListbox.GetItemData(index, 0, preset_params_array);
837 m_PresetsTextListbox.SetItem(index, default_preset + CONST_DEFAULT_PRESET_PREFIX, preset_params_array, 0);
838 }
839 }
840 }
841
842 // Render specific Preset Items
844 {
845 // load preset items list
846 int i;
847 m_PresetItemsTextListbox.ClearItems();
848 if (GetCurrentPresetIndex() != -1)
849 {
850 bool isFixed = IsCurrentPresetFixed();
851 TStringArray preset_array = new TStringArray;
852
853 if (isFixed)
854 {
855 m_ConfigDebugProfileFixed.GetPresetItems(GetCurrentPresetName(), preset_array);
856 }
857 else
858 {
859 m_ConfigDebugProfile.GetPresetItems(GetCurrentPresetName(), preset_array);
860 }
861
862 if (preset_array)
863 {
864 for (i = 0; i < preset_array.Count(); i++)
865 {
866 m_PresetItemsTextListbox.AddItem(preset_array.Get(i), NULL, 0);
867 }
868 }
869 }
870 }
871
872 void NewPreset(string preset_name)
873 {
874 m_ConfigDebugProfile.PresetAdd(preset_name);
875 RefreshLists();
876 }
877
879 {
880 if (GetCurrentPresetIndex() != -1)
881 {
882 bool result = m_ConfigDebugProfile.PresetRemove(GetCurrentPresetName());
883 RefreshLists();
884 }
885 }
886
887 int GetFilterColor(string color)
888 {
889 switch (color)
890 {
891 case "r":
892 return ARGB(255,255,0,0);
893 case "g":
894 return ARGB(255,0,255,0);
895 case "b":
896 return ARGB(255,130,130,255);
897 case "y":
898 return ARGB(255,255,255,0);
899 case "o":
900 return ARGB(255,255,169,0);
901 }
902 return -1;//white
903 }
904
905 void PrepareFilters(string filter, out TStringArray filters, out TIntArray colors)
906 {
907 filter.Trim();
908 filter.ToLower();
909
910 filters = new TStringArray;
911 TStringArray rawFilters = new TStringArray;
912 filter.Split(" ", rawFilters);
913
914 colors = new TIntArray;
915
916
917 foreach (int i, string f:rawFilters)
918 {
919 int color = -1;
920 if (f.IndexOf(":") == 1)//detect color prefix
921 {
922 string clr = f.Substring(0, 1);
923 f = f.Substring(2, f.Length() - 2);//crop off color prefix
924 color = GetFilterColor(clr);
925 }
926 else//autocolor
927 {
928 if (i%2 == 1)
929 {
930 color = ARGB(200,255,255,255);
931 }
932 }
933 filters.Insert(f);
934 colors.Insert(color);
935 }
936 }
937
938
939 void ChangeFilter(TextListboxWidget widget, MultilineEditBoxWidget filterWidget, int categoryMask = -1, bool ignoreScope = false)
940 {
941 widget.ClearItems();
942
943 TStringArray filters;
944 TIntArray filterColors;
945
946 string widgetText;
947 filterWidget.GetText(widgetText);
948 PrepareFilters(widgetText, filters, filterColors);
949
950 map<string,int> itemsAndColors = new map<string,int>();
952
953 TStringArray itemsArray = TStringArray();
954
956 foreach (string itemName, ScriptConsoleItem itemData : items)
957 {
958 string displayName = "NO DISPLAY NAME";
959 if (itemData.m_DisplayName != string.Empty)
960 displayName = itemData.m_DisplayName;
961
962 int scope = itemData.m_Scope;
963 if (scope >= OBJECT_SCOPE || ignoreScope)
964 {
965 int categoryBit = itemData.m_CategoryMask;
966 categoryBit = (1 << categoryBit);
967
968 bool display = false;
969 bool matchWithDisplayName = false;
970 int color = 0;
971 if (categoryBit & categoryMask)
972 {
973 display = true;
974 }
975 else if ((!m_ConfigDebugProfile.GetMergeType() || categoryMask == 0) && filters.Count() > 0)
976 {
977 string childNameLower = itemName;
978 childNameLower.ToLower();
979 string displayNameLower = displayName;
980 displayNameLower.ToLower();
981
982 foreach (int indx, string filter : filters)
983 {
984 if (childNameLower.Contains(filter) || displayNameLower.Contains(filter))
985 {
986 display = false;
987 color = filterColors.Get(indx);
988 TStringArray arr = itemsByFilters.Get(filter);
989 if (!arr)
990 {
991 arr = new TStringArray();
992 itemsByFilters.Set(filter, arr);
993 }
994
995 arr.Insert(itemName + " - [" + displayName + "]");
996 itemsAndColors.Insert(itemName + " - [" + displayName + "]",color);
997 break;
998 }
999 }
1000 }
1001 else if (categoryMask == 0)
1002 {
1003 display = true;
1004 }
1005
1006 if (display)
1007 {
1008 itemsArray.Insert(itemName + " - [" + displayName + "]");
1009 }
1010 }
1011 }
1012
1013 if (itemsArray)
1014 {
1015 itemsArray.Sort();
1016 foreach (string it : itemsArray)
1017 {
1018 widget.AddItem(it, NULL, 0);
1019 }
1020 }
1021
1022 if (filters)
1023 {
1025 filters.Invert();
1026
1027 foreach (string f : filters)
1028 {
1029 TStringArray arr2 = itemsByFilters.Get(f);
1030 if (arr2)
1031 {
1032 arr2.Sort();
1033 foreach (string itm: arr2)
1034 {
1035 int row = widget.AddItem(itm, NULL, 0);
1036 int clr = itemsAndColors.Get(itm);
1037 if (clr)
1038 {
1039 widget.SetItemColor(row, 0, clr);
1040 }
1041 }
1042 }
1043 }
1044 }
1045 }
1046
1047 void SetFilterOrder(bool reversed)
1048 {
1049 m_FilterOrderReversed = reversed;
1050 if (reversed)
1051 m_FilterOrderImage.SetRotation(0,0,180,true);
1052 else
1053 m_FilterOrderImage.SetRotation(0,0,0,true);
1054 ChangeFilterItems(true);
1056 {
1057 m_ConfigDebugProfile.SetFilterOrderReversed(reversed);
1058 }
1059 }
1060
1061 override bool OnChange(Widget w, int x, int y, bool finished)
1062 {
1063 super.OnChange(w, x, y, finished);
1064 if (w == m_ShowProtected)
1065 {
1066 if (m_ShowProtected.IsChecked())
1067 {
1068 OBJECT_SCOPE = 1;
1069 }
1070 else
1071 {
1072 OBJECT_SCOPE = 2;
1073 }
1074 ChangeFilterItems(true);
1075 return true;
1076 }
1077 else if (w == m_ClearInventory)
1078 {
1079 CLEAR_IVN = m_ClearInventory.IsChecked();
1080 return true;
1081 }
1082 else if (m_CategoryButtonsWidgets.Find(w) >= 0)
1083 {
1084
1085 int pos = m_CategoryButtonsWidgets.Find(w);
1086 int bit = Math.Pow(2,pos);
1087 CheckBoxWidget cbw = CheckBoxWidget.Cast(w);
1088 if (cbw.IsChecked())
1089 {
1091 cbw.SetTextColor(ARGB(255, 255, 0, 0));
1092 }
1093 else
1094 {
1095 m_CategoryMask = (m_CategoryMask & ~bit);
1096 cbw.SetTextColor(ARGB(255, 255, 255,255));
1097 }
1098
1099 ChangeFilterItems(true);
1100 return true;
1101 }
1102
1103 /*
1104 if (w == m_ObjectFilter)
1105 {
1106 m_RefreshFilterTimer.Run(0.85, this, "ChangeFilterItems", null, false);
1107 return true;
1108 }*/
1109 if (w == m_QuantityEditBox && (GetCurrentItemIndex() >= 0 || GetCurrentPresetName() != ""))
1110 {
1111 m_ConfigDebugProfile.SetItemQuantity(GetCurrentPresetName(), GetCurrentItemIndex(), m_QuantityEditBox.GetText().ToFloat());
1112 return true;
1113 }
1114 else if (w == m_DrawDistanceWidget)
1115 {
1116 DRAW_DISTANCE = m_DrawDistanceWidget.GetText().ToFloat();
1117 return true;
1118 }
1119 else if (w == m_DamageEditBox && (GetCurrentItemIndex() >= 0 || GetCurrentPresetName() != ""))
1120 {
1121 m_ConfigDebugProfile.SetItemHealth(GetCurrentPresetName(), GetCurrentItemIndex(), m_DamageEditBox.GetText().ToFloat());
1122 return true;
1123 }
1124 else if (w == m_WithPhysicsCheckbox && (GetCurrentItemIndex() >= 0 || GetCurrentPresetName() != ""))
1125 {
1127 return true;
1128 }
1129 else if (w == m_BatchSpawnQuantity)
1130 {
1131 m_ConfigDebugProfile.SetBatchSpawnQuantity(m_BatchSpawnQuantity.GetText().ToInt());
1132 return true;
1133 }
1134 else if ((w == m_RectSpawnRow || w == m_RectSpawnColumn || w == m_RectSpawnRowStep || w == m_RectSpawnColumnStep))
1135 {
1136 if (w == m_RectSpawnRow || w == m_RectSpawnColumn)
1137 {
1138 int rowQ = m_RectSpawnRow.GetText().ToInt();
1139 int columnQ = m_RectSpawnColumn.GetText().ToInt();
1140 int result = columnQ * rowQ;
1141 m_BatchSpawnQuantity.SetText(result.ToString());
1142 m_ConfigDebugProfile.SetBatchSpawnQuantity(m_BatchSpawnQuantity.GetText().ToInt());
1143 }
1144
1146 {
1147 m_ConfigDebugProfile.SetBatchSpawnRectangle(m_RectSpawnRow.GetText().ToInt(),m_RectSpawnColumn.GetText().ToInt(), m_RectSpawnRowStep.GetText().ToFloat(),m_RectSpawnColumnStep.GetText().ToFloat());
1148 }
1149 return true;
1150 }
1151 return false;
1152 }
1153
1154 override bool OnItemSelected(Widget w, int x, int y, int row, int column, int oldRow, int oldColumn)
1155 {
1156 super.OnItemSelected(w, x, y, row, column, oldRow, oldColumn);
1158 {
1159 if (m_PresetsTextListbox.GetSelectedRow() != -1)
1160 {
1161 SelectPreset();
1162 return true;
1163 }
1164 }
1165 else if (w == m_PresetItemsTextListbox)
1166 {
1167 if (m_PresetItemsTextListbox.GetSelectedRow() != -1)
1168 {
1174 }
1175 return true;
1176 }
1177 else if (w == m_ObjectsTextListbox)
1178 {
1179 SelectObject(false);
1180 return true;
1181 }
1182 return false;
1183 }
1184
1185
1186 override bool OnClick(Widget w, int x, int y, int button)
1187 {
1188 super.OnClick(w,x,y,button);
1189 PlayerBase player = PlayerBase.Cast(g_Game.GetPlayer());
1190 int objects_row_index;
1191 if (w == m_CategoryMergeType)
1192 {
1194 {
1195 m_ConfigDebugProfile.SetMergeType(m_CategoryMergeType.IsChecked());
1196 }
1197 ChangeFilterItems(true);
1198 // Refresh UI by new settings
1199 m_MissionGameplay.GetHudDebug().RefreshByLocalProfile();
1200 return true;
1201 }
1202 else if (w == m_ObjectFilter)
1203 {
1204 ChangeFilterItems(true);
1205 return true;
1206 }
1207 else if (w == m_ItemPreviewCheckbox)
1208 {
1210 {
1211 m_ConfigDebugProfile.SetShowItemPreview(m_ItemPreviewCheckbox.IsChecked());
1212 if (!m_ItemPreviewCheckbox.IsChecked())
1213 {
1214 m_ItemPreviewWidget.SetItem(null);
1215 }
1216 }
1217 }
1218 else if (w == m_SpawnInInvButton || w == m_SpawnGroundButton || w == m_SpawnOnTarget || w == m_SpawnOnCursor || w == m_SpawnInHands)
1219 {
1221
1222 objects_row_index = m_ObjectsTextListbox.GetSelectedRow();
1223
1224 vector rayStart = g_Game.GetCurrentCameraPosition();
1225 vector rayEnd = rayStart + g_Game.GetCurrentCameraDirection() * 50;
1226 vector hitPos;
1227 vector hitNormal;
1228 int hitComponentIndex;
1229 set<Object> hitObjects = new set<Object>;
1230 //DayZPhysics.RaycastRV(rayStart, rayEnd, hitPos, hitNormal, hitComponentIndex, hitObjects, NULL, player,);
1231 DayZPhysics.RaycastRV(rayStart, rayEnd, hitPos, hitNormal, hitComponentIndex, hitObjects, NULL, player, false, false, ObjIntersectView, 0.3);
1232
1233 EntityAI target;
1234 if (hitObjects.Count())
1235 target = EntityAI.Cast(hitObjects.Get(0));
1236
1237 if (m_SelectedObject != "")
1238 {
1239 // @NOTE: duplicate code in PluginDeveloper.c
1240 float distance = m_SpawnDistanceEditBox.GetText().ToFloat();
1241
1242
1243 if (m_SelectedObjectIsPreset == 1)
1244 {
1245 //------------ PRESETS -------------
1246 switch (w)
1247 {
1248 case m_SpawnOnTarget:
1249 {
1250 if (target && target.IsInherited(EntityAI))
1251 {
1252 EntityAI att_parent = EntityAI.Cast(target) ;
1254 }
1255 break;
1256 }
1258 {
1259 SpawnPreset(player, false, m_SelectedObject, InventoryLocationType.GROUND, distance);
1260 break;
1261 }
1262 default:
1263 {
1265 break;
1266 }
1267 }
1268 }
1269 else
1270 {
1271 //------------SINGLE ITEMS ------------
1272
1273
1274 float health = m_DamageEditBox.GetText().ToFloat() * MiscGameplayFunctions.GetTypeMaxGlobalHealth(m_SelectedObject);
1275 float quantity = m_QuantityEditBox.GetText().ToFloat();
1276 bool withPhysics = m_WithPhysicsCheckbox.IsChecked();
1277
1278 bool spawnOnCrossHair = DeveloperFreeCamera.IsFreeCameraEnabled() || w == m_SpawnOnCursor;
1279
1280
1281 switch (w)
1282 {
1284 {
1285 m_Developer.SpawnEntityOnCursorDir(player, m_SelectedObject, quantity, distance, health, m_IsShiftDown, "", withPhysics);
1286 break;
1287 }
1288
1289 case m_SpawnOnTarget:
1290 {
1291 if (target && target.IsInherited(EntityAI))
1292 m_Developer.SpawnEntityInInventory(target, m_SelectedObject, health, quantity, m_IsShiftDown);
1293 break;
1294 }
1295
1296 case m_SpawnInInvButton:
1297 {
1298 m_Developer.SpawnEntityInPlayerInventory(player, m_SelectedObject, -1, quantity, m_IsShiftDown);
1299 break;
1300 }
1301 case m_SpawnInHands:
1302 {
1303 m_Developer.SpawnEntityInPlayerInventory(player, m_SelectedObject, -1, quantity, m_IsShiftDown,"", FindInventoryLocationType.HANDS);
1304 break;
1305 }
1306 case m_SpawnOnCursor:
1308 {
1309 if (spawnOnCrossHair)
1310 {
1311 m_Developer.SpawnItemOnCrosshair(player, m_SelectedObject, health, quantity, 40, true, m_IsShiftDown, withPhysics );
1312 }
1313 else
1314 {
1315 m_Developer.SpawnEntityOnCursorDir(player, m_SelectedObject, quantity, distance, health, m_IsShiftDown, "", withPhysics);
1316 }
1317 break;
1318 }
1319 }
1320 }
1321 }
1322 return true;
1323 }
1324 else if (w == m_FilterOrderButton)
1325 {
1327 return true;
1328 }
1329 else if (w == m_PresetsTextListbox)
1330 {
1331 SelectPreset();
1332 return true;
1333 }
1334 else if (w == m_PresetItemsTextListbox)
1335 {
1336 m_ObjectsTextListbox.SelectRow(-1);
1339 m_SelectedObjectText.SetText("Object : " + GetCurrentItemName());
1342
1343 return true;
1344 }
1345 else if (w == m_PresetSetDefaultButton)
1346 {
1347 if (GetCurrentPresetName()!= "")
1348 {
1350 }
1351 return true;
1352 }
1353 else if (w == m_PresetNewButton)
1354 {
1355 g_Game.GetUIManager().EnterScriptedMenu(MENU_SCRIPTCONSOLE_DIALOG_PRESET_NAME, m_ScriptConsole);
1356 return true;
1357 }
1358 else if (w == m_PresetDeleteButton)
1359 {
1360 if (GetCurrentPresetName()!= "")
1361 {
1362 DeletePreset();
1363 }
1364 return true;
1365 }
1366 else if (w == m_PresetRenameButton)
1367 {
1368 if (GetCurrentPresetName()!= "")
1369 {
1370 g_Game.GetUIManager().EnterScriptedMenu(MENU_SCRIPTCONSOLE_DIALOG_PRESET_RENAME, m_ScriptConsole);
1371 }
1372 return true;
1373 }
1374 else if (w == m_PresetAddItemtButton)
1375 {
1377 return true;
1378 }
1379 else if (w == m_ItemNameCopy)
1380 {
1382 return true;
1383 }
1384 else if (w == m_PresetRemoveItemButton)
1385 {
1387 return true;
1388 }
1389 else if (w == m_ItemMoveUpButton)
1390 {
1391 ItemMoveUp();
1392 return true;
1393 }
1394 else if (w == m_ItemMoveDownButton)
1395 {
1396 ItemMoveDown();
1397 return true;
1398 }
1399 else if (w == m_SpawnBatchButton)
1400 {
1401 int count = m_BatchSpawnQuantity.GetText().ToInt();
1402 int rows = m_RectSpawnRow.GetText().ToInt();
1403 int columns = m_RectSpawnColumn.GetText().ToInt();
1404 float rowStep = m_RectSpawnRowStep.GetText().ToFloat();
1405 float columnStep = m_RectSpawnColumnStep.GetText().ToFloat();
1406 m_Developer.SpawnEntityOnGroundPatternGrid(player, m_SelectedObject,count, m_DamageEditBox.GetText().ToFloat(), 1, rows, columns, rowStep, columnStep, m_IsShiftDown, m_WithPhysicsCheckbox.IsChecked());
1407 return true;
1408 }
1409 else if (w == m_ReloadShapeButton)
1410 {
1411#ifdef DEVELOPER
1412 Object obj = m_ItemPreviewWidget.GetItem();
1413 if (obj)
1414 {
1415 g_Game.ReloadShape(obj);
1416 }
1417#endif
1418 }
1419 else if (w == m_ListActions)
1420 {
1421 if (!m_PreviewEntity)
1422 return false;
1423
1424 return ListItemRelatedActions();
1425 }
1426 else if (w == m_ObjectsTextListbox)
1427 {
1428 SelectObject();
1429 return true;
1430 }
1431 else if (w == m_DrawInWorld)
1432 {
1434 return true;
1435
1436 }
1437 else if (w == m_DrawInWorldClear)
1438 {
1440 return true;
1441 }
1442
1443 return false;
1444 }
1445
1446 override bool OnDoubleClick(Widget w, int x, int y, int button)
1447 {
1448 super.OnDoubleClick(w, x, y, button);
1449
1450 int i;
1451 int objects_row_index;
1452 PlayerBase player = PlayerBase.Cast(g_Game.GetPlayer());
1453
1454 if (w == m_ObjectsTextListbox)
1455 {
1456 //select item
1457 m_PresetItemsTextListbox.SelectRow(-1);
1460 m_SelectedObjectText.SetText("Object : " + GetCurrentObjectName());
1461
1465
1466 //spawn item
1468
1469 objects_row_index = m_ObjectsTextListbox.GetSelectedRow();
1470
1471 vector rayStart = g_Game.GetCurrentCameraPosition();
1472 vector rayEnd = rayStart + g_Game.GetCurrentCameraDirection() * 1.5;
1473 vector hitPos;
1474 vector hitNormal;
1475 int hitComponentIndex;
1476 set<Object> hitObjects = new set<Object>;
1477 DayZPhysics.RaycastRV(rayStart, rayEnd, hitPos, hitNormal, hitComponentIndex, hitObjects, NULL, player);
1478
1479 Object target = NULL;
1480 if (hitObjects.Count())
1481 target = hitObjects.Get(0);
1482
1483 if (m_SelectedObject != "")
1484 {
1485 float distance = m_SpawnDistanceEditBox.GetText().ToFloat();
1486
1487 if (button == 0) //LMB
1488 {
1489 m_Developer.SpawnEntityOnCursorDir(player, m_SelectedObject, 1, distance);
1490 return true;
1491 }
1492 else if (button == 1) //RMB
1493 {
1494 if (g_Game.IsMultiplayer())
1495 {
1496 m_Developer.SpawnEntityInPlayerInventory(player, m_SelectedObject, -1, -1);
1497 }
1498 else
1499 {
1500 EntityAI spawned_entity = m_Developer.SpawnEntityOnCursorDir(player, m_SelectedObject, -1, distance);
1501 player.LocalTakeEntityToHands(spawned_entity);
1502 }
1503 return true;
1504 }
1505 else if (button == 2) //MMB
1506 {
1507 m_Developer.SpawnEntityOnCursorDir(player, m_SelectedObject, 1, distance,-1, true);
1508 return true;
1509 }
1510 }
1511
1512 }
1513 else if (w == m_QuantityEditBox)
1514 {
1515 m_QuantityEditBox.SetText("1.0");
1516 return true;
1517 }
1518 return false;
1519 }
1520
1521 override void Update(float timeslice)
1522 {
1523 super.Update(timeslice);
1524
1526 }
1527
1528 void SetTextSpawnButton(ButtonWidget w, bool special, string suffix = " Special")
1529 {
1530 string text = m_SpawnButtonsOriginalText.Get(w);
1531 if (special)
1532 text += suffix;
1533 w.SetText(text);
1534 }
1535
1545
1546 /*TStringArray GetItemsClasses()
1547 {
1548 return {CFG_VEHICLESPATH, CFG_WEAPONSPATH, CFG_MAGAZINESPATH, CFG_AMMO};
1549 }*/
1550
1551 protected string PreprocessFilterText(MultilineEditBoxWidget w)
1552 {
1553 string widgetText;
1554 w.GetText(widgetText);
1555
1556 if (widgetText.Contains(","))
1557 {
1558 widgetText.Replace(","," ");
1559 w.SetLine(0,widgetText);
1560 }
1561 return widgetText;
1562 }
1563
1564 void ChangeFilterItems(bool forced = false)
1565 {
1566 string widgetText = PreprocessFilterText(m_ObjectFilter);
1567 if (widgetText == m_FilterTextPrev && !forced)
1568 return;
1569
1570 m_FilterTextPrev = widgetText;
1571 string txt = m_ConfigDebugProfile.GetItemSearch();
1572
1573 m_ConfigDebugProfile.SetItemSearch(widgetText);
1575 }
1576
1578 {
1579 string message = "";
1580
1581 array<ActionBase_Basic> interactActions = new array<ActionBase_Basic>();
1582 m_PreviewEntity.GetActions(InteractActionInput, interactActions);
1583 if (interactActions)
1584 {
1585 message += "\n== Interact (F)\n\n";
1586 foreach (ActionBase_Basic iaction : interactActions)
1587 {
1588 if (iaction.Type() == ActionWorldCraft)
1589 continue;
1590
1591 ActionBase ia = ActionBase.Cast(iaction);
1592 message += string.Format("%1 <%2>\n", Widget.TranslateString(ia.GetText()), ia.ClassName());
1593 }
1594 }
1595
1596 array<ActionBase_Basic> continuousInteractActions = new array<ActionBase_Basic>();
1597 m_PreviewEntity.GetActions(ContinuousInteractActionInput, continuousInteractActions);
1598 if (continuousInteractActions)
1599 {
1600 message += "\n== Continuous Interact (F hold)\n\n";
1601 foreach (ActionBase_Basic ciaction : continuousInteractActions)
1602 {
1603 if (ciaction.Type() == ActionWorldCraft)
1604 continue;
1605
1606 ActionBase cia = ActionBase.Cast(ciaction);
1607 message += string.Format("%1 <%2>\n", Widget.TranslateString(cia.GetText()), cia.ClassName());
1608 }
1609 }
1610
1612 m_PreviewEntity.GetActions(DefaultActionInput, singleActions);
1613 if (singleActions)
1614 {
1615 message += "\n== Single (LMB)\n\n";
1616 foreach (ActionBase_Basic saction : singleActions)
1617 {
1618 if (saction.Type() == ActionWorldCraft)
1619 continue;
1620
1621 ActionBase sa = ActionBase.Cast(saction);
1622 message += string.Format("%1 <%2>\n", Widget.TranslateString(sa.GetText()), sa.ClassName());
1623 }
1624 }
1625
1626 array<ActionBase_Basic> continuousActions = new array<ActionBase_Basic>();
1627 m_PreviewEntity.GetActions(ContinuousDefaultActionInput, continuousActions);
1628 if (continuousActions)
1629 {
1630 ActionBase_Basic craftingAction;
1631 message += "\n== Continuous (LMB hold)\n\n";
1632 foreach (ActionBase_Basic caction : continuousActions)
1633 {
1634 if (caction.Type() != ActionWorldCraft)
1635 {
1636 ActionBase ca = ActionBase.Cast(caction);
1637 message += string.Format("%1 <%2>\n", Widget.TranslateString(ca.GetText()), ca.ClassName());
1638 }
1639 else
1640 {
1641 craftingAction = caction;
1642 }
1643 }
1644 message += "\n== Crafting recipes \n\n";
1645 if (craftingAction)
1646 {
1647 PluginRecipesManager pluginRecipesManager = PluginRecipesManager.Cast(GetPlugin(PluginRecipesManager));
1648 array<RecipeBase> recipes = pluginRecipesManager.GetRecipesForItem(m_PreviewEntity.GetType());
1649 foreach (RecipeBase recipe : recipes)
1650 {
1651 if (recipe.IsItemInRecipe("Inventory_Base"))
1652 continue;
1653
1654 message += string.Format("%1 <%2>\n", Widget.TranslateString(recipe.GetName()), recipe.Type());
1655 }
1656 }
1657 }
1658
1659 ScriptConsoleUniversalInfoDialog infoDialog = ScriptConsoleUniversalInfoDialog.Cast(g_Game.GetUIManager().EnterScriptedMenu(MENU_SCRIPTCONSOLE_UNIVERSAL_INFO_DIALOG, m_ScriptConsole));
1660 infoDialog.SetLabel(string.Format("%1 related actions", m_PreviewEntity.GetType()));
1661 infoDialog.SetContent(message);
1662
1663 return true;
1664 }
1665
1666 override void OnSelected()
1667 {
1669 }
1670}
void ActionBase()
Определения ActionBase.c:82
void ContinuousDefaultActionInput(PlayerBase player)
Определения ActionInput.c:630
const int ECE_LOCAL
Определения CentralEconomy.c:25
const int ECE_TRACE
Определения CentralEconomy.c:10
const int ECE_CREATEPHYSICS
Определения CentralEconomy.c:17
class BunkerBroadcastJsonDataBase proxies
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
DayZGame g_Game
Определения DayZGame.c:4074
Object object
Определения DustKickupEffects.c:18
ERPCs
Определения ERPCs.c:2
Empty
Определения Hand_States.c:14
Icon x
Icon y
FindInventoryLocationType
flags for searching locations in inventory
Определения InventoryLocation.c:18
InventoryLocationType
types of Inventory Location
Определения InventoryLocation.c:4
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
void ScriptConsole()
Определения ScriptConsole.c:114
Param3< string, bool, bool > PresetParams
Определения ScriptConsoleItemsTab.c:1
static proto bool RaycastRV(vector begPos, vector endPos, out vector contactPos, out vector contactDir, out int contactComponent, set< Object > results=NULL, Object with=NULL, Object ignore=NULL, bool sorted=false, bool ground_only=false, int iType=ObjIntersectView, float radius=0.0, CollisionFlags flags=CollisionFlags.NEARESTCONTACT)
Raycasts world by given parameters.
Определения DayZPhysics.c:124
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Определения 3_Game/DayZ/tools/Debug.c:183
Определения 3_Game/DayZ/tools/Debug.c:2
static bool IsFreeCameraEnabled()
Определения DeveloperFreeCamera.c:23
Определения EnWidgets.c:354
Определения gameplay.c:287
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
Определения AttachHolster.c:2
ButtonWidget m_DrawInWorldClear
Определения ScriptConsoleItemsTab.c:39
ref array< string > m_CategoryButtonsNames
Определения ScriptConsoleItemsTab.c:21
void SpawnPreset(EntityAI target, bool clear_inventory, string preset_name, InventoryLocationType location=InventoryLocationType.ATTACHMENT, float distance=0)
Определения ScriptConsoleItemsTab.c:566
TextWidget m_ItemQuantityLabel
Определения ScriptConsoleItemsTab.c:71
ButtonWidget m_SpawnOnCursor
Определения ScriptConsoleItemsTab.c:54
void PrepareFilters(string filter, out TStringArray filters, out TIntArray colors)
Определения ScriptConsoleItemsTab.c:905
ButtonWidget m_PresetSetDefaultButton
Определения ScriptConsoleItemsTab.c:43
CheckBoxWidget m_WithPhysicsCheckbox
Определения ScriptConsoleItemsTab.c:68
ButtonWidget m_SpawnGroundPatternGrid
Определения ScriptConsoleItemsTab.c:52
ref map< Widget, string > m_SpawnButtonsOriginalText
Определения ScriptConsoleItemsTab.c:22
void ItemMoveDown()
Определения ScriptConsoleItemsTab.c:536
CheckBoxWidget m_ClearInventory
Определения ScriptConsoleItemsTab.c:34
EditBoxWidget m_QuantityEditBox
Определения ScriptConsoleItemsTab.c:65
void ShowItemButtons()
Определения ScriptConsoleItemsTab.c:443
void ShowPresetButtons()
Определения ScriptConsoleItemsTab.c:721
void RenderPresets()
Определения ScriptConsoleItemsTab.c:804
TextListboxWidget m_PresetItemsTextListbox
Определения ScriptConsoleItemsTab.c:37
string m_SelectedObject
Определения ScriptConsoleItemsTab.c:28
ButtonWidget m_DrawInWorld
Определения ScriptConsoleItemsTab.c:38
CheckBoxWidget m_ShowProtected
Определения ScriptConsoleItemsTab.c:33
static string GetLastSelectedObject()
Определения ScriptConsoleItemsTab.c:338
MissionGameplay m_MissionGameplay
Определения ScriptConsoleItemsTab.c:24
MultilineEditBoxWidget m_ObjectFilter
Определения ScriptConsoleItemsTab.c:58
CheckBoxWidget m_ItemPreviewCheckbox
Определения ScriptConsoleItemsTab.c:32
void SelectObject(bool hide_presets=true)
Определения ScriptConsoleItemsTab.c:354
void ItemMoveUp()
Определения ScriptConsoleItemsTab.c:525
ButtonWidget m_ReloadShapeButton
Определения ScriptConsoleItemsTab.c:69
int GetCurrentItemIndex()
Определения ScriptConsoleItemsTab.c:398
void ShowItemTransferButtons()
Определения ScriptConsoleItemsTab.c:493
override bool OnKeyDown(Widget w, int x, int y, int key)
Определения ScriptConsoleItemsTab.c:343
ButtonWidget m_PresetRemoveItemButton
Определения ScriptConsoleItemsTab.c:46
void RefreshLists()
Определения ScriptConsoleItemsTab.c:797
void NewPreset(string preset_name)
Определения ScriptConsoleItemsTab.c:872
CheckBoxWidget m_CategoryMergeType
Определения ScriptConsoleItemsTab.c:31
ButtonWidget m_ItemMoveUpButton
Определения ScriptConsoleItemsTab.c:47
static bool m_WithPhysics
Определения ScriptConsoleItemsTab.c:17
static void DrawItemsClear()
Определения ScriptConsoleItemsTab.c:327
static int ITEMS_SELECTED_ROW
Определения ScriptConsoleItemsTab.c:6
TextWidget m_SelectedObjectText
Определения ScriptConsoleItemsTab.c:72
EditBoxWidget m_DamageEditBox
Определения ScriptConsoleItemsTab.c:66
void SetDefaultPreset(int preset_index)
Определения ScriptConsoleItemsTab.c:630
ButtonWidget m_SpawnInHands
Определения ScriptConsoleItemsTab.c:55
ButtonWidget m_PresetDeleteButton
Определения ScriptConsoleItemsTab.c:41
string GetCurrentItemName()
Определения ScriptConsoleItemsTab.c:766
override bool OnDoubleClick(Widget w, int x, int y, int button)
Определения ScriptConsoleItemsTab.c:1446
override void OnSelected()
Определения ScriptConsoleItemsTab.c:1666
static float m_ItemQuantity
Определения ScriptConsoleItemsTab.c:16
EditBoxWidget m_BatchSpawnQuantity
Определения ScriptConsoleItemsTab.c:67
static EntityAI m_PreviewEntity
Определения ScriptConsoleItemsTab.c:15
EditBoxWidget m_DrawDistanceWidget
Определения ScriptConsoleItemsTab.c:64
ButtonWidget m_SpawnOnTarget
Определения ScriptConsoleItemsTab.c:53
ButtonWidget m_PresetNewButton
Определения ScriptConsoleItemsTab.c:40
bool ListItemRelatedActions()
Определения ScriptConsoleItemsTab.c:1577
string GetCurrentObjectName()
Определения ScriptConsoleItemsTab.c:777
void AddItemToPreset()
Определения ScriptConsoleItemsTab.c:711
override bool OnChange(Widget w, int x, int y, bool finished)
Определения ScriptConsoleItemsTab.c:1061
bool IsCurrentPresetFixed()
Определения ScriptConsoleItemsTab.c:403
void ~ScriptConsoleItemsTab()
Определения ScriptConsoleItemsTab.c:152
ButtonWidget m_SpawnGroundButton
Определения ScriptConsoleItemsTab.c:51
int GetPresetIndexByName(string preset_name)
Определения ScriptConsoleItemsTab.c:427
static ref array< Shape > m_DebugShapes
Определения ScriptConsoleItemsTab.c:14
void AddItemToClipboard()
Определения ScriptConsoleItemsTab.c:735
ButtonWidget m_ItemNameCopy
Определения ScriptConsoleItemsTab.c:45
ButtonWidget m_FilterOrderButton
Определения ScriptConsoleItemsTab.c:49
EditBoxWidget m_RectSpawnRow
Определения ScriptConsoleItemsTab.c:60
void UpdateButtonNames()
Определения ScriptConsoleItemsTab.c:1536
ImageWidget m_FilterOrderImage
Определения ScriptConsoleItemsTab.c:75
void ChangeFilter(TextListboxWidget widget, MultilineEditBoxWidget filterWidget, int categoryMask=-1, bool ignoreScope=false)
Определения ScriptConsoleItemsTab.c:939
bool m_FilterOrderReversed
Определения ScriptConsoleItemsTab.c:27
TextListboxWidget m_ObjectsTextListbox
Определения ScriptConsoleItemsTab.c:35
PluginDeveloper m_Developer
Определения ScriptConsoleItemsTab.c:26
string PreprocessFilterText(MultilineEditBoxWidget w)
Определения ScriptConsoleItemsTab.c:1551
ItemPreviewWidget m_ItemPreviewWidget
Определения ScriptConsoleItemsTab.c:74
void RenderPresetItems()
Определения ScriptConsoleItemsTab.c:843
static void DrawItems(string type, float distance=0)
Определения ScriptConsoleItemsTab.c:294
ButtonWidget m_ListActions
Определения ScriptConsoleItemsTab.c:57
EditBoxWidget m_RectSpawnRowStep
Определения ScriptConsoleItemsTab.c:62
EditBoxWidget m_RectSpawnColumnStep
Определения ScriptConsoleItemsTab.c:63
TextListboxWidget m_PresetsTextListbox
Определения ScriptConsoleItemsTab.c:36
void HideItemButtons()
Определения ScriptConsoleItemsTab.c:487
int GetCurrentPresetIndex()
Определения ScriptConsoleItemsTab.c:393
static bool CLEAR_IVN
Определения ScriptConsoleItemsTab.c:10
void RenamePreset(string new_preset_name)
Определения ScriptConsoleItemsTab.c:556
const string CONST_DEFAULT_PRESET_PREFIX
Определения ScriptConsoleItemsTab.c:5
void SetTextSpawnButton(ButtonWidget w, bool special, string suffix=" Special")
Определения ScriptConsoleItemsTab.c:1528
ButtonWidget m_PresetRenameButton
Определения ScriptConsoleItemsTab.c:42
bool IsPresetFixed(string preset_name)
Определения ScriptConsoleItemsTab.c:415
override bool OnClick(Widget w, int x, int y, int button)
Определения ScriptConsoleItemsTab.c:1186
ButtonWidget m_ItemMoveDownButton
Определения ScriptConsoleItemsTab.c:48
void SetPreviewObject(string object)
Определения ScriptConsoleItemsTab.c:682
static int PRESETS_SELECTED_ROW
Определения ScriptConsoleItemsTab.c:7
ref array< Widget > m_CategoryButtonsWidgets
Определения ScriptConsoleItemsTab.c:20
static float DRAW_DISTANCE
Определения ScriptConsoleItemsTab.c:9
ref Timer m_RefreshFilterTimer
Определения ScriptConsoleItemsTab.c:25
static int OBJECT_SCOPE
Определения ScriptConsoleItemsTab.c:11
static string m_LastSelectedObject
Определения ScriptConsoleItemsTab.c:12
void SelectPreset()
Определения ScriptConsoleItemsTab.c:368
string m_FilterTextPrev
Определения ScriptConsoleItemsTab.c:29
static int ITEMS_IN_PRESET_SELECTED_ROW
Определения ScriptConsoleItemsTab.c:8
string GetCurrentPresetName()
Определения ScriptConsoleItemsTab.c:753
TextWidget m_ItemDamageLabel
Определения ScriptConsoleItemsTab.c:70
EditBoxWidget m_RectSpawnColumn
Определения ScriptConsoleItemsTab.c:61
ButtonWidget m_PresetAddItemtButton
Определения ScriptConsoleItemsTab.c:44
int GetFilterColor(string color)
Определения ScriptConsoleItemsTab.c:887
override bool OnItemSelected(Widget w, int x, int y, int row, int column, int oldRow, int oldColumn)
Определения ScriptConsoleItemsTab.c:1154
void RemoveItemFromPreset()
Определения ScriptConsoleItemsTab.c:744
EditBoxWidget m_SpawnDistanceEditBox
Определения ScriptConsoleItemsTab.c:59
void DeletePreset()
Определения ScriptConsoleItemsTab.c:878
void SetObject(string object)
Определения ScriptConsoleItemsTab.c:671
override void InitializeTab(Widget root, ScriptConsole console, Widget button, ScriptConsoleTabBase parent=null)
Определения ScriptConsoleItemsTab.c:77
void SaveProfileSpawnDistance()
Определения ScriptConsoleItemsTab.c:548
void ChangeFilterItems(bool forced=false)
Определения ScriptConsoleItemsTab.c:1564
void SetFilterOrder(bool reversed)
Определения ScriptConsoleItemsTab.c:1047
TextWidget m_SelectedObjectLocalized
Определения ScriptConsoleItemsTab.c:73
ButtonWidget m_SpawnBatchButton
Определения ScriptConsoleItemsTab.c:56
ButtonWidget m_SpawnInInvButton
Определения ScriptConsoleItemsTab.c:50
override void Update(float timeslice)
Определения ScriptConsoleItemsTab.c:1521
static int m_SelectedObjectIsPreset
Определения ScriptConsoleItemsTab.c:13
bool m_IsShiftDown
Определения ScriptConsoleTabBase.c:5
PluginConfigDebugProfile m_ConfigDebugProfile
Определения ScriptConsoleTabBase.c:11
ScriptConsole m_ScriptConsole
Определения ScriptConsoleTabBase.c:9
PluginConfigDebugProfileFixed m_ConfigDebugProfileFixed
Определения ScriptConsoleTabBase.c:12
Widget m_ParentRoot
Определения ScriptConsoleTabBase.c:6
proto native void Send(Object target, int rpc_type, bool guaranteed, PlayerIdentity recipient=NULL)
Initiate remote procedure call. When called on client, RPC is evaluated on server; When called on ser...
Определения gameplay.c:105
proto bool Write(void value_out)
Определения EnWidgets.c:220
Определения DayZPlayerImplement.c:39
Определения EnWidgets.c:190
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto string ToString(bool simple=true)
Определения Transport.c:70
Определения EnConvert.c:119
const int COLOR_RED
Определения 1_Core/DayZ/constants.c:64
ShapeFlags
Определения EnDebug.c:126
class DiagMenu Shape
don't call destructor directly. Use Destroy() instead
array< int > TIntArray
Определения EnScript.c:733
array< bool > TBoolArray
Определения EnScript.c:734
class array< Class T > TStringArray
KeyCode
Определения EnSystem.c:157
static proto float Pow(float v, float power)
Return power of v ^ power.
const int MENU_SCRIPTCONSOLE_UNIVERSAL_INFO_DIALOG
Определения 3_Game/DayZ/constants.c:219
const int MENU_SCRIPTCONSOLE_DIALOG_PRESET_NAME
Определения 3_Game/DayZ/constants.c:193
const int MENU_SCRIPTCONSOLE_DIALOG_PRESET_RENAME
Определения 3_Game/DayZ/constants.c:194
proto native void dBodyDestroy(notnull IEntity ent)
Destroys attached physics body.
proto int Replace(string sample, string replace)
Replace all occurrances of 'sample' in 'str' by 'replace'.
proto string Trim()
Returns trimmed string with removed leading and trailing whitespaces.
bool Contains(string sample)
Returns true if sample is substring of string.
Определения EnString.c:286
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
Определения EnString.c:396
proto native int IndexOf(string sample)
Finds 'sample' in 'str'. Returns -1 when not found.
static proto string Format(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
Gets n-th character from string.
proto int ToLower()
Changes string to lowercase. Returns length.
proto native void SetFocus(Widget w)
int ARGB(int a, int r, int g, int b)
Определения proto.c:322