All pastes #352503 Raw Edit

objeditor.pwn

public cpp v1 · immutable
·published 2007-02-12 21:25 UTC
rendered paste body
#define OBJECTS_MOVE // Remove this line to ignore processing for moving objects#define MAX_WORLDS (MAX_PLAYERS + 5) // Edit if your mode uses less than 256 Virtual Worlds#define PLAYER_ONLY // Remove if you don't want people to have their own objects#define MAX_DYN_OBJECTS 1024 // Raise or lower depending on preference#define VIEW_DISTANCE 80.0 // Locking distance for objects to be visible#define LOOP_GRANULARITY 5 // Itterations per second of the processing loop#define KEY_UP 65408#define KEY_DOWN 128#define KEY_LEFT 65408#define KEY_RIGHT 128#define CAM_OFF_X (0.0)#define CAM_OFF_Y (5.0)#define CAM_OFF_Z (45.0)/*#define CAM_SEL_X#define CAM_SEL_Y#define CAM_SEL_Z*/#define OBJ_OFF_X (0.0)#define OBJ_OFF_Y (25.0)#define OBJ_OFF_Z (5.0)#define PLY_SEL_X (0.0)#define PLY_SEL_Y (-25.0)#define PLY_SEL_Z (5.0)#define GAME_OBJECT_COUNT 18656#define dcmd(%1,%2) if ((strcmp(cmdtext, "/%1", true, %2 + 1) == 0) && (((cmdtext[%2 + 1] == 0) && (dcmd_%1(playerid, ""))) || ((cmdtext[%2 + 1] == 32) && (dcmd_%1(playerid, cmdtext[%2 + 2]))))) return 1#include <YObjects>enum{	STATE_NOTHING,	STATE_PLACING,	STATE_SELECTING}#define SCROLL_PERIOD 1000#define TIMER_TIME 200#define DELAY_CALLS (SCROLL_PERIOD / TIMER_TIME) // Scroll speed once a secondnew gPlayerState[MAX_PLAYERS];new gPlayersObjects[MAX_PLAYERS];new gModel[MAX_PLAYERS] = {0, ...};new gPlayerHeight[MAX_PLAYERS];new Float:gfLastPos[MAX_PLAYERS][4];new Float:gfCurPos[MAX_PLAYERS][3];forward EditorLoop();public OnFilterScriptInit(){	InitObjectPool();	SetTimer("EditorLoop", TIMER_TIME, 1);	return 1;}public OnPlayerConnect(playerid){	gPlayerState[playerid] = STATE_NOTHING;	gModel[playerid] = 0;}public EditorLoop(){	static sCalls[MAX_PLAYERS];	static Float:sfObjRot = 0.0;	for (new i = 0; i < MAX_PLAYERS; i++)	{		if (IsPlayerConnected(i))		{			if (gPlayerState[i] == STATE_SELECTING)			{				if (sCalls[i] >= DELAY_CALLS)				{					if (ProcessSelection(i))					{						ResetSelPos(i);					}				}				else				{					ResetSelPos(i);				}				SetDynamicObjectRot(gPlayersObjects[i], 0.0, 0.0, sfObjRot);			}			else if (gPlayerState[i] == STATE_PLACING)			{				ProcessMovement(i);			}			sCalls[i] %= DELAY_CALLS;			sCalls[i]++;		}		else		{			sCalls[i] = DELAY_CALLS;		}	}	sfObjRot += 1.0;	// Can't % floats	while (sfObjRot >= 360.0) sfObjRot -= 360.0;}dcmd_create(playerid, text[]){	if (gPlayerState[playerid] == STATE_NOTHING)	{		GetPlayerPos(playerid, gfLastPos[playerid][0], gfLastPos[playerid][1], gfLastPos[playerid][2]);		GetPlayerFacingAngle(playerid, gfLastPos[playerid][3]);		new model;		model = strval(text);		if (model)		{			gModel[playerid] = model;			gPlayerState[playerid] = STATE_PLACING;			ResetSetPos(playerid);		}		else		{			gPlayerState[playerid] = STATE_SELECTING;			ResetSelPos(playerid);		}	}	return 1;}public OnPlayerCommandText(playerid, cmdtext[]){	dcmd(create, 6);	return 0;}ResetSelPos(playerid){	SetPlayerPos(playerid, PLY_SEL_X, PLY_SEL_Y, PLY_SEL_Z);	SetPlayerVirtualWorld(playerid, 1);	SetPlayerCameraPos(playerid, PLY_SEL_X + CAM_OFF_X, PLY_SEL_Y + CAM_OFF_Y, PLY_SEL_Z + CAM_OFF_Z);	SetPlayerCameraLookAt(playerid, PLY_SEL_X + OBJ_OFF_X, PLY_SEL_Y + OBJ_OFF_Y, PLY_SEL_Z + OBJ_OFF_Z);	TogglePlayerControllable(playerid, 0);}ResetSetPos(playerid){	TogglePlayerControllable(playerid, 1);	new Float:x, Float:y, Float:z;	x = gfLastPos[playerid][0];	y = gfLastPos[playerid][1];	z = gfLastPos[playerid][2];	SetPlayerPos(playerid, x, y, z);	SetPlayerVirtualWorld(playerid, playerid + 2);	SetPlayerCameraPos(playerid, x + CAM_OFF_X, y + CAM_OFF_Y, z + CAM_OFF_Z);	SetPlayerCameraLookAt(playerid, x + OBJ_OFF_X, y + OBJ_OFF_Y, z + OBJ_OFF_Z);	gPlayerHeight[playerid] = 0;	gPlayersObjects[playerid] = CreatePlayerVWDynamicObject(playerid, playerid + 2, gModel[playerid], x + OBJ_OFF_X, y + OBJ_OFF_Y, z + OBJ_OFF_Z, 0.0, 0.0, 0.0);	gfCurPos[playerid][0] = x;	gfCurPos[playerid][1] = y;	gfCurPos[playerid][2] = z;}ResetPos(playerid){	SetPlayerPos(playerid, gfLastPos[playerid][0], gfLastPos[playerid][1], gfLastPos[playerid][2]);	SetPlayerFacingAngle(playerid, gfLastPos[playerid][3]);	SetPlayerVirtualWorld(playerid, 0);	SetCameraBehindPlayer(playerid);	TogglePlayerControllable(playerid, 1);}ProcessMovement(playerid){	new keys, ud, lr;	GetPlayerKeys(playerid, keys, ud, lr);	new Float:mod = 1.0;	if (keys & KEY_CROUCH)	{		gPlayerState[playerid] = STATE_NOTHING;		// Globalise the object		AddAllPlayersToObject(gPlayersObjects[playerid]);		AddAllVWToObject(gPlayersObjects[playerid]);		gPlayersObjects[playerid] = NO_OBJECT;		ResetPos(playerid);		return 0;	}	else if (keys & KEY_JUMP)	{		gPlayerState[playerid] = STATE_NOTHING;		DestroyDynamicObject(gPlayersObjects[playerid]);		ResetPos(playerid);		return 0;	}	else if (keys & KEY_SPRINT)	{		mod = 100.0;	}	new Float:x, Float:y, Float:z;		x = gfCurPos[playerid][0];	y = gfCurPos[playerid][1];	z = gfCurPos[playerid][2];	if (ud == KEY_UP)	{		y += mod;	}	else if (ud == KEY_DOWN)	{		y -= mod;	}	if (lr == KEY_RIGHT)	{		x += mod;	}	else if (lr == KEY_LEFT)	{		x -= mod;	}	SetPlayerPos(playerid, x, y, z);	SetPlayerCameraPos(playerid, x + CAM_OFF_X, y + CAM_OFF_Y, z + (CAM_OFF_Z + gPlayerHeight[playerid]));	SetPlayerCameraLookAt(playerid, x + OBJ_OFF_X, y + OBJ_OFF_Y, z + (OBJ_OFF_Z + gPlayerHeight[playerid]));	SetDynamicObjectPos(gPlayersObjects[playerid], x + OBJ_OFF_X, y + OBJ_OFF_Y, z + (OBJ_OFF_Z + gPlayerHeight[playerid]));		gfCurPos[playerid][0] = x;	gfCurPos[playerid][1] = y;	gfCurPos[playerid][2] = z;	return 1;}ProcessSelection(playerid){	new keys, ud, lr;	GetPlayerKeys(playerid, keys, ud, lr);	new temp = gModel[playerid];	if (!temp)	{		do		{			gModel[playerid]++;			gModel[playerid] %= GAME_OBJECT_COUNT;		}		while (!IsValidModel(gModel[playerid]));	}	if (keys & KEY_CROUCH)	{		gPlayerState[playerid] = STATE_PLACING;		DestroyDynamicObject(gPlayersObjects[playerid]);		ResetSetPos(playerid);		return 0;	}	else if (keys & KEY_JUMP)	{		gPlayerState[playerid] = STATE_NOTHING;		DestroyDynamicObject(gPlayersObjects[playerid]);		ResetPos(playerid);		return 0;	}	if (ud == KEY_UP)	{		gModel[playerid] += 100;		gModel[playerid] %= GAME_OBJECT_COUNT;		while (!IsValidModel(gModel[playerid]))		{			gModel[playerid]++;			gModel[playerid] %= GAME_OBJECT_COUNT;		}	}	else if (ud == KEY_DOWN)	{		gModel[playerid] -= 100;		gModel[playerid] %= GAME_OBJECT_COUNT;		while (!IsValidModel(gModel[playerid]))		{			gModel[playerid]--;			gModel[playerid] %= GAME_OBJECT_COUNT;		}	}	if (lr == KEY_RIGHT)	{		do		{			gModel[playerid]++;			gModel[playerid] %= GAME_OBJECT_COUNT;		}		while (!IsValidModel(gModel[playerid]));	}	else if (lr == KEY_LEFT)	{		do		{			gModel[playerid]--;			gModel[playerid] %= GAME_OBJECT_COUNT;		}		while (!IsValidModel(gModel[playerid]));	}	if (!temp || temp != gModel[playerid])	{		DestroyDynamicObject(gPlayersObjects[playerid]);		gPlayersObjects[playerid] = CreatePlayerVWDynamicObject(playerid, 1, gModel[playerid], PLY_SEL_X + OBJ_OFF_X, PLY_SEL_Y + OBJ_OFF_Y, PLY_SEL_Z + OBJ_OFF_Z, 0.0, 0.0, 0.0);	}	return 1;}