Guest User

Kurence

a guest
Jan 9th, 2010
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.19 KB | None | 0 0
  1. #include <a_samp>
  2. #define RED 0xFF0000FF
  3. #define GREEN 0x00FF00FF
  4. #define BLUE 0x0000FFFF
  5. new object[MAX_OBJECTS];
  6. new objectattachedplayer[MAX_OBJECTS];
  7. new objectmodel[MAX_OBJECTS];
  8. new playeredits[MAX_PLAYERS];
  9. enum offsetsY{
  10. Float:ofX,
  11. Float:ofY,
  12. Float:ofZ,
  13. ofrX,
  14. ofrY,
  15. ofrZ,
  16. attachedobj
  17. }
  18. new offsets[MAX_PLAYERS][offsetsY];
  19. stock strtok(const string[], &index, separator = ' ')
  20. {
  21. new lenght = strlen(string), old, substr[50];
  22. while(index < lenght && string[index] <= separator) index++;
  23. old = index;
  24. while(index < lenght && string[index] > separator)
  25. {
  26. substr[index - old] = string[index];
  27. index++;
  28. }
  29. return substr;
  30. }
  31. stock Split(const string[], strdest[][], destsize = sizeof(strdest), separator = ' ')
  32. {
  33. new lenght = strlen(string);
  34. new index, offset;
  35. for(new i; i<destsize; i++)
  36. {
  37. while(index < lenght && string[index] <= separator) index++;
  38. offset = index;
  39. if(i < destsize - 1) while(index < lenght && string[index] > separator)
  40. {
  41. strdest[i][index - offset] = string[index];
  42. index++;
  43. }
  44. else if(i == destsize - 1) while(index <= lenght)
  45. {
  46. strdest[i][index - offset] = string[index];
  47. index++;
  48. }
  49. }
  50. return 1;
  51. }
  52. stock Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  53. {
  54.     new Float:a;
  55.     GetPlayerPos(playerid, x, y, a);
  56.     if (IsPlayerInAnyVehicle(playerid))
  57.         GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  58.     else
  59.         GetPlayerFacingAngle(playerid, a);
  60.     x += (distance * floatsin(-a, degrees));
  61.     y += (distance * floatcos(-a, degrees));
  62.     return a;
  63. }
  64. public OnPlayerConnect(playerid) playeredits[playerid] = -1;
  65. public OnPlayerDisconnect(playerid,reason){
  66. if(playeredits[playerid] != -1){
  67. DestroyObject(object[playeredits[playerid]]);
  68. }
  69. playeredits[playerid] = -1;
  70. offsets[playerid][ofX] = 0;
  71. offsets[playerid][ofY] = 0;
  72. offsets[playerid][ofZ] = 0;
  73. offsets[playerid][ofrX] = 0;
  74. offsets[playerid][ofrY] = 0;
  75. offsets[playerid][ofrZ] = 0;
  76. offsets[playerid][attachedobj] = 0;
  77. return 1;
  78. }
  79. public OnPlayerCommandText(playerid,cmdtext[]){
  80. new cmd[128],tmp[128], idx;
  81. cmd = strtok(cmdtext, idx);
  82. tmp = strtok(cmdtext, idx);
  83. if(strcmp("/ocreate",cmd,true) == 0){
  84. if(playeredits[playerid] != -1) return SendClientMessage(playerid,RED,"[ ! ]You are already editing object");
  85. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]No model_id given");
  86. for(new i;i<MAX_OBJECTS;i++){
  87. if(!IsValidObject(object[i])){
  88. new CS[100];
  89. format(CS,sizeof(CS),"[ ! ]Object created ID: %d",i);
  90. new Float:X,Float:Y,Float:Z;
  91. GetPlayerPos(playerid,X,Y,Z);
  92. GetXYInFrontOfPlayer(playerid,X,Y,5);
  93. object[i] = CreateObject(strval(tmp),X,Y,Z,0,0,0);
  94. SendClientMessage(playerid,GREEN,CS);
  95. playeredits[playerid] = i;
  96. objectmodel[i] = strval(tmp);
  97. objectattachedplayer[object[i]] = -1;
  98. break;
  99. }
  100. }
  101. return 1;
  102. }
  103. if(strcmp("/odestroy",cmdtext,true) == 0){
  104. new helper=playeredits[playerid];
  105. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  106. DestroyObject(object[helper]);
  107. SendClientMessage(playerid,GREEN,"[ ! ]Your object was destroyed");
  108. objectmodel[helper] = 0;
  109. new betterhelper=object[helper];
  110. offsets[playerid][attachedobj] = 0;
  111. objectattachedplayer[betterhelper] = -1;
  112. playeredits[playerid] = -1;
  113. offsets[playerid][ofX] = 0;
  114. offsets[playerid][ofY] = 0;
  115. offsets[playerid][ofZ] = 0;
  116. offsets[playerid][ofrX] = 0;
  117. offsets[playerid][ofrY] = 0;
  118. offsets[playerid][ofrZ] = 0;
  119. return 1;
  120. }
  121. if(strcmp("/osave",cmdtext,true) == 0){
  122. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  123. playeredits[playerid] = -1;
  124. SendClientMessage(playerid,GREEN,"[ ! ]Your object was saved");
  125. offsets[playerid][attachedobj] = 0;
  126. return 1;
  127. }
  128. if(strcmp("/oselect",cmd,true) == 0){
  129. if(playeredits[playerid] != -1) return SendClientMessage(playerid,RED,"[ ! ]You are already editing object");
  130. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /oselect [object_id]");
  131. if(IsValidObject(object[strval(tmp)])){
  132. 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");
  133. playeredits[playerid] = strval(tmp);
  134. new CS[100];
  135. format(CS,sizeof(CS),"[ ! ]You are editing object %d",strval(tmp));
  136. new helper = playeredits[playerid];
  137. new betterhelper=object[helper];
  138. if(objectattachedplayer[betterhelper] == playerid) offsets[playerid][attachedobj] = 1;
  139. SendClientMessage(playerid,GREEN,CS);
  140. }
  141. else return SendClientMessage(playerid,RED,"[ ! ]Wrong object ID");
  142. return 1;
  143. }
  144. if(strcmp("/mx",cmd,true) == 0){
  145. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  146. new Float:move;
  147. if(!strlen(tmp)) move = 1;
  148. else move = floatstr(tmp);
  149. new helper = playeredits[playerid];
  150. new Float:X,Float:Y,Float:Z;
  151. GetObjectPos(object[helper],X,Y,Z);
  152. SetObjectPos(object[helper],X+move,Y,Z);
  153. return 1;
  154. }
  155. if(strcmp("/my",cmd,true) == 0){
  156. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  157. new Float:move;
  158. if(!strlen(tmp)) move = 1;
  159. else move = floatstr(tmp);
  160. new helper = playeredits[playerid];
  161. new Float:X,Float:Y,Float:Z;
  162. GetObjectPos(object[helper],X,Y,Z);
  163. SetObjectPos(object[helper],X,Y+move,Z);
  164. return 1;
  165. }
  166. if(strcmp("/mz",cmd,true) == 0){
  167. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  168. new Float:move;
  169. if(!strlen(tmp)) move = 1;
  170. else move = floatstr(tmp);
  171. new helper = playeredits[playerid];
  172. new Float:X,Float:Y,Float:Z;
  173. GetObjectPos(object[helper],X,Y,Z);
  174. SetObjectPos(object[helper],X,Y,Z+move);
  175. return 1;
  176. }
  177. if(strcmp("/rx",cmdtext,true) == 0){
  178. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  179. new Float:rot;
  180. if(!strlen(tmp)) rot = 5;
  181. else rot = floatstr(tmp);
  182. new helper = playeredits[playerid];
  183. new Float:rX,Float:rY,Float:rZ;
  184. GetObjectRot(object[helper],rX,rY,rZ);
  185. SetObjectRot(object[helper],rX+rot,rY,rZ);
  186. return 1;
  187. }
  188. if(strcmp("/ry",cmdtext,true) == 0){
  189. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  190. new Float:rot;
  191. if(!strlen(tmp)) rot = 5;
  192. else rot = floatstr(tmp);
  193. new helper = playeredits[playerid];
  194. new Float:rX,Float:rY,Float:rZ;
  195. GetObjectRot(object[helper],rX,rY,rZ);
  196. SetObjectRot(object[helper],rX,rY+rot,rZ);
  197. return 1;
  198. }
  199. if(strcmp("/rz",cmdtext,true) == 0){
  200. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  201. new Float:rot;
  202. if(!strlen(tmp)) rot = 5;
  203. else rot = floatstr(tmp);
  204. new helper = playeredits[playerid];
  205. new Float:rX,Float:rY,Float:rZ;
  206. GetObjectRot(object[helper],rX,rY,rZ);
  207. SetObjectRot(object[helper],rX,rY,rZ+rot);
  208. return 1;
  209. }
  210. if(strcmp("/attach",cmdtext,true) == 0){
  211. if(playeredits[playerid] == -1) return SendClientMessage(playerid,RED,"[ ! ]You are not editing object");
  212. if(offsets[playerid][attachedobj] == 1) return SendClientMessage(playerid,RED,"[ ! ]You have got already attached object, save him and create new");
  213. new helper = playeredits[playerid];
  214. AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
  215. offsets[playerid][attachedobj] = 1;
  216. new betterhelper=object[helper];
  217. objectattachedplayer[betterhelper] = playerid;
  218. return 1;
  219. }
  220. if(strcmp("/detach",cmdtext,true) == 0){
  221. if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You haven't got attached object");
  222. new Float:X,Float:Y,Float:Z;
  223. GetPlayerPos(playerid,X,Y,Z);
  224. GetXYInFrontOfPlayer(playerid,X,Y,offsets[playerid][ofY]);
  225. new helper = playeredits[playerid];
  226. DestroyObject(object[helper]);
  227. new Float:angle;
  228. if(!IsPlayerInAnyVehicle(playerid)){
  229. GetPlayerFacingAngle(playerid,angle);
  230. }
  231. else{
  232. GetVehicleZAngle(GetPlayerVehicleID(playerid),angle);
  233. }
  234. object[helper] = CreateObject(objectmodel[helper],X,Y,Z+offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],angle+offsets[playerid][ofrZ]);
  235. offsets[playerid][attachedobj] = 0;
  236. new betterhelper=object[helper];
  237. objectattachedplayer[betterhelper] = -1;
  238. offsets[playerid][ofX] = 0;
  239. offsets[playerid][ofY] = 0;
  240. offsets[playerid][ofZ] = 0;
  241. offsets[playerid][ofrX] = 0;
  242. offsets[playerid][ofrY] = 0;
  243. offsets[playerid][ofrZ] = 0;
  244. return 1;
  245. }
  246. if(strcmp("/ofx",cmd,true) == 0){
  247. if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
  248. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
  249. offsets[playerid][ofX] = floatstr(tmp);
  250. new helper=playeredits[playerid];
  251. AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
  252. return 1;
  253. }
  254. if(strcmp("/ofy",cmd,true) == 0){
  255. if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
  256. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
  257. offsets[playerid][ofY] = floatstr(tmp);
  258. new helper=playeredits[playerid];
  259. AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
  260. return 1;
  261. }
  262. if(strcmp("/ofz",cmd,true) == 0){
  263. if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
  264. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
  265. offsets[playerid][ofZ] = floatstr(tmp);
  266. new helper=playeredits[playerid];
  267. AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
  268. return 1;
  269. }
  270. if(strcmp("/orx",cmd,true) == 0){
  271. if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
  272. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
  273. offsets[playerid][ofrX] = strval(tmp);
  274. new helper=playeredits[playerid];
  275. AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
  276. return 1;
  277. }
  278. if(strcmp("/ory",cmd,true) == 0){
  279. if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
  280. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
  281. offsets[playerid][ofrY] = strval(tmp);
  282. new helper=playeredits[playerid];
  283. AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
  284. return 1;
  285. }
  286. if(strcmp("/orz",cmd,true) == 0){
  287. if(offsets[playerid][attachedobj] == 0) return SendClientMessage(playerid,RED,"[ ! ]You must have attached object");
  288. if(!strlen(tmp)) return SendClientMessage(playerid,RED,"[ ! ]Usage: /ofx [X_offset]");
  289. offsets[playerid][ofrZ] = strval(tmp);
  290. new helper=playeredits[playerid];
  291. AttachObjectToPlayer(object[helper],playerid,offsets[playerid][ofX],offsets[playerid][ofY],offsets[playerid][ofZ],offsets[playerid][ofrX],offsets[playerid][ofrY],offsets[playerid][ofrZ]);
  292. return 1;
  293. }
  294. if(strcmp("/oclear",cmdtext,true) == 0){
  295. for(new i;i<MAX_OBJECTS;i++){
  296. if(IsValidObject(object[i])){
  297. DestroyObject(object[i]);
  298. objectattachedplayer[object[i]] = 0;
  299. objectmodel[object[i]] = 0;
  300. }
  301. }
  302. for(new i;i<MAX_PLAYERS;i++){
  303. playeredits[i] = -1;
  304. offsets[playerid][ofX] = 0;
  305. offsets[playerid][ofY] = 0;
  306. offsets[playerid][ofZ] = 0;
  307. offsets[playerid][ofrX] = 0;
  308. offsets[playerid][ofrY] = 0;
  309. offsets[playerid][ofrZ] = 0;
  310. offsets[playerid][attachedobj] = -1;
  311. }
  312. return 1;
  313. }
  314. if(strcmp("/msave",cmdtext,true) == 0){
  315. new savestring[512];
  316. if(fexist("mapsave.kurence")) fremove("mapsave.kurence");
  317. new File:savefile=fopen("mapsave.kurence", io_write);
  318. for(new i;i<MAX_OBJECTS;i++){
  319. new helper = object[i];
  320. if(IsValidObject(object[i]) && objectattachedplayer[helper] == -1){
  321. new Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ;
  322. GetObjectPos(object[i],X,Y,Z);
  323. GetObjectRot(object[i],rX,rY,rZ);
  324. format(savestring,sizeof(savestring),"%s  %d  %f  %f  %f  %f  %f  %f\r\n",savestring,objectmodel[i],X,Y,Z,rX,rY,rZ);
  325. }
  326. }
  327. fwrite(savefile,savestring);
  328. fclose(savefile);
  329. SendClientMessage(playerid,GREEN,"[ ! ]Map has been saved.");
  330. return 1;
  331. }
  332. if(strcmp("/mload",cmdtext,true) == 0){
  333. new File:fileta=fopen("mapsave.kurence",io_read);
  334. new string[256];
  335. while(fread(fileta,string)){
  336. new Harakiri[7][256];
  337. Split(string,Harakiri);
  338. for(new i;i<MAX_OBJECTS;i++){
  339. if(!IsValidObject(object[i])){
  340. new model = strval(Harakiri[0]);
  341. new Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ;
  342. X=floatstr(Harakiri[1]);
  343. Y=floatstr(Harakiri[2]);
  344. Z=floatstr(Harakiri[3]);
  345. rX=floatstr(Harakiri[4]);
  346. rY=floatstr(Harakiri[5]);
  347. rZ=floatstr(Harakiri[6]);
  348. object[i] = CreateObject(model,X,Y,Z,rX,rY,rZ);
  349. break;
  350. }
  351. }
  352. }
  353. fclose(fileta);
  354. SendClientMessage(playerid,GREEN,"[ ! ]Map has been loaded");
  355. return 1;
  356. }
  357. return 0;
  358. }
  359.  
Advertisement
Add Comment
Please, Sign In to add comment