Advertisement
ipsBruno

(C++) INPC

Oct 22nd, 2013
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.86 KB | None | 0 0
  1. /*
  2.  * Desenvolvimento de INPC
  3.  * Por Bruno da Silva
  4.  *
  5.  * Baseado no projeto RNPC de Mauzen, e Procedural .rec Generator de Joe Staff
  6.  *
  7. */
  8.  
  9. #include <cstdlib>
  10. #include <iostream>
  11. #include <stdio.h>
  12. #include <cmath>
  13.  
  14. using namespace std;
  15.  
  16. #define sendeg(a)                                          todeg(sin (a))
  17.  
  18. #define cosdeg(a)                                          todeg(cos (a))
  19.  
  20. #define PI 3.14159265
  21.  
  22. #define pow2(a)                                            ((a) * (a))
  23.  
  24. #define distance(aa,ab,ac,ba,bb,bc)                        sqrt(pow2(aa - ba) + pow2(ab - bb) + pow2(ac - bc))
  25.  
  26.  
  27.      
  28.  
  29. void EscreverRota(char * c, int tempo, short leftright, short updown, short addkey, float x, float y, float z, float wq, float zq, int vida, int colete, int armaid, int acao, float velocidadex, float velocidadey, float velocidadez, float surfx, float surfy, float surfz, short surfid, short animeid, short animeidx) {
  30.  
  31.  
  32.     c[0] = (tempo & 0x000000FF);
  33.     c[1] = (tempo & 0x0000FF00) >> 8;
  34.     c[2] = (tempo & 0x00FF0000) >> 16;
  35.     c[3] = (tempo & 0xFF000000) >> 24;
  36.  
  37.     c[4] = (leftright & 0x00FF);
  38.     c[5] = (leftright & 0xFF00) >> 8;
  39.  
  40.     c[6] = (updown & 0x00FF);
  41.     c[7] = (updown & 0xFF00) >> 8;
  42.  
  43.     c[8] = (addkey & 0x00FF);
  44.     c[9] = (addkey & 0xFF00) >> 8;
  45.  
  46.  
  47.     char * fstrx = (char*) &x;
  48.  
  49.     c[10] = fstrx[0];
  50.     c[11] = fstrx[1];
  51.     c[12] = fstrx[2];
  52.     c[13] = fstrx[3];
  53.  
  54.     char * fstry = (char*) &y;
  55.  
  56.     c[14] = fstry[0];
  57.     c[15] = fstry[1];
  58.     c[16] = fstry[2];
  59.     c[17] = fstry[3];
  60.  
  61.     char * fstrz = (char*) &z;
  62.  
  63.     c[18] = fstrz[0];
  64.     c[19] = fstrz[1];
  65.     c[20] = fstrz[2];
  66.     c[21] = fstrz[3];  
  67.  
  68.     char * fstrw = (char*) &wq;
  69.  
  70.     c[22] = fstrw[0];
  71.     c[23] = fstrw[1];
  72.     c[24] = fstrw[2];
  73.     c[25] = fstrw[3];
  74.     float null = 0.0;
  75.  
  76.     char * fstrn = (char*) &null;
  77.  
  78.     c[26] = fstrn[0];
  79.     c[27] = fstrn[1];
  80.     c[28] = fstrn[2];
  81.     c[29] = fstrn[3];  
  82.  
  83.     c[30] = fstrn[0];
  84.     c[31] = fstrn[1];
  85.     c[32] = fstrn[2];
  86.     c[33] = fstrn[3];
  87.  
  88.     char * fstrzq = (char*) &zq;    
  89.  
  90.     c[34] = fstrzq[0];
  91.     c[35] = fstrzq[1];
  92.     c[36] = fstrzq[2];
  93.     c[37] = fstrzq[3];  
  94.  
  95.     c[38] = vida;
  96.     c[39] = colete;      
  97.     c[40] = armaid;
  98.     c[41] = acao;
  99.  
  100.     char * fstrvx = (char*) &velocidadex;
  101.     c[42] = fstrvx[0];
  102.     c[43] = fstrvx[1];
  103.     c[44] = fstrvx[2];
  104.     c[45] = fstrvx[3];  
  105.  
  106.  
  107.     char * fstrvy = (char*) &velocidadey;
  108.     c[46] = fstrvy[0];
  109.     c[47] = fstrvy[1];
  110.     c[48] = fstrvy[2];
  111.     c[49] = fstrvy[3];  
  112.  
  113.     char * fstrvz = (char*) &velocidadez;
  114.     c[50] = fstrvz[0];
  115.     c[51] = fstrvz[1];
  116.     c[52] = fstrvz[2];
  117.     c[53] = fstrvz[3];  
  118.  
  119.     for(int i = 54; i <68; i++) c[i] = 0;
  120.  
  121.     c[68] = (animeid & 0x00FF);
  122.     c[69] = (animeid & 0xFF00) >> 8;
  123.     c[70] = (animeidx & 0x00FF);
  124.     c[71] = (animeidx & 0xFF00) >> 8;
  125.  
  126.  
  127.  
  128. }
  129.  
  130. int main(int argc, char *argv[])
  131. {      
  132.  
  133.     /////////// CONFIGURAÇÕES ///////////////////////////////////
  134.  
  135.     float FOOT_RATE = 130.0;
  136.  
  137.     float objetivoX = 2158.33;
  138.     float objetivoY = 1343.12;
  139.     float objetivoZ = 15.36;
  140.  
  141.     float origemX  = 1958.33;
  142.     float origemY = 1343.12;
  143.     float origemZ = 15.36;    
  144.  
  145.     float velocidade = 0.0015;    
  146.  
  147.     //////////////////////////////////////////////////
  148.  
  149.     float distancia = distance(origemX, origemY, origemZ, objetivoX, objetivoY, objetivoZ);
  150.  
  151.     float angulo =   (atan2(objetivoY - origemY,  objetivoX - origemX));
  152.  
  153.  
  154.     float tempo = distancia / velocidade ;
  155.  
  156.     float blocos =   tempo / FOOT_RATE  ;
  157.  
  158.     float velocidadeX =  cos(angulo) * velocidade;
  159.     float velocidadeY =  sin(angulo) * velocidade;
  160.  
  161.     float velocidadeZ =  0.0;
  162.  
  163.     angulo = (-angulo) / 0.01745329251 + 90.0F;
  164.  
  165.     float passosX  = (objetivoX - origemX) /  blocos;
  166.     float passosY  = (objetivoY - origemY) /  blocos;
  167.  
  168.     float passosZ  = (objetivoZ - origemZ) /  blocos;
  169.  
  170.  
  171.     angulo = angulo / 114.591559157;
  172.  
  173.     float x, y;
  174.     float wq = cos(angulo);      
  175.     float zq = sin(angulo);
  176.  
  177.     char header[8] = {
  178.         (char)
  179.         0xE8 ,
  180.         0x03 ,
  181.         0x00 ,
  182.         0x00 ,
  183.  
  184.         0x01 ,
  185.  
  186.         0x00 ,
  187.         0x00 ,
  188.         0x00
  189.     } ;
  190.  
  191.     FILE * npcFile = fopen("npc.rec", "wb");
  192.  
  193.  
  194.     fwrite(header, 1, 8, npcFile);
  195.  
  196.     float passoAtual = 0.0 ;
  197.  
  198.     tempo = tempo / blocos;
  199.  
  200.     int correr = velocidade > 0.0020 ? 0x00FF : 0xFFFF;
  201.  
  202.     if(blocos > 500) {
  203.         printf("ATENCAO. Arquivos maiores que 500 blocos podem não funcionar corretamente \n\nFaça seu NPC andar distancias mais curtas\n\n");
  204.  
  205.     }
  206.     while(blocos) {
  207.  
  208.         char script[73];
  209.  
  210.         float x = origemX + (passosX * passoAtual);
  211.         float y = origemY + (passosY * passoAtual);
  212.         float z = origemZ + (passosZ * passoAtual);
  213.  
  214.         int vida = 100;
  215.         int colete = 0;
  216.         int arma = 0;
  217.         int acao = 0;
  218.  
  219.  
  220.  
  221.         EscreverRota(script, (short)round(tempo * passoAtual), 0,  correr, 0, x, y, z, wq, zq, vida, colete, arma, acao, velocidadeX, velocidadeY, velocidadeZ,  0.0, 0.0,0.0, 0, 0, 0);
  222.  
  223.         passoAtual += 1.0;
  224.  
  225.         fwrite(script, 1, 72, npcFile);
  226.  
  227.  
  228.         if(passoAtual > blocos - 2) break;
  229.  
  230.     }
  231.  
  232.     fclose(npcFile);
  233.  
  234.  
  235.  
  236.  
  237.     system("PAUSE");
  238.  
  239.  
  240.     return EXIT_SUCCESS;
  241.  
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement