Advertisement
Guest User

Sistema de Cancela

a guest
Jun 27th, 2011
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | None | 0 0
  1. /* Dr_Pawno
  2. *
  3. * Sistema de Cancelas 1.0
  4. *
  5. */
  6.  
  7. #include <a_samp>
  8.  
  9. #define CANCELA_MAXIMO 10
  10.  
  11. #define ERRO_NUMERO_MAXIMO 0
  12. #define ERRO_CANCELA_CRIADA 1
  13. #define ERRO_CANCELA_NAO_CRIADA 2
  14. #define ERRO_CANCELA_ABERTA 3
  15. #define ERRO_CANCELA_FECHADA 4
  16. #define ERRO_CANCELA_ABRINOUFECHAN 5
  17. // |_ Abrindo ou Fechando
  18.  
  19. /*
  20. native CriarCancela(cancelaid, Float:x, Float:y, Float:z, Float:a)
  21. native AbrirCancela(cancelaid, bool:Fechar)
  22. native FecharCancela(cancelaid)
  23. native CancelaAberta(cancelaid)
  24. native CancelaAbrindoOuFechando(cancelaid)
  25. native ObjetoCancela(cancelaid)
  26. native DestruirCancela(cancelaid)
  27. */
  28.  
  29. enum Cancela
  30. {
  31. c_Objeto,
  32. bool:c_Aberta,
  33. bool:c_AbrindoOuFechando,
  34. bool:c_Criada,
  35. Float:c_X,
  36. Float:c_Y,
  37. Float:c_Z,
  38. Float:c_A,
  39. c_R,
  40. c_T
  41. }
  42.  
  43. new c_Cancela[CANCELA_MAXIMO][Cancela];
  44.  
  45. forward AbrirCancela_Timer(cancelaid);
  46. forward FecharCancela_Timer(cancelaid);
  47. forward EsperarParaFechar_Timer(cancelaid);
  48.  
  49. stock CriarCancela(cancelaid, Float:x, Float:y, Float:z, Float:a)
  50. {
  51. if(cancelaid > CANCELA_MAXIMO-1) return CancelaErro(ERRO_NUMERO_MAXIMO, cancelaid, "ID Invalido");
  52. if(c_Cancela[cancelaid][c_Criada]) return CancelaErro(ERRO_CANCELA_CRIADA, cancelaid, "Já Criada");
  53.  
  54. c_Cancela[cancelaid][c_Aberta] = false;
  55. c_Cancela[cancelaid][c_AbrindoOuFechando] = false;
  56. c_Cancela[cancelaid][c_Criada] = true;
  57. c_Cancela[cancelaid][c_X] = x;
  58. c_Cancela[cancelaid][c_Y] = y;
  59. c_Cancela[cancelaid][c_Z] = z;
  60. c_Cancela[cancelaid][c_A] = a;
  61. c_Cancela[cancelaid][c_R] = 0;
  62. c_Cancela[cancelaid][c_Objeto] = CreateObject(968, x, y, z, 0.0, 270.0, a);
  63. return c_Cancela[cancelaid][c_Objeto];
  64. }
  65.  
  66. stock AbrirCancela(cancelaid, bool:Fechar)
  67. {
  68. if(cancelaid > CANCELA_MAXIMO-1) return CancelaErro(ERRO_NUMERO_MAXIMO, cancelaid, "ID Invalido");
  69. if(!c_Cancela[cancelaid][c_Criada]) return CancelaErro(ERRO_CANCELA_NAO_CRIADA, cancelaid, "Não Criada");
  70. if(c_Cancela[cancelaid][c_Aberta]) return CancelaErro(ERRO_CANCELA_ABERTA, cancelaid, "Já Aberta");
  71. if(c_Cancela[cancelaid][c_AbrindoOuFechando]) return CancelaErro(ERRO_CANCELA_ABRINOUFECHAN, cancelaid, "Já esta Abrindo/Fechando");
  72.  
  73. c_Cancela[cancelaid][c_AbrindoOuFechando] = true;
  74. c_Cancela[cancelaid][c_T] = SetTimerEx("AbrirCancela_Timer", 10, true, "i", cancelaid);
  75. if(Fechar) SetTimerEx("EsperarParaFechar_Timer", 90*10+4000, false, "i", cancelaid); // 90 * 10 = 900 + 4000 = 4900 = 5 seg
  76. return true;
  77. }
  78.  
  79. stock FecharCancela(cancelaid)
  80. {
  81. if(cancelaid > CANCELA_MAXIMO-1) return CancelaErro(ERRO_NUMERO_MAXIMO, cancelaid, "ID Invalido");
  82. if(!c_Cancela[cancelaid][c_Criada]) return CancelaErro(ERRO_CANCELA_NAO_CRIADA, cancelaid, "Não Criada");
  83. if(!c_Cancela[cancelaid][c_Aberta]) return CancelaErro(ERRO_CANCELA_FECHADA, cancelaid, "Já Aberta");
  84. if(c_Cancela[cancelaid][c_AbrindoOuFechando]) return CancelaErro(ERRO_CANCELA_ABRINOUFECHAN, cancelaid, "Já esta Abrindo/Fechando");
  85.  
  86. c_Cancela[cancelaid][c_AbrindoOuFechando] = true;
  87. c_Cancela[cancelaid][c_T] = SetTimerEx("FecharCancela_Timer", 10, true, "i", cancelaid);
  88. return true;
  89. }
  90.  
  91. stock CancelaAberta(cancelaid)
  92. {
  93. if(cancelaid > CANCELA_MAXIMO-1) return false;
  94. if(!c_Cancela[cancelaid][c_Criada]) return false;
  95. return c_Cancela[cancelaid][c_Aberta];
  96. }
  97.  
  98. stock CancelaAbrindoOuFechando(cancelaid)
  99. {
  100. if(cancelaid > CANCELA_MAXIMO-1) return false;
  101. if(!c_Cancela[cancelaid][c_Criada]) return false;
  102. return c_Cancela[cancelaid][c_AbrindoOuFechando];
  103. }
  104.  
  105. stock ObjetoCancela(cancelaid)
  106. {
  107. if(cancelaid > CANCELA_MAXIMO-1) return false;
  108. if(!c_Cancela[cancelaid][c_Criada]) return false;
  109. return c_Cancela[cancelaid][c_Objeto];
  110. }
  111.  
  112. stock DestruirCancela(cancelaid)
  113. {
  114. c_Cancela[cancelaid][c_Aberta] = false;
  115. c_Cancela[cancelaid][c_AbrindoOuFechando] = false;
  116. c_Cancela[cancelaid][c_Criada] = false;
  117. c_Cancela[cancelaid][c_X] = 0.0;
  118. c_Cancela[cancelaid][c_Y] = 0.0;
  119. c_Cancela[cancelaid][c_Z] = 0.0;
  120. c_Cancela[cancelaid][c_A] = 0.0;
  121. c_Cancela[cancelaid][c_R] = 0;
  122. c_Cancela[cancelaid][c_Objeto] = INVALID_OBJECT_ID;
  123. KillTimer(c_Cancela[cancelaid][c_T]);
  124. return true
  125. }
  126.  
  127. stock CancelaErro(erro, cancelaid, descricao[])
  128. {
  129. return printf("Sistema de Cancela: Erro %d(%s) na cancela %d. Cheque o sistema.", erro, descricao, cancelaid);
  130. }
  131.  
  132. public AbrirCancela_Timer(cancelaid)
  133. {
  134. new Float:c_RX, Float:c_RY, Float:c_RZ;
  135. c_Cancela[cancelaid][c_R]++;
  136. GetObjectRot(c_Cancela[cancelaid][c_Objeto], c_RX, c_RY, c_RZ);
  137. SetObjectRot(c_Cancela[cancelaid][c_Objeto], c_RX, c_RY+1, c_RZ);
  138. if(c_Cancela[cancelaid][c_R] != 90) return true;
  139. KillTimer(c_Cancela[cancelaid][c_T]);
  140. c_Cancela[cancelaid][c_AbrindoOuFechando] = false;
  141. c_Cancela[cancelaid][c_R] = 0;
  142. c_Cancela[cancelaid][c_Aberta] = true;
  143. return true;
  144. }
  145.  
  146. public FecharCancela_Timer(cancelaid)
  147. {
  148. new Float:c_RX, Float:c_RY, Float:c_RZ;
  149. c_Cancela[cancelaid][c_R]++;
  150. GetObjectRot(c_Cancela[cancelaid][c_Objeto], c_RX, c_RY, c_RZ);
  151. SetObjectRot(c_Cancela[cancelaid][c_Objeto], c_RX, c_RY-1, c_RZ);
  152. if(c_Cancela[cancelaid][c_R] != 90) return true;
  153. KillTimer(c_Cancela[cancelaid][c_T]);
  154. c_Cancela[cancelaid][c_AbrindoOuFechando] = false;
  155. c_Cancela[cancelaid][c_R] = 0;
  156. c_Cancela[cancelaid][c_Aberta] = false;
  157. return true;
  158. }
  159.  
  160. public EsperarParaFechar_Timer(cancelaid)
  161. {
  162. FecharCancela(cancelaid);
  163. return true;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement