ItemSpawn: Added unifininished Earth Staff
This commit is contained in:
parent
0b0a0a278a
commit
292b47a4a7
@ -0,0 +1,6 @@
|
||||
"VertexLitGeneric"
|
||||
{
|
||||
"$basetexture" "models/Staff/staffofmagnus"
|
||||
"$nofog" 1
|
||||
"$model" "1"
|
||||
}
|
BIN
ItemSpawn/content/materials/models/Staff/staffofmagnus.vtf
Normal file
BIN
ItemSpawn/content/materials/models/Staff/staffofmagnus.vtf
Normal file
Binary file not shown.
@ -0,0 +1,6 @@
|
||||
"vertexlitgeneric"
|
||||
{
|
||||
"$basetexture" "de_dust/rockwall01"
|
||||
"$surfaceprop" "concrete"
|
||||
"%keywords" "cstrike"
|
||||
}
|
BIN
ItemSpawn/content/models/ffxii/earthmodel1.dx80.vtx
Normal file
BIN
ItemSpawn/content/models/ffxii/earthmodel1.dx80.vtx
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/ffxii/earthmodel1.dx90.vtx
Normal file
BIN
ItemSpawn/content/models/ffxii/earthmodel1.dx90.vtx
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/ffxii/earthmodel1.mdl
Normal file
BIN
ItemSpawn/content/models/ffxii/earthmodel1.mdl
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/ffxii/earthmodel1.phy
Normal file
BIN
ItemSpawn/content/models/ffxii/earthmodel1.phy
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/ffxii/earthmodel1.sw.vtx
Normal file
BIN
ItemSpawn/content/models/ffxii/earthmodel1.sw.vtx
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/ffxii/earthmodel1.vvd
Normal file
BIN
ItemSpawn/content/models/ffxii/earthmodel1.vvd
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/staff/staff.dx80.vtx
Normal file
BIN
ItemSpawn/content/models/staff/staff.dx80.vtx
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/staff/staff.dx90.vtx
Normal file
BIN
ItemSpawn/content/models/staff/staff.dx90.vtx
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/staff/staff.mdl
Normal file
BIN
ItemSpawn/content/models/staff/staff.mdl
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/staff/staff.phy
Normal file
BIN
ItemSpawn/content/models/staff/staff.phy
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/staff/staff.sw.vtx
Normal file
BIN
ItemSpawn/content/models/staff/staff.sw.vtx
Normal file
Binary file not shown.
BIN
ItemSpawn/content/models/staff/staff.vvd
Normal file
BIN
ItemSpawn/content/models/staff/staff.vvd
Normal file
Binary file not shown.
24
ItemSpawn/gamedata/plugin.ItemSpawn.txt
Normal file
24
ItemSpawn/gamedata/plugin.ItemSpawn.txt
Normal file
@ -0,0 +1,24 @@
|
||||
"Games"
|
||||
{
|
||||
"cstrike"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
"GetSlot"
|
||||
{
|
||||
"windows" "320"
|
||||
"linux" "321"
|
||||
}
|
||||
"BumpWeapon"
|
||||
{
|
||||
"windows" "397"
|
||||
"linux" "398"
|
||||
}
|
||||
"OnPickedUp"
|
||||
{
|
||||
"windows" "300"
|
||||
"linux" "301"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -3,14 +3,19 @@
|
||||
#include <sourcemod>
|
||||
#include <sdktools>
|
||||
#include <zombiereloaded>
|
||||
#include <cstrike>
|
||||
|
||||
#pragma semicolon 1
|
||||
|
||||
int g_iConsole;
|
||||
int g_iCounter = 0;
|
||||
|
||||
Handle g_hGetSlot;
|
||||
Handle g_hBumpWeapon;
|
||||
Handle g_hOnPickedUp;
|
||||
|
||||
#include "items\balrog.inc"
|
||||
#include "items\doghuman.inc"
|
||||
#include "items\earth.inc"
|
||||
#include "items\jumper.inc"
|
||||
#include "items\tnt.inc"
|
||||
#include "items\vortigaunt.inc"
|
||||
@ -34,15 +39,91 @@ public Plugin myinfo =
|
||||
public void OnPluginStart()
|
||||
{
|
||||
HookEvent("round_start", OnRoundStart, EventHookMode_Post);
|
||||
|
||||
RegAdminCmd("sm_tnt", Command_TNT, ADMFLAG_KICK);
|
||||
|
||||
RegAdminCmd("sm_balrog", Command_Balrog, ADMFLAG_KICK);
|
||||
RegAdminCmd("sm_humandog", Command_HumanDog, ADMFLAG_KICK);
|
||||
RegAdminCmd("sm_earth", Command_Earth, ADMFLAG_KICK);
|
||||
RegAdminCmd("sm_jumper", Command_Jumper, ADMFLAG_KICK);
|
||||
RegAdminCmd("sm_tnt", Command_TNT, ADMFLAG_KICK);
|
||||
RegAdminCmd("sm_vortigaunt", Command_Vortigaunt, ADMFLAG_KICK);
|
||||
RegAdminCmd("sm_whiteknight", Command_WhiteKnight, ADMFLAG_KICK);
|
||||
|
||||
LoadTranslations("common.phrases");
|
||||
|
||||
Handle hGameConf = LoadGameConfigFile("plugin.entWatch");
|
||||
if(hGameConf == INVALID_HANDLE)
|
||||
{
|
||||
SetFailState("Couldn't load plugin.ItemSpawn game config!");
|
||||
return;
|
||||
}
|
||||
if(GameConfGetOffset(hGameConf, "GetSlot") == -1)
|
||||
{
|
||||
CloseHandle(hGameConf);
|
||||
SetFailState("Couldn't get GetSlot offset from game config!");
|
||||
return;
|
||||
}
|
||||
if(GameConfGetOffset(hGameConf, "BumpWeapon") == -1)
|
||||
{
|
||||
CloseHandle(hGameConf);
|
||||
SetFailState("Couldn't get BumpWeapon offset from game config!");
|
||||
return;
|
||||
}
|
||||
if(GameConfGetOffset(hGameConf, "OnPickedUp") == -1)
|
||||
{
|
||||
CloseHandle(hGameConf);
|
||||
SetFailState("Couldn't get OnPickedUp offset from game config!");
|
||||
return;
|
||||
}
|
||||
|
||||
// 320 CBaseCombatWeapon::GetSlot(void)const
|
||||
StartPrepSDKCall(SDKCall_Entity);
|
||||
if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "GetSlot"))
|
||||
{
|
||||
CloseHandle(hGameConf);
|
||||
SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"GetSlot\" failed!");
|
||||
return;
|
||||
}
|
||||
PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain);
|
||||
g_hGetSlot = EndPrepSDKCall();
|
||||
|
||||
// 397 CCSPlayer::BumpWeapon(CBaseCombatWeapon *)
|
||||
StartPrepSDKCall(SDKCall_Player);
|
||||
if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "BumpWeapon"))
|
||||
{
|
||||
CloseHandle(hGameConf);
|
||||
SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"BumpWeapon\" failed!");
|
||||
return;
|
||||
}
|
||||
PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain);
|
||||
PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer);
|
||||
g_hBumpWeapon = EndPrepSDKCall();
|
||||
|
||||
// 300 CBaseCombatWeapon::OnPickedUp(CBaseCombatCharacter *)
|
||||
StartPrepSDKCall(SDKCall_Entity);
|
||||
if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "OnPickedUp"))
|
||||
{
|
||||
CloseHandle(hGameConf);
|
||||
SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"OnPickedUp\" failed!");
|
||||
return;
|
||||
}
|
||||
PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer);
|
||||
g_hOnPickedUp = EndPrepSDKCall();
|
||||
|
||||
if(g_hGetSlot == INVALID_HANDLE)
|
||||
{
|
||||
SetFailState("Couldn't prepare GetSlot SDKCall!");
|
||||
return;
|
||||
}
|
||||
if(g_hGetSlot == INVALID_HANDLE)
|
||||
{
|
||||
SetFailState("Couldn't prepare BumpWeapon SDKCall!");
|
||||
return;
|
||||
}
|
||||
if(g_hOnPickedUp == INVALID_HANDLE)
|
||||
{
|
||||
SetFailState("Couldn't prepare OnPickedUp SDKCall!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
@ -91,8 +172,29 @@ public void OnMapStart()
|
||||
AddFileToDownloadsTable("models/poo/curlygpoo.sw.vtx");
|
||||
AddFileToDownloadsTable("models/poo/curlygpoo.vvd");
|
||||
AddFileToDownloadsTable("materials/models/poo/curlypoo.vmt");
|
||||
AddFileToDownloadsTable("materials/models/poo/curlypoo.vtf");
|
||||
|
||||
AddFileToDownloadsTable("materials/models/poo/curlypoo.vtf");
|
||||
|
||||
// Earth Staff
|
||||
PrecacheModel("models/staff/staff.mdl");
|
||||
AddFileToDownloadsTable("models/staff/staff.dx80.vtx");
|
||||
AddFileToDownloadsTable("models/staff/staff.dx90.vtx");
|
||||
AddFileToDownloadsTable("models/staff/staff.mdl");
|
||||
AddFileToDownloadsTable("models/staff/staff.phy");
|
||||
AddFileToDownloadsTable("models/staff/staff.sw.vtx");
|
||||
AddFileToDownloadsTable("models/staff/staff.vvd");
|
||||
AddFileToDownloadsTable("materials/models/Staff/staffofmagnus.vmt");
|
||||
AddFileToDownloadsTable("materials/models/Staff/staffofmagnus.vtf");
|
||||
|
||||
// Earth Prop
|
||||
PrecacheModel("models/ffxii/earthmodel1.mdl");
|
||||
AddFileToDownloadsTable("models/ffxii/earthmodel1.dx80.vtx");
|
||||
AddFileToDownloadsTable("models/ffxii/earthmodel1.dx90.vtx");
|
||||
AddFileToDownloadsTable("models/ffxii/earthmodel1.mdl");
|
||||
AddFileToDownloadsTable("models/ffxii/earthmodel1.phy");
|
||||
AddFileToDownloadsTable("models/ffxii/earthmodel1.sw.vtx");
|
||||
AddFileToDownloadsTable("models/ffxii/earthmodel1.vvd");
|
||||
AddFileToDownloadsTable("materials/models/ffxii/earthmodel1/rockwall01.vmt");
|
||||
|
||||
// TNT
|
||||
PrecacheModel("models/props/furnitures/humans/barrel01b.mdl");
|
||||
AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.dx80.vtx");
|
||||
|
175
ItemSpawn/scripting/items/earth.inc
Normal file
175
ItemSpawn/scripting/items/earth.inc
Normal file
@ -0,0 +1,175 @@
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public Action Command_Earth(int client, int argc)
|
||||
{
|
||||
float fOrigin[3];
|
||||
|
||||
if (argc < 1)
|
||||
{
|
||||
GetClientEyePosition(client, fOrigin);
|
||||
SpawnEarthStaff(fOrigin);
|
||||
LogAction(client, -1, "\"%L\" spawned Earth-Staff at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
char sArgs[64];
|
||||
char sTargetName[MAX_TARGET_LENGTH];
|
||||
int iTargets[MAXPLAYERS];
|
||||
int iTargetCount;
|
||||
bool bIsML;
|
||||
|
||||
GetCmdArg(1, sArgs, sizeof(sArgs));
|
||||
|
||||
if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0)
|
||||
{
|
||||
ReplyToTargetError(client, iTargetCount);
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
for (int i = 0; i < iTargetCount; i++)
|
||||
{
|
||||
if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientHuman(iTargets[i])))
|
||||
{
|
||||
GetClientEyePosition(iTargets[i], fOrigin);
|
||||
SpawnEarthStaff(fOrigin, iTargets[i]);
|
||||
LogAction(client, -1, "\"%L\" gave Earth-Staff to \"%L\".", client, iTargets[i]);
|
||||
}
|
||||
}
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
void SpawnEarthStaff(float fOrigin[3], int client = -1)
|
||||
{
|
||||
float fOriginTemp[3];
|
||||
|
||||
// weapon_knife.
|
||||
int iPistol = CreateEntityAtOrigin("weapon_elite", fOrigin);
|
||||
DispatchKeyFormat(iPistol, "targetname", "item_earth_staff_pistol_%d", g_iCounter);
|
||||
DispatchKeyFormat(iPistol, "hammerid", "11051995%d", g_iCounter);
|
||||
DispatchKeyFormat(iPistol, "spawnflags", "1");
|
||||
DispatchKeyFormat(iPistol, "angles", "0 0 0");
|
||||
DispatchKeyFormat(iPistol, "ammo", "999");
|
||||
DispatchKeyFormat(iPistol, "OnPlayerPickup", "item_earth_staff_controls_%d,Activate,,0,1", g_iCounter);
|
||||
SpawnAndActivate(iPistol);
|
||||
|
||||
HookSingleEntityOutput(iPistol, "OnPlayerPickup", EarthStaffPickup, false);
|
||||
|
||||
// model origin.
|
||||
fOriginTemp[0] = fOrigin[0] + 24.0;
|
||||
fOriginTemp[1] = fOrigin[1] - 16.0;
|
||||
fOriginTemp[2] = fOrigin[2] - 32.0;
|
||||
|
||||
// prop_dynamic model.
|
||||
int iModel = CreateEntityAtOrigin("prop_dynamic", fOriginTemp);
|
||||
DispatchKeyFormat(iModel, "targetname", "item_earth_staff_model_%d", g_iCounter);
|
||||
DispatchKeyFormat(iModel, "model", "models/staff/staff.mdl");
|
||||
DispatchKeyFormat(iModel, "disablebonefollowers", "1");
|
||||
DispatchKeyFormat(iModel, "defaultanim", "idle");
|
||||
DispatchKeyFormat(iModel, "angles", "0 270 0");
|
||||
DispatchKeyFormat(iModel, "solid", "0");
|
||||
SpawnAndActivate(iModel);
|
||||
ParentToEntity(iModel, iPistol);
|
||||
|
||||
|
||||
// ambient_generic earth.
|
||||
int iSoundEarth = CreateEntityAtOrigin("ambient_generic", fOrigin);
|
||||
DispatchKeyFormat(iSoundEarth, "targetname", "item_earth_staff_sound_%d", g_iCounter);
|
||||
DispatchKeyFormat(iSoundEarth, "spawnflags", "48");
|
||||
DispatchKeyFormat(iSoundEarth, "radius", "1250");
|
||||
DispatchKeyFormat(iSoundEarth, "sourceentityname", "item_earth_staff_model_%d", g_iCounter);
|
||||
DispatchKeyFormat(iSoundEarth, "message", "physics/concrete/boulder_impact_hard1.wav");
|
||||
DispatchKeyFormat(iSoundEarth, "volume", "10");
|
||||
DispatchKeyFormat(iSoundEarth, "health", "10");
|
||||
DispatchKeyFormat(iSoundEarth, "pitch", "100");
|
||||
DispatchKeyFormat(iSoundEarth, "pitchstart", "100");
|
||||
SpawnAndActivate(iSoundEarth);
|
||||
ParentToEntity(iSoundEarth, iPistol);
|
||||
|
||||
// logic_relay earth.
|
||||
int iRelayEarth = CreateEntityAtOrigin("logic_relay", fOrigin);
|
||||
DispatchKeyFormat(iRelayEarth, "targetname", "item_earth_staff_relay_%d", g_iCounter);
|
||||
DispatchKeyFormat(iRelayEarth, "spawnflags", "0");
|
||||
DispatchKeyFormat(iRelayEarth, "OnTrigger", "!self,Disable,,0,-1");
|
||||
DispatchKeyFormat(iRelayEarth, "OnTrigger", "!self,Enable,,5,-1");
|
||||
DispatchKeyFormat(iRelayEarth, "OnTrigger", "item_earth_staff_sound_%d,PlaySound,,0.75,-1", g_iCounter);
|
||||
DispatchKeyFormat(iRelayEarth, "OnTrigger", "item_earth_staff_model_%d,SetAnimation,Earth,0,-1", g_iCounter);
|
||||
SpawnAndActivate(iRelayEarth);
|
||||
ParentToEntity(iRelayEarth, iPistol);
|
||||
|
||||
HookSingleEntityOutput(iRelayEarth, "OnTrigger", EarthStaffUse, false);
|
||||
|
||||
// game_ui.
|
||||
int iControls = CreateEntityAtOrigin("game_ui", fOrigin);
|
||||
DispatchKeyFormat(iControls, "targetname", "item_earth_staff_controls_%d", g_iCounter);
|
||||
DispatchKeyFormat(iControls, "spawnflags", "0");
|
||||
DispatchKeyFormat(iControls, "fieldofview", "-1.0");
|
||||
DispatchKeyFormat(iControls, "PressedAttack2", "item_earth_staff_relay_%d,Trigger,,0,-1", g_iCounter);
|
||||
SpawnAndActivate(iControls);
|
||||
ParentToEntity(iControls, iPistol);
|
||||
|
||||
g_iCounter++;
|
||||
|
||||
if (client > 0)
|
||||
{
|
||||
int iWeaponSlot = SDKCall(g_hGetSlot, iPistol);
|
||||
int WeaponInSlot = GetPlayerWeaponSlot(client, iWeaponSlot);
|
||||
if(WeaponInSlot != -1)
|
||||
CS_DropWeapon(client, WeaponInSlot, false);
|
||||
|
||||
if(SDKCall(g_hBumpWeapon, client, iPistol))
|
||||
SDKCall(g_hOnPickedUp, iPistol, client);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void EarthStaffPickup(const char[] output, int caller, int activator, float delay)
|
||||
{
|
||||
ServerCommand("say ** %N has picked up the Earth-Staff **", activator);
|
||||
PrintToChat(activator, "Right Click with Knife = Use.");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public void EarthStaffUse(const char[] output, int caller, int activator, float delay)
|
||||
{
|
||||
CreateTimer(0.75, SpawnEarth, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
public Action SpawnEarth(Handle timer, any userid)
|
||||
{
|
||||
int activator = GetClientOfUserId(userid);
|
||||
|
||||
float fOrigin[3];
|
||||
float fAngles[3];
|
||||
GetClientEyeAngles(activator, fAngles);
|
||||
GetClientEyePosition(activator, fOrigin);
|
||||
fAngles[0] = 0.0;
|
||||
fAngles[2] = 0.0;
|
||||
fOrigin[0] = fOrigin[0] + Cosine(DegToRad(fAngles[1])) * 334.0;
|
||||
fOrigin[1] = fOrigin[1] + Sine(DegToRad(fAngles[1])) * 334.0;
|
||||
fOrigin[2] = fOrigin[2] - 23.00;
|
||||
|
||||
// prop_dynamic model.
|
||||
int iModel = CreateEntityAtOrigin("prop_dynamic", fOrigin);
|
||||
DispatchKeyFormat(iModel, "targetname", "item_earth_prop_%d", g_iCounter);
|
||||
DispatchKeyFormat(iModel, "model", "models/ffxii/earthmodel1.mdl");
|
||||
DispatchKeyFormat(iModel, "spawnflags", "0");
|
||||
DispatchKeyFormat(iModel, "PerformanceMode", "0");
|
||||
DispatchKeyFormat(iModel, "solid", "6");
|
||||
DispatchKeyFormat(iModel, "OnUser1", "!self,Break,,6,-1");
|
||||
DispatchKeyFormat(iModel, "OnUser1", "!self,Kill,,6,-1");
|
||||
SpawnAndActivate(iModel);
|
||||
AcceptEntityInput(iModel, "FireUser1");
|
||||
|
||||
g_iCounter ++;
|
||||
}
|
@ -143,7 +143,7 @@ public void JumperUse(const char[] output, int caller, int activator, float dela
|
||||
float fPushVector[3];
|
||||
fPushVector[0] = 0.0;
|
||||
fPushVector[1] = 0.0;
|
||||
fPushVector[2] = 600.0;
|
||||
fPushVector[2] = 500.0;
|
||||
|
||||
float fCurrentVector[3];
|
||||
GetEntPropVector(activator, Prop_Data, "m_vecVelocity", fCurrentVector);
|
||||
|
@ -288,7 +288,7 @@ public void TNTPickup(const char[] output, int caller, int activator, float dela
|
||||
char sBuffer[128];
|
||||
Format(sBuffer, sizeof(sBuffer), "say ** %N has picked up TNT **", activator);
|
||||
SetVariantString(sBuffer);
|
||||
AcceptEntityInput(g_iConsole, "Command");
|
||||
//AcceptEntityInput(g_iConsole, "Command");
|
||||
PrintToChat(activator, " RIGHT CLICK = Launch TNT and LEFT CLICK = Switch between 'put down' and 'throw'.");
|
||||
}
|
||||
|
||||
|
@ -263,7 +263,7 @@ public void VortigauntPickup(const char[] output, int caller, int activator, flo
|
||||
char sBuffer[128];
|
||||
Format(sBuffer, sizeof(sBuffer), "say ** %N has picked up Vortigaunt **", activator);
|
||||
SetVariantString(sBuffer);
|
||||
AcceptEntityInput(g_iConsole, "Command");
|
||||
//AcceptEntityInput(g_iConsole, "Command");
|
||||
|
||||
PrintToChat(activator, "Right Click to Pull Humans in front of you.");
|
||||
}
|
Loading…
Reference in New Issue
Block a user