175 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| //----------------------------------------------------------------------------------------------------
 | |
| // 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 ++;
 | |
| } |