toribio

toribio

Aug 24th, 2009
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.40 KB | None | 0 0
  1. /*
  2.  * Skin selection by Flávio Toribio
  3.  * http://www.orkut.com.br/Main#Community.aspx?cmm=38308205
  4. **/
  5.  
  6. #include <a_samp>
  7. #include <dini>
  8.  
  9. // <config>
  10. #define SKIN_FREE           false   //false = tem que pagar; true = não precisa pagar
  11. #define MALE_SKIN_PRICE     1000000 //preço da skin masculina
  12. #define FEMALE_SKIN_PRICE   2000000 //preço da skin feminina
  13. // </config>
  14.  
  15. #if MALE_SKIN_PRICE < 0
  16.     #undef MALE_SKIN_PRICE
  17.     #define MALE_SKIN_PRICE 0
  18. #endif
  19.  
  20. #if FEMALE_SKIN_PRICE < 0
  21.     #undef FEMALE_SKIN_PRICE
  22.     #define FEMALE_SKIN_PRICE 0
  23. #endif
  24.  
  25. #define ZerarSkinSelection(%1); \
  26.     inskin[%1] = 0; \
  27.     cuskin[%1] = 0; \
  28.     ltskin[%1] = 0; \
  29.     skindt[%1][p_s_x] = 0.0; \
  30.     skindt[%1][p_s_y] = 0.0; \
  31.     skindt[%1][p_s_z] = 0.0; \
  32.     skindt[%1][p_s_a] = 0.0; \
  33.     skindt[%1][p_s_interior] = 0; \
  34.     skindt[%1][p_s_skin] = 0;
  35.  
  36. forward bool:IsSkinFemale(skinid);
  37. forward bool:IsInvalidSkin(skinid);
  38.  
  39. new inskin[MAX_PLAYERS];
  40. new cuskin[MAX_PLAYERS];
  41. new ltskin[MAX_PLAYERS];
  42.  
  43. enum p_s_data
  44. {
  45.     Float:p_s_x,
  46.     Float:p_s_y,
  47.     Float:p_s_z,
  48.     Float:p_s_a,
  49.     p_s_interior,
  50.     p_s_world,
  51.     p_s_skin
  52. }
  53.  
  54. new skindt[MAX_PLAYERS][p_s_data];
  55.  
  56. public OnFilterScriptInit()
  57. {
  58.     if(!dini_Exists("skins.ini"))
  59.         dini_Create("skins.ini");
  60.     printf("Filterscript de selecao de skins by Flavio Toribio carregado.");
  61.     return 1;
  62. }
  63.  
  64. public OnPlayerCommandText(playerid, cmdtext[])
  65. {
  66.     if(!strcmp(cmdtext, "/skin", true))
  67.     {
  68.         if(!inskin[playerid])
  69.         {
  70.             GetPlayerPos(playerid, skindt[playerid][p_s_x], skindt[playerid][p_s_y], skindt[playerid][p_s_z]);
  71.             GetPlayerFacingAngle(playerid, skindt[playerid][p_s_a]);
  72.             skindt[playerid][p_s_interior] = GetPlayerInterior(playerid);
  73.             skindt[playerid][p_s_world] = GetPlayerVirtualWorld(playerid);
  74.             skindt[playerid][p_s_skin] = GetPlayerSkin(playerid);
  75.             cuskin[playerid] = GetPlayerSkin(playerid);
  76.             SetPlayerInterior(playerid, 14);
  77.             SetPlayerPos(playerid, 258.5, -41.4, 1002.0);
  78.             SetPlayerFacingAngle(playerid, -270.0);
  79.             SetPlayerCameraPos(playerid, 256.1, -43.0, 1004.0);
  80.             SetPlayerCameraLookAt(playerid, 258.5, -41.4, 1002.0);
  81.             TogglePlayerControllable(playerid, 0);
  82.             SetPlayerVirtualWorld(playerid, playerid + 56);
  83.             inskin[playerid] = 1;
  84.             SendClientMessage(playerid, 0xFFF000AA, "Escolha de skin:");
  85.             #if SKIN_FREE == true
  86.                 SendClientMessage(playerid, 0xFFFFFFAA, "Pressione as setas para alternar entre as skins. Use SHIFT (Tecla Pular) para obter a skin");
  87.                 SendClientMessage(playerid, 0xFFFFFFAA, "Ou ENTER (Etrar Veículo) para sair.");
  88.             #else
  89.                 SendClientMessage(playerid, 0xFFFFFFAA, "Pressione as setas para alternar entre as skins. Use SHIFT (Tecla Pular) para comprar a skin");
  90.                 SendClientMessage(playerid, 0xFFFFFFAA, "Ou ENTER (Etrar Veículo) para sair. Skins masculinas: $" #MALE_SKIN_PRICE ", femininas: $" #FEMALE_SKIN_PRICE);
  91.             #endif
  92.             SendClientMessage(playerid, 0xFFFFFFAA, "Caso você queira voltar a nascer com a skin normal, use /skinnormal");
  93.         } else {
  94.             SendClientMessage(playerid, 0xFF0000AA, "Calma, você já está na seleção de skins.");
  95.         }
  96.         return 1;
  97.     }
  98.    
  99.     if(!strcmp(cmdtext, "/skinnormal", true))
  100.     {
  101.         new pname[MAX_PLAYER_NAME];
  102.         GetPlayerName(playerid, pname, sizeof pname);
  103.         if(dini_Isset("skins.ini", pname))
  104.         {
  105.             dini_Unset("skins.ini", pname);
  106.             SendClientMessage(playerid, 0xFFF000AA, "Skin voltada ao normal.");
  107.             SpawnPlayer(playerid);
  108.         } else {
  109.             SendClientMessage(playerid, 0xFF0000AA, "Você já está com a skin normal.");
  110.         }
  111.     }
  112.     return 0;
  113. }
  114.  
  115. public OnPlayerUpdate(playerid)
  116. {
  117.     if(inskin[playerid])
  118.     {
  119.         new keys, updown, leftright, string[128];
  120.  
  121.         GetPlayerKeys(playerid, keys, updown, leftright);
  122.  
  123.         if(leftright == KEY_RIGHT)
  124.         {
  125.             cuskin[playerid] = cuskin[playerid] == 299 ? 0 : cuskin[playerid] + 1;
  126.             while(IsInvalidSkin(cuskin[playerid])) cuskin[playerid]++;
  127.         }
  128.         if(leftright == KEY_LEFT)
  129.         {
  130.             cuskin[playerid] = cuskin[playerid] == 0 ? 299 : cuskin[playerid] - 1;
  131.             while(IsInvalidSkin(cuskin[playerid])) cuskin[playerid]--;
  132.         }
  133.  
  134.         if(ltskin[playerid] != cuskin[playerid]) SetPlayerSkin(playerid, cuskin[playerid]);
  135.         format(string, sizeof string, "~n~~n~~n~~n~~n~~n~~n~~w~Skin: %3d", cuskin[playerid]);
  136.         GameTextForPlayer(playerid, string, 2000, 3);
  137.         ltskin[playerid] = cuskin[playerid];
  138.  
  139.         if(keys == KEY_JUMP)
  140.         {
  141.             #if SKIN_FREE == false
  142.                 if((IsSkinFemale(cuskin[playerid]) && GetPlayerMoney(playerid) < FEMALE_SKIN_PRICE) ||
  143.                     (!IsSkinFemale(cuskin[playerid]) && GetPlayerMoney(playerid) < MALE_SKIN_PRICE))
  144.                 {
  145.                     SendClientMessage(playerid, 0xFF0000AA, "Você não tem dinheiro suficiente! Skin masculino: $" #MALE_SKIN_PRICE ", feminina: $" #FEMALE_SKIN_PRICE);
  146.                     SendClientMessage(playerid, 0xFFF000AA, "Pressione ENTER para sair da escolha de skin.");
  147.                     return 1;
  148.                 }
  149.                 GivePlayerMoney(playerid, ((IsSkinFemale(cuskin[playerid])) ? (-FEMALE_SKIN_PRICE) : (-MALE_SKIN_PRICE)));
  150.             #endif
  151.             TogglePlayerControllable(playerid, 1);
  152.             SetCameraBehindPlayer(playerid);
  153.             SetPlayerInterior(playerid, 0);
  154.             SetPlayerVirtualWorld(playerid, skindt[playerid][p_s_world]);
  155.  
  156.             new pname[MAX_PLAYER_NAME];
  157.             GetPlayerName(playerid, pname, sizeof pname);
  158.             dini_IntSet("skins.ini", pname, cuskin[playerid]);
  159.  
  160.             SpawnPlayer(playerid);
  161.             #if SKIN_FREE == true
  162.                 SendClientMessage(playerid, 0x000FFFAA, "Skin selecionada. Agora você sempre nascerá com ela.");
  163.             #else
  164.                 format(string, sizeof string, "Você comprou sua skin por $%d, agora você sempre nascerá com ela.", IsSkinFemale(cuskin[playerid]) ? FEMALE_SKIN_PRICE : MALE_SKIN_PRICE);
  165.                 SendClientMessage(playerid, 0x000FFFAA, string);
  166.             #endif
  167.             inskin[playerid] = 0;
  168.         }
  169.         else if(keys == KEY_SECONDARY_ATTACK)
  170.         {
  171.             SetPlayerPos(playerid, skindt[playerid][p_s_x], skindt[playerid][p_s_y], skindt[playerid][p_s_z]);
  172.             SetPlayerFacingAngle(playerid, skindt[playerid][p_s_a]);
  173.             SetPlayerInterior(playerid, skindt[playerid][p_s_interior]);
  174.             SetPlayerVirtualWorld(playerid, skindt[playerid][p_s_world]);
  175.             SetPlayerSkin(playerid, skindt[playerid][p_s_skin]);
  176.             TogglePlayerControllable(playerid, 1);
  177.             SetCameraBehindPlayer(playerid);
  178.             ZerarSkinSelection(playerid);
  179.             SendClientMessage(playerid, 0xFFF000AA, "Escolha de skin cancelada.");
  180.         }
  181.     }
  182.     return 1;
  183. }
  184.  
  185. public OnPlayerSpawn(playerid)
  186. {
  187.     new pname[MAX_PLAYER_NAME];
  188.     ZerarSkinSelection(playerid);
  189.     GetPlayerName(playerid, pname, sizeof pname);
  190.     if(dini_Isset("skins.ini", pname))
  191.         SetPlayerSkin(playerid, dini_Int("skins.ini", pname));
  192.     return 1;
  193. }
  194.  
  195. public OnPlayerDisconnect(playerid, reason)
  196. {
  197.     ZerarSkinSelection(playerid);
  198.     return 1;
  199. }
  200.  
  201. public OnPlayerDeath(playerid, killerid, reason)
  202. {
  203.     ZerarSkinSelection(playerid);
  204.     return 1;
  205. }
  206.  
  207. stock bool:IsSkinFemale(skinid)
  208. {
  209.     static skins[] = {
  210.         9,  10, 11, 12, 13, 31, 39, 40, 41, 54,
  211.         55, 56, 63, 64, 69, 75, 76, 77, 85, 86,
  212.         87, 88, 89, 90, 92, 93, 129, 130,  131,
  213.         138, 140, 141, 145, 148, 150, 151, 152,
  214.         157, 169, 172, 178, 190, 191, 192, 193,
  215.         194, 195, 196, 197, 198, 199, 201, 205,
  216.         207, 211, 214, 215, 216, 218, 219, 224,
  217.         225, 226, 231, 232, 233, 237, 238, 243,
  218.         244, 245, 246, 251, 256, 257, 263, 298
  219.     };
  220.     for(new i = 0; i < sizeof skins; i++)
  221.         if(skinid == skins[i])
  222.             return true;
  223.     return false;
  224. }
  225.  
  226. stock bool:IsInvalidSkin(skinid)
  227. {
  228.     static skins[] = {
  229.         3, 4, 5, 6, 8, 42,  65, 74,
  230.         86, 119, 149, 208, 273, 289
  231.     };
  232.     for(new i = 0; i < sizeof skins; i++)
  233.         if(skinid == skins[i])
  234.             return true;
  235.     return false;
  236. }
Add Comment
Please, Sign In to add comment