Advertisement
Guest User

PORTAL system (McLuhan) for pawno ru

a guest
Aug 4th, 2013
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.18 KB | None | 0 0
  1. /*
  2. Разработчик: McLuhan
  3.  
  4. Система создание порталов (вход / выход):
  5. Чтобы создать портал(вход / выход), сначала нужно установить входную точку, командой /makepickupen
  6. Потом нужно установить выходную точку, командой /makepickupex
  7. Потом нужно задать параметры порталу(только после этого он создастся), делается это командой /makepickupend
  8. /makepickupend [0 - ничего, 1 - вход, 2 - выход] [3D текст] [виртуальный мир выхода]
  9. 1 аргумент: устанавливаем, вход это или выход, или же ничего не писать (т. к. над 3D текстом пишется, вход это или выход)
  10. 2 аргумент: вводим название портала, то есть куда телепортирует портал (нужно вместо пробелов использовать "_", потом система изменяет их на пробелы)
  11. 3 аргумент: вводим ID виртуального мира, который установится при телепортировании.
  12.  
  13. portal - http://imgdepo.ru/show/4490045
  14.  
  15. Примечание: Когда пишем 3D текст нужно вместо пробелов использовать "_"
  16. */
  17.  
  18. #include <a_samp>
  19. main();
  20. #include <sscanf2>
  21. #include <YSI\y_commands>
  22. #include <a_mysql>
  23. #include <streamer>
  24. #include <foreach>
  25.  
  26. #define m_host " " // заполнить
  27. #define m_user " " // заполнить
  28. #define m_base " " // заполнить
  29. #define m_pass " " // заполнить
  30. #define MTN    (-1)
  31. #define table_pickups   "pickups"
  32. #define SPVI        SetPVarInt
  33. #define GPVI        GetPVarInt
  34. #define SPVF        SetPVarFloat
  35. #define GPVF        GetPVarFloat
  36. #define SCM         SendClientMessage
  37. #define cWhite      0xffffffaa
  38. #define cYellow     0xffff00aa
  39. #define ccWhite     "{ffffff}"
  40. #define MSGUSE      "{75a3ff}[Использование] {ffffff}"
  41. #define MSGPERF     "{01dfa5}[Выполнено] {ffffff}"
  42. #define MSGHELP     "{ffcc33}[Подсказка] {ffffff}"
  43. #define MSGERROR    "{cc0000}[Ошибка] {ffffff}"
  44. #define MAX_PICKUP  100 // максимальное количество порталов
  45.  
  46. enum pickupsEnum { Float: pickupPos[3], Float: tpPos[4], pickupVw, tpVw, pickupInt, tpInt, pickup, Text3D: text3D, pType };
  47. new
  48.     allpickups = 0,
  49.     pickupText[MAX_PICKUP][50],
  50.     pInfo[MAX_PICKUP][pickupsEnum], // 100
  51.     cmID,
  52.     cmdstr[144],
  53.     PLN[MAX_PLAYERS][MAX_PLAYER_NAME];
  54.  
  55. public OnFilterScriptInit()
  56. {
  57.     mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG, LOG_TYPE_TEXT);
  58.     cmID = mysql_connect(m_host, m_user, m_base, m_pass);
  59.     mysql_function_query(cmID, "SET NAMES cp1251;", false, "", "");
  60.     mysql_function_query(cmID, "SET SESSION character_set_server = cp1251;", false, "", "");
  61.     new query[31+1];
  62.     format(query, sizeof query, "SELECT * FROM `"table_pickups"`"), mysql_function_query(cmID, query, true, "mysqlquery_loadPickups", "");
  63.     return 1;
  64. }
  65.  
  66. public OnFilterScriptExit()
  67. {
  68.     mysql_close(cmID);
  69.     return 1;
  70. }
  71.  
  72. public OnPlayerConnect(playerid)
  73. {
  74.     GetPlayerName(playerid, PLN[playerid], MAX_PLAYER_NAME);
  75.     return 1;
  76. }
  77.  
  78. public OnPlayerDisconnect(playerid, reason)
  79. {
  80.     return 1;
  81. }
  82.  
  83. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  84. {
  85.     for(new i = 0; i < allpickups; i++)
  86.     {
  87.         if(pickupid == pInfo[i][pickup])
  88.         {
  89.             SetPlayerPos(playerid, pInfo[i][tpPos][0], pInfo[i][tpPos][1], pInfo[i][tpPos][2]), SetPlayerFacingAngle(playerid, pInfo[i][tpPos][3]);
  90.             SetPlayerVirtualWorld(playerid, pInfo[i][tpVw]), SetPlayerInterior(playerid, pInfo[i][tpInt]), SetCameraBehindPlayer(playerid);
  91.         }
  92.     }
  93.     return 1;
  94. }
  95.  
  96. public OnPlayerCommandText(playerid, cmdtext[])
  97. {
  98.     return 1;
  99. }
  100.  
  101. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  102. {
  103.     return 1;
  104. }
  105.  
  106. forward mysqlquery_loadPickups();
  107. public mysqlquery_loadPickups()
  108. {
  109.     new rowsfield[2];
  110.     cache_get_data(rowsfield[0], rowsfield[1]);
  111.     if(rowsfield[0])
  112.     {
  113.         for(new i = 0; i < rowsfield[0]; i++)
  114.         {
  115.             new _pickupPos[100], _tpPos[111], _text[1+34+50+37];
  116.             cache_get_field_content(i, "pickupPos", _pickupPos, cmID);
  117.             cache_get_field_content(i, "tpPos", _tpPos, cmID);
  118.             sscanf(_pickupPos, "p<,>fff", pInfo[allpickups][pickupPos][0], pInfo[allpickups][pickupPos][1], pInfo[allpickups][pickupPos][2]);
  119.             sscanf(_tpPos, "p<,>ffff", pInfo[allpickups][tpPos][0], pInfo[allpickups][tpPos][1], pInfo[allpickups][tpPos][2], pInfo[allpickups][tpPos][3]);
  120.             pInfo[allpickups][pickupVw] = cache_get_field_content_int(i, "pickupVw", cmID);
  121.             pInfo[allpickups][tpVw] = cache_get_field_content_int(i, "tpVw", cmID);
  122.             pInfo[allpickups][pickupInt] = cache_get_field_content_int(i, "pickupInt", cmID);
  123.             pInfo[allpickups][tpInt] = cache_get_field_content_int(i, "tpInt", cmID);
  124.             pInfo[allpickups][pType] = cache_get_field_content_int(i, "type", cmID);
  125.             new _type[37+1];
  126.             if(pInfo[allpickups][pType] == 1) _type = "{0b615e}>> {ceecf5}Вход {0b615e}<<\n";
  127.             else if(pInfo[allpickups][pType] == 2) _type = "{0b615e}>> {ceecf5}Выход {0b615e}<<\n";
  128.             else _type = " ";
  129.             cache_get_field_content(i, "text", pickupText[allpickups], cmID), format(_text, sizeof _text, "%s"ccWhite"[ {0489b1}%s "ccWhite"]", _type, pickupText[allpickups]);
  130.             pInfo[allpickups][pickup] = CreateDynamicPickup(19134, 23, pInfo[allpickups][pickupPos][0], pInfo[allpickups][pickupPos][1], pInfo[allpickups][pickupPos][2], pInfo[allpickups][pickupVw], pInfo[allpickups][pickupInt], -1, 40.0);
  131.             pInfo[allpickups][text3D] = CreateDynamic3DTextLabel(_text, cWhite, pInfo[allpickups][pickupPos][0], pInfo[allpickups][pickupPos][1], pInfo[allpickups][pickupPos][2]+0.1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, pInfo[allpickups][pickupVw], pInfo[allpickups][pickupInt], -1, 20.0);
  132.             allpickups++;
  133.         }
  134.     }
  135.     printf("~ Load Pickups [ %i ]: загрузка завершена успешно.", allpickups);
  136.     return 1;
  137. }
  138.  
  139. stock SCMADM(adml, string[])
  140. {
  141.     new outstring[144];
  142.     foreach(new i : Player) if(GPVI(i, "pld_admin") >= adml) format(outstring, sizeof outstring, "[ADMMSG] "ccWhite"%s", string), SCM(i, cYellow, outstring);
  143.     // GPVI(i, "pld_admin") - заменить на свой ПВар / массив адм. уровня игрока
  144.     return 1;
  145. }
  146.  
  147. YCMD:makepickupen(playerid, params[], help)
  148. {
  149.     // if: администратор ли вы
  150.     new Float: pos[3];
  151.     GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
  152.     SPVI(playerid, "makepickup_pickupInt", GetPlayerInterior(playerid)), SPVI(playerid, "makepickup_pickupVw", GetPlayerVirtualWorld(playerid));
  153.     SPVI(playerid, "makepickup_step", 1), SPVF(playerid, "makepickupen_x", pos[0]), SPVF(playerid, "makepickupen_y", pos[1]), SPVF(playerid, "makepickupen_z", pos[2]);
  154.     SCM(playerid, -1, ""MSGPERF"Вы указали координату расположения пикапа.");
  155.     SCM(playerid, -1, ""MSGHELP"Чтобы указать точку конечного телепортирования, введите /makepickupex.");
  156.     return 1;
  157. }
  158.  
  159. YCMD:makepickupex(playerid, params[], help)
  160. {
  161.     // if: администратор ли вы
  162.     if(GPVI(playerid, "makepickup_step") < 1) return SCM(playerid, -1, ""MSGERROR"Чтобы указать конечную точку телепортирования, нужно пройти первый этап создания.");
  163.     new Float: pos[4];
  164.     GetPlayerPos(playerid, pos[0], pos[1], pos[2]), GetPlayerFacingAngle(playerid, pos[3]);
  165.     SPVI(playerid, "makepickup_tpInt", GetPlayerInterior(playerid));
  166.     SPVI(playerid, "makepickup_step", 2), SPVF(playerid, "makepickupex_x", pos[0]), SPVF(playerid, "makepickupex_y", pos[1]), SPVF(playerid, "makepickupex_z", pos[2]), SPVF(playerid, "makepickupex_a", pos[3]);
  167.     SCM(playerid, -1, ""MSGPERF"Вы указали точку конечного телепортирования.");
  168.     SCM(playerid, -1, ""MSGHELP"Чтобы закончить создание пикапа, введите /makepickupend.");
  169.     return 1;
  170. }
  171.  
  172. YCMD:makepickupend(playerid, params[], help)
  173. {
  174.     // if: администратор ли вы
  175.     if(GPVI(playerid, "makepickup_step") < 2) return SCM(playerid, -1, ""MSGERROR"Чтобы закончить создание пикапа, нужно пройти второй этап создания.");
  176.     new _3dtext[50];
  177.     if(sscanf(params, "is[50]i", params[0], _3dtext, params[2])) return SCM(playerid, -1, ""MSGUSE"/makepickupend [0 - ничего, 1 - вход, 2 - выход] [3D текст] [виртуальный мир выхода]");
  178.     for(new i; i != strlen(_3dtext); i++) if(_3dtext[i] == '_') _3dtext[i] = ' ';
  179.     pInfo[allpickups][pickupPos][0] = GetPVarFloat(playerid, "makepickupen_x"), pInfo[allpickups][pickupPos][1] = GetPVarFloat(playerid, "makepickupen_y"), pInfo[allpickups][pickupPos][2] = GetPVarFloat(playerid, "makepickupen_z");
  180.     pInfo[allpickups][tpPos][0] = GetPVarFloat(playerid, "makepickupex_x"), pInfo[allpickups][tpPos][1] = GetPVarFloat(playerid, "makepickupex_y"), pInfo[allpickups][tpPos][2] = GetPVarFloat(playerid, "makepickupex_z"), pInfo[allpickups][tpPos][3] = GetPVarFloat(playerid, "makepickupex_a");
  181.     pInfo[allpickups][pickupVw] = GPVI(playerid, "makepickup_pickupVw"), pInfo[allpickups][tpVw] = params[2];
  182.     pInfo[allpickups][pickupInt] = GPVI(playerid, "makepickup_pickupInt"), pInfo[allpickups][tpInt] = GPVI(playerid, "makepickup_tpInt");
  183.     pInfo[allpickups][pType] = params[0];
  184.     new _text[1+34+50+37];
  185.     new _type[37+1];
  186.     if(pInfo[allpickups][pType] == 1) _type = "{0b615e}>> {ceecf5}Вход {0b615e}<<\n";
  187.     else if(pInfo[allpickups][pType] == 2) _type = "{0b615e}>> {ceecf5}Выход {0b615e}<<\n";
  188.     else _type = " ";
  189.     format(_text, sizeof _text, "%s"ccWhite"[ {0489b1}%s "ccWhite"]", _type, _3dtext);
  190.     pickupText[allpickups] = _3dtext;
  191.     pInfo[allpickups][pickup] = CreateDynamicPickup(19134, 23, pInfo[allpickups][pickupPos][0], pInfo[allpickups][pickupPos][1], pInfo[allpickups][pickupPos][2], pInfo[allpickups][pickupVw], pInfo[allpickups][pickupInt], -1, 40.0);
  192.     pInfo[allpickups][text3D] = CreateDynamic3DTextLabel(_text, cWhite, pInfo[allpickups][pickupPos][0], pInfo[allpickups][pickupPos][1], pInfo[allpickups][pickupPos][2]+1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, pInfo[allpickups][pickupVw], pInfo[allpickups][pickupInt], -1, 20.0);
  193.     format(cmdstr, sizeof cmdstr, "Администратор (%i)%s создал пикап(вход OR выход). (\"%s\")", playerid, PLN[playerid], _3dtext), SCMADM(1, cmdstr);
  194.     new query[1+159+100+100+11+11+11+11+50+15];
  195.     format(query, sizeof query, "INSERT INTO `"table_pickups"` (`pickupPos`, `tpPos`, `pickupVw`, `tpVw`, `pickupInt`, `tpInt`, `text`, `type`) VALUES ('%f,%f,%f', '%f,%f,%f,%f', '%i', '%i', '%i', '%i', '%s', '%i')"
  196.     , pInfo[allpickups][pickupPos][0], pInfo[allpickups][pickupPos][1], pInfo[allpickups][pickupPos][2], pInfo[allpickups][tpPos][0], pInfo[allpickups][tpPos][1], pInfo[allpickups][tpPos][2], pInfo[allpickups][tpPos][3], pInfo[allpickups][pickupVw], pInfo[allpickups][tpVw], pInfo[allpickups][pickupInt], pInfo[allpickups][tpInt], pickupText[allpickups], pInfo[allpickups][pType]);
  197.     mysql_function_query(cmID, query, false, "", "");
  198.     allpickups++;
  199.     SPVI(playerid, "makepickup_step", 0);
  200.     return 1;
  201. }
  202.  
  203. YCMD:gotopickup(playerid, params[], help)
  204. {
  205.     // if: администратор ли вы
  206.     if(sscanf(params, "i", params[0])) return format(cmdstr, sizeof cmdstr, ""MSGUSE"/gotopickup [номер пикапа] (0-%i)", allpickups-1), SCM(playerid, -1, cmdstr);
  207.     if(params[0] < 0 || params[0] > allpickups-1) return format(cmdstr, sizeof cmdstr, ""MSGERROR"Номер пикапа должен быть в пределах 0-%i.", allpickups-1), SCM(playerid, -1, cmdstr);
  208.     SetPlayerPos(playerid, pInfo[params[0]][pickupPos][0], pInfo[params[0]][pickupPos][1], pInfo[params[0]][pickupPos][2]);
  209.     SetPlayerInterior(playerid, pInfo[params[0]][pickupInt]), SetPlayerVirtualWorld(playerid, pInfo[params[0]][pickupVw]);
  210.     format(cmdstr, sizeof cmdstr, ""MSGPERF"Вы телепортированы к пикапу (№%i), \"%s\".", params[0], pickupText[params[0]]), SCM(playerid, -1, cmdstr);
  211.     return 1;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement