Advertisement
Guest User

Untitled

a guest
May 21st, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.07 KB | None | 0 0
  1. #define FILTERSCRIPT
  2. #include <a_samp>
  3. #include <zcmd>
  4. #include <YSI\y_ini>
  5. #include <file>
  6. #include <sscanf2>
  7.  
  8.  
  9. forward AdminCheck(playerid);
  10. new tDuty[MAX_PLAYERS] = 0;
  11.  
  12. //----------------Uncomment section below to use this filterscript for RCON admins -------  Delete section if you are going to load admin levels from scriptfiles
  13.  
  14. public AdminCheck(playerid){
  15.     if(IsPlayerAdmin(playerid)) return 1;
  16.     return 0;
  17. }
  18.  
  19. //----------------------------------------------------------------------------------------------------------------------------------------------------------------
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26. //---------------Uncomment the section below and edit to check admin levels of users saved using another gamemode/filterscript  ---- Delete Section if using RCON
  27. /*
  28. new AdminLevel[MAX_PLAYERS] = 0;
  29. //change this to the required admin level needed to use the ticket system
  30. #define RequiredAdminLevel 5
  31.  
  32. public AdminCheck(playerid){
  33.     if(AdminLevel[playerid] >= RequiredAdminLevel) return 1;
  34.     return 0;
  35. }
  36. //--------------------------------------------------------------------------------------------------------------------------------------------------------------
  37. */
  38.  
  39.  
  40.  
  41.  
  42. //-----------------SETTINGS, EDIT THESE
  43.  
  44. //Message to send if a non-admin enters an admin command
  45. new NonAdminMessage[128] = "You must be an admin to use this command";
  46. //Color of non-admin Message
  47. #define NonAdminColor 0xFF0000FF
  48.  
  49. //Message to Send if user submits ticket, but no admins are on duty
  50. new NoDutyMessage[128] = "No admins are currently on duty or may be busy. Try again later";
  51. //Color of no-duty Message
  52. #define NoDutyColor 0xFF0000FF
  53.  
  54. //-----------------END OF SETTINGS, DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING
  55.  
  56. enum tVars //---ADDED
  57. {
  58.     claimed,
  59.     query[128],
  60.     player,
  61.     helper
  62. };
  63. new TicketInfo[MAX_PLAYERS][tVars];
  64.  
  65.  
  66.  
  67.  
  68. new SubmittedTicket[MAX_PLAYERS] = -1;
  69. new AnsweredTicket[MAX_PLAYERS] = -1;
  70.  
  71. forward AdminsOnDuty();
  72. public AdminsOnDuty(){
  73.     for(new i; i <= MAX_PLAYERS; i++){
  74.         if(tDuty[i]) return 1;
  75.     }
  76.     return 0;
  77. }
  78.  
  79.  
  80.  
  81. stock SendClientMessageToOnDutyAdmins(message[128]){
  82.     for(new i = 0; i <= MAX_PLAYERS; i++){
  83.         if(tDuty[i]){
  84.             SendClientMessage(i, 0xFA8072FF, message);
  85.         }
  86.     }
  87. }
  88.  
  89.  
  90. public OnFilterScriptInit()
  91. {
  92.     print("\n--------------------------------------");
  93.     print("-----Ticket System by Nathan_Taylor----- ");
  94.     print("--------------------------------------\n");
  95.     return 1;
  96. }
  97.  
  98. public OnFilterScriptExit()
  99. {
  100.     print("Nathan_Taylor's ticket system shut down");
  101.     return 1;
  102. }
  103.  
  104. public OnPlayerConnect(playerid)
  105. {
  106.     if(AdminCheck(playerid)){
  107.         SendClientMessage(playerid, 0xFA8072FF, "** Ticket System Enabled. Use /tduty to go on duty");
  108.     }
  109.     return 1;
  110. }
  111.  
  112. public OnPlayerDisconnect(playerid, reason)
  113. {
  114.     TicketInfo[playerid][claimed] = 0;
  115.     TicketInfo[playerid][query] = 0;
  116.     TicketInfo[playerid][player] = -1;
  117.     TicketInfo[playerid][helper] = -1;
  118.     tDuty[playerid] = 0;
  119.     return 1;
  120. }
  121.  
  122. CMD:tduty(playerid, params[]){
  123.     if(!AdminCheck(playerid)) return SendClientMessage(playerid, NonAdminColor, NonAdminMessage);
  124.     new Message[128];
  125.     new aName[MAX_PLAYER_NAME];
  126.     GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
  127.     if(tDuty[playerid] == 0){
  128.         tDuty[playerid] = 1;
  129.         format(Message, sizeof(Message), "Admin %s is now on duty for tickets. Use /ticket to submit one", aName);
  130.         SendClientMessageToAll(0xFA8072FF, Message);
  131.     } else {
  132.         tDuty[playerid] = 0;
  133.         format(Message, sizeof(Message), "Admin %s is no longer on duty for tickets", aName);
  134.         SendClientMessageToAll(0xFA8072FF, Message);
  135.     }
  136.    
  137.     return 1;
  138. }
  139.  
  140. CMD:ticket(playerid, params[])
  141. {
  142.  
  143.     new text[128];
  144.  
  145.     if(!sscanf(params, "s[128]", text)){
  146.         if(AdminCheck(playerid)) return SendClientMessage(playerid, 0xFA8072FF, "Admins cannot submit tickets"); //delete if if you want admins to be able to submit tickets
  147.         if(SubmittedTicket[playerid] != -1) return SendClientMessage(playerid, 0xFA8072FF, "You already have a ticket sent out");
  148.         if(!AdminsOnDuty()) return SendClientMessage(playerid, NoDutyColor, NoDutyMessage);
  149.  
  150.         SubmittedTicket[playerid] = playerid;
  151.         SendClientMessage(playerid, 0xFA8072FF, "** Ticket has been sent to on duty admins");
  152.  
  153.         //format message to admins
  154.         new aMessage[128];
  155.         new pName[MAX_PLAYER_NAME];
  156.         GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
  157.         format(aMessage, sizeof(aMessage), "** Incoming ticket from %s, Use /claim %i to claim", pName, playerid);
  158.         SendClientMessageToOnDutyAdmins(aMessage);
  159.  
  160.         TicketInfo[playerid][claimed] = 0;
  161.         TicketInfo[playerid][query] = text;
  162.         TicketInfo[playerid][player] = playerid;
  163.         TicketInfo[playerid][helper] = -1;
  164.     } else {
  165.         return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ticket [question]");
  166.     }
  167.     return 1;
  168. }
  169.  
  170. CMD:claim(playerid, params[])
  171. {
  172.     new tid;
  173.     if(!AdminCheck(playerid)) return SendClientMessage(playerid, NonAdminColor, NonAdminMessage);
  174.     if(!sscanf(params, "i", tid)){
  175.  
  176.         if(TicketInfo[tid][player] != tid) return SendClientMessage(playerid, 0xFA8072FF, "** This ticket ID does not exist");
  177.  
  178.         if(TicketInfo[tid][claimed] == 1) {
  179.             new cName[MAX_PLAYER_NAME];
  180.             new string[128];
  181.             GetPlayerName(TicketInfo[tid][helper], cName, MAX_PLAYER_NAME);
  182.             format(string, sizeof(string), "** %s has already claimed this ticket", cName);
  183.             return SendClientMessage(playerid, 0xFA8072FF, string);
  184.         }
  185.  
  186.         TicketInfo[tid][claimed] = 1;
  187.         TicketInfo[tid][helper] = playerid;
  188.         AnsweredTicket[playerid] = tid;
  189.         tDuty[playerid] = 0;
  190.         new pmessage[128], amessage[128], amessage2[128], allamessage[128], pName[MAX_PLAYER_NAME], aName[MAX_PLAYER_NAME];
  191.         GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
  192.         GetPlayerName(tid, pName, MAX_PLAYER_NAME);
  193.         format(pmessage, sizeof(pmessage), "** %s has picked up your ticket. You may now use /treply", aName);
  194.         format(amessage2, sizeof(amessage2), "** Ticket Claimed. You may now use /treply /ttp /ttphere /tclose");
  195.         format(amessage2, sizeof(amessage2), "** %s: %s", pName, TicketInfo[tid][query]);
  196.         format(allamessage, sizeof(allamessage), "** %s claimed %s's ticket", aName, pName);
  197.         SendClientMessage(tid, 0xFA8072FF, pmessage);
  198.         SendClientMessage(playerid, 0xFA8072FF, amessage);
  199.         SendClientMessage(playerid, 0xFA8072FF, amessage2);
  200.         SendClientMessageToOnDutyAdmins(allamessage);
  201.     } else {
  202.         return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /claim [ticket id]");
  203.     }
  204.     return 1;
  205. }
  206.  
  207. CMD:tclose(playerid, params[])
  208. {
  209.     if(!AdminCheck(playerid)) return SendClientMessage(playerid, NonAdminColor, NonAdminMessage);
  210.     if(AnsweredTicket[playerid] == -1) return SendClientMessage(playerid, 0xFA8072FF, "** No Ticket Opened");
  211.     new tid = TicketInfo[AnsweredTicket[playerid]][player];
  212.     TicketInfo[tid][claimed] = 0;
  213.     TicketInfo[tid][helper] = -1;
  214.     TicketInfo[tid][player] = -1;
  215.     TicketInfo[tid][query] = 0;
  216.     SubmittedTicket[tid] = -1;
  217.     AnsweredTicket[playerid] = -1;
  218.     new pName[MAX_PLAYER_NAME], aName[MAX_PLAYER_NAME], amessage[128], pmessage[128], allamessage[128];
  219.     GetPlayerName(playerid, aName, MAX_PLAYER_NAME);
  220.     GetPlayerName(tid, pName, MAX_PLAYER_NAME);
  221.     format(allamessage, sizeof(allamessage), "** %s closed %s's ticket", aName, pName);
  222.     format(pmessage, sizeof(pmessage), "** %s has closed your ticket", aName);
  223.     format(amessage, sizeof(amessage), "** Closed %s's ticket", pName);
  224.     SendClientMessageToOnDutyAdmins(allamessage);
  225.     SendClientMessage(tid, 0xFA8072FF, pmessage);
  226.     SendClientMessage(playerid, 0xFA8072FF, amessage);
  227.     tDuty[playerid] = 1;
  228.     return 1;
  229. }
  230.  
  231. CMD:ttp(playerid, params[])
  232. {
  233.     if(!AdminCheck(playerid)) return SendClientMessage(playerid, NonAdminColor, NonAdminMessage);
  234.     if(AnsweredTicket[playerid] == -1) return SendClientMessage(playerid, 0xFA8072FF, "** No Ticket Opened");
  235.     new tid = AnsweredTicket[playerid];
  236.     new pName[MAX_PLAYER_NAME], aName[MAX_PLAYER_NAME];
  237.     GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
  238.     GetPlayerName(tid, aName, MAX_PLAYER_NAME);
  239.     new
  240.         Float: x,
  241.         Float: y,
  242.         Float: z;
  243.  
  244.     GetPlayerPos(tid, x, y, z);
  245.     SetPlayerPos(playerid, x, y, z);
  246.     new amessage[128], pmessage[128];
  247.     format(pmessage, sizeof(pmessage), "** %s has teleported to your location", aName);
  248.     format(amessage, sizeof(amessage), "** You have teleported to %s's location", pName);
  249.     SendClientMessage(playerid, 0xFA8072FF, amessage);
  250.     SendClientMessage(tid, 0xFA8072FF, pmessage);
  251.     return 1;
  252. }
  253.  
  254.  
  255. CMD:ttphere(playerid, params[])
  256. {
  257.     if(!AdminCheck(playerid)) return SendClientMessage(playerid, NonAdminColor, NonAdminMessage);
  258.     if(AnsweredTicket[playerid] == -1) return SendClientMessage(playerid, 0xFA8072FF, "** No Ticket Opened");
  259.     new tid = AnsweredTicket[playerid];
  260.     new pName[MAX_PLAYER_NAME], aName[MAX_PLAYER_NAME];
  261.     GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
  262.     GetPlayerName(tid, aName, MAX_PLAYER_NAME);
  263.     new
  264.         Float: x,
  265.         Float: y,
  266.         Float: z;
  267.  
  268.     GetPlayerPos(playerid, x, y, z);
  269.     SetPlayerPos(tid, x, y, z);
  270.     new amessage[128], pmessage[128];
  271.     format(pmessage, sizeof(pmessage), "** %s teleported you to their location", aName);
  272.     format(amessage, sizeof(amessage), "** %s has been teleported to your location", pName);
  273.     SendClientMessage(playerid, 0xFA8072FF, amessage);
  274.     SendClientMessage(tid, 0xFA8072FF, pmessage);
  275.     return 1;
  276. }
  277.  
  278. CMD:treply(playerid, params[]){
  279.     new string[128], message[128];
  280.     if(AnsweredTicket[playerid] == -1 && SubmittedTicket[playerid] == -1) return SendClientMessage(playerid, 0xFA8072FF, "** No Ticket Opened");
  281.     if(SubmittedTicket[playerid] != -1){
  282.         if(TicketInfo[playerid][claimed] == 0){
  283.             return SendClientMessage(playerid, 0xFA8072FF, "** No one has claimed your ticket yet.");
  284.         }
  285.     }
  286.  
  287.     if(!sscanf(params, "s", string)){
  288.  
  289.         new aid, pid, name[MAX_PLAYER_NAME];
  290.  
  291.         if(AdminCheck(playerid)){
  292.             //is admin
  293.             aid = playerid;
  294.             pid = AnsweredTicket[playerid];
  295.         } else {
  296.             aid = TicketInfo[playerid][helper];
  297.             pid = playerid;
  298.             //is player
  299.         }
  300.         GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  301.         format(message, sizeof(message), "** %s: %s", name, string);
  302.         SendClientMessage(aid, 0xFA8072FF, string);
  303.         SendClientMessage(pid, 0xFA8072FF, string);
  304.         } else {
  305.             SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /treply [message]");
  306.         }
  307.     return 1;
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement