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;}