Added test plugin for dumping weapon information.
This commit is contained in:
parent
07084ced5a
commit
58a1d6dcdf
271
src/testsuite/zr/weaponinfo.sp
Normal file
271
src/testsuite/zr/weaponinfo.sp
Normal file
|
@ -0,0 +1,271 @@
|
||||||
|
/*
|
||||||
|
* ============================================================================
|
||||||
|
*
|
||||||
|
* Zombie:Reloaded
|
||||||
|
*
|
||||||
|
* File: weaponinfo.sp
|
||||||
|
* Type: Test plugin
|
||||||
|
* Description: Dumps weapon information.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2012 Greyscale, Richard Helgeby
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma semicolon 1
|
||||||
|
#include <sourcemod>
|
||||||
|
#include <sdktools>
|
||||||
|
|
||||||
|
public Plugin:myinfo =
|
||||||
|
{
|
||||||
|
name = "Weapon information",
|
||||||
|
author = "Greyscale | Richard Helgeby",
|
||||||
|
description = "Dumps weapon information.",
|
||||||
|
version = "1.0.0",
|
||||||
|
url = "http://code.google.com/p/zombiereloaded/"
|
||||||
|
};
|
||||||
|
|
||||||
|
new m_hActiveWeapon;
|
||||||
|
new m_hMyWeapons;
|
||||||
|
|
||||||
|
public OnPluginStart()
|
||||||
|
{
|
||||||
|
LoadTranslations("common.phrases");
|
||||||
|
|
||||||
|
m_hActiveWeapon = FindSendPropInfo("CBasePlayer", "m_hActiveWeapon");
|
||||||
|
if (m_hActiveWeapon == -1)
|
||||||
|
{
|
||||||
|
LogError("Can't find CBasePlayer::m_hActiveWeapon");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_hMyWeapons = FindSendPropOffs("CBasePlayer", "m_hMyWeapons");
|
||||||
|
if (m_hMyWeapons == -1)
|
||||||
|
{
|
||||||
|
LogError("Can't find CBasePlayer::m_hMyWeapons");
|
||||||
|
}
|
||||||
|
|
||||||
|
RegConsoleCmd("zrtest_weaponslots", Command_ListWeaponSlots, "Lists weapon slots. Usage: zrtest_weaponslots [target]");
|
||||||
|
RegConsoleCmd("zrtest_weaponlist", Command_ListWeapons, "Lists all weapons. Usage: zrtest_weaponlist [target]");
|
||||||
|
RegConsoleCmd("zrtest_knife", Command_Knife, "Gives a knife. Usage: zrtest_knife [target]");
|
||||||
|
RegConsoleCmd("zrtest_removeweapons", Command_RemoveWeapons, "Removes all weapons. Usage: zrtest_removeweapons [target]");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action:Command_ListWeaponSlots(client, argc)
|
||||||
|
{
|
||||||
|
new target = -1;
|
||||||
|
new String:valueString[64];
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
GetCmdArg(1, valueString, sizeof(valueString));
|
||||||
|
target = FindTarget(client, valueString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target <= 0)
|
||||||
|
{
|
||||||
|
ReplyToCommand(client, "Lists weapon slots. Usage: zrtest_weaponlist [target]");
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
ListWeaponSlots(target, client);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ListWeaponSlots(client, client);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action:Command_ListWeapons(client, argc)
|
||||||
|
{
|
||||||
|
new target = -1;
|
||||||
|
new String:valueString[64];
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
GetCmdArg(1, valueString, sizeof(valueString));
|
||||||
|
target = FindTarget(client, valueString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target <= 0)
|
||||||
|
{
|
||||||
|
ReplyToCommand(client, "Lists all weapon. Usage: zrtest_weaponlist [target]");
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
ListWeapons(target, client);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ListWeapons(client, client);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action:Command_Knife(client, argc)
|
||||||
|
{
|
||||||
|
new target = -1;
|
||||||
|
new String:valueString[64];
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
GetCmdArg(1, valueString, sizeof(valueString));
|
||||||
|
target = FindTarget(client, valueString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target <= 0)
|
||||||
|
{
|
||||||
|
ReplyToCommand(client, "Gives a knife. Usage: zrtest_knife [target]");
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
GiveKnife(target);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GiveKnife(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action:Command_RemoveWeapons(client, argc)
|
||||||
|
{
|
||||||
|
new target = -1;
|
||||||
|
new String:valueString[64];
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
GetCmdArg(1, valueString, sizeof(valueString));
|
||||||
|
target = FindTarget(client, valueString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target <= 0)
|
||||||
|
{
|
||||||
|
ReplyToCommand(client, "Removes all weapons. Usage: zrtest_removeweapons [target]");
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc >= 1)
|
||||||
|
{
|
||||||
|
RemoveAllClientWeapons(target, client);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RemoveAllClientWeapons(client, client);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists weapon entity indexes in each weapon slot.
|
||||||
|
*
|
||||||
|
* @param client Source client.
|
||||||
|
* @param observer Client that will receive output.
|
||||||
|
* @param count Optional. Number of slots to check.
|
||||||
|
**/
|
||||||
|
ListWeaponSlots(client, observer, count = 10)
|
||||||
|
{
|
||||||
|
ReplyToCommand(observer, "Slot:\tEntity:\tClassname:");
|
||||||
|
|
||||||
|
// Loop through slots.
|
||||||
|
for (new slot = 0; slot < count; slot++)
|
||||||
|
{
|
||||||
|
new weapon = GetPlayerWeaponSlot(client, slot);
|
||||||
|
|
||||||
|
if (weapon < 0)
|
||||||
|
{
|
||||||
|
ReplyToCommand(observer, "%d\t(empty/invalid)", slot);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
new String:classname[64];
|
||||||
|
GetEntityClassname(weapon, classname, sizeof(classname));
|
||||||
|
|
||||||
|
ReplyToCommand(observer, "%d\t%d\t%s", slot, weapon, classname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all weapons.
|
||||||
|
*
|
||||||
|
* @param client Source client.
|
||||||
|
* @param observer Client that will receive output.
|
||||||
|
*/
|
||||||
|
ListWeapons(client, observer)
|
||||||
|
{
|
||||||
|
ReplyToCommand(observer, "Offset:\tEntity:\tClassname:");
|
||||||
|
|
||||||
|
// Loop through entries in m_hMyWeapons.
|
||||||
|
for(new offset = 0; offset < 128; offset += 4) // +4 to skip to next entry in array.
|
||||||
|
{
|
||||||
|
new weapon = GetEntDataEnt2(client, m_hMyWeapons + offset);
|
||||||
|
|
||||||
|
if (weapon < 0)
|
||||||
|
{
|
||||||
|
ReplyToCommand(observer, "%d\t(empty/invalid)", offset);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
new String:classname[64];
|
||||||
|
GetEntityClassname(weapon, classname, sizeof(classname));
|
||||||
|
|
||||||
|
ReplyToCommand(observer, "%d\t%d\t%s", offset, weapon, classname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all weapons.
|
||||||
|
*
|
||||||
|
* @param client Source client.
|
||||||
|
* @param observer Client that will receive output.
|
||||||
|
* @param count Optional. Number of slots to list.
|
||||||
|
*/
|
||||||
|
RemoveAllClientWeapons(client, observer, count = 5)
|
||||||
|
{
|
||||||
|
// Loop through weapon slots.
|
||||||
|
for (new slot = 0; slot < count; slot++)
|
||||||
|
{
|
||||||
|
new weapon = GetPlayerWeaponSlot(client, slot);
|
||||||
|
|
||||||
|
// Remove all weapons in this slot.
|
||||||
|
while (weapon > 0)
|
||||||
|
{
|
||||||
|
// Remove weapon entity.
|
||||||
|
RemovePlayerItem(client, weapon);
|
||||||
|
AcceptEntityInput(weapon, "Kill");
|
||||||
|
|
||||||
|
ReplyToCommand(observer, "Removed weapon in slot %d.", slot);
|
||||||
|
|
||||||
|
// Get next weapon in this slot, if any.
|
||||||
|
weapon = GetPlayerWeaponSlot(client, slot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GiveKnife(client)
|
||||||
|
{
|
||||||
|
GivePlayerItem(client, "weapon_knife");
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user