diff --git a/code/ryzom/client/data/gamedev/adds/sfx/marauder_teleporter.ps b/code/ryzom/client/data/gamedev/adds/sfx/marauder_teleporter.ps
new file mode 100644
index 000000000..cf6a508a9
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/sfx/marauder_teleporter.ps differ
diff --git a/code/ryzom/client/data/gamedev/adds/shapes/GE_HOF_caster_pvp_pantabottes.shape b/code/ryzom/client/data/gamedev/adds/shapes/GE_HOF_caster_pvp_pantabottes.shape
new file mode 100644
index 000000000..713018df8
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/shapes/GE_HOF_caster_pvp_pantabottes.shape differ
diff --git a/code/ryzom/client/data/gamedev/adds/shapes/GE_HOM_caster_pvp_pantabottes.shape b/code/ryzom/client/data/gamedev/adds/shapes/GE_HOM_caster_pvp_pantabottes.shape
new file mode 100644
index 000000000..b3fb8f6ca
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/shapes/GE_HOM_caster_pvp_pantabottes.shape differ
diff --git a/code/ryzom/client/data/gamedev/adds/shapes/GE_pvp_big_shield.shape b/code/ryzom/client/data/gamedev/adds/shapes/GE_pvp_big_shield.shape
new file mode 100644
index 000000000..c72f5304e
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/shapes/GE_pvp_big_shield.shape differ
diff --git a/code/ryzom/client/data/gamedev/adds/shapes/tp_diamand.shape b/code/ryzom/client/data/gamedev/adds/shapes/tp_diamand.shape
new file mode 100644
index 000000000..147ff3abb
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/shapes/tp_diamand.shape differ
diff --git a/code/ryzom/client/data/gamedev/adds/shapes/tp_socle.shape b/code/ryzom/client/data/gamedev/adds/shapes/tp_socle.shape
new file mode 100644
index 000000000..4a3eea639
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/shapes/tp_socle.shape differ
diff --git a/code/ryzom/client/data/gamedev/adds/textures/event_refday_yber.tga b/code/ryzom/client/data/gamedev/adds/textures/event_refday_yber.tga
new file mode 100644
index 000000000..b8e05a831
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/textures/event_refday_yber.tga differ
diff --git a/code/ryzom/client/data/gamedev/adds/textures/gn_pvp_dress.tga b/code/ryzom/client/data/gamedev/adds/textures/gn_pvp_dress.tga
new file mode 100644
index 000000000..026711a84
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/textures/gn_pvp_dress.tga differ
diff --git a/code/ryzom/client/data/gamedev/adds/textures/gn_pvp_dress_hof.tga b/code/ryzom/client/data/gamedev/adds/textures/gn_pvp_dress_hof.tga
new file mode 100644
index 000000000..83f18a9b3
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/textures/gn_pvp_dress_hof.tga differ
diff --git a/code/ryzom/client/data/gamedev/adds/textures/ul_mission_hall_of_fame.dds b/code/ryzom/client/data/gamedev/adds/textures/ul_mission_hall_of_fame.dds
new file mode 100644
index 000000000..03f9e0442
Binary files /dev/null and b/code/ryzom/client/data/gamedev/adds/textures/ul_mission_hall_of_fame.dds differ
diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/texture_interfaces_v3.txt b/code/ryzom/client/data/gamedev/interfaces_v3/texture_interfaces_v3.txt
new file mode 100644
index 000000000..11fb51519
--- /dev/null
+++ b/code/ryzom/client/data/gamedev/interfaces_v3/texture_interfaces_v3.txt
@@ -0,0 +1,1145 @@
+r2ed_create_location.tga 0.000000000000 0.000000000000 0.195312500000 0.195312500000
+w_radar.tga 0.195312500000 0.000000000000 0.320312500000 0.125000000000
+skin_blank.tga 0.320312500000 0.000000000000 0.445312500000 0.125000000000
+skin_l1_blank.tga 0.195312500000 0.125000000000 0.320312500000 0.250000000000
+skin_header_m.tga 0.000000000000 0.250000000000 0.250000000000 0.281250000000
+r2ed_spring.tga 0.320312500000 0.125000000000 0.398437500000 0.203125000000
+r2ed_fall.tga 0.398437500000 0.125000000000 0.476562500000 0.203125000000
+r2ed_summer.tga 0.320312500000 0.203125000000 0.398437500000 0.281250000000
+r2ed_winter.tga 0.398437500000 0.203125000000 0.476562500000 0.281250000000
+r2_forest_back.tga 0.250000000000 0.250000000000 0.312500000000 0.312500000000
+r2_lakes_back.tga 0.000000000000 0.281250000000 0.062500000000 0.343750000000
+r2ed_previousLocations.tga 0.062500000000 0.281250000000 0.125000000000 0.343750000000
+r2ed_newLocation.tga 0.125000000000 0.281250000000 0.187500000000 0.343750000000
+r2ed_strictRules.tga 0.187500000000 0.281250000000 0.250000000000 0.343750000000
+r2ed_liberalRules.tga 0.312500000000 0.281250000000 0.375000000000 0.343750000000
+r2_jungle_back.tga 0.375000000000 0.281250000000 0.437500000000 0.343750000000
+r2_roots_back.tga 0.437500000000 0.281250000000 0.500000000000 0.343750000000
+r2_desert_back.tga 0.250000000000 0.312500000000 0.312500000000 0.375000000000
+r2_map_edge_arrow.tga 0.000000000000 0.375000000000 0.500000000000 0.381835937500
+W_slot_jauge_3.tga 0.000000000000 0.195312500000 0.123046875000 0.220703125000
+bulle_ia.tga 0.125000000000 0.195312500000 0.187500000000 0.242187500000
+jauge.tga 0.000000000000 0.343750000000 0.152343750000 0.359375000000
+slot_jauge.tga 0.312500000000 0.343750000000 0.464843750000 0.359375000000
+w_slot_categorie.tga 0.445312500000 0.000000000000 0.492187500000 0.046875000000
+w_slot_icon.tga 0.445312500000 0.046875000000 0.492187500000 0.093750000000
+r2_main_menu_full.tga 0.152343750000 0.343750000000 0.218750000000 0.375000000000
+r2_main_menu_full_over.tga 0.000000000000 0.382812500000 0.066406250000 0.414062500000
+r2_main_menu_full_pushed.tga 0.066406250000 0.382812500000 0.132812500000 0.414062500000
+item_selection.tga 0.132812500000 0.382812500000 0.177734375000 0.427734375000
+skin_m_open.tga 0.476562500000 0.093750000000 0.492187500000 0.218750000000
+jauge_action.tga 0.000000000000 0.222656250000 0.089843750000 0.242187500000
+slot_jauge_action.tga 0.179687500000 0.382812500000 0.269531250000 0.402343750000
+W_slot_item_selected.tga 0.269531250000 0.382812500000 0.310546875000 0.423828125000
+W_slot_item.tga 0.312500000000 0.382812500000 0.353515625000 0.423828125000
+r2ed_tool_draw_road_pushed.tga 0.355468750000 0.382812500000 0.398437500000 0.420898437500
+r2ed_tool_freeze_object.tga 0.398437500000 0.382812500000 0.441406250000 0.420898437500
+r2ed_tool_freeze_object_over.tga 0.441406250000 0.382812500000 0.484375000000 0.420898437500
+r2ed_tool_freeze_object_pushed.tga 0.179687500000 0.402343750000 0.222656250000 0.440429687500
+r2ed_tool_go_test.tga 0.222656250000 0.402343750000 0.265625000000 0.440429687500
+r2ed_tool_go_test_over.tga 0.000000000000 0.414062500000 0.042968750000 0.452148437500
+r2ed_tool_go_test_pushed.tga 0.042968750000 0.414062500000 0.085937500000 0.452148437500
+r2ed_tool_map_window.tga 0.085937500000 0.414062500000 0.128906250000 0.452148437500
+r2ed_tool_map_window_over.tga 0.355468750000 0.421875000000 0.398437500000 0.459960937500
+r2ed_tool_map_window_pushed.tga 0.398437500000 0.421875000000 0.441406250000 0.459960937500
+r2ed_tool_palette_window_over.tga 0.441406250000 0.421875000000 0.484375000000 0.459960937500
+r2ed_tool_palette_window_pushed.tga 0.265625000000 0.425781250000 0.308593750000 0.463867187500
+r2ed_tool_paste.tga 0.308593750000 0.425781250000 0.351562500000 0.463867187500
+r2ed_tool_paste_over.tga 0.128906250000 0.429687500000 0.171875000000 0.467773437500
+r2ed_tool_paste_pushed.tga 0.171875000000 0.441406250000 0.214843750000 0.479492187500
+r2ed_tool_pick.tga 0.214843750000 0.441406250000 0.257812500000 0.479492187500
+r2ed_tool_prim_display_mode.tga 0.000000000000 0.453125000000 0.042968750000 0.491210937500
+r2ed_tool_prim_display_mode_over.tga 0.042968750000 0.453125000000 0.085937500000 0.491210937500
+r2ed_tool_prim_display_mode_pushed.tga 0.085937500000 0.453125000000 0.128906250000 0.491210937500
+r2ed_tool_redo.tga 0.351562500000 0.460937500000 0.394531250000 0.499023437500
+r2ed_tool_redo_disabled.tga 0.394531250000 0.460937500000 0.437500000000 0.499023437500
+r2ed_tool_redo_over.tga 0.437500000000 0.460937500000 0.480468750000 0.499023437500
+r2ed_tool_redo_pushed.tga 0.492187500000 0.000000000000 0.535156250000 0.038085937500
+r2ed_tool_rotate.tga 0.535156250000 0.000000000000 0.578125000000 0.038085937500
+r2ed_tool_rotate_pushed.tga 0.578125000000 0.000000000000 0.621093750000 0.038085937500
+r2ed_tool_rotating.tga 0.621093750000 0.000000000000 0.664062500000 0.038085937500
+r2ed_tool_scenario_window.tga 0.664062500000 0.000000000000 0.707031250000 0.038085937500
+r2ed_tool_scenario_window_over.tga 0.707031250000 0.000000000000 0.750000000000 0.038085937500
+r2ed_tool_scenario_window_pushed.tga 0.750000000000 0.000000000000 0.792968750000 0.038085937500
+r2ed_tool_select.tga 0.792968750000 0.000000000000 0.835937500000 0.038085937500
+r2ed_tool_select_move.tga 0.835937500000 0.000000000000 0.878906250000 0.038085937500
+r2ed_tool_select_move_over.tga 0.878906250000 0.000000000000 0.921875000000 0.038085937500
+r2ed_tool_select_move_pushed.tga 0.921875000000 0.000000000000 0.964843750000 0.038085937500
+r2ed_tool_select_over.tga 0.492187500000 0.039062500000 0.535156250000 0.077148437500
+r2ed_tool_select_pushed.tga 0.535156250000 0.039062500000 0.578125000000 0.077148437500
+r2ed_tool_start.tga 0.578125000000 0.039062500000 0.621093750000 0.077148437500
+r2ed_tool_start_over.tga 0.621093750000 0.039062500000 0.664062500000 0.077148437500
+r2ed_tool_start_pushed.tga 0.664062500000 0.039062500000 0.707031250000 0.077148437500
+r2ed_tool_stop_over.tga 0.707031250000 0.039062500000 0.750000000000 0.077148437500
+r2ed_tool_stop_pushed.tga 0.750000000000 0.039062500000 0.792968750000 0.077148437500
+r2ed_tool_teleport.tga 0.792968750000 0.039062500000 0.835937500000 0.077148437500
+r2ed_tool_teleport_over.tga 0.835937500000 0.039062500000 0.878906250000 0.077148437500
+r2ed_tool_teleport_pushed.tga 0.878906250000 0.039062500000 0.921875000000 0.077148437500
+r2ed_tool_undo.tga 0.921875000000 0.039062500000 0.964843750000 0.077148437500
+r2ed_tool_undo_disabled.tga 0.492187500000 0.078125000000 0.535156250000 0.116210937500
+r2ed_tool_undo_over.tga 0.535156250000 0.078125000000 0.578125000000 0.116210937500
+r2ed_tool_undo_pushed.tga 0.578125000000 0.078125000000 0.621093750000 0.116210937500
+r2ed_tool_unfreeze_object.tga 0.621093750000 0.078125000000 0.664062500000 0.116210937500
+r2ed_tool_unfreeze_object_over.tga 0.664062500000 0.078125000000 0.707031250000 0.116210937500
+r2ed_tool_unfreeze_object_pushed.tga 0.707031250000 0.078125000000 0.750000000000 0.116210937500
+curs_scale.tga 0.750000000000 0.078125000000 0.792968750000 0.116210937500
+curs_stop.tga 0.792968750000 0.078125000000 0.835937500000 0.116210937500
+r2ed_feature_kitins_lair.tga 0.835937500000 0.078125000000 0.878906250000 0.116210937500
+r2ed_feature_kitins_lair_over.tga 0.878906250000 0.078125000000 0.921875000000 0.116210937500
+r2ed_tool_can_pick.tga 0.921875000000 0.078125000000 0.964843750000 0.116210937500
+r2ed_tool_can_rotate.tga 0.492187500000 0.117187500000 0.535156250000 0.155273437500
+r2ed_tool_can_rotate_over.tga 0.535156250000 0.117187500000 0.578125000000 0.155273437500
+r2ed_tool_can_rotate_pushed.tga 0.578125000000 0.117187500000 0.621093750000 0.155273437500
+r2ed_tool_copy.tga 0.621093750000 0.117187500000 0.664062500000 0.155273437500
+r2ed_tool_copy_over.tga 0.664062500000 0.117187500000 0.707031250000 0.155273437500
+r2ed_tool_copy_pushed.tga 0.707031250000 0.117187500000 0.750000000000 0.155273437500
+r2ed_tool_display_mode.tga 0.750000000000 0.117187500000 0.792968750000 0.155273437500
+r2ed_tool_display_mode_over.tga 0.792968750000 0.117187500000 0.835937500000 0.155273437500
+r2ed_tool_display_mode_pushed.tga 0.835937500000 0.117187500000 0.878906250000 0.155273437500
+r2_hand_can_pan.tga 0.878906250000 0.117187500000 0.921875000000 0.155273437500
+r2_hand_pan.tga 0.921875000000 0.117187500000 0.964843750000 0.155273437500
+r2_icon_dm_mode.tga 0.492187500000 0.156250000000 0.535156250000 0.194335937500
+r2_icon_dm_mode_over.tga 0.535156250000 0.156250000000 0.578125000000 0.194335937500
+r2ed_feature_kitins_lair_pushed.tga 0.578125000000 0.156250000000 0.621093750000 0.194335937500
+r2_stop_live_pushed.tga 0.621093750000 0.156250000000 0.664062500000 0.194335937500
+curs_create.tga 0.664062500000 0.156250000000 0.707031250000 0.194335937500
+curs_create_multi.tga 0.707031250000 0.156250000000 0.750000000000 0.194335937500
+curs_create_vertex_invalid.tga 0.750000000000 0.156250000000 0.792968750000 0.194335937500
+curs_default.tga 0.792968750000 0.156250000000 0.835937500000 0.194335937500
+curs_dup.tga 0.835937500000 0.156250000000 0.878906250000 0.194335937500
+curs_pan.tga 0.878906250000 0.156250000000 0.921875000000 0.194335937500
+curs_pan_dup.tga 0.921875000000 0.156250000000 0.964843750000 0.194335937500
+curs_pick.tga 0.492187500000 0.195312500000 0.535156250000 0.233398437500
+curs_pick_dup.tga 0.535156250000 0.195312500000 0.578125000000 0.233398437500
+curs_resize_bl_tr.tga 0.578125000000 0.195312500000 0.621093750000 0.233398437500
+curs_resize_br_tl.tga 0.621093750000 0.195312500000 0.664062500000 0.233398437500
+curs_resize_lr.tga 0.664062500000 0.195312500000 0.707031250000 0.233398437500
+curs_resize_tb.tga 0.707031250000 0.195312500000 0.750000000000 0.233398437500
+r2_player_admin.tga 0.750000000000 0.195312500000 0.792968750000 0.233398437500
+r2_player_admin_over.tga 0.792968750000 0.195312500000 0.835937500000 0.233398437500
+r2_player_admin_pushed.tga 0.835937500000 0.195312500000 0.878906250000 0.233398437500
+r2ed_feature_loot_spawner.tga 0.878906250000 0.195312500000 0.921875000000 0.233398437500
+r2_scenario_admin.tga 0.921875000000 0.195312500000 0.964843750000 0.233398437500
+r2_scenario_admin_over.tga 0.476562500000 0.234375000000 0.519531250000 0.272460937500
+r2_scenario_admin_pushed.tga 0.519531250000 0.234375000000 0.562500000000 0.272460937500
+r2ed_feature_loot_spawner_over.tga 0.562500000000 0.234375000000 0.605468750000 0.272460937500
+r2ed_feature_loot_spawner_pushed.tga 0.605468750000 0.234375000000 0.648437500000 0.272460937500
+r2ed_feature_timer.tga 0.648437500000 0.234375000000 0.691406250000 0.272460937500
+r2ed_feature_timer_over.tga 0.691406250000 0.234375000000 0.734375000000 0.272460937500
+r2ed_feature_timer_pushed.tga 0.734375000000 0.234375000000 0.777343750000 0.272460937500
+r2ed_tool_stop.tga 0.777343750000 0.234375000000 0.820312500000 0.272460937500
+r2ed_feature_fauna_pushed.tga 0.820312500000 0.234375000000 0.863281250000 0.272460937500
+r2ed_feature_fauna_system.tga 0.863281250000 0.234375000000 0.906250000000 0.272460937500
+curs_can_pan.tga 0.906250000000 0.234375000000 0.949218750000 0.272460937500
+r2ed_feature_fauna_system_over.tga 0.949218750000 0.234375000000 0.992187500000 0.272460937500
+r2_icon_dm_mode_pushed.tga 0.500000000000 0.273437500000 0.542968750000 0.311523437500
+curs_can_pan_dup.tga 0.542968750000 0.273437500000 0.585937500000 0.311523437500
+r2_stop_live_over.tga 0.585937500000 0.273437500000 0.628906250000 0.311523437500
+curs_rotate.tga 0.628906250000 0.273437500000 0.671875000000 0.311523437500
+r2ed_feature_fauna_over.tga 0.671875000000 0.273437500000 0.714843750000 0.311523437500
+r2ed_feature_fauna_system_pushed.tga 0.714843750000 0.273437500000 0.757812500000 0.311523437500
+r2ed_feature_bandit_camp.tga 0.757812500000 0.273437500000 0.800781250000 0.311523437500
+r2ed_feature_bandit_camp_over.tga 0.800781250000 0.273437500000 0.843750000000 0.311523437500
+r2ed_feature_bandit_camp_pushed.tga 0.843750000000 0.273437500000 0.886718750000 0.311523437500
+r2ed_feature_fauna.tga 0.886718750000 0.273437500000 0.929687500000 0.311523437500
+r2ed_tool_draw_region.tga 0.929687500000 0.273437500000 0.972656250000 0.311523437500
+r2_stop_live.tga 0.500000000000 0.312500000000 0.542968750000 0.350585937500
+r2ed_create_dialog.tga 0.542968750000 0.312500000000 0.585937500000 0.350585937500
+r2ed_create_dialog_over.tga 0.585937500000 0.312500000000 0.628906250000 0.350585937500
+r2ed_create_dialog_pushed.tga 0.628906250000 0.312500000000 0.671875000000 0.350585937500
+r2ed_tool_palette_window.tga 0.671875000000 0.312500000000 0.714843750000 0.350585937500
+r2ed_tool_rotate_over.tga 0.714843750000 0.312500000000 0.757812500000 0.350585937500
+r2ed_tool_draw_region_over.tga 0.757812500000 0.312500000000 0.800781250000 0.350585937500
+r2ed_tool_draw_region_pushed.tga 0.800781250000 0.312500000000 0.843750000000 0.350585937500
+r2ed_tool_draw_road.tga 0.843750000000 0.312500000000 0.886718750000 0.350585937500
+r2ed_tool_draw_road_over.tga 0.886718750000 0.312500000000 0.929687500000 0.350585937500
+w_ar_gilet.tga 0.929687500000 0.312500000000 0.968750000000 0.351562500000
+w_ar_hand.tga 0.500000000000 0.351562500000 0.539062500000 0.390625000000
+w_ar_helmet.tga 0.539062500000 0.351562500000 0.578125000000 0.390625000000
+hand_left.tga 0.578125000000 0.351562500000 0.617187500000 0.390625000000
+hand_right.tga 0.617187500000 0.351562500000 0.656250000000 0.390625000000
+sapload.tga 0.656250000000 0.351562500000 0.695312500000 0.390625000000
+w_ar_pantabotte.tga 0.695312500000 0.351562500000 0.734375000000 0.390625000000
+w_ar_armpad.tga 0.734375000000 0.351562500000 0.773437500000 0.390625000000
+w_ar_botte.tga 0.773437500000 0.351562500000 0.812500000000 0.390625000000
+skin_l2.tga 0.992187500000 0.000000000000 0.998046875000 0.250000000000
+r2_map_edge_stipple.tga 0.484375000000 0.390625000000 0.984375000000 0.393554687500
+r2_main_bl.tga 0.812500000000 0.351562500000 0.851562500000 0.383789062500
+W_slot_jauge_1.tga 0.851562500000 0.351562500000 0.974609375000 0.361328125000
+w_slot_blason.tga 0.484375000000 0.394531250000 0.517578125000 0.427734375000
+w_slot_blason_over.tga 0.519531250000 0.394531250000 0.552734375000 0.427734375000
+w_header_l.tga 0.851562500000 0.363281250000 0.898437500000 0.386718750000
+bg_source_mid.tga 0.000000000000 0.242187500000 0.148437500000 0.249023437500
+r2_icon_weather_pushed.tga 0.445312500000 0.093750000000 0.476562500000 0.125000000000
+Skin_scroll_H.tga 0.000000000000 0.359375000000 0.125000000000 0.367187500000
+skin_scroll_m.tga 0.964843750000 0.000000000000 0.972656250000 0.125000000000
+r2_toolbar_customize_look.tga 0.968750000000 0.312500000000 1.000000000000 0.343750000000
+r2_toolbar_customize_look_over.tga 0.218750000000 0.343750000000 0.250000000000 0.375000000000
+r2_toolbar_kill.tga 0.464843750000 0.343750000000 0.496093750000 0.375000000000
+r2_toolbar_kill_over.tga 0.554687500000 0.394531250000 0.585937500000 0.425781250000
+r2_toolbar_kill_pushed.tga 0.585937500000 0.394531250000 0.617187500000 0.425781250000
+r2_toolbar_patrol_road.tga 0.617187500000 0.394531250000 0.648437500000 0.425781250000
+r2_toolbar_patrol_road_over.tga 0.648437500000 0.394531250000 0.679687500000 0.425781250000
+r2_toolbar_patrol_road_pushed.tga 0.679687500000 0.394531250000 0.710937500000 0.425781250000
+r2_toolbar_properties.tga 0.710937500000 0.394531250000 0.742187500000 0.425781250000
+r2_toolbar_properties_over.tga 0.742187500000 0.394531250000 0.773437500000 0.425781250000
+r2_toolbar_properties_pushed.tga 0.773437500000 0.394531250000 0.804687500000 0.425781250000
+r2_toolbar_repeat_road.tga 0.804687500000 0.394531250000 0.835937500000 0.425781250000
+r2_toolbar_repeat_road_over.tga 0.835937500000 0.394531250000 0.867187500000 0.425781250000
+r2_toolbar_repeat_road_pushed.tga 0.867187500000 0.394531250000 0.898437500000 0.425781250000
+r2_toolbar_set_as_leader.tga 0.898437500000 0.394531250000 0.929687500000 0.425781250000
+r2_toolbar_set_as_leader_over.tga 0.929687500000 0.394531250000 0.960937500000 0.425781250000
+r2_toolbar_stand_still.tga 0.960937500000 0.394531250000 0.992187500000 0.425781250000
+r2_toolbar_stand_still_over.tga 0.554687500000 0.425781250000 0.585937500000 0.457031250000
+r2_toolbar_stand_still_pushed.tga 0.585937500000 0.425781250000 0.617187500000 0.457031250000
+r2_toolbar_ungroup.tga 0.617187500000 0.425781250000 0.648437500000 0.457031250000
+r2_toolbar_ungroup_over.tga 0.648437500000 0.425781250000 0.679687500000 0.457031250000
+r2_toolbar_ungroup_pushed.tga 0.679687500000 0.425781250000 0.710937500000 0.457031250000
+r2_toolbar_wander_zone.tga 0.710937500000 0.425781250000 0.742187500000 0.457031250000
+r2_toolbar_wander_zone_over.tga 0.742187500000 0.425781250000 0.773437500000 0.457031250000
+r2_toolbar_wander_zone_pushed.tga 0.773437500000 0.425781250000 0.804687500000 0.457031250000
+r2ed_toolbar_hunt_zone.tga 0.804687500000 0.425781250000 0.835937500000 0.457031250000
+r2ed_toolbar_hunt_zone_over.tga 0.835937500000 0.425781250000 0.867187500000 0.457031250000
+r2ed_toolbar_hunt_zone_pushed.tga 0.867187500000 0.425781250000 0.898437500000 0.457031250000
+r2ed_toolbar_lock.tga 0.898437500000 0.425781250000 0.929687500000 0.457031250000
+r2ed_toolbar_lock_over.tga 0.929687500000 0.425781250000 0.960937500000 0.457031250000
+curs_l.tga 0.960937500000 0.425781250000 0.992187500000 0.457031250000
+curs_L_no_mouse.tga 0.484375000000 0.429687500000 0.515625000000 0.460937500000
+r2ed_toolbar_lock_pushed.tga 0.515625000000 0.429687500000 0.546875000000 0.460937500000
+r2ed_toolbar_rest_zone.tga 0.546875000000 0.457031250000 0.578125000000 0.488281250000
+r2ed_toolbar_rest_zone_over.tga 0.578125000000 0.457031250000 0.609375000000 0.488281250000
+r2ed_toolbar_rest_zone_pushed.tga 0.609375000000 0.457031250000 0.640625000000 0.488281250000
+curs_r.tga 0.640625000000 0.457031250000 0.671875000000 0.488281250000
+r2ed_toolbar_show.tga 0.671875000000 0.457031250000 0.703125000000 0.488281250000
+r2ed_toolbar_show_over.tga 0.703125000000 0.457031250000 0.734375000000 0.488281250000
+r2ed_toolbar_show_pushed.tga 0.734375000000 0.457031250000 0.765625000000 0.488281250000
+r2ed_toolbar_unfreeze.tga 0.765625000000 0.457031250000 0.796875000000 0.488281250000
+r2ed_current_act_content_over.tga 0.796875000000 0.457031250000 0.828125000000 0.488281250000
+r2ed_current_act_content_pushed.tga 0.828125000000 0.457031250000 0.859375000000 0.488281250000
+r2ed_edit_dialog.tga 0.859375000000 0.457031250000 0.890625000000 0.488281250000
+r2ed_edit_dialog_over.tga 0.890625000000 0.457031250000 0.921875000000 0.488281250000
+r2ed_edit_dialog_pushed.tga 0.921875000000 0.457031250000 0.953125000000 0.488281250000
+r2_icon_possess.tga 0.953125000000 0.457031250000 0.984375000000 0.488281250000
+r2_icon_possess_over.tga 0.480468750000 0.460937500000 0.511718750000 0.492187500000
+r2_icon_possess_pushed.tga 0.511718750000 0.460937500000 0.542968750000 0.492187500000
+r2_icon_speak_as.tga 0.257812500000 0.464843750000 0.289062500000 0.496093750000
+r2_icon_speak_as_over.tga 0.289062500000 0.464843750000 0.320312500000 0.496093750000
+r2_icon_speak_as_pushed.tga 0.320312500000 0.464843750000 0.351562500000 0.496093750000
+r2ed_toolbar_unfreeze_over.tga 0.128906250000 0.468750000000 0.160156250000 0.500000000000
+r2ed_toolbar_unlock.tga 0.160156250000 0.480468750000 0.191406250000 0.511718750000
+r2ed_toolbar_unlock_over.tga 0.191406250000 0.480468750000 0.222656250000 0.511718750000
+r2ed_toolbar_unlock_pushed.tga 0.222656250000 0.480468750000 0.253906250000 0.511718750000
+r2_scenario.tga 0.542968750000 0.488281250000 0.574218750000 0.519531250000
+r2ed_toolbar_work_zone.tga 0.574218750000 0.488281250000 0.605468750000 0.519531250000
+r2ed_toolbar_work_zone_over.tga 0.605468750000 0.488281250000 0.636718750000 0.519531250000
+r2ed_toolbar_work_zone_pushed.tga 0.636718750000 0.488281250000 0.667968750000 0.519531250000
+r2ed_tool_new_vertex.tga 0.667968750000 0.488281250000 0.699218750000 0.519531250000
+r2ed_tool_new_vertex_over.tga 0.699218750000 0.488281250000 0.730468750000 0.519531250000
+ia_surpris.tga 0.730468750000 0.488281250000 0.761718750000 0.519531250000
+r2ed_tool_new_vertex_pushed.tga 0.761718750000 0.488281250000 0.792968750000 0.519531250000
+r2ed_permanent_content.tga 0.792968750000 0.488281250000 0.824218750000 0.519531250000
+r2ed_permanent_content_over.tga 0.824218750000 0.488281250000 0.855468750000 0.519531250000
+r2ed_toolbar_hide_pushed.tga 0.855468750000 0.488281250000 0.886718750000 0.519531250000
+r2ed_toolbar_unfreeze_pushed.tga 0.886718750000 0.488281250000 0.917968750000 0.519531250000
+r2ed_permanent_content_pushed.tga 0.917968750000 0.488281250000 0.949218750000 0.519531250000
+r2ed_current_act_content.tga 0.949218750000 0.488281250000 0.980468750000 0.519531250000
+skin_l.tga 0.972656250000 0.000000000000 0.980468750000 0.125000000000
+r2_frustum.tga 0.000000000000 0.492187500000 0.031250000000 0.523437500000
+r2ed_toolbar_feed_zone.tga 0.031250000000 0.492187500000 0.062500000000 0.523437500000
+r2ed_toolbar_feed_zone_over.tga 0.062500000000 0.492187500000 0.093750000000 0.523437500000
+r2ed_toolbar_feed_zone_pushed.tga 0.093750000000 0.492187500000 0.125000000000 0.523437500000
+r2ed_toolbar_freeze.tga 0.480468750000 0.492187500000 0.511718750000 0.523437500000
+r2ed_toolbar_freeze_over.tga 0.511718750000 0.492187500000 0.542968750000 0.523437500000
+r2ed_toolbar_freeze_pushed.tga 0.253906250000 0.496093750000 0.285156250000 0.527343750000
+r2ed_toolbar_guard_zone.tga 0.285156250000 0.496093750000 0.316406250000 0.527343750000
+r2ed_toolbar_guard_zone_over.tga 0.316406250000 0.496093750000 0.347656250000 0.527343750000
+r2ed_toolbar_guard_zone_pushed.tga 0.125000000000 0.500000000000 0.156250000000 0.531250000000
+r2ed_toolbar_hide.tga 0.347656250000 0.500000000000 0.378906250000 0.531250000000
+r2ed_toolbar_hide_over.tga 0.378906250000 0.500000000000 0.410156250000 0.531250000000
+r2ed_tool_extend_prim.tga 0.410156250000 0.500000000000 0.441406250000 0.531250000000
+r2ed_tool_extend_prim_over.tga 0.441406250000 0.500000000000 0.472656250000 0.531250000000
+r2_icon_acts.tga 0.156250000000 0.511718750000 0.187500000000 0.542968750000
+r2_icon_animation_triggers.tga 0.187500000000 0.511718750000 0.218750000000 0.542968750000
+r2_icon_acts_over.tga 0.218750000000 0.511718750000 0.250000000000 0.542968750000
+r2_icon_stop_acts.tga 0.542968750000 0.519531250000 0.574218750000 0.550781250000
+r2_icon_acts_pushed.tga 0.574218750000 0.519531250000 0.605468750000 0.550781250000
+r2_icon_add_hp.tga 0.605468750000 0.519531250000 0.636718750000 0.550781250000
+r2_toolbar_customize_look_pushed.tga 0.636718750000 0.519531250000 0.667968750000 0.550781250000
+r2_toolbar_group_pushed.tga 0.667968750000 0.519531250000 0.699218750000 0.550781250000
+r2_toolbar_set_as_leader_pushed.tga 0.699218750000 0.519531250000 0.730468750000 0.550781250000
+r2_icon_add_hp_over.tga 0.730468750000 0.519531250000 0.761718750000 0.550781250000
+r2_icon_add_hp_pushed.tga 0.761718750000 0.519531250000 0.792968750000 0.550781250000
+skin_b.tga 0.312500000000 0.359375000000 0.437500000000 0.367187500000
+r2_icon_animation_give.tga 0.792968750000 0.519531250000 0.824218750000 0.550781250000
+skin_b_open.tga 0.000000000000 0.367187500000 0.125000000000 0.375000000000
+skin_em_open.tga 0.312500000000 0.367187500000 0.437500000000 0.375000000000
+r2ed_edit_events.tga 0.824218750000 0.519531250000 0.855468750000 0.550781250000
+r2ed_edit_events_over.tga 0.855468750000 0.519531250000 0.886718750000 0.550781250000
+r2ed_edit_events_pushed.tga 0.886718750000 0.519531250000 0.917968750000 0.550781250000
+r2_icon_animation_give_over.tga 0.917968750000 0.519531250000 0.949218750000 0.550781250000
+r2_icon_animation_give_pushed.tga 0.949218750000 0.519531250000 0.980468750000 0.550781250000
+r2_icon_animation_target.tga 0.000000000000 0.523437500000 0.031250000000 0.554687500000
+r2_icon_animation_target_over.tga 0.031250000000 0.523437500000 0.062500000000 0.554687500000
+r2_icon_animation_target_pushed.tga 0.062500000000 0.523437500000 0.093750000000 0.554687500000
+r2ed_icon_stop.tga 0.093750000000 0.523437500000 0.125000000000 0.554687500000
+r2_icon_animation_triggers_over.tga 0.472656250000 0.523437500000 0.503906250000 0.554687500000
+r2_icon_animation_triggers_pushed.tga 0.503906250000 0.523437500000 0.535156250000 0.554687500000
+r2_icon_despawn.tga 0.250000000000 0.527343750000 0.281250000000 0.558593750000
+r2_icon_despawn_over.tga 0.281250000000 0.527343750000 0.312500000000 0.558593750000
+r2_icon_despawn_pushed.tga 0.312500000000 0.527343750000 0.343750000000 0.558593750000
+r2ed_tool_extend_prim_pushed.tga 0.125000000000 0.531250000000 0.156250000000 0.562500000000
+r2_toolbar_customize_over.tga 0.343750000000 0.531250000000 0.375000000000 0.562500000000
+r2_toolbar_customize_pushed.tga 0.375000000000 0.531250000000 0.406250000000 0.562500000000
+r2_toolbar_delete.tga 0.406250000000 0.531250000000 0.437500000000 0.562500000000
+r2_toolbar_delete_over.tga 0.437500000000 0.531250000000 0.468750000000 0.562500000000
+r2_toolbar_delete_pushed.tga 0.156250000000 0.542968750000 0.187500000000 0.574218750000
+r2_toolbar_follow_road.tga 0.187500000000 0.542968750000 0.218750000000 0.574218750000
+r2_toolbar_follow_road_over.tga 0.218750000000 0.542968750000 0.250000000000 0.574218750000
+r2_toolbar_follow_road_pushed.tga 0.535156250000 0.550781250000 0.566406250000 0.582031250000
+r2_toolbar_group.tga 0.566406250000 0.550781250000 0.597656250000 0.582031250000
+r2_toolbar_group_over.tga 0.597656250000 0.550781250000 0.628906250000 0.582031250000
+skin_r.tga 0.980468750000 0.000000000000 0.988281250000 0.125000000000
+r2_icon_stop_acts_over.tga 0.628906250000 0.550781250000 0.660156250000 0.582031250000
+r2_icon_stop_acts_pushed.tga 0.660156250000 0.550781250000 0.691406250000 0.582031250000
+r2_icon_stop_possess.tga 0.691406250000 0.550781250000 0.722656250000 0.582031250000
+r2_icon_stop_possess_over.tga 0.722656250000 0.550781250000 0.753906250000 0.582031250000
+r2_icon_stop_possess_pushed.tga 0.753906250000 0.550781250000 0.785156250000 0.582031250000
+r2_icon_stop_speak.tga 0.785156250000 0.550781250000 0.816406250000 0.582031250000
+r2_icon_stop_speak_over.tga 0.816406250000 0.550781250000 0.847656250000 0.582031250000
+building_state1.tga 0.847656250000 0.550781250000 0.878906250000 0.582031250000
+building_state2.tga 0.878906250000 0.550781250000 0.910156250000 0.582031250000
+r2_icon_stop_speak_pushed.tga 0.910156250000 0.550781250000 0.941406250000 0.582031250000
+skin_t.tga 0.000000000000 0.554687500000 0.125000000000 0.562500000000
+r2_icon_test_mode.tga 0.941406250000 0.550781250000 0.972656250000 0.582031250000
+r2_icon_test_mode_over.tga 0.468750000000 0.554687500000 0.500000000000 0.585937500000
+r2_icon_test_mode_pushed.tga 0.500000000000 0.554687500000 0.531250000000 0.585937500000
+r2_icon_weather.tga 0.250000000000 0.558593750000 0.281250000000 0.589843750000
+r2_allow.tga 0.281250000000 0.558593750000 0.312500000000 0.589843750000
+r2_icon_weather_over.tga 0.312500000000 0.558593750000 0.343750000000 0.589843750000
+r2ed_storm.tga 0.898437500000 0.363281250000 0.937500000000 0.386718750000
+r2ed_clouds.tga 0.937500000000 0.363281250000 0.976562500000 0.386718750000
+bg_jauge_mid.tga 0.000000000000 0.562500000000 0.125000000000 0.569335937500
+r2ed_lakes_l.tga 0.964843750000 0.125000000000 0.992187500000 0.156250000000
+r2ed_lakes_pushed_l.tga 0.964843750000 0.156250000000 0.992187500000 0.187500000000
+r2ed_jungle_l.tga 0.964843750000 0.187500000000 0.991210937500 0.218750000000
+r2ed_jungle_pushed_l.tga 0.972656250000 0.273437500000 0.999023437500 0.304687500000
+skin_header_r.tga 0.972656250000 0.550781250000 0.998046875000 0.582031250000
+r2ed_prime_roots_l.tga 0.125000000000 0.562500000000 0.150390625000 0.593750000000
+r2ed_desert_l.tga 0.343750000000 0.562500000000 0.369140625000 0.593750000000
+r2ed_desert_pushed_l.tga 0.371093750000 0.562500000000 0.396484375000 0.593750000000
+r2ed_prime_roots_pushed_l.tga 0.398437500000 0.562500000000 0.423828125000 0.593750000000
+W_trade_not_ready.tga 0.425781250000 0.562500000000 0.464843750000 0.582031250000
+slot_brick.tga 0.000000000000 0.570312500000 0.027343750000 0.597656250000
+disconnect.tga 0.027343750000 0.570312500000 0.054687500000 0.597656250000
+W_button_28_over.tga 0.054687500000 0.570312500000 0.082031250000 0.597656250000
+w_button_mode_over2.tga 0.082031250000 0.570312500000 0.109375000000 0.597656250000
+r2_tab_sequence_pushed_l.tga 0.152343750000 0.574218750000 0.179687500000 0.601562500000
+r2_tab_wide_normal_l.tga 0.179687500000 0.574218750000 0.207031250000 0.601562500000
+r2_tab_wide_pushed_l.tga 0.207031250000 0.574218750000 0.234375000000 0.601562500000
+action_balance_cred.tga 0.425781250000 0.582031250000 0.457031250000 0.605468750000
+bulle_say_l.tga 0.531250000000 0.582031250000 0.562500000000 0.605468750000
+bulle_say_r.tga 0.562500000000 0.582031250000 0.593750000000 0.605468750000
+bulle_say_tl.tga 0.593750000000 0.582031250000 0.625000000000 0.605468750000
+bulle_say_tr.tga 0.625000000000 0.582031250000 0.656250000000 0.605468750000
+bulle_think_l.tga 0.656250000000 0.582031250000 0.687500000000 0.605468750000
+bulle_think_r.tga 0.687500000000 0.582031250000 0.718750000000 0.605468750000
+W_slot_jauge_3_mini.tga 0.718750000000 0.582031250000 0.781250000000 0.593750000000
+action_balance_equal.tga 0.781250000000 0.582031250000 0.812500000000 0.605468750000
+action_balance_cost.tga 0.812500000000 0.582031250000 0.843750000000 0.605468750000
+skill_arbo_x_extend.tga 0.976562500000 0.343750000000 1.000000000000 0.375000000000
+bg_source_bot.tga 0.843750000000 0.582031250000 0.992187500000 0.586914062500
+w_slot_jauge_1_tmin.tga 0.457031250000 0.585937500000 0.515625000000 0.597656250000
+r2_main_menu_normal_l.tga 0.234375000000 0.589843750000 0.255859375000 0.621093750000
+r2_main_menu_normal_r.tga 0.257812500000 0.589843750000 0.279296875000 0.621093750000
+r2_main_menu_over_l.tga 0.281250000000 0.589843750000 0.302734375000 0.621093750000
+r2_main_menu_over_r.tga 0.304687500000 0.589843750000 0.326171875000 0.621093750000
+r2_main_menu_pushed_l.tga 0.843750000000 0.589843750000 0.865234375000 0.621093750000
+r2_main_menu_pushed_r.tga 0.867187500000 0.589843750000 0.888671875000 0.621093750000
+action_next.tga 0.890625000000 0.589843750000 0.916015625000 0.615234375000
+W_slot_spell_selected.tga 0.917968750000 0.589843750000 0.943359375000 0.615234375000
+w_slot_win_menu.tga 0.945312500000 0.589843750000 0.970703125000 0.615234375000
+W_slot_brick_selected.tga 0.972656250000 0.589843750000 0.998046875000 0.615234375000
+W_slot_spell_over.tga 0.109375000000 0.593750000000 0.134765625000 0.619140625000
+W_slot_brick.tga 0.328125000000 0.593750000000 0.353515625000 0.619140625000
+action_cycle.tga 0.355468750000 0.593750000000 0.380859375000 0.619140625000
+W_slot_spell.tga 0.382812500000 0.593750000000 0.408203125000 0.619140625000
+r2ed_forest_pushed_l.tga 0.718750000000 0.593750000000 0.739257812500 0.625000000000
+r2ed_forest_l.tga 0.742187500000 0.593750000000 0.762695312500 0.625000000000
+bg_jauge_bot.tga 0.410156250000 0.605468750000 0.535156250000 0.610351562500
+bg_source_top.tga 0.812500000000 0.386718750000 0.960937500000 0.390625000000
+TB_quit.tga 0.000000000000 0.597656250000 0.023437500000 0.621093750000
+TB_spellbook.tga 0.023437500000 0.597656250000 0.046875000000 0.621093750000
+TB_System.tga 0.046875000000 0.597656250000 0.070312500000 0.621093750000
+teammate_map.tga 0.070312500000 0.597656250000 0.093750000000 0.621093750000
+teammate_map_over.tga 0.136718750000 0.601562500000 0.160156250000 0.625000000000
+r2_palette_act.tga 0.160156250000 0.601562500000 0.183593750000 0.625000000000
+r2_palette_components.tga 0.183593750000 0.601562500000 0.207031250000 0.625000000000
+r2_palette_entities.tga 0.207031250000 0.601562500000 0.230468750000 0.625000000000
+r2_icon_stop_live_small.tga 0.535156250000 0.605468750000 0.558593750000 0.628906250000
+r2ed_down_element.tga 0.558593750000 0.605468750000 0.582031250000 0.628906250000
+r2ed_toolbar_lock_small.tga 0.582031250000 0.605468750000 0.605468750000 0.628906250000
+ency_rite_slot.tga 0.605468750000 0.605468750000 0.628906250000 0.628906250000
+r2ed_edit_dialog_over_small.tga 0.628906250000 0.605468750000 0.652343750000 0.628906250000
+r2_toolbar_repeat_road_small.tga 0.652343750000 0.605468750000 0.675781250000 0.628906250000
+r2ed_edit_dialog_pushed_small.tga 0.675781250000 0.605468750000 0.699218750000 0.628906250000
+r2_icon_new_scenario_small.tga 0.765625000000 0.605468750000 0.789062500000 0.628906250000
+r2_icon_palette_small.tga 0.789062500000 0.605468750000 0.812500000000 0.628906250000
+r2_icon_player_admin_small.tga 0.812500000000 0.605468750000 0.835937500000 0.628906250000
+forage_content.tga 0.410156250000 0.613281250000 0.433593750000 0.636718750000
+r2_icon_map_small.tga 0.433593750000 0.613281250000 0.457031250000 0.636718750000
+forage_danger.tga 0.457031250000 0.613281250000 0.480468750000 0.636718750000
+r2_toolbar_set_as_leader_small.tga 0.480468750000 0.613281250000 0.503906250000 0.636718750000
+r2_palette_objets.tga 0.503906250000 0.613281250000 0.527343750000 0.636718750000
+r2_icon_preferences.tga 0.890625000000 0.617187500000 0.914062500000 0.640625000000
+r2_icon_r2_small.tga 0.914062500000 0.617187500000 0.937500000000 0.640625000000
+r2_icon_resetwindows.tga 0.937500000000 0.617187500000 0.960937500000 0.640625000000
+r2_icon_save_small.tga 0.960937500000 0.617187500000 0.984375000000 0.640625000000
+rap_not_invited_dm.tga 0.000000000000 0.621093750000 0.023437500000 0.644531250000
+r2ed_icon_move.tga 0.023437500000 0.621093750000 0.046875000000 0.644531250000
+r2ed_icon_newactivity.tga 0.046875000000 0.621093750000 0.070312500000 0.644531250000
+r2_icon_scenario_prop.tga 0.070312500000 0.621093750000 0.093750000000 0.644531250000
+r2_icon_scenario_small.tga 0.093750000000 0.621093750000 0.117187500000 0.644531250000
+m_back.tga 0.230468750000 0.621093750000 0.253906250000 0.644531250000
+pvp_green.tga 0.253906250000 0.621093750000 0.277343750000 0.644531250000
+pvp_orange.tga 0.277343750000 0.621093750000 0.300781250000 0.644531250000
+pvp_red.tga 0.300781250000 0.621093750000 0.324218750000 0.644531250000
+r2ed_toolbar_rest_zone_small.tga 0.324218750000 0.621093750000 0.347656250000 0.644531250000
+forage_life.tga 0.347656250000 0.621093750000 0.371093750000 0.644531250000
+r2_icon_stop_test_small.tga 0.371093750000 0.621093750000 0.394531250000 0.644531250000
+lm_target.tga 0.835937500000 0.621093750000 0.859375000000 0.644531250000
+lm_target_over.tga 0.859375000000 0.621093750000 0.882812500000 0.644531250000
+lm_target_pushed.tga 0.117187500000 0.625000000000 0.140625000000 0.648437500000
+lm_user.tga 0.140625000000 0.625000000000 0.164062500000 0.648437500000
+lm_user_pushed.tga 0.164062500000 0.625000000000 0.187500000000 0.648437500000
+mektoub_map.tga 0.187500000000 0.625000000000 0.210937500000 0.648437500000
+r2ed_edit_events_over_small.tga 0.699218750000 0.625000000000 0.722656250000 0.648437500000
+mektoub_map_over.tga 0.722656250000 0.625000000000 0.746093750000 0.648437500000
+r2ed_edit_events_pushed_small.tga 0.527343750000 0.628906250000 0.550781250000 0.652343750000
+r2ed_edit_events_small.tga 0.550781250000 0.628906250000 0.574218750000 0.652343750000
+r2ed_entry_point.tga 0.574218750000 0.628906250000 0.597656250000 0.652343750000
+r2ed_entry_point_over.tga 0.597656250000 0.628906250000 0.621093750000 0.652343750000
+r2ed_entry_point_pushed.tga 0.621093750000 0.628906250000 0.644531250000 0.652343750000
+r2_palette_scenario.tga 0.644531250000 0.628906250000 0.667968750000 0.652343750000
+r2_palette_zones.tga 0.667968750000 0.628906250000 0.691406250000 0.652343750000
+r2_toolbar_stand_still_small.tga 0.746093750000 0.628906250000 0.769531250000 0.652343750000
+r2_icon_support.tga 0.769531250000 0.628906250000 0.792968750000 0.652343750000
+forage_spawn.tga 0.792968750000 0.628906250000 0.816406250000 0.652343750000
+r2ed_icon_rotate.tga 0.394531250000 0.636718750000 0.417968750000 0.660156250000
+r2ed_tool_extend_prim_small.tga 0.417968750000 0.636718750000 0.441406250000 0.660156250000
+r2ed_invalid_event_small.tga 0.441406250000 0.636718750000 0.464843750000 0.660156250000
+r2_toolbar_ungroup_small.tga 0.464843750000 0.636718750000 0.488281250000 0.660156250000
+r2ed_toolbar_show_small.tga 0.488281250000 0.636718750000 0.511718750000 0.660156250000
+r2ed_kicked_char.tga 0.882812500000 0.640625000000 0.906250000000 0.664062500000
+r2ed_edit_dialog_small.tga 0.906250000000 0.640625000000 0.929687500000 0.664062500000
+arbo_level_24.tga 0.929687500000 0.640625000000 0.953125000000 0.664062500000
+r2ed_left_sequence.tga 0.953125000000 0.640625000000 0.976562500000 0.664062500000
+r2_scenario_small.tga 0.976562500000 0.640625000000 1.000000000000 0.664062500000
+r2_toolbar_wander_zone_small.tga 0.000000000000 0.644531250000 0.023437500000 0.667968750000
+rap_invited_dm.tga 0.023437500000 0.644531250000 0.046875000000 0.667968750000
+r2ed_connected_char.tga 0.046875000000 0.644531250000 0.070312500000 0.667968750000
+rap_invited_no_dm.tga 0.070312500000 0.644531250000 0.093750000000 0.667968750000
+r2ed_toolbar_unfreeze_small.tga 0.093750000000 0.644531250000 0.117187500000 0.667968750000
+r2ed_tool_new_vertex_small.tga 0.210937500000 0.644531250000 0.234375000000 0.667968750000
+r2ed_not_current_act.tga 0.234375000000 0.644531250000 0.257812500000 0.667968750000
+r2_toolbar_customize_look_small.tga 0.257812500000 0.644531250000 0.281250000000 0.667968750000
+lm_continent.tga 0.281250000000 0.644531250000 0.304687500000 0.667968750000
+lm_continent_pushed.tga 0.304687500000 0.644531250000 0.328125000000 0.667968750000
+lm_home.tga 0.328125000000 0.644531250000 0.351562500000 0.667968750000
+lm_home_over.tga 0.351562500000 0.644531250000 0.375000000000 0.667968750000
+lm_home_pushed.tga 0.816406250000 0.644531250000 0.839843750000 0.667968750000
+r2_toolbar_delete_small.tga 0.839843750000 0.644531250000 0.863281250000 0.667968750000
+lm_mission.tga 0.117187500000 0.648437500000 0.140625000000 0.671875000000
+lm_mission_pushed.tga 0.140625000000 0.648437500000 0.164062500000 0.671875000000
+lm_over.tga 0.164062500000 0.648437500000 0.187500000000 0.671875000000
+r2_toolbar_follow_road_small.tga 0.187500000000 0.648437500000 0.210937500000 0.671875000000
+lm_respawn.tga 0.691406250000 0.648437500000 0.714843750000 0.671875000000
+lm_respawn_over.tga 0.714843750000 0.648437500000 0.738281250000 0.671875000000
+r2ed_tool_select_move_small.tga 0.511718750000 0.652343750000 0.535156250000 0.675781250000
+r2_icon_go_test_small.tga 0.535156250000 0.652343750000 0.558593750000 0.675781250000
+r2_icon_keys_small.tga 0.558593750000 0.652343750000 0.582031250000 0.675781250000
+r2_icon_light_off_small.tga 0.582031250000 0.652343750000 0.605468750000 0.675781250000
+r2_icon_light_on_small.tga 0.605468750000 0.652343750000 0.628906250000 0.675781250000
+r2_icon_load_small.tga 0.628906250000 0.652343750000 0.652343750000 0.675781250000
+r2_icon_mail_box_small.tga 0.652343750000 0.652343750000 0.675781250000 0.675781250000
+r2ed_toolbar_unlock_small.tga 0.738281250000 0.652343750000 0.761718750000 0.675781250000
+r2ed_right_sequence.tga 0.761718750000 0.652343750000 0.785156250000 0.675781250000
+r2ed_sun.tga 0.785156250000 0.652343750000 0.808593750000 0.675781250000
+r2ed_toolbar_hide_small.tga 0.375000000000 0.660156250000 0.398437500000 0.683593750000
+r2_toolbar_group_small.tga 0.398437500000 0.660156250000 0.421875000000 0.683593750000
+r2ed_toolbar_work_zone_small.tga 0.421875000000 0.660156250000 0.445312500000 0.683593750000
+r2_icon_chat_small.tga 0.445312500000 0.660156250000 0.468750000000 0.683593750000
+r2ed_permanent_content_small.tga 0.468750000000 0.660156250000 0.492187500000 0.683593750000
+W_slot_brick_disabled.tga 0.863281250000 0.664062500000 0.886718750000 0.687500000000
+r2_toolbar_kill_small.tga 0.886718750000 0.664062500000 0.910156250000 0.687500000000
+r2ed_tool_rotate_small.tga 0.910156250000 0.664062500000 0.933593750000 0.687500000000
+forage_time.tga 0.933593750000 0.664062500000 0.957031250000 0.687500000000
+r2ed_toolbar_feed_zone_small.tga 0.957031250000 0.664062500000 0.980468750000 0.687500000000
+r2ed_toolbar_hunt_zone_small.tga 0.000000000000 0.667968750000 0.023437500000 0.691406250000
+W_button_24_over.tga 0.023437500000 0.667968750000 0.046875000000 0.691406250000
+r2_toolbar_patrol_road_small.tga 0.046875000000 0.667968750000 0.070312500000 0.691406250000
+r2ed_toolbar_freeze_small.tga 0.070312500000 0.667968750000 0.093750000000 0.691406250000
+lm_respawn_pushed.tga 0.093750000000 0.667968750000 0.117187500000 0.691406250000
+arbo_close_just_one_24.tga 0.210937500000 0.667968750000 0.234375000000 0.691406250000
+ency_rite_done.tga 0.234375000000 0.667968750000 0.257812500000 0.691406250000
+r2ed_toolbar_guard_zone_small.tga 0.257812500000 0.667968750000 0.281250000000 0.691406250000
+TB_Forum_ring.tga 0.281250000000 0.667968750000 0.304687500000 0.691406250000
+TB_help.tga 0.304687500000 0.667968750000 0.328125000000 0.691406250000
+TB_identity.tga 0.328125000000 0.667968750000 0.351562500000 0.691406250000
+r2ed_current_act_content_small.tga 0.351562500000 0.667968750000 0.375000000000 0.691406250000
+r2_toolbar_properties_small.tga 0.808593750000 0.667968750000 0.832031250000 0.691406250000
+TB_interaction.tga 0.832031250000 0.667968750000 0.855468750000 0.691406250000
+r2ed_up_element.tga 0.117187500000 0.671875000000 0.140625000000 0.695312500000
+TB_inventory.tga 0.140625000000 0.671875000000 0.164062500000 0.695312500000
+TB_map.tga 0.164062500000 0.671875000000 0.187500000000 0.695312500000
+r2_allow_small.tga 0.187500000000 0.671875000000 0.210937500000 0.695312500000
+TB_missions.tga 0.675781250000 0.671875000000 0.699218750000 0.695312500000
+fame_blank.tga 0.699218750000 0.671875000000 0.738281250000 0.685546875000
+fame_arrow_down.tga 0.492187500000 0.675781250000 0.531250000000 0.689453125000
+fame_arrow_up.tga 0.531250000000 0.675781250000 0.570312500000 0.689453125000
+fame_arrow_updown.tga 0.570312500000 0.675781250000 0.609375000000 0.689453125000
+bg_jauge_top.tga 0.855468750000 0.687500000000 0.980468750000 0.691406250000
+w_slot_consider.tga 0.089843750000 0.222656250000 0.121093750000 0.238281250000
+r2_gradient.tga 0.210937500000 0.691406250000 0.335937500000 0.695312500000
+consider_1.tga 0.609375000000 0.675781250000 0.640625000000 0.691406250000
+consider_2.tga 0.640625000000 0.675781250000 0.671875000000 0.691406250000
+consider_3.tga 0.738281250000 0.675781250000 0.769531250000 0.691406250000
+consider_4.tga 0.769531250000 0.675781250000 0.800781250000 0.691406250000
+consider_5.tga 0.375000000000 0.683593750000 0.406250000000 0.699218750000
+consider_6.tga 0.406250000000 0.683593750000 0.437500000000 0.699218750000
+consider_7.tga 0.437500000000 0.683593750000 0.468750000000 0.699218750000
+w_button_32_over.tga 0.699218750000 0.687500000000 0.730468750000 0.703125000000
+r2ed_triggers_select.tga 0.468750000000 0.683593750000 0.490234375000 0.706054687500
+r2_select_menu_over_l.tga 0.984375000000 0.457031250000 0.998046875000 0.488281250000
+r2_select_menu_pushed_l.tga 0.980468750000 0.488281250000 0.994140625000 0.519531250000
+skill_arbo_son_without_son.tga 0.980468750000 0.519531250000 0.994140625000 0.550781250000
+skill_arbo_close_just_one.tga 0.980468750000 0.664062500000 0.994140625000 0.695312500000
+skill_arbo_level.tga 0.000000000000 0.691406250000 0.013671875000 0.722656250000
+skill_arbo_open_first.tga 0.015625000000 0.691406250000 0.029296875000 0.722656250000
+skill_arbo_son.tga 0.031250000000 0.691406250000 0.044921875000 0.722656250000
+skill_arbo_son_last.tga 0.046875000000 0.691406250000 0.060546875000 0.722656250000
+r2_select_menu_l.tga 0.062500000000 0.691406250000 0.076171875000 0.722656250000
+r2_icon_dialog_mini_over.tga 0.699218750000 0.605468750000 0.718750000000 0.625000000000
+r2_icon_dialog_mini_pushed.tga 0.210937500000 0.625000000000 0.230468750000 0.644531250000
+r2_icon_action_mini_over.tga 0.863281250000 0.644531250000 0.882812500000 0.664062500000
+r2_icon_reaction_mini.tga 0.078125000000 0.691406250000 0.097656250000 0.710937500000
+r2_icon_reaction_mini_over.tga 0.097656250000 0.691406250000 0.117187500000 0.710937500000
+r2_icon_reaction_mini_pushed.tga 0.335937500000 0.691406250000 0.355468750000 0.710937500000
+r2_icon_action_mini_pushed.tga 0.355468750000 0.691406250000 0.375000000000 0.710937500000
+r2ed_open_activities.tga 0.492187500000 0.691406250000 0.511718750000 0.710937500000
+r2_icon_action_mini.tga 0.511718750000 0.691406250000 0.531250000000 0.710937500000
+r2_icon_event_trigger_mini.tga 0.531250000000 0.691406250000 0.550781250000 0.710937500000
+r2_icon_event_trigger_mini_over.tga 0.550781250000 0.691406250000 0.570312500000 0.710937500000
+r2_icon_event_trigger_mini_pushed.tga 0.570312500000 0.691406250000 0.589843750000 0.710937500000
+r2_icon_dialog_mini.tga 0.589843750000 0.691406250000 0.609375000000 0.710937500000
+mp3_button_slot.tga 0.609375000000 0.691406250000 0.630859375000 0.708984375000
+w_button_mode_over.tga 0.632812500000 0.691406250000 0.646484375000 0.718750000000
+w_mode_choice.tga 0.648437500000 0.691406250000 0.662109375000 0.718750000000
+details_on.tga 0.964843750000 0.218750000000 0.988281250000 0.234375000000
+qh_on_l.tga 0.109375000000 0.570312500000 0.125000000000 0.593750000000
+qh_on_r.tga 0.093750000000 0.597656250000 0.109375000000 0.621093750000
+r2_select_bar_start_normal_l.tga 0.664062500000 0.691406250000 0.675781250000 0.722656250000
+r2_select_bar_start_normal_r.tga 0.730468750000 0.691406250000 0.742187500000 0.722656250000
+qh_off_r.tga 0.984375000000 0.617187500000 1.000000000000 0.640625000000
+mp3_vol_jauge.tga 0.148437500000 0.242187500000 0.195312500000 0.250000000000
+details_off.tga 0.125000000000 0.359375000000 0.148437500000 0.375000000000
+skin_header_l.tga 0.742187500000 0.691406250000 0.753906250000 0.722656250000
+w_button_filter_off.tga 0.437500000000 0.359375000000 0.460937500000 0.375000000000
+w_button_filter_on.tga 0.976562500000 0.375000000000 1.000000000000 0.390625000000
+qh_off_l.tga 0.753906250000 0.691406250000 0.769531250000 0.714843750000
+filter_armor.tga 0.769531250000 0.691406250000 0.792968750000 0.707031250000
+r2_select_bar_start_over_l.tga 0.792968750000 0.691406250000 0.804687500000 0.722656250000
+filter_mission.tga 0.804687500000 0.691406250000 0.828125000000 0.707031250000
+filter_mps.tga 0.828125000000 0.691406250000 0.851562500000 0.707031250000
+r2_select_bar_start_over_r.tga 0.851562500000 0.691406250000 0.863281250000 0.722656250000
+r2_select_bar_start_pushed_l.tga 0.863281250000 0.691406250000 0.875000000000 0.722656250000
+r2_select_bar_start_pushed_r.tga 0.875000000000 0.691406250000 0.886718750000 0.722656250000
+w_l0_tl_title.tga 0.886718750000 0.691406250000 0.902343750000 0.714843750000
+filter_tools.tga 0.902343750000 0.691406250000 0.925781250000 0.707031250000
+W_slot_jauge_1_mini.tga 0.457031250000 0.597656250000 0.519531250000 0.603515625000
+filter_weapon.tga 0.925781250000 0.691406250000 0.949218750000 0.707031250000
+w_button_18_over.tga 0.949218750000 0.691406250000 0.966796875000 0.708984375000
+mp3_button_pause.tga 0.816406250000 0.628906250000 0.835937500000 0.644531250000
+mp3_button_play.tga 0.375000000000 0.644531250000 0.394531250000 0.660156250000
+mp3_button_previous.tga 0.492187500000 0.660156250000 0.511718750000 0.675781250000
+Switch_Ratio.tga 0.117187500000 0.695312500000 0.136718750000 0.710937500000
+Switch_Text_Icon.tga 0.136718750000 0.695312500000 0.156250000000 0.710937500000
+mp3_button_list.tga 0.156250000000 0.695312500000 0.175781250000 0.710937500000
+mp3_button_next.tga 0.175781250000 0.695312500000 0.195312500000 0.710937500000
+mp3_button_open.tga 0.195312500000 0.695312500000 0.214843750000 0.710937500000
+mp3_button_over.tga 0.214843750000 0.695312500000 0.234375000000 0.710937500000
+w_tab_down_pushed_r.tga 0.968750000000 0.691406250000 0.980468750000 0.714843750000
+W_warning.tga 0.234375000000 0.695312500000 0.251953125000 0.710937500000
+w_expand_off.tga 0.253906250000 0.695312500000 0.265625000000 0.718750000000
+w_expand_on.tga 0.265625000000 0.695312500000 0.277343750000 0.718750000000
+w_tab_down_normal_r.tga 0.277343750000 0.695312500000 0.289062500000 0.718750000000
+w_tab_up_normal_r.tga 0.289062500000 0.695312500000 0.300781250000 0.718750000000
+w_tab_up_pushed_r.tga 0.300781250000 0.695312500000 0.312500000000 0.718750000000
+ency_step_slot.tga 0.476562500000 0.218750000000 0.492187500000 0.234375000000
+W_slot_number.tga 0.234375000000 0.574218750000 0.250000000000 0.589843750000
+W_slot_number_selected.tga 0.394531250000 0.621093750000 0.410156250000 0.636718750000
+W_slot_number_unselected.tga 0.511718750000 0.636718750000 0.527343750000 0.652343750000
+r2_icon_select.tga 0.675781250000 0.652343750000 0.691406250000 0.667968750000
+r2_glow_star.tga 0.312500000000 0.695312500000 0.328125000000 0.710937500000
+W_user_info.tga 0.675781250000 0.695312500000 0.691406250000 0.710937500000
+r2_suspension.tga 0.980468750000 0.695312500000 0.996093750000 0.710937500000
+w_zoom_in.tga 0.375000000000 0.699218750000 0.390625000000 0.714843750000
+w_zoom_out.tga 0.390625000000 0.699218750000 0.406250000000 0.714843750000
+r2ed_ring_rating_1.tga 0.406250000000 0.699218750000 0.421875000000 0.714843750000
+r2_icon_speak_as_small.tga 0.421875000000 0.699218750000 0.437500000000 0.714843750000
+r2_icon_speak_as_small_over.tga 0.437500000000 0.699218750000 0.453125000000 0.714843750000
+r2_icon_speak_as_small_pushed.tga 0.453125000000 0.699218750000 0.468750000000 0.714843750000
+w_center_map.tga 0.691406250000 0.703125000000 0.707031250000 0.718750000000
+W_close_0.tga 0.707031250000 0.703125000000 0.722656250000 0.718750000000
+r2ed_ring_rating_10.tga 0.468750000000 0.707031250000 0.484375000000 0.722656250000
+bulle_next.tga 0.769531250000 0.707031250000 0.785156250000 0.722656250000
+r2ed_ring_rating_2.tga 0.804687500000 0.707031250000 0.820312500000 0.722656250000
+r2_icon_map_invalid.tga 0.820312500000 0.707031250000 0.835937500000 0.722656250000
+w_arrow_left_0.tga 0.835937500000 0.707031250000 0.851562500000 0.722656250000
+W_arrow_right_0.tga 0.902343750000 0.707031250000 0.917968750000 0.722656250000
+W_arrow_up_0.tga 0.917968750000 0.707031250000 0.933593750000 0.722656250000
+w_back_map.tga 0.933593750000 0.707031250000 0.949218750000 0.722656250000
+W_button_16_over.tga 0.078125000000 0.710937500000 0.093750000000 0.726562500000
+r2ed_ring_rating_3.tga 0.093750000000 0.710937500000 0.109375000000 0.726562500000
+r2ed_ring_rating_4.tga 0.109375000000 0.710937500000 0.125000000000 0.726562500000
+money_seve.tga 0.125000000000 0.710937500000 0.140625000000 0.726562500000
+w_add.tga 0.140625000000 0.710937500000 0.156250000000 0.726562500000
+W_answer_16_cancel.tga 0.156250000000 0.710937500000 0.171875000000 0.726562500000
+W_answer_16_valid.tga 0.171875000000 0.710937500000 0.187500000000 0.726562500000
+W_arrow_down_0.tga 0.187500000000 0.710937500000 0.203125000000 0.726562500000
+r2ed_ring_rating_5.tga 0.203125000000 0.710937500000 0.218750000000 0.726562500000
+r2_mini_activity_chat.tga 0.218750000000 0.710937500000 0.234375000000 0.726562500000
+r2ed_ring_rating_6.tga 0.234375000000 0.710937500000 0.250000000000 0.726562500000
+W_button_default.tga 0.312500000000 0.710937500000 0.328125000000 0.726562500000
+W_button_edit.tga 0.328125000000 0.710937500000 0.343750000000 0.726562500000
+bgd_pause.tga 0.343750000000 0.710937500000 0.359375000000 0.726562500000
+r2_icon_possess_small.tga 0.359375000000 0.710937500000 0.375000000000 0.726562500000
+r2_icon_possess_small_over.tga 0.484375000000 0.710937500000 0.500000000000 0.726562500000
+r2_icon_possess_small_pushed.tga 0.500000000000 0.710937500000 0.515625000000 0.726562500000
+r2ed_ring_rating_7.tga 0.515625000000 0.710937500000 0.531250000000 0.726562500000
+r2ed_ring_rating_8.tga 0.531250000000 0.710937500000 0.546875000000 0.726562500000
+r2_mini_activity_empty_chat.tga 0.546875000000 0.710937500000 0.562500000000 0.726562500000
+r2_mini_activity_feed_zone.tga 0.562500000000 0.710937500000 0.578125000000 0.726562500000
+r2_mini_activity_follow_road.tga 0.578125000000 0.710937500000 0.593750000000 0.726562500000
+r2_mini_activity_guard_zone.tga 0.593750000000 0.710937500000 0.609375000000 0.726562500000
+r2_mini_activity_hunt_zone.tga 0.609375000000 0.710937500000 0.625000000000 0.726562500000
+r2_mini_activity_inactive.tga 0.675781250000 0.710937500000 0.691406250000 0.726562500000
+pin_off.tga 0.949218750000 0.710937500000 0.964843750000 0.726562500000
+pin_on.tga 0.980468750000 0.710937500000 0.996093750000 0.726562500000
+r2_mini_activity_patrol_road.tga 0.375000000000 0.714843750000 0.390625000000 0.730468750000
+r2_mini_activity_repeat_road.tga 0.390625000000 0.714843750000 0.406250000000 0.730468750000
+target_mission.tga 0.406250000000 0.714843750000 0.421875000000 0.730468750000
+r2_mini_activity_rest_zone.tga 0.421875000000 0.714843750000 0.437500000000 0.730468750000
+r2_mini_activity_stand_still.tga 0.437500000000 0.714843750000 0.453125000000 0.730468750000
+r2_mini_activity_wander_zone.tga 0.453125000000 0.714843750000 0.468750000000 0.730468750000
+W_rename_16.tga 0.753906250000 0.714843750000 0.769531250000 0.730468750000
+w_restore.tga 0.886718750000 0.714843750000 0.902343750000 0.730468750000
+r2_mini_activity_work_zone.tga 0.964843750000 0.714843750000 0.980468750000 0.730468750000
+r2ed_ring_rating_9.tga 0.250000000000 0.718750000000 0.265625000000 0.734375000000
+r2ed_triggers_more.tga 0.265625000000 0.718750000000 0.281250000000 0.734375000000
+r2_map_edge_test.tga 0.281250000000 0.718750000000 0.296875000000 0.734375000000
+r2ed_triggers_trash.tga 0.296875000000 0.718750000000 0.312500000000 0.734375000000
+w_button_radar_plus.tga 0.625000000000 0.718750000000 0.640625000000 0.734375000000
+bulle_quit.tga 0.640625000000 0.718750000000 0.656250000000 0.734375000000
+W_button_reset.tga 0.691406250000 0.718750000000 0.707031250000 0.734375000000
+r2_map_foot_steps.tga 0.000000000000 0.722656250000 0.031250000000 0.730468750000
+ency_step_done.tga 0.707031250000 0.718750000000 0.722656250000 0.734375000000
+w_button_10x24_over.tga 0.031250000000 0.722656250000 0.041015625000 0.746093750000
+w_button_spellock_over.tga 0.042968750000 0.722656250000 0.066406250000 0.731445312500
+w_button_spellock_on.tga 0.722656250000 0.722656250000 0.746093750000 0.731445312500
+w_button_spellock_off.tga 0.769531250000 0.722656250000 0.792968750000 0.731445312500
+r2ed_icon_permanent_group.tga 0.468750000000 0.722656250000 0.482421875000 0.736328125000
+r2ed_icon_permanent_group_creatures.tga 0.656250000000 0.722656250000 0.669921875000 0.736328125000
+r2ed_icon_permanent_macro_components.tga 0.792968750000 0.722656250000 0.806640625000 0.736328125000
+w_affected.tga 0.808593750000 0.722656250000 0.822265625000 0.736328125000
+r2ed_icon_region.tga 0.824218750000 0.722656250000 0.837890625000 0.736328125000
+W_slot_mood.tga 0.839843750000 0.722656250000 0.853515625000 0.736328125000
+r2ed_permanent_pins.tga 0.855468750000 0.722656250000 0.869140625000 0.736328125000
+w_sound_off.tga 0.871093750000 0.722656250000 0.884765625000 0.736328125000
+w_sound_on.tga 0.902343750000 0.722656250000 0.916015625000 0.736328125000
+w_button_radar_moins.tga 0.917968750000 0.722656250000 0.931640625000 0.736328125000
+w_button_14_over.tga 0.933593750000 0.722656250000 0.947265625000 0.736328125000
+w_slot_on.tga 0.066406250000 0.726562500000 0.080078125000 0.740234375000
+arbo_son_last.tga 0.082031250000 0.726562500000 0.095703125000 0.740234375000
+arbo_son_without_son.tga 0.097656250000 0.726562500000 0.111328125000 0.740234375000
+r2_icon_components_tasks.tga 0.113281250000 0.726562500000 0.126953125000 0.740234375000
+r2_icon_components_trigger.tga 0.128906250000 0.726562500000 0.142578125000 0.740234375000
+r2_icon_create.tga 0.144531250000 0.726562500000 0.158203125000 0.740234375000
+arbo_son.tga 0.160156250000 0.726562500000 0.173828125000 0.740234375000
+arbo_close_just_one.tga 0.175781250000 0.726562500000 0.189453125000 0.740234375000
+contact_chat.tga 0.191406250000 0.726562500000 0.205078125000 0.740234375000
+W_offline.tga 0.207031250000 0.726562500000 0.220703125000 0.740234375000
+w_on.tga 0.222656250000 0.726562500000 0.236328125000 0.740234375000
+W_online.tga 0.312500000000 0.726562500000 0.326171875000 0.740234375000
+w_win_close.tga 0.328125000000 0.726562500000 0.341796875000 0.740234375000
+w_win_lock.tga 0.343750000000 0.726562500000 0.357421875000 0.740234375000
+w_win_popin.tga 0.359375000000 0.726562500000 0.373046875000 0.740234375000
+w_win_popup.tga 0.484375000000 0.726562500000 0.498046875000 0.740234375000
+w_online_abroad.tga 0.500000000000 0.726562500000 0.513671875000 0.740234375000
+w_opacity_on.tga 0.515625000000 0.726562500000 0.529296875000 0.740234375000
+w_help_1.tga 0.531250000000 0.726562500000 0.544921875000 0.740234375000
+w_pad_close.tga 0.546875000000 0.726562500000 0.560546875000 0.740234375000
+arbo_open_first.tga 0.562500000000 0.726562500000 0.576171875000 0.740234375000
+animal_inventory.tga 0.578125000000 0.726562500000 0.591796875000 0.740234375000
+r2_icon_far.tga 0.593750000000 0.726562500000 0.607421875000 0.740234375000
+arbo_level.tga 0.609375000000 0.726562500000 0.623046875000 0.740234375000
+r2ed_icon_road.tga 0.671875000000 0.726562500000 0.685546875000 0.740234375000
+r2ed_icon_act.tga 0.949218750000 0.726562500000 0.962890625000 0.740234375000
+r2ed_icon_botobject.tga 0.980468750000 0.726562500000 0.994140625000 0.740234375000
+r2ed_icon_creatures.tga 0.000000000000 0.730468750000 0.013671875000 0.744140625000
+r2ed_icon_default_feature.tga 0.015625000000 0.730468750000 0.029296875000 0.744140625000
+r2ed_icon_group.tga 0.375000000000 0.730468750000 0.388671875000 0.744140625000
+r2ed_icon_group_creatures.tga 0.390625000000 0.730468750000 0.404296875000 0.744140625000
+r2ed_icon_macro_components.tga 0.406250000000 0.730468750000 0.419921875000 0.744140625000
+r2ed_permanent_node.tga 0.421875000000 0.730468750000 0.435546875000 0.744140625000
+r2_icon_properties.tga 0.437500000000 0.730468750000 0.451171875000 0.744140625000
+r2ed_icon_npc.tga 0.453125000000 0.730468750000 0.466796875000 0.744140625000
+r2ed_icon_permanent_creatures.tga 0.746093750000 0.730468750000 0.759765625000 0.744140625000
+quit_button_normal_r.tga 0.187500000000 0.195312500000 0.195312500000 0.218750000000
+quit_button_over_l.tga 0.187500000000 0.218750000000 0.195312500000 0.242187500000
+quit_button_over_r.tga 0.312500000000 0.250000000000 0.320312500000 0.273437500000
+quit_button_pushed_l.tga 0.992187500000 0.250000000000 1.000000000000 0.273437500000
+quit_button_pushed_r.tga 0.992187500000 0.390625000000 1.000000000000 0.414062500000
+r2_select_menu_r.tga 0.992187500000 0.414062500000 0.998046875000 0.445312500000
+r2_select_menu_over_r.tga 0.238281250000 0.726562500000 0.244140625000 0.757812500000
+w_slot_jauge_1_umin.tga 0.246093750000 0.734375000000 0.277343750000 0.740234375000
+r2_select_menu_pushed_r.tga 0.761718750000 0.730468750000 0.767578125000 0.761718750000
+quit_button_normal_l.tga 0.546875000000 0.429687500000 0.554687500000 0.453125000000
+target.tga 0.042968750000 0.734375000000 0.059570312500 0.745117187500
+flag-en.tga 0.515625000000 0.585937500000 0.530273437500 0.597656250000
+flag-fr.tga 0.410156250000 0.593750000000 0.424804687500 0.605468750000
+flag-de.tga 0.765625000000 0.593750000000 0.780273437500 0.605468750000
+w_trade_player_ready.tga 0.886718750000 0.730468750000 0.898437500000 0.744140625000
+num_6.tga 0.964843750000 0.730468750000 0.976562500000 0.744140625000
+num_7.tga 0.277343750000 0.734375000000 0.289062500000 0.748046875000
+W_warning_2.tga 0.289062500000 0.734375000000 0.302734375000 0.746093750000
+num_8.tga 0.625000000000 0.734375000000 0.636718750000 0.748046875000
+num_9.tga 0.636718750000 0.734375000000 0.648437500000 0.748046875000
+w_defense_normal_m.tga 0.988281250000 0.000000000000 0.992187500000 0.041015625000
+w_defense_normal_r.tga 0.988281250000 0.042968750000 0.992187500000 0.083984375000
+w_defense_r.tga 0.996093750000 0.488281250000 1.000000000000 0.529296875000
+w_defense_l.tga 0.996093750000 0.664062500000 1.000000000000 0.705078125000
+w_defense_m.tga 0.996093750000 0.707031250000 1.000000000000 0.748046875000
+w_defense_normal_l.tga 0.687500000000 0.726562500000 0.691406250000 0.767578125000
+num_0.tga 0.691406250000 0.734375000000 0.703125000000 0.748046875000
+num_1.tga 0.703125000000 0.734375000000 0.714843750000 0.748046875000
+num_2.tga 0.714843750000 0.734375000000 0.726562500000 0.748046875000
+num_3.tga 0.726562500000 0.734375000000 0.738281250000 0.748046875000
+num_4.tga 0.769531250000 0.734375000000 0.781250000000 0.748046875000
+num_5.tga 0.781250000000 0.734375000000 0.792968750000 0.748046875000
+w_trade_other_ready.tga 0.468750000000 0.738281250000 0.480468750000 0.751953125000
+W_button_12_over.tga 0.160156250000 0.468750000000 0.171875000000 0.480468750000
+W_arrow_down_1.tga 0.648437500000 0.738281250000 0.660156250000 0.750000000000
+W_mood_pow1.tga 0.660156250000 0.738281250000 0.671875000000 0.750000000000
+W_weight.tga 0.792968750000 0.738281250000 0.804687500000 0.750000000000
+W_mood_pow0.tga 0.804687500000 0.738281250000 0.816406250000 0.750000000000
+W_mood_pow2.tga 0.816406250000 0.738281250000 0.828125000000 0.750000000000
+W_mood_pow3.tga 0.828125000000 0.738281250000 0.839843750000 0.750000000000
+r2ed_triggers_little_chat.tga 0.839843750000 0.738281250000 0.851562500000 0.750000000000
+r2ed_triggers_little_less.tga 0.851562500000 0.738281250000 0.863281250000 0.750000000000
+r2ed_triggers_little_more.tga 0.863281250000 0.738281250000 0.875000000000 0.750000000000
+r2ed_triggers_little_trash.tga 0.875000000000 0.738281250000 0.886718750000 0.750000000000
+r2ed_triggers_maximize.tga 0.898437500000 0.738281250000 0.910156250000 0.750000000000
+r2ed_triggers_minimize.tga 0.910156250000 0.738281250000 0.921875000000 0.750000000000
+W_arrow_right_1.tga 0.921875000000 0.738281250000 0.933593750000 0.750000000000
+W_mood_pow5.tga 0.933593750000 0.738281250000 0.945312500000 0.750000000000
+W_scale_more_1.tga 0.062500000000 0.742187500000 0.074218750000 0.753906250000
+target_info.tga 0.074218750000 0.742187500000 0.085937500000 0.753906250000
+W_arrow_up_1.tga 0.085937500000 0.742187500000 0.097656250000 0.753906250000
+W_close_1.tga 0.097656250000 0.742187500000 0.109375000000 0.753906250000
+w_copy.tga 0.109375000000 0.742187500000 0.121093750000 0.753906250000
+W_scale_less_1.tga 0.121093750000 0.742187500000 0.132812500000 0.753906250000
+rollout_opened.tga 0.132812500000 0.742187500000 0.143554687500 0.753906250000
+rollout_closed.tga 0.144531250000 0.742187500000 0.155273437500 0.753906250000
+W_magic_sep1.tga 0.535156250000 0.523437500000 0.540039062500 0.548828125000
+W_magic_sep2.tga 0.304687500000 0.734375000000 0.309570312500 0.759765625000
+w_death.tga 0.156250000000 0.742187500000 0.168945312500 0.751953125000
+r2ed_desert_m.tga 0.988281250000 0.085937500000 0.992187500000 0.117187500000
+r2ed_prime_roots_m.tga 0.496093750000 0.343750000000 0.500000000000 0.375000000000
+r2_select_menu_pushed_m.tga 0.351562500000 0.425781250000 0.355468750000 0.457031250000
+r2ed_desert_pushed_m.tga 0.976562500000 0.730468750000 0.980468750000 0.761718750000
+r2ed_desert_pushed_r.tga 0.738281250000 0.734375000000 0.742187500000 0.765625000000
+skin_bl_open.tga 0.476562500000 0.273437500000 0.492187500000 0.281250000000
+r2ed_desert_r.tga 0.742187500000 0.734375000000 0.746093750000 0.765625000000
+skin_el_open.tga 0.972656250000 0.304687500000 0.988281250000 0.312500000000
+r2ed_forest_pushed_m.tga 0.480468750000 0.738281250000 0.484375000000 0.769531250000
+r2ed_jungle_m.tga 0.945312500000 0.738281250000 0.949218750000 0.769531250000
+r2ed_forest_pushed_r.tga 0.171875000000 0.742187500000 0.175781250000 0.773437500000
+r2ed_jungle_pushed_m.tga 0.175781250000 0.742187500000 0.179687500000 0.773437500000
+r2ed_jungle_pushed_r.tga 0.179687500000 0.742187500000 0.183593750000 0.773437500000
+r2ed_jungle_r.tga 0.183593750000 0.742187500000 0.187500000000 0.773437500000
+r2ed_forest_r.tga 0.187500000000 0.742187500000 0.191406250000 0.773437500000
+r2_main_menu_normal_m.tga 0.191406250000 0.742187500000 0.195312500000 0.773437500000
+r2ed_lakes_m.tga 0.195312500000 0.742187500000 0.199218750000 0.773437500000
+r2ed_prime_roots_pushed_m.tga 0.199218750000 0.742187500000 0.203125000000 0.773437500000
+r2ed_lakes_pushed_m.tga 0.203125000000 0.742187500000 0.207031250000 0.773437500000
+r2ed_lakes_pushed_r.tga 0.207031250000 0.742187500000 0.210937500000 0.773437500000
+r2ed_lakes_r.tga 0.210937500000 0.742187500000 0.214843750000 0.773437500000
+curs_m.tga 0.214843750000 0.742187500000 0.218750000000 0.773437500000
+r2ed_prime_roots_pushed_r.tga 0.218750000000 0.742187500000 0.222656250000 0.773437500000
+r2_select_bar_start_over_m.tga 0.222656250000 0.742187500000 0.226562500000 0.773437500000
+r2ed_prime_roots_r.tga 0.226562500000 0.742187500000 0.230468750000 0.773437500000
+r2ed_forest_m.tga 0.230468750000 0.742187500000 0.234375000000 0.773437500000
+r2_select_bar_start_pushed_m.tga 0.234375000000 0.742187500000 0.238281250000 0.773437500000
+r2_main_menu_over_m.tga 0.246093750000 0.742187500000 0.250000000000 0.773437500000
+r2_main_menu_pushed_m.tga 0.250000000000 0.742187500000 0.253906250000 0.773437500000
+r2_select_menu_m.tga 0.253906250000 0.742187500000 0.257812500000 0.773437500000
+r2_select_bar_start_normal_m.tga 0.257812500000 0.742187500000 0.261718750000 0.773437500000
+r2_select_menu_over_m.tga 0.261718750000 0.742187500000 0.265625000000 0.773437500000
+W_L0_EL_open.tga 0.484375000000 0.382812500000 0.500000000000 0.390625000000
+r2_tab_sequence_pushed_r.tga 0.542968750000 0.460937500000 0.546875000000 0.488281250000
+r2_tab_wide_pushed_m.tga 0.531250000000 0.554687500000 0.535156250000 0.582031250000
+r2_tab_wide_pushed_r.tga 0.265625000000 0.742187500000 0.269531250000 0.769531250000
+r2_tab_sequence_pushed_m.tga 0.269531250000 0.742187500000 0.273437500000 0.769531250000
+r2_tab_wide_normal_m.tga 0.273437500000 0.742187500000 0.277343750000 0.769531250000
+r2_tab_wide_normal_r.tga 0.312500000000 0.742187500000 0.316406250000 0.769531250000
+W_arrow_down_2.tga 0.316406250000 0.742187500000 0.326171875000 0.751953125000
+W_close_2.tga 0.328125000000 0.742187500000 0.337890625000 0.751953125000
+W_scale_more_2.tga 0.339843750000 0.742187500000 0.349609375000 0.751953125000
+W_arrow_up_2.tga 0.351562500000 0.742187500000 0.361328125000 0.751953125000
+W_scale_less_2.tga 0.363281250000 0.742187500000 0.373046875000 0.751953125000
+W_button_10_over.tga 0.484375000000 0.742187500000 0.494140625000 0.751953125000
+W_arrow_right_2.tga 0.496093750000 0.742187500000 0.505859375000 0.751953125000
+r2_icon_map_entity_orient.tga 0.507812500000 0.742187500000 0.516601562500 0.752929687500
+quit_button_over_m.tga 0.265625000000 0.402343750000 0.269531250000 0.425781250000
+w_header_r.tga 0.257812500000 0.441406250000 0.261718750000 0.464843750000
+w_tab_pushed_m.tga 0.261718750000 0.441406250000 0.265625000000 0.464843750000
+w_tab_pushed_r.tga 0.472656250000 0.500000000000 0.476562500000 0.523437500000
+quit_button_pushed_m.tga 0.476562500000 0.500000000000 0.480468750000 0.523437500000
+w_header_m.tga 0.468750000000 0.531250000000 0.472656250000 0.554687500000
+r2_tab_wide_over_l.tga 0.464843750000 0.562500000000 0.468750000000 0.585937500000
+w_tab_up_normal_m.tga 0.519531250000 0.742187500000 0.523437500000 0.765625000000
+w_tab_down_normal_l.tga 0.523437500000 0.742187500000 0.527343750000 0.765625000000
+w_tab_up_normal_l.tga 0.527343750000 0.742187500000 0.531250000000 0.765625000000
+w_tab_down_normal_m.tga 0.531250000000 0.742187500000 0.535156250000 0.765625000000
+qh_off_m.tga 0.535156250000 0.742187500000 0.539062500000 0.765625000000
+r2_tab_wide_over_m.tga 0.539062500000 0.742187500000 0.542968750000 0.765625000000
+r2_tab_wide_over_r.tga 0.542968750000 0.742187500000 0.546875000000 0.765625000000
+w_tab_normal_l.tga 0.546875000000 0.742187500000 0.550781250000 0.765625000000
+w_tab_normal_m.tga 0.550781250000 0.742187500000 0.554687500000 0.765625000000
+w_tab_normal_r.tga 0.554687500000 0.742187500000 0.558593750000 0.765625000000
+qh_on_m.tga 0.558593750000 0.742187500000 0.562500000000 0.765625000000
+w_tab_over_l.tga 0.562500000000 0.742187500000 0.566406250000 0.765625000000
+w_tab_over_m.tga 0.566406250000 0.742187500000 0.570312500000 0.765625000000
+quit_button_normal_m.tga 0.570312500000 0.742187500000 0.574218750000 0.765625000000
+w_l0_tr_title.tga 0.574218750000 0.742187500000 0.578125000000 0.765625000000
+w_l0_t_title.tga 0.578125000000 0.742187500000 0.582031250000 0.765625000000
+w_tab_over_r.tga 0.582031250000 0.742187500000 0.585937500000 0.765625000000
+w_tab_pushed_l.tga 0.585937500000 0.742187500000 0.589843750000 0.765625000000
+W_ico_affected_fill.tga 0.171875000000 0.429687500000 0.177734375000 0.441406250000
+W_ico_affected.tga 0.992187500000 0.445312500000 0.998046875000 0.457031250000
+w_text_button_over_l.tga 0.988281250000 0.218750000000 0.992187500000 0.234375000000
+w_text_button_over_m.tga 0.121093750000 0.222656250000 0.125000000000 0.238281250000
+w_text_button_over_r.tga 0.148437500000 0.359375000000 0.152343750000 0.375000000000
+w_text_button_pushed_l.tga 0.460937500000 0.359375000000 0.464843750000 0.375000000000
+W_scale_more_3.tga 0.312500000000 0.273437500000 0.320312500000 0.281250000000
+w_text_button_pushed_m.tga 0.128906250000 0.414062500000 0.132812500000 0.429687500000
+w_text_button_pushed_r.tga 0.253906250000 0.480468750000 0.257812500000 0.496093750000
+r2ed_triggers_corner.tga 0.492187500000 0.273437500000 0.500000000000 0.281250000000
+r2ed_tool_border.tga 0.988281250000 0.304687500000 0.996093750000 0.312500000000
+W_L0_M_open.tga 0.089843750000 0.238281250000 0.105468750000 0.242187500000
+r2ed_tool_corner.tga 0.968750000000 0.343750000000 0.976562500000 0.351562500000
+r2ed_tool_corner_select.tga 0.992187500000 0.582031250000 1.000000000000 0.589843750000
+r2ed_tool_corner_select_g.tga 0.136718750000 0.593750000000 0.144531250000 0.601562500000
+W_L1_BL.tga 0.105468750000 0.238281250000 0.121093750000 0.242187500000
+W_L1_BL_open.tga 0.960937500000 0.386718750000 0.976562500000 0.390625000000
+W_L1_E_open.tga 0.328125000000 0.589843750000 0.343750000000 0.593750000000
+W_L2_BL.tga 0.117187500000 0.621093750000 0.132812500000 0.625000000000
+W_L2_BL_open.tga 0.746093750000 0.625000000000 0.761718750000 0.628906250000
+W_L2_E_open.tga 0.675781250000 0.667968750000 0.691406250000 0.671875000000
+W_L2_M_open.tga 0.589843750000 0.742187500000 0.605468750000 0.746093750000
+r2ed_tool_border_select.tga 0.144531250000 0.593750000000 0.152343750000 0.601562500000
+r2ed_tool_border_select_g.tga 0.519531250000 0.597656250000 0.527343750000 0.605468750000
+skin_l1_bl_open.tga 0.605468750000 0.742187500000 0.621093750000 0.746093750000
+W_point.tga 0.835937500000 0.605468750000 0.843750000000 0.613281250000
+W_button_08_over.tga 0.527343750000 0.613281250000 0.535156250000 0.621093750000
+skin_l1_e_open.tga 0.671875000000 0.742187500000 0.687500000000 0.746093750000
+W_close_3.tga 0.835937500000 0.613281250000 0.843750000000 0.621093750000
+cm_b.tga 0.527343750000 0.621093750000 0.535156250000 0.628906250000
+cm_bl.tga 0.882812500000 0.621093750000 0.890625000000 0.628906250000
+r2ed_island_border.tga 0.691406250000 0.628906250000 0.699218750000 0.636718750000
+W_hl_b.tga 0.882812500000 0.628906250000 0.890625000000 0.636718750000
+W_hl_bl.tga 0.691406250000 0.636718750000 0.699218750000 0.644531250000
+skin_sep_l.tga 0.808593750000 0.652343750000 0.816406250000 0.660156250000
+skin_sep_r.tga 0.808593750000 0.660156250000 0.816406250000 0.667968750000
+W_hl_br.tga 0.855468750000 0.667968750000 0.863281250000 0.675781250000
+skin_tl.tga 0.800781250000 0.675781250000 0.808593750000 0.683593750000
+skin_tr.tga 0.855468750000 0.675781250000 0.863281250000 0.683593750000
+W_hl_l.tga 0.800781250000 0.683593750000 0.808593750000 0.691406250000
+W_hl_r.tga 0.328125000000 0.695312500000 0.335937500000 0.703125000000
+W_hl_t.tga 0.691406250000 0.695312500000 0.699218750000 0.703125000000
+W_hl_tl.tga 0.328125000000 0.703125000000 0.335937500000 0.710937500000
+W_hl_tr.tga 0.722656250000 0.703125000000 0.730468750000 0.710937500000
+r2ed_island_corner.tga 0.785156250000 0.707031250000 0.792968750000 0.714843750000
+cm_br.tga 0.625000000000 0.710937500000 0.632812500000 0.718750000000
+cm_l.tga 0.722656250000 0.710937500000 0.730468750000 0.718750000000
+cm_link_hor.tga 0.785156250000 0.714843750000 0.792968750000 0.722656250000
+cm_link_vert.tga 0.746093750000 0.722656250000 0.753906250000 0.730468750000
+cm_m.tga 0.949218750000 0.742187500000 0.957031250000 0.750000000000
+cm_r.tga 0.957031250000 0.742187500000 0.964843750000 0.750000000000
+cm_t.tga 0.980468750000 0.742187500000 0.988281250000 0.750000000000
+cm_tl.tga 0.988281250000 0.742187500000 0.996093750000 0.750000000000
+cm_tr.tga 0.000000000000 0.746093750000 0.007812500000 0.753906250000
+compas_l.tga 0.250000000000 0.511718750000 0.253906250000 0.527343750000
+r2_icon_map_entity_small.tga 0.007812500000 0.746093750000 0.015625000000 0.753906250000
+r2_icon_map_entity_small_highlight.tga 0.015625000000 0.746093750000 0.023437500000 0.753906250000
+w_l0_lock.tga 0.023437500000 0.746093750000 0.031250000000 0.753906250000
+W_L1_M_open.tga 0.031250000000 0.746093750000 0.046875000000 0.750000000000
+compas_m.tga 0.996093750000 0.531250000000 1.000000000000 0.546875000000
+W_scale_less_3.tga 0.046875000000 0.746093750000 0.054687500000 0.753906250000
+r2_icon_map_invalid_small.tga 0.054687500000 0.746093750000 0.062500000000 0.753906250000
+skin_bl.tga 0.289062500000 0.746093750000 0.296875000000 0.753906250000
+W_arrow_down_3.tga 0.296875000000 0.746093750000 0.304687500000 0.753906250000
+compas_r.tga 0.230468750000 0.601562500000 0.234375000000 0.617187500000
+W_button_10_choice.tga 0.375000000000 0.746093750000 0.382812500000 0.753906250000
+skin_br.tga 0.382812500000 0.746093750000 0.390625000000 0.753906250000
+skin_br_open.tga 0.390625000000 0.746093750000 0.398437500000 0.753906250000
+W_arrow_right_3.tga 0.398437500000 0.746093750000 0.406250000000 0.753906250000
+skin_l1_m_open.tga 0.406250000000 0.746093750000 0.421875000000 0.750000000000
+r2ed_triggers_border.tga 0.421875000000 0.746093750000 0.429687500000 0.753906250000
+skin_l1_bl.tga 0.429687500000 0.746093750000 0.445312500000 0.750000000000
+W_arrow_up_3.tga 0.445312500000 0.746093750000 0.453125000000 0.753906250000
+skin_er_open.tga 0.453125000000 0.746093750000 0.460937500000 0.753906250000
+w_special_bl.tga 0.460937500000 0.746093750000 0.468750000000 0.753906250000
+w_special_blank.tga 0.589843750000 0.746093750000 0.597656250000 0.753906250000
+w_special_br.tga 0.597656250000 0.746093750000 0.605468750000 0.753906250000
+w_special_tr.tga 0.605468750000 0.746093750000 0.613281250000 0.753906250000
+w_text_button_normal_l.tga 0.671875000000 0.675781250000 0.675781250000 0.691406250000
+w_text_button_normal_m.tga 0.621093750000 0.742187500000 0.625000000000 0.757812500000
+W_L0_BL.tga 0.671875000000 0.746093750000 0.687500000000 0.750000000000
+W_L0_BL_open.tga 0.746093750000 0.746093750000 0.761718750000 0.750000000000
+w_text_button_normal_r.tga 0.613281250000 0.746093750000 0.617187500000 0.761718750000
+W_quantity.tga 0.886718750000 0.746093750000 0.892578125000 0.753906250000
+Numbers_sep.tga 0.964843750000 0.746093750000 0.969726562500 0.753906250000
+Numbers_0.tga 0.031250000000 0.750000000000 0.036132812500 0.757812500000
+Numbers_1.tga 0.039062500000 0.750000000000 0.043945312500 0.757812500000
+Numbers_2.tga 0.277343750000 0.750000000000 0.282226562500 0.757812500000
+Numbers_3.tga 0.406250000000 0.750000000000 0.411132812500 0.757812500000
+Numbers_4.tga 0.414062500000 0.750000000000 0.418945312500 0.757812500000
+Numbers_5.tga 0.429687500000 0.750000000000 0.434570312500 0.757812500000
+Numbers_6.tga 0.437500000000 0.750000000000 0.442382812500 0.757812500000
+Numbers_7.tga 0.625000000000 0.750000000000 0.629882812500 0.757812500000
+Numbers_8.tga 0.632812500000 0.750000000000 0.637695312500 0.757812500000
+Numbers_9.tga 0.640625000000 0.750000000000 0.645507812500 0.757812500000
+r2ed_island_corner_select.tga 0.648437500000 0.750000000000 0.654296875000 0.755859375000
+r2ed_island_border_select.tga 0.656250000000 0.750000000000 0.662109375000 0.755859375000
+typo_m.tga 0.664062500000 0.750000000000 0.669921875000 0.755859375000
+typo_q.tga 0.671875000000 0.750000000000 0.677734375000 0.755859375000
+typo_v.tga 0.679687500000 0.750000000000 0.685546875000 0.755859375000
+typo_w.tga 0.691406250000 0.750000000000 0.697265625000 0.755859375000
+typo_y.tga 0.699218750000 0.750000000000 0.705078125000 0.755859375000
+W_scroll_L123_M.tga 0.984375000000 0.390625000000 0.992187500000 0.394531250000
+skin_scroll_t.tga 0.546875000000 0.453125000000 0.554687500000 0.457031250000
+W_scroll_L123_T.tga 0.457031250000 0.582031250000 0.464843750000 0.585937500000
+skin_sep_m.tga 0.882812500000 0.636718750000 0.890625000000 0.640625000000
+Skin_scroll_R.tga 0.988281250000 0.117187500000 0.992187500000 0.125000000000
+w_scroll_m.tga 0.996093750000 0.304687500000 1.000000000000 0.312500000000
+w_scroll_r.tga 0.125000000000 0.492187500000 0.128906250000 0.500000000000
+w_special_b.tga 0.156250000000 0.500000000000 0.160156250000 0.507812500000
+w_special_l.tga 0.691406250000 0.644531250000 0.699218750000 0.648437500000
+w_special_r.tga 0.738281250000 0.648437500000 0.746093750000 0.652343750000
+w_special_t.tga 0.152343750000 0.562500000000 0.156250000000 0.570312500000
+Skin_scroll_L.tga 0.527343750000 0.597656250000 0.531250000000 0.605468750000
+skin_scroll_b.tga 0.855468750000 0.683593750000 0.863281250000 0.687500000000
+w_scroll_l.tga 0.250000000000 0.710937500000 0.253906250000 0.718750000000
+W_scroll_L0_B.tga 0.730468750000 0.687500000000 0.738281250000 0.691406250000
+W_scroll_L0_M.tga 0.484375000000 0.707031250000 0.492187500000 0.710937500000
+W_scroll_L0_T.tga 0.656250000000 0.718750000000 0.664062500000 0.722656250000
+W_scroll_L123_B.tga 0.722656250000 0.718750000000 0.730468750000 0.722656250000
+W_L0_EM_open.tga 0.246093750000 0.726562500000 0.250000000000 0.734375000000
+W_L0_ER_open.tga 0.898437500000 0.730468750000 0.902343750000 0.738281250000
+typo_6.tga 0.707031250000 0.750000000000 0.711914062500 0.755859375000
+typo_question.tga 0.714843750000 0.750000000000 0.719726562500 0.755859375000
+typo_r.tga 0.722656250000 0.750000000000 0.727539062500 0.755859375000
+typo_u.tga 0.730468750000 0.750000000000 0.735351562500 0.755859375000
+typo_7.tga 0.746093750000 0.750000000000 0.750976562500 0.755859375000
+typo_8.tga 0.753906250000 0.750000000000 0.758789062500 0.755859375000
+typo_x.tga 0.769531250000 0.750000000000 0.774414062500 0.755859375000
+typo_9.tga 0.777343750000 0.750000000000 0.782226562500 0.755859375000
+typo_a.tga 0.785156250000 0.750000000000 0.790039062500 0.755859375000
+typo_0.tga 0.792968750000 0.750000000000 0.797851562500 0.755859375000
+typo_2.tga 0.800781250000 0.750000000000 0.805664062500 0.755859375000
+typo_b.tga 0.808593750000 0.750000000000 0.813476562500 0.755859375000
+typo_3.tga 0.816406250000 0.750000000000 0.821289062500 0.755859375000
+typo_4.tga 0.824218750000 0.750000000000 0.829101562500 0.755859375000
+typo_d.tga 0.832031250000 0.750000000000 0.836914062500 0.755859375000
+typo_g.tga 0.839843750000 0.750000000000 0.844726562500 0.755859375000
+typo_h.tga 0.847656250000 0.750000000000 0.852539062500 0.755859375000
+typo_k.tga 0.855468750000 0.750000000000 0.860351562500 0.755859375000
+typo_5.tga 0.863281250000 0.750000000000 0.868164062500 0.755859375000
+typo_n.tga 0.871093750000 0.750000000000 0.875976562500 0.755859375000
+typo_o.tga 0.878906250000 0.750000000000 0.883789062500 0.755859375000
+typo_p.tga 0.894531250000 0.750000000000 0.899414062500 0.755859375000
+infos_top.tga 0.066406250000 0.722656250000 0.073242187500 0.726562500000
+infos_bot.tga 0.648437500000 0.734375000000 0.655273437500 0.738281250000
+infos_mid.tga 0.902343750000 0.750000000000 0.909179687500 0.753906250000
+w_radar_point.tga 0.910156250000 0.750000000000 0.915039062500 0.754882812500
+bulle_tr.tga 0.917968750000 0.750000000000 0.922851562500 0.754882812500
+bulle_bl.tga 0.925781250000 0.750000000000 0.930664062500 0.754882812500
+bulle_br.tga 0.933593750000 0.750000000000 0.938476562500 0.754882812500
+bulle_tl.tga 0.949218750000 0.750000000000 0.954101562500 0.754882812500
+typo_l.tga 0.062500000000 0.734375000000 0.066406250000 0.740234375000
+typo_s.tga 0.617187500000 0.746093750000 0.621093750000 0.751953125000
+typo_t.tga 0.972656250000 0.746093750000 0.976562500000 0.751953125000
+typo_f.tga 0.285156250000 0.750000000000 0.289062500000 0.755859375000
+typo_c.tga 0.941406250000 0.750000000000 0.945312500000 0.755859375000
+typo_1.tga 0.957031250000 0.750000000000 0.960937500000 0.755859375000
+typo_i.tga 0.960937500000 0.750000000000 0.964843750000 0.755859375000
+typo_j.tga 0.980468750000 0.750000000000 0.984375000000 0.755859375000
+typo_z.tga 0.984375000000 0.750000000000 0.988281250000 0.755859375000
+typo_e.tga 0.988281250000 0.750000000000 0.992187500000 0.755859375000
+W_L1_L.tga 0.121093750000 0.238281250000 0.125000000000 0.242187500000
+W_L1_R.tga 0.351562500000 0.457031250000 0.355468750000 0.460937500000
+W_L1_T.tga 0.347656250000 0.496093750000 0.351562500000 0.500000000000
+W_L1_TL.tga 0.156250000000 0.507812500000 0.160156250000 0.511718750000
+W_L1_TR.tga 0.343750000000 0.527343750000 0.347656250000 0.531250000000
+W_L2_B.tga 0.996093750000 0.546875000000 1.000000000000 0.550781250000
+W_box_bot.tga 0.152343750000 0.570312500000 0.156250000000 0.574218750000
+w_l2_blank.tga 0.230468750000 0.617187500000 0.234375000000 0.621093750000
+W_box_bot_left.tga 0.132812500000 0.621093750000 0.136718750000 0.625000000000
+W_L2_BR.tga 0.761718750000 0.625000000000 0.765625000000 0.628906250000
+W_L2_BR_open.tga 0.964843750000 0.710937500000 0.968750000000 0.714843750000
+W_L2_B_open.tga 0.074218750000 0.722656250000 0.078125000000 0.726562500000
+r2ed_dismatch_filter.tga 0.671875000000 0.722656250000 0.675781250000 0.726562500000
+W_L2_L.tga 0.894531250000 0.746093750000 0.898437500000 0.750000000000
+W_box_bot_right.tga 0.992187500000 0.750000000000 0.996093750000 0.753906250000
+W_L2_R.tga 0.996093750000 0.750000000000 1.000000000000 0.753906250000
+W_L2_T.tga 0.000000000000 0.753906250000 0.003906250000 0.757812500000
+W_L2_TL.tga 0.003906250000 0.753906250000 0.007812500000 0.757812500000
+W_L2_TR.tga 0.007812500000 0.753906250000 0.011718750000 0.757812500000
+W_box_left.tga 0.011718750000 0.753906250000 0.015625000000 0.757812500000
+W_box_right.tga 0.015625000000 0.753906250000 0.019531250000 0.757812500000
+W_box_top.tga 0.019531250000 0.753906250000 0.023437500000 0.757812500000
+W_box_top_left.tga 0.023437500000 0.753906250000 0.027343750000 0.757812500000
+W_box_top_right.tga 0.027343750000 0.753906250000 0.031250000000 0.757812500000
+alpha_50.tga 0.046875000000 0.753906250000 0.050781250000 0.757812500000
+skin_l1_l.tga 0.050781250000 0.753906250000 0.054687500000 0.757812500000
+fame_bar_3d.tga 0.054687500000 0.753906250000 0.055664062500 0.769531250000
+skin_l1_r.tga 0.058593750000 0.753906250000 0.062500000000 0.757812500000
+blank.tga 0.062500000000 0.753906250000 0.066406250000 0.757812500000
+blank2.tga 0.066406250000 0.753906250000 0.070312500000 0.757812500000
+skin_l1_t.tga 0.070312500000 0.753906250000 0.074218750000 0.757812500000
+skin_l1_tl.tga 0.074218750000 0.753906250000 0.078125000000 0.757812500000
+alpha_60.tga 0.078125000000 0.753906250000 0.082031250000 0.757812500000
+skin_l2_r.tga 0.082031250000 0.753906250000 0.085937500000 0.757812500000
+skin_l3_r.tga 0.085937500000 0.753906250000 0.089843750000 0.757812500000
+skin_modal_b.tga 0.089843750000 0.753906250000 0.093750000000 0.757812500000
+w_hl_bl_l123.tga 0.093750000000 0.753906250000 0.097656250000 0.757812500000
+skin_modal_bl.tga 0.097656250000 0.753906250000 0.101562500000 0.757812500000
+w_hl_br_l123.tga 0.101562500000 0.753906250000 0.105468750000 0.757812500000
+w_hl_b_l123.tga 0.105468750000 0.753906250000 0.109375000000 0.757812500000
+skin_modal_br.tga 0.109375000000 0.753906250000 0.113281250000 0.757812500000
+w_hl_l_l123.tga 0.113281250000 0.753906250000 0.117187500000 0.757812500000
+skin_modal_l.tga 0.117187500000 0.753906250000 0.121093750000 0.757812500000
+w_hl_r_l123.tga 0.121093750000 0.753906250000 0.125000000000 0.757812500000
+skin_modal_r.tga 0.125000000000 0.753906250000 0.128906250000 0.757812500000
+skin_modal_t.tga 0.128906250000 0.753906250000 0.132812500000 0.757812500000
+w_hl_tl_l123.tga 0.132812500000 0.753906250000 0.136718750000 0.757812500000
+skin_modal_tl.tga 0.136718750000 0.753906250000 0.140625000000 0.757812500000
+w_hl_tr_l123.tga 0.140625000000 0.753906250000 0.144531250000 0.757812500000
+skin_modal_tr.tga 0.144531250000 0.753906250000 0.148437500000 0.757812500000
+alpha_70.tga 0.148437500000 0.753906250000 0.152343750000 0.757812500000
+alpha_80.tga 0.152343750000 0.753906250000 0.156250000000 0.757812500000
+W_L3_BL.tga 0.156250000000 0.753906250000 0.160156250000 0.757812500000
+w_l3_blank.tga 0.160156250000 0.753906250000 0.164062500000 0.757812500000
+W_L3_BR.tga 0.164062500000 0.753906250000 0.167968750000 0.757812500000
+W_L3_L.tga 0.167968750000 0.753906250000 0.171875000000 0.757812500000
+W_L3_R.tga 0.289062500000 0.753906250000 0.292968750000 0.757812500000
+W_L3_T.tga 0.292968750000 0.753906250000 0.296875000000 0.757812500000
+W_L3_TL.tga 0.296875000000 0.753906250000 0.300781250000 0.757812500000
+W_L3_TR.tga 0.300781250000 0.753906250000 0.304687500000 0.757812500000
+grey_0.tga 0.316406250000 0.753906250000 0.320312500000 0.757812500000
+r2ed_triggers_gray.tga 0.320312500000 0.753906250000 0.324218750000 0.757812500000
+W_modal_B.tga 0.324218750000 0.753906250000 0.328125000000 0.757812500000
+W_modal_BL.tga 0.328125000000 0.753906250000 0.332031250000 0.757812500000
+W_modal_blank.tga 0.332031250000 0.753906250000 0.335937500000 0.757812500000
+W_modal_BR.tga 0.335937500000 0.753906250000 0.339843750000 0.757812500000
+W_modal_L.tga 0.339843750000 0.753906250000 0.343750000000 0.757812500000
+W_modal_R.tga 0.343750000000 0.753906250000 0.347656250000 0.757812500000
+W_modal_T.tga 0.347656250000 0.753906250000 0.351562500000 0.757812500000
+W_modal_TL.tga 0.351562500000 0.753906250000 0.355468750000 0.757812500000
+W_modal_TR.tga 0.355468750000 0.753906250000 0.359375000000 0.757812500000
+grey_10.tga 0.359375000000 0.753906250000 0.363281250000 0.757812500000
+grey_100.tga 0.363281250000 0.753906250000 0.367187500000 0.757812500000
+grey_20.tga 0.367187500000 0.753906250000 0.371093750000 0.757812500000
+grey_30.tga 0.371093750000 0.753906250000 0.375000000000 0.757812500000
+grey_40.tga 0.375000000000 0.753906250000 0.378906250000 0.757812500000
+grey_50.tga 0.378906250000 0.753906250000 0.382812500000 0.757812500000
+grey_60.tga 0.382812500000 0.753906250000 0.386718750000 0.757812500000
+grey_70.tga 0.386718750000 0.753906250000 0.390625000000 0.757812500000
+w_hl_t_l123.tga 0.390625000000 0.753906250000 0.394531250000 0.757812500000
+grey_80.tga 0.394531250000 0.753906250000 0.398437500000 0.757812500000
+grey_90.tga 0.398437500000 0.753906250000 0.402343750000 0.757812500000
+W_L3_B.tga 0.402343750000 0.753906250000 0.406250000000 0.757812500000
+r2ed_triggers_blank.tga 0.421875000000 0.753906250000 0.425781250000 0.757812500000
+alpha_10.tga 0.425781250000 0.753906250000 0.429687500000 0.757812500000
+skin_l1_b.tga 0.445312500000 0.753906250000 0.449218750000 0.757812500000
+alpha_20.tga 0.449218750000 0.753906250000 0.453125000000 0.757812500000
+w_l0_l_over.tga 0.453125000000 0.753906250000 0.457031250000 0.757812500000
+r2ed_triggers_little_border.tga 0.457031250000 0.753906250000 0.460937500000 0.757812500000
+r2ed_little_island_border_select.tga 0.460937500000 0.753906250000 0.464843750000 0.757812500000
+r2ed_triggers_little_corner.tga 0.464843750000 0.753906250000 0.468750000000 0.757812500000
+W_L0_R.tga 0.468750000000 0.753906250000 0.472656250000 0.757812500000
+w_l0_r_over.tga 0.472656250000 0.753906250000 0.476562500000 0.757812500000
+W_L0_T.tga 0.476562500000 0.753906250000 0.480468750000 0.757812500000
+W_L0_TL.tga 0.484375000000 0.753906250000 0.488281250000 0.757812500000
+w_l0_tl_over.tga 0.488281250000 0.753906250000 0.492187500000 0.757812500000
+r2ed_little_island_corner_select.tga 0.492187500000 0.753906250000 0.496093750000 0.757812500000
+W_L0_TR.tga 0.496093750000 0.753906250000 0.500000000000 0.757812500000
+w_l0_tr_over.tga 0.500000000000 0.753906250000 0.503906250000 0.757812500000
+alpha_30.tga 0.503906250000 0.753906250000 0.507812500000 0.757812500000
+w_l0_t_over.tga 0.507812500000 0.753906250000 0.511718750000 0.757812500000
+alpha_40.tga 0.511718750000 0.753906250000 0.515625000000 0.757812500000
+W_L123_blank.tga 0.515625000000 0.753906250000 0.519531250000 0.757812500000
+W_L1_B.tga 0.589843750000 0.753906250000 0.593750000000 0.757812500000
+r2ed_tool_bg.tga 0.593750000000 0.753906250000 0.597656250000 0.757812500000
+w_l1_blank.tga 0.597656250000 0.753906250000 0.601562500000 0.757812500000
+W_L0_B.tga 0.601562500000 0.753906250000 0.605468750000 0.757812500000
+skin_l1_b_open.tga 0.605468750000 0.753906250000 0.609375000000 0.757812500000
+W_L0_blank.tga 0.609375000000 0.753906250000 0.613281250000 0.757812500000
+W_L1_BR.tga 0.617187500000 0.753906250000 0.621093750000 0.757812500000
+w_l0_bl_over.tga 0.886718750000 0.753906250000 0.890625000000 0.757812500000
+W_L0_BR.tga 0.890625000000 0.753906250000 0.894531250000 0.757812500000
+W_L0_BR_open.tga 0.902343750000 0.753906250000 0.906250000000 0.757812500000
+w_l0_br_over.tga 0.906250000000 0.753906250000 0.910156250000 0.757812500000
+W_L0_B_open.tga 0.964843750000 0.753906250000 0.968750000000 0.757812500000
+w_l0_b_over.tga 0.968750000000 0.753906250000 0.972656250000 0.757812500000
+W_L1_BR_open.tga 0.972656250000 0.753906250000 0.976562500000 0.757812500000
+W_L1_B_open.tga 0.992187500000 0.753906250000 0.996093750000 0.757812500000
+W_box_blank.tga 0.996093750000 0.753906250000 1.000000000000 0.757812500000
+W_L0_L.tga 0.000000000000 0.757812500000 0.003906250000 0.761718750000
+w_jauge_fill_tmin.tga 0.003906250000 0.757812500000 0.004882812500 0.767578125000
+bulle_l.tga 0.007812500000 0.757812500000 0.012695312500 0.759765625000
+bulle_t.tga 0.015625000000 0.757812500000 0.017578125000 0.762695312500
+bulle_r.tga 0.019531250000 0.757812500000 0.024414062500 0.759765625000
+bulle_b.tga 0.027343750000 0.757812500000 0.029296875000 0.762695312500
+w_line_hor3.tga 0.031250000000 0.757812500000 0.033203125000 0.761718750000
+r2_map_zone_edge.tga 0.035156250000 0.757812500000 0.037109375000 0.760742187500
+w_l1_r_spe.tga 0.039062500000 0.757812500000 0.042968750000 0.758789062500
+bulle_m.tga 0.042968750000 0.757812500000 0.044921875000 0.759765625000
+w_l1_spe_blank.tga 0.046875000000 0.757812500000 0.050781250000 0.758789062500
+skin_l1_spe_blank.tga 0.050781250000 0.757812500000 0.054687500000 0.758789062500
+text_cursor.tga 0.058593750000 0.757812500000 0.060546875000 0.759765625000
+jauge_fill.tga 0.062500000000 0.757812500000 0.063476562500 0.761718750000
+W_jauge_fill.tga 0.066406250000 0.757812500000 0.067382812500 0.761718750000
+W_line_hor.tga 0.070312500000 0.757812500000 0.072265625000 0.759765625000
+w_line_hor2.tga 0.074218750000 0.757812500000 0.076171875000 0.759765625000
+skin_l1_r_spe.tga 0.078125000000 0.757812500000 0.082031250000 0.758789062500
+W_line_ver.tga 0.082031250000 0.757812500000 0.083984375000 0.759765625000
+W_jauge_fill_mini.tga 0.085937500000 0.757812500000 0.086914062500 0.759765625000
+w_jauge_fill_umin.tga 0.089843750000 0.757812500000 0.090820312500 0.759765625000
+no_bord.tga 0.093750000000 0.757812500000 0.094726562500 0.758789062500
+r2ed_tool_draw_road_base.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2_icon_components_chest.tga 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2_instance_link.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+instance_link.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2ed_tool_draw_region.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2ed_tool_draw_road_over.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2_region_vertex.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2_road_flag.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2_entity_count_too_high.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2_entity_place_holder.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2ed_tool_draw_road.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2ed_tool_draw_region_over.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+r2ed_tool_split_road_over.psd 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+road_flag.max 0.000000000000 0.000000000000 0.000000000000 0.000000000000
+road_flag.shape 0.000000000000 0.000000000000 0.000000000000 0.000000000000
diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/webig.lua b/code/ryzom/client/data/gamedev/interfaces_v3/webig.lua
new file mode 100644
index 000000000..9b88c02f7
--- /dev/null
+++ b/code/ryzom/client/data/gamedev/interfaces_v3/webig.lua
@@ -0,0 +1,190 @@
+
+-- create the webig namespace without reseting if already created in an other file.
+if (webig==nil) then
+ webig= {}
+end
+
+if (webig.sheetLists==nil) then
+ webig.sheetLists = {}
+end
+
+
+function webig:addSheet(dst, sheet, quality, quantity, worned, user_color, rm_class_type, rm_faber_stat_type)
+ if quality == nil then quality=0 end
+ if quantity == nil then quantity=0 end
+ if worned == nil then worned=0 end
+ if user_color == nil then user_color=0 end
+ if rm_class_type == nil then rm_class_type=0 end
+ if rm_faber_stat_type == nil then rm_faber_stat_type=0 end
+ addDbProp(dst..":SHEET", sheet)
+ addDbProp(dst..":WORNED", worned)
+ addDbProp(dst..":QUALITY", quality)
+ addDbProp(dst..":QUANTITY", quantity)
+ addDbProp(dst..":USER_COLOR", user_color)
+ addDbProp(dst..":RM_CLASS_TYPE", rm_class_type)
+ addDbProp(dst..":RM_FABER_STAT_TYPE", rm_faber_stat_type)
+end
+
+function webig:cleanSheets(db)
+ delDbProp(db)
+end
+
+function webig:addSheetList(name, ctrl, db, size)
+ webig.sheetLists[name] = {}
+ webig.sheetLists[name].ctrl = ctrl
+ webig.sheetLists[name].db = db
+ webig.sheetLists[name].selection = ""
+ webig.sheetLists[name].size = size
+end
+
+function webig:copyItems(src, dst)
+ addDbProp(dst..":SHEET", getDbProp(src..":SHEET"))
+ addDbProp(dst..":WORNED", getDbProp(src..":WORNED"))
+ addDbProp(dst..":QUALITY", getDbProp(src..":QUALITY"))
+ addDbProp(dst..":QUANTITY", getDbProp(src..":QUANTITY"))
+ addDbProp(dst..":USER_COLOR", getDbProp(src..":USER_COLOR"))
+ addDbProp(dst..":RM_CLASS_TYPE", getDbProp(src..":RM_CLASS_TYPE"))
+ addDbProp(dst..":RM_FABER_STAT_TYPE", getDbProp(src..":RM_FABER_STAT_TYPE"))
+end
+
+function webig:swapItems(src, dst)
+ local sheet = getDbProp(dst..":SHEET")
+ local worned = getDbProp(dst..":WORNED")
+ local quality = getDbProp(dst..":QUALITY")
+ local quantity = getDbProp(dst..":QUANTITY")
+ local user_color = getDbProp(dst..":USER_COLOR")
+ local rm_class_type = getDbProp(dst..":RM_CLASS_TYPE")
+ local rm_faber_stat_type = getDbProp(dst..":RM_FABER_STAT_TYPE")
+
+ addDbProp(dst..":SHEET", getDbProp(src..":SHEET"))
+ addDbProp(dst..":WORNED", getDbProp(src..":WORNED"))
+ addDbProp(dst..":QUALITY", getDbProp(src..":QUALITY"))
+ addDbProp(dst..":QUANTITY", getDbProp(src..":QUANTITY"))
+ addDbProp(dst..":USER_COLOR", getDbProp(src..":USER_COLOR"))
+ addDbProp(dst..":RM_CLASS_TYPE", getDbProp(src..":RM_CLASS_TYPE"))
+ addDbProp(dst..":RM_FABER_STAT_TYPE", getDbProp(src..":RM_FABER_STAT_TYPE"))
+
+ addDbProp(src..":SHEET", sheet)
+ addDbProp(src..":WORNED", worned)
+ addDbProp(src..":QUALITY", quality)
+ addDbProp(src..":QUANTITY", quantity)
+ addDbProp(src..":USER_COLOR", user_color)
+ addDbProp(src..":RM_CLASS_TYPE", rm_class_type)
+ addDbProp(src..":RM_FABER_STAT_TYPE", rm_faber_stat_type)
+end
+
+function webig:deleteItem(src)
+ addDbProp(src..":SHEET", 0)
+ addDbProp(src..":WORNED", 0)
+ addDbProp(src..":QUALITY", 0)
+ addDbProp(src..":QUANTITY", 0)
+ addDbProp(src..":USER_COLOR", 0)
+ addDbProp(src..":RM_CLASS_TYPE", 0)
+ addDbProp(src..":RM_FABER_STAT_TYPE", 0)
+end
+
+function webig:paramDbSheetSlot(sheet_list, ctrl)
+ local ctrlSheet = webig.sheetLists[sheet_list].ctrl:find("list:"..ctrl)
+ if ctrlSheet ~= nil then
+ ctrlSheet.left_click="lua"
+ ctrlSheet.left_click_params="webig:addOrRemoveDbSheet(\'"..sheet_list.."\', \'"..ctrl.."\')"
+ ctrlSheet.dragable=true
+ ctrlSheet.can_drop=true
+ ctrlSheet.on_drop="lua"
+ ctrlSheet.on_drop_params="webig:dropDbSheet(\'"..sheet_list.."\', \'"..ctrl.."\', \'%src\')"
+ ctrlSheet.on_can_drop="lua"
+ ctrlSheet.on_can_drop_params="webig:canDropDbSheet(\'"..sheet_list.."\', \'"..ctrl.."\', \'%src\')"
+ end
+end
+
+function webig:paramDbSheetSelect(sheet_list, ctrl, lua_function)
+ local ctrlSheet = webig.sheetLists[sheet_list].ctrl:find("list:"..ctrl)
+ if ctrlSheet ~= nil then
+ ctrlSheet.left_click="lua"
+ ctrlSheet.left_click_params=lua_function.."(\'"..sheet_list.."\', \'"..ctrl.."\')"
+ ctrlSheet.dragable=false
+ ctrlSheet.can_drop=false
+ end
+end
+
+function webig:canDropDbSheet(sheet_list, ctrl, src)
+ webig.sheetLists[sheet_list].ctrl:find("list:"..ctrl).can_drop=true
+end
+
+function webig:dropDbSheet(sheet_list, ctrl, src)
+ local db = webig.sheetLists[sheet_list].db
+ local sl_id = webig.sheetLists[sheet_list].ctrl.id
+ if (string.sub(src, 1, string.len(sl_id)) == sl_id) then -- copy from same list sheet
+ local pos=nil
+ for i=1, string.len(src) do
+ if string.sub(src, i, i) == ":" then
+ pos = i+1
+ end
+ end
+ id = string.sub(src, pos, string.len(src))
+ webig:swapItems(db..":"..id, db..":"..ctrl)
+ else
+ slot = getUI(src)
+ if slot ~= nil then
+ id = findReplaceAll(src, slot.parent.id..":", "")
+ webig:copyItems("LOCAL:INVENTORY:BAG:"..id, db..":"..ctrl)
+ end
+ end
+end
+
+
+function webig:addOrRemoveDbSheet(sheet_list, ctrl)
+ local db = webig.sheetLists[sheet_list].db
+ if getDbProp(db..":"..ctrl..":SHEET") == 0 then -- Add item
+ webig:AddDbSheet(sheet_list, ctrl)
+ else
+ webig:removeDbSheetQuantity(sheet_list, ctrl)
+ end
+end
+
+function webig:AddDbSheet(sheet_list, ctrl)
+ runAH(nil, "enter_modal", "group=ui:interface:webig_html_modal")
+ local whm = getUI("ui:interface:webig_html_modal")
+ whm.child_resize_h=false
+ whm.h = 44*webig.sheetLists[sheet_list].size
+ whm.w = 224
+ whm = getUI("ui:interface:webig_html_modal:html")
+ if whm ~= nil then
+ whm:refresh() -- url need be setted before
+ end
+ webig.sheetLists[sheet_list].selection = ctrl
+end
+
+function webig:removeDbSheetQuantity(sheet_list, ctrl)
+ local db = webig.sheetLists[sheet_list].db
+ webig:copyItems(db..":"..ctrl, "UI:DROP_DESTROY_ITEM:ITEM")
+ runAH(nil, "set_keyboard_focus", "select_all=true|target=ui:interface:webig_drop_destroy_item_quantity_modal:edit:eb")
+ getUI("ui:interface:webig_drop_destroy_item_quantity_modal:ok_cancel:ok").onclick_l="lua"
+ getUI("ui:interface:webig_drop_destroy_item_quantity_modal:ok_cancel:ok").params_l="webig:doRemoveDbSheetQuantity(\'"..sheet_list.."\', \'"..ctrl.."\')"
+ getUI("ui:interface:webig_drop_destroy_item_quantity_modal:edit:eb").on_enter="lua"
+ getUI("ui:interface:webig_drop_destroy_item_quantity_modal:edit:eb").on_enter_params="webig:doRemoveDbSheetQuantity(\'"..sheet_list.."\', \'"..ctrl.."\')"
+ runAH(nil, "enter_modal", "group=ui:interface:webig_drop_destroy_item_quantity_modal")
+ setDbProp("UI:DROP_DESTROY_ITEM:ITEM:QUANTITY", getDbProp(db..":"..ctrl..":QUANTITY"))
+ getUI("ui:interface:webig_drop_destroy_item_quantity_modal:edit:eb").input_string=tostring(getDbProp(db..":"..ctrl..":QUANTITY"))
+end
+
+function webig:doRemoveDbSheetQuantity(sheet_list, ctrl)
+ local db = webig.sheetLists[sheet_list].db
+ runAH(nil, "leave_modal", "group=ui:interface:webig_drop_destroy_item_quantity_modal")
+ local new_quantity = tonumber(getUI("ui:interface:webig_drop_destroy_item_quantity_modal:edit:eb").input_string)
+ local current_quantity = getDbProp(db..":"..ctrl..":QUANTITY")
+ if new_quantity >= current_quantity then
+ webig:deleteItem(db..":"..ctrl)
+ else
+ addDbProp(db..":"..ctrl..":QUANTITY", current_quantity-new_quantity)
+ end
+end
+
+--assert(nil, "RELOADABLE SCRIPT");
+
+
+
+
+
+
+
diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml b/code/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
new file mode 100644
index 000000000..3c1470485
--- /dev/null
+++ b/code/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/client/src/interface_v3/bot_chat_page_trade.cpp b/code/ryzom/client/src/interface_v3/bot_chat_page_trade.cpp
index 1cd5644d4..bde03fa4b 100644
--- a/code/ryzom/client/src/interface_v3/bot_chat_page_trade.cpp
+++ b/code/ryzom/client/src/interface_v3/bot_chat_page_trade.cpp
@@ -997,7 +997,7 @@ void CBotChatPageTrade::startSellDialog(CDBCtrlSheet *sheet, CCtrlBase * /* pCal
CCtrlTextButton *confirmButton = dynamic_cast(ig->getCtrl("ok"));
if (confirmButton)
{
- confirmButton->setActive( sheet->getLockedByOwner() );
+ confirmButton->setActive( !sheet->getLockedByOwner() );
confirmButton->setText(CI18N::get("uiSellImmediately"));
confirmButton->setDefaultContextHelp(CI18N::get("uittDirectSellButton"));
}
diff --git a/code/ryzom/client/src/interface_v3/people_interraction.cpp b/code/ryzom/client/src/interface_v3/people_interraction.cpp
index a92d73ce3..a6f5f8e31 100644
--- a/code/ryzom/client/src/interface_v3/people_interraction.cpp
+++ b/code/ryzom/client/src/interface_v3/people_interraction.cpp
@@ -2088,7 +2088,7 @@ public:
if(GenericMsgHeaderMngr.pushNameToStream(msgName, out))
{
uint8 teamMember = (uint8) peopleIndex;
- out.serialEnum(teamMember);
+ out.serial(teamMember);
NetMngr.push(out);
//nlinfo("impulseCallBack : %s %d sent", msgName.c_str(), teamMember);
}
diff --git a/code/ryzom/common/src/game_share/character_sync_itf.h b/code/ryzom/common/src/game_share/character_sync_itf.h
index 459659732..5481045ed 100644
--- a/code/ryzom/common/src/game_share/character_sync_itf.h
+++ b/code/ryzom/common/src/game_share/character_sync_itf.h
@@ -1108,9 +1108,7 @@ namespace CHARSYNC
void setResult(TCharacterNameResult value)
{
-
_Result = value;
-
}
//
uint32 getUserId() const
@@ -1120,9 +1118,7 @@ namespace CHARSYNC
void setUserId(uint32 value)
{
-
_UserId = value;
-
}
//
uint8 getCharIndex() const
@@ -1132,9 +1128,7 @@ namespace CHARSYNC
void setCharIndex(uint8 value)
{
-
_CharIndex = value;
-
}
//
const ucstring& getFullName() const
@@ -1144,9 +1138,7 @@ namespace CHARSYNC
void setFullName(const ucstring &value)
{
-
_FullName = value;
-
}
bool operator == (const CValidateNameResult &other) const
@@ -1161,7 +1153,6 @@ namespace CHARSYNC
// constructor
CValidateNameResult()
{
-
}
void serial(NLMISC::IStream &s)
@@ -1170,7 +1161,6 @@ namespace CHARSYNC
s.serial(_UserId);
s.serial(_CharIndex);
s.serial(_FullName);
-
}
diff --git a/code/ryzom/common/src/game_share/msg_ais_egs_gen.h b/code/ryzom/common/src/game_share/msg_ais_egs_gen.h
index d7bfc39e7..e08716a4d 100644
--- a/code/ryzom/common/src/game_share/msg_ais_egs_gen.h
+++ b/code/ryzom/common/src/game_share/msg_ais_egs_gen.h
@@ -884,6 +884,7 @@ namespace RYMSG
std::vector< NLMISC::CSheetId > _LootList;
//
NLMISC::CSheetId _Outpost;
+ uint32 _Organization;
//
float _MaxHitRangeForPC;
//
@@ -1336,6 +1337,21 @@ namespace RYMSG
_Outpost = value;
+ }
+
+ //
+ uint32 getOrganization() const
+ {
+ return _Organization;
+ }
+
+ void setOrganization(uint32 value)
+ {
+
+
+ _Organization = value;
+
+
}
//
float getMaxHitRangeForPC() const
@@ -1431,6 +1447,7 @@ namespace RYMSG
&& _ContextOptions == other._ContextOptions
&& _LootList == other._LootList
&& _Outpost == other._Outpost
+ && _Organization == other._Organization
&& _MaxHitRangeForPC == other._MaxHitRangeForPC
&& _UserModelId == other._UserModelId
&& _CustomLootTableId == other._CustomLootTableId
@@ -1489,6 +1506,7 @@ namespace RYMSG
s.serialCont(_ContextOptions);
s.serialCont(_LootList);
s.serial(_Outpost);
+ s.serial(_Organization);
s.serial(_MaxHitRangeForPC);
s.serial(_UserModelId);
s.serial(_CustomLootTableId);
diff --git a/code/ryzom/common/src/game_share/persistent_data_template.h b/code/ryzom/common/src/game_share/persistent_data_template.h
index 08211687a..21cb2588d 100644
--- a/code/ryzom/common/src/game_share/persistent_data_template.h
+++ b/code/ryzom/common/src/game_share/persistent_data_template.h
@@ -175,6 +175,42 @@
#include "nel/misc/hierarchical_timer.h"
inline uint32 saveGameCycleToSecond(NLMISC::TGameCycle tick)
{
+ // Evaluate the UTC of this event (with the current date of save). Suppose that 1 second==10 tick
+ // NB: result should be positive since no event should have been launched before 1970!
+ if (tick < CTickEventHandler::getGameCycle())
+ {
+ NLMISC::TGameCycle tick_dt = CTickEventHandler::getGameCycle() - tick;
+ uint32 s_dt = tick_dt / 10;
+ return NLMISC::CTime::getSecondsSince1970() - s_dt;
+ }
+ else
+ {
+ NLMISC::TGameCycle tick_dt = tick - CTickEventHandler::getGameCycle();
+ uint32 s_dt = tick_dt / 10;
+ return NLMISC::CTime::getSecondsSince1970() + s_dt;
+ }
+}
+inline NLMISC::TGameCycle loadSecondToGameCycle(uint32 second)
+{
+ if (second < NLMISC::CTime::getSecondsSince1970())
+ {
+ uint32 s_dt = NLMISC::CTime::getSecondsSince1970() - second;
+ NLMISC::TGameCycle tick_dt = s_dt * 10;
+ return CTickEventHandler::getGameCycle() - tick_dt;
+ }
+ else
+ {
+ uint32 s_dt = second - NLMISC::CTime::getSecondsSince1970();
+ NLMISC::TGameCycle tick_dt = s_dt * 10;
+ return CTickEventHandler::getGameCycle() + tick_dt;
+ }
+}
+
+/*inline uint32 saveGameCycleToSecond(NLMISC::TGameCycle tick)
+{
+ sint32 dt = CTickEventHandler::getGameCycle() - tick;
+
+
// Evaluate the UTC of this event (with the current date of save). Suppose that 1 second==10 tick
if (tick < CTickEventHandler::getGameCycle())
return NLMISC::CTime::getSecondsSince1970();
@@ -190,7 +226,7 @@ inline NLMISC::TGameCycle loadSecondToGameCycle(uint32 second)
// Convert UTC of the event to game cycle. Suppose that 1 second==10 tick
return CTickEventHandler::getGameCycle() + (second - NLMISC::CTime::getSecondsSince1970())*10;
-}
+}*/
#endif
// GameCycle property (saved as a UTC of the current game cycle, support server migration)
diff --git a/code/ryzom/common/src/game_share/sp_type.cpp b/code/ryzom/common/src/game_share/sp_type.cpp
index 1ab59ed04..a05a8b554 100644
--- a/code/ryzom/common/src/game_share/sp_type.cpp
+++ b/code/ryzom/common/src/game_share/sp_type.cpp
@@ -51,4 +51,4 @@ std::map CSPType::_ValueMap;
// End of static implementation of CSPType
-} // End of EGSPD
\ No newline at end of file
+} // End of EGSPD
diff --git a/code/ryzom/server/src/ai_service/ai.cpp b/code/ryzom/server/src/ai_service/ai.cpp
index b51f1279c..ed8926f5b 100644
--- a/code/ryzom/server/src/ai_service/ai.cpp
+++ b/code/ryzom/server/src/ai_service/ai.cpp
@@ -423,6 +423,15 @@ void CAIS::update()
_CreatureChangeHPList.Entities.clear();
_CreatureChangeHPList.DeltaHp.clear();
}
+ if (!_CreatureChangeMaxHPList.Entities.empty())
+ {
+ nlassert(_CreatureChangeMaxHPList.Entities.size()==_CreatureChangeMaxHPList.MaxHp.size());
+ nlassert(_CreatureChangeMaxHPList.Entities.size()==_CreatureChangeMaxHPList.SetFull.size());
+ _CreatureChangeMaxHPList.send("EGS");
+ _CreatureChangeMaxHPList.Entities.clear();
+ _CreatureChangeMaxHPList.MaxHp.clear();
+ _CreatureChangeMaxHPList.SetFull.clear();
+ }
}
//
diff --git a/code/ryzom/server/src/ai_service/ai.h b/code/ryzom/server/src/ai_service/ai.h
index f06271c17..aed47f262 100644
--- a/code/ryzom/server/src/ai_service/ai.h
+++ b/code/ryzom/server/src/ai_service/ai.h
@@ -221,6 +221,11 @@ public:
{
return _CreatureChangeHPList;
}
+
+ CChangeCreatureMaxHPMsg &getCreatureChangeMaxHP()
+ {
+ return _CreatureChangeMaxHPList;
+ }
enum TSearchType
{
@@ -288,6 +293,7 @@ private:
// Faunas descriptions to be sent each frame
CFaunaBotDescription _FaunaDescriptionList;
CChangeCreatureHPMsg _CreatureChangeHPList;
+ CChangeCreatureMaxHPMsg _CreatureChangeMaxHPList;
/// The emot identifiers
std::map _EmotNames;
diff --git a/code/ryzom/server/src/ai_service/ai_bot.cpp b/code/ryzom/server/src/ai_service/ai_bot.cpp
index 31ce2fce0..03e2a68db 100644
--- a/code/ryzom/server/src/ai_service/ai_bot.cpp
+++ b/code/ryzom/server/src/ai_service/ai_bot.cpp
@@ -61,7 +61,7 @@ CAIInstance* CSpawnBot::getAIInstance() const
void CSpawnBot::setVisualPropertiesName()
{
CBot& botRef = CSpawnBot::getPersistent();
- std::string name = botRef.getName();
+ ucstring name = botRef.getName();
if (CVisualPropertiesInterface::UseIdForName)
{
@@ -85,7 +85,7 @@ void CSpawnBot::setVisualPropertiesName()
if (! botRef.getFaunaBotUseBotName()) //false by default
{
if (botRef.getSheet()->ForceDisplayCreatureName())
- return;
+ return;
// the npc name is displayed as a fauna
}
@@ -403,8 +403,8 @@ std::vector CBot::getMultiLineInfoString() const
pushTitle(container, "CBot");
pushEntry(container, "id=" + getIndexString());
container.back() += " eid=" + getEntityIdString();
- container.back() += " alias=" + getAliasTreeOwner()->getAliasString();
- container.back() += " name=" + getName();
+ container.back() += " alias=" + getAliasTreeOwner()->getAliasString() + " raw alias=" + NLMISC::toString(getAliasTreeOwner()->getAlias());
+ pushEntry(container, " name=" + getName());
if (isSheetValid())
container.back() += " sheet=" + NLMISC::CFile::getFilenameWithoutExtension(getSheet()->SheetId().toString());
pushEntry(container, "fullname=" + getFullName());
diff --git a/code/ryzom/server/src/ai_service/ai_bot.h b/code/ryzom/server/src/ai_service/ai_bot.h
index d74442b83..3156edb82 100644
--- a/code/ryzom/server/src/ai_service/ai_bot.h
+++ b/code/ryzom/server/src/ai_service/ai_bot.h
@@ -95,7 +95,7 @@ public:
virtual float getAggroPropagationRadius() const;
//@}
- void setVisualPropertiesName();
+ virtual void setVisualPropertiesName();
// as there not a lot of prop (1 or 2, maybe 3) stores in this comportment, we don't need hash.
bool getProp(size_t Id, uint32& value) const;
@@ -241,8 +241,8 @@ public:
NLMISC::CEntityId createEntityId() const;
- const std::string& getCustomName() const { return _CustomName; }
- void setCustomName(const std::string &name) { _CustomName = name; }
+ const ucstring& getCustomName() const { return _CustomName; }
+ void setCustomName(const ucstring &name) { _CustomName = name; }
virtual void setClientSheet(const std::string & clientSheetName);
@@ -272,7 +272,7 @@ private:
bool _IgnoreOffensiveActions;
bool _Healer;
bool _BuildingBot;
- std::string _CustomName;
+ ucstring _CustomName;
CTimer _SetSheetTimer;
struct CSetSheetData
{
diff --git a/code/ryzom/server/src/ai_service/ai_bot_npc.cpp b/code/ryzom/server/src/ai_service/ai_bot_npc.cpp
index f56a745db..a8175cc9a 100644
--- a/code/ryzom/server/src/ai_service/ai_bot_npc.cpp
+++ b/code/ryzom/server/src/ai_service/ai_bot_npc.cpp
@@ -274,9 +274,12 @@ std::vector CSpawnBotNpc::getMultiLineInfoString() const
else
{
vector const& missions = _CurrentChatProfile.getMissions();
- pushEntry(container, "missions: " + NLMISC::toString("%u", missions[0]));
- for (size_t i=1; ifindMissionName(missions[i]);
+ pushEntry(container, NLMISC::toString(" %u (%s)", missions[i], name.c_str()));
+ }
}
pushFooter(container);
diff --git a/code/ryzom/server/src/ai_service/ai_bot_pet.cpp b/code/ryzom/server/src/ai_service/ai_bot_pet.cpp
index e6177fda1..6e0747933 100644
--- a/code/ryzom/server/src/ai_service/ai_bot_pet.cpp
+++ b/code/ryzom/server/src/ai_service/ai_bot_pet.cpp
@@ -16,6 +16,7 @@
#include "stdpch.h"
#include "ai_bot_pet.h"
+#include "visual_properties_interface.h"
#include "nel/misc/random.h"
#include "ai_grp_pet.h"
@@ -92,3 +93,28 @@ CSpawnGroupPet& CSpawnBotPet::spawnGrp()
{
return static_cast(CSpawnBot::spawnGrp());
}
+
+void CSpawnBotPet::setVisualPropertiesName()
+{
+ CBotPet& botRef = CSpawnBotPet::getPersistent();
+ ucstring name = botRef.getName();
+
+ if (CVisualPropertiesInterface::UseIdForName)
+ {
+ name = NLMISC::toString("AI:%s", botRef.getIndexString().c_str());
+ }
+
+ if (name.empty() && CVisualPropertiesInterface::ForceNames)
+ {
+ name = NLMISC::CFile::getFilenameWithoutExtension(botRef.getSheet()->SheetId().toString().c_str());
+ }
+
+ if (!botRef.getCustomName().empty())
+ name = botRef.getCustomName();
+
+ // no name the bot will appear without name on the client.
+ if (name.empty())
+ return;
+
+ CVisualPropertiesInterface::setName(dataSetRow(), name);
+}
diff --git a/code/ryzom/server/src/ai_service/ai_bot_pet.h b/code/ryzom/server/src/ai_service/ai_bot_pet.h
index 34eacd039..67a448ee0 100644
--- a/code/ryzom/server/src/ai_service/ai_bot_pet.h
+++ b/code/ryzom/server/src/ai_service/ai_bot_pet.h
@@ -65,6 +65,8 @@ public:
CPathPosition& pathPos() { return _PathPos; }
uint32 _DeathTime;
+
+ void setVisualPropertiesName();
private:
diff --git a/code/ryzom/server/src/ai_service/ai_instance.cpp b/code/ryzom/server/src/ai_service/ai_instance.cpp
index 5fd8e878a..240af6da3 100644
--- a/code/ryzom/server/src/ai_service/ai_instance.cpp
+++ b/code/ryzom/server/src/ai_service/ai_instance.cpp
@@ -653,7 +653,7 @@ static float randomAngle()
return val;
}
-CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &botsName)
+CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &botsName, const std::string &look)
{
if (!_EventNpcManager)
return NULL;
@@ -689,10 +689,13 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
CBotNpc* const bot = NLMISC::safe_cast(grp->bots()[i]);
bot->setSheet(sheet);
+ if (!look.empty())
+ bot->setClientSheet(look);
bot->equipmentInit();
bot->initEnergy(/*groupEnergyCoef()*/0);
CAIVector rpos(pos);
- if (i!=0)
+ // Spawn all randomly except if only 1 bot
+ if (nbBots > 1)
{
RYAI_MAP_CRUNCH::CWorldMap const& worldMap = CWorldContainer::getWorldMap();
RYAI_MAP_CRUNCH::CWorldPosition wp;
@@ -857,6 +860,7 @@ void cbEventCreateNpcGroup( NLNET::CMessage& msgin, const std::string &serviceNa
double dispersionRadius;
bool spawnBots;
std::string botsName;
+ std::string look;
msgin.serial(messageVersion);
nlassert(messageVersion==1);
msgin.serial(instanceNumber);
@@ -869,10 +873,11 @@ void cbEventCreateNpcGroup( NLNET::CMessage& msgin, const std::string &serviceNa
msgin.serial(dispersionRadius);
msgin.serial(spawnBots);
msgin.serial(botsName);
+ msgin.serial(look);
CAIInstance* instance = CAIS::instance().getAIInstance(instanceNumber);
if (instance)
{
- CGroupNpc* npcGroup = instance->eventCreateNpcGroup(nbBots, sheetId, CAIVector((double)x/1000., (double)y/1000.), dispersionRadius, spawnBots, (double)orientation/1000., botsName);
+ CGroupNpc* npcGroup = instance->eventCreateNpcGroup(nbBots, sheetId, CAIVector((double)x/1000., (double)y/1000.), dispersionRadius, spawnBots, (double)orientation/1000., botsName, look);
if (npcGroup != NULL)
{
_PlayersLastCreatedNpcGroup[playerId] = npcGroup->getName();
diff --git a/code/ryzom/server/src/ai_service/ai_instance.h b/code/ryzom/server/src/ai_service/ai_instance.h
index ce53d0559..6540620d9 100644
--- a/code/ryzom/server/src/ai_service/ai_instance.h
+++ b/code/ryzom/server/src/ai_service/ai_instance.h
@@ -207,7 +207,7 @@ public:
return NULL;
}
- CGroupNpc* eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &botsName);
+ CGroupNpc* eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &botsName, const std::string &look);
/// create a new easter egg
CBotEasterEgg* createEasterEgg(uint32 easterEggId, NLMISC::CSheetId const& sheetId, std::string const& botName, double x, double y, double z, double heading, const std::string& look);
diff --git a/code/ryzom/server/src/ai_service/ai_mgr_pet.cpp b/code/ryzom/server/src/ai_service/ai_mgr_pet.cpp
index e72a88abc..31e01d143 100644
--- a/code/ryzom/server/src/ai_service/ai_mgr_pet.cpp
+++ b/code/ryzom/server/src/ai_service/ai_mgr_pet.cpp
@@ -290,6 +290,11 @@ void CPetSpawnMsgImp::callback(std::string const& name, NLNET::TServiceId id)
}
botPet->setSheet(sheet);
+
+ if (!CustomName.empty())
+ {
+ botPet->setCustomName(CustomName);
+ }
if (!botPet->spawn())
{
@@ -314,7 +319,7 @@ void CPetSpawnMsgImp::callback(std::string const& name, NLNET::TServiceId id)
#endif
return;
}
-
+
botPet->getSpawn()->setAIProfile(new CAIPetProfileStand(botPet->getSpawn()));
confirmMsg.PetMirrorRow = botPet->getSpawn()->dataSetRow();
diff --git a/code/ryzom/server/src/ai_service/ai_outpost.cpp b/code/ryzom/server/src/ai_service/ai_outpost.cpp
index 0ef71b2ee..ed2c62b77 100644
--- a/code/ryzom/server/src/ai_service/ai_outpost.cpp
+++ b/code/ryzom/server/src/ai_service/ai_outpost.cpp
@@ -873,14 +873,20 @@ void COutpost::createSquad(CGroupDesc const* groupDesc, COu
// Attack only the declared ennemies of the outpost
if (side==OUTPOSTENUMS::OutpostOwner)
{
- // grp->faction ().addProperty(NLMISC::toString("outpost:%s:defender", getAliasString().c_str()));
- // grp->friendFaction().addProperty(NLMISC::toString("outpost:%s:defender", getAliasString().c_str()));
+ // Bots factions
+ grp->faction ().addProperty(NLMISC::toString("outpost:%s:bot_defender", getAliasString().c_str()));
+ grp->friendFaction().addProperty(NLMISC::toString("outpost:%s:bot_defender", getAliasString().c_str()));
+ grp->ennemyFaction().addProperty(NLMISC::toString("outpost:%s:bot_attacker", getAliasString().c_str()));
+ // Players faction
grp->ennemyFaction().addProperty(NLMISC::toString("outpost:%s:attacker", getAliasString().c_str()));
}
if (side==OUTPOSTENUMS::OutpostAttacker)
{
- // grp->faction ().addProperty(NLMISC::toString("outpost:%s:attacker", getAliasString().c_str()));
- // grp->friendFaction().addProperty(NLMISC::toString("outpost:%s:attacker", getAliasString().c_str()));
+ // Bots factions
+ grp->faction ().addProperty(NLMISC::toString("outpost:%s:bot_attacker", getAliasString().c_str()));
+ grp->friendFaction().addProperty(NLMISC::toString("outpost:%s:bot_attacker", getAliasString().c_str()));
+ grp->ennemyFaction().addProperty(NLMISC::toString("outpost:%s:bot_defender", getAliasString().c_str()));
+ // Players faction
grp->ennemyFaction().addProperty(NLMISC::toString("outpost:%s:defender", getAliasString().c_str()));
}
grp->_AggroRange = 25;
diff --git a/code/ryzom/server/src/ai_service/ai_profile_npc.cpp b/code/ryzom/server/src/ai_service/ai_profile_npc.cpp
index a97beb24f..e47003cb6 100644
--- a/code/ryzom/server/src/ai_service/ai_profile_npc.cpp
+++ b/code/ryzom/server/src/ai_service/ai_profile_npc.cpp
@@ -1562,7 +1562,7 @@ void CGrpProfileGoToPoint::updateProfile(uint ticksSinceLastUpdate)
dx+=dir.x;
dy+=dir.y;
- // 4 rangées.
+ // 4 rows
CAIVector idealPos=groupPosition;
if (botIndex>=_NbBotInNormalShape)
{
@@ -2054,7 +2054,7 @@ void CGrpProfileFollowRoute::updateProfile(uint ticksSinceLastUpdate)
dx+=dir.x;
dy+=dir.y;
- // 4 rangées.
+ // 4 rows
CAIVector idealPos=groupPosition;
if (botIndex>=_NbBotInNormalShape)
{
@@ -2299,6 +2299,94 @@ void CGrpProfileStandOnVertices::updateProfile(uint ticksSinceLastUpdate)
}
}
+//////////////////////////////////////////////////////////////////////////////
+// CGrpProfileFollowPlayer //
+//////////////////////////////////////////////////////////////////////////////
+CGrpProfileFollowPlayer::CGrpProfileFollowPlayer(CProfileOwner* owner, TDataSetRow const& playerRow, uint32 dispersionRadius)
+: CMoveProfile(owner)
+, _PlayerRow(playerRow)
+, _DispersionRadius(dispersionRadius)
+, _PathPos(CAngle(0))
+, _PathCont(NLMISC::safe_cast(owner)->getAStarFlag())
+{
+ PROFILE_LOG("group", "follow player", "ctor", "");
+ _Status = CFollowPath::FOLLOWING;
+}
+
+bool CGrpProfileFollowPlayer::destinationReach() const
+{
+ return _Status == CFollowPath::FOLLOW_ARRIVED
+ || _Status==CFollowPath::FOLLOW_NO_PATH;
+}
+
+void CGrpProfileFollowPlayer::beginProfile()
+{
+ _Status = CFollowPath::FOLLOWING;
+}
+
+// TODO: this doesn't work very well at all...
+void CGrpProfileFollowPlayer::updateProfile(uint ticksSinceLastUpdate)
+{
+ H_AUTO(CGrpProfileFollowPlayerUpdate);
+ CFollowPathContext fpcGrpFollowPlayerUpdate("CGrpProfileFollowPlayerUpdate");
+
+ // check all bot to see if there need to move
+ CSpawnGroupNpc* grp = static_cast(static_cast(_Grp));
+ CGroupNpc &pgrp = grp->getPersistent();
+
+ CBotPlayer* plrPtr = dynamic_cast(CAIS::instance().getEntityPhysical(_PlayerRow));
+
+ if ( ! plrPtr) {
+ nlwarning("CGrpProfileFollowPlayer: No valid player position to follow");
+ return;
+ }
+
+ _PathCont.setDestination(plrPtr->wpos());
+ _PathPos._Angle = plrPtr->theta();
+
+ for (uint i = 0; i < pgrp.bots().size(); ++i)
+ {
+ CBotNpc* bot = static_cast(pgrp.bots()[i]);
+ if (!bot)
+ continue;
+
+ // check current bot state
+ CSpawnBotNpc *sbot = bot->getSpawn();
+ if (!sbot)
+ continue;
+
+ // Need to wait for a correct position before moving?
+ CAIVector const& dest = _PathCont.getDestination();
+ if (dest.x()==0 || dest.y()==0)
+ return;
+
+ static const std::string runParameter("running");
+ float dist;
+ if (sbot->getPersistent().getOwner()->getSpawnObj()->checkProfileParameter(runParameter))
+ dist = sbot->runSpeed()*ticksSinceLastUpdate;
+ else
+ dist = sbot->walkSpeed()*ticksSinceLastUpdate;
+
+ // Move
+ CFollowPath::TFollowStatus const status = CFollowPath::getInstance()->followPath(
+ sbot,
+ _PathPos,
+ _PathCont,
+ dist,
+ 0.f,
+ 0.5f);
+
+ if (status==CFollowPath::FOLLOW_NO_PATH)
+ {
+ nlwarning("Problem with following player");
+ }
+
+
+ }
+}
+
+
+
//////////////////////////////////////////////////////////////////////////////
// CGrpProfileIdle //
//////////////////////////////////////////////////////////////////////////////
@@ -3687,10 +3775,14 @@ bool CGrpProfileFaction::entityHavePartOfFactions(CAIEntityPhysical const* entit
std::set::const_iterator it, end = factionsSet.end();
for (it=factionsSet.begin(); it!=end; ++it)
{
- std::string fameFaction = scriptFactionToFameFaction(CStringMapper::unmap(*it));
+ string factionInfos = CStringMapper::unmap(*it);
+ string fameFaction = scriptFactionToFameFaction(factionInfos);
// sint32 fame = CFameInterface::getInstance().getFameOrCivilisationFame(entity->getEntityId(), CStringMapper::map(fameFaction));
sint32 const fame = entity->getFame(fameFaction);
- if (fame!=NO_FAME && fame>0)
+ sint32 const value = scriptFactionToFameFactionValue(factionInfos);
+ bool gt = scriptFactionToFameFactionGreaterThan(factionInfos);
+ if ((fame != NO_FAME && gt && fame > value) ||
+ (fame != NO_FAME && !gt && fame < value))
{
// nldebug("Entity has faction %s", CStringMapper::unmap(*it).c_str());
return true;
@@ -3731,12 +3823,41 @@ std::string CGrpProfileFaction::scriptFactionToFameFaction(std::string name)
ret += "_";
ret += name[i]-'A'+'a';
}
+ else if (name[i] == '>' || name[i] == '<')
+ {
+ return ret;
+ }
else
+ {
ret += name[i];
+ }
}
return ret;
}
+bool CGrpProfileFaction::scriptFactionToFameFactionGreaterThan(string name)
+{
+ if (name.find("<") != string::npos)
+ return false;
+
+ return true;
+}
+
+sint32 CGrpProfileFaction::scriptFactionToFameFactionValue(string name)
+{
+ size_t start = name.find(">");
+ if (start == string::npos)
+ {
+ start = name.find("<");
+ if (start == string::npos)
+ return 0;
+ }
+
+ sint32 value;
+ NLMISC::fromString(name.substr(start+1), value);
+ return value*6000;
+}
+
std::string CGrpProfileFaction::fameFactionToScriptFaction(std::string name)
{
std::string ret = "Famous";
@@ -3772,9 +3893,9 @@ void CGrpProfileFaction::checkTargetsAround()
CPropertySetWithExtraList const& thisEnnemyFactions = thisGrpNpc.ennemyFaction();
// We don't assist or attack players if our friends/ennemies are not in factions
- bool const assistPlayers = thisFriendFactions.containsPartOfStrict(_FameFactions);
+ bool const assistPlayers = (thisFriendFactions.containsPartOfStrictFilter("Famous*") || thisFriendFactions.have(AITYPES::CPropertyId("Player")));
bool const assistBots = !thisFriendFactions.empty() && !bNoAssist;
- bool const attackPlayers = (!thisEnnemyFactions.extraSetEmpty()) || thisEnnemyFactions.containsPartOfStrict(_FameFactions) || thisEnnemyFactions.containsPartOfStrictFilter("outpost:*");
+ bool const attackPlayers = (!thisEnnemyFactions.extraSetEmpty()) || thisEnnemyFactions.containsPartOfStrictFilter("Famous*") || thisEnnemyFactions.have(AITYPES::CPropertyId("Player")) || thisEnnemyFactions.containsPartOfStrictFilter("outpost:*");
bool const attackBots = !thisEnnemyFactions.empty();
CAIVision Vision;
diff --git a/code/ryzom/server/src/ai_service/ai_profile_npc.h b/code/ryzom/server/src/ai_service/ai_profile_npc.h
index e46f1b4be..9fed6e662 100644
--- a/code/ryzom/server/src/ai_service/ai_profile_npc.h
+++ b/code/ryzom/server/src/ai_service/ai_profile_npc.h
@@ -628,6 +628,49 @@ private:
CAITimer _Timer;
};
+class CGrpProfileFollowPlayer :
+public CMoveProfile
+{
+public:
+ CGrpProfileFollowPlayer(CProfileOwner* owner, TDataSetRow const& playerRow, uint32 dispersionRadius);
+ virtual ~CGrpProfileFollowPlayer() {};
+
+ void setBotStandProfile(AITYPES::TProfiles botStandProfileType, IAIProfileFactory* botStandProfileFactory);
+
+ /// @name IAIProfile implementation
+ //@{
+ virtual void beginProfile();
+ virtual void updateProfile(uint ticksSinceLastUpdate);
+ virtual void endProfile() {};
+ virtual AITYPES::TProfiles getAIProfileType() const { return AITYPES::BOT_FOLLOW_POS; }
+ virtual std::string getOneLineInfoString() const { return std::string("follow_player group profile"); }
+ //@}
+
+ void stateChangeProfile() {};
+ bool destinationReach() const;
+
+ void addBot (CBot* bot) {};
+ void removeBot (CBot* bot) {};
+ CPathCont* getPathCont (CBot const* bot) { return NULL; };
+
+
+protected:
+private:
+ /// the profile type to apply to bot standing between two deplacement
+ AITYPES::TProfiles _BotStandProfileType;
+ /// the profile factory to apply to bot standing between two deplacement
+ IAIProfileFactory*_BotStandProfileFactory;
+
+ CFollowPath::TFollowStatus _Status;
+ CPathPosition _PathPos;
+ CPathCont _PathCont;
+ CAIVector _LastPos;
+
+ TDataSetRow _PlayerRow;
+ uint32 _DispersionRadius;
+};
+
+
//////////////////////////////////////////////////////////////////////////////
// CGrpProfileIdle //
//////////////////////////////////////////////////////////////////////////////
@@ -792,6 +835,10 @@ public:
static std::string scriptFactionToFameFaction(std::string name);
static std::string fameFactionToScriptFaction(std::string name);
+ static bool scriptFactionToFameFactionGreaterThan(std::string name);
+ static sint32 scriptFactionToFameFactionValue(std::string name);
+
+
private:
CAITimer _checkTargetTimer;
bool bNoAssist;
diff --git a/code/ryzom/server/src/ai_service/commands.cpp b/code/ryzom/server/src/ai_service/commands.cpp
index 3803462cd..a85e8fe1c 100644
--- a/code/ryzom/server/src/ai_service/commands.cpp
+++ b/code/ryzom/server/src/ai_service/commands.cpp
@@ -259,7 +259,7 @@ NLMISC_COMMAND(eventCreateNpcGroup, "create an event npc group", "
std::string botsName;
if (args.size()>8) botsName = args[8];
- aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawnBots, orientation, botsName);
+ aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawnBots, orientation, botsName, "");
return true;
}
diff --git a/code/ryzom/server/src/ai_service/generic_logic_action.cpp b/code/ryzom/server/src/ai_service/generic_logic_action.cpp
index 5bcb13fca..64c620cb6 100644
--- a/code/ryzom/server/src/ai_service/generic_logic_action.cpp
+++ b/code/ryzom/server/src/ai_service/generic_logic_action.cpp
@@ -3013,7 +3013,10 @@ public:
}
if(!_Id)
- npcChatToChannelSentence(bot->dataSetRow(),CChatGroup::say,_Sentence);
+ {
+ ucstring ucstr = _Sentence;
+ npcChatToChannelSentence(bot->dataSetRow(),CChatGroup::say, ucstr);
+ }
else
{
if(!_Arg)
diff --git a/code/ryzom/server/src/ai_service/messages.cpp b/code/ryzom/server/src/ai_service/messages.cpp
index 64730a1b7..092ab39f8 100644
--- a/code/ryzom/server/src/ai_service/messages.cpp
+++ b/code/ryzom/server/src/ai_service/messages.cpp
@@ -697,7 +697,8 @@ void CMessages::init()
TRANSPORT_CLASS_REGISTER (CReportStaticAIInstanceMsg);
TRANSPORT_CLASS_REGISTER (CReportAIInstanceDespawnMsg);
TRANSPORT_CLASS_REGISTER (CWarnBadInstanceMsgImp);
-
+ TRANSPORT_CLASS_REGISTER (CCreatureSetUrlMsg);
+ TRANSPORT_CLASS_REGISTER (CChangeCreatureMaxHPMsg)
TRANSPORT_CLASS_REGISTER (CChangeCreatureHPMsg);
TRANSPORT_CLASS_REGISTER (CChangeCreatureModeMsgImp);
TRANSPORT_CLASS_REGISTER (CQueryEgs);
@@ -770,10 +771,10 @@ void CAIAskForInfosOnEntityImp::callback (const std::string &name, NLNET::TServi
}
break;
default:
+ std::vector strings = phys->getMultiLineInfoString();
+ msg.Infos.insert(msg.Infos.end(), strings.begin(), strings.end());
break;
}
- std::vector strings = phys->getMultiLineInfoString();
- msg.Infos.insert(msg.Infos.end(), strings.begin(), strings.end());
}
else
{
diff --git a/code/ryzom/server/src/ai_service/nf_grp.cpp b/code/ryzom/server/src/ai_service/nf_grp.cpp
index 572a589cb..eabe61fd4 100644
--- a/code/ryzom/server/src/ai_service/nf_grp.cpp
+++ b/code/ryzom/server/src/ai_service/nf_grp.cpp
@@ -1497,6 +1497,41 @@ void setAutoSpawn_f_(CStateInstance* entity, CScriptStack& stack)
// HP related methods
/** @page code
+@subsection setMaxHP_ff_
+Sets the Max HP level of each bot of the group.
+
+Arguments: f(MaxHp) f(SetFull) ->
+@param[in] MaxHP is the new maximum HP for each bot
+@param[in] SetFull if not 0, will set the HP to the new maximum
+
+@code
+()setMaxHP(50000,1);
+@endcode
+
+*/
+// CGroup
+void setMaxHP_ff_(CStateInstance* entity, CScriptStack& stack)
+{
+ bool setFull = ((float)stack.top() != 0.f); stack.pop();
+ float maxHp = ((float)stack.top()); stack.pop();
+
+ CChangeCreatureMaxHPMsg& msgList = CAIS::instance().getCreatureChangeMaxHP();
+
+ FOREACH(bot, CCont, entity->getGroup()->bots())
+ {
+ if (!bot->isSpawned())
+ continue;
+
+ CSpawnBot* const sbot = bot->getSpawnObj();
+
+ msgList.Entities.push_back(sbot->dataSetRow());
+ msgList.MaxHp.push_back((uint32)(maxHp));
+ msgList.SetFull.push_back((uint8)(setFull?1:0));
+ }
+}
+
+/** @page code
+
@subsection setHPLevel_f_
Sets the current HP level of each bot of the group.
@@ -1573,10 +1608,42 @@ void setHPScale_f_(CStateInstance* entity, CScriptStack& stack)
}
}
+//----------------------------------------------------------------------------
+// Url related method
+/** @page code
+@subsection setUrl_ss_
+Sets the name and url of right-click action
+Arguments: s(actionName),s(url) ->
+@param[in] actionName of action when player mouse over
+@param[in] url of action when player mouse over
+@code
+()setUrl("Click on Me", "http://www.domain.com/script.php");
+@endcode
+*/
+// CGroup
+void setUrl_ss_(CStateInstance* entity, CScriptStack& stack)
+{
+ std::string url = (std::string)stack.top();stack.pop();
+ std::string actionName = (std::string)stack.top();stack.pop();
+
+ CCreatureSetUrlMsg msg;
+ FOREACH(botIt, CCont, entity->getGroup()->bots())
+ {
+ CSpawnBot* pbot = botIt->getSpawnObj();
+ if (pbot!=NULL)
+ {
+ msg.Entities.push_back(pbot->dataSetRow());
+ }
+ }
+
+ msg.ActionName = actionName;
+ msg.Url = url;
+ msg.send(egsString);
+}
@@ -1870,7 +1937,7 @@ Arguments: s(parameterName) ->
@param[in] parameterName is a the id of the parameter to add
@code
-()addProfileParameter("running"); // équivalent à un parameter "running" dans la primitive du groupe
+()addProfileParameter("running"); // equivalent to "running" parameter in group primitive
@endcode
*/
@@ -1898,7 +1965,7 @@ Arguments: s(parameterName),s(parameterContent) ->
@param[in] parameterContent is the value of the parameter
@code
-()addProfileParameter("foo", "bar"); // équivalent à un parameter "foo:bar" dans la primitive du groupe
+()addProfileParameter("foo", "bar"); // equivalent to "foo:bar" parameter in group primitive
@endcode
*/
@@ -1927,7 +1994,7 @@ Arguments: s(parameterName),f(parameterContent) ->
@param[in] parameterContent is the value of the parameter
@code
-()addProfileParameter("foo", 0.5); // équivalent à un parameter "foo:0.5" dans la primitive du groupe
+()addProfileParameter("foo", 0.5); // equivalent to "foo:0.5" parameter in group primitive
@endcode
*/
@@ -4456,6 +4523,37 @@ void setSheet_s_(CStateInstance* entity, CScriptStack& stack)
}
}
+//----------------------------------------------------------------------------
+/** @page code
+
+@subsection setClientSheet_s_
+Change the client sheet of a creature
+
+Arguments: -> s(sheetName)
+
+@code
+()setClientSheet('ccdeb2');
+
+@endcode
+
+*/
+void setClientSheet_s_(CStateInstance* entity, CScriptStack& stack)
+{
+ string sheetname = stack.top();
+ stack.pop();
+
+ if (sheetname.find(".creature") == string::npos)
+ sheetname += ".creature";
+
+ FOREACH(itBot, CCont, entity->getGroup()->bots())
+ {
+ CBot* bot = *itBot;
+ if (bot)
+ {
+ bot->setClientSheet(sheetname);
+ }
+ }
+}
/****************************************************************************/
@@ -4581,6 +4679,62 @@ void setConditionSuccess_f_(CStateInstance* entity, CScriptStack& stack)
CAILogicDynamicIfHelper::setConditionSuccess(conditionState);
}
+inline
+static float randomAngle()
+{
+ uint32 const maxLimit = CAngle::PI*2;
+ float val = (float)CAIS::rand32(maxLimit);
+ return val;
+}
+
+//----------------------------------------------------------------------------
+/** @page code
+
+@subsection facing_f_
+
+The npc will face the given direction
+
+
+Arguments: f(direction)
+@param[in] direction is the new angle of the bot in radians
+
+@code
+()facing(3.14);
+@endcode
+
+*/
+
+// CStateInstance
+void facing_f_(CStateInstance* entity, CScriptStack& stack)
+{
+ float const theta = (float)stack.top(); stack.pop();
+ CGroup* group = entity->getGroup();
+
+ bool bRandomAngle = false;
+ if (theta > (NLMISC::Pi * 2.0) || theta < (-NLMISC::Pi * 2.0))
+ bRandomAngle = true;
+
+ if (group->isSpawned())
+ {
+ FOREACH(itBot, CCont, group->bots())
+ {
+ CBot* bot = *itBot;
+ if (bot)
+ {
+ if (bot->isSpawned())
+ {
+ CSpawnBot *spawnBot = bot->getSpawnObj();
+
+ if (bRandomAngle)
+ spawnBot->setTheta(randomAngle());
+ else
+ spawnBot->setTheta(theta);
+
+ }
+ }
+ }
+ }
+}
std::map nfGetGroupNativeFunctions()
{
@@ -4628,6 +4782,7 @@ std::map nfGetGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, clearAggroList__);
REGISTER_NATIVE_FUNC(functions, setMode_s_);
REGISTER_NATIVE_FUNC(functions, setAutoSpawn_f_);
+ REGISTER_NATIVE_FUNC(functions, setMaxHP_ff_);
REGISTER_NATIVE_FUNC(functions, setHPLevel_f_);
REGISTER_NATIVE_FUNC(functions, setHPScale_f_);
REGISTER_NATIVE_FUNC(functions, scaleHP_f_);
@@ -4651,10 +4806,11 @@ std::map nfGetGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, getEventParam_f_f);
REGISTER_NATIVE_FUNC(functions, getEventParam_f_s);
REGISTER_NATIVE_FUNC(functions, setSheet_s_);
+ REGISTER_NATIVE_FUNC(functions, setClientSheet_s_);
REGISTER_NATIVE_FUNC(functions, setHealer_f_);
REGISTER_NATIVE_FUNC(functions, setConditionSuccess_f_);
-
-
+ REGISTER_NATIVE_FUNC(functions, facing_f_);
+ REGISTER_NATIVE_FUNC(functions, setUrl_ss_);
// Boss functions (custom text)
REGISTER_NATIVE_FUNC(functions, phraseBegin__);
@@ -4699,10 +4855,7 @@ std::map nfGetGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, teleportPlayer_sffff_);
REGISTER_NATIVE_FUNC(functions, summonPlayer_fs_);
-
-
-
#undef REGISTER_NATIVE_FUNC
return functions;
diff --git a/code/ryzom/server/src/ai_service/nf_grp_npc.cpp b/code/ryzom/server/src/ai_service/nf_grp_npc.cpp
index d8ae543a5..2ea93b625 100644
--- a/code/ryzom/server/src/ai_service/nf_grp_npc.cpp
+++ b/code/ryzom/server/src/ai_service/nf_grp_npc.cpp
@@ -462,7 +462,7 @@ Arguments: f(Radius) ->
@param[in] Radius dispersion of wander activity
@code
-()startWander(100); // Gives a wander activity to the group with dispersion of 100
+()startMoving(100,-100,10); // Moves the group to 100,-100 with radius of 10
@endcode
*/
@@ -501,6 +501,56 @@ void startMoving_fff_(CStateInstance* entity, CScriptStack& stack)
return;
}
+//----------------------------------------------------------------------------
+/** @page code
+
+@subsection followPlayer_sf_
+Set activity to follow the given player
+
+Arguments: s(PlayerEid) f(Radius) ->
+@param[in] PlayerEid id of player to follow
+@param[in] Radius dispersion of wander activity
+
+@code
+()followPlayer("(0x0002015bb4:01:88:88)",10);
+@endcode
+
+*/
+// Spawned CGroupNpc not in a family behaviour
+void followPlayer_sf_(CStateInstance* entity, CScriptStack& stack)
+{
+ uint32 dispersionRadius = (uint32)(float&)stack.top(); stack.pop();
+ NLMISC::CEntityId playerId = NLMISC::CEntityId((std::string)stack.top());
+
+ IManagerParent* const managerParent = entity->getGroup()->getOwner()->getOwner();
+ CAIInstance* const aiInstance = dynamic_cast(managerParent);
+ if (!aiInstance)
+ return;
+
+ if (!entity) { nlwarning("followPlayer failed!"); return; }
+
+ CGroupNpc* group = dynamic_cast(entity->getGroup());
+ if (!group)
+ { nlwarning("followPlayer failed: no NPC group");
+ return;
+ }
+ CSpawnGroupNpc* spawnGroup = group->getSpawnObj();
+ if (!spawnGroup)
+ { nlwarning("followPlayer failed: no spawned group");
+ return;
+ }
+
+ if (playerId == CEntityId::Unknown)
+ {
+ nlwarning("followPlayer failed: unknown player");
+ DEBUG_STOP;
+ return;
+ }
+
+ spawnGroup->movingProfile().setAIProfile(new CGrpProfileFollowPlayer(spawnGroup, TheDataset.getDataSetRow(playerId), dispersionRadius));
+
+ return;
+}
//----------------------------------------------------------------------------
@@ -2179,14 +2229,11 @@ void facing_cscs_(CStateInstance* entity, CScriptStack& stack)
// bot1->setTheta(bot1->pos().angleTo(bot2->pos()));
}
-
//----------------------------------------------------------------------------
/** @page code
@subsection npcSay_css_
-A new entry of the npc contextual menu will propose to the targeter player to talk to the npc.
-
Make a npc say a text
There are 3 type of text
@@ -2201,9 +2248,9 @@ Arguments: c(group), s(botname), s(text), ->
@code
(@group)group_name.context();
-()emote(@group, "bob", "DSS_1601 RtEntryText_6") ;// Send To dss
-()emote(@group, "bob", "RAW Ca farte?"); // phrase direcly send to IOS as raw (for debug)
-()emote(@group, "bob", "answer_group_no_m"); //phrase id
+()npcSay(@group, "bob", "DSS_1601 RtEntryText_6") ;// Send To dss
+()npcSay(@group, "bob", "RAW Ca farte?"); // phrase direcly send to IOS as raw (for debug)
+()npcSay(@group, "bob", "answer_group_no_m"); //phrase id
@endcode
@@ -2214,6 +2261,34 @@ Arguments: c(group), s(botname), s(text), ->
#include "game_share/chat_group.h"
#include "game_share/send_chat.h"
+void execSayHelper(CSpawnBot *spawnBot, NLMISC::CSString text, CChatGroup::TGroupType mode = CChatGroup::say)
+{
+ if (spawnBot)
+ {
+ NLMISC::CSString prefix = text.left(4);
+ if (prefix=="DSS_")
+ {
+
+ NLMISC::CSString phrase = text.right(text.length() - 4);
+ NLMISC::CSString idStr = phrase.strtok(" ",false,false,false,false);
+ uint32 scenarioId = atoi(idStr.c_str());
+ forwardToDss(spawnBot->dataSetRow(), mode, phrase, scenarioId);
+ return;
+ }
+
+ if (prefix=="RAW ")
+ {
+ std::string phrase = text.right(text.length()-4);
+ ucstring ucstr = phrase;
+ npcChatToChannelSentence(spawnBot->dataSetRow(), mode, ucstr);
+ return;
+ }
+
+ //Classic phrase ID
+ npcChatToChannel(spawnBot->dataSetRow(), mode, text);
+ }
+}
+
void npcSay_css_(CStateInstance* entity, CScriptStack& stack)
{
string text = (string)stack.top(); stack.pop();
@@ -2224,29 +2299,58 @@ void npcSay_css_(CStateInstance* entity, CScriptStack& stack)
if (!spawnBot) { return; }
+ execSayHelper(spawnBot, text);
+}
- std::string prefix =NLMISC::CSString (text).left(4);
- if(prefix=="DSS_")
- {
-
- NLMISC::CSString phrase = NLMISC::CSString (text).right((uint)text.length()-4);
- NLMISC::CSString idStr = phrase.strtok(" ",false,false,false,false);
- uint32 scenarioId;
- NLMISC::fromString(idStr, scenarioId);
- forwardToDss(spawnBot->dataSetRow(), CChatGroup::say, phrase, scenarioId);
- return;
- }
-
- if (prefix=="RAW ")
+//----------------------------------------------------------------------------
+/** @page code
+
+@subsection npcSay_ss_
+
+Make a npc say a text
+
+Arguments: s(text), s(mode) ->
+@param[in] text is the text to say. prefix with ID: to use an id
+@param[in] mode is the mode to use (say, shout)
+
+@code
+()npcSay("Hello!","say"); // phrase direcly send to IOS as raw
+()npcSay("ID:answer_group_no_m","shout"); // phrase id
+@endcode
+
+*/
+
+void npcSay_ss_(CStateInstance* entity, CScriptStack& stack)
+{
+ std::string sMode = (std::string)stack.top(); stack.pop();
+ std::string text = (std::string)stack.top(); stack.pop();
+
+ CChatGroup::TGroupType mode = CChatGroup::say;
+ mode = CChatGroup::stringToGroupType(sMode);
+ CGroup* group = entity->getGroup();
+
+ if (group->isSpawned())
{
- NLMISC::CSString phrase = NLMISC::CSString (text).right((uint)text.length()-4);
- npcChatToChannelSentence(spawnBot->dataSetRow(),CChatGroup::say, phrase);
- return;
+ FOREACH(itBot, CCont, group->bots())
+ {
+ CBot* bot = *itBot;
+ if (bot)
+ {
+ if (bot->isSpawned())
+ {
+ CSpawnBot *spawnBot = bot->getSpawnObj();
+ std::string prefix = NLMISC::CSString(text).left(3);
+ if (NLMISC::nlstricmp(prefix.c_str(), "id:") == 0) {
+ text = NLMISC::CSString(text).right(text.length()-3);
+ execSayHelper(spawnBot, text, mode);
+ }
+ else {
+ execSayHelper(spawnBot, "RAW " + text, mode);
+ }
+ }
+ }
+ }
}
-
- //Classic phrase ID
- npcChatToChannel(spawnBot->dataSetRow(), CChatGroup::say, text);
- return;
}
@@ -2514,6 +2618,7 @@ void rename_s_(CStateInstance* entity, CScriptStack& stack)
msgout.serial(row);
msgout.serial(name);
sendMessageViaMirror("IOS", msgout);
+ bot->setCustomName(name);
}
}
}
@@ -2650,6 +2755,7 @@ std::map nfGetNpcGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, startMoving_fff_);
REGISTER_NATIVE_FUNC(functions, waitInZone_s_);
REGISTER_NATIVE_FUNC(functions, stopMoving__);
+ REGISTER_NATIVE_FUNC(functions, followPlayer_sf_);
REGISTER_NATIVE_FUNC(functions, wander__);
REGISTER_NATIVE_FUNC(functions, setAttackable_f_);
REGISTER_NATIVE_FUNC(functions, setPlayerAttackable_f_);
@@ -2687,6 +2793,7 @@ std::map nfGetNpcGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, rename_s_);
REGISTER_NATIVE_FUNC(functions, vpx_s_);
REGISTER_NATIVE_FUNC(functions, npcSay_css_);
+ REGISTER_NATIVE_FUNC(functions, npcSay_ss_);
REGISTER_NATIVE_FUNC(functions, dssMessage_fsss_);
REGISTER_NATIVE_FUNC(functions, despawnBotByAlias_s_);
REGISTER_NATIVE_FUNC(functions, giveReward_ssssc_);
diff --git a/code/ryzom/server/src/ai_service/nf_static.cpp b/code/ryzom/server/src/ai_service/nf_static.cpp
index fa1699b4b..4523d3e1d 100644
--- a/code/ryzom/server/src/ai_service/nf_static.cpp
+++ b/code/ryzom/server/src/ai_service/nf_static.cpp
@@ -1000,8 +1000,8 @@ void setSimplePhrase_ss_(CStateInstance* entity, CScriptStack& stack)
phraseContent2 += "]}";
ucstring ucPhraseContent;
-// ucPhraseContent.fromUtf8(phraseContent2); // utf-8 version
- ucPhraseContent = phraseContent2; // iso-8859-1 version
+ ucPhraseContent.fromUtf8(phraseContent2); // utf-8 version
+ //ucPhraseContent = phraseContent2; // iso-8859-1 version
NLNET::CMessage msgout("SET_PHRASE");
msgout.serial(phraseName);
@@ -1009,6 +1009,33 @@ void setSimplePhrase_ss_(CStateInstance* entity, CScriptStack& stack)
sendMessageViaMirror("IOS", msgout);
}
+void setSimplePhrase_sss_(CStateInstance* entity, CScriptStack& stack)
+{
+ std::string lang = (std::string)stack.top();
+ stack.pop();
+ std::string phraseContent = (std::string)stack.top();
+ stack.pop();
+ std::string phraseName = (std::string)stack.top();
+ stack.pop();
+
+ std::string phraseContent2;
+ phraseContent2 += phraseName;
+ phraseContent2 += "(){[";
+ phraseContent2 += phraseContent;
+ phraseContent2 += "]}";
+
+ ucstring ucPhraseContent;
+ ucPhraseContent.fromUtf8(phraseContent2); // utf-8 version
+ //ucPhraseContent = phraseContent2; // iso-8859-1 version
+
+ NLNET::CMessage msgout("SET_PHRASE_LANG");
+ msgout.serial(phraseName);
+ msgout.serial(ucPhraseContent);
+ msgout.serial(lang);
+ sendMessageViaMirror("IOS", msgout);
+}
+
+
//----------------------------------------------------------------------------
/** @page code
@@ -1330,6 +1357,7 @@ std::map nfGetStaticNativeFunctions()
REGISTER_NATIVE_FUNC(functions, getNamedEntityProp_ss_s);
REGISTER_NATIVE_FUNC(functions, destroyNamedEntity_s_);
REGISTER_NATIVE_FUNC(functions, setSimplePhrase_ss_);
+ REGISTER_NATIVE_FUNC(functions, setSimplePhrase_sss_);
REGISTER_NATIVE_FUNC(functions, dataGetVar_s_s);
REGISTER_NATIVE_FUNC(functions, dataGetVar_s_f);
REGISTER_NATIVE_FUNC(functions, dataSetVar_ss_);
diff --git a/code/ryzom/server/src/ai_service/npc_description_msg.cpp b/code/ryzom/server/src/ai_service/npc_description_msg.cpp
index 70989be8d..ebe7701a7 100644
--- a/code/ryzom/server/src/ai_service/npc_description_msg.cpp
+++ b/code/ryzom/server/src/ai_service/npc_description_msg.cpp
@@ -788,6 +788,13 @@ bool CNpcChatProfileImp::parseChatArgs(CAIInstance *aiInstance, const std::strin
return true;
}
+ // organization entry
+ if (NLMISC::nlstricmp(keyword, "organization") == 0)
+ {
+ NLMISC::fromString(tail, _Organization);
+ return true;
+ }
+
// if no match found throw an error
return false;
}
@@ -830,4 +837,5 @@ void TGenNpcDescMsgImp::setChat(const CNpcChatProfileImp& chatProfile)
_OptionalProperties = chatProfile.getOptionalProperties();
_Outpost = chatProfile.getOutpost();
+ _Organization = chatProfile.getOrganization();
}
diff --git a/code/ryzom/server/src/ai_service/npc_description_msg.h b/code/ryzom/server/src/ai_service/npc_description_msg.h
index e29bdfd13..14c94e9b1 100644
--- a/code/ryzom/server/src/ai_service/npc_description_msg.h
+++ b/code/ryzom/server/src/ai_service/npc_description_msg.h
@@ -36,7 +36,7 @@ public:
CNpcChatProfileImp(const CNpcChatProfileImp &other0,const CNpcChatProfileImp &other1);
// interface for setting up chat info
- void clear() { clearShopInfo(); clearMissions(); clearCellZones(); clearContextOption(); _OptionalProperties.clear(); }
+ void clear() { clearShopInfo(); clearMissions(); clearCellZones(); clearContextOption(); clearWeb(); _OptionalProperties.clear(); }
void clearShopInfo()
{
_ShopTypes.clear();
@@ -56,6 +56,11 @@ public:
}
void clearCellZones() { _CellZones.clear(); }
void clearMissions() { _Missions.clear(); }
+ void clearWeb()
+ {
+ _WebPage.clear();
+ _WebPageName.clear();
+ }
bool add(CAIInstance *aiInstance, const std::string &chatArgs) { return parseChatArgs(aiInstance, chatArgs); }
void addMission(uint32 mission) { _Missions.push_back(mission); }
void clearContextOption() { _ContextOptions.clear(); }
diff --git a/code/ryzom/server/src/ai_service/script_compiler.cpp b/code/ryzom/server/src/ai_service/script_compiler.cpp
index aabe5889c..03d0fe336 100644
--- a/code/ryzom/server/src/ai_service/script_compiler.cpp
+++ b/code/ryzom/server/src/ai_service/script_compiler.cpp
@@ -1083,25 +1083,33 @@ CSmartPtr CCompiler::compileCode (const std::vector=str.size())
+ size_t index = str.find("//",0);
+ if (index == string::npos)
+ code += str;
+ else {
+ // We have a potential comment. Now check if it is quoted or not
+ bool inQuote = false;
+ uint i = 0;
+ for (;;)
{
- firstIndex=string::npos;
- break;
- }
+ if ('"' == str[i])
+ inQuote = !inQuote;
- if (str.at(firstIndex)=='/')
- {
- code+=str.substr(0, firstIndex-1);
- break;
+ if ( !inQuote && ('/' == str[i]) )
+ {
+ ++i;
+ if ('/' == str[i])
+ break;
+
+ code += '/';
+ }
+ code += str[i];
+ ++i;
+ if (str.size() == i)
+ break;
}
- firstIndex=str.find_first_of("/",firstIndex);
}
- if (firstIndex==string::npos)
- code+=str;
+
code+="\n "; // additional ..
}
code+="}";
diff --git a/code/ryzom/server/src/ai_service/script_compiler_native_func.cpp b/code/ryzom/server/src/ai_service/script_compiler_native_func.cpp
index 17bc605c4..dc6b36861 100644
--- a/code/ryzom/server/src/ai_service/script_compiler_native_func.cpp
+++ b/code/ryzom/server/src/ai_service/script_compiler_native_func.cpp
@@ -221,10 +221,12 @@ arguments.
- @ref moveToZone_ss_
- @ref waitInZone_s_
- @ref stopMoving__
+- @ref followPlayer_sf_
- @ref wander__
- @ref downScaleHP_f_
- @ref upScaleHP_f_
- @ref scaleHP_f_
+- @ref setMaxHP_ff_
- @ref setHPLevel_f_
- @ref addHP_f_
- @ref aiAction_s_
diff --git a/code/ryzom/server/src/ai_service/visual_properties_interface.cpp b/code/ryzom/server/src/ai_service/visual_properties_interface.cpp
index e495319f4..20d79f038 100644
--- a/code/ryzom/server/src/ai_service/visual_properties_interface.cpp
+++ b/code/ryzom/server/src/ai_service/visual_properties_interface.cpp
@@ -69,7 +69,7 @@ void CVisualPropertiesInterface::release()
}
// set different visual properties for a bot.
-void CVisualPropertiesInterface::setName(const TDataSetRow& dataSetRow,std::string name)
+void CVisualPropertiesInterface::setName(const TDataSetRow& dataSetRow, ucstring name)
{
if (!IOSHasMirrorReady)
return;
@@ -77,8 +77,6 @@ void CVisualPropertiesInterface::setName(const TDataSetRow& dataSetRow,std::stri
NLNET::CMessage msgout("CHARACTER_NAME");
CEntityId eid=CMirrors::DataSet->getEntityId(dataSetRow);
msgout.serial (const_cast(dataSetRow));
- ucstring uname;
- uname.fromUtf8(name);
- msgout.serial (uname); // Daniel: TODO update all name dependencies to ucstring in your service.
+ msgout.serial (name);
sendMessageViaMirror("IOS",msgout);
}
diff --git a/code/ryzom/server/src/ai_service/visual_properties_interface.h b/code/ryzom/server/src/ai_service/visual_properties_interface.h
index 75d5c5a6d..d814e91da 100644
--- a/code/ryzom/server/src/ai_service/visual_properties_interface.h
+++ b/code/ryzom/server/src/ai_service/visual_properties_interface.h
@@ -39,7 +39,7 @@ public:
static void release();
// set different visual properties for an entity
- static void setName(const TDataSetRow& dataSetRow,std::string name);
+ static void setName(const TDataSetRow& dataSetRow, ucstring name);
// static void setMode(CAIEntityId id,MBEHAV::EMode mode);
// static void setBehaviour(CAIEntityId id,MBEHAV::EBehaviour behaviour);
diff --git a/code/ryzom/server/src/entities_game_service/admin.cpp b/code/ryzom/server/src/entities_game_service/admin.cpp
index 502128805..801b6dd22 100644
--- a/code/ryzom/server/src/entities_game_service/admin.cpp
+++ b/code/ryzom/server/src/entities_game_service/admin.cpp
@@ -15,7 +15,6 @@
// along with this program. If not, see .
-
//
// User Privilege set in the mysql database must be like that ":GM:" or "" or ":GM:ADMIN:" ....
//
@@ -52,8 +51,6 @@
#include "game_share/shard_names.h"
#include "server_share/log_command_gen.h"
#include "server_share/r2_vision.h"
-#include "server_share/log_item_gen.h"
-#include "server_share/log_character_gen.h"
#include "egs_sheets/egs_sheets.h"
#include "egs_sheets/egs_static_rolemaster_phrase.h"
@@ -75,6 +72,8 @@
#include "team_manager/team_manager.h"
#include "world_instances.h"
#include "egs_variables.h"
+#include "building_manager/building_manager.h"
+#include "building_manager/building_physical.h"
#include "player_manager/gm_tp_pending_command.h"
#include "guild_manager/guild_manager.h"
#include "guild_manager/guild.h"
@@ -104,6 +103,10 @@
#include "modules/shard_unifier_client.h"
#include "modules/client_command_forwarder.h"
#include "modules/guild_unifier.h"
+#include "server_share/log_command_gen.h"
+#include "server_share/log_item_gen.h"
+#include "server_share/log_character_gen.h"
+#include "server_share/used_continent.h"
//
// Externs
@@ -162,6 +165,9 @@ AdminCommandsInit[] =
{
// player character accessible commands
"teamInvite", true,
+ "setLeague", true,
+ "leagueInvite", true,
+ "leagueKick", true,
"guildInvite", true,
"roomInvite", true,
"roomKick", true,
@@ -174,6 +180,8 @@ AdminCommandsInit[] =
"validateRespawnPoint", true,
"summonPet", true,
"connectUserChannel", true,
+ "updateTarget", true,
+ "resetName", true,
// Web commands managment
"webExecCommand", true,
@@ -216,6 +224,7 @@ AdminCommandsInit[] =
"allowSummonPet", true,
"setPetAnimalSatiety", true,
"getPetAnimalSatiety", true,
+ "setPetAnimalName", true,
"taskPass", true,
"setFamePlayer", true,
"guildMOTD", true,
@@ -230,7 +239,7 @@ AdminCommandsInit[] =
"renamePlayerForEvent", true,
"renamePlayer", true,
"renameGuild", true,
- "setGuildDescription", true,
+ "setGuildDescription", false,
"setGuildIcon", false,
"killMob", true,
"changeVar", true,
@@ -295,12 +304,15 @@ AdminCommandsInit[] =
"Position", true,
"Priv", true,
"PriviledgePVP", true,
+ "FullPVP", true,
"FBT", true,
"RyzomDate", false,
"RyzomTime", false,
"addGuildXp", false,
"setGuildChargePoint", false,
-
+ "characterInventoryDump", true,
+ "deleteInventoryItem", true,
+ "setSimplePhrase", false,
// PUT HERE THE VARIABLE / COMMAND THAT ARE TEMPORARY
// remove when message of the day interface is ready
@@ -311,6 +323,8 @@ AdminCommandsInit[] =
"EntitiesNoActionFailure", false,
"EntitiesNoCastBreak", false,
"EntitiesNoResist", false,
+ "lockItem", true,
+ "setTeamLeader", true,
// aggroable state
"Aggro", true,
@@ -373,6 +387,15 @@ AdminCommandsInit[] =
"eventSetBotURL", true,
"eventSetBotURLName", true,
"eventSpawnToxic", true,
+ "eventNpcSay", true,
+ "eventSetBotFacing", true,
+ "eventGiveControl", true,
+ "eventLeaveControl", true,
+
+ "setOrganization", true,
+ "setOrganizationStatus", true,
+
+ "addGuildBuilding", true,
};
static vector AdminCommands;
@@ -387,6 +410,22 @@ static void loadCommandsPrivileges(const string & fileName, bool init);
void cbRemoteClientCallback (uint32 rid, const std::string &cmd, const std::string &entityNames);
//
+// get AI instance and remove it form the group name
+bool getAIInstanceFromGroupName(string& groupName, uint32& instanceNumber)
+{
+ if (groupName.find("@") != string::npos)
+ {
+ string continent = groupName.substr(0, groupName.find('@'));
+ uint32 nr = CUsedContinent::instance().getInstanceForContinent(continent);
+ if (nr == ~0)
+ {
+ return false;
+ }
+ instanceNumber = nr;
+ groupName = groupName.substr(groupName.find('@'), groupName.size());
+ }
+ return true;
+}
CAdminCommand * findAdminCommand(const string & name)
{
@@ -432,6 +471,7 @@ void initCommandsPrivileges(const std::string & fileName)
{
H_AUTO(initCommandsPrivileges);
+ initSalt();
loadCommandsPrivileges(fileName, true);
}
@@ -553,43 +593,46 @@ void initPositionFlags(const std::string & fileName)
PositionFlagsFileName = fileName;
}
-string getSalt()
+struct SaltFileLoadCallback: public IBackupFileReceiveCallback
{
- if (Salt.empty())
+ std::string FileName;
+
+ SaltFileLoadCallback(const std::string& fileName): FileName(fileName) {}
+
+ virtual void callback(const CFileDescription& fileDescription, NLMISC::IStream& dataStream)
{
- string fileNameAndPath = Bsi.getLocalPath() + "salt.txt";
- if (CFile::fileExists(fileNameAndPath))
- {
- FILE* f;
- string fileName;
+ // if the file isn't found then just give up
+ DROP_IF(fileDescription.FileName.empty()," file not found: "<< FileName, return);
+
+ dataStream.serial(Salt);
+ nlinfo("Salt loaded : %s", Salt.c_str());
+ }
+};
- // open the file
- f=fopen(fileNameAndPath.c_str(),"rb");
- if (f == NULL)
- {
- nlinfo("Failed to open file for reading: %s", fileName.c_str() );
- return false;
- }
+void initSalt()
+{
+ H_AUTO(initSalt);
- CSString input;
- // read the file content into a buffer
- uint32 size=NLMISC::CFile::getFileSize(f);
- input.resize(size);
- uint32 readSize= (uint32)fread(&input[0],1,size,f);
- fclose(f);
- Salt = input;
- return Salt;
- }
- return "";
+ string fileNameAndPath = Bsi.getLocalPath() + "salt_egs.txt";
+ if (CFile::fileExists(fileNameAndPath))
+ {
+ nlinfo("Salt loading : salt_egs.txt");
+ Bsi.syncLoadFile("salt_egs.txt", new SaltFileLoadCallback("salt_egs.txt"));
}
+}
+
+const string &getSalt()
+{
+ if (Salt.empty()) Salt = "abcdefghijklmnopqrstuvwxyz0123456";
+
return Salt;
}
void saveSalt(const string salt)
{
Salt = salt;
- CBackupMsgSaveFile msg("salt.txt", CBackupMsgSaveFile::SaveFile, Bsi );
- msg.DataMsg.serialBuffer((uint8*)Salt.c_str(), (uint)Salt.size());
+ CBackupMsgSaveFile msg("salt_egs.txt", CBackupMsgSaveFile::SaveFile, Bsi );
+ msg.DataMsg.serial(Salt);
Bsi.sendFile(msg);
}
@@ -1087,11 +1130,16 @@ ENTITY_VARIABLE(Position, "Position of a player (in meter) ,[,
explode (value, string(","), res);
if (res.size() >= 2)
{
- x = atoi (res[0].c_str()) * 1000;
- y = atoi (res[1].c_str()) * 1000;
+ fromString(res[0], x);
+ x *= 1000;
+ fromString(res[1], y);
+ y *= 1000;
}
if (res.size() >= 3)
- z = atoi (res[2].c_str()) * 1000;
+ {
+ fromString(res[2], z);
+ z *= 1000;
+ }
}
else
{
@@ -2222,13 +2270,19 @@ NLMISC_COMMAND(addPetAnimal,"Add pet animal to character"," ")
{
CGameItemPtr item = c->createItemInInventoryFreeSlot(INVENTORIES::bag, 1, 1, ticket);
if( item != 0 )
- c->addCharacterAnimal( ticket, 0, item );
- return true;
- }
- else
- {
- log.displayNL(" command, unknown pet ticket '%s'", args[1].c_str() );
+ {
+ if ( ! c->addCharacterAnimal( ticket, 0, item ))
+ {
+ item.deleteItem();
+ return false;
+ }
+ return true;
+ }
+
+ log.displayNL(" command, cannot create item in bag '%s'", args[1].c_str() );
}
+
+ log.displayNL(" command, unknown pet ticket '%s'", args[1].c_str() );
}
return false;
@@ -2271,7 +2325,9 @@ NLMISC_COMMAND(setPetAnimalSatiety,"Set the satiety of pet animal (petIndex in 0
if ( addressee )
{
CHECK_RIGHT( addressee, c );
- CCharacter::sendDynamicSystemMessage( addressee->getId(), result );
+ SM_STATIC_PARAMS_1(params, STRING_MANAGER::literal);
+ params[0].Literal = trim(result);
+ CCharacter::sendDynamicSystemMessage(addressee->getId(), "LITERAL", params);
}
else
result += " nameForAnswer not found";
@@ -2283,7 +2339,7 @@ NLMISC_COMMAND(setPetAnimalSatiety,"Set the satiety of pet animal (petIndex in 0
return true;
}
-NLMISC_COMMAND(getPetAnimalSatiety,"Set the satiety of pet animal (petIndex in 0..3)"," []")
+NLMISC_COMMAND(getPetAnimalSatiety,"Get the satiety of pet animal (petIndex in 0..3)"," []")
{
if (args.size () < 2) return false;
GET_CHARACTER
@@ -2307,7 +2363,9 @@ NLMISC_COMMAND(getPetAnimalSatiety,"Set the satiety of pet animal (petIndex in 0
if ( addressee )
{
CHECK_RIGHT( addressee, c );
- CCharacter::sendDynamicSystemMessage( addressee->getId(), result );
+ SM_STATIC_PARAMS_1(params, STRING_MANAGER::literal);
+ params[0].Literal = trim(result);
+ CCharacter::sendDynamicSystemMessage(addressee->getId(), "LITERAL", params);
}
else
result += " nameForAnswer not found";
@@ -2318,6 +2376,22 @@ NLMISC_COMMAND(getPetAnimalSatiety,"Set the satiety of pet animal (petIndex in 0
return true;
}
+NLMISC_COMMAND(setPetAnimalName, "Set the name of a pet animal (petIndex in 0..3)"," ")
+{
+ if (args.size () < 3) return false;
+ GET_CHARACTER
+
+ if ( c )
+ {
+ uint petIndex;
+ fromString(args[1], petIndex);
+ ucstring customName = args[2];
+ c->setAnimalName(petIndex, customName);
+ }
+
+ return true;
+}
+
NLMISC_COMMAND (addSkillPoints, "add skill points of given type (Fight = 0, Magic = 1,Craft = 2, Harvest = 3)", " ")
{
if (args.size () < 3) return false;
@@ -2330,7 +2404,8 @@ NLMISC_COMMAND (addSkillPoints, "add skill points of given type (Fight = 0, Magi
return false;
}
- uint32 nbSP = atoi (args[2].c_str());
+ uint32 nbSP;
+ fromString(args[2], nbSP);
c->addSP( nbSP, type );
@@ -3723,7 +3798,7 @@ NLMISC_COMMAND( failMission, "force mission failure", "" )
//----------------------------------------------------------------------------
NLMISC_COMMAND( progressMission, "force mission progression", "[repeat]")
{
- if ( args.size() != 2 || args.size() != 3 )
+ if ( args.size() != 2 && args.size() != 3 )
return false;
GET_CHARACTER;
@@ -3964,15 +4039,15 @@ NLMISC_COMMAND (targetInfos, "give infos on the target", "")
//----------------------------------------------------------------------------
NLMISC_COMMAND (infos, "give info on character (GodMode, Invisible...)", "")
{
- CSString str("GM STATUS: ");
+ CSString str("INFO: ");
GET_CHARACTER
if( c->invulnerableMode() )
{
- str << "INVULNERABLE MODE ";
+ str << "INVULNERABLE_MODE ";
}
if( c->godMode() )
{
- str << "GOD MODE ";
+ str << "GOD_MODE ";
}
else
{
@@ -3988,31 +4063,29 @@ NLMISC_COMMAND (infos, "give info on character (GodMode, Invisible...)", "")
{
if (IsRingShard)
{
- str << "INVISIBLE(" <getWhoSeesMe()) << ")";
+ str << "INVISIBLE(" <getWhoSeesMe()) << ") ";
}
else
{
- str << "INVISIBLE";
+ str << "INVISIBLE ";
}
}
if ( IsRingShard && R2_VISION::extractVisionLevel(c->getWhoSeesMe())!=R2_VISION::VISIBLE )
{
- str << "SEEINVIS(" << R2_VISION::extractVisionLevel(c->getWhoSeesMe()) << ")";
+ str << "SEEINVIS(" << R2_VISION::extractVisionLevel(c->getWhoSeesMe()) << ") ";
}
if (c->getAggroableSave())
{
- str << " AGGROABLE";
+ str << "AGGROABLE ";
}
else
{
- str << " NOT_AGGROABLE";
+ str << "NOT_AGGROABLE ";
}
- SM_STATIC_PARAMS_1(params,STRING_MANAGER::literal);
- params[0].Literal = str;
- CCharacter::sendDynamicSystemMessage( eid,"LITERAL", params );
+ log.displayNL(str.c_str());
return true;
}
@@ -4156,7 +4229,7 @@ ENTITY_VARIABLE(Invisible, "Invisibility of a player")
}
//----------------------------------------------------------------------------
-NLMISC_COMMAND(broadcast,"[repeat= or during=