Guest User

3DText Tool (c) by Kaliber

a guest
May 2nd, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.34 KB | None | 0 0
  1. /* SA-MP 3DText Tool Filterscript
  2.  *
  3.  * © by Kaliber, 2014
  4.  *
  5.  */
  6. #include <a_samp>
  7. /******************************************************************************/
  8. #define INVALID 0
  9. #define MAX_LABELS 100
  10. #define e_Color 0xFFFFFFFF
  11. #define SCM SendClientMessage
  12. #define rot 0xFF6347AA
  13. #define blau 0x33CCFFAA
  14. /******************************************************************************/
  15. enum e_Label {
  16.     Text3D:e_ID,
  17.     Float:e_Pos[3],
  18.     e_Name[128]
  19. };
  20. static DB:Texts3D,LabelInfo[MAX_LABELS][e_Label];
  21. /******************************************************************************/
  22. public OnFilterScriptInit() return print("\t* 3DText Tool (c) by Kaliber loaded. *"),Texts3D=db_open("Texts3D.db"),db_free_result(db_query(Texts3D,"CREATE TABLE IF NOT EXISTS `3D` (`id`,`Name`,`PosX`,`PosY`,`PosZ`)")),Load3DText();
  23. public OnFilterScriptExit() return db_close(Texts3D);
  24. public OnPlayerCommandText(playerid,cmdtext[]) {
  25.     if(!strcmp(cmdtext,#/create3D,true)) return ShowPlayerDialog(playerid,569,DIALOG_STYLE_INPUT,"{FF0000}3D Text Inhalt","{FFFFFF}Bitte gib hier den 3D Text ein:","Bestätigen","Abbrechen");
  26.     if(!strcmp(cmdtext,#/update3D,true)) return ShowPlayerDialog(playerid,570,DIALOG_STYLE_INPUT,"{FF0000}3D Text Inhalt Update","{FFFFFF}Bitte gib hier den neuen 3D Text ein:","Bestätigen","Abbrechen");
  27.     if(!strcmp(cmdtext,#/destroy3D,true) || !strcmp(cmdtext,#/delete3D,true)) {
  28.         new i=GetIDInRange(playerid),string[64];
  29.         if(i == -1) return SCM(playerid,rot,"Sie befinden sich nicht in der Nähe eines 3DTextLabels!");
  30.         Delete3DTextLabel(LabelInfo[i][e_ID]);
  31.         format(string,64,"DELETE FROM `3D` WHERE `id`='%d'",i),db_free_result(db_query(Texts3D,string));
  32.         return SCM(playerid,blau,"Sie haben das 3DTextLabel erfolgreich entfernt!");
  33.     }
  34.     return 0;
  35. }
  36. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  37.     new string[128];
  38.     switch(dialogid) {
  39.         case 569: {
  40.             if(!inputtext[0]) return SCM(playerid,rot,"Bitte geben Sie auch einen Text ein!");
  41.             new Float:p[3],i=GetFreeID();
  42.             if(i == -1) return SCM(playerid,rot,"Du hast schon 100 3DText Labels erstellt!");
  43.             GetPlayerPos(playerid,p[0],p[1],p[2]),strcat(LabelInfo[i][e_Name],inputtext),LabelInfo[i][e_Pos][0]=p[0],LabelInfo[i][e_Pos][1]=p[1],LabelInfo[i][e_Pos][2]=p[2];
  44.             LabelInfo[i][e_ID] = Create3DTextLabel(inputtext,e_Color,p[0],p[1],p[2],50.0,0,0);
  45.             format(string,128,"INSERT INTO `3D` (`id`,`Name`,`PosX`,`PosY`,`PosZ`) VALUES ('%d','%s','%f','%f','%f')",i,inputtext,p[0],p[1],p[2]),db_free_result(db_query(Texts3D,string));
  46.             SCM(playerid,blau,"Das 3D TextLabel wurde erfolgreich erstellt!");
  47.         }
  48.         case 570: {
  49.             if(!inputtext[0]) return SCM(playerid,rot,"Bitte geben Sie auch einen Text ein!");
  50.             new i=GetIDInRange(playerid);
  51.             if(i == -1) return SCM(playerid,rot,"Es ist kein 3DTextLabel in deiner Nähe!");
  52.             strcat(LabelInfo[i][e_Name],inputtext),Update3DTextLabelText(LabelInfo[i][e_ID],e_Color,inputtext);
  53.             format(string,128,"UPDATE `3D` SET `Name`='%s' WHERE `id`='%d'",inputtext,i),db_free_result(db_query(Texts3D,string));
  54.             SCM(playerid,blau,"Das 3D TextLabel wurde erfolgreich geupdatet!");
  55.         }
  56.     }
  57.     return 0;
  58. }
  59. /******************************************************************************/
  60. stock Load3DText() {
  61.     new szQuery[128], szOut[32], DBResult: query;
  62.     for(new i; i<MAX_LABELS; i++) {
  63.         format(szQuery, sizeof(szQuery), "SELECT * FROM `3D` WHERE `id`='%d'",i);
  64.         query = db_query(Texts3D, szQuery);
  65.         if(!db_num_rows(query)) continue;
  66.         db_get_field_assoc(query, "Name", LabelInfo[i][e_Name], 128);
  67.         db_get_field_assoc(query, "PosX", szOut, 32),LabelInfo[i][e_Pos][0] = floatstr(szOut);
  68.         db_get_field_assoc(query, "PosY", szOut, 32),LabelInfo[i][e_Pos][1] = floatstr(szOut);
  69.         db_get_field_assoc(query, "PosZ", szOut, 32),LabelInfo[i][e_Pos][2] = floatstr(szOut);
  70.         LabelInfo[i][e_ID] = Create3DTextLabel(LabelInfo[i][e_Name],e_Color,LabelInfo[i][e_Pos][0],LabelInfo[i][e_Pos][1],LabelInfo[i][e_Pos][2],50.0,0,0);
  71.     }
  72.     return 1;
  73. }
  74. stock GetFreeID() {
  75.     for(new i; i<MAX_LABELS; i++) if(!LabelInfo[i][e_ID]) return i;
  76.     return -1;
  77. }
  78. stock GetIDInRange(playerid) {
  79.     for(new i; i<MAX_LABELS; i++) if(IsPlayerInRangeOfPoint(playerid,3.0,LabelInfo[i][e_Pos][0],LabelInfo[i][e_Pos][1],LabelInfo[i][e_Pos][2])) return i;
  80.     return -1;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment