/* * ---- breadfishs object editor ---- * -- copyright (c) 2011 breadfish and [BR]Allan -- * ----- breadfish@breadfish.de ----- *----- avs.009@gmail.com ----- */ #include #include // Edit this value for up or down stack size #pragma dynamic 9216 #define OBJECT_DISTANCE 300.0 /* -- COLORS -- */ #define COLOR_RED 0xFF0000FF #define COLOR_YELLOW 0xFFFF00FF #define COLOR_GREEN 0x00FF00FF #define COLOR_WHITE 0xFFFFFFFF #define COLOR_BLUE 0x0000FFFF #define menu_add (2565) // Anything number unsed into other menus #define INVALID_OBJECT (-1) // Please don't edit this value /* -- OBJECT-EDITINGMODES -- */ #define OED_NONE 0 #define OED_MOVE 1 #define OED_ROTATE 2 #define OED_MOVE_XY 3 #define OED_MOVE_Z 4 #define OED_ROTATE_XY 5 #define OED_ROTATE_Z 6 /* -- EIXOS -- */ #define AXIS_NONE 0 #define AXIS_X 1 #define AXIS_Y 2 #define AXIS_Z 3 /* -- VKEYS -- */ #define VKEY_LEFT 32768 #define VKEY_RIGHT 65536 #define VKEY_UP 131072 #define VKEY_DOWN 262144 /* -- MENUMODES -- */ #define MM_SELECT_EDITMODE 1 #define MM_SELECT_EDITMODE_DETACHONLY 2 #define MM_SELECT_MULTIPLIER 3 #define MM_SELECT_ADDMODE 4 /* -- Directory of files -- */ #define F_DIRECTORY "oed/" /* -- Multi-Language variables -- */ #define MAX_LANGS 100 new plang[MAX_PLAYERS][256]; new Langs[MAX_LANGS][256]; new Langs_Imp=0; enum ELANG { DESC_ADD, DESC_COPY, DESC_DEL, DESC_DESEL, DESC_FAKTOR, DESC_GOTO, DESC_LANG, DESC_LISTLANG, DESC_MODE, DESC_NEXT, DESC_RELEASE, DESC_SEL, DESC_STICK, M_ADD, M_ATTACH, M_CANCEL, M_COPY, M_DEL, M_DESC_ADD_CATEGORY, M_DESC_ADD_MODELID, M_DESC_ONAME, M_DETACH, M_GOTO, M_MOVEXY, M_MOVEZ, M_MULT, M_NEXTPAGE, M_NEXT, M_ONAME_TITLE, M_RELOADALL, M_ROTXY, M_ROTZ, M_SELECT, M_VIEW, MSG_ADD_OPEN, MSG_ADDED, MSG_CANCELED, MSG_COPY, MSG_COMMANDS, MSG_DELETED, MSG_DESELECTED, MSG_EXISTS, MSG_FNOTFOUND, MSG_LANG, MSG_LANGDEF, MSG_LANGSEL, MSG_LANGINV, MSG_MOVEENABLED, MSG_MOVEDISABLED, MSG_MULTIPLER, MSG_NOSELECTED, MSG_NEWMODE, MSG_NEAREST, MSG_NOTFOUND, MSG_PAGE, MSG_RELEASE, MSG_SAVEDALL, MSG_SELECTED, MSG_STICK, MSG_SYNTAX }; /* -- FORWARDS -- */ forward Float:strflt(string[]); forward Float:GetDistanceBetweenCoords(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2); forward Float:FloatBubbleSort(Float:lArray[MAX_OBJECTS][2], lArraySize); //Timer forward ObjectEditTimer(playerid, editmode, axis, Float:value); forward UpDownLeftRightAdditionTimer(); forward SetObjectCoords(playerid, obj_id); //Objectdaten enum OBJECTDATA() { id_o, ModelID, Float:obj_x, Float:obj_y, Float:obj_z, Float:rot_x, Float:rot_y, Float:rot_z, Name[MAX_STRING], bool:savetofile } //Player data enum PLAYERDATA { Name[25], //Level, vfile[256], vindex, id_sel } //currently edited object enum EDITINGOBJECT { object_id, mode, bool:domove, Float:movestep, Float:rotatestep, Float:StickDistance, Float:EditMultiplier, bool:stuck } // Vars used into menu objects new listcat[4096], lista[MAX_PLAYERS][4096]; //datenhaltung new gPlayer[MAX_PLAYERS][PLAYERDATA]; //player-infos new gObjects[150][OBJECTDATA]; //Objecte new gEditingObject[MAX_PLAYERS][EDITINGOBJECT]; new gObjectEditTimer[MAX_PLAYERS]; new gCameraSetTimer[MAX_PLAYERS]; new gLastPlayerKeys[MAX_PLAYERS][2]; new bool:gPlayerMenu[MAX_PLAYERS]; new gSelectedMultiplier[MAX_PLAYERS]; new Menu:gMenus[MAX_PLAYERS]; new gMenuMode[MAX_PLAYERS]; //limits new gObjectCount=0; //Timer ids new Timer; /*---------------------------------------------------------------------------------------------------*/ public OnFilterScriptInit() { ReadLangs(); ReadListObjetects(listcat); ReadObjects(); Timer = SetTimer("UpDownLeftRightAdditionTimer", 50, 1); for(new playerid=0; playerid INVALID_OBJECT) { new oid = gEditingObject[playerid][object_id]; format(msg, sizeof msg, "'%s' (ModelID:%d) - %s", gObjects[oid][Name], gObjects[oid][ModelID], GetLMsg(playerid,MSG_DELETED)); gObjects[oid][savetofile] = false; gEditingObject[playerid][object_id] = INVALID_OBJECT; CancelEditObject(playerid); DestroyObjects(); ReadObjects(); SystemMessage(playerid, msg, COLOR_GREEN); return 1; } else { SystemMessage(playerid, GetLMsg(playerid,MSG_NOSELECTED), COLOR_YELLOW); return 1; } } // bearbeitungsmodus setzen else if (strcmp(cmd, "/omode", true) == 0) { if (gEditingObject[playerid][object_id] > INVALID_OBJECT) { new newmode; set(syntax, GetLMsg(playerid,MSG_SYNTAX)); strcat(syntax, ": /omode [m_xy|m_z|r_xy|r_z]: "); strcat(syntax, GetLMsg(playerid,DESC_MODE)); //mode cmd = strtok(cmdtext, idx); if (!(strlen(cmd))) { SystemMessage(playerid, syntax, COLOR_YELLOW); return 1; } else { if (strcmp(cmd, "m_xy", true) == 0) newmode = OED_MOVE_XY; if (strcmp(cmd, "m_z", true) == 0) newmode = OED_MOVE_Z; if (strcmp(cmd, "r_xy", true) == 0) newmode = OED_ROTATE_XY; if (strcmp(cmd, "r_z", true) == 0) newmode = OED_ROTATE_Z; } if (!(newmode == 0)) { gEditingObject[playerid][mode] = newmode; SystemMessage(playerid, GetLMsg(playerid,MSG_NEWMODE), COLOR_GREEN); return 1; } else { SystemMessage(playerid, syntax, COLOR_YELLOW); return 1; } } else { SystemMessage(playerid, GetLMsg(playerid,MSG_NOSELECTED), COLOR_YELLOW); } } // Objecte in der umgebung zeigen else if (strcmp(cmd, "/onext", true) == 0) { new objects[24], oid, objnames[MAX_STRING]; objects = GetPlayerNearestObjects(playerid); for (new i=0;(i INVALID_OBJECT) { format(msg, sizeof msg, "'%s' (ModelID:%d) - ", gObjects[oid][Name], gObjects[oid][ModelID], GetLMsg(playerid,MSG_DESELECTED)); gEditingObject[playerid][object_id] = INVALID_OBJECT; gEditingObject[playerid][mode] = OED_NONE; CancelEditObject(playerid); } else format(msg, sizeof msg,GetLMsg(playerid,MSG_NOSELECTED)); SystemMessage(playerid, msg, COLOR_YELLOW); return 1; } //goto to a objeckt by name else if (strcmp(cmd, "/ogoto", true) == 0) { new name[MAX_STRING], oid; set(syntax, GetLMsg(playerid,MSG_SYNTAX)); strcat(syntax, ": /ogoto "); strcat(syntax, GetLMsg(playerid,DESC_GOTO)); //name strmid(cmd, cmdtext, 7, strlen(cmdtext)); if (!(strlen(cmd))) { SystemMessage(playerid, syntax, COLOR_YELLOW); return 1; } else { name = cmd; } new i; for (i=0;i INVALID_OBJECT) StopObject(gObjects[oid][id_o]); if(gEditingObject[playerid][domove]) gEditingObject[playerid][domove] = false; if (gEditingObject[playerid][stuck]) { new Float:x, Float:y, Float:z, Float:angle; if (IsPlayerInAnyVehicle(playerid)) { GetVehiclePos(GetPlayerVehicleID(playerid),x, y, z); GetVehicleZAngle(GetPlayerVehicleID(playerid), angle); } else { GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, angle); } new model_id; new Float:x2, Float:y2; new objname[MAX_STRING]; gEditingObject[playerid][stuck] = false; model_id = gObjects[oid][ModelID]; set(objname, gObjects[oid][Name]); x2 = x + (gEditingObject[playerid][StickDistance] * floatsin(-angle, degrees)); y2 = y + (gEditingObject[playerid][StickDistance] * floatcos(-angle, degrees)); DestroyObject(gObjects[oid][id_o]); oid = AddNewObjectToScript(model_id, x2, y2, z, 0, 0, angle, objname, oid); gEditingObject[playerid][mode] = OED_MOVE_XY; gEditingObject[playerid][movestep] = 0.05; gEditingObject[playerid][rotatestep] = 1.0; gObjects[oid][savetofile] = true; } TogglePlayerControllable(playerid, 1); SaveObjects(); } /*---------------------------------------------------------------------------------------------------*/ public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new msg[MAX_STRING]; new axis_updown, axis_leftright; new editmode; new Float:value; new Float:x, Float:y, Float:z, Float:angle; if (IsPlayerInAnyVehicle(playerid)) { GetVehiclePos(GetPlayerVehicleID(playerid),x, y, z); GetVehicleZAngle(GetPlayerVehicleID(playerid), angle); } else { GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, angle); } if (IsPlayerAdmin(playerid)) { if ((gEditingObject[playerid][object_id]) > INVALID_OBJECT) { new oid = gEditingObject[playerid][object_id]; if ((gEditingObject[playerid][domove]) && (!gPlayerMenu[playerid])) { switch(gEditingObject[playerid][mode]) { case OED_MOVE_XY: { editmode = OED_MOVE; axis_updown = AXIS_Y; axis_leftright = AXIS_X; value = gEditingObject[playerid][movestep]; } case OED_MOVE_Z: { editmode = OED_MOVE; axis_updown = AXIS_Z; axis_leftright = AXIS_NONE; value = gEditingObject[playerid][movestep]; } case OED_ROTATE_XY: { editmode = OED_ROTATE; axis_updown = AXIS_X; axis_leftright = AXIS_Y; value = gEditingObject[playerid][rotatestep]; } case OED_ROTATE_Z: { editmode = OED_ROTATE; axis_updown = AXIS_NONE; axis_leftright = AXIS_Z; value = gEditingObject[playerid][rotatestep]; } } if (!(gObjectEditTimer[playerid] == 0)) { axis_updown = AXIS_NONE; axis_leftright = AXIS_NONE; } //hoch+runter if (newkeys & VKEY_UP) { if (editmode == OED_ROTATE) { if (!(axis_updown == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_updown, value); } else if (editmode == OED_MOVE) { switch (axis_updown) { case AXIS_Y: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y]+2000,gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10); case AXIS_Z: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y],gObjects[oid][obj_z]+2000,value*gEditingObject[playerid][EditMultiplier]*10); } } } if (newkeys & VKEY_DOWN) { if (editmode == OED_ROTATE) { if (!(axis_updown == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_updown, -value); } else if (editmode == OED_MOVE) { switch (axis_updown) { case AXIS_Y: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y]-2000,gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10); case AXIS_Z: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x],gObjects[oid][obj_y],gObjects[oid][obj_z]-2000,value*gEditingObject[playerid][EditMultiplier]*10); } } } //links+rechts if (newkeys & VKEY_LEFT) { if (editmode == OED_ROTATE) { if (!(axis_leftright == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_leftright, -value); } else if (editmode == OED_MOVE) { switch (axis_leftright) { case AXIS_X: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x]-2000,gObjects[oid][obj_y],gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10); } } } if (newkeys & VKEY_RIGHT) { if (editmode == OED_ROTATE) { if (!(axis_leftright == AXIS_NONE)) gObjectEditTimer[playerid] = SetTimerEx("ObjectEditTimer", 50, 1, "iiif", playerid, editmode, axis_leftright, value); } else if (editmode == OED_MOVE) { switch (axis_leftright) { case AXIS_X: MoveObject(gObjects[oid][id_o], gObjects[oid][obj_x]+2000,gObjects[oid][obj_y],gObjects[oid][obj_z],value*gEditingObject[playerid][EditMultiplier]*10); } } } if ((oldkeys & VKEY_UP) | (oldkeys & VKEY_DOWN) | (oldkeys & VKEY_LEFT) | (oldkeys & VKEY_RIGHT)) { if (!(gObjectEditTimer[playerid] == 0)) { KillTimer(gObjectEditTimer[playerid]); gObjectEditTimer[playerid] = 0; } StopObject(gObjects[oid][id_o]); SaveObjects(); } } if (newkeys & KEY_WALK) { format(msg, sizeof msg, "- %s -", gObjects[gEditingObject[playerid][object_id]][Name]); gMenus[playerid] = CreateMenu(msg, 1, 350, 190, 250, 0); if (gEditingObject[playerid][stuck]) { AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_DETACH)); gMenuMode[playerid] = MM_SELECT_EDITMODE_DETACHONLY; } else { AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ATTACH)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MOVEXY)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MOVEZ)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ROTXY)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ROTZ)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ADD)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_COPY)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_DEL)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MULT)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_CANCEL)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_GOTO)); gMenuMode[playerid] = MM_SELECT_EDITMODE; } if (!(gObjectEditTimer[playerid] == 0)) { KillTimer(gObjectEditTimer[playerid]); gObjectEditTimer[playerid] = 0; } StopObject(gObjects[oid][id_o]); SaveObjects(); TogglePlayerControllable(playerid, 0); ShowMenuForPlayer(gMenus[playerid], playerid); gPlayerMenu[playerid] = true; } if (newkeys & KEY_CROUCH) { gEditingObject[playerid][domove] = !gEditingObject[playerid][domove]; if (gEditingObject[playerid][domove]) { format(msg, sizeof msg, "%s - %s", gObjects[gEditingObject[playerid][object_id]][Name], GetLMsg(playerid,MSG_MOVEENABLED)); OnPlayerCommandText(playerid, "/orelease"); TogglePlayerControllable(playerid, 0); if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, oid); } else { CancelEditObject(playerid); format(msg, sizeof msg, "%s - %s", gObjects[gEditingObject[playerid][object_id]][Name], GetLMsg(playerid,MSG_MOVEDISABLED)); } SystemMessage(playerid, msg, COLOR_YELLOW); } } else if (newkeys & KEY_WALK) { gMenus[playerid] = CreateMenu(GetLMsg(playerid,M_SELECT), 1, 350, 200, 250, 0); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_ADD)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_RELOADALL)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_MULT)); AddMenuItem(gMenus[playerid], 0, GetLMsg(playerid,M_CANCEL)); gMenuMode[playerid] = MM_SELECT_ADDMODE; TogglePlayerControllable(playerid, 0); ShowMenuForPlayer(gMenus[playerid], playerid); gPlayerMenu[playerid] = true; } } return 1; } /*---------------------------------------------------------------------------------------------------*/ public OnPlayerExitedMenu(playerid) { if(gPlayerMenu[playerid]) { HideMenuForPlayer(gMenus[playerid], playerid); DestroyMenu(gMenus[playerid]); gPlayerMenu[playerid] = false; TogglePlayerControllable(playerid, !(gEditingObject[playerid][domove])); } return 1; } /*---------------------------------------------------------------------------------------------------*/ public OnPlayerSelectedMenuRow(playerid, row) { new Menu:current = GetPlayerMenu(playerid); if(current == gMenus[playerid]) { TogglePlayerControllable(playerid, !(gEditingObject[playerid][domove])); new obj_id = gEditingObject[playerid][object_id]; HideMenuForPlayer(gMenus[playerid], playerid); DestroyMenu(gMenus[playerid]); gPlayerMenu[playerid] = false; new temp[MAX_STRING]; new items[10][MAX_STRING] = { "0.005x", "0.05x", "0.5x", "1x", "2x", "5x", "10x", "20x", "25x", "45x" }; switch (gMenuMode[playerid]) { case MM_SELECT_EDITMODE: { switch (row) { case 0: //"Attach to player", { OnPlayerCommandText(playerid, "/ostick"); } case 1: //"Move on X/Y Axis" { gEditingObject[playerid][domove] = true; TogglePlayerControllable(playerid, 0); if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id); OnPlayerCommandText(playerid, "/omode m_xy"); } case 2: //"Move on Z Axis" { gEditingObject[playerid][domove] = true; TogglePlayerControllable(playerid, 0); if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id); OnPlayerCommandText(playerid, "/omode m_z"); } case 3: //"Rotate on X/Y Axis" { gEditingObject[playerid][domove] = true; TogglePlayerControllable(playerid, 0); if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id); OnPlayerCommandText(playerid, "/omode r_xy"); } case 4: //"Rotate on Z Axis" { gEditingObject[playerid][domove] = true; TogglePlayerControllable(playerid, 0); if (gCameraSetTimer[playerid] == 0) gCameraSetTimer[playerid] = SetTimerEx("SetObjectCoords", 25, 1, "ii", playerid, obj_id); OnPlayerCommandText(playerid, "/omode r_z"); } case 5: //"Add objetct" { ShowPlayerDialog(playerid, menu_add, DIALOG_STYLE_LIST, GetLMsg(playerid,M_DESC_ADD_CATEGORY), listcat, GetLMsg(playerid,M_VIEW), GetLMsg(playerid,M_CANCEL)); } case 6: //"Copy" { new objname[MAX_STRING]; format(objname, sizeof objname, "/ocopy cpy_%s", gObjects[obj_id][Name]); OnPlayerCommandText(playerid, objname); } case 7: //"Delete" { OnPlayerCommandText(playerid, "/odel"); } case 8: //"Multiplier" { gMenus[playerid] = CreateMenu(GetLMsg(playerid,M_MULT), 1, 350,180, 250, 0); temp = "~w~"; strcat(temp, items[gSelectedMultiplier[playerid]]); items[gSelectedMultiplier[playerid]] = temp; for(new i=0;i<=9;i++) { AddMenuItem(gMenus[playerid], 0, items[i]); } gMenuMode[playerid] = MM_SELECT_MULTIPLIER; TogglePlayerControllable(playerid, 0); ShowMenuForPlayer(gMenus[playerid], playerid); gPlayerMenu[playerid] = true; } case 9: //"Cancel" { CancelEditObject(playerid); } case 10: //Goto { new str[256]; format(str,sizeof(str),"/ogoto %s", gObjects[obj_id][Name]); OnPlayerCommandText(playerid, str); } } } case MM_SELECT_EDITMODE_DETACHONLY: { switch (row) { case 0: //"Detach from player", { OnPlayerCommandText(playerid, "/orelease"); } } } case MM_SELECT_MULTIPLIER: { switch (row) { case 0: gEditingObject[playerid][EditMultiplier] = 0.005; //"0.005x", case 1: gEditingObject[playerid][EditMultiplier] = 0.050; //"0.05x", case 2: gEditingObject[playerid][EditMultiplier] = 0.5; //"0.5x", case 3: gEditingObject[playerid][EditMultiplier] = 1; //"1x", case 4: gEditingObject[playerid][EditMultiplier] = 2; //"2x", case 5: gEditingObject[playerid][EditMultiplier] = 5; //"5x", case 6: gEditingObject[playerid][EditMultiplier] = 10; //"10x", case 7: gEditingObject[playerid][EditMultiplier] = 20; //"20x", case 8: gEditingObject[playerid][EditMultiplier] = 25; //"25x", case 9: gEditingObject[playerid][EditMultiplier] = 45; //"45x" } gSelectedMultiplier[playerid] = row; TogglePlayerControllable(playerid, !gEditingObject[playerid][domove]); } case MM_SELECT_ADDMODE: { switch (row) { case 0: ShowPlayerDialog(playerid, menu_add, DIALOG_STYLE_LIST, GetLMsg(playerid,M_DESC_ADD_CATEGORY), listcat, GetLMsg(playerid,M_VIEW), GetLMsg(playerid,M_CANCEL)); // Add Object case 1://Reload all { SaveObjects(); DestroyObjects(); ReadObjects(); } case 2://Multipler { gMenus[playerid] = CreateMenu(GetLMsg(playerid,M_MULT), 1, 350,180, 250, 0); temp = "~w~"; strcat(temp, items[gSelectedMultiplier[playerid]]); items[gSelectedMultiplier[playerid]] = temp; for(new i=0;i<=9;i++) { AddMenuItem(gMenus[playerid], 0, items[i]); } gMenuMode[playerid] = MM_SELECT_MULTIPLIER; TogglePlayerControllable(playerid, 0); ShowMenuForPlayer(gMenus[playerid], playerid); gPlayerMenu[playerid] = true; } case 3: //Cancel { CancelEditObject(playerid); } } } } } return 1; } /*---------------------------------------------------------------------------------------------------*/ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == menu_add) { if(response) { new file[256], n; set(file,inputtext); strcat(file,".txt"); n = GetNumberObjects(file); if(n <=80) { ReadListObjetects(lista[playerid],file); format(file, sizeof(file), "%s", inputtext); ShowPlayerDialog(playerid, menu_add+2, DIALOG_STYLE_LIST, file, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_CANCEL)); } else { gPlayer[playerid][vindex] = 1; set(gPlayer[playerid][vfile],file); ReadListObjetects(lista[playerid],file); format(file, sizeof(file), "%s - Page 1", inputtext); ShowPlayerDialog(playerid, menu_add+3, DIALOG_STYLE_LIST, file, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_NEXTPAGE)); } } else SystemMessage(playerid, GetLMsg(playerid,MSG_CANCELED), COLOR_RED); } else if(dialogid == menu_add+1) { if(response) { new str[256]; format(str, sizeof(str), "/oadd %d %s", gPlayer[playerid][id_sel], inputtext); OnPlayerCommandText(playerid, str); } else SystemMessage(playerid, GetLMsg(playerid,MSG_CANCELED), COLOR_RED); } else if(dialogid == menu_add+2) { if(response) { new i=0; gPlayer[playerid][id_sel] = strval(strtok(inputtext,i,'-')); ShowPlayerDialog(playerid, menu_add+1, DIALOG_STYLE_INPUT, GetLMsg(playerid,M_ONAME_TITLE), GetLMsg(playerid,M_DESC_ONAME), GetLMsg(playerid,M_ADD), GetLMsg(playerid,M_CANCEL)); } else SystemMessage(playerid, GetLMsg(playerid,MSG_CANCELED), COLOR_RED); } else if(dialogid == menu_add+3) { if(response) { new i=0; gPlayer[playerid][id_sel] = strval(strtok(inputtext,i,'-')); ShowPlayerDialog(playerid, menu_add+1, DIALOG_STYLE_INPUT, GetLMsg(playerid,M_ONAME_TITLE), GetLMsg(playerid,M_DESC_ONAME), GetLMsg(playerid,M_ADD), GetLMsg(playerid,M_CANCEL)); } else { gPlayer[playerid][vindex]++; new n = GetNumberObjectsPage(gPlayer[playerid][vfile], gPlayer[playerid][vindex]); new str[256]; ReadListObjetects(lista[playerid],gPlayer[playerid][vfile],gPlayer[playerid][vindex]); strmid(str,gPlayer[playerid][vfile],0,strlen(gPlayer[playerid][vfile])-5); format(str, sizeof(str), "%s - Page %d", str, gPlayer[playerid][vindex]); if(n == 80) ShowPlayerDialog(playerid, menu_add+3, DIALOG_STYLE_LIST, str, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_NEXTPAGE)); else ShowPlayerDialog(playerid, menu_add+2, DIALOG_STYLE_LIST, str, lista[playerid], GetLMsg(playerid,M_NEXT), GetLMsg(playerid,M_CANCEL)); } } return 1; } /*---------------------------------------------------------------------------------------------------*/ stock SystemMessage(playerid, text[], color) { new msg[MAX_STRING]; format(msg, sizeof msg, "[OED] %s", text); if (playerid == -1) { //an alle SendClientMessageToAll(color, msg); } else { if (IsPlayerConnected(playerid)) { SendClientMessage(playerid, color, msg); } } return 1; } /*===================================================================================================*/ /* Objectfunktionen */ stock ReadObjects() { new File:hFile; new tmpres[MAX_STRING],i=0; new newoid; new modelid; new Float:x; new Float:y; new Float:z; new Float:rotx; new Float:roty; new Float:rotz; new ObjectName[MAX_STRING]; new file[256]; set(file, F_DIRECTORY); strcat(file,"BREAD_OED.TXT"); if (!(fexist(file))) { new msg[256]; format(msg,sizeof(msg), "[OED] %s File: '%s'", GetLMsg(-1,MSG_FNOTFOUND), file); printf("[OED] %s", msg); return 0; } else { hFile = fopen(file, io_read); tmpres[0]=0; while (fread(hFile, tmpres)) { StripNewLine(tmpres); if (tmpres[0]!=0) { //modelid modelid = strval(strtok(tmpres,i,',')); //spawn X x = Float:floatstr(strtok(tmpres,i,',')); //spawn Y y = Float:floatstr(strtok(tmpres,i,',')); //spawn Z z = Float:floatstr(strtok(tmpres,i,',')); //rotation x rotx = Float:floatstr(strtok(tmpres,i,',')); //rotation y roty = Float:floatstr(strtok(tmpres,i,',')); //rotation z rotz = Float:floatstr(strtok(tmpres,i,',')); //name set(ObjectName,strtok(tmpres,i,',')); //printf("Objeto %d - %d , %f , %f , %f, %f, %f, %f, %s", gObjectCount, modelid, x, y, z, rotx, roty, rotz, ObjectName); if (gObjectCount < MAX_OBJECTS) { newoid = gObjectCount; gObjects[newoid][id_o] = CreateObject(modelid, x, y, z, rotx, roty, rotz, OBJECT_DISTANCE); gObjects[newoid][ModelID] = modelid; gObjects[newoid][obj_x] = x; gObjects[newoid][obj_y] = y; gObjects[newoid][obj_z] = z; gObjects[newoid][rot_x] = rotx; gObjects[newoid][rot_y] = roty; gObjects[newoid][rot_z] = rotz; gObjects[newoid][Name] = ObjectName; gObjects[newoid][savetofile] = true; gObjectCount++; } } tmpres[0]=0; i=0; } fclose(hFile); return 1; } } /*---------------------------------------------------------------------------------------------------*/ stock DestroyObjects() { for(new i=0; i INVALID_OBJECT) newoid = oid; else if(gObjectCount < MAX_OBJECTS) { newoid = gObjectCount; gObjectCount++; } if (gObjectCount < MAX_OBJECTS) { gObjects[newoid][id_o] = CreateObject(modelid, x, y, z, rotx, roty, rotz, OBJECT_DISTANCE); gObjects[newoid][ModelID] = modelid; gObjects[newoid][obj_x] = x; gObjects[newoid][obj_y] = y; gObjects[newoid][obj_z] = z; gObjects[newoid][rot_x] = rotx; gObjects[newoid][rot_y] = roty; gObjects[newoid][rot_z] = rotz; gObjects[newoid][Name] = ObjectName; return newoid; } else { return 0; } } /*---------------------------------------------------------------------------------------------------*/ stock GetPlayerNearestObjects(playerid) { new Float:x1, Float:y1, Float:z1; new Float:x2, Float:y2, Float:z2; new Float:distances[MAX_OBJECTS][2]; new j; new objects[24]; GetPlayerPos(playerid, x1, y1, z1); for (new i=0;i INVALID_OBJECT)) { value = floatmul(value, gEditingObject[playerid][EditMultiplier]); oid = gEditingObject[playerid][object_id]; GetObjectPos(gObjects[oid][id_o], x, y, z); GetObjectRot(gObjects[oid][id_o], rotx, roty, rotz); switch(axis) { case AXIS_X: { x = floatadd(x, value); rotx = floatadd(rotx, value); } case AXIS_Y: { y = floatadd(y, value); roty = floatadd(roty, value); } case AXIS_Z: { z = floatadd(z, value); rotz = floatadd(rotz, value); } } switch (editmode) { case OED_MOVE: { SetObjectPos(gObjects[oid][id_o], x, y, z); gObjects[oid][obj_x] = x; gObjects[oid][obj_y] = y; gObjects[oid][obj_z] = z; } case OED_ROTATE: { SetObjectRot(gObjects[oid][id_o], rotx, roty, rotz); gObjects[oid][rot_x] = rotx; gObjects[oid][rot_y] = roty; gObjects[oid][rot_z] = rotz; } } } return 1; } /*---------------------------------------------------------------------------------------------------*/ public UpDownLeftRightAdditionTimer() { new keys, leftright, updown; new oldkeys; for (new i=0;i -1) format(lfile,sizeof(lfile),"%slanguages/%s.txt",F_DIRECTORY,plang[playerid]); else format(lfile,sizeof(lfile),"%slanguages/%s.txt",F_DIRECTORY,Langs[0]); new ret[256], line[256], File:fl, i=0; ret[0] = 0; fl = fopen(lfile,io_read); if(!fl) { printf("[OED] %s File: %s", GetLMsg(-1,MSG_FNOTFOUND), lfile); return ret; } while(ELANG: i < message && fread(fl, line)) { i++; StripNewLine(line); } if(fread(fl, line)) { StripNewLine(line); set(ret,line); } fclose(fl); return ret; }