ulfricmalcom

playerattached object 0.3e

Oct 20th, 2012
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.36 KB | None | 0 0
  1. // player object filterscript used in my video. Feel free to test around with this
  2.  
  3. #include <a_samp>
  4. #define FILTERSCRIPT
  5. #define cWhite 0xFFFFFFAA
  6.  
  7. enum objectP
  8. {
  9.     model,
  10.     bone,
  11.     bool: show,
  12.     Float: offsetX,
  13.     Float: offsetY,
  14.     Float: offsetZ,
  15.     Float: rotateX,
  16.     Float: rotateY,
  17.     Float: rotateZ,
  18.     Float: scaleX,
  19.     Float: scaleY,
  20.     Float: scaleZ
  21. }
  22.  
  23. new playerObject[MAX_PLAYERS][10 char][objectP];
  24.  
  25. public OnFilterScriptInit()
  26. {
  27.     print("\n--------------------------------------");
  28.     print(" playerObject for tutorial by ulfric malcom");
  29.     print("--------------------------------------\n");
  30.     return 1;
  31. }
  32.  
  33. public OnFilterScriptExit()
  34. {
  35.     printf("playerObject filterscript Exit");
  36.     return 1;
  37. }
  38. public OnPlayerCommandText(playerid, cmdtext[])
  39. {
  40.     new cmd[128], idx, string[64];
  41.     cmd = strtok(cmdtext, idx);
  42.  
  43.     /*new cmd[30], params[30], string[64];
  44.     sscanf(cmdtext, "ss", cmd, params);*/
  45.  
  46.     if (strcmp(cmd, "/addobject", true) == 0)
  47.     {
  48.         new modelid, boneid;
  49.         new tmp[30], tmp2[30];
  50.         tmp = strtok(cmdtext, idx);
  51.         tmp2 = strtok(cmdtext, idx);
  52.         if(!strlen(tmp) || !strlen(tmp2)) return SendClientMessage(playerid, cWhite, "/addobject [model number] [bone id]");
  53.         modelid = strval(tmp);
  54.         boneid = strval(tmp2);
  55.         //if(sscanf(params, "ii", modelid, boneid)) return SendClientMessage(playerid, cWhite, "/addobject [model number] [bone id]");
  56.         if(modelid < 18851 ||  modelid > 19163)
  57.         {
  58.             return SendClientMessage(playerid, cWhite, "Model id should be 18850 < id < 19300");
  59.         }
  60.         else if(boneid < 1 || boneid > 18)
  61.         {
  62.             return SendClientMessage(playerid, cWhite, "Bone id should be 0 < id < 19");
  63.         }
  64.         else
  65.         {
  66.             for(new i = 0; i < 10; i++)
  67.             {
  68.                 if(!IsPlayerAttachedObjectSlotUsed(playerid, i))
  69.                 {
  70.                     SetPlayerAttachedObject(playerid, i, modelid, boneid);
  71.                     format(string, sizeof(string), "Object Added ID: %d , on bone: %d, in slot: %d", modelid, boneid, i);
  72.                     playerObject[playerid][i][model] = modelid;
  73.                     playerObject[playerid][i][bone] = boneid;
  74.                     playerObject[playerid][i][show] = true;
  75.                     GetPlayerObjectPos(playerid, modelid, playerObject[playerid][i][offsetX], playerObject[playerid][i][offsetY], playerObject[playerid][i][offsetZ]);
  76.                     GetPlayerObjectRot(playerid, modelid, playerObject[playerid][i][rotateX], playerObject[playerid][i][rotateY], playerObject[playerid][i][rotateZ]);
  77.                     SendClientMessage(playerid, cWhite, string);
  78.                     break;
  79.                 }
  80.                 else if(i == 9)return SendClientMessage(playerid, cWhite, "No more slots avaliable!");
  81.             }//close for
  82.         }
  83.         return 1;
  84.     }
  85.     if (strcmp(cmd, "/deleteobject", true) == 0)
  86.     {
  87.         new id, tmp[20];
  88.         tmp = strtok(cmdtext, idx);
  89.         id = strval(tmp);
  90.         if(!strlen(tmp)) return SendClientMessage(playerid, cWhite, "/deleteobject [object slot id]");
  91.         //if(sscanf(params, "i", id)) return SendClientMessage(playerid, cWhite, "/deleteobject [object slot id]");
  92.         if(!IsPlayerAttachedObjectSlotUsed(playerid, id)) return SendClientMessage(playerid, cWhite, "That slot doesn't have any object!");
  93.         RemovePlayerAttachedObject(playerid, id);
  94.         format(string, sizeof(string), "Object ID: %d has been removed from slot: %d", playerObject[playerid][id][model], id);
  95.         playerObject[playerid][id][model] = 0;
  96.         playerObject[playerid][id][bone] = 0;
  97.         playerObject[playerid][id][offsetX] = 0.0;
  98.         playerObject[playerid][id][offsetY] = 0.0;
  99.         playerObject[playerid][id][offsetZ] = 0.0;
  100.         playerObject[playerid][id][rotateX] = 0.0;
  101.         playerObject[playerid][id][rotateY] = 0.0;
  102.         playerObject[playerid][id][rotateZ] = 0.0;
  103.         playerObject[playerid][id][scaleX] = 1.0;
  104.         playerObject[playerid][id][scaleY] = 1.0;
  105.         playerObject[playerid][id][scaleZ] = 1.0;
  106.         SendClientMessage(playerid, cWhite, string);
  107.         return 1;
  108.     }
  109.     if (strcmp(cmd, "/changemodel", true) == 0)
  110.     {
  111.         new slot, id, tmp[20], tmp2[20];
  112.         tmp = strtok(cmdtext, idx);
  113.         tmp2 = strtok(cmdtext, idx);
  114.         slot = strval(tmp);
  115.         id = strval(tmp2);
  116.         if(!strlen(tmp)) return SendClientMessage(playerid, cWhite, "/changemodel [slot] [new model id]");
  117.         //if(sscanf(params, "ii", slot, id)) return SendClientMessage(playerid, cWhite, "/changemodel [slot] [new model id]");
  118.         if(!IsPlayerAttachedObjectSlotUsed(playerid, slot)) return SendClientMessage(playerid, cWhite, "That slot doesn't have any object!");
  119.         if(id < 18851 ||  id > 19163) return SendClientMessage(playerid, cWhite, "Model id should be 18850 < id < 19300");
  120.         RemovePlayerAttachedObject(playerid, slot);
  121.         SetPlayerAttachedObject(playerid, slot, id, playerObject[playerid][slot][bone], playerObject[playerid][slot][offsetX], playerObject[playerid][slot][offsetY], playerObject[playerid][slot][offsetZ], playerObject[playerid][slot][rotateX], playerObject[playerid][slot][rotateY], playerObject[playerid][slot][rotateZ]);
  122.         format(string, sizeof(string), "Object Model ID: %d has been changed to ID: %d", playerObject[playerid][slot][model], id);
  123.         playerObject[playerid][slot][model] = id;
  124.         SendClientMessage(playerid, cWhite, string);
  125.         return 1;
  126.     }
  127.     if (strcmp(cmd, "/changebone", true) == 0)
  128.     {
  129.         new slot, id, tmp[20], tmp2[20];
  130.         tmp = strtok(cmdtext, idx);
  131.         tmp2 = strtok(cmdtext, idx);
  132.         slot = strval(tmp);
  133.         id = strval(tmp2);
  134.         if(!strlen(tmp)) return SendClientMessage(playerid, cWhite, "/changebone [slot] [new bone id]");
  135.         if(!IsPlayerAttachedObjectSlotUsed(playerid, slot)) return SendClientMessage(playerid, cWhite, "That slot doesn't have any object!");
  136.         if(id < 1 || id > 18) return SendClientMessage(playerid, cWhite, "Bone id should be 0 < id < 19");
  137.         RemovePlayerAttachedObject(playerid, slot);
  138.         SetPlayerAttachedObject(playerid, slot, playerObject[playerid][slot][model], id, playerObject[playerid][slot][offsetX], playerObject[playerid][slot][offsetY], playerObject[playerid][slot][offsetZ], playerObject[playerid][slot][rotateX], playerObject[playerid][slot][rotateY], playerObject[playerid][slot][rotateZ]);
  139.         format(string, sizeof(string), "Object Bone ID: %d has been changed to ID: %d", playerObject[playerid][slot][bone], id);
  140.         playerObject[playerid][slot][bone] = id;
  141.         SendClientMessage(playerid, cWhite, string);
  142.         return 1;
  143.     }
  144.     if (strcmp(cmd, "/editobject", true) == 0)
  145.     {
  146.         new slot, tmp[20];
  147.         tmp = strtok(cmdtext, idx);
  148.         slot = strval(tmp);
  149.         if(!strlen(tmp)) return SendClientMessage(playerid, cWhite, "/editobject [slot]");
  150.         if(!IsPlayerAttachedObjectSlotUsed(playerid, slot)) return SendClientMessage(playerid, cWhite, "That slot doesn't have any object, or it might be turned off(/togobject)!");
  151.         //if(!playerObject[playerid][slot][show]) return SendClientMessage(playerid, cWhite, "You need to turn on this object first! /togobject");
  152.         EditAttachedObject(playerid, slot);
  153.         format(string, sizeof(string), "You are not editing the object in slot: %d . Press ESC to cencel!", slot);
  154.         SendClientMessage(playerid, cWhite, string);
  155.         return 1;
  156.     }
  157.     if (strcmp(cmd, "/togobject", true) == 0)
  158.     {
  159.         new tmp[64], slot, sta[5];
  160.         tmp = strtok(cmdtext, idx);
  161.         slot = strval(tmp);
  162.         if(!strlen(tmp)) return SendClientMessage(playerid, cWhite, "/togobject [slot]");
  163.         if(playerObject[playerid][slot][model] == 0) return SendClientMessage(playerid, cWhite, "That slot doesn't have any object!");
  164.         if(playerObject[playerid][slot][show])
  165.         {
  166.             RemovePlayerAttachedObject(playerid, slot);
  167.             playerObject[playerid][slot][show] = false;
  168.             sta = "OFF";
  169.             format(string, sizeof(string), "Object at slot: %d is turned: %s", slot, sta);
  170.             SendClientMessage(playerid, cWhite, string);
  171.             return 1;
  172.         }
  173.         else
  174.         {
  175.             SetPlayerAttachedObject(playerid, slot, playerObject[playerid][slot][model], playerObject[playerid][slot][bone], playerObject[playerid][slot][offsetX], playerObject[playerid][slot][offsetY], playerObject[playerid][slot][offsetZ], playerObject[playerid][slot][rotateX], playerObject[playerid][slot][rotateY], playerObject[playerid][slot][rotateZ]);
  176.             playerObject[playerid][slot][show] = true;
  177.             sta = "ON";
  178.             format(string, sizeof(string), "Object at slot: %d is turned: %s", slot, sta);
  179.             SendClientMessage(playerid, cWhite, string);
  180.         }
  181.         return 1;
  182.     }
  183.     if (strcmp(cmd, "/help", true) == 0)
  184.     {
  185.         //SendClientMessage(playerid, cWhite, "*Player Object Guide*\nFirst, add an object(/addobject)\nThen, edit it(/changebone, /changemodel, /editobject)\nYou can also delete it or toggle it(/deleteobject, /togobject)");
  186.         SendClientMessage(playerid, cWhite, "*Player Object Guide*");
  187.         SendClientMessage(playerid, cWhite, "First, add an object(/addobject)");
  188.         SendClientMessage(playerid, cWhite, "Then, edit it(/changebone, /changemodel, /editobject)");
  189.         SendClientMessage(playerid, cWhite, "You can also delete it or toggle it(/deleteobject, /togobject)");
  190.         return 1;
  191.     }
  192.     return 0;
  193. }
  194.  
  195. public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
  196. {
  197.     new string[64];
  198.     if(response == 0) return SendClientMessage(playerid, cWhite, "You canceled!");
  199.     playerObject[playerid][index][offsetX] = fOffsetX;
  200.     playerObject[playerid][index][offsetY] = fOffsetY;
  201.     playerObject[playerid][index][offsetZ] = fOffsetZ;
  202.     playerObject[playerid][index][rotateX] = fRotX;
  203.     playerObject[playerid][index][rotateY] = fRotY;
  204.     playerObject[playerid][index][rotateZ] = fRotZ;
  205.     playerObject[playerid][index][scaleX] = fScaleX;
  206.     playerObject[playerid][index][scaleY] = fScaleY;
  207.     playerObject[playerid][index][scaleZ] = fScaleZ;
  208.     format(string, sizeof(string), "Your object at slot: %d has been saved!", index);
  209.     SendClientMessage(playerid, cWhite, string);
  210.     return 1;
  211. }
  212.  
  213. //------------------------------------------------------------------------------
  214. // strtok created by: DracoBlue
  215.  
  216. stock strtok(const string[], &index)
  217. {
  218.     new length = strlen(string);
  219.     while ((index < length) && (string[index] <= ' '))
  220.     {
  221.         index++;
  222.     }
  223.  
  224.     new offset = index;
  225.     new result[20];
  226.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  227.     {
  228.         result[index - offset] = string[index];
  229.         index++;
  230.     }
  231.     result[index - offset] = EOS;
  232.     return result;
  233. }
  234. //------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment