Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- yEditor 0.6d
- YLLERON'S OBJECT EDITOR
- ---------------------------
- You can edit everything you want but
- this header must still unchanged.
- ylleron
- */
- #include <a_samp>
- #define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
- #define MAX_YOBJ 500
- #define EDIT_NONE 0
- #define EDIT_POS 1
- #define EDIT_ROT 2
- #define EDIT_CAM 3
- #define downkey 4
- #define upkey 512
- #define D_DESTROY 100
- #define D_EDITOR 101
- #define D_CREATE 102
- #define D_EDIT 103
- //------------------------------------------------------------------------------
- new StateEdit[MAX_PLAYERS] = EDIT_NONE;
- enum e_ye_sVars
- {
- yObj_SavedId[MAX_YOBJ],
- yObjects[MAX_YOBJ],
- yObj_curObj, //
- yObj_ChoObj, //
- yObj_count, //
- yObj_id //
- }
- new yEditor_sVars[e_ye_sVars];
- //----------------------------
- new Float:ObjX,Float:ObjY,Float:ObjZ;
- new Float:ObjrX,Float:ObjrY,Float:ObjrZ;
- new KeyChecking;
- //------------------------------------------------------------------------------
- public OnFilterScriptInit()
- {
- print("\n-----------------------");
- print("yEditor 0.6b by ylleron");
- print("-----------------------\n");
- //======================================
- SetTimer("yUpd_CameraState", 50, true);
- AddPlayerClass(19, -1198.79931641,-85.70799255,38.97339630,0.00000000, 0, 0,0,0,0,0);
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- forward yUpd_CameraState();
- public yUpd_CameraState()
- {
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- if(IsPlayerConnected(i) && StateEdit[i])
- {
- GetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ);
- GetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY, ObjrZ);
- //----------------------------------------------------------------
- SetPlayerCameraLookAt(i, ObjX, ObjY, ObjZ);
- }
- }
- return -1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if (!strcmp(cmdtext, "/yeditor", true))
- {
- ShowPlayerDialog(playerid, D_EDITOR, DIALOG_STYLE_LIST, "yEditor 0.6d", "Create object\nEdit objects\nStop Edit\nDestroy Object\nGoto object pos\nSave Objects\nAbout", "OK", "Cancel");
- }
- return 0;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if (PRESSED(KEY_FIRE) && StateEdit[playerid] != EDIT_NONE) {
- StateEdit[playerid] = (StateEdit[playerid] == EDIT_POS) ? EDIT_ROT : EDIT_POS;
- switch(StateEdit[playerid])
- {
- case EDIT_POS: GameTextForPlayer(playerid, "YOU ARE EDITING POSITION", 1000*4, 5);
- case EDIT_ROT: GameTextForPlayer(playerid, "YOU ARE EDITING ROTATION", 1000*4, 5);
- }
- }
- new keys, u, p;
- GetPlayerKeys(playerid, keys, u, p);
- if (StateEdit[playerid] == EDIT_POS) {
- if (PRESSED(upkey)) {
- if (keys == KEY_JUMP) {
- SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ+1.0); // fast
- }
- else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ+0.5);
- }
- if (PRESSED(downkey)) {
- if (keys == KEY_JUMP) {
- SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ-1.0); // fast
- }
- else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ-0.5);
- }
- }
- if (PRESSED(KEY_ACTION)) {
- if (StateEdit[playerid] != EDIT_NONE) {
- yEdit_StopEdit(playerid);
- }
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if (dialogid == D_EDITOR)
- {
- if (response) {
- switch(listitem) {
- case 0: // Create
- {
- ShowPlayerDialog(playerid, D_CREATE, DIALOG_STYLE_INPUT, "Create new object", "Please type model id of new object", "Create", "Cancel");
- }
- case 1: // Edit
- {
- ShowPlayerDialog(playerid, D_EDIT, DIALOG_STYLE_INPUT, "Move object", "Please type id of object", "Edit", "Cancel");
- }
- case 2: // Stop Edit
- {
- if (StateEdit[playerid] != EDIT_NONE)
- {
- yEdit_StopEdit(playerid);
- }
- else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: You aren't editing any object!");
- }
- case 3: // Destroy object
- {
- ShowPlayerDialog(playerid, D_DESTROY, DIALOG_STYLE_INPUT, "Destroy object", "Please type id of object", "Destroy", "Cancel");
- }
- case 4:
- {
- StateEdit[playerid] = EDIT_CAM;
- }
- case 5:
- {
- yEdit_Save(playerid);
- }
- case 6:
- {
- ShowPlayerDialog(playerid, 14, DIALOG_STYLE_MSGBOX, "yEditor 0.6d (RC5)", "yEditor v0.6d by ylleron\n\nFor normal move hold 'KEY SPRINT'\nFor fastest move hold 'KEY JUMP'\n\nTo change edit method press 'KEY FIRE' (Method: POS, Method: ROT)\nUp object - 1 (on numerical keyboard)\nDown - 0 (on numerical keyboard)\nPlease, report bugs.\nWe can make better and better scripts", "OK", "");
- }
- }
- }
- }
- if (dialogid == D_CREATE)
- {
- if (response)
- {
- if (StateEdit[playerid] == EDIT_NONE)
- {
- if (IsNumeric(inputtext))
- {
- new id = strval(inputtext);
- if (strlen(inputtext) > 0)
- {
- yEdit_CreateObject(playerid, id);
- }
- }
- else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: Object id must be number");
- }
- else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: You are already editing one of the object!");
- }
- }
- if (dialogid == D_EDIT)
- {
- if (response)
- {
- if (StateEdit[playerid] == EDIT_NONE)
- {
- if (IsNumeric(inputtext))
- {
- new id = strval(inputtext);
- if (strlen(inputtext) > 0)
- {
- yEdit_EditObject(playerid, id);
- }
- }
- else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: Object id must be number");
- }
- else return SendClientMessage(playerid, 0x0000FFAA, "yEditor: You are already editing one of the object!");
- }
- }
- if (dialogid == D_DESTROY) {
- if (response)
- {
- if (strlen(inputtext) > 0 && IsNumeric(inputtext)) {
- yEdit_DestroyObject(playerid, strval(inputtext));
- }
- }
- }
- if (dialogid == 14) {
- if (response) return 1;
- }
- return 1;
- }
- forward KeyEdit(playerid);
- public KeyEdit(playerid)
- {
- if (StateEdit[playerid] == EDIT_NONE) return 0;
- // Object move -------------------------------------------------------------
- new keys, updown, leftright;
- GetPlayerKeys(playerid, keys, updown, leftright);
- //---------------------------------------------------------
- switch(StateEdit[playerid])
- {
- case EDIT_POS:
- {
- // Y Pos --------------------------
- if (updown < 0) {
- if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+0.1, ObjZ); // normal
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+1.0, ObjZ); // fast
- else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+0.01, ObjZ); //slow
- }
- else if (updown > 0) {
- if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-0.1, ObjZ);
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-1.0, ObjZ); // fastest
- else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-0.01, ObjZ);
- }
- // X Pos --------------------------
- if (leftright > 0) {
- if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+0.1, ObjY, ObjZ);
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+1.0, ObjY, ObjZ); // fastest
- else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+0.01, ObjY, ObjZ);
- }
- else if (leftright < 0) {
- if (keys == KEY_SPRINT) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX-0.1, ObjY, ObjZ);
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX-1.0, ObjY, ObjZ); // fastest
- else SetObjectPos(yEditor_sVars[yObj_curObj], ObjX-0.01, ObjY, ObjZ);
- }
- }
- case EDIT_ROT:
- {
- if (updown < 0) {
- if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY+2.0, ObjrZ);
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY+4.0, ObjZ); // fastest
- else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY+1.0, ObjrZ);
- }
- else if (updown > 0) {
- if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY-2.0, ObjrZ);
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY-4.0, ObjZ); // fastest
- else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX, ObjrY-1.0, ObjrZ);
- }
- if (leftright < 0) {
- if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX+2.0, ObjrY, ObjrZ);
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+4.0, ObjY, ObjZ); // fastest
- else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX+1.0, ObjrY, ObjrZ);
- }
- else if (leftright > 0) {
- if (keys == KEY_SPRINT) SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX-2.0, ObjrY, ObjrZ);
- else if (keys == KEY_JUMP) SetObjectPos(yEditor_sVars[yObj_curObj], ObjX+4.0, ObjY, ObjZ); // fastest
- else SetObjectRot(yEditor_sVars[yObj_curObj], ObjrX-1.0, ObjrY, ObjrZ);
- }
- }
- case EDIT_CAM:
- {
- GetObjectPos(yEditor_sVars[yObj_curObj], ObjX, ObjY, ObjZ);
- SetPlayerCameraPos(playerid, ObjX+15, ObjY, ObjZ+15);
- SetPlayerCameraLookAt(playerid, ObjX, ObjY, ObjZ);
- StateEdit[playerid] = EDIT_POS;
- }
- }
- return 0;
- }
- //==============================================================================
- stock yEdit_CreateObject(playerid, id)
- {
- if(yEditor_sVars[yObj_count] < MAX_YOBJ)
- {
- yEditor_sVars[yObj_SavedId][yEditor_sVars[yObj_count]] = id;
- // Get player position to make object to him location.
- new Float:PlayerX,Float:PlayerY,Float:PlayerZ;
- GetPlayerPos(playerid, PlayerX, PlayerY, PlayerZ);
- yEditor_sVars[yObjects][yEditor_sVars[yObj_count]] = CreateObject(id, PlayerX, PlayerY+1, PlayerZ, 0, 0, 0);
- new _Str[100];
- format(_Str, sizeof(_Str), "yEditor: Created new object! Model ID: %d | Object ID: %d", id, yEditor_sVars[yObj_count]);
- SendClientMessage(playerid, 0x0000FFAA, _Str);
- // Increase created
- yEditor_sVars[yObj_count]++;
- }
- return true;
- }
- //==============================================================================
- stock yEdit_DestroyObject(playerid, id)
- {
- DestroyObject(yEditor_sVars[yObjects][id]);
- yEditor_sVars[yObj_count]--;
- yEdit_StopEdit(playerid);
- return 1;
- }
- //==============================================================================
- stock yEdit_EditObject(playerid, id)
- {
- // Change state to editing object position
- // And we freeze the player
- StateEdit[playerid] = EDIT_POS;
- TogglePlayerControllable(playerid, 0);
- //------------------------------------
- yEditor_sVars[yObj_ChoObj] = id;
- yEditor_sVars[yObj_curObj] = id;
- //-----------------------------
- GetObjectPos(yEditor_sVars[yObj_ChoObj], ObjX, ObjY, ObjZ);
- //-----------------------------
- if (ObjX == 0.0 && ObjY == 0.0 && ObjZ == 0.0) {
- SendClientMessage(playerid, 0x0000FFAA, "yEditor: This object doesn't exist!");
- yEdit_StopEdit(playerid);
- } else {
- SetPlayerCameraPos(playerid, ObjX+5, ObjY-15, ObjZ+15);
- SetPlayerCameraLookAt(playerid, ObjX, ObjY, ObjZ);
- }
- //-----------------------------
- KeyChecking = SetTimerEx("KeyEdit", 100, 1, "i", playerid);
- return 1;
- }
- //==============================================================================
- stock yEdit_StopEdit(playerid)
- {
- new str[100];
- format(str,sizeof(str),"OBJECT\nID: %d\nModel: %d\n", yEditor_sVars[yObj_count], yEditor_sVars[yObj_SavedId][yEditor_sVars[yObj_count]]);
- Create3DTextLabel(str, 0xFF0000AA, ObjX, ObjY, ObjZ, 40.0, 0, 0);
- //-----------------------------------
- SetCameraBehindPlayer(playerid);
- TogglePlayerControllable(playerid, 1);
- // ----------------------------------
- yEditor_sVars[yObj_curObj] = -1;
- StateEdit[playerid] = EDIT_NONE;
- KillTimer(KeyChecking);
- return 1;
- }
- // this stock isn't used, you can use it as new action in dialog
- stock yEdit_CloneObject(playerid, id)
- {
- if(yEditor_sVars[yObj_count] < MAX_YOBJ)
- {
- // Increase created
- yEditor_sVars[yObj_count]++;
- yEditor_sVars[yObj_id] = id;
- // --------------------------------
- GetObjectPos(id, ObjX, ObjY, ObjZ);
- GetObjectRot(id, ObjrX, ObjrY, ObjrZ);
- yEditor_sVars[yObj_SavedId][yEditor_sVars[yObj_count]] = id;
- yEditor_sVars[yObjects][yEditor_sVars[yObj_count]] = CreateObject(yEditor_sVars[yObj_id], ObjX, ObjY, ObjZ, ObjrX, ObjrY, ObjrZ);
- new _Str[100];
- format(_Str, sizeof(_Str), "yEditor: Cloned object created! Model ID: %d | Object ID: %d", yEditor_sVars[yObj_id], yEditor_sVars[yObjects][yEditor_sVars[yObj_count]]);
- SendClientMessage(playerid, 0x0000FFAA, _Str);
- }
- }
- //==============================================================================
- stock yEdit_Save(playerid)
- {
- new File:gFile;
- gFile = fopen("/yEditor/saved_objects.txt", io_append);
- for(new i=0;i<yEditor_sVars[yObj_count];i++)
- {
- //-----------------------------
- GetObjectPos(i, ObjX, ObjY, ObjZ);
- GetObjectRot(i, ObjrX, ObjrY, ObjrZ);
- //-----------------------------
- if (ObjX == 0.0 && ObjY == 0.0 && ObjZ == 0.0) return 0;
- else {
- new flo[168];
- format(flo, sizeof(flo), "CreateObject(%d, %.4f, %.4f, %.4f, %.4f, %.4f, %.4f);\r\n", yEditor_sVars[yObj_SavedId][i], ObjX, ObjY, ObjZ, ObjrX, ObjrY, ObjrZ);
- fwrite(gFile, flo);
- }
- }
- fclose(gFile);
- //---------------------------------------------------------
- SendClientMessage(playerid, 0x0000FFAA, "yEditor: All Objects saved!");
- return 1;
- }
- stock IsNumeric(string[])
- {
- for (new i = 0, j = strlen(string); i < j; i++) {
- if (string[i] > '9' || string[i] < '0') {
- return 0;
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement