Advertisement
kenon125

Tutorial pawno iniciante by:ZeuS

Nov 24th, 2011
896
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.39 KB | None | 0 0
  1. Introdução (Definição a Linguagem)
  2. Pawn é uma linguagem de programação de código aberto e de terceira geração, criada em 1998 pela empresa CompuPhase
  3. Pawn é uma linguagem de programação compilável, ou seja, o seu código é transformado para linguagem de computador, que somente o intérprete da linguagem consegue entender. O intérprete da linguagem, é a máquina virtual, onde o código passa a ser chamado de AMX. AMX é interpretado como na linguagem de programação Assembly, assim, podendo ser interpretado com outras linguagens de programação de terceira geração, como por exemplo, C++.
  4.  
  5. Fonte: Wikipédia
  6. Diretivas
  7.  
  8.     * [size=11pt]Includes e Defines
  9.  
  10. O Que São Includes?
  11. Bom Includes São arquivo *INC no quais são colocados para ocupar menos espaço ao GM e não declarar novas variaveis.
  12. Como Adicionar uma Includes?
  13. Bom Basta ao Topo do GM Adicionar:
  14. pawn Code:
  15.  
  16. #include <NOMEDAINCLUDE>
  17.  
  18. Ex:
  19. pawn Code:
  20.  
  21. #include <Dini>
  22.  
  23. Todo GM Deve Conter a Include "a_samp" pelo fato de ser a includes padrão que contém a básicas e principais funções
  24. Aqui as Funções da mesma:
  25. Quote:
  26. http://stephantom2.st.funpic.de/expe..._samp-inc.html
  27.  
  28.     * Defines
  29.  
  30. São Usadas para Definir algo a um código muito usado em cores etc..
  31. Exemplo:
  32. pawn Code:
  33.  
  34. #define COR_GAY 0x0000CDFF
  35.  
  36. Então Ira Definir a Cor Então ao Código Ficando:
  37. pawn Code:
  38.  
  39. SendClientMessage(playerid, COR_GAY, "Este é um Exemplo de mensagem");
  40.  
  41.     * News/Arrrays
  42.  
  43. :
  44. New como próprio nome já diz server para adicionar novas funções ao GM/FS exemplo:
  45. pawn Code:
  46.  
  47. new string[128];
  48.  
  49. Arrays também podem ser declaradas com grupos de dados padrão, tais como:
  50. pawn Code:
  51.  
  52. new numeros[4]= ( 0,1,2,3)
  53.  
  54.     * Boleans/Boleana
  55.  
  56. :
  57. O último tipo é variável "boolean". É muito simples - ou é "true", ou "falso". Tanto "1" e "0" são estruturas de dados pré-definidos.
  58. pawn Code:
  59.  
  60. new bool : xyz = true   / / Declara uma nova variável xyz "definido como verdadeiro
  61.  
  62. Exemplo em um SetTimer:
  63. pawn Code:
  64.  
  65. SetTimer("PUBLICADICIONAL",1000,false); //FALSE = FALSO ou Seja Não ira Repetir o SetTimer e TRUE = Verdadeiro Irá Repetir
  66.  
  67.    * CallBacks
  68.  
  69. :
  70. São as Chamadas Publics Cada uma tem uma função, Tais Como
  71. OnPlayerCommandText -> Ao Player Digitar Comando
  72. OnPlayerText -> Ao Player Digitar
  73. Todas CallBacks Deve Seguir o Modelo:
  74. pawn Code:
  75.  
  76. public OnGameModeInit
  77. {//DEVERÁ SER ABERTO
  78. //CÓDIGOS E FUNÇÕES QUE IRÁ ADICIONAR
  79.  return 1;//RETORNA A UMA FUNÇÃO ESPECIFICA true/false/1/0
  80. }//SE FOI ABERTO DEVE SER FECHADO
  81.  
  82.    * Alguma Funções do a_samp
  83.  
  84. :
  85. pawn Code:
  86.  
  87. Print Escrever Texto ao Console
  88. printf Escrever uam string ao console (tela preta)
  89. SendClientMessage Envia Mensagem ao Player
  90. SendClientMessageToAll Envia Mensagem a Todo players Spawneados
  91. GameTextForAll Envia Mensagem ao centro da tela a Todos players Spawneados
  92. GameTextForPlayer Envia Mensagem ao centro da tela apenas a 1 player
  93. SetTimer Iniciar um Temporarizado que chama um public a numero de segundos...
  94. KillTimer Parara o Temporazidaor
  95. GetTickCount Retorna o número de milissegundos desde a OS foi iniciado.
  96. SetGameModeText Mudará o Nome de GameMode
  97. SetTeamCount Define o número de equipes permitido.
  98. AddPlayerClass Adicionara um Class ao player Onde Spawnara por padrão Incluindo armas
  99. AddStaticVehicle Adicionar um Veiculo estaticos Definindo as Cores
  100. AddStaticPickup Adicionar um Pikcup estaticos Definindo os Medelos
  101. ShowNameTags Define se será mostrado o nome do player encima
  102. ShowPlayerMarkers Definir se os jogadores marcadores (no mapa/radar) deve ser mostrado ou não.
  103. GameModeExit Sair do modo de jogo
  104. SetWorldTime Acerte o relógio do jogo a um certo tempo e congelá-lo.
  105. GetWeaponName Pegar Nomes
  106. IsPlayerAdmin Define se admin ou nao
  107. Kick Kickar Player
  108. Ban Banir player
  109. SetSpawnInfo
  110. SpawnPlayer Define alguns parâmetros spawn (incluindo a equipe, a pele, gerando posição, armas e munições)
  111. SetPlayerTeam Define a Equipe do Player
  112. GetPlayerTeam Geta/Pega a equipe do Player
  113. SetPlayerSkin Muda Skin do player
  114. SetPlayerScore Muda Scoredo player
  115. GetPlayerScore Geta Score do Player
  116. GetPlayerPos Geta Posição do Playe
  117. SetPlayerPos Muda Posição do Player do player
  118. GetPlayerHealth Geta Vida do Player
  119. SetPlayerHealth Muda Vida do player
  120. PutPlayerInVehicle Coloque Player no Veiculo
  121. RemovePlayerFromVehicle Remove Player do Veiculo
  122. IsPlayerInVehicle Determina se um jogador está em um determinado veículo.
  123. IsPlayerInAnyVehicle Determina se um jogador está em qualquer veículo.
  124. GetPlayerName Obter o nome de um jogador do seu ID e armazená-lo em nome de [].
  125. SetPlayerColor Muda Cor do Player
  126. GetPlayerColor geta cor do player
  127. SetPlayerCheckpoint Seta um Check Point a Player
  128. DisablePlayerCheckpoint Disbilita o Check Point ao player
  129. IsPlayerInCheckpoint Define se o player esta em um checkpoint
  130. SetPlayerInterior Muda Player para um interior
  131. SetPlayerCameraPos muda camera do player
  132. SetPlayerCameraLookAt muda visão da camera ao player
  133. TogglePlayerControllable Define se o player pode se mecher
  134. PlayerPlaySound Toca um som ao player
  135. SetPlayerWorldBounds Muda Player a um Virtual Word
  136. GivePlayerMoney dá dinheiro ao player
  137. SetPlayerFacingAngle Set o Angula da Face do player
  138. GetPlayerMoney getar Dinheiro do player
  139. ResetPlayerMoney Reseta Dinheiro do playera 0
  140. IsPlayerConnected Define se o player esta conectado
  141. GetPlayerState Geta Estado do Player
  142. ResetPlayerWeapons Reseta Armas do player
  143. GivePlayerWeapon dar arma ao player
  144. CreateVehicle criar um veiculo nao estatico
  145. GetVehiclePos geta pos do veiculo
  146. SetVehiclePos seta pos do veiculos
  147. SetVehicleZAngle seta angulo do veiculos
  148. SetVehicleParamsForPlayer seta parametros ao player do veiculos
  149. SetVehicleToRespawn respawn o veiculos
  150. AddVehicleComponent adiciona componentes ao veiculos
  151. ChangeVehicleColor mudar cor do veiculo
  152. ChangeVehiclePaintjob Alterar o paintjob sobre um determinado veículo.
  153. Forwards Declarar CallBacks (publics) Adicionais
  154. OnGameModeInit ao gamemode iniciar
  155. OnGameModeExit ao gamemode desligar
  156. OnFilterScriptInit ao fs iniciar
  157. OnPlayerConnect ao player conectar
  158. OnPlayerDisconnect ao player desconectar
  159. OnPlayerSpawn ao player spawnar
  160. OnPlayerDeath ao player morrer
  161. OnVehicleSpawn ao player spawnar
  162. OnPlayerText ao player digitar
  163. OnPlayerCommandText ao player digitar comando
  164. OnPlayerEnterVehicle ao player entrar no veiculo
  165. OnPlayerExitVehicle ao player sair do veiculo
  166. OnPlayerStateChange ao player mudar de estado
  167. OnPlayerEnterCheckpoint ao player entrar ao check point
  168. OnPlayerLeaveCheckpoint
  169.  
  170.    * Comparadores
  171.  
  172. :
  173. Quote:
  174. + > Executa como Adição.
  175.  
  176. - > Executa como Subtração.
  177.  
  178. * -- > Executa como Multiplicação.
  179.  
  180. / -- > Executa como Divisão.
  181.  
  182. > -- > Executa como Maior que.
  183.  
  184. < -- > Executa como Menor que.
  185.  
  186. = --> Executa como Igual.
  187.  
  188. != -- > Executa como Diferente.
  189. Parte 2
  190.  
  191. Bom, qualquer um que possui um conhecimento um pouco superior, sabe que é fundamental conhecer os algorítimos da linguagem com qual trabalha para que o seu conhecimento vá além e evolua cada dia mais. Abaixo vou deichar os algorítimos que são utilizados em quase 100% das linguagens derivadas de C/C++ e que irá ajudar bastante a galerinha iniciante aí :P
  192.  
  193.  
  194. + > Executa como Adição.
  195.  
  196. - > Executa como Subtração.
  197.  
  198. * > Executa como Multiplicação.
  199.  
  200. / > Executa como Divisão.
  201.  
  202. > > Executa como Maior que.
  203.  
  204. < > Executa como Menor que.
  205.  
  206. = > Executa como Igual.
  207.  
  208. != > Executa como Diferente.
  209.  
  210.  
  211. Listei aqui os principais utilizados no Pawn. Os demais existentes não são necessários, já que são para funções realmente complexas, o que praticamente não é utilizado no SAMP.
  212.  
  213.  
  214.  
  215. TUTORIAL
  216.  
  217.  
  218.  
  219. Como eu somo 2 valores?
  220.  
  221.  
  222. pawn Code:
  223.  
  224. format(string, 128, "Esse jogador executou o OnPlayerDeath %d vezes.", (Kills[playerid] + Deaths[playerid]));
  225.  
  226. SendClientMessage(playerid, 0xFFFFFFFF, string);
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233. Como eu subtraio 2 valores?
  234.  
  235.  
  236. pawn Code:
  237.  
  238. format(string, 128, "Esse jogador tem uma relação de %d Kills/Deaths.", (Kills[playerid] - Deaths[playerid]));
  239.  
  240. SendClientMessage(playerid, 0xFFFFFFFF, string);
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247. Como eu multiplico 2 valores?
  248.  
  249.  
  250. pawn Code:
  251.  
  252. format(string, 128, "Esse jogador gastou $%d comprando Tickts.", (TicktsPrice * Tickts[playerid]));
  253.  
  254. SendClientMessage(playerid, 0xFFFFFFFF, string);
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261. Como eu divido 2 valores?
  262.  
  263.  
  264. pawn Code:
  265.  
  266. format(string, 128, "Com o dinheiro que tem em mãos, você pode comprar %d Tickts.", (Money[playerid] / TicktsPrice));
  267.  
  268. SendClientMessage(playerid, 0xFFFFFFFF, string);
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275. Como eu verifico se um valor é maior que o outro?
  276.  
  277.  
  278. pawn Code:
  279.  
  280. if(TicktPrice > Grana[playerid])
  281. {
  282.  SendClientMessage(playerid, 0xFFFFFFFF, "Você não possui dinheiro suficiente.");
  283.  
  284.  return 1;
  285. }
  286.  
  287.  
  288.  
  289.  
  290.  
  291. Como eu verifico se um valor é menor que o outro?
  292.  
  293.  
  294. pawn Code:
  295.  
  296. if(TicktPrice < Grana[playerid])
  297. {
  298.  SendClientMessage(playerid, 0xFFFFFFFF, "Você tem dinheiro para comprar e ainda sobra um trocado para um doce ^^");
  299.  
  300.  return 1;
  301. }
  302.  
  303.  
  304.  
  305.  
  306.  
  307. // Entendendo:
  308.  
  309.  
  310. Quando feito a checagem TicktPrice < Grana[playerid] você está verificando se o valor do Tickt é inferior ao dinheiro atual do jogador, que em nosso caso consideramos como 1000. Então se considerarmos que o dinheiro do jogador é 1000 e o valor do Ticket é 500, no script o If terá concordância e a execução seguirá em frente. Caso contrário ele irá continuar a execução depois da chave ( } ) onde o If é finalizado.
  311.  
  312.  
  313. Agora vamos imaginar que a função está assim:
  314.  
  315.  
  316.  
  317. pawn Code:
  318.  
  319. if(TicktPrice <= Grana[playerid])
  320. {
  321.  SendClientMessage(playerid, 0xFFFFFFFF, "Você tem dinheiro para comprar e ainda sobra um trocado para um doce ^^");
  322.  
  323.  return 1;
  324. }
  325.  
  326.  
  327.  
  328. Consideramos agora que o preço do Ticket é de $1000 e o dinheiro que o jogador pussui em mãos é $999. O If será executado mas não obterá concordância, pois está sendo verificado se o preço do Ticket (1000) é menor ou igual que a quantia em dinheiro que o jogador tem. Como ele possui $999 não há sucesso na concordância. Para que haja, é necessário que o jogador tenha em mãos uma quantia equivalente a $1000 ou mais (daí vem o "menor ou igual").
  329.  
  330.  
  331.  
  332.  
  333.  
  334. Como eu igualo duas variáveis?
  335.  
  336.  
  337. pawn Code:
  338.  
  339. new MinhaIdade;
  340.  
  341. MinhaIdade = SuaIdade;
  342.  
  343.  
  344.  
  345.  
  346. // Entendendo:
  347.  
  348.  
  349. Acabamos de criar a variável simples chamada MinhaIdade. Depois disso ela foi igualada com a outra variável simples já criada chamada SuaIdade. Sendo assim, considerando que a variável MinhaIdade tivesse valor 0 e a SuaIdade tivesse valor de 5, ambas variáveis teriam o mesmo valor depois da igualação (5).
  350.  
  351. >> Em caso de Ifs:
  352.  
  353. Para utilizar a igualação em um If, ou melhor, a checagem de igualação, usa-se 2 símbolos, assim:
  354.  
  355. pawn Code:
  356.  
  357. if(MinhaIdade == SuaIdade)
  358. {
  359.  printf("Somos da mesma idade ^^");
  360. }
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367. Como verifico a diferença entre 2 valores?
  368.  
  369.  
  370. pawn Code:
  371.  
  372. new MinhaIdade;
  373.  
  374. if(MinhaIdade != SuaIdade)
  375. {
  376.  printf("Sua idade é diferente da minha ^^");
  377. }
  378.  
  379.  
  380.  
  381.  
  382. // Entendendo:
  383.  
  384.  
  385. Acabamos de criar a variável simples chamada MinhaIdade. Depois disso verifiquemos através de um If a outra variável simples já criada chamada SuaIdade. Sendo assim, considerando que a variável MinhaIdade tivesse valor 0 e a SuaIdade tivesse valor de 5, as mesmas não teriam o mesmo valor, o If nao obteria concordância e a execução do código continuaria depois da chave ({) onde ele é finalizado.
  386.  
  387.  
  388.  
  389.  
  390.  
  391. SESSÃO 02
  392.  
  393.  
  394. Agora vou ensinar algo um pouco mais complicado, um Loop:
  395.  
  396.  
  397. pawn Code:
  398.  
  399. for(new Lp = 0; Lp < 100; Lp ++)
  400. {
  401. }
  402.  
  403.  
  404. Criamos aqui o nosso Loop. Na primeira parte (new Lp = 0;) definimos a nossa variável que será utilizada no Loop e setamos o seu valor para 0, para evitar futuros bugs (as variáveis por padrão quando criadas são automaticamente definidas para valor 0 (nulo), mas como eu disse: "para evitar futuros bugs" estaremos setando-a para 0 novamente).
  405.  
  406. Na segunda parte (Lp < 100;) estamos definindo que o Loop será executado até que a variável Lp tenha valor 99, ou seja: menor que 100.
  407.  
  408. E na terceira parte, por fim, estamos definindo que a variável Lp terá seu valor adicionado de 1 (uma) unidade de valor, cada vez que o Loop for executado (e assim ter seu valor aumentando até que chegue em 99, aonde a função "Lp < 100;" coordena).
  409.  
  410.  
  411.  
  412. Agora vamos embutir esse Loop em uma função simples, que tem como objetivo verificar por intermédio de uma array (array é qualquer variável que possua 2 ou mais valores ao mesmo tempo) se a arma que um jogador tem em mãos, caso ela seja definida como "proibida" ele será Kickado:
  413.  
  414.  
  415. pawn Code:
  416.  
  417. new ArmasProibidas[2] = {
  418.  
  419.  36,
  420.  
  421.  38
  422. };
  423.  
  424.  
  425. for(new Lp = 0; Lp < sizeof(ArmasProibidas); Lp ++)
  426. {
  427.  if(GetPlayerWeapon(playerid) == ArmasProibidas[Lp])
  428.  {  
  429.     Kick(playerid);
  430.  }
  431. }
  432.  
  433.  
  434.  
  435.  
  436. // Entendendo:
  437.  
  438. Utilizamos o Loop para verificar todas as armas listadas na array ArmasProibidas. Na definição onde define-se o tamanho do Loop, isto é, quantas vezes ele será executada coloquemos sizeof(ArmasProibidas) para que assim o compilador substitua isso pelo tamanho da array, neste caso, 2.
  439.  
  440. Depois disso utilizemos a função GetPlayerWeapon para verificar se a arma que aquele jogador tinha em mãos era um das quais estavam presentes na array. Caso esse If obtenha concordância o jogador será automaticamente Kickado.
  441.  
  442.  
  443.  
  444.  
  445.  
  446. Dúvidas e Comentários são bem vindos Tutoriais BY:ZeuS
  447. Assecem http://lidersamp.blogspot.com/ para aprenderem mais e terem ajuda online...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement