Finished teleporter admin commands; zr_teleport, zr_tele_saveloc, zr_tele_loc, zr_tele_abort. Teleport admin menu made, but not coded.
This commit is contained in:
parent
69799e1c0d
commit
ef8a7e04b7
|
@ -1,3 +1,7 @@
|
|||
2008.12.26 - 2.5.1.17
|
||||
* Finished teleporter admin commands; zr_teleport, zr_tele_saveloc, zr_tele_loc, zr_tele_abort.
|
||||
* Teleport admin menu made, but not coded.
|
||||
|
||||
2008.12.20 - 2.5.1.16
|
||||
* Improved the teleporter. Startup delay, cooldown, separate team delays and limits. Admin commands made, but not coded yet.
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#undef REQUIRE_PLUGIN
|
||||
#include <market>
|
||||
|
||||
#define VERSION "2.5.1.16"
|
||||
#define VERSION "2.5.1.17"
|
||||
|
||||
#include "zr/zombiereloaded"
|
||||
#include "zr/global"
|
||||
|
|
|
@ -10,9 +10,12 @@ CreateCommands()
|
|||
{
|
||||
RegAdminCmd("zr_infect", Command_Infect, ADMFLAG_GENERIC, "Infects the specified player");
|
||||
RegAdminCmd("zr_spawn", Command_Respawn, ADMFLAG_GENERIC, "Respawns the specified player following auto-respawning rules");
|
||||
|
||||
RegAdminCmd("zr_teleport", Command_Teleport, ADMFLAG_GENERIC, "Teleports one or more players to spawn. Usage: zr_teleport <target>");
|
||||
RegAdminCmd("zr_tele_saveloc", Command_TeleSaveLocation, ADMFLAG_GENERIC, "Saves your or a players location to a buffer. Usage: zr_tele_saveloc [#userid|name]");
|
||||
RegAdminCmd("zr_tele_loc", Command_TeleportToLocation, ADMFLAG_GENERIC, "Teleports you or a player to the saved location. Usage: zr_tele_loc [#userid|name]");
|
||||
RegAdminCmd("zr_tele_abort", Command_TeleportAbort, ADMFLAG_GENERIC, "Aborts a teleportation or cooldown on a client. Usage: zr_tele_abort <target>");
|
||||
|
||||
RegAdminCmd("zr_restrict", Command_Restrict, ADMFLAG_GENERIC, "Restrict a specified weapon");
|
||||
RegAdminCmd("zr_unrestrict", Command_UnRestrict, ADMFLAG_GENERIC, "Unrestrict a specified weapon");
|
||||
|
||||
|
@ -21,6 +24,7 @@ CreateCommands()
|
|||
|
||||
RegAdminCmd("zr_admin", Command_AdminMenu, ADMFLAG_GENERIC, "Displays the admin menu for Zombie: Reloaded.");
|
||||
RegAdminCmd("zr_knockback_m", Command_KnockbackMMenu, ADMFLAG_GENERIC, "Displays the knockback multiplier menu.");
|
||||
RegAdminCmd("zr_teleadmin", Command_TeleMenu, ADMFLAG_GENERIC, "Displays the teleport admin menu for Zombie: Reloaded.");
|
||||
}
|
||||
|
||||
public Action:Command_Infect(client, argc)
|
||||
|
@ -252,4 +256,18 @@ public Action:Command_KnockbackMMenu(client, argc)
|
|||
if (client > 0) PrintToConsole(client, "You cannot use this menu. Client: %d", client);
|
||||
}
|
||||
return Plugin_Handled;
|
||||
}
|
||||
}
|
||||
|
||||
public Action:Command_TeleMenu(client, argc)
|
||||
{
|
||||
if (IsClientPlayer(client))
|
||||
{
|
||||
ZRTeleMenu(client);
|
||||
}
|
||||
else
|
||||
{
|
||||
PrintToServer("This menu cannot be used in the console. Client: %d", client);
|
||||
if (client > 0) PrintToConsole(client, "You cannot use this menu. Client: %d", client);
|
||||
}
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* ====================
|
||||
* Zombie:Reloaded
|
||||
* File: teleport.inc
|
||||
* Authors: Richard Helgeby / Cpt.Moore
|
||||
* Authors: Richard Helgeby, Cpt.Moore
|
||||
* ====================
|
||||
*/
|
||||
|
||||
|
@ -138,31 +138,175 @@ public Action:Event_TeleportCooldown(Handle:Timer, any:client)
|
|||
|
||||
public Action:Command_Teleport(client, argc)
|
||||
{
|
||||
// Check (on all specified clients) if a teleport/cooldown is in progress.
|
||||
// If so, kill those timers.
|
||||
|
||||
// No cooldown when using this command.
|
||||
new String:arg1[MAX_TARGET_LENGTH];
|
||||
new String:target_name[MAX_TARGET_LENGTH];
|
||||
new bool:tn_is_ml;
|
||||
|
||||
if (argc >= 1)
|
||||
{
|
||||
GetCmdArg(1, arg1, sizeof(arg1));
|
||||
new target_list[MAXPLAYERS];
|
||||
new target_count;
|
||||
|
||||
if ((target_count = ProcessTargetString(
|
||||
arg1,
|
||||
client,
|
||||
target_list,
|
||||
MAXPLAYERS,
|
||||
COMMAND_FILTER_ALIVE,
|
||||
target_name,
|
||||
sizeof(target_name),
|
||||
tn_is_ml)) <= 0)
|
||||
{
|
||||
ReplyToTargetError(client, target_count);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
for (new i = 0; i < target_count; i++)
|
||||
{
|
||||
AbortTeleport(target_list[i]);
|
||||
TeleportClient(target_list[i], true, true);
|
||||
LogAction(client, target_list[i], "\"%L\" teleported \"%L\" to spawn", client, target_list[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AbortTeleport(client);
|
||||
TeleportClient(client, true, true);
|
||||
|
||||
GetClientName(client, target_name, sizeof(target_name));
|
||||
LogAction(client, client, "[ZR] Player %s teleported %s to spawn.", target_name, target_name);
|
||||
}
|
||||
|
||||
if (tn_is_ml)
|
||||
{
|
||||
ShowActivity2(client, "[ZR] ", "%t teleported to spawn.", target_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowActivity2(client, "[ZR] ", "%s teleported to spawn.", target_name);
|
||||
}
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public Action:Command_TeleSaveLocation(client, argc)
|
||||
{
|
||||
new String:target_name[MAX_TARGET_LENGTH];
|
||||
new String:target_client;
|
||||
|
||||
if (argc >= 1)
|
||||
{
|
||||
GetCmdArg(1, target_name, sizeof(target_name));
|
||||
target_client = FindTarget(client, target_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
target_client = client;
|
||||
}
|
||||
|
||||
if (target_client > 0 && target_client <= MAXPLAYERS)
|
||||
{
|
||||
GetClientAbsOrigin(target_client, bufferLoc);
|
||||
bufferLocSaved = true;
|
||||
GetClientName(target_client, target_name, sizeof(target_name));
|
||||
ReplyToCommand(client, "Saved location to %s (%d, %d, %d).", target_name, bufferLoc[0], bufferLoc[1], bufferLoc[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
ReplyToCommand(client, "Unable to target %s", target_name);
|
||||
}
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public Action:Command_TeleportToLocation(client, argc)
|
||||
{
|
||||
new String:target_name[MAX_TARGET_LENGTH];
|
||||
new target_client;
|
||||
new Float:empty_vector[3] = {0.0, 0.0, 0.0};
|
||||
|
||||
// Don't teleport if a location isn't saved yet.
|
||||
// To do: Find or make a function to check if a vector array is a null vector.
|
||||
/*if (bufferLoc[] != NULL_VECTOR)
|
||||
if (bufferLocSaved)
|
||||
{
|
||||
return Plugin_Handled;
|
||||
if (argc >= 1)
|
||||
{
|
||||
GetCmdArg(1, target_name, sizeof(target_name));
|
||||
target_client = FindTarget(client, target_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
target_client = client;
|
||||
}
|
||||
if (target_client > 0 && target_client <= MAXPLAYERS)
|
||||
{
|
||||
AbortTeleport(target_client);
|
||||
TeleportEntity(target_client, bufferLoc, NULL_VECTOR, empty_vector);
|
||||
ZR_PrintToChat(client, "!ztele successful");
|
||||
if (target_client != client) ZR_PrintToChat(target_client, "!ztele successful");
|
||||
}
|
||||
else
|
||||
{
|
||||
ReplyToCommand(client, "Unable to target %s", target_name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ZR_PrintToChat(client, "!ztele location not set");
|
||||
return Plugin_Handled;
|
||||
}*/
|
||||
ReplyToCommand(client, "Location not set.");
|
||||
}
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
public Action:Command_TeleportAbort(client, argc)
|
||||
{
|
||||
new String:arg1[MAX_TARGET_LENGTH];
|
||||
new String:target_name[MAX_TARGET_LENGTH];
|
||||
new bool:tn_is_ml;
|
||||
|
||||
if (argc >= 1)
|
||||
{
|
||||
GetCmdArg(1, arg1, sizeof(arg1));
|
||||
new target_list[MAXPLAYERS];
|
||||
new target_count;
|
||||
|
||||
if ((target_count = ProcessTargetString(
|
||||
arg1,
|
||||
client,
|
||||
target_list,
|
||||
MAXPLAYERS,
|
||||
COMMAND_FILTER_ALIVE,
|
||||
target_name,
|
||||
sizeof(target_name),
|
||||
tn_is_ml)) <= 0)
|
||||
{
|
||||
ReplyToTargetError(client, target_count);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
for (new i = 0; i < target_count; i++)
|
||||
{
|
||||
AbortTeleport(target_list[i]);
|
||||
LogAction(client, target_list[i], "\"%L\" aborted teleport on \"%L\".", client, target_list[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AbortTeleport(client);
|
||||
GetClientName(client, target_name, sizeof(target_name));
|
||||
LogAction(client, client, "[ZR] Player %s teleported %s to spawn.", target_name);
|
||||
}
|
||||
|
||||
if (tn_is_ml)
|
||||
{
|
||||
ShowActivity2(client, "[ZR] ", "Aborted teleport and cooldown on %t.", target_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowActivity2(client, "[ZR] ", "Aborted teleport and cooldown on %s.", target_name);
|
||||
}
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
ZTeleClientCheck(client)
|
||||
|
@ -174,6 +318,13 @@ ZTeleClientCheck(client)
|
|||
return;
|
||||
}
|
||||
|
||||
new team = GetClientTeam(client);
|
||||
if (team != CS_TEAM_T && team != CS_TEAM_CT)
|
||||
{
|
||||
ZR_PrintToChat(client, "Must be alive");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ztele_online)
|
||||
{
|
||||
ZR_PrintToChat(client, "!ztele offline");
|
||||
|
@ -249,11 +400,15 @@ ZTeleClientCheck(client)
|
|||
TeleportClient(client);
|
||||
}
|
||||
|
||||
TeleportClient(client, bool:no_delay = false)
|
||||
/*
|
||||
* Note: free_tele only works if no_delay is true.
|
||||
*/
|
||||
TeleportClient(client, bool:no_delay = false, bool:free_tele = false)
|
||||
{
|
||||
new teleports_left;
|
||||
new bool:teleports_unlimited = false;
|
||||
|
||||
new Float:empty_vector[3] = {0.0, 0.0, 0.0};
|
||||
|
||||
if (IsPlayerHuman(client))
|
||||
{
|
||||
new human_delay = GetConVarInt(gCvars[CVAR_ZTELE_HUMAN_DELAY]);
|
||||
|
@ -302,10 +457,12 @@ TeleportClient(client, bool:no_delay = false)
|
|||
if (no_delay)
|
||||
{
|
||||
ztele_countdown[client] = -1;
|
||||
ztele_count[client]++;
|
||||
TeleportEntity(client, spawnLoc[client], NULL_VECTOR, NULL_VECTOR);
|
||||
if (!free_tele) ztele_count[client]++;
|
||||
|
||||
TeleportEntity(client, spawnLoc[client], NULL_VECTOR, empty_vector);
|
||||
|
||||
ZR_PrintToChat(client, "!ztele successful");
|
||||
if (!teleports_unlimited)
|
||||
if (!teleports_unlimited && !free_tele)
|
||||
{
|
||||
ZR_PrintToChat(client, "!ztele amount", teleports_left);
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ new protCount[MAXPLAYERS+1];
|
|||
new Float:spawnLoc[MAXPLAYERS + 1][3];
|
||||
new Float:bufferLoc[3];
|
||||
new bool:ztele_spawned[MAXPLAYERS + 1] = {false, ...};
|
||||
new bool:bufferLocSaved = false;
|
||||
new ztele_countdown[MAXPLAYERS + 1] = {-1, ...};
|
||||
new ztele_count[MAXPLAYERS + 1];
|
||||
new bool:ztele_online = false;
|
||||
|
|
|
@ -20,15 +20,16 @@ ZRAdminMenu(client)
|
|||
decl String:znvgs[] = "Change night vision settings";
|
||||
decl String:zinfect[] = "Infect a player";
|
||||
decl String:zspawn[] = "Spawn all players";
|
||||
decl String:ztele[] = "Teleporter commands";
|
||||
decl String:zrestrict[] = "Restrict a weapon";
|
||||
decl String:zunrestrict[] = "Unrestrict a weapon";
|
||||
|
||||
|
||||
AddMenuItem(zr_admin_menu, "zknockbackm", zknockbackm);
|
||||
AddMenuItem(zr_admin_menu, "zknockback", zknockback);
|
||||
AddMenuItem(zr_admin_menu, "znvgs", znvgs);
|
||||
AddMenuItem(zr_admin_menu, "zinfect", zinfect);
|
||||
AddMenuItem(zr_admin_menu, "zspawn", zspawn);
|
||||
AddMenuItem(zr_admin_menu, "ztele", ztele);
|
||||
AddMenuItem(zr_admin_menu, "zrestrict", zrestrict, ITEMDRAW_DISABLED);
|
||||
AddMenuItem(zr_admin_menu, "zunrestrict", zunrestrict, ITEMDRAW_DISABLED);
|
||||
|
||||
|
@ -63,9 +64,13 @@ public ZRAdminMenuHandle(Handle:zr_admin_menu, MenuAction:action, client, slot)
|
|||
}
|
||||
case 5:
|
||||
{
|
||||
// restrict
|
||||
ZRTeleMenu(client);
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
// restrict
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
// unrestrict
|
||||
}
|
||||
|
@ -363,6 +368,62 @@ ZRSpawnAll(client)
|
|||
ZRAdminMenu(client);
|
||||
}
|
||||
|
||||
ZRTeleMenu(client)
|
||||
{
|
||||
new Handle:zr_tele_menu = CreateMenu(ZRTeleHandle);
|
||||
|
||||
decl String:ztele_player[] = "Teleport players";
|
||||
decl String:ztele_abort[] = "Abort teleport on players";
|
||||
decl String:ztele_save[] = "Save player location";
|
||||
decl String:ztele_teleloc[] = "Teleport player to saved location";
|
||||
|
||||
SetMenuTitle(zr_tele_menu, "Teleport menu");
|
||||
AddMenuItem(zr_tele_menu, "ztele_player", ztele_player);
|
||||
AddMenuItem(zr_tele_menu, "ztele_abort", ztele_abort);
|
||||
AddMenuItem(zr_tele_menu, "ztele_save", ztele_save);
|
||||
AddMenuItem(zr_tele_menu, "ztele_teleloc", ztele_teleloc);
|
||||
|
||||
SetMenuExitBackButton(zr_tele_menu, true);
|
||||
DisplayMenu(zr_tele_menu, client, MENU_TIME_FOREVER);
|
||||
}
|
||||
|
||||
public ZRTeleHandle(Handle:zr_tele_menu , MenuAction:action, client, slot)
|
||||
{
|
||||
if (action == MenuAction_Select)
|
||||
{
|
||||
switch(slot)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
// Teleport player.
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
// Abort teleport.
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
// Save location.
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
// Teleport to location.
|
||||
}
|
||||
}
|
||||
}
|
||||
if (action == MenuAction_Cancel)
|
||||
{
|
||||
if (slot == MenuCancel_ExitBack)
|
||||
{
|
||||
ZRAdminMenu(client);
|
||||
}
|
||||
}
|
||||
if (action == MenuAction_End)
|
||||
{
|
||||
CloseHandle(zr_tele_menu);
|
||||
}
|
||||
}
|
||||
|
||||
AddToKnockbackMultiplier(Float:value)
|
||||
{
|
||||
new Float:current_val = GetConVarFloat(gCvars[CVAR_ZOMBIE_KNOCKBACK]);
|
||||
|
|
2
todo.txt
2
todo.txt
|
@ -10,6 +10,8 @@ Section content is listed in order of importance. Some of these can be ideas too
|
|||
class name to read the value:
|
||||
zr_class_enabled <classname>[ <0/1>]
|
||||
|
||||
* Zombies that dies from anything else than a human attack (+ grenades) will respawn as zombies.
|
||||
|
||||
* Make a admin command to read and write settings to a spesific class,
|
||||
using key/value. Integrate it with the zr_admin menu.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user