Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #define RED 0xFF0000FF
- #define GREEN 0x00FF00FF
- #define BLUE 0x0000FFFF
- new object[MAX_OBJECTS];
- new objectattachedplayer[MAX_OBJECTS];
- new objectmodel[MAX_OBJECTS];
- new playeredits[MAX_PLAYERS];
- enum offsetsY{
- Float:ofX,
- Float:ofY,
- Float:ofZ,
- ofrX,
- ofrY,
- ofrZ,
- attachedobj
- }
- new offsets[MAX_PLAYERS][offsetsY];
- stock strtok(const string[], &index, separator = ' ')
- {
- new lenght = strlen(string), old, substr[50];
- while(index < lenght && string[index] <= separator) index++;
- old = index;
- while(index < lenght && string[index] > separator)
- {
- substr[index - old] = string[index];
- index++;
- }
- return substr;
- }
- stock Split(const string[], strdest[][], destsize = sizeof(strdest), separator = ' ')
- {
- new lenght = strlen(string);
- new index, offset;
- for(new i; i<destsize; i++)
- {
- while(index < lenght && string[index] <= separator) index++;
- offset = index;
- if(i < destsize - 1) while(index < lenght && string[index] > separator)
- {
- strdest[i][index - offset] = string[index];
- index++;
- }
- else if(i == destsize - 1) while(index <= lenght)
- {
- strdest[i][index - offset] = string[index];
- index++;
- }
- }
- return 1;
- }
- stock Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
- {
- new Float:a;
- GetPlayerPos(playerid, x, y, a);
- if (IsPlayerInAnyVehicle(playerid))
- GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
- else
- GetPlayerFacingAngle(playerid, a);
- x += (distance * floatsin(-a, degrees));
- y += (distance * floatcos(-a, degrees));
- return a;
- }
- public OnPlayerConnect(playerid) playeredits[playerid] = -1;
- public OnPlayerDisconnect(playerid,reason){
- if(playeredits[playerid] != -1){
- DestroyObject(object[playeredits[playerid]]);
- }
- playeredits[playerid] = -1;
- offsets[playerid][ofX] = 0;
- offsets[playerid][ofY] = 0;
- offsets[playerid][ofZ] = 0;
- offsets[playerid][ofrX] = 0;
- offsets[playerid][ofrY] = 0;
- offsets[playerid][ofrZ] = 0;
- offsets[playerid][attachedobj] = 0;
- return 1;
- }
- public OnPlayerCommandText(playerid,cmdtext[]){
- new cmd[128],tmp[128], idx;
- cmd = strtok(cmdtext, idx);
- tmp = strtok(cmdtext, idx);
- if(strcmp("/ocreate",cmd,true) == 0){
- if(playeredits[playerid] != -1) return SendClientMessage(playerid,RED,"[ ! ]You are already editing object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]No model_id given");
- for(new i;i<MAX_OBJECTS;i++){
- if(!IsValidObject(object[i])){
- new CS[100];
- format(CS,sizeof(CS),"[ ! ]Object created ID: %d",i);
- new Float:X,Float:Y,Float:Z;
- GetPlayerPos(playerid,X,Y,Z);
- GetXYInFrontOfPlayer(playerid,X,Y,5);
- object[i] = CreateObject(strval(tmp),X,Y,Z,0,0,0);
- SendClientMessage(playerid,GREEN,CS);
- playeredits[playerid] = i;
- objectmodel[i] = strval(tmp);
- objectattachedplayer[object[i]] = -1;
- break;
- }
- }
- return 1;
- }
- if(strcmp("/odestroy",cmdtext,true) == 0){
- new helper=playeredits[playerid];
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- DestroyObject(object[helper]);
- SendClientMessage(playerid,GREEN,"[ ! ]Your object was destroyed");
- objectmodel[helper] = 0;
- new betterhelper=object[helper];
- offsets[playerid][attachedobj] = 0;
- objectattachedplayer[betterhelper] = -1;
- playeredits[playerid] = -1;
- offsets[playerid][ofX] = 0;
- offsets[playerid][ofY] = 0;
- offsets[playerid][ofZ] = 0;
- offsets[playerid][ofrX] = 0;
- offsets[playerid][ofrY] = 0;
- offsets[playerid][ofrZ] = 0;
- return 1;
- }
- if(strcmp("/osave",cmdtext,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- playeredits[playerid] = -1;
- SendClientMessage(playerid,GREEN,"[ ! ]Your object was saved");
- offsets[playerid][attachedobj] = 0;
- return 1;
- }
- if(strcmp("/oselect",cmd,true) == 0){
- if(playeredits[playerid] != -1) return SendClientMessage(playerid,RED,"[ ! ]You are already editing object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /oselect [object_id]");
- if(IsValidObject(object[strval(tmp)])){
- for(new i;i<MAX_PLAYERS;i++)if(playeredits[playerid] == object[strval(tmp)]) return SendClientMessage(playerid,BLUE,"[ ! ]Sorry, object is already being edited by someone else");
- playeredits[playerid] = strval(tmp);
- new CS[100];
- format(CS,sizeof(CS),"[ ! ]You are editing object %d",strval(tmp));
- new helper = playeredits[playerid];
- new betterhelper=object[helper];
- if(objectattachedplayer[betterhelper] == playerid) offsets[playerid][attachedobj] = 1;
- SendClientMessage(playerid,GREEN,CS);
- }
- else return SendClientMessage(playerid,RED,"[ ! ]Wrong object ID");
- return 1;
- }
- if(strcmp("/mx",cmd,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- new Float:move;
- if(!strlen(tmp)) move = 1;
- else move = floatstr(tmp);
- new helper = playeredits[playerid];
- new Float:X,Float:Y,Float:Z;
- GetObjectPos(object[helper],X,Y,Z);
- SetObjectPos(object[helper],X+move,Y,Z);
- return 1;
- }
- if(strcmp("/my",cmd,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- new Float:move;
- if(!strlen(tmp)) move = 1;
- else move = floatstr(tmp);
- new helper = playeredits[playerid];
- new Float:X,Float:Y,Float:Z;
- GetObjectPos(object[helper],X,Y,Z);
- SetObjectPos(object[helper],X,Y+move,Z);
- return 1;
- }
- if(strcmp("/mz",cmd,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- new Float:move;
- if(!strlen(tmp)) move = 1;
- else move = floatstr(tmp);
- new helper = playeredits[playerid];
- new Float:X,Float:Y,Float:Z;
- GetObjectPos(object[helper],X,Y,Z);
- SetObjectPos(object[helper],X,Y,Z+move);
- return 1;
- }
- if(strcmp("/rx",cmdtext,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- new Float:rot;
- if(!strlen(tmp)) rot = 5;
- else rot = floatstr(tmp);
- new helper = playeredits[playerid];
- new Float:rX,Float:rY,Float:rZ;
- GetObjectRot(object[helper],rX,rY,rZ);
- SetObjectRot(object[helper],rX+rot,rY,rZ);
- return 1;
- }
- if(strcmp("/ry",cmdtext,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- new Float:rot;
- if(!strlen(tmp)) rot = 5;
- else rot = floatstr(tmp);
- new helper = playeredits[playerid];
- new Float:rX,Float:rY,Float:rZ;
- GetObjectRot(object[helper],rX,rY,rZ);
- SetObjectRot(object[helper],rX,rY+rot,rZ);
- return 1;
- }
- if(strcmp("/rz",cmdtext,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- new Float:rot;
- if(!strlen(tmp)) rot = 5;
- else rot = floatstr(tmp);
- new helper = playeredits[playerid];
- new Float:rX,Float:rY,Float:rZ;
- GetObjectRot(object[helper],rX,rY,rZ);
- SetObjectRot(object[helper],rX,rY,rZ+rot);
- return 1;
- }
- if(strcmp("/attach",cmdtext,true) == 0){
- if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
- if(offsets[playerid][attachedobj] == 1) return SendClientMessage(playerid,RED,"[ ! ]You have got already attached object, save him and create new");
- new helper = playeredits[playerid];
- AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
- offsets[playerid][attachedobj] = 1;
- new betterhelper=object[helper];
- objectattachedplayer[betterhelper] = playerid;
- return 1;
- }
- if(strcmp("/detach",cmdtext,true) == 0){
- if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You haven't got attached object");
- new Float:X,Float:Y,Float:Z;
- GetPlayerPos(playerid,X,Y,Z);
- GetXYInFrontOfPlayer(playerid,X,Y,offsets[playerid][ofY]);
- new helper = playeredits[playerid];
- DestroyObject(object[helper]);
- new Float:angle;
- if(!IsPlayerInAnyVehicle(playerid)){
- GetPlayerFacingAngle(playerid,angle);
- }
- else{
- GetVehicleZAngle(GetPlayerVehicleID(playerid),angle);
- }
- object[helper] = CreateObject(objectmodel[helper],X,Y,Z+offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],angle+offsets[playerid][ofrZ]);
- offsets[playerid][attachedobj] = 0;
- new betterhelper=object[helper];
- objectattachedplayer[betterhelper] = -1;
- offsets[playerid][ofX] = 0;
- offsets[playerid][ofY] = 0;
- offsets[playerid][ofZ] = 0;
- offsets[playerid][ofrX] = 0;
- offsets[playerid][ofrY] = 0;
- offsets[playerid][ofrZ] = 0;
- return 1;
- }
- if(strcmp("/ofx",cmd,true) == 0){
- if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
- offsets[playerid][ofX] = floatstr(tmp);
- new helper=playeredits[playerid];
- AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
- return 1;
- }
- if(strcmp("/ofy",cmd,true) == 0){
- if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
- offsets[playerid][ofY] = floatstr(tmp);
- new helper=playeredits[playerid];
- AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
- return 1;
- }
- if(strcmp("/ofz",cmd,true) == 0){
- if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
- offsets[playerid][ofZ] = floatstr(tmp);
- new helper=playeredits[playerid];
- AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
- return 1;
- }
- if(strcmp("/orx",cmd,true) == 0){
- if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
- offsets[playerid][ofrX] = strval(tmp);
- new helper=playeredits[playerid];
- AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
- return 1;
- }
- if(strcmp("/ory",cmd,true) == 0){
- if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
- offsets[playerid][ofrY] = strval(tmp);
- new helper=playeredits[playerid];
- AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
- return 1;
- }
- if(strcmp("/orz",cmd,true) == 0){
- if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
- if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
- offsets[playerid][ofrZ] = strval(tmp);
- new helper=playeredits[playerid];
- AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
- return 1;
- }
- if(strcmp("/oclear",cmdtext,true) == 0){
- for(new i;i<MAX_OBJECTS;i++){
- if(IsValidObject(object[i])){
- DestroyObject(object[i]);
- objectattachedplayer[object[i]] = 0;
- objectmodel[object[i]] = 0;
- }
- }
- for(new i;i<MAX_PLAYERS;i++){
- playeredits[i] = -1;
- offsets[playerid][ofX] = 0;
- offsets[playerid][ofY] = 0;
- offsets[playerid][ofZ] = 0;
- offsets[playerid][ofrX] = 0;
- offsets[playerid][ofrY] = 0;
- offsets[playerid][ofrZ] = 0;
- offsets[playerid][attachedobj] = -1;
- }
- return 1;
- }
- if(strcmp("/msave",cmdtext,true) == 0){
- new savestring[512];
- if(fexist("mapsave.kurence")) fremove("mapsave.kurence");
- new File:savefile=fopen("mapsave.kurence", io_write);
- for(new i;i<MAX_OBJECTS;i++){
- new helper = object[i];
- if(IsValidObject(object[i]) && objectattachedplayer[helper] == -1){
- new Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ;
- GetObjectPos(object[i],X,Y,Z);
- GetObjectRot(object[i],rX,rY,rZ);
- format(savestring,sizeof(savestring),"%s %d %f %f %f %f %f %f\r\n",savestring,objectmodel[i],X,Y,Z,rX,rY,rZ);
- }
- }
- fwrite(savefile,savestring);
- fclose(savefile);
- SendClientMessage(playerid,GREEN,"[ ! ]Map has been saved.");
- return 1;
- }
- if(strcmp("/mload",cmdtext,true) == 0){
- new File:fileta=fopen("mapsave.kurence",io_read);
- new string[256];
- while(fread(fileta,string)){
- new Harakiri[7][256];
- Split(string,Harakiri);
- for(new i;i<MAX_OBJECTS;i++){
- if(!IsValidObject(object[i])){
- new model = strval(Harakiri[0]);
- new Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ;
- X=floatstr(Harakiri[1]);
- Y=floatstr(Harakiri[2]);
- Z=floatstr(Harakiri[3]);
- rX=floatstr(Harakiri[4]);
- rY=floatstr(Harakiri[5]);
- rZ=floatstr(Harakiri[6]);
- object[i] = CreateObject(model,X,Y,Z,rX,rY,rZ);
- break;
- }
- }
- }
- fclose(fileta);
- SendClientMessage(playerid,GREEN,"[ ! ]Map has been loaded");
- return 1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment