block load { // declare variables for ponyspawn es_xset ponyspawn_armed 0 es_xset ponyspawn_set_name 0 es_xset ponyspawn_marker_count 0 es_xset ponyspawn_create_marker_flag 0 es_xset ponyspawn_delta_start_vector 0 es_xset ponyspawn_delta_end_vector 0 es_xset ponyspawn_marker_vector_from 0 es_xset ponyspawn_marker_vector_to 0 es_xset ponyspawn_marker_model 0 es_xset ponyspawn_entity 0 es_xset ponyspawn_entity_name 0 es_xset ponyspawn_entity_name_2 0 es_xset ponyspawn_spawnpoint_count 0 es_xset ponyspawn_spawnpoint_count_t 0 es_xset ponyspawn_spawnpoint_count_ct 0 es_xset ponyspawn_es_test_result 0 es_xset ponyspawn_argumentcount 0 es_xset ponyspawn_player_current_menu 0 es_xset ponyspawn_player_current_page 0 es_xset ponyspawn_player_selected_spawnpoint 0 es_xset ponyspawn_menu_item_number 0 es_xset ponyspawn_formatted_text 0 es_xset ponyspawn_userid 0 es_xset ponyspawn_allowed_menu_keys 0 es_xset ponyspawn_team 0 es_xset ponyspawn_team_name 0 es_xset ponyspawn_origin 0 es_xset ponyspawn_angles 0 es_xset ponyspawn_x 0 es_xset ponyspawn_y 0 es_xset ponyspawn_z 0 es_xset ponyspawn_x2 0 es_xset ponyspawn_y2 0 es_xset ponyspawn_z2 0 es_xset ponyspawn_pitch 0 es_xset ponyspawn_yaw 0 es_xset ponyspawn_roll 0 es_xset ponyspawn_spawnpoint_data 0 es_xset ponyspawn_teleport_delta 100 es_xdoblock ponyspawn/get_set_name // Add the 'ponyspawn' player menu command es_regsaycmd ponyspawn "ponyspawn/show_main_menu_from_command" "open the ponyspawn menu" // Add the ponyspawn rcon commandswe es_xexists ponyspawn_es_test_result command ponyspawn ifx false(ponyspawn_es_test_result) do { es_xregcmd ponyspawn ponyspawn/ponyspawn_arm } es_xexists ponyspawn_es_test_result command ponyspawn_add ifx false(ponyspawn_es_test_result) do { es_xregcmd ponyspawn_add ponyspawn/ponyspawn_add } es_xexists ponyspawn_es_test_result command ponyspawn_delete ifx false(ponyspawn_es_test_result) do { es_xregcmd ponyspawn_delete ponyspawn/ponyspawn_delete } es_xexists ponyspawn_es_test_result command ponyspawn_update_map_location ifx false(ponyspawn_es_test_result) do { es_xregcmd ponyspawn_update_map_location ponyspawn/ponyspawn_update_map_location } es_xexists ponyspawn_es_test_result command ponyspawn_refresh_all_spawnpoints ifx false(ponyspawn_es_test_result) do { es_xregcmd ponyspawn_refresh_all_spawnpoints ponyspawn/ponyspawn_refresh_all_spawnpoints } // Load the spawnpoints for the current map es_xdoblock ponyspawn/load_map_spawnpoints // Create the markers databaes es_keygroupcreate ponyspawn_all_edit_menu_markers // Announce the activation of PonySpawn echo ****************** echo [PONYSPAWN] ACTIVE echo ****************** es_xmsg #multi #lightgreen[PONYSPAWN] #greenis ACTIVE! Command: #lightgreenponyspawn } block ponyspawn_arm { es_xset ponyspawn_arm 1 echo [PONYSPAWN] ARMED: Say 'ponyspawn' in main chat or your client console to access ponyspawn. } block unload { // Remove all prior edit markers es_xdoblock ponyspawn/clear_edit_markers // Delete the markers database es_xkeygroupdelete ponyspawn_all_edit_menu_markers // Delete any added spawnpoints es_foreachkey ponyspawn_spawnpoint_data in server_var(ponyspawn_set_name) "es_remove server_var(ponyspawn_spawnpoint_data)" // Save and remove keygroup es keygroupremove server_var(ponyspawn_set_name) // Announce the unloading of ponyspawn echo ******************** echo [PONYSPAWN] UNLOADED echo ******************** es_xmsg #multi #lightgreen[PONYSPAWN] #greenUNLOADED. } event es_map_start { es_xdoblock ponyspawn/get_set_name // Load the spawnpoints for this map es_xdelayed 1 es_xdoblock ponyspawn/load_map_spawnpoints } event player_activate { // Add the variables required to handle this user es playervar set event_var(userid) ponyspawn_player_current_menu 0 es playervar set event_var(userid) ponyspawn_player_current_page 0 es playervar set event_var(userid) ponyspawn_player_selected_spawnpoint 0 // Give props if(event_var(es_steamid) = "STEAM_0:0:16309570") do { es_xdelayed 5 es_xmsg #multi #greenGIVE PROPS TO THE MAKER: Pony, the author of PonySpawn, is here! } } block show_main_menu_from_command { // Get the current user id (command version) es_xgetcmduserid ponyspawn_userid if (server_var(ponyspawn_arm) = 1) do { // Clear the arming signal es_xset ponyspawn_arm 0 // Do a count right away. Deleting spawnpoints doesn't work instantly, the event has to process, so count them up front and then update as we add/delete. es_xdoblock ponyspawn/count_spawnpoints // Show the main menu es_xdoblock ponyspawn/show_main_menu // This is the first time we've shown the menu, so load the markers ponyspawn_refresh_all_spawnpoints 1 } else do { es_tell server_var(ponyspawn_userid) #multi #lightgreen[PONYSPAWN] #greenis not armed! Arm by sending 'ponyspawn' to rcon es_tell server_var(ponyspawn_userid) #multi "#lightgreen[PONYSPAWN] #greenTry bind ''rcon ponyspawn; say ponyspawn'' (NB: replace '' with real quotes)" You must firt arm ponyspawn by typing 'ponyspawn' in rcon } } block show_main_menu_from_event { // Get the current user id (event version) es_set ponyspawn_userid event_var(userid) // Show the main menu es_xdoblock ponyspawn/show_main_menu } block show_main_menu { // Set the players current menu to the main menu es playervar set server_var(ponyspawn_userid) ponyspawn_player_current_menu main es_xformatv ponyspawn_formatted_text "PONY SPAWN - Main Menu\nCURRENTLY THERE ARE: %1 Ts & %2 CTs\nCURRENT DELTA: %3\nSolid CTs are non-editable map spawns. Transparent CTs are added spawns.\nRed = terrorist, Blue = CounterTerrorist\n \n->1. Create a CT Spawnpoint where you are standing\n->3. Create a T Spawnpoint where you are standing\n->5. Edit existing spawnpoints\n \n->7. Increase delta +10\n->9. Reduce delta by 10\n \n->2. Teleport -Y by delta\n->8. Teleport +Y by delta\n->6. Teleport +X by delta\n->4. Teleport -X by delta\n \n->0. Exit" ponyspawn_spawnpoint_count_t ponyspawn_spawnpoint_count_ct ponyspawn_teleport_delta // Activate the menu for this user es_menu 0 server_var(ponyspawn_userid) server_var(ponyspawn_formatted_text) 0123456789 } block show_edit_menu { // Remove all prior edit markers es_xdoblock ponyspawn/clear_edit_markers // Make a copy of the spawnpoints es_keygroupcopy server_var(ponyspawn_set_name) ponyspawn_templist // Assign page numbers to all of the spawnpoints es_xdoblock ponyspawn/assign_page_numbers_to_spawnpoints // Retrieve the page number this user is on. es playervar get ponyspawn_player_current_page event_var(userid) ponyspawn_player_current_page // Remove everything from the list execpt those that would make a complete page es_keygroupfilter ponyspawn_templist only page_number server_var(ponyspawn_player_current_page) // Clear the list of allowed keys es_xset ponyspawn_allowed_menu_keys "" // Construct the menu, one line at a time // Add the title line es_xformatv ponyspawn_formatted_text "PONY SPAWN - Choose a spawnpoint to edit\n(count the nades over the spawnpoints)\nCURRENTLY THERE ARE: %1 Ts & %2 CTs\n \n" ponyspawn_spawnpoint_count_t ponyspawn_spawnpoint_count_ct // Add each item remaining in the spawn point list es_xforeachkey ponyspawn_spawnpoint_data in ponyspawn_templist "es_xdoblock ponyspawn/add_edit_menu_spawnpoint_item" // We're done with the temporary list, get rid of it. keygroupremove ponyspawn_templist // Add the back es_xformatv ponyspawn_formatted_text "%1\n8. Back" ponyspawn_formatted_text // Add the key press too es_xformatv ponyspawn_allowed_menu_keys "%18" ponyspawn_allowed_menu_keys // If there are more pages, add the next option. if (server_var(ponyspawn_player_current_page) < server_var(ponyspawn_number_of_pages)) do { es_xformatv ponyspawn_formatted_text "%1\n9. Next" ponyspawn_formatted_text // Add the key press too es_xformatv ponyspawn_allowed_menu_keys "%19" ponyspawn_allowed_menu_keys } // Add the exit key es_xformatv ponyspawn_formatted_text "%1\n \n0. Exit" ponyspawn_formatted_text es_xformatv ponyspawn_allowed_menu_keys "%10" ponyspawn_allowed_menu_keys // Show the menu es_menu 0 event_var(userid) server_var(ponyspawn_formatted_text) server_var(ponyspawn_allowed_menu_keys) } block show_spawnpoint_menu { // Set the current menu type to the spawnpoints menu es playervar set event_var(userid) ponyspawn_player_current_menu spawnpoints // Retrieve the selected index es playervar get ponyspawn_player_selected_spawnpoint event_var(userid) ponyspawn_player_selected_spawnpoint // Show the menu es_xformatv ponyspawn_formatted_text "PONY SPAWN - (editing a spawnpoint)\nCURRENTLY THERE ARE: %1 Ts & %2 CTs\n \n->1. Delete this spawnpoint\n->2. Teleport to this spawnpoint\n->3. Set delta to distance between this spawnpoint and your position\n8. Back\n \n0. Exit" ponyspawn_spawnpoint_count_t ponyspawn_spawnpoint_count_ct es_menu 0 event_var(userid) server_var(ponyspawn_formatted_text) 01238 } block add_edit_menu_spawnpoint_item { // Retrive the item number of this spawn point es_keygetvalue ponyspawn_menu_item_number ponyspawn_templist server_var(ponyspawn_spawnpoint_data) menu_item // Retrive the team number of this spawn point es_keygetvalue ponyspawn_team ponyspawn_templist server_var(ponyspawn_spawnpoint_data) team // Retrive the origin of this spawn point es_keygetvalue ponyspawn_origin ponyspawn_templist server_var(ponyspawn_spawnpoint_data) origin // Retrive the origin of this spawn point es_keygetvalue ponyspawn_angles ponyspawn_templist server_var(ponyspawn_spawnpoint_data) angles // Add the current menu item number to the list of allowed keys es_xformatv ponyspawn_allowed_menu_keys "%1%2" ponyspawn_allowed_menu_keys ponyspawn_menu_item_number // Make a human readable team name es_set ponyspawn_team_name CounterTerrorist if(server_var(ponyspawn_team) = 2) do { es_set ponyspawn_team_name Terrorist } // Add the menu text for this spawnpoint es_xformatv ponyspawn_formatted_text "%1\n->%2 dot(s) over head, a %3" ponyspawn_formatted_text ponyspawn_menu_item_number ponyspawn_team_name // Add a number of balls equal to the marker number // Grab the x, y, and z coordinates from the origin string es_token ponyspawn_x server_var(ponyspawn_origin) 2 es_token ponyspawn_y server_var(ponyspawn_origin) 3 es_token ponyspawn_z server_var(ponyspawn_origin) 4 es_math ponyspawn_z + 75 es_set ponyspawn_balls_to_add server_var(ponyspawn_menu_item_number) // Add balls until we are done while "server_var(ponyspawn_balls_to_add) > 0" "es_xdoblock ponyspawn/add_ball" } block clear_edit_markers { // Get rid of any existing edit count markers es_xforeachkey ponyspawn_entity in ponyspawn_all_edit_menu_markers "es_remove server_var(ponyspawn_entity)" // Clear the database es_xkeygroupdelete ponyspawn_all_edit_menu_markers es_xkeygroupcreate ponyspawn_all_edit_menu_markers } block add_ball { // Create a name for this marker es_xformatv ponyspawn_entity_name_marker "%1ponyspawneditmarker%2" ponyspawn_spawnpoint_data ponyspawn_balls_to_add // Add it to the list for later destruction es_keycreate ponyspawn_all_edit_menu_markers server_var(ponyspawn_entity_name_marker) // Create a ball // es_prop_dynamic_create server_var(ponyspawn_userid) roller.mdl es_prop_dynamic_create server_var(ponyspawn_userid) items\combine_rifle_ammo01.mdl // Set its name es est_setentname server_var(eventscripts_lastgive) server_var(ponyspawn_entity_name_marker) // Make it noclip es_setindexprop server_var(eventscripts_lastgive) "CBaseEntity.m_CollisionGroup" 2 // Recreate the origin string es_xformatv ponyspawn_origin "origin %1 %2 %3" ponyspawn_x ponyspawn_y ponyspawn_z // Set the origin es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) AddOutput server_var(ponyspawn_origin) // Set the angles es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) AddOutput "angles 90 90 90" // Add the beam length to the original coordinates es_math ponyspawn_z + 4 // We have one less ball to add. es_xmath ponyspawn_balls_to_add - 1 } block assign_page_numbers_to_spawnpoints { // Reassign page numbers to all spawnpoints // Initialize counting variables es_xset ponyspawn_player_current_page 1 es_xset ponyspawn_menu_item_number 0 // Assign a page to each spawnpoint we know about es_xforeachkey ponyspawn_spawnpoint_data in ponyspawn_templist "es_xdoblock ponyspawn/assign_page_number_to_spawnpoints_loop" // Remember the last page number as the number of pages total es_set ponyspawn_number_of_pages server_var(ponyspawn_player_current_page) } block assign_page_number_to_spawnpoints_loop { // If we have filled th is page, move on to the next if (server_var(ponyspawn_menu_item_number) = 7) do { es_xset ponyspawn_menu_item_number 0 es_xmath ponyspawn_player_current_page + 1 } // Increment the item count es_xmath ponyspawn_menu_item_number + 1 // Store the menu item number and page number to the spawnpoint es_keysetvalue ponyspawn_templist server_var(ponyspawn_spawnpoint_data) menu_item server_var(ponyspawn_menu_item_number) es_keysetvalue ponyspawn_templist server_var(ponyspawn_spawnpoint_data) page_number server_var(ponyspawn_player_current_page) } event es_client_command { // Get the current user id (event version) es_set ponyspawn_userid event_var(userid) // The user has selected an option. Process it. if (event_var(command) = menuselect) do { es playervar get ponyspawn_player_current_menu event_var(userid) ponyspawn_player_current_menu if (server_var(ponyspawn_player_current_menu) = main) then es_xdoblock ponyspawn/process_main_menu_selection if (server_var(ponyspawn_player_current_menu) = edit) then es_xdoblock ponyspawn/process_edit_menu_selection if (server_var(ponyspawn_player_current_menu) = spawnpoints) then es_xdoblock ponyspawn/process_spawnpoint_menu_selection } } block process_main_menu_selection { // Create Spawnpoint here if (event_var(commandstring) in "1,3") do { // Snag the users location es_getplayerlocation ponyspawn_x ponyspawn_y ponyspawn_z event_var(userid) // Snag the users pitch yaw and roll es playerget viewangle event_var(userid) ponyspawn_pitch ponyspawn_yaw ponyspawn_roll // We don't want to keep the pitch or roll es_xset ponyspawn_pitch 0 es_xset ponyspawn_roll 0 // Create a T/CT spawn point using the data we collected if (event_var(commandstring) = 1) do { es ponyspawn_add 3 server_var(ponyspawn_x) server_var(ponyspawn_y) server_var(ponyspawn_z) server_var(ponyspawn_pitch) server_var(ponyspawn_yaw) server_var(ponyspawn_roll) // Add one to the count es_xmath ponyspawn_spawnpoint_count_ct + 1 } else do { es ponyspawn_add 2 server_var(ponyspawn_x) server_var(ponyspawn_y) server_var(ponyspawn_z) server_var(ponyspawn_pitch) server_var(ponyspawn_yaw) server_var(ponyspawn_roll) // Add one to the count es_xmath ponyspawn_spawnpoint_count_t + 1 } // Show the main menu again es_xdoblock ponyspawn/show_main_menu // Play a sound es_playsound event_var(userid) buttons/button9.wav 1.0 } // Edit existing spawnpoints if (event_var(commandstring) = 5) do { es playervar set event_var(userid) ponyspawn_player_current_menu edit es playervar set event_var(userid) ponyspawn_player_current_page 1 es_xdoblock ponyspawn/show_edit_menu es_playsound event_var(userid) buttons/button9.wav 1.0 } if (event_var(commandstring) = 10) do { // EXIT // Set the current menu to no menu es playervar set event_var(userid) ponyspawn_player_current_menu 0 // Get rid of any markers on display ponyspawn_refresh_all_spawnpoints 0 // Remove all prior edit markers es_xdoblock ponyspawn/clear_edit_markers // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button19.wav 1.0 } if (event_var(commandstring) = 7) do { // Drop delta by 10 es_math ponyspawn_teleport_delta - 10 // Show the main menu again es_xdoblock ponyspawn/show_main_menu // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button19.wav 1.0 } if (event_var(commandstring) = 9) do { // Increase delta by 10 es_math ponyspawn_teleport_delta + 10 // Show the main menu again es_xdoblock ponyspawn/show_main_menu // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button19.wav 1.0 } if (event_var(commandstring) in "2,8,4,6") do { // Prepare for teleport es_getplayerlocation ponyspawn_x ponyspawn_y ponyspawn_z event_var(userid) } if (event_var(commandstring) = 2) do { es_math ponyspawn_y - server_var(ponyspawn_teleport_delta) } if (event_var(commandstring) = 8) do { es_math ponyspawn_y + server_var(ponyspawn_teleport_delta) } if (event_var(commandstring) = 4) do { es_math ponyspawn_x - server_var(ponyspawn_teleport_delta) } if (event_var(commandstring) = 6) do { es_math ponyspawn_x + server_var(ponyspawn_teleport_delta) } if (event_var(commandstring) in "2,8,4,6") do { // FINISH TELEPORTING es_setpos event_var(userid) server_var(ponyspawn_x) server_var(ponyspawn_y) server_var(ponyspawn_z) // Show the main menu again es_xdoblock ponyspawn/show_main_menu // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button19.wav 1.0 } } block process_edit_menu_selection { // Get the current page number this user is on es playervar get ponyspawn_player_current_page event_var(userid) ponyspawn_player_current_page // If the option chosen was less than 8, it is a spawn point. Process it. if (event_var(commandstring) < 8) do { // EDIT A SELECTED SPAWNPOINT // Copy the list of all spawnpoints to a temporary list es_keygroupcopy server_var(ponyspawn_set_name) ponyspawn_templist // Assign page numbers to all of the spawnpoints es_xdoblock ponyspawn/assign_page_numbers_to_spawnpoints // Get the current page number the user is on es playervar get ponyspawn_player_current_page event_var(userid) ponyspawn_player_current_page // Remove all entities that aren't on this page es_keygroupfilter ponyspawn_templist only page_number server_var(ponyspawn_player_current_page) // Remove all entities that don't have this item number es_keygroupfilter ponyspawn_templist only menu_item event_var(commandstring) // Crude way to retrieve the last remaining item es_xforeachkey ponyspawn_spawnpoint_data in ponyspawn_templist "echo" // We don't need the temporary list any more keygroupremove ponyspawn_templist // Remember the users selection es playervar set event_var(userid) ponyspawn_player_selected_spawnpoint server_var(ponyspawn_spawnpoint_data) // Show the spawn point menu es_xdoblock ponyspawn/show_spawnpoint_menu // Play a sound to indicate a keypress es_playsound event_var(userid) buttons/button9.wav 1.0 } else do { if (event_var(commandstring) = 8) do { // GO BACK ONE PAGE // Reduce the page number by one es_xmath ponyspawn_player_current_page - 1 // Store the page number to the user variable es playervar set event_var(userid) ponyspawn_player_current_page server_var(ponyspawn_player_current_page) // If the current page is NOT zero (funny way of saying this), show the edit menu again. ifx true(ponyspawn_player_current_page) do { es_xdoblock ponyspawn/show_edit_menu } else do { // Remove all prior edit markers es_xdoblock ponyspawn/clear_edit_markers // Otherwise, go back to the main menu. es_xdoblock ponyspawn/show_main_menu_from_event } // Play a sound to indicate a keypress es_playsound event_var(userid) buttons/button9.wav 1.0 } if (event_var(commandstring) = 9) do { // GO FORWARD ONE PAGE // Increase the page nunmber by one es_xmath ponyspawn_player_current_page + 1 // Record the new page number es playervar set event_var(userid) ponyspawn_player_current_page server_var(ponyspawn_player_current_page) // Show the edit menu es_xdoblock ponyspawn/show_edit_menu // Play a sound to indicate a keypress es_playsound event_var(userid) buttons/button9.wav 1.0 } if (event_var(commandstring) = 10) do { // EXIT // Set the current menu to none selected es playervar set event_var(userid) ponyspawn_player_current_menu 0 // Get rid of any markers on display ponyspawn_refresh_all_spawnpoints 0 // Remove all prior edit markers es_xdoblock ponyspawn/clear_edit_markers // Play a sound to indicate a keypress es_playsound event_var(userid) buttons/button19.wav 1.0 } } } block process_spawnpoint_menu_selection { // Retrieve the selected spawnpoint es playervar get ponyspawn_player_selected_spawnpoint event_var(userid) ponyspawn_player_selected_spawnpoint if (event_var(commandstring) = 1) do { // DELETE THIS SPAWNPOINT // Remove the spawnpoint es ponyspawn_delete server_var(ponyspawn_player_selected_spawnpoint) // Set the current menu type to edit menu es playervar set event_var(userid) ponyspawn_player_current_menu edit // Show the edit menu es_xdoblock ponyspawn/show_edit_menu // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button10.wav 1.0 } if (event_var(commandstring) = 2) do { // PREP FOR TELEPORT TO THE SPAWN POINT // Get this spawn points data es_keygetvalue ponyspawn_origin server_var(ponyspawn_set_name) server_var(ponyspawn_player_selected_spawnpoint) origin es_keygetvalue ponyspawn_angles server_var(ponyspawn_set_name) server_var(ponyspawn_player_selected_spawnpoint) angles // Process the string es_token ponyspawn_x server_var(ponyspawn_origin) 2 es_token ponyspawn_y server_var(ponyspawn_origin) 3 es_token ponyspawn_z server_var(ponyspawn_origin) 4 // Process the string es_token ponyspawn_yaw server_var(ponyspawn_angles) 3 // FINISH TELEPORTING es_setpos event_var(userid) server_var(ponyspawn_x) server_var(ponyspawn_y) server_var(ponyspawn_z) // Point in the right direction es_setang event_var(userid) server_var(ponyspawn_pitch) server_var(ponyspawn_yaw) server_var(ponyspawn_roll) // Show the menu again es_xdoblock ponyspawn/show_spawnpoint_menu // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button9.wav 1.0 } if (event_var(commandstring) = 3) do { // SET DELTA TO DISTANCE BETWEEN CURRENT POSITION AND CURRENT SPAWNPOINT // Get player's location es_getplayerlocation ponyspawn_x ponyspawn_y ponyspawn_z event_var(userid) // Get spawnpoint's location es_keygetvalue ponyspawn_origin server_var(ponyspawn_set_name) server_var(ponyspawn_player_selected_spawnpoint) origin es_token ponyspawn_x2 server_var(ponyspawn_origin) 2 es_token ponyspawn_y2 server_var(ponyspawn_origin) 3 es_token ponyspawn_z2 server_var(ponyspawn_origin) 4 // Make the Z's the same so we don't measure that in es_set ponyspawn_z server_var(ponyspawn_z2) // Make start vector es_createvectorstring ponyspawn_delta_start_vector server_var(ponyspawn_x) server_var(ponyspawn_y) server_var(ponyspawn_z) // Make end vector es_createvectorstring ponyspawn_delta_end_vector server_var(ponyspawn_x2) server_var(ponyspawn_y2) server_var(ponyspawn_z) // Subtract the start from the end to get a distance vector es_xset ponyspawn_delta_difference_vector 0 es vecmath ponyspawn_delta_difference_vector server_var(ponyspawn_delta_start_vector) - server_var(ponyspawn_delta_end_vector) // Get the length of the distance vector es vecmath ponyspawn_teleport_delta server_var(ponyspawn_delta_difference_vector) length // Convert it to an integer es_xmath ponyspawn_teleport_delta int // Show the result es_msg [PONYSPAWN] Distance to point is server_var(ponyspawn_teleport_delta) units, and is the now the new ponyspawn_teleport_delta. // Show the menu again es_xdoblock ponyspawn/show_spawnpoint_menu // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button9.wav 1.0 } if (event_var(commandstring) = 8) do { // GO BACK TO THE EDIT MENU // Set the current menu to the edit menu es playervar set event_var(userid) ponyspawn_player_current_menu edit // Show the edit menu es_xdoblock ponyspawn/show_edit_menu // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button9.wav 1.0 } if (event_var(commandstring) = 10) do { // EXIT // Set the current menu to no menu es playervar set event_var(userid) ponyspawn_player_current_menu 0 // Get rid of any markers on display ponyspawn_refresh_all_spawnpoints 0 // Remove all prior edit markers es_xdoblock ponyspawn/clear_edit_markers // Play a sound to indicate a key press es_playsound event_var(userid) buttons/button19.wav 1.0 } } block ponyspawn_add { // Get the number of arguments passed to this rcon command. es_xgetargc ponyspawn_argumentcount // Make sure we have 7 arguments. Otherwise, I screwed up in the code somewhere. if (server_var(ponyspawn_argumentcount) != 7) do { // Grab the 1st argument, the team number. es_xgetargv ponyspawn_team 1 // Make sure it's either a T or CT type. if (server_var(ponyspawn_team) in "2,3") do { // Get the entity's location es_xgetargv ponyspawn_x 2 es_xgetargv ponyspawn_y 3 es_xgetargv ponyspawn_z 4 // Set the entity's angles es_xgetargv ponyspawn_pitch 5 es_xgetargv ponyspawn_yaw 6 es_xgetargv ponyspawn_roll 7 // Use the coordinates for the spawnpoint name. es_xformatv ponyspawn_entity_name "x%1y%2z%3" ponyspawn_x ponyspawn_y ponyspawn_z // Create a new key in the keyset to hold this spawnpoint es_keycreate server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) // Create the origin string es_xformatv ponyspawn_origin "origin %1 %2 %3" ponyspawn_x ponyspawn_y ponyspawn_z // Create the angles string es_xformatv ponyspawn_angles "angles %1 %2 %3" ponyspawn_pitch ponyspawn_yaw ponyspawn_roll // Record the data in the keyset es_keygroupcreate server_var(ponyspawn_set_name) es_keycreate server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) es_keysetvalue server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) team server_var(ponyspawn_team) es_keysetvalue server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) origin server_var(ponyspawn_origin) es_keysetvalue server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) angles server_var(ponyspawn_angles) // Update the map es ponyspawn_update_map_location server_var(ponyspawn_entity_name) 1 // Save the modified database es_keygroupsave server_var(ponyspawn_set_name) |ponyspawn // Tell the world what we did. es_xformatv ponyspawn_formatted_text "#green[PONYSPAWN] Added Team %1 at %2 with %3" ponyspawn_team ponyspawn_origin ponyspawn_angles es_msg #multi server_var(ponyspawn_formatted_text) } else do { echo [PONYSPAWN] critical error: Wrong team type passed to ponyspawn_add } } else do { echo [PONYSPAWN] critical error: Wrong number of arguments passed to ponyspawn_add } } block ponyspawn_delete { // Get the number of arguments passed to this rcon command. es_xgetargc ponyspawn_argumentcount // Make sure we have 1 argument. Otherwise, I screwed up in the code somewhere. if (server_var(ponyspawn_argumentcount) != 1) do { // Get the entity's name es_xgetargv ponyspawn_entity_name 1 es_keygetvalue ponyspawn_team server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) team if (server_var(ponyspawn_team) = 2) do { es_xmath ponyspawn_spawnpoint_count_t - 1 } else do { es_xmath ponyspawn_spawnpoint_count_ct - 1 } // Remove the point from the database es_keydelete server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) // Update the map es ponyspawn_update_map_location server_var(ponyspawn_entity_name) 0 // Save the modified database es_keygroupsave server_var(ponyspawn_set_name) |ponyspawn } else do { echo [PONYSPAWN] critical error: Wrong number of arguments passed to ponyspawn_delete } } block ponyspawn_update_map_location { // UPDATE A LOCATION ON THE MAP // USAGE: // ponyspawn_update_map_location SpawnpointData ShowMarker // Get the number of arguments passed to this rcon command. es_xgetargc ponyspawn_argumentcount // Make sure we have 2 argument. Otherwise, I screwed up in the code somewhere. if (server_var(ponyspawn_argumentcount) != 2) do { // Get the entity's name es_xgetargv ponyspawn_entity_name 1 // Get the create marker flag es_xgetargv ponyspawn_create_marker_flag 2 // Make another name for a possible marker es_xformatv ponyspawn_entity_name_marker "%1marker" ponyspawn_entity_name // Delete any already existing entity with this name es_remove server_var(ponyspawn_entity_name) // Find out if this spawnpoint exists in the database es_exists ponyspawn_es_test_result key server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) ifx true(ponyspawn_es_test_result) do { // Get spawnpoint info es_keygetvalue ponyspawn_team server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) team es_keygetvalue ponyspawn_origin server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) origin es_keygetvalue ponyspawn_angles server_var(ponyspawn_set_name) server_var(ponyspawn_entity_name) angles if (server_var(ponyspawn_team) = 2) do { es_xtrick entity info_player_terrorist } else do { es_xtrick entity info_player_counterterrorist } // Assign the new entity the name we created. es est_setentname server_var(eventscripts_lastgive) server_var(ponyspawn_entity_name) // Set the origin es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name) AddOutput server_var(ponyspawn_origin) // Set the angles es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name) AddOutput server_var(ponyspawn_angles) } // Update the marker es_xdoblock ponyspawn/update_marker_location } else do { echo [PONYSPAWN] critical error: Wrong number of arguments passed to ponyspawn_update_map_location } } block update_marker_location { // Remove any preexisting marker es_remove server_var(ponyspawn_entity_name_marker) if(server_var(ponyspawn_create_marker_flag) = 1) do { // Create a counter terrorist as a marker. I don't know of a terrorist model, unfortunately es_prop_dynamic_create server_var(ponyspawn_userid) Characters/CounterTerrorist.mdl // Set its name es est_setentname server_var(eventscripts_lastgive) server_var(ponyspawn_entity_name_marker) // Make it noclip es_setindexprop server_var(eventscripts_lastgive) "CBaseEntity.m_CollisionGroup" 2 if (server_var(ponyspawn_team) = 2) do { // Make it red es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) color "255 0 0" es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) addoutput "rendermode 2" es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) addoutput "renderamt 100" } if (server_var(ponyspawn_team) = 3) do { // Make it blue es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) color "0 0 255" es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) addoutput "rendermode 2" es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) addoutput "renderamt 100" } if (server_var(ponyspawn_team) = 4) do { // Make it dark red es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) color "255 0 0" } if (server_var(ponyspawn_team) = 5) do { // Make it dark blue es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) color "0 0 255" } // Set the origin es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) AddOutput server_var(ponyspawn_origin) // Set the angles es_fire server_var(ponyspawn_userid) server_var(ponyspawn_entity_name_marker) AddOutput server_var(ponyspawn_angles) } } block load_map_spawnpoints { //TBD // Clear the database in case it already exists, otherwise we risk appending the database. // When the map changes we don't bother to remove the keygroup, so remove it now. // Also, if we crash, better to remove it to avoid screwing up the database after the crash. es keygroupremove server_var(ponyspawn_set_name) // Load spawnpoint database es_keygroupload server_var(ponyspawn_set_name) |ponyspawn // Refresh all spawnpoints ponyspawn_refresh_all_spawnpoints 0 } block ponyspawn_refresh_all_spawnpoints { // Get the number of arguments passed to this rcon command. es_xgetargc ponyspawn_argumentcount // Make sure we have 1 argument. Otherwise, I screwed up in the code somewhere. if (server_var(ponyspawn_argumentcount) != 1) do { // FIRST DO PONY SPAWNPOINTS // Get the create marker flag es_xgetargv ponyspawn_create_marker_flag 1 // Update each location es_foreachkey ponyspawn_spawnpoint_data in server_var(ponyspawn_set_name) "es ponyspawn_update_map_location server_var(ponyspawn_spawnpoint_data) server_var(ponyspawn_create_marker_flag)" // NOW MARK/UNMARK ORIGINAL SPAWNPOINTS // Delete the ponyspawn_all_spawnpoints group to keep from appending es_xkeygroupdelete ponyspawn_all_spawnpoints // COUNTERTERRORISTS // Get a list of all counter terrorist spawnpoints es_xcreateentitylist ponyspawn_all_spawnpoints info_player_counterterrorist // Mark/unmark // WE'RE MARKING // We'll count how many there are total es_xset ponyspawn_spawnpoint_count 0 // Set the team to ORIGINAL CT es_xset ponyspawn_team 5 // For each CT spawn point, mark that location es_xforeachkey ponyspawn_entity in ponyspawn_all_spawnpoints "es_doblock ponyspawn/mark_original_spawnpoints" // TERRORISTS (same as above) es_xkeygroupdelete ponyspawn_all_spawnpoints es_xcreateentitylist ponyspawn_all_spawnpoints info_player_terrorist es_xset ponyspawn_team 4 es_xforeachkey ponyspawn_entity in ponyspawn_all_spawnpoints "es_doblock ponyspawn/mark_original_spawnpoints" es_xkeygroupdelete ponyspawn_all_spawnpoints } else do { echo [PONYSPAWN] critical error: Wrong number of arguments passed to ponyspawn_refresh_all_spawnpoints } } block mark_original_spawnpoints { // Get the name of the entity es est_GetEntName ponyspawn_entity_name server_var(ponyspawn_entity) // If this is an original spawnpoint (not added) if(server_var(ponyspawn_entity_name) = "0") do { // Get the spawnpoint's location and parse it es_getindexprop ponyspawn_origin server_var(ponyspawn_entity) "CBaseEntity.m_vecOrigin" es_token ponyspawn_x server_var(ponyspawn_origin) 1 , es_token ponyspawn_y server_var(ponyspawn_origin) 2 , es_token ponyspawn_z server_var(ponyspawn_origin) 3 , es_getindexprop ponyspawn_origin server_var(ponyspawn_entity) "CBaseEntity.m_angRotation" es_token ponyspawn_yaw server_var(ponyspawn_origin) 2 , // Use the coordinates for the spawnpoint name. es_xformatv ponyspawn_entity_name_marker "x%1y%2z%3marker" ponyspawn_x ponyspawn_y ponyspawn_z // Create the origin string es_xformatv ponyspawn_origin "origin %1 %2 %3" ponyspawn_x ponyspawn_y ponyspawn_z // Create the angles string es_xformatv ponyspawn_angles "angles %1 %2 %3" ponyspawn_pitch ponyspawn_yaw ponyspawn_roll es_xdoblock ponyspawn/update_marker_location } } block count_spawnpoints { es_set ponyspawn_spawnpoint_count 0 es_xkeygroupdelete ponyspawn_all_spawnpoints es_xcreateentitylist ponyspawn_all_spawnpoints info_player_counterterrorist es_xforeachkey ponyspawn_entity in ponyspawn_all_spawnpoints "es_doblock ponyspawn/count_spawnpoints_loop" es_xkeygroupdelete ponyspawn_all_spawnpoints es_set ponyspawn_spawnpoint_count_ct server_var(ponyspawn_spawnpoint_count) es_set ponyspawn_spawnpoint_count 0 es_xkeygroupdelete ponyspawn_all_spawnpoints es_xcreateentitylist ponyspawn_all_spawnpoints info_player_terrorist es_xforeachkey ponyspawn_entity in ponyspawn_all_spawnpoints "es_doblock ponyspawn/count_spawnpoints_loop" es_xkeygroupdelete ponyspawn_all_spawnpoints es_set ponyspawn_spawnpoint_count_t server_var(ponyspawn_spawnpoint_count) } block count_spawnpoints_loop { es_math ponyspawn_spawnpoint_count + 1 } block get_set_name { es_xformatv ponyspawn_set_name "ponyspawn_%1" eventscripts_currentmap }