logintd.inc 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /*
  2. LOGIN ANNOUNCEMENTS
  3. by Fred (Jacob_Swift)
  4. */
  5. //TextDraw related variables
  6. #include "../gamemodes/inc/cinematictd.inc"
  7. //login textdraws
  8. static Text:sarpHeading;
  9. static Text:version;
  10. //anouncement textdraws
  11. static Text:Textdraw0;
  12. static Text:Textdraw1;
  13. static Text:model;
  14. static Text:text_announcement_t;
  15. static Text:text_announcement;
  16. static Text:author;
  17. //Announcement types
  18. enum {
  19. ANNOUNCE_NONE,
  20. ANNOUNCE_FACTION,
  21. ANNOUNCE_DEV,
  22. ANNOUNCE_ADMIN
  23. }
  24. //When modifying the above, adjust this too
  25. #define MAX_ANNOUNCE_TYPES 4
  26. #define DIALOG_SETANNOUNCEMENT 9301
  27. //Current announcement type
  28. static stock AnnounceType;
  29. /*
  30. Visibility functions
  31. */
  32. ShowLoginTextDraw( playerid ) {
  33. TextDrawShowForPlayer(playerid, sarpHeading);
  34. TextDrawShowForPlayer(playerid, version);
  35. //ShowAnnouncementTextDraw( playerid );
  36. return;
  37. }
  38. ShowAnnouncementTextDraw( playerid ) {
  39. TextDrawShowForPlayer(playerid, Textdraw0);
  40. TextDrawShowForPlayer(playerid, Textdraw1);
  41. TextDrawShowForPlayer(playerid, model);
  42. TextDrawShowForPlayer(playerid, text_announcement_t);
  43. TextDrawShowForPlayer(playerid, text_announcement);
  44. TextDrawShowForPlayer(playerid, author);
  45. return;
  46. }
  47. HideLoginTextDraw( playerid ) {
  48. TextDrawHideForPlayer(playerid, sarpHeading);
  49. TextDrawHideForPlayer(playerid, version);
  50. //HideAnnouncementTextDraw( playerid );
  51. return;
  52. }
  53. HideAnnouncementTextDraw( playerid ) {
  54. TextDrawHideForPlayer(playerid, Textdraw0);
  55. TextDrawHideForPlayer(playerid, Textdraw1);
  56. TextDrawHideForPlayer(playerid, model);
  57. TextDrawHideForPlayer(playerid, text_announcement_t);
  58. TextDrawHideForPlayer(playerid, text_announcement);
  59. TextDrawHideForPlayer(playerid, author);
  60. return;
  61. }
  62. /*
  63. Updating TextDraw related functions
  64. */
  65. SetLoginAnnouncement( type, text[] ) {
  66. SetAnnouncementType( type );
  67. TextDrawSetString( text_announcement, text );
  68. return;
  69. }
  70. SetAnnouncementChar( skinid ) {
  71. TextDrawSetPreviewModel( model, skinid );
  72. return;
  73. }
  74. SetAnnouncementAuthor( playerid ) {
  75. new string[128];
  76. format( string, 128, "%s", PlayerICName( playerid ) );
  77. TextDrawSetString( author, string );
  78. return;
  79. }
  80. SetAnnouncementType( type ) {
  81. AnnounceType = type;
  82. switch( type ) {
  83. case ANNOUNCE_FACTION: TextDrawSetString( text_announcement_t, "Public Service Announcement" );
  84. case ANNOUNCE_DEV: TextDrawSetString( text_announcement_t, "Development Announcement" );
  85. case ANNOUNCE_ADMIN: TextDrawSetString( text_announcement_t, "Administration Announcement" );
  86. default: TextDrawSetString( text_announcement_t, "Server Announcement" );
  87. }
  88. return;
  89. }
  90. /*
  91. Commands:
  92. /lockannouncement (disables factions using it)
  93. /setannouncement (sets a new announcement, 2 min reload for factions)
  94. /announcement (allows players to view the announcement)
  95. */
  96. static tempAnnounceType[MAX_PLAYERS];
  97. static bool:lockAnnounce = false;
  98. CMD:lockannouncement( playerid, params[] ) {
  99. if( PlayerInfo[playerid][pDev] > 2 || PlayerInfo[playerid][pAdmin] >= 4 ) {
  100. new msg[144];
  101. lockAnnounce = !lockAnnounce;
  102. format( msg, 144, "You have %s the ability for faction leaders to set login announcements." , ( lockAnnounce ) ? ( "disabled" ) : ( "enabled" ) );
  103. SendClientMessage( playerid, COLOR_YELLOW, msg );
  104. }
  105. return 1;
  106. }
  107. static lastAnnounce = 0;
  108. CMD:setannouncement( playerid, params[] ) {
  109. if( PlayerInfo[playerid][pLeader] || PlayerInfo[playerid][pDev] > 2 || PlayerInfo[playerid][pAdmin] > 2 ) {
  110. //if disabled for faction leaders
  111. if( PlayerInfo[playerid][pDev] <= 2 || PlayerInfo[playerid][pAdmin] <= 2 ) {
  112. if( lockAnnounce ) {
  113. return SendClientMessage( playerid, COLOR_GREY, "Faction leaders currently cannot set announcements." );
  114. }
  115. if( gettime() < lastAnnounce + 120 ) {
  116. return SendClientMessage( playerid, COLOR_GREY, "You must wait two minutes between setting announcements, try again in two minutes." );
  117. }
  118. }
  119. new type;
  120. if( sscanf( params, "i", type ) ) {
  121. return SendClientMessage( playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /setannouncement [type: faction (1), dev (2), admin (3)]" );
  122. }
  123. if( type == ANNOUNCE_DEV && PlayerInfo[playerid][pDev] <= 2 ) {
  124. return SendClientMessage( playerid, COLOR_GREY, "You are not a Development Manager." );
  125. }
  126. if( type == ANNOUNCE_ADMIN && PlayerInfo[playerid][pAdmin] <= 2 ) {
  127. return SendClientMessage( playerid, COLOR_GREY, "You are not a General Administrator." );
  128. }
  129. if( type == ANNOUNCE_FACTION && !PlayerInfo[playerid][pLeader] ) {
  130. return SendClientMessage( playerid, COLOR_GREY, "You are not a leader of a faction." );
  131. }
  132. //Exclude 0 (type ANNOUNCE_NONE)
  133. if( !( 0 < type < MAX_ANNOUNCE_TYPES ) ) {
  134. return SendClientMessage( playerid, COLOR_GREY, "You have entered an invalid announcement type." );
  135. }
  136. tempAnnounceType[playerid] = type;
  137. ShowPlayerDialog(playerid, DIALOG_SETANNOUNCEMENT, DIALOG_STYLE_INPUT, "Set Login Announcement", "Enter an announcement that'll appear on the login screen.", "Save", "Cancel" );
  138. }
  139. return 1;
  140. }
  141. new togAnnouncement[MAX_PLAYERS];
  142. CMD:announcement( playerid, params[] ) {
  143. if( !togAnnouncement[playerid] ) {
  144. ShowAnnouncementTextDraw( playerid );
  145. SendClientMessage( playerid, COLOR_YELLOW, "You have enabled the announcement. Use /announcement again to disable it." );
  146. }
  147. else {
  148. HideAnnouncementTextDraw( playerid );
  149. }
  150. togAnnouncement[playerid] = !togAnnouncement[playerid];
  151. return 1;
  152. }
  153. /*
  154. Hooks: TextDraw related
  155. */
  156. Hook:loginTD_OnPlayerDisconnect( playerid, reason ) {
  157. if( togAnnouncement[playerid] ) {
  158. HideAnnouncementTextDraw( playerid );
  159. }
  160. return 1;
  161. }
  162. Hook:loginTD_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  163. if( dialogid == DIALOG_SETANNOUNCEMENT ) {
  164. if( !response ) return 1;
  165. if( PlayerInfo[playerid][pLeader] || PlayerInfo[playerid][pDev] > 2 || PlayerInfo[playerid][pAdmin] > 2 ) {
  166. if( strlen( inputtext ) >= 1023 ) {
  167. return SendClientMessage( playerid, COLOR_GREY, "The announcement you have entered is too long, try shorten it." );
  168. }
  169. SetLoginAnnouncement( tempAnnounceType[playerid], inputtext );
  170. SetAnnouncementChar( GetPlayerSkin( playerid ) );
  171. SetAnnouncementAuthor( playerid );
  172. tempAnnounceType[playerid] = ANNOUNCE_NONE;
  173. SendClientMessage( playerid, COLOR_YELLOW, "You have set the login announcement. To view your changes use /announcement." );
  174. new report[144];
  175. format( report, 144, "[Announce] (%s): %s", PlayerICName( playerid ), inputtext );
  176. SendAdminMessage( COLOR_YELLOW, report );
  177. lastAnnounce = gettime();
  178. }
  179. }
  180. return 1;
  181. }
  182. Hook:loginTD_OnGameModeInit() {
  183. // Create the textdraws:
  184. Textdraw0 = TextDrawCreate(461.000000, 158.000000, "headbg");
  185. TextDrawBackgroundColor(Textdraw0, 255);
  186. TextDrawFont(Textdraw0, 1);
  187. TextDrawLetterSize(Textdraw0, 0.000000, 6.000000);
  188. TextDrawColor(Textdraw0, -1);
  189. TextDrawSetOutline(Textdraw0, 0);
  190. TextDrawSetProportional(Textdraw0, 1);
  191. TextDrawSetShadow(Textdraw0, 1);
  192. TextDrawUseBox(Textdraw0, 1);
  193. TextDrawBoxColor(Textdraw0, 192652880);
  194. TextDrawTextSize(Textdraw0, 181.000000, 0.000000);
  195. TextDrawSetSelectable(Textdraw0, 0);
  196. Textdraw1 = TextDrawCreate(461.000000, 163.000000, "bg");
  197. TextDrawBackgroundColor(Textdraw1, 255);
  198. TextDrawFont(Textdraw1, 1);
  199. TextDrawLetterSize(Textdraw1, 0.000000, 5.199999);
  200. TextDrawColor(Textdraw1, -1);
  201. TextDrawSetOutline(Textdraw1, 0);
  202. TextDrawSetProportional(Textdraw1, 1);
  203. TextDrawSetShadow(Textdraw1, 1);
  204. TextDrawUseBox(Textdraw1, 1);
  205. TextDrawBoxColor(Textdraw1, 255);
  206. TextDrawTextSize(Textdraw1, 181.000000, 0.000000);
  207. TextDrawSetSelectable(Textdraw1, 0);
  208. text_announcement_t = TextDrawCreate(206.000000, 152.000000, "Server Announcement");
  209. TextDrawBackgroundColor(text_announcement_t, 255);
  210. TextDrawFont(text_announcement_t, 2);
  211. TextDrawLetterSize(text_announcement_t, 0.210000, 1.200000);
  212. TextDrawColor(text_announcement_t, -1);
  213. TextDrawSetOutline(text_announcement_t, 0);
  214. TextDrawSetProportional(text_announcement_t, 1);
  215. TextDrawSetShadow(text_announcement_t, 1);
  216. TextDrawSetSelectable(text_announcement_t, 0);
  217. model = TextDrawCreate(238.000000, 141.000000, "model");
  218. TextDrawBackgroundColor(model, 192652800);
  219. TextDrawFont(model, 5);
  220. TextDrawLetterSize(model, 0.500000, 4.000000);
  221. TextDrawColor(model, -1);
  222. TextDrawSetOutline(model, 0);
  223. TextDrawSetProportional(model, 1);
  224. TextDrawSetShadow(model, 1);
  225. TextDrawUseBox(model, 1);
  226. TextDrawBoxColor(model, 192652800);
  227. TextDrawTextSize(model, -90.000000, 100.000000);
  228. TextDrawSetSelectable(model, 0);
  229. TextDrawSetPreviewModel( model, 299 );
  230. TextDrawSetPreviewRot(model, 0.0, 0.0, 45.0, 1.0);
  231. text_announcement = TextDrawCreate(210.000000, 171.000000, "I have nothing for you at the moment, check back later on! Although...you could press the Spawn button.");
  232. TextDrawBackgroundColor(text_announcement, 255);
  233. TextDrawFont(text_announcement, 1);
  234. TextDrawLetterSize(text_announcement, 0.170000, 0.899999);
  235. TextDrawColor(text_announcement, -1);
  236. TextDrawSetOutline(text_announcement, 0);
  237. TextDrawSetProportional(text_announcement, 1);
  238. TextDrawSetShadow(text_announcement, 1);
  239. TextDrawUseBox(text_announcement, 1);
  240. TextDrawBoxColor(text_announcement, 192652800);
  241. TextDrawTextSize(text_announcement, 450.000000, 0.000000);
  242. TextDrawSetSelectable(text_announcement, 0);
  243. author = TextDrawCreate(210.000000, 200.000000, "");
  244. TextDrawBackgroundColor(author, 255);
  245. TextDrawFont(author, 1);
  246. TextDrawLetterSize(author, 0.200000, 1.000000);
  247. TextDrawColor(author, -1);
  248. TextDrawSetOutline(author, 0);
  249. TextDrawSetProportional(author, 1);
  250. TextDrawSetShadow(author, 1);
  251. TextDrawSetSelectable(author, 0);
  252. //login & other stuff
  253. createCinematicTextDraw();
  254. createAdvertismentTextDraw();
  255. sarpHeading = TextDrawCreate(250.000000, 10.000000, "Project Roleplay");
  256. TextDrawBackgroundColor(sarpHeading, 255);
  257. TextDrawFont(sarpHeading, 0);
  258. TextDrawLetterSize(sarpHeading, 0.500000, 1.000000);
  259. TextDrawColor(sarpHeading, -1);
  260. TextDrawSetOutline(sarpHeading, 0);
  261. TextDrawSetProportional(sarpHeading, 1);
  262. TextDrawSetShadow(sarpHeading, 1);
  263. TextDrawSetSelectable(sarpHeading, 0);
  264. version = TextDrawCreate(294.000000, 21.000000, GAMEMODE_VERSION);
  265. TextDrawBackgroundColor(version, 255);
  266. TextDrawFont(version, 1);
  267. TextDrawLetterSize(version, 0.180000, 0.799998);
  268. TextDrawColor(version, -1);
  269. TextDrawSetOutline(version, 0);
  270. TextDrawSetProportional(version, 1);
  271. TextDrawSetShadow(version, 1);
  272. TextDrawSetSelectable(version, 0);
  273. return 1;
  274. }