Hi, I'm currently working on a rocket tennis map for Team Fortress 2 (
watch this video for a rocket tennis example) and I like to replace the barely used soldier with a SourceMod-plugin.
So I need to spawn a rocket manually, since it isn't possible to give the pyro a foreign weapon anymore.
This is what I got so far:
PHP Code:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
new ent_rocket = -1;
new float:rocket_speed = 800.0;
public Plugin:myinfo =
{
name = "Rocketspawner",
author = "Barracuda",
description = "",
version = "1.0",
url = ""
};
public OnPluginStart()
{
RegConsoleCmd("rocket_spawn", Command_Spawn);
}
public Action:Command_Spawn(client, args)
{
CreateTimer(1.0, SpawnRocket, client);
return Plugin_Handled;
}
public Action:SpawnRocket(Handle:timer, any:client)
{
new Float:ori[3];
new Float:ang[3];
GetClientEyeAngles(client, ang);
GetClientAbsOrigin(client, ori);
ori[2] += 10;
ent_rocket = CreateEntityByName("tf_projectile_rocket");
SetEntDataEnt(ent_rocket, FindSendPropInfo("CTFProjectile_Rocket", "m_hOwnerEntity"), client, true);
SetEntData(ent_rocket, FindSendPropInfo("CTFProjectile_Rocket", "m_bCritical"), 1, 1, true);
SetEntData(ent_rocket, FindSendPropInfo("CTFProjectile_Rocket", "m_iTeamNum"), GetClientTeam(client), true);
SetEntDataVector(ent_rocket, FindSendPropInfo("CTFProjectile_Rocket", "m_angRotation"), ang, true);
DispatchSpawn(ent_rocket);
TeleportEntity(ent_rocket, ori, NULL_VECTOR, NULL_VECTOR);
}
public OnGameFrame()
{
if(!IsValidEntity(ent_rocket))
return;
new Float:ang[3], Float:fwd[3], Float:right[3], Float:up[3];
GetEntDataVector(ent_rocket, FindSendPropInfo("CTFProjectile_Rocket", "m_angRotation"), ang);
GetAngleVectors(ang, fwd, right, up);
ScaleVector(fwd, rocket_speed);
TeleportEntity(ent_rocket, NULL_VECTOR, NULL_VECTOR, fwd);
}
First, I tried without the OnGameFrame()-forward. The rocket appeared correctly, but was just hovering above the ground, doing nothing. I also tried to change m_vInitialVelocity and some other vectors, but without success.
Then I found
this thread and reused the code to move the rocket manually with each frame, now the rocket actually flies but it doesn't do any damage on impact.
Does anybody know how to spawn a rocket projectile that is moving for itself and actually does damage?
Here's an entity dump of a flying CTFProjectile_Rocket:
Code:
CTFProjectile_Rocket.baseclass.baseclass.baseclass.AnimTimeMustBeFirst.m_flAnimTime = 1142536028
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_flSimulationTime = 1142570926
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_vecOrigin = -1627.249023,2342.623779,-306.239075
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_nModelIndex = -65325
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_vecMins = 0.000000,0.000000,0.000000
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_vecMaxs = 0.000000,0.000000,0.000000
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_nSolidType = 2
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_usSolidFlags = 105709568
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_nSurroundType = 512
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_triggerBloat = 0
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_vecSpecifiedSurroundingMins = 0.000000,0.000000,0.000000
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_Collision.m_vecSpecifiedSurroundingMaxs = 0.000000,0.000000,0.000000
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_nRenderFX = 13828096
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_nRenderMode = -16723200
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_fEffects = 16
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_clrRender = -1
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_iTeamNum = 2
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_CollisionGroup = 24
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_flElasticity = 1.000000
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_flShadowCastDistance = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_hOwnerEntity = 1490945
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_hEffectEntity = -1
CTFProjectile_Rocket.baseclass.baseclass.baseclass.moveparent = -1
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_iParentAttachment = -16645120
CTFProjectile_Rocket.baseclass.baseclass.baseclass.movetype = -65020
CTFProjectile_Rocket.baseclass.baseclass.baseclass.movecollide = -254
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_angRotation = 2.892962,176.146378,0.000000
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_iTextureFrameIndex = 256
CTFProjectile_Rocket.baseclass.baseclass.baseclass.predictable_id.m_PredictableID = 0
CTFProjectile_Rocket.baseclass.baseclass.baseclass.predictable_id.m_bIsPlayerSimulated = 0
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_bSimulatedEveryTick = 1
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_bAnimatedEveryTick = 0
CTFProjectile_Rocket.baseclass.baseclass.baseclass.m_bAlternateSorting = 0
CTFProjectile_Rocket.baseclass.baseclass.m_nForceBone = 0
CTFProjectile_Rocket.baseclass.baseclass.m_vecForce = 0.000000,0.000000,0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_nSkin = 0
CTFProjectile_Rocket.baseclass.baseclass.m_nBody = 0
CTFProjectile_Rocket.baseclass.baseclass.m_nHitboxSet = 0
CTFProjectile_Rocket.baseclass.baseclass.m_flModelWidthScale = 1.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.000 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.001 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.002 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.003 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.004 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.005 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.006 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.007 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.008 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.009 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.010 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.011 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.012 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.013 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.014 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.015 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.016 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.017 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.018 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.019 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.020 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.021 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.022 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flPoseParameter.023 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_nSequence = 0
CTFProjectile_Rocket.baseclass.baseclass.m_flPlaybackRate = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flEncodedController.000 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flEncodedController.001 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flEncodedController.002 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flEncodedController.003 = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_bClientSideAnimation = 0
CTFProjectile_Rocket.baseclass.baseclass.m_bClientSideFrameReset = 0
CTFProjectile_Rocket.baseclass.baseclass.m_nNewSequenceParity = 0
CTFProjectile_Rocket.baseclass.baseclass.m_nResetEventsParity = 0
CTFProjectile_Rocket.baseclass.baseclass.m_nMuzzleFlashParity = 0
CTFProjectile_Rocket.baseclass.baseclass.m_hLightingOrigin = -1
CTFProjectile_Rocket.baseclass.baseclass.m_hLightingOriginRelative = -1
CTFProjectile_Rocket.baseclass.baseclass.serveranimdata.m_flCycle = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_fadeMinDist = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_fadeMaxDist = 0.000000
CTFProjectile_Rocket.baseclass.baseclass.m_flFadeScale = 0.000000
CTFProjectile_Rocket.baseclass.m_vInitialVelocity = -1096.114258,73.834381,-55.517281
CTFProjectile_Rocket.baseclass.m_vecOrigin = -1627.249023,2342.623779,-306.239075
CTFProjectile_Rocket.baseclass.m_angRotation = 2.892962,176.146378,0.000000
CTFProjectile_Rocket.baseclass.m_iReflected = 0
CTFProjectile_Rocket.m_bCritical = 0